From a0618cb5d79125f9fdcd308c7c29418afdc3da84 Mon Sep 17 00:00:00 2001 From: Adam Chidlow Date: Mon, 20 May 2024 13:52:26 +0800 Subject: [PATCH] fix: fix bug with resolving super/direct base method invocation --- examples/sizes.txt | 1 + src/puya/awst_build/eb/arc4/_utils.py | 27 +- src/puya/awst_build/eb/arc4/abi_call.py | 40 +- src/puya/awst_build/eb/contracts.py | 41 +- src/puya/awst_build/eb/subroutine.py | 20 +- src/puya/awst_build/subroutine.py | 42 +- src/puya/awst_build/utils.py | 33 + src/puya/ir/context.py | 28 +- test_cases/inheritance/grandparent.py | 6 +- .../out/ChildContract.approval.mir | 10 +- .../out/ChildContract.approval.teal | 8 +- .../inheritance/out/ChildContract.clear.mir | 2 +- .../inheritance/out/ChildContract.clear.teal | 2 +- .../out/ChildContract.destructured.ir | 8 +- .../inheritance/out/ChildContract.ssa.ir | 8 +- .../out/GrandParentContract.approval.mir | 4 +- .../out/GrandParentContract.approval.teal | 4 +- .../out/GrandParentContract.clear.mir | 2 +- .../out/GrandParentContract.clear.teal | 2 +- .../out/GrandParentContract.destructured.ir | 8 +- .../out/GrandParentContract.ssa.ir | 8 +- .../out/GreatGrandParentContract.approval.mir | 22 + .../GreatGrandParentContract.approval.teal | 23 + .../out/GreatGrandParentContract.clear.mir | 9 + .../out/GreatGrandParentContract.clear.teal | 7 + .../GreatGrandParentContract.destructured.ir | 16 + .../out/GreatGrandParentContract.ssa.ir | 16 + .../out/ParentContract.approval.mir | 10 +- .../out/ParentContract.approval.teal | 8 +- .../inheritance/out/ParentContract.clear.mir | 2 +- .../inheritance/out/ParentContract.clear.teal | 2 +- .../out/ParentContract.destructured.ir | 8 +- .../inheritance/out/ParentContract.ssa.ir | 8 +- test_cases/inheritance/out/child.awst | 2 +- test_cases/inheritance/out/grandparent.awst | 6 +- test_cases/inheritance/out/parent.awst | 2 +- .../out_O2/ChildContract.approval.teal | 8 +- .../out_O2/ChildContract.clear.teal | 2 +- .../out_O2/ChildContract.destructured.ir | 8 +- .../out_O2/GrandParentContract.approval.teal | 4 +- .../out_O2/GrandParentContract.clear.teal | 2 +- .../GrandParentContract.destructured.ir | 8 +- .../GreatGrandParentContract.approval.teal | 14 + .../GreatGrandParentContract.clear.teal | 5 + .../GreatGrandParentContract.destructured.ir | 16 + .../out_O2/ParentContract.approval.teal | 8 +- .../out_O2/ParentContract.clear.teal | 2 +- .../out_O2/ParentContract.destructured.ir | 8 +- .../ChildContract.approval.teal | 8 +- .../out_unoptimized/ChildContract.clear.teal | 2 +- .../ChildContract.destructured.ir | 8 +- .../GrandParentContract.approval.teal | 4 +- .../GrandParentContract.clear.teal | 2 +- .../GrandParentContract.destructured.ir | 8 +- .../GreatGrandParentContract.approval.teal | 23 + .../GreatGrandParentContract.clear.teal | 7 + .../GreatGrandParentContract.destructured.ir | 16 + .../ParentContract.approval.teal | 8 +- .../out_unoptimized/ParentContract.clear.teal | 2 +- .../ParentContract.destructured.ir | 8 +- test_cases/inheritance/puya.log | 136 +- .../typed_abi_call/out/Greeter.approval.mir | 1324 ++++++++--------- .../typed_abi_call/out/Greeter.approval.teal | 182 +-- .../typed_abi_call/out/Greeter.arc32.json | 4 +- .../typed_abi_call/out/Greeter.clear.mir | 4 +- .../typed_abi_call/out/Greeter.clear.teal | 2 +- .../out/Greeter.destructured.ir | 32 +- test_cases/typed_abi_call/out/Greeter.ssa.ir | 80 +- .../out/Greeter.ssa.opt_pass_1.ir | 32 +- .../out/Greeter.ssa.opt_pass_2.ir | 32 +- .../out/Greeter.ssa.opt_pass_3.ir | 32 +- .../out/Greeter.ssa.opt_pass_4.ir | 32 +- .../out/Greeter.ssa.opt_pass_5.ir | 32 +- .../out/Greeter.ssa.opt_pass_6.ir | 32 +- .../out/Greeter.ssa.opt_pass_7.ir | 32 +- .../out_O2/Greeter.destructured.ir | 32 +- .../out_unoptimized/Greeter.approval.teal | 288 ++-- .../out_unoptimized/Greeter.clear.teal | 2 +- .../out_unoptimized/Greeter.destructured.ir | 80 +- test_cases/typed_abi_call/puya.log | 248 +-- test_cases/typed_abi_call/typed_c2c.py | 1 + tests/test_expected_output/data.py | 19 +- .../test_expected_output/expected_errors.test | 4 +- 83 files changed, 1771 insertions(+), 1517 deletions(-) create mode 100644 test_cases/inheritance/out/GreatGrandParentContract.approval.mir create mode 100644 test_cases/inheritance/out/GreatGrandParentContract.approval.teal create mode 100644 test_cases/inheritance/out/GreatGrandParentContract.clear.mir create mode 100644 test_cases/inheritance/out/GreatGrandParentContract.clear.teal create mode 100644 test_cases/inheritance/out/GreatGrandParentContract.destructured.ir create mode 100644 test_cases/inheritance/out/GreatGrandParentContract.ssa.ir create mode 100644 test_cases/inheritance/out_O2/GreatGrandParentContract.approval.teal create mode 100644 test_cases/inheritance/out_O2/GreatGrandParentContract.clear.teal create mode 100644 test_cases/inheritance/out_O2/GreatGrandParentContract.destructured.ir create mode 100644 test_cases/inheritance/out_unoptimized/GreatGrandParentContract.approval.teal create mode 100644 test_cases/inheritance/out_unoptimized/GreatGrandParentContract.clear.teal create mode 100644 test_cases/inheritance/out_unoptimized/GreatGrandParentContract.destructured.ir diff --git a/examples/sizes.txt b/examples/sizes.txt index 36679746d7..c02513aff4 100644 --- a/examples/sizes.txt +++ b/examples/sizes.txt @@ -45,6 +45,7 @@ hello_world_arc4/HelloWorld 102 88 14 88 0 inheritance/Child 88 88 0 88 0 inheritance/GrandParent 51 51 0 51 0 + inheritance/GreatGrandParent 51 51 0 51 0 inheritance/Parent 89 89 0 89 0 inner_transactions 1245 1193 52 1193 0 inner_transactions/ArrayAccess 212 195 17 195 0 diff --git a/src/puya/awst_build/eb/arc4/_utils.py b/src/puya/awst_build/eb/arc4/_utils.py index 9deeb0d991..fe78fa54db 100644 --- a/src/puya/awst_build/eb/arc4/_utils.py +++ b/src/puya/awst_build/eb/arc4/_utils.py @@ -5,8 +5,6 @@ import typing import attrs -import mypy.nodes -import mypy.types from puya import arc4_util, log from puya.awst import ( @@ -14,16 +12,15 @@ wtypes, ) from puya.awst.nodes import DecimalConstant, Expression, Literal -from puya.awst_build import constants, pytypes -from puya.awst_build.arc4_utils import arc4_encode, get_arc4_method_config, get_func_types +from puya.awst_build import pytypes +from puya.awst_build.arc4_utils import arc4_encode from puya.awst_build.eb.base import ExpressionBuilder -from puya.awst_build.utils import convert_literal, get_decorators_by_fullname +from puya.awst_build.utils import convert_literal from puya.errors import CodeError if typing.TYPE_CHECKING: from collections.abc import Sequence - from puya.awst_build.context import ASTConversionModuleContext from puya.parse import SourceLocation logger = log.get_logger(__name__) @@ -147,24 +144,6 @@ def method_selector(self) -> str: return f"{self.method_name}({args}){arc4_util.pytype_to_arc4(return_type)}" -def get_arc4_signature( - context: ASTConversionModuleContext, - type_info: mypy.nodes.TypeInfo, - member_name: str, - location: SourceLocation, -) -> ARC4Signature: - dec = type_info.get_method(member_name) - if isinstance(dec, mypy.nodes.Decorator): - decorators = get_decorators_by_fullname(context, dec) - abimethod_dec = decorators.get(constants.ABIMETHOD_DECORATOR) - if abimethod_dec is not None: - func_def = dec.func - arc4_method_config = get_arc4_method_config(context, abimethod_dec, func_def) - *arg_types, return_type = get_func_types(context, func_def, location).values() - return ARC4Signature(arc4_method_config.name, arg_types, return_type) - raise CodeError(f"'{type_info.fullname}.{member_name}' is not a valid ARC4 method", location) - - def get_arc4_args_and_signature( method_sig: str, arg_typs: Sequence[pytypes.PyType], diff --git a/src/puya/awst_build/eb/arc4/abi_call.py b/src/puya/awst_build/eb/arc4/abi_call.py index 64255edbfd..a8e2041c15 100644 --- a/src/puya/awst_build/eb/arc4/abi_call.py +++ b/src/puya/awst_build/eb/arc4/abi_call.py @@ -27,12 +27,12 @@ UInt64Constant, ) from puya.awst_build import constants, pytypes +from puya.awst_build.arc4_utils import get_arc4_method_config, get_func_types from puya.awst_build.eb.arc4._utils import ( ARC4Signature, arc4_tuple_from_items, expect_arc4_operand_wtype, get_arc4_args_and_signature, - get_arc4_signature, ) from puya.awst_build.eb.arc4.base import ARC4FromLogBuilder from puya.awst_build.eb.base import ExpressionBuilder, IntermediateExpressionBuilder @@ -40,6 +40,7 @@ from puya.awst_build.eb.transaction.fields import get_field_python_name from puya.awst_build.eb.transaction.inner_params import get_field_expr from puya.awst_build.eb.var_factory import var_expression +from puya.awst_build.utils import get_decorators_by_fullname, resolve_method_from_type_info from puya.errors import CodeError, InternalError if typing.TYPE_CHECKING: @@ -97,21 +98,22 @@ def call( @typing.override def member_access(self, name: str, location: SourceLocation) -> ExpressionBuilder | Literal: - return ARC4ClientMethodExpressionBuilder(self.context, self.type_info, name, location) + func_or_dec = resolve_method_from_type_info(self.type_info, name, location) + if func_or_dec is None: + raise CodeError(f"Unknown member {name!r} of {self.type_info.fullname!r}", location) + return ARC4ClientMethodExpressionBuilder(self.context, func_or_dec, location) class ARC4ClientMethodExpressionBuilder(IntermediateExpressionBuilder): def __init__( self, - context: ASTConversionModuleContext, - type_info: mypy.nodes.TypeInfo, - name: str, + context: ASTConversionModuleContext, # TODO: yeet me + node: mypy.nodes.FuncBase | mypy.nodes.Decorator, location: SourceLocation, ): super().__init__(location) self.context = context - self.type_info = type_info - self.name = name + self.node = node @typing.override def call( @@ -197,10 +199,10 @@ def _abi_call( f"does not match provided method selector: '{method_str}'", method.source_location, ) - case ( - ARC4ClientMethodExpressionBuilder() | BaseClassSubroutineInvokerExpressionBuilder() - ) as eb: # TODO: can probably use func type from arg_typs now - signature = get_arc4_signature(eb.context, eb.type_info, eb.name, location) + case ARC4ClientMethodExpressionBuilder( + context=context, node=node + ) | BaseClassSubroutineInvokerExpressionBuilder(context=context, node=node): + signature = _get_arc4_signature(context, node, location) abi_return_type = signature.return_type num_args = len(abi_call_expr.abi_args) num_types = len(signature.arg_types) @@ -230,6 +232,22 @@ def _abi_call( ) +def _get_arc4_signature( + context: ASTConversionModuleContext, + func_or_dec: mypy.nodes.FuncBase | mypy.nodes.Decorator, + location: SourceLocation, +) -> ARC4Signature: + if isinstance(func_or_dec, mypy.nodes.Decorator): + decorators = get_decorators_by_fullname(context, func_or_dec) + abimethod_dec = decorators.get(constants.ABIMETHOD_DECORATOR) + if abimethod_dec is not None: + func_def = func_or_dec.func + arc4_method_config = get_arc4_method_config(context, abimethod_dec, func_def) + *arg_types, return_type = get_func_types(context, func_def, location).values() + return ARC4Signature(arc4_method_config.name, arg_types, return_type) + raise CodeError(f"{func_or_dec.fullname!r} is not a valid ARC4 method", location) + + def _is_typed(typ: pytypes.PyType | None) -> typing.TypeGuard[pytypes.PyType]: return typ not in (None, pytypes.NoneType) diff --git a/src/puya/awst_build/eb/contracts.py b/src/puya/awst_build/eb/contracts.py index 7d649b323f..0e86287a72 100644 --- a/src/puya/awst_build/eb/contracts.py +++ b/src/puya/awst_build/eb/contracts.py @@ -5,6 +5,7 @@ from puya.awst import wtypes from puya.awst.nodes import ( AppStateExpression, + BaseClassSubroutineTarget, BoxProxyField, InstanceSubroutineTarget, ) @@ -24,7 +25,7 @@ SubroutineInvokerExpressionBuilder, ) from puya.awst_build.eb.var_factory import var_expression -from puya.awst_build.utils import qualified_class_name +from puya.awst_build.utils import qualified_class_name, resolve_method_from_type_info from puya.errors import CodeError, InternalError from puya.parse import SourceLocation @@ -41,10 +42,15 @@ def __init__( super().__init__(location) self.context = context self._type_info = type_info + self._cref = qualified_class_name(type_info) def member_access(self, name: str, location: SourceLocation) -> ExpressionBuilder: + func_or_dec = resolve_method_from_type_info(self._type_info, name, location) + if func_or_dec is None: + raise CodeError(f"Unknown member {name!r} of {self._type_info.fullname!r}", location) + target = BaseClassSubroutineTarget(self._cref, name) return BaseClassSubroutineInvokerExpressionBuilder( - context=self.context, type_info=self._type_info, name=name, location=location + context=self.context, target=target, node=func_or_dec, location=location ) @@ -64,26 +70,19 @@ def member_access(self, name: str, location: SourceLocation) -> ExpressionBuilde if state_decl is not None: return _builder_for_storage_access(state_decl, location) - sym_node = self._type_info.get(name) - if sym_node is None or sym_node.node is None: - raise CodeError(f"Unknown member: {name}", location) - match sym_node.node: - # matching types taken from mypy.nodes.TypeInfo.get_method - case mypy.nodes.FuncBase() | mypy.nodes.Decorator() as func_or_dec: - func_type = func_or_dec.type - if not isinstance(func_type, mypy.types.CallableType): - raise CodeError(f"Couldn't resolve signature of {name!r}", location) + func_or_dec = resolve_method_from_type_info(self._type_info, name, location) + if func_or_dec is None: + raise CodeError(f"Unknown member {name!r} of {self._type_info.fullname!r}", location) + func_type = func_or_dec.type + if not isinstance(func_type, mypy.types.CallableType): + raise CodeError(f"Couldn't resolve signature of {name!r}", location) - return SubroutineInvokerExpressionBuilder( - context=self.context, - target=InstanceSubroutineTarget(name=name), - location=location, - func_type=func_type, - ) - case _: - raise CodeError( - f"Non-storage member {name!r} has unsupported function type", location - ) + return SubroutineInvokerExpressionBuilder( + context=self.context, + target=InstanceSubroutineTarget(name=name), + location=location, + func_type=func_type, + ) def _builder_for_storage_access( diff --git a/src/puya/awst_build/eb/subroutine.py b/src/puya/awst_build/eb/subroutine.py index f5bd9a8a14..f52320d1a4 100644 --- a/src/puya/awst_build/eb/subroutine.py +++ b/src/puya/awst_build/eb/subroutine.py @@ -16,7 +16,7 @@ from puya.awst_build.context import ASTConversionModuleContext from puya.awst_build.eb.base import ExpressionBuilder, IntermediateExpressionBuilder from puya.awst_build.eb.var_factory import var_expression -from puya.awst_build.utils import qualified_class_name, require_expression_builder +from puya.awst_build.utils import require_expression_builder from puya.errors import CodeError from puya.parse import SourceLocation @@ -78,22 +78,14 @@ class BaseClassSubroutineInvokerExpressionBuilder(SubroutineInvokerExpressionBui def __init__( self, context: ASTConversionModuleContext, - type_info: mypy.nodes.TypeInfo, - name: str, + target: BaseClassSubroutineTarget, location: SourceLocation, + node: mypy.nodes.FuncBase | mypy.nodes.Decorator, ): - self.name = name - self.type_info = type_info - cref = qualified_class_name(type_info) - - func_or_dec = type_info.get_method(name) - if func_or_dec is None: - raise CodeError(f"Unknown member: {name}", location) - func_type = func_or_dec.type + self.node = node + func_type = node.type if not isinstance(func_type, mypy.types.CallableType): - raise CodeError(f"Couldn't resolve signature of {name!r}", location) - - target = BaseClassSubroutineTarget(cref, name) + raise CodeError(f"Couldn't resolve signature of {node.fullname!r}", location) super().__init__(context, target, location, func_type) def call( diff --git a/src/puya/awst_build/subroutine.py b/src/puya/awst_build/subroutine.py index dca11ccb96..4922ea47d9 100644 --- a/src/puya/awst_build/subroutine.py +++ b/src/puya/awst_build/subroutine.py @@ -85,6 +85,7 @@ iterate_user_bases, qualified_class_name, require_expression_builder, + resolve_method_from_type_info, ) from puya.errors import CodeError, InternalError, PuyaError from puya.models import ARC4MethodConfig @@ -1211,33 +1212,22 @@ def visit_super_expr(self, super_expr: mypy.nodes.SuperExpr) -> ExpressionBuilde self._location(super_expr.call), ) for base in iterate_user_bases(self.contract_method_info.type_info): - base_sym = base.get(super_expr.name) - if base_sym is None: + base_method = resolve_method_from_type_info(base, super_expr.name, super_loc) + if base_method is None: continue - match base_sym.node: - case None: - raise CodeError( - f"Unable to resolve type of member {super_expr.name!r}", super_loc - ) - # matching types taken from mypy.nodes.TypeInfo.get_method - case (mypy.nodes.FuncBase() | mypy.nodes.Decorator()) as base_method: - cref = qualified_class_name(base) - if not isinstance(base_method.type, mypy.types.CallableType): - # this shouldn't be hit unless there's typing.overload or weird - # decorators going on, both of which we don't allow - raise CodeError( - f"Unable to retrieve type of {cref.full_name}.{super_expr.name}", - super_loc, - ) - return SubroutineInvokerExpressionBuilder( - context=self.context, - target=BaseClassSubroutineTarget(base_class=cref, name=super_expr.name), - location=super_loc, - func_type=base_method.type, - ) - case _: - raise CodeError("super() is only supported for method calls", super_loc) - + if not isinstance(base_method.type, mypy.types.CallableType): + # this shouldn't be hit unless there's typing.overload or weird + # decorators going on, both of which we don't allow + raise CodeError(f"Unable to retrieve type of {base_method.fullname!r}", super_loc) + super_target = BaseClassSubroutineTarget( + base_class=qualified_class_name(base), name=super_expr.name + ) + return SubroutineInvokerExpressionBuilder( + context=self.context, + target=super_target, + func_type=base_method.type, + location=super_loc, + ) raise CodeError( f"Unable to locate method {super_expr.name}" f" in bases of {self.contract_method_info.cref.full_name}", diff --git a/src/puya/awst_build/utils.py b/src/puya/awst_build/utils.py index a0dbea56b4..42b6d2bdf8 100644 --- a/src/puya/awst_build/utils.py +++ b/src/puya/awst_build/utils.py @@ -394,3 +394,36 @@ def eval_slice_component( source_location=location, ) ) + + +def resolve_method_from_type_info( + type_info: mypy.nodes.TypeInfo, name: str, location: SourceLocation +) -> mypy.nodes.FuncBase | mypy.nodes.Decorator | None: + """Get a function member from TypeInfo, or return None. + + Differs from TypeInfo.get_method() if there are conflicting definitions of name, + one being a method and another being an attribute. + This is important for semantic compatibility. + + If the found member is not a function, an exception is raised. + Also raises if the SymbolTableNode is unresolved (it shouldn't be once we can see it). + """ + member = type_info.get(name) + if member is None: + return None + match member.node: + case None: + raise InternalError( + "mypy cross reference remains unresolved:" + f" member {name!r} of {type_info.fullname!r}", + location, + ) + # matching types taken from mypy.nodes.TypeInfo.get_method + case mypy.nodes.FuncBase() | mypy.nodes.Decorator() as func_or_dec: + return func_or_dec + case other_node: + logger.debug( + f"Non-function member: type={type(other_node).__name__!r}, value={other_node}", + location=location, + ) + raise CodeError(f"unsupported reference to non-function member {name!r}", location) diff --git a/src/puya/ir/context.py b/src/puya/ir/context.py index 4d428f2706..7970680f17 100644 --- a/src/puya/ir/context.py +++ b/src/puya/ir/context.py @@ -80,9 +80,10 @@ def resolve_function_reference( ) -> awst_nodes.Function: try: match target: - case awst_nodes.BaseClassSubroutineTarget(base_class=cref, name=func_name): - contract = self.resolve_contract_reference(cref) - func: awst_nodes.Node = contract.symtable[func_name] + case awst_nodes.BaseClassSubroutineTarget(base_class=base_cref, name=func_name): + func: awst_nodes.Node = self._resolve_contract_attribute( + func_name, source_location, start=base_cref + ) case awst_nodes.InstanceSubroutineTarget(name=func_name): func = self._resolve_contract_attribute(func_name, source_location) case awst_nodes.FreeSubroutineTarget(module_name=module_name, name=func_name): @@ -116,21 +117,32 @@ def resolve_state( # TODO: yeet me return node def _resolve_contract_attribute( - self, name: str, source_location: SourceLocation + self, + name: str, + source_location: SourceLocation, + *, + start: awst_nodes.ContractReference | None = None, ) -> awst_nodes.ContractMethod | awst_nodes.AppStorageDefinition: - if self.contract is None: + current = self.contract + if current is None: raise InternalError( f"Cannot resolve contract member {name} as there is no current contract", source_location, ) + if start is None: + start_contract = current + else: + if start not in current.bases: + raise CodeError("Call to base method outside current hierarchy", source_location) + start_contract = self.resolve_contract_reference(start) for contract in ( - self.contract, - *[self.resolve_contract_reference(cref) for cref in self.contract.bases], + start_contract, + *[self.resolve_contract_reference(cref) for cref in start_contract.bases], ): with contextlib.suppress(KeyError): return contract.symtable[name] raise CodeError( - f"Unresolvable attribute '{name}' of {self.contract.full_name}", + f"Unresolvable attribute '{name}' of {start_contract.full_name}", source_location, ) diff --git a/test_cases/inheritance/grandparent.py b/test_cases/inheritance/grandparent.py index b1fe07fb14..768c304dd3 100644 --- a/test_cases/inheritance/grandparent.py +++ b/test_cases/inheritance/grandparent.py @@ -1,7 +1,7 @@ import algopy -class GrandParentContract(algopy.Contract): +class GreatGrandParentContract(algopy.Contract): def approval_program(self) -> bool: return self.method() @@ -12,3 +12,7 @@ def clear_state_program(self) -> bool: def method(self) -> bool: algopy.log("GrandParentContract.method called") return True + + +class GrandParentContract(GreatGrandParentContract): + pass diff --git a/test_cases/inheritance/out/ChildContract.approval.mir b/test_cases/inheritance/out/ChildContract.approval.mir index 1e43e097dd..954ec16ec8 100644 --- a/test_cases/inheritance/out/ChildContract.approval.mir +++ b/test_cases/inheritance/out/ChildContract.approval.mir @@ -2,7 +2,7 @@ #pragma version 10 -// test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> uint64: +// test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> uint64: main_block@0: callsub method // {method} self.method() inheritance/grandparent.py:6 // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 self.method() inheritance/grandparent.py:6 @@ -17,17 +17,17 @@ method: method_block@0: byte "ChildContract.method called" // "ChildContract.method called" "ChildContract.method called" inheritance/child.py:10 log // algopy.log("ChildContract.method called") inheritance/child.py:10 - callsub GrandParentContract.method // {GrandParentContract.method} GrandParentContract.method(self) inheritance/child.py:11 + callsub GreatGrandParentContract.method // {GreatGrandParentContract.method} GrandParentContract.method(self) inheritance/child.py:11 // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 GrandParentContract.method(self) inheritance/child.py:11 // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 return GrandParentContract.method(self) inheritance/child.py:11 retsub // tmp%0#0 return GrandParentContract.method(self) inheritance/child.py:11 -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: -GrandParentContract.method: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +GreatGrandParentContract.method: proto 0 1 // @algopy.subroutine\ndef method(self) -> bool: inheritance/grandparent.py:11-12 -GrandParentContract.method_block@0: +GreatGrandParentContract.method_block@0: byte "GrandParentContract.method called" // "GrandParentContract.method called" "GrandParentContract.method called" inheritance/grandparent.py:13 log // algopy.log("GrandParentContract.method called") inheritance/grandparent.py:13 int 1 // 1 True inheritance/grandparent.py:14 diff --git a/test_cases/inheritance/out/ChildContract.approval.teal b/test_cases/inheritance/out/ChildContract.approval.teal index 3dfb651a65..db134acb37 100644 --- a/test_cases/inheritance/out/ChildContract.approval.teal +++ b/test_cases/inheritance/out/ChildContract.approval.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.approval_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: // inheritance/grandparent.py:6 // return self.method() callsub method @@ -19,12 +19,12 @@ method: log // inheritance/child.py:11 // return GrandParentContract.method(self) - callsub GrandParentContract.method + callsub GreatGrandParentContract.method retsub -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: -GrandParentContract.method: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +GreatGrandParentContract.method: // inheritance/grandparent.py:11-12 // @algopy.subroutine // def method(self) -> bool: diff --git a/test_cases/inheritance/out/ChildContract.clear.mir b/test_cases/inheritance/out/ChildContract.clear.mir index 7ec00c3308..bf1db7c2c5 100644 --- a/test_cases/inheritance/out/ChildContract.clear.mir +++ b/test_cases/inheritance/out/ChildContract.clear.mir @@ -2,7 +2,7 @@ #pragma version 10 -// test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> uint64: +// test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> uint64: main_block@0: int 1 // 1 True inheritance/grandparent.py:9 return // return True inheritance/grandparent.py:9 diff --git a/test_cases/inheritance/out/ChildContract.clear.teal b/test_cases/inheritance/out/ChildContract.clear.teal index 1ec4c81182..d17314a05e 100644 --- a/test_cases/inheritance/out/ChildContract.clear.teal +++ b/test_cases/inheritance/out/ChildContract.clear.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.clear_state_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: // inheritance/grandparent.py:9 // return True int 1 diff --git a/test_cases/inheritance/out/ChildContract.destructured.ir b/test_cases/inheritance/out/ChildContract.destructured.ir index 24b76b224e..780b00e0ba 100644 --- a/test_cases/inheritance/out/ChildContract.destructured.ir +++ b/test_cases/inheritance/out/ChildContract.destructured.ir @@ -1,6 +1,6 @@ contract test_cases.inheritance.child.ChildContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 let tmp%0#0: bool = test_cases.inheritance.child.ChildContract.method() return tmp%0#0 @@ -8,15 +8,15 @@ contract test_cases.inheritance.child.ChildContract: subroutine test_cases.inheritance.child.ChildContract.method() -> bool: block@0: // L8 (log "ChildContract.method called") - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out/ChildContract.ssa.ir b/test_cases/inheritance/out/ChildContract.ssa.ir index 24b76b224e..780b00e0ba 100644 --- a/test_cases/inheritance/out/ChildContract.ssa.ir +++ b/test_cases/inheritance/out/ChildContract.ssa.ir @@ -1,6 +1,6 @@ contract test_cases.inheritance.child.ChildContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 let tmp%0#0: bool = test_cases.inheritance.child.ChildContract.method() return tmp%0#0 @@ -8,15 +8,15 @@ contract test_cases.inheritance.child.ChildContract: subroutine test_cases.inheritance.child.ChildContract.method() -> bool: block@0: // L8 (log "ChildContract.method called") - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out/GrandParentContract.approval.mir b/test_cases/inheritance/out/GrandParentContract.approval.mir index df2dc6c103..87446e4679 100644 --- a/test_cases/inheritance/out/GrandParentContract.approval.mir +++ b/test_cases/inheritance/out/GrandParentContract.approval.mir @@ -2,7 +2,7 @@ #pragma version 10 -// test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> uint64: +// test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> uint64: main_block@0: callsub method // {method} self.method() inheritance/grandparent.py:6 // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 self.method() inheritance/grandparent.py:6 @@ -10,7 +10,7 @@ main_block@0: return // return self.method() inheritance/grandparent.py:6 -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: method: proto 0 1 // @algopy.subroutine\ndef method(self) -> bool: inheritance/grandparent.py:11-12 diff --git a/test_cases/inheritance/out/GrandParentContract.approval.teal b/test_cases/inheritance/out/GrandParentContract.approval.teal index 5f6d30f826..38a60d2fb4 100644 --- a/test_cases/inheritance/out/GrandParentContract.approval.teal +++ b/test_cases/inheritance/out/GrandParentContract.approval.teal @@ -1,13 +1,13 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.approval_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: // inheritance/grandparent.py:6 // return self.method() callsub method return -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: method: // inheritance/grandparent.py:11-12 // @algopy.subroutine diff --git a/test_cases/inheritance/out/GrandParentContract.clear.mir b/test_cases/inheritance/out/GrandParentContract.clear.mir index 7ec00c3308..bf1db7c2c5 100644 --- a/test_cases/inheritance/out/GrandParentContract.clear.mir +++ b/test_cases/inheritance/out/GrandParentContract.clear.mir @@ -2,7 +2,7 @@ #pragma version 10 -// test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> uint64: +// test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> uint64: main_block@0: int 1 // 1 True inheritance/grandparent.py:9 return // return True inheritance/grandparent.py:9 diff --git a/test_cases/inheritance/out/GrandParentContract.clear.teal b/test_cases/inheritance/out/GrandParentContract.clear.teal index 1ec4c81182..d17314a05e 100644 --- a/test_cases/inheritance/out/GrandParentContract.clear.teal +++ b/test_cases/inheritance/out/GrandParentContract.clear.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.clear_state_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: // inheritance/grandparent.py:9 // return True int 1 diff --git a/test_cases/inheritance/out/GrandParentContract.destructured.ir b/test_cases/inheritance/out/GrandParentContract.destructured.ir index 658315d7cd..333e72a489 100644 --- a/test_cases/inheritance/out/GrandParentContract.destructured.ir +++ b/test_cases/inheritance/out/GrandParentContract.destructured.ir @@ -1,16 +1,16 @@ contract test_cases.inheritance.grandparent.GrandParentContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out/GrandParentContract.ssa.ir b/test_cases/inheritance/out/GrandParentContract.ssa.ir index 658315d7cd..333e72a489 100644 --- a/test_cases/inheritance/out/GrandParentContract.ssa.ir +++ b/test_cases/inheritance/out/GrandParentContract.ssa.ir @@ -1,16 +1,16 @@ contract test_cases.inheritance.grandparent.GrandParentContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out/GreatGrandParentContract.approval.mir b/test_cases/inheritance/out/GreatGrandParentContract.approval.mir new file mode 100644 index 0000000000..87446e4679 --- /dev/null +++ b/test_cases/inheritance/out/GreatGrandParentContract.approval.mir @@ -0,0 +1,22 @@ +// Op // Op Description Stack (out) X stack Source code Source line + +#pragma version 10 + +// test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> uint64: +main_block@0: + callsub method // {method} self.method() inheritance/grandparent.py:6 + // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 self.method() inheritance/grandparent.py:6 + // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 return self.method() inheritance/grandparent.py:6 + return // return self.method() inheritance/grandparent.py:6 + + +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +method: + proto 0 1 // @algopy.subroutine\ndef method(self) -> bool: inheritance/grandparent.py:11-12 + +method_block@0: + byte "GrandParentContract.method called" // "GrandParentContract.method called" "GrandParentContract.method called" inheritance/grandparent.py:13 + log // algopy.log("GrandParentContract.method called") inheritance/grandparent.py:13 + int 1 // 1 True inheritance/grandparent.py:14 + retsub // 1 return True inheritance/grandparent.py:14 + diff --git a/test_cases/inheritance/out/GreatGrandParentContract.approval.teal b/test_cases/inheritance/out/GreatGrandParentContract.approval.teal new file mode 100644 index 0000000000..38a60d2fb4 --- /dev/null +++ b/test_cases/inheritance/out/GreatGrandParentContract.approval.teal @@ -0,0 +1,23 @@ +#pragma version 10 + +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: + // inheritance/grandparent.py:6 + // return self.method() + callsub method + return + + +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +method: + // inheritance/grandparent.py:11-12 + // @algopy.subroutine + // def method(self) -> bool: + proto 0 1 + // inheritance/grandparent.py:13 + // algopy.log("GrandParentContract.method called") + byte "GrandParentContract.method called" + log + // inheritance/grandparent.py:14 + // return True + int 1 + retsub diff --git a/test_cases/inheritance/out/GreatGrandParentContract.clear.mir b/test_cases/inheritance/out/GreatGrandParentContract.clear.mir new file mode 100644 index 0000000000..bf1db7c2c5 --- /dev/null +++ b/test_cases/inheritance/out/GreatGrandParentContract.clear.mir @@ -0,0 +1,9 @@ +// Op // Stack (out) Source code Source line + +#pragma version 10 + +// test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> uint64: +main_block@0: + int 1 // 1 True inheritance/grandparent.py:9 + return // return True inheritance/grandparent.py:9 + diff --git a/test_cases/inheritance/out/GreatGrandParentContract.clear.teal b/test_cases/inheritance/out/GreatGrandParentContract.clear.teal new file mode 100644 index 0000000000..d17314a05e --- /dev/null +++ b/test_cases/inheritance/out/GreatGrandParentContract.clear.teal @@ -0,0 +1,7 @@ +#pragma version 10 + +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: + // inheritance/grandparent.py:9 + // return True + int 1 + return diff --git a/test_cases/inheritance/out/GreatGrandParentContract.destructured.ir b/test_cases/inheritance/out/GreatGrandParentContract.destructured.ir new file mode 100644 index 0000000000..9fe4204147 --- /dev/null +++ b/test_cases/inheritance/out/GreatGrandParentContract.destructured.ir @@ -0,0 +1,16 @@ +contract test_cases.inheritance.grandparent.GreatGrandParentContract: + program approval: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: + block@0: // L5 + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() + return tmp%0#0 + + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: + block@0: // L11 + (log "GrandParentContract.method called") + return 1u + + program clear-state: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: + block@0: // L8 + return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out/GreatGrandParentContract.ssa.ir b/test_cases/inheritance/out/GreatGrandParentContract.ssa.ir new file mode 100644 index 0000000000..9fe4204147 --- /dev/null +++ b/test_cases/inheritance/out/GreatGrandParentContract.ssa.ir @@ -0,0 +1,16 @@ +contract test_cases.inheritance.grandparent.GreatGrandParentContract: + program approval: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: + block@0: // L5 + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() + return tmp%0#0 + + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: + block@0: // L11 + (log "GrandParentContract.method called") + return 1u + + program clear-state: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: + block@0: // L8 + return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out/ParentContract.approval.mir b/test_cases/inheritance/out/ParentContract.approval.mir index 6bbff33e9a..9d1b197a74 100644 --- a/test_cases/inheritance/out/ParentContract.approval.mir +++ b/test_cases/inheritance/out/ParentContract.approval.mir @@ -2,7 +2,7 @@ #pragma version 10 -// test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> uint64: +// test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> uint64: main_block@0: callsub method // {method} self.method() inheritance/grandparent.py:6 // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 self.method() inheritance/grandparent.py:6 @@ -17,17 +17,17 @@ method: method_block@0: byte "ParentContract.method called" // "ParentContract.method called" "ParentContract.method called" inheritance/parent.py:9 log // algopy.log("ParentContract.method called") inheritance/parent.py:9 - callsub GrandParentContract.method // {GrandParentContract.method} super().method() inheritance/parent.py:10 + callsub GreatGrandParentContract.method // {GreatGrandParentContract.method} super().method() inheritance/parent.py:10 // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 super().method() inheritance/parent.py:10 // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 return super().method() inheritance/parent.py:10 retsub // tmp%0#0 return super().method() inheritance/parent.py:10 -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: -GrandParentContract.method: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +GreatGrandParentContract.method: proto 0 1 // @algopy.subroutine\ndef method(self) -> bool: inheritance/grandparent.py:11-12 -GrandParentContract.method_block@0: +GreatGrandParentContract.method_block@0: byte "GrandParentContract.method called" // "GrandParentContract.method called" "GrandParentContract.method called" inheritance/grandparent.py:13 log // algopy.log("GrandParentContract.method called") inheritance/grandparent.py:13 int 1 // 1 True inheritance/grandparent.py:14 diff --git a/test_cases/inheritance/out/ParentContract.approval.teal b/test_cases/inheritance/out/ParentContract.approval.teal index ea96166cf2..4075efbd10 100644 --- a/test_cases/inheritance/out/ParentContract.approval.teal +++ b/test_cases/inheritance/out/ParentContract.approval.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.approval_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: // inheritance/grandparent.py:6 // return self.method() callsub method @@ -19,12 +19,12 @@ method: log // inheritance/parent.py:10 // return super().method() - callsub GrandParentContract.method + callsub GreatGrandParentContract.method retsub -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: -GrandParentContract.method: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +GreatGrandParentContract.method: // inheritance/grandparent.py:11-12 // @algopy.subroutine // def method(self) -> bool: diff --git a/test_cases/inheritance/out/ParentContract.clear.mir b/test_cases/inheritance/out/ParentContract.clear.mir index 7ec00c3308..bf1db7c2c5 100644 --- a/test_cases/inheritance/out/ParentContract.clear.mir +++ b/test_cases/inheritance/out/ParentContract.clear.mir @@ -2,7 +2,7 @@ #pragma version 10 -// test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> uint64: +// test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> uint64: main_block@0: int 1 // 1 True inheritance/grandparent.py:9 return // return True inheritance/grandparent.py:9 diff --git a/test_cases/inheritance/out/ParentContract.clear.teal b/test_cases/inheritance/out/ParentContract.clear.teal index 1ec4c81182..d17314a05e 100644 --- a/test_cases/inheritance/out/ParentContract.clear.teal +++ b/test_cases/inheritance/out/ParentContract.clear.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.clear_state_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: // inheritance/grandparent.py:9 // return True int 1 diff --git a/test_cases/inheritance/out/ParentContract.destructured.ir b/test_cases/inheritance/out/ParentContract.destructured.ir index d4b37f6e0d..125300dd63 100644 --- a/test_cases/inheritance/out/ParentContract.destructured.ir +++ b/test_cases/inheritance/out/ParentContract.destructured.ir @@ -1,6 +1,6 @@ contract test_cases.inheritance.parent.ParentContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 let tmp%0#0: bool = test_cases.inheritance.parent.ParentContract.method() return tmp%0#0 @@ -8,15 +8,15 @@ contract test_cases.inheritance.parent.ParentContract: subroutine test_cases.inheritance.parent.ParentContract.method() -> bool: block@0: // L7 (log "ParentContract.method called") - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out/ParentContract.ssa.ir b/test_cases/inheritance/out/ParentContract.ssa.ir index d4b37f6e0d..125300dd63 100644 --- a/test_cases/inheritance/out/ParentContract.ssa.ir +++ b/test_cases/inheritance/out/ParentContract.ssa.ir @@ -1,6 +1,6 @@ contract test_cases.inheritance.parent.ParentContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 let tmp%0#0: bool = test_cases.inheritance.parent.ParentContract.method() return tmp%0#0 @@ -8,15 +8,15 @@ contract test_cases.inheritance.parent.ParentContract: subroutine test_cases.inheritance.parent.ParentContract.method() -> bool: block@0: // L7 (log "ParentContract.method called") - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out/child.awst b/test_cases/inheritance/out/child.awst index d25c7be550..e592dbcbed 100644 --- a/test_cases/inheritance/out/child.awst +++ b/test_cases/inheritance/out/child.awst @@ -1,4 +1,4 @@ -contract ChildContract extends (test_cases.inheritance.parent::ParentContract, test_cases.inheritance.grandparent::GrandParentContract) +contract ChildContract extends (test_cases.inheritance.parent::ParentContract, test_cases.inheritance.grandparent::GrandParentContract, test_cases.inheritance.grandparent::GreatGrandParentContract) { subroutine method(): bool { diff --git a/test_cases/inheritance/out/grandparent.awst b/test_cases/inheritance/out/grandparent.awst index 3576482bb0..1b116880fa 100644 --- a/test_cases/inheritance/out/grandparent.awst +++ b/test_cases/inheritance/out/grandparent.awst @@ -1,4 +1,4 @@ -contract GrandParentContract +contract GreatGrandParentContract { approval_program(): bool { @@ -15,4 +15,8 @@ contract GrandParentContract log('GrandParentContract.method called') return true } +} + +contract GrandParentContract extends (test_cases.inheritance.grandparent::GreatGrandParentContract) +{ } \ No newline at end of file diff --git a/test_cases/inheritance/out/parent.awst b/test_cases/inheritance/out/parent.awst index 61ec3207e0..a7b905ba68 100644 --- a/test_cases/inheritance/out/parent.awst +++ b/test_cases/inheritance/out/parent.awst @@ -1,4 +1,4 @@ -contract ParentContract extends (test_cases.inheritance.grandparent::GrandParentContract) +contract ParentContract extends (test_cases.inheritance.grandparent::GrandParentContract, test_cases.inheritance.grandparent::GreatGrandParentContract) { subroutine method(): bool { diff --git a/test_cases/inheritance/out_O2/ChildContract.approval.teal b/test_cases/inheritance/out_O2/ChildContract.approval.teal index 49338b5704..bcc457fdc0 100644 --- a/test_cases/inheritance/out_O2/ChildContract.approval.teal +++ b/test_cases/inheritance/out_O2/ChildContract.approval.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.approval_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: callsub method return @@ -10,12 +10,12 @@ method: proto 0 1 byte "ChildContract.method called" log - callsub GrandParentContract.method + callsub GreatGrandParentContract.method retsub -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: -GrandParentContract.method: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +GreatGrandParentContract.method: proto 0 1 byte "GrandParentContract.method called" log diff --git a/test_cases/inheritance/out_O2/ChildContract.clear.teal b/test_cases/inheritance/out_O2/ChildContract.clear.teal index 9c10b8315b..6d701b850e 100644 --- a/test_cases/inheritance/out_O2/ChildContract.clear.teal +++ b/test_cases/inheritance/out_O2/ChildContract.clear.teal @@ -1,5 +1,5 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.clear_state_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: int 1 return diff --git a/test_cases/inheritance/out_O2/ChildContract.destructured.ir b/test_cases/inheritance/out_O2/ChildContract.destructured.ir index 24b76b224e..780b00e0ba 100644 --- a/test_cases/inheritance/out_O2/ChildContract.destructured.ir +++ b/test_cases/inheritance/out_O2/ChildContract.destructured.ir @@ -1,6 +1,6 @@ contract test_cases.inheritance.child.ChildContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 let tmp%0#0: bool = test_cases.inheritance.child.ChildContract.method() return tmp%0#0 @@ -8,15 +8,15 @@ contract test_cases.inheritance.child.ChildContract: subroutine test_cases.inheritance.child.ChildContract.method() -> bool: block@0: // L8 (log "ChildContract.method called") - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out_O2/GrandParentContract.approval.teal b/test_cases/inheritance/out_O2/GrandParentContract.approval.teal index 2dca32e10f..15b1e65a48 100644 --- a/test_cases/inheritance/out_O2/GrandParentContract.approval.teal +++ b/test_cases/inheritance/out_O2/GrandParentContract.approval.teal @@ -1,11 +1,11 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.approval_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: callsub method return -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: method: proto 0 1 byte "GrandParentContract.method called" diff --git a/test_cases/inheritance/out_O2/GrandParentContract.clear.teal b/test_cases/inheritance/out_O2/GrandParentContract.clear.teal index 9c10b8315b..6d701b850e 100644 --- a/test_cases/inheritance/out_O2/GrandParentContract.clear.teal +++ b/test_cases/inheritance/out_O2/GrandParentContract.clear.teal @@ -1,5 +1,5 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.clear_state_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: int 1 return diff --git a/test_cases/inheritance/out_O2/GrandParentContract.destructured.ir b/test_cases/inheritance/out_O2/GrandParentContract.destructured.ir index 658315d7cd..333e72a489 100644 --- a/test_cases/inheritance/out_O2/GrandParentContract.destructured.ir +++ b/test_cases/inheritance/out_O2/GrandParentContract.destructured.ir @@ -1,16 +1,16 @@ contract test_cases.inheritance.grandparent.GrandParentContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out_O2/GreatGrandParentContract.approval.teal b/test_cases/inheritance/out_O2/GreatGrandParentContract.approval.teal new file mode 100644 index 0000000000..15b1e65a48 --- /dev/null +++ b/test_cases/inheritance/out_O2/GreatGrandParentContract.approval.teal @@ -0,0 +1,14 @@ +#pragma version 10 + +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: + callsub method + return + + +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +method: + proto 0 1 + byte "GrandParentContract.method called" + log + int 1 + retsub diff --git a/test_cases/inheritance/out_O2/GreatGrandParentContract.clear.teal b/test_cases/inheritance/out_O2/GreatGrandParentContract.clear.teal new file mode 100644 index 0000000000..6d701b850e --- /dev/null +++ b/test_cases/inheritance/out_O2/GreatGrandParentContract.clear.teal @@ -0,0 +1,5 @@ +#pragma version 10 + +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: + int 1 + return diff --git a/test_cases/inheritance/out_O2/GreatGrandParentContract.destructured.ir b/test_cases/inheritance/out_O2/GreatGrandParentContract.destructured.ir new file mode 100644 index 0000000000..9fe4204147 --- /dev/null +++ b/test_cases/inheritance/out_O2/GreatGrandParentContract.destructured.ir @@ -0,0 +1,16 @@ +contract test_cases.inheritance.grandparent.GreatGrandParentContract: + program approval: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: + block@0: // L5 + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() + return tmp%0#0 + + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: + block@0: // L11 + (log "GrandParentContract.method called") + return 1u + + program clear-state: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: + block@0: // L8 + return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out_O2/ParentContract.approval.teal b/test_cases/inheritance/out_O2/ParentContract.approval.teal index 9b5e6db4a6..87ea2ecb07 100644 --- a/test_cases/inheritance/out_O2/ParentContract.approval.teal +++ b/test_cases/inheritance/out_O2/ParentContract.approval.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.approval_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: callsub method return @@ -10,12 +10,12 @@ method: proto 0 1 byte "ParentContract.method called" log - callsub GrandParentContract.method + callsub GreatGrandParentContract.method retsub -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: -GrandParentContract.method: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +GreatGrandParentContract.method: proto 0 1 byte "GrandParentContract.method called" log diff --git a/test_cases/inheritance/out_O2/ParentContract.clear.teal b/test_cases/inheritance/out_O2/ParentContract.clear.teal index 9c10b8315b..6d701b850e 100644 --- a/test_cases/inheritance/out_O2/ParentContract.clear.teal +++ b/test_cases/inheritance/out_O2/ParentContract.clear.teal @@ -1,5 +1,5 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.clear_state_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: int 1 return diff --git a/test_cases/inheritance/out_O2/ParentContract.destructured.ir b/test_cases/inheritance/out_O2/ParentContract.destructured.ir index d4b37f6e0d..125300dd63 100644 --- a/test_cases/inheritance/out_O2/ParentContract.destructured.ir +++ b/test_cases/inheritance/out_O2/ParentContract.destructured.ir @@ -1,6 +1,6 @@ contract test_cases.inheritance.parent.ParentContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 let tmp%0#0: bool = test_cases.inheritance.parent.ParentContract.method() return tmp%0#0 @@ -8,15 +8,15 @@ contract test_cases.inheritance.parent.ParentContract: subroutine test_cases.inheritance.parent.ParentContract.method() -> bool: block@0: // L7 (log "ParentContract.method called") - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out_unoptimized/ChildContract.approval.teal b/test_cases/inheritance/out_unoptimized/ChildContract.approval.teal index 3dfb651a65..db134acb37 100644 --- a/test_cases/inheritance/out_unoptimized/ChildContract.approval.teal +++ b/test_cases/inheritance/out_unoptimized/ChildContract.approval.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.approval_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: // inheritance/grandparent.py:6 // return self.method() callsub method @@ -19,12 +19,12 @@ method: log // inheritance/child.py:11 // return GrandParentContract.method(self) - callsub GrandParentContract.method + callsub GreatGrandParentContract.method retsub -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: -GrandParentContract.method: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +GreatGrandParentContract.method: // inheritance/grandparent.py:11-12 // @algopy.subroutine // def method(self) -> bool: diff --git a/test_cases/inheritance/out_unoptimized/ChildContract.clear.teal b/test_cases/inheritance/out_unoptimized/ChildContract.clear.teal index 1ec4c81182..d17314a05e 100644 --- a/test_cases/inheritance/out_unoptimized/ChildContract.clear.teal +++ b/test_cases/inheritance/out_unoptimized/ChildContract.clear.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.clear_state_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: // inheritance/grandparent.py:9 // return True int 1 diff --git a/test_cases/inheritance/out_unoptimized/ChildContract.destructured.ir b/test_cases/inheritance/out_unoptimized/ChildContract.destructured.ir index 24b76b224e..780b00e0ba 100644 --- a/test_cases/inheritance/out_unoptimized/ChildContract.destructured.ir +++ b/test_cases/inheritance/out_unoptimized/ChildContract.destructured.ir @@ -1,6 +1,6 @@ contract test_cases.inheritance.child.ChildContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 let tmp%0#0: bool = test_cases.inheritance.child.ChildContract.method() return tmp%0#0 @@ -8,15 +8,15 @@ contract test_cases.inheritance.child.ChildContract: subroutine test_cases.inheritance.child.ChildContract.method() -> bool: block@0: // L8 (log "ChildContract.method called") - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out_unoptimized/GrandParentContract.approval.teal b/test_cases/inheritance/out_unoptimized/GrandParentContract.approval.teal index 5f6d30f826..38a60d2fb4 100644 --- a/test_cases/inheritance/out_unoptimized/GrandParentContract.approval.teal +++ b/test_cases/inheritance/out_unoptimized/GrandParentContract.approval.teal @@ -1,13 +1,13 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.approval_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: // inheritance/grandparent.py:6 // return self.method() callsub method return -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: method: // inheritance/grandparent.py:11-12 // @algopy.subroutine diff --git a/test_cases/inheritance/out_unoptimized/GrandParentContract.clear.teal b/test_cases/inheritance/out_unoptimized/GrandParentContract.clear.teal index 1ec4c81182..d17314a05e 100644 --- a/test_cases/inheritance/out_unoptimized/GrandParentContract.clear.teal +++ b/test_cases/inheritance/out_unoptimized/GrandParentContract.clear.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.clear_state_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: // inheritance/grandparent.py:9 // return True int 1 diff --git a/test_cases/inheritance/out_unoptimized/GrandParentContract.destructured.ir b/test_cases/inheritance/out_unoptimized/GrandParentContract.destructured.ir index 658315d7cd..333e72a489 100644 --- a/test_cases/inheritance/out_unoptimized/GrandParentContract.destructured.ir +++ b/test_cases/inheritance/out_unoptimized/GrandParentContract.destructured.ir @@ -1,16 +1,16 @@ contract test_cases.inheritance.grandparent.GrandParentContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out_unoptimized/GreatGrandParentContract.approval.teal b/test_cases/inheritance/out_unoptimized/GreatGrandParentContract.approval.teal new file mode 100644 index 0000000000..38a60d2fb4 --- /dev/null +++ b/test_cases/inheritance/out_unoptimized/GreatGrandParentContract.approval.teal @@ -0,0 +1,23 @@ +#pragma version 10 + +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: + // inheritance/grandparent.py:6 + // return self.method() + callsub method + return + + +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +method: + // inheritance/grandparent.py:11-12 + // @algopy.subroutine + // def method(self) -> bool: + proto 0 1 + // inheritance/grandparent.py:13 + // algopy.log("GrandParentContract.method called") + byte "GrandParentContract.method called" + log + // inheritance/grandparent.py:14 + // return True + int 1 + retsub diff --git a/test_cases/inheritance/out_unoptimized/GreatGrandParentContract.clear.teal b/test_cases/inheritance/out_unoptimized/GreatGrandParentContract.clear.teal new file mode 100644 index 0000000000..d17314a05e --- /dev/null +++ b/test_cases/inheritance/out_unoptimized/GreatGrandParentContract.clear.teal @@ -0,0 +1,7 @@ +#pragma version 10 + +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: + // inheritance/grandparent.py:9 + // return True + int 1 + return diff --git a/test_cases/inheritance/out_unoptimized/GreatGrandParentContract.destructured.ir b/test_cases/inheritance/out_unoptimized/GreatGrandParentContract.destructured.ir new file mode 100644 index 0000000000..9fe4204147 --- /dev/null +++ b/test_cases/inheritance/out_unoptimized/GreatGrandParentContract.destructured.ir @@ -0,0 +1,16 @@ +contract test_cases.inheritance.grandparent.GreatGrandParentContract: + program approval: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: + block@0: // L5 + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() + return tmp%0#0 + + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: + block@0: // L11 + (log "GrandParentContract.method called") + return 1u + + program clear-state: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: + block@0: // L8 + return 1u \ No newline at end of file diff --git a/test_cases/inheritance/out_unoptimized/ParentContract.approval.teal b/test_cases/inheritance/out_unoptimized/ParentContract.approval.teal index ea96166cf2..4075efbd10 100644 --- a/test_cases/inheritance/out_unoptimized/ParentContract.approval.teal +++ b/test_cases/inheritance/out_unoptimized/ParentContract.approval.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.approval_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program: // inheritance/grandparent.py:6 // return self.method() callsub method @@ -19,12 +19,12 @@ method: log // inheritance/parent.py:10 // return super().method() - callsub GrandParentContract.method + callsub GreatGrandParentContract.method retsub -// test_cases.inheritance.grandparent.GrandParentContract.method() -> uint64: -GrandParentContract.method: +// test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> uint64: +GreatGrandParentContract.method: // inheritance/grandparent.py:11-12 // @algopy.subroutine // def method(self) -> bool: diff --git a/test_cases/inheritance/out_unoptimized/ParentContract.clear.teal b/test_cases/inheritance/out_unoptimized/ParentContract.clear.teal index 1ec4c81182..d17314a05e 100644 --- a/test_cases/inheritance/out_unoptimized/ParentContract.clear.teal +++ b/test_cases/inheritance/out_unoptimized/ParentContract.clear.teal @@ -1,6 +1,6 @@ #pragma version 10 -test_cases.inheritance.grandparent.GrandParentContract.clear_state_program: +test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program: // inheritance/grandparent.py:9 // return True int 1 diff --git a/test_cases/inheritance/out_unoptimized/ParentContract.destructured.ir b/test_cases/inheritance/out_unoptimized/ParentContract.destructured.ir index d4b37f6e0d..125300dd63 100644 --- a/test_cases/inheritance/out_unoptimized/ParentContract.destructured.ir +++ b/test_cases/inheritance/out_unoptimized/ParentContract.destructured.ir @@ -1,6 +1,6 @@ contract test_cases.inheritance.parent.ParentContract: program approval: - subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program() -> bool: block@0: // L5 let tmp%0#0: bool = test_cases.inheritance.parent.ParentContract.method() return tmp%0#0 @@ -8,15 +8,15 @@ contract test_cases.inheritance.parent.ParentContract: subroutine test_cases.inheritance.parent.ParentContract.method() -> bool: block@0: // L7 (log "ParentContract.method called") - let tmp%0#0: bool = test_cases.inheritance.grandparent.GrandParentContract.method() + let tmp%0#0: bool = test_cases.inheritance.grandparent.GreatGrandParentContract.method() return tmp%0#0 - subroutine test_cases.inheritance.grandparent.GrandParentContract.method() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method() -> bool: block@0: // L11 (log "GrandParentContract.method called") return 1u program clear-state: - subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program() -> bool: + subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program() -> bool: block@0: // L8 return 1u \ No newline at end of file diff --git a/test_cases/inheritance/puya.log b/test_cases/inheritance/puya.log index 84972f1451..967c5305e9 100644 --- a/test_cases/inheritance/puya.log +++ b/test_cases/inheritance/puya.log @@ -526,6 +526,12 @@ debug: Sealing block@0: // L5 debug: Terminated block@0: // L5 debug: Sealing block@0: // L8 debug: Terminated block@0: // L8 +debug: Sealing block@0: // L11 +debug: Terminated block@0: // L11 +debug: Sealing block@0: // L5 +debug: Terminated block@0: // L5 +debug: Sealing block@0: // L8 +debug: Terminated block@0: // L8 debug: Sealing block@0: // L7 debug: Terminated block@0: // L7 debug: Sealing block@0: // L11 @@ -537,7 +543,7 @@ debug: Terminated block@0: // L8 debug: Output IR to inheritance/out/ChildContract.ssa.ir info: Optimizing test_cases.inheritance.child.ChildContract at level 1 debug: Begin optimization pass 1/100 -debug: Optimizing subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -561,7 +567,7 @@ debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination -debug: Optimizing subroutine test_cases.inheritance.grandparent.GrandParentContract.method +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -573,7 +579,7 @@ debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination -debug: Optimizing subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -586,28 +592,82 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: No optimizations performed in pass 1, ending loop -debug: Removing Phis from test_cases.inheritance.grandparent.GrandParentContract.approval_program +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program debug: Removing Phis from test_cases.inheritance.child.ChildContract.method -debug: Removing Phis from test_cases.inheritance.grandparent.GrandParentContract.method -debug: Removing Phis from test_cases.inheritance.grandparent.GrandParentContract.clear_state_program -debug: Coalescing local variables in test_cases.inheritance.grandparent.GrandParentContract.approval_program using strategy RootOperandGrouping +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.method +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s debug: Coalescing local variables in test_cases.inheritance.child.ChildContract.method using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s -debug: Coalescing local variables in test_cases.inheritance.grandparent.GrandParentContract.method using strategy RootOperandGrouping +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.method using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s -debug: Coalescing local variables in test_cases.inheritance.grandparent.GrandParentContract.clear_state_program using strategy RootOperandGrouping +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s -debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GrandParentContract.approval_program +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program debug: Sequentializing parallel copies in test_cases.inheritance.child.ChildContract.method -debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GrandParentContract.method -debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GrandParentContract.clear_state_program +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.method +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program debug: Performing post-SSA optimizations debug: Output IR to inheritance/out/ChildContract.destructured.ir +debug: Output IR to inheritance/out/GreatGrandParentContract.ssa.ir +info: Optimizing test_cases.inheritance.grandparent.GreatGrandParentContract at level 1 +debug: Begin optimization pass 1/100 +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program +debug: Splitting parallel copies prior to optimization +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method +debug: Splitting parallel copies prior to optimization +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program +debug: Splitting parallel copies prior to optimization +debug: Optimizer: Constant Replacer +debug: Optimizer: Copy Propagation +debug: Optimizer: Intrinsic Simplifier +debug: Optimizer: Remove Unused Variables +debug: Optimizer: Inner Txn Field Replacer +debug: Optimizer: Simplify Control Ops +debug: Optimizer: Remove Linear Jump +debug: Optimizer: Remove Empty Blocks +debug: Optimizer: Remove Unreachable Blocks +debug: Optimizer: Repeated Expression Elimination +debug: No optimizations performed in pass 1, ending loop +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.method +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program using strategy RootOperandGrouping +debug: Coalescing resulted in 0 replacement/s +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.method using strategy RootOperandGrouping +debug: Coalescing resulted in 0 replacement/s +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program using strategy RootOperandGrouping +debug: Coalescing resulted in 0 replacement/s +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.method +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program +debug: Performing post-SSA optimizations +debug: Output IR to inheritance/out/GreatGrandParentContract.destructured.ir debug: Output IR to inheritance/out/GrandParentContract.ssa.ir info: Optimizing test_cases.inheritance.grandparent.GrandParentContract at level 1 debug: Begin optimization pass 1/100 -debug: Optimizing subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -619,7 +679,7 @@ debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination -debug: Optimizing subroutine test_cases.inheritance.grandparent.GrandParentContract.method +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -631,7 +691,7 @@ debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination -debug: Optimizing subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -644,24 +704,24 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: No optimizations performed in pass 1, ending loop -debug: Removing Phis from test_cases.inheritance.grandparent.GrandParentContract.approval_program -debug: Removing Phis from test_cases.inheritance.grandparent.GrandParentContract.method -debug: Removing Phis from test_cases.inheritance.grandparent.GrandParentContract.clear_state_program -debug: Coalescing local variables in test_cases.inheritance.grandparent.GrandParentContract.approval_program using strategy RootOperandGrouping +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.method +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s -debug: Coalescing local variables in test_cases.inheritance.grandparent.GrandParentContract.method using strategy RootOperandGrouping +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.method using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s -debug: Coalescing local variables in test_cases.inheritance.grandparent.GrandParentContract.clear_state_program using strategy RootOperandGrouping +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s -debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GrandParentContract.approval_program -debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GrandParentContract.method -debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GrandParentContract.clear_state_program +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.method +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program debug: Performing post-SSA optimizations debug: Output IR to inheritance/out/GrandParentContract.destructured.ir debug: Output IR to inheritance/out/ParentContract.ssa.ir info: Optimizing test_cases.inheritance.parent.ParentContract at level 1 debug: Begin optimization pass 1/100 -debug: Optimizing subroutine test_cases.inheritance.grandparent.GrandParentContract.approval_program +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -685,7 +745,7 @@ debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination -debug: Optimizing subroutine test_cases.inheritance.grandparent.GrandParentContract.method +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.method debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -697,7 +757,7 @@ debug: Optimizer: Remove Linear Jump debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination -debug: Optimizing subroutine test_cases.inheritance.grandparent.GrandParentContract.clear_state_program +debug: Optimizing subroutine test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program debug: Splitting parallel copies prior to optimization debug: Optimizer: Constant Replacer debug: Optimizer: Copy Propagation @@ -710,22 +770,22 @@ debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination debug: No optimizations performed in pass 1, ending loop -debug: Removing Phis from test_cases.inheritance.grandparent.GrandParentContract.approval_program +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program debug: Removing Phis from test_cases.inheritance.parent.ParentContract.method -debug: Removing Phis from test_cases.inheritance.grandparent.GrandParentContract.method -debug: Removing Phis from test_cases.inheritance.grandparent.GrandParentContract.clear_state_program -debug: Coalescing local variables in test_cases.inheritance.grandparent.GrandParentContract.approval_program using strategy RootOperandGrouping +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.method +debug: Removing Phis from test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s debug: Coalescing local variables in test_cases.inheritance.parent.ParentContract.method using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s -debug: Coalescing local variables in test_cases.inheritance.grandparent.GrandParentContract.method using strategy RootOperandGrouping +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.method using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s -debug: Coalescing local variables in test_cases.inheritance.grandparent.GrandParentContract.clear_state_program using strategy RootOperandGrouping +debug: Coalescing local variables in test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program using strategy RootOperandGrouping debug: Coalescing resulted in 0 replacement/s -debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GrandParentContract.approval_program +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.approval_program debug: Sequentializing parallel copies in test_cases.inheritance.parent.ParentContract.method -debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GrandParentContract.method -debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GrandParentContract.clear_state_program +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.method +debug: Sequentializing parallel copies in test_cases.inheritance.grandparent.GreatGrandParentContract.clear_state_program debug: Performing post-SSA optimizations debug: Output IR to inheritance/out/ParentContract.destructured.ir debug: Inserted main_block@0.ops[1]: 'store tmp%0#0 to l-stack (copy)' @@ -736,10 +796,14 @@ debug: Inserted main_block@0.ops[1]: 'store tmp%0#0 to l-stack (copy)' debug: Replaced main_block@0.ops[3]: 'load tmp%0#0' with 'load tmp%0#0 from l-stack (no copy)' debug: Inserted main_block@0.ops[1]: 'store tmp%0#0 to l-stack (copy)' debug: Replaced main_block@0.ops[3]: 'load tmp%0#0' with 'load tmp%0#0 from l-stack (no copy)' +debug: Inserted main_block@0.ops[1]: 'store tmp%0#0 to l-stack (copy)' +debug: Replaced main_block@0.ops[3]: 'load tmp%0#0' with 'load tmp%0#0 from l-stack (no copy)' debug: Inserted method_block@0.ops[3]: 'store tmp%0#0 to l-stack (copy)' debug: Replaced method_block@0.ops[5]: 'load tmp%0#0' with 'load tmp%0#0 from l-stack (no copy)' info: Writing inheritance/out/ChildContract.approval.teal info: Writing inheritance/out/ChildContract.clear.teal +info: Writing inheritance/out/GreatGrandParentContract.approval.teal +info: Writing inheritance/out/GreatGrandParentContract.clear.teal info: Writing inheritance/out/GrandParentContract.approval.teal info: Writing inheritance/out/GrandParentContract.clear.teal info: Writing inheritance/out/ParentContract.approval.teal diff --git a/test_cases/typed_abi_call/out/Greeter.approval.mir b/test_cases/typed_abi_call/out/Greeter.approval.mir index fef7075265..058a11722c 100644 --- a/test_cases/typed_abi_call/out/Greeter.approval.mir +++ b/test_cases/typed_abi_call/out/Greeter.approval.mir @@ -4,816 +4,816 @@ // test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> uint64: main_block@0: - txn NumAppArgs // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - bz main_bare_routing@10 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // Implicit fall through to main_abi_routing@1 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 + txn NumAppArgs // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%0#0 to l-stack (no copy) tmp%0#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%0#0 from l-stack (no copy) tmp%0#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + bz main_bare_routing@10 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // Implicit fall through to main_abi_routing@1 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 main_abi_routing@1: - txna ApplicationArgs 0 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - method "test_method_selector_kinds(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - method "test_method_overload(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - method "test_arg_conversion(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - method "test_15plus_args(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - method "test_void(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - method "test_ref_types(application,asset)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - uncover 6 // load tmp%1#0 from l-stack (no copy) method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,tmp%1#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - match main_test_method_selector_kinds_route@2 main_test_method_overload_route@3 main_test_arg_conversion_route@4 main_test_15plus_args_route@5 main_test_void_route@6 main_test_ref_types_route@7 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - err // reject transaction // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 + txna ApplicationArgs 0 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%1#0 to l-stack (no copy) tmp%1#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + method "test_method_selector_kinds(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + method "test_method_overload(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + method "test_arg_conversion(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + method "test_15plus_args(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + method "test_void(application)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + method "test_ref_types(application,asset)void" // tmp%1#0,method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void"> class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + uncover 6 // load tmp%1#0 from l-stack (no copy) method<"test_method_selector_kinds(application)void">,method<"test_method_overload(application)void">,method<"test_arg_conversion(application)void">,method<"test_15plus_args(application)void">,method<"test_void(application)void">,method<"test_ref_types(application,asset)void">,tmp%1#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + match main_test_method_selector_kinds_route@2 main_test_method_overload_route@3 main_test_arg_conversion_route@4 main_test_15plus_args_route@5 main_test_void_route@6 main_test_ref_types_route@7 // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + err // reject transaction // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 main_test_method_selector_kinds_route@2: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:6 - // virtual: store tmp%2#0 to l-stack (no copy) tmp%2#0 arc4.abimethod() typed_abi_call/typed_c2c.py:6 - // virtual: load tmp%2#0 from l-stack (no copy) tmp%2#0 arc4.abimethod() typed_abi_call/typed_c2c.py:6 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:6 - // virtual: store tmp%3#0 to l-stack (no copy) tmp%3#0 arc4.abimethod() typed_abi_call/typed_c2c.py:6 - // virtual: load tmp%3#0 from l-stack (no copy) tmp%3#0 arc4.abimethod() typed_abi_call/typed_c2c.py:6 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:6 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:6 - // virtual: store tmp%4#0 to l-stack (no copy) tmp%4#0 arc4.abimethod() typed_abi_call/typed_c2c.py:6 - // virtual: load tmp%4#0 from l-stack (no copy) tmp%4#0 arc4.abimethod() typed_abi_call/typed_c2c.py:6 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:6 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%5#0 to l-stack (no copy) tmp%5#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%5#0 from l-stack (no copy) tmp%5#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%6#0 to l-stack (no copy) tmp%6#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%6#0 from l-stack (no copy) tmp%6#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%7#0 to l-stack (no copy) tmp%7#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%7#0 from l-stack (no copy) tmp%7#0 arc4.abimethod() typed_abi_call/typed_c2c.py:6 - callsub test_method_selector_kinds // arc4.abimethod() typed_abi_call/typed_c2c.py:6 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:6 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:6 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:7 + // virtual: store tmp%2#0 to l-stack (no copy) tmp%2#0 arc4.abimethod() typed_abi_call/typed_c2c.py:7 + // virtual: load tmp%2#0 from l-stack (no copy) tmp%2#0 arc4.abimethod() typed_abi_call/typed_c2c.py:7 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:7 + // virtual: store tmp%3#0 to l-stack (no copy) tmp%3#0 arc4.abimethod() typed_abi_call/typed_c2c.py:7 + // virtual: load tmp%3#0 from l-stack (no copy) tmp%3#0 arc4.abimethod() typed_abi_call/typed_c2c.py:7 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:7 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:7 + // virtual: store tmp%4#0 to l-stack (no copy) tmp%4#0 arc4.abimethod() typed_abi_call/typed_c2c.py:7 + // virtual: load tmp%4#0 from l-stack (no copy) tmp%4#0 arc4.abimethod() typed_abi_call/typed_c2c.py:7 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:7 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%5#0 to l-stack (no copy) tmp%5#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%5#0 from l-stack (no copy) tmp%5#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%6#0 to l-stack (no copy) tmp%6#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%6#0 from l-stack (no copy) tmp%6#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%7#0 to l-stack (no copy) tmp%7#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%7#0 from l-stack (no copy) tmp%7#0 arc4.abimethod() typed_abi_call/typed_c2c.py:7 + callsub test_method_selector_kinds // arc4.abimethod() typed_abi_call/typed_c2c.py:7 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:7 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:7 main_test_method_overload_route@3: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:19 - // virtual: store tmp%8#0 to l-stack (no copy) tmp%8#0 arc4.abimethod() typed_abi_call/typed_c2c.py:19 - // virtual: load tmp%8#0 from l-stack (no copy) tmp%8#0 arc4.abimethod() typed_abi_call/typed_c2c.py:19 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:19 - // virtual: store tmp%9#0 to l-stack (no copy) tmp%9#0 arc4.abimethod() typed_abi_call/typed_c2c.py:19 - // virtual: load tmp%9#0 from l-stack (no copy) tmp%9#0 arc4.abimethod() typed_abi_call/typed_c2c.py:19 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:19 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:19 - // virtual: store tmp%10#0 to l-stack (no copy) tmp%10#0 arc4.abimethod() typed_abi_call/typed_c2c.py:19 - // virtual: load tmp%10#0 from l-stack (no copy) tmp%10#0 arc4.abimethod() typed_abi_call/typed_c2c.py:19 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:19 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%11#0 to l-stack (no copy) tmp%11#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%11#0 from l-stack (no copy) tmp%11#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%12#0 to l-stack (no copy) tmp%12#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%12#0 from l-stack (no copy) tmp%12#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%13#0 to l-stack (no copy) tmp%13#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%13#0 from l-stack (no copy) tmp%13#0 arc4.abimethod() typed_abi_call/typed_c2c.py:19 - callsub test_method_overload // arc4.abimethod() typed_abi_call/typed_c2c.py:19 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:19 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:19 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:20 + // virtual: store tmp%8#0 to l-stack (no copy) tmp%8#0 arc4.abimethod() typed_abi_call/typed_c2c.py:20 + // virtual: load tmp%8#0 from l-stack (no copy) tmp%8#0 arc4.abimethod() typed_abi_call/typed_c2c.py:20 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:20 + // virtual: store tmp%9#0 to l-stack (no copy) tmp%9#0 arc4.abimethod() typed_abi_call/typed_c2c.py:20 + // virtual: load tmp%9#0 from l-stack (no copy) tmp%9#0 arc4.abimethod() typed_abi_call/typed_c2c.py:20 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:20 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:20 + // virtual: store tmp%10#0 to l-stack (no copy) tmp%10#0 arc4.abimethod() typed_abi_call/typed_c2c.py:20 + // virtual: load tmp%10#0 from l-stack (no copy) tmp%10#0 arc4.abimethod() typed_abi_call/typed_c2c.py:20 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:20 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%11#0 to l-stack (no copy) tmp%11#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%11#0 from l-stack (no copy) tmp%11#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%12#0 to l-stack (no copy) tmp%12#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%12#0 from l-stack (no copy) tmp%12#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%13#0 to l-stack (no copy) tmp%13#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%13#0 from l-stack (no copy) tmp%13#0 arc4.abimethod() typed_abi_call/typed_c2c.py:20 + callsub test_method_overload // arc4.abimethod() typed_abi_call/typed_c2c.py:20 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:20 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:20 main_test_arg_conversion_route@4: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:34 - // virtual: store tmp%14#0 to l-stack (no copy) tmp%14#0 arc4.abimethod() typed_abi_call/typed_c2c.py:34 - // virtual: load tmp%14#0 from l-stack (no copy) tmp%14#0 arc4.abimethod() typed_abi_call/typed_c2c.py:34 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:34 - // virtual: store tmp%15#0 to l-stack (no copy) tmp%15#0 arc4.abimethod() typed_abi_call/typed_c2c.py:34 - // virtual: load tmp%15#0 from l-stack (no copy) tmp%15#0 arc4.abimethod() typed_abi_call/typed_c2c.py:34 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:34 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:34 - // virtual: store tmp%16#0 to l-stack (no copy) tmp%16#0 arc4.abimethod() typed_abi_call/typed_c2c.py:34 - // virtual: load tmp%16#0 from l-stack (no copy) tmp%16#0 arc4.abimethod() typed_abi_call/typed_c2c.py:34 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:34 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%17#0 to l-stack (no copy) tmp%17#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%17#0 from l-stack (no copy) tmp%17#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%18#0 to l-stack (no copy) tmp%18#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%18#0 from l-stack (no copy) tmp%18#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%19#0 to l-stack (no copy) tmp%19#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%19#0 from l-stack (no copy) tmp%19#0 arc4.abimethod() typed_abi_call/typed_c2c.py:34 - callsub test_arg_conversion // arc4.abimethod() typed_abi_call/typed_c2c.py:34 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:34 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:34 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:35 + // virtual: store tmp%14#0 to l-stack (no copy) tmp%14#0 arc4.abimethod() typed_abi_call/typed_c2c.py:35 + // virtual: load tmp%14#0 from l-stack (no copy) tmp%14#0 arc4.abimethod() typed_abi_call/typed_c2c.py:35 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:35 + // virtual: store tmp%15#0 to l-stack (no copy) tmp%15#0 arc4.abimethod() typed_abi_call/typed_c2c.py:35 + // virtual: load tmp%15#0 from l-stack (no copy) tmp%15#0 arc4.abimethod() typed_abi_call/typed_c2c.py:35 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:35 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:35 + // virtual: store tmp%16#0 to l-stack (no copy) tmp%16#0 arc4.abimethod() typed_abi_call/typed_c2c.py:35 + // virtual: load tmp%16#0 from l-stack (no copy) tmp%16#0 arc4.abimethod() typed_abi_call/typed_c2c.py:35 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:35 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%17#0 to l-stack (no copy) tmp%17#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%17#0 from l-stack (no copy) tmp%17#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%18#0 to l-stack (no copy) tmp%18#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%18#0 from l-stack (no copy) tmp%18#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%19#0 to l-stack (no copy) tmp%19#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%19#0 from l-stack (no copy) tmp%19#0 arc4.abimethod() typed_abi_call/typed_c2c.py:35 + callsub test_arg_conversion // arc4.abimethod() typed_abi_call/typed_c2c.py:35 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:35 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:35 main_test_15plus_args_route@5: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:51 - // virtual: store tmp%20#0 to l-stack (no copy) tmp%20#0 arc4.abimethod() typed_abi_call/typed_c2c.py:51 - // virtual: load tmp%20#0 from l-stack (no copy) tmp%20#0 arc4.abimethod() typed_abi_call/typed_c2c.py:51 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:51 - // virtual: store tmp%21#0 to l-stack (no copy) tmp%21#0 arc4.abimethod() typed_abi_call/typed_c2c.py:51 - // virtual: load tmp%21#0 from l-stack (no copy) tmp%21#0 arc4.abimethod() typed_abi_call/typed_c2c.py:51 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:51 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:51 - // virtual: store tmp%22#0 to l-stack (no copy) tmp%22#0 arc4.abimethod() typed_abi_call/typed_c2c.py:51 - // virtual: load tmp%22#0 from l-stack (no copy) tmp%22#0 arc4.abimethod() typed_abi_call/typed_c2c.py:51 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:51 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%23#0 to l-stack (no copy) tmp%23#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%23#0 from l-stack (no copy) tmp%23#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%24#0 to l-stack (no copy) tmp%24#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%24#0 from l-stack (no copy) tmp%24#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%25#0 to l-stack (no copy) tmp%25#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%25#0 from l-stack (no copy) tmp%25#0 arc4.abimethod() typed_abi_call/typed_c2c.py:51 - callsub test_15plus_args // arc4.abimethod() typed_abi_call/typed_c2c.py:51 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:51 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:51 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:52 + // virtual: store tmp%20#0 to l-stack (no copy) tmp%20#0 arc4.abimethod() typed_abi_call/typed_c2c.py:52 + // virtual: load tmp%20#0 from l-stack (no copy) tmp%20#0 arc4.abimethod() typed_abi_call/typed_c2c.py:52 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:52 + // virtual: store tmp%21#0 to l-stack (no copy) tmp%21#0 arc4.abimethod() typed_abi_call/typed_c2c.py:52 + // virtual: load tmp%21#0 from l-stack (no copy) tmp%21#0 arc4.abimethod() typed_abi_call/typed_c2c.py:52 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:52 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:52 + // virtual: store tmp%22#0 to l-stack (no copy) tmp%22#0 arc4.abimethod() typed_abi_call/typed_c2c.py:52 + // virtual: load tmp%22#0 from l-stack (no copy) tmp%22#0 arc4.abimethod() typed_abi_call/typed_c2c.py:52 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:52 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%23#0 to l-stack (no copy) tmp%23#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%23#0 from l-stack (no copy) tmp%23#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%24#0 to l-stack (no copy) tmp%24#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%24#0 from l-stack (no copy) tmp%24#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%25#0 to l-stack (no copy) tmp%25#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%25#0 from l-stack (no copy) tmp%25#0 arc4.abimethod() typed_abi_call/typed_c2c.py:52 + callsub test_15plus_args // arc4.abimethod() typed_abi_call/typed_c2c.py:52 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:52 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:52 main_test_void_route@6: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:79 - // virtual: store tmp%26#0 to l-stack (no copy) tmp%26#0 arc4.abimethod() typed_abi_call/typed_c2c.py:79 - // virtual: load tmp%26#0 from l-stack (no copy) tmp%26#0 arc4.abimethod() typed_abi_call/typed_c2c.py:79 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:79 - // virtual: store tmp%27#0 to l-stack (no copy) tmp%27#0 arc4.abimethod() typed_abi_call/typed_c2c.py:79 - // virtual: load tmp%27#0 from l-stack (no copy) tmp%27#0 arc4.abimethod() typed_abi_call/typed_c2c.py:79 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:79 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:79 - // virtual: store tmp%28#0 to l-stack (no copy) tmp%28#0 arc4.abimethod() typed_abi_call/typed_c2c.py:79 - // virtual: load tmp%28#0 from l-stack (no copy) tmp%28#0 arc4.abimethod() typed_abi_call/typed_c2c.py:79 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:79 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%29#0 to l-stack (no copy) tmp%29#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%29#0 from l-stack (no copy) tmp%29#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%30#0 to l-stack (no copy) tmp%30#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%30#0 from l-stack (no copy) tmp%30#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%31#0 to l-stack (no copy) tmp%31#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%31#0 from l-stack (no copy) tmp%31#0 arc4.abimethod() typed_abi_call/typed_c2c.py:79 - callsub test_void // arc4.abimethod() typed_abi_call/typed_c2c.py:79 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:79 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:79 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:80 + // virtual: store tmp%26#0 to l-stack (no copy) tmp%26#0 arc4.abimethod() typed_abi_call/typed_c2c.py:80 + // virtual: load tmp%26#0 from l-stack (no copy) tmp%26#0 arc4.abimethod() typed_abi_call/typed_c2c.py:80 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:80 + // virtual: store tmp%27#0 to l-stack (no copy) tmp%27#0 arc4.abimethod() typed_abi_call/typed_c2c.py:80 + // virtual: load tmp%27#0 from l-stack (no copy) tmp%27#0 arc4.abimethod() typed_abi_call/typed_c2c.py:80 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:80 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:80 + // virtual: store tmp%28#0 to l-stack (no copy) tmp%28#0 arc4.abimethod() typed_abi_call/typed_c2c.py:80 + // virtual: load tmp%28#0 from l-stack (no copy) tmp%28#0 arc4.abimethod() typed_abi_call/typed_c2c.py:80 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:80 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%29#0 to l-stack (no copy) tmp%29#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%29#0 from l-stack (no copy) tmp%29#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%30#0 to l-stack (no copy) tmp%30#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%30#0 from l-stack (no copy) tmp%30#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%31#0 to l-stack (no copy) tmp%31#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%31#0 from l-stack (no copy) tmp%31#0 arc4.abimethod() typed_abi_call/typed_c2c.py:80 + callsub test_void // arc4.abimethod() typed_abi_call/typed_c2c.py:80 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:80 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:80 main_test_ref_types_route@7: - txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:93 - // virtual: store tmp%32#0 to l-stack (no copy) tmp%32#0 arc4.abimethod() typed_abi_call/typed_c2c.py:93 - // virtual: load tmp%32#0 from l-stack (no copy) tmp%32#0 arc4.abimethod() typed_abi_call/typed_c2c.py:93 - ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:93 - // virtual: store tmp%33#0 to l-stack (no copy) tmp%33#0 arc4.abimethod() typed_abi_call/typed_c2c.py:93 - // virtual: load tmp%33#0 from l-stack (no copy) tmp%33#0 arc4.abimethod() typed_abi_call/typed_c2c.py:93 - assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:93 - txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:93 - // virtual: store tmp%34#0 to l-stack (no copy) tmp%34#0 arc4.abimethod() typed_abi_call/typed_c2c.py:93 - // virtual: load tmp%34#0 from l-stack (no copy) tmp%34#0 arc4.abimethod() typed_abi_call/typed_c2c.py:93 - assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:93 - txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%35#0 to l-stack (no copy) tmp%35#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%35#0 from l-stack (no copy) tmp%35#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%36#0 to l-stack (no copy) tmp%36#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%36#0 from l-stack (no copy) tmp%36#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%37#0 to l-stack (no copy) tmp%37#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - txna ApplicationArgs 2 // tmp%37#0,{txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%38#0 to l-stack (no copy) tmp%37#0,tmp%38#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%38#0 from l-stack (no copy) tmp%37#0,tmp%38#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - btoi // tmp%37#0,{btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%39#0 to l-stack (no copy) tmp%37#0,tmp%39#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%39#0 from l-stack (no copy) tmp%37#0,tmp%39#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - txnas Assets // tmp%37#0,{txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%40#0 to l-stack (no copy) tmp%37#0,tmp%40#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%37#0 from l-stack (no copy) tmp%40#0,tmp%37#0 arc4.abimethod() typed_abi_call/typed_c2c.py:93 - // virtual: load tmp%40#0 from l-stack (no copy) tmp%37#0,tmp%40#0 arc4.abimethod() typed_abi_call/typed_c2c.py:93 - callsub test_ref_types // arc4.abimethod() typed_abi_call/typed_c2c.py:93 - int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:93 - return // arc4.abimethod() typed_abi_call/typed_c2c.py:93 + txn OnCompletion // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:94 + // virtual: store tmp%32#0 to l-stack (no copy) tmp%32#0 arc4.abimethod() typed_abi_call/typed_c2c.py:94 + // virtual: load tmp%32#0 from l-stack (no copy) tmp%32#0 arc4.abimethod() typed_abi_call/typed_c2c.py:94 + ! // {!} arc4.abimethod() typed_abi_call/typed_c2c.py:94 + // virtual: store tmp%33#0 to l-stack (no copy) tmp%33#0 arc4.abimethod() typed_abi_call/typed_c2c.py:94 + // virtual: load tmp%33#0 from l-stack (no copy) tmp%33#0 arc4.abimethod() typed_abi_call/typed_c2c.py:94 + assert // OnCompletion is NoOp // arc4.abimethod() typed_abi_call/typed_c2c.py:94 + txn ApplicationID // {txn} arc4.abimethod() typed_abi_call/typed_c2c.py:94 + // virtual: store tmp%34#0 to l-stack (no copy) tmp%34#0 arc4.abimethod() typed_abi_call/typed_c2c.py:94 + // virtual: load tmp%34#0 from l-stack (no copy) tmp%34#0 arc4.abimethod() typed_abi_call/typed_c2c.py:94 + assert // is not creating // arc4.abimethod() typed_abi_call/typed_c2c.py:94 + txna ApplicationArgs 1 // {txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%35#0 to l-stack (no copy) tmp%35#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%35#0 from l-stack (no copy) tmp%35#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + btoi // {btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%36#0 to l-stack (no copy) tmp%36#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%36#0 from l-stack (no copy) tmp%36#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + txnas Applications // {txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%37#0 to l-stack (no copy) tmp%37#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + txna ApplicationArgs 2 // tmp%37#0,{txna} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%38#0 to l-stack (no copy) tmp%37#0,tmp%38#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%38#0 from l-stack (no copy) tmp%37#0,tmp%38#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + btoi // tmp%37#0,{btoi} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%39#0 to l-stack (no copy) tmp%37#0,tmp%39#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%39#0 from l-stack (no copy) tmp%37#0,tmp%39#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + txnas Assets // tmp%37#0,{txnas} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%40#0 to l-stack (no copy) tmp%37#0,tmp%40#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%37#0 from l-stack (no copy) tmp%40#0,tmp%37#0 arc4.abimethod() typed_abi_call/typed_c2c.py:94 + // virtual: load tmp%40#0 from l-stack (no copy) tmp%37#0,tmp%40#0 arc4.abimethod() typed_abi_call/typed_c2c.py:94 + callsub test_ref_types // arc4.abimethod() typed_abi_call/typed_c2c.py:94 + int 1 // 1 arc4.abimethod() typed_abi_call/typed_c2c.py:94 + return // arc4.abimethod() typed_abi_call/typed_c2c.py:94 main_bare_routing@10: - txn OnCompletion // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%41#0 to l-stack (no copy) tmp%41#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%41#0 from l-stack (no copy) tmp%41#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - ! // {!} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store not%tmp%41#0 to l-stack (no copy) not%tmp%41#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load not%tmp%41#0 from l-stack (no copy) not%tmp%41#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - assert // reject transaction // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - txn ApplicationID // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%42#0 to l-stack (no copy) tmp%42#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%42#0 from l-stack (no copy) tmp%42#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - ! // {!} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: store tmp%43#0 to l-stack (no copy) tmp%43#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - // virtual: load tmp%43#0 from l-stack (no copy) tmp%43#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - assert // is creating // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - int 1 // 1 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - return // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 + txn OnCompletion // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%41#0 to l-stack (no copy) tmp%41#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%41#0 from l-stack (no copy) tmp%41#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + ! // {!} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store not%tmp%41#0 to l-stack (no copy) not%tmp%41#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load not%tmp%41#0 from l-stack (no copy) not%tmp%41#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + assert // reject transaction // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + txn ApplicationID // {txn} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%42#0 to l-stack (no copy) tmp%42#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%42#0 from l-stack (no copy) tmp%42#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + ! // {!} class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: store tmp%43#0 to l-stack (no copy) tmp%43#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + // virtual: load tmp%43#0 from l-stack (no copy) tmp%43#0 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + assert // is creating // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + int 1 // 1 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + return // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 // test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: test_method_selector_kinds: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_method_selector_kinds(self, app: Application) -> None: typed_abi_call/typed_c2c.py:6-7 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_method_selector_kinds(self, app: Application) -> None: typed_abi_call/typed_c2c.py:7-8 test_method_selector_kinds_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x05test1" // (𝕡) app#0 | "\x00\x05test1" arc4.String("test1") typed_abi_call/typed_c2c.py:8 + byte "\x00\x05test1" // (𝕡) app#0 | "\x00\x05test1" arc4.String("test1") typed_abi_call/typed_c2c.py:9 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - extract 4 0 // (𝕡) app#0 | awst_tmp%1#0,{extract} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:8 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test1" typed_abi_call/typed_c2c.py:9 - byte "\x00\x0becho: test1" // (𝕡) app#0 | result#0,"\x00\x0becho: test1" "echo: test1" typed_abi_call/typed_c2c.py:9 - == // (𝕡) app#0 | {==} result == "echo: test1" typed_abi_call/typed_c2c.py:9 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 result == "echo: test1" typed_abi_call/typed_c2c.py:9 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 assert result == "echo: test1" typed_abi_call/typed_c2c.py:9 - assert // (𝕡) app#0 | assert result == "echo: test1" typed_abi_call/typed_c2c.py:9 - itxn_begin // (𝕡) app#0 | arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + extract 4 0 // (𝕡) app#0 | awst_tmp%1#0,{extract} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%1#0,0x151f7c75 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) typed_abi_call/typed_c2c.py:9 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test1" typed_abi_call/typed_c2c.py:10 + byte "\x00\x0becho: test1" // (𝕡) app#0 | result#0,"\x00\x0becho: test1" "echo: test1" typed_abi_call/typed_c2c.py:10 + == // (𝕡) app#0 | {==} result == "echo: test1" typed_abi_call/typed_c2c.py:10 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 result == "echo: test1" typed_abi_call/typed_c2c.py:10 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 assert result == "echo: test1" typed_abi_call/typed_c2c.py:10 + assert // (𝕡) app#0 | assert result == "echo: test1" typed_abi_call/typed_c2c.py:10 + itxn_begin // (𝕡) app#0 | arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x05test2" // (𝕡) app#0 | "\x00\x05test2" "test2" typed_abi_call/typed_c2c.py:10 + byte "\x00\x05test2" // (𝕡) app#0 | "\x00\x05test2" "test2" typed_abi_call/typed_c2c.py:11 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 + int appl // (𝕡) app#0 | appl arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 + int 0 // (𝕡) app#0 | 0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - // virtual: store awst_tmp%3#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%3#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - dup // load awst_tmp%3#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%3#0,awst_tmp%3#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - extract 4 0 // (𝕡) app#0 | awst_tmp%3#0,{extract} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%3#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - // virtual: load awst_tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%3#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%5#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%5#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%5#0,0x151f7c75 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%6#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%6#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:10 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test2" typed_abi_call/typed_c2c.py:11 - byte "\x00\x0becho: test2" // (𝕡) app#0 | result#0,"\x00\x0becho: test2" "echo: test2" typed_abi_call/typed_c2c.py:11 - == // (𝕡) app#0 | {==} result == "echo: test2" typed_abi_call/typed_c2c.py:11 - // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0 result == "echo: test2" typed_abi_call/typed_c2c.py:11 - // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 assert result == "echo: test2" typed_abi_call/typed_c2c.py:11 - assert // (𝕡) app#0 | assert result == "echo: test2" typed_abi_call/typed_c2c.py:11 - itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 + itxn_submit // (𝕡) app#0 | arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + // virtual: store awst_tmp%3#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%3#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + dup // load awst_tmp%3#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%3#0,awst_tmp%3#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + extract 4 0 // (𝕡) app#0 | awst_tmp%3#0,{extract} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%3#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + // virtual: load awst_tmp%3#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%3#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%5#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%5#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%5#0,0x151f7c75 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%6#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%6#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(LoggerClient.echo, "test2", app_id=app) typed_abi_call/typed_c2c.py:11 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test2" typed_abi_call/typed_c2c.py:12 + byte "\x00\x0becho: test2" // (𝕡) app#0 | result#0,"\x00\x0becho: test2" "echo: test2" typed_abi_call/typed_c2c.py:12 + == // (𝕡) app#0 | {==} result == "echo: test2" typed_abi_call/typed_c2c.py:12 + // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0 result == "echo: test2" typed_abi_call/typed_c2c.py:12 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 assert result == "echo: test2" typed_abi_call/typed_c2c.py:12 + assert // (𝕡) app#0 | assert result == "echo: test2" typed_abi_call/typed_c2c.py:12 + itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x05test3" // (𝕡) app#0 | "\x00\x05test3" "test3" typed_abi_call/typed_c2c.py:12 + byte "\x00\x05test3" // (𝕡) app#0 | "\x00\x05test3" "test3" typed_abi_call/typed_c2c.py:13 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 + int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 + int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - // virtual: store awst_tmp%5#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%5#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - dup // load awst_tmp%5#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%5#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - extract 4 0 // (𝕡) app#0 | awst_tmp%5#0,{extract} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - // virtual: load awst_tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%9#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%9#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%9#0,0x151f7c75 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%10#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%10#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:12 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test3" typed_abi_call/typed_c2c.py:13 - byte "\x00\x0becho: test3" // (𝕡) app#0 | result#0,"\x00\x0becho: test3" "echo: test3" typed_abi_call/typed_c2c.py:13 - == // (𝕡) app#0 | {==} result == "echo: test3" typed_abi_call/typed_c2c.py:13 - // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | tmp%11#0 result == "echo: test3" typed_abi_call/typed_c2c.py:13 - // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | tmp%11#0 assert result == "echo: test3" typed_abi_call/typed_c2c.py:13 - assert // (𝕡) app#0 | assert result == "echo: test3" typed_abi_call/typed_c2c.py:13 - itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 + itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + // virtual: store awst_tmp%5#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%5#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + dup // load awst_tmp%5#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%5#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + extract 4 0 // (𝕡) app#0 | awst_tmp%5#0,{extract} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + // virtual: load awst_tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%9#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%9#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%9#0,0x151f7c75 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%10#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%10#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo", "test3", app_id=app) typed_abi_call/typed_c2c.py:13 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test3" typed_abi_call/typed_c2c.py:14 + byte "\x00\x0becho: test3" // (𝕡) app#0 | result#0,"\x00\x0becho: test3" "echo: test3" typed_abi_call/typed_c2c.py:14 + == // (𝕡) app#0 | {==} result == "echo: test3" typed_abi_call/typed_c2c.py:14 + // virtual: store tmp%11#0 to l-stack (no copy) (𝕡) app#0 | tmp%11#0 result == "echo: test3" typed_abi_call/typed_c2c.py:14 + // virtual: load tmp%11#0 from l-stack (no copy) (𝕡) app#0 | tmp%11#0 assert result == "echo: test3" typed_abi_call/typed_c2c.py:14 + assert // (𝕡) app#0 | assert result == "echo: test3" typed_abi_call/typed_c2c.py:14 + itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x05test4" // (𝕡) app#0 | "\x00\x05test4" "test4" typed_abi_call/typed_c2c.py:14 + byte "\x00\x05test4" // (𝕡) app#0 | "\x00\x05test4" "test4" typed_abi_call/typed_c2c.py:15 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 + int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 + int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - // virtual: store awst_tmp%7#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%7#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - dup // load awst_tmp%7#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%7#0,awst_tmp%7#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - extract 4 0 // (𝕡) app#0 | awst_tmp%7#0,{extract} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%7#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - // virtual: load awst_tmp%7#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%7#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%13#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - // virtual: store tmp%14#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%14#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - // virtual: load tmp%14#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%14#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:14 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test4" typed_abi_call/typed_c2c.py:15 - byte "\x00\x0becho: test4" // (𝕡) app#0 | result#0,"\x00\x0becho: test4" "echo: test4" typed_abi_call/typed_c2c.py:15 - == // (𝕡) app#0 | {==} result == "echo: test4" typed_abi_call/typed_c2c.py:15 - // virtual: store tmp%15#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0 result == "echo: test4" typed_abi_call/typed_c2c.py:15 - // virtual: load tmp%15#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0 assert result == "echo: test4" typed_abi_call/typed_c2c.py:15 - assert // (𝕡) app#0 | assert result == "echo: test4" typed_abi_call/typed_c2c.py:15 - itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 + itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + // virtual: store awst_tmp%7#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%7#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + dup // load awst_tmp%7#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%7#0,awst_tmp%7#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + extract 4 0 // (𝕡) app#0 | awst_tmp%7#0,{extract} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%7#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + // virtual: load awst_tmp%7#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%7#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%13#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + // virtual: store tmp%14#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%14#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + // virtual: load tmp%14#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%14#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) typed_abi_call/typed_c2c.py:15 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test4" typed_abi_call/typed_c2c.py:16 + byte "\x00\x0becho: test4" // (𝕡) app#0 | result#0,"\x00\x0becho: test4" "echo: test4" typed_abi_call/typed_c2c.py:16 + == // (𝕡) app#0 | {==} result == "echo: test4" typed_abi_call/typed_c2c.py:16 + // virtual: store tmp%15#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0 result == "echo: test4" typed_abi_call/typed_c2c.py:16 + // virtual: load tmp%15#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0 assert result == "echo: test4" typed_abi_call/typed_c2c.py:16 + assert // (𝕡) app#0 | assert result == "echo: test4" typed_abi_call/typed_c2c.py:16 + itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x05test5" // (𝕡) app#0 | "\x00\x05test5" "test5" typed_abi_call/typed_c2c.py:16 + byte "\x00\x05test5" // (𝕡) app#0 | "\x00\x05test5" "test5" typed_abi_call/typed_c2c.py:17 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 + int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 + int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - // virtual: store awst_tmp%9#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%9#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - dup // load awst_tmp%9#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%9#0,awst_tmp%9#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - extract 4 0 // (𝕡) app#0 | awst_tmp%9#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%9#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - // virtual: load awst_tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%9#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - // virtual: store tmp%17#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%17#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - // virtual: load tmp%17#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%17#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%17#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - // virtual: store tmp%18#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%18#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - // virtual: load tmp%18#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%18#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:16 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test5" typed_abi_call/typed_c2c.py:17 - byte "\x00\x0becho: test5" // (𝕡) app#0 | result#0,"\x00\x0becho: test5" "echo: test5" typed_abi_call/typed_c2c.py:17 - == // (𝕡) app#0 | {==} result == "echo: test5" typed_abi_call/typed_c2c.py:17 - // virtual: store tmp%19#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0 result == "echo: test5" typed_abi_call/typed_c2c.py:17 - // virtual: load tmp%19#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0 assert result == "echo: test5" typed_abi_call/typed_c2c.py:17 - assert // (𝕡) app#0 | assert result == "echo: test5" typed_abi_call/typed_c2c.py:17 + itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + // virtual: store awst_tmp%9#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%9#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + dup // load awst_tmp%9#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%9#0,awst_tmp%9#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + extract 4 0 // (𝕡) app#0 | awst_tmp%9#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%9#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + // virtual: load awst_tmp%9#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%9#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%17#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%17#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%17#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%17#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%17#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + // virtual: store tmp%18#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%18#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + // virtual: load tmp%18#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%18#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) typed_abi_call/typed_c2c.py:17 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result == "echo: test5" typed_abi_call/typed_c2c.py:18 + byte "\x00\x0becho: test5" // (𝕡) app#0 | result#0,"\x00\x0becho: test5" "echo: test5" typed_abi_call/typed_c2c.py:18 + == // (𝕡) app#0 | {==} result == "echo: test5" typed_abi_call/typed_c2c.py:18 + // virtual: store tmp%19#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0 result == "echo: test5" typed_abi_call/typed_c2c.py:18 + // virtual: load tmp%19#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0 assert result == "echo: test5" typed_abi_call/typed_c2c.py:18 + assert // (𝕡) app#0 | assert result == "echo: test5" typed_abi_call/typed_c2c.py:18 retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: test_method_overload: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_method_overload(self, app: Application) -> None: typed_abi_call/typed_c2c.py:19-20 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_method_overload(self, app: Application) -> None: typed_abi_call/typed_c2c.py:20-21 test_method_overload_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 + itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x0etyped + ignore" // (𝕡) app#0 | "\x00\x0etyped + ignore" "typed + ignore" typed_abi_call/typed_c2c.py:21 + byte "\x00\x0etyped + ignore" // (𝕡) app#0 | "\x00\x0etyped + ignore" "typed + ignore" typed_abi_call/typed_c2c.py:22 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 + int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 + int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - extract 0 4 // (𝕡) app#0 | {extract} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - byte 0x151f7c75 // (𝕡) app#0 | tmp%1#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - == // (𝕡) app#0 | {==} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - assert // ARC4 prefix is valid // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:21 - itxn LastLog // (𝕡) app#0 | {itxn} op.ITxn.last_log() typed_abi_call/typed_c2c.py:22 - // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%2#0 op.ITxn.last_log() typed_abi_call/typed_c2c.py:22 - dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%2#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - extract 4 0 // (𝕡) app#0 | awst_tmp%2#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - swap // store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - extract 0 4 // (𝕡) app#0 | tmp%3#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%4#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%4#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - byte 0x151f7c75 // (𝕡) app#0 | tmp%3#0,tmp%4#0,0x151f7c75 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - == // (𝕡) app#0 | tmp%3#0,{==} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%5#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%5#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:22 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:22 - byte "\x00\x14echo: typed + ignore" // (𝕡) app#0 | tmp%3#0,"\x00\x14echo: typed + ignore" "echo: typed + ignore" typed_abi_call/typed_c2c.py:22 - == // (𝕡) app#0 | {==} arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:22 - // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | tmp%6#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:22 - // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | tmp%6#0 assert arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:22 - assert // (𝕡) app#0 | assert arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:22 - itxn_begin // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:24 + itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + extract 0 4 // (𝕡) app#0 | {extract} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + byte 0x151f7c75 // (𝕡) app#0 | tmp%1#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + == // (𝕡) app#0 | {==} arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + assert // ARC4 prefix is valid // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) typed_abi_call/typed_c2c.py:22 + itxn LastLog // (𝕡) app#0 | {itxn} op.ITxn.last_log() typed_abi_call/typed_c2c.py:23 + // virtual: store awst_tmp%2#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%2#0 op.ITxn.last_log() typed_abi_call/typed_c2c.py:23 + dup // load awst_tmp%2#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%2#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + extract 4 0 // (𝕡) app#0 | awst_tmp%2#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + swap // store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + // virtual: load awst_tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,awst_tmp%2#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + extract 0 4 // (𝕡) app#0 | tmp%3#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%4#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%4#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + byte 0x151f7c75 // (𝕡) app#0 | tmp%3#0,tmp%4#0,0x151f7c75 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + == // (𝕡) app#0 | tmp%3#0,{==} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + // virtual: store tmp%5#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%5#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + // virtual: load tmp%5#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0,tmp%5#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:23 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:23 + byte "\x00\x14echo: typed + ignore" // (𝕡) app#0 | tmp%3#0,"\x00\x14echo: typed + ignore" "echo: typed + ignore" typed_abi_call/typed_c2c.py:23 + == // (𝕡) app#0 | {==} arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:23 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | tmp%6#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:23 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | tmp%6#0 assert arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:23 + assert // (𝕡) app#0 | assert arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" typed_abi_call/typed_c2c.py:23 + itxn_begin // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:25 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:24 + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:25 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x10untyped + ignore" // (𝕡) app#0 | "\x00\x10untyped + ignore" "untyped + ignore" typed_abi_call/typed_c2c.py:24 + byte "\x00\x10untyped + ignore" // (𝕡) app#0 | "\x00\x10untyped + ignore" "untyped + ignore" typed_abi_call/typed_c2c.py:25 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:24 + int appl // (𝕡) app#0 | appl arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:25 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:24 + int 0 // (𝕡) app#0 | 0 arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:25 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:24 - itxn LastLog // (𝕡) app#0 | {itxn} op.ITxn.last_log() typed_abi_call/typed_c2c.py:25 - // virtual: store awst_tmp%3#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%3#0 op.ITxn.last_log() typed_abi_call/typed_c2c.py:25 - dup // load awst_tmp%3#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%3#0,awst_tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - extract 4 0 // (𝕡) app#0 | awst_tmp%3#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - swap // store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,awst_tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - // virtual: load awst_tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,awst_tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - extract 0 4 // (𝕡) app#0 | tmp%7#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - // virtual: store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%8#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%8#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - byte 0x151f7c75 // (𝕡) app#0 | tmp%7#0,tmp%8#0,0x151f7c75 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - == // (𝕡) app#0 | tmp%7#0,{==} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%9#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%9#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%7#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:25 - // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:25 - byte "\x00\x16echo: untyped + ignore" // (𝕡) app#0 | tmp%7#0,"\x00\x16echo: untyped + ignore" "echo: untyped + ignore" typed_abi_call/typed_c2c.py:25 - == // (𝕡) app#0 | {==} arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:25 - // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | tmp%10#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:25 - // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | tmp%10#0 assert arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:25 - assert // (𝕡) app#0 | assert arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:25 - itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 + itxn_submit // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) typed_abi_call/typed_c2c.py:25 + itxn LastLog // (𝕡) app#0 | {itxn} op.ITxn.last_log() typed_abi_call/typed_c2c.py:26 + // virtual: store awst_tmp%3#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%3#0 op.ITxn.last_log() typed_abi_call/typed_c2c.py:26 + dup // load awst_tmp%3#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%3#0,awst_tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + extract 4 0 // (𝕡) app#0 | awst_tmp%3#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + swap // store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,awst_tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + // virtual: load awst_tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,awst_tmp%3#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + extract 0 4 // (𝕡) app#0 | tmp%7#0,{extract} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + // virtual: store tmp%8#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%8#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + // virtual: load tmp%8#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%8#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + byte 0x151f7c75 // (𝕡) app#0 | tmp%7#0,tmp%8#0,0x151f7c75 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + == // (𝕡) app#0 | tmp%7#0,{==} arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%9#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0,tmp%9#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%7#0 arc4.String.from_log(op.ITxn.last_log()) typed_abi_call/typed_c2c.py:26 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:26 + byte "\x00\x16echo: untyped + ignore" // (𝕡) app#0 | tmp%7#0,"\x00\x16echo: untyped + ignore" "echo: untyped + ignore" typed_abi_call/typed_c2c.py:26 + == // (𝕡) app#0 | {==} arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:26 + // virtual: store tmp%10#0 to l-stack (no copy) (𝕡) app#0 | tmp%10#0 arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:26 + // virtual: load tmp%10#0 from l-stack (no copy) (𝕡) app#0 | tmp%10#0 assert arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:26 + assert // (𝕡) app#0 | assert arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" typed_abi_call/typed_c2c.py:26 + itxn_begin // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x05tuple" // (𝕡) app#0 | "\x00\x05tuple" "tuple" typed_abi_call/typed_c2c.py:27 + byte "\x00\x05tuple" // (𝕡) app#0 | "\x00\x05tuple" "tuple" typed_abi_call/typed_c2c.py:28 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 + int appl // (𝕡) app#0 | appl arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 + int 0 // (𝕡) app#0 | 0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - // virtual: store awst_tmp%5#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%5#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - dup // load awst_tmp%5#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%5#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - extract 4 0 // (𝕡) app#0 | awst_tmp%5#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - swap // store result.0#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - // virtual: load awst_tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - extract 0 4 // (𝕡) app#0 | result.0#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - // virtual: store tmp%12#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%12#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%12#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - byte 0x151f7c75 // (𝕡) app#0 | result.0#0,tmp%12#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - == // (𝕡) app#0 | result.0#0,{==} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - assert // ARC4 prefix is valid // (𝕡) app#0 | result.0#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - itxn LastLog // (𝕡) app#0 | result.0#0,{itxn} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - // virtual: store result.1.LastLog#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,result.1.LastLog#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:27 - swap // load result.0#0 from l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,result.0#0 result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:28 - byte "\x00\x0becho: tuple" // (𝕡) app#0 | result.1.LastLog#0,result.0#0,"\x00\x0becho: tuple" "echo: tuple" typed_abi_call/typed_c2c.py:28 - == // (𝕡) app#0 | result.1.LastLog#0,{==} result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:28 - // virtual: store tmp%14#0 to l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,tmp%14#0 result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:28 - // virtual: load tmp%14#0 from l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,tmp%14#0 assert result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:28 - assert // (𝕡) app#0 | result.1.LastLog#0 assert result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:28 - dup // load result.1.LastLog#0 from l-stack (copy) (𝕡) app#0 | result.1.LastLog#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - extract 4 0 // (𝕡) app#0 | result.1.LastLog#0,{extract} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - swap // store tmp%15#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - // virtual: load result.1.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - extract 0 4 // (𝕡) app#0 | tmp%15#0,{extract} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - // virtual: store tmp%16#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%16#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - // virtual: load tmp%16#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%16#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - byte 0x151f7c75 // (𝕡) app#0 | tmp%15#0,tmp%16#0,0x151f7c75 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - == // (𝕡) app#0 | tmp%15#0,{==} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - // virtual: store tmp%17#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%17#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - // virtual: load tmp%17#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%17#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%15#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:29 - // virtual: load tmp%15#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0 arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:29 - byte "\x00\x0becho: tuple" // (𝕡) app#0 | tmp%15#0,"\x00\x0becho: tuple" "echo: tuple" typed_abi_call/typed_c2c.py:29 - == // (𝕡) app#0 | {==} arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:29 - // virtual: store tmp%18#0 to l-stack (no copy) (𝕡) app#0 | tmp%18#0 arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:29 - // virtual: load tmp%18#0 from l-stack (no copy) (𝕡) app#0 | tmp%18#0 assert arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:29 - assert // (𝕡) app#0 | assert arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:29 - itxn_begin // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:31 + itxn_submit // (𝕡) app#0 | arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: store awst_tmp%5#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%5#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + dup // load awst_tmp%5#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%5#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + extract 4 0 // (𝕡) app#0 | awst_tmp%5#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + swap // store result.0#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: load awst_tmp%5#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,awst_tmp%5#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + extract 0 4 // (𝕡) app#0 | result.0#0,{extract} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: store tmp%12#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%12#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: load tmp%12#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%12#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + byte 0x151f7c75 // (𝕡) app#0 | result.0#0,tmp%12#0,0x151f7c75 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + == // (𝕡) app#0 | result.0#0,{==} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: store tmp%13#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: load tmp%13#0 from l-stack (no copy) (𝕡) app#0 | result.0#0,tmp%13#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + assert // ARC4 prefix is valid // (𝕡) app#0 | result.0#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + itxn LastLog // (𝕡) app#0 | result.0#0,{itxn} arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + // virtual: store result.1.LastLog#0 to l-stack (no copy) (𝕡) app#0 | result.0#0,result.1.LastLog#0 arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) typed_abi_call/typed_c2c.py:28 + swap // load result.0#0 from l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,result.0#0 result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:29 + byte "\x00\x0becho: tuple" // (𝕡) app#0 | result.1.LastLog#0,result.0#0,"\x00\x0becho: tuple" "echo: tuple" typed_abi_call/typed_c2c.py:29 + == // (𝕡) app#0 | result.1.LastLog#0,{==} result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:29 + // virtual: store tmp%14#0 to l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,tmp%14#0 result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:29 + // virtual: load tmp%14#0 from l-stack (no copy) (𝕡) app#0 | result.1.LastLog#0,tmp%14#0 assert result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:29 + assert // (𝕡) app#0 | result.1.LastLog#0 assert result[0] == "echo: tuple" typed_abi_call/typed_c2c.py:29 + dup // load result.1.LastLog#0 from l-stack (copy) (𝕡) app#0 | result.1.LastLog#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + extract 4 0 // (𝕡) app#0 | result.1.LastLog#0,{extract} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + swap // store tmp%15#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + // virtual: load result.1.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,result.1.LastLog#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + extract 0 4 // (𝕡) app#0 | tmp%15#0,{extract} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + // virtual: store tmp%16#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%16#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + // virtual: load tmp%16#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%16#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + byte 0x151f7c75 // (𝕡) app#0 | tmp%15#0,tmp%16#0,0x151f7c75 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + == // (𝕡) app#0 | tmp%15#0,{==} arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + // virtual: store tmp%17#0 to l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%17#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + // virtual: load tmp%17#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0,tmp%17#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%15#0 arc4.String.from_log(result[1].last_log) typed_abi_call/typed_c2c.py:30 + // virtual: load tmp%15#0 from l-stack (no copy) (𝕡) app#0 | tmp%15#0 arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:30 + byte "\x00\x0becho: tuple" // (𝕡) app#0 | tmp%15#0,"\x00\x0becho: tuple" "echo: tuple" typed_abi_call/typed_c2c.py:30 + == // (𝕡) app#0 | {==} arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:30 + // virtual: store tmp%18#0 to l-stack (no copy) (𝕡) app#0 | tmp%18#0 arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:30 + // virtual: load tmp%18#0 from l-stack (no copy) (𝕡) app#0 | tmp%18#0 assert arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:30 + assert // (𝕡) app#0 | assert arc4.String.from_log(result[1].last_log) == "echo: tuple" typed_abi_call/typed_c2c.py:30 + itxn_begin // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:32 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:31 + method "echo(string)string" // (𝕡) app#0 | method<"echo(string)string"> arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:32 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x07untyped" // (𝕡) app#0 | "\x00\x07untyped" "untyped" typed_abi_call/typed_c2c.py:31 + byte "\x00\x07untyped" // (𝕡) app#0 | "\x00\x07untyped" "untyped" typed_abi_call/typed_c2c.py:32 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:31 + int appl // (𝕡) app#0 | appl arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:32 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:31 + int 0 // (𝕡) app#0 | 0 arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:32 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:31 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:31 - // virtual: store txn_result.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn_result.LastLog#0 arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:31 - dup // load txn_result.LastLog#0 from l-stack (copy) (𝕡) app#0 | txn_result.LastLog#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - extract 4 0 // (𝕡) app#0 | txn_result.LastLog#0,{extract} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - swap // store tmp%19#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - // virtual: load txn_result.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - extract 0 4 // (𝕡) app#0 | tmp%19#0,{extract} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - // virtual: store tmp%20#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%20#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - // virtual: load tmp%20#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%20#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - byte 0x151f7c75 // (𝕡) app#0 | tmp%19#0,tmp%20#0,0x151f7c75 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - == // (𝕡) app#0 | tmp%19#0,{==} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - // virtual: store tmp%21#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%21#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - // virtual: load tmp%21#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%21#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%19#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:32 - // virtual: load tmp%19#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0 arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:32 - byte "\x00\recho: untyped" // (𝕡) app#0 | tmp%19#0,"\x00\recho: untyped" "echo: untyped" typed_abi_call/typed_c2c.py:32 - == // (𝕡) app#0 | {==} arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:32 - // virtual: store tmp%22#0 to l-stack (no copy) (𝕡) app#0 | tmp%22#0 arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:32 - // virtual: load tmp%22#0 from l-stack (no copy) (𝕡) app#0 | tmp%22#0 assert arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:32 - assert // (𝕡) app#0 | assert arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:32 + itxn_submit // (𝕡) app#0 | arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:32 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:32 + // virtual: store txn_result.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn_result.LastLog#0 arc4.abi_call("echo(string)string", "untyped", app_id=app) typed_abi_call/typed_c2c.py:32 + dup // load txn_result.LastLog#0 from l-stack (copy) (𝕡) app#0 | txn_result.LastLog#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + extract 4 0 // (𝕡) app#0 | txn_result.LastLog#0,{extract} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + swap // store tmp%19#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + // virtual: load txn_result.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,txn_result.LastLog#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + extract 0 4 // (𝕡) app#0 | tmp%19#0,{extract} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + // virtual: store tmp%20#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%20#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + // virtual: load tmp%20#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%20#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + byte 0x151f7c75 // (𝕡) app#0 | tmp%19#0,tmp%20#0,0x151f7c75 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + == // (𝕡) app#0 | tmp%19#0,{==} arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + // virtual: store tmp%21#0 to l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%21#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + // virtual: load tmp%21#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0,tmp%21#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + assert // ARC4 prefix is valid // (𝕡) app#0 | tmp%19#0 arc4.String.from_log(txn_result.last_log) typed_abi_call/typed_c2c.py:33 + // virtual: load tmp%19#0 from l-stack (no copy) (𝕡) app#0 | tmp%19#0 arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:33 + byte "\x00\recho: untyped" // (𝕡) app#0 | tmp%19#0,"\x00\recho: untyped" "echo: untyped" typed_abi_call/typed_c2c.py:33 + == // (𝕡) app#0 | {==} arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:33 + // virtual: store tmp%22#0 to l-stack (no copy) (𝕡) app#0 | tmp%22#0 arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:33 + // virtual: load tmp%22#0 from l-stack (no copy) (𝕡) app#0 | tmp%22#0 assert arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:33 + assert // (𝕡) app#0 | assert arc4.String.from_log(txn_result.last_log) == "echo: untyped" typed_abi_call/typed_c2c.py:33 retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: test_arg_conversion: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_arg_conversion(self, app: Application) -> None: typed_abi_call/typed_c2c.py:34-35 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_arg_conversion(self, app: Application) -> None: typed_abi_call/typed_c2c.py:35-36 test_arg_conversion_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:36 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:37 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:36 + method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:37 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\nconverted1" // (𝕡) app#0 | "\x00\nconverted1" "converted1" typed_abi_call/typed_c2c.py:36 + byte "\x00\nconverted1" // (𝕡) app#0 | "\x00\nconverted1" "converted1" typed_abi_call/typed_c2c.py:37 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:36 + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:37 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:36 + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:37 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:36 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:36 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:36 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:37 - byte "converted1" // (𝕡) app#0 | txn.LastLog#0,"converted1" b"converted1" typed_abi_call/typed_c2c.py:37 - == // (𝕡) app#0 | {==} txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:37 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0 txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:37 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 assert txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:37 - assert // (𝕡) app#0 | assert txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:37 - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:39 + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:37 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:37 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_string, "converted1", app_id=app) typed_abi_call/typed_c2c.py:37 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:38 + byte "converted1" // (𝕡) app#0 | txn.LastLog#0,"converted1" b"converted1" typed_abi_call/typed_c2c.py:38 + == // (𝕡) app#0 | {==} txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:38 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0 txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:38 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 assert txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:38 + assert // (𝕡) app#0 | assert txn.last_log == b"converted1" typed_abi_call/typed_c2c.py:38 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:40 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "log(uint64)void" // (𝕡) app#0 | method<"log(uint64)void"> arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:39 + method "log(uint64)void" // (𝕡) app#0 | method<"log(uint64)void"> arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:40 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000002 // (𝕡) app#0 | 0x0000000000000002 2 typed_abi_call/typed_c2c.py:39 + byte 0x0000000000000002 // (𝕡) app#0 | 0x0000000000000002 2 typed_abi_call/typed_c2c.py:40 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:39 + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:40 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:39 + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:40 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:39 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:39 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:39 - int 2 // (𝕡) app#0 | txn.LastLog#0,2 2 typed_abi_call/typed_c2c.py:40 - itob // (𝕡) app#0 | txn.LastLog#0,{itob} op.itob(2) typed_abi_call/typed_c2c.py:40 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0,tmp%1#0 op.itob(2) typed_abi_call/typed_c2c.py:40 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0,txn.LastLog#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:40 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0,tmp%1#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:40 - == // (𝕡) app#0 | {==} txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:40 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:40 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 assert txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:40 - assert // (𝕡) app#0 | assert txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:40 - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:42 + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:40 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:40 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_uint64, 2, app_id=app) typed_abi_call/typed_c2c.py:40 + int 2 // (𝕡) app#0 | txn.LastLog#0,2 2 typed_abi_call/typed_c2c.py:41 + itob // (𝕡) app#0 | txn.LastLog#0,{itob} op.itob(2) typed_abi_call/typed_c2c.py:41 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0,tmp%1#0 op.itob(2) typed_abi_call/typed_c2c.py:41 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0,txn.LastLog#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:41 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0,tmp%1#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:41 + == // (𝕡) app#0 | {==} txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:41 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:41 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 assert txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:41 + assert // (𝕡) app#0 | assert txn.last_log == op.itob(2) typed_abi_call/typed_c2c.py:41 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:43 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "log(uint512)void" // (𝕡) app#0 | method<"log(uint512)void"> arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:42 + method "log(uint512)void" // (𝕡) app#0 | method<"log(uint512)void"> arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:43 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 // (𝕡) app#0 | 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 3 typed_abi_call/typed_c2c.py:42 + byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 // (𝕡) app#0 | 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 3 typed_abi_call/typed_c2c.py:43 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:42 + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:43 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:42 + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:43 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:42 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:42 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:42 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:43 - byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 // (𝕡) app#0 | txn.LastLog#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 op.bzero(56) + op.itob(3) typed_abi_call/typed_c2c.py:43 - == // (𝕡) app#0 | {==} txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:43 - // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | tmp%6#0 txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:43 - // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | tmp%6#0 assert txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:43 - assert // (𝕡) app#0 | assert txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:43 - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:45 + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:43 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:43 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_uint512, 3, app_id=app) typed_abi_call/typed_c2c.py:43 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:44 + byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 // (𝕡) app#0 | txn.LastLog#0,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 op.bzero(56) + op.itob(3) typed_abi_call/typed_c2c.py:44 + == // (𝕡) app#0 | {==} txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:44 + // virtual: store tmp%6#0 to l-stack (no copy) (𝕡) app#0 | tmp%6#0 txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:44 + // virtual: load tmp%6#0 from l-stack (no copy) (𝕡) app#0 | tmp%6#0 assert txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:44 + assert // (𝕡) app#0 | assert txn.last_log == (op.bzero(56) + op.itob(3)) typed_abi_call/typed_c2c.py:44 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:46 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "log(byte[])void" // (𝕡) app#0 | method<"log(byte[])void"> arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:45 + method "log(byte[])void" // (𝕡) app#0 | method<"log(byte[])void"> arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:46 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000134 // (𝕡) app#0 | 0x000134 b"4" typed_abi_call/typed_c2c.py:45 + byte 0x000134 // (𝕡) app#0 | 0x000134 b"4" typed_abi_call/typed_c2c.py:46 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:45 + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:46 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:45 + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:46 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:45 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:45 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:45 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"4" typed_abi_call/typed_c2c.py:46 - byte "4" // (𝕡) app#0 | txn.LastLog#0,"4" b"4" typed_abi_call/typed_c2c.py:46 - == // (𝕡) app#0 | {==} txn.last_log == b"4" typed_abi_call/typed_c2c.py:46 - // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0 txn.last_log == b"4" typed_abi_call/typed_c2c.py:46 - // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 assert txn.last_log == b"4" typed_abi_call/typed_c2c.py:46 - assert // (𝕡) app#0 | assert txn.last_log == b"4" typed_abi_call/typed_c2c.py:46 - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:48 + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:46 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:46 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_bytes, b"4", app_id=app) typed_abi_call/typed_c2c.py:46 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"4" typed_abi_call/typed_c2c.py:47 + byte "4" // (𝕡) app#0 | txn.LastLog#0,"4" b"4" typed_abi_call/typed_c2c.py:47 + == // (𝕡) app#0 | {==} txn.last_log == b"4" typed_abi_call/typed_c2c.py:47 + // virtual: store tmp%7#0 to l-stack (no copy) (𝕡) app#0 | tmp%7#0 txn.last_log == b"4" typed_abi_call/typed_c2c.py:47 + // virtual: load tmp%7#0 from l-stack (no copy) (𝕡) app#0 | tmp%7#0 assert txn.last_log == b"4" typed_abi_call/typed_c2c.py:47 + assert // (𝕡) app#0 | assert txn.last_log == b"4" typed_abi_call/typed_c2c.py:47 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:49 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "log(bool)void" // (𝕡) app#0 | method<"log(bool)void"> arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:48 + method "log(bool)void" // (𝕡) app#0 | method<"log(bool)void"> arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:49 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x80 // (𝕡) app#0 | 0x80 True typed_abi_call/typed_c2c.py:48 + byte 0x80 // (𝕡) app#0 | 0x80 True typed_abi_call/typed_c2c.py:49 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:48 + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:49 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:48 + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:49 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:48 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:48 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:48 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"True" typed_abi_call/typed_c2c.py:49 - byte "True" // (𝕡) app#0 | txn.LastLog#0,"True" b"True" typed_abi_call/typed_c2c.py:49 - == // (𝕡) app#0 | {==} txn.last_log == b"True" typed_abi_call/typed_c2c.py:49 - // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | tmp%9#0 txn.last_log == b"True" typed_abi_call/typed_c2c.py:49 - // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | tmp%9#0 assert txn.last_log == b"True" typed_abi_call/typed_c2c.py:49 - assert // (𝕡) app#0 | assert txn.last_log == b"True" typed_abi_call/typed_c2c.py:49 + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:49 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:49 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_bool, True, app_id=app) typed_abi_call/typed_c2c.py:49 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"True" typed_abi_call/typed_c2c.py:50 + byte "True" // (𝕡) app#0 | txn.LastLog#0,"True" b"True" typed_abi_call/typed_c2c.py:50 + == // (𝕡) app#0 | {==} txn.last_log == b"True" typed_abi_call/typed_c2c.py:50 + // virtual: store tmp%9#0 to l-stack (no copy) (𝕡) app#0 | tmp%9#0 txn.last_log == b"True" typed_abi_call/typed_c2c.py:50 + // virtual: load tmp%9#0 from l-stack (no copy) (𝕡) app#0 | tmp%9#0 assert txn.last_log == b"True" typed_abi_call/typed_c2c.py:50 + assert // (𝕡) app#0 | assert txn.last_log == b"True" typed_abi_call/typed_c2c.py:50 retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: test_15plus_args: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_15plus_args(self, app: Application) -> None: typed_abi_call/typed_c2c.py:51-52 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_15plus_args(self, app: Application) -> None: typed_abi_call/typed_c2c.py:52-53 test_15plus_args_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 + itxn_begin // (𝕡) app#0 | arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" // (𝕡) app#0 | method<"return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]"> arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 + method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" // (𝕡) app#0 | method<"return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]"> arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000001 // (𝕡) app#0 | 0x0000000000000001 1 typed_abi_call/typed_c2c.py:55 + byte 0x0000000000000001 // (𝕡) app#0 | 0x0000000000000001 1 typed_abi_call/typed_c2c.py:56 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000002 // (𝕡) app#0 | 0x0000000000000002 2 typed_abi_call/typed_c2c.py:56 + byte 0x0000000000000002 // (𝕡) app#0 | 0x0000000000000002 2 typed_abi_call/typed_c2c.py:57 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000003 // (𝕡) app#0 | 0x0000000000000003 3 typed_abi_call/typed_c2c.py:57 + byte 0x0000000000000003 // (𝕡) app#0 | 0x0000000000000003 3 typed_abi_call/typed_c2c.py:58 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000004 // (𝕡) app#0 | 0x0000000000000004 4 typed_abi_call/typed_c2c.py:58 + byte 0x0000000000000004 // (𝕡) app#0 | 0x0000000000000004 4 typed_abi_call/typed_c2c.py:59 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000005 // (𝕡) app#0 | 0x0000000000000005 5 typed_abi_call/typed_c2c.py:59 + byte 0x0000000000000005 // (𝕡) app#0 | 0x0000000000000005 5 typed_abi_call/typed_c2c.py:60 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000006 // (𝕡) app#0 | 0x0000000000000006 6 typed_abi_call/typed_c2c.py:60 + byte 0x0000000000000006 // (𝕡) app#0 | 0x0000000000000006 6 typed_abi_call/typed_c2c.py:61 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000007 // (𝕡) app#0 | 0x0000000000000007 7 typed_abi_call/typed_c2c.py:61 + byte 0x0000000000000007 // (𝕡) app#0 | 0x0000000000000007 7 typed_abi_call/typed_c2c.py:62 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000008 // (𝕡) app#0 | 0x0000000000000008 8 typed_abi_call/typed_c2c.py:62 + byte 0x0000000000000008 // (𝕡) app#0 | 0x0000000000000008 8 typed_abi_call/typed_c2c.py:63 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0000000000000009 // (𝕡) app#0 | 0x0000000000000009 9 typed_abi_call/typed_c2c.py:63 + byte 0x0000000000000009 // (𝕡) app#0 | 0x0000000000000009 9 typed_abi_call/typed_c2c.py:64 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000000000000000a // (𝕡) app#0 | 0x000000000000000a 10 typed_abi_call/typed_c2c.py:64 + byte 0x000000000000000a // (𝕡) app#0 | 0x000000000000000a 10 typed_abi_call/typed_c2c.py:65 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000000000000000b // (𝕡) app#0 | 0x000000000000000b 11 typed_abi_call/typed_c2c.py:65 + byte 0x000000000000000b // (𝕡) app#0 | 0x000000000000000b 11 typed_abi_call/typed_c2c.py:66 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000000000000000c // (𝕡) app#0 | 0x000000000000000c 12 typed_abi_call/typed_c2c.py:66 + byte 0x000000000000000c // (𝕡) app#0 | 0x000000000000000c 12 typed_abi_call/typed_c2c.py:67 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000000000000000d // (𝕡) app#0 | 0x000000000000000d 13 typed_abi_call/typed_c2c.py:67 + byte 0x000000000000000d // (𝕡) app#0 | 0x000000000000000d 13 typed_abi_call/typed_c2c.py:68 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x000000000000000e // (𝕡) app#0 | 0x000000000000000e 14 typed_abi_call/typed_c2c.py:68 + byte 0x000000000000000e // (𝕡) app#0 | 0x000000000000000e 14 typed_abi_call/typed_c2c.py:69 itxn_field ApplicationArgs // (𝕡) app#0 | - byte 0x0f101112deadbeef14 // (𝕡) app#0 | 0x0f101112deadbeef14 15,\n16,\n17,\n18,\narc4.Tuple((arc4.UInt8(0xDE), arc4.UInt8(0xAD), arc4.UInt8(0xBE), arc4.UInt8(... typed_abi_call/typed_c2c.py:69-74 + byte 0x0f101112deadbeef14 // (𝕡) app#0 | 0x0f101112deadbeef14 15,\n16,\n17,\n18,\narc4.Tuple((arc4.UInt8(0xDE), arc4.UInt8(0xAD), arc4.UInt8(0xBE), arc4.UInt8(... typed_abi_call/typed_c2c.py:70-75 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 + int appl // (𝕡) app#0 | appl arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 + int 0 // (𝕡) app#0 | 0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - extract 4 0 // (𝕡) app#0 | awst_tmp%1#0,{extract} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%1#0,0x151f7c75 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - == // (𝕡) app#0 | result#0,{==} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:53-76 - // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result.native typed_abi_call/typed_c2c.py:77 - extract 2 0 // (𝕡) app#0 | {extract} result.native typed_abi_call/typed_c2c.py:77 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 result.native typed_abi_call/typed_c2c.py:77 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:77 - byte 0x0f101112deadbeef14 // (𝕡) app#0 | tmp%3#0,0x0f101112deadbeef14 Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:77 - == // (𝕡) app#0 | {==} result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:77 - // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | tmp%4#0 result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:77 - // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | tmp%4#0 assert result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:77 - assert // (𝕡) app#0 | assert result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:77 + itxn_submit // (𝕡) app#0 | arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + // virtual: store awst_tmp%1#0 to l-stack (no copy) (𝕡) app#0 | awst_tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + dup // load awst_tmp%1#0 from l-stack (copy) (𝕡) app#0 | awst_tmp%1#0,awst_tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + extract 4 0 // (𝕡) app#0 | awst_tmp%1#0,{extract} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + swap // store result#0 to l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + // virtual: load awst_tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,awst_tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + extract 0 4 // (𝕡) app#0 | result#0,{extract} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%1#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + byte 0x151f7c75 // (𝕡) app#0 | result#0,tmp%1#0,0x151f7c75 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + == // (𝕡) app#0 | result#0,{==} arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | result#0,tmp%2#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + assert // ARC4 prefix is valid // (𝕡) app#0 | result#0 arc4.abi_call(\nLogger.return_args_after_14th,\n1,\n2,\n3,\n4,\n5,\n6,\n7,\n8,\n9,\n10,\n11,\n12,... typed_abi_call/typed_c2c.py:54-77 + // virtual: load result#0 from l-stack (no copy) (𝕡) app#0 | result#0 result.native typed_abi_call/typed_c2c.py:78 + extract 2 0 // (𝕡) app#0 | {extract} result.native typed_abi_call/typed_c2c.py:78 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 result.native typed_abi_call/typed_c2c.py:78 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:78 + byte 0x0f101112deadbeef14 // (𝕡) app#0 | tmp%3#0,0x0f101112deadbeef14 Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:78 + == // (𝕡) app#0 | {==} result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:78 + // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0 | tmp%4#0 result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:78 + // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0 | tmp%4#0 assert result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:78 + assert // (𝕡) app#0 | assert result.native == Bytes.from_hex("0F101112DEADBEEF14") typed_abi_call/typed_c2c.py:78 retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: test_void: - proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_void(self, app: Application) -> None: typed_abi_call/typed_c2c.py:79-80 + proto 1 0 // (𝕡) app#0 | @arc4.abimethod()\ndef test_void(self, app: Application) -> None: typed_abi_call/typed_c2c.py:80-81 test_void_block@0: - itxn_begin // (𝕡) app#0 | arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:81 + itxn_begin // (𝕡) app#0 | arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:82 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:81 + method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:82 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x06World1" // (𝕡) app#0 | "\x00\x06World1" "World1" typed_abi_call/typed_c2c.py:81 + byte "\x00\x06World1" // (𝕡) app#0 | "\x00\x06World1" "World1" typed_abi_call/typed_c2c.py:82 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:81 + int appl // (𝕡) app#0 | appl arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:82 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:81 + int 0 // (𝕡) app#0 | 0 arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:82 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:81 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:81 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:81 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World1" typed_abi_call/typed_c2c.py:82 - byte "World1" // (𝕡) app#0 | txn.LastLog#0,"World1" b"World1" typed_abi_call/typed_c2c.py:82 - == // (𝕡) app#0 | {==} txn.last_log == b"World1" typed_abi_call/typed_c2c.py:82 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0 txn.last_log == b"World1" typed_abi_call/typed_c2c.py:82 - // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 assert txn.last_log == b"World1" typed_abi_call/typed_c2c.py:82 - assert // (𝕡) app#0 | assert txn.last_log == b"World1" typed_abi_call/typed_c2c.py:82 - itxn_begin // (𝕡) app#0 | arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:84 + itxn_submit // (𝕡) app#0 | arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:82 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:82 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call("log(string)void", "World1", app_id=app) typed_abi_call/typed_c2c.py:82 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World1" typed_abi_call/typed_c2c.py:83 + byte "World1" // (𝕡) app#0 | txn.LastLog#0,"World1" b"World1" typed_abi_call/typed_c2c.py:83 + == // (𝕡) app#0 | {==} txn.last_log == b"World1" typed_abi_call/typed_c2c.py:83 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0 | tmp%0#0 txn.last_log == b"World1" typed_abi_call/typed_c2c.py:83 + // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0 | tmp%0#0 assert txn.last_log == b"World1" typed_abi_call/typed_c2c.py:83 + assert // (𝕡) app#0 | assert txn.last_log == b"World1" typed_abi_call/typed_c2c.py:83 + itxn_begin // (𝕡) app#0 | arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:85 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:84 + method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:85 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x06World2" // (𝕡) app#0 | "\x00\x06World2" "World2" typed_abi_call/typed_c2c.py:84 + byte "\x00\x06World2" // (𝕡) app#0 | "\x00\x06World2" "World2" typed_abi_call/typed_c2c.py:85 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:84 + int appl // (𝕡) app#0 | appl arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:85 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:84 + int 0 // (𝕡) app#0 | 0 arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:85 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:84 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:84 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:84 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World2" typed_abi_call/typed_c2c.py:85 - byte "World2" // (𝕡) app#0 | txn.LastLog#0,"World2" b"World2" typed_abi_call/typed_c2c.py:85 - == // (𝕡) app#0 | {==} txn.last_log == b"World2" typed_abi_call/typed_c2c.py:85 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%1#0 txn.last_log == b"World2" typed_abi_call/typed_c2c.py:85 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0 assert txn.last_log == b"World2" typed_abi_call/typed_c2c.py:85 - assert // (𝕡) app#0 | assert txn.last_log == b"World2" typed_abi_call/typed_c2c.py:85 - itxn_begin // (𝕡) app#0 | arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:87 + itxn_submit // (𝕡) app#0 | arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:85 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:85 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call("log(string)", "World2", app_id=app) typed_abi_call/typed_c2c.py:85 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World2" typed_abi_call/typed_c2c.py:86 + byte "World2" // (𝕡) app#0 | txn.LastLog#0,"World2" b"World2" typed_abi_call/typed_c2c.py:86 + == // (𝕡) app#0 | {==} txn.last_log == b"World2" typed_abi_call/typed_c2c.py:86 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0 | tmp%1#0 txn.last_log == b"World2" typed_abi_call/typed_c2c.py:86 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0 | tmp%1#0 assert txn.last_log == b"World2" typed_abi_call/typed_c2c.py:86 + assert // (𝕡) app#0 | assert txn.last_log == b"World2" typed_abi_call/typed_c2c.py:86 + itxn_begin // (𝕡) app#0 | arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:88 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:87 + method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:88 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x06World3" // (𝕡) app#0 | "\x00\x06World3" arc4.String("World3") typed_abi_call/typed_c2c.py:87 + byte "\x00\x06World3" // (𝕡) app#0 | "\x00\x06World3" arc4.String("World3") typed_abi_call/typed_c2c.py:88 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:87 + int appl // (𝕡) app#0 | appl arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:88 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:87 + int 0 // (𝕡) app#0 | 0 arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:88 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:87 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:87 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:87 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World3" typed_abi_call/typed_c2c.py:88 - byte "World3" // (𝕡) app#0 | txn.LastLog#0,"World3" b"World3" typed_abi_call/typed_c2c.py:88 - == // (𝕡) app#0 | {==} txn.last_log == b"World3" typed_abi_call/typed_c2c.py:88 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 txn.last_log == b"World3" typed_abi_call/typed_c2c.py:88 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 assert txn.last_log == b"World3" typed_abi_call/typed_c2c.py:88 - assert // (𝕡) app#0 | assert txn.last_log == b"World3" typed_abi_call/typed_c2c.py:88 - itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:90 + itxn_submit // (𝕡) app#0 | arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:88 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:88 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call("log", arc4.String("World3"), app_id=app) typed_abi_call/typed_c2c.py:88 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World3" typed_abi_call/typed_c2c.py:89 + byte "World3" // (𝕡) app#0 | txn.LastLog#0,"World3" b"World3" typed_abi_call/typed_c2c.py:89 + == // (𝕡) app#0 | {==} txn.last_log == b"World3" typed_abi_call/typed_c2c.py:89 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0 | tmp%2#0 txn.last_log == b"World3" typed_abi_call/typed_c2c.py:89 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0 | tmp%2#0 assert txn.last_log == b"World3" typed_abi_call/typed_c2c.py:89 + assert // (𝕡) app#0 | assert txn.last_log == b"World3" typed_abi_call/typed_c2c.py:89 + itxn_begin // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:91 frame_dig -1 // load app#0 from parameters (𝕡) app#0 | app#0 itxn_field ApplicationID // (𝕡) app#0 | - method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:90 + method "log(string)void" // (𝕡) app#0 | method<"log(string)void"> arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:91 itxn_field ApplicationArgs // (𝕡) app#0 | - byte "\x00\x06World4" // (𝕡) app#0 | "\x00\x06World4" "World4" typed_abi_call/typed_c2c.py:90 + byte "\x00\x06World4" // (𝕡) app#0 | "\x00\x06World4" "World4" typed_abi_call/typed_c2c.py:91 itxn_field ApplicationArgs // (𝕡) app#0 | - int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:90 + int appl // (𝕡) app#0 | appl arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:91 itxn_field TypeEnum // (𝕡) app#0 | - int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:90 + int 0 // (𝕡) app#0 | 0 arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:91 itxn_field Fee // (𝕡) app#0 | - itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:90 - itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:90 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:90 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World4" typed_abi_call/typed_c2c.py:91 - byte "World4" // (𝕡) app#0 | txn.LastLog#0,"World4" b"World4" typed_abi_call/typed_c2c.py:91 - == // (𝕡) app#0 | {==} txn.last_log == b"World4" typed_abi_call/typed_c2c.py:91 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 txn.last_log == b"World4" typed_abi_call/typed_c2c.py:91 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 assert txn.last_log == b"World4" typed_abi_call/typed_c2c.py:91 - assert // (𝕡) app#0 | assert txn.last_log == b"World4" typed_abi_call/typed_c2c.py:91 + itxn_submit // (𝕡) app#0 | arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:91 + itxn LastLog // (𝕡) app#0 | {itxn} arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:91 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 arc4.abi_call(Logger.log_string, "World4", app_id=app) typed_abi_call/typed_c2c.py:91 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0 | txn.LastLog#0 txn.last_log == b"World4" typed_abi_call/typed_c2c.py:92 + byte "World4" // (𝕡) app#0 | txn.LastLog#0,"World4" b"World4" typed_abi_call/typed_c2c.py:92 + == // (𝕡) app#0 | {==} txn.last_log == b"World4" typed_abi_call/typed_c2c.py:92 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0 | tmp%3#0 txn.last_log == b"World4" typed_abi_call/typed_c2c.py:92 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0 | tmp%3#0 assert txn.last_log == b"World4" typed_abi_call/typed_c2c.py:92 + assert // (𝕡) app#0 | assert txn.last_log == b"World4" typed_abi_call/typed_c2c.py:92 retsub // // test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: test_ref_types: - proto 2 0 // (𝕡) app#0,asset#0 | @arc4.abimethod()\ndef test_ref_types(self, app: Application, asset: Asset) -> None: typed_abi_call/typed_c2c.py:93-94 + proto 2 0 // (𝕡) app#0,asset#0 | @arc4.abimethod()\ndef test_ref_types(self, app: Application, asset: Asset) -> None: typed_abi_call/typed_c2c.py:94-95 test_ref_types_block@0: - itxn_begin // (𝕡) app#0,asset#0 | arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:95-101 - global CurrentApplicationAddress // (𝕡) app#0,asset#0 | {global} Global.current_application_address typed_abi_call/typed_c2c.py:98 - // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | tmp%0#0 Global.current_application_address typed_abi_call/typed_c2c.py:98 + itxn_begin // (𝕡) app#0,asset#0 | arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:96-102 + global CurrentApplicationAddress // (𝕡) app#0,asset#0 | {global} Global.current_application_address typed_abi_call/typed_c2c.py:99 + // virtual: store tmp%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | tmp%0#0 Global.current_application_address typed_abi_call/typed_c2c.py:99 frame_dig -2 // load app#0 from parameters (𝕡) app#0,asset#0 | tmp%0#0,app#0 itxn_field ApplicationID // (𝕡) app#0,asset#0 | tmp%0#0 frame_dig -1 // load asset#0 from parameters (𝕡) app#0,asset#0 | tmp%0#0,asset#0 @@ -822,48 +822,48 @@ test_ref_types_block@0: itxn_field Applications // (𝕡) app#0,asset#0 | tmp%0#0 // virtual: load tmp%0#0 from l-stack (no copy) (𝕡) app#0,asset#0 | tmp%0#0 itxn_field Accounts // (𝕡) app#0,asset#0 | - method "log(asset,account,application)void" // (𝕡) app#0,asset#0 | method<"log(asset,account,application)void"> arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:95-101 + method "log(asset,account,application)void" // (𝕡) app#0,asset#0 | method<"log(asset,account,application)void"> arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:96-102 itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | - byte 0x00 // (𝕡) app#0,asset#0 | 0x00 asset typed_abi_call/typed_c2c.py:97 + byte 0x00 // (𝕡) app#0,asset#0 | 0x00 asset typed_abi_call/typed_c2c.py:98 itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | - byte 0x01 // (𝕡) app#0,asset#0 | 0x01 Global.current_application_address typed_abi_call/typed_c2c.py:98 + byte 0x01 // (𝕡) app#0,asset#0 | 0x01 Global.current_application_address typed_abi_call/typed_c2c.py:99 itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | - byte 0x01 // (𝕡) app#0,asset#0 | 0x01 app typed_abi_call/typed_c2c.py:99 + byte 0x01 // (𝕡) app#0,asset#0 | 0x01 app typed_abi_call/typed_c2c.py:100 itxn_field ApplicationArgs // (𝕡) app#0,asset#0 | - int appl // (𝕡) app#0,asset#0 | appl arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:95-101 + int appl // (𝕡) app#0,asset#0 | appl arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:96-102 itxn_field TypeEnum // (𝕡) app#0,asset#0 | - int 0 // (𝕡) app#0,asset#0 | 0 arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:95-101 + int 0 // (𝕡) app#0,asset#0 | 0 arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:96-102 itxn_field Fee // (𝕡) app#0,asset#0 | - itxn_submit // (𝕡) app#0,asset#0 | arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:95-101 - itxn LastLog // (𝕡) app#0,asset#0 | {itxn} arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:95-101 - // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0 arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:95-101 - frame_dig -1 // load asset#0 from parameters (𝕡) app#0,asset#0 | txn.LastLog#0,asset#0 asset.name typed_abi_call/typed_c2c.py:104 - asset_params_get AssetName // (𝕡) app#0,asset#0 | txn.LastLog#0,{asset_params_get}.0,{asset_params_get}.1 asset.name typed_abi_call/typed_c2c.py:104 - // virtual: store check%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,check%0#0,{asset_params_get}.0 asset.name typed_abi_call/typed_c2c.py:104 - // virtual: store value%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,check%0#0 asset.name typed_abi_call/typed_c2c.py:104 - // virtual: load check%0#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,check%0#0 asset.name typed_abi_call/typed_c2c.py:104 - assert // asset exists // (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0 asset.name typed_abi_call/typed_c2c.py:104 - global CurrentApplicationAddress // (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,{global} Global.current_application_address typed_abi_call/typed_c2c.py:104 - // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,tmp%1#0 Global.current_application_address typed_abi_call/typed_c2c.py:104 - // virtual: load value%0#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%1#0,value%0#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:104 - // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,tmp%1#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:104 - concat // (𝕡) app#0,asset#0 | txn.LastLog#0,{concat} asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:104 - // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:104 - frame_dig -2 // load app#0 from parameters (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,app#0 app.address typed_abi_call/typed_c2c.py:104 - app_params_get AppAddress // (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,{app_params_get}.0,{app_params_get}.1 app.address typed_abi_call/typed_c2c.py:104 - // virtual: store check%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,check%1#0,{app_params_get}.0 app.address typed_abi_call/typed_c2c.py:104 - // virtual: store value%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0,check%1#0 app.address typed_abi_call/typed_c2c.py:104 - // virtual: load check%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0,check%1#0 app.address typed_abi_call/typed_c2c.py:104 - assert // application exists // (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0 app.address typed_abi_call/typed_c2c.py:104 - // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%1#0,tmp%2#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:104 - // virtual: load value%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:104 - concat // (𝕡) app#0,asset#0 | txn.LastLog#0,{concat} asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:104 - // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%3#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:104 - // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0,asset#0 | tmp%3#0,txn.LastLog#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:103-104 - // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%3#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:103-104 - == // (𝕡) app#0,asset#0 | {==} txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:103-104 - // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0,asset#0 | tmp%4#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:103-104 - // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0,asset#0 | tmp%4#0 assert (\ntxn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.by... typed_abi_call/typed_c2c.py:102-105 - assert // (𝕡) app#0,asset#0 | assert (\ntxn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.by... typed_abi_call/typed_c2c.py:102-105 + itxn_submit // (𝕡) app#0,asset#0 | arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:96-102 + itxn LastLog // (𝕡) app#0,asset#0 | {itxn} arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:96-102 + // virtual: store txn.LastLog#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0 arc4.abi_call(\nLogger.log_asset_account_app,\nasset,\nGlobal.current_application_address,\napp,\... typed_abi_call/typed_c2c.py:96-102 + frame_dig -1 // load asset#0 from parameters (𝕡) app#0,asset#0 | txn.LastLog#0,asset#0 asset.name typed_abi_call/typed_c2c.py:105 + asset_params_get AssetName // (𝕡) app#0,asset#0 | txn.LastLog#0,{asset_params_get}.0,{asset_params_get}.1 asset.name typed_abi_call/typed_c2c.py:105 + // virtual: store check%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,check%0#0,{asset_params_get}.0 asset.name typed_abi_call/typed_c2c.py:105 + // virtual: store value%0#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,check%0#0 asset.name typed_abi_call/typed_c2c.py:105 + // virtual: load check%0#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,check%0#0 asset.name typed_abi_call/typed_c2c.py:105 + assert // asset exists // (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0 asset.name typed_abi_call/typed_c2c.py:105 + global CurrentApplicationAddress // (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,{global} Global.current_application_address typed_abi_call/typed_c2c.py:105 + // virtual: store tmp%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,tmp%1#0 Global.current_application_address typed_abi_call/typed_c2c.py:105 + // virtual: load value%0#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%1#0,value%0#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:105 + // virtual: load tmp%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%0#0,tmp%1#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:105 + concat // (𝕡) app#0,asset#0 | txn.LastLog#0,{concat} asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:105 + // virtual: store tmp%2#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0 asset.name + Global.current_application_address.bytes typed_abi_call/typed_c2c.py:105 + frame_dig -2 // load app#0 from parameters (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,app#0 app.address typed_abi_call/typed_c2c.py:105 + app_params_get AppAddress // (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,{app_params_get}.0,{app_params_get}.1 app.address typed_abi_call/typed_c2c.py:105 + // virtual: store check%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,check%1#0,{app_params_get}.0 app.address typed_abi_call/typed_c2c.py:105 + // virtual: store value%1#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0,check%1#0 app.address typed_abi_call/typed_c2c.py:105 + // virtual: load check%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0,check%1#0 app.address typed_abi_call/typed_c2c.py:105 + assert // application exists // (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0 app.address typed_abi_call/typed_c2c.py:105 + // virtual: load tmp%2#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,value%1#0,tmp%2#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:105 + // virtual: load value%1#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%2#0,value%1#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:105 + concat // (𝕡) app#0,asset#0 | txn.LastLog#0,{concat} asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:105 + // virtual: store tmp%3#0 to l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%3#0 asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:105 + // virtual: load txn.LastLog#0 from l-stack (no copy) (𝕡) app#0,asset#0 | tmp%3#0,txn.LastLog#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:104-105 + // virtual: load tmp%3#0 from l-stack (no copy) (𝕡) app#0,asset#0 | txn.LastLog#0,tmp%3#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:104-105 + == // (𝕡) app#0,asset#0 | {==} txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:104-105 + // virtual: store tmp%4#0 to l-stack (no copy) (𝕡) app#0,asset#0 | tmp%4#0 txn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.bytes typed_abi_call/typed_c2c.py:104-105 + // virtual: load tmp%4#0 from l-stack (no copy) (𝕡) app#0,asset#0 | tmp%4#0 assert (\ntxn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.by... typed_abi_call/typed_c2c.py:103-106 + assert // (𝕡) app#0,asset#0 | assert (\ntxn.last_log\n== asset.name + Global.current_application_address.bytes + app.address.by... typed_abi_call/typed_c2c.py:103-106 retsub // diff --git a/test_cases/typed_abi_call/out/Greeter.approval.teal b/test_cases/typed_abi_call/out/Greeter.approval.teal index c4e0c68f14..f72b109061 100644 --- a/test_cases/typed_abi_call/out/Greeter.approval.teal +++ b/test_cases/typed_abi_call/out/Greeter.approval.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.typed_abi_call.typed_c2c.Greeter.approval_program: - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txn NumAppArgs bz main_bare_routing@10 @@ -16,109 +16,109 @@ test_cases.typed_abi_call.typed_c2c.Greeter.approval_program: err // reject transaction main_test_method_selector_kinds_route@2: - // typed_abi_call/typed_c2c.py:6 + // typed_abi_call/typed_c2c.py:7 // @arc4.abimethod() txn OnCompletion ! assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi txnas Applications - // typed_abi_call/typed_c2c.py:6 + // typed_abi_call/typed_c2c.py:7 // @arc4.abimethod() callsub test_method_selector_kinds int 1 return main_test_method_overload_route@3: - // typed_abi_call/typed_c2c.py:19 + // typed_abi_call/typed_c2c.py:20 // @arc4.abimethod() txn OnCompletion ! assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi txnas Applications - // typed_abi_call/typed_c2c.py:19 + // typed_abi_call/typed_c2c.py:20 // @arc4.abimethod() callsub test_method_overload int 1 return main_test_arg_conversion_route@4: - // typed_abi_call/typed_c2c.py:34 + // typed_abi_call/typed_c2c.py:35 // @arc4.abimethod() txn OnCompletion ! assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi txnas Applications - // typed_abi_call/typed_c2c.py:34 + // typed_abi_call/typed_c2c.py:35 // @arc4.abimethod() callsub test_arg_conversion int 1 return main_test_15plus_args_route@5: - // typed_abi_call/typed_c2c.py:51 + // typed_abi_call/typed_c2c.py:52 // @arc4.abimethod() txn OnCompletion ! assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi txnas Applications - // typed_abi_call/typed_c2c.py:51 + // typed_abi_call/typed_c2c.py:52 // @arc4.abimethod() callsub test_15plus_args int 1 return main_test_void_route@6: - // typed_abi_call/typed_c2c.py:79 + // typed_abi_call/typed_c2c.py:80 // @arc4.abimethod() txn OnCompletion ! assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi txnas Applications - // typed_abi_call/typed_c2c.py:79 + // typed_abi_call/typed_c2c.py:80 // @arc4.abimethod() callsub test_void int 1 return main_test_ref_types_route@7: - // typed_abi_call/typed_c2c.py:93 + // typed_abi_call/typed_c2c.py:94 // @arc4.abimethod() txn OnCompletion ! assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi @@ -126,14 +126,14 @@ main_test_ref_types_route@7: txna ApplicationArgs 2 btoi txnas Assets - // typed_abi_call/typed_c2c.py:93 + // typed_abi_call/typed_c2c.py:94 // @arc4.abimethod() callsub test_ref_types int 1 return main_bare_routing@10: - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txn OnCompletion ! @@ -147,11 +147,11 @@ main_bare_routing@10: // test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: test_method_selector_kinds: - // typed_abi_call/typed_c2c.py:6-7 + // typed_abi_call/typed_c2c.py:7-8 // @arc4.abimethod() // def test_method_selector_kinds(self, app: Application) -> None: proto 1 0 - // typed_abi_call/typed_c2c.py:8 + // typed_abi_call/typed_c2c.py:9 // result, _txn = arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) itxn_begin frame_dig -1 @@ -173,12 +173,12 @@ test_method_selector_kinds: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:9 + // typed_abi_call/typed_c2c.py:10 // assert result == "echo: test1" byte "\x00\x0becho: test1" == assert - // typed_abi_call/typed_c2c.py:10 + // typed_abi_call/typed_c2c.py:11 // result, _txn = arc4.abi_call(LoggerClient.echo, "test2", app_id=app) itxn_begin frame_dig -1 @@ -200,12 +200,12 @@ test_method_selector_kinds: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:11 + // typed_abi_call/typed_c2c.py:12 // assert result == "echo: test2" byte "\x00\x0becho: test2" == assert - // typed_abi_call/typed_c2c.py:12 + // typed_abi_call/typed_c2c.py:13 // result, _txn = arc4.abi_call[arc4.String]("echo", "test3", app_id=app) itxn_begin frame_dig -1 @@ -227,12 +227,12 @@ test_method_selector_kinds: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:13 + // typed_abi_call/typed_c2c.py:14 // assert result == "echo: test3" byte "\x00\x0becho: test3" == assert - // typed_abi_call/typed_c2c.py:14 + // typed_abi_call/typed_c2c.py:15 // result, _txn = arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) itxn_begin frame_dig -1 @@ -254,12 +254,12 @@ test_method_selector_kinds: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:15 + // typed_abi_call/typed_c2c.py:16 // assert result == "echo: test4" byte "\x00\x0becho: test4" == assert - // typed_abi_call/typed_c2c.py:16 + // typed_abi_call/typed_c2c.py:17 // result, _txn = arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) itxn_begin frame_dig -1 @@ -281,7 +281,7 @@ test_method_selector_kinds: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:17 + // typed_abi_call/typed_c2c.py:18 // assert result == "echo: test5" byte "\x00\x0becho: test5" == @@ -291,11 +291,11 @@ test_method_selector_kinds: // test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: test_method_overload: - // typed_abi_call/typed_c2c.py:19-20 + // typed_abi_call/typed_c2c.py:20-21 // @arc4.abimethod() // def test_method_overload(self, app: Application) -> None: proto 1 0 - // typed_abi_call/typed_c2c.py:21 + // typed_abi_call/typed_c2c.py:22 // arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) itxn_begin frame_dig -1 @@ -314,7 +314,7 @@ test_method_overload: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:22 + // typed_abi_call/typed_c2c.py:23 // assert arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" itxn LastLog dup @@ -327,7 +327,7 @@ test_method_overload: byte "\x00\x14echo: typed + ignore" == assert - // typed_abi_call/typed_c2c.py:24 + // typed_abi_call/typed_c2c.py:25 // arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) itxn_begin frame_dig -1 @@ -341,7 +341,7 @@ test_method_overload: int 0 itxn_field Fee itxn_submit - // typed_abi_call/typed_c2c.py:25 + // typed_abi_call/typed_c2c.py:26 // assert arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" itxn LastLog dup @@ -354,7 +354,7 @@ test_method_overload: byte "\x00\x16echo: untyped + ignore" == assert - // typed_abi_call/typed_c2c.py:27 + // typed_abi_call/typed_c2c.py:28 // result = arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) itxn_begin frame_dig -1 @@ -377,13 +377,13 @@ test_method_overload: == assert // ARC4 prefix is valid itxn LastLog - // typed_abi_call/typed_c2c.py:28 + // typed_abi_call/typed_c2c.py:29 // assert result[0] == "echo: tuple" swap byte "\x00\x0becho: tuple" == assert - // typed_abi_call/typed_c2c.py:29 + // typed_abi_call/typed_c2c.py:30 // assert arc4.String.from_log(result[1].last_log) == "echo: tuple" dup extract 4 0 @@ -395,7 +395,7 @@ test_method_overload: byte "\x00\x0becho: tuple" == assert - // typed_abi_call/typed_c2c.py:31 + // typed_abi_call/typed_c2c.py:32 // txn_result = arc4.abi_call("echo(string)string", "untyped", app_id=app) itxn_begin frame_dig -1 @@ -410,7 +410,7 @@ test_method_overload: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:32 + // typed_abi_call/typed_c2c.py:33 // assert arc4.String.from_log(txn_result.last_log) == "echo: untyped" dup extract 4 0 @@ -427,11 +427,11 @@ test_method_overload: // test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: test_arg_conversion: - // typed_abi_call/typed_c2c.py:34-35 + // typed_abi_call/typed_c2c.py:35-36 // @arc4.abimethod() // def test_arg_conversion(self, app: Application) -> None: proto 1 0 - // typed_abi_call/typed_c2c.py:36 + // typed_abi_call/typed_c2c.py:37 // txn = arc4.abi_call(Logger.log_string, "converted1", app_id=app) itxn_begin frame_dig -1 @@ -446,12 +446,12 @@ test_arg_conversion: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:37 + // typed_abi_call/typed_c2c.py:38 // assert txn.last_log == b"converted1" byte "converted1" == assert - // typed_abi_call/typed_c2c.py:39 + // typed_abi_call/typed_c2c.py:40 // txn = arc4.abi_call(Logger.log_uint64, 2, app_id=app) itxn_begin frame_dig -1 @@ -466,13 +466,13 @@ test_arg_conversion: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:40 + // typed_abi_call/typed_c2c.py:41 // assert txn.last_log == op.itob(2) int 2 itob == assert - // typed_abi_call/typed_c2c.py:42 + // typed_abi_call/typed_c2c.py:43 // txn = arc4.abi_call(Logger.log_uint512, 3, app_id=app) itxn_begin frame_dig -1 @@ -487,12 +487,12 @@ test_arg_conversion: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:43 + // typed_abi_call/typed_c2c.py:44 // assert txn.last_log == (op.bzero(56) + op.itob(3)) byte 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003 == assert - // typed_abi_call/typed_c2c.py:45 + // typed_abi_call/typed_c2c.py:46 // txn = arc4.abi_call(Logger.log_bytes, b"4", app_id=app) itxn_begin frame_dig -1 @@ -507,12 +507,12 @@ test_arg_conversion: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:46 + // typed_abi_call/typed_c2c.py:47 // assert txn.last_log == b"4" byte "4" == assert - // typed_abi_call/typed_c2c.py:48 + // typed_abi_call/typed_c2c.py:49 // txn = arc4.abi_call(Logger.log_bool, True, app_id=app) itxn_begin frame_dig -1 @@ -527,7 +527,7 @@ test_arg_conversion: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:49 + // typed_abi_call/typed_c2c.py:50 // assert txn.last_log == b"True" byte "True" == @@ -537,11 +537,11 @@ test_arg_conversion: // test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: test_15plus_args: - // typed_abi_call/typed_c2c.py:51-52 + // typed_abi_call/typed_c2c.py:52-53 // @arc4.abimethod() // def test_15plus_args(self, app: Application) -> None: proto 1 0 - // typed_abi_call/typed_c2c.py:53-76 + // typed_abi_call/typed_c2c.py:54-77 // result, txn = arc4.abi_call( // Logger.return_args_after_14th, // 1, @@ -571,63 +571,63 @@ test_15plus_args: itxn_field ApplicationID method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:55 + // typed_abi_call/typed_c2c.py:56 // 1, byte 0x0000000000000001 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:56 + // typed_abi_call/typed_c2c.py:57 // 2, byte 0x0000000000000002 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:57 + // typed_abi_call/typed_c2c.py:58 // 3, byte 0x0000000000000003 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:58 + // typed_abi_call/typed_c2c.py:59 // 4, byte 0x0000000000000004 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:59 + // typed_abi_call/typed_c2c.py:60 // 5, byte 0x0000000000000005 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:60 + // typed_abi_call/typed_c2c.py:61 // 6, byte 0x0000000000000006 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:61 + // typed_abi_call/typed_c2c.py:62 // 7, byte 0x0000000000000007 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:62 + // typed_abi_call/typed_c2c.py:63 // 8, byte 0x0000000000000008 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:63 + // typed_abi_call/typed_c2c.py:64 // 9, byte 0x0000000000000009 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:64 + // typed_abi_call/typed_c2c.py:65 // 10, byte 0x000000000000000a itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:65 + // typed_abi_call/typed_c2c.py:66 // 11, byte 0x000000000000000b itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:66 + // typed_abi_call/typed_c2c.py:67 // 12, byte 0x000000000000000c itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:67 + // typed_abi_call/typed_c2c.py:68 // 13, byte 0x000000000000000d itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:68 + // typed_abi_call/typed_c2c.py:69 // 14, byte 0x000000000000000e itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:69-74 + // typed_abi_call/typed_c2c.py:70-75 // 15, // 16, // 17, @@ -636,7 +636,7 @@ test_15plus_args: // 20, byte 0x0f101112deadbeef14 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:53-76 + // typed_abi_call/typed_c2c.py:54-77 // result, txn = arc4.abi_call( // Logger.return_args_after_14th, // 1, @@ -674,7 +674,7 @@ test_15plus_args: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:77 + // typed_abi_call/typed_c2c.py:78 // assert result.native == Bytes.from_hex("0F101112DEADBEEF14") extract 2 0 byte 0x0f101112deadbeef14 @@ -685,11 +685,11 @@ test_15plus_args: // test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: test_void: - // typed_abi_call/typed_c2c.py:79-80 + // typed_abi_call/typed_c2c.py:80-81 // @arc4.abimethod() // def test_void(self, app: Application) -> None: proto 1 0 - // typed_abi_call/typed_c2c.py:81 + // typed_abi_call/typed_c2c.py:82 // txn = arc4.abi_call("log(string)void", "World1", app_id=app) itxn_begin frame_dig -1 @@ -704,12 +704,12 @@ test_void: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:82 + // typed_abi_call/typed_c2c.py:83 // assert txn.last_log == b"World1" byte "World1" == assert - // typed_abi_call/typed_c2c.py:84 + // typed_abi_call/typed_c2c.py:85 // txn = arc4.abi_call("log(string)", "World2", app_id=app) itxn_begin frame_dig -1 @@ -724,12 +724,12 @@ test_void: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:85 + // typed_abi_call/typed_c2c.py:86 // assert txn.last_log == b"World2" byte "World2" == assert - // typed_abi_call/typed_c2c.py:87 + // typed_abi_call/typed_c2c.py:88 // txn = arc4.abi_call("log", arc4.String("World3"), app_id=app) itxn_begin frame_dig -1 @@ -744,12 +744,12 @@ test_void: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:88 + // typed_abi_call/typed_c2c.py:89 // assert txn.last_log == b"World3" byte "World3" == assert - // typed_abi_call/typed_c2c.py:90 + // typed_abi_call/typed_c2c.py:91 // txn = arc4.abi_call(Logger.log_string, "World4", app_id=app) itxn_begin frame_dig -1 @@ -764,7 +764,7 @@ test_void: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:91 + // typed_abi_call/typed_c2c.py:92 // assert txn.last_log == b"World4" byte "World4" == @@ -774,11 +774,11 @@ test_void: // test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: test_ref_types: - // typed_abi_call/typed_c2c.py:93-94 + // typed_abi_call/typed_c2c.py:94-95 // @arc4.abimethod() // def test_ref_types(self, app: Application, asset: Asset) -> None: proto 2 0 - // typed_abi_call/typed_c2c.py:95-101 + // typed_abi_call/typed_c2c.py:96-102 // txn = arc4.abi_call( // Logger.log_asset_account_app, // asset, @@ -787,7 +787,7 @@ test_ref_types: // app_id=app, // ) itxn_begin - // typed_abi_call/typed_c2c.py:98 + // typed_abi_call/typed_c2c.py:99 // Global.current_application_address, global CurrentApplicationAddress frame_dig -2 @@ -797,7 +797,7 @@ test_ref_types: frame_dig -2 itxn_field Applications itxn_field Accounts - // typed_abi_call/typed_c2c.py:95-101 + // typed_abi_call/typed_c2c.py:96-102 // txn = arc4.abi_call( // Logger.log_asset_account_app, // asset, @@ -807,19 +807,19 @@ test_ref_types: // ) method "log(asset,account,application)void" itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:97 + // typed_abi_call/typed_c2c.py:98 // asset, byte 0x00 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:98 + // typed_abi_call/typed_c2c.py:99 // Global.current_application_address, byte 0x01 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:99 + // typed_abi_call/typed_c2c.py:100 // app, byte 0x01 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:95-101 + // typed_abi_call/typed_c2c.py:96-102 // txn = arc4.abi_call( // Logger.log_asset_account_app, // asset, @@ -833,7 +833,7 @@ test_ref_types: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:104 + // typed_abi_call/typed_c2c.py:105 // == asset.name + Global.current_application_address.bytes + app.address.bytes frame_dig -1 asset_params_get AssetName @@ -844,11 +844,11 @@ test_ref_types: app_params_get AppAddress assert // application exists concat - // typed_abi_call/typed_c2c.py:103-104 + // typed_abi_call/typed_c2c.py:104-105 // txn.last_log // == asset.name + Global.current_application_address.bytes + app.address.bytes == - // typed_abi_call/typed_c2c.py:102-105 + // typed_abi_call/typed_c2c.py:103-106 // assert ( // txn.last_log // == asset.name + Global.current_application_address.bytes + app.address.bytes diff --git a/test_cases/typed_abi_call/out/Greeter.arc32.json b/test_cases/typed_abi_call/out/Greeter.arc32.json index 4a50cbd62e..419d4bede5 100644 --- a/test_cases/typed_abi_call/out/Greeter.arc32.json +++ b/test_cases/typed_abi_call/out/Greeter.arc32.json @@ -32,8 +32,8 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NQogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCiAgICBtZXRob2QgInRlc3RfbWV0aG9kX3NlbGVjdG9yX2tpbmRzKGFwcGxpY2F0aW9uKXZvaWQiCiAgICBtZXRob2QgInRlc3RfbWV0aG9kX292ZXJsb2FkKGFwcGxpY2F0aW9uKXZvaWQiCiAgICBtZXRob2QgInRlc3RfYXJnX2NvbnZlcnNpb24oYXBwbGljYXRpb24pdm9pZCIKICAgIG1ldGhvZCAidGVzdF8xNXBsdXNfYXJncyhhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X3ZvaWQoYXBwbGljYXRpb24pdm9pZCIKICAgIG1ldGhvZCAidGVzdF9yZWZfdHlwZXMoYXBwbGljYXRpb24sYXNzZXQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHNfcm91dGVAMiBtYWluX3Rlc3RfbWV0aG9kX292ZXJsb2FkX3JvdXRlQDMgbWFpbl90ZXN0X2FyZ19jb252ZXJzaW9uX3JvdXRlQDQgbWFpbl90ZXN0XzE1cGx1c19hcmdzX3JvdXRlQDUgbWFpbl90ZXN0X3ZvaWRfcm91dGVANiBtYWluX3Rlc3RfcmVmX3R5cGVzX3JvdXRlQDcKICAgIGVyciAvLyByZWplY3QgdHJhbnNhY3Rpb24KCm1haW5fdGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHNfcm91dGVAMjoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjUKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfbWV0aG9kX3NlbGVjdG9yX2tpbmRzCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3RfbWV0aG9kX292ZXJsb2FkX3JvdXRlQDM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NQogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfbWV0aG9kX292ZXJsb2FkCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3RfYXJnX2NvbnZlcnNpb25fcm91dGVANDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo1CiAgICAvLyBjbGFzcyBHcmVldGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdGVzdF9hcmdfY29udmVyc2lvbgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl90ZXN0XzE1cGx1c19hcmdzX3JvdXRlQDU6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NQogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfMTVwbHVzX2FyZ3MKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdGVzdF92b2lkX3JvdXRlQDY6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NQogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3Rfdm9pZAogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl90ZXN0X3JlZl90eXBlc19yb3V0ZUA3OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjkzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjUKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfcmVmX3R5cGVzCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxMDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo1CiAgICAvLyBjbGFzcyBHcmVldGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGlzIGNyZWF0aW5nCiAgICBpbnQgMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X21ldGhvZF9zZWxlY3Rvcl9raW5kcyhhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6Ni03CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfbWV0aG9kX3NlbGVjdG9yX2tpbmRzKHNlbGYsIGFwcDogQXBwbGljYXRpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo4CiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5lY2hvLCBhcmM0LlN0cmluZygidGVzdDEiKSwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgwNXRlc3QxIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo5CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJlY2hvOiB0ZXN0MSIKICAgIGJ5dGUgIlx4MDBceDBiZWNobzogdGVzdDEiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTAKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyQ2xpZW50LmVjaG8sICJ0ZXN0MiIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAiXHgwMFx4MDV0ZXN0MiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTEKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gImVjaG86IHRlc3QyIgogICAgYnl0ZSAiXHgwMFx4MGJlY2hvOiB0ZXN0MiIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMgogICAgLy8gcmVzdWx0LCBfdHhuID0gYXJjNC5hYmlfY2FsbFthcmM0LlN0cmluZ10oImVjaG8iLCAidGVzdDMiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgIlx4MDBceDA1dGVzdDMiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEzCiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJlY2hvOiB0ZXN0MyIKICAgIGJ5dGUgIlx4MDBceDBiZWNobzogdGVzdDMiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTQKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGxbYXJjNC5TdHJpbmddKCJlY2hvKHN0cmluZykiLCAidGVzdDQiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgIlx4MDBceDA1dGVzdDQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE1CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJlY2hvOiB0ZXN0NCIKICAgIGJ5dGUgIlx4MDBceDBiZWNobzogdGVzdDQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTYKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGxbYXJjNC5TdHJpbmddKCJlY2hvKHN0cmluZylzdHJpbmciLCAidGVzdDUiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgIlx4MDBceDA1dGVzdDUiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3CiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJlY2hvOiB0ZXN0NSIKICAgIGJ5dGUgIlx4MDBceDBiZWNobzogdGVzdDUiCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLnRlc3RfbWV0aG9kX292ZXJsb2FkKGFwcDogdWludDY0KSAtPiB2b2lkOgp0ZXN0X21ldGhvZF9vdmVybG9hZDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxOS0yMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB0ZXN0X21ldGhvZF9vdmVybG9hZChzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjEKICAgIC8vIGFyYzQuYWJpX2NhbGxbYXJjNC5TdHJpbmddKCJlY2hvKHN0cmluZylzdHJpbmciLCAidHlwZWQgKyBpZ25vcmUiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgIlx4MDBceDBldHlwZWQgKyBpZ25vcmUiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIyCiAgICAvLyBhc3NlcnQgYXJjNC5TdHJpbmcuZnJvbV9sb2cob3AuSVR4bi5sYXN0X2xvZygpKSA9PSAiZWNobzogdHlwZWQgKyBpZ25vcmUiCiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGJ5dGUgIlx4MDBceDE0ZWNobzogdHlwZWQgKyBpZ25vcmUiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjQKICAgIC8vIGFyYzQuYWJpX2NhbGwoImVjaG8oc3RyaW5nKXN0cmluZyIsICJ1bnR5cGVkICsgaWdub3JlIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgxMHVudHlwZWQgKyBpZ25vcmUiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyNQogICAgLy8gYXNzZXJ0IGFyYzQuU3RyaW5nLmZyb21fbG9nKG9wLklUeG4ubGFzdF9sb2coKSkgPT0gImVjaG86IHVudHlwZWQgKyBpZ25vcmUiCiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGJ5dGUgIlx4MDBceDE2ZWNobzogdW50eXBlZCArIGlnbm9yZSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyNwogICAgLy8gcmVzdWx0ID0gYXJjNC5hYmlfY2FsbFthcmM0LlN0cmluZ10oImVjaG8oc3RyaW5nKXN0cmluZyIsICJ0dXBsZSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAiXHgwMFx4MDV0dXBsZSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyOAogICAgLy8gYXNzZXJ0IHJlc3VsdFswXSA9PSAiZWNobzogdHVwbGUiCiAgICBzd2FwCiAgICBieXRlICJceDAwXHgwYmVjaG86IHR1cGxlIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjI5CiAgICAvLyBhc3NlcnQgYXJjNC5TdHJpbmcuZnJvbV9sb2cocmVzdWx0WzFdLmxhc3RfbG9nKSA9PSAiZWNobzogdHVwbGUiCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBieXRlICJceDAwXHgwYmVjaG86IHR1cGxlIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjMxCiAgICAvLyB0eG5fcmVzdWx0ID0gYXJjNC5hYmlfY2FsbCgiZWNobyhzdHJpbmcpc3RyaW5nIiwgInVudHlwZWQiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgIlx4MDBceDA3dW50eXBlZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MzIKICAgIC8vIGFzc2VydCBhcmM0LlN0cmluZy5mcm9tX2xvZyh0eG5fcmVzdWx0Lmxhc3RfbG9nKSA9PSAiZWNobzogdW50eXBlZCIKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIGJ5dGUgIlx4MDBccmVjaG86IHVudHlwZWQiCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLnRlc3RfYXJnX2NvbnZlcnNpb24oYXBwOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RfYXJnX2NvbnZlcnNpb246CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MzQtMzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdGVzdF9hcmdfY29udmVyc2lvbihzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MzYKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmxvZ19zdHJpbmcsICJjb252ZXJ0ZWQxIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyhzdHJpbmcpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXG5jb252ZXJ0ZWQxIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozNwogICAgLy8gYXNzZXJ0IHR4bi5sYXN0X2xvZyA9PSBiImNvbnZlcnRlZDEiCiAgICBieXRlICJjb252ZXJ0ZWQxIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjM5CiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5sb2dfdWludDY0LCAyLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKHVpbnQ2NCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjQwCiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IG9wLml0b2IoMikKICAgIGludCAyCiAgICBpdG9iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NDIKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmxvZ191aW50NTEyLCAzLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKHVpbnQ1MTIpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NDMKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gKG9wLmJ6ZXJvKDU2KSArIG9wLml0b2IoMykpCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo0NQogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIubG9nX2J5dGVzLCBiIjQiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKGJ5dGVbXSl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHgwMDAxMzQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NDYKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gYiI0IgogICAgYnl0ZSAiNCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo0OAogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIubG9nX2Jvb2wsIFRydWUsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJsb2coYm9vbCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgMHg4MAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo0OQogICAgLy8gYXNzZXJ0IHR4bi5sYXN0X2xvZyA9PSBiIlRydWUiCiAgICBieXRlICJUcnVlIgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0XzE1cGx1c19hcmdzKGFwcDogdWludDY0KSAtPiB2b2lkOgp0ZXN0XzE1cGx1c19hcmdzOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjUxLTUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfMTVwbHVzX2FyZ3Moc2VsZiwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjUzLTc2CiAgICAvLyByZXN1bHQsIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgTG9nZ2VyLnJldHVybl9hcmdzX2FmdGVyXzE0dGgsCiAgICAvLyAgICAgMSwKICAgIC8vICAgICAyLAogICAgLy8gICAgIDMsCiAgICAvLyAgICAgNCwKICAgIC8vICAgICA1LAogICAgLy8gICAgIDYsCiAgICAvLyAgICAgNywKICAgIC8vICAgICA4LAogICAgLy8gICAgIDksCiAgICAvLyAgICAgMTAsCiAgICAvLyAgICAgMTEsCiAgICAvLyAgICAgMTIsCiAgICAvLyAgICAgMTMsCiAgICAvLyAgICAgMTQsCiAgICAvLyAgICAgMTUsCiAgICAvLyAgICAgMTYsCiAgICAvLyAgICAgMTcsCiAgICAvLyAgICAgMTgsCiAgICAvLyAgICAgYXJjNC5UdXBsZSgoYXJjNC5VSW50OCgweERFKSwgYXJjNC5VSW50OCgweEFEKSwgYXJjNC5VSW50OCgweEJFKSwgYXJjNC5VSW50OCgweEVGKSkpLAogICAgLy8gICAgIDIwLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJyZXR1cm5fYXJnc19hZnRlcl8xNHRoKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDgsdWludDgsdWludDgsdWludDgsKHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4KSx1aW50OClieXRlW10iCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjU1CiAgICAvLyAxLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTYKICAgIC8vIDIsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo1NwogICAgLy8gMywKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjU4CiAgICAvLyA0LAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTkKICAgIC8vIDUsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwNQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2MAogICAgLy8gNiwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDA2CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjYxCiAgICAvLyA3LAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDcKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NjIKICAgIC8vIDgsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwOAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2MwogICAgLy8gOSwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDA5CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjY0CiAgICAvLyAxMCwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDBhCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjY1CiAgICAvLyAxMSwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDBiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjY2CiAgICAvLyAxMiwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDBjCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjY3CiAgICAvLyAxMywKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDBkCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjY4CiAgICAvLyAxNCwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDBlCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjY5LTc0CiAgICAvLyAxNSwKICAgIC8vIDE2LAogICAgLy8gMTcsCiAgICAvLyAxOCwKICAgIC8vIGFyYzQuVHVwbGUoKGFyYzQuVUludDgoMHhERSksIGFyYzQuVUludDgoMHhBRCksIGFyYzQuVUludDgoMHhCRSksIGFyYzQuVUludDgoMHhFRikpKSwKICAgIC8vIDIwLAogICAgYnl0ZSAweDBmMTAxMTEyZGVhZGJlZWYxNAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo1My03NgogICAgLy8gcmVzdWx0LCB0eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIExvZ2dlci5yZXR1cm5fYXJnc19hZnRlcl8xNHRoLAogICAgLy8gICAgIDEsCiAgICAvLyAgICAgMiwKICAgIC8vICAgICAzLAogICAgLy8gICAgIDQsCiAgICAvLyAgICAgNSwKICAgIC8vICAgICA2LAogICAgLy8gICAgIDcsCiAgICAvLyAgICAgOCwKICAgIC8vICAgICA5LAogICAgLy8gICAgIDEwLAogICAgLy8gICAgIDExLAogICAgLy8gICAgIDEyLAogICAgLy8gICAgIDEzLAogICAgLy8gICAgIDE0LAogICAgLy8gICAgIDE1LAogICAgLy8gICAgIDE2LAogICAgLy8gICAgIDE3LAogICAgLy8gICAgIDE4LAogICAgLy8gICAgIGFyYzQuVHVwbGUoKGFyYzQuVUludDgoMHhERSksIGFyYzQuVUludDgoMHhBRCksIGFyYzQuVUludDgoMHhCRSksIGFyYzQuVUludDgoMHhFRikpKSwKICAgIC8vICAgICAyMCwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojc3CiAgICAvLyBhc3NlcnQgcmVzdWx0Lm5hdGl2ZSA9PSBCeXRlcy5mcm9tX2hleCgiMEYxMDExMTJERUFEQkVFRjE0IikKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlIDB4MGYxMDExMTJkZWFkYmVlZjE0CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLnRlc3Rfdm9pZChhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF92b2lkOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojc5LTgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3Rfdm9pZChzZWxmLCBhcHA6IEFwcGxpY2F0aW9uKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6ODEKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoImxvZyhzdHJpbmcpdm9pZCIsICJXb3JsZDEiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgIlx4MDBceDA2V29ybGQxIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo4MgogICAgLy8gYXNzZXJ0IHR4bi5sYXN0X2xvZyA9PSBiIldvcmxkMSIKICAgIGJ5dGUgIldvcmxkMSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo4NAogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbCgibG9nKHN0cmluZykiLCAiV29ybGQyIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyhzdHJpbmcpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgwNldvcmxkMiIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6ODUKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gYiJXb3JsZDIiCiAgICBieXRlICJXb3JsZDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6ODcKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoImxvZyIsIGFyYzQuU3RyaW5nKCJXb3JsZDMiKSwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyhzdHJpbmcpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgwNldvcmxkMyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6ODgKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gYiJXb3JsZDMiCiAgICBieXRlICJXb3JsZDMiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTAKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmxvZ19zdHJpbmcsICJXb3JsZDQiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKHN0cmluZyl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgIlx4MDBceDA2V29ybGQ0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo5MQogICAgLy8gYXNzZXJ0IHR4bi5sYXN0X2xvZyA9PSBiIldvcmxkNCIKICAgIGJ5dGUgIldvcmxkNCIKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwudHlwZWRfYzJjLkdyZWV0ZXIudGVzdF9yZWZfdHlwZXMoYXBwOiB1aW50NjQsIGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RfcmVmX3R5cGVzOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjkzLTk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfcmVmX3R5cGVzKHNlbGYsIGFwcDogQXBwbGljYXRpb24sIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojk1LTEwMQogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBMb2dnZXIubG9nX2Fzc2V0X2FjY291bnRfYXBwLAogICAgLy8gICAgIGFzc2V0LAogICAgLy8gICAgIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXBwLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTgKICAgIC8vIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldHMKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKICAgIGl0eG5fZmllbGQgQWNjb3VudHMKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo5NS0xMDEKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgTG9nZ2VyLmxvZ19hc3NldF9hY2NvdW50X2FwcCwKICAgIC8vICAgICBhc3NldCwKICAgIC8vICAgICBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGFwcCwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgbWV0aG9kICJsb2coYXNzZXQsYWNjb3VudCxhcHBsaWNhdGlvbil2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo5NwogICAgLy8gYXNzZXQsCiAgICBieXRlIDB4MDAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTgKICAgIC8vIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBieXRlIDB4MDEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTkKICAgIC8vIGFwcCwKICAgIGJ5dGUgMHgwMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo5NS0xMDEKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgTG9nZ2VyLmxvZ19hc3NldF9hY2NvdW50X2FwcCwKICAgIC8vICAgICBhc3NldCwKICAgIC8vICAgICBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGFwcCwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEwNAogICAgLy8gPT0gYXNzZXQubmFtZSArIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuYnl0ZXMgKyBhcHAuYWRkcmVzcy5ieXRlcwogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBjb25jYXQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMDMtMTA0CiAgICAvLyB0eG4ubGFzdF9sb2cKICAgIC8vID09IGFzc2V0Lm5hbWUgKyBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmJ5dGVzICsgYXBwLmFkZHJlc3MuYnl0ZXMKICAgID09CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTAyLTEwNQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICB0eG4ubGFzdF9sb2cKICAgIC8vICAgICA9PSBhc3NldC5uYW1lICsgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5ieXRlcyArIGFwcC5hZGRyZXNzLmJ5dGVzCiAgICAvLyApCiAgICBhc3NlcnQKICAgIHJldHN1Ygo=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NQogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgaW50IDEKICAgIHJldHVybgo=" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLmFwcHJvdmFsX3Byb2dyYW06CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NgogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDEwCiAgICBtZXRob2QgInRlc3RfbWV0aG9kX3NlbGVjdG9yX2tpbmRzKGFwcGxpY2F0aW9uKXZvaWQiCiAgICBtZXRob2QgInRlc3RfbWV0aG9kX292ZXJsb2FkKGFwcGxpY2F0aW9uKXZvaWQiCiAgICBtZXRob2QgInRlc3RfYXJnX2NvbnZlcnNpb24oYXBwbGljYXRpb24pdm9pZCIKICAgIG1ldGhvZCAidGVzdF8xNXBsdXNfYXJncyhhcHBsaWNhdGlvbil2b2lkIgogICAgbWV0aG9kICJ0ZXN0X3ZvaWQoYXBwbGljYXRpb24pdm9pZCIKICAgIG1ldGhvZCAidGVzdF9yZWZfdHlwZXMoYXBwbGljYXRpb24sYXNzZXQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fdGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHNfcm91dGVAMiBtYWluX3Rlc3RfbWV0aG9kX292ZXJsb2FkX3JvdXRlQDMgbWFpbl90ZXN0X2FyZ19jb252ZXJzaW9uX3JvdXRlQDQgbWFpbl90ZXN0XzE1cGx1c19hcmdzX3JvdXRlQDUgbWFpbl90ZXN0X3ZvaWRfcm91dGVANiBtYWluX3Rlc3RfcmVmX3R5cGVzX3JvdXRlQDcKICAgIGVyciAvLyByZWplY3QgdHJhbnNhY3Rpb24KCm1haW5fdGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHNfcm91dGVAMjoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjYKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfbWV0aG9kX3NlbGVjdG9yX2tpbmRzCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3RfbWV0aG9kX292ZXJsb2FkX3JvdXRlQDM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NgogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfbWV0aG9kX292ZXJsb2FkCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX3Rlc3RfYXJnX2NvbnZlcnNpb25fcm91dGVANDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBpcyBub3QgY3JlYXRpbmcKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2CiAgICAvLyBjbGFzcyBHcmVldGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBcHBsaWNhdGlvbnMKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdGVzdF9hcmdfY29udmVyc2lvbgogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl90ZXN0XzE1cGx1c19hcmdzX3JvdXRlQDU6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NgogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfMTVwbHVzX2FyZ3MKICAgIGludCAxCiAgICByZXR1cm4KCm1haW5fdGVzdF92b2lkX3JvdXRlQDY6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6ODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gaXMgbm90IGNyZWF0aW5nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NgogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6ODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3Rfdm9pZAogICAgaW50IDEKICAgIHJldHVybgoKbWFpbl90ZXN0X3JlZl90eXBlc19yb3V0ZUA3OgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGlzIG5vdCBjcmVhdGluZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjYKICAgIC8vIGNsYXNzIEdyZWV0ZXIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHRlc3RfcmVmX3R5cGVzCiAgICBpbnQgMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxMDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2CiAgICAvLyBjbGFzcyBHcmVldGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gcmVqZWN0IHRyYW5zYWN0aW9uCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGlzIGNyZWF0aW5nCiAgICBpbnQgMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X21ldGhvZF9zZWxlY3Rvcl9raW5kcyhhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF9tZXRob2Rfc2VsZWN0b3Jfa2luZHM6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6Ny04CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfbWV0aG9kX3NlbGVjdG9yX2tpbmRzKHNlbGYsIGFwcDogQXBwbGljYXRpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo5CiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5lY2hvLCBhcmM0LlN0cmluZygidGVzdDEiKSwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgwNXRlc3QxIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMAogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiZWNobzogdGVzdDEiCiAgICBieXRlICJceDAwXHgwYmVjaG86IHRlc3QxIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjExCiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlckNsaWVudC5lY2hvLCAidGVzdDIiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgIlx4MDBceDA1dGVzdDIiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEyCiAgICAvLyBhc3NlcnQgcmVzdWx0ID09ICJlY2hvOiB0ZXN0MiIKICAgIGJ5dGUgIlx4MDBceDBiZWNobzogdGVzdDIiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTMKICAgIC8vIHJlc3VsdCwgX3R4biA9IGFyYzQuYWJpX2NhbGxbYXJjNC5TdHJpbmddKCJlY2hvIiwgInRlc3QzIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgwNXRlc3QzIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNAogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiZWNobzogdGVzdDMiCiAgICBieXRlICJceDAwXHgwYmVjaG86IHRlc3QzIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE1CiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsW2FyYzQuU3RyaW5nXSgiZWNobyhzdHJpbmcpIiwgInRlc3Q0IiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgwNXRlc3Q0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxNgogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiZWNobzogdGVzdDQiCiAgICBieXRlICJceDAwXHgwYmVjaG86IHRlc3Q0IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjE3CiAgICAvLyByZXN1bHQsIF90eG4gPSBhcmM0LmFiaV9jYWxsW2FyYzQuU3RyaW5nXSgiZWNobyhzdHJpbmcpc3RyaW5nIiwgInRlc3Q1IiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgwNXRlc3Q1IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxOAogICAgLy8gYXNzZXJ0IHJlc3VsdCA9PSAiZWNobzogdGVzdDUiCiAgICBieXRlICJceDAwXHgwYmVjaG86IHRlc3Q1IgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X21ldGhvZF9vdmVybG9hZChhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF9tZXRob2Rfb3ZlcmxvYWQ6CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjAtMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBkZWYgdGVzdF9tZXRob2Rfb3ZlcmxvYWQoc2VsZiwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjIyCiAgICAvLyBhcmM0LmFiaV9jYWxsW2FyYzQuU3RyaW5nXSgiZWNobyhzdHJpbmcpc3RyaW5nIiwgInR5cGVkICsgaWdub3JlIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgwZXR5cGVkICsgaWdub3JlIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToyMwogICAgLy8gYXNzZXJ0IGFyYzQuU3RyaW5nLmZyb21fbG9nKG9wLklUeG4ubGFzdF9sb2coKSkgPT0gImVjaG86IHR5cGVkICsgaWdub3JlIgogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBieXRlICJceDAwXHgxNGVjaG86IHR5cGVkICsgaWdub3JlIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjI1CiAgICAvLyBhcmM0LmFiaV9jYWxsKCJlY2hvKHN0cmluZylzdHJpbmciLCAidW50eXBlZCArIGlnbm9yZSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJlY2hvKHN0cmluZylzdHJpbmciCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAiXHgwMFx4MTB1bnR5cGVkICsgaWdub3JlIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjYKICAgIC8vIGFzc2VydCBhcmM0LlN0cmluZy5mcm9tX2xvZyhvcC5JVHhuLmxhc3RfbG9nKCkpID09ICJlY2hvOiB1bnR5cGVkICsgaWdub3JlIgogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBieXRlICJceDAwXHgxNmVjaG86IHVudHlwZWQgKyBpZ25vcmUiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjgKICAgIC8vIHJlc3VsdCA9IGFyYzQuYWJpX2NhbGxbYXJjNC5TdHJpbmddKCJlY2hvKHN0cmluZylzdHJpbmciLCAidHVwbGUiLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAiZWNobyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGUgIlx4MDBceDA1dHVwbGUiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MjkKICAgIC8vIGFzc2VydCByZXN1bHRbMF0gPT0gImVjaG86IHR1cGxlIgogICAgc3dhcAogICAgYnl0ZSAiXHgwMFx4MGJlY2hvOiB0dXBsZSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozMAogICAgLy8gYXNzZXJ0IGFyYzQuU3RyaW5nLmZyb21fbG9nKHJlc3VsdFsxXS5sYXN0X2xvZykgPT0gImVjaG86IHR1cGxlIgogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGUgMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgYnl0ZSAiXHgwMFx4MGJlY2hvOiB0dXBsZSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTozMgogICAgLy8gdHhuX3Jlc3VsdCA9IGFyYzQuYWJpX2NhbGwoImVjaG8oc3RyaW5nKXN0cmluZyIsICJ1bnR5cGVkIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImVjaG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgwN3VudHlwZWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjMzCiAgICAvLyBhc3NlcnQgYXJjNC5TdHJpbmcuZnJvbV9sb2codHhuX3Jlc3VsdC5sYXN0X2xvZykgPT0gImVjaG86IHVudHlwZWQiCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZSAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBieXRlICJceDAwXHJlY2hvOiB1bnR5cGVkIgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X2FyZ19jb252ZXJzaW9uKGFwcDogdWludDY0KSAtPiB2b2lkOgp0ZXN0X2FyZ19jb252ZXJzaW9uOgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjM1LTM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gZGVmIHRlc3RfYXJnX2NvbnZlcnNpb24oc2VsZiwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjM3CiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5sb2dfc3RyaW5nLCAiY29udmVydGVkMSIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJsb2coc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAiXHgwMFxuY29udmVydGVkMSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MzgKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gYiJjb252ZXJ0ZWQxIgogICAgYnl0ZSAiY29udmVydGVkMSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo0MAogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbChMb2dnZXIubG9nX3VpbnQ2NCwgMiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyh1aW50NjQpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo0MQogICAgLy8gYXNzZXJ0IHR4bi5sYXN0X2xvZyA9PSBvcC5pdG9iKDIpCiAgICBpbnQgMgogICAgaXRvYgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjQzCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5sb2dfdWludDUxMiwgMywgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyh1aW50NTEyKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjQ0CiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IChvcC5iemVybyg1NikgKyBvcC5pdG9iKDMpKQogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NDYKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmxvZ19ieXRlcywgYiI0IiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyhieXRlW10pdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4MDAwMTM0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjQ3CiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IGIiNCIKICAgIGJ5dGUgIjQiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NDkKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoTG9nZ2VyLmxvZ19ib29sLCBUcnVlLCBhcHBfaWQ9YXBwKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAibG9nKGJvb2wpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlIDB4ODAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTAKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gYiJUcnVlIgogICAgYnl0ZSAiVHJ1ZSIKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMudHlwZWRfYWJpX2NhbGwudHlwZWRfYzJjLkdyZWV0ZXIudGVzdF8xNXBsdXNfYXJncyhhcHA6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF8xNXBsdXNfYXJnczoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo1Mi01MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB0ZXN0XzE1cGx1c19hcmdzKHNlbGYsIGFwcDogQXBwbGljYXRpb24pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo1NC03NwogICAgLy8gcmVzdWx0LCB0eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIExvZ2dlci5yZXR1cm5fYXJnc19hZnRlcl8xNHRoLAogICAgLy8gICAgIDEsCiAgICAvLyAgICAgMiwKICAgIC8vICAgICAzLAogICAgLy8gICAgIDQsCiAgICAvLyAgICAgNSwKICAgIC8vICAgICA2LAogICAgLy8gICAgIDcsCiAgICAvLyAgICAgOCwKICAgIC8vICAgICA5LAogICAgLy8gICAgIDEwLAogICAgLy8gICAgIDExLAogICAgLy8gICAgIDEyLAogICAgLy8gICAgIDEzLAogICAgLy8gICAgIDE0LAogICAgLy8gICAgIDE1LAogICAgLy8gICAgIDE2LAogICAgLy8gICAgIDE3LAogICAgLy8gICAgIDE4LAogICAgLy8gICAgIGFyYzQuVHVwbGUoKGFyYzQuVUludDgoMHhERSksIGFyYzQuVUludDgoMHhBRCksIGFyYzQuVUludDgoMHhCRSksIGFyYzQuVUludDgoMHhFRikpKSwKICAgIC8vICAgICAyMCwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIG1ldGhvZCAicmV0dXJuX2FyZ3NfYWZ0ZXJfMTR0aCh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQ4LHVpbnQ4LHVpbnQ4LCh1aW50OCx1aW50OCx1aW50OCx1aW50OCksdWludDgpYnl0ZVtdIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo1NgogICAgLy8gMSwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjU3CiAgICAvLyAyLAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTgKICAgIC8vIDMsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo1OQogICAgLy8gNCwKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDA0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjYwCiAgICAvLyA1LAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NjEKICAgIC8vIDYsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwNgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2MgogICAgLy8gNywKICAgIGJ5dGUgMHgwMDAwMDAwMDAwMDAwMDA3CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjYzCiAgICAvLyA4LAogICAgYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDgKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NjQKICAgIC8vIDksCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwOQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2NQogICAgLy8gMTAsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwYQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2NgogICAgLy8gMTEsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwYgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2NwogICAgLy8gMTIsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwYwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2OAogICAgLy8gMTMsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwZAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo2OQogICAgLy8gMTQsCiAgICBieXRlIDB4MDAwMDAwMDAwMDAwMDAwZQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo3MC03NQogICAgLy8gMTUsCiAgICAvLyAxNiwKICAgIC8vIDE3LAogICAgLy8gMTgsCiAgICAvLyBhcmM0LlR1cGxlKChhcmM0LlVJbnQ4KDB4REUpLCBhcmM0LlVJbnQ4KDB4QUQpLCBhcmM0LlVJbnQ4KDB4QkUpLCBhcmM0LlVJbnQ4KDB4RUYpKSksCiAgICAvLyAyMCwKICAgIGJ5dGUgMHgwZjEwMTExMmRlYWRiZWVmMTQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NTQtNzcKICAgIC8vIHJlc3VsdCwgdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBMb2dnZXIucmV0dXJuX2FyZ3NfYWZ0ZXJfMTR0aCwKICAgIC8vICAgICAxLAogICAgLy8gICAgIDIsCiAgICAvLyAgICAgMywKICAgIC8vICAgICA0LAogICAgLy8gICAgIDUsCiAgICAvLyAgICAgNiwKICAgIC8vICAgICA3LAogICAgLy8gICAgIDgsCiAgICAvLyAgICAgOSwKICAgIC8vICAgICAxMCwKICAgIC8vICAgICAxMSwKICAgIC8vICAgICAxMiwKICAgIC8vICAgICAxMywKICAgIC8vICAgICAxNCwKICAgIC8vICAgICAxNSwKICAgIC8vICAgICAxNiwKICAgIC8vICAgICAxNywKICAgIC8vICAgICAxOCwKICAgIC8vICAgICBhcmM0LlR1cGxlKChhcmM0LlVJbnQ4KDB4REUpLCBhcmM0LlVJbnQ4KDB4QUQpLCBhcmM0LlVJbnQ4KDB4QkUpLCBhcmM0LlVJbnQ4KDB4RUYpKSksCiAgICAvLyAgICAgMjAsCiAgICAvLyAgICAgYXBwX2lkPWFwcCwKICAgIC8vICkKICAgIGludCBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnQgMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo3OAogICAgLy8gYXNzZXJ0IHJlc3VsdC5uYXRpdmUgPT0gQnl0ZXMuZnJvbV9oZXgoIjBGMTAxMTEyREVBREJFRUYxNCIpCiAgICBleHRyYWN0IDIgMAogICAgYnl0ZSAweDBmMTAxMTEyZGVhZGJlZWYxNAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50eXBlZF9hYmlfY2FsbC50eXBlZF9jMmMuR3JlZXRlci50ZXN0X3ZvaWQoYXBwOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3Rfdm9pZDoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo4MC04MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB0ZXN0X3ZvaWQoc2VsZiwgYXBwOiBBcHBsaWNhdGlvbikgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjgyCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKCJsb2coc3RyaW5nKXZvaWQiLCAiV29ybGQxIiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyhzdHJpbmcpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgwNldvcmxkMSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6ODMKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gYiJXb3JsZDEiCiAgICBieXRlICJXb3JsZDEiCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6ODUKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoImxvZyhzdHJpbmcpIiwgIldvcmxkMiIsIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJsb2coc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAiXHgwMFx4MDZXb3JsZDIiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojg2CiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IGIiV29ybGQyIgogICAgYnl0ZSAiV29ybGQyIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojg4CiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKCJsb2ciLCBhcmM0LlN0cmluZygiV29ybGQzIiksIGFwcF9pZD1hcHApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgbWV0aG9kICJsb2coc3RyaW5nKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgYnl0ZSAiXHgwMFx4MDZXb3JsZDMiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50IGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludCAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojg5CiAgICAvLyBhc3NlcnQgdHhuLmxhc3RfbG9nID09IGIiV29ybGQzIgogICAgYnl0ZSAiV29ybGQzIgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjkxCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKExvZ2dlci5sb2dfc3RyaW5nLCAiV29ybGQ0IiwgYXBwX2lkPWFwcCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBtZXRob2QgImxvZyhzdHJpbmcpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlICJceDAwXHgwNldvcmxkNCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTIKICAgIC8vIGFzc2VydCB0eG4ubGFzdF9sb2cgPT0gYiJXb3JsZDQiCiAgICBieXRlICJXb3JsZDQiCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLnRlc3RfcmVmX3R5cGVzKGFwcDogdWludDY0LCBhc3NldDogdWludDY0KSAtPiB2b2lkOgp0ZXN0X3JlZl90eXBlczoKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo5NC05NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIGRlZiB0ZXN0X3JlZl90eXBlcyhzZWxmLCBhcHA6IEFwcGxpY2F0aW9uLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weTo5Ni0xMDIKICAgIC8vIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgTG9nZ2VyLmxvZ19hc3NldF9hY2NvdW50X2FwcCwKICAgIC8vICAgICBhc3NldCwKICAgIC8vICAgICBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGFwcCwKICAgIC8vICAgICBhcHBfaWQ9YXBwLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojk5CiAgICAvLyBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25zCiAgICBpdHhuX2ZpZWxkIEFjY291bnRzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTYtMTAyCiAgICAvLyB0eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIExvZ2dlci5sb2dfYXNzZXRfYWNjb3VudF9hcHAsCiAgICAvLyAgICAgYXNzZXQsCiAgICAvLyAgICAgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBhcHAsCiAgICAvLyAgICAgYXBwX2lkPWFwcCwKICAgIC8vICkKICAgIG1ldGhvZCAibG9nKGFzc2V0LGFjY291bnQsYXBwbGljYXRpb24pdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6OTgKICAgIC8vIGFzc2V0LAogICAgYnl0ZSAweDAwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojk5CiAgICAvLyBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgYnl0ZSAweDAxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEwMAogICAgLy8gYXBwLAogICAgYnl0ZSAweDAxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5Ojk2LTEwMgogICAgLy8gdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBMb2dnZXIubG9nX2Fzc2V0X2FjY291bnRfYXBwLAogICAgLy8gICAgIGFzc2V0LAogICAgLy8gICAgIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXBwLAogICAgLy8gICAgIGFwcF9pZD1hcHAsCiAgICAvLyApCiAgICBpbnQgYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50IDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6MTA1CiAgICAvLyA9PSBhc3NldC5uYW1lICsgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5ieXRlcyArIGFwcC5hZGRyZXNzLmJ5dGVzCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGNvbmNhdAogICAgLy8gdHlwZWRfYWJpX2NhbGwvdHlwZWRfYzJjLnB5OjEwNC0xMDUKICAgIC8vIHR4bi5sYXN0X2xvZwogICAgLy8gPT0gYXNzZXQubmFtZSArIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuYnl0ZXMgKyBhcHAuYWRkcmVzcy5ieXRlcwogICAgPT0KICAgIC8vIHR5cGVkX2FiaV9jYWxsL3R5cGVkX2MyYy5weToxMDMtMTA2CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHR4bi5sYXN0X2xvZwogICAgLy8gICAgID09IGFzc2V0Lm5hbWUgKyBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmJ5dGVzICsgYXBwLmFkZHJlc3MuYnl0ZXMKICAgIC8vICkKICAgIGFzc2VydAogICAgcmV0c3ViCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0X2Nhc2VzLnR5cGVkX2FiaV9jYWxsLnR5cGVkX2MyYy5HcmVldGVyLmNsZWFyX3N0YXRlX3Byb2dyYW06CiAgICAvLyB0eXBlZF9hYmlfY2FsbC90eXBlZF9jMmMucHk6NgogICAgLy8gY2xhc3MgR3JlZXRlcihBUkM0Q29udHJhY3QpOgogICAgaW50IDEKICAgIHJldHVybgo=" }, "state": { "global": { diff --git a/test_cases/typed_abi_call/out/Greeter.clear.mir b/test_cases/typed_abi_call/out/Greeter.clear.mir index 1d6e9950ba..93315f49c3 100644 --- a/test_cases/typed_abi_call/out/Greeter.clear.mir +++ b/test_cases/typed_abi_call/out/Greeter.clear.mir @@ -4,6 +4,6 @@ // test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> uint64: main_block@0: - int 1 // 1 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 - return // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:5 + int 1 // 1 class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 + return // class Greeter(ARC4Contract): typed_abi_call/typed_c2c.py:6 diff --git a/test_cases/typed_abi_call/out/Greeter.clear.teal b/test_cases/typed_abi_call/out/Greeter.clear.teal index 7e74f0c13c..1abfdf3763 100644 --- a/test_cases/typed_abi_call/out/Greeter.clear.teal +++ b/test_cases/typed_abi_call/out/Greeter.clear.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program: - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): int 1 return diff --git a/test_cases/typed_abi_call/out/Greeter.destructured.ir b/test_cases/typed_abi_call/out/Greeter.destructured.ir index 29b24715ea..cef585f199 100644 --- a/test_cases/typed_abi_call/out/Greeter.destructured.ir +++ b/test_cases/typed_abi_call/out/Greeter.destructured.ir @@ -1,13 +1,13 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program approval: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: - block@0: // L5 + block@0: // L6 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@10 - block@1: // abi_routing_L5 + block@1: // abi_routing_L6 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => fail // reject transaction} - block@2: // test_method_selector_kinds_route_L6 + block@2: // test_method_selector_kinds_route_L7 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -18,7 +18,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%7#0: uint64 = ((txnas Applications) tmp%6#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(tmp%7#0) return 1u - block@3: // test_method_overload_route_L19 + block@3: // test_method_overload_route_L20 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp @@ -29,7 +29,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%13#0: uint64 = ((txnas Applications) tmp%12#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(tmp%13#0) return 1u - block@4: // test_arg_conversion_route_L34 + block@4: // test_arg_conversion_route_L35 let tmp%14#0: uint64 = (txn OnCompletion) let tmp%15#0: bool = (! tmp%14#0) (assert tmp%15#0) // OnCompletion is NoOp @@ -40,7 +40,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%19#0: uint64 = ((txnas Applications) tmp%18#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(tmp%19#0) return 1u - block@5: // test_15plus_args_route_L51 + block@5: // test_15plus_args_route_L52 let tmp%20#0: uint64 = (txn OnCompletion) let tmp%21#0: bool = (! tmp%20#0) (assert tmp%21#0) // OnCompletion is NoOp @@ -51,7 +51,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%25#0: uint64 = ((txnas Applications) tmp%24#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(tmp%25#0) return 1u - block@6: // test_void_route_L79 + block@6: // test_void_route_L80 let tmp%26#0: uint64 = (txn OnCompletion) let tmp%27#0: bool = (! tmp%26#0) (assert tmp%27#0) // OnCompletion is NoOp @@ -62,7 +62,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%31#0: uint64 = ((txnas Applications) tmp%30#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_void(tmp%31#0) return 1u - block@7: // test_ref_types_route_L93 + block@7: // test_ref_types_route_L94 let tmp%32#0: uint64 = (txn OnCompletion) let tmp%33#0: bool = (! tmp%32#0) (assert tmp%33#0) // OnCompletion is NoOp @@ -76,7 +76,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%40#0: uint64 = ((txnas Assets) tmp%39#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(tmp%37#0, tmp%40#0) return 1u - block@10: // bare_routing_L5 + block@10: // bare_routing_L6 let tmp%41#0: uint64 = (txn OnCompletion) let not%tmp%41#0: bool = (! tmp%41#0) (assert not%tmp%41#0) // reject transaction @@ -86,7 +86,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: - block@0: // L6 + block@0: // L7 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -160,7 +160,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: - block@0: // L19 + block@0: // L20 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -231,7 +231,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: - block@0: // L34 + block@0: // L35 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -286,7 +286,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: - block@0: // L51 + block@0: // L52 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]") @@ -319,7 +319,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: - block@0: // L79 + block@0: // L80 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -363,7 +363,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: - block@0: // L93 + block@0: // L94 itxn_begin let tmp%0#0: bytes = (global CurrentApplicationAddress) ((itxn_field ApplicationID) app#0) @@ -391,5 +391,5 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: - block@0: // L5 + block@0: // L6 return 1u \ No newline at end of file diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.ir b/test_cases/typed_abi_call/out/Greeter.ssa.ir index 3f6f69d3c1..9deb76601e 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.ir @@ -1,13 +1,13 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program approval: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: - block@0: // L5 + block@0: // L6 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@10 - block@1: // abi_routing_L5 + block@1: // abi_routing_L6 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => block@8} - block@2: // test_method_selector_kinds_route_L6 + block@2: // test_method_selector_kinds_route_L7 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (== tmp%2#0 NoOp) (assert tmp%3#0) // OnCompletion is NoOp @@ -18,7 +18,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%7#0: uint64 = ((txnas Applications) tmp%6#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(tmp%7#0) return 1u - block@3: // test_method_overload_route_L19 + block@3: // test_method_overload_route_L20 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (== tmp%8#0 NoOp) (assert tmp%9#0) // OnCompletion is NoOp @@ -29,7 +29,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%13#0: uint64 = ((txnas Applications) tmp%12#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(tmp%13#0) return 1u - block@4: // test_arg_conversion_route_L34 + block@4: // test_arg_conversion_route_L35 let tmp%14#0: uint64 = (txn OnCompletion) let tmp%15#0: bool = (== tmp%14#0 NoOp) (assert tmp%15#0) // OnCompletion is NoOp @@ -40,7 +40,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%19#0: uint64 = ((txnas Applications) tmp%18#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(tmp%19#0) return 1u - block@5: // test_15plus_args_route_L51 + block@5: // test_15plus_args_route_L52 let tmp%20#0: uint64 = (txn OnCompletion) let tmp%21#0: bool = (== tmp%20#0 NoOp) (assert tmp%21#0) // OnCompletion is NoOp @@ -51,7 +51,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%25#0: uint64 = ((txnas Applications) tmp%24#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(tmp%25#0) return 1u - block@6: // test_void_route_L79 + block@6: // test_void_route_L80 let tmp%26#0: uint64 = (txn OnCompletion) let tmp%27#0: bool = (== tmp%26#0 NoOp) (assert tmp%27#0) // OnCompletion is NoOp @@ -62,7 +62,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%31#0: uint64 = ((txnas Applications) tmp%30#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_void(tmp%31#0) return 1u - block@7: // test_ref_types_route_L93 + block@7: // test_ref_types_route_L94 let tmp%32#0: uint64 = (txn OnCompletion) let tmp%33#0: bool = (== tmp%32#0 NoOp) (assert tmp%33#0) // OnCompletion is NoOp @@ -76,23 +76,23 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%40#0: uint64 = ((txnas Assets) tmp%39#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(tmp%37#0, tmp%40#0) return 1u - block@8: // switch_case_default_L5 + block@8: // switch_case_default_L6 goto block@9 - block@9: // switch_case_next_L5 + block@9: // switch_case_next_L6 fail // reject transaction - block@10: // bare_routing_L5 + block@10: // bare_routing_L6 let tmp%41#0: uint64 = (txn OnCompletion) switch tmp%41#0 {0u => block@11, * => block@12} - block@11: // create_L5 + block@11: // create_L6 let tmp%42#0: bool = (txn ApplicationID) let tmp%43#0: bool = (! tmp%42#0) (assert tmp%43#0) // is creating return 1u - block@12: // reject_bare_on_completion_L5 + block@12: // reject_bare_on_completion_L6 fail // reject transaction subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: - block@0: // L6 + block@0: // L7 itxn_begin let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u @@ -157,7 +157,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) goto block@1 - block@1: // next_txn_L8 + block@1: // next_txn_L9 itxn_submit let awst_tmp%0#0: itxn_group_idx = itxn_group_idx(0) let awst_tmp%1#0: bytes = itxn[awst_tmp%0#0].LastLog @@ -296,7 +296,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) goto block@2 - block@2: // next_txn_L10 + block@2: // next_txn_L11 itxn_submit let awst_tmp%2#0: itxn_group_idx = itxn_group_idx(0) let awst_tmp%3#0: bytes = itxn[awst_tmp%2#0].LastLog @@ -435,7 +435,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) goto block@3 - block@3: // next_txn_L12 + block@3: // next_txn_L13 itxn_submit let awst_tmp%4#0: itxn_group_idx = itxn_group_idx(0) let awst_tmp%5#0: bytes = itxn[awst_tmp%4#0].LastLog @@ -574,7 +574,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%3%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%3%%param_Fee_idx_0#0) goto block@4 - block@4: // next_txn_L14 + block@4: // next_txn_L15 itxn_submit let awst_tmp%6#0: itxn_group_idx = itxn_group_idx(0) let awst_tmp%7#0: bytes = itxn[awst_tmp%6#0].LastLog @@ -713,7 +713,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%4%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%4%%param_Fee_idx_0#0) goto block@5 - block@5: // next_txn_L16 + block@5: // next_txn_L17 itxn_submit let awst_tmp%8#0: itxn_group_idx = itxn_group_idx(0) let awst_tmp%9#0: bytes = itxn[awst_tmp%8#0].LastLog @@ -791,7 +791,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: - block@0: // L19 + block@0: // L20 itxn_begin let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u @@ -856,7 +856,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) goto block@1 - block@1: // next_txn_L21 + block@1: // next_txn_L22 itxn_submit let awst_tmp%0#0: itxn_group_idx = itxn_group_idx(0) let awst_tmp%1#0: bytes = itxn[awst_tmp%0#0].LastLog @@ -937,7 +937,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) goto block@2 - block@2: // next_txn_L24 + block@2: // next_txn_L25 itxn_submit let awst_tmp%3#0: bytes = (itxn LastLog) let tmp%7#0: bytes = ((extract 4 0) awst_tmp%3#0) @@ -1011,7 +1011,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) goto block@3 - block@3: // next_txn_L27 + block@3: // next_txn_L28 itxn_submit let awst_tmp%4#0: itxn_group_idx = itxn_group_idx(0) let awst_tmp%5#0: bytes = itxn[awst_tmp%4#0].LastLog @@ -1158,7 +1158,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%3%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%3%%param_Fee_idx_0#0) goto block@4 - block@4: // next_txn_L31 + block@4: // next_txn_L32 itxn_submit let txn_result#0: itxn_group_idx = itxn_group_idx(0) let txn_result._is_last#0: bool = 1u @@ -1234,7 +1234,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: - block@0: // L34 + block@0: // L35 itxn_begin let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u @@ -1299,7 +1299,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) goto block@1 - block@1: // next_txn_L36 + block@1: // next_txn_L37 itxn_submit let txn#0: itxn_group_idx = itxn_group_idx(0) let txn._is_last#0: bool = 1u @@ -1430,7 +1430,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) goto block@2 - block@2: // next_txn_L39 + block@2: // next_txn_L40 itxn_submit let txn#1: itxn_group_idx = itxn_group_idx(0) let txn._is_last#1: bool = 1u @@ -1562,7 +1562,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) goto block@3 - block@3: // next_txn_L42 + block@3: // next_txn_L43 itxn_submit let txn#2: itxn_group_idx = itxn_group_idx(0) let txn._is_last#2: bool = 1u @@ -1696,7 +1696,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%3%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%3%%param_Fee_idx_0#0) goto block@4 - block@4: // next_txn_L45 + block@4: // next_txn_L46 itxn_submit let txn#3: itxn_group_idx = itxn_group_idx(0) let txn._is_last#3: bool = 1u @@ -1828,7 +1828,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%4%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%4%%param_Fee_idx_0#0) goto block@5 - block@5: // next_txn_L48 + block@5: // next_txn_L49 itxn_submit let txn#4: itxn_group_idx = itxn_group_idx(0) let txn._is_last#4: bool = 1u @@ -1898,7 +1898,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: - block@0: // L51 + block@0: // L52 itxn_begin let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u @@ -2005,7 +2005,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) goto block@1 - block@1: // next_txn_L53 + block@1: // next_txn_L54 itxn_submit let awst_tmp%0#0: itxn_group_idx = itxn_group_idx(0) let awst_tmp%1#0: bytes = itxn[awst_tmp%0#0].LastLog @@ -2084,7 +2084,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: - block@0: // L79 + block@0: // L80 itxn_begin let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u @@ -2149,7 +2149,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) goto block@1 - block@1: // next_txn_L81 + block@1: // next_txn_L82 itxn_submit let txn#0: itxn_group_idx = itxn_group_idx(0) let txn._is_last#0: bool = 1u @@ -2280,7 +2280,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%1%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%1%%param_Fee_idx_0#0) goto block@2 - block@2: // next_txn_L84 + block@2: // next_txn_L85 itxn_submit let txn#1: itxn_group_idx = itxn_group_idx(0) let txn._is_last#1: bool = 1u @@ -2411,7 +2411,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%2%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%2%%param_Fee_idx_0#0) goto block@3 - block@3: // next_txn_L87 + block@3: // next_txn_L88 itxn_submit let txn#2: itxn_group_idx = itxn_group_idx(0) let txn._is_last#2: bool = 1u @@ -2542,7 +2542,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%3%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%3%%param_Fee_idx_0#0) goto block@4 - block@4: // next_txn_L90 + block@4: // next_txn_L91 itxn_submit let txn#3: itxn_group_idx = itxn_group_idx(0) let txn._is_last#3: bool = 1u @@ -2612,7 +2612,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: - block@0: // L93 + block@0: // L94 itxn_begin let inner_txn_params%0#0: itxn_field_set = itxn_field_set(0) let inner_txn_params%0%%param_Fee_idx_0#0: uint64 = 0u @@ -2688,7 +2688,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) inner_txn_params%0%%param_TypeEnum_idx_0#0) ((itxn_field Fee) inner_txn_params%0%%param_Fee_idx_0#0) goto block@1 - block@1: // next_txn_L95 + block@1: // next_txn_L96 itxn_submit let txn#0: itxn_group_idx = itxn_group_idx(0) let txn._is_last#0: bool = 1u @@ -2766,5 +2766,5 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: - block@0: // L5 + block@0: // L6 return 1u \ No newline at end of file diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_1.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_1.ir index b294aae8ec..59862075df 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_1.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_1.ir @@ -1,13 +1,13 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program approval: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: - block@0: // L5 + block@0: // L6 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@10 - block@1: // abi_routing_L5 + block@1: // abi_routing_L6 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => fail // reject transaction} - block@2: // test_method_selector_kinds_route_L6 + block@2: // test_method_selector_kinds_route_L7 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -18,7 +18,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%7#0: uint64 = ((txnas Applications) tmp%6#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(tmp%7#0) return 1u - block@3: // test_method_overload_route_L19 + block@3: // test_method_overload_route_L20 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp @@ -29,7 +29,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%13#0: uint64 = ((txnas Applications) tmp%12#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(tmp%13#0) return 1u - block@4: // test_arg_conversion_route_L34 + block@4: // test_arg_conversion_route_L35 let tmp%14#0: uint64 = (txn OnCompletion) let tmp%15#0: bool = (! tmp%14#0) (assert tmp%15#0) // OnCompletion is NoOp @@ -40,7 +40,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%19#0: uint64 = ((txnas Applications) tmp%18#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(tmp%19#0) return 1u - block@5: // test_15plus_args_route_L51 + block@5: // test_15plus_args_route_L52 let tmp%20#0: uint64 = (txn OnCompletion) let tmp%21#0: bool = (! tmp%20#0) (assert tmp%21#0) // OnCompletion is NoOp @@ -51,7 +51,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%25#0: uint64 = ((txnas Applications) tmp%24#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(tmp%25#0) return 1u - block@6: // test_void_route_L79 + block@6: // test_void_route_L80 let tmp%26#0: uint64 = (txn OnCompletion) let tmp%27#0: bool = (! tmp%26#0) (assert tmp%27#0) // OnCompletion is NoOp @@ -62,7 +62,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%31#0: uint64 = ((txnas Applications) tmp%30#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_void(tmp%31#0) return 1u - block@7: // test_ref_types_route_L93 + block@7: // test_ref_types_route_L94 let tmp%32#0: uint64 = (txn OnCompletion) let tmp%33#0: bool = (! tmp%32#0) (assert tmp%33#0) // OnCompletion is NoOp @@ -76,7 +76,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%40#0: uint64 = ((txnas Assets) tmp%39#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(tmp%37#0, tmp%40#0) return 1u - block@10: // bare_routing_L5 + block@10: // bare_routing_L6 let tmp%41#0: uint64 = (txn OnCompletion) let not%tmp%41#0: bool = (! tmp%41#0) (assert not%tmp%41#0) // reject transaction @@ -86,7 +86,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: - block@0: // L6 + block@0: // L7 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -160,7 +160,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: - block@0: // L19 + block@0: // L20 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -231,7 +231,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: - block@0: // L34 + block@0: // L35 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -288,7 +288,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: - block@0: // L51 + block@0: // L52 itxn_begin let encoded_tuple_buffer%0#1: bytes = 0xde let encoded_tuple_buffer%0#2: bytes = (concat encoded_tuple_buffer%0#1 0xad) @@ -331,7 +331,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: - block@0: // L79 + block@0: // L80 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -375,7 +375,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: - block@0: // L93 + block@0: // L94 itxn_begin let tmp%0#0: bytes = (global CurrentApplicationAddress) ((itxn_field ApplicationID) app#0) @@ -403,5 +403,5 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: - block@0: // L5 + block@0: // L6 return 1u \ No newline at end of file diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_2.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_2.ir index 3b1478b3e4..b7d9d795bb 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_2.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_2.ir @@ -1,13 +1,13 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program approval: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: - block@0: // L5 + block@0: // L6 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@10 - block@1: // abi_routing_L5 + block@1: // abi_routing_L6 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => fail // reject transaction} - block@2: // test_method_selector_kinds_route_L6 + block@2: // test_method_selector_kinds_route_L7 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -18,7 +18,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%7#0: uint64 = ((txnas Applications) tmp%6#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(tmp%7#0) return 1u - block@3: // test_method_overload_route_L19 + block@3: // test_method_overload_route_L20 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp @@ -29,7 +29,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%13#0: uint64 = ((txnas Applications) tmp%12#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(tmp%13#0) return 1u - block@4: // test_arg_conversion_route_L34 + block@4: // test_arg_conversion_route_L35 let tmp%14#0: uint64 = (txn OnCompletion) let tmp%15#0: bool = (! tmp%14#0) (assert tmp%15#0) // OnCompletion is NoOp @@ -40,7 +40,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%19#0: uint64 = ((txnas Applications) tmp%18#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(tmp%19#0) return 1u - block@5: // test_15plus_args_route_L51 + block@5: // test_15plus_args_route_L52 let tmp%20#0: uint64 = (txn OnCompletion) let tmp%21#0: bool = (! tmp%20#0) (assert tmp%21#0) // OnCompletion is NoOp @@ -51,7 +51,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%25#0: uint64 = ((txnas Applications) tmp%24#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(tmp%25#0) return 1u - block@6: // test_void_route_L79 + block@6: // test_void_route_L80 let tmp%26#0: uint64 = (txn OnCompletion) let tmp%27#0: bool = (! tmp%26#0) (assert tmp%27#0) // OnCompletion is NoOp @@ -62,7 +62,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%31#0: uint64 = ((txnas Applications) tmp%30#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_void(tmp%31#0) return 1u - block@7: // test_ref_types_route_L93 + block@7: // test_ref_types_route_L94 let tmp%32#0: uint64 = (txn OnCompletion) let tmp%33#0: bool = (! tmp%32#0) (assert tmp%33#0) // OnCompletion is NoOp @@ -76,7 +76,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%40#0: uint64 = ((txnas Assets) tmp%39#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(tmp%37#0, tmp%40#0) return 1u - block@10: // bare_routing_L5 + block@10: // bare_routing_L6 let tmp%41#0: uint64 = (txn OnCompletion) let not%tmp%41#0: bool = (! tmp%41#0) (assert not%tmp%41#0) // reject transaction @@ -86,7 +86,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: - block@0: // L6 + block@0: // L7 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -160,7 +160,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: - block@0: // L19 + block@0: // L20 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -231,7 +231,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: - block@0: // L34 + block@0: // L35 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -286,7 +286,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: - block@0: // L51 + block@0: // L52 itxn_begin let encoded_tuple_buffer%0#2: bytes = 0xdead let encoded_tuple_buffer%0#3: bytes = (concat encoded_tuple_buffer%0#2 0xbe) @@ -327,7 +327,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: - block@0: // L79 + block@0: // L80 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -371,7 +371,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: - block@0: // L93 + block@0: // L94 itxn_begin let tmp%0#0: bytes = (global CurrentApplicationAddress) ((itxn_field ApplicationID) app#0) @@ -399,5 +399,5 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: - block@0: // L5 + block@0: // L6 return 1u \ No newline at end of file diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_3.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_3.ir index 8f30c331b0..df6aded57b 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_3.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_3.ir @@ -1,13 +1,13 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program approval: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: - block@0: // L5 + block@0: // L6 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@10 - block@1: // abi_routing_L5 + block@1: // abi_routing_L6 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => fail // reject transaction} - block@2: // test_method_selector_kinds_route_L6 + block@2: // test_method_selector_kinds_route_L7 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -18,7 +18,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%7#0: uint64 = ((txnas Applications) tmp%6#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(tmp%7#0) return 1u - block@3: // test_method_overload_route_L19 + block@3: // test_method_overload_route_L20 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp @@ -29,7 +29,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%13#0: uint64 = ((txnas Applications) tmp%12#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(tmp%13#0) return 1u - block@4: // test_arg_conversion_route_L34 + block@4: // test_arg_conversion_route_L35 let tmp%14#0: uint64 = (txn OnCompletion) let tmp%15#0: bool = (! tmp%14#0) (assert tmp%15#0) // OnCompletion is NoOp @@ -40,7 +40,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%19#0: uint64 = ((txnas Applications) tmp%18#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(tmp%19#0) return 1u - block@5: // test_15plus_args_route_L51 + block@5: // test_15plus_args_route_L52 let tmp%20#0: uint64 = (txn OnCompletion) let tmp%21#0: bool = (! tmp%20#0) (assert tmp%21#0) // OnCompletion is NoOp @@ -51,7 +51,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%25#0: uint64 = ((txnas Applications) tmp%24#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(tmp%25#0) return 1u - block@6: // test_void_route_L79 + block@6: // test_void_route_L80 let tmp%26#0: uint64 = (txn OnCompletion) let tmp%27#0: bool = (! tmp%26#0) (assert tmp%27#0) // OnCompletion is NoOp @@ -62,7 +62,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%31#0: uint64 = ((txnas Applications) tmp%30#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_void(tmp%31#0) return 1u - block@7: // test_ref_types_route_L93 + block@7: // test_ref_types_route_L94 let tmp%32#0: uint64 = (txn OnCompletion) let tmp%33#0: bool = (! tmp%32#0) (assert tmp%33#0) // OnCompletion is NoOp @@ -76,7 +76,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%40#0: uint64 = ((txnas Assets) tmp%39#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(tmp%37#0, tmp%40#0) return 1u - block@10: // bare_routing_L5 + block@10: // bare_routing_L6 let tmp%41#0: uint64 = (txn OnCompletion) let not%tmp%41#0: bool = (! tmp%41#0) (assert not%tmp%41#0) // reject transaction @@ -86,7 +86,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: - block@0: // L6 + block@0: // L7 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -160,7 +160,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: - block@0: // L19 + block@0: // L20 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -231,7 +231,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: - block@0: // L34 + block@0: // L35 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -286,7 +286,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: - block@0: // L51 + block@0: // L52 itxn_begin let encoded_tuple_buffer%0#3: bytes = 0xdeadbe let encoded_tuple_buffer%0#4: bytes = (concat encoded_tuple_buffer%0#3 0xef) @@ -325,7 +325,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: - block@0: // L79 + block@0: // L80 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -369,7 +369,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: - block@0: // L93 + block@0: // L94 itxn_begin let tmp%0#0: bytes = (global CurrentApplicationAddress) ((itxn_field ApplicationID) app#0) @@ -397,5 +397,5 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: - block@0: // L5 + block@0: // L6 return 1u \ No newline at end of file diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_4.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_4.ir index 65857636bb..9ea26b93a3 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_4.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_4.ir @@ -1,13 +1,13 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program approval: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: - block@0: // L5 + block@0: // L6 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@10 - block@1: // abi_routing_L5 + block@1: // abi_routing_L6 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => fail // reject transaction} - block@2: // test_method_selector_kinds_route_L6 + block@2: // test_method_selector_kinds_route_L7 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -18,7 +18,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%7#0: uint64 = ((txnas Applications) tmp%6#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(tmp%7#0) return 1u - block@3: // test_method_overload_route_L19 + block@3: // test_method_overload_route_L20 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp @@ -29,7 +29,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%13#0: uint64 = ((txnas Applications) tmp%12#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(tmp%13#0) return 1u - block@4: // test_arg_conversion_route_L34 + block@4: // test_arg_conversion_route_L35 let tmp%14#0: uint64 = (txn OnCompletion) let tmp%15#0: bool = (! tmp%14#0) (assert tmp%15#0) // OnCompletion is NoOp @@ -40,7 +40,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%19#0: uint64 = ((txnas Applications) tmp%18#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(tmp%19#0) return 1u - block@5: // test_15plus_args_route_L51 + block@5: // test_15plus_args_route_L52 let tmp%20#0: uint64 = (txn OnCompletion) let tmp%21#0: bool = (! tmp%20#0) (assert tmp%21#0) // OnCompletion is NoOp @@ -51,7 +51,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%25#0: uint64 = ((txnas Applications) tmp%24#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(tmp%25#0) return 1u - block@6: // test_void_route_L79 + block@6: // test_void_route_L80 let tmp%26#0: uint64 = (txn OnCompletion) let tmp%27#0: bool = (! tmp%26#0) (assert tmp%27#0) // OnCompletion is NoOp @@ -62,7 +62,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%31#0: uint64 = ((txnas Applications) tmp%30#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_void(tmp%31#0) return 1u - block@7: // test_ref_types_route_L93 + block@7: // test_ref_types_route_L94 let tmp%32#0: uint64 = (txn OnCompletion) let tmp%33#0: bool = (! tmp%32#0) (assert tmp%33#0) // OnCompletion is NoOp @@ -76,7 +76,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%40#0: uint64 = ((txnas Assets) tmp%39#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(tmp%37#0, tmp%40#0) return 1u - block@10: // bare_routing_L5 + block@10: // bare_routing_L6 let tmp%41#0: uint64 = (txn OnCompletion) let not%tmp%41#0: bool = (! tmp%41#0) (assert not%tmp%41#0) // reject transaction @@ -86,7 +86,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: - block@0: // L6 + block@0: // L7 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -160,7 +160,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: - block@0: // L19 + block@0: // L20 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -231,7 +231,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: - block@0: // L34 + block@0: // L35 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -286,7 +286,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: - block@0: // L51 + block@0: // L52 itxn_begin let encoded_tuple_buffer%0#4: bytes = 0xdeadbeef let encoded_tuple_buffer%1#4: bytes = 0x0f101112 @@ -323,7 +323,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: - block@0: // L79 + block@0: // L80 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -367,7 +367,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: - block@0: // L93 + block@0: // L94 itxn_begin let tmp%0#0: bytes = (global CurrentApplicationAddress) ((itxn_field ApplicationID) app#0) @@ -395,5 +395,5 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: - block@0: // L5 + block@0: // L6 return 1u \ No newline at end of file diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_5.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_5.ir index 72386e1617..8d1310004d 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_5.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_5.ir @@ -1,13 +1,13 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program approval: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: - block@0: // L5 + block@0: // L6 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@10 - block@1: // abi_routing_L5 + block@1: // abi_routing_L6 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => fail // reject transaction} - block@2: // test_method_selector_kinds_route_L6 + block@2: // test_method_selector_kinds_route_L7 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -18,7 +18,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%7#0: uint64 = ((txnas Applications) tmp%6#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(tmp%7#0) return 1u - block@3: // test_method_overload_route_L19 + block@3: // test_method_overload_route_L20 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp @@ -29,7 +29,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%13#0: uint64 = ((txnas Applications) tmp%12#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(tmp%13#0) return 1u - block@4: // test_arg_conversion_route_L34 + block@4: // test_arg_conversion_route_L35 let tmp%14#0: uint64 = (txn OnCompletion) let tmp%15#0: bool = (! tmp%14#0) (assert tmp%15#0) // OnCompletion is NoOp @@ -40,7 +40,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%19#0: uint64 = ((txnas Applications) tmp%18#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(tmp%19#0) return 1u - block@5: // test_15plus_args_route_L51 + block@5: // test_15plus_args_route_L52 let tmp%20#0: uint64 = (txn OnCompletion) let tmp%21#0: bool = (! tmp%20#0) (assert tmp%21#0) // OnCompletion is NoOp @@ -51,7 +51,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%25#0: uint64 = ((txnas Applications) tmp%24#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(tmp%25#0) return 1u - block@6: // test_void_route_L79 + block@6: // test_void_route_L80 let tmp%26#0: uint64 = (txn OnCompletion) let tmp%27#0: bool = (! tmp%26#0) (assert tmp%27#0) // OnCompletion is NoOp @@ -62,7 +62,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%31#0: uint64 = ((txnas Applications) tmp%30#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_void(tmp%31#0) return 1u - block@7: // test_ref_types_route_L93 + block@7: // test_ref_types_route_L94 let tmp%32#0: uint64 = (txn OnCompletion) let tmp%33#0: bool = (! tmp%32#0) (assert tmp%33#0) // OnCompletion is NoOp @@ -76,7 +76,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%40#0: uint64 = ((txnas Assets) tmp%39#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(tmp%37#0, tmp%40#0) return 1u - block@10: // bare_routing_L5 + block@10: // bare_routing_L6 let tmp%41#0: uint64 = (txn OnCompletion) let not%tmp%41#0: bool = (! tmp%41#0) (assert not%tmp%41#0) // reject transaction @@ -86,7 +86,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: - block@0: // L6 + block@0: // L7 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -160,7 +160,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: - block@0: // L19 + block@0: // L20 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -231,7 +231,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: - block@0: // L34 + block@0: // L35 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -286,7 +286,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: - block@0: // L51 + block@0: // L52 itxn_begin let encoded_tuple_buffer%1#5: bytes = 0x0f101112deadbeef let encoded_tuple_buffer%1#6: bytes = (concat encoded_tuple_buffer%1#5 0x14) @@ -321,7 +321,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: - block@0: // L79 + block@0: // L80 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -365,7 +365,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: - block@0: // L93 + block@0: // L94 itxn_begin let tmp%0#0: bytes = (global CurrentApplicationAddress) ((itxn_field ApplicationID) app#0) @@ -393,5 +393,5 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: - block@0: // L5 + block@0: // L6 return 1u \ No newline at end of file diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_6.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_6.ir index f3c813355b..06bda71e68 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_6.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_6.ir @@ -1,13 +1,13 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program approval: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: - block@0: // L5 + block@0: // L6 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@10 - block@1: // abi_routing_L5 + block@1: // abi_routing_L6 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => fail // reject transaction} - block@2: // test_method_selector_kinds_route_L6 + block@2: // test_method_selector_kinds_route_L7 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -18,7 +18,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%7#0: uint64 = ((txnas Applications) tmp%6#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(tmp%7#0) return 1u - block@3: // test_method_overload_route_L19 + block@3: // test_method_overload_route_L20 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp @@ -29,7 +29,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%13#0: uint64 = ((txnas Applications) tmp%12#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(tmp%13#0) return 1u - block@4: // test_arg_conversion_route_L34 + block@4: // test_arg_conversion_route_L35 let tmp%14#0: uint64 = (txn OnCompletion) let tmp%15#0: bool = (! tmp%14#0) (assert tmp%15#0) // OnCompletion is NoOp @@ -40,7 +40,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%19#0: uint64 = ((txnas Applications) tmp%18#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(tmp%19#0) return 1u - block@5: // test_15plus_args_route_L51 + block@5: // test_15plus_args_route_L52 let tmp%20#0: uint64 = (txn OnCompletion) let tmp%21#0: bool = (! tmp%20#0) (assert tmp%21#0) // OnCompletion is NoOp @@ -51,7 +51,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%25#0: uint64 = ((txnas Applications) tmp%24#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(tmp%25#0) return 1u - block@6: // test_void_route_L79 + block@6: // test_void_route_L80 let tmp%26#0: uint64 = (txn OnCompletion) let tmp%27#0: bool = (! tmp%26#0) (assert tmp%27#0) // OnCompletion is NoOp @@ -62,7 +62,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%31#0: uint64 = ((txnas Applications) tmp%30#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_void(tmp%31#0) return 1u - block@7: // test_ref_types_route_L93 + block@7: // test_ref_types_route_L94 let tmp%32#0: uint64 = (txn OnCompletion) let tmp%33#0: bool = (! tmp%32#0) (assert tmp%33#0) // OnCompletion is NoOp @@ -76,7 +76,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%40#0: uint64 = ((txnas Assets) tmp%39#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(tmp%37#0, tmp%40#0) return 1u - block@10: // bare_routing_L5 + block@10: // bare_routing_L6 let tmp%41#0: uint64 = (txn OnCompletion) let not%tmp%41#0: bool = (! tmp%41#0) (assert not%tmp%41#0) // reject transaction @@ -86,7 +86,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: - block@0: // L6 + block@0: // L7 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -160,7 +160,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: - block@0: // L19 + block@0: // L20 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -231,7 +231,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: - block@0: // L34 + block@0: // L35 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -286,7 +286,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: - block@0: // L51 + block@0: // L52 itxn_begin let encoded_tuple_buffer%1#6: bytes = 0x0f101112deadbeef14 ((itxn_field ApplicationID) app#0) @@ -320,7 +320,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: - block@0: // L79 + block@0: // L80 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -364,7 +364,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: - block@0: // L93 + block@0: // L94 itxn_begin let tmp%0#0: bytes = (global CurrentApplicationAddress) ((itxn_field ApplicationID) app#0) @@ -392,5 +392,5 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: - block@0: // L5 + block@0: // L6 return 1u \ No newline at end of file diff --git a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_7.ir b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_7.ir index 1535803582..9d3efd0649 100644 --- a/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_7.ir +++ b/test_cases/typed_abi_call/out/Greeter.ssa.opt_pass_7.ir @@ -1,13 +1,13 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program approval: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: - block@0: // L5 + block@0: // L6 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@10 - block@1: // abi_routing_L5 + block@1: // abi_routing_L6 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => fail // reject transaction} - block@2: // test_method_selector_kinds_route_L6 + block@2: // test_method_selector_kinds_route_L7 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -18,7 +18,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%7#0: uint64 = ((txnas Applications) tmp%6#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(tmp%7#0) return 1u - block@3: // test_method_overload_route_L19 + block@3: // test_method_overload_route_L20 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp @@ -29,7 +29,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%13#0: uint64 = ((txnas Applications) tmp%12#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(tmp%13#0) return 1u - block@4: // test_arg_conversion_route_L34 + block@4: // test_arg_conversion_route_L35 let tmp%14#0: uint64 = (txn OnCompletion) let tmp%15#0: bool = (! tmp%14#0) (assert tmp%15#0) // OnCompletion is NoOp @@ -40,7 +40,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%19#0: uint64 = ((txnas Applications) tmp%18#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(tmp%19#0) return 1u - block@5: // test_15plus_args_route_L51 + block@5: // test_15plus_args_route_L52 let tmp%20#0: uint64 = (txn OnCompletion) let tmp%21#0: bool = (! tmp%20#0) (assert tmp%21#0) // OnCompletion is NoOp @@ -51,7 +51,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%25#0: uint64 = ((txnas Applications) tmp%24#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(tmp%25#0) return 1u - block@6: // test_void_route_L79 + block@6: // test_void_route_L80 let tmp%26#0: uint64 = (txn OnCompletion) let tmp%27#0: bool = (! tmp%26#0) (assert tmp%27#0) // OnCompletion is NoOp @@ -62,7 +62,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%31#0: uint64 = ((txnas Applications) tmp%30#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_void(tmp%31#0) return 1u - block@7: // test_ref_types_route_L93 + block@7: // test_ref_types_route_L94 let tmp%32#0: uint64 = (txn OnCompletion) let tmp%33#0: bool = (! tmp%32#0) (assert tmp%33#0) // OnCompletion is NoOp @@ -76,7 +76,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%40#0: uint64 = ((txnas Assets) tmp%39#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(tmp%37#0, tmp%40#0) return 1u - block@10: // bare_routing_L5 + block@10: // bare_routing_L6 let tmp%41#0: uint64 = (txn OnCompletion) let not%tmp%41#0: bool = (! tmp%41#0) (assert not%tmp%41#0) // reject transaction @@ -86,7 +86,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: - block@0: // L6 + block@0: // L7 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -160,7 +160,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: - block@0: // L19 + block@0: // L20 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -231,7 +231,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: - block@0: // L34 + block@0: // L35 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -286,7 +286,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: - block@0: // L51 + block@0: // L52 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]") @@ -319,7 +319,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: - block@0: // L79 + block@0: // L80 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -363,7 +363,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: - block@0: // L93 + block@0: // L94 itxn_begin let tmp%0#0: bytes = (global CurrentApplicationAddress) ((itxn_field ApplicationID) app#0) @@ -391,5 +391,5 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: - block@0: // L5 + block@0: // L6 return 1u \ No newline at end of file diff --git a/test_cases/typed_abi_call/out_O2/Greeter.destructured.ir b/test_cases/typed_abi_call/out_O2/Greeter.destructured.ir index 29b24715ea..cef585f199 100644 --- a/test_cases/typed_abi_call/out_O2/Greeter.destructured.ir +++ b/test_cases/typed_abi_call/out_O2/Greeter.destructured.ir @@ -1,13 +1,13 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program approval: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: - block@0: // L5 + block@0: // L6 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@10 - block@1: // abi_routing_L5 + block@1: // abi_routing_L6 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => fail // reject transaction} - block@2: // test_method_selector_kinds_route_L6 + block@2: // test_method_selector_kinds_route_L7 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (! tmp%2#0) (assert tmp%3#0) // OnCompletion is NoOp @@ -18,7 +18,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%7#0: uint64 = ((txnas Applications) tmp%6#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(tmp%7#0) return 1u - block@3: // test_method_overload_route_L19 + block@3: // test_method_overload_route_L20 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (! tmp%8#0) (assert tmp%9#0) // OnCompletion is NoOp @@ -29,7 +29,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%13#0: uint64 = ((txnas Applications) tmp%12#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(tmp%13#0) return 1u - block@4: // test_arg_conversion_route_L34 + block@4: // test_arg_conversion_route_L35 let tmp%14#0: uint64 = (txn OnCompletion) let tmp%15#0: bool = (! tmp%14#0) (assert tmp%15#0) // OnCompletion is NoOp @@ -40,7 +40,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%19#0: uint64 = ((txnas Applications) tmp%18#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(tmp%19#0) return 1u - block@5: // test_15plus_args_route_L51 + block@5: // test_15plus_args_route_L52 let tmp%20#0: uint64 = (txn OnCompletion) let tmp%21#0: bool = (! tmp%20#0) (assert tmp%21#0) // OnCompletion is NoOp @@ -51,7 +51,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%25#0: uint64 = ((txnas Applications) tmp%24#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(tmp%25#0) return 1u - block@6: // test_void_route_L79 + block@6: // test_void_route_L80 let tmp%26#0: uint64 = (txn OnCompletion) let tmp%27#0: bool = (! tmp%26#0) (assert tmp%27#0) // OnCompletion is NoOp @@ -62,7 +62,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%31#0: uint64 = ((txnas Applications) tmp%30#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_void(tmp%31#0) return 1u - block@7: // test_ref_types_route_L93 + block@7: // test_ref_types_route_L94 let tmp%32#0: uint64 = (txn OnCompletion) let tmp%33#0: bool = (! tmp%32#0) (assert tmp%33#0) // OnCompletion is NoOp @@ -76,7 +76,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%40#0: uint64 = ((txnas Assets) tmp%39#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(tmp%37#0, tmp%40#0) return 1u - block@10: // bare_routing_L5 + block@10: // bare_routing_L6 let tmp%41#0: uint64 = (txn OnCompletion) let not%tmp%41#0: bool = (! tmp%41#0) (assert not%tmp%41#0) // reject transaction @@ -86,7 +86,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return 1u subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: - block@0: // L6 + block@0: // L7 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -160,7 +160,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: - block@0: // L19 + block@0: // L20 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "echo(string)string") @@ -231,7 +231,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: - block@0: // L34 + block@0: // L35 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -286,7 +286,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: - block@0: // L51 + block@0: // L52 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]") @@ -319,7 +319,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: - block@0: // L79 + block@0: // L80 itxn_begin ((itxn_field ApplicationID) app#0) ((itxn_field ApplicationArgs) method "log(string)void") @@ -363,7 +363,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: - block@0: // L93 + block@0: // L94 itxn_begin let tmp%0#0: bytes = (global CurrentApplicationAddress) ((itxn_field ApplicationID) app#0) @@ -391,5 +391,5 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: - block@0: // L5 + block@0: // L6 return 1u \ No newline at end of file diff --git a/test_cases/typed_abi_call/out_unoptimized/Greeter.approval.teal b/test_cases/typed_abi_call/out_unoptimized/Greeter.approval.teal index 8ae58ab57b..c1975d0087 100644 --- a/test_cases/typed_abi_call/out_unoptimized/Greeter.approval.teal +++ b/test_cases/typed_abi_call/out_unoptimized/Greeter.approval.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.typed_abi_call.typed_c2c.Greeter.approval_program: - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txn NumAppArgs bz main_bare_routing@10 @@ -17,7 +17,7 @@ test_cases.typed_abi_call.typed_c2c.Greeter.approval_program: b main_switch_case_default@8 main_test_method_selector_kinds_route@2: - // typed_abi_call/typed_c2c.py:6 + // typed_abi_call/typed_c2c.py:7 // @arc4.abimethod() txn OnCompletion int NoOp @@ -25,19 +25,19 @@ main_test_method_selector_kinds_route@2: assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi txnas Applications - // typed_abi_call/typed_c2c.py:6 + // typed_abi_call/typed_c2c.py:7 // @arc4.abimethod() callsub test_method_selector_kinds int 1 return main_test_method_overload_route@3: - // typed_abi_call/typed_c2c.py:19 + // typed_abi_call/typed_c2c.py:20 // @arc4.abimethod() txn OnCompletion int NoOp @@ -45,19 +45,19 @@ main_test_method_overload_route@3: assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi txnas Applications - // typed_abi_call/typed_c2c.py:19 + // typed_abi_call/typed_c2c.py:20 // @arc4.abimethod() callsub test_method_overload int 1 return main_test_arg_conversion_route@4: - // typed_abi_call/typed_c2c.py:34 + // typed_abi_call/typed_c2c.py:35 // @arc4.abimethod() txn OnCompletion int NoOp @@ -65,19 +65,19 @@ main_test_arg_conversion_route@4: assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi txnas Applications - // typed_abi_call/typed_c2c.py:34 + // typed_abi_call/typed_c2c.py:35 // @arc4.abimethod() callsub test_arg_conversion int 1 return main_test_15plus_args_route@5: - // typed_abi_call/typed_c2c.py:51 + // typed_abi_call/typed_c2c.py:52 // @arc4.abimethod() txn OnCompletion int NoOp @@ -85,19 +85,19 @@ main_test_15plus_args_route@5: assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi txnas Applications - // typed_abi_call/typed_c2c.py:51 + // typed_abi_call/typed_c2c.py:52 // @arc4.abimethod() callsub test_15plus_args int 1 return main_test_void_route@6: - // typed_abi_call/typed_c2c.py:79 + // typed_abi_call/typed_c2c.py:80 // @arc4.abimethod() txn OnCompletion int NoOp @@ -105,19 +105,19 @@ main_test_void_route@6: assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi txnas Applications - // typed_abi_call/typed_c2c.py:79 + // typed_abi_call/typed_c2c.py:80 // @arc4.abimethod() callsub test_void int 1 return main_test_ref_types_route@7: - // typed_abi_call/typed_c2c.py:93 + // typed_abi_call/typed_c2c.py:94 // @arc4.abimethod() txn OnCompletion int NoOp @@ -125,7 +125,7 @@ main_test_ref_types_route@7: assert // OnCompletion is NoOp txn ApplicationID assert // is not creating - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txna ApplicationArgs 1 btoi @@ -133,19 +133,19 @@ main_test_ref_types_route@7: txna ApplicationArgs 2 btoi txnas Assets - // typed_abi_call/typed_c2c.py:93 + // typed_abi_call/typed_c2c.py:94 // @arc4.abimethod() callsub test_ref_types int 1 return main_switch_case_default@8: - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): err // reject transaction main_bare_routing@10: - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txn OnCompletion int 0 @@ -154,7 +154,7 @@ main_bare_routing@10: b main_reject_bare_on_completion@12 main_create@11: - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): txn ApplicationID ! @@ -163,25 +163,25 @@ main_create@11: return main_reject_bare_on_completion@12: - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): err // reject transaction // test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: test_method_selector_kinds: - // typed_abi_call/typed_c2c.py:6-7 + // typed_abi_call/typed_c2c.py:7-8 // @arc4.abimethod() // def test_method_selector_kinds(self, app: Application) -> None: proto 1 0 - // typed_abi_call/typed_c2c.py:8 + // typed_abi_call/typed_c2c.py:9 // result, _txn = arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:7 + // typed_abi_call/typed_c2c.py:8 // def test_method_selector_kinds(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:8 + // typed_abi_call/typed_c2c.py:9 // result, _txn = arc4.abi_call(Logger.echo, arc4.String("test1"), app_id=app) method "echo(string)string" itxn_field ApplicationArgs @@ -200,19 +200,19 @@ test_method_selector_kinds: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:9 + // typed_abi_call/typed_c2c.py:10 // assert result == "echo: test1" byte "\x00\x0becho: test1" == assert - // typed_abi_call/typed_c2c.py:10 + // typed_abi_call/typed_c2c.py:11 // result, _txn = arc4.abi_call(LoggerClient.echo, "test2", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:7 + // typed_abi_call/typed_c2c.py:8 // def test_method_selector_kinds(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:10 + // typed_abi_call/typed_c2c.py:11 // result, _txn = arc4.abi_call(LoggerClient.echo, "test2", app_id=app) method "echo(string)string" itxn_field ApplicationArgs @@ -231,19 +231,19 @@ test_method_selector_kinds: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:11 + // typed_abi_call/typed_c2c.py:12 // assert result == "echo: test2" byte "\x00\x0becho: test2" == assert - // typed_abi_call/typed_c2c.py:12 + // typed_abi_call/typed_c2c.py:13 // result, _txn = arc4.abi_call[arc4.String]("echo", "test3", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:7 + // typed_abi_call/typed_c2c.py:8 // def test_method_selector_kinds(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:12 + // typed_abi_call/typed_c2c.py:13 // result, _txn = arc4.abi_call[arc4.String]("echo", "test3", app_id=app) method "echo(string)string" itxn_field ApplicationArgs @@ -262,19 +262,19 @@ test_method_selector_kinds: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:13 + // typed_abi_call/typed_c2c.py:14 // assert result == "echo: test3" byte "\x00\x0becho: test3" == assert - // typed_abi_call/typed_c2c.py:14 + // typed_abi_call/typed_c2c.py:15 // result, _txn = arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:7 + // typed_abi_call/typed_c2c.py:8 // def test_method_selector_kinds(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:14 + // typed_abi_call/typed_c2c.py:15 // result, _txn = arc4.abi_call[arc4.String]("echo(string)", "test4", app_id=app) method "echo(string)string" itxn_field ApplicationArgs @@ -293,19 +293,19 @@ test_method_selector_kinds: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:15 + // typed_abi_call/typed_c2c.py:16 // assert result == "echo: test4" byte "\x00\x0becho: test4" == assert - // typed_abi_call/typed_c2c.py:16 + // typed_abi_call/typed_c2c.py:17 // result, _txn = arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:7 + // typed_abi_call/typed_c2c.py:8 // def test_method_selector_kinds(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:16 + // typed_abi_call/typed_c2c.py:17 // result, _txn = arc4.abi_call[arc4.String]("echo(string)string", "test5", app_id=app) method "echo(string)string" itxn_field ApplicationArgs @@ -324,7 +324,7 @@ test_method_selector_kinds: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:17 + // typed_abi_call/typed_c2c.py:18 // assert result == "echo: test5" byte "\x00\x0becho: test5" == @@ -334,18 +334,18 @@ test_method_selector_kinds: // test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: test_method_overload: - // typed_abi_call/typed_c2c.py:19-20 + // typed_abi_call/typed_c2c.py:20-21 // @arc4.abimethod() // def test_method_overload(self, app: Application) -> None: proto 1 0 - // typed_abi_call/typed_c2c.py:21 + // typed_abi_call/typed_c2c.py:22 // arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:20 + // typed_abi_call/typed_c2c.py:21 // def test_method_overload(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:21 + // typed_abi_call/typed_c2c.py:22 // arc4.abi_call[arc4.String]("echo(string)string", "typed + ignore", app_id=app) method "echo(string)string" itxn_field ApplicationArgs @@ -361,7 +361,7 @@ test_method_overload: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:22 + // typed_abi_call/typed_c2c.py:23 // assert arc4.String.from_log(op.ITxn.last_log()) == "echo: typed + ignore" itxn LastLog dup @@ -374,14 +374,14 @@ test_method_overload: byte "\x00\x14echo: typed + ignore" == assert - // typed_abi_call/typed_c2c.py:24 + // typed_abi_call/typed_c2c.py:25 // arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:20 + // typed_abi_call/typed_c2c.py:21 // def test_method_overload(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:24 + // typed_abi_call/typed_c2c.py:25 // arc4.abi_call("echo(string)string", "untyped + ignore", app_id=app) method "echo(string)string" itxn_field ApplicationArgs @@ -392,7 +392,7 @@ test_method_overload: int 0 itxn_field Fee itxn_submit - // typed_abi_call/typed_c2c.py:25 + // typed_abi_call/typed_c2c.py:26 // assert arc4.String.from_log(op.ITxn.last_log()) == "echo: untyped + ignore" itxn LastLog dup @@ -405,14 +405,14 @@ test_method_overload: byte "\x00\x16echo: untyped + ignore" == assert - // typed_abi_call/typed_c2c.py:27 + // typed_abi_call/typed_c2c.py:28 // result = arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:20 + // typed_abi_call/typed_c2c.py:21 // def test_method_overload(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:27 + // typed_abi_call/typed_c2c.py:28 // result = arc4.abi_call[arc4.String]("echo(string)string", "tuple", app_id=app) method "echo(string)string" itxn_field ApplicationArgs @@ -433,12 +433,12 @@ test_method_overload: assert // ARC4 prefix is valid itxn LastLog swap - // typed_abi_call/typed_c2c.py:28 + // typed_abi_call/typed_c2c.py:29 // assert result[0] == "echo: tuple" byte "\x00\x0becho: tuple" == assert - // typed_abi_call/typed_c2c.py:29 + // typed_abi_call/typed_c2c.py:30 // assert arc4.String.from_log(result[1].last_log) == "echo: tuple" dup extract 4 0 @@ -450,14 +450,14 @@ test_method_overload: byte "\x00\x0becho: tuple" == assert - // typed_abi_call/typed_c2c.py:31 + // typed_abi_call/typed_c2c.py:32 // txn_result = arc4.abi_call("echo(string)string", "untyped", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:20 + // typed_abi_call/typed_c2c.py:21 // def test_method_overload(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:31 + // typed_abi_call/typed_c2c.py:32 // txn_result = arc4.abi_call("echo(string)string", "untyped", app_id=app) method "echo(string)string" itxn_field ApplicationArgs @@ -469,7 +469,7 @@ test_method_overload: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:32 + // typed_abi_call/typed_c2c.py:33 // assert arc4.String.from_log(txn_result.last_log) == "echo: untyped" dup extract 4 0 @@ -486,18 +486,18 @@ test_method_overload: // test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: test_arg_conversion: - // typed_abi_call/typed_c2c.py:34-35 + // typed_abi_call/typed_c2c.py:35-36 // @arc4.abimethod() // def test_arg_conversion(self, app: Application) -> None: proto 1 0 - // typed_abi_call/typed_c2c.py:36 + // typed_abi_call/typed_c2c.py:37 // txn = arc4.abi_call(Logger.log_string, "converted1", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:35 + // typed_abi_call/typed_c2c.py:36 // def test_arg_conversion(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:36 + // typed_abi_call/typed_c2c.py:37 // txn = arc4.abi_call(Logger.log_string, "converted1", app_id=app) method "log(string)void" itxn_field ApplicationArgs @@ -509,19 +509,19 @@ test_arg_conversion: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:37 + // typed_abi_call/typed_c2c.py:38 // assert txn.last_log == b"converted1" byte "converted1" == assert - // typed_abi_call/typed_c2c.py:39 + // typed_abi_call/typed_c2c.py:40 // txn = arc4.abi_call(Logger.log_uint64, 2, app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:35 + // typed_abi_call/typed_c2c.py:36 // def test_arg_conversion(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:39 + // typed_abi_call/typed_c2c.py:40 // txn = arc4.abi_call(Logger.log_uint64, 2, app_id=app) method "log(uint64)void" itxn_field ApplicationArgs @@ -533,20 +533,20 @@ test_arg_conversion: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:40 + // typed_abi_call/typed_c2c.py:41 // assert txn.last_log == op.itob(2) int 2 itob == assert - // typed_abi_call/typed_c2c.py:42 + // typed_abi_call/typed_c2c.py:43 // txn = arc4.abi_call(Logger.log_uint512, 3, app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:35 + // typed_abi_call/typed_c2c.py:36 // def test_arg_conversion(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:42 + // typed_abi_call/typed_c2c.py:43 // txn = arc4.abi_call(Logger.log_uint512, 3, app_id=app) method "log(uint512)void" itxn_field ApplicationArgs @@ -558,7 +558,7 @@ test_arg_conversion: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:43 + // typed_abi_call/typed_c2c.py:44 // assert txn.last_log == (op.bzero(56) + op.itob(3)) int 56 bzero @@ -567,14 +567,14 @@ test_arg_conversion: concat == assert - // typed_abi_call/typed_c2c.py:45 + // typed_abi_call/typed_c2c.py:46 // txn = arc4.abi_call(Logger.log_bytes, b"4", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:35 + // typed_abi_call/typed_c2c.py:36 // def test_arg_conversion(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:45 + // typed_abi_call/typed_c2c.py:46 // txn = arc4.abi_call(Logger.log_bytes, b"4", app_id=app) method "log(byte[])void" itxn_field ApplicationArgs @@ -586,23 +586,23 @@ test_arg_conversion: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:46 + // typed_abi_call/typed_c2c.py:47 // assert txn.last_log == b"4" byte "4" == assert - // typed_abi_call/typed_c2c.py:48 + // typed_abi_call/typed_c2c.py:49 // txn = arc4.abi_call(Logger.log_bool, True, app_id=app) itxn_begin byte 0x00 int 0 int 1 setbit - // typed_abi_call/typed_c2c.py:35 + // typed_abi_call/typed_c2c.py:36 // def test_arg_conversion(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:48 + // typed_abi_call/typed_c2c.py:49 // txn = arc4.abi_call(Logger.log_bool, True, app_id=app) method "log(bool)void" itxn_field ApplicationArgs @@ -613,7 +613,7 @@ test_arg_conversion: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:49 + // typed_abi_call/typed_c2c.py:50 // assert txn.last_log == b"True" byte "True" == @@ -623,11 +623,11 @@ test_arg_conversion: // test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: test_15plus_args: - // typed_abi_call/typed_c2c.py:51-52 + // typed_abi_call/typed_c2c.py:52-53 // @arc4.abimethod() // def test_15plus_args(self, app: Application) -> None: proto 1 0 - // typed_abi_call/typed_c2c.py:53-76 + // typed_abi_call/typed_c2c.py:54-77 // result, txn = arc4.abi_call( // Logger.return_args_after_14th, // 1, @@ -653,7 +653,7 @@ test_15plus_args: // app_id=app, // ) itxn_begin - // typed_abi_call/typed_c2c.py:73 + // typed_abi_call/typed_c2c.py:74 // arc4.Tuple((arc4.UInt8(0xDE), arc4.UInt8(0xAD), arc4.UInt8(0xBE), arc4.UInt8(0xEF))), byte 0x byte 0xde @@ -664,7 +664,7 @@ test_15plus_args: concat byte 0xef concat - // typed_abi_call/typed_c2c.py:69-74 + // typed_abi_call/typed_c2c.py:70-75 // 15, // 16, // 17, @@ -672,10 +672,10 @@ test_15plus_args: // arc4.Tuple((arc4.UInt8(0xDE), arc4.UInt8(0xAD), arc4.UInt8(0xBE), arc4.UInt8(0xEF))), // 20, byte 0x - // typed_abi_call/typed_c2c.py:69 + // typed_abi_call/typed_c2c.py:70 // 15, byte 0x0f - // typed_abi_call/typed_c2c.py:69-74 + // typed_abi_call/typed_c2c.py:70-75 // 15, // 16, // 17, @@ -683,10 +683,10 @@ test_15plus_args: // arc4.Tuple((arc4.UInt8(0xDE), arc4.UInt8(0xAD), arc4.UInt8(0xBE), arc4.UInt8(0xEF))), // 20, concat - // typed_abi_call/typed_c2c.py:70 + // typed_abi_call/typed_c2c.py:71 // 16, byte 0x10 - // typed_abi_call/typed_c2c.py:69-74 + // typed_abi_call/typed_c2c.py:70-75 // 15, // 16, // 17, @@ -694,10 +694,10 @@ test_15plus_args: // arc4.Tuple((arc4.UInt8(0xDE), arc4.UInt8(0xAD), arc4.UInt8(0xBE), arc4.UInt8(0xEF))), // 20, concat - // typed_abi_call/typed_c2c.py:71 + // typed_abi_call/typed_c2c.py:72 // 17, byte 0x11 - // typed_abi_call/typed_c2c.py:69-74 + // typed_abi_call/typed_c2c.py:70-75 // 15, // 16, // 17, @@ -705,10 +705,10 @@ test_15plus_args: // arc4.Tuple((arc4.UInt8(0xDE), arc4.UInt8(0xAD), arc4.UInt8(0xBE), arc4.UInt8(0xEF))), // 20, concat - // typed_abi_call/typed_c2c.py:72 + // typed_abi_call/typed_c2c.py:73 // 18, byte 0x12 - // typed_abi_call/typed_c2c.py:69-74 + // typed_abi_call/typed_c2c.py:70-75 // 15, // 16, // 17, @@ -718,10 +718,10 @@ test_15plus_args: concat swap concat - // typed_abi_call/typed_c2c.py:74 + // typed_abi_call/typed_c2c.py:75 // 20, byte 0x14 - // typed_abi_call/typed_c2c.py:69-74 + // typed_abi_call/typed_c2c.py:70-75 // 15, // 16, // 17, @@ -729,11 +729,11 @@ test_15plus_args: // arc4.Tuple((arc4.UInt8(0xDE), arc4.UInt8(0xAD), arc4.UInt8(0xBE), arc4.UInt8(0xEF))), // 20, concat - // typed_abi_call/typed_c2c.py:52 + // typed_abi_call/typed_c2c.py:53 // def test_15plus_args(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:53-76 + // typed_abi_call/typed_c2c.py:54-77 // result, txn = arc4.abi_call( // Logger.return_args_after_14th, // 1, @@ -760,64 +760,64 @@ test_15plus_args: // ) method "return_args_after_14th(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint8,uint8,uint8,uint8,(uint8,uint8,uint8,uint8),uint8)byte[]" itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:55 + // typed_abi_call/typed_c2c.py:56 // 1, byte 0x0000000000000001 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:56 + // typed_abi_call/typed_c2c.py:57 // 2, byte 0x0000000000000002 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:57 + // typed_abi_call/typed_c2c.py:58 // 3, byte 0x0000000000000003 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:58 + // typed_abi_call/typed_c2c.py:59 // 4, byte 0x0000000000000004 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:59 + // typed_abi_call/typed_c2c.py:60 // 5, byte 0x0000000000000005 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:60 + // typed_abi_call/typed_c2c.py:61 // 6, byte 0x0000000000000006 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:61 + // typed_abi_call/typed_c2c.py:62 // 7, byte 0x0000000000000007 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:62 + // typed_abi_call/typed_c2c.py:63 // 8, byte 0x0000000000000008 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:63 + // typed_abi_call/typed_c2c.py:64 // 9, byte 0x0000000000000009 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:64 + // typed_abi_call/typed_c2c.py:65 // 10, byte 0x000000000000000a itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:65 + // typed_abi_call/typed_c2c.py:66 // 11, byte 0x000000000000000b itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:66 + // typed_abi_call/typed_c2c.py:67 // 12, byte 0x000000000000000c itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:67 + // typed_abi_call/typed_c2c.py:68 // 13, byte 0x000000000000000d itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:68 + // typed_abi_call/typed_c2c.py:69 // 14, byte 0x000000000000000e itxn_field ApplicationArgs itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:53-76 + // typed_abi_call/typed_c2c.py:54-77 // result, txn = arc4.abi_call( // Logger.return_args_after_14th, // 1, @@ -855,7 +855,7 @@ test_15plus_args: byte 0x151f7c75 == assert // ARC4 prefix is valid - // typed_abi_call/typed_c2c.py:77 + // typed_abi_call/typed_c2c.py:78 // assert result.native == Bytes.from_hex("0F101112DEADBEEF14") extract 2 0 byte 0x0f101112deadbeef14 @@ -866,18 +866,18 @@ test_15plus_args: // test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: test_void: - // typed_abi_call/typed_c2c.py:79-80 + // typed_abi_call/typed_c2c.py:80-81 // @arc4.abimethod() // def test_void(self, app: Application) -> None: proto 1 0 - // typed_abi_call/typed_c2c.py:81 + // typed_abi_call/typed_c2c.py:82 // txn = arc4.abi_call("log(string)void", "World1", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:80 + // typed_abi_call/typed_c2c.py:81 // def test_void(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:81 + // typed_abi_call/typed_c2c.py:82 // txn = arc4.abi_call("log(string)void", "World1", app_id=app) method "log(string)void" itxn_field ApplicationArgs @@ -889,19 +889,19 @@ test_void: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:82 + // typed_abi_call/typed_c2c.py:83 // assert txn.last_log == b"World1" byte "World1" == assert - // typed_abi_call/typed_c2c.py:84 + // typed_abi_call/typed_c2c.py:85 // txn = arc4.abi_call("log(string)", "World2", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:80 + // typed_abi_call/typed_c2c.py:81 // def test_void(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:84 + // typed_abi_call/typed_c2c.py:85 // txn = arc4.abi_call("log(string)", "World2", app_id=app) method "log(string)void" itxn_field ApplicationArgs @@ -913,19 +913,19 @@ test_void: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:85 + // typed_abi_call/typed_c2c.py:86 // assert txn.last_log == b"World2" byte "World2" == assert - // typed_abi_call/typed_c2c.py:87 + // typed_abi_call/typed_c2c.py:88 // txn = arc4.abi_call("log", arc4.String("World3"), app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:80 + // typed_abi_call/typed_c2c.py:81 // def test_void(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:87 + // typed_abi_call/typed_c2c.py:88 // txn = arc4.abi_call("log", arc4.String("World3"), app_id=app) method "log(string)void" itxn_field ApplicationArgs @@ -937,19 +937,19 @@ test_void: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:88 + // typed_abi_call/typed_c2c.py:89 // assert txn.last_log == b"World3" byte "World3" == assert - // typed_abi_call/typed_c2c.py:90 + // typed_abi_call/typed_c2c.py:91 // txn = arc4.abi_call(Logger.log_string, "World4", app_id=app) itxn_begin - // typed_abi_call/typed_c2c.py:80 + // typed_abi_call/typed_c2c.py:81 // def test_void(self, app: Application) -> None: frame_dig -1 itxn_field ApplicationID - // typed_abi_call/typed_c2c.py:90 + // typed_abi_call/typed_c2c.py:91 // txn = arc4.abi_call(Logger.log_string, "World4", app_id=app) method "log(string)void" itxn_field ApplicationArgs @@ -961,7 +961,7 @@ test_void: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:91 + // typed_abi_call/typed_c2c.py:92 // assert txn.last_log == b"World4" byte "World4" == @@ -971,11 +971,11 @@ test_void: // test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: test_ref_types: - // typed_abi_call/typed_c2c.py:93-94 + // typed_abi_call/typed_c2c.py:94-95 // @arc4.abimethod() // def test_ref_types(self, app: Application, asset: Asset) -> None: proto 2 0 - // typed_abi_call/typed_c2c.py:95-101 + // typed_abi_call/typed_c2c.py:96-102 // txn = arc4.abi_call( // Logger.log_asset_account_app, // asset, @@ -984,10 +984,10 @@ test_ref_types: // app_id=app, // ) itxn_begin - // typed_abi_call/typed_c2c.py:98 + // typed_abi_call/typed_c2c.py:99 // Global.current_application_address, global CurrentApplicationAddress - // typed_abi_call/typed_c2c.py:94 + // typed_abi_call/typed_c2c.py:95 // def test_ref_types(self, app: Application, asset: Asset) -> None: frame_dig -2 frame_dig -1 @@ -996,7 +996,7 @@ test_ref_types: itxn_field Assets itxn_field Applications itxn_field Accounts - // typed_abi_call/typed_c2c.py:95-101 + // typed_abi_call/typed_c2c.py:96-102 // txn = arc4.abi_call( // Logger.log_asset_account_app, // asset, @@ -1006,19 +1006,19 @@ test_ref_types: // ) method "log(asset,account,application)void" itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:97 + // typed_abi_call/typed_c2c.py:98 // asset, byte 0x00 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:98 + // typed_abi_call/typed_c2c.py:99 // Global.current_application_address, byte 0x01 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:99 + // typed_abi_call/typed_c2c.py:100 // app, byte 0x01 itxn_field ApplicationArgs - // typed_abi_call/typed_c2c.py:95-101 + // typed_abi_call/typed_c2c.py:96-102 // txn = arc4.abi_call( // Logger.log_asset_account_app, // asset, @@ -1032,7 +1032,7 @@ test_ref_types: itxn_field Fee itxn_submit itxn LastLog - // typed_abi_call/typed_c2c.py:104 + // typed_abi_call/typed_c2c.py:105 // == asset.name + Global.current_application_address.bytes + app.address.bytes frame_dig -1 asset_params_get AssetName @@ -1043,11 +1043,11 @@ test_ref_types: app_params_get AppAddress assert // application exists concat - // typed_abi_call/typed_c2c.py:103-104 + // typed_abi_call/typed_c2c.py:104-105 // txn.last_log // == asset.name + Global.current_application_address.bytes + app.address.bytes == - // typed_abi_call/typed_c2c.py:102-105 + // typed_abi_call/typed_c2c.py:103-106 // assert ( // txn.last_log // == asset.name + Global.current_application_address.bytes + app.address.bytes diff --git a/test_cases/typed_abi_call/out_unoptimized/Greeter.clear.teal b/test_cases/typed_abi_call/out_unoptimized/Greeter.clear.teal index 7e74f0c13c..1abfdf3763 100644 --- a/test_cases/typed_abi_call/out_unoptimized/Greeter.clear.teal +++ b/test_cases/typed_abi_call/out_unoptimized/Greeter.clear.teal @@ -1,7 +1,7 @@ #pragma version 10 test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program: - // typed_abi_call/typed_c2c.py:5 + // typed_abi_call/typed_c2c.py:6 // class Greeter(ARC4Contract): int 1 return diff --git a/test_cases/typed_abi_call/out_unoptimized/Greeter.destructured.ir b/test_cases/typed_abi_call/out_unoptimized/Greeter.destructured.ir index 6c6f4ce690..fd56b94472 100644 --- a/test_cases/typed_abi_call/out_unoptimized/Greeter.destructured.ir +++ b/test_cases/typed_abi_call/out_unoptimized/Greeter.destructured.ir @@ -1,13 +1,13 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program approval: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.approval_program() -> bool: - block@0: // L5 + block@0: // L6 let tmp%0#0: bool = (txn NumAppArgs) goto tmp%0#0 ? block@1 : block@10 - block@1: // abi_routing_L5 + block@1: // abi_routing_L6 let tmp%1#0: bytes = (txna ApplicationArgs 0) switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => block@8} - block@2: // test_method_selector_kinds_route_L6 + block@2: // test_method_selector_kinds_route_L7 let tmp%2#0: uint64 = (txn OnCompletion) let tmp%3#0: bool = (== tmp%2#0 NoOp) (assert tmp%3#0) // OnCompletion is NoOp @@ -18,7 +18,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%7#0: uint64 = ((txnas Applications) tmp%6#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(tmp%7#0) return 1u - block@3: // test_method_overload_route_L19 + block@3: // test_method_overload_route_L20 let tmp%8#0: uint64 = (txn OnCompletion) let tmp%9#0: bool = (== tmp%8#0 NoOp) (assert tmp%9#0) // OnCompletion is NoOp @@ -29,7 +29,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%13#0: uint64 = ((txnas Applications) tmp%12#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(tmp%13#0) return 1u - block@4: // test_arg_conversion_route_L34 + block@4: // test_arg_conversion_route_L35 let tmp%14#0: uint64 = (txn OnCompletion) let tmp%15#0: bool = (== tmp%14#0 NoOp) (assert tmp%15#0) // OnCompletion is NoOp @@ -40,7 +40,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%19#0: uint64 = ((txnas Applications) tmp%18#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(tmp%19#0) return 1u - block@5: // test_15plus_args_route_L51 + block@5: // test_15plus_args_route_L52 let tmp%20#0: uint64 = (txn OnCompletion) let tmp%21#0: bool = (== tmp%20#0 NoOp) (assert tmp%21#0) // OnCompletion is NoOp @@ -51,7 +51,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%25#0: uint64 = ((txnas Applications) tmp%24#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(tmp%25#0) return 1u - block@6: // test_void_route_L79 + block@6: // test_void_route_L80 let tmp%26#0: uint64 = (txn OnCompletion) let tmp%27#0: bool = (== tmp%26#0 NoOp) (assert tmp%27#0) // OnCompletion is NoOp @@ -62,7 +62,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%31#0: uint64 = ((txnas Applications) tmp%30#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_void(tmp%31#0) return 1u - block@7: // test_ref_types_route_L93 + block@7: // test_ref_types_route_L94 let tmp%32#0: uint64 = (txn OnCompletion) let tmp%33#0: bool = (== tmp%32#0 NoOp) (assert tmp%33#0) // OnCompletion is NoOp @@ -76,23 +76,23 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: let tmp%40#0: uint64 = ((txnas Assets) tmp%39#0) test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(tmp%37#0, tmp%40#0) return 1u - block@8: // switch_case_default_L5 + block@8: // switch_case_default_L6 goto block@9 - block@9: // switch_case_next_L5 + block@9: // switch_case_next_L6 fail // reject transaction - block@10: // bare_routing_L5 + block@10: // bare_routing_L6 let tmp%41#0: uint64 = (txn OnCompletion) switch tmp%41#0 {0u => block@11, * => block@12} - block@11: // create_L5 + block@11: // create_L6 let tmp%42#0: bool = (txn ApplicationID) let tmp%43#0: bool = (! tmp%42#0) (assert tmp%43#0) // is creating return 1u - block@12: // reject_bare_on_completion_L5 + block@12: // reject_bare_on_completion_L6 fail // reject transaction subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds(app: uint64) -> void: - block@0: // L6 + block@0: // L7 itxn_begin let inner_txn_params%0%%param_ApplicationID_idx_0#0: uint64 = app#0 ((itxn_field ApplicationID) inner_txn_params%0%%param_ApplicationID_idx_0#0) @@ -101,7 +101,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@1 - block@1: // next_txn_L8 + block@1: // next_txn_L9 itxn_submit let awst_tmp%1#0: bytes = (itxn LastLog) let tmp%0#0: bytes = ((extract 4 0) awst_tmp%1#0) @@ -121,7 +121,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@2 - block@2: // next_txn_L10 + block@2: // next_txn_L11 itxn_submit let awst_tmp%3#0: bytes = (itxn LastLog) let tmp%4#0: bytes = ((extract 4 0) awst_tmp%3#0) @@ -141,7 +141,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@3 - block@3: // next_txn_L12 + block@3: // next_txn_L13 itxn_submit let awst_tmp%5#0: bytes = (itxn LastLog) let tmp%8#0: bytes = ((extract 4 0) awst_tmp%5#0) @@ -161,7 +161,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@4 - block@4: // next_txn_L14 + block@4: // next_txn_L15 itxn_submit let awst_tmp%7#0: bytes = (itxn LastLog) let tmp%12#0: bytes = ((extract 4 0) awst_tmp%7#0) @@ -181,7 +181,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@5 - block@5: // next_txn_L16 + block@5: // next_txn_L17 itxn_submit let awst_tmp%9#0: bytes = (itxn LastLog) let tmp%16#0: bytes = ((extract 4 0) awst_tmp%9#0) @@ -196,7 +196,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_overload(app: uint64) -> void: - block@0: // L19 + block@0: // L20 itxn_begin let inner_txn_params%0%%param_ApplicationID_idx_0#0: uint64 = app#0 ((itxn_field ApplicationID) inner_txn_params%0%%param_ApplicationID_idx_0#0) @@ -205,7 +205,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@1 - block@1: // next_txn_L21 + block@1: // next_txn_L22 itxn_submit let awst_tmp%1#0: bytes = (itxn LastLog) let tmp%1#0: bytes = ((extract 0 4) awst_tmp%1#0) @@ -229,7 +229,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@2 - block@2: // next_txn_L24 + block@2: // next_txn_L25 itxn_submit let awst_tmp%3#0: bytes = (itxn LastLog) let tmp%7#0: bytes = ((extract 4 0) awst_tmp%3#0) @@ -248,7 +248,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@3 - block@3: // next_txn_L27 + block@3: // next_txn_L28 itxn_submit let awst_tmp%5#0: bytes = (itxn LastLog) let tmp%11#0: bytes = ((extract 4 0) awst_tmp%5#0) @@ -278,7 +278,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@4 - block@4: // next_txn_L31 + block@4: // next_txn_L32 itxn_submit let txn_result.LastLog#0: bytes = (itxn LastLog) let awst_tmp%7#0: bytes = txn_result.LastLog#0 @@ -293,7 +293,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_arg_conversion(app: uint64) -> void: - block@0: // L34 + block@0: // L35 itxn_begin let inner_txn_params%0%%param_ApplicationID_idx_0#0: uint64 = app#0 ((itxn_field ApplicationID) inner_txn_params%0%%param_ApplicationID_idx_0#0) @@ -302,7 +302,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@1 - block@1: // next_txn_L36 + block@1: // next_txn_L37 itxn_submit let txn.LastLog#0: bytes = (itxn LastLog) let tmp%0#0: bool = (== txn.LastLog#0 "converted1") @@ -315,7 +315,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@2 - block@2: // next_txn_L39 + block@2: // next_txn_L40 itxn_submit let txn.LastLog#0: bytes = (itxn LastLog) let tmp%1#0: bytes = (itob 2u) @@ -329,7 +329,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@3 - block@3: // next_txn_L42 + block@3: // next_txn_L43 itxn_submit let txn.LastLog#0: bytes = (itxn LastLog) let tmp%3#0: bytes = (bzero 56u) @@ -345,7 +345,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@4 - block@4: // next_txn_L45 + block@4: // next_txn_L46 itxn_submit let txn.LastLog#0: bytes = (itxn LastLog) let tmp%7#0: bool = (== txn.LastLog#0 "4") @@ -360,7 +360,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@5 - block@5: // next_txn_L48 + block@5: // next_txn_L49 itxn_submit let txn.LastLog#0: bytes = (itxn LastLog) let tmp%9#0: bool = (== txn.LastLog#0 "True") @@ -368,7 +368,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_15plus_args(app: uint64) -> void: - block@0: // L51 + block@0: // L52 itxn_begin let encoded_tuple_buffer%0#1: bytes = (concat 0x 0xde) let encoded_tuple_buffer%0#1: bytes = (concat encoded_tuple_buffer%0#1 0xad) @@ -402,7 +402,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@1 - block@1: // next_txn_L53 + block@1: // next_txn_L54 itxn_submit let awst_tmp%1#0: bytes = (itxn LastLog) let tmp%0#0: bytes = ((extract 4 0) awst_tmp%1#0) @@ -418,7 +418,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_void(app: uint64) -> void: - block@0: // L79 + block@0: // L80 itxn_begin let inner_txn_params%0%%param_ApplicationID_idx_0#0: uint64 = app#0 ((itxn_field ApplicationID) inner_txn_params%0%%param_ApplicationID_idx_0#0) @@ -427,7 +427,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@1 - block@1: // next_txn_L81 + block@1: // next_txn_L82 itxn_submit let txn.LastLog#0: bytes = (itxn LastLog) let tmp%0#0: bool = (== txn.LastLog#0 "World1") @@ -440,7 +440,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@2 - block@2: // next_txn_L84 + block@2: // next_txn_L85 itxn_submit let txn.LastLog#0: bytes = (itxn LastLog) let tmp%1#0: bool = (== txn.LastLog#0 "World2") @@ -453,7 +453,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@3 - block@3: // next_txn_L87 + block@3: // next_txn_L88 itxn_submit let txn.LastLog#0: bytes = (itxn LastLog) let tmp%2#0: bool = (== txn.LastLog#0 "World3") @@ -466,7 +466,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@4 - block@4: // next_txn_L90 + block@4: // next_txn_L91 itxn_submit let txn.LastLog#0: bytes = (itxn LastLog) let tmp%3#0: bool = (== txn.LastLog#0 "World4") @@ -474,7 +474,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: return subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_ref_types(app: uint64, asset: uint64) -> void: - block@0: // L93 + block@0: // L94 itxn_begin let tmp%0#0: bytes = (global CurrentApplicationAddress) let inner_txn_params%0%%param_Accounts_idx_0#0: bytes = tmp%0#0 @@ -492,7 +492,7 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: ((itxn_field TypeEnum) appl) ((itxn_field Fee) 0u) goto block@1 - block@1: // next_txn_L95 + block@1: // next_txn_L96 itxn_submit let txn.LastLog#0: bytes = (itxn LastLog) let (value%0#0: bytes, check%0#0: bool) = ((asset_params_get AssetName) asset#0) @@ -508,5 +508,5 @@ contract test_cases.typed_abi_call.typed_c2c.Greeter: program clear-state: subroutine test_cases.typed_abi_call.typed_c2c.Greeter.clear_state_program() -> bool: - block@0: // L5 + block@0: // L6 return 1u \ No newline at end of file diff --git a/test_cases/typed_abi_call/puya.log b/test_cases/typed_abi_call/puya.log index 01e0550272..2e1a89515a 100644 --- a/test_cases/typed_abi_call/puya.log +++ b/test_cases/typed_abi_call/puya.log @@ -1,6 +1,6 @@ debug: PuyaOptions(paths=['typed_abi_call'], output_teal=True, output_arc32=True, output_client=True, output_awst=True, output_ssa_ir=True, output_optimization_ir=True, output_destructured_ir=True, output_memory_ir=True, debug_level=1, optimization_level=1, log_level=, target_avm_version=10, locals_coalescing_strategy=) info: Found python prefix: /.venv -typed_abi_call/typed_c2c.py:21:9 warning: expression result is ignored +typed_abi_call/typed_c2c.py:22:9 warning: expression result is ignored debug: Sealing block@0: // L11 debug: Terminated block@0: // L11 debug: Looking for 'required_budget_with_buffer' in an unsealed block creating an incomplete Phi: block@1: // while_top_L19 @@ -346,88 +346,88 @@ debug: Sealing block@None: // switch_case_next_L6 debug: Sealing block@None: // after_if_else_L6 debug: Sealing block@0: // L6 debug: Terminated block@0: // L6 +debug: Sealing block@0: // L7 +debug: Terminated block@0: // L7 +debug: Sealing block@1: // next_txn_L9 +debug: Terminated block@1: // next_txn_L9 +debug: Sealing block@2: // next_txn_L11 +debug: Terminated block@2: // next_txn_L11 +debug: Sealing block@3: // next_txn_L13 +debug: Terminated block@3: // next_txn_L13 +debug: Sealing block@4: // next_txn_L15 +debug: Terminated block@4: // next_txn_L15 +debug: Sealing block@5: // next_txn_L17 +debug: Terminated block@5: // next_txn_L17 +debug: Sealing block@0: // L20 +debug: Terminated block@0: // L20 +debug: Sealing block@1: // next_txn_L22 +debug: Terminated block@1: // next_txn_L22 +debug: Sealing block@2: // next_txn_L25 +debug: Terminated block@2: // next_txn_L25 +debug: Sealing block@3: // next_txn_L28 +debug: Terminated block@3: // next_txn_L28 +debug: Sealing block@4: // next_txn_L32 +debug: Terminated block@4: // next_txn_L32 +debug: Sealing block@0: // L35 +debug: Terminated block@0: // L35 +debug: Sealing block@1: // next_txn_L37 +debug: Terminated block@1: // next_txn_L37 +debug: Sealing block@2: // next_txn_L40 +debug: Terminated block@2: // next_txn_L40 +debug: Sealing block@3: // next_txn_L43 +debug: Terminated block@3: // next_txn_L43 +debug: Sealing block@4: // next_txn_L46 +debug: Terminated block@4: // next_txn_L46 +debug: Sealing block@5: // next_txn_L49 +debug: Terminated block@5: // next_txn_L49 +debug: Sealing block@0: // L52 +debug: Terminated block@0: // L52 +debug: Sealing block@1: // next_txn_L54 +debug: Terminated block@1: // next_txn_L54 +debug: Sealing block@0: // L80 +debug: Terminated block@0: // L80 +debug: Sealing block@1: // next_txn_L82 +debug: Terminated block@1: // next_txn_L82 +debug: Sealing block@2: // next_txn_L85 +debug: Terminated block@2: // next_txn_L85 +debug: Sealing block@3: // next_txn_L88 +debug: Terminated block@3: // next_txn_L88 +debug: Sealing block@4: // next_txn_L91 +debug: Terminated block@4: // next_txn_L91 +debug: Sealing block@0: // L94 +debug: Terminated block@0: // L94 +debug: Sealing block@1: // next_txn_L96 +debug: Terminated block@1: // next_txn_L96 +debug: Sealing block@0: // L6 +debug: Terminated block@0: // L6 +debug: Sealing block@None: // abi_routing_L6 +debug: Sealing block@None: // bare_routing_L6 +debug: Terminated block@1: // abi_routing_L6 +debug: Sealing block@None: // switch_case_default_L6 +debug: Sealing block@None: // test_method_selector_kinds_route_L7 +debug: Sealing block@None: // test_method_overload_route_L20 +debug: Sealing block@None: // test_arg_conversion_route_L35 +debug: Sealing block@None: // test_15plus_args_route_L52 +debug: Sealing block@None: // test_void_route_L80 +debug: Sealing block@None: // test_ref_types_route_L94 +debug: Terminated block@2: // test_method_selector_kinds_route_L7 +debug: Terminated block@3: // test_method_overload_route_L20 +debug: Terminated block@4: // test_arg_conversion_route_L35 +debug: Terminated block@5: // test_15plus_args_route_L52 +debug: Terminated block@6: // test_void_route_L80 +debug: Terminated block@7: // test_ref_types_route_L94 +debug: Terminated block@8: // switch_case_default_L6 +debug: Sealing block@9: // switch_case_next_L6 +debug: Terminated block@9: // switch_case_next_L6 +debug: Terminated block@10: // bare_routing_L6 +debug: Sealing block@None: // reject_bare_on_completion_L6 +debug: Sealing block@None: // create_L6 +debug: Terminated block@11: // create_L6 +debug: Terminated block@12: // reject_bare_on_completion_L6 +debug: Sealing block@None: // switch_case_next_L6 +debug: Sealing block@None: // after_if_else_L6 debug: Sealing block@0: // L6 debug: Terminated block@0: // L6 -debug: Sealing block@1: // next_txn_L8 -debug: Terminated block@1: // next_txn_L8 -debug: Sealing block@2: // next_txn_L10 -debug: Terminated block@2: // next_txn_L10 -debug: Sealing block@3: // next_txn_L12 -debug: Terminated block@3: // next_txn_L12 -debug: Sealing block@4: // next_txn_L14 -debug: Terminated block@4: // next_txn_L14 -debug: Sealing block@5: // next_txn_L16 -debug: Terminated block@5: // next_txn_L16 -debug: Sealing block@0: // L19 -debug: Terminated block@0: // L19 -debug: Sealing block@1: // next_txn_L21 -debug: Terminated block@1: // next_txn_L21 -debug: Sealing block@2: // next_txn_L24 -debug: Terminated block@2: // next_txn_L24 -debug: Sealing block@3: // next_txn_L27 -debug: Terminated block@3: // next_txn_L27 -debug: Sealing block@4: // next_txn_L31 -debug: Terminated block@4: // next_txn_L31 -debug: Sealing block@0: // L34 -debug: Terminated block@0: // L34 -debug: Sealing block@1: // next_txn_L36 -debug: Terminated block@1: // next_txn_L36 -debug: Sealing block@2: // next_txn_L39 -debug: Terminated block@2: // next_txn_L39 -debug: Sealing block@3: // next_txn_L42 -debug: Terminated block@3: // next_txn_L42 -debug: Sealing block@4: // next_txn_L45 -debug: Terminated block@4: // next_txn_L45 -debug: Sealing block@5: // next_txn_L48 -debug: Terminated block@5: // next_txn_L48 -debug: Sealing block@0: // L51 -debug: Terminated block@0: // L51 -debug: Sealing block@1: // next_txn_L53 -debug: Terminated block@1: // next_txn_L53 -debug: Sealing block@0: // L79 -debug: Terminated block@0: // L79 -debug: Sealing block@1: // next_txn_L81 -debug: Terminated block@1: // next_txn_L81 -debug: Sealing block@2: // next_txn_L84 -debug: Terminated block@2: // next_txn_L84 -debug: Sealing block@3: // next_txn_L87 -debug: Terminated block@3: // next_txn_L87 -debug: Sealing block@4: // next_txn_L90 -debug: Terminated block@4: // next_txn_L90 -debug: Sealing block@0: // L93 -debug: Terminated block@0: // L93 -debug: Sealing block@1: // next_txn_L95 -debug: Terminated block@1: // next_txn_L95 -debug: Sealing block@0: // L5 -debug: Terminated block@0: // L5 -debug: Sealing block@None: // abi_routing_L5 -debug: Sealing block@None: // bare_routing_L5 -debug: Terminated block@1: // abi_routing_L5 -debug: Sealing block@None: // switch_case_default_L5 -debug: Sealing block@None: // test_method_selector_kinds_route_L6 -debug: Sealing block@None: // test_method_overload_route_L19 -debug: Sealing block@None: // test_arg_conversion_route_L34 -debug: Sealing block@None: // test_15plus_args_route_L51 -debug: Sealing block@None: // test_void_route_L79 -debug: Sealing block@None: // test_ref_types_route_L93 -debug: Terminated block@2: // test_method_selector_kinds_route_L6 -debug: Terminated block@3: // test_method_overload_route_L19 -debug: Terminated block@4: // test_arg_conversion_route_L34 -debug: Terminated block@5: // test_15plus_args_route_L51 -debug: Terminated block@6: // test_void_route_L79 -debug: Terminated block@7: // test_ref_types_route_L93 -debug: Terminated block@8: // switch_case_default_L5 -debug: Sealing block@9: // switch_case_next_L5 -debug: Terminated block@9: // switch_case_next_L5 -debug: Terminated block@10: // bare_routing_L5 -debug: Sealing block@None: // reject_bare_on_completion_L5 -debug: Sealing block@None: // create_L5 -debug: Terminated block@11: // create_L5 -debug: Terminated block@12: // reject_bare_on_completion_L5 -debug: Sealing block@None: // switch_case_next_L5 -debug: Sealing block@None: // after_if_else_L5 -debug: Sealing block@0: // L5 -debug: Terminated block@0: // L5 debug: Output IR to typed_abi_call/out/Logger.ssa.ir info: Optimizing test_cases.typed_abi_call.logger.Logger at level 1 debug: Begin optimization pass 1/100 @@ -881,22 +881,22 @@ debug: Optimizer: Remove Unused Variables debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops debug: inlining the default target of a switch/goto nth -debug: adding block@1: // abi_routing_L5 as a predecessor of block@9: // switch_case_next_L5 due to inlining of block@8: // switch_case_default_L5 -debug: simplified terminator of block@1: // abi_routing_L5 from switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => block@8} to switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => block@9} +debug: adding block@1: // abi_routing_L6 as a predecessor of block@9: // switch_case_next_L6 due to inlining of block@8: // switch_case_default_L6 +debug: simplified terminator of block@1: // abi_routing_L6 from switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => block@8} to switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => block@9} debug: simplifying a switch with constants into goto nth -debug: simplified terminator of block@10: // bare_routing_L5 from switch tmp%41#0 {0u => block@11, * => block@12} to goto_nth [block@11][tmp%41#0] else goto block@12 +debug: simplified terminator of block@10: // bare_routing_L6 from switch tmp%41#0 {0u => block@11, * => block@12} to goto_nth [block@11][tmp%41#0] else goto block@12 debug: inlining the default target of a switch/goto nth -debug: simplified terminator of block@1: // abi_routing_L5 from switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => block@9} to switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => fail // reject transaction} +debug: simplified terminator of block@1: // abi_routing_L6 from switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => block@9} to switch tmp%1#0 {method "test_method_selector_kinds(application)void" => block@2, method "test_method_overload(application)void" => block@3, method "test_arg_conversion(application)void" => block@4, method "test_15plus_args(application)void" => block@5, method "test_void(application)void" => block@6, method "test_ref_types(application,asset)void" => block@7, * => fail // reject transaction} debug: simplifying a goto nth with two targets into a conditional branch -debug: simplified terminator of block@10: // bare_routing_L5 from goto_nth [block@11][tmp%41#0] else goto block@12 to goto tmp%41#0 ? block@12 : block@11 +debug: simplified terminator of block@10: // bare_routing_L6 from goto_nth [block@11][tmp%41#0] else goto block@12 to goto tmp%41#0 ? block@12 : block@11 debug: inlining condition branch to err block into an assert false -debug: simplified terminator of block@10: // bare_routing_L5 from goto tmp%41#0 ? block@12 : block@11 to goto block@11 +debug: simplified terminator of block@10: // bare_routing_L6 from goto tmp%41#0 ? block@12 : block@11 to goto block@11 debug: Optimizer: Remove Linear Jump -debug: Merged linear block@9: // switch_case_next_L5 into block@8: // switch_case_default_L5 -debug: Merged linear block@11: // create_L5 into block@10: // bare_routing_L5 +debug: Merged linear block@9: // switch_case_next_L6 into block@8: // switch_case_default_L6 +debug: Merged linear block@11: // create_L6 into block@10: // bare_routing_L6 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks -debug: Removing unreachable blocks: block@8: // switch_case_default_L5, block@12: // reject_bare_on_completion_L5 +debug: Removing unreachable blocks: block@8: // switch_case_default_L6, block@12: // reject_bare_on_completion_L6 debug: Optimizer: Repeated Expression Elimination debug: Optimizing subroutine test_cases.typed_abi_call.typed_c2c.Greeter.test_method_selector_kinds debug: Splitting parallel copies prior to optimization @@ -1529,15 +1529,15 @@ debug: Removing unused variable _txn.NumClearStateProgramPages#4 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump -debug: Replaced predecessor block@1: // next_txn_L8 with block@0: // L6 in block@2: // next_txn_L10 -debug: Merged linear block@1: // next_txn_L8 into block@0: // L6 -debug: Replaced predecessor block@2: // next_txn_L10 with block@0: // L6 in block@3: // next_txn_L12 -debug: Merged linear block@2: // next_txn_L10 into block@0: // L6 -debug: Replaced predecessor block@3: // next_txn_L12 with block@0: // L6 in block@4: // next_txn_L14 -debug: Merged linear block@3: // next_txn_L12 into block@0: // L6 -debug: Replaced predecessor block@4: // next_txn_L14 with block@0: // L6 in block@5: // next_txn_L16 -debug: Merged linear block@4: // next_txn_L14 into block@0: // L6 -debug: Merged linear block@5: // next_txn_L16 into block@0: // L6 +debug: Replaced predecessor block@1: // next_txn_L9 with block@0: // L7 in block@2: // next_txn_L11 +debug: Merged linear block@1: // next_txn_L9 into block@0: // L7 +debug: Replaced predecessor block@2: // next_txn_L11 with block@0: // L7 in block@3: // next_txn_L13 +debug: Merged linear block@2: // next_txn_L11 into block@0: // L7 +debug: Replaced predecessor block@3: // next_txn_L13 with block@0: // L7 in block@4: // next_txn_L15 +debug: Merged linear block@3: // next_txn_L13 into block@0: // L7 +debug: Replaced predecessor block@4: // next_txn_L15 with block@0: // L7 in block@5: // next_txn_L17 +debug: Merged linear block@4: // next_txn_L15 into block@0: // L7 +debug: Merged linear block@5: // next_txn_L17 into block@0: // L7 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination @@ -1930,13 +1930,13 @@ debug: Removing unused variable txn_result.NumClearStateProgramPages#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump -debug: Replaced predecessor block@1: // next_txn_L21 with block@0: // L19 in block@2: // next_txn_L24 -debug: Merged linear block@1: // next_txn_L21 into block@0: // L19 -debug: Replaced predecessor block@2: // next_txn_L24 with block@0: // L19 in block@3: // next_txn_L27 -debug: Merged linear block@2: // next_txn_L24 into block@0: // L19 -debug: Replaced predecessor block@3: // next_txn_L27 with block@0: // L19 in block@4: // next_txn_L31 -debug: Merged linear block@3: // next_txn_L27 into block@0: // L19 -debug: Merged linear block@4: // next_txn_L31 into block@0: // L19 +debug: Replaced predecessor block@1: // next_txn_L22 with block@0: // L20 in block@2: // next_txn_L25 +debug: Merged linear block@1: // next_txn_L22 into block@0: // L20 +debug: Replaced predecessor block@2: // next_txn_L25 with block@0: // L20 in block@3: // next_txn_L28 +debug: Merged linear block@2: // next_txn_L25 into block@0: // L20 +debug: Replaced predecessor block@3: // next_txn_L28 with block@0: // L20 in block@4: // next_txn_L32 +debug: Merged linear block@3: // next_txn_L28 into block@0: // L20 +debug: Merged linear block@4: // next_txn_L32 into block@0: // L20 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination @@ -2546,15 +2546,15 @@ debug: Removing unused variable txn.NumClearStateProgramPages#4 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump -debug: Replaced predecessor block@1: // next_txn_L36 with block@0: // L34 in block@2: // next_txn_L39 -debug: Merged linear block@1: // next_txn_L36 into block@0: // L34 -debug: Replaced predecessor block@2: // next_txn_L39 with block@0: // L34 in block@3: // next_txn_L42 -debug: Merged linear block@2: // next_txn_L39 into block@0: // L34 -debug: Replaced predecessor block@3: // next_txn_L42 with block@0: // L34 in block@4: // next_txn_L45 -debug: Merged linear block@3: // next_txn_L42 into block@0: // L34 -debug: Replaced predecessor block@4: // next_txn_L45 with block@0: // L34 in block@5: // next_txn_L48 -debug: Merged linear block@4: // next_txn_L45 into block@0: // L34 -debug: Merged linear block@5: // next_txn_L48 into block@0: // L34 +debug: Replaced predecessor block@1: // next_txn_L37 with block@0: // L35 in block@2: // next_txn_L40 +debug: Merged linear block@1: // next_txn_L37 into block@0: // L35 +debug: Replaced predecessor block@2: // next_txn_L40 with block@0: // L35 in block@3: // next_txn_L43 +debug: Merged linear block@2: // next_txn_L40 into block@0: // L35 +debug: Replaced predecessor block@3: // next_txn_L43 with block@0: // L35 in block@4: // next_txn_L46 +debug: Merged linear block@3: // next_txn_L43 into block@0: // L35 +debug: Replaced predecessor block@4: // next_txn_L46 with block@0: // L35 in block@5: // next_txn_L49 +debug: Merged linear block@4: // next_txn_L46 into block@0: // L35 +debug: Merged linear block@5: // next_txn_L49 into block@0: // L35 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination @@ -2714,7 +2714,7 @@ debug: Removing unused variable txn.NumClearStateProgramPages#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump -debug: Merged linear block@1: // next_txn_L53 into block@0: // L51 +debug: Merged linear block@1: // next_txn_L54 into block@0: // L52 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination @@ -3201,13 +3201,13 @@ debug: Removing unused variable txn.NumClearStateProgramPages#3 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump -debug: Replaced predecessor block@1: // next_txn_L81 with block@0: // L79 in block@2: // next_txn_L84 -debug: Merged linear block@1: // next_txn_L81 into block@0: // L79 -debug: Replaced predecessor block@2: // next_txn_L84 with block@0: // L79 in block@3: // next_txn_L87 -debug: Merged linear block@2: // next_txn_L84 into block@0: // L79 -debug: Replaced predecessor block@3: // next_txn_L87 with block@0: // L79 in block@4: // next_txn_L90 -debug: Merged linear block@3: // next_txn_L87 into block@0: // L79 -debug: Merged linear block@4: // next_txn_L90 into block@0: // L79 +debug: Replaced predecessor block@1: // next_txn_L82 with block@0: // L80 in block@2: // next_txn_L85 +debug: Merged linear block@1: // next_txn_L82 into block@0: // L80 +debug: Replaced predecessor block@2: // next_txn_L85 with block@0: // L80 in block@3: // next_txn_L88 +debug: Merged linear block@2: // next_txn_L85 into block@0: // L80 +debug: Replaced predecessor block@3: // next_txn_L88 with block@0: // L80 in block@4: // next_txn_L91 +debug: Merged linear block@3: // next_txn_L88 into block@0: // L80 +debug: Merged linear block@4: // next_txn_L91 into block@0: // L80 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination @@ -3346,7 +3346,7 @@ debug: Removing unused variable txn.NumClearStateProgramPages#0 debug: Optimizer: Inner Txn Field Replacer debug: Optimizer: Simplify Control Ops debug: Optimizer: Remove Linear Jump -debug: Merged linear block@1: // next_txn_L95 into block@0: // L93 +debug: Merged linear block@1: // next_txn_L96 into block@0: // L94 debug: Optimizer: Remove Empty Blocks debug: Optimizer: Remove Unreachable Blocks debug: Optimizer: Repeated Expression Elimination diff --git a/test_cases/typed_abi_call/typed_c2c.py b/test_cases/typed_abi_call/typed_c2c.py index 3680735c3e..21f7641933 100644 --- a/test_cases/typed_abi_call/typed_c2c.py +++ b/test_cases/typed_abi_call/typed_c2c.py @@ -1,4 +1,5 @@ from algopy import Application, ARC4Contract, Asset, Bytes, Global, arc4, op + from test_cases.typed_abi_call.logger import Logger, LoggerClient diff --git a/tests/test_expected_output/data.py b/tests/test_expected_output/data.py index 51b9523477..d98ad061d0 100644 --- a/tests/test_expected_output/data.py +++ b/tests/test_expected_output/data.py @@ -319,23 +319,6 @@ def is_valid(char: str) -> bool: return python_name -def exempted(path: Path, case: TestCase, record: Log) -> bool: - output_type = record.level - if output_type is None: - return True - if record.location is None: - return True - if record.location.file != str(path): - return True - case_file = next(f for f in case.files if f.src_path == path) - line_output = case_file.expected_output.get(record.location.line, []) - received = TestCaseOutput(level=output_type, output=record.message) - exempted = received in line_output - if exempted: - return exempted - return False - - def map_error_tuple_to_dict(errors: set[tuple[int, TestCaseOutput]]) -> OutputMapping: result: OutputMapping = OutputMapping() for line, error in errors: @@ -372,7 +355,7 @@ def process_test_case( ), ) for record in path_records - if record.line is not None + if record.line is not None and record.level in LEVEL_TO_PREFIX } file_missing_output = expected_output - seen_output file_unexpected_output = seen_output - expected_output diff --git a/tests/test_expected_output/expected_errors.test b/tests/test_expected_output/expected_errors.test index 99321093f1..f628b3b7f4 100644 --- a/tests/test_expected_output/expected_errors.test +++ b/tests/test_expected_output/expected_errors.test @@ -268,7 +268,7 @@ class Base(ARC4Contract): class Derived(Base): def __init__(self) -> None: - self.foo2 = 2 * super().foo ## E: super() is only supported for method calls + self.foo2 = 2 * super().foo ## E: unsupported reference to non-function member 'foo' ## case: redefinition @@ -325,4 +325,4 @@ class Con(Contract): def clear_state_program(self) -> bool: assert self.x ## E: None does not support boolean evaluation - return True + return True \ No newline at end of file