diff --git a/projects/python-examples/.algokit.toml b/projects/python-examples/.algokit.toml index 1ed2697..a98ff6b 100644 --- a/projects/python-examples/.algokit.toml +++ b/projects/python-examples/.algokit.toml @@ -46,5 +46,5 @@ audit-teal = { commands = [ # Commands intented for CI only, prefixed with `ci-` by convention ci-teal-diff = { commands = [ 'git add -N ./smart_contracts/artifacts', - 'git diff --exit-code --minimal ./smart_contracts/artifacts', + 'git diff --exit-code --minimal "./contracts/artifacts/:(exclude)*.puya.map"', ], description = 'Check TEAL files for differences' } diff --git a/projects/python-examples/.algokit/static-analysis/snapshots/Arc4StaticArray.approval.json b/projects/python-examples/.algokit/static-analysis/snapshots/Arc4StaticArray.approval.json index 09a14f3..44a2461 100644 --- a/projects/python-examples/.algokit/static-analysis/snapshots/Arc4StaticArray.approval.json +++ b/projects/python-examples/.algokit/static-analysis/snapshots/Arc4StaticArray.approval.json @@ -20,7 +20,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -31,7 +31,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -45,7 +45,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -66,23 +66,23 @@ [ "46: arc4_static_array:", "50: proto 0 0", - "53: intc_2", + "53: intc_1", "54: dup" ], [ "56: arc4_static_array_for_header@1:", "59: frame_dig 1", - "60: intc_1", + "60: intc_2", "61: <", "62: bz arc4_static_array_after_for@4" ], [ - "88: arc4_static_array_after_for@4:", - "91: frame_dig 0", - "92: pushint 394", - "93: ==", - "94: assert", - "95: retsub" + "84: arc4_static_array_after_for@4:", + "87: frame_dig 0", + "88: pushint 394", + "89: ==", + "90: assert", + "91: retsub" ], [ "30: intc_0", @@ -99,7 +99,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -110,7 +110,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -135,7 +135,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -146,7 +146,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -160,7 +160,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -181,23 +181,23 @@ [ "46: arc4_static_array:", "50: proto 0 0", - "53: intc_2", + "53: intc_1", "54: dup" ], [ "56: arc4_static_array_for_header@1:", "59: frame_dig 1", - "60: intc_1", + "60: intc_2", "61: <", "62: bz arc4_static_array_after_for@4" ], [ - "88: arc4_static_array_after_for@4:", - "91: frame_dig 0", - "92: pushint 394", - "93: ==", - "94: assert", - "95: retsub" + "84: arc4_static_array_after_for@4:", + "87: frame_dig 0", + "88: pushint 394", + "89: ==", + "90: assert", + "91: retsub" ], [ "30: intc_0", @@ -214,7 +214,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -225,7 +225,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -250,7 +250,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -261,7 +261,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -275,7 +275,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -286,7 +286,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -311,7 +311,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -322,7 +322,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -336,7 +336,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -347,7 +347,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -372,7 +372,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -383,7 +383,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -397,7 +397,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -418,23 +418,23 @@ [ "46: arc4_static_array:", "50: proto 0 0", - "53: intc_2", + "53: intc_1", "54: dup" ], [ "56: arc4_static_array_for_header@1:", "59: frame_dig 1", - "60: intc_1", + "60: intc_2", "61: <", "62: bz arc4_static_array_after_for@4" ], [ - "88: arc4_static_array_after_for@4:", - "91: frame_dig 0", - "92: pushint 394", - "93: ==", - "94: assert", - "95: retsub" + "84: arc4_static_array_after_for@4:", + "87: frame_dig 0", + "88: pushint 394", + "89: ==", + "90: assert", + "91: retsub" ], [ "30: intc_0", @@ -451,7 +451,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -462,7 +462,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -487,7 +487,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -498,7 +498,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -512,7 +512,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -533,23 +533,23 @@ [ "46: arc4_static_array:", "50: proto 0 0", - "53: intc_2", + "53: intc_1", "54: dup" ], [ "56: arc4_static_array_for_header@1:", "59: frame_dig 1", - "60: intc_1", + "60: intc_2", "61: <", "62: bz arc4_static_array_after_for@4" ], [ - "88: arc4_static_array_after_for@4:", - "91: frame_dig 0", - "92: pushint 394", - "93: ==", - "94: assert", - "95: retsub" + "84: arc4_static_array_after_for@4:", + "87: frame_dig 0", + "88: pushint 394", + "89: ==", + "90: assert", + "91: retsub" ], [ "30: intc_0", @@ -566,7 +566,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -577,7 +577,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -602,7 +602,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -613,7 +613,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -627,7 +627,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -648,23 +648,23 @@ [ "46: arc4_static_array:", "50: proto 0 0", - "53: intc_2", + "53: intc_1", "54: dup" ], [ "56: arc4_static_array_for_header@1:", "59: frame_dig 1", - "60: intc_1", + "60: intc_2", "61: <", "62: bz arc4_static_array_after_for@4" ], [ - "88: arc4_static_array_after_for@4:", - "91: frame_dig 0", - "92: pushint 394", - "93: ==", - "94: assert", - "95: retsub" + "84: arc4_static_array_after_for@4:", + "87: frame_dig 0", + "88: pushint 394", + "89: ==", + "90: assert", + "91: retsub" ], [ "30: intc_0", @@ -681,7 +681,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -708,7 +708,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -719,7 +719,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -754,7 +754,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -765,7 +765,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] @@ -779,7 +779,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -800,23 +800,23 @@ [ "46: arc4_static_array:", "50: proto 0 0", - "53: intc_2", + "53: intc_1", "54: dup" ], [ "56: arc4_static_array_for_header@1:", "59: frame_dig 1", - "60: intc_1", + "60: intc_2", "61: <", "62: bz arc4_static_array_after_for@4" ], [ - "88: arc4_static_array_after_for@4:", - "91: frame_dig 0", - "92: pushint 394", - "93: ==", - "94: assert", - "95: retsub" + "84: arc4_static_array_after_for@4:", + "87: frame_dig 0", + "88: pushint 394", + "89: ==", + "90: assert", + "91: retsub" ], [ "30: intc_0", @@ -833,7 +833,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -860,7 +860,7 @@ ], [ "5: main:", - "6: intcblock 1 4 0", + "6: intcblock 1 0 4", "9: txn NumAppArgs", "10: bz main_bare_routing@6" ], @@ -871,7 +871,7 @@ ], [ "15: main_after_if_else@10:", - "18: intc_2", + "18: intc_1", "19: return" ] ] diff --git a/projects/python-examples/.algokit/static-analysis/snapshots/Arc4Tuple.approval.json b/projects/python-examples/.algokit/static-analysis/snapshots/Arc4Tuple.approval.json index bbad28e..c400cd7 100644 --- a/projects/python-examples/.algokit/static-analysis/snapshots/Arc4Tuple.approval.json +++ b/projects/python-examples/.algokit/static-analysis/snapshots/Arc4Tuple.approval.json @@ -107,15 +107,16 @@ "124: pushbytes \"alice@something.com\"", "125: ==", "126: assert", - "129: dup", - "130: pushbytes 0x00000000211d1ae3", - "131: b==", - "132: assert", - "135: bytec_0", - "136: frame_dig -1", - "137: app_global_put", - "140: btoi", - "141: retsub" + "129: pushbytes 0x00000000211d1ae3", + "130: b==", + "131: assert", + "134: bytec_0", + "135: frame_dig -1", + "136: app_global_put", + "139: frame_dig -1", + "142: pushint 4", + "145: extract_uint64", + "146: retsub" ], [ "67: itob", @@ -162,13 +163,12 @@ "45: callsub return_contact" ], [ - "145: return_contact:", - "149: proto 0 1", - "152: intc_0", - "153: bytec_0", - "154: app_global_get_ex", - "155: assert", - "156: retsub" + "150: return_contact:", + "153: intc_0", + "154: bytec_0", + "155: app_global_get_ex", + "156: assert", + "157: retsub" ], [ "46: bytec_1", @@ -318,15 +318,16 @@ "124: pushbytes \"alice@something.com\"", "125: ==", "126: assert", - "129: dup", - "130: pushbytes 0x00000000211d1ae3", - "131: b==", - "132: assert", - "135: bytec_0", - "136: frame_dig -1", - "137: app_global_put", - "140: btoi", - "141: retsub" + "129: pushbytes 0x00000000211d1ae3", + "130: b==", + "131: assert", + "134: bytec_0", + "135: frame_dig -1", + "136: app_global_put", + "139: frame_dig -1", + "142: pushint 4", + "145: extract_uint64", + "146: retsub" ], [ "67: itob", @@ -373,13 +374,12 @@ "45: callsub return_contact" ], [ - "145: return_contact:", - "149: proto 0 1", - "152: intc_0", - "153: bytec_0", - "154: app_global_get_ex", - "155: assert", - "156: retsub" + "150: return_contact:", + "153: intc_0", + "154: bytec_0", + "155: app_global_get_ex", + "156: assert", + "157: retsub" ], [ "46: bytec_1", @@ -549,15 +549,16 @@ "124: pushbytes \"alice@something.com\"", "125: ==", "126: assert", - "129: dup", - "130: pushbytes 0x00000000211d1ae3", - "131: b==", - "132: assert", - "135: bytec_0", - "136: frame_dig -1", - "137: app_global_put", - "140: btoi", - "141: retsub" + "129: pushbytes 0x00000000211d1ae3", + "130: b==", + "131: assert", + "134: bytec_0", + "135: frame_dig -1", + "136: app_global_put", + "139: frame_dig -1", + "142: pushint 4", + "145: extract_uint64", + "146: retsub" ], [ "67: itob", @@ -604,13 +605,12 @@ "45: callsub return_contact" ], [ - "145: return_contact:", - "149: proto 0 1", - "152: intc_0", - "153: bytec_0", - "154: app_global_get_ex", - "155: assert", - "156: retsub" + "150: return_contact:", + "153: intc_0", + "154: bytec_0", + "155: app_global_get_ex", + "156: assert", + "157: retsub" ], [ "46: bytec_1", @@ -760,15 +760,16 @@ "124: pushbytes \"alice@something.com\"", "125: ==", "126: assert", - "129: dup", - "130: pushbytes 0x00000000211d1ae3", - "131: b==", - "132: assert", - "135: bytec_0", - "136: frame_dig -1", - "137: app_global_put", - "140: btoi", - "141: retsub" + "129: pushbytes 0x00000000211d1ae3", + "130: b==", + "131: assert", + "134: bytec_0", + "135: frame_dig -1", + "136: app_global_put", + "139: frame_dig -1", + "142: pushint 4", + "145: extract_uint64", + "146: retsub" ], [ "67: itob", @@ -815,13 +816,12 @@ "45: callsub return_contact" ], [ - "145: return_contact:", - "149: proto 0 1", - "152: intc_0", - "153: bytec_0", - "154: app_global_get_ex", - "155: assert", - "156: retsub" + "150: return_contact:", + "153: intc_0", + "154: bytec_0", + "155: app_global_get_ex", + "156: assert", + "157: retsub" ], [ "46: bytec_1", @@ -981,15 +981,16 @@ "124: pushbytes \"alice@something.com\"", "125: ==", "126: assert", - "129: dup", - "130: pushbytes 0x00000000211d1ae3", - "131: b==", - "132: assert", - "135: bytec_0", - "136: frame_dig -1", - "137: app_global_put", - "140: btoi", - "141: retsub" + "129: pushbytes 0x00000000211d1ae3", + "130: b==", + "131: assert", + "134: bytec_0", + "135: frame_dig -1", + "136: app_global_put", + "139: frame_dig -1", + "142: pushint 4", + "145: extract_uint64", + "146: retsub" ], [ "67: itob", @@ -1041,13 +1042,12 @@ "45: callsub return_contact" ], [ - "145: return_contact:", - "149: proto 0 1", - "152: intc_0", - "153: bytec_0", - "154: app_global_get_ex", - "155: assert", - "156: retsub" + "150: return_contact:", + "153: intc_0", + "154: bytec_0", + "155: app_global_get_ex", + "156: assert", + "157: retsub" ], [ "46: bytec_1", @@ -1229,15 +1229,16 @@ "124: pushbytes \"alice@something.com\"", "125: ==", "126: assert", - "129: dup", - "130: pushbytes 0x00000000211d1ae3", - "131: b==", - "132: assert", - "135: bytec_0", - "136: frame_dig -1", - "137: app_global_put", - "140: btoi", - "141: retsub" + "129: pushbytes 0x00000000211d1ae3", + "130: b==", + "131: assert", + "134: bytec_0", + "135: frame_dig -1", + "136: app_global_put", + "139: frame_dig -1", + "142: pushint 4", + "145: extract_uint64", + "146: retsub" ], [ "67: itob", @@ -1284,13 +1285,12 @@ "45: callsub return_contact" ], [ - "145: return_contact:", - "149: proto 0 1", - "152: intc_0", - "153: bytec_0", - "154: app_global_get_ex", - "155: assert", - "156: retsub" + "150: return_contact:", + "153: intc_0", + "154: bytec_0", + "155: app_global_get_ex", + "156: assert", + "157: retsub" ], [ "46: bytec_1", @@ -1493,15 +1493,16 @@ "124: pushbytes \"alice@something.com\"", "125: ==", "126: assert", - "129: dup", - "130: pushbytes 0x00000000211d1ae3", - "131: b==", - "132: assert", - "135: bytec_0", - "136: frame_dig -1", - "137: app_global_put", - "140: btoi", - "141: retsub" + "129: pushbytes 0x00000000211d1ae3", + "130: b==", + "131: assert", + "134: bytec_0", + "135: frame_dig -1", + "136: app_global_put", + "139: frame_dig -1", + "142: pushint 4", + "145: extract_uint64", + "146: retsub" ], [ "67: itob", @@ -1553,13 +1554,12 @@ "45: callsub return_contact" ], [ - "145: return_contact:", - "149: proto 0 1", - "152: intc_0", - "153: bytec_0", - "154: app_global_get_ex", - "155: assert", - "156: retsub" + "150: return_contact:", + "153: intc_0", + "154: bytec_0", + "155: app_global_get_ex", + "156: assert", + "157: retsub" ], [ "46: bytec_1", @@ -1741,15 +1741,16 @@ "124: pushbytes \"alice@something.com\"", "125: ==", "126: assert", - "129: dup", - "130: pushbytes 0x00000000211d1ae3", - "131: b==", - "132: assert", - "135: bytec_0", - "136: frame_dig -1", - "137: app_global_put", - "140: btoi", - "141: retsub" + "129: pushbytes 0x00000000211d1ae3", + "130: b==", + "131: assert", + "134: bytec_0", + "135: frame_dig -1", + "136: app_global_put", + "139: frame_dig -1", + "142: pushint 4", + "145: extract_uint64", + "146: retsub" ], [ "67: itob", @@ -1796,13 +1797,12 @@ "45: callsub return_contact" ], [ - "145: return_contact:", - "149: proto 0 1", - "152: intc_0", - "153: bytec_0", - "154: app_global_get_ex", - "155: assert", - "156: retsub" + "150: return_contact:", + "153: intc_0", + "154: bytec_0", + "155: app_global_get_ex", + "156: assert", + "157: retsub" ], [ "46: bytec_1", diff --git a/projects/python-examples/.algokit/static-analysis/snapshots/BoxStorage.approval.json b/projects/python-examples/.algokit/static-analysis/snapshots/BoxStorage.approval.json index 94badcb..aa5fd50 100644 --- a/projects/python-examples/.algokit/static-analysis/snapshots/BoxStorage.approval.json +++ b/projects/python-examples/.algokit/static-analysis/snapshots/BoxStorage.approval.json @@ -67,14 +67,13 @@ ], [ "730: get_box:", - "735: proto 0 1", - "738: bytec_2", - "739: box_get", - "740: swap", - "741: btoi", - "742: swap", - "743: assert", - "744: retsub" + "733: bytec_2", + "734: box_get", + "735: swap", + "736: btoi", + "737: swap", + "738: assert", + "739: retsub" ], [ "709: itob", @@ -118,13 +117,13 @@ "685: callsub get_item_box_map" ], [ - "748: get_item_box_map:", - "752: proto 1 1", - "755: frame_dig -1", - "756: itob", - "757: box_get", - "758: assert", - "759: retsub" + "743: get_item_box_map:", + "747: proto 1 1", + "750: frame_dig -1", + "751: itob", + "752: box_get", + "753: assert", + "754: retsub" ], [ "686: dup", @@ -171,15 +170,14 @@ "657: callsub get_box_map" ], [ - "763: get_box_map:", - "767: proto 0 1", - "770: intc_0", - "773: itob", - "774: box_get", - "775: bytec 10", - "776: cover 2", - "777: select", - "778: retsub" + "758: get_box_map:", + "761: intc_0", + "764: itob", + "765: box_get", + "766: bytec 10", + "767: cover 2", + "768: select", + "769: retsub" ], [ "658: dup", @@ -226,24 +224,23 @@ "645: callsub get_box_ref" ], [ - "782: get_box_ref:", - "786: proto 0 0", - "789: bytec_0", - "792: intc_2", - "793: box_create", - "794: assert", - "797: txn Sender", - "800: bytec_0", - "803: box_del", - "804: assert", - "807: bytec_0", - "810: box_get", - "811: dig 2", - "812: cover 2", - "813: select", - "814: ==", - "815: assert", - "816: retsub" + "773: get_box_ref:", + "776: bytec_0", + "779: intc_2", + "780: box_create", + "781: assert", + "784: txn Sender", + "787: bytec_0", + "790: box_del", + "791: assert", + "794: bytec_0", + "797: box_get", + "798: dig 2", + "799: cover 2", + "800: select", + "801: ==", + "802: assert", + "803: retsub" ], [ "646: intc_0", @@ -280,14 +277,13 @@ "622: callsub maybe_box" ], [ - "820: maybe_box:", - "824: proto 0 2", - "827: bytec_2", - "828: box_get", - "829: swap", - "830: btoi", - "833: swap", - "834: retsub" + "807: maybe_box:", + "810: bytec_2", + "811: box_get", + "812: swap", + "813: btoi", + "816: swap", + "817: retsub" ], [ "623: swap", @@ -335,27 +331,27 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "858: pushbytes \"\"", - "859: frame_bury 1" + "841: pushbytes \"\"", + "842: frame_bury 1" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -411,23 +407,23 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -483,30 +479,30 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "899: pushbytes 0x", - "900: frame_bury 1" + "882: pushbytes 0x", + "883: frame_bury 1" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -562,26 +558,26 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -637,22 +633,21 @@ "522: callsub get_box_example" ], [ - "913: get_box_example:", - "918: proto 0 3", - "921: bytec_2", - "922: box_get", - "923: swap", - "924: btoi", - "925: swap", - "926: assert", - "929: bytec 5", - "930: box_get", - "931: assert", - "932: extract 2 0", - "935: bytec 4", - "936: box_get", - "937: assert", - "944: retsub" + "896: get_box_example:", + "899: bytec_2", + "900: box_get", + "901: swap", + "902: btoi", + "903: swap", + "904: assert", + "907: bytec 5", + "908: box_get", + "909: assert", + "910: extract 2 0", + "913: bytec 4", + "914: box_get", + "915: assert", + "922: retsub" ], [ "523: uncover 2", @@ -715,19 +710,18 @@ "501: callsub get_box_map_example" ], [ - "948: get_box_map_example:", - "952: proto 0 1", - "955: intc_0", - "958: itob", - "959: box_get", - "960: bytec 10", - "961: cover 2", - "962: select", - "963: bytec 10", - "964: ==", - "965: assert", - "968: intc_0", - "969: retsub" + "926: get_box_map_example:", + "929: intc_0", + "932: itob", + "933: box_get", + "934: bytec 10", + "935: cover 2", + "936: select", + "937: bytec 10", + "938: ==", + "939: assert", + "942: intc_0", + "943: retsub" ], [ "502: bytec_3", @@ -772,32 +766,31 @@ "489: callsub maybe_box_example" ], [ - "973: maybe_box_example:", - "977: proto 0 0", - "980: bytec_2", - "981: box_del", - "982: pop", - "985: bytec_2", - "986: box_get", - "987: swap", - "988: btoi", - "989: pushint 42", - "990: swap", - "991: uncover 2", - "992: select", - "993: pushint 42", - "994: ==", - "995: assert", - "998: bytec_2", - "999: box_get", - "1000: swap", - "1001: btoi", - "1004: swap", - "1005: !", - "1006: assert", - "1009: !", - "1010: assert", - "1011: retsub" + "947: maybe_box_example:", + "950: bytec_2", + "951: box_del", + "952: pop", + "955: bytec_2", + "956: box_get", + "957: swap", + "958: btoi", + "959: pushint 42", + "960: swap", + "961: uncover 2", + "962: select", + "963: pushint 42", + "964: ==", + "965: assert", + "968: bytec_2", + "969: box_get", + "970: swap", + "971: btoi", + "974: swap", + "975: !", + "976: assert", + "979: !", + "980: assert", + "981: retsub" ], [ "490: intc_0", @@ -834,20 +827,19 @@ "477: callsub maybe_box_map_example" ], [ - "1015: maybe_box_map_example:", - "1019: proto 0 0", - "1022: intc_0", - "1025: itob", - "1026: box_get", - "1027: bury 1", - "1030: !", - "1031: assert", - "1034: intc_1", - "1037: itob", - "1038: box_len", - "1039: bury 1", - "1040: assert", - "1041: retsub" + "985: maybe_box_map_example:", + "988: intc_0", + "991: itob", + "992: box_get", + "993: bury 1", + "996: !", + "997: assert", + "1000: intc_1", + "1003: itob", + "1004: box_len", + "1005: bury 1", + "1006: assert", + "1007: retsub" ], [ "478: intc_0", @@ -885,14 +877,14 @@ "461: callsub get_box_map_struct" ], [ - "1045: get_box_map_struct:", - "1049: proto 1 1", - "1052: bytec 11", - "1053: frame_dig -1", - "1054: concat", - "1055: box_get", - "1056: assert", - "1057: retsub" + "1011: get_box_map_struct:", + "1015: proto 1 1", + "1018: bytec 11", + "1019: frame_dig -1", + "1020: concat", + "1021: box_get", + "1022: assert", + "1023: retsub" ], [ "462: bytec_1", @@ -935,14 +927,14 @@ "444: callsub set_box" ], [ - "1061: set_box:", - "1066: proto 1 0", - "1069: frame_dig -1", - "1070: itob", - "1071: bytec_2", - "1072: swap", - "1073: box_put", - "1074: retsub" + "1027: set_box:", + "1032: proto 1 0", + "1035: frame_dig -1", + "1036: itob", + "1037: bytec_2", + "1038: swap", + "1039: box_put", + "1040: retsub" ], [ "445: intc_0", @@ -983,16 +975,16 @@ "424: callsub set_box_map" ], [ - "1078: set_box_map:", - "1082: proto 2 0", - "1085: frame_dig -2", - "1086: itob", - "1087: dup", - "1088: box_del", - "1089: pop", - "1090: frame_dig -1", - "1091: box_put", - "1092: retsub" + "1044: set_box_map:", + "1048: proto 2 0", + "1051: frame_dig -2", + "1052: itob", + "1053: dup", + "1054: box_del", + "1055: pop", + "1056: frame_dig -1", + "1057: box_put", + "1058: retsub" ], [ "425: intc_0", @@ -1031,24 +1023,24 @@ "396: callsub set_box_map_struct" ], [ - "1096: set_box_map_struct:", - "1100: proto 2 1", - "1103: bytec 11", - "1104: frame_dig -2", - "1105: concat", - "1106: dup", - "1107: box_del", - "1108: pop", - "1109: dup", - "1110: frame_dig -1", - "1111: box_put", - "1114: box_get", - "1115: assert", - "1116: frame_dig -1", - "1117: ==", - "1118: assert", - "1121: intc_0", - "1122: retsub" + "1062: set_box_map_struct:", + "1066: proto 2 1", + "1069: bytec 11", + "1070: frame_dig -2", + "1071: concat", + "1072: dup", + "1073: box_del", + "1074: pop", + "1075: dup", + "1076: frame_dig -1", + "1077: box_put", + "1080: box_get", + "1081: assert", + "1082: frame_dig -1", + "1083: ==", + "1084: assert", + "1087: intc_0", + "1088: retsub" ], [ "397: bytec_3", @@ -1097,59 +1089,59 @@ "378: callsub set_box_example" ], [ - "1126: set_box_example:", - "1136: proto 3 0", - "1139: frame_dig -3", - "1140: itob", - "1141: bytec_2", - "1142: swap", - "1143: box_put", - "1146: bytec 5", - "1147: box_del", - "1148: pop", - "1149: bytec 5", - "1150: frame_dig -2", - "1151: box_put", - "1154: bytec 4", - "1155: box_del", - "1156: pop", - "1157: bytec 4", - "1158: frame_dig -1", - "1159: box_put", - "1162: frame_dig -2", - "1163: extract 2 0", - "1164: bytec 12", - "1165: box_del", - "1166: pop", - "1167: bytec 12", - "1168: swap", - "1169: box_put", - "1172: bytec 5", - "1173: box_get", - "1174: assert", - "1177: bytec 5", - "1178: box_get", - "1179: assert", - "1180: intc_1", - "1181: extract_uint16", - "1182: swap", - "1183: intc_1", - "1184: extract_uint16", - "1185: ==", - "1190: assert", - "1193: bytec_2", - "1194: box_get", - "1195: swap", - "1196: btoi", - "1197: swap", - "1198: assert", - "1199: pushint 3", - "1200: +", - "1201: itob", - "1202: bytec_2", - "1203: swap", - "1204: box_put", - "1205: retsub" + "1092: set_box_example:", + "1102: proto 3 0", + "1105: frame_dig -3", + "1106: itob", + "1107: bytec_2", + "1108: swap", + "1109: box_put", + "1112: bytec 5", + "1113: box_del", + "1114: pop", + "1115: bytec 5", + "1116: frame_dig -2", + "1117: box_put", + "1120: bytec 4", + "1121: box_del", + "1122: pop", + "1123: bytec 4", + "1124: frame_dig -1", + "1125: box_put", + "1128: frame_dig -2", + "1129: extract 2 0", + "1130: bytec 12", + "1131: box_del", + "1132: pop", + "1133: bytec 12", + "1134: swap", + "1135: box_put", + "1138: bytec 5", + "1139: box_get", + "1140: assert", + "1143: bytec 5", + "1144: box_get", + "1145: assert", + "1146: intc_1", + "1147: extract_uint16", + "1148: swap", + "1149: intc_1", + "1150: extract_uint16", + "1151: ==", + "1156: assert", + "1159: bytec_2", + "1160: box_get", + "1161: swap", + "1162: btoi", + "1163: swap", + "1164: assert", + "1165: pushint 3", + "1166: +", + "1167: itob", + "1168: bytec_2", + "1169: swap", + "1170: box_put", + "1171: retsub" ], [ "379: intc_0", @@ -1186,46 +1178,45 @@ "356: callsub delete_box" ], [ - "1209: delete_box:", - "1214: proto 0 0", - "1217: bytec_2", - "1218: box_del", - "1219: pop", - "1222: bytec 5", - "1223: box_del", - "1224: pop", - "1227: bytec 4", - "1228: box_del", - "1229: pop", - "1232: bytec_2", - "1233: box_get", - "1234: swap", - "1235: btoi", - "1236: pushint 42", - "1237: swap", - "1238: uncover 2", - "1239: select", - "1240: pushint 42", - "1241: ==", - "1242: assert", - "1245: bytec 5", - "1246: box_get", - "1247: bytec 13", - "1248: cover 2", - "1249: select", - "1250: extract 2 0", - "1251: pushbytes 0x3432", - "1252: ==", - "1257: assert", - "1260: bytec 4", - "1261: box_get", - "1262: bytec 13", - "1263: cover 2", - "1264: select", - "1265: bytec 13", - "1266: ==", - "1267: assert", - "1268: retsub" + "1175: delete_box:", + "1178: bytec_2", + "1179: box_del", + "1180: pop", + "1183: bytec 5", + "1184: box_del", + "1185: pop", + "1188: bytec 4", + "1189: box_del", + "1190: pop", + "1193: bytec_2", + "1194: box_get", + "1195: swap", + "1196: btoi", + "1197: pushint 42", + "1198: swap", + "1199: uncover 2", + "1200: select", + "1201: pushint 42", + "1202: ==", + "1203: assert", + "1206: bytec 5", + "1207: box_get", + "1208: bytec 13", + "1209: cover 2", + "1210: select", + "1211: extract 2 0", + "1212: pushbytes 0x3432", + "1213: ==", + "1218: assert", + "1221: bytec 4", + "1222: box_get", + "1223: bytec 13", + "1224: cover 2", + "1225: select", + "1226: bytec 13", + "1227: ==", + "1228: assert", + "1229: retsub" ], [ "357: intc_0", @@ -1264,13 +1255,13 @@ "343: callsub delete_box_map" ], [ - "1272: delete_box_map:", - "1276: proto 1 0", - "1279: frame_dig -1", - "1280: itob", - "1281: box_del", - "1282: pop", - "1283: retsub" + "1233: delete_box_map:", + "1237: proto 1 0", + "1240: frame_dig -1", + "1241: itob", + "1242: box_del", + "1243: pop", + "1244: retsub" ], [ "344: intc_0", @@ -1307,27 +1298,26 @@ "325: callsub delete_box_ref" ], [ - "1287: delete_box_ref:", - "1291: proto 0 0", - "1294: bytec 14", - "1295: intc_2", - "1296: box_create", - "1297: pop", - "1300: bytec 14", - "1301: box_len", - "1302: bury 1", - "1303: assert", - "1306: bytec 14", - "1307: box_del", - "1308: pop", - "1311: bytec_0", - "1314: box_get", - "1317: !", - "1318: assert", - "1321: pushbytes 0x", - "1322: ==", - "1323: assert", - "1324: retsub" + "1248: delete_box_ref:", + "1251: bytec 14", + "1252: intc_2", + "1253: box_create", + "1254: pop", + "1257: bytec 14", + "1258: box_len", + "1259: bury 1", + "1260: assert", + "1263: bytec 14", + "1264: box_del", + "1265: pop", + "1268: bytec_0", + "1271: box_get", + "1274: !", + "1275: assert", + "1278: pushbytes 0x", + "1279: ==", + "1280: assert", + "1281: retsub" ], [ "326: intc_0", @@ -1364,19 +1354,19 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1346: intc_1", - "1347: swap", - "1348: retsub" + "1303: intc_1", + "1304: swap", + "1305: retsub" ], [ "309: itob", @@ -1418,22 +1408,22 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1350: box_map_length_after_if_else@2:", - "1353: frame_dig 0", - "1354: box_len", - "1355: assert", - "1356: swap", - "1357: retsub" + "1307: box_map_length_after_if_else@2:", + "1310: frame_dig 0", + "1311: box_len", + "1312: assert", + "1313: swap", + "1314: retsub" ], [ "309: itob", @@ -1475,16 +1465,15 @@ "290: callsub length_box_ref" ], [ - "1361: length_box_ref:", - "1365: proto 0 1", - "1368: bytec_0", - "1371: intc_2", - "1372: box_create", - "1373: assert", - "1376: bytec_0", - "1379: box_len", - "1380: assert", - "1381: retsub" + "1318: length_box_ref:", + "1321: bytec_0", + "1324: intc_2", + "1325: box_create", + "1326: assert", + "1329: bytec_0", + "1332: box_len", + "1333: assert", + "1334: retsub" ], [ "291: itob", @@ -1526,28 +1515,27 @@ "270: callsub box_map_struct_length" ], [ - "1385: box_map_struct_length:", - "1389: proto 0 1", - "1392: bytec 7", - "1393: box_del", - "1394: pop", - "1395: bytec 7", - "1398: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "1401: box_put", - "1404: bytec 7", - "1405: box_len", - "1406: assert", - "1407: pushint 28", - "1408: ==", - "1409: assert", - "1412: bytec 7", - "1413: box_len", - "1414: assert", - "1415: pushint 28", - "1416: ==", - "1417: assert", - "1420: intc_0", - "1421: retsub" + "1338: box_map_struct_length:", + "1341: bytec 7", + "1342: box_del", + "1343: pop", + "1344: bytec 7", + "1347: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "1350: box_put", + "1353: bytec 7", + "1354: box_len", + "1355: assert", + "1356: pushint 28", + "1357: ==", + "1358: assert", + "1361: bytec 7", + "1362: box_len", + "1363: assert", + "1364: pushint 28", + "1365: ==", + "1366: assert", + "1369: intc_0", + "1370: retsub" ], [ "271: bytec_3", @@ -1592,28 +1580,27 @@ "258: callsub box_map_length_example" ], [ - "1425: box_map_length_example:", - "1430: proto 0 0", - "1433: intc_1", - "1436: itob", - "1437: dup", - "1438: box_del", - "1439: pop", - "1440: dup", - "1443: pushbytes \"Hmmmmm\"", - "1446: box_put", - "1449: dup", - "1450: box_len", - "1451: assert", - "1452: pushint 6", - "1453: ==", - "1454: assert", - "1457: box_len", - "1458: assert", - "1459: pushint 6", - "1460: ==", - "1461: assert", - "1462: retsub" + "1374: box_map_length_example:", + "1377: intc_1", + "1380: itob", + "1381: dup", + "1382: box_del", + "1383: pop", + "1384: dup", + "1387: pushbytes \"Hmmmmm\"", + "1390: box_put", + "1393: dup", + "1394: box_len", + "1395: assert", + "1396: pushint 6", + "1397: ==", + "1398: assert", + "1401: box_len", + "1402: assert", + "1403: pushint 6", + "1404: ==", + "1405: assert", + "1406: retsub" ], [ "259: intc_0", @@ -1650,49 +1637,48 @@ "245: callsub length_box_ref_example" ], [ - "1466: length_box_ref_example:", - "1470: proto 0 0", - "1473: bytec_0", - "1476: intc_2", - "1477: box_create", - "1478: assert", - "1481: bytec_0", - "1484: box_len", - "1485: assert", - "1486: intc_3", - "1487: ==", - "1488: assert", - "1491: bytec_0", - "1494: intc_2", - "1495: box_create", - "1496: assert", - "1499: bytec_0", - "1502: box_len", - "1503: assert", - "1504: intc_3", - "1505: ==", - "1506: assert", - "1509: bytec_0", - "1512: intc_2", - "1513: box_create", - "1514: assert", - "1517: bytec_0", - "1520: box_len", - "1521: assert", - "1522: intc_3", - "1523: ==", - "1524: assert", - "1527: bytec_0", - "1530: intc_2", - "1531: box_create", - "1532: assert", - "1535: bytec_0", - "1538: box_len", - "1539: assert", - "1540: intc_3", - "1541: ==", - "1542: assert", - "1543: retsub" + "1410: length_box_ref_example:", + "1413: bytec_0", + "1416: intc_2", + "1417: box_create", + "1418: assert", + "1421: bytec_0", + "1424: box_len", + "1425: assert", + "1426: intc_3", + "1427: ==", + "1428: assert", + "1431: bytec_0", + "1434: intc_2", + "1435: box_create", + "1436: assert", + "1439: bytec_0", + "1442: box_len", + "1443: assert", + "1444: intc_3", + "1445: ==", + "1446: assert", + "1449: bytec_0", + "1452: intc_2", + "1453: box_create", + "1454: assert", + "1457: bytec_0", + "1460: box_len", + "1461: assert", + "1462: intc_3", + "1463: ==", + "1464: assert", + "1467: bytec_0", + "1470: intc_2", + "1471: box_create", + "1472: assert", + "1475: bytec_0", + "1478: box_len", + "1479: assert", + "1480: intc_3", + "1481: ==", + "1482: assert", + "1483: retsub" ], [ "246: intc_0", @@ -1729,39 +1715,38 @@ "233: callsub extract_box_ref" ], [ - "1547: extract_box_ref:", - "1552: proto 0 0", - "1555: bytec_0", - "1558: intc_2", - "1559: box_create", - "1560: assert", - "1563: txn Sender", - "1566: global CurrentApplicationAddress", - "1569: bytec_0", - "1572: intc_1", - "1573: dig 3", - "1574: box_replace", - "1577: bytec_0", - "1580: intc_1", - "1581: dup", - "1582: dig 3", - "1583: UNSUPPORTED box_splice", - "1586: bytec_0", - "1589: intc_3", - "1592: bytec 8", - "1595: box_replace", - "1598: bytec_0", - "1601: intc_1", - "1602: pushint 69", - "1603: box_extract", - "1606: swap", - "1607: uncover 2", - "1608: concat", - "1611: bytec 8", - "1614: concat", - "1615: ==", - "1616: assert", - "1617: retsub" + "1487: extract_box_ref:", + "1490: bytec_0", + "1493: intc_2", + "1494: box_create", + "1495: assert", + "1498: txn Sender", + "1501: global CurrentApplicationAddress", + "1504: bytec_0", + "1507: intc_1", + "1508: dig 3", + "1509: box_replace", + "1512: bytec_0", + "1515: intc_1", + "1516: dup", + "1517: dig 3", + "1518: UNSUPPORTED box_splice", + "1521: bytec_0", + "1524: intc_3", + "1527: bytec 8", + "1530: box_replace", + "1533: bytec_0", + "1536: intc_1", + "1537: pushint 69", + "1538: box_extract", + "1541: swap", + "1542: uncover 2", + "1543: concat", + "1546: bytec 8", + "1549: concat", + "1550: ==", + "1551: assert", + "1552: retsub" ], [ "234: intc_0", @@ -1798,60 +1783,59 @@ "220: callsub manipulate_box_ref" ], [ - "1621: manipulate_box_ref:", - "1626: proto 0 0", - "1629: bytec_0", - "1632: intc_2", - "1633: box_create", - "1634: assert", - "1637: bytec_0", - "1640: box_len", - "1641: bury 1", - "1642: assert", - "1646: txn Sender", - "1649: global CurrentApplicationAddress", - "1652: bytec_0", - "1655: intc_1", - "1656: dig 3", - "1657: box_replace", - "1660: bytec_0", - "1663: intc_1", - "1664: dup", - "1665: dig 3", - "1666: UNSUPPORTED box_splice", - "1669: bytec_0", - "1672: intc_3", - "1675: bytec 8", - "1678: box_replace", - "1681: bytec_0", - "1684: intc_1", - "1685: pushint 69", - "1686: box_extract", - "1689: dig 1", - "1690: dig 3", - "1691: concat", - "1694: bytec 8", - "1697: concat", - "1698: ==", - "1699: assert", - "1702: bytec_0", - "1705: box_del", - "1706: assert", - "1709: concat", - "1712: bytec_0", - "1715: swap", - "1716: box_put", - "1719: bytec_0", - "1722: box_len", - "1723: bury 1", - "1724: assert", - "1727: bytec_0", - "1730: box_len", - "1731: assert", - "1732: intc_3", - "1733: ==", - "1734: assert", - "1735: retsub" + "1556: manipulate_box_ref:", + "1559: bytec_0", + "1562: intc_2", + "1563: box_create", + "1564: assert", + "1567: bytec_0", + "1570: box_len", + "1571: bury 1", + "1572: assert", + "1576: txn Sender", + "1579: global CurrentApplicationAddress", + "1582: bytec_0", + "1585: intc_1", + "1586: dig 3", + "1587: box_replace", + "1590: bytec_0", + "1593: intc_1", + "1594: dup", + "1595: dig 3", + "1596: UNSUPPORTED box_splice", + "1599: bytec_0", + "1602: intc_3", + "1605: bytec 8", + "1608: box_replace", + "1611: bytec_0", + "1614: intc_1", + "1615: pushint 69", + "1616: box_extract", + "1619: dig 1", + "1620: dig 3", + "1621: concat", + "1624: bytec 8", + "1627: concat", + "1628: ==", + "1629: assert", + "1632: bytec_0", + "1635: box_del", + "1636: assert", + "1639: concat", + "1642: bytec_0", + "1645: swap", + "1646: box_put", + "1649: bytec_0", + "1652: box_len", + "1653: bury 1", + "1654: assert", + "1657: bytec_0", + "1660: box_len", + "1661: assert", + "1662: intc_3", + "1663: ==", + "1664: assert", + "1665: retsub" ], [ "221: intc_0", @@ -1888,18 +1872,17 @@ "207: callsub value_box" ], [ - "1739: value_box:", - "1744: proto 0 0", - "1747: bytec_2", - "1748: box_get", - "1749: swap", - "1750: btoi", - "1751: swap", - "1752: assert", - "1753: pushint 10", - "1754: ==", - "1755: assert", - "1756: retsub" + "1669: value_box:", + "1672: bytec_2", + "1673: box_get", + "1674: swap", + "1675: btoi", + "1676: swap", + "1677: assert", + "1678: pushint 10", + "1679: ==", + "1680: assert", + "1681: retsub" ], [ "208: intc_0", @@ -1936,12 +1919,11 @@ "186: callsub exist_box" ], [ - "1760: exist_box:", - "1764: proto 0 1", - "1767: bytec_2", - "1768: box_len", - "1769: bury 1", - "1770: retsub" + "1685: exist_box:", + "1688: bytec_2", + "1689: box_len", + "1690: bury 1", + "1691: retsub" ], [ "187: bytec_3", @@ -1986,18 +1968,17 @@ "145: callsub exist_box_example" ], [ - "1774: exist_box_example:", - "1778: proto 0 3", - "1781: bytec 5", - "1782: box_len", - "1783: bury 1", - "1784: bytec 4", - "1785: box_len", - "1786: bury 1", - "1787: bytec 12", - "1788: box_len", - "1789: bury 1", - "1790: retsub" + "1695: exist_box_example:", + "1698: bytec 5", + "1699: box_len", + "1700: bury 1", + "1701: bytec 4", + "1702: box_len", + "1703: bury 1", + "1704: bytec 12", + "1705: box_len", + "1706: bury 1", + "1707: retsub" ], [ "146: bytec_3", @@ -2063,68 +2044,67 @@ "133: callsub slice_box" ], [ - "1794: slice_box:", - "1798: proto 0 0", - "1801: bytec 9", - "1804: box_del", - "1805: pop", - "1808: bytec 9", - "1811: pushbytes 0x54657374696e672074657374696e6720313233", - "1812: box_put", - "1815: bytec 9", - "1818: box_len", - "1819: pop", - "1820: dup", - "1821: intc_1", - "1822: dig 2", - "1823: select", - "1824: pushint 7", - "1825: dig 2", - "1826: <", - "1827: uncover 2", - "1828: pushint 7", - "1829: uncover 2", - "1830: select", - "1831: dig 1", - "1832: -", - "1835: bytec 9", - "1838: cover 2", - "1839: box_extract", - "1840: pushbytes 0x54657374696e67", - "1841: ==", - "1842: assert", - "1845: bytec 4", - "1846: box_del", - "1847: pop", - "1848: bytec 4", - "1849: pushbytes 0x000548656c6c6f", - "1850: box_put", - "1853: bytec 4", - "1854: box_len", - "1855: pop", - "1856: pushint 2", - "1857: dig 1", - "1858: <", - "1859: dig 1", - "1860: pushint 2", - "1861: uncover 2", - "1862: select", - "1863: pushint 10", - "1864: dig 2", - "1865: <", - "1866: uncover 2", - "1867: pushint 10", - "1868: uncover 2", - "1869: select", - "1870: dig 1", - "1871: -", - "1872: bytec 4", - "1873: cover 2", - "1874: box_extract", - "1875: pushbytes 0x48656c6c6f", - "1876: ==", - "1877: assert", - "1878: retsub" + "1711: slice_box:", + "1714: bytec 9", + "1717: box_del", + "1718: pop", + "1721: bytec 9", + "1724: pushbytes 0x54657374696e672074657374696e6720313233", + "1725: box_put", + "1728: bytec 9", + "1731: box_len", + "1732: pop", + "1733: dup", + "1734: intc_1", + "1735: dig 2", + "1736: select", + "1737: pushint 7", + "1738: dig 2", + "1739: <", + "1740: uncover 2", + "1741: pushint 7", + "1742: uncover 2", + "1743: select", + "1744: dig 1", + "1745: -", + "1748: bytec 9", + "1751: cover 2", + "1752: box_extract", + "1753: pushbytes 0x54657374696e67", + "1754: ==", + "1755: assert", + "1758: bytec 4", + "1759: box_del", + "1760: pop", + "1761: bytec 4", + "1762: pushbytes 0x000548656c6c6f", + "1763: box_put", + "1766: bytec 4", + "1767: box_len", + "1768: pop", + "1769: pushint 2", + "1770: dig 1", + "1771: <", + "1772: dig 1", + "1773: pushint 2", + "1774: uncover 2", + "1775: select", + "1776: pushint 10", + "1777: dig 2", + "1778: <", + "1779: uncover 2", + "1780: pushint 10", + "1781: uncover 2", + "1782: select", + "1783: dig 1", + "1784: -", + "1785: bytec 4", + "1786: cover 2", + "1787: box_extract", + "1788: pushbytes 0x48656c6c6f", + "1789: ==", + "1790: assert", + "1791: retsub" ], [ "134: intc_0", @@ -2161,40 +2141,39 @@ "121: callsub arc4_box" ], [ - "1882: arc4_box:", - "1886: proto 0 0", - "1889: bytec 6", - "1894: pushbytes 0x00010203", - "1895: box_put", - "1898: bytec 6", - "1901: box_get", - "1902: assert", - "1903: extract 0 1", - "1904: bytec_3", - "1905: b==", - "1906: assert", - "1909: bytec 6", - "1912: box_get", - "1913: assert", - "1914: extract 1 1", - "1915: pushbytes 0x01", - "1916: b==", - "1917: assert", - "1920: bytec 6", - "1923: box_get", - "1924: assert", - "1925: extract 2 1", - "1926: pushbytes 0x02", - "1927: b==", - "1928: assert", - "1931: bytec 6", - "1934: box_get", - "1935: assert", - "1936: extract 3 1", - "1937: pushbytes 0x03", - "1938: b==", - "1939: assert", - "1940: retsub" + "1795: arc4_box:", + "1798: bytec 6", + "1803: pushbytes 0x00010203", + "1804: box_put", + "1807: bytec 6", + "1810: box_get", + "1811: assert", + "1812: extract 0 1", + "1813: bytec_3", + "1814: b==", + "1815: assert", + "1818: bytec 6", + "1821: box_get", + "1822: assert", + "1823: extract 1 1", + "1824: pushbytes 0x01", + "1825: b==", + "1826: assert", + "1829: bytec 6", + "1832: box_get", + "1833: assert", + "1834: extract 2 1", + "1835: pushbytes 0x02", + "1836: b==", + "1837: assert", + "1840: bytec 6", + "1843: box_get", + "1844: assert", + "1845: extract 3 1", + "1846: pushbytes 0x03", + "1847: b==", + "1848: assert", + "1849: retsub" ], [ "122: intc_0", @@ -2264,11 +2243,10 @@ "96: callsub key_box_example" ], [ - "1944: key_box_example:", - "1948: proto 0 0", - "1951: intc_1", - "1952: assert", - "1953: retsub" + "1853: key_box_example:", + "1856: intc_1", + "1857: assert", + "1858: retsub" ], [ "97: intc_0", @@ -2307,13 +2285,13 @@ "76: callsub box_map_exists" ], [ - "1957: box_map_exists:", - "1962: proto 1 1", - "1965: frame_dig -1", - "1966: itob", - "1967: box_len", - "1968: bury 1", - "1969: retsub" + "1862: box_map_exists:", + "1867: proto 1 1", + "1870: frame_dig -1", + "1871: itob", + "1872: box_len", + "1873: bury 1", + "1874: retsub" ], [ "77: bytec_3", @@ -2359,14 +2337,14 @@ "48: callsub box_map_struct_exists" ], [ - "1973: box_map_struct_exists:", - "1977: proto 1 1", - "1980: bytec 11", - "1981: frame_dig -1", - "1982: concat", - "1983: box_len", - "1984: bury 1", - "1985: retsub" + "1878: box_map_struct_exists:", + "1882: proto 1 1", + "1885: bytec 11", + "1886: frame_dig -1", + "1887: concat", + "1888: box_len", + "1889: bury 1", + "1890: retsub" ], [ "49: bytec_3", @@ -2508,14 +2486,13 @@ ], [ "730: get_box:", - "735: proto 0 1", - "738: bytec_2", - "739: box_get", - "740: swap", - "741: btoi", - "742: swap", - "743: assert", - "744: retsub" + "733: bytec_2", + "734: box_get", + "735: swap", + "736: btoi", + "737: swap", + "738: assert", + "739: retsub" ], [ "709: itob", @@ -2559,13 +2536,13 @@ "685: callsub get_item_box_map" ], [ - "748: get_item_box_map:", - "752: proto 1 1", - "755: frame_dig -1", - "756: itob", - "757: box_get", - "758: assert", - "759: retsub" + "743: get_item_box_map:", + "747: proto 1 1", + "750: frame_dig -1", + "751: itob", + "752: box_get", + "753: assert", + "754: retsub" ], [ "686: dup", @@ -2612,15 +2589,14 @@ "657: callsub get_box_map" ], [ - "763: get_box_map:", - "767: proto 0 1", - "770: intc_0", - "773: itob", - "774: box_get", - "775: bytec 10", - "776: cover 2", - "777: select", - "778: retsub" + "758: get_box_map:", + "761: intc_0", + "764: itob", + "765: box_get", + "766: bytec 10", + "767: cover 2", + "768: select", + "769: retsub" ], [ "658: dup", @@ -2667,24 +2643,23 @@ "645: callsub get_box_ref" ], [ - "782: get_box_ref:", - "786: proto 0 0", - "789: bytec_0", - "792: intc_2", - "793: box_create", - "794: assert", - "797: txn Sender", - "800: bytec_0", - "803: box_del", - "804: assert", - "807: bytec_0", - "810: box_get", - "811: dig 2", - "812: cover 2", - "813: select", - "814: ==", - "815: assert", - "816: retsub" + "773: get_box_ref:", + "776: bytec_0", + "779: intc_2", + "780: box_create", + "781: assert", + "784: txn Sender", + "787: bytec_0", + "790: box_del", + "791: assert", + "794: bytec_0", + "797: box_get", + "798: dig 2", + "799: cover 2", + "800: select", + "801: ==", + "802: assert", + "803: retsub" ], [ "646: intc_0", @@ -2721,14 +2696,13 @@ "622: callsub maybe_box" ], [ - "820: maybe_box:", - "824: proto 0 2", - "827: bytec_2", - "828: box_get", - "829: swap", - "830: btoi", - "833: swap", - "834: retsub" + "807: maybe_box:", + "810: bytec_2", + "811: box_get", + "812: swap", + "813: btoi", + "816: swap", + "817: retsub" ], [ "623: swap", @@ -2776,27 +2750,27 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "858: pushbytes \"\"", - "859: frame_bury 1" + "841: pushbytes \"\"", + "842: frame_bury 1" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -2852,23 +2826,23 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -2924,30 +2898,30 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "899: pushbytes 0x", - "900: frame_bury 1" + "882: pushbytes 0x", + "883: frame_bury 1" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -3003,26 +2977,26 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -3078,22 +3052,21 @@ "522: callsub get_box_example" ], [ - "913: get_box_example:", - "918: proto 0 3", - "921: bytec_2", - "922: box_get", - "923: swap", - "924: btoi", - "925: swap", - "926: assert", - "929: bytec 5", - "930: box_get", - "931: assert", - "932: extract 2 0", - "935: bytec 4", - "936: box_get", - "937: assert", - "944: retsub" + "896: get_box_example:", + "899: bytec_2", + "900: box_get", + "901: swap", + "902: btoi", + "903: swap", + "904: assert", + "907: bytec 5", + "908: box_get", + "909: assert", + "910: extract 2 0", + "913: bytec 4", + "914: box_get", + "915: assert", + "922: retsub" ], [ "523: uncover 2", @@ -3156,19 +3129,18 @@ "501: callsub get_box_map_example" ], [ - "948: get_box_map_example:", - "952: proto 0 1", - "955: intc_0", - "958: itob", - "959: box_get", - "960: bytec 10", - "961: cover 2", - "962: select", - "963: bytec 10", - "964: ==", - "965: assert", - "968: intc_0", - "969: retsub" + "926: get_box_map_example:", + "929: intc_0", + "932: itob", + "933: box_get", + "934: bytec 10", + "935: cover 2", + "936: select", + "937: bytec 10", + "938: ==", + "939: assert", + "942: intc_0", + "943: retsub" ], [ "502: bytec_3", @@ -3213,32 +3185,31 @@ "489: callsub maybe_box_example" ], [ - "973: maybe_box_example:", - "977: proto 0 0", - "980: bytec_2", - "981: box_del", - "982: pop", - "985: bytec_2", - "986: box_get", - "987: swap", - "988: btoi", - "989: pushint 42", - "990: swap", - "991: uncover 2", - "992: select", - "993: pushint 42", - "994: ==", - "995: assert", - "998: bytec_2", - "999: box_get", - "1000: swap", - "1001: btoi", - "1004: swap", - "1005: !", - "1006: assert", - "1009: !", - "1010: assert", - "1011: retsub" + "947: maybe_box_example:", + "950: bytec_2", + "951: box_del", + "952: pop", + "955: bytec_2", + "956: box_get", + "957: swap", + "958: btoi", + "959: pushint 42", + "960: swap", + "961: uncover 2", + "962: select", + "963: pushint 42", + "964: ==", + "965: assert", + "968: bytec_2", + "969: box_get", + "970: swap", + "971: btoi", + "974: swap", + "975: !", + "976: assert", + "979: !", + "980: assert", + "981: retsub" ], [ "490: intc_0", @@ -3275,20 +3246,19 @@ "477: callsub maybe_box_map_example" ], [ - "1015: maybe_box_map_example:", - "1019: proto 0 0", - "1022: intc_0", - "1025: itob", - "1026: box_get", - "1027: bury 1", - "1030: !", - "1031: assert", - "1034: intc_1", - "1037: itob", - "1038: box_len", - "1039: bury 1", - "1040: assert", - "1041: retsub" + "985: maybe_box_map_example:", + "988: intc_0", + "991: itob", + "992: box_get", + "993: bury 1", + "996: !", + "997: assert", + "1000: intc_1", + "1003: itob", + "1004: box_len", + "1005: bury 1", + "1006: assert", + "1007: retsub" ], [ "478: intc_0", @@ -3326,14 +3296,14 @@ "461: callsub get_box_map_struct" ], [ - "1045: get_box_map_struct:", - "1049: proto 1 1", - "1052: bytec 11", - "1053: frame_dig -1", - "1054: concat", - "1055: box_get", - "1056: assert", - "1057: retsub" + "1011: get_box_map_struct:", + "1015: proto 1 1", + "1018: bytec 11", + "1019: frame_dig -1", + "1020: concat", + "1021: box_get", + "1022: assert", + "1023: retsub" ], [ "462: bytec_1", @@ -3376,14 +3346,14 @@ "444: callsub set_box" ], [ - "1061: set_box:", - "1066: proto 1 0", - "1069: frame_dig -1", - "1070: itob", - "1071: bytec_2", - "1072: swap", - "1073: box_put", - "1074: retsub" + "1027: set_box:", + "1032: proto 1 0", + "1035: frame_dig -1", + "1036: itob", + "1037: bytec_2", + "1038: swap", + "1039: box_put", + "1040: retsub" ], [ "445: intc_0", @@ -3424,16 +3394,16 @@ "424: callsub set_box_map" ], [ - "1078: set_box_map:", - "1082: proto 2 0", - "1085: frame_dig -2", - "1086: itob", - "1087: dup", - "1088: box_del", - "1089: pop", - "1090: frame_dig -1", - "1091: box_put", - "1092: retsub" + "1044: set_box_map:", + "1048: proto 2 0", + "1051: frame_dig -2", + "1052: itob", + "1053: dup", + "1054: box_del", + "1055: pop", + "1056: frame_dig -1", + "1057: box_put", + "1058: retsub" ], [ "425: intc_0", @@ -3472,24 +3442,24 @@ "396: callsub set_box_map_struct" ], [ - "1096: set_box_map_struct:", - "1100: proto 2 1", - "1103: bytec 11", - "1104: frame_dig -2", - "1105: concat", - "1106: dup", - "1107: box_del", - "1108: pop", - "1109: dup", - "1110: frame_dig -1", - "1111: box_put", - "1114: box_get", - "1115: assert", - "1116: frame_dig -1", - "1117: ==", - "1118: assert", - "1121: intc_0", - "1122: retsub" + "1062: set_box_map_struct:", + "1066: proto 2 1", + "1069: bytec 11", + "1070: frame_dig -2", + "1071: concat", + "1072: dup", + "1073: box_del", + "1074: pop", + "1075: dup", + "1076: frame_dig -1", + "1077: box_put", + "1080: box_get", + "1081: assert", + "1082: frame_dig -1", + "1083: ==", + "1084: assert", + "1087: intc_0", + "1088: retsub" ], [ "397: bytec_3", @@ -3538,59 +3508,59 @@ "378: callsub set_box_example" ], [ - "1126: set_box_example:", - "1136: proto 3 0", - "1139: frame_dig -3", - "1140: itob", - "1141: bytec_2", - "1142: swap", - "1143: box_put", - "1146: bytec 5", - "1147: box_del", - "1148: pop", - "1149: bytec 5", - "1150: frame_dig -2", - "1151: box_put", - "1154: bytec 4", - "1155: box_del", - "1156: pop", - "1157: bytec 4", - "1158: frame_dig -1", - "1159: box_put", - "1162: frame_dig -2", - "1163: extract 2 0", - "1164: bytec 12", - "1165: box_del", - "1166: pop", - "1167: bytec 12", - "1168: swap", - "1169: box_put", - "1172: bytec 5", - "1173: box_get", - "1174: assert", - "1177: bytec 5", - "1178: box_get", - "1179: assert", - "1180: intc_1", - "1181: extract_uint16", - "1182: swap", - "1183: intc_1", - "1184: extract_uint16", - "1185: ==", - "1190: assert", - "1193: bytec_2", - "1194: box_get", - "1195: swap", - "1196: btoi", - "1197: swap", - "1198: assert", - "1199: pushint 3", - "1200: +", - "1201: itob", - "1202: bytec_2", - "1203: swap", - "1204: box_put", - "1205: retsub" + "1092: set_box_example:", + "1102: proto 3 0", + "1105: frame_dig -3", + "1106: itob", + "1107: bytec_2", + "1108: swap", + "1109: box_put", + "1112: bytec 5", + "1113: box_del", + "1114: pop", + "1115: bytec 5", + "1116: frame_dig -2", + "1117: box_put", + "1120: bytec 4", + "1121: box_del", + "1122: pop", + "1123: bytec 4", + "1124: frame_dig -1", + "1125: box_put", + "1128: frame_dig -2", + "1129: extract 2 0", + "1130: bytec 12", + "1131: box_del", + "1132: pop", + "1133: bytec 12", + "1134: swap", + "1135: box_put", + "1138: bytec 5", + "1139: box_get", + "1140: assert", + "1143: bytec 5", + "1144: box_get", + "1145: assert", + "1146: intc_1", + "1147: extract_uint16", + "1148: swap", + "1149: intc_1", + "1150: extract_uint16", + "1151: ==", + "1156: assert", + "1159: bytec_2", + "1160: box_get", + "1161: swap", + "1162: btoi", + "1163: swap", + "1164: assert", + "1165: pushint 3", + "1166: +", + "1167: itob", + "1168: bytec_2", + "1169: swap", + "1170: box_put", + "1171: retsub" ], [ "379: intc_0", @@ -3627,46 +3597,45 @@ "356: callsub delete_box" ], [ - "1209: delete_box:", - "1214: proto 0 0", - "1217: bytec_2", - "1218: box_del", - "1219: pop", - "1222: bytec 5", - "1223: box_del", - "1224: pop", - "1227: bytec 4", - "1228: box_del", - "1229: pop", - "1232: bytec_2", - "1233: box_get", - "1234: swap", - "1235: btoi", - "1236: pushint 42", - "1237: swap", - "1238: uncover 2", - "1239: select", - "1240: pushint 42", - "1241: ==", - "1242: assert", - "1245: bytec 5", - "1246: box_get", - "1247: bytec 13", - "1248: cover 2", - "1249: select", - "1250: extract 2 0", - "1251: pushbytes 0x3432", - "1252: ==", - "1257: assert", - "1260: bytec 4", - "1261: box_get", - "1262: bytec 13", - "1263: cover 2", - "1264: select", - "1265: bytec 13", - "1266: ==", - "1267: assert", - "1268: retsub" + "1175: delete_box:", + "1178: bytec_2", + "1179: box_del", + "1180: pop", + "1183: bytec 5", + "1184: box_del", + "1185: pop", + "1188: bytec 4", + "1189: box_del", + "1190: pop", + "1193: bytec_2", + "1194: box_get", + "1195: swap", + "1196: btoi", + "1197: pushint 42", + "1198: swap", + "1199: uncover 2", + "1200: select", + "1201: pushint 42", + "1202: ==", + "1203: assert", + "1206: bytec 5", + "1207: box_get", + "1208: bytec 13", + "1209: cover 2", + "1210: select", + "1211: extract 2 0", + "1212: pushbytes 0x3432", + "1213: ==", + "1218: assert", + "1221: bytec 4", + "1222: box_get", + "1223: bytec 13", + "1224: cover 2", + "1225: select", + "1226: bytec 13", + "1227: ==", + "1228: assert", + "1229: retsub" ], [ "357: intc_0", @@ -3705,13 +3674,13 @@ "343: callsub delete_box_map" ], [ - "1272: delete_box_map:", - "1276: proto 1 0", - "1279: frame_dig -1", - "1280: itob", - "1281: box_del", - "1282: pop", - "1283: retsub" + "1233: delete_box_map:", + "1237: proto 1 0", + "1240: frame_dig -1", + "1241: itob", + "1242: box_del", + "1243: pop", + "1244: retsub" ], [ "344: intc_0", @@ -3748,27 +3717,26 @@ "325: callsub delete_box_ref" ], [ - "1287: delete_box_ref:", - "1291: proto 0 0", - "1294: bytec 14", - "1295: intc_2", - "1296: box_create", - "1297: pop", - "1300: bytec 14", - "1301: box_len", - "1302: bury 1", - "1303: assert", - "1306: bytec 14", - "1307: box_del", - "1308: pop", - "1311: bytec_0", - "1314: box_get", - "1317: !", - "1318: assert", - "1321: pushbytes 0x", - "1322: ==", - "1323: assert", - "1324: retsub" + "1248: delete_box_ref:", + "1251: bytec 14", + "1252: intc_2", + "1253: box_create", + "1254: pop", + "1257: bytec 14", + "1258: box_len", + "1259: bury 1", + "1260: assert", + "1263: bytec 14", + "1264: box_del", + "1265: pop", + "1268: bytec_0", + "1271: box_get", + "1274: !", + "1275: assert", + "1278: pushbytes 0x", + "1279: ==", + "1280: assert", + "1281: retsub" ], [ "326: intc_0", @@ -3805,19 +3773,19 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1346: intc_1", - "1347: swap", - "1348: retsub" + "1303: intc_1", + "1304: swap", + "1305: retsub" ], [ "309: itob", @@ -3859,22 +3827,22 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1350: box_map_length_after_if_else@2:", - "1353: frame_dig 0", - "1354: box_len", - "1355: assert", - "1356: swap", - "1357: retsub" + "1307: box_map_length_after_if_else@2:", + "1310: frame_dig 0", + "1311: box_len", + "1312: assert", + "1313: swap", + "1314: retsub" ], [ "309: itob", @@ -3916,16 +3884,15 @@ "290: callsub length_box_ref" ], [ - "1361: length_box_ref:", - "1365: proto 0 1", - "1368: bytec_0", - "1371: intc_2", - "1372: box_create", - "1373: assert", - "1376: bytec_0", - "1379: box_len", - "1380: assert", - "1381: retsub" + "1318: length_box_ref:", + "1321: bytec_0", + "1324: intc_2", + "1325: box_create", + "1326: assert", + "1329: bytec_0", + "1332: box_len", + "1333: assert", + "1334: retsub" ], [ "291: itob", @@ -3967,28 +3934,27 @@ "270: callsub box_map_struct_length" ], [ - "1385: box_map_struct_length:", - "1389: proto 0 1", - "1392: bytec 7", - "1393: box_del", - "1394: pop", - "1395: bytec 7", - "1398: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "1401: box_put", - "1404: bytec 7", - "1405: box_len", - "1406: assert", - "1407: pushint 28", - "1408: ==", - "1409: assert", - "1412: bytec 7", - "1413: box_len", - "1414: assert", - "1415: pushint 28", - "1416: ==", - "1417: assert", - "1420: intc_0", - "1421: retsub" + "1338: box_map_struct_length:", + "1341: bytec 7", + "1342: box_del", + "1343: pop", + "1344: bytec 7", + "1347: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "1350: box_put", + "1353: bytec 7", + "1354: box_len", + "1355: assert", + "1356: pushint 28", + "1357: ==", + "1358: assert", + "1361: bytec 7", + "1362: box_len", + "1363: assert", + "1364: pushint 28", + "1365: ==", + "1366: assert", + "1369: intc_0", + "1370: retsub" ], [ "271: bytec_3", @@ -4033,28 +3999,27 @@ "258: callsub box_map_length_example" ], [ - "1425: box_map_length_example:", - "1430: proto 0 0", - "1433: intc_1", - "1436: itob", - "1437: dup", - "1438: box_del", - "1439: pop", - "1440: dup", - "1443: pushbytes \"Hmmmmm\"", - "1446: box_put", - "1449: dup", - "1450: box_len", - "1451: assert", - "1452: pushint 6", - "1453: ==", - "1454: assert", - "1457: box_len", - "1458: assert", - "1459: pushint 6", - "1460: ==", - "1461: assert", - "1462: retsub" + "1374: box_map_length_example:", + "1377: intc_1", + "1380: itob", + "1381: dup", + "1382: box_del", + "1383: pop", + "1384: dup", + "1387: pushbytes \"Hmmmmm\"", + "1390: box_put", + "1393: dup", + "1394: box_len", + "1395: assert", + "1396: pushint 6", + "1397: ==", + "1398: assert", + "1401: box_len", + "1402: assert", + "1403: pushint 6", + "1404: ==", + "1405: assert", + "1406: retsub" ], [ "259: intc_0", @@ -4091,49 +4056,48 @@ "245: callsub length_box_ref_example" ], [ - "1466: length_box_ref_example:", - "1470: proto 0 0", - "1473: bytec_0", - "1476: intc_2", - "1477: box_create", - "1478: assert", - "1481: bytec_0", - "1484: box_len", - "1485: assert", - "1486: intc_3", - "1487: ==", - "1488: assert", - "1491: bytec_0", - "1494: intc_2", - "1495: box_create", - "1496: assert", - "1499: bytec_0", - "1502: box_len", - "1503: assert", - "1504: intc_3", - "1505: ==", - "1506: assert", - "1509: bytec_0", - "1512: intc_2", - "1513: box_create", - "1514: assert", - "1517: bytec_0", - "1520: box_len", - "1521: assert", - "1522: intc_3", - "1523: ==", - "1524: assert", - "1527: bytec_0", - "1530: intc_2", - "1531: box_create", - "1532: assert", - "1535: bytec_0", - "1538: box_len", - "1539: assert", - "1540: intc_3", - "1541: ==", - "1542: assert", - "1543: retsub" + "1410: length_box_ref_example:", + "1413: bytec_0", + "1416: intc_2", + "1417: box_create", + "1418: assert", + "1421: bytec_0", + "1424: box_len", + "1425: assert", + "1426: intc_3", + "1427: ==", + "1428: assert", + "1431: bytec_0", + "1434: intc_2", + "1435: box_create", + "1436: assert", + "1439: bytec_0", + "1442: box_len", + "1443: assert", + "1444: intc_3", + "1445: ==", + "1446: assert", + "1449: bytec_0", + "1452: intc_2", + "1453: box_create", + "1454: assert", + "1457: bytec_0", + "1460: box_len", + "1461: assert", + "1462: intc_3", + "1463: ==", + "1464: assert", + "1467: bytec_0", + "1470: intc_2", + "1471: box_create", + "1472: assert", + "1475: bytec_0", + "1478: box_len", + "1479: assert", + "1480: intc_3", + "1481: ==", + "1482: assert", + "1483: retsub" ], [ "246: intc_0", @@ -4170,39 +4134,38 @@ "233: callsub extract_box_ref" ], [ - "1547: extract_box_ref:", - "1552: proto 0 0", - "1555: bytec_0", - "1558: intc_2", - "1559: box_create", - "1560: assert", - "1563: txn Sender", - "1566: global CurrentApplicationAddress", - "1569: bytec_0", - "1572: intc_1", - "1573: dig 3", - "1574: box_replace", - "1577: bytec_0", - "1580: intc_1", - "1581: dup", - "1582: dig 3", - "1583: UNSUPPORTED box_splice", - "1586: bytec_0", - "1589: intc_3", - "1592: bytec 8", - "1595: box_replace", - "1598: bytec_0", - "1601: intc_1", - "1602: pushint 69", - "1603: box_extract", - "1606: swap", - "1607: uncover 2", - "1608: concat", - "1611: bytec 8", - "1614: concat", - "1615: ==", - "1616: assert", - "1617: retsub" + "1487: extract_box_ref:", + "1490: bytec_0", + "1493: intc_2", + "1494: box_create", + "1495: assert", + "1498: txn Sender", + "1501: global CurrentApplicationAddress", + "1504: bytec_0", + "1507: intc_1", + "1508: dig 3", + "1509: box_replace", + "1512: bytec_0", + "1515: intc_1", + "1516: dup", + "1517: dig 3", + "1518: UNSUPPORTED box_splice", + "1521: bytec_0", + "1524: intc_3", + "1527: bytec 8", + "1530: box_replace", + "1533: bytec_0", + "1536: intc_1", + "1537: pushint 69", + "1538: box_extract", + "1541: swap", + "1542: uncover 2", + "1543: concat", + "1546: bytec 8", + "1549: concat", + "1550: ==", + "1551: assert", + "1552: retsub" ], [ "234: intc_0", @@ -4239,60 +4202,59 @@ "220: callsub manipulate_box_ref" ], [ - "1621: manipulate_box_ref:", - "1626: proto 0 0", - "1629: bytec_0", - "1632: intc_2", - "1633: box_create", - "1634: assert", - "1637: bytec_0", - "1640: box_len", - "1641: bury 1", - "1642: assert", - "1646: txn Sender", - "1649: global CurrentApplicationAddress", - "1652: bytec_0", - "1655: intc_1", - "1656: dig 3", - "1657: box_replace", - "1660: bytec_0", - "1663: intc_1", - "1664: dup", - "1665: dig 3", - "1666: UNSUPPORTED box_splice", - "1669: bytec_0", - "1672: intc_3", - "1675: bytec 8", - "1678: box_replace", - "1681: bytec_0", - "1684: intc_1", - "1685: pushint 69", - "1686: box_extract", - "1689: dig 1", - "1690: dig 3", - "1691: concat", - "1694: bytec 8", - "1697: concat", - "1698: ==", - "1699: assert", - "1702: bytec_0", - "1705: box_del", - "1706: assert", - "1709: concat", - "1712: bytec_0", - "1715: swap", - "1716: box_put", - "1719: bytec_0", - "1722: box_len", - "1723: bury 1", - "1724: assert", - "1727: bytec_0", - "1730: box_len", - "1731: assert", - "1732: intc_3", - "1733: ==", - "1734: assert", - "1735: retsub" + "1556: manipulate_box_ref:", + "1559: bytec_0", + "1562: intc_2", + "1563: box_create", + "1564: assert", + "1567: bytec_0", + "1570: box_len", + "1571: bury 1", + "1572: assert", + "1576: txn Sender", + "1579: global CurrentApplicationAddress", + "1582: bytec_0", + "1585: intc_1", + "1586: dig 3", + "1587: box_replace", + "1590: bytec_0", + "1593: intc_1", + "1594: dup", + "1595: dig 3", + "1596: UNSUPPORTED box_splice", + "1599: bytec_0", + "1602: intc_3", + "1605: bytec 8", + "1608: box_replace", + "1611: bytec_0", + "1614: intc_1", + "1615: pushint 69", + "1616: box_extract", + "1619: dig 1", + "1620: dig 3", + "1621: concat", + "1624: bytec 8", + "1627: concat", + "1628: ==", + "1629: assert", + "1632: bytec_0", + "1635: box_del", + "1636: assert", + "1639: concat", + "1642: bytec_0", + "1645: swap", + "1646: box_put", + "1649: bytec_0", + "1652: box_len", + "1653: bury 1", + "1654: assert", + "1657: bytec_0", + "1660: box_len", + "1661: assert", + "1662: intc_3", + "1663: ==", + "1664: assert", + "1665: retsub" ], [ "221: intc_0", @@ -4329,18 +4291,17 @@ "207: callsub value_box" ], [ - "1739: value_box:", - "1744: proto 0 0", - "1747: bytec_2", - "1748: box_get", - "1749: swap", - "1750: btoi", - "1751: swap", - "1752: assert", - "1753: pushint 10", - "1754: ==", - "1755: assert", - "1756: retsub" + "1669: value_box:", + "1672: bytec_2", + "1673: box_get", + "1674: swap", + "1675: btoi", + "1676: swap", + "1677: assert", + "1678: pushint 10", + "1679: ==", + "1680: assert", + "1681: retsub" ], [ "208: intc_0", @@ -4377,12 +4338,11 @@ "186: callsub exist_box" ], [ - "1760: exist_box:", - "1764: proto 0 1", - "1767: bytec_2", - "1768: box_len", - "1769: bury 1", - "1770: retsub" + "1685: exist_box:", + "1688: bytec_2", + "1689: box_len", + "1690: bury 1", + "1691: retsub" ], [ "187: bytec_3", @@ -4427,18 +4387,17 @@ "145: callsub exist_box_example" ], [ - "1774: exist_box_example:", - "1778: proto 0 3", - "1781: bytec 5", - "1782: box_len", - "1783: bury 1", - "1784: bytec 4", - "1785: box_len", - "1786: bury 1", - "1787: bytec 12", - "1788: box_len", - "1789: bury 1", - "1790: retsub" + "1695: exist_box_example:", + "1698: bytec 5", + "1699: box_len", + "1700: bury 1", + "1701: bytec 4", + "1702: box_len", + "1703: bury 1", + "1704: bytec 12", + "1705: box_len", + "1706: bury 1", + "1707: retsub" ], [ "146: bytec_3", @@ -4504,68 +4463,67 @@ "133: callsub slice_box" ], [ - "1794: slice_box:", - "1798: proto 0 0", - "1801: bytec 9", - "1804: box_del", - "1805: pop", - "1808: bytec 9", - "1811: pushbytes 0x54657374696e672074657374696e6720313233", - "1812: box_put", - "1815: bytec 9", - "1818: box_len", - "1819: pop", - "1820: dup", - "1821: intc_1", - "1822: dig 2", - "1823: select", - "1824: pushint 7", - "1825: dig 2", - "1826: <", - "1827: uncover 2", - "1828: pushint 7", - "1829: uncover 2", - "1830: select", - "1831: dig 1", - "1832: -", - "1835: bytec 9", - "1838: cover 2", - "1839: box_extract", - "1840: pushbytes 0x54657374696e67", - "1841: ==", - "1842: assert", - "1845: bytec 4", - "1846: box_del", - "1847: pop", - "1848: bytec 4", - "1849: pushbytes 0x000548656c6c6f", - "1850: box_put", - "1853: bytec 4", - "1854: box_len", - "1855: pop", - "1856: pushint 2", - "1857: dig 1", - "1858: <", - "1859: dig 1", - "1860: pushint 2", - "1861: uncover 2", - "1862: select", - "1863: pushint 10", - "1864: dig 2", - "1865: <", - "1866: uncover 2", - "1867: pushint 10", - "1868: uncover 2", - "1869: select", - "1870: dig 1", - "1871: -", - "1872: bytec 4", - "1873: cover 2", - "1874: box_extract", - "1875: pushbytes 0x48656c6c6f", - "1876: ==", - "1877: assert", - "1878: retsub" + "1711: slice_box:", + "1714: bytec 9", + "1717: box_del", + "1718: pop", + "1721: bytec 9", + "1724: pushbytes 0x54657374696e672074657374696e6720313233", + "1725: box_put", + "1728: bytec 9", + "1731: box_len", + "1732: pop", + "1733: dup", + "1734: intc_1", + "1735: dig 2", + "1736: select", + "1737: pushint 7", + "1738: dig 2", + "1739: <", + "1740: uncover 2", + "1741: pushint 7", + "1742: uncover 2", + "1743: select", + "1744: dig 1", + "1745: -", + "1748: bytec 9", + "1751: cover 2", + "1752: box_extract", + "1753: pushbytes 0x54657374696e67", + "1754: ==", + "1755: assert", + "1758: bytec 4", + "1759: box_del", + "1760: pop", + "1761: bytec 4", + "1762: pushbytes 0x000548656c6c6f", + "1763: box_put", + "1766: bytec 4", + "1767: box_len", + "1768: pop", + "1769: pushint 2", + "1770: dig 1", + "1771: <", + "1772: dig 1", + "1773: pushint 2", + "1774: uncover 2", + "1775: select", + "1776: pushint 10", + "1777: dig 2", + "1778: <", + "1779: uncover 2", + "1780: pushint 10", + "1781: uncover 2", + "1782: select", + "1783: dig 1", + "1784: -", + "1785: bytec 4", + "1786: cover 2", + "1787: box_extract", + "1788: pushbytes 0x48656c6c6f", + "1789: ==", + "1790: assert", + "1791: retsub" ], [ "134: intc_0", @@ -4602,40 +4560,39 @@ "121: callsub arc4_box" ], [ - "1882: arc4_box:", - "1886: proto 0 0", - "1889: bytec 6", - "1894: pushbytes 0x00010203", - "1895: box_put", - "1898: bytec 6", - "1901: box_get", - "1902: assert", - "1903: extract 0 1", - "1904: bytec_3", - "1905: b==", - "1906: assert", - "1909: bytec 6", - "1912: box_get", - "1913: assert", - "1914: extract 1 1", - "1915: pushbytes 0x01", - "1916: b==", - "1917: assert", - "1920: bytec 6", - "1923: box_get", - "1924: assert", - "1925: extract 2 1", - "1926: pushbytes 0x02", - "1927: b==", - "1928: assert", - "1931: bytec 6", - "1934: box_get", - "1935: assert", - "1936: extract 3 1", - "1937: pushbytes 0x03", - "1938: b==", - "1939: assert", - "1940: retsub" + "1795: arc4_box:", + "1798: bytec 6", + "1803: pushbytes 0x00010203", + "1804: box_put", + "1807: bytec 6", + "1810: box_get", + "1811: assert", + "1812: extract 0 1", + "1813: bytec_3", + "1814: b==", + "1815: assert", + "1818: bytec 6", + "1821: box_get", + "1822: assert", + "1823: extract 1 1", + "1824: pushbytes 0x01", + "1825: b==", + "1826: assert", + "1829: bytec 6", + "1832: box_get", + "1833: assert", + "1834: extract 2 1", + "1835: pushbytes 0x02", + "1836: b==", + "1837: assert", + "1840: bytec 6", + "1843: box_get", + "1844: assert", + "1845: extract 3 1", + "1846: pushbytes 0x03", + "1847: b==", + "1848: assert", + "1849: retsub" ], [ "122: intc_0", @@ -4705,11 +4662,10 @@ "96: callsub key_box_example" ], [ - "1944: key_box_example:", - "1948: proto 0 0", - "1951: intc_1", - "1952: assert", - "1953: retsub" + "1853: key_box_example:", + "1856: intc_1", + "1857: assert", + "1858: retsub" ], [ "97: intc_0", @@ -4748,13 +4704,13 @@ "76: callsub box_map_exists" ], [ - "1957: box_map_exists:", - "1962: proto 1 1", - "1965: frame_dig -1", - "1966: itob", - "1967: box_len", - "1968: bury 1", - "1969: retsub" + "1862: box_map_exists:", + "1867: proto 1 1", + "1870: frame_dig -1", + "1871: itob", + "1872: box_len", + "1873: bury 1", + "1874: retsub" ], [ "77: bytec_3", @@ -4800,14 +4756,14 @@ "48: callsub box_map_struct_exists" ], [ - "1973: box_map_struct_exists:", - "1977: proto 1 1", - "1980: bytec 11", - "1981: frame_dig -1", - "1982: concat", - "1983: box_len", - "1984: bury 1", - "1985: retsub" + "1878: box_map_struct_exists:", + "1882: proto 1 1", + "1885: bytec 11", + "1886: frame_dig -1", + "1887: concat", + "1888: box_len", + "1889: bury 1", + "1890: retsub" ], [ "49: bytec_3", @@ -5075,14 +5031,13 @@ ], [ "730: get_box:", - "735: proto 0 1", - "738: bytec_2", - "739: box_get", - "740: swap", - "741: btoi", - "742: swap", - "743: assert", - "744: retsub" + "733: bytec_2", + "734: box_get", + "735: swap", + "736: btoi", + "737: swap", + "738: assert", + "739: retsub" ], [ "709: itob", @@ -5126,13 +5081,13 @@ "685: callsub get_item_box_map" ], [ - "748: get_item_box_map:", - "752: proto 1 1", - "755: frame_dig -1", - "756: itob", - "757: box_get", - "758: assert", - "759: retsub" + "743: get_item_box_map:", + "747: proto 1 1", + "750: frame_dig -1", + "751: itob", + "752: box_get", + "753: assert", + "754: retsub" ], [ "686: dup", @@ -5179,15 +5134,14 @@ "657: callsub get_box_map" ], [ - "763: get_box_map:", - "767: proto 0 1", - "770: intc_0", - "773: itob", - "774: box_get", - "775: bytec 10", - "776: cover 2", - "777: select", - "778: retsub" + "758: get_box_map:", + "761: intc_0", + "764: itob", + "765: box_get", + "766: bytec 10", + "767: cover 2", + "768: select", + "769: retsub" ], [ "658: dup", @@ -5234,24 +5188,23 @@ "645: callsub get_box_ref" ], [ - "782: get_box_ref:", - "786: proto 0 0", - "789: bytec_0", - "792: intc_2", - "793: box_create", - "794: assert", - "797: txn Sender", - "800: bytec_0", - "803: box_del", - "804: assert", - "807: bytec_0", - "810: box_get", - "811: dig 2", - "812: cover 2", - "813: select", - "814: ==", - "815: assert", - "816: retsub" + "773: get_box_ref:", + "776: bytec_0", + "779: intc_2", + "780: box_create", + "781: assert", + "784: txn Sender", + "787: bytec_0", + "790: box_del", + "791: assert", + "794: bytec_0", + "797: box_get", + "798: dig 2", + "799: cover 2", + "800: select", + "801: ==", + "802: assert", + "803: retsub" ], [ "646: intc_0", @@ -5288,14 +5241,13 @@ "622: callsub maybe_box" ], [ - "820: maybe_box:", - "824: proto 0 2", - "827: bytec_2", - "828: box_get", - "829: swap", - "830: btoi", - "833: swap", - "834: retsub" + "807: maybe_box:", + "810: bytec_2", + "811: box_get", + "812: swap", + "813: btoi", + "816: swap", + "817: retsub" ], [ "623: swap", @@ -5343,27 +5295,27 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "858: pushbytes \"\"", - "859: frame_bury 1" + "841: pushbytes \"\"", + "842: frame_bury 1" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -5419,23 +5371,23 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -5491,30 +5443,30 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "899: pushbytes 0x", - "900: frame_bury 1" + "882: pushbytes 0x", + "883: frame_bury 1" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -5570,26 +5522,26 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -5645,22 +5597,21 @@ "522: callsub get_box_example" ], [ - "913: get_box_example:", - "918: proto 0 3", - "921: bytec_2", - "922: box_get", - "923: swap", - "924: btoi", - "925: swap", - "926: assert", - "929: bytec 5", - "930: box_get", - "931: assert", - "932: extract 2 0", - "935: bytec 4", - "936: box_get", - "937: assert", - "944: retsub" + "896: get_box_example:", + "899: bytec_2", + "900: box_get", + "901: swap", + "902: btoi", + "903: swap", + "904: assert", + "907: bytec 5", + "908: box_get", + "909: assert", + "910: extract 2 0", + "913: bytec 4", + "914: box_get", + "915: assert", + "922: retsub" ], [ "523: uncover 2", @@ -5723,19 +5674,18 @@ "501: callsub get_box_map_example" ], [ - "948: get_box_map_example:", - "952: proto 0 1", - "955: intc_0", - "958: itob", - "959: box_get", - "960: bytec 10", - "961: cover 2", - "962: select", - "963: bytec 10", - "964: ==", - "965: assert", - "968: intc_0", - "969: retsub" + "926: get_box_map_example:", + "929: intc_0", + "932: itob", + "933: box_get", + "934: bytec 10", + "935: cover 2", + "936: select", + "937: bytec 10", + "938: ==", + "939: assert", + "942: intc_0", + "943: retsub" ], [ "502: bytec_3", @@ -5780,32 +5730,31 @@ "489: callsub maybe_box_example" ], [ - "973: maybe_box_example:", - "977: proto 0 0", - "980: bytec_2", - "981: box_del", - "982: pop", - "985: bytec_2", - "986: box_get", - "987: swap", - "988: btoi", - "989: pushint 42", - "990: swap", - "991: uncover 2", - "992: select", - "993: pushint 42", - "994: ==", - "995: assert", - "998: bytec_2", - "999: box_get", - "1000: swap", - "1001: btoi", - "1004: swap", - "1005: !", - "1006: assert", - "1009: !", - "1010: assert", - "1011: retsub" + "947: maybe_box_example:", + "950: bytec_2", + "951: box_del", + "952: pop", + "955: bytec_2", + "956: box_get", + "957: swap", + "958: btoi", + "959: pushint 42", + "960: swap", + "961: uncover 2", + "962: select", + "963: pushint 42", + "964: ==", + "965: assert", + "968: bytec_2", + "969: box_get", + "970: swap", + "971: btoi", + "974: swap", + "975: !", + "976: assert", + "979: !", + "980: assert", + "981: retsub" ], [ "490: intc_0", @@ -5842,20 +5791,19 @@ "477: callsub maybe_box_map_example" ], [ - "1015: maybe_box_map_example:", - "1019: proto 0 0", - "1022: intc_0", - "1025: itob", - "1026: box_get", - "1027: bury 1", - "1030: !", - "1031: assert", - "1034: intc_1", - "1037: itob", - "1038: box_len", - "1039: bury 1", - "1040: assert", - "1041: retsub" + "985: maybe_box_map_example:", + "988: intc_0", + "991: itob", + "992: box_get", + "993: bury 1", + "996: !", + "997: assert", + "1000: intc_1", + "1003: itob", + "1004: box_len", + "1005: bury 1", + "1006: assert", + "1007: retsub" ], [ "478: intc_0", @@ -5893,14 +5841,14 @@ "461: callsub get_box_map_struct" ], [ - "1045: get_box_map_struct:", - "1049: proto 1 1", - "1052: bytec 11", - "1053: frame_dig -1", - "1054: concat", - "1055: box_get", - "1056: assert", - "1057: retsub" + "1011: get_box_map_struct:", + "1015: proto 1 1", + "1018: bytec 11", + "1019: frame_dig -1", + "1020: concat", + "1021: box_get", + "1022: assert", + "1023: retsub" ], [ "462: bytec_1", @@ -5943,14 +5891,14 @@ "444: callsub set_box" ], [ - "1061: set_box:", - "1066: proto 1 0", - "1069: frame_dig -1", - "1070: itob", - "1071: bytec_2", - "1072: swap", - "1073: box_put", - "1074: retsub" + "1027: set_box:", + "1032: proto 1 0", + "1035: frame_dig -1", + "1036: itob", + "1037: bytec_2", + "1038: swap", + "1039: box_put", + "1040: retsub" ], [ "445: intc_0", @@ -5991,16 +5939,16 @@ "424: callsub set_box_map" ], [ - "1078: set_box_map:", - "1082: proto 2 0", - "1085: frame_dig -2", - "1086: itob", - "1087: dup", - "1088: box_del", - "1089: pop", - "1090: frame_dig -1", - "1091: box_put", - "1092: retsub" + "1044: set_box_map:", + "1048: proto 2 0", + "1051: frame_dig -2", + "1052: itob", + "1053: dup", + "1054: box_del", + "1055: pop", + "1056: frame_dig -1", + "1057: box_put", + "1058: retsub" ], [ "425: intc_0", @@ -6039,24 +5987,24 @@ "396: callsub set_box_map_struct" ], [ - "1096: set_box_map_struct:", - "1100: proto 2 1", - "1103: bytec 11", - "1104: frame_dig -2", - "1105: concat", - "1106: dup", - "1107: box_del", - "1108: pop", - "1109: dup", - "1110: frame_dig -1", - "1111: box_put", - "1114: box_get", - "1115: assert", - "1116: frame_dig -1", - "1117: ==", - "1118: assert", - "1121: intc_0", - "1122: retsub" + "1062: set_box_map_struct:", + "1066: proto 2 1", + "1069: bytec 11", + "1070: frame_dig -2", + "1071: concat", + "1072: dup", + "1073: box_del", + "1074: pop", + "1075: dup", + "1076: frame_dig -1", + "1077: box_put", + "1080: box_get", + "1081: assert", + "1082: frame_dig -1", + "1083: ==", + "1084: assert", + "1087: intc_0", + "1088: retsub" ], [ "397: bytec_3", @@ -6105,59 +6053,59 @@ "378: callsub set_box_example" ], [ - "1126: set_box_example:", - "1136: proto 3 0", - "1139: frame_dig -3", - "1140: itob", - "1141: bytec_2", - "1142: swap", - "1143: box_put", - "1146: bytec 5", - "1147: box_del", - "1148: pop", - "1149: bytec 5", - "1150: frame_dig -2", - "1151: box_put", - "1154: bytec 4", - "1155: box_del", - "1156: pop", - "1157: bytec 4", - "1158: frame_dig -1", - "1159: box_put", - "1162: frame_dig -2", - "1163: extract 2 0", - "1164: bytec 12", - "1165: box_del", - "1166: pop", - "1167: bytec 12", - "1168: swap", - "1169: box_put", - "1172: bytec 5", - "1173: box_get", - "1174: assert", - "1177: bytec 5", - "1178: box_get", - "1179: assert", - "1180: intc_1", - "1181: extract_uint16", - "1182: swap", - "1183: intc_1", - "1184: extract_uint16", - "1185: ==", - "1190: assert", - "1193: bytec_2", - "1194: box_get", - "1195: swap", - "1196: btoi", - "1197: swap", - "1198: assert", - "1199: pushint 3", - "1200: +", - "1201: itob", - "1202: bytec_2", - "1203: swap", - "1204: box_put", - "1205: retsub" + "1092: set_box_example:", + "1102: proto 3 0", + "1105: frame_dig -3", + "1106: itob", + "1107: bytec_2", + "1108: swap", + "1109: box_put", + "1112: bytec 5", + "1113: box_del", + "1114: pop", + "1115: bytec 5", + "1116: frame_dig -2", + "1117: box_put", + "1120: bytec 4", + "1121: box_del", + "1122: pop", + "1123: bytec 4", + "1124: frame_dig -1", + "1125: box_put", + "1128: frame_dig -2", + "1129: extract 2 0", + "1130: bytec 12", + "1131: box_del", + "1132: pop", + "1133: bytec 12", + "1134: swap", + "1135: box_put", + "1138: bytec 5", + "1139: box_get", + "1140: assert", + "1143: bytec 5", + "1144: box_get", + "1145: assert", + "1146: intc_1", + "1147: extract_uint16", + "1148: swap", + "1149: intc_1", + "1150: extract_uint16", + "1151: ==", + "1156: assert", + "1159: bytec_2", + "1160: box_get", + "1161: swap", + "1162: btoi", + "1163: swap", + "1164: assert", + "1165: pushint 3", + "1166: +", + "1167: itob", + "1168: bytec_2", + "1169: swap", + "1170: box_put", + "1171: retsub" ], [ "379: intc_0", @@ -6194,46 +6142,45 @@ "356: callsub delete_box" ], [ - "1209: delete_box:", - "1214: proto 0 0", - "1217: bytec_2", - "1218: box_del", - "1219: pop", - "1222: bytec 5", - "1223: box_del", - "1224: pop", - "1227: bytec 4", - "1228: box_del", - "1229: pop", - "1232: bytec_2", - "1233: box_get", - "1234: swap", - "1235: btoi", - "1236: pushint 42", - "1237: swap", - "1238: uncover 2", - "1239: select", - "1240: pushint 42", - "1241: ==", - "1242: assert", - "1245: bytec 5", - "1246: box_get", - "1247: bytec 13", - "1248: cover 2", - "1249: select", - "1250: extract 2 0", - "1251: pushbytes 0x3432", - "1252: ==", - "1257: assert", - "1260: bytec 4", - "1261: box_get", - "1262: bytec 13", - "1263: cover 2", - "1264: select", - "1265: bytec 13", - "1266: ==", - "1267: assert", - "1268: retsub" + "1175: delete_box:", + "1178: bytec_2", + "1179: box_del", + "1180: pop", + "1183: bytec 5", + "1184: box_del", + "1185: pop", + "1188: bytec 4", + "1189: box_del", + "1190: pop", + "1193: bytec_2", + "1194: box_get", + "1195: swap", + "1196: btoi", + "1197: pushint 42", + "1198: swap", + "1199: uncover 2", + "1200: select", + "1201: pushint 42", + "1202: ==", + "1203: assert", + "1206: bytec 5", + "1207: box_get", + "1208: bytec 13", + "1209: cover 2", + "1210: select", + "1211: extract 2 0", + "1212: pushbytes 0x3432", + "1213: ==", + "1218: assert", + "1221: bytec 4", + "1222: box_get", + "1223: bytec 13", + "1224: cover 2", + "1225: select", + "1226: bytec 13", + "1227: ==", + "1228: assert", + "1229: retsub" ], [ "357: intc_0", @@ -6272,13 +6219,13 @@ "343: callsub delete_box_map" ], [ - "1272: delete_box_map:", - "1276: proto 1 0", - "1279: frame_dig -1", - "1280: itob", - "1281: box_del", - "1282: pop", - "1283: retsub" + "1233: delete_box_map:", + "1237: proto 1 0", + "1240: frame_dig -1", + "1241: itob", + "1242: box_del", + "1243: pop", + "1244: retsub" ], [ "344: intc_0", @@ -6315,27 +6262,26 @@ "325: callsub delete_box_ref" ], [ - "1287: delete_box_ref:", - "1291: proto 0 0", - "1294: bytec 14", - "1295: intc_2", - "1296: box_create", - "1297: pop", - "1300: bytec 14", - "1301: box_len", - "1302: bury 1", - "1303: assert", - "1306: bytec 14", - "1307: box_del", - "1308: pop", - "1311: bytec_0", - "1314: box_get", - "1317: !", - "1318: assert", - "1321: pushbytes 0x", - "1322: ==", - "1323: assert", - "1324: retsub" + "1248: delete_box_ref:", + "1251: bytec 14", + "1252: intc_2", + "1253: box_create", + "1254: pop", + "1257: bytec 14", + "1258: box_len", + "1259: bury 1", + "1260: assert", + "1263: bytec 14", + "1264: box_del", + "1265: pop", + "1268: bytec_0", + "1271: box_get", + "1274: !", + "1275: assert", + "1278: pushbytes 0x", + "1279: ==", + "1280: assert", + "1281: retsub" ], [ "326: intc_0", @@ -6372,19 +6318,19 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1346: intc_1", - "1347: swap", - "1348: retsub" + "1303: intc_1", + "1304: swap", + "1305: retsub" ], [ "309: itob", @@ -6426,22 +6372,22 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1350: box_map_length_after_if_else@2:", - "1353: frame_dig 0", - "1354: box_len", - "1355: assert", - "1356: swap", - "1357: retsub" + "1307: box_map_length_after_if_else@2:", + "1310: frame_dig 0", + "1311: box_len", + "1312: assert", + "1313: swap", + "1314: retsub" ], [ "309: itob", @@ -6483,16 +6429,15 @@ "290: callsub length_box_ref" ], [ - "1361: length_box_ref:", - "1365: proto 0 1", - "1368: bytec_0", - "1371: intc_2", - "1372: box_create", - "1373: assert", - "1376: bytec_0", - "1379: box_len", - "1380: assert", - "1381: retsub" + "1318: length_box_ref:", + "1321: bytec_0", + "1324: intc_2", + "1325: box_create", + "1326: assert", + "1329: bytec_0", + "1332: box_len", + "1333: assert", + "1334: retsub" ], [ "291: itob", @@ -6534,28 +6479,27 @@ "270: callsub box_map_struct_length" ], [ - "1385: box_map_struct_length:", - "1389: proto 0 1", - "1392: bytec 7", - "1393: box_del", - "1394: pop", - "1395: bytec 7", - "1398: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "1401: box_put", - "1404: bytec 7", - "1405: box_len", - "1406: assert", - "1407: pushint 28", - "1408: ==", - "1409: assert", - "1412: bytec 7", - "1413: box_len", - "1414: assert", - "1415: pushint 28", - "1416: ==", - "1417: assert", - "1420: intc_0", - "1421: retsub" + "1338: box_map_struct_length:", + "1341: bytec 7", + "1342: box_del", + "1343: pop", + "1344: bytec 7", + "1347: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "1350: box_put", + "1353: bytec 7", + "1354: box_len", + "1355: assert", + "1356: pushint 28", + "1357: ==", + "1358: assert", + "1361: bytec 7", + "1362: box_len", + "1363: assert", + "1364: pushint 28", + "1365: ==", + "1366: assert", + "1369: intc_0", + "1370: retsub" ], [ "271: bytec_3", @@ -6600,28 +6544,27 @@ "258: callsub box_map_length_example" ], [ - "1425: box_map_length_example:", - "1430: proto 0 0", - "1433: intc_1", - "1436: itob", - "1437: dup", - "1438: box_del", - "1439: pop", - "1440: dup", - "1443: pushbytes \"Hmmmmm\"", - "1446: box_put", - "1449: dup", - "1450: box_len", - "1451: assert", - "1452: pushint 6", - "1453: ==", - "1454: assert", - "1457: box_len", - "1458: assert", - "1459: pushint 6", - "1460: ==", - "1461: assert", - "1462: retsub" + "1374: box_map_length_example:", + "1377: intc_1", + "1380: itob", + "1381: dup", + "1382: box_del", + "1383: pop", + "1384: dup", + "1387: pushbytes \"Hmmmmm\"", + "1390: box_put", + "1393: dup", + "1394: box_len", + "1395: assert", + "1396: pushint 6", + "1397: ==", + "1398: assert", + "1401: box_len", + "1402: assert", + "1403: pushint 6", + "1404: ==", + "1405: assert", + "1406: retsub" ], [ "259: intc_0", @@ -6658,49 +6601,48 @@ "245: callsub length_box_ref_example" ], [ - "1466: length_box_ref_example:", - "1470: proto 0 0", - "1473: bytec_0", - "1476: intc_2", - "1477: box_create", - "1478: assert", - "1481: bytec_0", - "1484: box_len", - "1485: assert", - "1486: intc_3", - "1487: ==", - "1488: assert", - "1491: bytec_0", - "1494: intc_2", - "1495: box_create", - "1496: assert", - "1499: bytec_0", - "1502: box_len", - "1503: assert", - "1504: intc_3", - "1505: ==", - "1506: assert", - "1509: bytec_0", - "1512: intc_2", - "1513: box_create", - "1514: assert", - "1517: bytec_0", - "1520: box_len", - "1521: assert", - "1522: intc_3", - "1523: ==", - "1524: assert", - "1527: bytec_0", - "1530: intc_2", - "1531: box_create", - "1532: assert", - "1535: bytec_0", - "1538: box_len", - "1539: assert", - "1540: intc_3", - "1541: ==", - "1542: assert", - "1543: retsub" + "1410: length_box_ref_example:", + "1413: bytec_0", + "1416: intc_2", + "1417: box_create", + "1418: assert", + "1421: bytec_0", + "1424: box_len", + "1425: assert", + "1426: intc_3", + "1427: ==", + "1428: assert", + "1431: bytec_0", + "1434: intc_2", + "1435: box_create", + "1436: assert", + "1439: bytec_0", + "1442: box_len", + "1443: assert", + "1444: intc_3", + "1445: ==", + "1446: assert", + "1449: bytec_0", + "1452: intc_2", + "1453: box_create", + "1454: assert", + "1457: bytec_0", + "1460: box_len", + "1461: assert", + "1462: intc_3", + "1463: ==", + "1464: assert", + "1467: bytec_0", + "1470: intc_2", + "1471: box_create", + "1472: assert", + "1475: bytec_0", + "1478: box_len", + "1479: assert", + "1480: intc_3", + "1481: ==", + "1482: assert", + "1483: retsub" ], [ "246: intc_0", @@ -6737,39 +6679,38 @@ "233: callsub extract_box_ref" ], [ - "1547: extract_box_ref:", - "1552: proto 0 0", - "1555: bytec_0", - "1558: intc_2", - "1559: box_create", - "1560: assert", - "1563: txn Sender", - "1566: global CurrentApplicationAddress", - "1569: bytec_0", - "1572: intc_1", - "1573: dig 3", - "1574: box_replace", - "1577: bytec_0", - "1580: intc_1", - "1581: dup", - "1582: dig 3", - "1583: UNSUPPORTED box_splice", - "1586: bytec_0", - "1589: intc_3", - "1592: bytec 8", - "1595: box_replace", - "1598: bytec_0", - "1601: intc_1", - "1602: pushint 69", - "1603: box_extract", - "1606: swap", - "1607: uncover 2", - "1608: concat", - "1611: bytec 8", - "1614: concat", - "1615: ==", - "1616: assert", - "1617: retsub" + "1487: extract_box_ref:", + "1490: bytec_0", + "1493: intc_2", + "1494: box_create", + "1495: assert", + "1498: txn Sender", + "1501: global CurrentApplicationAddress", + "1504: bytec_0", + "1507: intc_1", + "1508: dig 3", + "1509: box_replace", + "1512: bytec_0", + "1515: intc_1", + "1516: dup", + "1517: dig 3", + "1518: UNSUPPORTED box_splice", + "1521: bytec_0", + "1524: intc_3", + "1527: bytec 8", + "1530: box_replace", + "1533: bytec_0", + "1536: intc_1", + "1537: pushint 69", + "1538: box_extract", + "1541: swap", + "1542: uncover 2", + "1543: concat", + "1546: bytec 8", + "1549: concat", + "1550: ==", + "1551: assert", + "1552: retsub" ], [ "234: intc_0", @@ -6806,60 +6747,59 @@ "220: callsub manipulate_box_ref" ], [ - "1621: manipulate_box_ref:", - "1626: proto 0 0", - "1629: bytec_0", - "1632: intc_2", - "1633: box_create", - "1634: assert", - "1637: bytec_0", - "1640: box_len", - "1641: bury 1", - "1642: assert", - "1646: txn Sender", - "1649: global CurrentApplicationAddress", - "1652: bytec_0", - "1655: intc_1", - "1656: dig 3", - "1657: box_replace", - "1660: bytec_0", - "1663: intc_1", - "1664: dup", - "1665: dig 3", - "1666: UNSUPPORTED box_splice", - "1669: bytec_0", - "1672: intc_3", - "1675: bytec 8", - "1678: box_replace", - "1681: bytec_0", - "1684: intc_1", - "1685: pushint 69", - "1686: box_extract", - "1689: dig 1", - "1690: dig 3", - "1691: concat", - "1694: bytec 8", - "1697: concat", - "1698: ==", - "1699: assert", - "1702: bytec_0", - "1705: box_del", - "1706: assert", - "1709: concat", - "1712: bytec_0", - "1715: swap", - "1716: box_put", - "1719: bytec_0", - "1722: box_len", - "1723: bury 1", - "1724: assert", - "1727: bytec_0", - "1730: box_len", - "1731: assert", - "1732: intc_3", - "1733: ==", - "1734: assert", - "1735: retsub" + "1556: manipulate_box_ref:", + "1559: bytec_0", + "1562: intc_2", + "1563: box_create", + "1564: assert", + "1567: bytec_0", + "1570: box_len", + "1571: bury 1", + "1572: assert", + "1576: txn Sender", + "1579: global CurrentApplicationAddress", + "1582: bytec_0", + "1585: intc_1", + "1586: dig 3", + "1587: box_replace", + "1590: bytec_0", + "1593: intc_1", + "1594: dup", + "1595: dig 3", + "1596: UNSUPPORTED box_splice", + "1599: bytec_0", + "1602: intc_3", + "1605: bytec 8", + "1608: box_replace", + "1611: bytec_0", + "1614: intc_1", + "1615: pushint 69", + "1616: box_extract", + "1619: dig 1", + "1620: dig 3", + "1621: concat", + "1624: bytec 8", + "1627: concat", + "1628: ==", + "1629: assert", + "1632: bytec_0", + "1635: box_del", + "1636: assert", + "1639: concat", + "1642: bytec_0", + "1645: swap", + "1646: box_put", + "1649: bytec_0", + "1652: box_len", + "1653: bury 1", + "1654: assert", + "1657: bytec_0", + "1660: box_len", + "1661: assert", + "1662: intc_3", + "1663: ==", + "1664: assert", + "1665: retsub" ], [ "221: intc_0", @@ -6896,18 +6836,17 @@ "207: callsub value_box" ], [ - "1739: value_box:", - "1744: proto 0 0", - "1747: bytec_2", - "1748: box_get", - "1749: swap", - "1750: btoi", - "1751: swap", - "1752: assert", - "1753: pushint 10", - "1754: ==", - "1755: assert", - "1756: retsub" + "1669: value_box:", + "1672: bytec_2", + "1673: box_get", + "1674: swap", + "1675: btoi", + "1676: swap", + "1677: assert", + "1678: pushint 10", + "1679: ==", + "1680: assert", + "1681: retsub" ], [ "208: intc_0", @@ -6944,12 +6883,11 @@ "186: callsub exist_box" ], [ - "1760: exist_box:", - "1764: proto 0 1", - "1767: bytec_2", - "1768: box_len", - "1769: bury 1", - "1770: retsub" + "1685: exist_box:", + "1688: bytec_2", + "1689: box_len", + "1690: bury 1", + "1691: retsub" ], [ "187: bytec_3", @@ -6994,18 +6932,17 @@ "145: callsub exist_box_example" ], [ - "1774: exist_box_example:", - "1778: proto 0 3", - "1781: bytec 5", - "1782: box_len", - "1783: bury 1", - "1784: bytec 4", - "1785: box_len", - "1786: bury 1", - "1787: bytec 12", - "1788: box_len", - "1789: bury 1", - "1790: retsub" + "1695: exist_box_example:", + "1698: bytec 5", + "1699: box_len", + "1700: bury 1", + "1701: bytec 4", + "1702: box_len", + "1703: bury 1", + "1704: bytec 12", + "1705: box_len", + "1706: bury 1", + "1707: retsub" ], [ "146: bytec_3", @@ -7071,68 +7008,67 @@ "133: callsub slice_box" ], [ - "1794: slice_box:", - "1798: proto 0 0", - "1801: bytec 9", - "1804: box_del", - "1805: pop", - "1808: bytec 9", - "1811: pushbytes 0x54657374696e672074657374696e6720313233", - "1812: box_put", - "1815: bytec 9", - "1818: box_len", - "1819: pop", - "1820: dup", - "1821: intc_1", - "1822: dig 2", - "1823: select", - "1824: pushint 7", - "1825: dig 2", - "1826: <", - "1827: uncover 2", - "1828: pushint 7", - "1829: uncover 2", - "1830: select", - "1831: dig 1", - "1832: -", - "1835: bytec 9", - "1838: cover 2", - "1839: box_extract", - "1840: pushbytes 0x54657374696e67", - "1841: ==", - "1842: assert", - "1845: bytec 4", - "1846: box_del", - "1847: pop", - "1848: bytec 4", - "1849: pushbytes 0x000548656c6c6f", - "1850: box_put", - "1853: bytec 4", - "1854: box_len", - "1855: pop", - "1856: pushint 2", - "1857: dig 1", - "1858: <", - "1859: dig 1", - "1860: pushint 2", - "1861: uncover 2", - "1862: select", - "1863: pushint 10", - "1864: dig 2", - "1865: <", - "1866: uncover 2", - "1867: pushint 10", - "1868: uncover 2", - "1869: select", - "1870: dig 1", - "1871: -", - "1872: bytec 4", - "1873: cover 2", - "1874: box_extract", - "1875: pushbytes 0x48656c6c6f", - "1876: ==", - "1877: assert", - "1878: retsub" + "1711: slice_box:", + "1714: bytec 9", + "1717: box_del", + "1718: pop", + "1721: bytec 9", + "1724: pushbytes 0x54657374696e672074657374696e6720313233", + "1725: box_put", + "1728: bytec 9", + "1731: box_len", + "1732: pop", + "1733: dup", + "1734: intc_1", + "1735: dig 2", + "1736: select", + "1737: pushint 7", + "1738: dig 2", + "1739: <", + "1740: uncover 2", + "1741: pushint 7", + "1742: uncover 2", + "1743: select", + "1744: dig 1", + "1745: -", + "1748: bytec 9", + "1751: cover 2", + "1752: box_extract", + "1753: pushbytes 0x54657374696e67", + "1754: ==", + "1755: assert", + "1758: bytec 4", + "1759: box_del", + "1760: pop", + "1761: bytec 4", + "1762: pushbytes 0x000548656c6c6f", + "1763: box_put", + "1766: bytec 4", + "1767: box_len", + "1768: pop", + "1769: pushint 2", + "1770: dig 1", + "1771: <", + "1772: dig 1", + "1773: pushint 2", + "1774: uncover 2", + "1775: select", + "1776: pushint 10", + "1777: dig 2", + "1778: <", + "1779: uncover 2", + "1780: pushint 10", + "1781: uncover 2", + "1782: select", + "1783: dig 1", + "1784: -", + "1785: bytec 4", + "1786: cover 2", + "1787: box_extract", + "1788: pushbytes 0x48656c6c6f", + "1789: ==", + "1790: assert", + "1791: retsub" ], [ "134: intc_0", @@ -7169,40 +7105,39 @@ "121: callsub arc4_box" ], [ - "1882: arc4_box:", - "1886: proto 0 0", - "1889: bytec 6", - "1894: pushbytes 0x00010203", - "1895: box_put", - "1898: bytec 6", - "1901: box_get", - "1902: assert", - "1903: extract 0 1", - "1904: bytec_3", - "1905: b==", - "1906: assert", - "1909: bytec 6", - "1912: box_get", - "1913: assert", - "1914: extract 1 1", - "1915: pushbytes 0x01", - "1916: b==", - "1917: assert", - "1920: bytec 6", - "1923: box_get", - "1924: assert", - "1925: extract 2 1", - "1926: pushbytes 0x02", - "1927: b==", - "1928: assert", - "1931: bytec 6", - "1934: box_get", - "1935: assert", - "1936: extract 3 1", - "1937: pushbytes 0x03", - "1938: b==", - "1939: assert", - "1940: retsub" + "1795: arc4_box:", + "1798: bytec 6", + "1803: pushbytes 0x00010203", + "1804: box_put", + "1807: bytec 6", + "1810: box_get", + "1811: assert", + "1812: extract 0 1", + "1813: bytec_3", + "1814: b==", + "1815: assert", + "1818: bytec 6", + "1821: box_get", + "1822: assert", + "1823: extract 1 1", + "1824: pushbytes 0x01", + "1825: b==", + "1826: assert", + "1829: bytec 6", + "1832: box_get", + "1833: assert", + "1834: extract 2 1", + "1835: pushbytes 0x02", + "1836: b==", + "1837: assert", + "1840: bytec 6", + "1843: box_get", + "1844: assert", + "1845: extract 3 1", + "1846: pushbytes 0x03", + "1847: b==", + "1848: assert", + "1849: retsub" ], [ "122: intc_0", @@ -7272,11 +7207,10 @@ "96: callsub key_box_example" ], [ - "1944: key_box_example:", - "1948: proto 0 0", - "1951: intc_1", - "1952: assert", - "1953: retsub" + "1853: key_box_example:", + "1856: intc_1", + "1857: assert", + "1858: retsub" ], [ "97: intc_0", @@ -7315,13 +7249,13 @@ "76: callsub box_map_exists" ], [ - "1957: box_map_exists:", - "1962: proto 1 1", - "1965: frame_dig -1", - "1966: itob", - "1967: box_len", - "1968: bury 1", - "1969: retsub" + "1862: box_map_exists:", + "1867: proto 1 1", + "1870: frame_dig -1", + "1871: itob", + "1872: box_len", + "1873: bury 1", + "1874: retsub" ], [ "77: bytec_3", @@ -7367,14 +7301,14 @@ "48: callsub box_map_struct_exists" ], [ - "1973: box_map_struct_exists:", - "1977: proto 1 1", - "1980: bytec 11", - "1981: frame_dig -1", - "1982: concat", - "1983: box_len", - "1984: bury 1", - "1985: retsub" + "1878: box_map_struct_exists:", + "1882: proto 1 1", + "1885: bytec 11", + "1886: frame_dig -1", + "1887: concat", + "1888: box_len", + "1889: bury 1", + "1890: retsub" ], [ "49: bytec_3", @@ -7516,14 +7450,13 @@ ], [ "730: get_box:", - "735: proto 0 1", - "738: bytec_2", - "739: box_get", - "740: swap", - "741: btoi", - "742: swap", - "743: assert", - "744: retsub" + "733: bytec_2", + "734: box_get", + "735: swap", + "736: btoi", + "737: swap", + "738: assert", + "739: retsub" ], [ "709: itob", @@ -7567,13 +7500,13 @@ "685: callsub get_item_box_map" ], [ - "748: get_item_box_map:", - "752: proto 1 1", - "755: frame_dig -1", - "756: itob", - "757: box_get", - "758: assert", - "759: retsub" + "743: get_item_box_map:", + "747: proto 1 1", + "750: frame_dig -1", + "751: itob", + "752: box_get", + "753: assert", + "754: retsub" ], [ "686: dup", @@ -7620,15 +7553,14 @@ "657: callsub get_box_map" ], [ - "763: get_box_map:", - "767: proto 0 1", - "770: intc_0", - "773: itob", - "774: box_get", - "775: bytec 10", - "776: cover 2", - "777: select", - "778: retsub" + "758: get_box_map:", + "761: intc_0", + "764: itob", + "765: box_get", + "766: bytec 10", + "767: cover 2", + "768: select", + "769: retsub" ], [ "658: dup", @@ -7675,24 +7607,23 @@ "645: callsub get_box_ref" ], [ - "782: get_box_ref:", - "786: proto 0 0", - "789: bytec_0", - "792: intc_2", - "793: box_create", - "794: assert", - "797: txn Sender", - "800: bytec_0", - "803: box_del", - "804: assert", - "807: bytec_0", - "810: box_get", - "811: dig 2", - "812: cover 2", - "813: select", - "814: ==", - "815: assert", - "816: retsub" + "773: get_box_ref:", + "776: bytec_0", + "779: intc_2", + "780: box_create", + "781: assert", + "784: txn Sender", + "787: bytec_0", + "790: box_del", + "791: assert", + "794: bytec_0", + "797: box_get", + "798: dig 2", + "799: cover 2", + "800: select", + "801: ==", + "802: assert", + "803: retsub" ], [ "646: intc_0", @@ -7729,14 +7660,13 @@ "622: callsub maybe_box" ], [ - "820: maybe_box:", - "824: proto 0 2", - "827: bytec_2", - "828: box_get", - "829: swap", - "830: btoi", - "833: swap", - "834: retsub" + "807: maybe_box:", + "810: bytec_2", + "811: box_get", + "812: swap", + "813: btoi", + "816: swap", + "817: retsub" ], [ "623: swap", @@ -7784,27 +7714,27 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "858: pushbytes \"\"", - "859: frame_bury 1" + "841: pushbytes \"\"", + "842: frame_bury 1" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -7860,23 +7790,23 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -7932,30 +7862,30 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "899: pushbytes 0x", - "900: frame_bury 1" + "882: pushbytes 0x", + "883: frame_bury 1" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -8011,26 +7941,26 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -8086,22 +8016,21 @@ "522: callsub get_box_example" ], [ - "913: get_box_example:", - "918: proto 0 3", - "921: bytec_2", - "922: box_get", - "923: swap", - "924: btoi", - "925: swap", - "926: assert", - "929: bytec 5", - "930: box_get", - "931: assert", - "932: extract 2 0", - "935: bytec 4", - "936: box_get", - "937: assert", - "944: retsub" + "896: get_box_example:", + "899: bytec_2", + "900: box_get", + "901: swap", + "902: btoi", + "903: swap", + "904: assert", + "907: bytec 5", + "908: box_get", + "909: assert", + "910: extract 2 0", + "913: bytec 4", + "914: box_get", + "915: assert", + "922: retsub" ], [ "523: uncover 2", @@ -8164,19 +8093,18 @@ "501: callsub get_box_map_example" ], [ - "948: get_box_map_example:", - "952: proto 0 1", - "955: intc_0", - "958: itob", - "959: box_get", - "960: bytec 10", - "961: cover 2", - "962: select", - "963: bytec 10", - "964: ==", - "965: assert", - "968: intc_0", - "969: retsub" + "926: get_box_map_example:", + "929: intc_0", + "932: itob", + "933: box_get", + "934: bytec 10", + "935: cover 2", + "936: select", + "937: bytec 10", + "938: ==", + "939: assert", + "942: intc_0", + "943: retsub" ], [ "502: bytec_3", @@ -8221,32 +8149,31 @@ "489: callsub maybe_box_example" ], [ - "973: maybe_box_example:", - "977: proto 0 0", - "980: bytec_2", - "981: box_del", - "982: pop", - "985: bytec_2", - "986: box_get", - "987: swap", - "988: btoi", - "989: pushint 42", - "990: swap", - "991: uncover 2", - "992: select", - "993: pushint 42", - "994: ==", - "995: assert", - "998: bytec_2", - "999: box_get", - "1000: swap", - "1001: btoi", - "1004: swap", - "1005: !", - "1006: assert", - "1009: !", - "1010: assert", - "1011: retsub" + "947: maybe_box_example:", + "950: bytec_2", + "951: box_del", + "952: pop", + "955: bytec_2", + "956: box_get", + "957: swap", + "958: btoi", + "959: pushint 42", + "960: swap", + "961: uncover 2", + "962: select", + "963: pushint 42", + "964: ==", + "965: assert", + "968: bytec_2", + "969: box_get", + "970: swap", + "971: btoi", + "974: swap", + "975: !", + "976: assert", + "979: !", + "980: assert", + "981: retsub" ], [ "490: intc_0", @@ -8283,20 +8210,19 @@ "477: callsub maybe_box_map_example" ], [ - "1015: maybe_box_map_example:", - "1019: proto 0 0", - "1022: intc_0", - "1025: itob", - "1026: box_get", - "1027: bury 1", - "1030: !", - "1031: assert", - "1034: intc_1", - "1037: itob", - "1038: box_len", - "1039: bury 1", - "1040: assert", - "1041: retsub" + "985: maybe_box_map_example:", + "988: intc_0", + "991: itob", + "992: box_get", + "993: bury 1", + "996: !", + "997: assert", + "1000: intc_1", + "1003: itob", + "1004: box_len", + "1005: bury 1", + "1006: assert", + "1007: retsub" ], [ "478: intc_0", @@ -8334,14 +8260,14 @@ "461: callsub get_box_map_struct" ], [ - "1045: get_box_map_struct:", - "1049: proto 1 1", - "1052: bytec 11", - "1053: frame_dig -1", - "1054: concat", - "1055: box_get", - "1056: assert", - "1057: retsub" + "1011: get_box_map_struct:", + "1015: proto 1 1", + "1018: bytec 11", + "1019: frame_dig -1", + "1020: concat", + "1021: box_get", + "1022: assert", + "1023: retsub" ], [ "462: bytec_1", @@ -8384,14 +8310,14 @@ "444: callsub set_box" ], [ - "1061: set_box:", - "1066: proto 1 0", - "1069: frame_dig -1", - "1070: itob", - "1071: bytec_2", - "1072: swap", - "1073: box_put", - "1074: retsub" + "1027: set_box:", + "1032: proto 1 0", + "1035: frame_dig -1", + "1036: itob", + "1037: bytec_2", + "1038: swap", + "1039: box_put", + "1040: retsub" ], [ "445: intc_0", @@ -8432,16 +8358,16 @@ "424: callsub set_box_map" ], [ - "1078: set_box_map:", - "1082: proto 2 0", - "1085: frame_dig -2", - "1086: itob", - "1087: dup", - "1088: box_del", - "1089: pop", - "1090: frame_dig -1", - "1091: box_put", - "1092: retsub" + "1044: set_box_map:", + "1048: proto 2 0", + "1051: frame_dig -2", + "1052: itob", + "1053: dup", + "1054: box_del", + "1055: pop", + "1056: frame_dig -1", + "1057: box_put", + "1058: retsub" ], [ "425: intc_0", @@ -8480,24 +8406,24 @@ "396: callsub set_box_map_struct" ], [ - "1096: set_box_map_struct:", - "1100: proto 2 1", - "1103: bytec 11", - "1104: frame_dig -2", - "1105: concat", - "1106: dup", - "1107: box_del", - "1108: pop", - "1109: dup", - "1110: frame_dig -1", - "1111: box_put", - "1114: box_get", - "1115: assert", - "1116: frame_dig -1", - "1117: ==", - "1118: assert", - "1121: intc_0", - "1122: retsub" + "1062: set_box_map_struct:", + "1066: proto 2 1", + "1069: bytec 11", + "1070: frame_dig -2", + "1071: concat", + "1072: dup", + "1073: box_del", + "1074: pop", + "1075: dup", + "1076: frame_dig -1", + "1077: box_put", + "1080: box_get", + "1081: assert", + "1082: frame_dig -1", + "1083: ==", + "1084: assert", + "1087: intc_0", + "1088: retsub" ], [ "397: bytec_3", @@ -8546,59 +8472,59 @@ "378: callsub set_box_example" ], [ - "1126: set_box_example:", - "1136: proto 3 0", - "1139: frame_dig -3", - "1140: itob", - "1141: bytec_2", - "1142: swap", - "1143: box_put", - "1146: bytec 5", - "1147: box_del", - "1148: pop", - "1149: bytec 5", - "1150: frame_dig -2", - "1151: box_put", - "1154: bytec 4", - "1155: box_del", - "1156: pop", - "1157: bytec 4", - "1158: frame_dig -1", - "1159: box_put", - "1162: frame_dig -2", - "1163: extract 2 0", - "1164: bytec 12", - "1165: box_del", - "1166: pop", - "1167: bytec 12", - "1168: swap", - "1169: box_put", - "1172: bytec 5", - "1173: box_get", - "1174: assert", - "1177: bytec 5", - "1178: box_get", - "1179: assert", - "1180: intc_1", - "1181: extract_uint16", - "1182: swap", - "1183: intc_1", - "1184: extract_uint16", - "1185: ==", - "1190: assert", - "1193: bytec_2", - "1194: box_get", - "1195: swap", - "1196: btoi", - "1197: swap", - "1198: assert", - "1199: pushint 3", - "1200: +", - "1201: itob", - "1202: bytec_2", - "1203: swap", - "1204: box_put", - "1205: retsub" + "1092: set_box_example:", + "1102: proto 3 0", + "1105: frame_dig -3", + "1106: itob", + "1107: bytec_2", + "1108: swap", + "1109: box_put", + "1112: bytec 5", + "1113: box_del", + "1114: pop", + "1115: bytec 5", + "1116: frame_dig -2", + "1117: box_put", + "1120: bytec 4", + "1121: box_del", + "1122: pop", + "1123: bytec 4", + "1124: frame_dig -1", + "1125: box_put", + "1128: frame_dig -2", + "1129: extract 2 0", + "1130: bytec 12", + "1131: box_del", + "1132: pop", + "1133: bytec 12", + "1134: swap", + "1135: box_put", + "1138: bytec 5", + "1139: box_get", + "1140: assert", + "1143: bytec 5", + "1144: box_get", + "1145: assert", + "1146: intc_1", + "1147: extract_uint16", + "1148: swap", + "1149: intc_1", + "1150: extract_uint16", + "1151: ==", + "1156: assert", + "1159: bytec_2", + "1160: box_get", + "1161: swap", + "1162: btoi", + "1163: swap", + "1164: assert", + "1165: pushint 3", + "1166: +", + "1167: itob", + "1168: bytec_2", + "1169: swap", + "1170: box_put", + "1171: retsub" ], [ "379: intc_0", @@ -8635,46 +8561,45 @@ "356: callsub delete_box" ], [ - "1209: delete_box:", - "1214: proto 0 0", - "1217: bytec_2", - "1218: box_del", - "1219: pop", - "1222: bytec 5", - "1223: box_del", - "1224: pop", - "1227: bytec 4", - "1228: box_del", - "1229: pop", - "1232: bytec_2", - "1233: box_get", - "1234: swap", - "1235: btoi", - "1236: pushint 42", - "1237: swap", - "1238: uncover 2", - "1239: select", - "1240: pushint 42", - "1241: ==", - "1242: assert", - "1245: bytec 5", - "1246: box_get", - "1247: bytec 13", - "1248: cover 2", - "1249: select", - "1250: extract 2 0", - "1251: pushbytes 0x3432", - "1252: ==", - "1257: assert", - "1260: bytec 4", - "1261: box_get", - "1262: bytec 13", - "1263: cover 2", - "1264: select", - "1265: bytec 13", - "1266: ==", - "1267: assert", - "1268: retsub" + "1175: delete_box:", + "1178: bytec_2", + "1179: box_del", + "1180: pop", + "1183: bytec 5", + "1184: box_del", + "1185: pop", + "1188: bytec 4", + "1189: box_del", + "1190: pop", + "1193: bytec_2", + "1194: box_get", + "1195: swap", + "1196: btoi", + "1197: pushint 42", + "1198: swap", + "1199: uncover 2", + "1200: select", + "1201: pushint 42", + "1202: ==", + "1203: assert", + "1206: bytec 5", + "1207: box_get", + "1208: bytec 13", + "1209: cover 2", + "1210: select", + "1211: extract 2 0", + "1212: pushbytes 0x3432", + "1213: ==", + "1218: assert", + "1221: bytec 4", + "1222: box_get", + "1223: bytec 13", + "1224: cover 2", + "1225: select", + "1226: bytec 13", + "1227: ==", + "1228: assert", + "1229: retsub" ], [ "357: intc_0", @@ -8713,13 +8638,13 @@ "343: callsub delete_box_map" ], [ - "1272: delete_box_map:", - "1276: proto 1 0", - "1279: frame_dig -1", - "1280: itob", - "1281: box_del", - "1282: pop", - "1283: retsub" + "1233: delete_box_map:", + "1237: proto 1 0", + "1240: frame_dig -1", + "1241: itob", + "1242: box_del", + "1243: pop", + "1244: retsub" ], [ "344: intc_0", @@ -8756,27 +8681,26 @@ "325: callsub delete_box_ref" ], [ - "1287: delete_box_ref:", - "1291: proto 0 0", - "1294: bytec 14", - "1295: intc_2", - "1296: box_create", - "1297: pop", - "1300: bytec 14", - "1301: box_len", - "1302: bury 1", - "1303: assert", - "1306: bytec 14", - "1307: box_del", - "1308: pop", - "1311: bytec_0", - "1314: box_get", - "1317: !", - "1318: assert", - "1321: pushbytes 0x", - "1322: ==", - "1323: assert", - "1324: retsub" + "1248: delete_box_ref:", + "1251: bytec 14", + "1252: intc_2", + "1253: box_create", + "1254: pop", + "1257: bytec 14", + "1258: box_len", + "1259: bury 1", + "1260: assert", + "1263: bytec 14", + "1264: box_del", + "1265: pop", + "1268: bytec_0", + "1271: box_get", + "1274: !", + "1275: assert", + "1278: pushbytes 0x", + "1279: ==", + "1280: assert", + "1281: retsub" ], [ "326: intc_0", @@ -8813,19 +8737,19 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1346: intc_1", - "1347: swap", - "1348: retsub" + "1303: intc_1", + "1304: swap", + "1305: retsub" ], [ "309: itob", @@ -8867,22 +8791,22 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1350: box_map_length_after_if_else@2:", - "1353: frame_dig 0", - "1354: box_len", - "1355: assert", - "1356: swap", - "1357: retsub" + "1307: box_map_length_after_if_else@2:", + "1310: frame_dig 0", + "1311: box_len", + "1312: assert", + "1313: swap", + "1314: retsub" ], [ "309: itob", @@ -8924,16 +8848,15 @@ "290: callsub length_box_ref" ], [ - "1361: length_box_ref:", - "1365: proto 0 1", - "1368: bytec_0", - "1371: intc_2", - "1372: box_create", - "1373: assert", - "1376: bytec_0", - "1379: box_len", - "1380: assert", - "1381: retsub" + "1318: length_box_ref:", + "1321: bytec_0", + "1324: intc_2", + "1325: box_create", + "1326: assert", + "1329: bytec_0", + "1332: box_len", + "1333: assert", + "1334: retsub" ], [ "291: itob", @@ -8975,28 +8898,27 @@ "270: callsub box_map_struct_length" ], [ - "1385: box_map_struct_length:", - "1389: proto 0 1", - "1392: bytec 7", - "1393: box_del", - "1394: pop", - "1395: bytec 7", - "1398: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "1401: box_put", - "1404: bytec 7", - "1405: box_len", - "1406: assert", - "1407: pushint 28", - "1408: ==", - "1409: assert", - "1412: bytec 7", - "1413: box_len", - "1414: assert", - "1415: pushint 28", - "1416: ==", - "1417: assert", - "1420: intc_0", - "1421: retsub" + "1338: box_map_struct_length:", + "1341: bytec 7", + "1342: box_del", + "1343: pop", + "1344: bytec 7", + "1347: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "1350: box_put", + "1353: bytec 7", + "1354: box_len", + "1355: assert", + "1356: pushint 28", + "1357: ==", + "1358: assert", + "1361: bytec 7", + "1362: box_len", + "1363: assert", + "1364: pushint 28", + "1365: ==", + "1366: assert", + "1369: intc_0", + "1370: retsub" ], [ "271: bytec_3", @@ -9041,28 +8963,27 @@ "258: callsub box_map_length_example" ], [ - "1425: box_map_length_example:", - "1430: proto 0 0", - "1433: intc_1", - "1436: itob", - "1437: dup", - "1438: box_del", - "1439: pop", - "1440: dup", - "1443: pushbytes \"Hmmmmm\"", - "1446: box_put", - "1449: dup", - "1450: box_len", - "1451: assert", - "1452: pushint 6", - "1453: ==", - "1454: assert", - "1457: box_len", - "1458: assert", - "1459: pushint 6", - "1460: ==", - "1461: assert", - "1462: retsub" + "1374: box_map_length_example:", + "1377: intc_1", + "1380: itob", + "1381: dup", + "1382: box_del", + "1383: pop", + "1384: dup", + "1387: pushbytes \"Hmmmmm\"", + "1390: box_put", + "1393: dup", + "1394: box_len", + "1395: assert", + "1396: pushint 6", + "1397: ==", + "1398: assert", + "1401: box_len", + "1402: assert", + "1403: pushint 6", + "1404: ==", + "1405: assert", + "1406: retsub" ], [ "259: intc_0", @@ -9099,49 +9020,48 @@ "245: callsub length_box_ref_example" ], [ - "1466: length_box_ref_example:", - "1470: proto 0 0", - "1473: bytec_0", - "1476: intc_2", - "1477: box_create", - "1478: assert", - "1481: bytec_0", - "1484: box_len", - "1485: assert", - "1486: intc_3", - "1487: ==", - "1488: assert", - "1491: bytec_0", - "1494: intc_2", - "1495: box_create", - "1496: assert", - "1499: bytec_0", - "1502: box_len", - "1503: assert", - "1504: intc_3", - "1505: ==", - "1506: assert", - "1509: bytec_0", - "1512: intc_2", - "1513: box_create", - "1514: assert", - "1517: bytec_0", - "1520: box_len", - "1521: assert", - "1522: intc_3", - "1523: ==", - "1524: assert", - "1527: bytec_0", - "1530: intc_2", - "1531: box_create", - "1532: assert", - "1535: bytec_0", - "1538: box_len", - "1539: assert", - "1540: intc_3", - "1541: ==", - "1542: assert", - "1543: retsub" + "1410: length_box_ref_example:", + "1413: bytec_0", + "1416: intc_2", + "1417: box_create", + "1418: assert", + "1421: bytec_0", + "1424: box_len", + "1425: assert", + "1426: intc_3", + "1427: ==", + "1428: assert", + "1431: bytec_0", + "1434: intc_2", + "1435: box_create", + "1436: assert", + "1439: bytec_0", + "1442: box_len", + "1443: assert", + "1444: intc_3", + "1445: ==", + "1446: assert", + "1449: bytec_0", + "1452: intc_2", + "1453: box_create", + "1454: assert", + "1457: bytec_0", + "1460: box_len", + "1461: assert", + "1462: intc_3", + "1463: ==", + "1464: assert", + "1467: bytec_0", + "1470: intc_2", + "1471: box_create", + "1472: assert", + "1475: bytec_0", + "1478: box_len", + "1479: assert", + "1480: intc_3", + "1481: ==", + "1482: assert", + "1483: retsub" ], [ "246: intc_0", @@ -9178,39 +9098,38 @@ "233: callsub extract_box_ref" ], [ - "1547: extract_box_ref:", - "1552: proto 0 0", - "1555: bytec_0", - "1558: intc_2", - "1559: box_create", - "1560: assert", - "1563: txn Sender", - "1566: global CurrentApplicationAddress", - "1569: bytec_0", - "1572: intc_1", - "1573: dig 3", - "1574: box_replace", - "1577: bytec_0", - "1580: intc_1", - "1581: dup", - "1582: dig 3", - "1583: UNSUPPORTED box_splice", - "1586: bytec_0", - "1589: intc_3", - "1592: bytec 8", - "1595: box_replace", - "1598: bytec_0", - "1601: intc_1", - "1602: pushint 69", - "1603: box_extract", - "1606: swap", - "1607: uncover 2", - "1608: concat", - "1611: bytec 8", - "1614: concat", - "1615: ==", - "1616: assert", - "1617: retsub" + "1487: extract_box_ref:", + "1490: bytec_0", + "1493: intc_2", + "1494: box_create", + "1495: assert", + "1498: txn Sender", + "1501: global CurrentApplicationAddress", + "1504: bytec_0", + "1507: intc_1", + "1508: dig 3", + "1509: box_replace", + "1512: bytec_0", + "1515: intc_1", + "1516: dup", + "1517: dig 3", + "1518: UNSUPPORTED box_splice", + "1521: bytec_0", + "1524: intc_3", + "1527: bytec 8", + "1530: box_replace", + "1533: bytec_0", + "1536: intc_1", + "1537: pushint 69", + "1538: box_extract", + "1541: swap", + "1542: uncover 2", + "1543: concat", + "1546: bytec 8", + "1549: concat", + "1550: ==", + "1551: assert", + "1552: retsub" ], [ "234: intc_0", @@ -9247,60 +9166,59 @@ "220: callsub manipulate_box_ref" ], [ - "1621: manipulate_box_ref:", - "1626: proto 0 0", - "1629: bytec_0", - "1632: intc_2", - "1633: box_create", - "1634: assert", - "1637: bytec_0", - "1640: box_len", - "1641: bury 1", - "1642: assert", - "1646: txn Sender", - "1649: global CurrentApplicationAddress", - "1652: bytec_0", - "1655: intc_1", - "1656: dig 3", - "1657: box_replace", - "1660: bytec_0", - "1663: intc_1", - "1664: dup", - "1665: dig 3", - "1666: UNSUPPORTED box_splice", - "1669: bytec_0", - "1672: intc_3", - "1675: bytec 8", - "1678: box_replace", - "1681: bytec_0", - "1684: intc_1", - "1685: pushint 69", - "1686: box_extract", - "1689: dig 1", - "1690: dig 3", - "1691: concat", - "1694: bytec 8", - "1697: concat", - "1698: ==", - "1699: assert", - "1702: bytec_0", - "1705: box_del", - "1706: assert", - "1709: concat", - "1712: bytec_0", - "1715: swap", - "1716: box_put", - "1719: bytec_0", - "1722: box_len", - "1723: bury 1", - "1724: assert", - "1727: bytec_0", - "1730: box_len", - "1731: assert", - "1732: intc_3", - "1733: ==", - "1734: assert", - "1735: retsub" + "1556: manipulate_box_ref:", + "1559: bytec_0", + "1562: intc_2", + "1563: box_create", + "1564: assert", + "1567: bytec_0", + "1570: box_len", + "1571: bury 1", + "1572: assert", + "1576: txn Sender", + "1579: global CurrentApplicationAddress", + "1582: bytec_0", + "1585: intc_1", + "1586: dig 3", + "1587: box_replace", + "1590: bytec_0", + "1593: intc_1", + "1594: dup", + "1595: dig 3", + "1596: UNSUPPORTED box_splice", + "1599: bytec_0", + "1602: intc_3", + "1605: bytec 8", + "1608: box_replace", + "1611: bytec_0", + "1614: intc_1", + "1615: pushint 69", + "1616: box_extract", + "1619: dig 1", + "1620: dig 3", + "1621: concat", + "1624: bytec 8", + "1627: concat", + "1628: ==", + "1629: assert", + "1632: bytec_0", + "1635: box_del", + "1636: assert", + "1639: concat", + "1642: bytec_0", + "1645: swap", + "1646: box_put", + "1649: bytec_0", + "1652: box_len", + "1653: bury 1", + "1654: assert", + "1657: bytec_0", + "1660: box_len", + "1661: assert", + "1662: intc_3", + "1663: ==", + "1664: assert", + "1665: retsub" ], [ "221: intc_0", @@ -9337,18 +9255,17 @@ "207: callsub value_box" ], [ - "1739: value_box:", - "1744: proto 0 0", - "1747: bytec_2", - "1748: box_get", - "1749: swap", - "1750: btoi", - "1751: swap", - "1752: assert", - "1753: pushint 10", - "1754: ==", - "1755: assert", - "1756: retsub" + "1669: value_box:", + "1672: bytec_2", + "1673: box_get", + "1674: swap", + "1675: btoi", + "1676: swap", + "1677: assert", + "1678: pushint 10", + "1679: ==", + "1680: assert", + "1681: retsub" ], [ "208: intc_0", @@ -9385,12 +9302,11 @@ "186: callsub exist_box" ], [ - "1760: exist_box:", - "1764: proto 0 1", - "1767: bytec_2", - "1768: box_len", - "1769: bury 1", - "1770: retsub" + "1685: exist_box:", + "1688: bytec_2", + "1689: box_len", + "1690: bury 1", + "1691: retsub" ], [ "187: bytec_3", @@ -9435,18 +9351,17 @@ "145: callsub exist_box_example" ], [ - "1774: exist_box_example:", - "1778: proto 0 3", - "1781: bytec 5", - "1782: box_len", - "1783: bury 1", - "1784: bytec 4", - "1785: box_len", - "1786: bury 1", - "1787: bytec 12", - "1788: box_len", - "1789: bury 1", - "1790: retsub" + "1695: exist_box_example:", + "1698: bytec 5", + "1699: box_len", + "1700: bury 1", + "1701: bytec 4", + "1702: box_len", + "1703: bury 1", + "1704: bytec 12", + "1705: box_len", + "1706: bury 1", + "1707: retsub" ], [ "146: bytec_3", @@ -9512,68 +9427,67 @@ "133: callsub slice_box" ], [ - "1794: slice_box:", - "1798: proto 0 0", - "1801: bytec 9", - "1804: box_del", - "1805: pop", - "1808: bytec 9", - "1811: pushbytes 0x54657374696e672074657374696e6720313233", - "1812: box_put", - "1815: bytec 9", - "1818: box_len", - "1819: pop", - "1820: dup", - "1821: intc_1", - "1822: dig 2", - "1823: select", - "1824: pushint 7", - "1825: dig 2", - "1826: <", - "1827: uncover 2", - "1828: pushint 7", - "1829: uncover 2", - "1830: select", - "1831: dig 1", - "1832: -", - "1835: bytec 9", - "1838: cover 2", - "1839: box_extract", - "1840: pushbytes 0x54657374696e67", - "1841: ==", - "1842: assert", - "1845: bytec 4", - "1846: box_del", - "1847: pop", - "1848: bytec 4", - "1849: pushbytes 0x000548656c6c6f", - "1850: box_put", - "1853: bytec 4", - "1854: box_len", - "1855: pop", - "1856: pushint 2", - "1857: dig 1", - "1858: <", - "1859: dig 1", - "1860: pushint 2", - "1861: uncover 2", - "1862: select", - "1863: pushint 10", - "1864: dig 2", - "1865: <", - "1866: uncover 2", - "1867: pushint 10", - "1868: uncover 2", - "1869: select", - "1870: dig 1", - "1871: -", - "1872: bytec 4", - "1873: cover 2", - "1874: box_extract", - "1875: pushbytes 0x48656c6c6f", - "1876: ==", - "1877: assert", - "1878: retsub" + "1711: slice_box:", + "1714: bytec 9", + "1717: box_del", + "1718: pop", + "1721: bytec 9", + "1724: pushbytes 0x54657374696e672074657374696e6720313233", + "1725: box_put", + "1728: bytec 9", + "1731: box_len", + "1732: pop", + "1733: dup", + "1734: intc_1", + "1735: dig 2", + "1736: select", + "1737: pushint 7", + "1738: dig 2", + "1739: <", + "1740: uncover 2", + "1741: pushint 7", + "1742: uncover 2", + "1743: select", + "1744: dig 1", + "1745: -", + "1748: bytec 9", + "1751: cover 2", + "1752: box_extract", + "1753: pushbytes 0x54657374696e67", + "1754: ==", + "1755: assert", + "1758: bytec 4", + "1759: box_del", + "1760: pop", + "1761: bytec 4", + "1762: pushbytes 0x000548656c6c6f", + "1763: box_put", + "1766: bytec 4", + "1767: box_len", + "1768: pop", + "1769: pushint 2", + "1770: dig 1", + "1771: <", + "1772: dig 1", + "1773: pushint 2", + "1774: uncover 2", + "1775: select", + "1776: pushint 10", + "1777: dig 2", + "1778: <", + "1779: uncover 2", + "1780: pushint 10", + "1781: uncover 2", + "1782: select", + "1783: dig 1", + "1784: -", + "1785: bytec 4", + "1786: cover 2", + "1787: box_extract", + "1788: pushbytes 0x48656c6c6f", + "1789: ==", + "1790: assert", + "1791: retsub" ], [ "134: intc_0", @@ -9610,40 +9524,39 @@ "121: callsub arc4_box" ], [ - "1882: arc4_box:", - "1886: proto 0 0", - "1889: bytec 6", - "1894: pushbytes 0x00010203", - "1895: box_put", - "1898: bytec 6", - "1901: box_get", - "1902: assert", - "1903: extract 0 1", - "1904: bytec_3", - "1905: b==", - "1906: assert", - "1909: bytec 6", - "1912: box_get", - "1913: assert", - "1914: extract 1 1", - "1915: pushbytes 0x01", - "1916: b==", - "1917: assert", - "1920: bytec 6", - "1923: box_get", - "1924: assert", - "1925: extract 2 1", - "1926: pushbytes 0x02", - "1927: b==", - "1928: assert", - "1931: bytec 6", - "1934: box_get", - "1935: assert", - "1936: extract 3 1", - "1937: pushbytes 0x03", - "1938: b==", - "1939: assert", - "1940: retsub" + "1795: arc4_box:", + "1798: bytec 6", + "1803: pushbytes 0x00010203", + "1804: box_put", + "1807: bytec 6", + "1810: box_get", + "1811: assert", + "1812: extract 0 1", + "1813: bytec_3", + "1814: b==", + "1815: assert", + "1818: bytec 6", + "1821: box_get", + "1822: assert", + "1823: extract 1 1", + "1824: pushbytes 0x01", + "1825: b==", + "1826: assert", + "1829: bytec 6", + "1832: box_get", + "1833: assert", + "1834: extract 2 1", + "1835: pushbytes 0x02", + "1836: b==", + "1837: assert", + "1840: bytec 6", + "1843: box_get", + "1844: assert", + "1845: extract 3 1", + "1846: pushbytes 0x03", + "1847: b==", + "1848: assert", + "1849: retsub" ], [ "122: intc_0", @@ -9713,11 +9626,10 @@ "96: callsub key_box_example" ], [ - "1944: key_box_example:", - "1948: proto 0 0", - "1951: intc_1", - "1952: assert", - "1953: retsub" + "1853: key_box_example:", + "1856: intc_1", + "1857: assert", + "1858: retsub" ], [ "97: intc_0", @@ -9756,13 +9668,13 @@ "76: callsub box_map_exists" ], [ - "1957: box_map_exists:", - "1962: proto 1 1", - "1965: frame_dig -1", - "1966: itob", - "1967: box_len", - "1968: bury 1", - "1969: retsub" + "1862: box_map_exists:", + "1867: proto 1 1", + "1870: frame_dig -1", + "1871: itob", + "1872: box_len", + "1873: bury 1", + "1874: retsub" ], [ "77: bytec_3", @@ -9808,14 +9720,14 @@ "48: callsub box_map_struct_exists" ], [ - "1973: box_map_struct_exists:", - "1977: proto 1 1", - "1980: bytec 11", - "1981: frame_dig -1", - "1982: concat", - "1983: box_len", - "1984: bury 1", - "1985: retsub" + "1878: box_map_struct_exists:", + "1882: proto 1 1", + "1885: bytec 11", + "1886: frame_dig -1", + "1887: concat", + "1888: box_len", + "1889: bury 1", + "1890: retsub" ], [ "49: bytec_3", @@ -9957,14 +9869,13 @@ ], [ "730: get_box:", - "735: proto 0 1", - "738: bytec_2", - "739: box_get", - "740: swap", - "741: btoi", - "742: swap", - "743: assert", - "744: retsub" + "733: bytec_2", + "734: box_get", + "735: swap", + "736: btoi", + "737: swap", + "738: assert", + "739: retsub" ], [ "709: itob", @@ -10008,13 +9919,13 @@ "685: callsub get_item_box_map" ], [ - "748: get_item_box_map:", - "752: proto 1 1", - "755: frame_dig -1", - "756: itob", - "757: box_get", - "758: assert", - "759: retsub" + "743: get_item_box_map:", + "747: proto 1 1", + "750: frame_dig -1", + "751: itob", + "752: box_get", + "753: assert", + "754: retsub" ], [ "686: dup", @@ -10061,15 +9972,14 @@ "657: callsub get_box_map" ], [ - "763: get_box_map:", - "767: proto 0 1", - "770: intc_0", - "773: itob", - "774: box_get", - "775: bytec 10", - "776: cover 2", - "777: select", - "778: retsub" + "758: get_box_map:", + "761: intc_0", + "764: itob", + "765: box_get", + "766: bytec 10", + "767: cover 2", + "768: select", + "769: retsub" ], [ "658: dup", @@ -10116,24 +10026,23 @@ "645: callsub get_box_ref" ], [ - "782: get_box_ref:", - "786: proto 0 0", - "789: bytec_0", - "792: intc_2", - "793: box_create", - "794: assert", - "797: txn Sender", - "800: bytec_0", - "803: box_del", - "804: assert", - "807: bytec_0", - "810: box_get", - "811: dig 2", - "812: cover 2", - "813: select", - "814: ==", - "815: assert", - "816: retsub" + "773: get_box_ref:", + "776: bytec_0", + "779: intc_2", + "780: box_create", + "781: assert", + "784: txn Sender", + "787: bytec_0", + "790: box_del", + "791: assert", + "794: bytec_0", + "797: box_get", + "798: dig 2", + "799: cover 2", + "800: select", + "801: ==", + "802: assert", + "803: retsub" ], [ "646: intc_0", @@ -10170,14 +10079,13 @@ "622: callsub maybe_box" ], [ - "820: maybe_box:", - "824: proto 0 2", - "827: bytec_2", - "828: box_get", - "829: swap", - "830: btoi", - "833: swap", - "834: retsub" + "807: maybe_box:", + "810: bytec_2", + "811: box_get", + "812: swap", + "813: btoi", + "816: swap", + "817: retsub" ], [ "623: swap", @@ -10225,27 +10133,27 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "858: pushbytes \"\"", - "859: frame_bury 1" + "841: pushbytes \"\"", + "842: frame_bury 1" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -10301,23 +10209,23 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -10373,30 +10281,30 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "899: pushbytes 0x", - "900: frame_bury 1" + "882: pushbytes 0x", + "883: frame_bury 1" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -10452,26 +10360,26 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -10527,22 +10435,21 @@ "522: callsub get_box_example" ], [ - "913: get_box_example:", - "918: proto 0 3", - "921: bytec_2", - "922: box_get", - "923: swap", - "924: btoi", - "925: swap", - "926: assert", - "929: bytec 5", - "930: box_get", - "931: assert", - "932: extract 2 0", - "935: bytec 4", - "936: box_get", - "937: assert", - "944: retsub" + "896: get_box_example:", + "899: bytec_2", + "900: box_get", + "901: swap", + "902: btoi", + "903: swap", + "904: assert", + "907: bytec 5", + "908: box_get", + "909: assert", + "910: extract 2 0", + "913: bytec 4", + "914: box_get", + "915: assert", + "922: retsub" ], [ "523: uncover 2", @@ -10605,19 +10512,18 @@ "501: callsub get_box_map_example" ], [ - "948: get_box_map_example:", - "952: proto 0 1", - "955: intc_0", - "958: itob", - "959: box_get", - "960: bytec 10", - "961: cover 2", - "962: select", - "963: bytec 10", - "964: ==", - "965: assert", - "968: intc_0", - "969: retsub" + "926: get_box_map_example:", + "929: intc_0", + "932: itob", + "933: box_get", + "934: bytec 10", + "935: cover 2", + "936: select", + "937: bytec 10", + "938: ==", + "939: assert", + "942: intc_0", + "943: retsub" ], [ "502: bytec_3", @@ -10662,32 +10568,31 @@ "489: callsub maybe_box_example" ], [ - "973: maybe_box_example:", - "977: proto 0 0", - "980: bytec_2", - "981: box_del", - "982: pop", - "985: bytec_2", - "986: box_get", - "987: swap", - "988: btoi", - "989: pushint 42", - "990: swap", - "991: uncover 2", - "992: select", - "993: pushint 42", - "994: ==", - "995: assert", - "998: bytec_2", - "999: box_get", - "1000: swap", - "1001: btoi", - "1004: swap", - "1005: !", - "1006: assert", - "1009: !", - "1010: assert", - "1011: retsub" + "947: maybe_box_example:", + "950: bytec_2", + "951: box_del", + "952: pop", + "955: bytec_2", + "956: box_get", + "957: swap", + "958: btoi", + "959: pushint 42", + "960: swap", + "961: uncover 2", + "962: select", + "963: pushint 42", + "964: ==", + "965: assert", + "968: bytec_2", + "969: box_get", + "970: swap", + "971: btoi", + "974: swap", + "975: !", + "976: assert", + "979: !", + "980: assert", + "981: retsub" ], [ "490: intc_0", @@ -10724,20 +10629,19 @@ "477: callsub maybe_box_map_example" ], [ - "1015: maybe_box_map_example:", - "1019: proto 0 0", - "1022: intc_0", - "1025: itob", - "1026: box_get", - "1027: bury 1", - "1030: !", - "1031: assert", - "1034: intc_1", - "1037: itob", - "1038: box_len", - "1039: bury 1", - "1040: assert", - "1041: retsub" + "985: maybe_box_map_example:", + "988: intc_0", + "991: itob", + "992: box_get", + "993: bury 1", + "996: !", + "997: assert", + "1000: intc_1", + "1003: itob", + "1004: box_len", + "1005: bury 1", + "1006: assert", + "1007: retsub" ], [ "478: intc_0", @@ -10775,14 +10679,14 @@ "461: callsub get_box_map_struct" ], [ - "1045: get_box_map_struct:", - "1049: proto 1 1", - "1052: bytec 11", - "1053: frame_dig -1", - "1054: concat", - "1055: box_get", - "1056: assert", - "1057: retsub" + "1011: get_box_map_struct:", + "1015: proto 1 1", + "1018: bytec 11", + "1019: frame_dig -1", + "1020: concat", + "1021: box_get", + "1022: assert", + "1023: retsub" ], [ "462: bytec_1", @@ -10825,14 +10729,14 @@ "444: callsub set_box" ], [ - "1061: set_box:", - "1066: proto 1 0", - "1069: frame_dig -1", - "1070: itob", - "1071: bytec_2", - "1072: swap", - "1073: box_put", - "1074: retsub" + "1027: set_box:", + "1032: proto 1 0", + "1035: frame_dig -1", + "1036: itob", + "1037: bytec_2", + "1038: swap", + "1039: box_put", + "1040: retsub" ], [ "445: intc_0", @@ -10873,16 +10777,16 @@ "424: callsub set_box_map" ], [ - "1078: set_box_map:", - "1082: proto 2 0", - "1085: frame_dig -2", - "1086: itob", - "1087: dup", - "1088: box_del", - "1089: pop", - "1090: frame_dig -1", - "1091: box_put", - "1092: retsub" + "1044: set_box_map:", + "1048: proto 2 0", + "1051: frame_dig -2", + "1052: itob", + "1053: dup", + "1054: box_del", + "1055: pop", + "1056: frame_dig -1", + "1057: box_put", + "1058: retsub" ], [ "425: intc_0", @@ -10921,24 +10825,24 @@ "396: callsub set_box_map_struct" ], [ - "1096: set_box_map_struct:", - "1100: proto 2 1", - "1103: bytec 11", - "1104: frame_dig -2", - "1105: concat", - "1106: dup", - "1107: box_del", - "1108: pop", - "1109: dup", - "1110: frame_dig -1", - "1111: box_put", - "1114: box_get", - "1115: assert", - "1116: frame_dig -1", - "1117: ==", - "1118: assert", - "1121: intc_0", - "1122: retsub" + "1062: set_box_map_struct:", + "1066: proto 2 1", + "1069: bytec 11", + "1070: frame_dig -2", + "1071: concat", + "1072: dup", + "1073: box_del", + "1074: pop", + "1075: dup", + "1076: frame_dig -1", + "1077: box_put", + "1080: box_get", + "1081: assert", + "1082: frame_dig -1", + "1083: ==", + "1084: assert", + "1087: intc_0", + "1088: retsub" ], [ "397: bytec_3", @@ -10987,59 +10891,59 @@ "378: callsub set_box_example" ], [ - "1126: set_box_example:", - "1136: proto 3 0", - "1139: frame_dig -3", - "1140: itob", - "1141: bytec_2", - "1142: swap", - "1143: box_put", - "1146: bytec 5", - "1147: box_del", - "1148: pop", - "1149: bytec 5", - "1150: frame_dig -2", - "1151: box_put", - "1154: bytec 4", - "1155: box_del", - "1156: pop", - "1157: bytec 4", - "1158: frame_dig -1", - "1159: box_put", - "1162: frame_dig -2", - "1163: extract 2 0", - "1164: bytec 12", - "1165: box_del", - "1166: pop", - "1167: bytec 12", - "1168: swap", - "1169: box_put", - "1172: bytec 5", - "1173: box_get", - "1174: assert", - "1177: bytec 5", - "1178: box_get", - "1179: assert", - "1180: intc_1", - "1181: extract_uint16", - "1182: swap", - "1183: intc_1", - "1184: extract_uint16", - "1185: ==", - "1190: assert", - "1193: bytec_2", - "1194: box_get", - "1195: swap", - "1196: btoi", - "1197: swap", - "1198: assert", - "1199: pushint 3", - "1200: +", - "1201: itob", - "1202: bytec_2", - "1203: swap", - "1204: box_put", - "1205: retsub" + "1092: set_box_example:", + "1102: proto 3 0", + "1105: frame_dig -3", + "1106: itob", + "1107: bytec_2", + "1108: swap", + "1109: box_put", + "1112: bytec 5", + "1113: box_del", + "1114: pop", + "1115: bytec 5", + "1116: frame_dig -2", + "1117: box_put", + "1120: bytec 4", + "1121: box_del", + "1122: pop", + "1123: bytec 4", + "1124: frame_dig -1", + "1125: box_put", + "1128: frame_dig -2", + "1129: extract 2 0", + "1130: bytec 12", + "1131: box_del", + "1132: pop", + "1133: bytec 12", + "1134: swap", + "1135: box_put", + "1138: bytec 5", + "1139: box_get", + "1140: assert", + "1143: bytec 5", + "1144: box_get", + "1145: assert", + "1146: intc_1", + "1147: extract_uint16", + "1148: swap", + "1149: intc_1", + "1150: extract_uint16", + "1151: ==", + "1156: assert", + "1159: bytec_2", + "1160: box_get", + "1161: swap", + "1162: btoi", + "1163: swap", + "1164: assert", + "1165: pushint 3", + "1166: +", + "1167: itob", + "1168: bytec_2", + "1169: swap", + "1170: box_put", + "1171: retsub" ], [ "379: intc_0", @@ -11076,46 +10980,45 @@ "356: callsub delete_box" ], [ - "1209: delete_box:", - "1214: proto 0 0", - "1217: bytec_2", - "1218: box_del", - "1219: pop", - "1222: bytec 5", - "1223: box_del", - "1224: pop", - "1227: bytec 4", - "1228: box_del", - "1229: pop", - "1232: bytec_2", - "1233: box_get", - "1234: swap", - "1235: btoi", - "1236: pushint 42", - "1237: swap", - "1238: uncover 2", - "1239: select", - "1240: pushint 42", - "1241: ==", - "1242: assert", - "1245: bytec 5", - "1246: box_get", - "1247: bytec 13", - "1248: cover 2", - "1249: select", - "1250: extract 2 0", - "1251: pushbytes 0x3432", - "1252: ==", - "1257: assert", - "1260: bytec 4", - "1261: box_get", - "1262: bytec 13", - "1263: cover 2", - "1264: select", - "1265: bytec 13", - "1266: ==", - "1267: assert", - "1268: retsub" + "1175: delete_box:", + "1178: bytec_2", + "1179: box_del", + "1180: pop", + "1183: bytec 5", + "1184: box_del", + "1185: pop", + "1188: bytec 4", + "1189: box_del", + "1190: pop", + "1193: bytec_2", + "1194: box_get", + "1195: swap", + "1196: btoi", + "1197: pushint 42", + "1198: swap", + "1199: uncover 2", + "1200: select", + "1201: pushint 42", + "1202: ==", + "1203: assert", + "1206: bytec 5", + "1207: box_get", + "1208: bytec 13", + "1209: cover 2", + "1210: select", + "1211: extract 2 0", + "1212: pushbytes 0x3432", + "1213: ==", + "1218: assert", + "1221: bytec 4", + "1222: box_get", + "1223: bytec 13", + "1224: cover 2", + "1225: select", + "1226: bytec 13", + "1227: ==", + "1228: assert", + "1229: retsub" ], [ "357: intc_0", @@ -11154,13 +11057,13 @@ "343: callsub delete_box_map" ], [ - "1272: delete_box_map:", - "1276: proto 1 0", - "1279: frame_dig -1", - "1280: itob", - "1281: box_del", - "1282: pop", - "1283: retsub" + "1233: delete_box_map:", + "1237: proto 1 0", + "1240: frame_dig -1", + "1241: itob", + "1242: box_del", + "1243: pop", + "1244: retsub" ], [ "344: intc_0", @@ -11197,27 +11100,26 @@ "325: callsub delete_box_ref" ], [ - "1287: delete_box_ref:", - "1291: proto 0 0", - "1294: bytec 14", - "1295: intc_2", - "1296: box_create", - "1297: pop", - "1300: bytec 14", - "1301: box_len", - "1302: bury 1", - "1303: assert", - "1306: bytec 14", - "1307: box_del", - "1308: pop", - "1311: bytec_0", - "1314: box_get", - "1317: !", - "1318: assert", - "1321: pushbytes 0x", - "1322: ==", - "1323: assert", - "1324: retsub" + "1248: delete_box_ref:", + "1251: bytec 14", + "1252: intc_2", + "1253: box_create", + "1254: pop", + "1257: bytec 14", + "1258: box_len", + "1259: bury 1", + "1260: assert", + "1263: bytec 14", + "1264: box_del", + "1265: pop", + "1268: bytec_0", + "1271: box_get", + "1274: !", + "1275: assert", + "1278: pushbytes 0x", + "1279: ==", + "1280: assert", + "1281: retsub" ], [ "326: intc_0", @@ -11254,19 +11156,19 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1346: intc_1", - "1347: swap", - "1348: retsub" + "1303: intc_1", + "1304: swap", + "1305: retsub" ], [ "309: itob", @@ -11308,22 +11210,22 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1350: box_map_length_after_if_else@2:", - "1353: frame_dig 0", - "1354: box_len", - "1355: assert", - "1356: swap", - "1357: retsub" + "1307: box_map_length_after_if_else@2:", + "1310: frame_dig 0", + "1311: box_len", + "1312: assert", + "1313: swap", + "1314: retsub" ], [ "309: itob", @@ -11365,16 +11267,15 @@ "290: callsub length_box_ref" ], [ - "1361: length_box_ref:", - "1365: proto 0 1", - "1368: bytec_0", - "1371: intc_2", - "1372: box_create", - "1373: assert", - "1376: bytec_0", - "1379: box_len", - "1380: assert", - "1381: retsub" + "1318: length_box_ref:", + "1321: bytec_0", + "1324: intc_2", + "1325: box_create", + "1326: assert", + "1329: bytec_0", + "1332: box_len", + "1333: assert", + "1334: retsub" ], [ "291: itob", @@ -11416,28 +11317,27 @@ "270: callsub box_map_struct_length" ], [ - "1385: box_map_struct_length:", - "1389: proto 0 1", - "1392: bytec 7", - "1393: box_del", - "1394: pop", - "1395: bytec 7", - "1398: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "1401: box_put", - "1404: bytec 7", - "1405: box_len", - "1406: assert", - "1407: pushint 28", - "1408: ==", - "1409: assert", - "1412: bytec 7", - "1413: box_len", - "1414: assert", - "1415: pushint 28", - "1416: ==", - "1417: assert", - "1420: intc_0", - "1421: retsub" + "1338: box_map_struct_length:", + "1341: bytec 7", + "1342: box_del", + "1343: pop", + "1344: bytec 7", + "1347: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "1350: box_put", + "1353: bytec 7", + "1354: box_len", + "1355: assert", + "1356: pushint 28", + "1357: ==", + "1358: assert", + "1361: bytec 7", + "1362: box_len", + "1363: assert", + "1364: pushint 28", + "1365: ==", + "1366: assert", + "1369: intc_0", + "1370: retsub" ], [ "271: bytec_3", @@ -11482,28 +11382,27 @@ "258: callsub box_map_length_example" ], [ - "1425: box_map_length_example:", - "1430: proto 0 0", - "1433: intc_1", - "1436: itob", - "1437: dup", - "1438: box_del", - "1439: pop", - "1440: dup", - "1443: pushbytes \"Hmmmmm\"", - "1446: box_put", - "1449: dup", - "1450: box_len", - "1451: assert", - "1452: pushint 6", - "1453: ==", - "1454: assert", - "1457: box_len", - "1458: assert", - "1459: pushint 6", - "1460: ==", - "1461: assert", - "1462: retsub" + "1374: box_map_length_example:", + "1377: intc_1", + "1380: itob", + "1381: dup", + "1382: box_del", + "1383: pop", + "1384: dup", + "1387: pushbytes \"Hmmmmm\"", + "1390: box_put", + "1393: dup", + "1394: box_len", + "1395: assert", + "1396: pushint 6", + "1397: ==", + "1398: assert", + "1401: box_len", + "1402: assert", + "1403: pushint 6", + "1404: ==", + "1405: assert", + "1406: retsub" ], [ "259: intc_0", @@ -11540,49 +11439,48 @@ "245: callsub length_box_ref_example" ], [ - "1466: length_box_ref_example:", - "1470: proto 0 0", - "1473: bytec_0", - "1476: intc_2", - "1477: box_create", - "1478: assert", - "1481: bytec_0", - "1484: box_len", - "1485: assert", - "1486: intc_3", - "1487: ==", - "1488: assert", - "1491: bytec_0", - "1494: intc_2", - "1495: box_create", - "1496: assert", - "1499: bytec_0", - "1502: box_len", - "1503: assert", - "1504: intc_3", - "1505: ==", - "1506: assert", - "1509: bytec_0", - "1512: intc_2", - "1513: box_create", - "1514: assert", - "1517: bytec_0", - "1520: box_len", - "1521: assert", - "1522: intc_3", - "1523: ==", - "1524: assert", - "1527: bytec_0", - "1530: intc_2", - "1531: box_create", - "1532: assert", - "1535: bytec_0", - "1538: box_len", - "1539: assert", - "1540: intc_3", - "1541: ==", - "1542: assert", - "1543: retsub" + "1410: length_box_ref_example:", + "1413: bytec_0", + "1416: intc_2", + "1417: box_create", + "1418: assert", + "1421: bytec_0", + "1424: box_len", + "1425: assert", + "1426: intc_3", + "1427: ==", + "1428: assert", + "1431: bytec_0", + "1434: intc_2", + "1435: box_create", + "1436: assert", + "1439: bytec_0", + "1442: box_len", + "1443: assert", + "1444: intc_3", + "1445: ==", + "1446: assert", + "1449: bytec_0", + "1452: intc_2", + "1453: box_create", + "1454: assert", + "1457: bytec_0", + "1460: box_len", + "1461: assert", + "1462: intc_3", + "1463: ==", + "1464: assert", + "1467: bytec_0", + "1470: intc_2", + "1471: box_create", + "1472: assert", + "1475: bytec_0", + "1478: box_len", + "1479: assert", + "1480: intc_3", + "1481: ==", + "1482: assert", + "1483: retsub" ], [ "246: intc_0", @@ -11619,39 +11517,38 @@ "233: callsub extract_box_ref" ], [ - "1547: extract_box_ref:", - "1552: proto 0 0", - "1555: bytec_0", - "1558: intc_2", - "1559: box_create", - "1560: assert", - "1563: txn Sender", - "1566: global CurrentApplicationAddress", - "1569: bytec_0", - "1572: intc_1", - "1573: dig 3", - "1574: box_replace", - "1577: bytec_0", - "1580: intc_1", - "1581: dup", - "1582: dig 3", - "1583: UNSUPPORTED box_splice", - "1586: bytec_0", - "1589: intc_3", - "1592: bytec 8", - "1595: box_replace", - "1598: bytec_0", - "1601: intc_1", - "1602: pushint 69", - "1603: box_extract", - "1606: swap", - "1607: uncover 2", - "1608: concat", - "1611: bytec 8", - "1614: concat", - "1615: ==", - "1616: assert", - "1617: retsub" + "1487: extract_box_ref:", + "1490: bytec_0", + "1493: intc_2", + "1494: box_create", + "1495: assert", + "1498: txn Sender", + "1501: global CurrentApplicationAddress", + "1504: bytec_0", + "1507: intc_1", + "1508: dig 3", + "1509: box_replace", + "1512: bytec_0", + "1515: intc_1", + "1516: dup", + "1517: dig 3", + "1518: UNSUPPORTED box_splice", + "1521: bytec_0", + "1524: intc_3", + "1527: bytec 8", + "1530: box_replace", + "1533: bytec_0", + "1536: intc_1", + "1537: pushint 69", + "1538: box_extract", + "1541: swap", + "1542: uncover 2", + "1543: concat", + "1546: bytec 8", + "1549: concat", + "1550: ==", + "1551: assert", + "1552: retsub" ], [ "234: intc_0", @@ -11688,60 +11585,59 @@ "220: callsub manipulate_box_ref" ], [ - "1621: manipulate_box_ref:", - "1626: proto 0 0", - "1629: bytec_0", - "1632: intc_2", - "1633: box_create", - "1634: assert", - "1637: bytec_0", - "1640: box_len", - "1641: bury 1", - "1642: assert", - "1646: txn Sender", - "1649: global CurrentApplicationAddress", - "1652: bytec_0", - "1655: intc_1", - "1656: dig 3", - "1657: box_replace", - "1660: bytec_0", - "1663: intc_1", - "1664: dup", - "1665: dig 3", - "1666: UNSUPPORTED box_splice", - "1669: bytec_0", - "1672: intc_3", - "1675: bytec 8", - "1678: box_replace", - "1681: bytec_0", - "1684: intc_1", - "1685: pushint 69", - "1686: box_extract", - "1689: dig 1", - "1690: dig 3", - "1691: concat", - "1694: bytec 8", - "1697: concat", - "1698: ==", - "1699: assert", - "1702: bytec_0", - "1705: box_del", - "1706: assert", - "1709: concat", - "1712: bytec_0", - "1715: swap", - "1716: box_put", - "1719: bytec_0", - "1722: box_len", - "1723: bury 1", - "1724: assert", - "1727: bytec_0", - "1730: box_len", - "1731: assert", - "1732: intc_3", - "1733: ==", - "1734: assert", - "1735: retsub" + "1556: manipulate_box_ref:", + "1559: bytec_0", + "1562: intc_2", + "1563: box_create", + "1564: assert", + "1567: bytec_0", + "1570: box_len", + "1571: bury 1", + "1572: assert", + "1576: txn Sender", + "1579: global CurrentApplicationAddress", + "1582: bytec_0", + "1585: intc_1", + "1586: dig 3", + "1587: box_replace", + "1590: bytec_0", + "1593: intc_1", + "1594: dup", + "1595: dig 3", + "1596: UNSUPPORTED box_splice", + "1599: bytec_0", + "1602: intc_3", + "1605: bytec 8", + "1608: box_replace", + "1611: bytec_0", + "1614: intc_1", + "1615: pushint 69", + "1616: box_extract", + "1619: dig 1", + "1620: dig 3", + "1621: concat", + "1624: bytec 8", + "1627: concat", + "1628: ==", + "1629: assert", + "1632: bytec_0", + "1635: box_del", + "1636: assert", + "1639: concat", + "1642: bytec_0", + "1645: swap", + "1646: box_put", + "1649: bytec_0", + "1652: box_len", + "1653: bury 1", + "1654: assert", + "1657: bytec_0", + "1660: box_len", + "1661: assert", + "1662: intc_3", + "1663: ==", + "1664: assert", + "1665: retsub" ], [ "221: intc_0", @@ -11778,18 +11674,17 @@ "207: callsub value_box" ], [ - "1739: value_box:", - "1744: proto 0 0", - "1747: bytec_2", - "1748: box_get", - "1749: swap", - "1750: btoi", - "1751: swap", - "1752: assert", - "1753: pushint 10", - "1754: ==", - "1755: assert", - "1756: retsub" + "1669: value_box:", + "1672: bytec_2", + "1673: box_get", + "1674: swap", + "1675: btoi", + "1676: swap", + "1677: assert", + "1678: pushint 10", + "1679: ==", + "1680: assert", + "1681: retsub" ], [ "208: intc_0", @@ -11826,12 +11721,11 @@ "186: callsub exist_box" ], [ - "1760: exist_box:", - "1764: proto 0 1", - "1767: bytec_2", - "1768: box_len", - "1769: bury 1", - "1770: retsub" + "1685: exist_box:", + "1688: bytec_2", + "1689: box_len", + "1690: bury 1", + "1691: retsub" ], [ "187: bytec_3", @@ -11876,18 +11770,17 @@ "145: callsub exist_box_example" ], [ - "1774: exist_box_example:", - "1778: proto 0 3", - "1781: bytec 5", - "1782: box_len", - "1783: bury 1", - "1784: bytec 4", - "1785: box_len", - "1786: bury 1", - "1787: bytec 12", - "1788: box_len", - "1789: bury 1", - "1790: retsub" + "1695: exist_box_example:", + "1698: bytec 5", + "1699: box_len", + "1700: bury 1", + "1701: bytec 4", + "1702: box_len", + "1703: bury 1", + "1704: bytec 12", + "1705: box_len", + "1706: bury 1", + "1707: retsub" ], [ "146: bytec_3", @@ -11953,68 +11846,67 @@ "133: callsub slice_box" ], [ - "1794: slice_box:", - "1798: proto 0 0", - "1801: bytec 9", - "1804: box_del", - "1805: pop", - "1808: bytec 9", - "1811: pushbytes 0x54657374696e672074657374696e6720313233", - "1812: box_put", - "1815: bytec 9", - "1818: box_len", - "1819: pop", - "1820: dup", - "1821: intc_1", - "1822: dig 2", - "1823: select", - "1824: pushint 7", - "1825: dig 2", - "1826: <", - "1827: uncover 2", - "1828: pushint 7", - "1829: uncover 2", - "1830: select", - "1831: dig 1", - "1832: -", - "1835: bytec 9", - "1838: cover 2", - "1839: box_extract", - "1840: pushbytes 0x54657374696e67", - "1841: ==", - "1842: assert", - "1845: bytec 4", - "1846: box_del", - "1847: pop", - "1848: bytec 4", - "1849: pushbytes 0x000548656c6c6f", - "1850: box_put", - "1853: bytec 4", - "1854: box_len", - "1855: pop", - "1856: pushint 2", - "1857: dig 1", - "1858: <", - "1859: dig 1", - "1860: pushint 2", - "1861: uncover 2", - "1862: select", - "1863: pushint 10", - "1864: dig 2", - "1865: <", - "1866: uncover 2", - "1867: pushint 10", - "1868: uncover 2", - "1869: select", - "1870: dig 1", - "1871: -", - "1872: bytec 4", - "1873: cover 2", - "1874: box_extract", - "1875: pushbytes 0x48656c6c6f", - "1876: ==", - "1877: assert", - "1878: retsub" + "1711: slice_box:", + "1714: bytec 9", + "1717: box_del", + "1718: pop", + "1721: bytec 9", + "1724: pushbytes 0x54657374696e672074657374696e6720313233", + "1725: box_put", + "1728: bytec 9", + "1731: box_len", + "1732: pop", + "1733: dup", + "1734: intc_1", + "1735: dig 2", + "1736: select", + "1737: pushint 7", + "1738: dig 2", + "1739: <", + "1740: uncover 2", + "1741: pushint 7", + "1742: uncover 2", + "1743: select", + "1744: dig 1", + "1745: -", + "1748: bytec 9", + "1751: cover 2", + "1752: box_extract", + "1753: pushbytes 0x54657374696e67", + "1754: ==", + "1755: assert", + "1758: bytec 4", + "1759: box_del", + "1760: pop", + "1761: bytec 4", + "1762: pushbytes 0x000548656c6c6f", + "1763: box_put", + "1766: bytec 4", + "1767: box_len", + "1768: pop", + "1769: pushint 2", + "1770: dig 1", + "1771: <", + "1772: dig 1", + "1773: pushint 2", + "1774: uncover 2", + "1775: select", + "1776: pushint 10", + "1777: dig 2", + "1778: <", + "1779: uncover 2", + "1780: pushint 10", + "1781: uncover 2", + "1782: select", + "1783: dig 1", + "1784: -", + "1785: bytec 4", + "1786: cover 2", + "1787: box_extract", + "1788: pushbytes 0x48656c6c6f", + "1789: ==", + "1790: assert", + "1791: retsub" ], [ "134: intc_0", @@ -12051,40 +11943,39 @@ "121: callsub arc4_box" ], [ - "1882: arc4_box:", - "1886: proto 0 0", - "1889: bytec 6", - "1894: pushbytes 0x00010203", - "1895: box_put", - "1898: bytec 6", - "1901: box_get", - "1902: assert", - "1903: extract 0 1", - "1904: bytec_3", - "1905: b==", - "1906: assert", - "1909: bytec 6", - "1912: box_get", - "1913: assert", - "1914: extract 1 1", - "1915: pushbytes 0x01", - "1916: b==", - "1917: assert", - "1920: bytec 6", - "1923: box_get", - "1924: assert", - "1925: extract 2 1", - "1926: pushbytes 0x02", - "1927: b==", - "1928: assert", - "1931: bytec 6", - "1934: box_get", - "1935: assert", - "1936: extract 3 1", - "1937: pushbytes 0x03", - "1938: b==", - "1939: assert", - "1940: retsub" + "1795: arc4_box:", + "1798: bytec 6", + "1803: pushbytes 0x00010203", + "1804: box_put", + "1807: bytec 6", + "1810: box_get", + "1811: assert", + "1812: extract 0 1", + "1813: bytec_3", + "1814: b==", + "1815: assert", + "1818: bytec 6", + "1821: box_get", + "1822: assert", + "1823: extract 1 1", + "1824: pushbytes 0x01", + "1825: b==", + "1826: assert", + "1829: bytec 6", + "1832: box_get", + "1833: assert", + "1834: extract 2 1", + "1835: pushbytes 0x02", + "1836: b==", + "1837: assert", + "1840: bytec 6", + "1843: box_get", + "1844: assert", + "1845: extract 3 1", + "1846: pushbytes 0x03", + "1847: b==", + "1848: assert", + "1849: retsub" ], [ "122: intc_0", @@ -12154,11 +12045,10 @@ "96: callsub key_box_example" ], [ - "1944: key_box_example:", - "1948: proto 0 0", - "1951: intc_1", - "1952: assert", - "1953: retsub" + "1853: key_box_example:", + "1856: intc_1", + "1857: assert", + "1858: retsub" ], [ "97: intc_0", @@ -12197,13 +12087,13 @@ "76: callsub box_map_exists" ], [ - "1957: box_map_exists:", - "1962: proto 1 1", - "1965: frame_dig -1", - "1966: itob", - "1967: box_len", - "1968: bury 1", - "1969: retsub" + "1862: box_map_exists:", + "1867: proto 1 1", + "1870: frame_dig -1", + "1871: itob", + "1872: box_len", + "1873: bury 1", + "1874: retsub" ], [ "77: bytec_3", @@ -12249,14 +12139,14 @@ "48: callsub box_map_struct_exists" ], [ - "1973: box_map_struct_exists:", - "1977: proto 1 1", - "1980: bytec 11", - "1981: frame_dig -1", - "1982: concat", - "1983: box_len", - "1984: bury 1", - "1985: retsub" + "1878: box_map_struct_exists:", + "1882: proto 1 1", + "1885: bytec 11", + "1886: frame_dig -1", + "1887: concat", + "1888: box_len", + "1889: bury 1", + "1890: retsub" ], [ "49: bytec_3", @@ -12436,14 +12326,13 @@ ], [ "730: get_box:", - "735: proto 0 1", - "738: bytec_2", - "739: box_get", - "740: swap", - "741: btoi", - "742: swap", - "743: assert", - "744: retsub" + "733: bytec_2", + "734: box_get", + "735: swap", + "736: btoi", + "737: swap", + "738: assert", + "739: retsub" ], [ "709: itob", @@ -12487,13 +12376,13 @@ "685: callsub get_item_box_map" ], [ - "748: get_item_box_map:", - "752: proto 1 1", - "755: frame_dig -1", - "756: itob", - "757: box_get", - "758: assert", - "759: retsub" + "743: get_item_box_map:", + "747: proto 1 1", + "750: frame_dig -1", + "751: itob", + "752: box_get", + "753: assert", + "754: retsub" ], [ "686: dup", @@ -12540,15 +12429,14 @@ "657: callsub get_box_map" ], [ - "763: get_box_map:", - "767: proto 0 1", - "770: intc_0", - "773: itob", - "774: box_get", - "775: bytec 10", - "776: cover 2", - "777: select", - "778: retsub" + "758: get_box_map:", + "761: intc_0", + "764: itob", + "765: box_get", + "766: bytec 10", + "767: cover 2", + "768: select", + "769: retsub" ], [ "658: dup", @@ -12595,24 +12483,23 @@ "645: callsub get_box_ref" ], [ - "782: get_box_ref:", - "786: proto 0 0", - "789: bytec_0", - "792: intc_2", - "793: box_create", - "794: assert", - "797: txn Sender", - "800: bytec_0", - "803: box_del", - "804: assert", - "807: bytec_0", - "810: box_get", - "811: dig 2", - "812: cover 2", - "813: select", - "814: ==", - "815: assert", - "816: retsub" + "773: get_box_ref:", + "776: bytec_0", + "779: intc_2", + "780: box_create", + "781: assert", + "784: txn Sender", + "787: bytec_0", + "790: box_del", + "791: assert", + "794: bytec_0", + "797: box_get", + "798: dig 2", + "799: cover 2", + "800: select", + "801: ==", + "802: assert", + "803: retsub" ], [ "646: intc_0", @@ -12649,14 +12536,13 @@ "622: callsub maybe_box" ], [ - "820: maybe_box:", - "824: proto 0 2", - "827: bytec_2", - "828: box_get", - "829: swap", - "830: btoi", - "833: swap", - "834: retsub" + "807: maybe_box:", + "810: bytec_2", + "811: box_get", + "812: swap", + "813: btoi", + "816: swap", + "817: retsub" ], [ "623: swap", @@ -12704,27 +12590,27 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "858: pushbytes \"\"", - "859: frame_bury 1" + "841: pushbytes \"\"", + "842: frame_bury 1" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -12780,23 +12666,23 @@ "591: callsub maybe_box_map" ], [ - "838: maybe_box_map:", - "842: proto 0 2", - "845: intc_0", - "848: itob", - "849: box_get", - "850: dup", - "851: uncover 2", - "852: swap", - "855: bnz maybe_box_map_after_if_else@2" + "821: maybe_box_map:", + "825: proto 0 2", + "828: intc_0", + "831: itob", + "832: box_get", + "833: dup", + "834: uncover 2", + "835: swap", + "838: bnz maybe_box_map_after_if_else@2" ], [ - "861: maybe_box_map_after_if_else@2:", - "864: frame_dig 1", - "865: frame_dig 0", - "866: uncover 3", - "867: uncover 3", - "868: retsub" + "844: maybe_box_map_after_if_else@2:", + "847: frame_dig 1", + "848: frame_dig 0", + "849: uncover 3", + "850: uncover 3", + "851: retsub" ], [ "592: dig 1", @@ -12852,30 +12738,30 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "899: pushbytes 0x", - "900: frame_bury 1" + "882: pushbytes 0x", + "883: frame_bury 1" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -12931,26 +12817,26 @@ "560: callsub maybe_box_ref" ], [ - "872: maybe_box_ref:", - "876: proto 0 2", - "879: bytec_0", - "882: intc_2", - "883: box_create", - "884: assert", - "887: bytec_0", - "890: box_get", - "891: dup", - "892: uncover 2", - "893: swap", - "896: bnz maybe_box_ref_after_if_else@2" + "855: maybe_box_ref:", + "859: proto 0 2", + "862: bytec_0", + "865: intc_2", + "866: box_create", + "867: assert", + "870: bytec_0", + "873: box_get", + "874: dup", + "875: uncover 2", + "876: swap", + "879: bnz maybe_box_ref_after_if_else@2" ], [ - "902: maybe_box_ref_after_if_else@2:", - "905: frame_dig 1", - "906: frame_dig 0", - "907: uncover 3", - "908: uncover 3", - "909: retsub" + "885: maybe_box_ref_after_if_else@2:", + "888: frame_dig 1", + "889: frame_dig 0", + "890: uncover 3", + "891: uncover 3", + "892: retsub" ], [ "561: dig 1", @@ -13006,22 +12892,21 @@ "522: callsub get_box_example" ], [ - "913: get_box_example:", - "918: proto 0 3", - "921: bytec_2", - "922: box_get", - "923: swap", - "924: btoi", - "925: swap", - "926: assert", - "929: bytec 5", - "930: box_get", - "931: assert", - "932: extract 2 0", - "935: bytec 4", - "936: box_get", - "937: assert", - "944: retsub" + "896: get_box_example:", + "899: bytec_2", + "900: box_get", + "901: swap", + "902: btoi", + "903: swap", + "904: assert", + "907: bytec 5", + "908: box_get", + "909: assert", + "910: extract 2 0", + "913: bytec 4", + "914: box_get", + "915: assert", + "922: retsub" ], [ "523: uncover 2", @@ -13084,19 +12969,18 @@ "501: callsub get_box_map_example" ], [ - "948: get_box_map_example:", - "952: proto 0 1", - "955: intc_0", - "958: itob", - "959: box_get", - "960: bytec 10", - "961: cover 2", - "962: select", - "963: bytec 10", - "964: ==", - "965: assert", - "968: intc_0", - "969: retsub" + "926: get_box_map_example:", + "929: intc_0", + "932: itob", + "933: box_get", + "934: bytec 10", + "935: cover 2", + "936: select", + "937: bytec 10", + "938: ==", + "939: assert", + "942: intc_0", + "943: retsub" ], [ "502: bytec_3", @@ -13141,32 +13025,31 @@ "489: callsub maybe_box_example" ], [ - "973: maybe_box_example:", - "977: proto 0 0", - "980: bytec_2", - "981: box_del", - "982: pop", - "985: bytec_2", - "986: box_get", - "987: swap", - "988: btoi", - "989: pushint 42", - "990: swap", - "991: uncover 2", - "992: select", - "993: pushint 42", - "994: ==", - "995: assert", - "998: bytec_2", - "999: box_get", - "1000: swap", - "1001: btoi", - "1004: swap", - "1005: !", - "1006: assert", - "1009: !", - "1010: assert", - "1011: retsub" + "947: maybe_box_example:", + "950: bytec_2", + "951: box_del", + "952: pop", + "955: bytec_2", + "956: box_get", + "957: swap", + "958: btoi", + "959: pushint 42", + "960: swap", + "961: uncover 2", + "962: select", + "963: pushint 42", + "964: ==", + "965: assert", + "968: bytec_2", + "969: box_get", + "970: swap", + "971: btoi", + "974: swap", + "975: !", + "976: assert", + "979: !", + "980: assert", + "981: retsub" ], [ "490: intc_0", @@ -13203,20 +13086,19 @@ "477: callsub maybe_box_map_example" ], [ - "1015: maybe_box_map_example:", - "1019: proto 0 0", - "1022: intc_0", - "1025: itob", - "1026: box_get", - "1027: bury 1", - "1030: !", - "1031: assert", - "1034: intc_1", - "1037: itob", - "1038: box_len", - "1039: bury 1", - "1040: assert", - "1041: retsub" + "985: maybe_box_map_example:", + "988: intc_0", + "991: itob", + "992: box_get", + "993: bury 1", + "996: !", + "997: assert", + "1000: intc_1", + "1003: itob", + "1004: box_len", + "1005: bury 1", + "1006: assert", + "1007: retsub" ], [ "478: intc_0", @@ -13254,14 +13136,14 @@ "461: callsub get_box_map_struct" ], [ - "1045: get_box_map_struct:", - "1049: proto 1 1", - "1052: bytec 11", - "1053: frame_dig -1", - "1054: concat", - "1055: box_get", - "1056: assert", - "1057: retsub" + "1011: get_box_map_struct:", + "1015: proto 1 1", + "1018: bytec 11", + "1019: frame_dig -1", + "1020: concat", + "1021: box_get", + "1022: assert", + "1023: retsub" ], [ "462: bytec_1", @@ -13304,14 +13186,14 @@ "444: callsub set_box" ], [ - "1061: set_box:", - "1066: proto 1 0", - "1069: frame_dig -1", - "1070: itob", - "1071: bytec_2", - "1072: swap", - "1073: box_put", - "1074: retsub" + "1027: set_box:", + "1032: proto 1 0", + "1035: frame_dig -1", + "1036: itob", + "1037: bytec_2", + "1038: swap", + "1039: box_put", + "1040: retsub" ], [ "445: intc_0", @@ -13352,16 +13234,16 @@ "424: callsub set_box_map" ], [ - "1078: set_box_map:", - "1082: proto 2 0", - "1085: frame_dig -2", - "1086: itob", - "1087: dup", - "1088: box_del", - "1089: pop", - "1090: frame_dig -1", - "1091: box_put", - "1092: retsub" + "1044: set_box_map:", + "1048: proto 2 0", + "1051: frame_dig -2", + "1052: itob", + "1053: dup", + "1054: box_del", + "1055: pop", + "1056: frame_dig -1", + "1057: box_put", + "1058: retsub" ], [ "425: intc_0", @@ -13400,24 +13282,24 @@ "396: callsub set_box_map_struct" ], [ - "1096: set_box_map_struct:", - "1100: proto 2 1", - "1103: bytec 11", - "1104: frame_dig -2", - "1105: concat", - "1106: dup", - "1107: box_del", - "1108: pop", - "1109: dup", - "1110: frame_dig -1", - "1111: box_put", - "1114: box_get", - "1115: assert", - "1116: frame_dig -1", - "1117: ==", - "1118: assert", - "1121: intc_0", - "1122: retsub" + "1062: set_box_map_struct:", + "1066: proto 2 1", + "1069: bytec 11", + "1070: frame_dig -2", + "1071: concat", + "1072: dup", + "1073: box_del", + "1074: pop", + "1075: dup", + "1076: frame_dig -1", + "1077: box_put", + "1080: box_get", + "1081: assert", + "1082: frame_dig -1", + "1083: ==", + "1084: assert", + "1087: intc_0", + "1088: retsub" ], [ "397: bytec_3", @@ -13466,59 +13348,59 @@ "378: callsub set_box_example" ], [ - "1126: set_box_example:", - "1136: proto 3 0", - "1139: frame_dig -3", - "1140: itob", - "1141: bytec_2", - "1142: swap", - "1143: box_put", - "1146: bytec 5", - "1147: box_del", - "1148: pop", - "1149: bytec 5", - "1150: frame_dig -2", - "1151: box_put", - "1154: bytec 4", - "1155: box_del", - "1156: pop", - "1157: bytec 4", - "1158: frame_dig -1", - "1159: box_put", - "1162: frame_dig -2", - "1163: extract 2 0", - "1164: bytec 12", - "1165: box_del", - "1166: pop", - "1167: bytec 12", - "1168: swap", - "1169: box_put", - "1172: bytec 5", - "1173: box_get", - "1174: assert", - "1177: bytec 5", - "1178: box_get", - "1179: assert", - "1180: intc_1", - "1181: extract_uint16", - "1182: swap", - "1183: intc_1", - "1184: extract_uint16", - "1185: ==", - "1190: assert", - "1193: bytec_2", - "1194: box_get", - "1195: swap", - "1196: btoi", - "1197: swap", - "1198: assert", - "1199: pushint 3", - "1200: +", - "1201: itob", - "1202: bytec_2", - "1203: swap", - "1204: box_put", - "1205: retsub" + "1092: set_box_example:", + "1102: proto 3 0", + "1105: frame_dig -3", + "1106: itob", + "1107: bytec_2", + "1108: swap", + "1109: box_put", + "1112: bytec 5", + "1113: box_del", + "1114: pop", + "1115: bytec 5", + "1116: frame_dig -2", + "1117: box_put", + "1120: bytec 4", + "1121: box_del", + "1122: pop", + "1123: bytec 4", + "1124: frame_dig -1", + "1125: box_put", + "1128: frame_dig -2", + "1129: extract 2 0", + "1130: bytec 12", + "1131: box_del", + "1132: pop", + "1133: bytec 12", + "1134: swap", + "1135: box_put", + "1138: bytec 5", + "1139: box_get", + "1140: assert", + "1143: bytec 5", + "1144: box_get", + "1145: assert", + "1146: intc_1", + "1147: extract_uint16", + "1148: swap", + "1149: intc_1", + "1150: extract_uint16", + "1151: ==", + "1156: assert", + "1159: bytec_2", + "1160: box_get", + "1161: swap", + "1162: btoi", + "1163: swap", + "1164: assert", + "1165: pushint 3", + "1166: +", + "1167: itob", + "1168: bytec_2", + "1169: swap", + "1170: box_put", + "1171: retsub" ], [ "379: intc_0", @@ -13555,46 +13437,45 @@ "356: callsub delete_box" ], [ - "1209: delete_box:", - "1214: proto 0 0", - "1217: bytec_2", - "1218: box_del", - "1219: pop", - "1222: bytec 5", - "1223: box_del", - "1224: pop", - "1227: bytec 4", - "1228: box_del", - "1229: pop", - "1232: bytec_2", - "1233: box_get", - "1234: swap", - "1235: btoi", - "1236: pushint 42", - "1237: swap", - "1238: uncover 2", - "1239: select", - "1240: pushint 42", - "1241: ==", - "1242: assert", - "1245: bytec 5", - "1246: box_get", - "1247: bytec 13", - "1248: cover 2", - "1249: select", - "1250: extract 2 0", - "1251: pushbytes 0x3432", - "1252: ==", - "1257: assert", - "1260: bytec 4", - "1261: box_get", - "1262: bytec 13", - "1263: cover 2", - "1264: select", - "1265: bytec 13", - "1266: ==", - "1267: assert", - "1268: retsub" + "1175: delete_box:", + "1178: bytec_2", + "1179: box_del", + "1180: pop", + "1183: bytec 5", + "1184: box_del", + "1185: pop", + "1188: bytec 4", + "1189: box_del", + "1190: pop", + "1193: bytec_2", + "1194: box_get", + "1195: swap", + "1196: btoi", + "1197: pushint 42", + "1198: swap", + "1199: uncover 2", + "1200: select", + "1201: pushint 42", + "1202: ==", + "1203: assert", + "1206: bytec 5", + "1207: box_get", + "1208: bytec 13", + "1209: cover 2", + "1210: select", + "1211: extract 2 0", + "1212: pushbytes 0x3432", + "1213: ==", + "1218: assert", + "1221: bytec 4", + "1222: box_get", + "1223: bytec 13", + "1224: cover 2", + "1225: select", + "1226: bytec 13", + "1227: ==", + "1228: assert", + "1229: retsub" ], [ "357: intc_0", @@ -13633,13 +13514,13 @@ "343: callsub delete_box_map" ], [ - "1272: delete_box_map:", - "1276: proto 1 0", - "1279: frame_dig -1", - "1280: itob", - "1281: box_del", - "1282: pop", - "1283: retsub" + "1233: delete_box_map:", + "1237: proto 1 0", + "1240: frame_dig -1", + "1241: itob", + "1242: box_del", + "1243: pop", + "1244: retsub" ], [ "344: intc_0", @@ -13676,27 +13557,26 @@ "325: callsub delete_box_ref" ], [ - "1287: delete_box_ref:", - "1291: proto 0 0", - "1294: bytec 14", - "1295: intc_2", - "1296: box_create", - "1297: pop", - "1300: bytec 14", - "1301: box_len", - "1302: bury 1", - "1303: assert", - "1306: bytec 14", - "1307: box_del", - "1308: pop", - "1311: bytec_0", - "1314: box_get", - "1317: !", - "1318: assert", - "1321: pushbytes 0x", - "1322: ==", - "1323: assert", - "1324: retsub" + "1248: delete_box_ref:", + "1251: bytec 14", + "1252: intc_2", + "1253: box_create", + "1254: pop", + "1257: bytec 14", + "1258: box_len", + "1259: bury 1", + "1260: assert", + "1263: bytec 14", + "1264: box_del", + "1265: pop", + "1268: bytec_0", + "1271: box_get", + "1274: !", + "1275: assert", + "1278: pushbytes 0x", + "1279: ==", + "1280: assert", + "1281: retsub" ], [ "326: intc_0", @@ -13733,19 +13613,19 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1346: intc_1", - "1347: swap", - "1348: retsub" + "1303: intc_1", + "1304: swap", + "1305: retsub" ], [ "309: itob", @@ -13787,22 +13667,22 @@ "308: callsub box_map_length" ], [ - "1328: box_map_length:", - "1333: proto 0 1", - "1336: intc_1", - "1339: itob", - "1340: dup", - "1341: box_len", - "1342: bury 1", - "1343: bnz box_map_length_after_if_else@2" + "1285: box_map_length:", + "1290: proto 0 1", + "1293: intc_1", + "1296: itob", + "1297: dup", + "1298: box_len", + "1299: bury 1", + "1300: bnz box_map_length_after_if_else@2" ], [ - "1350: box_map_length_after_if_else@2:", - "1353: frame_dig 0", - "1354: box_len", - "1355: assert", - "1356: swap", - "1357: retsub" + "1307: box_map_length_after_if_else@2:", + "1310: frame_dig 0", + "1311: box_len", + "1312: assert", + "1313: swap", + "1314: retsub" ], [ "309: itob", @@ -13844,16 +13724,15 @@ "290: callsub length_box_ref" ], [ - "1361: length_box_ref:", - "1365: proto 0 1", - "1368: bytec_0", - "1371: intc_2", - "1372: box_create", - "1373: assert", - "1376: bytec_0", - "1379: box_len", - "1380: assert", - "1381: retsub" + "1318: length_box_ref:", + "1321: bytec_0", + "1324: intc_2", + "1325: box_create", + "1326: assert", + "1329: bytec_0", + "1332: box_len", + "1333: assert", + "1334: retsub" ], [ "291: itob", @@ -13895,28 +13774,27 @@ "270: callsub box_map_struct_length" ], [ - "1385: box_map_struct_length:", - "1389: proto 0 1", - "1392: bytec 7", - "1393: box_del", - "1394: pop", - "1395: bytec 7", - "1398: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "1401: box_put", - "1404: bytec 7", - "1405: box_len", - "1406: assert", - "1407: pushint 28", - "1408: ==", - "1409: assert", - "1412: bytec 7", - "1413: box_len", - "1414: assert", - "1415: pushint 28", - "1416: ==", - "1417: assert", - "1420: intc_0", - "1421: retsub" + "1338: box_map_struct_length:", + "1341: bytec 7", + "1342: box_del", + "1343: pop", + "1344: bytec 7", + "1347: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "1350: box_put", + "1353: bytec 7", + "1354: box_len", + "1355: assert", + "1356: pushint 28", + "1357: ==", + "1358: assert", + "1361: bytec 7", + "1362: box_len", + "1363: assert", + "1364: pushint 28", + "1365: ==", + "1366: assert", + "1369: intc_0", + "1370: retsub" ], [ "271: bytec_3", @@ -13961,28 +13839,27 @@ "258: callsub box_map_length_example" ], [ - "1425: box_map_length_example:", - "1430: proto 0 0", - "1433: intc_1", - "1436: itob", - "1437: dup", - "1438: box_del", - "1439: pop", - "1440: dup", - "1443: pushbytes \"Hmmmmm\"", - "1446: box_put", - "1449: dup", - "1450: box_len", - "1451: assert", - "1452: pushint 6", - "1453: ==", - "1454: assert", - "1457: box_len", - "1458: assert", - "1459: pushint 6", - "1460: ==", - "1461: assert", - "1462: retsub" + "1374: box_map_length_example:", + "1377: intc_1", + "1380: itob", + "1381: dup", + "1382: box_del", + "1383: pop", + "1384: dup", + "1387: pushbytes \"Hmmmmm\"", + "1390: box_put", + "1393: dup", + "1394: box_len", + "1395: assert", + "1396: pushint 6", + "1397: ==", + "1398: assert", + "1401: box_len", + "1402: assert", + "1403: pushint 6", + "1404: ==", + "1405: assert", + "1406: retsub" ], [ "259: intc_0", @@ -14019,49 +13896,48 @@ "245: callsub length_box_ref_example" ], [ - "1466: length_box_ref_example:", - "1470: proto 0 0", - "1473: bytec_0", - "1476: intc_2", - "1477: box_create", - "1478: assert", - "1481: bytec_0", - "1484: box_len", - "1485: assert", - "1486: intc_3", - "1487: ==", - "1488: assert", - "1491: bytec_0", - "1494: intc_2", - "1495: box_create", - "1496: assert", - "1499: bytec_0", - "1502: box_len", - "1503: assert", - "1504: intc_3", - "1505: ==", - "1506: assert", - "1509: bytec_0", - "1512: intc_2", - "1513: box_create", - "1514: assert", - "1517: bytec_0", - "1520: box_len", - "1521: assert", - "1522: intc_3", - "1523: ==", - "1524: assert", - "1527: bytec_0", - "1530: intc_2", - "1531: box_create", - "1532: assert", - "1535: bytec_0", - "1538: box_len", - "1539: assert", - "1540: intc_3", - "1541: ==", - "1542: assert", - "1543: retsub" + "1410: length_box_ref_example:", + "1413: bytec_0", + "1416: intc_2", + "1417: box_create", + "1418: assert", + "1421: bytec_0", + "1424: box_len", + "1425: assert", + "1426: intc_3", + "1427: ==", + "1428: assert", + "1431: bytec_0", + "1434: intc_2", + "1435: box_create", + "1436: assert", + "1439: bytec_0", + "1442: box_len", + "1443: assert", + "1444: intc_3", + "1445: ==", + "1446: assert", + "1449: bytec_0", + "1452: intc_2", + "1453: box_create", + "1454: assert", + "1457: bytec_0", + "1460: box_len", + "1461: assert", + "1462: intc_3", + "1463: ==", + "1464: assert", + "1467: bytec_0", + "1470: intc_2", + "1471: box_create", + "1472: assert", + "1475: bytec_0", + "1478: box_len", + "1479: assert", + "1480: intc_3", + "1481: ==", + "1482: assert", + "1483: retsub" ], [ "246: intc_0", @@ -14098,39 +13974,38 @@ "233: callsub extract_box_ref" ], [ - "1547: extract_box_ref:", - "1552: proto 0 0", - "1555: bytec_0", - "1558: intc_2", - "1559: box_create", - "1560: assert", - "1563: txn Sender", - "1566: global CurrentApplicationAddress", - "1569: bytec_0", - "1572: intc_1", - "1573: dig 3", - "1574: box_replace", - "1577: bytec_0", - "1580: intc_1", - "1581: dup", - "1582: dig 3", - "1583: UNSUPPORTED box_splice", - "1586: bytec_0", - "1589: intc_3", - "1592: bytec 8", - "1595: box_replace", - "1598: bytec_0", - "1601: intc_1", - "1602: pushint 69", - "1603: box_extract", - "1606: swap", - "1607: uncover 2", - "1608: concat", - "1611: bytec 8", - "1614: concat", - "1615: ==", - "1616: assert", - "1617: retsub" + "1487: extract_box_ref:", + "1490: bytec_0", + "1493: intc_2", + "1494: box_create", + "1495: assert", + "1498: txn Sender", + "1501: global CurrentApplicationAddress", + "1504: bytec_0", + "1507: intc_1", + "1508: dig 3", + "1509: box_replace", + "1512: bytec_0", + "1515: intc_1", + "1516: dup", + "1517: dig 3", + "1518: UNSUPPORTED box_splice", + "1521: bytec_0", + "1524: intc_3", + "1527: bytec 8", + "1530: box_replace", + "1533: bytec_0", + "1536: intc_1", + "1537: pushint 69", + "1538: box_extract", + "1541: swap", + "1542: uncover 2", + "1543: concat", + "1546: bytec 8", + "1549: concat", + "1550: ==", + "1551: assert", + "1552: retsub" ], [ "234: intc_0", @@ -14167,60 +14042,59 @@ "220: callsub manipulate_box_ref" ], [ - "1621: manipulate_box_ref:", - "1626: proto 0 0", - "1629: bytec_0", - "1632: intc_2", - "1633: box_create", - "1634: assert", - "1637: bytec_0", - "1640: box_len", - "1641: bury 1", - "1642: assert", - "1646: txn Sender", - "1649: global CurrentApplicationAddress", - "1652: bytec_0", - "1655: intc_1", - "1656: dig 3", - "1657: box_replace", - "1660: bytec_0", - "1663: intc_1", - "1664: dup", - "1665: dig 3", - "1666: UNSUPPORTED box_splice", - "1669: bytec_0", - "1672: intc_3", - "1675: bytec 8", - "1678: box_replace", - "1681: bytec_0", - "1684: intc_1", - "1685: pushint 69", - "1686: box_extract", - "1689: dig 1", - "1690: dig 3", - "1691: concat", - "1694: bytec 8", - "1697: concat", - "1698: ==", - "1699: assert", - "1702: bytec_0", - "1705: box_del", - "1706: assert", - "1709: concat", - "1712: bytec_0", - "1715: swap", - "1716: box_put", - "1719: bytec_0", - "1722: box_len", - "1723: bury 1", - "1724: assert", - "1727: bytec_0", - "1730: box_len", - "1731: assert", - "1732: intc_3", - "1733: ==", - "1734: assert", - "1735: retsub" + "1556: manipulate_box_ref:", + "1559: bytec_0", + "1562: intc_2", + "1563: box_create", + "1564: assert", + "1567: bytec_0", + "1570: box_len", + "1571: bury 1", + "1572: assert", + "1576: txn Sender", + "1579: global CurrentApplicationAddress", + "1582: bytec_0", + "1585: intc_1", + "1586: dig 3", + "1587: box_replace", + "1590: bytec_0", + "1593: intc_1", + "1594: dup", + "1595: dig 3", + "1596: UNSUPPORTED box_splice", + "1599: bytec_0", + "1602: intc_3", + "1605: bytec 8", + "1608: box_replace", + "1611: bytec_0", + "1614: intc_1", + "1615: pushint 69", + "1616: box_extract", + "1619: dig 1", + "1620: dig 3", + "1621: concat", + "1624: bytec 8", + "1627: concat", + "1628: ==", + "1629: assert", + "1632: bytec_0", + "1635: box_del", + "1636: assert", + "1639: concat", + "1642: bytec_0", + "1645: swap", + "1646: box_put", + "1649: bytec_0", + "1652: box_len", + "1653: bury 1", + "1654: assert", + "1657: bytec_0", + "1660: box_len", + "1661: assert", + "1662: intc_3", + "1663: ==", + "1664: assert", + "1665: retsub" ], [ "221: intc_0", @@ -14257,18 +14131,17 @@ "207: callsub value_box" ], [ - "1739: value_box:", - "1744: proto 0 0", - "1747: bytec_2", - "1748: box_get", - "1749: swap", - "1750: btoi", - "1751: swap", - "1752: assert", - "1753: pushint 10", - "1754: ==", - "1755: assert", - "1756: retsub" + "1669: value_box:", + "1672: bytec_2", + "1673: box_get", + "1674: swap", + "1675: btoi", + "1676: swap", + "1677: assert", + "1678: pushint 10", + "1679: ==", + "1680: assert", + "1681: retsub" ], [ "208: intc_0", @@ -14305,12 +14178,11 @@ "186: callsub exist_box" ], [ - "1760: exist_box:", - "1764: proto 0 1", - "1767: bytec_2", - "1768: box_len", - "1769: bury 1", - "1770: retsub" + "1685: exist_box:", + "1688: bytec_2", + "1689: box_len", + "1690: bury 1", + "1691: retsub" ], [ "187: bytec_3", @@ -14355,18 +14227,17 @@ "145: callsub exist_box_example" ], [ - "1774: exist_box_example:", - "1778: proto 0 3", - "1781: bytec 5", - "1782: box_len", - "1783: bury 1", - "1784: bytec 4", - "1785: box_len", - "1786: bury 1", - "1787: bytec 12", - "1788: box_len", - "1789: bury 1", - "1790: retsub" + "1695: exist_box_example:", + "1698: bytec 5", + "1699: box_len", + "1700: bury 1", + "1701: bytec 4", + "1702: box_len", + "1703: bury 1", + "1704: bytec 12", + "1705: box_len", + "1706: bury 1", + "1707: retsub" ], [ "146: bytec_3", @@ -14432,68 +14303,67 @@ "133: callsub slice_box" ], [ - "1794: slice_box:", - "1798: proto 0 0", - "1801: bytec 9", - "1804: box_del", - "1805: pop", - "1808: bytec 9", - "1811: pushbytes 0x54657374696e672074657374696e6720313233", - "1812: box_put", - "1815: bytec 9", - "1818: box_len", - "1819: pop", - "1820: dup", - "1821: intc_1", - "1822: dig 2", - "1823: select", - "1824: pushint 7", - "1825: dig 2", - "1826: <", - "1827: uncover 2", - "1828: pushint 7", - "1829: uncover 2", - "1830: select", - "1831: dig 1", - "1832: -", - "1835: bytec 9", - "1838: cover 2", - "1839: box_extract", - "1840: pushbytes 0x54657374696e67", - "1841: ==", - "1842: assert", - "1845: bytec 4", - "1846: box_del", - "1847: pop", - "1848: bytec 4", - "1849: pushbytes 0x000548656c6c6f", - "1850: box_put", - "1853: bytec 4", - "1854: box_len", - "1855: pop", - "1856: pushint 2", - "1857: dig 1", - "1858: <", - "1859: dig 1", - "1860: pushint 2", - "1861: uncover 2", - "1862: select", - "1863: pushint 10", - "1864: dig 2", - "1865: <", - "1866: uncover 2", - "1867: pushint 10", - "1868: uncover 2", - "1869: select", - "1870: dig 1", - "1871: -", - "1872: bytec 4", - "1873: cover 2", - "1874: box_extract", - "1875: pushbytes 0x48656c6c6f", - "1876: ==", - "1877: assert", - "1878: retsub" + "1711: slice_box:", + "1714: bytec 9", + "1717: box_del", + "1718: pop", + "1721: bytec 9", + "1724: pushbytes 0x54657374696e672074657374696e6720313233", + "1725: box_put", + "1728: bytec 9", + "1731: box_len", + "1732: pop", + "1733: dup", + "1734: intc_1", + "1735: dig 2", + "1736: select", + "1737: pushint 7", + "1738: dig 2", + "1739: <", + "1740: uncover 2", + "1741: pushint 7", + "1742: uncover 2", + "1743: select", + "1744: dig 1", + "1745: -", + "1748: bytec 9", + "1751: cover 2", + "1752: box_extract", + "1753: pushbytes 0x54657374696e67", + "1754: ==", + "1755: assert", + "1758: bytec 4", + "1759: box_del", + "1760: pop", + "1761: bytec 4", + "1762: pushbytes 0x000548656c6c6f", + "1763: box_put", + "1766: bytec 4", + "1767: box_len", + "1768: pop", + "1769: pushint 2", + "1770: dig 1", + "1771: <", + "1772: dig 1", + "1773: pushint 2", + "1774: uncover 2", + "1775: select", + "1776: pushint 10", + "1777: dig 2", + "1778: <", + "1779: uncover 2", + "1780: pushint 10", + "1781: uncover 2", + "1782: select", + "1783: dig 1", + "1784: -", + "1785: bytec 4", + "1786: cover 2", + "1787: box_extract", + "1788: pushbytes 0x48656c6c6f", + "1789: ==", + "1790: assert", + "1791: retsub" ], [ "134: intc_0", @@ -14530,40 +14400,39 @@ "121: callsub arc4_box" ], [ - "1882: arc4_box:", - "1886: proto 0 0", - "1889: bytec 6", - "1894: pushbytes 0x00010203", - "1895: box_put", - "1898: bytec 6", - "1901: box_get", - "1902: assert", - "1903: extract 0 1", - "1904: bytec_3", - "1905: b==", - "1906: assert", - "1909: bytec 6", - "1912: box_get", - "1913: assert", - "1914: extract 1 1", - "1915: pushbytes 0x01", - "1916: b==", - "1917: assert", - "1920: bytec 6", - "1923: box_get", - "1924: assert", - "1925: extract 2 1", - "1926: pushbytes 0x02", - "1927: b==", - "1928: assert", - "1931: bytec 6", - "1934: box_get", - "1935: assert", - "1936: extract 3 1", - "1937: pushbytes 0x03", - "1938: b==", - "1939: assert", - "1940: retsub" + "1795: arc4_box:", + "1798: bytec 6", + "1803: pushbytes 0x00010203", + "1804: box_put", + "1807: bytec 6", + "1810: box_get", + "1811: assert", + "1812: extract 0 1", + "1813: bytec_3", + "1814: b==", + "1815: assert", + "1818: bytec 6", + "1821: box_get", + "1822: assert", + "1823: extract 1 1", + "1824: pushbytes 0x01", + "1825: b==", + "1826: assert", + "1829: bytec 6", + "1832: box_get", + "1833: assert", + "1834: extract 2 1", + "1835: pushbytes 0x02", + "1836: b==", + "1837: assert", + "1840: bytec 6", + "1843: box_get", + "1844: assert", + "1845: extract 3 1", + "1846: pushbytes 0x03", + "1847: b==", + "1848: assert", + "1849: retsub" ], [ "122: intc_0", @@ -14633,11 +14502,10 @@ "96: callsub key_box_example" ], [ - "1944: key_box_example:", - "1948: proto 0 0", - "1951: intc_1", - "1952: assert", - "1953: retsub" + "1853: key_box_example:", + "1856: intc_1", + "1857: assert", + "1858: retsub" ], [ "97: intc_0", @@ -14676,13 +14544,13 @@ "76: callsub box_map_exists" ], [ - "1957: box_map_exists:", - "1962: proto 1 1", - "1965: frame_dig -1", - "1966: itob", - "1967: box_len", - "1968: bury 1", - "1969: retsub" + "1862: box_map_exists:", + "1867: proto 1 1", + "1870: frame_dig -1", + "1871: itob", + "1872: box_len", + "1873: bury 1", + "1874: retsub" ], [ "77: bytec_3", @@ -14728,14 +14596,14 @@ "48: callsub box_map_struct_exists" ], [ - "1973: box_map_struct_exists:", - "1977: proto 1 1", - "1980: bytec 11", - "1981: frame_dig -1", - "1982: concat", - "1983: box_len", - "1984: bury 1", - "1985: retsub" + "1878: box_map_struct_exists:", + "1882: proto 1 1", + "1885: bytec 11", + "1886: frame_dig -1", + "1887: concat", + "1888: box_len", + "1889: bury 1", + "1890: retsub" ], [ "49: bytec_3", diff --git a/projects/python-examples/.algokit/static-analysis/snapshots/CustomCreate.approval.json b/projects/python-examples/.algokit/static-analysis/snapshots/CustomCreate.approval.json index aa53d95..1c7196e 100644 --- a/projects/python-examples/.algokit/static-analysis/snapshots/CustomCreate.approval.json +++ b/projects/python-examples/.algokit/static-analysis/snapshots/CustomCreate.approval.json @@ -67,12 +67,11 @@ ], [ "74: get_age:", - "78: proto 0 1", - "81: intc_0", - "82: bytec_0", - "83: app_global_get_ex", - "84: assert", - "85: retsub" + "77: intc_0", + "78: bytec_0", + "79: app_global_get_ex", + "80: assert", + "81: retsub" ], [ "31: itob", @@ -173,12 +172,11 @@ ], [ "74: get_age:", - "78: proto 0 1", - "81: intc_0", - "82: bytec_0", - "83: app_global_get_ex", - "84: assert", - "85: retsub" + "77: intc_0", + "78: bytec_0", + "79: app_global_get_ex", + "80: assert", + "81: retsub" ], [ "31: itob", @@ -395,12 +393,11 @@ ], [ "74: get_age:", - "78: proto 0 1", - "81: intc_0", - "82: bytec_0", - "83: app_global_get_ex", - "84: assert", - "85: retsub" + "77: intc_0", + "78: bytec_0", + "79: app_global_get_ex", + "80: assert", + "81: retsub" ], [ "31: itob", @@ -501,12 +498,11 @@ ], [ "74: get_age:", - "78: proto 0 1", - "81: intc_0", - "82: bytec_0", - "83: app_global_get_ex", - "84: assert", - "85: retsub" + "77: intc_0", + "78: bytec_0", + "79: app_global_get_ex", + "80: assert", + "81: retsub" ], [ "31: itob", @@ -652,12 +648,11 @@ ], [ "74: get_age:", - "78: proto 0 1", - "81: intc_0", - "82: bytec_0", - "83: app_global_get_ex", - "84: assert", - "85: retsub" + "77: intc_0", + "78: bytec_0", + "79: app_global_get_ex", + "80: assert", + "81: retsub" ], [ "31: itob", @@ -813,12 +808,11 @@ ], [ "74: get_age:", - "78: proto 0 1", - "81: intc_0", - "82: bytec_0", - "83: app_global_get_ex", - "84: assert", - "85: retsub" + "77: intc_0", + "78: bytec_0", + "79: app_global_get_ex", + "80: assert", + "81: retsub" ], [ "31: itob", diff --git a/projects/python-examples/.algokit/static-analysis/snapshots/GlobalStorage.approval.json b/projects/python-examples/.algokit/static-analysis/snapshots/GlobalStorage.approval.json index 4917956..016994e 100644 --- a/projects/python-examples/.algokit/static-analysis/snapshots/GlobalStorage.approval.json +++ b/projects/python-examples/.algokit/static-analysis/snapshots/GlobalStorage.approval.json @@ -77,14 +77,13 @@ ], [ "271: get_global_state:", - "276: proto 0 1", - "279: intc_0", - "280: bytec_1", - "281: app_global_get_ex", - "282: intc_0", - "283: cover 2", - "284: select", - "285: retsub" + "274: intc_0", + "275: bytec_1", + "276: app_global_get_ex", + "277: intc_0", + "278: cover 2", + "279: select", + "280: retsub" ], [ "250: itob", @@ -131,27 +130,27 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "307: intc_0", - "308: frame_bury 1" + "302: intc_0", + "303: frame_bury 1" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -204,23 +203,23 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -273,43 +272,42 @@ "205: callsub get_global_state_example" ], [ - "321: get_global_state_example:", - "325: proto 0 1", - "328: intc_0", - "329: bytec_1", - "330: app_global_get_ex", - "331: intc_0", - "332: cover 2", - "333: select", - "334: intc_3", + "316: get_global_state_example:", + "319: intc_0", + "320: bytec_1", + "321: app_global_get_ex", + "322: intc_0", + "323: cover 2", + "324: select", + "325: intc_3", + "326: ==", + "327: assert", + "330: intc_0", + "331: bytec 8", + "332: app_global_get_ex", + "333: assert", + "334: intc_2", "335: ==", "336: assert", "339: intc_0", - "340: bytec 8", + "340: bytec 11", "341: app_global_get_ex", - "342: assert", - "343: intc_2", - "344: ==", - "345: assert", - "348: intc_0", - "349: bytec 11", - "350: app_global_get_ex", - "351: intc_0", - "352: cover 2", - "353: select", - "354: !", - "355: assert", - "358: intc_0", - "359: bytec_2", - "360: app_global_get_ex", - "361: pushbytes 0x64656661756c74", - "362: cover 2", - "363: select", - "364: bytec_0", - "365: ==", - "366: assert", - "369: intc_1", - "370: retsub" + "342: intc_0", + "343: cover 2", + "344: select", + "345: !", + "346: assert", + "349: intc_0", + "350: bytec_2", + "351: app_global_get_ex", + "352: pushbytes 0x64656661756c74", + "353: cover 2", + "354: select", + "355: bytec_0", + "356: ==", + "357: assert", + "360: intc_1", + "361: retsub" ], [ "206: bytec 4", @@ -359,56 +357,55 @@ "185: callsub maybe_global_state_example" ], [ - "374: maybe_global_state_example:", - "379: proto 0 1", - "382: intc_0", - "383: bytec_1", - "384: app_global_get_ex", - "387: assert", - "390: intc_3", - "391: ==", - "392: assert", - "395: intc_0", - "396: bytec_2", - "397: app_global_get_ex", - "400: assert", - "403: bytec_0", - "404: ==", - "405: assert", - "408: intc_0", - "409: bytec_2", - "410: app_global_get_ex", - "411: bury 1", - "414: !", - "415: assert", - "418: intc_0", - "419: bytec_2", - "420: app_global_get_ex", + "365: maybe_global_state_example:", + "368: intc_0", + "369: bytec_1", + "370: app_global_get_ex", + "373: assert", + "376: intc_3", + "377: ==", + "378: assert", + "381: intc_0", + "382: bytec_2", + "383: app_global_get_ex", + "386: assert", + "389: bytec_0", + "390: ==", + "391: assert", + "394: intc_0", + "395: bytec_2", + "396: app_global_get_ex", + "397: bury 1", + "400: !", + "401: assert", + "404: intc_0", + "405: bytec_2", + "406: app_global_get_ex", + "407: assert", + "408: bytec_0", + "409: ==", + "410: assert", + "413: intc_0", + "414: bytec 5", + "415: app_global_get_ex", + "418: assert", "421: assert", - "422: bytec_0", - "423: ==", - "424: assert", - "427: intc_0", - "428: bytec 5", - "429: app_global_get_ex", - "432: assert", - "435: assert", - "438: intc_0", - "439: bytec 6", - "440: app_global_get_ex", - "443: assert", - "446: intc_2", - "447: ==", - "448: assert", - "451: intc_0", - "452: bytec 12", - "453: app_global_get_ex", - "456: assert", - "459: intc_2", - "460: ==", - "461: assert", - "464: intc_1", - "465: retsub" + "424: intc_0", + "425: bytec 6", + "426: app_global_get_ex", + "429: assert", + "432: intc_2", + "433: ==", + "434: assert", + "437: intc_0", + "438: bytec 12", + "439: app_global_get_ex", + "442: assert", + "445: intc_2", + "446: ==", + "447: assert", + "450: intc_1", + "451: retsub" ], [ "186: bytec 4", @@ -458,84 +455,83 @@ "164: callsub check_global_state_example" ], [ - "469: check_global_state_example:", - "474: proto 0 1", - "477: intc_0", - "478: bytec_1", - "479: app_global_get_ex", - "480: assert", - "481: intc_3", - "482: ==", - "483: assert", - "486: intc_0", - "487: bytec_2", - "488: app_global_get_ex", - "489: assert", - "490: bytec_0", - "491: ==", - "492: assert", - "495: intc_0", - "496: bytec 8", - "497: app_global_get_ex", + "455: check_global_state_example:", + "458: intc_0", + "459: bytec_1", + "460: app_global_get_ex", + "461: assert", + "462: intc_3", + "463: ==", + "464: assert", + "467: intc_0", + "468: bytec_2", + "469: app_global_get_ex", + "470: assert", + "471: bytec_0", + "472: ==", + "473: assert", + "476: intc_0", + "477: bytec 8", + "478: app_global_get_ex", + "479: assert", + "480: intc_2", + "481: ==", + "482: assert", + "485: intc_0", + "486: bytec 9", + "487: app_global_get_ex", + "488: assert", + "489: bytec_0", + "490: ==", + "491: assert", + "494: intc_0", + "495: bytec 10", + "496: app_global_get_ex", + "497: assert", "498: assert", - "499: intc_2", - "500: ==", - "501: assert", - "504: intc_0", - "505: bytec 9", - "506: app_global_get_ex", - "507: assert", - "508: bytec_0", - "509: ==", - "510: assert", - "513: intc_0", - "514: bytec 10", - "515: app_global_get_ex", - "516: assert", - "517: assert", - "520: intc_0", - "521: bytec 11", - "522: app_global_get_ex", - "523: bury 1", - "524: !", - "525: assert", - "528: intc_0", - "529: bytec 7", - "530: app_global_get_ex", - "531: bury 1", - "532: !", - "533: assert", - "536: intc_0", - "537: bytec 5", - "538: app_global_get_ex", - "539: bury 1", - "540: !", - "541: assert", - "544: intc_0", - "545: bytec 6", - "546: app_global_get_ex", - "547: assert", - "548: intc_2", - "549: ==", - "550: assert", - "553: intc_0", - "554: bytec 12", - "555: app_global_get_ex", - "556: assert", - "557: intc_2", - "558: ==", - "559: assert", - "562: intc_0", - "563: pushbytes \"global_account\"", - "564: app_global_get_ex", - "565: assert", - "566: intc_0", - "567: assert", - "568: bytec_0", - "569: ==", - "570: assert", - "573: intc_1", - "574: retsub" + "501: intc_0", + "502: bytec 11", + "503: app_global_get_ex", + "504: bury 1", + "505: !", + "506: assert", + "509: intc_0", + "510: bytec 7", + "511: app_global_get_ex", + "512: bury 1", + "513: !", + "514: assert", + "517: intc_0", + "518: bytec 5", + "519: app_global_get_ex", + "520: bury 1", + "521: !", + "522: assert", + "525: intc_0", + "526: bytec 6", + "527: app_global_get_ex", + "528: assert", + "529: intc_2", + "530: ==", + "531: assert", + "534: intc_0", + "535: bytec 12", + "536: app_global_get_ex", + "537: assert", + "538: intc_2", + "539: ==", + "540: assert", + "543: intc_0", + "544: pushbytes \"global_account\"", + "545: app_global_get_ex", + "546: assert", + "547: intc_0", + "548: assert", + "549: bytec_0", + "550: ==", + "551: assert", + "554: intc_1", + "555: retsub" ], [ "165: bytec 4", @@ -587,12 +583,12 @@ "151: callsub set_global_state" ], [ - "578: set_global_state:", - "583: proto 1 0", - "586: bytec_2", - "587: frame_dig -1", - "588: app_global_put", - "589: retsub" + "559: set_global_state:", + "564: proto 1 0", + "567: bytec_2", + "568: frame_dig -1", + "569: app_global_put", + "570: retsub" ], [ "152: intc_1", @@ -642,37 +638,37 @@ "131: callsub set_global_state_example" ], [ - "593: set_global_state_example:", - "604: proto 3 0", - "607: bytec 7", - "608: frame_dig -3", - "609: app_global_put", - "612: intc_0", - "613: bytec 7", - "614: app_global_get_ex", - "615: assert", - "616: frame_dig -3", - "617: ==", - "618: assert", - "621: bytec 5", - "622: frame_dig -1", - "623: app_global_put", - "626: intc_0", - "627: bytec 5", - "628: app_global_get_ex", - "629: assert", - "630: assert", - "633: bytec 6", - "634: frame_dig -2", - "635: app_global_put", - "638: intc_0", - "639: bytec 6", - "640: app_global_get_ex", - "641: assert", - "642: frame_dig -2", - "643: ==", - "644: assert", - "645: retsub" + "574: set_global_state_example:", + "585: proto 3 0", + "588: bytec 7", + "589: frame_dig -3", + "590: app_global_put", + "593: intc_0", + "594: bytec 7", + "595: app_global_get_ex", + "596: assert", + "597: frame_dig -3", + "598: ==", + "599: assert", + "602: bytec 5", + "603: frame_dig -1", + "604: app_global_put", + "607: intc_0", + "608: bytec 5", + "609: app_global_get_ex", + "610: assert", + "611: assert", + "614: bytec 6", + "615: frame_dig -2", + "616: app_global_put", + "619: intc_0", + "620: bytec 6", + "621: app_global_get_ex", + "622: assert", + "623: frame_dig -2", + "624: ==", + "625: assert", + "626: retsub" ], [ "132: intc_1", @@ -714,12 +710,11 @@ "97: callsub del_global_state" ], [ - "649: del_global_state:", - "654: proto 0 1", - "657: bytec_1", - "658: app_global_del", - "661: intc_1", - "662: retsub" + "630: del_global_state:", + "633: bytec_1", + "634: app_global_del", + "637: intc_1", + "638: retsub" ], [ "98: bytec 4", @@ -769,16 +764,15 @@ "76: callsub del_global_state_example" ], [ - "666: del_global_state_example:", - "671: proto 0 1", - "674: bytec 7", - "675: app_global_del", - "678: bytec 5", - "679: app_global_del", - "682: bytec 6", - "683: app_global_del", - "686: intc_1", - "687: retsub" + "642: del_global_state_example:", + "645: bytec 7", + "646: app_global_del", + "649: bytec 5", + "650: app_global_del", + "653: bytec 6", + "654: app_global_del", + "657: intc_1", + "658: retsub" ], [ "77: bytec 4", @@ -902,14 +896,13 @@ ], [ "271: get_global_state:", - "276: proto 0 1", - "279: intc_0", - "280: bytec_1", - "281: app_global_get_ex", - "282: intc_0", - "283: cover 2", - "284: select", - "285: retsub" + "274: intc_0", + "275: bytec_1", + "276: app_global_get_ex", + "277: intc_0", + "278: cover 2", + "279: select", + "280: retsub" ], [ "250: itob", @@ -956,27 +949,27 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "307: intc_0", - "308: frame_bury 1" + "302: intc_0", + "303: frame_bury 1" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -1029,23 +1022,23 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -1098,43 +1091,42 @@ "205: callsub get_global_state_example" ], [ - "321: get_global_state_example:", - "325: proto 0 1", - "328: intc_0", - "329: bytec_1", - "330: app_global_get_ex", - "331: intc_0", - "332: cover 2", - "333: select", - "334: intc_3", + "316: get_global_state_example:", + "319: intc_0", + "320: bytec_1", + "321: app_global_get_ex", + "322: intc_0", + "323: cover 2", + "324: select", + "325: intc_3", + "326: ==", + "327: assert", + "330: intc_0", + "331: bytec 8", + "332: app_global_get_ex", + "333: assert", + "334: intc_2", "335: ==", "336: assert", "339: intc_0", - "340: bytec 8", + "340: bytec 11", "341: app_global_get_ex", - "342: assert", - "343: intc_2", - "344: ==", - "345: assert", - "348: intc_0", - "349: bytec 11", - "350: app_global_get_ex", - "351: intc_0", - "352: cover 2", - "353: select", - "354: !", - "355: assert", - "358: intc_0", - "359: bytec_2", - "360: app_global_get_ex", - "361: pushbytes 0x64656661756c74", - "362: cover 2", - "363: select", - "364: bytec_0", - "365: ==", - "366: assert", - "369: intc_1", - "370: retsub" + "342: intc_0", + "343: cover 2", + "344: select", + "345: !", + "346: assert", + "349: intc_0", + "350: bytec_2", + "351: app_global_get_ex", + "352: pushbytes 0x64656661756c74", + "353: cover 2", + "354: select", + "355: bytec_0", + "356: ==", + "357: assert", + "360: intc_1", + "361: retsub" ], [ "206: bytec 4", @@ -1184,56 +1176,55 @@ "185: callsub maybe_global_state_example" ], [ - "374: maybe_global_state_example:", - "379: proto 0 1", - "382: intc_0", - "383: bytec_1", - "384: app_global_get_ex", - "387: assert", - "390: intc_3", - "391: ==", - "392: assert", - "395: intc_0", - "396: bytec_2", - "397: app_global_get_ex", - "400: assert", - "403: bytec_0", - "404: ==", - "405: assert", - "408: intc_0", - "409: bytec_2", - "410: app_global_get_ex", - "411: bury 1", - "414: !", - "415: assert", - "418: intc_0", - "419: bytec_2", - "420: app_global_get_ex", + "365: maybe_global_state_example:", + "368: intc_0", + "369: bytec_1", + "370: app_global_get_ex", + "373: assert", + "376: intc_3", + "377: ==", + "378: assert", + "381: intc_0", + "382: bytec_2", + "383: app_global_get_ex", + "386: assert", + "389: bytec_0", + "390: ==", + "391: assert", + "394: intc_0", + "395: bytec_2", + "396: app_global_get_ex", + "397: bury 1", + "400: !", + "401: assert", + "404: intc_0", + "405: bytec_2", + "406: app_global_get_ex", + "407: assert", + "408: bytec_0", + "409: ==", + "410: assert", + "413: intc_0", + "414: bytec 5", + "415: app_global_get_ex", + "418: assert", "421: assert", - "422: bytec_0", - "423: ==", - "424: assert", - "427: intc_0", - "428: bytec 5", - "429: app_global_get_ex", - "432: assert", - "435: assert", - "438: intc_0", - "439: bytec 6", - "440: app_global_get_ex", - "443: assert", - "446: intc_2", - "447: ==", - "448: assert", - "451: intc_0", - "452: bytec 12", - "453: app_global_get_ex", - "456: assert", - "459: intc_2", - "460: ==", - "461: assert", - "464: intc_1", - "465: retsub" + "424: intc_0", + "425: bytec 6", + "426: app_global_get_ex", + "429: assert", + "432: intc_2", + "433: ==", + "434: assert", + "437: intc_0", + "438: bytec 12", + "439: app_global_get_ex", + "442: assert", + "445: intc_2", + "446: ==", + "447: assert", + "450: intc_1", + "451: retsub" ], [ "186: bytec 4", @@ -1283,84 +1274,83 @@ "164: callsub check_global_state_example" ], [ - "469: check_global_state_example:", - "474: proto 0 1", - "477: intc_0", - "478: bytec_1", - "479: app_global_get_ex", - "480: assert", - "481: intc_3", - "482: ==", - "483: assert", - "486: intc_0", - "487: bytec_2", - "488: app_global_get_ex", - "489: assert", - "490: bytec_0", - "491: ==", - "492: assert", - "495: intc_0", - "496: bytec 8", - "497: app_global_get_ex", + "455: check_global_state_example:", + "458: intc_0", + "459: bytec_1", + "460: app_global_get_ex", + "461: assert", + "462: intc_3", + "463: ==", + "464: assert", + "467: intc_0", + "468: bytec_2", + "469: app_global_get_ex", + "470: assert", + "471: bytec_0", + "472: ==", + "473: assert", + "476: intc_0", + "477: bytec 8", + "478: app_global_get_ex", + "479: assert", + "480: intc_2", + "481: ==", + "482: assert", + "485: intc_0", + "486: bytec 9", + "487: app_global_get_ex", + "488: assert", + "489: bytec_0", + "490: ==", + "491: assert", + "494: intc_0", + "495: bytec 10", + "496: app_global_get_ex", + "497: assert", "498: assert", - "499: intc_2", - "500: ==", - "501: assert", - "504: intc_0", - "505: bytec 9", - "506: app_global_get_ex", - "507: assert", - "508: bytec_0", - "509: ==", - "510: assert", - "513: intc_0", - "514: bytec 10", - "515: app_global_get_ex", - "516: assert", - "517: assert", - "520: intc_0", - "521: bytec 11", - "522: app_global_get_ex", - "523: bury 1", - "524: !", - "525: assert", - "528: intc_0", - "529: bytec 7", - "530: app_global_get_ex", - "531: bury 1", - "532: !", - "533: assert", - "536: intc_0", - "537: bytec 5", - "538: app_global_get_ex", - "539: bury 1", - "540: !", - "541: assert", - "544: intc_0", - "545: bytec 6", - "546: app_global_get_ex", - "547: assert", - "548: intc_2", - "549: ==", - "550: assert", - "553: intc_0", - "554: bytec 12", - "555: app_global_get_ex", - "556: assert", - "557: intc_2", - "558: ==", - "559: assert", - "562: intc_0", - "563: pushbytes \"global_account\"", - "564: app_global_get_ex", - "565: assert", - "566: intc_0", - "567: assert", - "568: bytec_0", - "569: ==", - "570: assert", - "573: intc_1", - "574: retsub" + "501: intc_0", + "502: bytec 11", + "503: app_global_get_ex", + "504: bury 1", + "505: !", + "506: assert", + "509: intc_0", + "510: bytec 7", + "511: app_global_get_ex", + "512: bury 1", + "513: !", + "514: assert", + "517: intc_0", + "518: bytec 5", + "519: app_global_get_ex", + "520: bury 1", + "521: !", + "522: assert", + "525: intc_0", + "526: bytec 6", + "527: app_global_get_ex", + "528: assert", + "529: intc_2", + "530: ==", + "531: assert", + "534: intc_0", + "535: bytec 12", + "536: app_global_get_ex", + "537: assert", + "538: intc_2", + "539: ==", + "540: assert", + "543: intc_0", + "544: pushbytes \"global_account\"", + "545: app_global_get_ex", + "546: assert", + "547: intc_0", + "548: assert", + "549: bytec_0", + "550: ==", + "551: assert", + "554: intc_1", + "555: retsub" ], [ "165: bytec 4", @@ -1412,12 +1402,12 @@ "151: callsub set_global_state" ], [ - "578: set_global_state:", - "583: proto 1 0", - "586: bytec_2", - "587: frame_dig -1", - "588: app_global_put", - "589: retsub" + "559: set_global_state:", + "564: proto 1 0", + "567: bytec_2", + "568: frame_dig -1", + "569: app_global_put", + "570: retsub" ], [ "152: intc_1", @@ -1467,37 +1457,37 @@ "131: callsub set_global_state_example" ], [ - "593: set_global_state_example:", - "604: proto 3 0", - "607: bytec 7", - "608: frame_dig -3", - "609: app_global_put", - "612: intc_0", - "613: bytec 7", - "614: app_global_get_ex", - "615: assert", - "616: frame_dig -3", - "617: ==", - "618: assert", - "621: bytec 5", - "622: frame_dig -1", - "623: app_global_put", - "626: intc_0", - "627: bytec 5", - "628: app_global_get_ex", - "629: assert", - "630: assert", - "633: bytec 6", - "634: frame_dig -2", - "635: app_global_put", - "638: intc_0", - "639: bytec 6", - "640: app_global_get_ex", - "641: assert", - "642: frame_dig -2", - "643: ==", - "644: assert", - "645: retsub" + "574: set_global_state_example:", + "585: proto 3 0", + "588: bytec 7", + "589: frame_dig -3", + "590: app_global_put", + "593: intc_0", + "594: bytec 7", + "595: app_global_get_ex", + "596: assert", + "597: frame_dig -3", + "598: ==", + "599: assert", + "602: bytec 5", + "603: frame_dig -1", + "604: app_global_put", + "607: intc_0", + "608: bytec 5", + "609: app_global_get_ex", + "610: assert", + "611: assert", + "614: bytec 6", + "615: frame_dig -2", + "616: app_global_put", + "619: intc_0", + "620: bytec 6", + "621: app_global_get_ex", + "622: assert", + "623: frame_dig -2", + "624: ==", + "625: assert", + "626: retsub" ], [ "132: intc_1", @@ -1539,12 +1529,11 @@ "97: callsub del_global_state" ], [ - "649: del_global_state:", - "654: proto 0 1", - "657: bytec_1", - "658: app_global_del", - "661: intc_1", - "662: retsub" + "630: del_global_state:", + "633: bytec_1", + "634: app_global_del", + "637: intc_1", + "638: retsub" ], [ "98: bytec 4", @@ -1594,16 +1583,15 @@ "76: callsub del_global_state_example" ], [ - "666: del_global_state_example:", - "671: proto 0 1", - "674: bytec 7", - "675: app_global_del", - "678: bytec 5", - "679: app_global_del", - "682: bytec 6", - "683: app_global_del", - "686: intc_1", - "687: retsub" + "642: del_global_state_example:", + "645: bytec 7", + "646: app_global_del", + "649: bytec 5", + "650: app_global_del", + "653: bytec 6", + "654: app_global_del", + "657: intc_1", + "658: retsub" ], [ "77: bytec 4", @@ -1747,14 +1735,13 @@ ], [ "271: get_global_state:", - "276: proto 0 1", - "279: intc_0", - "280: bytec_1", - "281: app_global_get_ex", - "282: intc_0", - "283: cover 2", - "284: select", - "285: retsub" + "274: intc_0", + "275: bytec_1", + "276: app_global_get_ex", + "277: intc_0", + "278: cover 2", + "279: select", + "280: retsub" ], [ "250: itob", @@ -1801,27 +1788,27 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "307: intc_0", - "308: frame_bury 1" + "302: intc_0", + "303: frame_bury 1" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -1874,23 +1861,23 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -1943,43 +1930,42 @@ "205: callsub get_global_state_example" ], [ - "321: get_global_state_example:", - "325: proto 0 1", - "328: intc_0", - "329: bytec_1", - "330: app_global_get_ex", - "331: intc_0", - "332: cover 2", - "333: select", - "334: intc_3", + "316: get_global_state_example:", + "319: intc_0", + "320: bytec_1", + "321: app_global_get_ex", + "322: intc_0", + "323: cover 2", + "324: select", + "325: intc_3", + "326: ==", + "327: assert", + "330: intc_0", + "331: bytec 8", + "332: app_global_get_ex", + "333: assert", + "334: intc_2", "335: ==", "336: assert", "339: intc_0", - "340: bytec 8", + "340: bytec 11", "341: app_global_get_ex", - "342: assert", - "343: intc_2", - "344: ==", - "345: assert", - "348: intc_0", - "349: bytec 11", - "350: app_global_get_ex", - "351: intc_0", - "352: cover 2", - "353: select", - "354: !", - "355: assert", - "358: intc_0", - "359: bytec_2", - "360: app_global_get_ex", - "361: pushbytes 0x64656661756c74", - "362: cover 2", - "363: select", - "364: bytec_0", - "365: ==", - "366: assert", - "369: intc_1", - "370: retsub" + "342: intc_0", + "343: cover 2", + "344: select", + "345: !", + "346: assert", + "349: intc_0", + "350: bytec_2", + "351: app_global_get_ex", + "352: pushbytes 0x64656661756c74", + "353: cover 2", + "354: select", + "355: bytec_0", + "356: ==", + "357: assert", + "360: intc_1", + "361: retsub" ], [ "206: bytec 4", @@ -2029,56 +2015,55 @@ "185: callsub maybe_global_state_example" ], [ - "374: maybe_global_state_example:", - "379: proto 0 1", - "382: intc_0", - "383: bytec_1", - "384: app_global_get_ex", - "387: assert", - "390: intc_3", - "391: ==", - "392: assert", - "395: intc_0", - "396: bytec_2", - "397: app_global_get_ex", - "400: assert", - "403: bytec_0", - "404: ==", - "405: assert", - "408: intc_0", - "409: bytec_2", - "410: app_global_get_ex", - "411: bury 1", - "414: !", - "415: assert", - "418: intc_0", - "419: bytec_2", - "420: app_global_get_ex", + "365: maybe_global_state_example:", + "368: intc_0", + "369: bytec_1", + "370: app_global_get_ex", + "373: assert", + "376: intc_3", + "377: ==", + "378: assert", + "381: intc_0", + "382: bytec_2", + "383: app_global_get_ex", + "386: assert", + "389: bytec_0", + "390: ==", + "391: assert", + "394: intc_0", + "395: bytec_2", + "396: app_global_get_ex", + "397: bury 1", + "400: !", + "401: assert", + "404: intc_0", + "405: bytec_2", + "406: app_global_get_ex", + "407: assert", + "408: bytec_0", + "409: ==", + "410: assert", + "413: intc_0", + "414: bytec 5", + "415: app_global_get_ex", + "418: assert", "421: assert", - "422: bytec_0", - "423: ==", - "424: assert", - "427: intc_0", - "428: bytec 5", - "429: app_global_get_ex", - "432: assert", - "435: assert", - "438: intc_0", - "439: bytec 6", - "440: app_global_get_ex", - "443: assert", - "446: intc_2", - "447: ==", - "448: assert", - "451: intc_0", - "452: bytec 12", - "453: app_global_get_ex", - "456: assert", - "459: intc_2", - "460: ==", - "461: assert", - "464: intc_1", - "465: retsub" + "424: intc_0", + "425: bytec 6", + "426: app_global_get_ex", + "429: assert", + "432: intc_2", + "433: ==", + "434: assert", + "437: intc_0", + "438: bytec 12", + "439: app_global_get_ex", + "442: assert", + "445: intc_2", + "446: ==", + "447: assert", + "450: intc_1", + "451: retsub" ], [ "186: bytec 4", @@ -2128,84 +2113,83 @@ "164: callsub check_global_state_example" ], [ - "469: check_global_state_example:", - "474: proto 0 1", - "477: intc_0", - "478: bytec_1", - "479: app_global_get_ex", - "480: assert", - "481: intc_3", - "482: ==", - "483: assert", - "486: intc_0", - "487: bytec_2", - "488: app_global_get_ex", - "489: assert", - "490: bytec_0", - "491: ==", - "492: assert", - "495: intc_0", - "496: bytec 8", - "497: app_global_get_ex", + "455: check_global_state_example:", + "458: intc_0", + "459: bytec_1", + "460: app_global_get_ex", + "461: assert", + "462: intc_3", + "463: ==", + "464: assert", + "467: intc_0", + "468: bytec_2", + "469: app_global_get_ex", + "470: assert", + "471: bytec_0", + "472: ==", + "473: assert", + "476: intc_0", + "477: bytec 8", + "478: app_global_get_ex", + "479: assert", + "480: intc_2", + "481: ==", + "482: assert", + "485: intc_0", + "486: bytec 9", + "487: app_global_get_ex", + "488: assert", + "489: bytec_0", + "490: ==", + "491: assert", + "494: intc_0", + "495: bytec 10", + "496: app_global_get_ex", + "497: assert", "498: assert", - "499: intc_2", - "500: ==", - "501: assert", - "504: intc_0", - "505: bytec 9", - "506: app_global_get_ex", - "507: assert", - "508: bytec_0", - "509: ==", - "510: assert", - "513: intc_0", - "514: bytec 10", - "515: app_global_get_ex", - "516: assert", - "517: assert", - "520: intc_0", - "521: bytec 11", - "522: app_global_get_ex", - "523: bury 1", - "524: !", - "525: assert", - "528: intc_0", - "529: bytec 7", - "530: app_global_get_ex", - "531: bury 1", - "532: !", - "533: assert", - "536: intc_0", - "537: bytec 5", - "538: app_global_get_ex", - "539: bury 1", - "540: !", - "541: assert", - "544: intc_0", - "545: bytec 6", - "546: app_global_get_ex", - "547: assert", - "548: intc_2", - "549: ==", - "550: assert", - "553: intc_0", - "554: bytec 12", - "555: app_global_get_ex", - "556: assert", - "557: intc_2", - "558: ==", - "559: assert", - "562: intc_0", - "563: pushbytes \"global_account\"", - "564: app_global_get_ex", - "565: assert", - "566: intc_0", - "567: assert", - "568: bytec_0", - "569: ==", - "570: assert", - "573: intc_1", - "574: retsub" + "501: intc_0", + "502: bytec 11", + "503: app_global_get_ex", + "504: bury 1", + "505: !", + "506: assert", + "509: intc_0", + "510: bytec 7", + "511: app_global_get_ex", + "512: bury 1", + "513: !", + "514: assert", + "517: intc_0", + "518: bytec 5", + "519: app_global_get_ex", + "520: bury 1", + "521: !", + "522: assert", + "525: intc_0", + "526: bytec 6", + "527: app_global_get_ex", + "528: assert", + "529: intc_2", + "530: ==", + "531: assert", + "534: intc_0", + "535: bytec 12", + "536: app_global_get_ex", + "537: assert", + "538: intc_2", + "539: ==", + "540: assert", + "543: intc_0", + "544: pushbytes \"global_account\"", + "545: app_global_get_ex", + "546: assert", + "547: intc_0", + "548: assert", + "549: bytec_0", + "550: ==", + "551: assert", + "554: intc_1", + "555: retsub" ], [ "165: bytec 4", @@ -2257,12 +2241,12 @@ "151: callsub set_global_state" ], [ - "578: set_global_state:", - "583: proto 1 0", - "586: bytec_2", - "587: frame_dig -1", - "588: app_global_put", - "589: retsub" + "559: set_global_state:", + "564: proto 1 0", + "567: bytec_2", + "568: frame_dig -1", + "569: app_global_put", + "570: retsub" ], [ "152: intc_1", @@ -2312,37 +2296,37 @@ "131: callsub set_global_state_example" ], [ - "593: set_global_state_example:", - "604: proto 3 0", - "607: bytec 7", - "608: frame_dig -3", - "609: app_global_put", - "612: intc_0", - "613: bytec 7", - "614: app_global_get_ex", - "615: assert", - "616: frame_dig -3", - "617: ==", - "618: assert", - "621: bytec 5", - "622: frame_dig -1", - "623: app_global_put", - "626: intc_0", - "627: bytec 5", - "628: app_global_get_ex", - "629: assert", - "630: assert", - "633: bytec 6", - "634: frame_dig -2", - "635: app_global_put", - "638: intc_0", - "639: bytec 6", - "640: app_global_get_ex", - "641: assert", - "642: frame_dig -2", - "643: ==", - "644: assert", - "645: retsub" + "574: set_global_state_example:", + "585: proto 3 0", + "588: bytec 7", + "589: frame_dig -3", + "590: app_global_put", + "593: intc_0", + "594: bytec 7", + "595: app_global_get_ex", + "596: assert", + "597: frame_dig -3", + "598: ==", + "599: assert", + "602: bytec 5", + "603: frame_dig -1", + "604: app_global_put", + "607: intc_0", + "608: bytec 5", + "609: app_global_get_ex", + "610: assert", + "611: assert", + "614: bytec 6", + "615: frame_dig -2", + "616: app_global_put", + "619: intc_0", + "620: bytec 6", + "621: app_global_get_ex", + "622: assert", + "623: frame_dig -2", + "624: ==", + "625: assert", + "626: retsub" ], [ "132: intc_1", @@ -2384,12 +2368,11 @@ "97: callsub del_global_state" ], [ - "649: del_global_state:", - "654: proto 0 1", - "657: bytec_1", - "658: app_global_del", - "661: intc_1", - "662: retsub" + "630: del_global_state:", + "633: bytec_1", + "634: app_global_del", + "637: intc_1", + "638: retsub" ], [ "98: bytec 4", @@ -2439,16 +2422,15 @@ "76: callsub del_global_state_example" ], [ - "666: del_global_state_example:", - "671: proto 0 1", - "674: bytec 7", - "675: app_global_del", - "678: bytec 5", - "679: app_global_del", - "682: bytec 6", - "683: app_global_del", - "686: intc_1", - "687: retsub" + "642: del_global_state_example:", + "645: bytec 7", + "646: app_global_del", + "649: bytec 5", + "650: app_global_del", + "653: bytec 6", + "654: app_global_del", + "657: intc_1", + "658: retsub" ], [ "77: bytec 4", @@ -2572,14 +2554,13 @@ ], [ "271: get_global_state:", - "276: proto 0 1", - "279: intc_0", - "280: bytec_1", - "281: app_global_get_ex", - "282: intc_0", - "283: cover 2", - "284: select", - "285: retsub" + "274: intc_0", + "275: bytec_1", + "276: app_global_get_ex", + "277: intc_0", + "278: cover 2", + "279: select", + "280: retsub" ], [ "250: itob", @@ -2626,27 +2607,27 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "307: intc_0", - "308: frame_bury 1" + "302: intc_0", + "303: frame_bury 1" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -2699,23 +2680,23 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -2768,43 +2749,42 @@ "205: callsub get_global_state_example" ], [ - "321: get_global_state_example:", - "325: proto 0 1", - "328: intc_0", - "329: bytec_1", - "330: app_global_get_ex", - "331: intc_0", - "332: cover 2", - "333: select", - "334: intc_3", + "316: get_global_state_example:", + "319: intc_0", + "320: bytec_1", + "321: app_global_get_ex", + "322: intc_0", + "323: cover 2", + "324: select", + "325: intc_3", + "326: ==", + "327: assert", + "330: intc_0", + "331: bytec 8", + "332: app_global_get_ex", + "333: assert", + "334: intc_2", "335: ==", "336: assert", "339: intc_0", - "340: bytec 8", + "340: bytec 11", "341: app_global_get_ex", - "342: assert", - "343: intc_2", - "344: ==", - "345: assert", - "348: intc_0", - "349: bytec 11", - "350: app_global_get_ex", - "351: intc_0", - "352: cover 2", - "353: select", - "354: !", - "355: assert", - "358: intc_0", - "359: bytec_2", - "360: app_global_get_ex", - "361: pushbytes 0x64656661756c74", - "362: cover 2", - "363: select", - "364: bytec_0", - "365: ==", - "366: assert", - "369: intc_1", - "370: retsub" + "342: intc_0", + "343: cover 2", + "344: select", + "345: !", + "346: assert", + "349: intc_0", + "350: bytec_2", + "351: app_global_get_ex", + "352: pushbytes 0x64656661756c74", + "353: cover 2", + "354: select", + "355: bytec_0", + "356: ==", + "357: assert", + "360: intc_1", + "361: retsub" ], [ "206: bytec 4", @@ -2854,56 +2834,55 @@ "185: callsub maybe_global_state_example" ], [ - "374: maybe_global_state_example:", - "379: proto 0 1", - "382: intc_0", - "383: bytec_1", - "384: app_global_get_ex", - "387: assert", - "390: intc_3", - "391: ==", - "392: assert", - "395: intc_0", - "396: bytec_2", - "397: app_global_get_ex", - "400: assert", - "403: bytec_0", - "404: ==", - "405: assert", - "408: intc_0", - "409: bytec_2", - "410: app_global_get_ex", - "411: bury 1", - "414: !", - "415: assert", - "418: intc_0", - "419: bytec_2", - "420: app_global_get_ex", + "365: maybe_global_state_example:", + "368: intc_0", + "369: bytec_1", + "370: app_global_get_ex", + "373: assert", + "376: intc_3", + "377: ==", + "378: assert", + "381: intc_0", + "382: bytec_2", + "383: app_global_get_ex", + "386: assert", + "389: bytec_0", + "390: ==", + "391: assert", + "394: intc_0", + "395: bytec_2", + "396: app_global_get_ex", + "397: bury 1", + "400: !", + "401: assert", + "404: intc_0", + "405: bytec_2", + "406: app_global_get_ex", + "407: assert", + "408: bytec_0", + "409: ==", + "410: assert", + "413: intc_0", + "414: bytec 5", + "415: app_global_get_ex", + "418: assert", "421: assert", - "422: bytec_0", - "423: ==", - "424: assert", - "427: intc_0", - "428: bytec 5", - "429: app_global_get_ex", - "432: assert", - "435: assert", - "438: intc_0", - "439: bytec 6", - "440: app_global_get_ex", - "443: assert", - "446: intc_2", - "447: ==", - "448: assert", - "451: intc_0", - "452: bytec 12", - "453: app_global_get_ex", - "456: assert", - "459: intc_2", - "460: ==", - "461: assert", - "464: intc_1", - "465: retsub" + "424: intc_0", + "425: bytec 6", + "426: app_global_get_ex", + "429: assert", + "432: intc_2", + "433: ==", + "434: assert", + "437: intc_0", + "438: bytec 12", + "439: app_global_get_ex", + "442: assert", + "445: intc_2", + "446: ==", + "447: assert", + "450: intc_1", + "451: retsub" ], [ "186: bytec 4", @@ -2953,84 +2932,83 @@ "164: callsub check_global_state_example" ], [ - "469: check_global_state_example:", - "474: proto 0 1", - "477: intc_0", - "478: bytec_1", - "479: app_global_get_ex", - "480: assert", - "481: intc_3", - "482: ==", - "483: assert", - "486: intc_0", - "487: bytec_2", - "488: app_global_get_ex", - "489: assert", - "490: bytec_0", - "491: ==", - "492: assert", - "495: intc_0", - "496: bytec 8", - "497: app_global_get_ex", + "455: check_global_state_example:", + "458: intc_0", + "459: bytec_1", + "460: app_global_get_ex", + "461: assert", + "462: intc_3", + "463: ==", + "464: assert", + "467: intc_0", + "468: bytec_2", + "469: app_global_get_ex", + "470: assert", + "471: bytec_0", + "472: ==", + "473: assert", + "476: intc_0", + "477: bytec 8", + "478: app_global_get_ex", + "479: assert", + "480: intc_2", + "481: ==", + "482: assert", + "485: intc_0", + "486: bytec 9", + "487: app_global_get_ex", + "488: assert", + "489: bytec_0", + "490: ==", + "491: assert", + "494: intc_0", + "495: bytec 10", + "496: app_global_get_ex", + "497: assert", "498: assert", - "499: intc_2", - "500: ==", - "501: assert", - "504: intc_0", - "505: bytec 9", - "506: app_global_get_ex", - "507: assert", - "508: bytec_0", - "509: ==", - "510: assert", - "513: intc_0", - "514: bytec 10", - "515: app_global_get_ex", - "516: assert", - "517: assert", - "520: intc_0", - "521: bytec 11", - "522: app_global_get_ex", - "523: bury 1", - "524: !", - "525: assert", - "528: intc_0", - "529: bytec 7", - "530: app_global_get_ex", - "531: bury 1", - "532: !", - "533: assert", - "536: intc_0", - "537: bytec 5", - "538: app_global_get_ex", - "539: bury 1", - "540: !", - "541: assert", - "544: intc_0", - "545: bytec 6", - "546: app_global_get_ex", - "547: assert", - "548: intc_2", - "549: ==", - "550: assert", - "553: intc_0", - "554: bytec 12", - "555: app_global_get_ex", - "556: assert", - "557: intc_2", - "558: ==", - "559: assert", - "562: intc_0", - "563: pushbytes \"global_account\"", - "564: app_global_get_ex", - "565: assert", - "566: intc_0", - "567: assert", - "568: bytec_0", - "569: ==", - "570: assert", - "573: intc_1", - "574: retsub" + "501: intc_0", + "502: bytec 11", + "503: app_global_get_ex", + "504: bury 1", + "505: !", + "506: assert", + "509: intc_0", + "510: bytec 7", + "511: app_global_get_ex", + "512: bury 1", + "513: !", + "514: assert", + "517: intc_0", + "518: bytec 5", + "519: app_global_get_ex", + "520: bury 1", + "521: !", + "522: assert", + "525: intc_0", + "526: bytec 6", + "527: app_global_get_ex", + "528: assert", + "529: intc_2", + "530: ==", + "531: assert", + "534: intc_0", + "535: bytec 12", + "536: app_global_get_ex", + "537: assert", + "538: intc_2", + "539: ==", + "540: assert", + "543: intc_0", + "544: pushbytes \"global_account\"", + "545: app_global_get_ex", + "546: assert", + "547: intc_0", + "548: assert", + "549: bytec_0", + "550: ==", + "551: assert", + "554: intc_1", + "555: retsub" ], [ "165: bytec 4", @@ -3082,12 +3060,12 @@ "151: callsub set_global_state" ], [ - "578: set_global_state:", - "583: proto 1 0", - "586: bytec_2", - "587: frame_dig -1", - "588: app_global_put", - "589: retsub" + "559: set_global_state:", + "564: proto 1 0", + "567: bytec_2", + "568: frame_dig -1", + "569: app_global_put", + "570: retsub" ], [ "152: intc_1", @@ -3137,37 +3115,37 @@ "131: callsub set_global_state_example" ], [ - "593: set_global_state_example:", - "604: proto 3 0", - "607: bytec 7", - "608: frame_dig -3", - "609: app_global_put", - "612: intc_0", - "613: bytec 7", - "614: app_global_get_ex", - "615: assert", - "616: frame_dig -3", - "617: ==", - "618: assert", - "621: bytec 5", - "622: frame_dig -1", - "623: app_global_put", - "626: intc_0", - "627: bytec 5", - "628: app_global_get_ex", - "629: assert", - "630: assert", - "633: bytec 6", - "634: frame_dig -2", - "635: app_global_put", - "638: intc_0", - "639: bytec 6", - "640: app_global_get_ex", - "641: assert", - "642: frame_dig -2", - "643: ==", - "644: assert", - "645: retsub" + "574: set_global_state_example:", + "585: proto 3 0", + "588: bytec 7", + "589: frame_dig -3", + "590: app_global_put", + "593: intc_0", + "594: bytec 7", + "595: app_global_get_ex", + "596: assert", + "597: frame_dig -3", + "598: ==", + "599: assert", + "602: bytec 5", + "603: frame_dig -1", + "604: app_global_put", + "607: intc_0", + "608: bytec 5", + "609: app_global_get_ex", + "610: assert", + "611: assert", + "614: bytec 6", + "615: frame_dig -2", + "616: app_global_put", + "619: intc_0", + "620: bytec 6", + "621: app_global_get_ex", + "622: assert", + "623: frame_dig -2", + "624: ==", + "625: assert", + "626: retsub" ], [ "132: intc_1", @@ -3209,12 +3187,11 @@ "97: callsub del_global_state" ], [ - "649: del_global_state:", - "654: proto 0 1", - "657: bytec_1", - "658: app_global_del", - "661: intc_1", - "662: retsub" + "630: del_global_state:", + "633: bytec_1", + "634: app_global_del", + "637: intc_1", + "638: retsub" ], [ "98: bytec 4", @@ -3264,16 +3241,15 @@ "76: callsub del_global_state_example" ], [ - "666: del_global_state_example:", - "671: proto 0 1", - "674: bytec 7", - "675: app_global_del", - "678: bytec 5", - "679: app_global_del", - "682: bytec 6", - "683: app_global_del", - "686: intc_1", - "687: retsub" + "642: del_global_state_example:", + "645: bytec 7", + "646: app_global_del", + "649: bytec 5", + "650: app_global_del", + "653: bytec 6", + "654: app_global_del", + "657: intc_1", + "658: retsub" ], [ "77: bytec 4", @@ -3431,14 +3407,13 @@ ], [ "271: get_global_state:", - "276: proto 0 1", - "279: intc_0", - "280: bytec_1", - "281: app_global_get_ex", - "282: intc_0", - "283: cover 2", - "284: select", - "285: retsub" + "274: intc_0", + "275: bytec_1", + "276: app_global_get_ex", + "277: intc_0", + "278: cover 2", + "279: select", + "280: retsub" ], [ "250: itob", @@ -3502,27 +3477,27 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "307: intc_0", - "308: frame_bury 1" + "302: intc_0", + "303: frame_bury 1" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -3592,23 +3567,23 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -3678,43 +3653,42 @@ "205: callsub get_global_state_example" ], [ - "321: get_global_state_example:", - "325: proto 0 1", - "328: intc_0", - "329: bytec_1", - "330: app_global_get_ex", - "331: intc_0", - "332: cover 2", - "333: select", - "334: intc_3", + "316: get_global_state_example:", + "319: intc_0", + "320: bytec_1", + "321: app_global_get_ex", + "322: intc_0", + "323: cover 2", + "324: select", + "325: intc_3", + "326: ==", + "327: assert", + "330: intc_0", + "331: bytec 8", + "332: app_global_get_ex", + "333: assert", + "334: intc_2", "335: ==", "336: assert", "339: intc_0", - "340: bytec 8", + "340: bytec 11", "341: app_global_get_ex", - "342: assert", - "343: intc_2", - "344: ==", - "345: assert", - "348: intc_0", - "349: bytec 11", - "350: app_global_get_ex", - "351: intc_0", - "352: cover 2", - "353: select", - "354: !", - "355: assert", - "358: intc_0", - "359: bytec_2", - "360: app_global_get_ex", - "361: pushbytes 0x64656661756c74", - "362: cover 2", - "363: select", - "364: bytec_0", - "365: ==", - "366: assert", - "369: intc_1", - "370: retsub" + "342: intc_0", + "343: cover 2", + "344: select", + "345: !", + "346: assert", + "349: intc_0", + "350: bytec_2", + "351: app_global_get_ex", + "352: pushbytes 0x64656661756c74", + "353: cover 2", + "354: select", + "355: bytec_0", + "356: ==", + "357: assert", + "360: intc_1", + "361: retsub" ], [ "206: bytec 4", @@ -3781,56 +3755,55 @@ "185: callsub maybe_global_state_example" ], [ - "374: maybe_global_state_example:", - "379: proto 0 1", - "382: intc_0", - "383: bytec_1", - "384: app_global_get_ex", - "387: assert", - "390: intc_3", - "391: ==", - "392: assert", - "395: intc_0", - "396: bytec_2", - "397: app_global_get_ex", - "400: assert", - "403: bytec_0", - "404: ==", - "405: assert", - "408: intc_0", - "409: bytec_2", - "410: app_global_get_ex", - "411: bury 1", - "414: !", - "415: assert", - "418: intc_0", - "419: bytec_2", - "420: app_global_get_ex", + "365: maybe_global_state_example:", + "368: intc_0", + "369: bytec_1", + "370: app_global_get_ex", + "373: assert", + "376: intc_3", + "377: ==", + "378: assert", + "381: intc_0", + "382: bytec_2", + "383: app_global_get_ex", + "386: assert", + "389: bytec_0", + "390: ==", + "391: assert", + "394: intc_0", + "395: bytec_2", + "396: app_global_get_ex", + "397: bury 1", + "400: !", + "401: assert", + "404: intc_0", + "405: bytec_2", + "406: app_global_get_ex", + "407: assert", + "408: bytec_0", + "409: ==", + "410: assert", + "413: intc_0", + "414: bytec 5", + "415: app_global_get_ex", + "418: assert", "421: assert", - "422: bytec_0", - "423: ==", - "424: assert", - "427: intc_0", - "428: bytec 5", - "429: app_global_get_ex", - "432: assert", - "435: assert", - "438: intc_0", - "439: bytec 6", - "440: app_global_get_ex", - "443: assert", - "446: intc_2", - "447: ==", - "448: assert", - "451: intc_0", - "452: bytec 12", - "453: app_global_get_ex", - "456: assert", - "459: intc_2", - "460: ==", - "461: assert", - "464: intc_1", - "465: retsub" + "424: intc_0", + "425: bytec 6", + "426: app_global_get_ex", + "429: assert", + "432: intc_2", + "433: ==", + "434: assert", + "437: intc_0", + "438: bytec 12", + "439: app_global_get_ex", + "442: assert", + "445: intc_2", + "446: ==", + "447: assert", + "450: intc_1", + "451: retsub" ], [ "186: bytec 4", @@ -3897,84 +3870,83 @@ "164: callsub check_global_state_example" ], [ - "469: check_global_state_example:", - "474: proto 0 1", - "477: intc_0", - "478: bytec_1", - "479: app_global_get_ex", - "480: assert", - "481: intc_3", - "482: ==", - "483: assert", - "486: intc_0", - "487: bytec_2", - "488: app_global_get_ex", - "489: assert", - "490: bytec_0", - "491: ==", - "492: assert", - "495: intc_0", - "496: bytec 8", - "497: app_global_get_ex", + "455: check_global_state_example:", + "458: intc_0", + "459: bytec_1", + "460: app_global_get_ex", + "461: assert", + "462: intc_3", + "463: ==", + "464: assert", + "467: intc_0", + "468: bytec_2", + "469: app_global_get_ex", + "470: assert", + "471: bytec_0", + "472: ==", + "473: assert", + "476: intc_0", + "477: bytec 8", + "478: app_global_get_ex", + "479: assert", + "480: intc_2", + "481: ==", + "482: assert", + "485: intc_0", + "486: bytec 9", + "487: app_global_get_ex", + "488: assert", + "489: bytec_0", + "490: ==", + "491: assert", + "494: intc_0", + "495: bytec 10", + "496: app_global_get_ex", + "497: assert", "498: assert", - "499: intc_2", - "500: ==", - "501: assert", - "504: intc_0", - "505: bytec 9", - "506: app_global_get_ex", - "507: assert", - "508: bytec_0", - "509: ==", - "510: assert", - "513: intc_0", - "514: bytec 10", - "515: app_global_get_ex", - "516: assert", - "517: assert", - "520: intc_0", - "521: bytec 11", - "522: app_global_get_ex", - "523: bury 1", - "524: !", - "525: assert", - "528: intc_0", - "529: bytec 7", - "530: app_global_get_ex", - "531: bury 1", - "532: !", - "533: assert", - "536: intc_0", - "537: bytec 5", - "538: app_global_get_ex", - "539: bury 1", - "540: !", - "541: assert", - "544: intc_0", - "545: bytec 6", - "546: app_global_get_ex", - "547: assert", - "548: intc_2", - "549: ==", - "550: assert", - "553: intc_0", - "554: bytec 12", - "555: app_global_get_ex", - "556: assert", - "557: intc_2", - "558: ==", - "559: assert", - "562: intc_0", - "563: pushbytes \"global_account\"", - "564: app_global_get_ex", - "565: assert", - "566: intc_0", - "567: assert", - "568: bytec_0", - "569: ==", - "570: assert", - "573: intc_1", - "574: retsub" + "501: intc_0", + "502: bytec 11", + "503: app_global_get_ex", + "504: bury 1", + "505: !", + "506: assert", + "509: intc_0", + "510: bytec 7", + "511: app_global_get_ex", + "512: bury 1", + "513: !", + "514: assert", + "517: intc_0", + "518: bytec 5", + "519: app_global_get_ex", + "520: bury 1", + "521: !", + "522: assert", + "525: intc_0", + "526: bytec 6", + "527: app_global_get_ex", + "528: assert", + "529: intc_2", + "530: ==", + "531: assert", + "534: intc_0", + "535: bytec 12", + "536: app_global_get_ex", + "537: assert", + "538: intc_2", + "539: ==", + "540: assert", + "543: intc_0", + "544: pushbytes \"global_account\"", + "545: app_global_get_ex", + "546: assert", + "547: intc_0", + "548: assert", + "549: bytec_0", + "550: ==", + "551: assert", + "554: intc_1", + "555: retsub" ], [ "165: bytec 4", @@ -4043,12 +4015,12 @@ "151: callsub set_global_state" ], [ - "578: set_global_state:", - "583: proto 1 0", - "586: bytec_2", - "587: frame_dig -1", - "588: app_global_put", - "589: retsub" + "559: set_global_state:", + "564: proto 1 0", + "567: bytec_2", + "568: frame_dig -1", + "569: app_global_put", + "570: retsub" ], [ "152: intc_1", @@ -4115,37 +4087,37 @@ "131: callsub set_global_state_example" ], [ - "593: set_global_state_example:", - "604: proto 3 0", - "607: bytec 7", - "608: frame_dig -3", - "609: app_global_put", - "612: intc_0", - "613: bytec 7", - "614: app_global_get_ex", - "615: assert", - "616: frame_dig -3", - "617: ==", - "618: assert", - "621: bytec 5", - "622: frame_dig -1", - "623: app_global_put", - "626: intc_0", - "627: bytec 5", - "628: app_global_get_ex", - "629: assert", - "630: assert", - "633: bytec 6", - "634: frame_dig -2", - "635: app_global_put", - "638: intc_0", - "639: bytec 6", - "640: app_global_get_ex", - "641: assert", - "642: frame_dig -2", - "643: ==", - "644: assert", - "645: retsub" + "574: set_global_state_example:", + "585: proto 3 0", + "588: bytec 7", + "589: frame_dig -3", + "590: app_global_put", + "593: intc_0", + "594: bytec 7", + "595: app_global_get_ex", + "596: assert", + "597: frame_dig -3", + "598: ==", + "599: assert", + "602: bytec 5", + "603: frame_dig -1", + "604: app_global_put", + "607: intc_0", + "608: bytec 5", + "609: app_global_get_ex", + "610: assert", + "611: assert", + "614: bytec 6", + "615: frame_dig -2", + "616: app_global_put", + "619: intc_0", + "620: bytec 6", + "621: app_global_get_ex", + "622: assert", + "623: frame_dig -2", + "624: ==", + "625: assert", + "626: retsub" ], [ "132: intc_1", @@ -4204,12 +4176,11 @@ "97: callsub del_global_state" ], [ - "649: del_global_state:", - "654: proto 0 1", - "657: bytec_1", - "658: app_global_del", - "661: intc_1", - "662: retsub" + "630: del_global_state:", + "633: bytec_1", + "634: app_global_del", + "637: intc_1", + "638: retsub" ], [ "98: bytec 4", @@ -4276,16 +4247,15 @@ "76: callsub del_global_state_example" ], [ - "666: del_global_state_example:", - "671: proto 0 1", - "674: bytec 7", - "675: app_global_del", - "678: bytec 5", - "679: app_global_del", - "682: bytec 6", - "683: app_global_del", - "686: intc_1", - "687: retsub" + "642: del_global_state_example:", + "645: bytec 7", + "646: app_global_del", + "649: bytec 5", + "650: app_global_del", + "653: bytec 6", + "654: app_global_del", + "657: intc_1", + "658: retsub" ], [ "77: bytec 4", @@ -4465,14 +4435,13 @@ ], [ "271: get_global_state:", - "276: proto 0 1", - "279: intc_0", - "280: bytec_1", - "281: app_global_get_ex", - "282: intc_0", - "283: cover 2", - "284: select", - "285: retsub" + "274: intc_0", + "275: bytec_1", + "276: app_global_get_ex", + "277: intc_0", + "278: cover 2", + "279: select", + "280: retsub" ], [ "250: itob", @@ -4519,27 +4488,27 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "307: intc_0", - "308: frame_bury 1" + "302: intc_0", + "303: frame_bury 1" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -4592,23 +4561,23 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -4661,43 +4630,42 @@ "205: callsub get_global_state_example" ], [ - "321: get_global_state_example:", - "325: proto 0 1", - "328: intc_0", - "329: bytec_1", - "330: app_global_get_ex", - "331: intc_0", - "332: cover 2", - "333: select", - "334: intc_3", + "316: get_global_state_example:", + "319: intc_0", + "320: bytec_1", + "321: app_global_get_ex", + "322: intc_0", + "323: cover 2", + "324: select", + "325: intc_3", + "326: ==", + "327: assert", + "330: intc_0", + "331: bytec 8", + "332: app_global_get_ex", + "333: assert", + "334: intc_2", "335: ==", "336: assert", "339: intc_0", - "340: bytec 8", + "340: bytec 11", "341: app_global_get_ex", - "342: assert", - "343: intc_2", - "344: ==", - "345: assert", - "348: intc_0", - "349: bytec 11", - "350: app_global_get_ex", - "351: intc_0", - "352: cover 2", - "353: select", - "354: !", - "355: assert", - "358: intc_0", - "359: bytec_2", - "360: app_global_get_ex", - "361: pushbytes 0x64656661756c74", - "362: cover 2", - "363: select", - "364: bytec_0", - "365: ==", - "366: assert", - "369: intc_1", - "370: retsub" + "342: intc_0", + "343: cover 2", + "344: select", + "345: !", + "346: assert", + "349: intc_0", + "350: bytec_2", + "351: app_global_get_ex", + "352: pushbytes 0x64656661756c74", + "353: cover 2", + "354: select", + "355: bytec_0", + "356: ==", + "357: assert", + "360: intc_1", + "361: retsub" ], [ "206: bytec 4", @@ -4747,56 +4715,55 @@ "185: callsub maybe_global_state_example" ], [ - "374: maybe_global_state_example:", - "379: proto 0 1", - "382: intc_0", - "383: bytec_1", - "384: app_global_get_ex", - "387: assert", - "390: intc_3", - "391: ==", - "392: assert", - "395: intc_0", - "396: bytec_2", - "397: app_global_get_ex", - "400: assert", - "403: bytec_0", - "404: ==", - "405: assert", - "408: intc_0", - "409: bytec_2", - "410: app_global_get_ex", - "411: bury 1", - "414: !", - "415: assert", - "418: intc_0", - "419: bytec_2", - "420: app_global_get_ex", + "365: maybe_global_state_example:", + "368: intc_0", + "369: bytec_1", + "370: app_global_get_ex", + "373: assert", + "376: intc_3", + "377: ==", + "378: assert", + "381: intc_0", + "382: bytec_2", + "383: app_global_get_ex", + "386: assert", + "389: bytec_0", + "390: ==", + "391: assert", + "394: intc_0", + "395: bytec_2", + "396: app_global_get_ex", + "397: bury 1", + "400: !", + "401: assert", + "404: intc_0", + "405: bytec_2", + "406: app_global_get_ex", + "407: assert", + "408: bytec_0", + "409: ==", + "410: assert", + "413: intc_0", + "414: bytec 5", + "415: app_global_get_ex", + "418: assert", "421: assert", - "422: bytec_0", - "423: ==", - "424: assert", - "427: intc_0", - "428: bytec 5", - "429: app_global_get_ex", - "432: assert", - "435: assert", - "438: intc_0", - "439: bytec 6", - "440: app_global_get_ex", - "443: assert", - "446: intc_2", - "447: ==", - "448: assert", - "451: intc_0", - "452: bytec 12", - "453: app_global_get_ex", - "456: assert", - "459: intc_2", - "460: ==", - "461: assert", - "464: intc_1", - "465: retsub" + "424: intc_0", + "425: bytec 6", + "426: app_global_get_ex", + "429: assert", + "432: intc_2", + "433: ==", + "434: assert", + "437: intc_0", + "438: bytec 12", + "439: app_global_get_ex", + "442: assert", + "445: intc_2", + "446: ==", + "447: assert", + "450: intc_1", + "451: retsub" ], [ "186: bytec 4", @@ -4846,84 +4813,83 @@ "164: callsub check_global_state_example" ], [ - "469: check_global_state_example:", - "474: proto 0 1", - "477: intc_0", - "478: bytec_1", - "479: app_global_get_ex", - "480: assert", - "481: intc_3", - "482: ==", - "483: assert", - "486: intc_0", - "487: bytec_2", - "488: app_global_get_ex", - "489: assert", - "490: bytec_0", - "491: ==", - "492: assert", - "495: intc_0", - "496: bytec 8", - "497: app_global_get_ex", + "455: check_global_state_example:", + "458: intc_0", + "459: bytec_1", + "460: app_global_get_ex", + "461: assert", + "462: intc_3", + "463: ==", + "464: assert", + "467: intc_0", + "468: bytec_2", + "469: app_global_get_ex", + "470: assert", + "471: bytec_0", + "472: ==", + "473: assert", + "476: intc_0", + "477: bytec 8", + "478: app_global_get_ex", + "479: assert", + "480: intc_2", + "481: ==", + "482: assert", + "485: intc_0", + "486: bytec 9", + "487: app_global_get_ex", + "488: assert", + "489: bytec_0", + "490: ==", + "491: assert", + "494: intc_0", + "495: bytec 10", + "496: app_global_get_ex", + "497: assert", "498: assert", - "499: intc_2", - "500: ==", - "501: assert", - "504: intc_0", - "505: bytec 9", - "506: app_global_get_ex", - "507: assert", - "508: bytec_0", - "509: ==", - "510: assert", - "513: intc_0", - "514: bytec 10", - "515: app_global_get_ex", - "516: assert", - "517: assert", - "520: intc_0", - "521: bytec 11", - "522: app_global_get_ex", - "523: bury 1", - "524: !", - "525: assert", - "528: intc_0", - "529: bytec 7", - "530: app_global_get_ex", - "531: bury 1", - "532: !", - "533: assert", - "536: intc_0", - "537: bytec 5", - "538: app_global_get_ex", - "539: bury 1", - "540: !", - "541: assert", - "544: intc_0", - "545: bytec 6", - "546: app_global_get_ex", - "547: assert", - "548: intc_2", - "549: ==", - "550: assert", - "553: intc_0", - "554: bytec 12", - "555: app_global_get_ex", - "556: assert", - "557: intc_2", - "558: ==", - "559: assert", - "562: intc_0", - "563: pushbytes \"global_account\"", - "564: app_global_get_ex", - "565: assert", - "566: intc_0", - "567: assert", - "568: bytec_0", - "569: ==", - "570: assert", - "573: intc_1", - "574: retsub" + "501: intc_0", + "502: bytec 11", + "503: app_global_get_ex", + "504: bury 1", + "505: !", + "506: assert", + "509: intc_0", + "510: bytec 7", + "511: app_global_get_ex", + "512: bury 1", + "513: !", + "514: assert", + "517: intc_0", + "518: bytec 5", + "519: app_global_get_ex", + "520: bury 1", + "521: !", + "522: assert", + "525: intc_0", + "526: bytec 6", + "527: app_global_get_ex", + "528: assert", + "529: intc_2", + "530: ==", + "531: assert", + "534: intc_0", + "535: bytec 12", + "536: app_global_get_ex", + "537: assert", + "538: intc_2", + "539: ==", + "540: assert", + "543: intc_0", + "544: pushbytes \"global_account\"", + "545: app_global_get_ex", + "546: assert", + "547: intc_0", + "548: assert", + "549: bytec_0", + "550: ==", + "551: assert", + "554: intc_1", + "555: retsub" ], [ "165: bytec 4", @@ -4975,12 +4941,12 @@ "151: callsub set_global_state" ], [ - "578: set_global_state:", - "583: proto 1 0", - "586: bytec_2", - "587: frame_dig -1", - "588: app_global_put", - "589: retsub" + "559: set_global_state:", + "564: proto 1 0", + "567: bytec_2", + "568: frame_dig -1", + "569: app_global_put", + "570: retsub" ], [ "152: intc_1", @@ -5030,37 +4996,37 @@ "131: callsub set_global_state_example" ], [ - "593: set_global_state_example:", - "604: proto 3 0", - "607: bytec 7", - "608: frame_dig -3", - "609: app_global_put", - "612: intc_0", - "613: bytec 7", - "614: app_global_get_ex", - "615: assert", - "616: frame_dig -3", - "617: ==", - "618: assert", - "621: bytec 5", - "622: frame_dig -1", - "623: app_global_put", - "626: intc_0", - "627: bytec 5", - "628: app_global_get_ex", - "629: assert", - "630: assert", - "633: bytec 6", - "634: frame_dig -2", - "635: app_global_put", - "638: intc_0", - "639: bytec 6", - "640: app_global_get_ex", - "641: assert", - "642: frame_dig -2", - "643: ==", - "644: assert", - "645: retsub" + "574: set_global_state_example:", + "585: proto 3 0", + "588: bytec 7", + "589: frame_dig -3", + "590: app_global_put", + "593: intc_0", + "594: bytec 7", + "595: app_global_get_ex", + "596: assert", + "597: frame_dig -3", + "598: ==", + "599: assert", + "602: bytec 5", + "603: frame_dig -1", + "604: app_global_put", + "607: intc_0", + "608: bytec 5", + "609: app_global_get_ex", + "610: assert", + "611: assert", + "614: bytec 6", + "615: frame_dig -2", + "616: app_global_put", + "619: intc_0", + "620: bytec 6", + "621: app_global_get_ex", + "622: assert", + "623: frame_dig -2", + "624: ==", + "625: assert", + "626: retsub" ], [ "132: intc_1", @@ -5102,12 +5068,11 @@ "97: callsub del_global_state" ], [ - "649: del_global_state:", - "654: proto 0 1", - "657: bytec_1", - "658: app_global_del", - "661: intc_1", - "662: retsub" + "630: del_global_state:", + "633: bytec_1", + "634: app_global_del", + "637: intc_1", + "638: retsub" ], [ "98: bytec 4", @@ -5157,16 +5122,15 @@ "76: callsub del_global_state_example" ], [ - "666: del_global_state_example:", - "671: proto 0 1", - "674: bytec 7", - "675: app_global_del", - "678: bytec 5", - "679: app_global_del", - "682: bytec 6", - "683: app_global_del", - "686: intc_1", - "687: retsub" + "642: del_global_state_example:", + "645: bytec 7", + "646: app_global_del", + "649: bytec 5", + "650: app_global_del", + "653: bytec 6", + "654: app_global_del", + "657: intc_1", + "658: retsub" ], [ "77: bytec 4", @@ -5367,14 +5331,13 @@ ], [ "271: get_global_state:", - "276: proto 0 1", - "279: intc_0", - "280: bytec_1", - "281: app_global_get_ex", - "282: intc_0", - "283: cover 2", - "284: select", - "285: retsub" + "274: intc_0", + "275: bytec_1", + "276: app_global_get_ex", + "277: intc_0", + "278: cover 2", + "279: select", + "280: retsub" ], [ "250: itob", @@ -5438,27 +5401,27 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "307: intc_0", - "308: frame_bury 1" + "302: intc_0", + "303: frame_bury 1" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -5528,23 +5491,23 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -5614,43 +5577,42 @@ "205: callsub get_global_state_example" ], [ - "321: get_global_state_example:", - "325: proto 0 1", - "328: intc_0", - "329: bytec_1", - "330: app_global_get_ex", - "331: intc_0", - "332: cover 2", - "333: select", - "334: intc_3", + "316: get_global_state_example:", + "319: intc_0", + "320: bytec_1", + "321: app_global_get_ex", + "322: intc_0", + "323: cover 2", + "324: select", + "325: intc_3", + "326: ==", + "327: assert", + "330: intc_0", + "331: bytec 8", + "332: app_global_get_ex", + "333: assert", + "334: intc_2", "335: ==", "336: assert", "339: intc_0", - "340: bytec 8", + "340: bytec 11", "341: app_global_get_ex", - "342: assert", - "343: intc_2", - "344: ==", - "345: assert", - "348: intc_0", - "349: bytec 11", - "350: app_global_get_ex", - "351: intc_0", - "352: cover 2", - "353: select", - "354: !", - "355: assert", - "358: intc_0", - "359: bytec_2", - "360: app_global_get_ex", - "361: pushbytes 0x64656661756c74", - "362: cover 2", - "363: select", - "364: bytec_0", - "365: ==", - "366: assert", - "369: intc_1", - "370: retsub" + "342: intc_0", + "343: cover 2", + "344: select", + "345: !", + "346: assert", + "349: intc_0", + "350: bytec_2", + "351: app_global_get_ex", + "352: pushbytes 0x64656661756c74", + "353: cover 2", + "354: select", + "355: bytec_0", + "356: ==", + "357: assert", + "360: intc_1", + "361: retsub" ], [ "206: bytec 4", @@ -5717,56 +5679,55 @@ "185: callsub maybe_global_state_example" ], [ - "374: maybe_global_state_example:", - "379: proto 0 1", - "382: intc_0", - "383: bytec_1", - "384: app_global_get_ex", - "387: assert", - "390: intc_3", - "391: ==", - "392: assert", - "395: intc_0", - "396: bytec_2", - "397: app_global_get_ex", - "400: assert", - "403: bytec_0", - "404: ==", - "405: assert", - "408: intc_0", - "409: bytec_2", - "410: app_global_get_ex", - "411: bury 1", - "414: !", - "415: assert", - "418: intc_0", - "419: bytec_2", - "420: app_global_get_ex", + "365: maybe_global_state_example:", + "368: intc_0", + "369: bytec_1", + "370: app_global_get_ex", + "373: assert", + "376: intc_3", + "377: ==", + "378: assert", + "381: intc_0", + "382: bytec_2", + "383: app_global_get_ex", + "386: assert", + "389: bytec_0", + "390: ==", + "391: assert", + "394: intc_0", + "395: bytec_2", + "396: app_global_get_ex", + "397: bury 1", + "400: !", + "401: assert", + "404: intc_0", + "405: bytec_2", + "406: app_global_get_ex", + "407: assert", + "408: bytec_0", + "409: ==", + "410: assert", + "413: intc_0", + "414: bytec 5", + "415: app_global_get_ex", + "418: assert", "421: assert", - "422: bytec_0", - "423: ==", - "424: assert", - "427: intc_0", - "428: bytec 5", - "429: app_global_get_ex", - "432: assert", - "435: assert", - "438: intc_0", - "439: bytec 6", - "440: app_global_get_ex", - "443: assert", - "446: intc_2", - "447: ==", - "448: assert", - "451: intc_0", - "452: bytec 12", - "453: app_global_get_ex", - "456: assert", - "459: intc_2", - "460: ==", - "461: assert", - "464: intc_1", - "465: retsub" + "424: intc_0", + "425: bytec 6", + "426: app_global_get_ex", + "429: assert", + "432: intc_2", + "433: ==", + "434: assert", + "437: intc_0", + "438: bytec 12", + "439: app_global_get_ex", + "442: assert", + "445: intc_2", + "446: ==", + "447: assert", + "450: intc_1", + "451: retsub" ], [ "186: bytec 4", @@ -5833,84 +5794,83 @@ "164: callsub check_global_state_example" ], [ - "469: check_global_state_example:", - "474: proto 0 1", - "477: intc_0", - "478: bytec_1", - "479: app_global_get_ex", - "480: assert", - "481: intc_3", - "482: ==", - "483: assert", - "486: intc_0", - "487: bytec_2", - "488: app_global_get_ex", - "489: assert", - "490: bytec_0", - "491: ==", - "492: assert", - "495: intc_0", - "496: bytec 8", - "497: app_global_get_ex", + "455: check_global_state_example:", + "458: intc_0", + "459: bytec_1", + "460: app_global_get_ex", + "461: assert", + "462: intc_3", + "463: ==", + "464: assert", + "467: intc_0", + "468: bytec_2", + "469: app_global_get_ex", + "470: assert", + "471: bytec_0", + "472: ==", + "473: assert", + "476: intc_0", + "477: bytec 8", + "478: app_global_get_ex", + "479: assert", + "480: intc_2", + "481: ==", + "482: assert", + "485: intc_0", + "486: bytec 9", + "487: app_global_get_ex", + "488: assert", + "489: bytec_0", + "490: ==", + "491: assert", + "494: intc_0", + "495: bytec 10", + "496: app_global_get_ex", + "497: assert", "498: assert", - "499: intc_2", - "500: ==", - "501: assert", - "504: intc_0", - "505: bytec 9", - "506: app_global_get_ex", - "507: assert", - "508: bytec_0", - "509: ==", - "510: assert", - "513: intc_0", - "514: bytec 10", - "515: app_global_get_ex", - "516: assert", - "517: assert", - "520: intc_0", - "521: bytec 11", - "522: app_global_get_ex", - "523: bury 1", - "524: !", - "525: assert", - "528: intc_0", - "529: bytec 7", - "530: app_global_get_ex", - "531: bury 1", - "532: !", - "533: assert", - "536: intc_0", - "537: bytec 5", - "538: app_global_get_ex", - "539: bury 1", - "540: !", - "541: assert", - "544: intc_0", - "545: bytec 6", - "546: app_global_get_ex", - "547: assert", - "548: intc_2", - "549: ==", - "550: assert", - "553: intc_0", - "554: bytec 12", - "555: app_global_get_ex", - "556: assert", - "557: intc_2", - "558: ==", - "559: assert", - "562: intc_0", - "563: pushbytes \"global_account\"", - "564: app_global_get_ex", - "565: assert", - "566: intc_0", - "567: assert", - "568: bytec_0", - "569: ==", - "570: assert", - "573: intc_1", - "574: retsub" + "501: intc_0", + "502: bytec 11", + "503: app_global_get_ex", + "504: bury 1", + "505: !", + "506: assert", + "509: intc_0", + "510: bytec 7", + "511: app_global_get_ex", + "512: bury 1", + "513: !", + "514: assert", + "517: intc_0", + "518: bytec 5", + "519: app_global_get_ex", + "520: bury 1", + "521: !", + "522: assert", + "525: intc_0", + "526: bytec 6", + "527: app_global_get_ex", + "528: assert", + "529: intc_2", + "530: ==", + "531: assert", + "534: intc_0", + "535: bytec 12", + "536: app_global_get_ex", + "537: assert", + "538: intc_2", + "539: ==", + "540: assert", + "543: intc_0", + "544: pushbytes \"global_account\"", + "545: app_global_get_ex", + "546: assert", + "547: intc_0", + "548: assert", + "549: bytec_0", + "550: ==", + "551: assert", + "554: intc_1", + "555: retsub" ], [ "165: bytec 4", @@ -5979,12 +5939,12 @@ "151: callsub set_global_state" ], [ - "578: set_global_state:", - "583: proto 1 0", - "586: bytec_2", - "587: frame_dig -1", - "588: app_global_put", - "589: retsub" + "559: set_global_state:", + "564: proto 1 0", + "567: bytec_2", + "568: frame_dig -1", + "569: app_global_put", + "570: retsub" ], [ "152: intc_1", @@ -6051,37 +6011,37 @@ "131: callsub set_global_state_example" ], [ - "593: set_global_state_example:", - "604: proto 3 0", - "607: bytec 7", - "608: frame_dig -3", - "609: app_global_put", - "612: intc_0", - "613: bytec 7", - "614: app_global_get_ex", - "615: assert", - "616: frame_dig -3", - "617: ==", - "618: assert", - "621: bytec 5", - "622: frame_dig -1", - "623: app_global_put", - "626: intc_0", - "627: bytec 5", - "628: app_global_get_ex", - "629: assert", - "630: assert", - "633: bytec 6", - "634: frame_dig -2", - "635: app_global_put", - "638: intc_0", - "639: bytec 6", - "640: app_global_get_ex", - "641: assert", - "642: frame_dig -2", - "643: ==", - "644: assert", - "645: retsub" + "574: set_global_state_example:", + "585: proto 3 0", + "588: bytec 7", + "589: frame_dig -3", + "590: app_global_put", + "593: intc_0", + "594: bytec 7", + "595: app_global_get_ex", + "596: assert", + "597: frame_dig -3", + "598: ==", + "599: assert", + "602: bytec 5", + "603: frame_dig -1", + "604: app_global_put", + "607: intc_0", + "608: bytec 5", + "609: app_global_get_ex", + "610: assert", + "611: assert", + "614: bytec 6", + "615: frame_dig -2", + "616: app_global_put", + "619: intc_0", + "620: bytec 6", + "621: app_global_get_ex", + "622: assert", + "623: frame_dig -2", + "624: ==", + "625: assert", + "626: retsub" ], [ "132: intc_1", @@ -6140,12 +6100,11 @@ "97: callsub del_global_state" ], [ - "649: del_global_state:", - "654: proto 0 1", - "657: bytec_1", - "658: app_global_del", - "661: intc_1", - "662: retsub" + "630: del_global_state:", + "633: bytec_1", + "634: app_global_del", + "637: intc_1", + "638: retsub" ], [ "98: bytec 4", @@ -6212,16 +6171,15 @@ "76: callsub del_global_state_example" ], [ - "666: del_global_state_example:", - "671: proto 0 1", - "674: bytec 7", - "675: app_global_del", - "678: bytec 5", - "679: app_global_del", - "682: bytec 6", - "683: app_global_del", - "686: intc_1", - "687: retsub" + "642: del_global_state_example:", + "645: bytec 7", + "646: app_global_del", + "649: bytec 5", + "650: app_global_del", + "653: bytec 6", + "654: app_global_del", + "657: intc_1", + "658: retsub" ], [ "77: bytec 4", @@ -6401,14 +6359,13 @@ ], [ "271: get_global_state:", - "276: proto 0 1", - "279: intc_0", - "280: bytec_1", - "281: app_global_get_ex", - "282: intc_0", - "283: cover 2", - "284: select", - "285: retsub" + "274: intc_0", + "275: bytec_1", + "276: app_global_get_ex", + "277: intc_0", + "278: cover 2", + "279: select", + "280: retsub" ], [ "250: itob", @@ -6455,27 +6412,27 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "307: intc_0", - "308: frame_bury 1" + "302: intc_0", + "303: frame_bury 1" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -6528,23 +6485,23 @@ "225: callsub maybe_global_state" ], [ - "289: maybe_global_state:", - "293: proto 0 2", - "296: intc_0", - "297: bytec_1", - "298: app_global_get_ex", - "299: dup", - "300: uncover 2", - "301: swap", - "304: bnz maybe_global_state_after_if_else@2" + "284: maybe_global_state:", + "288: proto 0 2", + "291: intc_0", + "292: bytec_1", + "293: app_global_get_ex", + "294: dup", + "295: uncover 2", + "296: swap", + "299: bnz maybe_global_state_after_if_else@2" ], [ - "310: maybe_global_state_after_if_else@2:", - "313: frame_dig 1", - "314: frame_dig 0", - "315: uncover 3", - "316: uncover 3", - "317: retsub" + "305: maybe_global_state_after_if_else@2:", + "308: frame_dig 1", + "309: frame_dig 0", + "310: uncover 3", + "311: uncover 3", + "312: retsub" ], [ "226: swap", @@ -6597,43 +6554,42 @@ "205: callsub get_global_state_example" ], [ - "321: get_global_state_example:", - "325: proto 0 1", - "328: intc_0", - "329: bytec_1", - "330: app_global_get_ex", - "331: intc_0", - "332: cover 2", - "333: select", - "334: intc_3", + "316: get_global_state_example:", + "319: intc_0", + "320: bytec_1", + "321: app_global_get_ex", + "322: intc_0", + "323: cover 2", + "324: select", + "325: intc_3", + "326: ==", + "327: assert", + "330: intc_0", + "331: bytec 8", + "332: app_global_get_ex", + "333: assert", + "334: intc_2", "335: ==", "336: assert", "339: intc_0", - "340: bytec 8", + "340: bytec 11", "341: app_global_get_ex", - "342: assert", - "343: intc_2", - "344: ==", - "345: assert", - "348: intc_0", - "349: bytec 11", - "350: app_global_get_ex", - "351: intc_0", - "352: cover 2", - "353: select", - "354: !", - "355: assert", - "358: intc_0", - "359: bytec_2", - "360: app_global_get_ex", - "361: pushbytes 0x64656661756c74", - "362: cover 2", - "363: select", - "364: bytec_0", - "365: ==", - "366: assert", - "369: intc_1", - "370: retsub" + "342: intc_0", + "343: cover 2", + "344: select", + "345: !", + "346: assert", + "349: intc_0", + "350: bytec_2", + "351: app_global_get_ex", + "352: pushbytes 0x64656661756c74", + "353: cover 2", + "354: select", + "355: bytec_0", + "356: ==", + "357: assert", + "360: intc_1", + "361: retsub" ], [ "206: bytec 4", @@ -6683,56 +6639,55 @@ "185: callsub maybe_global_state_example" ], [ - "374: maybe_global_state_example:", - "379: proto 0 1", - "382: intc_0", - "383: bytec_1", - "384: app_global_get_ex", - "387: assert", - "390: intc_3", - "391: ==", - "392: assert", - "395: intc_0", - "396: bytec_2", - "397: app_global_get_ex", - "400: assert", - "403: bytec_0", - "404: ==", - "405: assert", - "408: intc_0", - "409: bytec_2", - "410: app_global_get_ex", - "411: bury 1", - "414: !", - "415: assert", - "418: intc_0", - "419: bytec_2", - "420: app_global_get_ex", + "365: maybe_global_state_example:", + "368: intc_0", + "369: bytec_1", + "370: app_global_get_ex", + "373: assert", + "376: intc_3", + "377: ==", + "378: assert", + "381: intc_0", + "382: bytec_2", + "383: app_global_get_ex", + "386: assert", + "389: bytec_0", + "390: ==", + "391: assert", + "394: intc_0", + "395: bytec_2", + "396: app_global_get_ex", + "397: bury 1", + "400: !", + "401: assert", + "404: intc_0", + "405: bytec_2", + "406: app_global_get_ex", + "407: assert", + "408: bytec_0", + "409: ==", + "410: assert", + "413: intc_0", + "414: bytec 5", + "415: app_global_get_ex", + "418: assert", "421: assert", - "422: bytec_0", - "423: ==", - "424: assert", - "427: intc_0", - "428: bytec 5", - "429: app_global_get_ex", - "432: assert", - "435: assert", - "438: intc_0", - "439: bytec 6", - "440: app_global_get_ex", - "443: assert", - "446: intc_2", - "447: ==", - "448: assert", - "451: intc_0", - "452: bytec 12", - "453: app_global_get_ex", - "456: assert", - "459: intc_2", - "460: ==", - "461: assert", - "464: intc_1", - "465: retsub" + "424: intc_0", + "425: bytec 6", + "426: app_global_get_ex", + "429: assert", + "432: intc_2", + "433: ==", + "434: assert", + "437: intc_0", + "438: bytec 12", + "439: app_global_get_ex", + "442: assert", + "445: intc_2", + "446: ==", + "447: assert", + "450: intc_1", + "451: retsub" ], [ "186: bytec 4", @@ -6782,84 +6737,83 @@ "164: callsub check_global_state_example" ], [ - "469: check_global_state_example:", - "474: proto 0 1", - "477: intc_0", - "478: bytec_1", - "479: app_global_get_ex", - "480: assert", - "481: intc_3", - "482: ==", - "483: assert", - "486: intc_0", - "487: bytec_2", - "488: app_global_get_ex", - "489: assert", - "490: bytec_0", - "491: ==", - "492: assert", - "495: intc_0", - "496: bytec 8", - "497: app_global_get_ex", + "455: check_global_state_example:", + "458: intc_0", + "459: bytec_1", + "460: app_global_get_ex", + "461: assert", + "462: intc_3", + "463: ==", + "464: assert", + "467: intc_0", + "468: bytec_2", + "469: app_global_get_ex", + "470: assert", + "471: bytec_0", + "472: ==", + "473: assert", + "476: intc_0", + "477: bytec 8", + "478: app_global_get_ex", + "479: assert", + "480: intc_2", + "481: ==", + "482: assert", + "485: intc_0", + "486: bytec 9", + "487: app_global_get_ex", + "488: assert", + "489: bytec_0", + "490: ==", + "491: assert", + "494: intc_0", + "495: bytec 10", + "496: app_global_get_ex", + "497: assert", "498: assert", - "499: intc_2", - "500: ==", - "501: assert", - "504: intc_0", - "505: bytec 9", - "506: app_global_get_ex", - "507: assert", - "508: bytec_0", - "509: ==", - "510: assert", - "513: intc_0", - "514: bytec 10", - "515: app_global_get_ex", - "516: assert", - "517: assert", - "520: intc_0", - "521: bytec 11", - "522: app_global_get_ex", - "523: bury 1", - "524: !", - "525: assert", - "528: intc_0", - "529: bytec 7", - "530: app_global_get_ex", - "531: bury 1", - "532: !", - "533: assert", - "536: intc_0", - "537: bytec 5", - "538: app_global_get_ex", - "539: bury 1", - "540: !", - "541: assert", - "544: intc_0", - "545: bytec 6", - "546: app_global_get_ex", - "547: assert", - "548: intc_2", - "549: ==", - "550: assert", - "553: intc_0", - "554: bytec 12", - "555: app_global_get_ex", - "556: assert", - "557: intc_2", - "558: ==", - "559: assert", - "562: intc_0", - "563: pushbytes \"global_account\"", - "564: app_global_get_ex", - "565: assert", - "566: intc_0", - "567: assert", - "568: bytec_0", - "569: ==", - "570: assert", - "573: intc_1", - "574: retsub" + "501: intc_0", + "502: bytec 11", + "503: app_global_get_ex", + "504: bury 1", + "505: !", + "506: assert", + "509: intc_0", + "510: bytec 7", + "511: app_global_get_ex", + "512: bury 1", + "513: !", + "514: assert", + "517: intc_0", + "518: bytec 5", + "519: app_global_get_ex", + "520: bury 1", + "521: !", + "522: assert", + "525: intc_0", + "526: bytec 6", + "527: app_global_get_ex", + "528: assert", + "529: intc_2", + "530: ==", + "531: assert", + "534: intc_0", + "535: bytec 12", + "536: app_global_get_ex", + "537: assert", + "538: intc_2", + "539: ==", + "540: assert", + "543: intc_0", + "544: pushbytes \"global_account\"", + "545: app_global_get_ex", + "546: assert", + "547: intc_0", + "548: assert", + "549: bytec_0", + "550: ==", + "551: assert", + "554: intc_1", + "555: retsub" ], [ "165: bytec 4", @@ -6911,12 +6865,12 @@ "151: callsub set_global_state" ], [ - "578: set_global_state:", - "583: proto 1 0", - "586: bytec_2", - "587: frame_dig -1", - "588: app_global_put", - "589: retsub" + "559: set_global_state:", + "564: proto 1 0", + "567: bytec_2", + "568: frame_dig -1", + "569: app_global_put", + "570: retsub" ], [ "152: intc_1", @@ -6966,37 +6920,37 @@ "131: callsub set_global_state_example" ], [ - "593: set_global_state_example:", - "604: proto 3 0", - "607: bytec 7", - "608: frame_dig -3", - "609: app_global_put", - "612: intc_0", - "613: bytec 7", - "614: app_global_get_ex", - "615: assert", - "616: frame_dig -3", - "617: ==", - "618: assert", - "621: bytec 5", - "622: frame_dig -1", - "623: app_global_put", - "626: intc_0", - "627: bytec 5", - "628: app_global_get_ex", - "629: assert", - "630: assert", - "633: bytec 6", - "634: frame_dig -2", - "635: app_global_put", - "638: intc_0", - "639: bytec 6", - "640: app_global_get_ex", - "641: assert", - "642: frame_dig -2", - "643: ==", - "644: assert", - "645: retsub" + "574: set_global_state_example:", + "585: proto 3 0", + "588: bytec 7", + "589: frame_dig -3", + "590: app_global_put", + "593: intc_0", + "594: bytec 7", + "595: app_global_get_ex", + "596: assert", + "597: frame_dig -3", + "598: ==", + "599: assert", + "602: bytec 5", + "603: frame_dig -1", + "604: app_global_put", + "607: intc_0", + "608: bytec 5", + "609: app_global_get_ex", + "610: assert", + "611: assert", + "614: bytec 6", + "615: frame_dig -2", + "616: app_global_put", + "619: intc_0", + "620: bytec 6", + "621: app_global_get_ex", + "622: assert", + "623: frame_dig -2", + "624: ==", + "625: assert", + "626: retsub" ], [ "132: intc_1", @@ -7038,12 +6992,11 @@ "97: callsub del_global_state" ], [ - "649: del_global_state:", - "654: proto 0 1", - "657: bytec_1", - "658: app_global_del", - "661: intc_1", - "662: retsub" + "630: del_global_state:", + "633: bytec_1", + "634: app_global_del", + "637: intc_1", + "638: retsub" ], [ "98: bytec 4", @@ -7093,16 +7046,15 @@ "76: callsub del_global_state_example" ], [ - "666: del_global_state_example:", - "671: proto 0 1", - "674: bytec 7", - "675: app_global_del", - "678: bytec 5", - "679: app_global_del", - "682: bytec 6", - "683: app_global_del", - "686: intc_1", - "687: retsub" + "642: del_global_state_example:", + "645: bytec 7", + "646: app_global_del", + "649: bytec 5", + "650: app_global_del", + "653: bytec 6", + "654: app_global_del", + "657: intc_1", + "658: retsub" ], [ "77: bytec 4", diff --git a/projects/python-examples/.algokit/static-analysis/snapshots/IfElseExample.approval.json b/projects/python-examples/.algokit/static-analysis/snapshots/IfElseExample.approval.json index 7889da2..125db11 100644 --- a/projects/python-examples/.algokit/static-analysis/snapshots/IfElseExample.approval.json +++ b/projects/python-examples/.algokit/static-analysis/snapshots/IfElseExample.approval.json @@ -21,27 +21,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -78,27 +78,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -142,27 +142,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -207,50 +207,50 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "142: pushbytes \"Even\"", - "143: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "143: pushbytes \"Even\"", + "144: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] }, @@ -264,51 +264,51 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "145: is_even_ternary_false@2:", - "148: pushbytes \"Odd\"", - "149: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "146: is_even_ternary_false@2:", + "149: pushbytes \"Odd\"", + "150: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] } @@ -333,27 +333,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -390,27 +390,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -454,27 +454,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -519,50 +519,50 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "142: pushbytes \"Even\"", - "143: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "143: pushbytes \"Even\"", + "144: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] }, @@ -576,51 +576,51 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "145: is_even_ternary_false@2:", - "148: pushbytes \"Odd\"", - "149: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "146: is_even_ternary_false@2:", + "149: pushbytes \"Odd\"", + "150: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] } @@ -665,27 +665,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -722,27 +722,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -786,27 +786,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -851,50 +851,50 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "142: pushbytes \"Even\"", - "143: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "143: pushbytes \"Even\"", + "144: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] }, @@ -908,51 +908,51 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "145: is_even_ternary_false@2:", - "148: pushbytes \"Odd\"", - "149: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "146: is_even_ternary_false@2:", + "149: pushbytes \"Odd\"", + "150: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] } @@ -977,27 +977,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -1034,27 +1034,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -1098,27 +1098,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -1163,50 +1163,50 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "142: pushbytes \"Even\"", - "143: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "143: pushbytes \"Even\"", + "144: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] }, @@ -1220,51 +1220,51 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "145: is_even_ternary_false@2:", - "148: pushbytes \"Odd\"", - "149: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "146: is_even_ternary_false@2:", + "149: pushbytes \"Odd\"", + "150: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] } @@ -1289,27 +1289,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -1346,27 +1346,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -1410,27 +1410,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -1475,50 +1475,50 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "142: pushbytes \"Even\"", - "143: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "143: pushbytes \"Even\"", + "144: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] }, @@ -1532,51 +1532,51 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "145: is_even_ternary_false@2:", - "148: pushbytes \"Odd\"", - "149: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "146: is_even_ternary_false@2:", + "149: pushbytes \"Odd\"", + "150: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] }, @@ -1590,20 +1590,20 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ "81: main_bare_routing@7:", - "85: txn OnCompletion", - "86: bnz main_after_if_else@11" + "84: txn OnCompletion", + "85: bnz main_after_if_else@11" ], [ - "87: txn ApplicationID", - "88: !", - "89: assert", - "90: pushint 1", - "91: return" + "86: txn ApplicationID", + "87: !", + "88: assert", + "89: pushint 1", + "90: return" ] ] } @@ -1638,27 +1638,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -1695,27 +1695,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -1759,27 +1759,27 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "52: main_is_rich_route@3:", + "51: main_is_rich_route@3:", "55: txn OnCompletion", "56: !", "57: assert", "58: txn ApplicationID", "59: assert", - "63: txna ApplicationArgs 1", - "64: btoi", + "62: txna ApplicationArgs 1", + "63: btoi", "67: callsub is_rich" ], [ - "95: is_rich:", + "94: is_rich:", "99: proto 1 1", "102: frame_dig -1", "103: pushint 1000", @@ -1824,50 +1824,50 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "142: pushbytes \"Even\"", - "143: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "143: pushbytes \"Even\"", + "144: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] }, @@ -1881,51 +1881,51 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ - "12: pushbytess 0x37c01090 0x6632c2d6", - "13: txna ApplicationArgs 0", - "14: match main_is_rich_route@3 main_is_even_route@4" + "11: pushbytess 0x37c01090 0x6632c2d6", + "12: txna ApplicationArgs 0", + "13: match main_is_rich_route@3 main_is_even_route@4" ], [ - "23: main_is_even_route@4:", - "26: txn OnCompletion", - "27: !", - "28: assert", - "29: txn ApplicationID", - "30: assert", - "34: txna ApplicationArgs 1", - "35: btoi", - "38: callsub is_even" + "21: main_is_even_route@4:", + "25: txn OnCompletion", + "26: !", + "27: assert", + "28: txn ApplicationID", + "29: assert", + "32: txna ApplicationArgs 1", + "33: btoi", + "37: callsub is_even" ], [ "131: is_even:", - "135: proto 1 1", - "138: frame_dig -1", - "139: pushint 2", - "140: %", - "141: bnz is_even_ternary_false@2" - ], - [ - "145: is_even_ternary_false@2:", - "148: pushbytes \"Odd\"", - "149: retsub" - ], - [ - "39: dup", - "40: len", - "41: itob", - "42: extract 6 2", - "43: swap", - "44: concat", - "45: bytec_0", - "46: swap", - "47: concat", - "48: log", - "49: pushint 1", - "50: return" + "136: proto 1 1", + "139: frame_dig -1", + "140: pushint 2", + "141: %", + "142: bnz is_even_ternary_false@2" + ], + [ + "146: is_even_ternary_false@2:", + "149: pushbytes \"Odd\"", + "150: retsub" + ], + [ + "38: dup", + "39: len", + "40: itob", + "41: extract 6 2", + "42: swap", + "43: concat", + "44: bytec_0", + "45: swap", + "46: concat", + "47: log", + "48: pushint 1", + "49: return" ] ] }, @@ -1939,20 +1939,20 @@ [ "5: main:", "6: bytecblock 0x151f7c75", - "10: txn NumAppArgs", - "11: bz main_bare_routing@7" + "9: txn NumAppArgs", + "10: bz main_bare_routing@7" ], [ "81: main_bare_routing@7:", - "85: txn OnCompletion", - "86: bnz main_after_if_else@11" + "84: txn OnCompletion", + "85: bnz main_after_if_else@11" ], [ - "87: txn ApplicationID", - "88: !", - "89: assert", - "90: pushint 1", - "91: return" + "86: txn ApplicationID", + "87: !", + "88: assert", + "89: pushint 1", + "90: return" ] ] } diff --git a/projects/python-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json b/projects/python-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json index 0f5ecf2..9b13ac0 100644 --- a/projects/python-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json +++ b/projects/python-examples/.algokit/static-analysis/snapshots/InnerTransactions.approval.json @@ -67,19 +67,18 @@ ], [ "336: payment:", - "341: proto 0 1", - "344: itxn_begin", - "345: txn Sender", - "346: itxn_field Receiver", - "347: pushint 5000", - "348: itxn_field Amount", - "349: intc_1", - "350: itxn_field TypeEnum", - "351: intc_0", - "352: itxn_field Fee", - "353: itxn_submit", - "354: itxn Amount", - "357: retsub" + "339: itxn_begin", + "340: txn Sender", + "341: itxn_field Receiver", + "342: pushint 5000", + "343: itxn_field Amount", + "344: intc_1", + "345: itxn_field TypeEnum", + "346: intc_0", + "347: itxn_field Fee", + "348: itxn_submit", + "349: itxn Amount", + "352: retsub" ], [ "315: itob", @@ -121,24 +120,23 @@ "296: callsub fungible_asset_create" ], [ - "361: fungible_asset_create:", - "366: proto 0 1", - "374: itxn_begin", - "377: pushbytes \"Royalty Points\"", - "378: itxn_field ConfigAssetName", - "381: pushbytes \"RP\"", - "382: itxn_field ConfigAssetUnitName", - "385: pushint 2", - "386: itxn_field ConfigAssetDecimals", - "389: pushint 100000000000", - "390: itxn_field ConfigAssetTotal", - "393: pushint 3", - "394: itxn_field TypeEnum", - "395: intc_0", - "396: itxn_field Fee", - "404: itxn_submit", - "405: itxn CreatedAssetID", - "408: retsub" + "356: fungible_asset_create:", + "364: itxn_begin", + "367: pushbytes \"Royalty Points\"", + "368: itxn_field ConfigAssetName", + "371: pushbytes \"RP\"", + "372: itxn_field ConfigAssetUnitName", + "375: pushint 2", + "376: itxn_field ConfigAssetDecimals", + "379: pushint 100000000000", + "380: itxn_field ConfigAssetTotal", + "383: pushint 3", + "384: itxn_field TypeEnum", + "385: intc_0", + "386: itxn_field Fee", + "394: itxn_submit", + "395: itxn CreatedAssetID", + "398: retsub" ], [ "297: itob", @@ -180,32 +178,31 @@ "278: callsub non_fungible_asset_create" ], [ - "412: non_fungible_asset_create:", - "416: proto 0 1", - "429: itxn_begin", - "432: global CurrentApplicationAddress", - "437: dupn 3", - "438: itxn_field ConfigAssetClawback", - "439: itxn_field ConfigAssetFreeze", - "440: itxn_field ConfigAssetReserve", - "441: itxn_field ConfigAssetManager", - "444: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", - "445: itxn_field ConfigAssetURL", - "448: pushbytes \"Mona Lisa\"", - "449: itxn_field ConfigAssetName", - "452: pushbytes \"ML\"", - "453: itxn_field ConfigAssetUnitName", - "456: pushint 2", - "457: itxn_field ConfigAssetDecimals", - "460: pushint 100", - "461: itxn_field ConfigAssetTotal", - "464: pushint 3", - "465: itxn_field TypeEnum", - "466: intc_0", - "467: itxn_field Fee", - "480: itxn_submit", - "481: itxn CreatedAssetID", - "484: retsub" + "402: non_fungible_asset_create:", + "415: itxn_begin", + "418: global CurrentApplicationAddress", + "423: dupn 3", + "424: itxn_field ConfigAssetClawback", + "425: itxn_field ConfigAssetFreeze", + "426: itxn_field ConfigAssetReserve", + "427: itxn_field ConfigAssetManager", + "430: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", + "431: itxn_field ConfigAssetURL", + "434: pushbytes \"Mona Lisa\"", + "435: itxn_field ConfigAssetName", + "438: pushbytes \"ML\"", + "439: itxn_field ConfigAssetUnitName", + "442: pushint 2", + "443: itxn_field ConfigAssetDecimals", + "446: pushint 100", + "447: itxn_field ConfigAssetTotal", + "450: pushint 3", + "451: itxn_field TypeEnum", + "452: intc_0", + "453: itxn_field Fee", + "466: itxn_submit", + "467: itxn CreatedAssetID", + "470: retsub" ], [ "279: itob", @@ -250,21 +247,21 @@ "266: callsub asset_opt_in" ], [ - "488: asset_opt_in:", - "493: proto 1 0", - "501: itxn_begin", - "504: global CurrentApplicationAddress", - "507: intc_0", - "508: itxn_field AssetAmount", - "509: frame_dig -1", - "510: itxn_field XferAsset", - "511: itxn_field AssetReceiver", - "514: intc_3", - "515: itxn_field TypeEnum", - "518: intc_0", - "519: itxn_field Fee", - "527: itxn_submit", - "528: retsub" + "474: asset_opt_in:", + "479: proto 1 0", + "487: itxn_begin", + "490: global CurrentApplicationAddress", + "493: intc_0", + "494: itxn_field AssetAmount", + "495: frame_dig -1", + "496: itxn_field XferAsset", + "497: itxn_field AssetReceiver", + "500: intc_3", + "501: itxn_field TypeEnum", + "504: intc_0", + "505: itxn_field Fee", + "513: itxn_submit", + "514: retsub" ], [ "267: intc_1", @@ -309,21 +306,21 @@ "245: callsub asset_transfer" ], [ - "532: asset_transfer:", - "537: proto 3 0", - "545: itxn_begin", - "546: frame_dig -1", - "547: itxn_field AssetAmount", - "548: frame_dig -3", - "549: itxn_field XferAsset", - "550: frame_dig -2", - "551: itxn_field AssetReceiver", - "554: intc_3", - "555: itxn_field TypeEnum", - "558: intc_0", - "559: itxn_field Fee", - "567: itxn_submit", - "568: retsub" + "518: asset_transfer:", + "523: proto 3 0", + "531: itxn_begin", + "532: frame_dig -1", + "533: itxn_field AssetAmount", + "534: frame_dig -3", + "535: itxn_field XferAsset", + "536: frame_dig -2", + "537: itxn_field AssetReceiver", + "540: intc_3", + "541: itxn_field TypeEnum", + "544: intc_0", + "545: itxn_field Fee", + "553: itxn_submit", + "554: retsub" ], [ "246: intc_1", @@ -366,21 +363,21 @@ "219: callsub asset_freeze" ], [ - "572: asset_freeze:", - "577: proto 2 0", - "585: itxn_begin", - "588: intc_1", - "589: itxn_field FreezeAssetFrozen", - "590: frame_dig -1", - "591: itxn_field FreezeAsset", - "592: frame_dig -2", - "593: itxn_field FreezeAssetAccount", - "596: pushint 5", - "597: itxn_field TypeEnum", - "600: intc_0", - "601: itxn_field Fee", - "609: itxn_submit", - "610: retsub" + "558: asset_freeze:", + "563: proto 2 0", + "571: itxn_begin", + "574: intc_1", + "575: itxn_field FreezeAssetFrozen", + "576: frame_dig -1", + "577: itxn_field FreezeAsset", + "578: frame_dig -2", + "579: itxn_field FreezeAssetAccount", + "582: pushint 5", + "583: itxn_field TypeEnum", + "586: intc_0", + "587: itxn_field Fee", + "595: itxn_submit", + "596: retsub" ], [ "220: intc_1", @@ -425,23 +422,23 @@ "195: callsub asset_revoke" ], [ - "614: asset_revoke:", - "621: proto 3 0", - "630: itxn_begin", - "633: global CurrentApplicationAddress", - "634: frame_dig -1", - "635: itxn_field AssetAmount", - "636: frame_dig -2", - "637: itxn_field AssetSender", - "638: frame_dig -3", - "639: itxn_field XferAsset", - "640: itxn_field AssetReceiver", - "643: intc_3", - "644: itxn_field TypeEnum", - "647: intc_0", - "648: itxn_field Fee", - "657: itxn_submit", - "658: retsub" + "600: asset_revoke:", + "607: proto 3 0", + "616: itxn_begin", + "619: global CurrentApplicationAddress", + "620: frame_dig -1", + "621: itxn_field AssetAmount", + "622: frame_dig -2", + "623: itxn_field AssetSender", + "624: frame_dig -3", + "625: itxn_field XferAsset", + "626: itxn_field AssetReceiver", + "629: intc_3", + "630: itxn_field TypeEnum", + "633: intc_0", + "634: itxn_field Fee", + "643: itxn_submit", + "644: retsub" ], [ "196: intc_1", @@ -481,25 +478,25 @@ "169: callsub asset_config" ], [ - "662: asset_config:", - "667: proto 1 0", - "677: itxn_begin", - "680: global CurrentApplicationAddress", - "683: dup", - "686: txn Sender", - "689: dup", - "690: itxn_field ConfigAssetClawback", - "691: itxn_field ConfigAssetFreeze", - "692: itxn_field ConfigAssetReserve", - "693: itxn_field ConfigAssetManager", - "694: frame_dig -1", - "695: itxn_field ConfigAsset", - "698: pushint 3", - "699: itxn_field TypeEnum", - "702: intc_0", - "703: itxn_field Fee", - "713: itxn_submit", - "714: retsub" + "648: asset_config:", + "653: proto 1 0", + "663: itxn_begin", + "666: global CurrentApplicationAddress", + "669: dup", + "672: txn Sender", + "675: dup", + "676: itxn_field ConfigAssetClawback", + "677: itxn_field ConfigAssetFreeze", + "678: itxn_field ConfigAssetReserve", + "679: itxn_field ConfigAssetManager", + "680: frame_dig -1", + "681: itxn_field ConfigAsset", + "684: pushint 3", + "685: itxn_field TypeEnum", + "688: intc_0", + "689: itxn_field Fee", + "699: itxn_submit", + "700: retsub" ], [ "170: intc_1", @@ -539,17 +536,17 @@ "148: callsub asset_delete" ], [ - "718: asset_delete:", - "723: proto 1 0", - "729: itxn_begin", - "730: frame_dig -1", - "731: itxn_field ConfigAsset", - "734: pushint 3", - "735: itxn_field TypeEnum", - "738: intc_0", - "739: itxn_field Fee", - "745: itxn_submit", - "746: retsub" + "704: asset_delete:", + "709: proto 1 0", + "715: itxn_begin", + "716: frame_dig -1", + "717: itxn_field ConfigAsset", + "720: pushint 3", + "721: itxn_field TypeEnum", + "724: intc_0", + "725: itxn_field Fee", + "731: itxn_submit", + "732: retsub" ], [ "149: intc_1", @@ -589,39 +586,39 @@ "117: callsub multi_inner_txns" ], [ - "750: multi_inner_txns:", - "755: proto 1 2", - "758: txn Sender", - "761: itxn_begin", - "762: itxn_field Receiver", - "765: pushint 5000", - "766: itxn_field Amount", - "767: intc_1", - "768: itxn_field TypeEnum", - "769: intc_0", - "770: itxn_field Fee", - "773: itxn_next", - "776: bytec_1", - "777: itxn_field ApplicationArgs", - "778: bytec_2", - "779: itxn_field ApplicationArgs", - "780: frame_dig -1", - "781: itxn_field ApplicationID", - "784: intc_2", - "785: itxn_field TypeEnum", - "788: intc_0", - "789: itxn_field Fee", - "792: itxn_submit", - "793: gitxn 0 Amount", - "794: itxn LastLog", - "797: dup", - "798: extract 4 0", - "799: swap", - "800: extract 0 4", - "801: bytec_0", - "802: ==", - "803: assert", - "806: retsub" + "736: multi_inner_txns:", + "741: proto 1 2", + "744: txn Sender", + "747: itxn_begin", + "748: itxn_field Receiver", + "751: pushint 5000", + "752: itxn_field Amount", + "753: intc_1", + "754: itxn_field TypeEnum", + "755: intc_0", + "756: itxn_field Fee", + "759: itxn_next", + "762: bytec_1", + "763: itxn_field ApplicationArgs", + "764: bytec_2", + "765: itxn_field ApplicationArgs", + "766: frame_dig -1", + "767: itxn_field ApplicationID", + "770: intc_2", + "771: itxn_field TypeEnum", + "774: intc_0", + "775: itxn_field Fee", + "778: itxn_submit", + "779: gitxn 0 Amount", + "780: itxn LastLog", + "783: dup", + "784: extract 4 0", + "785: swap", + "786: extract 0 4", + "787: bytec_0", + "788: ==", + "789: assert", + "792: retsub" ], [ "118: swap", @@ -668,20 +665,19 @@ "91: callsub deploy_app" ], [ - "810: deploy_app:", - "814: proto 0 1", - "821: itxn_begin", - "824: bytec_3", - "825: itxn_field ClearStateProgramPages", - "826: bytec 4", - "827: itxn_field ApprovalProgramPages", - "830: intc_2", - "831: itxn_field TypeEnum", - "834: intc_0", - "835: itxn_field Fee", - "842: itxn_submit", - "843: itxn CreatedApplicationID", - "846: retsub" + "796: deploy_app:", + "803: itxn_begin", + "806: bytec_3", + "807: itxn_field ClearStateProgramPages", + "808: bytec 4", + "809: itxn_field ApprovalProgramPages", + "812: intc_2", + "813: itxn_field TypeEnum", + "816: intc_0", + "817: itxn_field Fee", + "824: itxn_submit", + "825: itxn CreatedApplicationID", + "828: retsub" ], [ "92: itob", @@ -723,20 +719,19 @@ "74: callsub arc4_deploy_app" ], [ - "850: arc4_deploy_app:", - "854: proto 0 1", - "857: itxn_begin", - "858: bytec_3", - "859: itxn_field ClearStateProgramPages", - "860: bytec 4", - "861: itxn_field ApprovalProgramPages", - "862: intc_2", - "863: itxn_field TypeEnum", - "864: intc_0", - "865: itxn_field Fee", - "866: itxn_submit", - "867: itxn CreatedApplicationID", - "870: retsub" + "832: arc4_deploy_app:", + "835: itxn_begin", + "836: bytec_3", + "837: itxn_field ClearStateProgramPages", + "838: bytec 4", + "839: itxn_field ApprovalProgramPages", + "840: intc_2", + "841: itxn_field TypeEnum", + "842: intc_0", + "843: itxn_field Fee", + "844: itxn_submit", + "845: itxn CreatedApplicationID", + "848: retsub" ], [ "75: itob", @@ -781,50 +776,48 @@ "39: callsub noop_app_call" ], [ - "874: noop_app_call:", - "879: proto 1 2", - "886: itxn_begin", - "889: bytec_1", - "890: itxn_field ApplicationArgs", - "891: bytec_2", - "892: itxn_field ApplicationArgs", - "893: frame_dig -1", - "894: itxn_field ApplicationID", - "898: intc_2", - "899: itxn_field TypeEnum", - "900: intc_0", - "901: itxn_field Fee", - "908: itxn_submit", - "909: itxn LastLog", - "913: dup", - "914: extract 4 0", - "915: swap", - "916: extract 0 4", - "917: bytec_0", - "918: ==", - "919: assert", - "927: itxn_begin", - "928: frame_dig -1", - "929: itxn_field ApplicationID", - "930: bytec_1", - "931: itxn_field ApplicationArgs", - "934: pushbytes 0x0005616761696e", - "935: itxn_field ApplicationArgs", - "943: intc_2", - "944: itxn_field TypeEnum", - "945: intc_0", - "946: itxn_field Fee", - "947: itxn_submit", - "948: itxn LastLog", - "949: dup", - "950: extract 4 0", - "951: swap", - "952: extract 0 4", - "953: bytec_0", - "954: ==", - "955: assert", - "956: extract 2 0", - "959: retsub" + "852: noop_app_call:", + "857: proto 1 2", + "864: itxn_begin", + "867: bytec_1", + "868: itxn_field ApplicationArgs", + "869: bytec_2", + "870: itxn_field ApplicationArgs", + "871: frame_dig -1", + "872: itxn_field ApplicationID", + "876: intc_2", + "877: itxn_field TypeEnum", + "878: intc_0", + "879: itxn_field Fee", + "886: itxn_submit", + "887: itxn LastLog", + "891: dup", + "892: extract 4 0", + "893: swap", + "894: extract 0 4", + "895: bytec_0", + "896: ==", + "897: assert", + "905: itxn_begin", + "906: frame_dig -1", + "907: itxn_field ApplicationID", + "908: bytec_1", + "909: itxn_field ApplicationArgs", + "912: pushbytes 0x0005616761696e", + "913: itxn_field ApplicationArgs", + "921: intc_2", + "922: itxn_field TypeEnum", + "923: intc_0", + "924: itxn_field Fee", + "925: itxn_submit", + "926: itxn LastLog", + "927: dup", + "928: extract 0 4", + "929: bytec_0", + "930: ==", + "931: assert", + "932: extract 6 0", + "935: retsub" ], [ "40: dup", @@ -948,19 +941,18 @@ ], [ "336: payment:", - "341: proto 0 1", - "344: itxn_begin", - "345: txn Sender", - "346: itxn_field Receiver", - "347: pushint 5000", - "348: itxn_field Amount", - "349: intc_1", - "350: itxn_field TypeEnum", - "351: intc_0", - "352: itxn_field Fee", - "353: itxn_submit", - "354: itxn Amount", - "357: retsub" + "339: itxn_begin", + "340: txn Sender", + "341: itxn_field Receiver", + "342: pushint 5000", + "343: itxn_field Amount", + "344: intc_1", + "345: itxn_field TypeEnum", + "346: intc_0", + "347: itxn_field Fee", + "348: itxn_submit", + "349: itxn Amount", + "352: retsub" ], [ "315: itob", @@ -1002,24 +994,23 @@ "296: callsub fungible_asset_create" ], [ - "361: fungible_asset_create:", - "366: proto 0 1", - "374: itxn_begin", - "377: pushbytes \"Royalty Points\"", - "378: itxn_field ConfigAssetName", - "381: pushbytes \"RP\"", - "382: itxn_field ConfigAssetUnitName", - "385: pushint 2", - "386: itxn_field ConfigAssetDecimals", - "389: pushint 100000000000", - "390: itxn_field ConfigAssetTotal", - "393: pushint 3", - "394: itxn_field TypeEnum", - "395: intc_0", - "396: itxn_field Fee", - "404: itxn_submit", - "405: itxn CreatedAssetID", - "408: retsub" + "356: fungible_asset_create:", + "364: itxn_begin", + "367: pushbytes \"Royalty Points\"", + "368: itxn_field ConfigAssetName", + "371: pushbytes \"RP\"", + "372: itxn_field ConfigAssetUnitName", + "375: pushint 2", + "376: itxn_field ConfigAssetDecimals", + "379: pushint 100000000000", + "380: itxn_field ConfigAssetTotal", + "383: pushint 3", + "384: itxn_field TypeEnum", + "385: intc_0", + "386: itxn_field Fee", + "394: itxn_submit", + "395: itxn CreatedAssetID", + "398: retsub" ], [ "297: itob", @@ -1061,32 +1052,31 @@ "278: callsub non_fungible_asset_create" ], [ - "412: non_fungible_asset_create:", - "416: proto 0 1", - "429: itxn_begin", - "432: global CurrentApplicationAddress", - "437: dupn 3", - "438: itxn_field ConfigAssetClawback", - "439: itxn_field ConfigAssetFreeze", - "440: itxn_field ConfigAssetReserve", - "441: itxn_field ConfigAssetManager", - "444: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", - "445: itxn_field ConfigAssetURL", - "448: pushbytes \"Mona Lisa\"", - "449: itxn_field ConfigAssetName", - "452: pushbytes \"ML\"", - "453: itxn_field ConfigAssetUnitName", - "456: pushint 2", - "457: itxn_field ConfigAssetDecimals", - "460: pushint 100", - "461: itxn_field ConfigAssetTotal", - "464: pushint 3", - "465: itxn_field TypeEnum", - "466: intc_0", - "467: itxn_field Fee", - "480: itxn_submit", - "481: itxn CreatedAssetID", - "484: retsub" + "402: non_fungible_asset_create:", + "415: itxn_begin", + "418: global CurrentApplicationAddress", + "423: dupn 3", + "424: itxn_field ConfigAssetClawback", + "425: itxn_field ConfigAssetFreeze", + "426: itxn_field ConfigAssetReserve", + "427: itxn_field ConfigAssetManager", + "430: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", + "431: itxn_field ConfigAssetURL", + "434: pushbytes \"Mona Lisa\"", + "435: itxn_field ConfigAssetName", + "438: pushbytes \"ML\"", + "439: itxn_field ConfigAssetUnitName", + "442: pushint 2", + "443: itxn_field ConfigAssetDecimals", + "446: pushint 100", + "447: itxn_field ConfigAssetTotal", + "450: pushint 3", + "451: itxn_field TypeEnum", + "452: intc_0", + "453: itxn_field Fee", + "466: itxn_submit", + "467: itxn CreatedAssetID", + "470: retsub" ], [ "279: itob", @@ -1131,21 +1121,21 @@ "266: callsub asset_opt_in" ], [ - "488: asset_opt_in:", - "493: proto 1 0", - "501: itxn_begin", - "504: global CurrentApplicationAddress", - "507: intc_0", - "508: itxn_field AssetAmount", - "509: frame_dig -1", - "510: itxn_field XferAsset", - "511: itxn_field AssetReceiver", - "514: intc_3", - "515: itxn_field TypeEnum", - "518: intc_0", - "519: itxn_field Fee", - "527: itxn_submit", - "528: retsub" + "474: asset_opt_in:", + "479: proto 1 0", + "487: itxn_begin", + "490: global CurrentApplicationAddress", + "493: intc_0", + "494: itxn_field AssetAmount", + "495: frame_dig -1", + "496: itxn_field XferAsset", + "497: itxn_field AssetReceiver", + "500: intc_3", + "501: itxn_field TypeEnum", + "504: intc_0", + "505: itxn_field Fee", + "513: itxn_submit", + "514: retsub" ], [ "267: intc_1", @@ -1190,21 +1180,21 @@ "245: callsub asset_transfer" ], [ - "532: asset_transfer:", - "537: proto 3 0", - "545: itxn_begin", - "546: frame_dig -1", - "547: itxn_field AssetAmount", - "548: frame_dig -3", - "549: itxn_field XferAsset", - "550: frame_dig -2", - "551: itxn_field AssetReceiver", - "554: intc_3", - "555: itxn_field TypeEnum", - "558: intc_0", - "559: itxn_field Fee", - "567: itxn_submit", - "568: retsub" + "518: asset_transfer:", + "523: proto 3 0", + "531: itxn_begin", + "532: frame_dig -1", + "533: itxn_field AssetAmount", + "534: frame_dig -3", + "535: itxn_field XferAsset", + "536: frame_dig -2", + "537: itxn_field AssetReceiver", + "540: intc_3", + "541: itxn_field TypeEnum", + "544: intc_0", + "545: itxn_field Fee", + "553: itxn_submit", + "554: retsub" ], [ "246: intc_1", @@ -1247,21 +1237,21 @@ "219: callsub asset_freeze" ], [ - "572: asset_freeze:", - "577: proto 2 0", - "585: itxn_begin", - "588: intc_1", - "589: itxn_field FreezeAssetFrozen", - "590: frame_dig -1", - "591: itxn_field FreezeAsset", - "592: frame_dig -2", - "593: itxn_field FreezeAssetAccount", - "596: pushint 5", - "597: itxn_field TypeEnum", - "600: intc_0", - "601: itxn_field Fee", - "609: itxn_submit", - "610: retsub" + "558: asset_freeze:", + "563: proto 2 0", + "571: itxn_begin", + "574: intc_1", + "575: itxn_field FreezeAssetFrozen", + "576: frame_dig -1", + "577: itxn_field FreezeAsset", + "578: frame_dig -2", + "579: itxn_field FreezeAssetAccount", + "582: pushint 5", + "583: itxn_field TypeEnum", + "586: intc_0", + "587: itxn_field Fee", + "595: itxn_submit", + "596: retsub" ], [ "220: intc_1", @@ -1306,23 +1296,23 @@ "195: callsub asset_revoke" ], [ - "614: asset_revoke:", - "621: proto 3 0", - "630: itxn_begin", - "633: global CurrentApplicationAddress", - "634: frame_dig -1", - "635: itxn_field AssetAmount", - "636: frame_dig -2", - "637: itxn_field AssetSender", - "638: frame_dig -3", - "639: itxn_field XferAsset", - "640: itxn_field AssetReceiver", - "643: intc_3", - "644: itxn_field TypeEnum", - "647: intc_0", - "648: itxn_field Fee", - "657: itxn_submit", - "658: retsub" + "600: asset_revoke:", + "607: proto 3 0", + "616: itxn_begin", + "619: global CurrentApplicationAddress", + "620: frame_dig -1", + "621: itxn_field AssetAmount", + "622: frame_dig -2", + "623: itxn_field AssetSender", + "624: frame_dig -3", + "625: itxn_field XferAsset", + "626: itxn_field AssetReceiver", + "629: intc_3", + "630: itxn_field TypeEnum", + "633: intc_0", + "634: itxn_field Fee", + "643: itxn_submit", + "644: retsub" ], [ "196: intc_1", @@ -1362,25 +1352,25 @@ "169: callsub asset_config" ], [ - "662: asset_config:", - "667: proto 1 0", - "677: itxn_begin", - "680: global CurrentApplicationAddress", - "683: dup", - "686: txn Sender", - "689: dup", - "690: itxn_field ConfigAssetClawback", - "691: itxn_field ConfigAssetFreeze", - "692: itxn_field ConfigAssetReserve", - "693: itxn_field ConfigAssetManager", - "694: frame_dig -1", - "695: itxn_field ConfigAsset", - "698: pushint 3", - "699: itxn_field TypeEnum", - "702: intc_0", - "703: itxn_field Fee", - "713: itxn_submit", - "714: retsub" + "648: asset_config:", + "653: proto 1 0", + "663: itxn_begin", + "666: global CurrentApplicationAddress", + "669: dup", + "672: txn Sender", + "675: dup", + "676: itxn_field ConfigAssetClawback", + "677: itxn_field ConfigAssetFreeze", + "678: itxn_field ConfigAssetReserve", + "679: itxn_field ConfigAssetManager", + "680: frame_dig -1", + "681: itxn_field ConfigAsset", + "684: pushint 3", + "685: itxn_field TypeEnum", + "688: intc_0", + "689: itxn_field Fee", + "699: itxn_submit", + "700: retsub" ], [ "170: intc_1", @@ -1420,17 +1410,17 @@ "148: callsub asset_delete" ], [ - "718: asset_delete:", - "723: proto 1 0", - "729: itxn_begin", - "730: frame_dig -1", - "731: itxn_field ConfigAsset", - "734: pushint 3", - "735: itxn_field TypeEnum", - "738: intc_0", - "739: itxn_field Fee", - "745: itxn_submit", - "746: retsub" + "704: asset_delete:", + "709: proto 1 0", + "715: itxn_begin", + "716: frame_dig -1", + "717: itxn_field ConfigAsset", + "720: pushint 3", + "721: itxn_field TypeEnum", + "724: intc_0", + "725: itxn_field Fee", + "731: itxn_submit", + "732: retsub" ], [ "149: intc_1", @@ -1470,39 +1460,39 @@ "117: callsub multi_inner_txns" ], [ - "750: multi_inner_txns:", - "755: proto 1 2", - "758: txn Sender", - "761: itxn_begin", - "762: itxn_field Receiver", - "765: pushint 5000", - "766: itxn_field Amount", - "767: intc_1", - "768: itxn_field TypeEnum", - "769: intc_0", - "770: itxn_field Fee", - "773: itxn_next", - "776: bytec_1", - "777: itxn_field ApplicationArgs", - "778: bytec_2", - "779: itxn_field ApplicationArgs", - "780: frame_dig -1", - "781: itxn_field ApplicationID", - "784: intc_2", - "785: itxn_field TypeEnum", - "788: intc_0", - "789: itxn_field Fee", - "792: itxn_submit", - "793: gitxn 0 Amount", - "794: itxn LastLog", - "797: dup", - "798: extract 4 0", - "799: swap", - "800: extract 0 4", - "801: bytec_0", - "802: ==", - "803: assert", - "806: retsub" + "736: multi_inner_txns:", + "741: proto 1 2", + "744: txn Sender", + "747: itxn_begin", + "748: itxn_field Receiver", + "751: pushint 5000", + "752: itxn_field Amount", + "753: intc_1", + "754: itxn_field TypeEnum", + "755: intc_0", + "756: itxn_field Fee", + "759: itxn_next", + "762: bytec_1", + "763: itxn_field ApplicationArgs", + "764: bytec_2", + "765: itxn_field ApplicationArgs", + "766: frame_dig -1", + "767: itxn_field ApplicationID", + "770: intc_2", + "771: itxn_field TypeEnum", + "774: intc_0", + "775: itxn_field Fee", + "778: itxn_submit", + "779: gitxn 0 Amount", + "780: itxn LastLog", + "783: dup", + "784: extract 4 0", + "785: swap", + "786: extract 0 4", + "787: bytec_0", + "788: ==", + "789: assert", + "792: retsub" ], [ "118: swap", @@ -1549,20 +1539,19 @@ "91: callsub deploy_app" ], [ - "810: deploy_app:", - "814: proto 0 1", - "821: itxn_begin", - "824: bytec_3", - "825: itxn_field ClearStateProgramPages", - "826: bytec 4", - "827: itxn_field ApprovalProgramPages", - "830: intc_2", - "831: itxn_field TypeEnum", - "834: intc_0", - "835: itxn_field Fee", - "842: itxn_submit", - "843: itxn CreatedApplicationID", - "846: retsub" + "796: deploy_app:", + "803: itxn_begin", + "806: bytec_3", + "807: itxn_field ClearStateProgramPages", + "808: bytec 4", + "809: itxn_field ApprovalProgramPages", + "812: intc_2", + "813: itxn_field TypeEnum", + "816: intc_0", + "817: itxn_field Fee", + "824: itxn_submit", + "825: itxn CreatedApplicationID", + "828: retsub" ], [ "92: itob", @@ -1604,20 +1593,19 @@ "74: callsub arc4_deploy_app" ], [ - "850: arc4_deploy_app:", - "854: proto 0 1", - "857: itxn_begin", - "858: bytec_3", - "859: itxn_field ClearStateProgramPages", - "860: bytec 4", - "861: itxn_field ApprovalProgramPages", - "862: intc_2", - "863: itxn_field TypeEnum", - "864: intc_0", - "865: itxn_field Fee", - "866: itxn_submit", - "867: itxn CreatedApplicationID", - "870: retsub" + "832: arc4_deploy_app:", + "835: itxn_begin", + "836: bytec_3", + "837: itxn_field ClearStateProgramPages", + "838: bytec 4", + "839: itxn_field ApprovalProgramPages", + "840: intc_2", + "841: itxn_field TypeEnum", + "842: intc_0", + "843: itxn_field Fee", + "844: itxn_submit", + "845: itxn CreatedApplicationID", + "848: retsub" ], [ "75: itob", @@ -1662,50 +1650,48 @@ "39: callsub noop_app_call" ], [ - "874: noop_app_call:", - "879: proto 1 2", - "886: itxn_begin", - "889: bytec_1", - "890: itxn_field ApplicationArgs", - "891: bytec_2", - "892: itxn_field ApplicationArgs", - "893: frame_dig -1", - "894: itxn_field ApplicationID", - "898: intc_2", - "899: itxn_field TypeEnum", - "900: intc_0", - "901: itxn_field Fee", - "908: itxn_submit", - "909: itxn LastLog", - "913: dup", - "914: extract 4 0", - "915: swap", - "916: extract 0 4", - "917: bytec_0", - "918: ==", - "919: assert", - "927: itxn_begin", - "928: frame_dig -1", - "929: itxn_field ApplicationID", - "930: bytec_1", - "931: itxn_field ApplicationArgs", - "934: pushbytes 0x0005616761696e", - "935: itxn_field ApplicationArgs", - "943: intc_2", - "944: itxn_field TypeEnum", - "945: intc_0", - "946: itxn_field Fee", - "947: itxn_submit", - "948: itxn LastLog", - "949: dup", - "950: extract 4 0", - "951: swap", - "952: extract 0 4", - "953: bytec_0", - "954: ==", - "955: assert", - "956: extract 2 0", - "959: retsub" + "852: noop_app_call:", + "857: proto 1 2", + "864: itxn_begin", + "867: bytec_1", + "868: itxn_field ApplicationArgs", + "869: bytec_2", + "870: itxn_field ApplicationArgs", + "871: frame_dig -1", + "872: itxn_field ApplicationID", + "876: intc_2", + "877: itxn_field TypeEnum", + "878: intc_0", + "879: itxn_field Fee", + "886: itxn_submit", + "887: itxn LastLog", + "891: dup", + "892: extract 4 0", + "893: swap", + "894: extract 0 4", + "895: bytec_0", + "896: ==", + "897: assert", + "905: itxn_begin", + "906: frame_dig -1", + "907: itxn_field ApplicationID", + "908: bytec_1", + "909: itxn_field ApplicationArgs", + "912: pushbytes 0x0005616761696e", + "913: itxn_field ApplicationArgs", + "921: intc_2", + "922: itxn_field TypeEnum", + "923: intc_0", + "924: itxn_field Fee", + "925: itxn_submit", + "926: itxn LastLog", + "927: dup", + "928: extract 0 4", + "929: bytec_0", + "930: ==", + "931: assert", + "932: extract 6 0", + "935: retsub" ], [ "40: dup", @@ -1955,19 +1941,18 @@ ], [ "336: payment:", - "341: proto 0 1", - "344: itxn_begin", - "345: txn Sender", - "346: itxn_field Receiver", - "347: pushint 5000", - "348: itxn_field Amount", - "349: intc_1", - "350: itxn_field TypeEnum", - "351: intc_0", - "352: itxn_field Fee", - "353: itxn_submit", - "354: itxn Amount", - "357: retsub" + "339: itxn_begin", + "340: txn Sender", + "341: itxn_field Receiver", + "342: pushint 5000", + "343: itxn_field Amount", + "344: intc_1", + "345: itxn_field TypeEnum", + "346: intc_0", + "347: itxn_field Fee", + "348: itxn_submit", + "349: itxn Amount", + "352: retsub" ], [ "315: itob", @@ -2009,24 +1994,23 @@ "296: callsub fungible_asset_create" ], [ - "361: fungible_asset_create:", - "366: proto 0 1", - "374: itxn_begin", - "377: pushbytes \"Royalty Points\"", - "378: itxn_field ConfigAssetName", - "381: pushbytes \"RP\"", - "382: itxn_field ConfigAssetUnitName", - "385: pushint 2", - "386: itxn_field ConfigAssetDecimals", - "389: pushint 100000000000", - "390: itxn_field ConfigAssetTotal", - "393: pushint 3", - "394: itxn_field TypeEnum", - "395: intc_0", - "396: itxn_field Fee", - "404: itxn_submit", - "405: itxn CreatedAssetID", - "408: retsub" + "356: fungible_asset_create:", + "364: itxn_begin", + "367: pushbytes \"Royalty Points\"", + "368: itxn_field ConfigAssetName", + "371: pushbytes \"RP\"", + "372: itxn_field ConfigAssetUnitName", + "375: pushint 2", + "376: itxn_field ConfigAssetDecimals", + "379: pushint 100000000000", + "380: itxn_field ConfigAssetTotal", + "383: pushint 3", + "384: itxn_field TypeEnum", + "385: intc_0", + "386: itxn_field Fee", + "394: itxn_submit", + "395: itxn CreatedAssetID", + "398: retsub" ], [ "297: itob", @@ -2068,32 +2052,31 @@ "278: callsub non_fungible_asset_create" ], [ - "412: non_fungible_asset_create:", - "416: proto 0 1", - "429: itxn_begin", - "432: global CurrentApplicationAddress", - "437: dupn 3", - "438: itxn_field ConfigAssetClawback", - "439: itxn_field ConfigAssetFreeze", - "440: itxn_field ConfigAssetReserve", - "441: itxn_field ConfigAssetManager", - "444: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", - "445: itxn_field ConfigAssetURL", - "448: pushbytes \"Mona Lisa\"", - "449: itxn_field ConfigAssetName", - "452: pushbytes \"ML\"", - "453: itxn_field ConfigAssetUnitName", - "456: pushint 2", - "457: itxn_field ConfigAssetDecimals", - "460: pushint 100", - "461: itxn_field ConfigAssetTotal", - "464: pushint 3", - "465: itxn_field TypeEnum", - "466: intc_0", - "467: itxn_field Fee", - "480: itxn_submit", - "481: itxn CreatedAssetID", - "484: retsub" + "402: non_fungible_asset_create:", + "415: itxn_begin", + "418: global CurrentApplicationAddress", + "423: dupn 3", + "424: itxn_field ConfigAssetClawback", + "425: itxn_field ConfigAssetFreeze", + "426: itxn_field ConfigAssetReserve", + "427: itxn_field ConfigAssetManager", + "430: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", + "431: itxn_field ConfigAssetURL", + "434: pushbytes \"Mona Lisa\"", + "435: itxn_field ConfigAssetName", + "438: pushbytes \"ML\"", + "439: itxn_field ConfigAssetUnitName", + "442: pushint 2", + "443: itxn_field ConfigAssetDecimals", + "446: pushint 100", + "447: itxn_field ConfigAssetTotal", + "450: pushint 3", + "451: itxn_field TypeEnum", + "452: intc_0", + "453: itxn_field Fee", + "466: itxn_submit", + "467: itxn CreatedAssetID", + "470: retsub" ], [ "279: itob", @@ -2138,21 +2121,21 @@ "266: callsub asset_opt_in" ], [ - "488: asset_opt_in:", - "493: proto 1 0", - "501: itxn_begin", - "504: global CurrentApplicationAddress", - "507: intc_0", - "508: itxn_field AssetAmount", - "509: frame_dig -1", - "510: itxn_field XferAsset", - "511: itxn_field AssetReceiver", - "514: intc_3", - "515: itxn_field TypeEnum", - "518: intc_0", - "519: itxn_field Fee", - "527: itxn_submit", - "528: retsub" + "474: asset_opt_in:", + "479: proto 1 0", + "487: itxn_begin", + "490: global CurrentApplicationAddress", + "493: intc_0", + "494: itxn_field AssetAmount", + "495: frame_dig -1", + "496: itxn_field XferAsset", + "497: itxn_field AssetReceiver", + "500: intc_3", + "501: itxn_field TypeEnum", + "504: intc_0", + "505: itxn_field Fee", + "513: itxn_submit", + "514: retsub" ], [ "267: intc_1", @@ -2197,21 +2180,21 @@ "245: callsub asset_transfer" ], [ - "532: asset_transfer:", - "537: proto 3 0", - "545: itxn_begin", - "546: frame_dig -1", - "547: itxn_field AssetAmount", - "548: frame_dig -3", - "549: itxn_field XferAsset", - "550: frame_dig -2", - "551: itxn_field AssetReceiver", - "554: intc_3", - "555: itxn_field TypeEnum", - "558: intc_0", - "559: itxn_field Fee", - "567: itxn_submit", - "568: retsub" + "518: asset_transfer:", + "523: proto 3 0", + "531: itxn_begin", + "532: frame_dig -1", + "533: itxn_field AssetAmount", + "534: frame_dig -3", + "535: itxn_field XferAsset", + "536: frame_dig -2", + "537: itxn_field AssetReceiver", + "540: intc_3", + "541: itxn_field TypeEnum", + "544: intc_0", + "545: itxn_field Fee", + "553: itxn_submit", + "554: retsub" ], [ "246: intc_1", @@ -2254,21 +2237,21 @@ "219: callsub asset_freeze" ], [ - "572: asset_freeze:", - "577: proto 2 0", - "585: itxn_begin", - "588: intc_1", - "589: itxn_field FreezeAssetFrozen", - "590: frame_dig -1", - "591: itxn_field FreezeAsset", - "592: frame_dig -2", - "593: itxn_field FreezeAssetAccount", - "596: pushint 5", - "597: itxn_field TypeEnum", - "600: intc_0", - "601: itxn_field Fee", - "609: itxn_submit", - "610: retsub" + "558: asset_freeze:", + "563: proto 2 0", + "571: itxn_begin", + "574: intc_1", + "575: itxn_field FreezeAssetFrozen", + "576: frame_dig -1", + "577: itxn_field FreezeAsset", + "578: frame_dig -2", + "579: itxn_field FreezeAssetAccount", + "582: pushint 5", + "583: itxn_field TypeEnum", + "586: intc_0", + "587: itxn_field Fee", + "595: itxn_submit", + "596: retsub" ], [ "220: intc_1", @@ -2313,23 +2296,23 @@ "195: callsub asset_revoke" ], [ - "614: asset_revoke:", - "621: proto 3 0", - "630: itxn_begin", - "633: global CurrentApplicationAddress", - "634: frame_dig -1", - "635: itxn_field AssetAmount", - "636: frame_dig -2", - "637: itxn_field AssetSender", - "638: frame_dig -3", - "639: itxn_field XferAsset", - "640: itxn_field AssetReceiver", - "643: intc_3", - "644: itxn_field TypeEnum", - "647: intc_0", - "648: itxn_field Fee", - "657: itxn_submit", - "658: retsub" + "600: asset_revoke:", + "607: proto 3 0", + "616: itxn_begin", + "619: global CurrentApplicationAddress", + "620: frame_dig -1", + "621: itxn_field AssetAmount", + "622: frame_dig -2", + "623: itxn_field AssetSender", + "624: frame_dig -3", + "625: itxn_field XferAsset", + "626: itxn_field AssetReceiver", + "629: intc_3", + "630: itxn_field TypeEnum", + "633: intc_0", + "634: itxn_field Fee", + "643: itxn_submit", + "644: retsub" ], [ "196: intc_1", @@ -2369,25 +2352,25 @@ "169: callsub asset_config" ], [ - "662: asset_config:", - "667: proto 1 0", - "677: itxn_begin", - "680: global CurrentApplicationAddress", - "683: dup", - "686: txn Sender", - "689: dup", - "690: itxn_field ConfigAssetClawback", - "691: itxn_field ConfigAssetFreeze", - "692: itxn_field ConfigAssetReserve", - "693: itxn_field ConfigAssetManager", - "694: frame_dig -1", - "695: itxn_field ConfigAsset", - "698: pushint 3", - "699: itxn_field TypeEnum", - "702: intc_0", - "703: itxn_field Fee", - "713: itxn_submit", - "714: retsub" + "648: asset_config:", + "653: proto 1 0", + "663: itxn_begin", + "666: global CurrentApplicationAddress", + "669: dup", + "672: txn Sender", + "675: dup", + "676: itxn_field ConfigAssetClawback", + "677: itxn_field ConfigAssetFreeze", + "678: itxn_field ConfigAssetReserve", + "679: itxn_field ConfigAssetManager", + "680: frame_dig -1", + "681: itxn_field ConfigAsset", + "684: pushint 3", + "685: itxn_field TypeEnum", + "688: intc_0", + "689: itxn_field Fee", + "699: itxn_submit", + "700: retsub" ], [ "170: intc_1", @@ -2427,17 +2410,17 @@ "148: callsub asset_delete" ], [ - "718: asset_delete:", - "723: proto 1 0", - "729: itxn_begin", - "730: frame_dig -1", - "731: itxn_field ConfigAsset", - "734: pushint 3", - "735: itxn_field TypeEnum", - "738: intc_0", - "739: itxn_field Fee", - "745: itxn_submit", - "746: retsub" + "704: asset_delete:", + "709: proto 1 0", + "715: itxn_begin", + "716: frame_dig -1", + "717: itxn_field ConfigAsset", + "720: pushint 3", + "721: itxn_field TypeEnum", + "724: intc_0", + "725: itxn_field Fee", + "731: itxn_submit", + "732: retsub" ], [ "149: intc_1", @@ -2477,39 +2460,39 @@ "117: callsub multi_inner_txns" ], [ - "750: multi_inner_txns:", - "755: proto 1 2", - "758: txn Sender", - "761: itxn_begin", - "762: itxn_field Receiver", - "765: pushint 5000", - "766: itxn_field Amount", - "767: intc_1", - "768: itxn_field TypeEnum", - "769: intc_0", - "770: itxn_field Fee", - "773: itxn_next", - "776: bytec_1", - "777: itxn_field ApplicationArgs", - "778: bytec_2", - "779: itxn_field ApplicationArgs", - "780: frame_dig -1", - "781: itxn_field ApplicationID", - "784: intc_2", - "785: itxn_field TypeEnum", - "788: intc_0", - "789: itxn_field Fee", - "792: itxn_submit", - "793: gitxn 0 Amount", - "794: itxn LastLog", - "797: dup", - "798: extract 4 0", - "799: swap", - "800: extract 0 4", - "801: bytec_0", - "802: ==", - "803: assert", - "806: retsub" + "736: multi_inner_txns:", + "741: proto 1 2", + "744: txn Sender", + "747: itxn_begin", + "748: itxn_field Receiver", + "751: pushint 5000", + "752: itxn_field Amount", + "753: intc_1", + "754: itxn_field TypeEnum", + "755: intc_0", + "756: itxn_field Fee", + "759: itxn_next", + "762: bytec_1", + "763: itxn_field ApplicationArgs", + "764: bytec_2", + "765: itxn_field ApplicationArgs", + "766: frame_dig -1", + "767: itxn_field ApplicationID", + "770: intc_2", + "771: itxn_field TypeEnum", + "774: intc_0", + "775: itxn_field Fee", + "778: itxn_submit", + "779: gitxn 0 Amount", + "780: itxn LastLog", + "783: dup", + "784: extract 4 0", + "785: swap", + "786: extract 0 4", + "787: bytec_0", + "788: ==", + "789: assert", + "792: retsub" ], [ "118: swap", @@ -2556,20 +2539,19 @@ "91: callsub deploy_app" ], [ - "810: deploy_app:", - "814: proto 0 1", - "821: itxn_begin", - "824: bytec_3", - "825: itxn_field ClearStateProgramPages", - "826: bytec 4", - "827: itxn_field ApprovalProgramPages", - "830: intc_2", - "831: itxn_field TypeEnum", - "834: intc_0", - "835: itxn_field Fee", - "842: itxn_submit", - "843: itxn CreatedApplicationID", - "846: retsub" + "796: deploy_app:", + "803: itxn_begin", + "806: bytec_3", + "807: itxn_field ClearStateProgramPages", + "808: bytec 4", + "809: itxn_field ApprovalProgramPages", + "812: intc_2", + "813: itxn_field TypeEnum", + "816: intc_0", + "817: itxn_field Fee", + "824: itxn_submit", + "825: itxn CreatedApplicationID", + "828: retsub" ], [ "92: itob", @@ -2611,20 +2593,19 @@ "74: callsub arc4_deploy_app" ], [ - "850: arc4_deploy_app:", - "854: proto 0 1", - "857: itxn_begin", - "858: bytec_3", - "859: itxn_field ClearStateProgramPages", - "860: bytec 4", - "861: itxn_field ApprovalProgramPages", - "862: intc_2", - "863: itxn_field TypeEnum", - "864: intc_0", - "865: itxn_field Fee", - "866: itxn_submit", - "867: itxn CreatedApplicationID", - "870: retsub" + "832: arc4_deploy_app:", + "835: itxn_begin", + "836: bytec_3", + "837: itxn_field ClearStateProgramPages", + "838: bytec 4", + "839: itxn_field ApprovalProgramPages", + "840: intc_2", + "841: itxn_field TypeEnum", + "842: intc_0", + "843: itxn_field Fee", + "844: itxn_submit", + "845: itxn CreatedApplicationID", + "848: retsub" ], [ "75: itob", @@ -2669,50 +2650,48 @@ "39: callsub noop_app_call" ], [ - "874: noop_app_call:", - "879: proto 1 2", - "886: itxn_begin", - "889: bytec_1", - "890: itxn_field ApplicationArgs", - "891: bytec_2", - "892: itxn_field ApplicationArgs", - "893: frame_dig -1", - "894: itxn_field ApplicationID", - "898: intc_2", - "899: itxn_field TypeEnum", - "900: intc_0", - "901: itxn_field Fee", - "908: itxn_submit", - "909: itxn LastLog", - "913: dup", - "914: extract 4 0", - "915: swap", - "916: extract 0 4", - "917: bytec_0", - "918: ==", - "919: assert", - "927: itxn_begin", - "928: frame_dig -1", - "929: itxn_field ApplicationID", - "930: bytec_1", - "931: itxn_field ApplicationArgs", - "934: pushbytes 0x0005616761696e", - "935: itxn_field ApplicationArgs", - "943: intc_2", - "944: itxn_field TypeEnum", - "945: intc_0", - "946: itxn_field Fee", - "947: itxn_submit", - "948: itxn LastLog", - "949: dup", - "950: extract 4 0", - "951: swap", - "952: extract 0 4", - "953: bytec_0", - "954: ==", - "955: assert", - "956: extract 2 0", - "959: retsub" + "852: noop_app_call:", + "857: proto 1 2", + "864: itxn_begin", + "867: bytec_1", + "868: itxn_field ApplicationArgs", + "869: bytec_2", + "870: itxn_field ApplicationArgs", + "871: frame_dig -1", + "872: itxn_field ApplicationID", + "876: intc_2", + "877: itxn_field TypeEnum", + "878: intc_0", + "879: itxn_field Fee", + "886: itxn_submit", + "887: itxn LastLog", + "891: dup", + "892: extract 4 0", + "893: swap", + "894: extract 0 4", + "895: bytec_0", + "896: ==", + "897: assert", + "905: itxn_begin", + "906: frame_dig -1", + "907: itxn_field ApplicationID", + "908: bytec_1", + "909: itxn_field ApplicationArgs", + "912: pushbytes 0x0005616761696e", + "913: itxn_field ApplicationArgs", + "921: intc_2", + "922: itxn_field TypeEnum", + "923: intc_0", + "924: itxn_field Fee", + "925: itxn_submit", + "926: itxn LastLog", + "927: dup", + "928: extract 0 4", + "929: bytec_0", + "930: ==", + "931: assert", + "932: extract 6 0", + "935: retsub" ], [ "40: dup", @@ -2836,19 +2815,18 @@ ], [ "336: payment:", - "341: proto 0 1", - "344: itxn_begin", - "345: txn Sender", - "346: itxn_field Receiver", - "347: pushint 5000", - "348: itxn_field Amount", - "349: intc_1", - "350: itxn_field TypeEnum", - "351: intc_0", - "352: itxn_field Fee", - "353: itxn_submit", - "354: itxn Amount", - "357: retsub" + "339: itxn_begin", + "340: txn Sender", + "341: itxn_field Receiver", + "342: pushint 5000", + "343: itxn_field Amount", + "344: intc_1", + "345: itxn_field TypeEnum", + "346: intc_0", + "347: itxn_field Fee", + "348: itxn_submit", + "349: itxn Amount", + "352: retsub" ], [ "315: itob", @@ -2890,24 +2868,23 @@ "296: callsub fungible_asset_create" ], [ - "361: fungible_asset_create:", - "366: proto 0 1", - "374: itxn_begin", - "377: pushbytes \"Royalty Points\"", - "378: itxn_field ConfigAssetName", - "381: pushbytes \"RP\"", - "382: itxn_field ConfigAssetUnitName", - "385: pushint 2", - "386: itxn_field ConfigAssetDecimals", - "389: pushint 100000000000", - "390: itxn_field ConfigAssetTotal", - "393: pushint 3", - "394: itxn_field TypeEnum", - "395: intc_0", - "396: itxn_field Fee", - "404: itxn_submit", - "405: itxn CreatedAssetID", - "408: retsub" + "356: fungible_asset_create:", + "364: itxn_begin", + "367: pushbytes \"Royalty Points\"", + "368: itxn_field ConfigAssetName", + "371: pushbytes \"RP\"", + "372: itxn_field ConfigAssetUnitName", + "375: pushint 2", + "376: itxn_field ConfigAssetDecimals", + "379: pushint 100000000000", + "380: itxn_field ConfigAssetTotal", + "383: pushint 3", + "384: itxn_field TypeEnum", + "385: intc_0", + "386: itxn_field Fee", + "394: itxn_submit", + "395: itxn CreatedAssetID", + "398: retsub" ], [ "297: itob", @@ -2949,32 +2926,31 @@ "278: callsub non_fungible_asset_create" ], [ - "412: non_fungible_asset_create:", - "416: proto 0 1", - "429: itxn_begin", - "432: global CurrentApplicationAddress", - "437: dupn 3", - "438: itxn_field ConfigAssetClawback", - "439: itxn_field ConfigAssetFreeze", - "440: itxn_field ConfigAssetReserve", - "441: itxn_field ConfigAssetManager", - "444: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", - "445: itxn_field ConfigAssetURL", - "448: pushbytes \"Mona Lisa\"", - "449: itxn_field ConfigAssetName", - "452: pushbytes \"ML\"", - "453: itxn_field ConfigAssetUnitName", - "456: pushint 2", - "457: itxn_field ConfigAssetDecimals", - "460: pushint 100", - "461: itxn_field ConfigAssetTotal", - "464: pushint 3", - "465: itxn_field TypeEnum", - "466: intc_0", - "467: itxn_field Fee", - "480: itxn_submit", - "481: itxn CreatedAssetID", - "484: retsub" + "402: non_fungible_asset_create:", + "415: itxn_begin", + "418: global CurrentApplicationAddress", + "423: dupn 3", + "424: itxn_field ConfigAssetClawback", + "425: itxn_field ConfigAssetFreeze", + "426: itxn_field ConfigAssetReserve", + "427: itxn_field ConfigAssetManager", + "430: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", + "431: itxn_field ConfigAssetURL", + "434: pushbytes \"Mona Lisa\"", + "435: itxn_field ConfigAssetName", + "438: pushbytes \"ML\"", + "439: itxn_field ConfigAssetUnitName", + "442: pushint 2", + "443: itxn_field ConfigAssetDecimals", + "446: pushint 100", + "447: itxn_field ConfigAssetTotal", + "450: pushint 3", + "451: itxn_field TypeEnum", + "452: intc_0", + "453: itxn_field Fee", + "466: itxn_submit", + "467: itxn CreatedAssetID", + "470: retsub" ], [ "279: itob", @@ -3019,21 +2995,21 @@ "266: callsub asset_opt_in" ], [ - "488: asset_opt_in:", - "493: proto 1 0", - "501: itxn_begin", - "504: global CurrentApplicationAddress", - "507: intc_0", - "508: itxn_field AssetAmount", - "509: frame_dig -1", - "510: itxn_field XferAsset", - "511: itxn_field AssetReceiver", - "514: intc_3", - "515: itxn_field TypeEnum", - "518: intc_0", - "519: itxn_field Fee", - "527: itxn_submit", - "528: retsub" + "474: asset_opt_in:", + "479: proto 1 0", + "487: itxn_begin", + "490: global CurrentApplicationAddress", + "493: intc_0", + "494: itxn_field AssetAmount", + "495: frame_dig -1", + "496: itxn_field XferAsset", + "497: itxn_field AssetReceiver", + "500: intc_3", + "501: itxn_field TypeEnum", + "504: intc_0", + "505: itxn_field Fee", + "513: itxn_submit", + "514: retsub" ], [ "267: intc_1", @@ -3078,21 +3054,21 @@ "245: callsub asset_transfer" ], [ - "532: asset_transfer:", - "537: proto 3 0", - "545: itxn_begin", - "546: frame_dig -1", - "547: itxn_field AssetAmount", - "548: frame_dig -3", - "549: itxn_field XferAsset", - "550: frame_dig -2", - "551: itxn_field AssetReceiver", - "554: intc_3", - "555: itxn_field TypeEnum", - "558: intc_0", - "559: itxn_field Fee", - "567: itxn_submit", - "568: retsub" + "518: asset_transfer:", + "523: proto 3 0", + "531: itxn_begin", + "532: frame_dig -1", + "533: itxn_field AssetAmount", + "534: frame_dig -3", + "535: itxn_field XferAsset", + "536: frame_dig -2", + "537: itxn_field AssetReceiver", + "540: intc_3", + "541: itxn_field TypeEnum", + "544: intc_0", + "545: itxn_field Fee", + "553: itxn_submit", + "554: retsub" ], [ "246: intc_1", @@ -3135,21 +3111,21 @@ "219: callsub asset_freeze" ], [ - "572: asset_freeze:", - "577: proto 2 0", - "585: itxn_begin", - "588: intc_1", - "589: itxn_field FreezeAssetFrozen", - "590: frame_dig -1", - "591: itxn_field FreezeAsset", - "592: frame_dig -2", - "593: itxn_field FreezeAssetAccount", - "596: pushint 5", - "597: itxn_field TypeEnum", - "600: intc_0", - "601: itxn_field Fee", - "609: itxn_submit", - "610: retsub" + "558: asset_freeze:", + "563: proto 2 0", + "571: itxn_begin", + "574: intc_1", + "575: itxn_field FreezeAssetFrozen", + "576: frame_dig -1", + "577: itxn_field FreezeAsset", + "578: frame_dig -2", + "579: itxn_field FreezeAssetAccount", + "582: pushint 5", + "583: itxn_field TypeEnum", + "586: intc_0", + "587: itxn_field Fee", + "595: itxn_submit", + "596: retsub" ], [ "220: intc_1", @@ -3194,23 +3170,23 @@ "195: callsub asset_revoke" ], [ - "614: asset_revoke:", - "621: proto 3 0", - "630: itxn_begin", - "633: global CurrentApplicationAddress", - "634: frame_dig -1", - "635: itxn_field AssetAmount", - "636: frame_dig -2", - "637: itxn_field AssetSender", - "638: frame_dig -3", - "639: itxn_field XferAsset", - "640: itxn_field AssetReceiver", - "643: intc_3", - "644: itxn_field TypeEnum", - "647: intc_0", - "648: itxn_field Fee", - "657: itxn_submit", - "658: retsub" + "600: asset_revoke:", + "607: proto 3 0", + "616: itxn_begin", + "619: global CurrentApplicationAddress", + "620: frame_dig -1", + "621: itxn_field AssetAmount", + "622: frame_dig -2", + "623: itxn_field AssetSender", + "624: frame_dig -3", + "625: itxn_field XferAsset", + "626: itxn_field AssetReceiver", + "629: intc_3", + "630: itxn_field TypeEnum", + "633: intc_0", + "634: itxn_field Fee", + "643: itxn_submit", + "644: retsub" ], [ "196: intc_1", @@ -3250,25 +3226,25 @@ "169: callsub asset_config" ], [ - "662: asset_config:", - "667: proto 1 0", - "677: itxn_begin", - "680: global CurrentApplicationAddress", - "683: dup", - "686: txn Sender", - "689: dup", - "690: itxn_field ConfigAssetClawback", - "691: itxn_field ConfigAssetFreeze", - "692: itxn_field ConfigAssetReserve", - "693: itxn_field ConfigAssetManager", - "694: frame_dig -1", - "695: itxn_field ConfigAsset", - "698: pushint 3", - "699: itxn_field TypeEnum", - "702: intc_0", - "703: itxn_field Fee", - "713: itxn_submit", - "714: retsub" + "648: asset_config:", + "653: proto 1 0", + "663: itxn_begin", + "666: global CurrentApplicationAddress", + "669: dup", + "672: txn Sender", + "675: dup", + "676: itxn_field ConfigAssetClawback", + "677: itxn_field ConfigAssetFreeze", + "678: itxn_field ConfigAssetReserve", + "679: itxn_field ConfigAssetManager", + "680: frame_dig -1", + "681: itxn_field ConfigAsset", + "684: pushint 3", + "685: itxn_field TypeEnum", + "688: intc_0", + "689: itxn_field Fee", + "699: itxn_submit", + "700: retsub" ], [ "170: intc_1", @@ -3308,17 +3284,17 @@ "148: callsub asset_delete" ], [ - "718: asset_delete:", - "723: proto 1 0", - "729: itxn_begin", - "730: frame_dig -1", - "731: itxn_field ConfigAsset", - "734: pushint 3", - "735: itxn_field TypeEnum", - "738: intc_0", - "739: itxn_field Fee", - "745: itxn_submit", - "746: retsub" + "704: asset_delete:", + "709: proto 1 0", + "715: itxn_begin", + "716: frame_dig -1", + "717: itxn_field ConfigAsset", + "720: pushint 3", + "721: itxn_field TypeEnum", + "724: intc_0", + "725: itxn_field Fee", + "731: itxn_submit", + "732: retsub" ], [ "149: intc_1", @@ -3358,39 +3334,39 @@ "117: callsub multi_inner_txns" ], [ - "750: multi_inner_txns:", - "755: proto 1 2", - "758: txn Sender", - "761: itxn_begin", - "762: itxn_field Receiver", - "765: pushint 5000", - "766: itxn_field Amount", - "767: intc_1", - "768: itxn_field TypeEnum", - "769: intc_0", - "770: itxn_field Fee", - "773: itxn_next", - "776: bytec_1", - "777: itxn_field ApplicationArgs", - "778: bytec_2", - "779: itxn_field ApplicationArgs", - "780: frame_dig -1", - "781: itxn_field ApplicationID", - "784: intc_2", - "785: itxn_field TypeEnum", - "788: intc_0", - "789: itxn_field Fee", - "792: itxn_submit", - "793: gitxn 0 Amount", - "794: itxn LastLog", - "797: dup", - "798: extract 4 0", - "799: swap", - "800: extract 0 4", - "801: bytec_0", - "802: ==", - "803: assert", - "806: retsub" + "736: multi_inner_txns:", + "741: proto 1 2", + "744: txn Sender", + "747: itxn_begin", + "748: itxn_field Receiver", + "751: pushint 5000", + "752: itxn_field Amount", + "753: intc_1", + "754: itxn_field TypeEnum", + "755: intc_0", + "756: itxn_field Fee", + "759: itxn_next", + "762: bytec_1", + "763: itxn_field ApplicationArgs", + "764: bytec_2", + "765: itxn_field ApplicationArgs", + "766: frame_dig -1", + "767: itxn_field ApplicationID", + "770: intc_2", + "771: itxn_field TypeEnum", + "774: intc_0", + "775: itxn_field Fee", + "778: itxn_submit", + "779: gitxn 0 Amount", + "780: itxn LastLog", + "783: dup", + "784: extract 4 0", + "785: swap", + "786: extract 0 4", + "787: bytec_0", + "788: ==", + "789: assert", + "792: retsub" ], [ "118: swap", @@ -3437,20 +3413,19 @@ "91: callsub deploy_app" ], [ - "810: deploy_app:", - "814: proto 0 1", - "821: itxn_begin", - "824: bytec_3", - "825: itxn_field ClearStateProgramPages", - "826: bytec 4", - "827: itxn_field ApprovalProgramPages", - "830: intc_2", - "831: itxn_field TypeEnum", - "834: intc_0", - "835: itxn_field Fee", - "842: itxn_submit", - "843: itxn CreatedApplicationID", - "846: retsub" + "796: deploy_app:", + "803: itxn_begin", + "806: bytec_3", + "807: itxn_field ClearStateProgramPages", + "808: bytec 4", + "809: itxn_field ApprovalProgramPages", + "812: intc_2", + "813: itxn_field TypeEnum", + "816: intc_0", + "817: itxn_field Fee", + "824: itxn_submit", + "825: itxn CreatedApplicationID", + "828: retsub" ], [ "92: itob", @@ -3492,20 +3467,19 @@ "74: callsub arc4_deploy_app" ], [ - "850: arc4_deploy_app:", - "854: proto 0 1", - "857: itxn_begin", - "858: bytec_3", - "859: itxn_field ClearStateProgramPages", - "860: bytec 4", - "861: itxn_field ApprovalProgramPages", - "862: intc_2", - "863: itxn_field TypeEnum", - "864: intc_0", - "865: itxn_field Fee", - "866: itxn_submit", - "867: itxn CreatedApplicationID", - "870: retsub" + "832: arc4_deploy_app:", + "835: itxn_begin", + "836: bytec_3", + "837: itxn_field ClearStateProgramPages", + "838: bytec 4", + "839: itxn_field ApprovalProgramPages", + "840: intc_2", + "841: itxn_field TypeEnum", + "842: intc_0", + "843: itxn_field Fee", + "844: itxn_submit", + "845: itxn CreatedApplicationID", + "848: retsub" ], [ "75: itob", @@ -3550,50 +3524,48 @@ "39: callsub noop_app_call" ], [ - "874: noop_app_call:", - "879: proto 1 2", - "886: itxn_begin", - "889: bytec_1", - "890: itxn_field ApplicationArgs", - "891: bytec_2", - "892: itxn_field ApplicationArgs", - "893: frame_dig -1", - "894: itxn_field ApplicationID", - "898: intc_2", - "899: itxn_field TypeEnum", - "900: intc_0", - "901: itxn_field Fee", - "908: itxn_submit", - "909: itxn LastLog", - "913: dup", - "914: extract 4 0", - "915: swap", - "916: extract 0 4", - "917: bytec_0", - "918: ==", - "919: assert", - "927: itxn_begin", - "928: frame_dig -1", - "929: itxn_field ApplicationID", - "930: bytec_1", - "931: itxn_field ApplicationArgs", - "934: pushbytes 0x0005616761696e", - "935: itxn_field ApplicationArgs", - "943: intc_2", - "944: itxn_field TypeEnum", - "945: intc_0", - "946: itxn_field Fee", - "947: itxn_submit", - "948: itxn LastLog", - "949: dup", - "950: extract 4 0", - "951: swap", - "952: extract 0 4", - "953: bytec_0", - "954: ==", - "955: assert", - "956: extract 2 0", - "959: retsub" + "852: noop_app_call:", + "857: proto 1 2", + "864: itxn_begin", + "867: bytec_1", + "868: itxn_field ApplicationArgs", + "869: bytec_2", + "870: itxn_field ApplicationArgs", + "871: frame_dig -1", + "872: itxn_field ApplicationID", + "876: intc_2", + "877: itxn_field TypeEnum", + "878: intc_0", + "879: itxn_field Fee", + "886: itxn_submit", + "887: itxn LastLog", + "891: dup", + "892: extract 4 0", + "893: swap", + "894: extract 0 4", + "895: bytec_0", + "896: ==", + "897: assert", + "905: itxn_begin", + "906: frame_dig -1", + "907: itxn_field ApplicationID", + "908: bytec_1", + "909: itxn_field ApplicationArgs", + "912: pushbytes 0x0005616761696e", + "913: itxn_field ApplicationArgs", + "921: intc_2", + "922: itxn_field TypeEnum", + "923: intc_0", + "924: itxn_field Fee", + "925: itxn_submit", + "926: itxn LastLog", + "927: dup", + "928: extract 0 4", + "929: bytec_0", + "930: ==", + "931: assert", + "932: extract 6 0", + "935: retsub" ], [ "40: dup", @@ -3717,19 +3689,18 @@ ], [ "336: payment:", - "341: proto 0 1", - "344: itxn_begin", - "345: txn Sender", - "346: itxn_field Receiver", - "347: pushint 5000", - "348: itxn_field Amount", - "349: intc_1", - "350: itxn_field TypeEnum", - "351: intc_0", - "352: itxn_field Fee", - "353: itxn_submit", - "354: itxn Amount", - "357: retsub" + "339: itxn_begin", + "340: txn Sender", + "341: itxn_field Receiver", + "342: pushint 5000", + "343: itxn_field Amount", + "344: intc_1", + "345: itxn_field TypeEnum", + "346: intc_0", + "347: itxn_field Fee", + "348: itxn_submit", + "349: itxn Amount", + "352: retsub" ], [ "315: itob", @@ -3771,24 +3742,23 @@ "296: callsub fungible_asset_create" ], [ - "361: fungible_asset_create:", - "366: proto 0 1", - "374: itxn_begin", - "377: pushbytes \"Royalty Points\"", - "378: itxn_field ConfigAssetName", - "381: pushbytes \"RP\"", - "382: itxn_field ConfigAssetUnitName", - "385: pushint 2", - "386: itxn_field ConfigAssetDecimals", - "389: pushint 100000000000", - "390: itxn_field ConfigAssetTotal", - "393: pushint 3", - "394: itxn_field TypeEnum", - "395: intc_0", - "396: itxn_field Fee", - "404: itxn_submit", - "405: itxn CreatedAssetID", - "408: retsub" + "356: fungible_asset_create:", + "364: itxn_begin", + "367: pushbytes \"Royalty Points\"", + "368: itxn_field ConfigAssetName", + "371: pushbytes \"RP\"", + "372: itxn_field ConfigAssetUnitName", + "375: pushint 2", + "376: itxn_field ConfigAssetDecimals", + "379: pushint 100000000000", + "380: itxn_field ConfigAssetTotal", + "383: pushint 3", + "384: itxn_field TypeEnum", + "385: intc_0", + "386: itxn_field Fee", + "394: itxn_submit", + "395: itxn CreatedAssetID", + "398: retsub" ], [ "297: itob", @@ -3830,32 +3800,31 @@ "278: callsub non_fungible_asset_create" ], [ - "412: non_fungible_asset_create:", - "416: proto 0 1", - "429: itxn_begin", - "432: global CurrentApplicationAddress", - "437: dupn 3", - "438: itxn_field ConfigAssetClawback", - "439: itxn_field ConfigAssetFreeze", - "440: itxn_field ConfigAssetReserve", - "441: itxn_field ConfigAssetManager", - "444: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", - "445: itxn_field ConfigAssetURL", - "448: pushbytes \"Mona Lisa\"", - "449: itxn_field ConfigAssetName", - "452: pushbytes \"ML\"", - "453: itxn_field ConfigAssetUnitName", - "456: pushint 2", - "457: itxn_field ConfigAssetDecimals", - "460: pushint 100", - "461: itxn_field ConfigAssetTotal", - "464: pushint 3", - "465: itxn_field TypeEnum", - "466: intc_0", - "467: itxn_field Fee", - "480: itxn_submit", - "481: itxn CreatedAssetID", - "484: retsub" + "402: non_fungible_asset_create:", + "415: itxn_begin", + "418: global CurrentApplicationAddress", + "423: dupn 3", + "424: itxn_field ConfigAssetClawback", + "425: itxn_field ConfigAssetFreeze", + "426: itxn_field ConfigAssetReserve", + "427: itxn_field ConfigAssetManager", + "430: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", + "431: itxn_field ConfigAssetURL", + "434: pushbytes \"Mona Lisa\"", + "435: itxn_field ConfigAssetName", + "438: pushbytes \"ML\"", + "439: itxn_field ConfigAssetUnitName", + "442: pushint 2", + "443: itxn_field ConfigAssetDecimals", + "446: pushint 100", + "447: itxn_field ConfigAssetTotal", + "450: pushint 3", + "451: itxn_field TypeEnum", + "452: intc_0", + "453: itxn_field Fee", + "466: itxn_submit", + "467: itxn CreatedAssetID", + "470: retsub" ], [ "279: itob", @@ -3900,21 +3869,21 @@ "266: callsub asset_opt_in" ], [ - "488: asset_opt_in:", - "493: proto 1 0", - "501: itxn_begin", - "504: global CurrentApplicationAddress", - "507: intc_0", - "508: itxn_field AssetAmount", - "509: frame_dig -1", - "510: itxn_field XferAsset", - "511: itxn_field AssetReceiver", - "514: intc_3", - "515: itxn_field TypeEnum", - "518: intc_0", - "519: itxn_field Fee", - "527: itxn_submit", - "528: retsub" + "474: asset_opt_in:", + "479: proto 1 0", + "487: itxn_begin", + "490: global CurrentApplicationAddress", + "493: intc_0", + "494: itxn_field AssetAmount", + "495: frame_dig -1", + "496: itxn_field XferAsset", + "497: itxn_field AssetReceiver", + "500: intc_3", + "501: itxn_field TypeEnum", + "504: intc_0", + "505: itxn_field Fee", + "513: itxn_submit", + "514: retsub" ], [ "267: intc_1", @@ -3959,21 +3928,21 @@ "245: callsub asset_transfer" ], [ - "532: asset_transfer:", - "537: proto 3 0", - "545: itxn_begin", - "546: frame_dig -1", - "547: itxn_field AssetAmount", - "548: frame_dig -3", - "549: itxn_field XferAsset", - "550: frame_dig -2", - "551: itxn_field AssetReceiver", - "554: intc_3", - "555: itxn_field TypeEnum", - "558: intc_0", - "559: itxn_field Fee", - "567: itxn_submit", - "568: retsub" + "518: asset_transfer:", + "523: proto 3 0", + "531: itxn_begin", + "532: frame_dig -1", + "533: itxn_field AssetAmount", + "534: frame_dig -3", + "535: itxn_field XferAsset", + "536: frame_dig -2", + "537: itxn_field AssetReceiver", + "540: intc_3", + "541: itxn_field TypeEnum", + "544: intc_0", + "545: itxn_field Fee", + "553: itxn_submit", + "554: retsub" ], [ "246: intc_1", @@ -4016,21 +3985,21 @@ "219: callsub asset_freeze" ], [ - "572: asset_freeze:", - "577: proto 2 0", - "585: itxn_begin", - "588: intc_1", - "589: itxn_field FreezeAssetFrozen", - "590: frame_dig -1", - "591: itxn_field FreezeAsset", - "592: frame_dig -2", - "593: itxn_field FreezeAssetAccount", - "596: pushint 5", - "597: itxn_field TypeEnum", - "600: intc_0", - "601: itxn_field Fee", - "609: itxn_submit", - "610: retsub" + "558: asset_freeze:", + "563: proto 2 0", + "571: itxn_begin", + "574: intc_1", + "575: itxn_field FreezeAssetFrozen", + "576: frame_dig -1", + "577: itxn_field FreezeAsset", + "578: frame_dig -2", + "579: itxn_field FreezeAssetAccount", + "582: pushint 5", + "583: itxn_field TypeEnum", + "586: intc_0", + "587: itxn_field Fee", + "595: itxn_submit", + "596: retsub" ], [ "220: intc_1", @@ -4075,23 +4044,23 @@ "195: callsub asset_revoke" ], [ - "614: asset_revoke:", - "621: proto 3 0", - "630: itxn_begin", - "633: global CurrentApplicationAddress", - "634: frame_dig -1", - "635: itxn_field AssetAmount", - "636: frame_dig -2", - "637: itxn_field AssetSender", - "638: frame_dig -3", - "639: itxn_field XferAsset", - "640: itxn_field AssetReceiver", - "643: intc_3", - "644: itxn_field TypeEnum", - "647: intc_0", - "648: itxn_field Fee", - "657: itxn_submit", - "658: retsub" + "600: asset_revoke:", + "607: proto 3 0", + "616: itxn_begin", + "619: global CurrentApplicationAddress", + "620: frame_dig -1", + "621: itxn_field AssetAmount", + "622: frame_dig -2", + "623: itxn_field AssetSender", + "624: frame_dig -3", + "625: itxn_field XferAsset", + "626: itxn_field AssetReceiver", + "629: intc_3", + "630: itxn_field TypeEnum", + "633: intc_0", + "634: itxn_field Fee", + "643: itxn_submit", + "644: retsub" ], [ "196: intc_1", @@ -4131,25 +4100,25 @@ "169: callsub asset_config" ], [ - "662: asset_config:", - "667: proto 1 0", - "677: itxn_begin", - "680: global CurrentApplicationAddress", - "683: dup", - "686: txn Sender", - "689: dup", - "690: itxn_field ConfigAssetClawback", - "691: itxn_field ConfigAssetFreeze", - "692: itxn_field ConfigAssetReserve", - "693: itxn_field ConfigAssetManager", - "694: frame_dig -1", - "695: itxn_field ConfigAsset", - "698: pushint 3", - "699: itxn_field TypeEnum", - "702: intc_0", - "703: itxn_field Fee", - "713: itxn_submit", - "714: retsub" + "648: asset_config:", + "653: proto 1 0", + "663: itxn_begin", + "666: global CurrentApplicationAddress", + "669: dup", + "672: txn Sender", + "675: dup", + "676: itxn_field ConfigAssetClawback", + "677: itxn_field ConfigAssetFreeze", + "678: itxn_field ConfigAssetReserve", + "679: itxn_field ConfigAssetManager", + "680: frame_dig -1", + "681: itxn_field ConfigAsset", + "684: pushint 3", + "685: itxn_field TypeEnum", + "688: intc_0", + "689: itxn_field Fee", + "699: itxn_submit", + "700: retsub" ], [ "170: intc_1", @@ -4189,17 +4158,17 @@ "148: callsub asset_delete" ], [ - "718: asset_delete:", - "723: proto 1 0", - "729: itxn_begin", - "730: frame_dig -1", - "731: itxn_field ConfigAsset", - "734: pushint 3", - "735: itxn_field TypeEnum", - "738: intc_0", - "739: itxn_field Fee", - "745: itxn_submit", - "746: retsub" + "704: asset_delete:", + "709: proto 1 0", + "715: itxn_begin", + "716: frame_dig -1", + "717: itxn_field ConfigAsset", + "720: pushint 3", + "721: itxn_field TypeEnum", + "724: intc_0", + "725: itxn_field Fee", + "731: itxn_submit", + "732: retsub" ], [ "149: intc_1", @@ -4239,39 +4208,39 @@ "117: callsub multi_inner_txns" ], [ - "750: multi_inner_txns:", - "755: proto 1 2", - "758: txn Sender", - "761: itxn_begin", - "762: itxn_field Receiver", - "765: pushint 5000", - "766: itxn_field Amount", - "767: intc_1", - "768: itxn_field TypeEnum", - "769: intc_0", - "770: itxn_field Fee", - "773: itxn_next", - "776: bytec_1", - "777: itxn_field ApplicationArgs", - "778: bytec_2", - "779: itxn_field ApplicationArgs", - "780: frame_dig -1", - "781: itxn_field ApplicationID", - "784: intc_2", - "785: itxn_field TypeEnum", - "788: intc_0", - "789: itxn_field Fee", - "792: itxn_submit", - "793: gitxn 0 Amount", - "794: itxn LastLog", - "797: dup", - "798: extract 4 0", - "799: swap", - "800: extract 0 4", - "801: bytec_0", - "802: ==", - "803: assert", - "806: retsub" + "736: multi_inner_txns:", + "741: proto 1 2", + "744: txn Sender", + "747: itxn_begin", + "748: itxn_field Receiver", + "751: pushint 5000", + "752: itxn_field Amount", + "753: intc_1", + "754: itxn_field TypeEnum", + "755: intc_0", + "756: itxn_field Fee", + "759: itxn_next", + "762: bytec_1", + "763: itxn_field ApplicationArgs", + "764: bytec_2", + "765: itxn_field ApplicationArgs", + "766: frame_dig -1", + "767: itxn_field ApplicationID", + "770: intc_2", + "771: itxn_field TypeEnum", + "774: intc_0", + "775: itxn_field Fee", + "778: itxn_submit", + "779: gitxn 0 Amount", + "780: itxn LastLog", + "783: dup", + "784: extract 4 0", + "785: swap", + "786: extract 0 4", + "787: bytec_0", + "788: ==", + "789: assert", + "792: retsub" ], [ "118: swap", @@ -4318,20 +4287,19 @@ "91: callsub deploy_app" ], [ - "810: deploy_app:", - "814: proto 0 1", - "821: itxn_begin", - "824: bytec_3", - "825: itxn_field ClearStateProgramPages", - "826: bytec 4", - "827: itxn_field ApprovalProgramPages", - "830: intc_2", - "831: itxn_field TypeEnum", - "834: intc_0", - "835: itxn_field Fee", - "842: itxn_submit", - "843: itxn CreatedApplicationID", - "846: retsub" + "796: deploy_app:", + "803: itxn_begin", + "806: bytec_3", + "807: itxn_field ClearStateProgramPages", + "808: bytec 4", + "809: itxn_field ApprovalProgramPages", + "812: intc_2", + "813: itxn_field TypeEnum", + "816: intc_0", + "817: itxn_field Fee", + "824: itxn_submit", + "825: itxn CreatedApplicationID", + "828: retsub" ], [ "92: itob", @@ -4373,20 +4341,19 @@ "74: callsub arc4_deploy_app" ], [ - "850: arc4_deploy_app:", - "854: proto 0 1", - "857: itxn_begin", - "858: bytec_3", - "859: itxn_field ClearStateProgramPages", - "860: bytec 4", - "861: itxn_field ApprovalProgramPages", - "862: intc_2", - "863: itxn_field TypeEnum", - "864: intc_0", - "865: itxn_field Fee", - "866: itxn_submit", - "867: itxn CreatedApplicationID", - "870: retsub" + "832: arc4_deploy_app:", + "835: itxn_begin", + "836: bytec_3", + "837: itxn_field ClearStateProgramPages", + "838: bytec 4", + "839: itxn_field ApprovalProgramPages", + "840: intc_2", + "841: itxn_field TypeEnum", + "842: intc_0", + "843: itxn_field Fee", + "844: itxn_submit", + "845: itxn CreatedApplicationID", + "848: retsub" ], [ "75: itob", @@ -4431,50 +4398,48 @@ "39: callsub noop_app_call" ], [ - "874: noop_app_call:", - "879: proto 1 2", - "886: itxn_begin", - "889: bytec_1", - "890: itxn_field ApplicationArgs", - "891: bytec_2", - "892: itxn_field ApplicationArgs", - "893: frame_dig -1", - "894: itxn_field ApplicationID", - "898: intc_2", - "899: itxn_field TypeEnum", - "900: intc_0", - "901: itxn_field Fee", - "908: itxn_submit", - "909: itxn LastLog", - "913: dup", - "914: extract 4 0", - "915: swap", - "916: extract 0 4", - "917: bytec_0", - "918: ==", - "919: assert", - "927: itxn_begin", - "928: frame_dig -1", - "929: itxn_field ApplicationID", - "930: bytec_1", - "931: itxn_field ApplicationArgs", - "934: pushbytes 0x0005616761696e", - "935: itxn_field ApplicationArgs", - "943: intc_2", - "944: itxn_field TypeEnum", - "945: intc_0", - "946: itxn_field Fee", - "947: itxn_submit", - "948: itxn LastLog", - "949: dup", - "950: extract 4 0", - "951: swap", - "952: extract 0 4", - "953: bytec_0", - "954: ==", - "955: assert", - "956: extract 2 0", - "959: retsub" + "852: noop_app_call:", + "857: proto 1 2", + "864: itxn_begin", + "867: bytec_1", + "868: itxn_field ApplicationArgs", + "869: bytec_2", + "870: itxn_field ApplicationArgs", + "871: frame_dig -1", + "872: itxn_field ApplicationID", + "876: intc_2", + "877: itxn_field TypeEnum", + "878: intc_0", + "879: itxn_field Fee", + "886: itxn_submit", + "887: itxn LastLog", + "891: dup", + "892: extract 4 0", + "893: swap", + "894: extract 0 4", + "895: bytec_0", + "896: ==", + "897: assert", + "905: itxn_begin", + "906: frame_dig -1", + "907: itxn_field ApplicationID", + "908: bytec_1", + "909: itxn_field ApplicationArgs", + "912: pushbytes 0x0005616761696e", + "913: itxn_field ApplicationArgs", + "921: intc_2", + "922: itxn_field TypeEnum", + "923: intc_0", + "924: itxn_field Fee", + "925: itxn_submit", + "926: itxn LastLog", + "927: dup", + "928: extract 0 4", + "929: bytec_0", + "930: ==", + "931: assert", + "932: extract 6 0", + "935: retsub" ], [ "40: dup", @@ -4636,19 +4601,18 @@ ], [ "336: payment:", - "341: proto 0 1", - "344: itxn_begin", - "345: txn Sender", - "346: itxn_field Receiver", - "347: pushint 5000", - "348: itxn_field Amount", - "349: intc_1", - "350: itxn_field TypeEnum", - "351: intc_0", - "352: itxn_field Fee", - "353: itxn_submit", - "354: itxn Amount", - "357: retsub" + "339: itxn_begin", + "340: txn Sender", + "341: itxn_field Receiver", + "342: pushint 5000", + "343: itxn_field Amount", + "344: intc_1", + "345: itxn_field TypeEnum", + "346: intc_0", + "347: itxn_field Fee", + "348: itxn_submit", + "349: itxn Amount", + "352: retsub" ], [ "315: itob", @@ -4690,24 +4654,23 @@ "296: callsub fungible_asset_create" ], [ - "361: fungible_asset_create:", - "366: proto 0 1", - "374: itxn_begin", - "377: pushbytes \"Royalty Points\"", - "378: itxn_field ConfigAssetName", - "381: pushbytes \"RP\"", - "382: itxn_field ConfigAssetUnitName", - "385: pushint 2", - "386: itxn_field ConfigAssetDecimals", - "389: pushint 100000000000", - "390: itxn_field ConfigAssetTotal", - "393: pushint 3", - "394: itxn_field TypeEnum", - "395: intc_0", - "396: itxn_field Fee", - "404: itxn_submit", - "405: itxn CreatedAssetID", - "408: retsub" + "356: fungible_asset_create:", + "364: itxn_begin", + "367: pushbytes \"Royalty Points\"", + "368: itxn_field ConfigAssetName", + "371: pushbytes \"RP\"", + "372: itxn_field ConfigAssetUnitName", + "375: pushint 2", + "376: itxn_field ConfigAssetDecimals", + "379: pushint 100000000000", + "380: itxn_field ConfigAssetTotal", + "383: pushint 3", + "384: itxn_field TypeEnum", + "385: intc_0", + "386: itxn_field Fee", + "394: itxn_submit", + "395: itxn CreatedAssetID", + "398: retsub" ], [ "297: itob", @@ -4749,32 +4712,31 @@ "278: callsub non_fungible_asset_create" ], [ - "412: non_fungible_asset_create:", - "416: proto 0 1", - "429: itxn_begin", - "432: global CurrentApplicationAddress", - "437: dupn 3", - "438: itxn_field ConfigAssetClawback", - "439: itxn_field ConfigAssetFreeze", - "440: itxn_field ConfigAssetReserve", - "441: itxn_field ConfigAssetManager", - "444: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", - "445: itxn_field ConfigAssetURL", - "448: pushbytes \"Mona Lisa\"", - "449: itxn_field ConfigAssetName", - "452: pushbytes \"ML\"", - "453: itxn_field ConfigAssetUnitName", - "456: pushint 2", - "457: itxn_field ConfigAssetDecimals", - "460: pushint 100", - "461: itxn_field ConfigAssetTotal", - "464: pushint 3", - "465: itxn_field TypeEnum", - "466: intc_0", - "467: itxn_field Fee", - "480: itxn_submit", - "481: itxn CreatedAssetID", - "484: retsub" + "402: non_fungible_asset_create:", + "415: itxn_begin", + "418: global CurrentApplicationAddress", + "423: dupn 3", + "424: itxn_field ConfigAssetClawback", + "425: itxn_field ConfigAssetFreeze", + "426: itxn_field ConfigAssetReserve", + "427: itxn_field ConfigAssetManager", + "430: pushbytes \"https://link_to_ipfs/Mona_Lisa\"", + "431: itxn_field ConfigAssetURL", + "434: pushbytes \"Mona Lisa\"", + "435: itxn_field ConfigAssetName", + "438: pushbytes \"ML\"", + "439: itxn_field ConfigAssetUnitName", + "442: pushint 2", + "443: itxn_field ConfigAssetDecimals", + "446: pushint 100", + "447: itxn_field ConfigAssetTotal", + "450: pushint 3", + "451: itxn_field TypeEnum", + "452: intc_0", + "453: itxn_field Fee", + "466: itxn_submit", + "467: itxn CreatedAssetID", + "470: retsub" ], [ "279: itob", @@ -4819,21 +4781,21 @@ "266: callsub asset_opt_in" ], [ - "488: asset_opt_in:", - "493: proto 1 0", - "501: itxn_begin", - "504: global CurrentApplicationAddress", - "507: intc_0", - "508: itxn_field AssetAmount", - "509: frame_dig -1", - "510: itxn_field XferAsset", - "511: itxn_field AssetReceiver", - "514: intc_3", - "515: itxn_field TypeEnum", - "518: intc_0", - "519: itxn_field Fee", - "527: itxn_submit", - "528: retsub" + "474: asset_opt_in:", + "479: proto 1 0", + "487: itxn_begin", + "490: global CurrentApplicationAddress", + "493: intc_0", + "494: itxn_field AssetAmount", + "495: frame_dig -1", + "496: itxn_field XferAsset", + "497: itxn_field AssetReceiver", + "500: intc_3", + "501: itxn_field TypeEnum", + "504: intc_0", + "505: itxn_field Fee", + "513: itxn_submit", + "514: retsub" ], [ "267: intc_1", @@ -4878,21 +4840,21 @@ "245: callsub asset_transfer" ], [ - "532: asset_transfer:", - "537: proto 3 0", - "545: itxn_begin", - "546: frame_dig -1", - "547: itxn_field AssetAmount", - "548: frame_dig -3", - "549: itxn_field XferAsset", - "550: frame_dig -2", - "551: itxn_field AssetReceiver", - "554: intc_3", - "555: itxn_field TypeEnum", - "558: intc_0", - "559: itxn_field Fee", - "567: itxn_submit", - "568: retsub" + "518: asset_transfer:", + "523: proto 3 0", + "531: itxn_begin", + "532: frame_dig -1", + "533: itxn_field AssetAmount", + "534: frame_dig -3", + "535: itxn_field XferAsset", + "536: frame_dig -2", + "537: itxn_field AssetReceiver", + "540: intc_3", + "541: itxn_field TypeEnum", + "544: intc_0", + "545: itxn_field Fee", + "553: itxn_submit", + "554: retsub" ], [ "246: intc_1", @@ -4935,21 +4897,21 @@ "219: callsub asset_freeze" ], [ - "572: asset_freeze:", - "577: proto 2 0", - "585: itxn_begin", - "588: intc_1", - "589: itxn_field FreezeAssetFrozen", - "590: frame_dig -1", - "591: itxn_field FreezeAsset", - "592: frame_dig -2", - "593: itxn_field FreezeAssetAccount", - "596: pushint 5", - "597: itxn_field TypeEnum", - "600: intc_0", - "601: itxn_field Fee", - "609: itxn_submit", - "610: retsub" + "558: asset_freeze:", + "563: proto 2 0", + "571: itxn_begin", + "574: intc_1", + "575: itxn_field FreezeAssetFrozen", + "576: frame_dig -1", + "577: itxn_field FreezeAsset", + "578: frame_dig -2", + "579: itxn_field FreezeAssetAccount", + "582: pushint 5", + "583: itxn_field TypeEnum", + "586: intc_0", + "587: itxn_field Fee", + "595: itxn_submit", + "596: retsub" ], [ "220: intc_1", @@ -4994,23 +4956,23 @@ "195: callsub asset_revoke" ], [ - "614: asset_revoke:", - "621: proto 3 0", - "630: itxn_begin", - "633: global CurrentApplicationAddress", - "634: frame_dig -1", - "635: itxn_field AssetAmount", - "636: frame_dig -2", - "637: itxn_field AssetSender", - "638: frame_dig -3", - "639: itxn_field XferAsset", - "640: itxn_field AssetReceiver", - "643: intc_3", - "644: itxn_field TypeEnum", - "647: intc_0", - "648: itxn_field Fee", - "657: itxn_submit", - "658: retsub" + "600: asset_revoke:", + "607: proto 3 0", + "616: itxn_begin", + "619: global CurrentApplicationAddress", + "620: frame_dig -1", + "621: itxn_field AssetAmount", + "622: frame_dig -2", + "623: itxn_field AssetSender", + "624: frame_dig -3", + "625: itxn_field XferAsset", + "626: itxn_field AssetReceiver", + "629: intc_3", + "630: itxn_field TypeEnum", + "633: intc_0", + "634: itxn_field Fee", + "643: itxn_submit", + "644: retsub" ], [ "196: intc_1", @@ -5050,25 +5012,25 @@ "169: callsub asset_config" ], [ - "662: asset_config:", - "667: proto 1 0", - "677: itxn_begin", - "680: global CurrentApplicationAddress", - "683: dup", - "686: txn Sender", - "689: dup", - "690: itxn_field ConfigAssetClawback", - "691: itxn_field ConfigAssetFreeze", - "692: itxn_field ConfigAssetReserve", - "693: itxn_field ConfigAssetManager", - "694: frame_dig -1", - "695: itxn_field ConfigAsset", - "698: pushint 3", - "699: itxn_field TypeEnum", - "702: intc_0", - "703: itxn_field Fee", - "713: itxn_submit", - "714: retsub" + "648: asset_config:", + "653: proto 1 0", + "663: itxn_begin", + "666: global CurrentApplicationAddress", + "669: dup", + "672: txn Sender", + "675: dup", + "676: itxn_field ConfigAssetClawback", + "677: itxn_field ConfigAssetFreeze", + "678: itxn_field ConfigAssetReserve", + "679: itxn_field ConfigAssetManager", + "680: frame_dig -1", + "681: itxn_field ConfigAsset", + "684: pushint 3", + "685: itxn_field TypeEnum", + "688: intc_0", + "689: itxn_field Fee", + "699: itxn_submit", + "700: retsub" ], [ "170: intc_1", @@ -5108,17 +5070,17 @@ "148: callsub asset_delete" ], [ - "718: asset_delete:", - "723: proto 1 0", - "729: itxn_begin", - "730: frame_dig -1", - "731: itxn_field ConfigAsset", - "734: pushint 3", - "735: itxn_field TypeEnum", - "738: intc_0", - "739: itxn_field Fee", - "745: itxn_submit", - "746: retsub" + "704: asset_delete:", + "709: proto 1 0", + "715: itxn_begin", + "716: frame_dig -1", + "717: itxn_field ConfigAsset", + "720: pushint 3", + "721: itxn_field TypeEnum", + "724: intc_0", + "725: itxn_field Fee", + "731: itxn_submit", + "732: retsub" ], [ "149: intc_1", @@ -5158,39 +5120,39 @@ "117: callsub multi_inner_txns" ], [ - "750: multi_inner_txns:", - "755: proto 1 2", - "758: txn Sender", - "761: itxn_begin", - "762: itxn_field Receiver", - "765: pushint 5000", - "766: itxn_field Amount", - "767: intc_1", - "768: itxn_field TypeEnum", - "769: intc_0", - "770: itxn_field Fee", - "773: itxn_next", - "776: bytec_1", - "777: itxn_field ApplicationArgs", - "778: bytec_2", - "779: itxn_field ApplicationArgs", - "780: frame_dig -1", - "781: itxn_field ApplicationID", - "784: intc_2", - "785: itxn_field TypeEnum", - "788: intc_0", - "789: itxn_field Fee", - "792: itxn_submit", - "793: gitxn 0 Amount", - "794: itxn LastLog", - "797: dup", - "798: extract 4 0", - "799: swap", - "800: extract 0 4", - "801: bytec_0", - "802: ==", - "803: assert", - "806: retsub" + "736: multi_inner_txns:", + "741: proto 1 2", + "744: txn Sender", + "747: itxn_begin", + "748: itxn_field Receiver", + "751: pushint 5000", + "752: itxn_field Amount", + "753: intc_1", + "754: itxn_field TypeEnum", + "755: intc_0", + "756: itxn_field Fee", + "759: itxn_next", + "762: bytec_1", + "763: itxn_field ApplicationArgs", + "764: bytec_2", + "765: itxn_field ApplicationArgs", + "766: frame_dig -1", + "767: itxn_field ApplicationID", + "770: intc_2", + "771: itxn_field TypeEnum", + "774: intc_0", + "775: itxn_field Fee", + "778: itxn_submit", + "779: gitxn 0 Amount", + "780: itxn LastLog", + "783: dup", + "784: extract 4 0", + "785: swap", + "786: extract 0 4", + "787: bytec_0", + "788: ==", + "789: assert", + "792: retsub" ], [ "118: swap", @@ -5237,20 +5199,19 @@ "91: callsub deploy_app" ], [ - "810: deploy_app:", - "814: proto 0 1", - "821: itxn_begin", - "824: bytec_3", - "825: itxn_field ClearStateProgramPages", - "826: bytec 4", - "827: itxn_field ApprovalProgramPages", - "830: intc_2", - "831: itxn_field TypeEnum", - "834: intc_0", - "835: itxn_field Fee", - "842: itxn_submit", - "843: itxn CreatedApplicationID", - "846: retsub" + "796: deploy_app:", + "803: itxn_begin", + "806: bytec_3", + "807: itxn_field ClearStateProgramPages", + "808: bytec 4", + "809: itxn_field ApprovalProgramPages", + "812: intc_2", + "813: itxn_field TypeEnum", + "816: intc_0", + "817: itxn_field Fee", + "824: itxn_submit", + "825: itxn CreatedApplicationID", + "828: retsub" ], [ "92: itob", @@ -5292,20 +5253,19 @@ "74: callsub arc4_deploy_app" ], [ - "850: arc4_deploy_app:", - "854: proto 0 1", - "857: itxn_begin", - "858: bytec_3", - "859: itxn_field ClearStateProgramPages", - "860: bytec 4", - "861: itxn_field ApprovalProgramPages", - "862: intc_2", - "863: itxn_field TypeEnum", - "864: intc_0", - "865: itxn_field Fee", - "866: itxn_submit", - "867: itxn CreatedApplicationID", - "870: retsub" + "832: arc4_deploy_app:", + "835: itxn_begin", + "836: bytec_3", + "837: itxn_field ClearStateProgramPages", + "838: bytec 4", + "839: itxn_field ApprovalProgramPages", + "840: intc_2", + "841: itxn_field TypeEnum", + "842: intc_0", + "843: itxn_field Fee", + "844: itxn_submit", + "845: itxn CreatedApplicationID", + "848: retsub" ], [ "75: itob", @@ -5350,50 +5310,48 @@ "39: callsub noop_app_call" ], [ - "874: noop_app_call:", - "879: proto 1 2", - "886: itxn_begin", - "889: bytec_1", - "890: itxn_field ApplicationArgs", - "891: bytec_2", - "892: itxn_field ApplicationArgs", - "893: frame_dig -1", - "894: itxn_field ApplicationID", - "898: intc_2", - "899: itxn_field TypeEnum", - "900: intc_0", - "901: itxn_field Fee", - "908: itxn_submit", - "909: itxn LastLog", - "913: dup", - "914: extract 4 0", - "915: swap", - "916: extract 0 4", - "917: bytec_0", - "918: ==", - "919: assert", - "927: itxn_begin", - "928: frame_dig -1", - "929: itxn_field ApplicationID", - "930: bytec_1", - "931: itxn_field ApplicationArgs", - "934: pushbytes 0x0005616761696e", - "935: itxn_field ApplicationArgs", - "943: intc_2", - "944: itxn_field TypeEnum", - "945: intc_0", - "946: itxn_field Fee", - "947: itxn_submit", - "948: itxn LastLog", - "949: dup", - "950: extract 4 0", - "951: swap", - "952: extract 0 4", - "953: bytec_0", - "954: ==", - "955: assert", - "956: extract 2 0", - "959: retsub" + "852: noop_app_call:", + "857: proto 1 2", + "864: itxn_begin", + "867: bytec_1", + "868: itxn_field ApplicationArgs", + "869: bytec_2", + "870: itxn_field ApplicationArgs", + "871: frame_dig -1", + "872: itxn_field ApplicationID", + "876: intc_2", + "877: itxn_field TypeEnum", + "878: intc_0", + "879: itxn_field Fee", + "886: itxn_submit", + "887: itxn LastLog", + "891: dup", + "892: extract 4 0", + "893: swap", + "894: extract 0 4", + "895: bytec_0", + "896: ==", + "897: assert", + "905: itxn_begin", + "906: frame_dig -1", + "907: itxn_field ApplicationID", + "908: bytec_1", + "909: itxn_field ApplicationArgs", + "912: pushbytes 0x0005616761696e", + "913: itxn_field ApplicationArgs", + "921: intc_2", + "922: itxn_field TypeEnum", + "923: intc_0", + "924: itxn_field Fee", + "925: itxn_submit", + "926: itxn LastLog", + "927: dup", + "928: extract 0 4", + "929: bytec_0", + "930: ==", + "931: assert", + "932: extract 6 0", + "935: retsub" ], [ "40: dup", diff --git a/projects/python-examples/.algokit/static-analysis/snapshots/StructInBoxMap.approval.json b/projects/python-examples/.algokit/static-analysis/snapshots/StructInBoxMap.approval.json index 91c592e..3357c33 100644 --- a/projects/python-examples/.algokit/static-analysis/snapshots/StructInBoxMap.approval.json +++ b/projects/python-examples/.algokit/static-analysis/snapshots/StructInBoxMap.approval.json @@ -67,27 +67,26 @@ ], [ "127: box_map_test:", - "131: proto 0 1", - "134: bytec_1", - "135: box_del", - "136: pop", - "137: bytec_1", - "140: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "143: box_put", - "146: bytec_1", - "147: box_len", - "148: assert", - "149: intc_2", - "150: ==", - "151: assert", - "154: bytec_1", - "155: box_len", - "156: assert", - "157: intc_2", - "158: ==", - "159: assert", - "162: intc_0", - "163: retsub" + "130: bytec_1", + "131: box_del", + "132: pop", + "133: bytec_1", + "136: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "139: box_put", + "142: bytec_1", + "143: box_len", + "144: assert", + "145: intc_2", + "146: ==", + "147: assert", + "150: bytec_1", + "151: box_len", + "152: assert", + "153: intc_2", + "154: ==", + "155: assert", + "158: intc_0", + "159: retsub" ], [ "103: bytec_2", @@ -134,24 +133,24 @@ "82: callsub box_map_set" ], [ - "167: box_map_set:", - "171: proto 2 1", - "174: bytec_3", - "175: frame_dig -2", - "176: concat", - "177: dup", - "178: box_del", - "179: pop", - "180: dup", - "181: frame_dig -1", - "182: box_put", - "185: box_get", - "186: assert", - "187: frame_dig -1", - "188: ==", - "189: assert", - "192: intc_0", - "193: retsub" + "163: box_map_set:", + "167: proto 2 1", + "170: bytec_3", + "171: frame_dig -2", + "172: concat", + "173: dup", + "174: box_del", + "175: pop", + "176: dup", + "177: frame_dig -1", + "178: box_put", + "181: box_get", + "182: assert", + "183: frame_dig -1", + "184: ==", + "185: assert", + "188: intc_0", + "189: retsub" ], [ "83: bytec_2", @@ -197,14 +196,14 @@ "60: callsub box_map_get" ], [ - "197: box_map_get:", - "201: proto 1 1", - "204: bytec_3", - "205: frame_dig -1", - "206: concat", - "207: box_get", - "208: assert", - "209: retsub" + "193: box_map_get:", + "197: proto 1 1", + "200: bytec_3", + "201: frame_dig -1", + "202: concat", + "203: box_get", + "204: assert", + "205: retsub" ], [ "61: bytec_0", @@ -246,14 +245,14 @@ "35: callsub box_map_exists" ], [ - "213: box_map_exists:", - "217: proto 1 1", - "220: bytec_3", - "221: frame_dig -1", - "222: concat", - "223: box_len", - "224: bury 1", - "225: retsub" + "209: box_map_exists:", + "213: proto 1 1", + "216: bytec_3", + "217: frame_dig -1", + "218: concat", + "219: box_len", + "220: bury 1", + "221: retsub" ], [ "36: bytec_2", @@ -362,27 +361,26 @@ ], [ "127: box_map_test:", - "131: proto 0 1", - "134: bytec_1", - "135: box_del", - "136: pop", - "137: bytec_1", - "140: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "143: box_put", - "146: bytec_1", - "147: box_len", - "148: assert", - "149: intc_2", - "150: ==", - "151: assert", - "154: bytec_1", - "155: box_len", - "156: assert", - "157: intc_2", - "158: ==", - "159: assert", - "162: intc_0", - "163: retsub" + "130: bytec_1", + "131: box_del", + "132: pop", + "133: bytec_1", + "136: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "139: box_put", + "142: bytec_1", + "143: box_len", + "144: assert", + "145: intc_2", + "146: ==", + "147: assert", + "150: bytec_1", + "151: box_len", + "152: assert", + "153: intc_2", + "154: ==", + "155: assert", + "158: intc_0", + "159: retsub" ], [ "103: bytec_2", @@ -429,24 +427,24 @@ "82: callsub box_map_set" ], [ - "167: box_map_set:", - "171: proto 2 1", - "174: bytec_3", - "175: frame_dig -2", - "176: concat", - "177: dup", - "178: box_del", - "179: pop", - "180: dup", - "181: frame_dig -1", - "182: box_put", - "185: box_get", - "186: assert", - "187: frame_dig -1", - "188: ==", - "189: assert", - "192: intc_0", - "193: retsub" + "163: box_map_set:", + "167: proto 2 1", + "170: bytec_3", + "171: frame_dig -2", + "172: concat", + "173: dup", + "174: box_del", + "175: pop", + "176: dup", + "177: frame_dig -1", + "178: box_put", + "181: box_get", + "182: assert", + "183: frame_dig -1", + "184: ==", + "185: assert", + "188: intc_0", + "189: retsub" ], [ "83: bytec_2", @@ -492,14 +490,14 @@ "60: callsub box_map_get" ], [ - "197: box_map_get:", - "201: proto 1 1", - "204: bytec_3", - "205: frame_dig -1", - "206: concat", - "207: box_get", - "208: assert", - "209: retsub" + "193: box_map_get:", + "197: proto 1 1", + "200: bytec_3", + "201: frame_dig -1", + "202: concat", + "203: box_get", + "204: assert", + "205: retsub" ], [ "61: bytec_0", @@ -541,14 +539,14 @@ "35: callsub box_map_exists" ], [ - "213: box_map_exists:", - "217: proto 1 1", - "220: bytec_3", - "221: frame_dig -1", - "222: concat", - "223: box_len", - "224: bury 1", - "225: retsub" + "209: box_map_exists:", + "213: proto 1 1", + "216: bytec_3", + "217: frame_dig -1", + "218: concat", + "219: box_len", + "220: bury 1", + "221: retsub" ], [ "36: bytec_2", @@ -783,27 +781,26 @@ ], [ "127: box_map_test:", - "131: proto 0 1", - "134: bytec_1", - "135: box_del", - "136: pop", - "137: bytec_1", - "140: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "143: box_put", - "146: bytec_1", - "147: box_len", - "148: assert", - "149: intc_2", - "150: ==", - "151: assert", - "154: bytec_1", - "155: box_len", - "156: assert", - "157: intc_2", - "158: ==", - "159: assert", - "162: intc_0", - "163: retsub" + "130: bytec_1", + "131: box_del", + "132: pop", + "133: bytec_1", + "136: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "139: box_put", + "142: bytec_1", + "143: box_len", + "144: assert", + "145: intc_2", + "146: ==", + "147: assert", + "150: bytec_1", + "151: box_len", + "152: assert", + "153: intc_2", + "154: ==", + "155: assert", + "158: intc_0", + "159: retsub" ], [ "103: bytec_2", @@ -850,24 +847,24 @@ "82: callsub box_map_set" ], [ - "167: box_map_set:", - "171: proto 2 1", - "174: bytec_3", - "175: frame_dig -2", - "176: concat", - "177: dup", - "178: box_del", - "179: pop", - "180: dup", - "181: frame_dig -1", - "182: box_put", - "185: box_get", - "186: assert", - "187: frame_dig -1", - "188: ==", - "189: assert", - "192: intc_0", - "193: retsub" + "163: box_map_set:", + "167: proto 2 1", + "170: bytec_3", + "171: frame_dig -2", + "172: concat", + "173: dup", + "174: box_del", + "175: pop", + "176: dup", + "177: frame_dig -1", + "178: box_put", + "181: box_get", + "182: assert", + "183: frame_dig -1", + "184: ==", + "185: assert", + "188: intc_0", + "189: retsub" ], [ "83: bytec_2", @@ -913,14 +910,14 @@ "60: callsub box_map_get" ], [ - "197: box_map_get:", - "201: proto 1 1", - "204: bytec_3", - "205: frame_dig -1", - "206: concat", - "207: box_get", - "208: assert", - "209: retsub" + "193: box_map_get:", + "197: proto 1 1", + "200: bytec_3", + "201: frame_dig -1", + "202: concat", + "203: box_get", + "204: assert", + "205: retsub" ], [ "61: bytec_0", @@ -962,14 +959,14 @@ "35: callsub box_map_exists" ], [ - "213: box_map_exists:", - "217: proto 1 1", - "220: bytec_3", - "221: frame_dig -1", - "222: concat", - "223: box_len", - "224: bury 1", - "225: retsub" + "209: box_map_exists:", + "213: proto 1 1", + "216: bytec_3", + "217: frame_dig -1", + "218: concat", + "219: box_len", + "220: bury 1", + "221: retsub" ], [ "36: bytec_2", @@ -1078,27 +1075,26 @@ ], [ "127: box_map_test:", - "131: proto 0 1", - "134: bytec_1", - "135: box_del", - "136: pop", - "137: bytec_1", - "140: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "143: box_put", - "146: bytec_1", - "147: box_len", - "148: assert", - "149: intc_2", - "150: ==", - "151: assert", - "154: bytec_1", - "155: box_len", - "156: assert", - "157: intc_2", - "158: ==", - "159: assert", - "162: intc_0", - "163: retsub" + "130: bytec_1", + "131: box_del", + "132: pop", + "133: bytec_1", + "136: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "139: box_put", + "142: bytec_1", + "143: box_len", + "144: assert", + "145: intc_2", + "146: ==", + "147: assert", + "150: bytec_1", + "151: box_len", + "152: assert", + "153: intc_2", + "154: ==", + "155: assert", + "158: intc_0", + "159: retsub" ], [ "103: bytec_2", @@ -1145,24 +1141,24 @@ "82: callsub box_map_set" ], [ - "167: box_map_set:", - "171: proto 2 1", - "174: bytec_3", - "175: frame_dig -2", - "176: concat", - "177: dup", - "178: box_del", - "179: pop", - "180: dup", - "181: frame_dig -1", - "182: box_put", - "185: box_get", - "186: assert", - "187: frame_dig -1", - "188: ==", - "189: assert", - "192: intc_0", - "193: retsub" + "163: box_map_set:", + "167: proto 2 1", + "170: bytec_3", + "171: frame_dig -2", + "172: concat", + "173: dup", + "174: box_del", + "175: pop", + "176: dup", + "177: frame_dig -1", + "178: box_put", + "181: box_get", + "182: assert", + "183: frame_dig -1", + "184: ==", + "185: assert", + "188: intc_0", + "189: retsub" ], [ "83: bytec_2", @@ -1208,14 +1204,14 @@ "60: callsub box_map_get" ], [ - "197: box_map_get:", - "201: proto 1 1", - "204: bytec_3", - "205: frame_dig -1", - "206: concat", - "207: box_get", - "208: assert", - "209: retsub" + "193: box_map_get:", + "197: proto 1 1", + "200: bytec_3", + "201: frame_dig -1", + "202: concat", + "203: box_get", + "204: assert", + "205: retsub" ], [ "61: bytec_0", @@ -1257,14 +1253,14 @@ "35: callsub box_map_exists" ], [ - "213: box_map_exists:", - "217: proto 1 1", - "220: bytec_3", - "221: frame_dig -1", - "222: concat", - "223: box_len", - "224: bury 1", - "225: retsub" + "209: box_map_exists:", + "213: proto 1 1", + "216: bytec_3", + "217: frame_dig -1", + "218: concat", + "219: box_len", + "220: bury 1", + "221: retsub" ], [ "36: bytec_2", @@ -1373,27 +1369,26 @@ ], [ "127: box_map_test:", - "131: proto 0 1", - "134: bytec_1", - "135: box_del", - "136: pop", - "137: bytec_1", - "140: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "143: box_put", - "146: bytec_1", - "147: box_len", - "148: assert", - "149: intc_2", - "150: ==", - "151: assert", - "154: bytec_1", - "155: box_len", - "156: assert", - "157: intc_2", - "158: ==", - "159: assert", - "162: intc_0", - "163: retsub" + "130: bytec_1", + "131: box_del", + "132: pop", + "133: bytec_1", + "136: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "139: box_put", + "142: bytec_1", + "143: box_len", + "144: assert", + "145: intc_2", + "146: ==", + "147: assert", + "150: bytec_1", + "151: box_len", + "152: assert", + "153: intc_2", + "154: ==", + "155: assert", + "158: intc_0", + "159: retsub" ], [ "103: bytec_2", @@ -1440,24 +1435,24 @@ "82: callsub box_map_set" ], [ - "167: box_map_set:", - "171: proto 2 1", - "174: bytec_3", - "175: frame_dig -2", - "176: concat", - "177: dup", - "178: box_del", - "179: pop", - "180: dup", - "181: frame_dig -1", - "182: box_put", - "185: box_get", - "186: assert", - "187: frame_dig -1", - "188: ==", - "189: assert", - "192: intc_0", - "193: retsub" + "163: box_map_set:", + "167: proto 2 1", + "170: bytec_3", + "171: frame_dig -2", + "172: concat", + "173: dup", + "174: box_del", + "175: pop", + "176: dup", + "177: frame_dig -1", + "178: box_put", + "181: box_get", + "182: assert", + "183: frame_dig -1", + "184: ==", + "185: assert", + "188: intc_0", + "189: retsub" ], [ "83: bytec_2", @@ -1503,14 +1498,14 @@ "60: callsub box_map_get" ], [ - "197: box_map_get:", - "201: proto 1 1", - "204: bytec_3", - "205: frame_dig -1", - "206: concat", - "207: box_get", - "208: assert", - "209: retsub" + "193: box_map_get:", + "197: proto 1 1", + "200: bytec_3", + "201: frame_dig -1", + "202: concat", + "203: box_get", + "204: assert", + "205: retsub" ], [ "61: bytec_0", @@ -1552,14 +1547,14 @@ "35: callsub box_map_exists" ], [ - "213: box_map_exists:", - "217: proto 1 1", - "220: bytec_3", - "221: frame_dig -1", - "222: concat", - "223: box_len", - "224: bury 1", - "225: retsub" + "209: box_map_exists:", + "213: proto 1 1", + "216: bytec_3", + "217: frame_dig -1", + "218: concat", + "219: box_len", + "220: bury 1", + "221: retsub" ], [ "36: bytec_2", @@ -1706,27 +1701,26 @@ ], [ "127: box_map_test:", - "131: proto 0 1", - "134: bytec_1", - "135: box_del", - "136: pop", - "137: bytec_1", - "140: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", - "143: box_put", - "146: bytec_1", - "147: box_len", - "148: assert", - "149: intc_2", - "150: ==", - "151: assert", - "154: bytec_1", - "155: box_len", - "156: assert", - "157: intc_2", - "158: ==", - "159: assert", - "162: intc_0", - "163: retsub" + "130: bytec_1", + "131: box_del", + "132: pop", + "133: bytec_1", + "136: pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", + "139: box_put", + "142: bytec_1", + "143: box_len", + "144: assert", + "145: intc_2", + "146: ==", + "147: assert", + "150: bytec_1", + "151: box_len", + "152: assert", + "153: intc_2", + "154: ==", + "155: assert", + "158: intc_0", + "159: retsub" ], [ "103: bytec_2", @@ -1773,24 +1767,24 @@ "82: callsub box_map_set" ], [ - "167: box_map_set:", - "171: proto 2 1", - "174: bytec_3", - "175: frame_dig -2", - "176: concat", - "177: dup", - "178: box_del", - "179: pop", - "180: dup", - "181: frame_dig -1", - "182: box_put", - "185: box_get", - "186: assert", - "187: frame_dig -1", - "188: ==", - "189: assert", - "192: intc_0", - "193: retsub" + "163: box_map_set:", + "167: proto 2 1", + "170: bytec_3", + "171: frame_dig -2", + "172: concat", + "173: dup", + "174: box_del", + "175: pop", + "176: dup", + "177: frame_dig -1", + "178: box_put", + "181: box_get", + "182: assert", + "183: frame_dig -1", + "184: ==", + "185: assert", + "188: intc_0", + "189: retsub" ], [ "83: bytec_2", @@ -1836,14 +1830,14 @@ "60: callsub box_map_get" ], [ - "197: box_map_get:", - "201: proto 1 1", - "204: bytec_3", - "205: frame_dig -1", - "206: concat", - "207: box_get", - "208: assert", - "209: retsub" + "193: box_map_get:", + "197: proto 1 1", + "200: bytec_3", + "201: frame_dig -1", + "202: concat", + "203: box_get", + "204: assert", + "205: retsub" ], [ "61: bytec_0", @@ -1885,14 +1879,14 @@ "35: callsub box_map_exists" ], [ - "213: box_map_exists:", - "217: proto 1 1", - "220: bytec_3", - "221: frame_dig -1", - "222: concat", - "223: box_len", - "224: bury 1", - "225: retsub" + "209: box_map_exists:", + "213: proto 1 1", + "216: bytec_3", + "217: frame_dig -1", + "218: concat", + "219: box_len", + "220: bury 1", + "221: retsub" ], [ "36: bytec_2", diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4DynamicArray.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4DynamicArray.approval.puya.map index bb542f4..113b89b 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4DynamicArray.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4DynamicArray.approval.puya.map @@ -30,13 +30,36 @@ "stack_out": [] }, "21": { - "op": "pushbytess 0x8ad12a2b 0x02bece11 0x95d64116 // method \"goodbye(string)string[]\", method \"hello(string)string\", method \"arc4_dynamic_bytes()byte[]\"" + "op": "pushbytess 0x8ad12a2b 0x02bece11 0x95d64116 // method \"goodbye(string)string[]\", method \"hello(string)string\", method \"arc4_dynamic_bytes()byte[]\"", + "defined_out": [ + "Method(arc4_dynamic_bytes()byte[])", + "Method(goodbye(string)string[])", + "Method(hello(string)string)" + ], + "stack_out": [ + "Method(goodbye(string)string[])", + "Method(hello(string)string)", + "Method(arc4_dynamic_bytes()byte[])" + ] }, "38": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(arc4_dynamic_bytes()byte[])", + "Method(goodbye(string)string[])", + "Method(hello(string)string)", + "tmp%2#0" + ], + "stack_out": [ + "Method(goodbye(string)string[])", + "Method(hello(string)string)", + "Method(arc4_dynamic_bytes()byte[])", + "tmp%2#0" + ] }, "41": { - "op": "match main_goodbye_route@3 main_hello_route@4 main_arc4_dynamic_bytes_route@5" + "op": "match main_goodbye_route@3 main_hello_route@4 main_arc4_dynamic_bytes_route@5", + "stack_out": [] }, "49": { "block": "main_after_if_else@12", @@ -50,7 +73,8 @@ ] }, "50": { - "op": "return" + "op": "return", + "stack_out": [] }, "51": { "block": "main_arc4_dynamic_bytes_route@5", @@ -114,7 +138,8 @@ ] }, "74": { - "op": "return" + "op": "return", + "stack_out": [] }, "75": { "block": "main_hello_route@4", @@ -275,7 +300,8 @@ ] }, "101": { - "op": "return" + "op": "return", + "stack_out": [] }, "102": { "block": "main_goodbye_route@3", @@ -376,7 +402,8 @@ ] }, "120": { - "op": "return" + "op": "return", + "stack_out": [] }, "121": { "block": "main_bare_routing@8", @@ -394,20 +421,40 @@ "stack_out": [] }, "126": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%23#0" + ], + "stack_out": [ + "tmp%23#0" + ] }, "128": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%24#0" + ], + "stack_out": [ + "tmp%24#0" + ] }, "129": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "130": { - "op": "intc_2 // 1" + "op": "intc_2 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "131": { - "op": "return" + "op": "return", + "stack_out": [] }, "132": { "subroutine": "_puya_lib.arc4.dynamic_array_pop_byte_length_head", @@ -1574,205 +1621,433 @@ ] }, "281": { - "op": "frame_dig 2" - }, - "283": { - "op": "dup" - }, - "284": { - "op": "itob" - }, - "285": { - "op": "extract 6 2" - }, - "288": { - "op": "frame_dig -3" - }, - "290": { - "op": "frame_dig 1" - }, - "292": { - "op": "dup" - }, - "293": { - "op": "cover 4" - }, - "295": { - "op": "uncover 2" - }, - "297": { - "op": "replace3" - }, - "298": { - "op": "dup" - }, - "299": { - "op": "frame_bury -3" - }, - "301": { - "op": "dig 1" - }, - "303": { - "op": "extract_uint16" - }, - "304": { - "op": "intc_0 // 2" - }, - "305": { - "op": "+" - }, - "306": { - "op": "+" - }, - "307": { - "op": "frame_bury 2" - }, - "309": { - "op": "intc_0 // 2" - }, - "310": { - "op": "+" - }, - "311": { - "op": "frame_bury 1" - }, - "313": { - "op": "b recalculate_head_for_elements_with_byte_length_head_for_header@1" - }, - "316": { - "block": "recalculate_head_for_elements_with_byte_length_head_after_for@4", - "stack_in": [ - "tmp%0#0", - "head_offset#0", - "tail_offset#0" - ], - "op": "frame_dig -3", + "op": "frame_dig 2", "defined_out": [ - "array_head_and_tail#0 (copy)" + "head_offset#0", + "tail_offset#0", + "tmp%0#0" ], "stack_out": [ "tmp%0#0", "head_offset#0", "tail_offset#0", - "array_head_and_tail#0 (copy)" + "tail_offset#0" ] }, - "318": { - "op": "frame_bury 0" - }, - "320": { - "retsub": true, - "op": "retsub" - }, - "321": { - "subroutine": "smart_contracts.arc4_types.contract.Arc4DynamicArray.goodbye", - "params": { - "name#0": "bytes" - }, - "block": "goodbye", - "stack_in": [], - "op": "proto 1 1" - }, - "324": { - "op": "pushbytes 0x0004000f0009476f6f642062796520", + "283": { + "op": "dup", "defined_out": [ - "0x0004000f0009476f6f642062796520" + "head_offset#0", + "tail_offset#0", + "tail_offset#0 (copy)", + "tmp%0#0" ], "stack_out": [ - "0x0004000f0009476f6f642062796520" + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#0", + "tail_offset#0 (copy)" ] }, - "341": { - "op": "frame_dig -1", + "284": { + "op": "itob", "defined_out": [ - "0x0004000f0009476f6f642062796520", - "name#0 (copy)" + "head_offset#0", + "tail_offset#0", + "tmp%0#0", + "tmp%5#0" ], "stack_out": [ - "0x0004000f0009476f6f642062796520", - "name#0 (copy)" + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#0", + "tmp%5#0" ] }, - "343": { - "op": "concat", + "285": { + "op": "extract 6 2", "defined_out": [ - "result%3#0" + "head_offset#0", + "tail_offset#0", + "tail_offset_bytes#0", + "tmp%0#0" ], "stack_out": [ - "result%3#0" + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#0", + "tail_offset_bytes#0" ] }, - "344": { - "op": "bytec_1 // 0x0002", + "288": { + "op": "frame_dig -3", "defined_out": [ - "0x0002", - "result%3#0" + "array_head_and_tail#0 (copy)", + "head_offset#0", + "tail_offset#0", + "tail_offset_bytes#0", + "tmp%0#0" ], "stack_out": [ - "result%3#0", - "0x0002" + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#0", + "tail_offset_bytes#0", + "array_head_and_tail#0 (copy)" ] }, - "345": { - "op": "swap", + "290": { + "op": "frame_dig 1", "stack_out": [ - "0x0002", - "result%3#0" + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#0", + "tail_offset_bytes#0", + "array_head_and_tail#0 (copy)", + "head_offset#0" ] }, - "346": { - "op": "concat", + "292": { + "op": "dup", "defined_out": [ - "bye#0" + "array_head_and_tail#0 (copy)", + "head_offset#0", + "head_offset#0 (copy)", + "tail_offset#0", + "tail_offset_bytes#0", + "tmp%0#0" ], "stack_out": [ - "bye#0" + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#0", + "tail_offset_bytes#0", + "array_head_and_tail#0 (copy)", + "head_offset#0 (copy)", + "head_offset#0 (copy)" ] }, - "347": { - "retsub": true, - "op": "retsub" - }, - "348": { - "subroutine": "smart_contracts.arc4_types.contract.Arc4DynamicArray.hello", - "params": { - "name#0": "bytes" - }, - "block": "hello", - "stack_in": [], - "op": "proto 1 1" - }, - "351": { - "op": "frame_dig -1", - "defined_out": [ - "name#0 (copy)" - ], + "293": { + "op": "cover 4", "stack_out": [ - "name#0 (copy)" + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#0", + "tail_offset_bytes#0", + "array_head_and_tail#0 (copy)", + "head_offset#0 (copy)" ] }, - "353": { - "op": "len", - "defined_out": [ - "next_item_len%1#0" - ], + "295": { + "op": "uncover 2", "stack_out": [ - "next_item_len%1#0" + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#0", + "array_head_and_tail#0 (copy)", + "head_offset#0 (copy)", + "tail_offset_bytes#0" ] }, - "354": { - "op": "pushint 4 // 4", + "297": { + "op": "replace3", "defined_out": [ - "4", - "next_item_len%1#0" + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tmp%0#0" ], "stack_out": [ - "next_item_len%1#0", - "4" + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#0", + "array_head_and_tail#0" ] }, - "356": { - "op": "+", + "298": { + "op": "dup" + }, + "299": { + "op": "frame_bury -3", + "stack_out": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#0", + "array_head_and_tail#0 (copy)" + ] + }, + "301": { + "op": "dig 1", + "stack_out": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#0", + "array_head_and_tail#0 (copy)", + "tail_offset#0 (copy)" + ] + }, + "303": { + "op": "extract_uint16", + "defined_out": [ + "head_offset#0", + "tail_offset#0", + "tmp%0#0", + "tmp%6#0" + ], + "stack_out": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#0", + "tmp%6#0" + ] + }, + "304": { + "op": "intc_0 // 2", + "defined_out": [ + "2", + "head_offset#0", + "tail_offset#0", + "tmp%0#0", + "tmp%6#0" + ], + "stack_out": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#0", + "tmp%6#0", + "2" + ] + }, + "305": { + "op": "+", + "defined_out": [ + "head_offset#0", + "tail_offset#0", + "tmp%0#0", + "tmp%7#0" + ], + "stack_out": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#0", + "tmp%7#0" + ] + }, + "306": { + "op": "+", + "stack_out": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0", + "tail_offset#0" + ] + }, + "307": { + "op": "frame_bury 2", + "defined_out": [ + "head_offset#0", + "tail_offset#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0" + ] + }, + "309": { + "op": "intc_0 // 2", + "stack_out": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0", + "2" + ] + }, + "310": { + "op": "+", + "stack_out": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "head_offset#0" + ] + }, + "311": { + "op": "frame_bury 1", + "defined_out": [ + "head_offset#0", + "tail_offset#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0" + ] + }, + "313": { + "op": "b recalculate_head_for_elements_with_byte_length_head_for_header@1" + }, + "316": { + "block": "recalculate_head_for_elements_with_byte_length_head_after_for@4", + "stack_in": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0" + ], + "op": "frame_dig -3", + "defined_out": [ + "array_head_and_tail#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "head_offset#0", + "tail_offset#0", + "array_head_and_tail#0 (copy)" + ] + }, + "318": { + "op": "frame_bury 0" + }, + "320": { + "retsub": true, + "op": "retsub" + }, + "321": { + "subroutine": "smart_contracts.arc4_types.contract.Arc4DynamicArray.goodbye", + "params": { + "name#0": "bytes" + }, + "block": "goodbye", + "stack_in": [], + "op": "proto 1 1" + }, + "324": { + "op": "pushbytes 0x0004000f0009476f6f642062796520", + "defined_out": [ + "0x0004000f0009476f6f642062796520" + ], + "stack_out": [ + "0x0004000f0009476f6f642062796520" + ] + }, + "341": { + "op": "frame_dig -1", + "defined_out": [ + "0x0004000f0009476f6f642062796520", + "name#0 (copy)" + ], + "stack_out": [ + "0x0004000f0009476f6f642062796520", + "name#0 (copy)" + ] + }, + "343": { + "op": "concat", + "defined_out": [ + "result%3#0" + ], + "stack_out": [ + "result%3#0" + ] + }, + "344": { + "op": "bytec_1 // 0x0002", + "defined_out": [ + "0x0002", + "result%3#0" + ], + "stack_out": [ + "result%3#0", + "0x0002" + ] + }, + "345": { + "op": "swap", + "stack_out": [ + "0x0002", + "result%3#0" + ] + }, + "346": { + "op": "concat", + "defined_out": [ + "bye#0" + ], + "stack_out": [ + "bye#0" + ] + }, + "347": { + "retsub": true, + "op": "retsub" + }, + "348": { + "subroutine": "smart_contracts.arc4_types.contract.Arc4DynamicArray.hello", + "params": { + "name#0": "bytes" + }, + "block": "hello", + "stack_in": [], + "op": "proto 1 1" + }, + "351": { + "op": "frame_dig -1", + "defined_out": [ + "name#0 (copy)" + ], + "stack_out": [ + "name#0 (copy)" + ] + }, + "353": { + "op": "len", + "defined_out": [ + "next_item_len%1#0" + ], + "stack_out": [ + "next_item_len%1#0" + ] + }, + "354": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "next_item_len%1#0" + ], + "stack_out": [ + "next_item_len%1#0", + "4" + ] + }, + "356": { + "op": "+", "defined_out": [ "tail_offset%1#0" ], @@ -2107,144 +2382,506 @@ ], "stack_out": [ "dynamic_string_array#1", - "dynamic_string_array#1", - "popped%1#0", - "copied_dynamic_string_array#1" + "dynamic_string_array#1", + "popped%1#0", + "copied_dynamic_string_array#1" + ] + }, + "424": { + "op": "bury 1", + "stack_out": [ + "dynamic_string_array#1", + "dynamic_string_array#1", + "copied_dynamic_string_array#1" + ] + }, + "426": { + "op": "pushbytes 0x0006776f726c6421", + "defined_out": [ + "0x0006776f726c6421", + "copied_dynamic_string_array#1", + "dynamic_string_array#1" + ], + "stack_out": [ + "dynamic_string_array#1", + "dynamic_string_array#1", + "copied_dynamic_string_array#1", + "0x0006776f726c6421" + ] + }, + "436": { + "op": "intc_2 // 1", + "stack_out": [ + "dynamic_string_array#1", + "dynamic_string_array#1", + "copied_dynamic_string_array#1", + "0x0006776f726c6421", + "1" + ] + }, + "437": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", + "op": "callsub dynamic_array_concat_byte_length_head", + "stack_out": [ + "dynamic_string_array#1", + "dynamic_string_array#1", + "copied_dynamic_string_array#1" + ] + }, + "440": { + "op": "pop", + "stack_out": [ + "dynamic_string_array#1", + "dynamic_string_array#1" + ] + }, + "441": { + "op": "pushbytes \"\"", + "defined_out": [ + "dynamic_string_array#1", + "greeting#0" + ], + "stack_out": [ + "dynamic_string_array#1", + "dynamic_string_array#1", + "greeting#0" + ] + }, + "443": { + "op": "swap", + "defined_out": [ + "dynamic_string_array#1", + "greeting#0" + ], + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "dynamic_string_array#1" + ] + }, + "444": { + "op": "intc_1 // 0", + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "dynamic_string_array#1", + "0" + ] + }, + "445": { + "op": "extract_uint16", + "defined_out": [ + "array_length%1#0", + "dynamic_string_array#1", + "greeting#0" + ], + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0" + ] + }, + "446": { + "op": "intc_1 // 0", + "defined_out": [ + "array_length%1#0", + "dynamic_string_array#1", + "greeting#0", + "item_index_internal%0#0" + ], + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0" + ] + }, + "447": { + "block": "hello_for_header@1", + "stack_in": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0" + ], + "op": "frame_dig 3", + "defined_out": [ + "item_index_internal%0#0" + ], + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0" + ] + }, + "449": { + "op": "frame_dig 2", + "defined_out": [ + "array_length%1#0", + "item_index_internal%0#0" + ], + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "array_length%1#0" + ] + }, + "451": { + "op": "<", + "defined_out": [ + "array_length%1#0", + "continue_looping%0#0", + "item_index_internal%0#0" + ], + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "continue_looping%0#0" + ] + }, + "452": { + "op": "bz hello_after_for@4", + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0" + ] + }, + "455": { + "op": "frame_dig 0", + "defined_out": [ + "array_length%1#0", + "dynamic_string_array#1", + "item_index_internal%0#0" + ], + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "dynamic_string_array#1" + ] + }, + "457": { + "op": "extract 2 0", + "defined_out": [ + "array_head_and_tail%1#0", + "array_length%1#0", + "dynamic_string_array#1", + "item_index_internal%0#0" + ], + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0" + ] + }, + "460": { + "op": "frame_dig 3", + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "item_index_internal%0#0" + ] + }, + "462": { + "op": "dup", + "defined_out": [ + "array_head_and_tail%1#0", + "array_length%1#0", + "dynamic_string_array#1", + "item_index_internal%0#0", + "item_index_internal%0#0 (copy)" + ], + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "item_index_internal%0#0 (copy)", + "item_index_internal%0#0 (copy)" + ] + }, + "463": { + "op": "cover 2", + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "item_index_internal%0#0 (copy)" + ] + }, + "465": { + "op": "intc_0 // 2", + "defined_out": [ + "2", + "array_head_and_tail%1#0", + "array_length%1#0", + "dynamic_string_array#1", + "item_index_internal%0#0", + "item_index_internal%0#0 (copy)" + ], + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "item_index_internal%0#0 (copy)", + "2" ] }, - "424": { - "op": "bury 1", - "stack_out": [ + "466": { + "op": "*", + "defined_out": [ + "array_head_and_tail%1#0", + "array_length%1#0", "dynamic_string_array#1", + "item_index_internal%0#0", + "item_offset_offset%0#0" + ], + "stack_out": [ "dynamic_string_array#1", - "copied_dynamic_string_array#1" + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "item_offset_offset%0#0" ] }, - "426": { - "op": "pushbytes 0x0006776f726c6421", + "467": { + "op": "dig 1", "defined_out": [ - "0x0006776f726c6421", - "copied_dynamic_string_array#1", - "dynamic_string_array#1" + "array_head_and_tail%1#0", + "array_head_and_tail%1#0 (copy)", + "array_length%1#0", + "dynamic_string_array#1", + "item_index_internal%0#0", + "item_offset_offset%0#0" ], "stack_out": [ "dynamic_string_array#1", - "dynamic_string_array#1", - "copied_dynamic_string_array#1", - "0x0006776f726c6421" + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "item_offset_offset%0#0", + "array_head_and_tail%1#0 (copy)" ] }, - "436": { - "op": "intc_2 // 1", + "469": { + "op": "swap", "stack_out": [ "dynamic_string_array#1", - "dynamic_string_array#1", - "copied_dynamic_string_array#1", - "0x0006776f726c6421", - "1" + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "array_head_and_tail%1#0 (copy)", + "item_offset_offset%0#0" ] }, - "437": { - "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", - "op": "callsub dynamic_array_concat_byte_length_head", - "stack_out": [ + "470": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%1#0", + "array_length%1#0", "dynamic_string_array#1", + "item_index_internal%0#0", + "item_offset%0#0" + ], + "stack_out": [ "dynamic_string_array#1", - "copied_dynamic_string_array#1" + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "item_offset%0#0" ] }, - "440": { - "op": "pop", + "471": { + "op": "dup2", + "defined_out": [ + "array_head_and_tail%1#0", + "array_head_and_tail%1#0 (copy)", + "array_length%1#0", + "dynamic_string_array#1", + "item_index_internal%0#0", + "item_offset%0#0", + "item_offset%0#0 (copy)" + ], "stack_out": [ "dynamic_string_array#1", - "dynamic_string_array#1" + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "item_offset%0#0", + "array_head_and_tail%1#0 (copy)", + "item_offset%0#0 (copy)" ] }, - "441": { - "op": "pushbytes \"\"", + "472": { + "op": "extract_uint16", "defined_out": [ + "array_head_and_tail%1#0", + "array_length%1#0", "dynamic_string_array#1", - "greeting#0" + "item_index_internal%0#0", + "item_length%0#0", + "item_offset%0#0" ], "stack_out": [ "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "item_offset%0#0", + "item_length%0#0" + ] + }, + "473": { + "op": "intc_0 // 2", + "stack_out": [ "dynamic_string_array#1", - "greeting#0" + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "item_offset%0#0", + "item_length%0#0", + "2" ] }, - "443": { - "op": "swap", + "474": { + "op": "+", "defined_out": [ + "array_head_and_tail%1#0", + "array_length%1#0", "dynamic_string_array#1", - "greeting#0" + "item_head_tail_length%0#0", + "item_index_internal%0#0", + "item_offset%0#0" ], "stack_out": [ "dynamic_string_array#1", "greeting#0", - "dynamic_string_array#1" + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "array_head_and_tail%1#0", + "item_offset%0#0", + "item_head_tail_length%0#0" ] }, - "444": { - "op": "intc_1 // 0", + "475": { + "op": "extract3", + "defined_out": [ + "array_length%1#0", + "dynamic_string_array#1", + "item_index_internal%0#0", + "x#0" + ], "stack_out": [ "dynamic_string_array#1", "greeting#0", - "dynamic_string_array#1", - "0" + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "x#0" ] }, - "445": { - "op": "extract_uint16", + "476": { + "op": "extract 2 0", "defined_out": [ "array_length%1#0", "dynamic_string_array#1", - "greeting#0" + "item_index_internal%0#0", + "tmp%0#0" ], "stack_out": [ "dynamic_string_array#1", "greeting#0", - "array_length%1#0" + "array_length%1#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "tmp%0#0" ] }, - "446": { - "op": "intc_1 // 0", + "479": { + "op": "frame_dig 1", "defined_out": [ "array_length%1#0", "dynamic_string_array#1", "greeting#0", - "item_index_internal%0#0" + "item_index_internal%0#0", + "tmp%0#0" ], "stack_out": [ "dynamic_string_array#1", "greeting#0", "array_length%1#0", - "item_index_internal%0#0" + "item_index_internal%0#0", + "item_index_internal%0#0", + "tmp%0#0", + "greeting#0" ] }, - "447": { - "block": "hello_for_header@1", - "stack_in": [ + "481": { + "op": "swap", + "stack_out": [ "dynamic_string_array#1", "greeting#0", "array_length%1#0", - "item_index_internal%0#0" - ], - "op": "frame_dig 3", - "defined_out": [ - "item_index_internal%0#0" - ], + "item_index_internal%0#0", + "item_index_internal%0#0", + "greeting#0", + "tmp%0#0" + ] + }, + "482": { + "op": "concat", "stack_out": [ "dynamic_string_array#1", "greeting#0", "array_length%1#0", "item_index_internal%0#0", - "item_index_internal%0#0" + "item_index_internal%0#0", + "greeting#0" ] }, - "449": { - "op": "frame_dig 2", + "483": { + "op": "frame_bury 1", "defined_out": [ "array_length%1#0", + "dynamic_string_array#1", + "greeting#0", "item_index_internal%0#0" ], "stack_out": [ @@ -2252,15 +2889,16 @@ "greeting#0", "array_length%1#0", "item_index_internal%0#0", - "item_index_internal%0#0", - "array_length%1#0" + "item_index_internal%0#0" ] }, - "451": { - "op": "<", + "485": { + "op": "intc_2 // 1", "defined_out": [ + "1", "array_length%1#0", - "continue_looping%0#0", + "dynamic_string_array#1", + "greeting#0", "item_index_internal%0#0" ], "stack_out": [ @@ -2268,86 +2906,34 @@ "greeting#0", "array_length%1#0", "item_index_internal%0#0", - "continue_looping%0#0" + "item_index_internal%0#0", + "1" ] }, - "452": { - "op": "bz hello_after_for@4", + "486": { + "op": "+", "stack_out": [ "dynamic_string_array#1", "greeting#0", "array_length%1#0", + "item_index_internal%0#0", "item_index_internal%0#0" ] }, - "455": { - "op": "frame_dig 0" - }, - "457": { - "op": "extract 2 0" - }, - "460": { - "op": "frame_dig 3" - }, - "462": { - "op": "dup" - }, - "463": { - "op": "cover 2" - }, - "465": { - "op": "intc_0 // 2" - }, - "466": { - "op": "*" - }, - "467": { - "op": "dig 1" - }, - "469": { - "op": "swap" - }, - "470": { - "op": "extract_uint16" - }, - "471": { - "op": "dup2" - }, - "472": { - "op": "extract_uint16" - }, - "473": { - "op": "intc_0 // 2" - }, - "474": { - "op": "+" - }, - "475": { - "op": "extract3" - }, - "476": { - "op": "extract 2 0" - }, - "479": { - "op": "frame_dig 1" - }, - "481": { - "op": "swap" - }, - "482": { - "op": "concat" - }, - "483": { - "op": "frame_bury 1" - }, - "485": { - "op": "intc_2 // 1" - }, - "486": { - "op": "+" - }, "487": { - "op": "frame_bury 3" + "op": "frame_bury 3", + "defined_out": [ + "array_length%1#0", + "dynamic_string_array#1", + "greeting#0", + "item_index_internal%0#0" + ], + "stack_out": [ + "dynamic_string_array#1", + "greeting#0", + "array_length%1#0", + "item_index_internal%0#0" + ] }, "489": { "op": "b hello_for_header@1" diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4DynamicArray.arc56.json b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4DynamicArray.arc56.json index 99b1b4d..bcd9075 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4DynamicArray.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4DynamicArray.arc56.json @@ -141,8 +141,8 @@ "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.approval.puya.map index ff23e18..901f6e1 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../arc4_types/contract.py" ], - "mappings": ";;;;;;AA4HA;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;AAEK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAFL;;AAAA;;;;;;;;;AAEA;;;AASgB;;AAChB;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAL8B;;;;;;;;;;;;;;;;;;AAKlB;AAAZ;AAAA;AACqB;AAAT;;AAAA;AAAA;;;;;;;;;AAEG;;AAAS;;;AAAT;AAAP;", + "mappings": ";;;;;;AA4HA;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;AAEK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAFL;;AAAA;;;;;;;;;AAEA;;;AASgB;;AAChB;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAL8B;;;;;;;;;;;;;;;;;;AAMT;AAAA;AAAT;;AAAA;AAAA;;;;;;;;;AAEG;;AAAS;;;AAAT;AAAP;", "op_pc_offset": 0, "pc_events": { "1": { @@ -11,7 +11,7 @@ "params": {}, "block": "main", "stack_in": [], - "op": "intcblock 1 4 0" + "op": "intcblock 1 0 4" }, "6": { "op": "txn NumAppArgs", @@ -27,18 +27,33 @@ "stack_out": [] }, "11": { - "op": "pushbytes 0x0a28e7b6 // method \"arc4_static_array()void\"" + "op": "pushbytes 0x0a28e7b6 // method \"arc4_static_array()void\"", + "defined_out": [ + "Method(arc4_static_array()void)" + ], + "stack_out": [ + "Method(arc4_static_array()void)" + ] }, "17": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(arc4_static_array()void)", + "tmp%2#0" + ], + "stack_out": [ + "Method(arc4_static_array()void)", + "tmp%2#0" + ] }, "20": { - "op": "match main_arc4_static_array_route@3" + "op": "match main_arc4_static_array_route@3", + "stack_out": [] }, "24": { "block": "main_after_if_else@10", "stack_in": [], - "op": "intc_2 // 0", + "op": "intc_1 // 0", "defined_out": [ "tmp%0#0" ], @@ -47,7 +62,8 @@ ] }, "25": { - "op": "return" + "op": "return", + "stack_out": [] }, "26": { "block": "main_arc4_static_array_route@3", @@ -102,7 +118,8 @@ ] }, "37": { - "op": "return" + "op": "return", + "stack_out": [] }, "38": { "block": "main_bare_routing@6", @@ -120,20 +137,40 @@ "stack_out": [] }, "43": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%8#0" + ], + "stack_out": [ + "tmp%8#0" + ] }, "45": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0" + ] }, "46": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "47": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "48": { - "op": "return" + "op": "return", + "stack_out": [] }, "49": { "subroutine": "smart_contracts.arc4_types.contract.Arc4StaticArray.arc4_static_array", @@ -143,7 +180,7 @@ "op": "proto 0 0" }, "52": { - "op": "intc_2 // 0" + "op": "intc_1 // 0" }, "53": { "op": "dup", @@ -173,7 +210,7 @@ ] }, "56": { - "op": "intc_1 // 4", + "op": "intc_2 // 4", "defined_out": [ "4", "item_index_internal%0#0" @@ -205,55 +242,160 @@ ] }, "61": { - "op": "frame_dig 1" + "op": "frame_dig 1", + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0" + ] }, "63": { - "op": "dup" + "op": "dup", + "defined_out": [ + "item_index_internal%0#0", + "item_index_internal%0#0 (copy)" + ], + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "item_index_internal%0#0 (copy)" + ] }, "64": { - "op": "intc_1 // 4" + "op": "intc_2 // 4", + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "item_index_internal%0#0 (copy)", + "4" + ] }, "65": { - "op": "*" + "op": "*", + "defined_out": [ + "item_index_internal%0#0", + "item_offset%0#0" + ], + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "item_offset%0#0" + ] }, "66": { - "op": "pushbytes 0x000000010000000a000000ff00000080" + "op": "pushbytes 0x000000010000000a000000ff00000080", + "defined_out": [ + "0x000000010000000a000000ff00000080", + "item_index_internal%0#0", + "item_offset%0#0" + ], + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "item_offset%0#0", + "0x000000010000000a000000ff00000080" + ] }, "84": { - "op": "swap" + "op": "swap", + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "0x000000010000000a000000ff00000080", + "item_offset%0#0" + ] }, "85": { - "op": "intc_1 // 4" + "op": "extract_uint32", + "defined_out": [ + "item_index_internal%0#0", + "tmp%0#0" + ], + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "tmp%0#0" + ] }, "86": { - "error": "Index access is out of bounds", - "op": "extract3 // on error: Index access is out of bounds" - }, - "87": { - "op": "btoi" + "op": "frame_dig 0", + "defined_out": [ + "item_index_internal%0#0", + "tmp%0#0", + "total#0" + ], + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "tmp%0#0", + "total#0" + ] }, "88": { - "op": "frame_dig 0" + "op": "+", + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "total#0" + ] }, - "90": { - "op": "+" + "89": { + "op": "frame_bury 0", + "defined_out": [ + "item_index_internal%0#0", + "total#0" + ], + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0" + ] }, "91": { - "op": "frame_bury 0" + "op": "intc_0 // 1", + "defined_out": [ + "1", + "item_index_internal%0#0", + "total#0" + ], + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0", + "1" + ] }, - "93": { - "op": "intc_0 // 1" + "92": { + "op": "+", + "stack_out": [ + "total#0", + "item_index_internal%0#0", + "item_index_internal%0#0" + ] }, - "94": { - "op": "+" + "93": { + "op": "frame_bury 1", + "defined_out": [ + "item_index_internal%0#0", + "total#0" + ], + "stack_out": [ + "total#0", + "item_index_internal%0#0" + ] }, "95": { - "op": "frame_bury 1" - }, - "97": { "op": "b arc4_static_array_for_header@1" }, - "100": { + "98": { "block": "arc4_static_array_after_for@4", "stack_in": [ "total#0", @@ -269,7 +411,7 @@ "total#0" ] }, - "102": { + "100": { "op": "pushint 394 // 394", "defined_out": [ "394", @@ -282,7 +424,7 @@ "394" ] }, - "105": { + "103": { "op": "==", "defined_out": [ "tmp%1#0", @@ -294,14 +436,14 @@ "tmp%1#0" ] }, - "106": { + "104": { "op": "assert", "stack_out": [ "total#0", "item_index_internal%0#0" ] }, - "107": { + "105": { "retsub": true, "op": "retsub" } diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.approval.teal b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.approval.teal index 6eb6e16..e0107a3 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.approval.teal +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.approval.teal @@ -3,7 +3,7 @@ // algopy.arc4.ARC4Contract.approval_program() -> uint64: main: - intcblock 1 4 0 + intcblock 1 0 4 // smart_contracts/arc4_types/contract.py:125 // class Arc4StaticArray(ARC4Contract): txn NumAppArgs @@ -15,7 +15,7 @@ main: main_after_if_else@10: // smart_contracts/arc4_types/contract.py:125 // class Arc4StaticArray(ARC4Contract): - intc_2 // 0 + intc_1 // 0 return main_arc4_static_array_route@3: @@ -50,33 +50,29 @@ arc4_static_array: proto 0 0 // smart_contracts/arc4_types/contract.py:136 // total = UInt64(0) - intc_2 // 0 + intc_1 // 0 dup arc4_static_array_for_header@1: // smart_contracts/arc4_types/contract.py:137 // for uint32_item in static_uint32_array: frame_dig 1 - intc_1 // 4 + intc_2 // 4 < bz arc4_static_array_after_for@4 frame_dig 1 dup - intc_1 // 4 + intc_2 // 4 * // smart_contracts/arc4_types/contract.py:132-134 // static_uint32_array = arc4.StaticArray( // arc4.UInt32(1), arc4.UInt32(10), arc4.UInt32(255), arc4.UInt32(128) // ) pushbytes 0x000000010000000a000000ff00000080 - // smart_contracts/arc4_types/contract.py:137 - // for uint32_item in static_uint32_array: - swap - intc_1 // 4 - extract3 // on error: Index access is out of bounds // smart_contracts/arc4_types/contract.py:138 // total += uint32_item.native - btoi + swap + extract_uint32 frame_dig 0 + frame_bury 0 diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.arc56.json b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.arc56.json index 87cdc2d..378f890 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4StaticArray.arc56.json @@ -56,12 +56,6 @@ "sourceInfo": { "approval": { "sourceInfo": [ - { - "pc": [ - 86 - ], - "errorMessage": "Index access is out of bounds" - }, { "pc": [ 29 @@ -89,19 +83,19 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDQgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI1CiAgICAvLyBjbGFzcyBBcmM0U3RhdGljQXJyYXkoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CiAgICBwdXNoYnl0ZXMgMHgwYTI4ZTdiNiAvLyBtZXRob2QgImFyYzRfc3RhdGljX2FycmF5KCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9hcmM0X3N0YXRpY19hcnJheV9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxMjUKICAgIC8vIGNsYXNzIEFyYzRTdGF0aWNBcnJheShBUkM0Q29udHJhY3QpOgogICAgaW50Y18yIC8vIDAKICAgIHJldHVybgoKbWFpbl9hcmM0X3N0YXRpY19hcnJheV9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X3N0YXRpY19hcnJheQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjEyNQogICAgLy8gY2xhc3MgQXJjNFN0YXRpY0FycmF5KEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRTdGF0aWNBcnJheS5hcmM0X3N0YXRpY19hcnJheSgpIC0+IHZvaWQ6CmFyYzRfc3RhdGljX2FycmF5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI3LTEyOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYXJjNF9zdGF0aWNfYXJyYXkoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM2CiAgICAvLyB0b3RhbCA9IFVJbnQ2NCgwKQogICAgaW50Y18yIC8vIDAKICAgIGR1cAoKYXJjNF9zdGF0aWNfYXJyYXlfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM3CiAgICAvLyBmb3IgdWludDMyX2l0ZW0gaW4gc3RhdGljX3VpbnQzMl9hcnJheToKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzEgLy8gNAogICAgPAogICAgYnogYXJjNF9zdGF0aWNfYXJyYXlfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGludGNfMSAvLyA0CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxMzItMTM0CiAgICAvLyBzdGF0aWNfdWludDMyX2FycmF5ID0gYXJjNC5TdGF0aWNBcnJheSgKICAgIC8vICAgICBhcmM0LlVJbnQzMigxKSwgYXJjNC5VSW50MzIoMTApLCBhcmM0LlVJbnQzMigyNTUpLCBhcmM0LlVJbnQzMigxMjgpCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMTAwMDAwMDBhMDAwMDAwZmYwMDAwMDA4MAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM3CiAgICAvLyBmb3IgdWludDMyX2l0ZW0gaW4gc3RhdGljX3VpbnQzMl9hcnJheToKICAgIHN3YXAKICAgIGludGNfMSAvLyA0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gdG90YWwgKz0gdWludDMyX2l0ZW0ubmF0aXZlCiAgICBidG9pCiAgICBmcmFtZV9kaWcgMAogICAgKwogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGFyYzRfc3RhdGljX2FycmF5X2Zvcl9oZWFkZXJAMQoKYXJjNF9zdGF0aWNfYXJyYXlfYWZ0ZXJfZm9yQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNDAKICAgIC8vIGFzc2VydCB0b3RhbCA9PSAxICsgMTAgKyAyNTUgKyAxMjgKICAgIGZyYW1lX2RpZyAwCiAgICBwdXNoaW50IDM5NCAvLyAzOTQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI1CiAgICAvLyBjbGFzcyBBcmM0U3RhdGljQXJyYXkoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CiAgICBwdXNoYnl0ZXMgMHgwYTI4ZTdiNiAvLyBtZXRob2QgImFyYzRfc3RhdGljX2FycmF5KCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9hcmM0X3N0YXRpY19hcnJheV9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxMjUKICAgIC8vIGNsYXNzIEFyYzRTdGF0aWNBcnJheShBUkM0Q29udHJhY3QpOgogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9hcmM0X3N0YXRpY19hcnJheV9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X3N0YXRpY19hcnJheQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjEyNQogICAgLy8gY2xhc3MgQXJjNFN0YXRpY0FycmF5KEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRTdGF0aWNBcnJheS5hcmM0X3N0YXRpY19hcnJheSgpIC0+IHZvaWQ6CmFyYzRfc3RhdGljX2FycmF5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI3LTEyOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYXJjNF9zdGF0aWNfYXJyYXkoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM2CiAgICAvLyB0b3RhbCA9IFVJbnQ2NCgwKQogICAgaW50Y18xIC8vIDAKICAgIGR1cAoKYXJjNF9zdGF0aWNfYXJyYXlfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM3CiAgICAvLyBmb3IgdWludDMyX2l0ZW0gaW4gc3RhdGljX3VpbnQzMl9hcnJheToKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzIgLy8gNAogICAgPAogICAgYnogYXJjNF9zdGF0aWNfYXJyYXlfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGludGNfMiAvLyA0CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxMzItMTM0CiAgICAvLyBzdGF0aWNfdWludDMyX2FycmF5ID0gYXJjNC5TdGF0aWNBcnJheSgKICAgIC8vICAgICBhcmM0LlVJbnQzMigxKSwgYXJjNC5VSW50MzIoMTApLCBhcmM0LlVJbnQzMigyNTUpLCBhcmM0LlVJbnQzMigxMjgpCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMTAwMDAwMDBhMDAwMDAwZmYwMDAwMDA4MAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM4CiAgICAvLyB0b3RhbCArPSB1aW50MzJfaXRlbS5uYXRpdmUKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDMyCiAgICBmcmFtZV9kaWcgMAogICAgKwogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGFyYzRfc3RhdGljX2FycmF5X2Zvcl9oZWFkZXJAMQoKYXJjNF9zdGF0aWNfYXJyYXlfYWZ0ZXJfZm9yQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNDAKICAgIC8vIGFzc2VydCB0b3RhbCA9PSAxICsgMTAgKyAyNTUgKyAxMjgKICAgIGZyYW1lX2RpZyAwCiAgICBwdXNoaW50IDM5NCAvLyAzOTQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { - "approval": "CiADAQQAMRtBABuABAoo57Y2GgCOAQACJEMxGRREMRhEiAANIkMxGUD/7TEYFEQiQ4oAACRJiwEjDEEAJ4sBSSMLgBAAAAABAAAACgAAAP8AAACATCNYF4sACIwAIgiMAUL/0osAgYoDEkSJ", + "approval": "CiADAQAEMRtBABuABAoo57Y2GgCOAQACI0MxGRREMRhEiAANIkMxGUD/7TEYFEQiQ4oAACNJiwEkDEEAJYsBSSQLgBAAAAABAAAACgAAAP8AAACATFqLAAiMACIIjAFC/9SLAIGKAxJEiQ==", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Struct.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Struct.approval.puya.map index 08c4d1b..c1a9b7e 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Struct.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Struct.approval.puya.map @@ -30,13 +30,28 @@ "stack_out": [] }, "31": { - "op": "bytec_0 // \"todos\"" + "op": "bytec_0 // \"todos\"", + "defined_out": [ + "\"todos\"" + ], + "stack_out": [ + "\"todos\"" + ] }, "32": { - "op": "bytec_2 // 0x0000" + "op": "bytec_2 // 0x0000", + "defined_out": [ + "\"todos\"", + "0x0000" + ], + "stack_out": [ + "\"todos\"", + "0x0000" + ] }, "33": { - "op": "app_global_put" + "op": "app_global_put", + "stack_out": [] }, "34": { "block": "main_after_if_else@2", @@ -54,13 +69,36 @@ "stack_out": [] }, "39": { - "op": "pushbytess 0xf618a255 0x11cfe2d8 0xea9e2d9d // method \"add_todo(string)(string,bool)[]\", method \"complete_todo(string)void\", method \"return_todo(string)(string,bool)\"" + "op": "pushbytess 0xf618a255 0x11cfe2d8 0xea9e2d9d // method \"add_todo(string)(string,bool)[]\", method \"complete_todo(string)void\", method \"return_todo(string)(string,bool)\"", + "defined_out": [ + "Method(add_todo(string)(string,bool)[])", + "Method(complete_todo(string)void)", + "Method(return_todo(string)(string,bool))" + ], + "stack_out": [ + "Method(add_todo(string)(string,bool)[])", + "Method(complete_todo(string)void)", + "Method(return_todo(string)(string,bool))" + ] }, "56": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(add_todo(string)(string,bool)[])", + "Method(complete_todo(string)void)", + "Method(return_todo(string)(string,bool))", + "tmp%2#0" + ], + "stack_out": [ + "Method(add_todo(string)(string,bool)[])", + "Method(complete_todo(string)void)", + "Method(return_todo(string)(string,bool))", + "tmp%2#0" + ] }, "59": { - "op": "match main_add_todo_route@5 main_complete_todo_route@6 main_return_todo_route@7" + "op": "match main_add_todo_route@5 main_complete_todo_route@6 main_return_todo_route@7", + "stack_out": [] }, "67": { "block": "main_after_if_else@10", @@ -74,7 +112,8 @@ ] }, "68": { - "op": "return" + "op": "return", + "stack_out": [] }, "69": { "block": "main_return_todo_route@7", @@ -175,7 +214,8 @@ ] }, "87": { - "op": "return" + "op": "return", + "stack_out": [] }, "88": { "block": "main_complete_todo_route@6", @@ -240,7 +280,8 @@ ] }, "102": { - "op": "return" + "op": "return", + "stack_out": [] }, "103": { "block": "main_add_todo_route@5", @@ -341,7 +382,8 @@ ] }, "121": { - "op": "return" + "op": "return", + "stack_out": [] }, "122": { "block": "main_bare_routing@8", @@ -359,20 +401,40 @@ "stack_out": [] }, "127": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%23#0" + ], + "stack_out": [ + "tmp%23#0" + ] }, "129": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%24#0" + ], + "stack_out": [ + "tmp%24#0" + ] }, "130": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "131": { - "op": "intc_2 // 1" + "op": "intc_2 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "132": { - "op": "return" + "op": "return", + "stack_out": [] }, "133": { "subroutine": "smart_contracts.arc4_types.contract.Arc4Struct.add_todo", @@ -589,31 +651,140 @@ ] }, "159": { - "op": "bytec 4 // 0x0002" + "op": "bytec 4 // 0x0002", + "defined_out": [ + "0x0002", + "todo#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "todo#0", + "0x0002" + ] }, "161": { - "op": "swap" + "op": "swap", + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "0x0002", + "todo#0" + ] }, "162": { - "op": "concat" + "op": "concat", + "defined_out": [ + "result%1#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "result%1#0" + ] }, "163": { - "op": "pushbytes 0x0001" + "op": "pushbytes 0x0001", + "defined_out": [ + "0x0001", + "result%1#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "result%1#0", + "0x0001" + ] }, "167": { - "op": "swap" + "op": "swap", + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "0x0001", + "result%1#0" + ] }, "168": { - "op": "concat" + "op": "concat", + "defined_out": [ + "array_data%0#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "array_data%0#0" + ] }, "169": { - "op": "bytec_0 // \"todos\"" + "op": "bytec_0 // \"todos\"", + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "array_data%0#0", + "\"todos\"" + ] }, "170": { - "op": "swap" + "op": "swap", + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "\"todos\"", + "array_data%0#0" + ] }, "171": { - "op": "app_global_put" + "op": "app_global_put", + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1" + ] }, "172": { "block": "add_todo_after_if_else@3", @@ -1196,71 +1367,25 @@ ] }, "221": { - "op": "frame_dig 0" - }, - "223": { - "op": "frame_dig 4" - }, - "225": { - "op": "dup" - }, - "226": { - "op": "cover 2" - }, - "228": { - "op": "extract_uint16" - }, - "229": { - "op": "intc_1 // 2" - }, - "230": { - "op": "+" - }, - "231": { - "op": "itob" - }, - "232": { - "op": "extract 6 2" - }, - "235": { - "op": "frame_dig 1" - }, - "237": { - "op": "swap" - }, - "238": { - "op": "concat" - }, - "239": { - "op": "frame_bury 1" - }, - "241": { - "op": "intc_1 // 2" - }, - "242": { - "op": "+" - }, - "243": { - "op": "frame_bury 4" - }, - "245": { - "op": "b add_todo_for_header@5" - }, - "248": { - "block": "add_todo_after_for@7", - "stack_in": [ + "op": "frame_dig 0", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "tmp%0#1" + ], + "stack_out": [ "array_head_and_tail#0", "new_head#0", "new_head_and_tail#0", "array_items_count#0", "head_offset#0", "item_offset_adjustment#2", - "tmp%0#1" - ], - "op": "frame_dig 0", - "defined_out": [ + "tmp%0#1", "array_head_and_tail#0" - ], + ] + }, + "223": { + "op": "frame_dig 4", "stack_out": [ "array_head_and_tail#0", "new_head#0", @@ -1269,14 +1394,17 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "array_head_and_tail#0" + "array_head_and_tail#0", + "head_offset#0" ] }, - "250": { - "op": "len", + "225": { + "op": "dup", "defined_out": [ "array_head_and_tail#0", - "item_offset_adjustment#2" + "head_offset#0", + "head_offset#0 (copy)", + "tmp%0#1" ], "stack_out": [ "array_head_and_tail#0", @@ -1286,15 +1414,13 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "item_offset_adjustment#2" + "array_head_and_tail#0", + "head_offset#0 (copy)", + "head_offset#0 (copy)" ] }, - "251": { - "op": "frame_bury 5", - "defined_out": [ - "array_head_and_tail#0", - "item_offset_adjustment#2" - ], + "226": { + "op": "cover 2", "stack_out": [ "array_head_and_tail#0", "new_head#0", @@ -1302,15 +1428,19 @@ "array_items_count#0", "head_offset#0", "item_offset_adjustment#2", - "tmp%0#1" + "tmp%0#1", + "head_offset#0", + "array_head_and_tail#0", + "head_offset#0 (copy)" ] }, - "253": { - "op": "intc_0 // 0", + "228": { + "op": "extract_uint16", "defined_out": [ "array_head_and_tail#0", "head_offset#0", - "item_offset_adjustment#2" + "item_offset#0", + "tmp%0#1" ], "stack_out": [ "array_head_and_tail#0", @@ -1320,15 +1450,18 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "head_offset#0" + "head_offset#0", + "item_offset#0" ] }, - "254": { - "op": "frame_bury 4", + "229": { + "op": "intc_1 // 2", "defined_out": [ + "2", "array_head_and_tail#0", "head_offset#0", - "item_offset_adjustment#2" + "item_offset#0", + "tmp%0#1" ], "stack_out": [ "array_head_and_tail#0", @@ -1337,23 +1470,39 @@ "array_items_count#0", "head_offset#0", "item_offset_adjustment#2", - "tmp%0#1" + "tmp%0#1", + "head_offset#0", + "item_offset#0", + "2" ] }, - "256": { - "block": "add_todo_for_header@8", - "stack_in": [ + "230": { + "op": "+", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "tmp%0#1", + "tmp%1#0" + ], + "stack_out": [ "array_head_and_tail#0", "new_head#0", "new_head_and_tail#0", "array_items_count#0", "head_offset#0", "item_offset_adjustment#2", - "tmp%0#1" - ], - "op": "frame_dig 4", + "tmp%0#1", + "head_offset#0", + "tmp%1#0" + ] + }, + "231": { + "op": "itob", "defined_out": [ - "head_offset#0" + "array_head_and_tail#0", + "head_offset#0", + "tmp%0#1", + "tmp%2#0" ], "stack_out": [ "array_head_and_tail#0", @@ -1363,14 +1512,17 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "head_offset#0" + "head_offset#0", + "tmp%2#0" ] }, - "258": { - "op": "intc_1 // 2", + "232": { + "op": "extract 6 2", "defined_out": [ - "2", - "head_offset#0" + "array_head_and_tail#0", + "head_offset#0", + "tmp%0#1", + "tmp%3#0" ], "stack_out": [ "array_head_and_tail#0", @@ -1381,14 +1533,17 @@ "item_offset_adjustment#2", "tmp%0#1", "head_offset#0", - "2" + "tmp%3#0" ] }, - "259": { - "op": "<", + "235": { + "op": "frame_dig 1", "defined_out": [ - "continue_looping%1#0", - "head_offset#0" + "array_head_and_tail#0", + "head_offset#0", + "new_head#0", + "tmp%0#1", + "tmp%3#0" ], "stack_out": [ "array_head_and_tail#0", @@ -1398,11 +1553,13 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "continue_looping%1#0" + "head_offset#0", + "tmp%3#0", + "new_head#0" ] }, - "260": { - "op": "bz add_todo_after_for@10", + "237": { + "op": "swap", "stack_out": [ "array_head_and_tail#0", "new_head#0", @@ -1410,74 +1567,33 @@ "array_items_count#0", "head_offset#0", "item_offset_adjustment#2", - "tmp%0#1" + "tmp%0#1", + "head_offset#0", + "new_head#0", + "tmp%3#0" ] }, - "263": { - "op": "frame_dig 2" - }, - "265": { - "op": "frame_dig 4" - }, - "267": { - "op": "dup" - }, - "268": { - "op": "cover 2" - }, - "270": { - "op": "extract_uint16" - }, - "271": { - "op": "frame_dig 5" - }, - "273": { - "op": "+" - }, - "274": { - "op": "itob" - }, - "275": { - "op": "extract 6 2" - }, - "278": { - "op": "frame_dig 1" - }, - "280": { - "op": "swap" - }, - "281": { - "op": "concat" - }, - "282": { - "op": "frame_bury 1" - }, - "284": { - "op": "intc_1 // 2" - }, - "285": { - "op": "+" - }, - "286": { - "op": "frame_bury 4" - }, - "288": { - "op": "b add_todo_for_header@8" - }, - "291": { - "block": "add_todo_after_for@10", - "stack_in": [ + "238": { + "op": "concat", + "stack_out": [ "array_head_and_tail#0", "new_head#0", "new_head_and_tail#0", "array_items_count#0", "head_offset#0", "item_offset_adjustment#2", - "tmp%0#1" - ], - "op": "frame_dig 3", + "tmp%0#1", + "head_offset#0", + "new_head#0" + ] + }, + "239": { + "op": "frame_bury 1", "defined_out": [ - "array_items_count#0" + "array_head_and_tail#0", + "head_offset#0", + "new_head#0", + "tmp%0#1" ], "stack_out": [ "array_head_and_tail#0", @@ -1487,15 +1603,11 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "array_items_count#0" + "head_offset#0" ] }, - "293": { - "op": "intc_2 // 1", - "defined_out": [ - "1", - "array_items_count#0" - ], + "241": { + "op": "intc_1 // 2", "stack_out": [ "array_head_and_tail#0", "new_head#0", @@ -1504,16 +1616,12 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "array_items_count#0", - "1" + "head_offset#0", + "2" ] }, - "294": { + "242": { "op": "+", - "defined_out": [ - "array_items_count#0", - "tmp%8#0" - ], "stack_out": [ "array_head_and_tail#0", "new_head#0", @@ -1522,14 +1630,16 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%8#0" + "head_offset#0" ] }, - "295": { - "op": "itob", + "243": { + "op": "frame_bury 4", "defined_out": [ - "array_items_count#0", - "tmp%9#0" + "array_head_and_tail#0", + "head_offset#0", + "new_head#0", + "tmp%0#1" ], "stack_out": [ "array_head_and_tail#0", @@ -1538,33 +1648,26 @@ "array_items_count#0", "head_offset#0", "item_offset_adjustment#2", - "tmp%0#1", - "tmp%9#0" + "tmp%0#1" ] }, - "296": { - "op": "extract 6 2", - "defined_out": [ - "array_items_count#0", - "tmp%10#0" - ], - "stack_out": [ + "245": { + "op": "b add_todo_for_header@5" + }, + "248": { + "block": "add_todo_after_for@7", + "stack_in": [ "array_head_and_tail#0", "new_head#0", "new_head_and_tail#0", "array_items_count#0", "head_offset#0", "item_offset_adjustment#2", - "tmp%0#1", - "tmp%10#0" - ] - }, - "299": { - "op": "frame_dig 1", + "tmp%0#1" + ], + "op": "frame_dig 0", "defined_out": [ - "array_items_count#0", - "new_head#0", - "tmp%10#0" + "array_head_and_tail#0" ], "stack_out": [ "array_head_and_tail#0", @@ -1574,16 +1677,14 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%10#0", - "new_head#0" + "array_head_and_tail#0" ] }, - "301": { - "op": "concat", + "250": { + "op": "len", "defined_out": [ - "array_items_count#0", - "new_head#0", - "tmp%11#0" + "array_head_and_tail#0", + "item_offset_adjustment#2" ], "stack_out": [ "array_head_and_tail#0", @@ -1593,16 +1694,14 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%11#0" + "item_offset_adjustment#2" ] }, - "302": { - "op": "frame_dig 0", + "251": { + "op": "frame_bury 5", "defined_out": [ "array_head_and_tail#0", - "array_items_count#0", - "new_head#0", - "tmp%11#0" + "item_offset_adjustment#2" ], "stack_out": [ "array_head_and_tail#0", @@ -1611,19 +1710,15 @@ "array_items_count#0", "head_offset#0", "item_offset_adjustment#2", - "tmp%0#1", - "tmp%11#0", - "array_head_and_tail#0" + "tmp%0#1" ] }, - "304": { - "op": "frame_dig 6", + "253": { + "op": "intc_0 // 0", "defined_out": [ "array_head_and_tail#0", - "array_items_count#0", - "new_head#0", - "tmp%0#1", - "tmp%11#0" + "head_offset#0", + "item_offset_adjustment#2" ], "stack_out": [ "array_head_and_tail#0", @@ -1633,20 +1728,15 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%11#0", - "array_head_and_tail#0", - "tmp%0#1" + "head_offset#0" ] }, - "306": { - "op": "frame_dig 5", + "254": { + "op": "frame_bury 4", "defined_out": [ "array_head_and_tail#0", - "array_items_count#0", - "item_offset_adjustment#2", - "new_head#0", - "tmp%0#1", - "tmp%11#0" + "head_offset#0", + "item_offset_adjustment#2" ], "stack_out": [ "array_head_and_tail#0", @@ -1655,23 +1745,23 @@ "array_items_count#0", "head_offset#0", "item_offset_adjustment#2", - "tmp%0#1", - "tmp%11#0", - "array_head_and_tail#0", - "tmp%0#1", - "item_offset_adjustment#2" + "tmp%0#1" ] }, - "308": { - "op": "substring3", - "defined_out": [ + "256": { + "block": "add_todo_for_header@8", + "stack_in": [ "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", "array_items_count#0", + "head_offset#0", "item_offset_adjustment#2", - "new_head#0", - "tmp%0#1", - "tmp%11#0", - "tmp%14#0" + "tmp%0#1" + ], + "op": "frame_dig 4", + "defined_out": [ + "head_offset#0" ], "stack_out": [ "array_head_and_tail#0", @@ -1681,19 +1771,32 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%11#0", - "tmp%14#0" + "head_offset#0" ] }, - "309": { - "op": "concat", + "258": { + "op": "intc_1 // 2", "defined_out": [ + "2", + "head_offset#0" + ], + "stack_out": [ "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", "array_items_count#0", + "head_offset#0", "item_offset_adjustment#2", - "new_head#0", "tmp%0#1", - "tmp%15#0" + "head_offset#0", + "2" + ] + }, + "259": { + "op": "<", + "defined_out": [ + "continue_looping%1#0", + "head_offset#0" ], "stack_out": [ "array_head_and_tail#0", @@ -1703,20 +1806,40 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%15#0" + "continue_looping%1#0" ] }, - "310": { - "op": "frame_dig 2", - "defined_out": [ + "260": { + "op": "bz add_todo_after_for@10", + "stack_out": [ "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", "array_items_count#0", + "head_offset#0", "item_offset_adjustment#2", + "tmp%0#1" + ] + }, + "263": { + "op": "frame_dig 2", + "defined_out": [ + "head_offset#0", + "new_head_and_tail#0" + ], + "stack_out": [ + "array_head_and_tail#0", "new_head#0", "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", "tmp%0#1", - "tmp%15#0" - ], + "new_head_and_tail#0" + ] + }, + "265": { + "op": "frame_dig 4", "stack_out": [ "array_head_and_tail#0", "new_head#0", @@ -1725,22 +1848,32 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%15#0", - "new_head_and_tail#0" + "new_head_and_tail#0", + "head_offset#0" ] }, - "312": { + "267": { "op": "dup", "defined_out": [ + "head_offset#0", + "head_offset#0 (copy)", + "new_head_and_tail#0" + ], + "stack_out": [ "array_head_and_tail#0", - "array_items_count#0", - "item_offset_adjustment#2", "new_head#0", "new_head_and_tail#0", - "new_head_and_tail#0 (copy)", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", "tmp%0#1", - "tmp%15#0" - ], + "new_head_and_tail#0", + "head_offset#0 (copy)", + "head_offset#0 (copy)" + ] + }, + "268": { + "op": "cover 2", "stack_out": [ "array_head_and_tail#0", "new_head#0", @@ -1749,22 +1882,37 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%15#0", + "head_offset#0", "new_head_and_tail#0", - "new_head_and_tail#0 (copy)" + "head_offset#0 (copy)" ] }, - "313": { - "op": "len", + "270": { + "op": "extract_uint16", "defined_out": [ + "head_offset#0", + "item_offset#0", + "new_head_and_tail#0" + ], + "stack_out": [ "array_head_and_tail#0", - "array_items_count#0", - "item_offset_adjustment#2", "new_head#0", "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", "tmp%0#1", - "tmp%15#0", - "tmp%17#0" + "head_offset#0", + "item_offset#0" + ] + }, + "271": { + "op": "frame_dig 5", + "defined_out": [ + "head_offset#0", + "item_offset#0", + "item_offset_adjustment#2", + "new_head_and_tail#0" ], "stack_out": [ "array_head_and_tail#0", @@ -1774,26 +1922,18 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%15#0", - "new_head_and_tail#0", - "tmp%17#0" + "head_offset#0", + "item_offset#0", + "item_offset_adjustment#2" ] }, - "314": { - "op": "intc_1 // 2" - }, - "315": { - "op": "swap", + "273": { + "op": "+", "defined_out": [ - "2", - "array_head_and_tail#0", - "array_items_count#0", + "head_offset#0", "item_offset_adjustment#2", - "new_head#0", "new_head_and_tail#0", - "tmp%0#1", - "tmp%15#0", - "tmp%17#0" + "tmp%5#0" ], "stack_out": [ "array_head_and_tail#0", @@ -1803,23 +1943,17 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%15#0", - "new_head_and_tail#0", - "2", - "tmp%17#0" + "head_offset#0", + "tmp%5#0" ] }, - "316": { - "op": "substring3", + "274": { + "op": "itob", "defined_out": [ - "array_head_and_tail#0", - "array_items_count#0", + "head_offset#0", "item_offset_adjustment#2", - "new_head#0", "new_head_and_tail#0", - "tmp%0#1", - "tmp%15#0", - "tmp%18#0" + "tmp%6#0" ], "stack_out": [ "array_head_and_tail#0", @@ -1829,20 +1963,17 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%15#0", - "tmp%18#0" + "head_offset#0", + "tmp%6#0" ] }, - "317": { - "op": "concat", + "275": { + "op": "extract 6 2", "defined_out": [ - "array_head_and_tail#0", - "array_items_count#0", + "head_offset#0", "item_offset_adjustment#2", - "new_head#0", "new_head_and_tail#0", - "tmp%0#1", - "tmp%19#0" + "tmp%7#0" ], "stack_out": [ "array_head_and_tail#0", @@ -1852,20 +1983,18 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%19#0" + "head_offset#0", + "tmp%7#0" ] }, - "318": { - "op": "bytec_0 // \"todos\"", + "278": { + "op": "frame_dig 1", "defined_out": [ - "\"todos\"", - "array_head_and_tail#0", - "array_items_count#0", + "head_offset#0", "item_offset_adjustment#2", "new_head#0", "new_head_and_tail#0", - "tmp%0#1", - "tmp%19#0" + "tmp%7#0" ], "stack_out": [ "array_head_and_tail#0", @@ -1875,11 +2004,12 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "tmp%19#0", - "\"todos\"" + "head_offset#0", + "tmp%7#0", + "new_head#0" ] }, - "319": { + "280": { "op": "swap", "stack_out": [ "array_head_and_tail#0", @@ -1889,12 +2019,13 @@ "head_offset#0", "item_offset_adjustment#2", "tmp%0#1", - "\"todos\"", - "tmp%19#0" + "head_offset#0", + "new_head#0", + "tmp%7#0" ] }, - "320": { - "op": "app_global_put", + "281": { + "op": "concat", "stack_out": [ "array_head_and_tail#0", "new_head#0", @@ -1902,1012 +2033,5706 @@ "array_items_count#0", "head_offset#0", "item_offset_adjustment#2", - "tmp%0#1" + "tmp%0#1", + "head_offset#0", + "new_head#0" ] }, - "321": { - "op": "b add_todo_after_if_else@3" - }, - "324": { - "subroutine": "smart_contracts.arc4_types.contract.Arc4Struct.complete_todo", - "params": { - "task#0": "bytes" - }, - "block": "complete_todo", - "stack_in": [], - "op": "proto 1 0" - }, - "327": { - "op": "intc_0 // 0", - "stack_out": [ + "282": { + "op": "frame_bury 1", + "defined_out": [ + "head_offset#0", + "item_offset_adjustment#2", + "new_head#0", "new_head_and_tail#0" - ] - }, - "328": { - "op": "dup", + ], "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0" + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "head_offset#0" ] }, - "329": { - "op": "bytec_1 // \"\"", + "284": { + "op": "intc_1 // 2", "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", - "head_offset#0" + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "head_offset#0", + "2" ] }, - "330": { - "op": "dupn 4", + "285": { + "op": "+", "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", + "array_items_count#0", "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0" + "item_offset_adjustment#2", + "tmp%0#1", + "head_offset#0" ] }, - "332": { - "op": "intc_0 // 0", + "286": { + "op": "frame_bury 4", "defined_out": [ - "0" + "head_offset#0", + "item_offset_adjustment#2", + "new_head#0", + "new_head_and_tail#0" ], "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", + "array_items_count#0", "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", - "0" + "item_offset_adjustment#2", + "tmp%0#1" ] }, - "333": { - "op": "bytec_0 // \"todos\"", + "288": { + "op": "b add_todo_for_header@8" + }, + "291": { + "block": "add_todo_after_for@10", + "stack_in": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1" + ], + "op": "frame_dig 3", "defined_out": [ - "\"todos\"", - "0" + "array_items_count#0" ], "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", + "array_items_count#0", "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", - "0", - "\"todos\"" + "item_offset_adjustment#2", + "tmp%0#1", + "array_items_count#0" ] }, - "334": { - "op": "app_global_get_ex", + "293": { + "op": "intc_2 // 1", "defined_out": [ - "maybe_exists%0#0", - "maybe_value%0#0" + "1", + "array_items_count#0" ], "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", + "array_items_count#0", "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", - "maybe_value%0#0", - "maybe_exists%0#0" + "item_offset_adjustment#2", + "tmp%0#1", + "array_items_count#0", + "1" ] }, - "335": { - "error": "check self.todos exists", - "op": "assert // check self.todos exists", + "294": { + "op": "+", + "defined_out": [ + "array_items_count#0", + "tmp%8#0" + ], "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", + "array_items_count#0", "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", - "maybe_value%0#0" + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%8#0" ] }, - "336": { - "op": "intc_0 // 0", + "295": { + "op": "itob", + "defined_out": [ + "array_items_count#0", + "tmp%9#0" + ], "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", + "array_items_count#0", "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", - "maybe_value%0#0", - "0" + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%9#0" ] }, - "337": { - "op": "extract_uint16", + "296": { + "op": "extract 6 2", "defined_out": [ - "tmp%0#0" + "array_items_count#0", + "tmp%10#0" ], "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", + "array_items_count#0", "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", - "tmp%0#0" + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%10#0" ] }, - "338": { - "op": "intc_0 // 0", + "299": { + "op": "frame_dig 1", "defined_out": [ - "index#0", - "tmp%0#0" + "array_items_count#0", + "new_head#0", + "tmp%10#0" ], "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", + "array_items_count#0", "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", - "tmp%0#0", - "index#0" + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%10#0", + "new_head#0" ] }, - "339": { - "block": "complete_todo_for_header@1", - "stack_in": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", - "tmp%0#0", - "index#0" - ], - "op": "frame_dig 8", + "301": { + "op": "concat", "defined_out": [ - "index#0" + "array_items_count#0", + "new_head#0", + "tmp%11#0" ], "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", + "array_items_count#0", "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", - "tmp%0#0", - "index#0", - "index#0" + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%11#0" ] }, - "341": { - "op": "frame_dig 7", + "302": { + "op": "frame_dig 0", "defined_out": [ - "index#0", - "tmp%0#0" + "array_head_and_tail#0", + "array_items_count#0", + "new_head#0", + "tmp%11#0" ], "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", + "array_items_count#0", "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", - "tmp%0#0", - "index#0", - "index#0", - "tmp%0#0" + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%11#0", + "array_head_and_tail#0" ] }, - "343": { - "op": "<", + "304": { + "op": "frame_dig 6", "defined_out": [ - "continue_looping%0#0", - "index#0", - "tmp%0#0" + "array_head_and_tail#0", + "array_items_count#0", + "new_head#0", + "tmp%0#1", + "tmp%11#0" ], "stack_out": [ + "array_head_and_tail#0", + "new_head#0", "new_head_and_tail#0", - "size_b#0", + "array_items_count#0", "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", - "tmp%0#0", - "index#0", - "continue_looping%0#0" + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%11#0", + "array_head_and_tail#0", + "tmp%0#1" ] }, - "344": { - "op": "bz complete_todo_after_for@6", - "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", - "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", + "306": { + "op": "frame_dig 5", + "defined_out": [ + "array_head_and_tail#0", + "array_items_count#0", + "item_offset_adjustment#2", + "new_head#0", + "tmp%0#1", + "tmp%11#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%11#0", + "array_head_and_tail#0", + "tmp%0#1", + "item_offset_adjustment#2" + ] + }, + "308": { + "op": "substring3", + "defined_out": [ + "array_head_and_tail#0", + "array_items_count#0", + "item_offset_adjustment#2", + "new_head#0", + "tmp%0#1", + "tmp%11#0", + "tmp%14#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%11#0", + "tmp%14#0" + ] + }, + "309": { + "op": "concat", + "defined_out": [ + "array_head_and_tail#0", + "array_items_count#0", + "item_offset_adjustment#2", + "new_head#0", + "tmp%0#1", + "tmp%15#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%15#0" + ] + }, + "310": { + "op": "frame_dig 2", + "defined_out": [ + "array_head_and_tail#0", + "array_items_count#0", + "item_offset_adjustment#2", + "new_head#0", + "new_head_and_tail#0", + "tmp%0#1", + "tmp%15#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%15#0", + "new_head_and_tail#0" + ] + }, + "312": { + "op": "dup", + "defined_out": [ + "array_head_and_tail#0", + "array_items_count#0", + "item_offset_adjustment#2", + "new_head#0", + "new_head_and_tail#0", + "new_head_and_tail#0 (copy)", + "tmp%0#1", + "tmp%15#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%15#0", + "new_head_and_tail#0", + "new_head_and_tail#0 (copy)" + ] + }, + "313": { + "op": "len", + "defined_out": [ + "array_head_and_tail#0", + "array_items_count#0", + "item_offset_adjustment#2", + "new_head#0", + "new_head_and_tail#0", + "tmp%0#1", + "tmp%15#0", + "tmp%17#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%15#0", + "new_head_and_tail#0", + "tmp%17#0" + ] + }, + "314": { + "op": "intc_1 // 2" + }, + "315": { + "op": "swap", + "defined_out": [ + "2", + "array_head_and_tail#0", + "array_items_count#0", + "item_offset_adjustment#2", + "new_head#0", + "new_head_and_tail#0", + "tmp%0#1", + "tmp%15#0", + "tmp%17#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%15#0", + "new_head_and_tail#0", + "2", + "tmp%17#0" + ] + }, + "316": { + "op": "substring3", + "defined_out": [ + "array_head_and_tail#0", + "array_items_count#0", + "item_offset_adjustment#2", + "new_head#0", + "new_head_and_tail#0", + "tmp%0#1", + "tmp%15#0", + "tmp%18#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%15#0", + "tmp%18#0" + ] + }, + "317": { + "op": "concat", + "defined_out": [ + "array_head_and_tail#0", + "array_items_count#0", + "item_offset_adjustment#2", + "new_head#0", + "new_head_and_tail#0", + "tmp%0#1", + "tmp%19#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%19#0" + ] + }, + "318": { + "op": "bytec_0 // \"todos\"", + "defined_out": [ + "\"todos\"", + "array_head_and_tail#0", + "array_items_count#0", + "item_offset_adjustment#2", + "new_head#0", + "new_head_and_tail#0", + "tmp%0#1", + "tmp%19#0" + ], + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "tmp%19#0", + "\"todos\"" + ] + }, + "319": { + "op": "swap", + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1", + "\"todos\"", + "tmp%19#0" + ] + }, + "320": { + "op": "app_global_put", + "stack_out": [ + "array_head_and_tail#0", + "new_head#0", + "new_head_and_tail#0", + "array_items_count#0", + "head_offset#0", + "item_offset_adjustment#2", + "tmp%0#1" + ] + }, + "321": { + "op": "b add_todo_after_if_else@3" + }, + "324": { + "subroutine": "smart_contracts.arc4_types.contract.Arc4Struct.complete_todo", + "params": { + "task#0": "bytes" + }, + "block": "complete_todo", + "stack_in": [], + "op": "proto 1 0" + }, + "327": { + "op": "intc_0 // 0", + "stack_out": [ + "new_head_and_tail#0" + ] + }, + "328": { + "op": "dup", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0" + ] + }, + "329": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0" + ] + }, + "330": { + "op": "dupn 4", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0" + ] + }, + "332": { + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "0" + ] + }, + "333": { + "op": "bytec_0 // \"todos\"", + "defined_out": [ + "\"todos\"", + "0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "0", + "\"todos\"" + ] + }, + "334": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "335": { + "error": "check self.todos exists", + "op": "assert // check self.todos exists", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "maybe_value%0#0" + ] + }, + "336": { + "op": "intc_0 // 0", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "maybe_value%0#0", + "0" + ] + }, + "337": { + "op": "extract_uint16", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0" + ] + }, + "338": { + "op": "intc_0 // 0", + "defined_out": [ + "index#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0" + ] + }, + "339": { + "block": "complete_todo_for_header@1", + "stack_in": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0" + ], + "op": "frame_dig 8", + "defined_out": [ + "index#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0" + ] + }, + "341": { + "op": "frame_dig 7", + "defined_out": [ + "index#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "tmp%0#0" + ] + }, + "343": { + "op": "<", + "defined_out": [ + "continue_looping%0#0", + "index#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "continue_looping%0#0" + ] + }, + "344": { + "op": "bz complete_todo_after_for@6", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0" + ] + }, + "347": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "index#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "0" + ] + }, + "348": { + "op": "bytec_0 // \"todos\"", + "defined_out": [ + "\"todos\"", + "0", + "index#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "0", + "\"todos\"" + ] + }, + "349": { + "op": "app_global_get_ex", + "defined_out": [ + "index#0", + "maybe_exists%1#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "350": { + "error": "check self.todos exists", + "op": "assert // check self.todos exists", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0" + ] + }, + "351": { + "op": "dup", + "defined_out": [ + "index#0", + "maybe_value%1#0", + "maybe_value%1#0 (copy)", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0", + "maybe_value%1#0 (copy)" + ] + }, + "352": { + "op": "extract 2 0", + "defined_out": [ + "array_head_and_tail%0#0", + "index#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0" + ] + }, + "355": { + "op": "frame_dig 8", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "index#0" + ] + }, + "357": { + "op": "dup", + "defined_out": [ + "array_head_and_tail%0#0", + "index#0", + "index#0 (copy)", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "index#0 (copy)", + "index#0 (copy)" + ] + }, + "358": { + "op": "cover 3", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "index#0 (copy)" + ] + }, + "360": { + "op": "intc_1 // 2", + "defined_out": [ + "2", + "array_head_and_tail%0#0", + "index#0", + "index#0 (copy)", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "index#0 (copy)", + "2" + ] + }, + "361": { + "op": "*", + "defined_out": [ + "array_head_and_tail%0#0", + "index#0", + "item_offset_offset%0#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0" + ] + }, + "362": { + "op": "dup", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0", + "item_offset_offset%0#0" + ] + }, + "363": { + "op": "frame_bury 3", + "defined_out": [ + "array_head_and_tail%0#0", + "index#0", + "item_offset_offset%0#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0" + ] + }, + "365": { + "op": "dig 1", + "defined_out": [ + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "index#0", + "item_offset_offset%0#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0", + "array_head_and_tail%0#0 (copy)" + ] + }, + "367": { + "op": "swap", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "item_offset_offset%0#0" + ] + }, + "368": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "item_offset%0#0" + ] + }, + "369": { + "op": "uncover 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "maybe_value%1#0" + ] + }, + "371": { + "op": "intc_0 // 0", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "maybe_value%1#0", + "0" + ] + }, + "372": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0" + ] + }, + "373": { + "op": "uncover 3", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0", + "index#0" + ] + }, + "375": { + "op": "intc_2 // 1", + "defined_out": [ + "1", + "array_head_and_tail%0#0", + "array_length%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0", + "index#0", + "1" + ] + }, + "376": { + "op": "+", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "index#0", + "index#2", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0", + "index#2" + ] + }, + "377": { + "op": "dup", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0", + "index#2", + "index#2" + ] + }, + "378": { + "op": "cover 4", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "index#0", + "index#2", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0", + "index#2" + ] + }, + "380": { + "op": "swap", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "index#2", + "array_length%0#0" + ] + }, + "381": { + "op": "dig 1", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "index#0", + "index#2", + "index#2 (copy)", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "index#2", + "array_length%0#0", + "index#2 (copy)" + ] + }, + "383": { + "error": "Index access is out of bounds", + "op": "- // on error: Index access is out of bounds", + "defined_out": [ + "array_head_and_tail%0#0", + "has_next%0#0", + "index#0", + "index#2", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "index#2", + "has_next%0#0" + ] + }, + "384": { + "op": "dig 3", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "index#2", + "has_next%0#0", + "array_head_and_tail%0#0 (copy)" + ] + }, + "386": { + "op": "len", + "defined_out": [ + "array_head_and_tail%0#0", + "end_of_array%0#0", + "has_next%0#0", + "index#0", + "index#2", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "index#2", + "has_next%0#0", + "end_of_array%0#0" + ] + }, + "387": { + "op": "uncover 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "index#2" + ] + }, + "389": { + "op": "intc_1 // 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "index#2", + "2" + ] + }, + "390": { + "op": "*", + "defined_out": [ + "array_head_and_tail%0#0", + "end_of_array%0#0", + "has_next%0#0", + "head_offset#0", + "index#0", + "index#2", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "head_offset#0" + ] + }, + "391": { + "op": "dup", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "head_offset#0", + "head_offset#0" + ] + }, + "392": { + "op": "frame_bury 2", + "defined_out": [ + "array_head_and_tail%0#0", + "end_of_array%0#0", + "has_next%0#0", + "head_offset#0", + "index#0", + "index#2", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "head_offset#0" + ] + }, + "394": { + "op": "dig 4", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "head_offset#0", + "array_head_and_tail%0#0 (copy)" + ] + }, + "396": { + "op": "swap", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "array_head_and_tail%0#0 (copy)", + "head_offset#0" + ] + }, + "397": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "end_of_array%0#0", + "has_next%0#0", + "head_offset#0", + "index#0", + "index#2", + "item_offset%0#0", + "item_offset_offset%0#0", + "next_item_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "next_item_offset%0#0" + ] + }, + "398": { + "op": "uncover 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "end_of_array%0#0", + "next_item_offset%0#0", + "has_next%0#0" + ] + }, + "400": { + "op": "select", + "defined_out": [ + "array_head_and_tail%0#0", + "end_offset%0#0", + "head_offset#0", + "index#0", + "index#2", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "array_head_and_tail%0#0", + "item_offset%0#0", + "end_offset%0#0" + ] + }, + "401": { + "op": "substring3", + "defined_out": [ + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "tmp%1#0" + ] + }, + "402": { + "op": "dup", + "defined_out": [ + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "tmp%0#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "tmp%1#0", + "tmp%1#0 (copy)" + ] + }, + "403": { + "op": "intc_0 // 0", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "tmp%1#0", + "tmp%1#0 (copy)", + "0" + ] + }, + "404": { + "op": "extract_uint16", + "defined_out": [ + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "item_start_offset%0#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "tmp%1#0", + "item_start_offset%0#0" + ] + }, + "405": { + "op": "dig 1", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "tmp%1#0", + "item_start_offset%0#0", + "tmp%1#0 (copy)" + ] + }, + "407": { + "op": "len", + "defined_out": [ + "head_offset#0", + "index#0", + "index#2", + "item_end_offset%0#0", + "item_offset_offset%0#0", + "item_start_offset%0#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "tmp%1#0", + "item_start_offset%0#0", + "item_end_offset%0#0" + ] + }, + "408": { + "op": "substring3", + "defined_out": [ + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "tmp%0#0", + "tmp%2#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "tmp%2#0" + ] + }, + "409": { + "op": "frame_dig -1", + "defined_out": [ + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "task#0 (copy)", + "tmp%0#0", + "tmp%2#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "tmp%2#0", + "task#0 (copy)" + ] + }, + "411": { + "op": "==", + "defined_out": [ + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "tmp%0#0", + "tmp%3#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "tmp%3#0" + ] + }, + "412": { + "op": "bz complete_todo_after_if_else@4", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2" + ] + }, + "415": { + "op": "intc_0 // 0", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "0" + ] + }, + "416": { + "op": "bytec_0 // \"todos\"", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "0", + "\"todos\"" + ] + }, + "417": { + "op": "app_global_get_ex", + "defined_out": [ + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "maybe_exists%2#0", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "source#0", + "maybe_exists%2#0" + ] + }, + "418": { + "error": "check self.todos exists", + "op": "assert // check self.todos exists", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "source#0" + ] + }, + "419": { + "op": "dup", + "defined_out": [ + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "source#0", + "source#0 (copy)", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "source#0", + "source#0 (copy)" + ] + }, + "420": { + "op": "extract 2 0", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "source#0", + "array_head_and_tail#0" + ] + }, + "423": { + "op": "dup", + "defined_out": [ + "array_head_and_tail#0", + "array_head_and_tail#0 (copy)", + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "source#0", + "array_head_and_tail#0", + "array_head_and_tail#0 (copy)" + ] + }, + "424": { + "op": "frame_dig 3", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "source#0", + "array_head_and_tail#0", + "array_head_and_tail#0 (copy)", + "item_offset_offset%0#0" + ] + }, + "426": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "original_offset#0", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "source#0", + "array_head_and_tail#0", + "original_offset#0" + ] + }, + "427": { + "op": "dig 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "source#0 (copy)" + ] + }, + "429": { + "op": "intc_0 // 0", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "source#0 (copy)", + "0" + ] + }, + "430": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail#0", + "array_length%1#0", + "head_offset#0", + "index#0", + "index#2", + "item_offset_offset%0#0", + "original_offset#0", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "array_length%1#0" + ] + }, + "431": { + "op": "uncover 4", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "array_length%1#0", + "index#2" + ] + }, + "433": { + "error": "Index access is out of bounds", + "op": "- // on error: Index access is out of bounds", + "defined_out": [ + "array_head_and_tail#0", + "has_next%1#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "original_offset#0", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "has_next%1#0" + ] + }, + "434": { + "op": "dig 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "has_next%1#0", + "array_head_and_tail#0 (copy)" + ] + }, + "436": { + "op": "len", + "defined_out": [ + "array_head_and_tail#0", + "end_of_tail#0", + "has_next%1#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "original_offset#0", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "has_next%1#0", + "end_of_tail#0" + ] + }, + "437": { + "op": "dig 3", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "has_next%1#0", + "end_of_tail#0", + "array_head_and_tail#0 (copy)" + ] + }, + "439": { + "op": "frame_dig 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "has_next%1#0", + "end_of_tail#0", + "array_head_and_tail#0 (copy)", + "head_offset#0" + ] + }, + "441": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail#0", + "end_of_tail#0", + "has_next%1#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "next_item_offset#0", + "original_offset#0", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "has_next%1#0", + "end_of_tail#0", + "next_item_offset#0" + ] + }, + "442": { + "op": "dup2", + "defined_out": [ + "array_head_and_tail#0", + "end_of_tail#0", + "end_of_tail#0 (copy)", + "has_next%1#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "next_item_offset#0", + "next_item_offset#0 (copy)", + "original_offset#0", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "has_next%1#0", + "end_of_tail#0", + "next_item_offset#0", + "end_of_tail#0 (copy)", + "next_item_offset#0 (copy)" + ] + }, + "443": { + "op": "uncover 4", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "end_of_tail#0 (copy)", + "next_item_offset#0 (copy)", + "has_next%1#0" + ] + }, + "445": { + "op": "select", + "defined_out": [ + "array_head_and_tail#0", + "end_of_tail#0", + "end_offset%1#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "next_item_offset#0", + "original_offset#0", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "end_offset%1#0" + ] + }, + "446": { + "op": "dig 4", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "end_offset%1#0", + "array_head_and_tail#0 (copy)" + ] + }, + "448": { + "op": "dig 4", + "defined_out": [ + "array_head_and_tail#0", + "array_head_and_tail#0 (copy)", + "end_of_tail#0", + "end_offset%1#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "next_item_offset#0", + "original_offset#0", + "original_offset#0 (copy)", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "end_offset%1#0", + "array_head_and_tail#0 (copy)", + "original_offset#0 (copy)" + ] + }, + "450": { + "op": "uncover 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "array_head_and_tail#0 (copy)", + "original_offset#0 (copy)", + "end_offset%1#0" + ] + }, + "452": { + "op": "substring3", + "defined_out": [ + "array_head_and_tail#0", + "end_of_tail#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "next_item_offset#0", + "original_offset#0", + "source#0", + "tmp%0#0", + "tmp%4#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "tmp%4#0" + ] + }, + "453": { + "op": "pushint 16 // 16", + "defined_out": [ + "16", + "array_head_and_tail#0", + "end_of_tail#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "next_item_offset#0", + "original_offset#0", + "source#0", + "tmp%0#0", + "tmp%4#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "tmp%4#0", + "16" + ] + }, + "455": { + "op": "intc_2 // 1", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "tmp%4#0", + "16", + "1" + ] + }, + "456": { + "op": "setbit", + "defined_out": [ + "array_head_and_tail#0", + "end_of_tail#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "next_item_offset#0", + "original_offset#0", + "source#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "source#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0" + ] + }, + "457": { + "op": "uncover 5", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0", + "source#0" + ] + }, + "459": { + "op": "substring 0 2", + "defined_out": [ + "array_head_and_tail#0", + "end_of_tail#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "next_item_offset#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0", + "size_b#0" + ] + }, + "462": { + "op": "dup", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0", + "size_b#0", + "size_b#0" + ] + }, + "463": { + "op": "frame_bury 1", + "defined_out": [ + "array_head_and_tail#0", + "end_of_tail#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "next_item_offset#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0", + "size_b#0" + ] + }, + "465": { + "op": "btoi", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "end_of_tail#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "next_item_offset#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0", + "array_length#0" + ] + }, + "466": { + "op": "dup", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "array_length#0 (copy)", + "end_of_tail#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "next_item_offset#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0", + "array_length#0", + "array_length#0 (copy)" + ] + }, + "467": { + "op": "frame_dig 8", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0", + "array_length#0", + "array_length#0 (copy)", + "index#0" + ] + }, + "469": { + "op": "-", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "end_of_tail#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "next_item_offset#0", + "original_offset#0", + "size_b#0", + "tmp%0#0", + "tmp%3#1" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0", + "array_length#0", + "tmp%3#1" + ] + }, + "470": { + "op": "intc_2 // 1", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0", + "array_length#0", + "tmp%3#1", + "1" + ] + }, + "471": { + "op": "-", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "end_of_tail#0", + "head_offset#0", + "index#0", + "is_before_end#0", + "item_offset_offset%0#0", + "new_item#0", + "next_item_offset#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0", + "array_length#0", + "is_before_end#0" + ] + }, + "472": { + "op": "dig 4", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "next_item_offset#0", + "new_item#0", + "array_length#0", + "is_before_end#0", + "end_of_tail#0 (copy)" + ] + }, + "474": { + "op": "uncover 4", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "is_before_end#0", + "end_of_tail#0 (copy)", + "next_item_offset#0" + ] + }, + "476": { + "op": "uncover 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_of_tail#0 (copy)", + "next_item_offset#0", + "is_before_end#0" + ] + }, + "478": { + "op": "select", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "end_of_tail#0", + "end_offset#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0" + ] + }, + "479": { + "op": "dup", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "end_of_tail#0", + "end_offset#0", + "end_offset#0 (copy)", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0", + "end_offset#0 (copy)" + ] + }, + "480": { + "op": "dig 5", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0", + "end_offset#0 (copy)", + "original_offset#0 (copy)" + ] + }, + "482": { + "op": "-", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "end_of_tail#0", + "end_offset#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "original_item_length#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0", + "original_item_length#0" + ] + }, + "483": { + "op": "frame_bury 5", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "end_of_tail#0", + "end_offset#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "original_item_length#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0" + ] + }, + "485": { + "op": "dig 2", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "end_of_tail#0", + "end_offset#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "new_item#0 (copy)", + "original_item_length#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0", + "new_item#0 (copy)" + ] + }, + "487": { + "op": "len", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "end_of_tail#0", + "end_offset#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "new_item_length#0", + "original_item_length#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0", + "new_item_length#0" + ] + }, + "488": { + "op": "frame_bury 4", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "end_of_tail#0", + "end_offset#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item#0", + "new_item_length#0", + "original_item_length#0", + "original_offset#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0" + ] + }, + "490": { + "op": "dig 5", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0", + "array_head_and_tail#0 (copy)" + ] + }, + "492": { + "op": "intc_0 // 0", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "original_offset#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0", + "array_head_and_tail#0 (copy)", + "0" + ] + }, + "493": { + "op": "uncover 6", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0", + "array_head_and_tail#0 (copy)", + "0", + "original_offset#0" + ] + }, + "495": { + "op": "substring3", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "end_of_tail#0", + "new_item#0", + "array_length#0", + "end_offset#0", + "tmp%4#0" + ] + }, + "496": { + "op": "uncover 3", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "end_of_tail#0", + "array_length#0", + "end_offset#0", + "tmp%4#0", + "new_item#0" + ] + }, + "498": { + "op": "concat", + "defined_out": [ + "array_head_and_tail#0", + "array_length#0", + "end_of_tail#0", + "end_offset#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "size_b#0", + "tmp%0#0", + "tmp%5#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_head_and_tail#0", + "end_of_tail#0", + "array_length#0", + "end_offset#0", + "tmp%5#0" + ] + }, + "499": { + "op": "uncover 4", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "end_of_tail#0", + "array_length#0", + "end_offset#0", + "tmp%5#0", + "array_head_and_tail#0" + ] + }, + "501": { + "op": "uncover 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "end_of_tail#0", + "array_length#0", + "tmp%5#0", + "array_head_and_tail#0", + "end_offset#0" + ] + }, + "503": { + "op": "uncover 4", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_length#0", + "tmp%5#0", + "array_head_and_tail#0", + "end_offset#0", + "end_of_tail#0" + ] + }, + "505": { + "op": "substring3", + "defined_out": [ + "array_length#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "size_b#0", + "tmp%0#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_length#0", + "tmp%5#0", + "tmp%6#0" + ] + }, + "506": { + "op": "concat", + "defined_out": [ + "array_length#0", + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_head_and_tail#0", + "new_item_length#0", + "original_item_length#0", + "size_b#0", + "tmp%0#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_length#0", + "new_head_and_tail#0" + ] + }, + "507": { + "op": "frame_bury 0", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", "tmp%7#0", "tmp%0#0", - "index#0" + "index#0", + "array_length#0" ] }, - "347": { - "op": "intc_0 // 0" - }, - "348": { - "op": "bytec_0 // \"todos\"" - }, - "349": { - "op": "app_global_get_ex" - }, - "350": { - "error": "check self.todos exists", - "op": "assert // check self.todos exists" - }, - "351": { - "op": "dup" - }, - "352": { - "op": "extract 2 0" - }, - "355": { - "op": "frame_dig 8" - }, - "357": { - "op": "dup" - }, - "358": { - "op": "cover 3" - }, - "360": { - "op": "intc_1 // 2" - }, - "361": { - "op": "*" + "509": { + "op": "intc_1 // 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "array_length#0", + "2" + ] }, - "362": { - "op": "dup" + "510": { + "op": "*", + "defined_out": [ + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_head_and_tail#0", + "new_item_length#0", + "original_item_length#0", + "size_b#0", + "tmp%0#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "tmp%7#0" + ] }, - "363": { - "op": "frame_bury 3" + "511": { + "op": "frame_bury 6", + "defined_out": [ + "head_offset#0", + "index#0", + "item_offset_offset%0#0", + "new_head_and_tail#0", + "new_item_length#0", + "original_item_length#0", + "size_b#0", + "tmp%0#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0" + ] }, - "365": { - "op": "dig 1" + "513": { + "block": "complete_todo_for_header@8", + "stack_in": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0" + ], + "op": "frame_dig 2", + "defined_out": [ + "head_offset#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0" + ] }, - "367": { - "op": "swap" + "515": { + "op": "frame_dig 6", + "defined_out": [ + "head_offset#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "tmp%7#0" + ] }, - "368": { - "op": "extract_uint16" + "517": { + "op": "<", + "defined_out": [ + "continue_looping%0#0", + "head_offset#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "continue_looping%0#0" + ] }, - "369": { - "op": "uncover 2" + "518": { + "op": "bz complete_todo_after_for@10", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0" + ] }, - "371": { - "op": "intc_0 // 0" + "521": { + "op": "frame_dig 0", + "defined_out": [ + "head_offset#0", + "new_head_and_tail#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "new_head_and_tail#0" + ] }, - "372": { - "op": "extract_uint16" + "523": { + "op": "dup", + "defined_out": [ + "head_offset#0", + "new_head_and_tail#0", + "new_head_and_tail#0 (copy)", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "new_head_and_tail#0", + "new_head_and_tail#0 (copy)" + ] }, - "373": { - "op": "uncover 3" + "524": { + "op": "frame_dig 2", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "new_head_and_tail#0", + "new_head_and_tail#0 (copy)", + "head_offset#0" + ] }, - "375": { - "op": "intc_2 // 1" + "526": { + "op": "dup", + "defined_out": [ + "head_offset#0", + "head_offset#0 (copy)", + "new_head_and_tail#0", + "new_head_and_tail#0 (copy)", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "new_head_and_tail#0", + "new_head_and_tail#0 (copy)", + "head_offset#0 (copy)", + "head_offset#0 (copy)" + ] }, - "376": { - "op": "+" + "527": { + "op": "cover 3", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "new_head_and_tail#0", + "new_head_and_tail#0 (copy)", + "head_offset#0 (copy)" + ] }, - "377": { - "op": "dup" + "529": { + "op": "extract_uint16", + "defined_out": [ + "head_offset#0", + "new_head_and_tail#0", + "tail_offset#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "new_head_and_tail#0", + "tail_offset#0" + ] }, - "378": { - "op": "cover 4" + "530": { + "op": "frame_dig 4", + "defined_out": [ + "head_offset#0", + "new_head_and_tail#0", + "new_item_length#0", + "tail_offset#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "new_head_and_tail#0", + "tail_offset#0", + "new_item_length#0" + ] }, - "380": { - "op": "swap" + "532": { + "op": "+", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "new_head_and_tail#0", + "tail_offset#0" + ] }, - "381": { - "op": "dig 1" + "533": { + "op": "frame_dig 5", + "defined_out": [ + "head_offset#0", + "new_head_and_tail#0", + "new_item_length#0", + "original_item_length#0", + "tail_offset#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "new_head_and_tail#0", + "tail_offset#0", + "original_item_length#0" + ] }, - "383": { - "error": "Index access is out of bounds", - "op": "- // on error: Index access is out of bounds" + "535": { + "op": "-", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "new_head_and_tail#0", + "tail_offset#0" + ] }, - "384": { - "op": "dig 3" + "536": { + "op": "itob", + "defined_out": [ + "head_offset#0", + "new_head_and_tail#0", + "new_item_length#0", + "original_item_length#0", + "tmp%10#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "new_head_and_tail#0", + "tmp%10#0" + ] }, - "386": { - "op": "len" + "537": { + "op": "extract 6 2", + "defined_out": [ + "head_offset#0", + "new_head_and_tail#0", + "new_item_length#0", + "original_item_length#0", + "tail_offset_bytes#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "new_head_and_tail#0", + "tail_offset_bytes#0" + ] }, - "387": { - "op": "uncover 2" + "540": { + "op": "dig 2" }, - "389": { - "op": "intc_1 // 2" + "542": { + "op": "swap", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "new_head_and_tail#0", + "head_offset#0 (copy)", + "tail_offset_bytes#0" + ] }, - "390": { - "op": "*" + "543": { + "op": "replace3", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "new_head_and_tail#0" + ] }, - "391": { - "op": "dup" + "544": { + "op": "frame_bury 0", + "defined_out": [ + "head_offset#0", + "new_head_and_tail#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0" + ] }, - "392": { - "op": "frame_bury 2" + "546": { + "op": "intc_1 // 2", + "defined_out": [ + "2", + "head_offset#0", + "new_head_and_tail#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0", + "2" + ] }, - "394": { - "op": "dig 4" + "547": { + "op": "+", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "head_offset#0" + ] }, - "396": { - "op": "swap" + "548": { + "op": "frame_bury 2", + "defined_out": [ + "head_offset#0", + "new_head_and_tail#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0" + ] }, - "397": { - "op": "extract_uint16" + "550": { + "op": "b complete_todo_for_header@8" }, - "398": { - "op": "uncover 2" + "553": { + "block": "complete_todo_after_for@10", + "stack_in": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0" + ], + "op": "frame_dig 1", + "defined_out": [ + "size_b#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "size_b#0" + ] }, - "400": { - "op": "select" + "555": { + "op": "frame_dig 0", + "defined_out": [ + "new_head_and_tail#0", + "size_b#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "size_b#0", + "new_head_and_tail#0" + ] }, - "401": { - "op": "substring3" + "557": { + "op": "concat", + "defined_out": [ + "new_head_and_tail#0", + "size_b#0", + "tmp%2#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "tmp%2#0" + ] }, - "402": { - "op": "dup" + "558": { + "op": "bytec_0 // \"todos\"", + "defined_out": [ + "\"todos\"", + "new_head_and_tail#0", + "size_b#0", + "tmp%2#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "tmp%2#0", + "\"todos\"" + ] }, - "403": { - "op": "intc_0 // 0" + "559": { + "op": "swap", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "\"todos\"", + "tmp%2#0" + ] }, - "404": { - "op": "extract_uint16" + "560": { + "op": "app_global_put", + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0" + ] }, - "405": { - "op": "dig 1" + "561": { + "block": "complete_todo_after_for@6", + "stack_in": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0" + ], + "retsub": true, + "op": "retsub" }, - "407": { - "op": "len" + "562": { + "block": "complete_todo_after_if_else@4", + "stack_in": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0", + "index#2" + ], + "op": "frame_bury 8", + "defined_out": [ + "index#0" + ], + "stack_out": [ + "new_head_and_tail#0", + "size_b#0", + "head_offset#0", + "item_offset_offset%0#0", + "new_item_length#0", + "original_item_length#0", + "tmp%7#0", + "tmp%0#0", + "index#0" + ] }, - "408": { - "op": "substring3" + "564": { + "op": "b complete_todo_for_header@1" }, - "409": { - "op": "frame_dig -1" + "567": { + "subroutine": "smart_contracts.arc4_types.contract.Arc4Struct.return_todo", + "params": { + "task#0": "bytes" + }, + "block": "return_todo", + "stack_in": [], + "op": "proto 1 1" }, - "411": { - "op": "==" + "570": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "item_offset_offset%0#0" + ] }, - "412": { - "op": "bz complete_todo_after_if_else@4" + "571": { + "op": "dup", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0" + ] }, - "415": { + "572": { "op": "intc_0 // 0" }, - "416": { - "op": "bytec_0 // \"todos\"" - }, - "417": { - "op": "app_global_get_ex" - }, - "418": { - "error": "check self.todos exists", - "op": "assert // check self.todos exists" - }, - "419": { - "op": "dup" - }, - "420": { - "op": "extract 2 0" - }, - "423": { - "op": "dup" - }, - "424": { - "op": "frame_dig 3" - }, - "426": { - "op": "extract_uint16" - }, - "427": { - "op": "dig 2" - }, - "429": { - "op": "intc_0 // 0" + "573": { + "op": "dupn 2" }, - "430": { - "op": "extract_uint16" + "575": { + "op": "bytec_0 // \"todos\"", + "defined_out": [ + "\"todos\"", + "0", + "exist#0", + "todo_to_return#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "0", + "\"todos\"" + ] }, - "431": { - "op": "uncover 4" + "576": { + "op": "app_global_get_ex", + "defined_out": [ + "exist#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "todo_to_return#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "maybe_value%0#0", + "maybe_exists%0#0" + ] }, - "433": { - "error": "Index access is out of bounds", - "op": "- // on error: Index access is out of bounds" + "577": { + "error": "check self.todos exists", + "op": "assert // check self.todos exists", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "maybe_value%0#0" + ] }, - "434": { - "op": "dig 2" + "578": { + "op": "intc_0 // 0", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "maybe_value%0#0", + "0" + ] }, - "436": { - "op": "len" + "579": { + "op": "extract_uint16", + "defined_out": [ + "exist#0", + "tmp%0#0", + "todo_to_return#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0" + ] }, - "437": { - "op": "dig 3" + "580": { + "op": "intc_0 // 0", + "defined_out": [ + "exist#0", + "index#0", + "tmp%0#0", + "todo_to_return#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0" + ] }, - "439": { - "op": "frame_dig 2" + "581": { + "block": "return_todo_for_header@1", + "stack_in": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0" + ], + "op": "frame_dig 5", + "defined_out": [ + "index#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0" + ] }, - "441": { - "op": "extract_uint16" + "583": { + "op": "frame_dig 4", + "defined_out": [ + "index#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "tmp%0#0" + ] }, - "442": { - "op": "dup2" + "585": { + "op": "<", + "defined_out": [ + "continue_looping%0#0", + "index#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "continue_looping%0#0" + ] }, - "443": { - "op": "uncover 4" + "586": { + "op": "bz return_todo_after_for@6", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0" + ] }, - "445": { - "op": "select" + "589": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "index#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "0" + ] }, - "446": { - "op": "dig 4" + "590": { + "op": "bytec_0 // \"todos\"", + "defined_out": [ + "\"todos\"", + "0", + "index#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "0", + "\"todos\"" + ] }, - "448": { - "op": "dig 4" + "591": { + "op": "app_global_get_ex", + "defined_out": [ + "index#0", + "maybe_exists%1#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] }, - "450": { - "op": "uncover 2" + "592": { + "error": "check self.todos exists", + "op": "assert // check self.todos exists", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0" + ] }, - "452": { - "op": "substring3" + "593": { + "op": "dup", + "defined_out": [ + "index#0", + "maybe_value%1#0", + "maybe_value%1#0 (copy)", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0", + "maybe_value%1#0 (copy)" + ] }, - "453": { - "op": "pushint 16 // 16" + "594": { + "op": "extract 2 0", + "defined_out": [ + "array_head_and_tail%0#0", + "index#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0" + ] }, - "455": { - "op": "intc_2 // 1" + "597": { + "op": "frame_dig 5", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "index#0" + ] }, - "456": { - "op": "setbit" + "599": { + "op": "dup", + "defined_out": [ + "array_head_and_tail%0#0", + "index#0", + "index#0 (copy)", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "index#0 (copy)", + "index#0 (copy)" + ] }, - "457": { - "op": "uncover 5" + "600": { + "op": "cover 3", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "index#0 (copy)" + ] }, - "459": { - "op": "substring 0 2" + "602": { + "op": "intc_1 // 2", + "defined_out": [ + "2", + "array_head_and_tail%0#0", + "index#0", + "index#0 (copy)", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "index#0 (copy)", + "2" + ] }, - "462": { - "op": "dup" + "603": { + "op": "*", + "defined_out": [ + "array_head_and_tail%0#0", + "index#0", + "item_offset_offset%0#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0" + ] }, - "463": { - "op": "frame_bury 1" + "604": { + "op": "dup", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0", + "item_offset_offset%0#0" + ] }, - "465": { - "op": "btoi" + "605": { + "op": "frame_bury 0", + "defined_out": [ + "array_head_and_tail%0#0", + "index#0", + "item_offset_offset%0#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0" + ] }, - "466": { - "op": "dup" + "607": { + "op": "dig 1", + "defined_out": [ + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "index#0", + "item_offset_offset%0#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "item_offset_offset%0#0", + "array_head_and_tail%0#0 (copy)" + ] }, - "467": { - "op": "frame_dig 8" + "609": { + "op": "swap", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "array_head_and_tail%0#0 (copy)", + "item_offset_offset%0#0" + ] }, - "469": { - "op": "-" + "610": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "maybe_value%1#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "maybe_value%1#0", + "array_head_and_tail%0#0", + "item_offset%0#0" + ] }, - "470": { - "op": "intc_2 // 1" + "611": { + "op": "uncover 2", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "maybe_value%1#0" + ] }, - "471": { - "op": "-" + "613": { + "op": "intc_0 // 0", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "maybe_value%1#0", + "0" + ] }, - "472": { - "op": "dig 4" + "614": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0" + ] }, - "474": { - "op": "uncover 4" + "615": { + "op": "uncover 3", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0", + "index#0" + ] }, - "476": { - "op": "uncover 2" + "617": { + "op": "intc_2 // 1", + "defined_out": [ + "1", + "array_head_and_tail%0#0", + "array_length%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0", + "index#0", + "1" + ] }, - "478": { - "op": "select" + "618": { + "op": "+", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0", + "index#0" + ] }, - "479": { - "op": "dup" + "619": { + "op": "dup", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0", + "index#0", + "index#0" + ] }, - "480": { - "op": "dig 5" + "620": { + "op": "frame_bury 5", + "defined_out": [ + "array_head_and_tail%0#0", + "array_length%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "array_length%0#0", + "index#0" + ] }, - "482": { - "op": "-" + "622": { + "op": "swap", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "index#0", + "array_length%0#0" + ] }, - "483": { - "op": "frame_bury 5" + "623": { + "op": "dig 1", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "index#0", + "array_length%0#0", + "index#0 (copy)" + ] }, - "485": { - "op": "dig 2" + "625": { + "error": "Index access is out of bounds", + "op": "- // on error: Index access is out of bounds", + "defined_out": [ + "array_head_and_tail%0#0", + "has_next%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "index#0", + "has_next%0#0" + ] }, - "487": { - "op": "len" + "626": { + "op": "dig 3", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "index#0", + "has_next%0#0", + "array_head_and_tail%0#0 (copy)" + ] }, - "488": { - "op": "frame_bury 4" + "628": { + "op": "len", + "defined_out": [ + "array_head_and_tail%0#0", + "end_of_array%0#0", + "has_next%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "index#0", + "has_next%0#0", + "end_of_array%0#0" + ] }, - "490": { - "op": "dig 5" + "629": { + "op": "uncover 2", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "index#0" + ] }, - "492": { - "op": "intc_0 // 0" + "631": { + "op": "intc_1 // 2", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "index#0", + "2" + ] }, - "493": { - "op": "uncover 6" + "632": { + "op": "*", + "defined_out": [ + "array_head_and_tail%0#0", + "end_of_array%0#0", + "has_next%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "next_item_offset_offset%0#0" + ] }, - "495": { - "op": "substring3" + "633": { + "op": "dup", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "next_item_offset_offset%0#0", + "next_item_offset_offset%0#0" + ] }, - "496": { - "op": "uncover 3" + "634": { + "op": "frame_bury 1", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "next_item_offset_offset%0#0" + ] }, - "498": { - "op": "concat" + "636": { + "op": "dig 4", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "next_item_offset_offset%0#0", + "array_head_and_tail%0#0 (copy)" + ] }, - "499": { - "op": "uncover 4" + "638": { + "op": "swap", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "array_head_and_tail%0#0 (copy)", + "next_item_offset_offset%0#0" + ] }, - "501": { - "op": "uncover 2" + "639": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%0#0", + "end_of_array%0#0", + "has_next%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "next_item_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "has_next%0#0", + "end_of_array%0#0", + "next_item_offset%0#0" + ] }, - "503": { - "op": "uncover 4" + "640": { + "op": "uncover 2", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "end_of_array%0#0", + "next_item_offset%0#0", + "has_next%0#0" + ] }, - "505": { - "op": "substring3" + "642": { + "op": "select", + "defined_out": [ + "array_head_and_tail%0#0", + "end_offset%0#0", + "index#0", + "item_offset%0#0", + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%0#0", + "item_offset%0#0", + "end_offset%0#0" + ] }, - "506": { - "op": "concat" + "643": { + "op": "substring3", + "defined_out": [ + "index#0", + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "tmp%1#0" + ] }, - "507": { - "op": "frame_bury 0" + "644": { + "op": "dup", + "defined_out": [ + "index#0", + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ] }, - "509": { - "op": "intc_1 // 2" + "645": { + "op": "intc_0 // 0", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "tmp%1#0", + "tmp%1#0 (copy)", + "0" + ] }, - "510": { - "op": "*" + "646": { + "op": "extract_uint16", + "defined_out": [ + "index#0", + "item_offset_offset%0#0", + "item_start_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "tmp%1#0", + "item_start_offset%0#0" + ] }, - "511": { - "op": "frame_bury 6" + "647": { + "op": "dig 1", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "tmp%1#0", + "item_start_offset%0#0", + "tmp%1#0 (copy)" + ] }, - "513": { - "block": "complete_todo_for_header@8", - "stack_in": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", + "649": { + "op": "len", + "defined_out": [ + "index#0", + "item_end_offset%0#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "item_start_offset%0#0", + "next_item_offset_offset%0#0", "tmp%0#0", - "index#0" + "tmp%1#0" ], - "op": "frame_dig 2", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "tmp%1#0", + "item_start_offset%0#0", + "item_end_offset%0#0" + ] + }, + "650": { + "op": "substring3", "defined_out": [ - "head_offset#0" + "index#0", + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0", + "tmp%2#0" ], "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", "index#0", - "head_offset#0" + "tmp%2#0" ] }, - "515": { - "op": "frame_dig 6", + "651": { + "op": "frame_dig -1", "defined_out": [ - "head_offset#0", - "tmp%7#0" + "index#0", + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "task#0 (copy)", + "tmp%0#0", + "tmp%2#0" ], "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", "index#0", - "head_offset#0", - "tmp%7#0" + "tmp%2#0", + "task#0 (copy)" ] }, - "517": { - "op": "<", + "653": { + "op": "==", "defined_out": [ - "continue_looping%0#0", - "head_offset#0", - "tmp%7#0" + "index#0", + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0", + "tmp%3#0" ], "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", "index#0", - "continue_looping%0#0" + "tmp%3#0" ] }, - "518": { - "op": "bz complete_todo_after_for@10", + "654": { + "op": "bz return_todo_for_header@1", "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", "index#0" ] }, - "521": { - "op": "frame_dig 0" - }, - "523": { - "op": "dup" - }, - "524": { - "op": "frame_dig 2" - }, - "526": { - "op": "dup" - }, - "527": { - "op": "cover 3" - }, - "529": { - "op": "extract_uint16" - }, - "530": { - "op": "frame_dig 4" - }, - "532": { - "op": "+" - }, - "533": { - "op": "frame_dig 5" - }, - "535": { - "op": "-" - }, - "536": { - "op": "itob" - }, - "537": { - "op": "extract 6 2" - }, - "540": { - "op": "dig 2" - }, - "542": { - "op": "swap" - }, - "543": { - "op": "replace3" - }, - "544": { - "op": "frame_bury 0" - }, - "546": { - "op": "intc_1 // 2" - }, - "547": { - "op": "+" - }, - "548": { - "op": "frame_bury 2" - }, - "550": { - "op": "b complete_todo_for_header@8" + "657": { + "op": "intc_0 // 0", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "0" + ] }, - "553": { - "block": "complete_todo_after_for@10", - "stack_in": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", + "658": { + "op": "bytec_0 // \"todos\"", + "stack_out": [ "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", - "index#0" - ], - "op": "frame_dig 1", + "index#0", + "0", + "\"todos\"" + ] + }, + "659": { + "op": "app_global_get_ex", "defined_out": [ - "size_b#0" + "index#0", + "item_offset_offset%0#0", + "maybe_exists%2#0", + "maybe_value%2#0", + "next_item_offset_offset%0#0", + "tmp%0#0" ], "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "maybe_value%2#0", + "maybe_exists%2#0" + ] + }, + "660": { + "error": "check self.todos exists", + "op": "assert // check self.todos exists", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", "index#0", - "size_b#0" + "maybe_value%2#0" ] }, - "555": { - "op": "frame_dig 0", + "661": { + "op": "dup", "defined_out": [ - "new_head_and_tail#0", - "size_b#0" + "index#0", + "item_offset_offset%0#0", + "maybe_value%2#0", + "maybe_value%2#0 (copy)", + "next_item_offset_offset%0#0", + "tmp%0#0" ], "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", "index#0", - "size_b#0", - "new_head_and_tail#0" + "maybe_value%2#0", + "maybe_value%2#0 (copy)" ] }, - "557": { - "op": "concat", + "662": { + "op": "extract 2 0", "defined_out": [ - "new_head_and_tail#0", - "size_b#0", - "tmp%2#0" + "array_head_and_tail%1#0", + "index#0", + "item_offset_offset%0#0", + "maybe_value%2#0", + "next_item_offset_offset%0#0", + "tmp%0#0" ], "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", "index#0", - "tmp%2#0" + "maybe_value%2#0", + "array_head_and_tail%1#0" ] }, - "558": { - "op": "bytec_0 // \"todos\"", + "665": { + "op": "dup", "defined_out": [ - "\"todos\"", - "new_head_and_tail#0", - "size_b#0", - "tmp%2#0" + "array_head_and_tail%1#0", + "array_head_and_tail%1#0 (copy)", + "index#0", + "item_offset_offset%0#0", + "maybe_value%2#0", + "next_item_offset_offset%0#0", + "tmp%0#0" ], "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", "index#0", - "tmp%2#0", - "\"todos\"" + "maybe_value%2#0", + "array_head_and_tail%1#0", + "array_head_and_tail%1#0 (copy)" ] }, - "559": { - "op": "swap", + "666": { + "op": "frame_dig 0", "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", "index#0", - "\"todos\"", - "tmp%2#0" + "maybe_value%2#0", + "array_head_and_tail%1#0", + "array_head_and_tail%1#0 (copy)", + "item_offset_offset%0#0" ] }, - "560": { - "op": "app_global_put", + "668": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail%1#0", + "index#0", + "item_offset%1#0", + "item_offset_offset%0#0", + "maybe_value%2#0", + "next_item_offset_offset%0#0", + "tmp%0#0" + ], "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", - "index#0" + "index#0", + "maybe_value%2#0", + "array_head_and_tail%1#0", + "item_offset%1#0" ] }, - "561": { - "block": "complete_todo_after_for@6", - "stack_in": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", + "669": { + "op": "uncover 2", + "stack_out": [ "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", - "index#0" - ], - "retsub": true, - "op": "retsub" + "index#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "maybe_value%2#0" + ] }, - "562": { - "block": "complete_todo_after_if_else@4", - "stack_in": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", + "671": { + "op": "intc_0 // 0", + "stack_out": [ "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", "index#0", - "index#2" - ], - "op": "frame_bury 8", + "array_head_and_tail%1#0", + "item_offset%1#0", + "maybe_value%2#0", + "0" + ] + }, + "672": { + "op": "extract_uint16", "defined_out": [ - "index#0" + "array_head_and_tail%1#0", + "array_length%1#0", + "index#0", + "item_offset%1#0", + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0" ], "stack_out": [ - "new_head_and_tail#0", - "size_b#0", - "head_offset#0", "item_offset_offset%0#0", - "new_item_length#0", - "original_item_length#0", - "tmp%7#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", "tmp%0#0", - "index#0" + "index#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "array_length%1#0" ] }, - "564": { - "op": "b complete_todo_for_header@1" - }, - "567": { - "subroutine": "smart_contracts.arc4_types.contract.Arc4Struct.return_todo", - "params": { - "task#0": "bytes" - }, - "block": "return_todo", - "stack_in": [], - "op": "proto 1 1" - }, - "570": { - "op": "bytec_1 // \"\"" - }, - "571": { - "op": "dup" - }, - "572": { - "op": "intc_0 // 0" - }, - "573": { - "op": "dupn 2" + "673": { + "op": "frame_dig 5", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", + "exist#0", + "tmp%0#0", + "index#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "array_length%1#0", + "index#0" + ] }, - "575": { - "op": "bytec_0 // \"todos\"", + "675": { + "error": "Index access is out of bounds", + "op": "- // on error: Index access is out of bounds", "defined_out": [ - "\"todos\"", - "0", - "exist#0", - "todo_to_return#0" + "array_head_and_tail%1#0", + "has_next%1#0", + "index#0", + "item_offset%1#0", + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0" ], "stack_out": [ "item_offset_offset%0#0", "next_item_offset_offset%0#0", "todo_to_return#0", "exist#0", - "0", - "\"todos\"" + "tmp%0#0", + "index#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "has_next%1#0" ] }, - "576": { - "op": "app_global_get_ex", - "defined_out": [ + "676": { + "op": "dig 2", + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", "exist#0", - "maybe_exists%0#0", - "maybe_value%0#0", - "todo_to_return#0" + "tmp%0#0", + "index#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "has_next%1#0", + "array_head_and_tail%1#0 (copy)" + ] + }, + "678": { + "op": "len", + "defined_out": [ + "array_head_and_tail%1#0", + "end_of_array%1#0", + "has_next%1#0", + "index#0", + "item_offset%1#0", + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0" ], "stack_out": [ "item_offset_offset%0#0", "next_item_offset_offset%0#0", "todo_to_return#0", "exist#0", - "maybe_value%0#0", - "maybe_exists%0#0" + "tmp%0#0", + "index#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "has_next%1#0", + "end_of_array%1#0" ] }, - "577": { - "error": "check self.todos exists", - "op": "assert // check self.todos exists", + "679": { + "op": "dig 3", "stack_out": [ "item_offset_offset%0#0", "next_item_offset_offset%0#0", "todo_to_return#0", "exist#0", - "maybe_value%0#0" + "tmp%0#0", + "index#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "has_next%1#0", + "end_of_array%1#0", + "array_head_and_tail%1#0 (copy)" ] }, - "578": { - "op": "intc_0 // 0", + "681": { + "op": "frame_dig 1", "stack_out": [ "item_offset_offset%0#0", "next_item_offset_offset%0#0", "todo_to_return#0", "exist#0", - "maybe_value%0#0", - "0" + "tmp%0#0", + "index#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "has_next%1#0", + "end_of_array%1#0", + "array_head_and_tail%1#0 (copy)", + "next_item_offset_offset%0#0" ] }, - "579": { + "683": { "op": "extract_uint16", "defined_out": [ + "array_head_and_tail%1#0", + "end_of_array%1#0", + "has_next%1#0", + "index#0", + "item_offset%1#0", + "item_offset_offset%0#0", + "next_item_offset%1#0", + "next_item_offset_offset%0#0", + "tmp%0#0" + ], + "stack_out": [ + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "todo_to_return#0", "exist#0", "tmp%0#0", - "todo_to_return#0" - ], + "index#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "has_next%1#0", + "end_of_array%1#0", + "next_item_offset%1#0" + ] + }, + "684": { + "op": "uncover 2", "stack_out": [ "item_offset_offset%0#0", "next_item_offset_offset%0#0", "todo_to_return#0", "exist#0", - "tmp%0#0" + "tmp%0#0", + "index#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "end_of_array%1#0", + "next_item_offset%1#0", + "has_next%1#0" ] }, - "580": { - "op": "intc_0 // 0", + "686": { + "op": "select", "defined_out": [ - "exist#0", + "array_head_and_tail%1#0", + "end_offset%1#0", "index#0", - "tmp%0#0", - "todo_to_return#0" + "item_offset%1#0", + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0" ], "stack_out": [ "item_offset_offset%0#0", @@ -2915,22 +7740,20 @@ "todo_to_return#0", "exist#0", "tmp%0#0", - "index#0" + "index#0", + "array_head_and_tail%1#0", + "item_offset%1#0", + "end_offset%1#0" ] }, - "581": { - "block": "return_todo_for_header@1", - "stack_in": [ + "687": { + "op": "substring3", + "defined_out": [ + "index#0", "item_offset_offset%0#0", "next_item_offset_offset%0#0", - "todo_to_return#0", - "exist#0", "tmp%0#0", - "index#0" - ], - "op": "frame_dig 5", - "defined_out": [ - "index#0" + "todo_to_return#0" ], "stack_out": [ "item_offset_offset%0#0", @@ -2939,14 +7762,17 @@ "exist#0", "tmp%0#0", "index#0", - "index#0" + "todo_to_return#0" ] }, - "583": { - "op": "frame_dig 4", + "688": { + "op": "frame_bury 2", "defined_out": [ "index#0", - "tmp%0#0" + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0", + "todo_to_return#0" ], "stack_out": [ "item_offset_offset%0#0", @@ -2954,17 +7780,18 @@ "todo_to_return#0", "exist#0", "tmp%0#0", - "index#0", - "index#0", - "tmp%0#0" + "index#0" ] }, - "585": { - "op": "<", + "690": { + "op": "intc_2 // 1", "defined_out": [ - "continue_looping%0#0", + "exist#0", "index#0", - "tmp%0#0" + "item_offset_offset%0#0", + "next_item_offset_offset%0#0", + "tmp%0#0", + "todo_to_return#0" ], "stack_out": [ "item_offset_offset%0#0", @@ -2973,11 +7800,11 @@ "exist#0", "tmp%0#0", "index#0", - "continue_looping%0#0" + "exist#0" ] }, - "586": { - "op": "bz return_todo_after_for@6", + "691": { + "op": "frame_bury 3", "stack_out": [ "item_offset_offset%0#0", "next_item_offset_offset%0#0", @@ -2987,232 +7814,6 @@ "index#0" ] }, - "589": { - "op": "intc_0 // 0" - }, - "590": { - "op": "bytec_0 // \"todos\"" - }, - "591": { - "op": "app_global_get_ex" - }, - "592": { - "error": "check self.todos exists", - "op": "assert // check self.todos exists" - }, - "593": { - "op": "dup" - }, - "594": { - "op": "extract 2 0" - }, - "597": { - "op": "frame_dig 5" - }, - "599": { - "op": "dup" - }, - "600": { - "op": "cover 3" - }, - "602": { - "op": "intc_1 // 2" - }, - "603": { - "op": "*" - }, - "604": { - "op": "dup" - }, - "605": { - "op": "frame_bury 0" - }, - "607": { - "op": "dig 1" - }, - "609": { - "op": "swap" - }, - "610": { - "op": "extract_uint16" - }, - "611": { - "op": "uncover 2" - }, - "613": { - "op": "intc_0 // 0" - }, - "614": { - "op": "extract_uint16" - }, - "615": { - "op": "uncover 3" - }, - "617": { - "op": "intc_2 // 1" - }, - "618": { - "op": "+" - }, - "619": { - "op": "dup" - }, - "620": { - "op": "frame_bury 5" - }, - "622": { - "op": "swap" - }, - "623": { - "op": "dig 1" - }, - "625": { - "error": "Index access is out of bounds", - "op": "- // on error: Index access is out of bounds" - }, - "626": { - "op": "dig 3" - }, - "628": { - "op": "len" - }, - "629": { - "op": "uncover 2" - }, - "631": { - "op": "intc_1 // 2" - }, - "632": { - "op": "*" - }, - "633": { - "op": "dup" - }, - "634": { - "op": "frame_bury 1" - }, - "636": { - "op": "dig 4" - }, - "638": { - "op": "swap" - }, - "639": { - "op": "extract_uint16" - }, - "640": { - "op": "uncover 2" - }, - "642": { - "op": "select" - }, - "643": { - "op": "substring3" - }, - "644": { - "op": "dup" - }, - "645": { - "op": "intc_0 // 0" - }, - "646": { - "op": "extract_uint16" - }, - "647": { - "op": "dig 1" - }, - "649": { - "op": "len" - }, - "650": { - "op": "substring3" - }, - "651": { - "op": "frame_dig -1" - }, - "653": { - "op": "==" - }, - "654": { - "op": "bz return_todo_for_header@1" - }, - "657": { - "op": "intc_0 // 0" - }, - "658": { - "op": "bytec_0 // \"todos\"" - }, - "659": { - "op": "app_global_get_ex" - }, - "660": { - "error": "check self.todos exists", - "op": "assert // check self.todos exists" - }, - "661": { - "op": "dup" - }, - "662": { - "op": "extract 2 0" - }, - "665": { - "op": "dup" - }, - "666": { - "op": "frame_dig 0" - }, - "668": { - "op": "extract_uint16" - }, - "669": { - "op": "uncover 2" - }, - "671": { - "op": "intc_0 // 0" - }, - "672": { - "op": "extract_uint16" - }, - "673": { - "op": "frame_dig 5" - }, - "675": { - "error": "Index access is out of bounds", - "op": "- // on error: Index access is out of bounds" - }, - "676": { - "op": "dig 2" - }, - "678": { - "op": "len" - }, - "679": { - "op": "dig 3" - }, - "681": { - "op": "frame_dig 1" - }, - "683": { - "op": "extract_uint16" - }, - "684": { - "op": "uncover 2" - }, - "686": { - "op": "select" - }, - "687": { - "op": "substring3" - }, - "688": { - "op": "frame_bury 2" - }, - "690": { - "op": "intc_2 // 1" - }, - "691": { - "op": "frame_bury 3" - }, "693": { "op": "b return_todo_for_header@1" }, diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Struct.arc56.json b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Struct.arc56.json index 06b110d..5cf8b0a 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Struct.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Struct.arc56.json @@ -185,8 +185,8 @@ "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.approval.puya.map index bbe48db..20446e8 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../arc4_types/contract.py" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyRQ;AACI;;;;;;;;;;;;;;;;;;AADJ;AAHR;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;AAoBK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAbA;;AAAA;AAAA;AAAA;;AAAA;AAPL;;;AAOK;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAPL;;AAAA;;;;;;;;;AAOA;;;AAG6B;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;;AAEd;;AAAA;;;AAAe;;;;;;;AAAf;AAAP;AACO;AAAA;;;AAAgB;;;;;;;;;;;;;;;;;;;;;AAAhB;AAAP;AACO;AAAS;;;;;;;;;;AAAT;AAAP;AAEA;AAAA;;AAAA;AAEO;AAAP;AAER;;;AAIe;AAAA;AAAA;AAAA;AAAP", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyRQ;AACI;;;;;;;;;;;;;;;;;;AADJ;AAHR;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;AAoBK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAbA;;AAAA;AAAA;AAAA;;AAAA;AAPL;;;AAOK;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAPL;;AAAA;;;;;;;;;AAOA;;;AAG6B;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;;AAEd;;AAAA;;;AAAe;;;;;;;AAAf;AAAP;AACO;AAAA;;;AAAgB;;;;;;;;;;;;;;;;;;;;;AAAhB;AAAP;AACgB;;;;;;;;;;AAAT;AAAP;AAEA;AAAA;;AAAA;AAEO;;AARc;;AAQd;AAAP;AAMO;AAAA;AAAA;AAAA;AAAP", "op_pc_offset": 0, "pc_events": { "1": { @@ -30,13 +30,28 @@ "stack_out": [] }, "30": { - "op": "bytec_0 // \"contact_info\"" + "op": "bytec_0 // \"contact_info\"", + "defined_out": [ + "\"contact_info\"" + ], + "stack_out": [ + "\"contact_info\"" + ] }, "31": { - "op": "pushbytes 0x000c000e000000000000000000000000" + "op": "pushbytes 0x000c000e000000000000000000000000", + "defined_out": [ + "\"contact_info\"", + "0x000c000e000000000000000000000000" + ], + "stack_out": [ + "\"contact_info\"", + "0x000c000e000000000000000000000000" + ] }, "49": { - "op": "app_global_put" + "op": "app_global_put", + "stack_out": [] }, "50": { "block": "main_after_if_else@2", @@ -54,13 +69,32 @@ "stack_out": [] }, "55": { - "op": "pushbytess 0x7f68c13f 0x288dc75f // method \"add_contact_info((string,string,uint64))uint64\", method \"return_contact()(string,string,uint64)\"" + "op": "pushbytess 0x7f68c13f 0x288dc75f // method \"add_contact_info((string,string,uint64))uint64\", method \"return_contact()(string,string,uint64)\"", + "defined_out": [ + "Method(add_contact_info((string,string,uint64))uint64)", + "Method(return_contact()(string,string,uint64))" + ], + "stack_out": [ + "Method(add_contact_info((string,string,uint64))uint64)", + "Method(return_contact()(string,string,uint64))" + ] }, "67": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(add_contact_info((string,string,uint64))uint64)", + "Method(return_contact()(string,string,uint64))", + "tmp%2#0" + ], + "stack_out": [ + "Method(add_contact_info((string,string,uint64))uint64)", + "Method(return_contact()(string,string,uint64))", + "tmp%2#0" + ] }, "70": { - "op": "match main_add_contact_info_route@5 main_return_contact_route@6" + "op": "match main_add_contact_info_route@5 main_return_contact_route@6", + "stack_out": [] }, "76": { "block": "main_after_if_else@9", @@ -74,7 +108,8 @@ ] }, "77": { - "op": "return" + "op": "return", + "stack_out": [] }, "78": { "block": "main_return_contact_route@6", @@ -166,7 +201,8 @@ ] }, "93": { - "op": "return" + "op": "return", + "stack_out": [] }, "94": { "block": "main_add_contact_info_route@5", @@ -276,7 +312,8 @@ ] }, "113": { - "op": "return" + "op": "return", + "stack_out": [] }, "114": { "block": "main_bare_routing@7", @@ -294,20 +331,40 @@ "stack_out": [] }, "119": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%16#0" + ], + "stack_out": [ + "tmp%16#0" + ] }, "121": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%17#0" + ], + "stack_out": [ + "tmp%17#0" + ] }, "122": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "123": { - "op": "intc_1 // 1" + "op": "intc_1 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "124": { - "op": "return" + "op": "return", + "stack_out": [] }, "125": { "subroutine": "smart_contracts.arc4_types.contract.Arc4Tuple.add_contact_info", @@ -606,73 +663,68 @@ ] }, "200": { - "op": "dup", - "defined_out": [ - "phone#0", - "phone#0 (copy)" - ], - "stack_out": [ - "phone#0", - "phone#0 (copy)" - ] - }, - "201": { "op": "pushbytes 0x00000000211d1ae3", "defined_out": [ "0x00000000211d1ae3", - "phone#0", - "phone#0 (copy)" + "phone#0" ], "stack_out": [ "phone#0", - "phone#0 (copy)", "0x00000000211d1ae3" ] }, - "211": { + "210": { "op": "b==", "defined_out": [ - "phone#0", "tmp%4#0" ], "stack_out": [ - "phone#0", "tmp%4#0" ] }, - "212": { + "211": { "op": "assert", - "stack_out": [ - "phone#0" - ] + "stack_out": [] }, - "213": { + "212": { "op": "bytec_0 // \"contact_info\"", "defined_out": [ - "\"contact_info\"", - "phone#0" + "\"contact_info\"" ], "stack_out": [ - "phone#0", "\"contact_info\"" ] }, - "214": { + "213": { "op": "frame_dig -1", "stack_out": [ - "phone#0", "\"contact_info\"", "contact#0 (copy)" ] }, - "216": { + "215": { "op": "app_global_put", + "stack_out": [] + }, + "216": { + "op": "frame_dig -1", "stack_out": [ - "phone#0" + "contact#0 (copy)" ] }, - "217": { - "op": "btoi", + "218": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "contact#0 (copy)" + ], + "stack_out": [ + "contact#0 (copy)", + "4" + ] + }, + "220": { + "op": "extract_uint64", "defined_out": [ "tmp%5#0" ], @@ -680,18 +732,15 @@ "tmp%5#0" ] }, - "218": { + "221": { "retsub": true, "op": "retsub" }, - "219": { + "222": { "subroutine": "smart_contracts.arc4_types.contract.Arc4Tuple.return_contact", "params": {}, "block": "return_contact", "stack_in": [], - "op": "proto 0 1" - }, - "222": { "op": "intc_0 // 0", "defined_out": [ "0" diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.approval.teal b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.approval.teal index 17906f6..e26b2d3 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.approval.teal +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.approval.teal @@ -126,7 +126,6 @@ add_contact_info: assert // smart_contracts/arc4_types/contract.py:293 // assert phone == arc4.UInt64(555_555_555) - dup pushbytes 0x00000000211d1ae3 b== assert @@ -137,16 +136,18 @@ add_contact_info: app_global_put // smart_contracts/arc4_types/contract.py:297 // return phone.native - btoi + frame_dig -1 + // smart_contracts/arc4_types/contract.py:289 + // name, email, phone = contact.native + pushint 4 // 4 + // smart_contracts/arc4_types/contract.py:297 + // return phone.native + extract_uint64 retsub // smart_contracts.arc4_types.contract.Arc4Tuple.return_contact() -> bytes: return_contact: - // smart_contracts/arc4_types/contract.py:299-300 - // @abimethod() - // def return_contact(self) -> arc4.Tuple[arc4.String, arc4.String, arc4.UInt64]: - proto 0 1 // smart_contracts/arc4_types/contract.py:303 // return self.contact_info.value intc_0 // 0 diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.arc56.json b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.arc56.json index 08ca62e..4f938a7 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Tuple.arc56.json @@ -125,19 +125,19 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHVwbGUuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJjb250YWN0X2luZm8iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4MgogICAgLy8gc2VsZi5jb250YWN0X2luZm8gPSBHbG9iYWxTdGF0ZSgKICAgIGJ5dGVjXzAgLy8gImNvbnRhY3RfaW5mbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4MwogICAgLy8gY29udGFjdF9pbmZvX3R1cGxlKChhcmM0LlN0cmluZygiIiksIGFyYzQuU3RyaW5nKCIiKSwgYXJjNC5VSW50NjQoMCkpKQogICAgcHVzaGJ5dGVzIDB4MDAwYzAwMGUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4Mi0yODQKICAgIC8vIHNlbGYuY29udGFjdF9pbmZvID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgY29udGFjdF9pbmZvX3R1cGxlKChhcmM0LlN0cmluZygiIiksIGFyYzQuU3RyaW5nKCIiKSwgYXJjNC5VSW50NjQoMCkpKQogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjc5CiAgICAvLyBjbGFzcyBBcmM0VHVwbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4N2Y2OGMxM2YgMHgyODhkYzc1ZiAvLyBtZXRob2QgImFkZF9jb250YWN0X2luZm8oKHN0cmluZyxzdHJpbmcsdWludDY0KSl1aW50NjQiLCBtZXRob2QgInJldHVybl9jb250YWN0KCkoc3RyaW5nLHN0cmluZyx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9hZGRfY29udGFjdF9pbmZvX3JvdXRlQDUgbWFpbl9yZXR1cm5fY29udGFjdF9yb3V0ZUA2CgptYWluX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gY2xhc3MgQXJjNFR1cGxlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX3JldHVybl9jb250YWN0X3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJldHVybl9jb250YWN0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9jb250YWN0X2luZm9fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gY2xhc3MgQXJjNFR1cGxlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyODYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhZGRfY29udGFjdF9pbmZvCiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjc5CiAgICAvLyBjbGFzcyBBcmM0VHVwbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAOQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHVwbGUuYWRkX2NvbnRhY3RfaW5mbyhjb250YWN0OiBieXRlcykgLT4gdWludDY0OgphZGRfY29udGFjdF9pbmZvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjg2LTI4NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYWRkX2NvbnRhY3RfaW5mbyhzZWxmLCBjb250YWN0OiBjb250YWN0X2luZm9fdHVwbGUpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjg5CiAgICAvLyBuYW1lLCBlbWFpbCwgcGhvbmUgPSBjb250YWN0Lm5hdGl2ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjkxCiAgICAvLyBhc3NlcnQgbmFtZS5uYXRpdmUgPT0gIkFsaWNlIgogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0IDIgMAogICAgcHVzaGJ5dGVzICJBbGljZSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI5MgogICAgLy8gYXNzZXJ0IGVtYWlsLm5hdGl2ZSA9PSAiYWxpY2VAc29tZXRoaW5nLmNvbSIKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBwdXNoYnl0ZXMgImFsaWNlQHNvbWV0aGluZy5jb20iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTMKICAgIC8vIGFzc2VydCBwaG9uZSA9PSBhcmM0LlVJbnQ2NCg1NTVfNTU1XzU1NSkKICAgIGR1cAogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAyMTFkMWFlMwogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI5NQogICAgLy8gc2VsZi5jb250YWN0X2luZm8udmFsdWUgPSBjb250YWN0CiAgICBieXRlY18wIC8vICJjb250YWN0X2luZm8iCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTcKICAgIC8vIHJldHVybiBwaG9uZS5uYXRpdmUKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRUdXBsZS5yZXR1cm5fY29udGFjdCgpIC0+IGJ5dGVzOgpyZXR1cm5fY29udGFjdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI5OS0zMDAKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIHJldHVybl9jb250YWN0KHNlbGYpIC0+IGFyYzQuVHVwbGVbYXJjNC5TdHJpbmcsIGFyYzQuU3RyaW5nLCBhcmM0LlVJbnQ2NF06CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjMwMwogICAgLy8gcmV0dXJuIHNlbGYuY29udGFjdF9pbmZvLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiY29udGFjdF9pbmZvIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvbnRhY3RfaW5mbyBleGlzdHMKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHVwbGUuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJjb250YWN0X2luZm8iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4MgogICAgLy8gc2VsZi5jb250YWN0X2luZm8gPSBHbG9iYWxTdGF0ZSgKICAgIGJ5dGVjXzAgLy8gImNvbnRhY3RfaW5mbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4MwogICAgLy8gY29udGFjdF9pbmZvX3R1cGxlKChhcmM0LlN0cmluZygiIiksIGFyYzQuU3RyaW5nKCIiKSwgYXJjNC5VSW50NjQoMCkpKQogICAgcHVzaGJ5dGVzIDB4MDAwYzAwMGUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4Mi0yODQKICAgIC8vIHNlbGYuY29udGFjdF9pbmZvID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgY29udGFjdF9pbmZvX3R1cGxlKChhcmM0LlN0cmluZygiIiksIGFyYzQuU3RyaW5nKCIiKSwgYXJjNC5VSW50NjQoMCkpKQogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjc5CiAgICAvLyBjbGFzcyBBcmM0VHVwbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4N2Y2OGMxM2YgMHgyODhkYzc1ZiAvLyBtZXRob2QgImFkZF9jb250YWN0X2luZm8oKHN0cmluZyxzdHJpbmcsdWludDY0KSl1aW50NjQiLCBtZXRob2QgInJldHVybl9jb250YWN0KCkoc3RyaW5nLHN0cmluZyx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9hZGRfY29udGFjdF9pbmZvX3JvdXRlQDUgbWFpbl9yZXR1cm5fY29udGFjdF9yb3V0ZUA2CgptYWluX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gY2xhc3MgQXJjNFR1cGxlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX3JldHVybl9jb250YWN0X3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJldHVybl9jb250YWN0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9jb250YWN0X2luZm9fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gY2xhc3MgQXJjNFR1cGxlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyODYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhZGRfY29udGFjdF9pbmZvCiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjc5CiAgICAvLyBjbGFzcyBBcmM0VHVwbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAOQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHVwbGUuYWRkX2NvbnRhY3RfaW5mbyhjb250YWN0OiBieXRlcykgLT4gdWludDY0OgphZGRfY29udGFjdF9pbmZvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjg2LTI4NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYWRkX2NvbnRhY3RfaW5mbyhzZWxmLCBjb250YWN0OiBjb250YWN0X2luZm9fdHVwbGUpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjg5CiAgICAvLyBuYW1lLCBlbWFpbCwgcGhvbmUgPSBjb250YWN0Lm5hdGl2ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjkxCiAgICAvLyBhc3NlcnQgbmFtZS5uYXRpdmUgPT0gIkFsaWNlIgogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0IDIgMAogICAgcHVzaGJ5dGVzICJBbGljZSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI5MgogICAgLy8gYXNzZXJ0IGVtYWlsLm5hdGl2ZSA9PSAiYWxpY2VAc29tZXRoaW5nLmNvbSIKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBwdXNoYnl0ZXMgImFsaWNlQHNvbWV0aGluZy5jb20iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTMKICAgIC8vIGFzc2VydCBwaG9uZSA9PSBhcmM0LlVJbnQ2NCg1NTVfNTU1XzU1NSkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMjExZDFhZTMKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTUKICAgIC8vIHNlbGYuY29udGFjdF9pbmZvLnZhbHVlID0gY29udGFjdAogICAgYnl0ZWNfMCAvLyAiY29udGFjdF9pbmZvIgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjk3CiAgICAvLyByZXR1cm4gcGhvbmUubmF0aXZlCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4OQogICAgLy8gbmFtZSwgZW1haWwsIHBob25lID0gY29udGFjdC5uYXRpdmUKICAgIHB1c2hpbnQgNCAvLyA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTcKICAgIC8vIHJldHVybiBwaG9uZS5uYXRpdmUKICAgIGV4dHJhY3RfdWludDY0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHVwbGUucmV0dXJuX2NvbnRhY3QoKSAtPiBieXRlczoKcmV0dXJuX2NvbnRhY3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTozMDMKICAgIC8vIHJldHVybiBzZWxmLmNvbnRhY3RfaW5mby52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImNvbnRhY3RfaW5mbyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jb250YWN0X2luZm8gZXhpc3RzCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { - "approval": "CiACAAEmAgxjb250YWN0X2luZm8EFR98dTEYQAAUKIAQAAwADgAAAAAAAAAAAAAAAGcxG0EAO4ICBH9owT8EKI3HXzYaAI4CABIAAiJDMRkURDEYRIgAgylMULAjQzEZFEQxGEQ2GgGIABIWKUxQsCNDMRlA/9UxGBREI0OKAQGL/yJZi/+BAlmL/08CSwJSi/8Vi/9PA08CUov/VwQITwJXAgCABUFsaWNlEkRMVwIAgBNhbGljZUBzb21ldGhpbmcuY29tEkRJgAgAAAAAIR0a46hEKIv/ZxeJigABIihlRIk=", + "approval": "CiACAAEmAgxjb250YWN0X2luZm8EFR98dTEYQAAUKIAQAAwADgAAAAAAAAAAAAAAAGcxG0EAO4ICBH9owT8EKI3HXzYaAI4CABIAAiJDMRkURDEYRIgAhilMULAjQzEZFEQxGEQ2GgGIABIWKUxQsCNDMRlA/9UxGBREI0OKAQGL/yJZi/+BAlmL/08CSwJSi/8Vi/9PA08CUov/VwQITwJXAgCABUFsaWNlEkRMVwIAgBNhbGljZUBzb21ldGhpbmcuY29tEkSACAAAAAAhHRrjqEQoi/9ni/+BBFuJIihlRIk=", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Types.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Types.approval.puya.map index cf689fc..52cc393 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Types.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Types.approval.puya.map @@ -30,13 +30,48 @@ "stack_out": [] }, "17": { - "op": "pushbytess 0x05943917 0x845b0685 0xead170cf 0xdcb6897f 0xfddcf44f 0xf2ec8e58 // method \"add_arc4_uint64(uint64,uint64)uint64\", method \"add_arc4_uint_n(uint8,uint16,uint32,uint64)uint64\", method \"add_arc4_biguint_n(uint128,uint256,uint512)uint512\", method \"arc4_byte(byte)byte\", method \"arc4_address_properties(address)uint64\", method \"arc4_address_return(address)address\"" + "op": "pushbytess 0x05943917 0x845b0685 0xead170cf 0xdcb6897f 0xfddcf44f 0xf2ec8e58 // method \"add_arc4_uint64(uint64,uint64)uint64\", method \"add_arc4_uint_n(uint8,uint16,uint32,uint64)uint64\", method \"add_arc4_biguint_n(uint128,uint256,uint512)uint512\", method \"arc4_byte(byte)byte\", method \"arc4_address_properties(address)uint64\", method \"arc4_address_return(address)address\"", + "defined_out": [ + "Method(add_arc4_biguint_n(uint128,uint256,uint512)uint512)", + "Method(add_arc4_uint64(uint64,uint64)uint64)", + "Method(add_arc4_uint_n(uint8,uint16,uint32,uint64)uint64)", + "Method(arc4_address_properties(address)uint64)", + "Method(arc4_address_return(address)address)", + "Method(arc4_byte(byte)byte)" + ], + "stack_out": [ + "Method(add_arc4_uint64(uint64,uint64)uint64)", + "Method(add_arc4_uint_n(uint8,uint16,uint32,uint64)uint64)", + "Method(add_arc4_biguint_n(uint128,uint256,uint512)uint512)", + "Method(arc4_byte(byte)byte)", + "Method(arc4_address_properties(address)uint64)", + "Method(arc4_address_return(address)address)" + ] }, "49": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(add_arc4_biguint_n(uint128,uint256,uint512)uint512)", + "Method(add_arc4_uint64(uint64,uint64)uint64)", + "Method(add_arc4_uint_n(uint8,uint16,uint32,uint64)uint64)", + "Method(arc4_address_properties(address)uint64)", + "Method(arc4_address_return(address)address)", + "Method(arc4_byte(byte)byte)", + "tmp%2#0" + ], + "stack_out": [ + "Method(add_arc4_uint64(uint64,uint64)uint64)", + "Method(add_arc4_uint_n(uint8,uint16,uint32,uint64)uint64)", + "Method(add_arc4_biguint_n(uint128,uint256,uint512)uint512)", + "Method(arc4_byte(byte)byte)", + "Method(arc4_address_properties(address)uint64)", + "Method(arc4_address_return(address)address)", + "tmp%2#0" + ] }, "52": { - "op": "match main_add_arc4_uint64_route@3 main_add_arc4_uint_n_route@4 main_add_arc4_biguint_n_route@5 main_arc4_byte_route@6 main_arc4_address_properties_route@7 main_arc4_address_return_route@8" + "op": "match main_add_arc4_uint64_route@3 main_add_arc4_uint_n_route@4 main_add_arc4_biguint_n_route@5 main_arc4_byte_route@6 main_arc4_address_properties_route@7 main_arc4_address_return_route@8", + "stack_out": [] }, "66": { "block": "main_after_if_else@15", @@ -50,26 +85,27 @@ ] }, "68": { - "op": "return" + "op": "return", + "stack_out": [] }, "69": { "block": "main_arc4_address_return_route@8", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%43#0" + "tmp%32#0" ], "stack_out": [ - "tmp%43#0" + "tmp%32#0" ] }, "71": { "op": "!", "defined_out": [ - "tmp%44#0" + "tmp%33#0" ], "stack_out": [ - "tmp%44#0" + "tmp%33#0" ] }, "72": { @@ -80,10 +116,10 @@ "73": { "op": "txn ApplicationID", "defined_out": [ - "tmp%45#0" + "tmp%34#0" ], "stack_out": [ - "tmp%45#0" + "tmp%34#0" ] }, "75": { @@ -92,7 +128,13 @@ "stack_out": [] }, "76": { - "op": "bytec_0 // 0x151f7c75" + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75" + ], + "stack_out": [ + "0x151f7c75" + ] }, "77": { "op": "txna ApplicationArgs 1", @@ -108,10 +150,10 @@ "80": { "op": "concat", "defined_out": [ - "tmp%49#0" + "tmp%37#0" ], "stack_out": [ - "tmp%49#0" + "tmp%37#0" ] }, "81": { @@ -128,26 +170,27 @@ ] }, "83": { - "op": "return" + "op": "return", + "stack_out": [] }, "84": { "block": "main_arc4_address_properties_route@7", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%37#0" + "tmp%27#0" ], "stack_out": [ - "tmp%37#0" + "tmp%27#0" ] }, "86": { "op": "!", "defined_out": [ - "tmp%38#0" + "tmp%28#0" ], "stack_out": [ - "tmp%38#0" + "tmp%28#0" ] }, "87": { @@ -158,10 +201,10 @@ "88": { "op": "txn ApplicationID", "defined_out": [ - "tmp%39#0" + "tmp%29#0" ], "stack_out": [ - "tmp%39#0" + "tmp%29#0" ] }, "90": { @@ -172,10 +215,10 @@ "91": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%41#0" + "reinterpret_bytes[32]%1#0" ], "stack_out": [ - "tmp%41#0" + "reinterpret_bytes[32]%1#0" ] }, "94": { @@ -218,10 +261,10 @@ "100": { "op": "concat", "defined_out": [ - "tmp%42#0" + "tmp%31#0" ], "stack_out": [ - "tmp%42#0" + "tmp%31#0" ] }, "101": { @@ -238,26 +281,27 @@ ] }, "103": { - "op": "return" + "op": "return", + "stack_out": [] }, "104": { "block": "main_arc4_byte_route@6", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%30#0" + "tmp%21#0" ], "stack_out": [ - "tmp%30#0" + "tmp%21#0" ] }, "106": { "op": "!", "defined_out": [ - "tmp%31#0" + "tmp%22#0" ], "stack_out": [ - "tmp%31#0" + "tmp%22#0" ] }, "107": { @@ -268,10 +312,10 @@ "108": { "op": "txn ApplicationID", "defined_out": [ - "tmp%32#0" + "tmp%23#0" ], "stack_out": [ - "tmp%32#0" + "tmp%23#0" ] }, "110": { @@ -282,30 +326,30 @@ "111": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%34#0" + "reinterpret_bytes[1]%1#0" ], "stack_out": [ - "tmp%34#0" + "reinterpret_bytes[1]%1#0" ] }, "114": { "callsub": "smart_contracts.arc4_types.contract.Arc4Types.arc4_byte", "op": "callsub arc4_byte", "defined_out": [ - "tmp%35#0" + "tmp%25#0" ], "stack_out": [ - "tmp%35#0" + "tmp%25#0" ] }, "117": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "tmp%35#0" + "tmp%25#0" ], "stack_out": [ - "tmp%35#0", + "tmp%25#0", "0x151f7c75" ] }, @@ -313,16 +357,16 @@ "op": "swap", "stack_out": [ "0x151f7c75", - "tmp%35#0" + "tmp%25#0" ] }, "119": { "op": "concat", "defined_out": [ - "tmp%36#0" + "tmp%26#0" ], "stack_out": [ - "tmp%36#0" + "tmp%26#0" ] }, "120": { @@ -339,26 +383,27 @@ ] }, "122": { - "op": "return" + "op": "return", + "stack_out": [] }, "123": { "block": "main_add_arc4_biguint_n_route@5", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%21#0" + "tmp%15#0" ], "stack_out": [ - "tmp%21#0" + "tmp%15#0" ] }, "125": { "op": "!", "defined_out": [ - "tmp%22#0" + "tmp%16#0" ], "stack_out": [ - "tmp%22#0" + "tmp%16#0" ] }, "126": { @@ -369,10 +414,10 @@ "127": { "op": "txn ApplicationID", "defined_out": [ - "tmp%23#0" + "tmp%17#0" ], "stack_out": [ - "tmp%23#0" + "tmp%17#0" ] }, "129": { @@ -381,42 +426,56 @@ "stack_out": [] }, "130": { - "op": "txna ApplicationArgs 1" + "op": "txna ApplicationArgs 1", + "defined_out": [ + "reinterpret_bytes[16]%0#0" + ], + "stack_out": [ + "reinterpret_bytes[16]%0#0" + ] }, "133": { - "op": "txna ApplicationArgs 2" + "op": "txna ApplicationArgs 2", + "defined_out": [ + "reinterpret_bytes[16]%0#0", + "reinterpret_bytes[32]%0#0" + ], + "stack_out": [ + "reinterpret_bytes[16]%0#0", + "reinterpret_bytes[32]%0#0" + ] }, "136": { "op": "txna ApplicationArgs 3", "defined_out": [ - "tmp%25#0", - "tmp%26#0", - "tmp%27#0" + "reinterpret_bytes[16]%0#0", + "reinterpret_bytes[32]%0#0", + "reinterpret_bytes[64]%0#0" ], "stack_out": [ - "tmp%25#0", - "tmp%26#0", - "tmp%27#0" + "reinterpret_bytes[16]%0#0", + "reinterpret_bytes[32]%0#0", + "reinterpret_bytes[64]%0#0" ] }, "139": { "callsub": "smart_contracts.arc4_types.contract.Arc4Types.add_arc4_biguint_n", "op": "callsub add_arc4_biguint_n", "defined_out": [ - "tmp%28#0" + "tmp%19#0" ], "stack_out": [ - "tmp%28#0" + "tmp%19#0" ] }, "142": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "tmp%28#0" + "tmp%19#0" ], "stack_out": [ - "tmp%28#0", + "tmp%19#0", "0x151f7c75" ] }, @@ -424,16 +483,16 @@ "op": "swap", "stack_out": [ "0x151f7c75", - "tmp%28#0" + "tmp%19#0" ] }, "144": { "op": "concat", "defined_out": [ - "tmp%29#0" + "tmp%20#0" ], "stack_out": [ - "tmp%29#0" + "tmp%20#0" ] }, "145": { @@ -450,26 +509,27 @@ ] }, "147": { - "op": "return" + "op": "return", + "stack_out": [] }, "148": { "block": "main_add_arc4_uint_n_route@4", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%11#0" + "tmp%9#0" ], "stack_out": [ - "tmp%11#0" + "tmp%9#0" ] }, "150": { "op": "!", "defined_out": [ - "tmp%12#0" + "tmp%10#0" ], "stack_out": [ - "tmp%12#0" + "tmp%10#0" ] }, "151": { @@ -480,10 +540,10 @@ "152": { "op": "txn ApplicationID", "defined_out": [ - "tmp%13#0" + "tmp%11#0" ], "stack_out": [ - "tmp%13#0" + "tmp%11#0" ] }, "154": { @@ -492,47 +552,71 @@ "stack_out": [] }, "155": { - "op": "txna ApplicationArgs 1" + "op": "txna ApplicationArgs 1", + "defined_out": [ + "reinterpret_bytes[1]%0#0" + ], + "stack_out": [ + "reinterpret_bytes[1]%0#0" + ] }, "158": { - "op": "txna ApplicationArgs 2" + "op": "txna ApplicationArgs 2", + "defined_out": [ + "reinterpret_bytes[1]%0#0", + "reinterpret_bytes[2]%0#0" + ], + "stack_out": [ + "reinterpret_bytes[1]%0#0", + "reinterpret_bytes[2]%0#0" + ] }, "161": { - "op": "txna ApplicationArgs 3" + "op": "txna ApplicationArgs 3", + "defined_out": [ + "reinterpret_bytes[1]%0#0", + "reinterpret_bytes[2]%0#0", + "reinterpret_bytes[4]%0#0" + ], + "stack_out": [ + "reinterpret_bytes[1]%0#0", + "reinterpret_bytes[2]%0#0", + "reinterpret_bytes[4]%0#0" + ] }, "164": { "op": "txna ApplicationArgs 4", "defined_out": [ - "tmp%15#0", - "tmp%16#0", - "tmp%17#0", - "tmp%18#0" + "reinterpret_bytes[1]%0#0", + "reinterpret_bytes[2]%0#0", + "reinterpret_bytes[4]%0#0", + "reinterpret_bytes[8]%2#0" ], "stack_out": [ - "tmp%15#0", - "tmp%16#0", - "tmp%17#0", - "tmp%18#0" + "reinterpret_bytes[1]%0#0", + "reinterpret_bytes[2]%0#0", + "reinterpret_bytes[4]%0#0", + "reinterpret_bytes[8]%2#0" ] }, "167": { "callsub": "smart_contracts.arc4_types.contract.Arc4Types.add_arc4_uint_n", "op": "callsub add_arc4_uint_n", "defined_out": [ - "tmp%19#0" + "tmp%13#0" ], "stack_out": [ - "tmp%19#0" + "tmp%13#0" ] }, "170": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "tmp%19#0" + "tmp%13#0" ], "stack_out": [ - "tmp%19#0", + "tmp%13#0", "0x151f7c75" ] }, @@ -540,16 +624,16 @@ "op": "swap", "stack_out": [ "0x151f7c75", - "tmp%19#0" + "tmp%13#0" ] }, "172": { "op": "concat", "defined_out": [ - "tmp%20#0" + "tmp%14#0" ], "stack_out": [ - "tmp%20#0" + "tmp%14#0" ] }, "173": { @@ -566,7 +650,8 @@ ] }, "175": { - "op": "return" + "op": "return", + "stack_out": [] }, "176": { "block": "main_add_arc4_uint64_route@3", @@ -608,37 +693,43 @@ "stack_out": [] }, "183": { - "op": "txna ApplicationArgs 1" + "op": "txna ApplicationArgs 1", + "defined_out": [ + "reinterpret_bytes[8]%0#0" + ], + "stack_out": [ + "reinterpret_bytes[8]%0#0" + ] }, "186": { "op": "txna ApplicationArgs 2", "defined_out": [ - "tmp%7#0", - "tmp%8#0" + "reinterpret_bytes[8]%0#0", + "reinterpret_bytes[8]%1#0" ], "stack_out": [ - "tmp%7#0", - "tmp%8#0" + "reinterpret_bytes[8]%0#0", + "reinterpret_bytes[8]%1#0" ] }, "189": { "callsub": "smart_contracts.arc4_types.contract.Arc4Types.add_arc4_uint64", "op": "callsub add_arc4_uint64", "defined_out": [ - "tmp%9#0" + "tmp%7#0" ], "stack_out": [ - "tmp%9#0" + "tmp%7#0" ] }, "192": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "tmp%9#0" + "tmp%7#0" ], "stack_out": [ - "tmp%9#0", + "tmp%7#0", "0x151f7c75" ] }, @@ -646,16 +737,16 @@ "op": "swap", "stack_out": [ "0x151f7c75", - "tmp%9#0" + "tmp%7#0" ] }, "194": { "op": "concat", "defined_out": [ - "tmp%10#0" + "tmp%8#0" ], "stack_out": [ - "tmp%10#0" + "tmp%8#0" ] }, "195": { @@ -672,17 +763,18 @@ ] }, "197": { - "op": "return" + "op": "return", + "stack_out": [] }, "198": { "block": "main_bare_routing@11", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%50#0" + "tmp%38#0" ], "stack_out": [ - "tmp%50#0" + "tmp%38#0" ] }, "200": { @@ -690,20 +782,40 @@ "stack_out": [] }, "203": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%39#0" + ], + "stack_out": [ + "tmp%39#0" + ] }, "205": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%40#0" + ], + "stack_out": [ + "tmp%40#0" + ] }, "206": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "207": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "208": { - "op": "return" + "op": "return", + "stack_out": [] }, "209": { "subroutine": "smart_contracts.arc4_types.contract.Arc4Types.add_arc4_uint64", diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Types.arc56.json b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Types.arc56.json index 5fc30d3..1aae300 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Types.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/Arc4Types.arc56.json @@ -254,8 +254,8 @@ "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_dynamic_array_client.py b/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_dynamic_array_client.py index 1865397..582a3c1 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_dynamic_array_client.py +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_dynamic_array_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "name"}], "name": "goodbye", "returns": {"type": "string[]"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "name"}], "name": "hello", "returns": {"type": "string"}, "desc": "Dynamic Arrays have variable size and capacity.\nThey are similar to native Python lists because they can also append, extend, and pop.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "arc4_dynamic_bytes", "returns": {"type": "byte[]"}, "desc": "arc4.DynamicBytes is essentially an arc4.DynamicArray[arc4.Byte] with additional convenience methods", "events": [], "readonly": false, "recommendations": {}}], "name": "Arc4DynamicArray", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiADAgABJgIEFR98dQIAAjEbQQBkggMEitEqKwQCvs4RBJXWQRY2GgCOAwA1ABoAAiNDMRkURDEYRIAMFR98dQAGAP//qrv/sCRDMRkURDEYRDYaAYgBBEkVFlcGAkxQKExQsCRDMRkURDEYRDYaAYgAzihMULAkQzEZQP+zMRgURCRDigECi/8jWSQJSSILi/9XAgBJSwJZSwEVSwJLAk8CUksCI0sFUk8EIghPBExPBFJQSwIWVwYCTE8DI4gAOlCJigMBi/0jWUmL/whMIgsiCEsBFlcGAov9IksDUov/IguvUIv9FYv9TwRPAlJQi/5QTwIjiAACUImKAwGL/iILSYv/IgtJTgKL/UxZi/9NiwGLAAxBACOLAkkWVwYCi/2LAUlOBE8CXUmM/UsBWSIICIwCIgiMAUL/1Yv9jACJigEBgA8ABAAPAAlHb29kIGJ5ZSCL/1ApTFCJigEBi/8VgQQIFlcGAoACAARMUIv/UIADAAEhUClMUEkjWUxXAgBLASILSwEVUoAMAAEAAgAGSGVsbG8gTE8CiP8lRwKI/uFFAYj+3EUBgAgABndvcmxkISSI/wtIgABMI1kjiwOLAgxBACWLAFcCAIsDSU4CIgtLAUxZSlkiCFhXAgCLAUxQjAEkCIwDQv/TiwGMAIk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAyIDAgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAwMgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTY4CiAgICAvLyBjbGFzcyBBcmM0RHluYW1pY0FycmF5KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAogICAgcHVzaGJ5dGVzcyAweDhhZDEyYTJiIDB4MDJiZWNlMTEgMHg5NWQ2NDExNiAvLyBtZXRob2QgImdvb2RieWUoc3RyaW5nKXN0cmluZ1tdIiwgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIiwgbWV0aG9kICJhcmM0X2R5bmFtaWNfYnl0ZXMoKWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ29vZGJ5ZV9yb3V0ZUAzIG1haW5faGVsbG9fcm91dGVANCBtYWluX2FyYzRfZHluYW1pY19ieXRlc19yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNjgKICAgIC8vIGNsYXNzIEFyYzREeW5hbWljQXJyYXkoQVJDNENvbnRyYWN0KToKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fYXJjNF9keW5hbWljX2J5dGVzX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMDAtMjAxCiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfRFlOQU1JQ19CWVRFUwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwNjAwZmZmZmFhYmJmZgogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgptYWluX2hlbGxvX3JvdXRlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNjgKICAgIC8vIGNsYXNzIEFyYzREeW5hbWljQXJyYXkoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGhlbGxvCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKbWFpbl9nb29kYnllX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNzAKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTY4CiAgICAvLyBjbGFzcyBBcmM0RHluYW1pY0FycmF5KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNzAKICAgIC8vIEBhYmltZXRob2QKICAgIGNhbGxzdWIgZ29vZGJ5ZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gY2xhc3MgQXJjNER5bmFtaWNBcnJheShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X3BvcF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcykgLT4gYnl0ZXMsIGJ5dGVzOgpkeW5hbWljX2FycmF5X3BvcF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMSAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDEKICAgIC0KICAgIGR1cAogICAgaW50Y18wIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgZGlnIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBkaWcgMgogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZGlnIDIKICAgIGludGNfMSAvLyAwCiAgICBkaWcgNQogICAgc3Vic3RyaW5nMwogICAgdW5jb3ZlciA0CiAgICBpbnRjXzAgLy8gMgogICAgKwogICAgdW5jb3ZlciA0CiAgICBzd2FwCiAgICB1bmNvdmVyIDQKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICB1bmNvdmVyIDMKICAgIGludGNfMSAvLyAwCiAgICBjYWxsc3ViIHJlY2FsY3VsYXRlX2hlYWRfZm9yX2VsZW1lbnRzX3dpdGhfYnl0ZV9sZW5ndGhfaGVhZAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHN3YXAKICAgIGludGNfMCAvLyAyCiAgICAqCiAgICBpbnRjXzAgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMCAvLyAyCiAgICBkaWcgMwogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMgogICAgKgogICAgYnplcm8KICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaW50Y18xIC8vIDAKICAgIGNhbGxzdWIgcmVjYWxjdWxhdGVfaGVhZF9mb3JfZWxlbWVudHNfd2l0aF9ieXRlX2xlbmd0aF9oZWFkCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIF9wdXlhX2xpYi5hcmM0LnJlY2FsY3VsYXRlX2hlYWRfZm9yX2VsZW1lbnRzX3dpdGhfYnl0ZV9sZW5ndGhfaGVhZChhcnJheV9oZWFkX2FuZF90YWlsOiBieXRlcywgbGVuZ3RoOiB1aW50NjQsIHN0YXJ0X2F0X2luZGV4OiB1aW50NjQpIC0+IGJ5dGVzOgpyZWNhbGN1bGF0ZV9oZWFkX2Zvcl9lbGVtZW50c193aXRoX2J5dGVfbGVuZ3RoX2hlYWQ6CiAgICBwcm90byAzIDEKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDIKICAgICoKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMgogICAgKgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9kaWcgLTMKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgLTEKICAgIHNlbGVjdAoKcmVjYWxjdWxhdGVfaGVhZF9mb3JfZWxlbWVudHNfd2l0aF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMToKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYnogcmVjYWxjdWxhdGVfaGVhZF9mb3JfZWxlbWVudHNfd2l0aF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA0CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTMKICAgIGRpZyAxCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDIKICAgICsKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgaW50Y18wIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiByZWNhbGN1bGF0ZV9oZWFkX2Zvcl9lbGVtZW50c193aXRoX2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAxCgpyZWNhbGN1bGF0ZV9oZWFkX2Zvcl9lbGVtZW50c193aXRoX2J5dGVfbGVuZ3RoX2hlYWRfYWZ0ZXJfZm9yQDQ6CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFyYzRfdHlwZXMuY29udHJhY3QuQXJjNER5bmFtaWNBcnJheS5nb29kYnllKG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKZ29vZGJ5ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE3MC0xNzEKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBnb29kYnllKHNlbGYsIG5hbWU6IGFyYzQuU3RyaW5nKSAtPiBnb29kYnllOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNzIKICAgIC8vIGJ5ZSA9IGdvb2RieWUoYXJjNC5TdHJpbmcoIkdvb2QgYnllICIpLCBuYW1lKQogICAgcHVzaGJ5dGVzIDB4MDAwNDAwMGYwMDA5NDc2ZjZmNjQyMDYyNzk2NTIwCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTc0CiAgICAvLyByZXR1cm4gYnllCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0RHluYW1pY0FycmF5LmhlbGxvKG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKaGVsbG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNzYtMTc3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBoZWxsbyhzZWxmLCBuYW1lOiBhcmM0LlN0cmluZykgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxODQKICAgIC8vIGV4dGVuc2lvbiA9IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXShuYW1lLCBhcmM0LlN0cmluZygiISIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAwMTIxCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE4NQogICAgLy8gZHluYW1pY19zdHJpbmdfYXJyYXkuZXh0ZW5kKGV4dGVuc2lvbikKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMCAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxODIKICAgIC8vIGR5bmFtaWNfc3RyaW5nX2FycmF5ID0gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKGFyYzQuU3RyaW5nKCJIZWxsbyAiKSkKICAgIHB1c2hieXRlcyAweDAwMDEwMDAyMDAwNjQ4NjU2YzZjNmYyMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTg1CiAgICAvLyBkeW5hbWljX3N0cmluZ19hcnJheS5leHRlbmQoZXh0ZW5zaW9uKQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTg4CiAgICAvLyBjb3BpZWRfZHluYW1pY19zdHJpbmdfYXJyYXkucG9wKCkKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9wb3BfYnl0ZV9sZW5ndGhfaGVhZAogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxODkKICAgIC8vIGNvcGllZF9keW5hbWljX3N0cmluZ19hcnJheS5wb3AoKQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3BvcF9ieXRlX2xlbmd0aF9oZWFkCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gY29waWVkX2R5bmFtaWNfc3RyaW5nX2FycmF5LmFwcGVuZChhcmM0LlN0cmluZygid29ybGQhIikpCiAgICBwdXNoYnl0ZXMgMHgwMDA2Nzc2ZjcyNmM2NDIxCiAgICBpbnRjXzIgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE5MgogICAgLy8gZ3JlZXRpbmcgPSBTdHJpbmcoKQogICAgcHVzaGJ5dGVzICIiCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxOTMKICAgIC8vIGZvciB4IGluIGR5bmFtaWNfc3RyaW5nX2FycmF5OgogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMAoKaGVsbG9fZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTkzCiAgICAvLyBmb3IgeCBpbiBkeW5hbWljX3N0cmluZ19hcnJheToKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogaGVsbG9fYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18wIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTk0CiAgICAvLyBncmVldGluZyArPSB4Lm5hdGl2ZQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMQogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBoZWxsb19mb3JfaGVhZGVyQDEKCmhlbGxvX2FmdGVyX2ZvckA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTk2CiAgICAvLyByZXR1cm4gZ3JlZXRpbmcKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [54, 78, 105], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [129], "errorMessage": "can only call when creating"}, {"pc": [57, 81, 108], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "name"}], "name": "goodbye", "returns": {"type": "string[]"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "name"}], "name": "hello", "returns": {"type": "string"}, "desc": "Dynamic Arrays have variable size and capacity.\nThey are similar to native Python lists because they can also append, extend, and pop.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "arc4_dynamic_bytes", "returns": {"type": "byte[]"}, "desc": "arc4.DynamicBytes is essentially an arc4.DynamicArray[arc4.Byte] with additional convenience methods", "events": [], "readonly": false, "recommendations": {}}], "name": "Arc4DynamicArray", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiADAgABJgIEFR98dQIAAjEbQQBkggMEitEqKwQCvs4RBJXWQRY2GgCOAwA1ABoAAiNDMRkURDEYRIAMFR98dQAGAP//qrv/sCRDMRkURDEYRDYaAYgBBEkVFlcGAkxQKExQsCRDMRkURDEYRDYaAYgAzihMULAkQzEZQP+zMRgURCRDigECi/8jWSQJSSILi/9XAgBJSwJZSwEVSwJLAk8CUksCI0sFUk8EIghPBExPBFJQSwIWVwYCTE8DI4gAOlCJigMBi/0jWUmL/whMIgsiCEsBFlcGAov9IksDUov/IguvUIv9FYv9TwRPAlJQi/5QTwIjiAACUImKAwGL/iILSYv/IgtJTgKL/UxZi/9NiwGLAAxBACOLAkkWVwYCi/2LAUlOBE8CXUmM/UsBWSIICIwCIgiMAUL/1Yv9jACJigEBgA8ABAAPAAlHb29kIGJ5ZSCL/1ApTFCJigEBi/8VgQQIFlcGAoACAARMUIv/UIADAAEhUClMUEkjWUxXAgBLASILSwEVUoAMAAEAAgAGSGVsbG8gTE8CiP8lRwKI/uFFAYj+3EUBgAgABndvcmxkISSI/wtIgABMI1kjiwOLAgxBACWLAFcCAIsDSU4CIgtLAUxZSlkiCFhXAgCLAUxQjAEkCIwDQv/TiwGMAIk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAyIDAgMQogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAwMgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTY4CiAgICAvLyBjbGFzcyBBcmM0RHluYW1pY0FycmF5KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAOAogICAgcHVzaGJ5dGVzcyAweDhhZDEyYTJiIDB4MDJiZWNlMTEgMHg5NWQ2NDExNiAvLyBtZXRob2QgImdvb2RieWUoc3RyaW5nKXN0cmluZ1tdIiwgbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIiwgbWV0aG9kICJhcmM0X2R5bmFtaWNfYnl0ZXMoKWJ5dGVbXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fZ29vZGJ5ZV9yb3V0ZUAzIG1haW5faGVsbG9fcm91dGVANCBtYWluX2FyYzRfZHluYW1pY19ieXRlc19yb3V0ZUA1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNjgKICAgIC8vIGNsYXNzIEFyYzREeW5hbWljQXJyYXkoQVJDNENvbnRyYWN0KToKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fYXJjNF9keW5hbWljX2J5dGVzX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMDAtMjAxCiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfRFlOQU1JQ19CWVRFUwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwNjAwZmZmZmFhYmJmZgogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgptYWluX2hlbGxvX3JvdXRlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNjgKICAgIC8vIGNsYXNzIEFyYzREeW5hbWljQXJyYXkoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGhlbGxvCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKbWFpbl9nb29kYnllX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNzAKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTY4CiAgICAvLyBjbGFzcyBBcmM0RHluYW1pY0FycmF5KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNzAKICAgIC8vIEBhYmltZXRob2QKICAgIGNhbGxzdWIgZ29vZGJ5ZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gY2xhc3MgQXJjNER5bmFtaWNBcnJheShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X3BvcF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcykgLT4gYnl0ZXMsIGJ5dGVzOgpkeW5hbWljX2FycmF5X3BvcF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMSAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDEKICAgIC0KICAgIGR1cAogICAgaW50Y18wIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgZGlnIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBkaWcgMgogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZGlnIDIKICAgIGludGNfMSAvLyAwCiAgICBkaWcgNQogICAgc3Vic3RyaW5nMwogICAgdW5jb3ZlciA0CiAgICBpbnRjXzAgLy8gMgogICAgKwogICAgdW5jb3ZlciA0CiAgICBzd2FwCiAgICB1bmNvdmVyIDQKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICB1bmNvdmVyIDMKICAgIGludGNfMSAvLyAwCiAgICBjYWxsc3ViIHJlY2FsY3VsYXRlX2hlYWRfZm9yX2VsZW1lbnRzX3dpdGhfYnl0ZV9sZW5ndGhfaGVhZAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHN3YXAKICAgIGludGNfMCAvLyAyCiAgICAqCiAgICBpbnRjXzAgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMCAvLyAyCiAgICBkaWcgMwogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMgogICAgKgogICAgYnplcm8KICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaW50Y18xIC8vIDAKICAgIGNhbGxzdWIgcmVjYWxjdWxhdGVfaGVhZF9mb3JfZWxlbWVudHNfd2l0aF9ieXRlX2xlbmd0aF9oZWFkCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIF9wdXlhX2xpYi5hcmM0LnJlY2FsY3VsYXRlX2hlYWRfZm9yX2VsZW1lbnRzX3dpdGhfYnl0ZV9sZW5ndGhfaGVhZChhcnJheV9oZWFkX2FuZF90YWlsOiBieXRlcywgbGVuZ3RoOiB1aW50NjQsIHN0YXJ0X2F0X2luZGV4OiB1aW50NjQpIC0+IGJ5dGVzOgpyZWNhbGN1bGF0ZV9oZWFkX2Zvcl9lbGVtZW50c193aXRoX2J5dGVfbGVuZ3RoX2hlYWQ6CiAgICBwcm90byAzIDEKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDIKICAgICoKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMgogICAgKgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9kaWcgLTMKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgLTEKICAgIHNlbGVjdAoKcmVjYWxjdWxhdGVfaGVhZF9mb3JfZWxlbWVudHNfd2l0aF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMToKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYnogcmVjYWxjdWxhdGVfaGVhZF9mb3JfZWxlbWVudHNfd2l0aF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA0CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTMKICAgIGRpZyAxCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDIKICAgICsKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgaW50Y18wIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiByZWNhbGN1bGF0ZV9oZWFkX2Zvcl9lbGVtZW50c193aXRoX2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAxCgpyZWNhbGN1bGF0ZV9oZWFkX2Zvcl9lbGVtZW50c193aXRoX2J5dGVfbGVuZ3RoX2hlYWRfYWZ0ZXJfZm9yQDQ6CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFyYzRfdHlwZXMuY29udHJhY3QuQXJjNER5bmFtaWNBcnJheS5nb29kYnllKG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKZ29vZGJ5ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE3MC0xNzEKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBnb29kYnllKHNlbGYsIG5hbWU6IGFyYzQuU3RyaW5nKSAtPiBnb29kYnllOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNzIKICAgIC8vIGJ5ZSA9IGdvb2RieWUoYXJjNC5TdHJpbmcoIkdvb2QgYnllICIpLCBuYW1lKQogICAgcHVzaGJ5dGVzIDB4MDAwNDAwMGYwMDA5NDc2ZjZmNjQyMDYyNzk2NTIwCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTc0CiAgICAvLyByZXR1cm4gYnllCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0RHluYW1pY0FycmF5LmhlbGxvKG5hbWU6IGJ5dGVzKSAtPiBieXRlczoKaGVsbG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNzYtMTc3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBoZWxsbyhzZWxmLCBuYW1lOiBhcmM0LlN0cmluZykgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxODQKICAgIC8vIGV4dGVuc2lvbiA9IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXShuYW1lLCBhcmM0LlN0cmluZygiISIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAwMTIxCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE4NQogICAgLy8gZHluYW1pY19zdHJpbmdfYXJyYXkuZXh0ZW5kKGV4dGVuc2lvbikKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMCAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxODIKICAgIC8vIGR5bmFtaWNfc3RyaW5nX2FycmF5ID0gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKGFyYzQuU3RyaW5nKCJIZWxsbyAiKSkKICAgIHB1c2hieXRlcyAweDAwMDEwMDAyMDAwNjQ4NjU2YzZjNmYyMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTg1CiAgICAvLyBkeW5hbWljX3N0cmluZ19hcnJheS5leHRlbmQoZXh0ZW5zaW9uKQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTg4CiAgICAvLyBjb3BpZWRfZHluYW1pY19zdHJpbmdfYXJyYXkucG9wKCkKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9wb3BfYnl0ZV9sZW5ndGhfaGVhZAogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxODkKICAgIC8vIGNvcGllZF9keW5hbWljX3N0cmluZ19hcnJheS5wb3AoKQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3BvcF9ieXRlX2xlbmd0aF9oZWFkCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gY29waWVkX2R5bmFtaWNfc3RyaW5nX2FycmF5LmFwcGVuZChhcmM0LlN0cmluZygid29ybGQhIikpCiAgICBwdXNoYnl0ZXMgMHgwMDA2Nzc2ZjcyNmM2NDIxCiAgICBpbnRjXzIgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE5MgogICAgLy8gZ3JlZXRpbmcgPSBTdHJpbmcoKQogICAgcHVzaGJ5dGVzICIiCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxOTMKICAgIC8vIGZvciB4IGluIGR5bmFtaWNfc3RyaW5nX2FycmF5OgogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMAoKaGVsbG9fZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTkzCiAgICAvLyBmb3IgeCBpbiBkeW5hbWljX3N0cmluZ19hcnJheToKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogaGVsbG9fYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18wIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTk0CiAgICAvLyBncmVldGluZyArPSB4Lm5hdGl2ZQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMQogICAgaW50Y18yIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBoZWxsb19mb3JfaGVhZGVyQDEKCmhlbGxvX2FmdGVyX2ZvckA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTk2CiAgICAvLyByZXR1cm4gZ3JlZXRpbmcKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [54, 78, 105], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [129], "errorMessage": "can only call when creating"}, {"pc": [57, 81, 108], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_static_array_client.py b/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_static_array_client.py index c1ebe52..6174957 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_static_array_client.py +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_static_array_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "arc4_static_array", "returns": {"type": "void"}, "desc": "You can create a static array directly from the contract.", "events": [], "readonly": false, "recommendations": {}}], "name": "Arc4StaticArray", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiADAQQAMRtBABuABAoo57Y2GgCOAQACJEMxGRREMRhEiAANIkMxGUD/7TEYFEQiQ4oAACRJiwEjDEEAJ4sBSSMLgBAAAAABAAAACgAAAP8AAACATCNYF4sACIwAIgiMAUL/0osAgYoDEkSJ", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDQgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI1CiAgICAvLyBjbGFzcyBBcmM0U3RhdGljQXJyYXkoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CiAgICBwdXNoYnl0ZXMgMHgwYTI4ZTdiNiAvLyBtZXRob2QgImFyYzRfc3RhdGljX2FycmF5KCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9hcmM0X3N0YXRpY19hcnJheV9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxMjUKICAgIC8vIGNsYXNzIEFyYzRTdGF0aWNBcnJheShBUkM0Q29udHJhY3QpOgogICAgaW50Y18yIC8vIDAKICAgIHJldHVybgoKbWFpbl9hcmM0X3N0YXRpY19hcnJheV9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X3N0YXRpY19hcnJheQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjEyNQogICAgLy8gY2xhc3MgQXJjNFN0YXRpY0FycmF5KEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRTdGF0aWNBcnJheS5hcmM0X3N0YXRpY19hcnJheSgpIC0+IHZvaWQ6CmFyYzRfc3RhdGljX2FycmF5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI3LTEyOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYXJjNF9zdGF0aWNfYXJyYXkoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM2CiAgICAvLyB0b3RhbCA9IFVJbnQ2NCgwKQogICAgaW50Y18yIC8vIDAKICAgIGR1cAoKYXJjNF9zdGF0aWNfYXJyYXlfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM3CiAgICAvLyBmb3IgdWludDMyX2l0ZW0gaW4gc3RhdGljX3VpbnQzMl9hcnJheToKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzEgLy8gNAogICAgPAogICAgYnogYXJjNF9zdGF0aWNfYXJyYXlfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGludGNfMSAvLyA0CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxMzItMTM0CiAgICAvLyBzdGF0aWNfdWludDMyX2FycmF5ID0gYXJjNC5TdGF0aWNBcnJheSgKICAgIC8vICAgICBhcmM0LlVJbnQzMigxKSwgYXJjNC5VSW50MzIoMTApLCBhcmM0LlVJbnQzMigyNTUpLCBhcmM0LlVJbnQzMigxMjgpCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMTAwMDAwMDBhMDAwMDAwZmYwMDAwMDA4MAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM3CiAgICAvLyBmb3IgdWludDMyX2l0ZW0gaW4gc3RhdGljX3VpbnQzMl9hcnJheToKICAgIHN3YXAKICAgIGludGNfMSAvLyA0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gdG90YWwgKz0gdWludDMyX2l0ZW0ubmF0aXZlCiAgICBidG9pCiAgICBmcmFtZV9kaWcgMAogICAgKwogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGFyYzRfc3RhdGljX2FycmF5X2Zvcl9oZWFkZXJAMQoKYXJjNF9zdGF0aWNfYXJyYXlfYWZ0ZXJfZm9yQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNDAKICAgIC8vIGFzc2VydCB0b3RhbCA9PSAxICsgMTAgKyAyNTUgKyAxMjgKICAgIGZyYW1lX2RpZyAwCiAgICBwdXNoaW50IDM5NCAvLyAzOTQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [86], "errorMessage": "Index access is out of bounds"}, {"pc": [29], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [46], "errorMessage": "can only call when creating"}, {"pc": [32], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "arc4_static_array", "returns": {"type": "void"}, "desc": "You can create a static array directly from the contract.", "events": [], "readonly": false, "recommendations": {}}], "name": "Arc4StaticArray", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiADAQAEMRtBABuABAoo57Y2GgCOAQACI0MxGRREMRhEiAANIkMxGUD/7TEYFEQiQ4oAACNJiwEkDEEAJYsBSSQLgBAAAAABAAAACgAAAP8AAACATFqLAAiMACIIjAFC/9SLAIGKAxJEiQ==", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI1CiAgICAvLyBjbGFzcyBBcmM0U3RhdGljQXJyYXkoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2CiAgICBwdXNoYnl0ZXMgMHgwYTI4ZTdiNiAvLyBtZXRob2QgImFyYzRfc3RhdGljX2FycmF5KCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9hcmM0X3N0YXRpY19hcnJheV9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxMjUKICAgIC8vIGNsYXNzIEFyYzRTdGF0aWNBcnJheShBUkM0Q29udHJhY3QpOgogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9hcmM0X3N0YXRpY19hcnJheV9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X3N0YXRpY19hcnJheQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjEyNQogICAgLy8gY2xhc3MgQXJjNFN0YXRpY0FycmF5KEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRTdGF0aWNBcnJheS5hcmM0X3N0YXRpY19hcnJheSgpIC0+IHZvaWQ6CmFyYzRfc3RhdGljX2FycmF5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTI3LTEyOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYXJjNF9zdGF0aWNfYXJyYXkoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM2CiAgICAvLyB0b3RhbCA9IFVJbnQ2NCgwKQogICAgaW50Y18xIC8vIDAKICAgIGR1cAoKYXJjNF9zdGF0aWNfYXJyYXlfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM3CiAgICAvLyBmb3IgdWludDMyX2l0ZW0gaW4gc3RhdGljX3VpbnQzMl9hcnJheToKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzIgLy8gNAogICAgPAogICAgYnogYXJjNF9zdGF0aWNfYXJyYXlfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGludGNfMiAvLyA0CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxMzItMTM0CiAgICAvLyBzdGF0aWNfdWludDMyX2FycmF5ID0gYXJjNC5TdGF0aWNBcnJheSgKICAgIC8vICAgICBhcmM0LlVJbnQzMigxKSwgYXJjNC5VSW50MzIoMTApLCBhcmM0LlVJbnQzMigyNTUpLCBhcmM0LlVJbnQzMigxMjgpCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMTAwMDAwMDBhMDAwMDAwZmYwMDAwMDA4MAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTM4CiAgICAvLyB0b3RhbCArPSB1aW50MzJfaXRlbS5uYXRpdmUKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDMyCiAgICBmcmFtZV9kaWcgMAogICAgKwogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGFyYzRfc3RhdGljX2FycmF5X2Zvcl9oZWFkZXJAMQoKYXJjNF9zdGF0aWNfYXJyYXlfYWZ0ZXJfZm9yQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNDAKICAgIC8vIGFzc2VydCB0b3RhbCA9PSAxICsgMTAgKyAyNTUgKyAxMjgKICAgIGZyYW1lX2RpZyAwCiAgICBwdXNoaW50IDM5NCAvLyAzOTQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [29], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [46], "errorMessage": "can only call when creating"}, {"pc": [32], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_struct_client.py b/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_struct_client.py index 959b457..58972f3 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_struct_client.py +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_struct_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "task"}], "name": "add_todo", "returns": {"type": "(string,bool)[]"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "task"}], "name": "complete_todo", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "task"}], "name": "return_todo", "returns": {"type": "(string,bool)", "struct": "Todo"}, "events": [], "readonly": false, "recommendations": {}}], "name": "Arc4Struct", "state": {"keys": {"box": {}, "global": {"todos": {"key": "dG9kb3M=", "keyType": "AVMString", "valueType": "(string,bool)[]"}}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 1, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {"Todo": [{"name": "task", "type": "string"}, {"name": "completed", "type": "bool"}]}, "byteCode": {"approval": "CiADAAIBJgUFdG9kb3MAAgAABBUffHUCAAIxGEAAAygqZzEbQQBTggME9hiiVQQRz+LYBOqeLZ02GgCOAwAkABUAAiJDMRkURDEYRDYaAYgB5StMULAkQzEZFEQxGEQ2GgGIAN8kQzEZFEQxGEQ2GgGIABErTFCwJEMxGUD/xDEYFEQkQ4oBASJHAilHA4ADAAMAi/9QIihlRCoSQQAUJwRMUIACAAFMUChMZyIoZUSMAIkiKGVEJwRPAlCMAkkiWUlOAowDVwIAjAApjAEjC4wGIowEiwSLBgxBABuLAIsESU4CWSMIFlcGAosBTFCMASMIjARC/92LABWMBSKMBIsEIwxBAByLAosESU4CWYsFCBZXBgKLAUxQjAEjCIwEQv/diwMkCBZXBgKLAVCLAIsGiwVSUIsCSRUjTFJQKExnQv9oigEAIkkpRwQiKGVEIlkiiwiLBwxBANYiKGVESVcCAIsISU4DIwtJjANLAUxZTwIiWU8DJAhJTgRMSwEJSwMVTwIjC0mMAksETFlPAk1SSSJZSwEVUov/EkEAkyIoZURJVwIASYsDWUsCIllPBAlLAhVLA4sCWUpPBE1LBEsETwJSgRAkVE8FUQACSYwBF0mLCAkkCUsETwRPAk1JSwUJjAVLAhWMBEsFIk8GUk8DUE8ETwJPBFJQjAAjC4wGiwKLBgxBACCLAEmLAklOA1mLBAiLBQkWVwYCSwJMXYwAIwiMAkL/2IsBiwBQKExniYwIQv8cigEBKUkiRwIoZUQiWSKLBYsEDEEAayIoZURJVwIAiwVJTgMjC0mMAEsBTFlPAiJZTwMkCEmMBUxLAQlLAxVPAiMLSYwBSwRMWU8CTVJJIllLARVSi/8SQf+0IihlRElXAgBJiwBZTwIiWYsFCUsCFUsDiwFZTwJNUowCJIwDQv+NiwNEiwKMAIk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0U3RydWN0Ll9fYWxnb3B5X2VudHJ5cG9pbnRfd2l0aF9pbml0KCkgLT4gdWludDY0OgptYWluOgogICAgaW50Y2Jsb2NrIDAgMiAxCiAgICBieXRlY2Jsb2NrICJ0b2RvcyIgMHggMHgwMDAwIDB4MTUxZjdjNzUgMHgwMDAyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzQKICAgIC8vIHNlbGYudG9kb3MgPSBUb2RvcygpCiAgICBieXRlY18wIC8vICJ0b2RvcyIKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzEKICAgIC8vIGNsYXNzIEFyYzRTdHJ1Y3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CiAgICBwdXNoYnl0ZXNzIDB4ZjYxOGEyNTUgMHgxMWNmZTJkOCAweGVhOWUyZDlkIC8vIG1ldGhvZCAiYWRkX3RvZG8oc3RyaW5nKShzdHJpbmcsYm9vbClbXSIsIG1ldGhvZCAiY29tcGxldGVfdG9kbyhzdHJpbmcpdm9pZCIsIG1ldGhvZCAicmV0dXJuX3RvZG8oc3RyaW5nKShzdHJpbmcsYm9vbCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2FkZF90b2RvX3JvdXRlQDUgbWFpbl9jb21wbGV0ZV90b2RvX3JvdXRlQDYgbWFpbl9yZXR1cm5fdG9kb19yb3V0ZUA3CgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzEKICAgIC8vIGNsYXNzIEFyYzRTdHJ1Y3QoQVJDNENvbnRyYWN0KToKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fcmV0dXJuX3RvZG9fcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI1NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjIzMQogICAgLy8gY2xhc3MgQXJjNFN0cnVjdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmV0dXJuX3RvZG8KICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCm1haW5fY29tcGxldGVfdG9kb19yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjQ3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjMxCiAgICAvLyBjbGFzcyBBcmM0U3RydWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNDcKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBjb21wbGV0ZV90b2RvCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF90b2RvX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzEKICAgIC8vIGNsYXNzIEFyYzRTdHJ1Y3QoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjIzNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFkZF90b2RvCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjMxCiAgICAvLyBjbGFzcyBBcmM0U3RydWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRTdHJ1Y3QuYWRkX3RvZG8odGFzazogYnl0ZXMpIC0+IGJ5dGVzOgphZGRfdG9kbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjIzNi0yMzcKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF90b2RvKHNlbGYsIHRhc2s6IGFyYzQuU3RyaW5nKSAtPiBUb2RvczoKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMgogICAgYnl0ZWNfMSAvLyAiIgogICAgZHVwbiAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzgKICAgIC8vIHRvZG8gPSBUb2RvKHRhc2s9dGFzaywgY29tcGxldGVkPWFyYzQuQm9vbChGYWxzZSkpICAjIG5vcWE6IEZCVDAwMwogICAgcHVzaGJ5dGVzIDB4MDAwMzAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjQwCiAgICAvLyBpZiBub3Qgc2VsZi50b2RvczoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2RvcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b2RvcyBleGlzdHMKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICA9PQogICAgYnogYWRkX3RvZG9fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI0MQogICAgLy8gc2VsZi50b2RvcyA9IFRvZG9zKHRvZG8uY29weSgpKQogICAgYnl0ZWMgNCAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vICJ0b2RvcyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRfdG9kb19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNDUKICAgIC8vIHJldHVybiBzZWxmLnRvZG9zCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9kb3MiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG9kb3MgZXhpc3RzCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKYWRkX3RvZG9fZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNDMKICAgIC8vIHNlbGYudG9kb3MuYXBwZW5kKHRvZG8uY29weSgpKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRvZG9zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvZG9zIGV4aXN0cwogICAgYnl0ZWMgNCAvLyAweDAwMDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMwogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2J1cnkgMAogICAgYnl0ZWNfMSAvLyAweAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZnJhbWVfYnVyeSA2CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA0CgphZGRfdG9kb19mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDYKICAgIDwKICAgIGJ6IGFkZF90b2RvX2FmdGVyX2ZvckA3CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGFkZF90b2RvX2Zvcl9oZWFkZXJANQoKYWRkX3RvZG9fYWZ0ZXJfZm9yQDc6CiAgICBmcmFtZV9kaWcgMAogICAgbGVuCiAgICBmcmFtZV9idXJ5IDUKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmFkZF90b2RvX2Zvcl9oZWFkZXJAODoKICAgIGZyYW1lX2RpZyA0CiAgICBpbnRjXzEgLy8gMgogICAgPAogICAgYnogYWRkX3RvZG9fYWZ0ZXJfZm9yQDEwCiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyA1CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGFkZF90b2RvX2Zvcl9oZWFkZXJAOAoKYWRkX3RvZG9fYWZ0ZXJfZm9yQDEwOgogICAgZnJhbWVfZGlnIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI0MwogICAgLy8gc2VsZi50b2Rvcy5hcHBlbmQodG9kby5jb3B5KCkpCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfZGlnIDUKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMgogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNDMKICAgIC8vIHNlbGYudG9kb3MuYXBwZW5kKHRvZG8uY29weSgpKQogICAgYnl0ZWNfMCAvLyAidG9kb3MiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBhZGRfdG9kb19hZnRlcl9pZl9lbHNlQDMKCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0U3RydWN0LmNvbXBsZXRlX3RvZG8odGFzazogYnl0ZXMpIC0+IHZvaWQ6CmNvbXBsZXRlX3RvZG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNDctMjQ4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBjb21wbGV0ZV90b2RvKHNlbGYsIHRhc2s6IGFyYzQuU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBieXRlY18xIC8vICIiCiAgICBkdXBuIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI1MAogICAgLy8gZm9yIGluZGV4IGluIHVyYW5nZShzZWxmLnRvZG9zLmxlbmd0aCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9kb3MiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG9kb3MgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAwCgpjb21wbGV0ZV90b2RvX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI1MAogICAgLy8gZm9yIGluZGV4IGluIHVyYW5nZShzZWxmLnRvZG9zLmxlbmd0aCk6CiAgICBmcmFtZV9kaWcgOAogICAgZnJhbWVfZGlnIDcKICAgIDwKICAgIGJ6IGNvbXBsZXRlX3RvZG9fYWZ0ZXJfZm9yQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI1MQogICAgLy8gaWYgc2VsZi50b2Rvc1tpbmRleF0udGFzayA9PSB0YXNrOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRvZG9zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvZG9zIGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDgKICAgIGR1cAogICAgY292ZXIgMwogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDMKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBkdXAKICAgIGNvdmVyIDQKICAgIHN3YXAKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGRpZyA0CiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBieiBjb21wbGV0ZV90b2RvX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjUyCiAgICAvLyBzZWxmLnRvZG9zW2luZGV4XS5jb21wbGV0ZWQgPSBhcmM0LkJvb2woVHJ1ZSkgICMgbm9xYTogRkJUMDAzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9kb3MiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG9kb3MgZXhpc3RzCiAgICBkdXAKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGZyYW1lX2RpZyAzCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciA0CiAgICAtIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDIKICAgIGxlbgogICAgZGlnIDMKICAgIGZyYW1lX2RpZyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgdW5jb3ZlciA0CiAgICBzZWxlY3QKICAgIGRpZyA0CiAgICBkaWcgNAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBwdXNoaW50IDE2IC8vIDE2CiAgICBpbnRjXzIgLy8gMQogICAgc2V0Yml0CiAgICB1bmNvdmVyIDUKICAgIHN1YnN0cmluZyAwIDIKICAgIGR1cAogICAgZnJhbWVfYnVyeSAxCiAgICBidG9pCiAgICBkdXAKICAgIGZyYW1lX2RpZyA4CiAgICAtCiAgICBpbnRjXzIgLy8gMQogICAgLQogICAgZGlnIDQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGR1cAogICAgZGlnIDUKICAgIC0KICAgIGZyYW1lX2J1cnkgNQogICAgZGlnIDIKICAgIGxlbgogICAgZnJhbWVfYnVyeSA0CiAgICBkaWcgNQogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgNgogICAgc3Vic3RyaW5nMwogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDQKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZnJhbWVfYnVyeSA2Cgpjb21wbGV0ZV90b2RvX2Zvcl9oZWFkZXJAODoKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgNgogICAgPAogICAgYnogY29tcGxldGVfdG9kb19hZnRlcl9mb3JAMTAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGZyYW1lX2RpZyAyCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgNAogICAgKwogICAgZnJhbWVfZGlnIDUKICAgIC0KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBkaWcgMgogICAgc3dhcAogICAgcmVwbGFjZTMKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgYiBjb21wbGV0ZV90b2RvX2Zvcl9oZWFkZXJAOAoKY29tcGxldGVfdG9kb19hZnRlcl9mb3JAMTA6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjUyCiAgICAvLyBzZWxmLnRvZG9zW2luZGV4XS5jb21wbGV0ZWQgPSBhcmM0LkJvb2woVHJ1ZSkgICMgbm9xYTogRkJUMDAzCiAgICBieXRlY18wIC8vICJ0b2RvcyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0Cgpjb21wbGV0ZV90b2RvX2FmdGVyX2ZvckA2OgogICAgcmV0c3ViCgpjb21wbGV0ZV90b2RvX2FmdGVyX2lmX2Vsc2VANDoKICAgIGZyYW1lX2J1cnkgOAogICAgYiBjb21wbGV0ZV90b2RvX2Zvcl9oZWFkZXJAMQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRTdHJ1Y3QucmV0dXJuX3RvZG8odGFzazogYnl0ZXMpIC0+IGJ5dGVzOgpyZXR1cm5fdG9kbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI1NS0yNTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIHJldHVybl90b2RvKHNlbGYsIHRhc2s6IGFyYzQuU3RyaW5nKSAtPiBUb2RvOgogICAgcHJvdG8gMSAxCiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNTktMjYwCiAgICAvLyBleGlzdCA9IEZhbHNlCiAgICAvLyBmb3IgaW5kZXggaW4gdXJhbmdlKHNlbGYudG9kb3MubGVuZ3RoKToKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjYwCiAgICAvLyBmb3IgaW5kZXggaW4gdXJhbmdlKHNlbGYudG9kb3MubGVuZ3RoKToKICAgIGJ5dGVjXzAgLy8gInRvZG9zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvZG9zIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAoKcmV0dXJuX3RvZG9fZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjYwCiAgICAvLyBmb3IgaW5kZXggaW4gdXJhbmdlKHNlbGYudG9kb3MubGVuZ3RoKToKICAgIGZyYW1lX2RpZyA1CiAgICBmcmFtZV9kaWcgNAogICAgPAogICAgYnogcmV0dXJuX3RvZG9fYWZ0ZXJfZm9yQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI2MgogICAgLy8gaWYgc2VsZi50b2Rvc1tpbmRleF0udGFzayA9PSB0YXNrOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRvZG9zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvZG9zIGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDUKICAgIGR1cAogICAgY292ZXIgMwogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDMKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNQogICAgc3dhcAogICAgZGlnIDEKICAgIC0gLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkaWcgMwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAyCiAgICAqCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgZGlnIDQKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBsZW4KICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGJ6IHJldHVybl90b2RvX2Zvcl9oZWFkZXJAMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjYzCiAgICAvLyB0b2RvX3RvX3JldHVybiA9IHNlbGYudG9kb3NbaW5kZXhdLmNvcHkoKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRvZG9zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvZG9zIGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICBmcmFtZV9kaWcgMAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgNQogICAgLSAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAyCiAgICBsZW4KICAgIGRpZyAzCiAgICBmcmFtZV9kaWcgMQogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBzdWJzdHJpbmczCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI2NAogICAgLy8gZXhpc3QgPSBUcnVlCiAgICBpbnRjXzIgLy8gMQogICAgZnJhbWVfYnVyeSAzCiAgICBiIHJldHVybl90b2RvX2Zvcl9oZWFkZXJAMQoKcmV0dXJuX3RvZG9fYWZ0ZXJfZm9yQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNjYKICAgIC8vIGFzc2VydCBleGlzdAogICAgZnJhbWVfZGlnIDMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjY4CiAgICAvLyByZXR1cm4gdG9kb190b19yZXR1cm4KICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [383, 433, 625, 675], "errorMessage": "Index access is out of bounds"}, {"pc": [72, 91, 106], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [130], "errorMessage": "can only call when creating"}, {"pc": [75, 94, 109], "errorMessage": "can only call when not creating"}, {"pc": [153, 175, 182, 335, 350, 418, 577, 592, 660], "errorMessage": "check self.todos exists"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "task"}], "name": "add_todo", "returns": {"type": "(string,bool)[]"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "task"}], "name": "complete_todo", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "task"}], "name": "return_todo", "returns": {"type": "(string,bool)", "struct": "Todo"}, "events": [], "readonly": false, "recommendations": {}}], "name": "Arc4Struct", "state": {"keys": {"box": {}, "global": {"todos": {"key": "dG9kb3M=", "keyType": "AVMString", "valueType": "(string,bool)[]"}}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 1, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {"Todo": [{"name": "task", "type": "string"}, {"name": "completed", "type": "bool"}]}, "byteCode": {"approval": "CiADAAIBJgUFdG9kb3MAAgAABBUffHUCAAIxGEAAAygqZzEbQQBTggME9hiiVQQRz+LYBOqeLZ02GgCOAwAkABUAAiJDMRkURDEYRDYaAYgB5StMULAkQzEZFEQxGEQ2GgGIAN8kQzEZFEQxGEQ2GgGIABErTFCwJEMxGUD/xDEYFEQkQ4oBASJHAilHA4ADAAMAi/9QIihlRCoSQQAUJwRMUIACAAFMUChMZyIoZUSMAIkiKGVEJwRPAlCMAkkiWUlOAowDVwIAjAApjAEjC4wGIowEiwSLBgxBABuLAIsESU4CWSMIFlcGAosBTFCMASMIjARC/92LABWMBSKMBIsEIwxBAByLAosESU4CWYsFCBZXBgKLAUxQjAEjCIwEQv/diwMkCBZXBgKLAVCLAIsGiwVSUIsCSRUjTFJQKExnQv9oigEAIkkpRwQiKGVEIlkiiwiLBwxBANYiKGVESVcCAIsISU4DIwtJjANLAUxZTwIiWU8DJAhJTgRMSwEJSwMVTwIjC0mMAksETFlPAk1SSSJZSwEVUov/EkEAkyIoZURJVwIASYsDWUsCIllPBAlLAhVLA4sCWUpPBE1LBEsETwJSgRAkVE8FUQACSYwBF0mLCAkkCUsETwRPAk1JSwUJjAVLAhWMBEsFIk8GUk8DUE8ETwJPBFJQjAAjC4wGiwKLBgxBACCLAEmLAklOA1mLBAiLBQkWVwYCSwJMXYwAIwiMAkL/2IsBiwBQKExniYwIQv8cigEBKUkiRwIoZUQiWSKLBYsEDEEAayIoZURJVwIAiwVJTgMjC0mMAEsBTFlPAiJZTwMkCEmMBUxLAQlLAxVPAiMLSYwBSwRMWU8CTVJJIllLARVSi/8SQf+0IihlRElXAgBJiwBZTwIiWYsFCUsCFUsDiwFZTwJNUowCJIwDQv+NiwNEiwKMAIk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0U3RydWN0Ll9fYWxnb3B5X2VudHJ5cG9pbnRfd2l0aF9pbml0KCkgLT4gdWludDY0OgptYWluOgogICAgaW50Y2Jsb2NrIDAgMiAxCiAgICBieXRlY2Jsb2NrICJ0b2RvcyIgMHggMHgwMDAwIDB4MTUxZjdjNzUgMHgwMDAyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzQKICAgIC8vIHNlbGYudG9kb3MgPSBUb2RvcygpCiAgICBieXRlY18wIC8vICJ0b2RvcyIKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzEKICAgIC8vIGNsYXNzIEFyYzRTdHJ1Y3QoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A4CiAgICBwdXNoYnl0ZXNzIDB4ZjYxOGEyNTUgMHgxMWNmZTJkOCAweGVhOWUyZDlkIC8vIG1ldGhvZCAiYWRkX3RvZG8oc3RyaW5nKShzdHJpbmcsYm9vbClbXSIsIG1ldGhvZCAiY29tcGxldGVfdG9kbyhzdHJpbmcpdm9pZCIsIG1ldGhvZCAicmV0dXJuX3RvZG8oc3RyaW5nKShzdHJpbmcsYm9vbCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2FkZF90b2RvX3JvdXRlQDUgbWFpbl9jb21wbGV0ZV90b2RvX3JvdXRlQDYgbWFpbl9yZXR1cm5fdG9kb19yb3V0ZUA3CgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzEKICAgIC8vIGNsYXNzIEFyYzRTdHJ1Y3QoQVJDNENvbnRyYWN0KToKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fcmV0dXJuX3RvZG9fcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI1NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjIzMQogICAgLy8gY2xhc3MgQXJjNFN0cnVjdChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmV0dXJuX3RvZG8KICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCm1haW5fY29tcGxldGVfdG9kb19yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjQ3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjMxCiAgICAvLyBjbGFzcyBBcmM0U3RydWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNDcKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBjb21wbGV0ZV90b2RvCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF90b2RvX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzYKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzEKICAgIC8vIGNsYXNzIEFyYzRTdHJ1Y3QoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjIzNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFkZF90b2RvCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjMxCiAgICAvLyBjbGFzcyBBcmM0U3RydWN0KEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRTdHJ1Y3QuYWRkX3RvZG8odGFzazogYnl0ZXMpIC0+IGJ5dGVzOgphZGRfdG9kbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjIzNi0yMzcKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF90b2RvKHNlbGYsIHRhc2s6IGFyYzQuU3RyaW5nKSAtPiBUb2RvczoKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMgogICAgYnl0ZWNfMSAvLyAiIgogICAgZHVwbiAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyMzgKICAgIC8vIHRvZG8gPSBUb2RvKHRhc2s9dGFzaywgY29tcGxldGVkPWFyYzQuQm9vbChGYWxzZSkpICAjIG5vcWE6IEZCVDAwMwogICAgcHVzaGJ5dGVzIDB4MDAwMzAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjQwCiAgICAvLyBpZiBub3Qgc2VsZi50b2RvczoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2RvcyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b2RvcyBleGlzdHMKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICA9PQogICAgYnogYWRkX3RvZG9fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI0MQogICAgLy8gc2VsZi50b2RvcyA9IFRvZG9zKHRvZG8uY29weSgpKQogICAgYnl0ZWMgNCAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDAwMQogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vICJ0b2RvcyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRfdG9kb19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNDUKICAgIC8vIHJldHVybiBzZWxmLnRvZG9zCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9kb3MiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG9kb3MgZXhpc3RzCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKYWRkX3RvZG9fZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNDMKICAgIC8vIHNlbGYudG9kb3MuYXBwZW5kKHRvZG8uY29weSgpKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRvZG9zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvZG9zIGV4aXN0cwogICAgYnl0ZWMgNCAvLyAweDAwMDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMwogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2J1cnkgMAogICAgYnl0ZWNfMSAvLyAweAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZnJhbWVfYnVyeSA2CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA0CgphZGRfdG9kb19mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDYKICAgIDwKICAgIGJ6IGFkZF90b2RvX2FmdGVyX2ZvckA3CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGFkZF90b2RvX2Zvcl9oZWFkZXJANQoKYWRkX3RvZG9fYWZ0ZXJfZm9yQDc6CiAgICBmcmFtZV9kaWcgMAogICAgbGVuCiAgICBmcmFtZV9idXJ5IDUKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmFkZF90b2RvX2Zvcl9oZWFkZXJAODoKICAgIGZyYW1lX2RpZyA0CiAgICBpbnRjXzEgLy8gMgogICAgPAogICAgYnogYWRkX3RvZG9fYWZ0ZXJfZm9yQDEwCiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyA1CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGFkZF90b2RvX2Zvcl9oZWFkZXJAOAoKYWRkX3RvZG9fYWZ0ZXJfZm9yQDEwOgogICAgZnJhbWVfZGlnIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI0MwogICAgLy8gc2VsZi50b2Rvcy5hcHBlbmQodG9kby5jb3B5KCkpCiAgICBpbnRjXzIgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfZGlnIDUKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMgogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNDMKICAgIC8vIHNlbGYudG9kb3MuYXBwZW5kKHRvZG8uY29weSgpKQogICAgYnl0ZWNfMCAvLyAidG9kb3MiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBhZGRfdG9kb19hZnRlcl9pZl9lbHNlQDMKCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0U3RydWN0LmNvbXBsZXRlX3RvZG8odGFzazogYnl0ZXMpIC0+IHZvaWQ6CmNvbXBsZXRlX3RvZG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNDctMjQ4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBjb21wbGV0ZV90b2RvKHNlbGYsIHRhc2s6IGFyYzQuU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBieXRlY18xIC8vICIiCiAgICBkdXBuIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI1MAogICAgLy8gZm9yIGluZGV4IGluIHVyYW5nZShzZWxmLnRvZG9zLmxlbmd0aCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9kb3MiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG9kb3MgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAwCgpjb21wbGV0ZV90b2RvX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI1MAogICAgLy8gZm9yIGluZGV4IGluIHVyYW5nZShzZWxmLnRvZG9zLmxlbmd0aCk6CiAgICBmcmFtZV9kaWcgOAogICAgZnJhbWVfZGlnIDcKICAgIDwKICAgIGJ6IGNvbXBsZXRlX3RvZG9fYWZ0ZXJfZm9yQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI1MQogICAgLy8gaWYgc2VsZi50b2Rvc1tpbmRleF0udGFzayA9PSB0YXNrOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRvZG9zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvZG9zIGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDgKICAgIGR1cAogICAgY292ZXIgMwogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDMKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBkdXAKICAgIGNvdmVyIDQKICAgIHN3YXAKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGRpZyA0CiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBieiBjb21wbGV0ZV90b2RvX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjUyCiAgICAvLyBzZWxmLnRvZG9zW2luZGV4XS5jb21wbGV0ZWQgPSBhcmM0LkJvb2woVHJ1ZSkgICMgbm9xYTogRkJUMDAzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9kb3MiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG9kb3MgZXhpc3RzCiAgICBkdXAKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGZyYW1lX2RpZyAzCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciA0CiAgICAtIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDIKICAgIGxlbgogICAgZGlnIDMKICAgIGZyYW1lX2RpZyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgdW5jb3ZlciA0CiAgICBzZWxlY3QKICAgIGRpZyA0CiAgICBkaWcgNAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBwdXNoaW50IDE2IC8vIDE2CiAgICBpbnRjXzIgLy8gMQogICAgc2V0Yml0CiAgICB1bmNvdmVyIDUKICAgIHN1YnN0cmluZyAwIDIKICAgIGR1cAogICAgZnJhbWVfYnVyeSAxCiAgICBidG9pCiAgICBkdXAKICAgIGZyYW1lX2RpZyA4CiAgICAtCiAgICBpbnRjXzIgLy8gMQogICAgLQogICAgZGlnIDQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGR1cAogICAgZGlnIDUKICAgIC0KICAgIGZyYW1lX2J1cnkgNQogICAgZGlnIDIKICAgIGxlbgogICAgZnJhbWVfYnVyeSA0CiAgICBkaWcgNQogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgNgogICAgc3Vic3RyaW5nMwogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDQKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZnJhbWVfYnVyeSA2Cgpjb21wbGV0ZV90b2RvX2Zvcl9oZWFkZXJAODoKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgNgogICAgPAogICAgYnogY29tcGxldGVfdG9kb19hZnRlcl9mb3JAMTAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGZyYW1lX2RpZyAyCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgNAogICAgKwogICAgZnJhbWVfZGlnIDUKICAgIC0KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBkaWcgMgogICAgc3dhcAogICAgcmVwbGFjZTMKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgYiBjb21wbGV0ZV90b2RvX2Zvcl9oZWFkZXJAOAoKY29tcGxldGVfdG9kb19hZnRlcl9mb3JAMTA6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjUyCiAgICAvLyBzZWxmLnRvZG9zW2luZGV4XS5jb21wbGV0ZWQgPSBhcmM0LkJvb2woVHJ1ZSkgICMgbm9xYTogRkJUMDAzCiAgICBieXRlY18wIC8vICJ0b2RvcyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0Cgpjb21wbGV0ZV90b2RvX2FmdGVyX2ZvckA2OgogICAgcmV0c3ViCgpjb21wbGV0ZV90b2RvX2FmdGVyX2lmX2Vsc2VANDoKICAgIGZyYW1lX2J1cnkgOAogICAgYiBjb21wbGV0ZV90b2RvX2Zvcl9oZWFkZXJAMQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRTdHJ1Y3QucmV0dXJuX3RvZG8odGFzazogYnl0ZXMpIC0+IGJ5dGVzOgpyZXR1cm5fdG9kbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI1NS0yNTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIHJldHVybl90b2RvKHNlbGYsIHRhc2s6IGFyYzQuU3RyaW5nKSAtPiBUb2RvOgogICAgcHJvdG8gMSAxCiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNTktMjYwCiAgICAvLyBleGlzdCA9IEZhbHNlCiAgICAvLyBmb3IgaW5kZXggaW4gdXJhbmdlKHNlbGYudG9kb3MubGVuZ3RoKToKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjYwCiAgICAvLyBmb3IgaW5kZXggaW4gdXJhbmdlKHNlbGYudG9kb3MubGVuZ3RoKToKICAgIGJ5dGVjXzAgLy8gInRvZG9zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvZG9zIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAoKcmV0dXJuX3RvZG9fZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjYwCiAgICAvLyBmb3IgaW5kZXggaW4gdXJhbmdlKHNlbGYudG9kb3MubGVuZ3RoKToKICAgIGZyYW1lX2RpZyA1CiAgICBmcmFtZV9kaWcgNAogICAgPAogICAgYnogcmV0dXJuX3RvZG9fYWZ0ZXJfZm9yQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI2MgogICAgLy8gaWYgc2VsZi50b2Rvc1tpbmRleF0udGFzayA9PSB0YXNrOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRvZG9zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvZG9zIGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDUKICAgIGR1cAogICAgY292ZXIgMwogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDMKICAgIGludGNfMiAvLyAxCiAgICArCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgNQogICAgc3dhcAogICAgZGlnIDEKICAgIC0gLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkaWcgMwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAyCiAgICAqCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgZGlnIDQKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBsZW4KICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGJ6IHJldHVybl90b2RvX2Zvcl9oZWFkZXJAMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjYzCiAgICAvLyB0b2RvX3RvX3JldHVybiA9IHNlbGYudG9kb3NbaW5kZXhdLmNvcHkoKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRvZG9zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvZG9zIGV4aXN0cwogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICBmcmFtZV9kaWcgMAogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgNQogICAgLSAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAyCiAgICBsZW4KICAgIGRpZyAzCiAgICBmcmFtZV9kaWcgMQogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBzdWJzdHJpbmczCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI2NAogICAgLy8gZXhpc3QgPSBUcnVlCiAgICBpbnRjXzIgLy8gMQogICAgZnJhbWVfYnVyeSAzCiAgICBiIHJldHVybl90b2RvX2Zvcl9oZWFkZXJAMQoKcmV0dXJuX3RvZG9fYWZ0ZXJfZm9yQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyNjYKICAgIC8vIGFzc2VydCBleGlzdAogICAgZnJhbWVfZGlnIDMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjY4CiAgICAvLyByZXR1cm4gdG9kb190b19yZXR1cm4KICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [383, 433, 625, 675], "errorMessage": "Index access is out of bounds"}, {"pc": [72, 91, 106], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [130], "errorMessage": "can only call when creating"}, {"pc": [75, 94, 109], "errorMessage": "can only call when not creating"}, {"pc": [153, 175, 182, 335, 350, 418, 577, 592, 660], "errorMessage": "check self.todos exists"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_tuple_client.py b/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_tuple_client.py index 9567e3b..d3bbd7c 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_tuple_client.py +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_tuple_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "(string,string,uint64)", "name": "contact"}], "name": "add_contact_info", "returns": {"type": "uint64"}, "desc": "An arc4.Tuple is a heterogeneous collection of arc4 types.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "return_contact", "returns": {"type": "(string,string,uint64)"}, "desc": "An arc4.Tuple can be returned when more than one return value is needed.", "events": [], "readonly": false, "recommendations": {}}], "name": "Arc4Tuple", "state": {"keys": {"box": {}, "global": {"contact_info": {"key": "Y29udGFjdF9pbmZv", "keyType": "AVMString", "valueType": "(string,string,uint64)"}}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 1, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiACAAEmAgxjb250YWN0X2luZm8EFR98dTEYQAAUKIAQAAwADgAAAAAAAAAAAAAAAGcxG0EAO4ICBH9owT8EKI3HXzYaAI4CABIAAiJDMRkURDEYRIgAgylMULAjQzEZFEQxGEQ2GgGIABIWKUxQsCNDMRlA/9UxGBREI0OKAQGL/yJZi/+BAlmL/08CSwJSi/8Vi/9PA08CUov/VwQITwJXAgCABUFsaWNlEkRMVwIAgBNhbGljZUBzb21ldGhpbmcuY29tEkRJgAgAAAAAIR0a46hEKIv/ZxeJigABIihlRIk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHVwbGUuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJjb250YWN0X2luZm8iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4MgogICAgLy8gc2VsZi5jb250YWN0X2luZm8gPSBHbG9iYWxTdGF0ZSgKICAgIGJ5dGVjXzAgLy8gImNvbnRhY3RfaW5mbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4MwogICAgLy8gY29udGFjdF9pbmZvX3R1cGxlKChhcmM0LlN0cmluZygiIiksIGFyYzQuU3RyaW5nKCIiKSwgYXJjNC5VSW50NjQoMCkpKQogICAgcHVzaGJ5dGVzIDB4MDAwYzAwMGUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4Mi0yODQKICAgIC8vIHNlbGYuY29udGFjdF9pbmZvID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgY29udGFjdF9pbmZvX3R1cGxlKChhcmM0LlN0cmluZygiIiksIGFyYzQuU3RyaW5nKCIiKSwgYXJjNC5VSW50NjQoMCkpKQogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjc5CiAgICAvLyBjbGFzcyBBcmM0VHVwbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4N2Y2OGMxM2YgMHgyODhkYzc1ZiAvLyBtZXRob2QgImFkZF9jb250YWN0X2luZm8oKHN0cmluZyxzdHJpbmcsdWludDY0KSl1aW50NjQiLCBtZXRob2QgInJldHVybl9jb250YWN0KCkoc3RyaW5nLHN0cmluZyx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9hZGRfY29udGFjdF9pbmZvX3JvdXRlQDUgbWFpbl9yZXR1cm5fY29udGFjdF9yb3V0ZUA2CgptYWluX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gY2xhc3MgQXJjNFR1cGxlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX3JldHVybl9jb250YWN0X3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJldHVybl9jb250YWN0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9jb250YWN0X2luZm9fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gY2xhc3MgQXJjNFR1cGxlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyODYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhZGRfY29udGFjdF9pbmZvCiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjc5CiAgICAvLyBjbGFzcyBBcmM0VHVwbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAOQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHVwbGUuYWRkX2NvbnRhY3RfaW5mbyhjb250YWN0OiBieXRlcykgLT4gdWludDY0OgphZGRfY29udGFjdF9pbmZvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjg2LTI4NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYWRkX2NvbnRhY3RfaW5mbyhzZWxmLCBjb250YWN0OiBjb250YWN0X2luZm9fdHVwbGUpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjg5CiAgICAvLyBuYW1lLCBlbWFpbCwgcGhvbmUgPSBjb250YWN0Lm5hdGl2ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjkxCiAgICAvLyBhc3NlcnQgbmFtZS5uYXRpdmUgPT0gIkFsaWNlIgogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0IDIgMAogICAgcHVzaGJ5dGVzICJBbGljZSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI5MgogICAgLy8gYXNzZXJ0IGVtYWlsLm5hdGl2ZSA9PSAiYWxpY2VAc29tZXRoaW5nLmNvbSIKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBwdXNoYnl0ZXMgImFsaWNlQHNvbWV0aGluZy5jb20iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTMKICAgIC8vIGFzc2VydCBwaG9uZSA9PSBhcmM0LlVJbnQ2NCg1NTVfNTU1XzU1NSkKICAgIGR1cAogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAyMTFkMWFlMwogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI5NQogICAgLy8gc2VsZi5jb250YWN0X2luZm8udmFsdWUgPSBjb250YWN0CiAgICBieXRlY18wIC8vICJjb250YWN0X2luZm8iCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTcKICAgIC8vIHJldHVybiBwaG9uZS5uYXRpdmUKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRUdXBsZS5yZXR1cm5fY29udGFjdCgpIC0+IGJ5dGVzOgpyZXR1cm5fY29udGFjdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI5OS0zMDAKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIHJldHVybl9jb250YWN0KHNlbGYpIC0+IGFyYzQuVHVwbGVbYXJjNC5TdHJpbmcsIGFyYzQuU3RyaW5nLCBhcmM0LlVJbnQ2NF06CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjMwMwogICAgLy8gcmV0dXJuIHNlbGYuY29udGFjdF9pbmZvLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiY29udGFjdF9pbmZvIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvbnRhY3RfaW5mbyBleGlzdHMKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [156], "errorMessage": "Index access is out of bounds"}, {"pc": [81, 97], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [122], "errorMessage": "can only call when creating"}, {"pc": [84, 100], "errorMessage": "can only call when not creating"}, {"pc": [225], "errorMessage": "check self.contact_info exists"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "(string,string,uint64)", "name": "contact"}], "name": "add_contact_info", "returns": {"type": "uint64"}, "desc": "An arc4.Tuple is a heterogeneous collection of arc4 types.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "return_contact", "returns": {"type": "(string,string,uint64)"}, "desc": "An arc4.Tuple can be returned when more than one return value is needed.", "events": [], "readonly": false, "recommendations": {}}], "name": "Arc4Tuple", "state": {"keys": {"box": {}, "global": {"contact_info": {"key": "Y29udGFjdF9pbmZv", "keyType": "AVMString", "valueType": "(string,string,uint64)"}}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 1, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiACAAEmAgxjb250YWN0X2luZm8EFR98dTEYQAAUKIAQAAwADgAAAAAAAAAAAAAAAGcxG0EAO4ICBH9owT8EKI3HXzYaAI4CABIAAiJDMRkURDEYRIgAhilMULAjQzEZFEQxGEQ2GgGIABIWKUxQsCNDMRlA/9UxGBREI0OKAQGL/yJZi/+BAlmL/08CSwJSi/8Vi/9PA08CUov/VwQITwJXAgCABUFsaWNlEkRMVwIAgBNhbGljZUBzb21ldGhpbmcuY29tEkSACAAAAAAhHRrjqEQoi/9ni/+BBFuJIihlRIk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHVwbGUuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJjb250YWN0X2luZm8iIDB4MTUxZjdjNzUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4MgogICAgLy8gc2VsZi5jb250YWN0X2luZm8gPSBHbG9iYWxTdGF0ZSgKICAgIGJ5dGVjXzAgLy8gImNvbnRhY3RfaW5mbyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4MwogICAgLy8gY29udGFjdF9pbmZvX3R1cGxlKChhcmM0LlN0cmluZygiIiksIGFyYzQuU3RyaW5nKCIiKSwgYXJjNC5VSW50NjQoMCkpKQogICAgcHVzaGJ5dGVzIDB4MDAwYzAwMGUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4Mi0yODQKICAgIC8vIHNlbGYuY29udGFjdF9pbmZvID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgY29udGFjdF9pbmZvX3R1cGxlKChhcmM0LlN0cmluZygiIiksIGFyYzQuU3RyaW5nKCIiKSwgYXJjNC5VSW50NjQoMCkpKQogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjc5CiAgICAvLyBjbGFzcyBBcmM0VHVwbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A3CiAgICBwdXNoYnl0ZXNzIDB4N2Y2OGMxM2YgMHgyODhkYzc1ZiAvLyBtZXRob2QgImFkZF9jb250YWN0X2luZm8oKHN0cmluZyxzdHJpbmcsdWludDY0KSl1aW50NjQiLCBtZXRob2QgInJldHVybl9jb250YWN0KCkoc3RyaW5nLHN0cmluZyx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9hZGRfY29udGFjdF9pbmZvX3JvdXRlQDUgbWFpbl9yZXR1cm5fY29udGFjdF9yb3V0ZUA2CgptYWluX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gY2xhc3MgQXJjNFR1cGxlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX3JldHVybl9jb250YWN0X3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHJldHVybl9jb250YWN0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9jb250YWN0X2luZm9fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gY2xhc3MgQXJjNFR1cGxlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyODYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhZGRfY29udGFjdF9pbmZvCiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjc5CiAgICAvLyBjbGFzcyBBcmM0VHVwbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAOQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHVwbGUuYWRkX2NvbnRhY3RfaW5mbyhjb250YWN0OiBieXRlcykgLT4gdWludDY0OgphZGRfY29udGFjdF9pbmZvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjg2LTI4NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYWRkX2NvbnRhY3RfaW5mbyhzZWxmLCBjb250YWN0OiBjb250YWN0X2luZm9fdHVwbGUpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjg5CiAgICAvLyBuYW1lLCBlbWFpbCwgcGhvbmUgPSBjb250YWN0Lm5hdGl2ZQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MjkxCiAgICAvLyBhc3NlcnQgbmFtZS5uYXRpdmUgPT0gIkFsaWNlIgogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0IDIgMAogICAgcHVzaGJ5dGVzICJBbGljZSIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI5MgogICAgLy8gYXNzZXJ0IGVtYWlsLm5hdGl2ZSA9PSAiYWxpY2VAc29tZXRoaW5nLmNvbSIKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBwdXNoYnl0ZXMgImFsaWNlQHNvbWV0aGluZy5jb20iCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTMKICAgIC8vIGFzc2VydCBwaG9uZSA9PSBhcmM0LlVJbnQ2NCg1NTVfNTU1XzU1NSkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMjExZDFhZTMKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTUKICAgIC8vIHNlbGYuY29udGFjdF9pbmZvLnZhbHVlID0gY29udGFjdAogICAgYnl0ZWNfMCAvLyAiY29udGFjdF9pbmZvIgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6Mjk3CiAgICAvLyByZXR1cm4gcGhvbmUubmF0aXZlCiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI4OQogICAgLy8gbmFtZSwgZW1haWwsIHBob25lID0gY29udGFjdC5uYXRpdmUKICAgIHB1c2hpbnQgNCAvLyA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOTcKICAgIC8vIHJldHVybiBwaG9uZS5uYXRpdmUKICAgIGV4dHJhY3RfdWludDY0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHVwbGUucmV0dXJuX2NvbnRhY3QoKSAtPiBieXRlczoKcmV0dXJuX2NvbnRhY3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTozMDMKICAgIC8vIHJldHVybiBzZWxmLmNvbnRhY3RfaW5mby52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImNvbnRhY3RfaW5mbyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jb250YWN0X2luZm8gZXhpc3RzCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [156], "errorMessage": "Index access is out of bounds"}, {"pc": [81, 97], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [122], "errorMessage": "can only call when creating"}, {"pc": [84, 100], "errorMessage": "can only call when not creating"}, {"pc": [225], "errorMessage": "check self.contact_info exists"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_types_client.py b/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_types_client.py index b18686e..e2b58f9 100644 --- a/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_types_client.py +++ b/projects/python-examples/smart_contracts/artifacts/arc4_types/arc4_types_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "a"}, {"type": "uint64", "name": "b"}], "name": "add_arc4_uint64", "returns": {"type": "uint64"}, "desc": "Math operations (like a + b) are not supported on arc4.UInt64 types\nsince they are internally represented as byte arrays in the AVM. Use the .native property to perform arithmetic operations.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "name": "a"}, {"type": "uint16", "name": "b"}, {"type": "uint32", "name": "c"}, {"type": "uint64", "name": "d"}], "name": "add_arc4_uint_n", "returns": {"type": "uint64"}, "desc": "The encoding of arc4 integers will be smaller if it uses fewer bits.\nUltimately, they are all represented with native UInt64.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint128", "name": "a"}, {"type": "uint256", "name": "b"}, {"type": "uint512", "name": "c"}], "name": "add_arc4_biguint_n", "returns": {"type": "uint512"}, "desc": "Integers with larger bit size are supported up to 512 bits.\nUltimately, they are all represented with native BigUInt.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "byte", "name": "a"}], "name": "arc4_byte", "returns": {"type": "byte"}, "desc": "An arc4.Byte is essentially an alias for an 8-bit integer.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "name": "address"}], "name": "arc4_address_properties", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "name": "address"}], "name": "arc4_address_return", "returns": {"type": "address"}, "events": [], "readonly": false, "recommendations": {}}], "name": "Arc4Types", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiACAUAmAQQVH3x1MRtBALWCBgQFlDkXBIRbBoUE6tFwzwTctol/BP3c9E8E8uyOWDYaAI4GAG4AUgA5ACYAEgADgQBDMRkURDEYRCg2GgFQsCJDMRkURDEYRDYaAYgA4BYoTFCwIkMxGRREMRhENhoBiAC/KExQsCJDMRkURDEYRDYaATYaAjYaA4gAfihMULAiQzEZFEQxGEQ2GgE2GgI2GgM2GgSIADMoTFCwIkMxGRREMRhENhoBNhoCiAARKExQsCJDMRlA/3cxGBREIkOKAgGL/heL/xcIFomKBAGL/BUiEkSL/RWBAhJEi/4VgQQSRIv/FYEIEkSL/BeL/RcIi/4XCIv/FwgWiYoDAYv9FYEQEkSL/hWBIBJEi/8VIxJEi/2L/qCL/6BJFSMORCOvq4mKAQGL/xciCBZXBwGJigEBi/9zAESL/3MJRQFEiQ==", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDY0CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE1CiAgICAvLyBjbGFzcyBBcmM0VHlwZXMoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxMQogICAgcHVzaGJ5dGVzcyAweDA1OTQzOTE3IDB4ODQ1YjA2ODUgMHhlYWQxNzBjZiAweGRjYjY4OTdmIDB4ZmRkY2Y0NGYgMHhmMmVjOGU1OCAvLyBtZXRob2QgImFkZF9hcmM0X3VpbnQ2NCh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiYWRkX2FyYzRfdWludF9uKHVpbnQ4LHVpbnQxNix1aW50MzIsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiYWRkX2FyYzRfYmlndWludF9uKHVpbnQxMjgsdWludDI1Nix1aW50NTEyKXVpbnQ1MTIiLCBtZXRob2QgImFyYzRfYnl0ZShieXRlKWJ5dGUiLCBtZXRob2QgImFyYzRfYWRkcmVzc19wcm9wZXJ0aWVzKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJhcmM0X2FkZHJlc3NfcmV0dXJuKGFkZHJlc3MpYWRkcmVzcyIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYWRkX2FyYzRfdWludDY0X3JvdXRlQDMgbWFpbl9hZGRfYXJjNF91aW50X25fcm91dGVANCBtYWluX2FkZF9hcmM0X2JpZ3VpbnRfbl9yb3V0ZUA1IG1haW5fYXJjNF9ieXRlX3JvdXRlQDYgbWFpbl9hcmM0X2FkZHJlc3NfcHJvcGVydGllc19yb3V0ZUA3IG1haW5fYXJjNF9hZGRyZXNzX3JldHVybl9yb3V0ZUA4CgptYWluX2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNQogICAgLy8gY2xhc3MgQXJjNFR5cGVzKEFSQzRDb250cmFjdCk6CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX2FyYzRfYWRkcmVzc19yZXR1cm5fcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjEwMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTUKICAgIC8vIGNsYXNzIEFyYzRUeXBlcyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTAxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzRfYWRkcmVzc19wcm9wZXJ0aWVzX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo4My04NAogICAgLy8gIyBleGFtcGxlOiBBUkM0X0FERFJFU1MKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNQogICAgLy8gY2xhc3MgQXJjNFR5cGVzKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo4My04NAogICAgLy8gIyBleGFtcGxlOiBBUkM0X0FERFJFU1MKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhcmM0X2FkZHJlc3NfcHJvcGVydGllcwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmM0X2J5dGVfcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjczLTc0CiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfQllURVMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNQogICAgLy8gY2xhc3MgQXJjNFR5cGVzKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo3My03NAogICAgLy8gIyBleGFtcGxlOiBBUkM0X0JZVEVTCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXJjNF9ieXRlCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9hcmM0X2JpZ3VpbnRfbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NTQtNTUKICAgIC8vICMgZXhhbXBsZTogQVJDNF9CSUdVSU5UCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTUKICAgIC8vIGNsYXNzIEFyYzRUeXBlcyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NTQtNTUKICAgIC8vICMgZXhhbXBsZTogQVJDNF9CSUdVSU5UCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2FyYzRfYmlndWludF9uCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9hcmM0X3VpbnRfbl9yb3V0ZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MzQtMzUKICAgIC8vICMgZXhhbXBsZTogQVJDNF9VSU5UTgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE1CiAgICAvLyBjbGFzcyBBcmM0VHlwZXMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjM0LTM1CiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfVUlOVE4KICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhZGRfYXJjNF91aW50X24KICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkX2FyYzRfdWludDY0X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNy0xOAogICAgLy8gIyBleGFtcGxlOiBBUkM0X1VJTlQ2NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE1CiAgICAvLyBjbGFzcyBBcmM0VHlwZXMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE3LTE4CiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfVUlOVDY0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2FyYzRfdWludDY0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE1CiAgICAvLyBjbGFzcyBBcmM0VHlwZXMoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFyYzRfdHlwZXMuY29udHJhY3QuQXJjNFR5cGVzLmFkZF9hcmM0X3VpbnQ2NChhOiBieXRlcywgYjogYnl0ZXMpIC0+IGJ5dGVzOgphZGRfYXJjNF91aW50NjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNy0xOQogICAgLy8gIyBleGFtcGxlOiBBUkM0X1VJTlQ2NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYWRkX2FyYzRfdWludDY0KHNlbGYsIGE6IGFyYzQuVUludDY0LCBiOiBhcmM0LlVJbnQ2NCkgLT4gYXJjNC5VSW50NjQ6CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI2LTI3CiAgICAvLyAjIFVzZSB0aGUgbmF0aXZlIGludGVnZXJzIHRvIHBlcmZvcm0gYXJpdGhtZXRpYwogICAgLy8gYyA9IGEubmF0aXZlICsgYi5uYXRpdmUKICAgIGZyYW1lX2RpZyAtMgogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBidG9pCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOS0zMAogICAgLy8gIyBDb252ZXJ0IGJhY2sgdG8gYXJjNC5VSW50NjQgZm9yIEFCSSBjb21wYXRhYmlsaXR5IGJlZm9yZSByZXR1cm5pbmcKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChjKQogICAgaXRvYgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFyYzRfdHlwZXMuY29udHJhY3QuQXJjNFR5cGVzLmFkZF9hcmM0X3VpbnRfbihhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzLCBkOiBieXRlcykgLT4gYnl0ZXM6CmFkZF9hcmM0X3VpbnRfbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjM0LTM4CiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfVUlOVE4KICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9hcmM0X3VpbnRfbigKICAgIC8vICAgICBzZWxmLCBhOiBhcmM0LlVJbnQ4LCBiOiBhcmM0LlVJbnQxNiwgYzogYXJjNC5VSW50MzIsIGQ6IGFyYzQuVUludDY0CiAgICAvLyApIC0+IGFyYzQuVUludDY0OgogICAgcHJvdG8gNCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo0MwogICAgLy8gYXNzZXJ0IGEuYnl0ZXMubGVuZ3RoID09IDEgICMgVUludDggPSAxIGJ5dGUKICAgIGZyYW1lX2RpZyAtNAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBiLmJ5dGVzLmxlbmd0aCA9PSAyICAjIFVJbnQxNiA9IDIgYnl0ZXMKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBwdXNoaW50IDIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NDUKICAgIC8vIGFzc2VydCBjLmJ5dGVzLmxlbmd0aCA9PSA0ICAjIFVJbnQzMiA9IDQgYnl0ZXMKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NDYKICAgIC8vIGFzc2VydCBkLmJ5dGVzLmxlbmd0aCA9PSA4ICAjIFVJbnQ2NCA9IDggYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBwdXNoaW50IDggLy8gOAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NDgKICAgIC8vIHRvdGFsID0gYS5uYXRpdmUgKyBiLm5hdGl2ZSArIGMubmF0aXZlICsgZC5uYXRpdmUKICAgIGZyYW1lX2RpZyAtNAogICAgYnRvaQogICAgZnJhbWVfZGlnIC0zCiAgICBidG9pCiAgICArCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ0b2kKICAgICsKICAgIGZyYW1lX2RpZyAtMQogICAgYnRvaQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NTAKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NCh0b3RhbCkKICAgIGl0b2IKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRUeXBlcy5hZGRfYXJjNF9iaWd1aW50X24oYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcykgLT4gYnl0ZXM6CmFkZF9hcmM0X2JpZ3VpbnRfbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjU0LTU4CiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfQklHVUlOVAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYWRkX2FyYzRfYmlndWludF9uKAogICAgLy8gICAgIHNlbGYsIGE6IGFyYzQuVUludDEyOCwgYjogYXJjNC5VSW50MjU2LCBjOiBhcmM0LlVJbnQ1MTIKICAgIC8vICkgLT4gYXJjNC5VSW50NTEyOgogICAgcHJvdG8gMyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo2MwogICAgLy8gYXNzZXJ0IGEuYnl0ZXMubGVuZ3RoID09IDE2CiAgICBmcmFtZV9kaWcgLTMKICAgIGxlbgogICAgcHVzaGludCAxNiAvLyAxNgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NjQKICAgIC8vIGFzc2VydCBiLmJ5dGVzLmxlbmd0aCA9PSAzMgogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjY1CiAgICAvLyBhc3NlcnQgYy5ieXRlcy5sZW5ndGggPT0gNjQKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjY3CiAgICAvLyB0b3RhbCA9IGEubmF0aXZlICsgYi5uYXRpdmUgKyBjLm5hdGl2ZQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGIrCiAgICBmcmFtZV9kaWcgLTEKICAgIGIrCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo2OQogICAgLy8gcmV0dXJuIGFyYzQuVUludDUxMih0b3RhbCkKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA2NAogICAgYnplcm8KICAgIGJ8CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHlwZXMuYXJjNF9ieXRlKGE6IGJ5dGVzKSAtPiBieXRlczoKYXJjNF9ieXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NzMtNzUKICAgIC8vICMgZXhhbXBsZTogQVJDNF9CWVRFUwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYXJjNF9ieXRlKHNlbGYsIGE6IGFyYzQuQnl0ZSkgLT4gYXJjNC5CeXRlOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo3OQogICAgLy8gcmV0dXJuIGFyYzQuQnl0ZShhLm5hdGl2ZSArIDEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ0b2kKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDcgMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFyYzRfdHlwZXMuY29udHJhY3QuQXJjNFR5cGVzLmFyYzRfYWRkcmVzc19wcm9wZXJ0aWVzKGFkZHJlc3M6IGJ5dGVzKSAtPiB1aW50NjQ6CmFyYzRfYWRkcmVzc19wcm9wZXJ0aWVzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6ODMtODUKICAgIC8vICMgZXhhbXBsZTogQVJDNF9BRERSRVNTCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBhcmM0X2FkZHJlc3NfcHJvcGVydGllcyhzZWxmLCBhZGRyZXNzOiBhcmM0LkFkZHJlc3MpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6OTQKICAgIC8vIGJhbCA9IGFjY291bnQuYmFsYW5jZSAgIyByZXR1cm5zIHRoZSBiYWxhbmNlIG9mIHRoZSBhY2NvdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo5NgogICAgLy8gYWNjb3VudC50b3RhbF9hc3NldHMKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5Ojk5CiAgICAvLyByZXR1cm4gYmFsCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [72, 87, 107, 126, 151, 179], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [328, 335], "errorMessage": "account funded"}, {"pc": [206], "errorMessage": "can only call when creating"}, {"pc": [75, 90, 110, 129, 154, 182], "errorMessage": "can only call when not creating"}, {"pc": [303], "errorMessage": "overflow"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "a"}, {"type": "uint64", "name": "b"}], "name": "add_arc4_uint64", "returns": {"type": "uint64"}, "desc": "Math operations (like a + b) are not supported on arc4.UInt64 types\nsince they are internally represented as byte arrays in the AVM. Use the .native property to perform arithmetic operations.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint8", "name": "a"}, {"type": "uint16", "name": "b"}, {"type": "uint32", "name": "c"}, {"type": "uint64", "name": "d"}], "name": "add_arc4_uint_n", "returns": {"type": "uint64"}, "desc": "The encoding of arc4 integers will be smaller if it uses fewer bits.\nUltimately, they are all represented with native UInt64.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint128", "name": "a"}, {"type": "uint256", "name": "b"}, {"type": "uint512", "name": "c"}], "name": "add_arc4_biguint_n", "returns": {"type": "uint512"}, "desc": "Integers with larger bit size are supported up to 512 bits.\nUltimately, they are all represented with native BigUInt.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "byte", "name": "a"}], "name": "arc4_byte", "returns": {"type": "byte"}, "desc": "An arc4.Byte is essentially an alias for an 8-bit integer.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "name": "address"}], "name": "arc4_address_properties", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "address", "name": "address"}], "name": "arc4_address_return", "returns": {"type": "address"}, "events": [], "readonly": false, "recommendations": {}}], "name": "Arc4Types", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiACAUAmAQQVH3x1MRtBALWCBgQFlDkXBIRbBoUE6tFwzwTctol/BP3c9E8E8uyOWDYaAI4GAG4AUgA5ACYAEgADgQBDMRkURDEYRCg2GgFQsCJDMRkURDEYRDYaAYgA4BYoTFCwIkMxGRREMRhENhoBiAC/KExQsCJDMRkURDEYRDYaATYaAjYaA4gAfihMULAiQzEZFEQxGEQ2GgE2GgI2GgM2GgSIADMoTFCwIkMxGRREMRhENhoBNhoCiAARKExQsCJDMRlA/3cxGBREIkOKAgGL/heL/xcIFomKBAGL/BUiEkSL/RWBAhJEi/4VgQQSRIv/FYEIEkSL/BeL/RcIi/4XCIv/FwgWiYoDAYv9FYEQEkSL/hWBIBJEi/8VIxJEi/2L/qCL/6BJFSMORCOvq4mKAQGL/xciCBZXBwGJigEBi/9zAESL/3MJRQFEiQ==", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDY0CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE1CiAgICAvLyBjbGFzcyBBcmM0VHlwZXMoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxMQogICAgcHVzaGJ5dGVzcyAweDA1OTQzOTE3IDB4ODQ1YjA2ODUgMHhlYWQxNzBjZiAweGRjYjY4OTdmIDB4ZmRkY2Y0NGYgMHhmMmVjOGU1OCAvLyBtZXRob2QgImFkZF9hcmM0X3VpbnQ2NCh1aW50NjQsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiYWRkX2FyYzRfdWludF9uKHVpbnQ4LHVpbnQxNix1aW50MzIsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiYWRkX2FyYzRfYmlndWludF9uKHVpbnQxMjgsdWludDI1Nix1aW50NTEyKXVpbnQ1MTIiLCBtZXRob2QgImFyYzRfYnl0ZShieXRlKWJ5dGUiLCBtZXRob2QgImFyYzRfYWRkcmVzc19wcm9wZXJ0aWVzKGFkZHJlc3MpdWludDY0IiwgbWV0aG9kICJhcmM0X2FkZHJlc3NfcmV0dXJuKGFkZHJlc3MpYWRkcmVzcyIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYWRkX2FyYzRfdWludDY0X3JvdXRlQDMgbWFpbl9hZGRfYXJjNF91aW50X25fcm91dGVANCBtYWluX2FkZF9hcmM0X2JpZ3VpbnRfbl9yb3V0ZUA1IG1haW5fYXJjNF9ieXRlX3JvdXRlQDYgbWFpbl9hcmM0X2FkZHJlc3NfcHJvcGVydGllc19yb3V0ZUA3IG1haW5fYXJjNF9hZGRyZXNzX3JldHVybl9yb3V0ZUA4CgptYWluX2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNQogICAgLy8gY2xhc3MgQXJjNFR5cGVzKEFSQzRDb250cmFjdCk6CiAgICBwdXNoaW50IDAgLy8gMAogICAgcmV0dXJuCgptYWluX2FyYzRfYWRkcmVzc19yZXR1cm5fcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjEwMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTUKICAgIC8vIGNsYXNzIEFyYzRUeXBlcyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTAxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzRfYWRkcmVzc19wcm9wZXJ0aWVzX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo4My04NAogICAgLy8gIyBleGFtcGxlOiBBUkM0X0FERFJFU1MKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNQogICAgLy8gY2xhc3MgQXJjNFR5cGVzKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo4My04NAogICAgLy8gIyBleGFtcGxlOiBBUkM0X0FERFJFU1MKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhcmM0X2FkZHJlc3NfcHJvcGVydGllcwogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmM0X2J5dGVfcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjczLTc0CiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfQllURVMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNQogICAgLy8gY2xhc3MgQXJjNFR5cGVzKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo3My03NAogICAgLy8gIyBleGFtcGxlOiBBUkM0X0JZVEVTCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXJjNF9ieXRlCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9hcmM0X2JpZ3VpbnRfbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NTQtNTUKICAgIC8vICMgZXhhbXBsZTogQVJDNF9CSUdVSU5UCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MTUKICAgIC8vIGNsYXNzIEFyYzRUeXBlcyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NTQtNTUKICAgIC8vICMgZXhhbXBsZTogQVJDNF9CSUdVSU5UCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2FyYzRfYmlndWludF9uCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9hcmM0X3VpbnRfbl9yb3V0ZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6MzQtMzUKICAgIC8vICMgZXhhbXBsZTogQVJDNF9VSU5UTgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE1CiAgICAvLyBjbGFzcyBBcmM0VHlwZXMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjM0LTM1CiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfVUlOVE4KICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBhZGRfYXJjNF91aW50X24KICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkX2FyYzRfdWludDY0X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNy0xOAogICAgLy8gIyBleGFtcGxlOiBBUkM0X1VJTlQ2NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE1CiAgICAvLyBjbGFzcyBBcmM0VHlwZXMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE3LTE4CiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfVUlOVDY0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2FyYzRfdWludDY0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjE1CiAgICAvLyBjbGFzcyBBcmM0VHlwZXMoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTUKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmFyYzRfdHlwZXMuY29udHJhY3QuQXJjNFR5cGVzLmFkZF9hcmM0X3VpbnQ2NChhOiBieXRlcywgYjogYnl0ZXMpIC0+IGJ5dGVzOgphZGRfYXJjNF91aW50NjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToxNy0xOQogICAgLy8gIyBleGFtcGxlOiBBUkM0X1VJTlQ2NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYWRkX2FyYzRfdWludDY0KHNlbGYsIGE6IGFyYzQuVUludDY0LCBiOiBhcmM0LlVJbnQ2NCkgLT4gYXJjNC5VSW50NjQ6CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjI2LTI3CiAgICAvLyAjIFVzZSB0aGUgbmF0aXZlIGludGVnZXJzIHRvIHBlcmZvcm0gYXJpdGhtZXRpYwogICAgLy8gYyA9IGEubmF0aXZlICsgYi5uYXRpdmUKICAgIGZyYW1lX2RpZyAtMgogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICBidG9pCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weToyOS0zMAogICAgLy8gIyBDb252ZXJ0IGJhY2sgdG8gYXJjNC5VSW50NjQgZm9yIEFCSSBjb21wYXRhYmlsaXR5IGJlZm9yZSByZXR1cm5pbmcKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChjKQogICAgaXRvYgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFyYzRfdHlwZXMuY29udHJhY3QuQXJjNFR5cGVzLmFkZF9hcmM0X3VpbnRfbihhOiBieXRlcywgYjogYnl0ZXMsIGM6IGJ5dGVzLCBkOiBieXRlcykgLT4gYnl0ZXM6CmFkZF9hcmM0X3VpbnRfbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjM0LTM4CiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfVUlOVE4KICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9hcmM0X3VpbnRfbigKICAgIC8vICAgICBzZWxmLCBhOiBhcmM0LlVJbnQ4LCBiOiBhcmM0LlVJbnQxNiwgYzogYXJjNC5VSW50MzIsIGQ6IGFyYzQuVUludDY0CiAgICAvLyApIC0+IGFyYzQuVUludDY0OgogICAgcHJvdG8gNCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo0MwogICAgLy8gYXNzZXJ0IGEuYnl0ZXMubGVuZ3RoID09IDEgICMgVUludDggPSAxIGJ5dGUKICAgIGZyYW1lX2RpZyAtNAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBiLmJ5dGVzLmxlbmd0aCA9PSAyICAjIFVJbnQxNiA9IDIgYnl0ZXMKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBwdXNoaW50IDIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NDUKICAgIC8vIGFzc2VydCBjLmJ5dGVzLmxlbmd0aCA9PSA0ICAjIFVJbnQzMiA9IDQgYnl0ZXMKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NDYKICAgIC8vIGFzc2VydCBkLmJ5dGVzLmxlbmd0aCA9PSA4ICAjIFVJbnQ2NCA9IDggYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBwdXNoaW50IDggLy8gOAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NDgKICAgIC8vIHRvdGFsID0gYS5uYXRpdmUgKyBiLm5hdGl2ZSArIGMubmF0aXZlICsgZC5uYXRpdmUKICAgIGZyYW1lX2RpZyAtNAogICAgYnRvaQogICAgZnJhbWVfZGlnIC0zCiAgICBidG9pCiAgICArCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ0b2kKICAgICsKICAgIGZyYW1lX2RpZyAtMQogICAgYnRvaQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NTAKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NCh0b3RhbCkKICAgIGl0b2IKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hcmM0X3R5cGVzLmNvbnRyYWN0LkFyYzRUeXBlcy5hZGRfYXJjNF9iaWd1aW50X24oYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcykgLT4gYnl0ZXM6CmFkZF9hcmM0X2JpZ3VpbnRfbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjU0LTU4CiAgICAvLyAjIGV4YW1wbGU6IEFSQzRfQklHVUlOVAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYWRkX2FyYzRfYmlndWludF9uKAogICAgLy8gICAgIHNlbGYsIGE6IGFyYzQuVUludDEyOCwgYjogYXJjNC5VSW50MjU2LCBjOiBhcmM0LlVJbnQ1MTIKICAgIC8vICkgLT4gYXJjNC5VSW50NTEyOgogICAgcHJvdG8gMyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo2MwogICAgLy8gYXNzZXJ0IGEuYnl0ZXMubGVuZ3RoID09IDE2CiAgICBmcmFtZV9kaWcgLTMKICAgIGxlbgogICAgcHVzaGludCAxNiAvLyAxNgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NjQKICAgIC8vIGFzc2VydCBiLmJ5dGVzLmxlbmd0aCA9PSAzMgogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjY1CiAgICAvLyBhc3NlcnQgYy5ieXRlcy5sZW5ndGggPT0gNjQKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5OjY3CiAgICAvLyB0b3RhbCA9IGEubmF0aXZlICsgYi5uYXRpdmUgKyBjLm5hdGl2ZQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGIrCiAgICBmcmFtZV9kaWcgLTEKICAgIGIrCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo2OQogICAgLy8gcmV0dXJuIGFyYzQuVUludDUxMih0b3RhbCkKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA2NAogICAgYnplcm8KICAgIGJ8CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXJjNF90eXBlcy5jb250cmFjdC5BcmM0VHlwZXMuYXJjNF9ieXRlKGE6IGJ5dGVzKSAtPiBieXRlczoKYXJjNF9ieXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6NzMtNzUKICAgIC8vICMgZXhhbXBsZTogQVJDNF9CWVRFUwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYXJjNF9ieXRlKHNlbGYsIGE6IGFyYzQuQnl0ZSkgLT4gYXJjNC5CeXRlOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo3OQogICAgLy8gcmV0dXJuIGFyYzQuQnl0ZShhLm5hdGl2ZSArIDEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ0b2kKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDcgMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFyYzRfdHlwZXMuY29udHJhY3QuQXJjNFR5cGVzLmFyYzRfYWRkcmVzc19wcm9wZXJ0aWVzKGFkZHJlc3M6IGJ5dGVzKSAtPiB1aW50NjQ6CmFyYzRfYWRkcmVzc19wcm9wZXJ0aWVzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6ODMtODUKICAgIC8vICMgZXhhbXBsZTogQVJDNF9BRERSRVNTCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBhcmM0X2FkZHJlc3NfcHJvcGVydGllcyhzZWxmLCBhZGRyZXNzOiBhcmM0LkFkZHJlc3MpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2FyYzRfdHlwZXMvY29udHJhY3QucHk6OTQKICAgIC8vIGJhbCA9IGFjY291bnQuYmFsYW5jZSAgIyByZXR1cm5zIHRoZSBiYWxhbmNlIG9mIHRoZSBhY2NvdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXJjNF90eXBlcy9jb250cmFjdC5weTo5NgogICAgLy8gYWNjb3VudC50b3RhbF9hc3NldHMKICAgIGZyYW1lX2RpZyAtMQogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RUb3RhbEFzc2V0cwogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hcmM0X3R5cGVzL2NvbnRyYWN0LnB5Ojk5CiAgICAvLyByZXR1cm4gYmFsCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [72, 87, 107, 126, 151, 179], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [328, 335], "errorMessage": "account funded"}, {"pc": [206], "errorMessage": "can only call when creating"}, {"pc": [75, 90, 110, 129, 154, 182], "errorMessage": "can only call when not creating"}, {"pc": [303], "errorMessage": "overflow"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.approval.puya.map index ed59424..48b1977 100644 --- a/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../box_storage/contract.py" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAmUK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AA/TL;;;AA+TK;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AA3TL;;;AAAA;AA2TK;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;AAAA;AAAA;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AA1BA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAjBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAbA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AANA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAPA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAdA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAzJL;;;AAAA;AAyJK;;;AAAA;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAtBA;;AAAA;AAAA;AAAA;;AAAA;AAvHL;;;AAAA;AAAA;;;AAAA;;;AAuHK;;;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AA9GL;;;AAAA;;;AA8GK;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AA1GL;;;AAAA;AAAA;;;AAAA;;;AA0GK;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAtGL;;;AAAA;AAsGK;;;AAAA;;AAPA;;AAAA;AAAA;AAAA;;AAAA;AA/FL;;;AA+FK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AANA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAbA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AALA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AALA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AApBL;;;AAAA;AAoBK;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAhBL;;AAAA;;;;;;;;;AAgBA;;;AAEe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAER;;;AAEe;;AAAA;AAAA;AAAA;AAAP;AAER;;;AAEgB;AACD;AAAA;AAAgC;;AAAhC;;AAAA;AAAP;AAER;;;AAE6B;AACM;AAApB;AAAP;AACe;;AAFM;AAId;AAAP;AAJqB;AAMd;AAAA;;AAAA;;AAAA;AAAA;AAAP;;AAER;;;AAEwC;AAAA;AAAA;AAAA;AAChC;AAAA;AAER;;;AAEgB;AACQ;AAAA;AAAA;AAAA;;AAAA;AACb;;;AACS;;AAAR;;AACJ;;AAAA;;AAAA;;AAAA;;AAAA;AAER;;;AAE6B;AACM;AAApB;AAAP;AADqB;AAGL;AAAA;AAAA;;AAAA;AACb;;;AACS;;AAAR;;AACJ;;AAAA;;AAAA;;AAAA;;AAAA;AAKR;;;AAGY;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;AAAA;AAAA;AAAA;;;AACA;;AAAA;AAAA;AAHJ;AAMR;;;AAEgB;AACD;AAAA;AAAgC;;AAAhC;;AAAA;AAAsD;;AAAtD;AAAP;AACO;AAAP;AAER;;;AAEY;AAAJ;;AACO;AAAA;AAAA;AAAA;AAAyB;;AAAzB;AAAA;;AAAA;AAAwC;;AAAxC;AAAP;AACgC;AAAA;AAAA;AAAA;AACzB;AAAA;AAAP;AACO;AAAP;;AAER;;;AAGgB;AACQ;AAAA;AAAA;;AACT;AAAP;AAHQ;AAID;AAAA;AAAA;;AAAP;;AAER;;;AAEe;;AAAA;;AAAA;AAAA;AAAA;AAAP;AAKR;;;AAEQ;;AAAA;AAAA;AAAA;AAAA;;AAER;;;AAEQ;;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAER;;;AAEQ;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AACO;AAAA;AAAA;;AAAA;AAAP;AACO;AAAP;AAKR;;;AAOQ;;AAAA;AAAA;AAAA;AAAA;AACA;;AAAA;;AAAA;;AAAA;;AAAA;AACA;;AAAA;;AAAA;;AAAA;;AAAA;AACuB;;AAAA;;;AAAvB;;AAAA;;AAAA;;AAAA;AAAA;AAEa;;AAAA;AAAA;AAET;;AAAA;AAAA;AAAA;AAAA;AAAuC;AAAA;AAAA;AAAvC;AADJ;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;;AAAtB;AAAA;AAAA;AAAA;AAAA;;AAKR;;;AAEY;AAAJ;;AACI;;AAAJ;;AACI;;AAAJ;;AAEO;AAAA;AAAA;AAAA;AAAyB;;AAAzB;AAAA;;AAAA;AAAwC;;AAAxC;AAAP;AAEI;;AAAA;AAAmC;;AAAnC;;AAAA;AAAA;;;AAAuE;;;;AAAvE;AADJ;AAGO;;AAAA;AAA4B;;AAA5B;;AAAA;AAAkD;;AAAlD;AAAP;;AAER;;;AAEY;;AAAA;AAAJ;;;AAER;;;AAGQ;;AAAyB;AAAzB;;AACO;;AAAA;AAAA;;AAAP;AAEA;;AAAA;;AAJqB;AAKL;AACT;AAAP;AACgB;;AAAT;AAAP;;AAKR;;;AAEgB;AACL;AAAA;AAAA;AAAA;;AAAA;;;AACQ;AAAP;AAAA;AACG;;AAAA;AAAA;AAAP;AAAA;AAER;;;AAE6B;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;AAAP;AAER;;;AAKQ;;AAAA;;AAAA;;AAFQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAER;AACO;;AAAA;AAAA;AAA2C;;AAA3C;AAAP;AACO;;AAAA;AAAA;AAAqC;;AAArC;AAAP;AACO;AAAP;AAKR;;;AAEgB;AAER;AAAA;AAAA;;AAAA;AADQ;;;;;;;;AACR;AACO;AAAA;AAAA;AAAoC;;AAApC;AAAP;AACO;AAAA;AAA8B;;AAA9B;AAAP;;AAER;;;AAE6B;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;AAAkB;AAAlB;AAAP;AAEqB;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;AAAkB;AAAlB;AAAP;AAEqB;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;AAAkB;AAAlB;AAAP;AAEqB;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;AAAkB;AAAlB;AAAP;;AAKR;;;AAE6B;AACM;AAApB;AAAP;AAEe;;AACD;;AAJO;AAML;AAAhB;;AAAA;AANqB;AAON;AAAG;AAAlB;;AAAA;AAPqB;AAQL;AAHN;;AAGV;AARqB;AASI;AAAG;;AAAnB;AACQ;AAAA;;AAAA;AALP;;AAKO;AAAV;AAAP;;AAKR;;;AAE6B;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;;AAAP;AAGe;;AACD;;AANO;AAQL;AAAhB;;AAAA;AARqB;AASN;AAAG;AAAlB;;AAAA;AATqB;AAUL;AAHN;;AAGV;AAVqB;AAWI;AAAG;;AAAnB;AACQ;;AAAA;;AAAA;AALP;;AAKO;AAAV;AAAP;AAZqB;AAcd;AAAP;AAGY;AAjBS;AAiBrB;AAAA;AAjBqB;AAkBd;AAAA;;AAAP;AAlBqB;AAmBd;AAAA;AAAkB;AAAlB;AAAP;;AAKR;;;AAEe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;;AAAtB;AAAP;;AAER;;;AAEoB;AAAL;AAAA;;AAAP;AAER;;;AAEoB;;AAAL;AAAA;;AAAmC;;AAAL;AAAA;;AAA4B;;AAAL;AAAA;;AAA5D;AAER;;;AAE+B;;AACvB;;AADuB;;AACT;;;;;;;;;;;;;;;;;;;;;AAAd;AADuB;;AAEhB;AAAA;AAAA;AAAY;AAAZ;;AAAA;AAAc;;AAAd;;AAAA;AAAA;;AAAc;;AAAd;;AAAA;AAAA;;AAAA;AAFgB;;AAEhB;;AAAA;AAAoB;;;;;;;;;AAApB;AAAP;AAEA;;AAAA;;AAAA;;AAAwB;;;;;;;;;AAAxB;AACO;;AAAA;AAAA;AAA4B;;AAA5B;;AAAA;AAAA;;AAA4B;;AAA5B;;AAAA;AAA8B;;AAA9B;;AAAA;AAAA;;AAA8B;;AAA9B;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAqC;;;;;;;AAArC;AAAP;;AAER;;;AAEwC;;AACd;;;;;;AAAlB;AADgC;;AAKzB;AAAA;AAAA;;;AAAsB;AAAtB;AAAP;AALgC;;AAMzB;AAAA;AAAA;;;AAAsB;;;AAAtB;AAAP;AANgC;;AAOzB;AAAA;AAAA;;;AAAsB;;;AAAtB;AAAP;AAPgC;;AAQzB;AAAA;AAAA;;;AAAsB;;;AAAtB;AAAP;;AAMR;;;AAGe;AAAP;;AAMR;;;AAEe;;AAAA;AAAA;AAAA;;AAAP;AAER;;;AAEsB;;AAAP;;AAAA;AAAA;AAAA;;AAAP", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAmUK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AA/TL;;;AA+TK;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AA3TL;;;AAAA;AA2TK;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;AAAA;AAAA;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AA1BA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAjBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAbA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AANA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAPA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAdA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAzJL;;;AAAA;AAyJK;;;AAAA;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAtBA;;AAAA;AAAA;AAAA;;AAAA;AAvHL;;;AAAA;AAAA;;;AAAA;;;AAuHK;;;AAAA;;AATA;;AAAA;AAAA;AAAA;;AAAA;AA9GL;;;AAAA;;;AA8GK;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AA1GL;;;AAAA;AAAA;;;AAAA;;;AA0GK;;;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAtGL;;;AAAA;AAsGK;;;AAAA;;AAPA;;AAAA;AAAA;AAAA;;AAAA;AA/FL;;;AA+FK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AANA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAbA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AALA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AALA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AApBL;;;AAAA;AAoBK;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAhBL;;AAAA;;;;;;;;;AAkBe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAER;;;AAEe;;AAAA;AAAA;AAAA;AAAP;AAIQ;AACD;AAAA;AAAgC;;AAAhC;;AAAA;AAAP;AAIqB;AACM;AAApB;AAAP;AACe;;AAFM;AAId;AAAP;AAJqB;AAMd;AAAA;;AAAA;;AAAA;AAAA;AAAP;;AAIgC;AAAA;AAAA;AAAA;AAChC;AAAA;AAER;;;AAEgB;AACQ;AAAA;AAAA;AAAA;;AAAA;AACb;;;AACS;;AAAR;;AACJ;;AAAA;;AAAA;;AAAA;;AAAA;AAER;;;AAE6B;AACM;AAApB;AAAP;AADqB;AAGL;AAAA;AAAA;;AAAA;AACb;;;AACS;;AAAR;;AACJ;;AAAA;;AAAA;;AAAA;;AAAA;AAQI;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;AAAA;AAAA;AAAA;;;AACA;;AAAA;AAAA;AAHJ;AAQQ;AACD;AAAA;AAAgC;;AAAhC;;AAAA;AAAsD;;AAAtD;AAAP;AACO;AAAP;AAII;AAAJ;;AACO;AAAA;AAAA;AAAA;AAAyB;;AAAzB;AAAA;;AAAA;AAAwC;;AAAxC;AAAP;AACgC;AAAA;AAAA;AAAA;AACzB;AAAA;AAAP;AACO;AAAP;;AAKQ;AACQ;AAAA;AAAA;;AACT;AAAP;AAHQ;AAID;AAAA;AAAA;;AAAP;;AAER;;;AAEe;;AAAA;;AAAA;AAAA;AAAA;AAAP;AAKR;;;AAEQ;;AAAA;AAAA;AAAA;AAAA;;AAER;;;AAEQ;;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAER;;;AAEQ;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AACO;AAAA;AAAA;;AAAA;AAAP;AACO;AAAP;AAKR;;;AAOQ;;AAAA;AAAA;AAAA;AAAA;AACA;;AAAA;;AAAA;;AAAA;;AAAA;AACA;;AAAA;;AAAA;;AAAA;;AAAA;AACuB;;AAAA;;;AAAvB;;AAAA;;AAAA;;AAAA;AAAA;AAEa;;AAAA;AAAA;AAET;;AAAA;AAAA;AAAA;AAAA;AAAuC;AAAA;AAAA;AAAvC;AADJ;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;;AAAtB;AAAA;AAAA;AAAA;AAAA;;AAOI;AAAJ;;AACI;;AAAJ;;AACI;;AAAJ;;AAEO;AAAA;AAAA;AAAA;AAAyB;;AAAzB;AAAA;;AAAA;AAAwC;;AAAxC;AAAP;AAEI;;AAAA;AAAmC;;AAAnC;;AAAA;AAAA;;;AAAuE;;;;AAAvE;AADJ;AAGO;;AAAA;AAA4B;;AAA5B;;AAAA;AAAkD;;AAAlD;AAAP;;AAER;;;AAEY;;AAAA;AAAJ;;;AAKA;;AAAyB;AAAzB;;AACO;;AAAA;AAAA;;AAAP;AAEA;;AAAA;;AAJqB;AAKL;AACT;AAAP;AACgB;;AAAT;AAAP;;AAKR;;;AAEgB;AACL;AAAA;AAAA;AAAA;;AAAA;;;AACQ;AAAP;AAAA;AACG;;AAAA;AAAA;AAAP;AAAA;AAIqB;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;AAAP;AAOA;;AAAA;;AAAA;;AAFQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAER;AACO;;AAAA;AAAA;AAA2C;;AAA3C;AAAP;AACO;;AAAA;AAAA;AAAqC;;AAArC;AAAP;AACO;AAAP;AAOQ;AAER;AAAA;AAAA;;AAAA;AADQ;;;;;;;;AACR;AACO;AAAA;AAAA;AAAoC;;AAApC;AAAP;AACO;AAAA;AAA8B;;AAA9B;AAAP;;AAIqB;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;AAAkB;AAAlB;AAAP;AAEqB;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;AAAkB;AAAlB;AAAP;AAEqB;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;AAAkB;AAAlB;AAAP;AAEqB;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;AAAkB;AAAlB;AAAP;;AAOqB;AACM;AAApB;AAAP;AAEe;;AACD;;AAJO;AAML;AAAhB;;AAAA;AANqB;AAON;AAAG;AAAlB;;AAAA;AAPqB;AAQL;AAHN;;AAGV;AARqB;AASI;AAAG;;AAAnB;AACQ;AAAA;;AAAA;AALP;;AAKO;AAAV;AAAP;;AAOqB;AACM;AAApB;AAAP;AADqB;AAEd;AAAA;;AAAP;AAGe;;AACD;;AANO;AAQL;AAAhB;;AAAA;AARqB;AASN;AAAG;AAAlB;;AAAA;AATqB;AAUL;AAHN;;AAGV;AAVqB;AAWI;AAAG;;AAAnB;AACQ;;AAAA;;AAAA;AALP;;AAKO;AAAV;AAAP;AAZqB;AAcd;AAAP;AAGY;AAjBS;AAiBrB;AAAA;AAjBqB;AAkBd;AAAA;;AAAP;AAlBqB;AAmBd;AAAA;AAAkB;AAAlB;AAAP;;AAOO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;;AAAtB;AAAP;;AAIY;AAAL;AAAA;;AAAP;AAIY;;AAAL;AAAA;;AAAmC;;AAAL;AAAA;;AAA4B;;AAAL;AAAA;;AAA5D;AAIuB;;AACvB;;AADuB;;AACT;;;;;;;;;;;;;;;;;;;;;AAAd;AADuB;;AAEhB;AAAA;AAAA;AAAY;AAAZ;;AAAA;AAAc;;AAAd;;AAAA;AAAA;;AAAc;;AAAd;;AAAA;AAAA;;AAAA;AAFgB;;AAEhB;;AAAA;AAAoB;;;;;;;;;AAApB;AAAP;AAEA;;AAAA;;AAAA;;AAAwB;;;;;;;;;AAAxB;AACO;;AAAA;AAAA;AAA4B;;AAA5B;;AAAA;AAAA;;AAA4B;;AAA5B;;AAAA;AAA8B;;AAA9B;;AAAA;AAAA;;AAA8B;;AAA9B;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAqC;;;;;;;AAArC;AAAP;;AAIgC;;AACd;;;;;;AAAlB;AADgC;;AAKzB;AAAA;AAAA;;;AAAsB;AAAtB;AAAP;AALgC;;AAMzB;AAAA;AAAA;;;AAAsB;;;AAAtB;AAAP;AANgC;;AAOzB;AAAA;AAAA;;;AAAsB;;;AAAtB;AAAP;AAPgC;;AAQzB;AAAA;AAAA;;;AAAsB;;;AAAtB;AAAP;;AASO;AAAP;;AAMR;;;AAEe;;AAAA;AAAA;AAAA;;AAAP;AAER;;;AAEsB;;AAAP;;AAAA;AAAA;AAAA;;AAAP", "op_pc_offset": 0, "pc_events": { "1": { @@ -30,13 +30,168 @@ "stack_out": [] }, "106": { - "op": "pushbytess 0x5888b998 0x18d0fbe3 0x3af23728 0xcb911969 0x4fc279e1 0x9ef66971 0xe89b7f6f 0x4e6f089e 0x12806f6b 0x75ed3485 0x58e27eaf 0xaf911590 0xae84ac4d 0xeff5b657 0x1b8dade0 0x65c3063e 0x82708565 0x47bb7043 0x3b8cae2f 0x78b0734e 0xb13e64d8 0xd67789eb 0x94e5d3f4 0xa86d16b1 0x54db62de 0xef156830 0x79df57fc 0xf76125b9 0x21aca6ff 0x04ef4971 0x23ecb32c 0xecd1d1f9 0x7fa2d1c0 0x8ee2c364 0x9802088c 0x36f86c8e // method \"get_box()uint64\", method \"get_item_box_map(uint64)string\", method \"get_box_map()string\", method \"get_box_ref()void\", method \"maybe_box()(uint64,bool)\", method \"maybe_box_map()(string,bool)\", method \"maybe_box_ref()(byte[],bool)\", method \"get_box_example()(uint64,byte[],string)\", method \"get_box_map_example()bool\", method \"maybe_box_example()void\", method \"maybe_box_map_example()void\", method \"get_box_map_struct(uint64)(string,uint64,uint64)\", method \"set_box(uint64)void\", method \"set_box_map(uint64,string)void\", method \"set_box_map_struct(uint64,(string,uint64,uint64))bool\", method \"set_box_example(uint64,byte[],string)void\", method \"delete_box()void\", method \"delete_box_map(uint64)void\", method \"delete_box_ref()void\", method \"box_map_length()uint64\", method \"length_box_ref()uint64\", method \"box_map_struct_length()bool\", method \"box_map_length_example()void\", method \"length_box_ref_example()void\", method \"extract_box_ref()void\", method \"manipulate_box_ref()void\", method \"value_box()void\", method \"exist_box()bool\", method \"exist_box_example()(bool,bool,bool)\", method \"slice_box()void\", method \"arc4_box()void\", method \"key_box()byte[]\", method \"key_box_example()void\", method \"box_map_exists(uint64)bool\", method \"box_map_struct_exists(uint64)bool\", method \"key_prefix_box_map()byte[]\"" + "op": "pushbytess 0x5888b998 0x18d0fbe3 0x3af23728 0xcb911969 0x4fc279e1 0x9ef66971 0xe89b7f6f 0x4e6f089e 0x12806f6b 0x75ed3485 0x58e27eaf 0xaf911590 0xae84ac4d 0xeff5b657 0x1b8dade0 0x65c3063e 0x82708565 0x47bb7043 0x3b8cae2f 0x78b0734e 0xb13e64d8 0xd67789eb 0x94e5d3f4 0xa86d16b1 0x54db62de 0xef156830 0x79df57fc 0xf76125b9 0x21aca6ff 0x04ef4971 0x23ecb32c 0xecd1d1f9 0x7fa2d1c0 0x8ee2c364 0x9802088c 0x36f86c8e // method \"get_box()uint64\", method \"get_item_box_map(uint64)string\", method \"get_box_map()string\", method \"get_box_ref()void\", method \"maybe_box()(uint64,bool)\", method \"maybe_box_map()(string,bool)\", method \"maybe_box_ref()(byte[],bool)\", method \"get_box_example()(uint64,byte[],string)\", method \"get_box_map_example()bool\", method \"maybe_box_example()void\", method \"maybe_box_map_example()void\", method \"get_box_map_struct(uint64)(string,uint64,uint64)\", method \"set_box(uint64)void\", method \"set_box_map(uint64,string)void\", method \"set_box_map_struct(uint64,(string,uint64,uint64))bool\", method \"set_box_example(uint64,byte[],string)void\", method \"delete_box()void\", method \"delete_box_map(uint64)void\", method \"delete_box_ref()void\", method \"box_map_length()uint64\", method \"length_box_ref()uint64\", method \"box_map_struct_length()bool\", method \"box_map_length_example()void\", method \"length_box_ref_example()void\", method \"extract_box_ref()void\", method \"manipulate_box_ref()void\", method \"value_box()void\", method \"exist_box()bool\", method \"exist_box_example()(bool,bool,bool)\", method \"slice_box()void\", method \"arc4_box()void\", method \"key_box()byte[]\", method \"key_box_example()void\", method \"box_map_exists(uint64)bool\", method \"box_map_struct_exists(uint64)bool\", method \"key_prefix_box_map()byte[]\"", + "defined_out": [ + "Method(arc4_box()void)", + "Method(box_map_exists(uint64)bool)", + "Method(box_map_length()uint64)", + "Method(box_map_length_example()void)", + "Method(box_map_struct_exists(uint64)bool)", + "Method(box_map_struct_length()bool)", + "Method(delete_box()void)", + "Method(delete_box_map(uint64)void)", + "Method(delete_box_ref()void)", + "Method(exist_box()bool)", + "Method(exist_box_example()(bool,bool,bool))", + "Method(extract_box_ref()void)", + "Method(get_box()uint64)", + "Method(get_box_example()(uint64,byte[],string))", + "Method(get_box_map()string)", + "Method(get_box_map_example()bool)", + "Method(get_box_map_struct(uint64)(string,uint64,uint64))", + "Method(get_box_ref()void)", + "Method(get_item_box_map(uint64)string)", + "Method(key_box()byte[])", + "Method(key_box_example()void)", + "Method(key_prefix_box_map()byte[])", + "Method(length_box_ref()uint64)", + "Method(length_box_ref_example()void)", + "Method(manipulate_box_ref()void)", + "Method(maybe_box()(uint64,bool))", + "Method(maybe_box_example()void)", + "Method(maybe_box_map()(string,bool))", + "Method(maybe_box_map_example()void)", + "Method(maybe_box_ref()(byte[],bool))", + "Method(set_box(uint64)void)", + "Method(set_box_example(uint64,byte[],string)void)", + "Method(set_box_map(uint64,string)void)", + "Method(set_box_map_struct(uint64,(string,uint64,uint64))bool)", + "Method(slice_box()void)", + "Method(value_box()void)" + ], + "stack_out": [ + "Method(get_box()uint64)", + "Method(get_item_box_map(uint64)string)", + "Method(get_box_map()string)", + "Method(get_box_ref()void)", + "Method(maybe_box()(uint64,bool))", + "Method(maybe_box_map()(string,bool))", + "Method(maybe_box_ref()(byte[],bool))", + "Method(get_box_example()(uint64,byte[],string))", + "Method(get_box_map_example()bool)", + "Method(maybe_box_example()void)", + "Method(maybe_box_map_example()void)", + "Method(get_box_map_struct(uint64)(string,uint64,uint64))", + "Method(set_box(uint64)void)", + "Method(set_box_map(uint64,string)void)", + "Method(set_box_map_struct(uint64,(string,uint64,uint64))bool)", + "Method(set_box_example(uint64,byte[],string)void)", + "Method(delete_box()void)", + "Method(delete_box_map(uint64)void)", + "Method(delete_box_ref()void)", + "Method(box_map_length()uint64)", + "Method(length_box_ref()uint64)", + "Method(box_map_struct_length()bool)", + "Method(box_map_length_example()void)", + "Method(length_box_ref_example()void)", + "Method(extract_box_ref()void)", + "Method(manipulate_box_ref()void)", + "Method(value_box()void)", + "Method(exist_box()bool)", + "Method(exist_box_example()(bool,bool,bool))", + "Method(slice_box()void)", + "Method(arc4_box()void)", + "Method(key_box()byte[])", + "Method(key_box_example()void)", + "Method(box_map_exists(uint64)bool)", + "Method(box_map_struct_exists(uint64)bool)", + "Method(key_prefix_box_map()byte[])" + ] }, "288": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(arc4_box()void)", + "Method(box_map_exists(uint64)bool)", + "Method(box_map_length()uint64)", + "Method(box_map_length_example()void)", + "Method(box_map_struct_exists(uint64)bool)", + "Method(box_map_struct_length()bool)", + "Method(delete_box()void)", + "Method(delete_box_map(uint64)void)", + "Method(delete_box_ref()void)", + "Method(exist_box()bool)", + "Method(exist_box_example()(bool,bool,bool))", + "Method(extract_box_ref()void)", + "Method(get_box()uint64)", + "Method(get_box_example()(uint64,byte[],string))", + "Method(get_box_map()string)", + "Method(get_box_map_example()bool)", + "Method(get_box_map_struct(uint64)(string,uint64,uint64))", + "Method(get_box_ref()void)", + "Method(get_item_box_map(uint64)string)", + "Method(key_box()byte[])", + "Method(key_box_example()void)", + "Method(key_prefix_box_map()byte[])", + "Method(length_box_ref()uint64)", + "Method(length_box_ref_example()void)", + "Method(manipulate_box_ref()void)", + "Method(maybe_box()(uint64,bool))", + "Method(maybe_box_example()void)", + "Method(maybe_box_map()(string,bool))", + "Method(maybe_box_map_example()void)", + "Method(maybe_box_ref()(byte[],bool))", + "Method(set_box(uint64)void)", + "Method(set_box_example(uint64,byte[],string)void)", + "Method(set_box_map(uint64,string)void)", + "Method(set_box_map_struct(uint64,(string,uint64,uint64))bool)", + "Method(slice_box()void)", + "Method(value_box()void)", + "tmp%2#0" + ], + "stack_out": [ + "Method(get_box()uint64)", + "Method(get_item_box_map(uint64)string)", + "Method(get_box_map()string)", + "Method(get_box_ref()void)", + "Method(maybe_box()(uint64,bool))", + "Method(maybe_box_map()(string,bool))", + "Method(maybe_box_ref()(byte[],bool))", + "Method(get_box_example()(uint64,byte[],string))", + "Method(get_box_map_example()bool)", + "Method(maybe_box_example()void)", + "Method(maybe_box_map_example()void)", + "Method(get_box_map_struct(uint64)(string,uint64,uint64))", + "Method(set_box(uint64)void)", + "Method(set_box_map(uint64,string)void)", + "Method(set_box_map_struct(uint64,(string,uint64,uint64))bool)", + "Method(set_box_example(uint64,byte[],string)void)", + "Method(delete_box()void)", + "Method(delete_box_map(uint64)void)", + "Method(delete_box_ref()void)", + "Method(box_map_length()uint64)", + "Method(length_box_ref()uint64)", + "Method(box_map_struct_length()bool)", + "Method(box_map_length_example()void)", + "Method(length_box_ref_example()void)", + "Method(extract_box_ref()void)", + "Method(manipulate_box_ref()void)", + "Method(value_box()void)", + "Method(exist_box()bool)", + "Method(exist_box_example()(bool,bool,bool))", + "Method(slice_box()void)", + "Method(arc4_box()void)", + "Method(key_box()byte[])", + "Method(key_box_example()void)", + "Method(box_map_exists(uint64)bool)", + "Method(box_map_struct_exists(uint64)bool)", + "Method(key_prefix_box_map()byte[])", + "tmp%2#0" + ] }, "291": { - "op": "match main_get_box_route@5 main_get_item_box_map_route@6 main_get_box_map_route@7 main_get_box_ref_route@8 main_maybe_box_route@9 main_maybe_box_map_route@10 main_maybe_box_ref_route@11 main_get_box_example_route@12 main_get_box_map_example_route@13 main_maybe_box_example_route@14 main_maybe_box_map_example_route@15 main_get_box_map_struct_route@16 main_set_box_route@17 main_set_box_map_route@18 main_set_box_map_struct_route@19 main_set_box_example_route@20 main_delete_box_route@21 main_delete_box_map_route@22 main_delete_box_ref_route@23 main_box_map_length_route@24 main_length_box_ref_route@25 main_box_map_struct_length_route@26 main_box_map_length_example_route@27 main_length_box_ref_example_route@28 main_extract_box_ref_route@29 main_manipulate_box_ref_route@30 main_value_box_route@31 main_exist_box_route@32 main_exist_box_example_route@33 main_slice_box_route@34 main_arc4_box_route@35 main_key_box_route@36 main_key_box_example_route@37 main_box_map_exists_route@38 main_box_map_struct_exists_route@39 main_key_prefix_box_map_route@40" + "op": "match main_get_box_route@5 main_get_item_box_map_route@6 main_get_box_map_route@7 main_get_box_ref_route@8 main_maybe_box_route@9 main_maybe_box_map_route@10 main_maybe_box_ref_route@11 main_get_box_example_route@12 main_get_box_map_example_route@13 main_maybe_box_example_route@14 main_maybe_box_map_example_route@15 main_get_box_map_struct_route@16 main_set_box_route@17 main_set_box_map_route@18 main_set_box_map_struct_route@19 main_set_box_example_route@20 main_delete_box_route@21 main_delete_box_map_route@22 main_delete_box_ref_route@23 main_box_map_length_route@24 main_length_box_ref_route@25 main_box_map_struct_length_route@26 main_box_map_length_example_route@27 main_length_box_ref_example_route@28 main_extract_box_ref_route@29 main_manipulate_box_ref_route@30 main_value_box_route@31 main_exist_box_route@32 main_exist_box_example_route@33 main_slice_box_route@34 main_arc4_box_route@35 main_key_box_route@36 main_key_box_example_route@37 main_box_map_exists_route@38 main_box_map_struct_exists_route@39 main_key_prefix_box_map_route@40", + "stack_out": [] }, "365": { "block": "main_after_if_else@43", @@ -50,26 +205,27 @@ ] }, "366": { - "op": "return" + "op": "return", + "stack_out": [] }, "367": { "block": "main_key_prefix_box_map_route@40", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%182#0" + "tmp%173#0" ], "stack_out": [ - "tmp%182#0" + "tmp%173#0" ] }, "369": { "op": "!", "defined_out": [ - "tmp%183#0" + "tmp%174#0" ], "stack_out": [ - "tmp%183#0" + "tmp%174#0" ] }, "370": { @@ -80,10 +236,10 @@ "371": { "op": "txn ApplicationID", "defined_out": [ - "tmp%184#0" + "tmp%175#0" ], "stack_out": [ - "tmp%184#0" + "tmp%175#0" ] }, "373": { @@ -114,26 +270,27 @@ ] }, "384": { - "op": "return" + "op": "return", + "stack_out": [] }, "385": { "block": "main_box_map_struct_exists_route@39", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%176#0" + "tmp%168#0" ], "stack_out": [ - "tmp%176#0" + "tmp%168#0" ] }, "387": { "op": "!", "defined_out": [ - "tmp%177#0" + "tmp%169#0" ], "stack_out": [ - "tmp%177#0" + "tmp%169#0" ] }, "388": { @@ -144,10 +301,10 @@ "389": { "op": "txn ApplicationID", "defined_out": [ - "tmp%178#0" + "tmp%170#0" ], "stack_out": [ - "tmp%178#0" + "tmp%170#0" ] }, "391": { @@ -158,10 +315,10 @@ "392": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%180#0" + "reinterpret_bytes[8]%8#0" ], "stack_out": [ - "tmp%180#0" + "reinterpret_bytes[8]%8#0" ] }, "395": { @@ -236,10 +393,10 @@ "405": { "op": "concat", "defined_out": [ - "tmp%181#0" + "tmp%172#0" ], "stack_out": [ - "tmp%181#0" + "tmp%172#0" ] }, "406": { @@ -256,26 +413,27 @@ ] }, "408": { - "op": "return" + "op": "return", + "stack_out": [] }, "409": { "block": "main_box_map_exists_route@38", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%169#0" + "tmp%162#0" ], "stack_out": [ - "tmp%169#0" + "tmp%162#0" ] }, "411": { "op": "!", "defined_out": [ - "tmp%170#0" + "tmp%163#0" ], "stack_out": [ - "tmp%170#0" + "tmp%163#0" ] }, "412": { @@ -286,10 +444,10 @@ "413": { "op": "txn ApplicationID", "defined_out": [ - "tmp%171#0" + "tmp%164#0" ], "stack_out": [ - "tmp%171#0" + "tmp%164#0" ] }, "415": { @@ -300,19 +458,19 @@ "416": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%173#0" + "reinterpret_bytes[8]%7#0" ], "stack_out": [ - "tmp%173#0" + "reinterpret_bytes[8]%7#0" ] }, "419": { "op": "btoi", "defined_out": [ - "tmp%174#0" + "tmp%166#0" ], "stack_out": [ - "tmp%174#0" + "tmp%166#0" ] }, "420": { @@ -387,10 +545,10 @@ "430": { "op": "concat", "defined_out": [ - "tmp%175#0" + "tmp%167#0" ], "stack_out": [ - "tmp%175#0" + "tmp%167#0" ] }, "431": { @@ -407,26 +565,27 @@ ] }, "433": { - "op": "return" + "op": "return", + "stack_out": [] }, "434": { "block": "main_key_box_example_route@37", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%165#0" + "tmp%158#0" ], "stack_out": [ - "tmp%165#0" + "tmp%158#0" ] }, "436": { "op": "!", "defined_out": [ - "tmp%166#0" + "tmp%159#0" ], "stack_out": [ - "tmp%166#0" + "tmp%159#0" ] }, "437": { @@ -437,10 +596,10 @@ "438": { "op": "txn ApplicationID", "defined_out": [ - "tmp%167#0" + "tmp%160#0" ], "stack_out": [ - "tmp%167#0" + "tmp%160#0" ] }, "440": { @@ -462,26 +621,27 @@ ] }, "445": { - "op": "return" + "op": "return", + "stack_out": [] }, "446": { "block": "main_key_box_route@36", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%160#0" + "tmp%153#0" ], "stack_out": [ - "tmp%160#0" + "tmp%153#0" ] }, "448": { "op": "!", "defined_out": [ - "tmp%161#0" + "tmp%154#0" ], "stack_out": [ - "tmp%161#0" + "tmp%154#0" ] }, "449": { @@ -492,10 +652,10 @@ "450": { "op": "txn ApplicationID", "defined_out": [ - "tmp%162#0" + "tmp%155#0" ], "stack_out": [ - "tmp%162#0" + "tmp%155#0" ] }, "452": { @@ -526,26 +686,27 @@ ] }, "470": { - "op": "return" + "op": "return", + "stack_out": [] }, "471": { "block": "main_arc4_box_route@35", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%156#0" + "tmp%149#0" ], "stack_out": [ - "tmp%156#0" + "tmp%149#0" ] }, "473": { "op": "!", "defined_out": [ - "tmp%157#0" + "tmp%150#0" ], "stack_out": [ - "tmp%157#0" + "tmp%150#0" ] }, "474": { @@ -556,10 +717,10 @@ "475": { "op": "txn ApplicationID", "defined_out": [ - "tmp%158#0" + "tmp%151#0" ], "stack_out": [ - "tmp%158#0" + "tmp%151#0" ] }, "477": { @@ -581,26 +742,27 @@ ] }, "482": { - "op": "return" + "op": "return", + "stack_out": [] }, "483": { "block": "main_slice_box_route@34", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%152#0" + "tmp%145#0" ], "stack_out": [ - "tmp%152#0" + "tmp%145#0" ] }, "485": { "op": "!", "defined_out": [ - "tmp%153#0" + "tmp%146#0" ], "stack_out": [ - "tmp%153#0" + "tmp%146#0" ] }, "486": { @@ -611,10 +773,10 @@ "487": { "op": "txn ApplicationID", "defined_out": [ - "tmp%154#0" + "tmp%147#0" ], "stack_out": [ - "tmp%154#0" + "tmp%147#0" ] }, "489": { @@ -636,26 +798,27 @@ ] }, "494": { - "op": "return" + "op": "return", + "stack_out": [] }, "495": { "block": "main_exist_box_example_route@33", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%147#0" + "tmp%140#0" ], "stack_out": [ - "tmp%147#0" + "tmp%140#0" ] }, "497": { "op": "!", "defined_out": [ - "tmp%148#0" + "tmp%141#0" ], "stack_out": [ - "tmp%148#0" + "tmp%141#0" ] }, "498": { @@ -666,10 +829,10 @@ "499": { "op": "txn ApplicationID", "defined_out": [ - "tmp%149#0" + "tmp%142#0" ], "stack_out": [ - "tmp%149#0" + "tmp%142#0" ] }, "501": { @@ -975,10 +1138,10 @@ "538": { "op": "concat", "defined_out": [ - "tmp%151#0" + "tmp%144#0" ], "stack_out": [ - "tmp%151#0" + "tmp%144#0" ] }, "539": { @@ -995,26 +1158,27 @@ ] }, "541": { - "op": "return" + "op": "return", + "stack_out": [] }, "542": { "block": "main_exist_box_route@32", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%142#0" + "tmp%135#0" ], "stack_out": [ - "tmp%142#0" + "tmp%135#0" ] }, "544": { "op": "!", "defined_out": [ - "tmp%143#0" + "tmp%136#0" ], "stack_out": [ - "tmp%143#0" + "tmp%136#0" ] }, "545": { @@ -1025,10 +1189,10 @@ "546": { "op": "txn ApplicationID", "defined_out": [ - "tmp%144#0" + "tmp%137#0" ], "stack_out": [ - "tmp%144#0" + "tmp%137#0" ] }, "548": { @@ -1108,10 +1272,10 @@ "559": { "op": "concat", "defined_out": [ - "tmp%146#0" + "tmp%139#0" ], "stack_out": [ - "tmp%146#0" + "tmp%139#0" ] }, "560": { @@ -1128,26 +1292,27 @@ ] }, "562": { - "op": "return" + "op": "return", + "stack_out": [] }, "563": { "block": "main_value_box_route@31", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%138#0" + "tmp%131#0" ], "stack_out": [ - "tmp%138#0" + "tmp%131#0" ] }, "565": { "op": "!", "defined_out": [ - "tmp%139#0" + "tmp%132#0" ], "stack_out": [ - "tmp%139#0" + "tmp%132#0" ] }, "566": { @@ -1158,10 +1323,10 @@ "567": { "op": "txn ApplicationID", "defined_out": [ - "tmp%140#0" + "tmp%133#0" ], "stack_out": [ - "tmp%140#0" + "tmp%133#0" ] }, "569": { @@ -1183,26 +1348,27 @@ ] }, "574": { - "op": "return" + "op": "return", + "stack_out": [] }, "575": { "block": "main_manipulate_box_ref_route@30", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%134#0" + "tmp%127#0" ], "stack_out": [ - "tmp%134#0" + "tmp%127#0" ] }, "577": { "op": "!", "defined_out": [ - "tmp%135#0" + "tmp%128#0" ], "stack_out": [ - "tmp%135#0" + "tmp%128#0" ] }, "578": { @@ -1213,10 +1379,10 @@ "579": { "op": "txn ApplicationID", "defined_out": [ - "tmp%136#0" + "tmp%129#0" ], "stack_out": [ - "tmp%136#0" + "tmp%129#0" ] }, "581": { @@ -1238,26 +1404,27 @@ ] }, "586": { - "op": "return" + "op": "return", + "stack_out": [] }, "587": { "block": "main_extract_box_ref_route@29", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%130#0" + "tmp%123#0" ], "stack_out": [ - "tmp%130#0" + "tmp%123#0" ] }, "589": { "op": "!", "defined_out": [ - "tmp%131#0" + "tmp%124#0" ], "stack_out": [ - "tmp%131#0" + "tmp%124#0" ] }, "590": { @@ -1268,10 +1435,10 @@ "591": { "op": "txn ApplicationID", "defined_out": [ - "tmp%132#0" + "tmp%125#0" ], "stack_out": [ - "tmp%132#0" + "tmp%125#0" ] }, "593": { @@ -1293,26 +1460,27 @@ ] }, "598": { - "op": "return" + "op": "return", + "stack_out": [] }, "599": { "block": "main_length_box_ref_example_route@28", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%126#0" + "tmp%119#0" ], "stack_out": [ - "tmp%126#0" + "tmp%119#0" ] }, "601": { "op": "!", "defined_out": [ - "tmp%127#0" + "tmp%120#0" ], "stack_out": [ - "tmp%127#0" + "tmp%120#0" ] }, "602": { @@ -1323,10 +1491,10 @@ "603": { "op": "txn ApplicationID", "defined_out": [ - "tmp%128#0" + "tmp%121#0" ], "stack_out": [ - "tmp%128#0" + "tmp%121#0" ] }, "605": { @@ -1348,26 +1516,27 @@ ] }, "610": { - "op": "return" + "op": "return", + "stack_out": [] }, "611": { "block": "main_box_map_length_example_route@27", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%122#0" + "tmp%115#0" ], "stack_out": [ - "tmp%122#0" + "tmp%115#0" ] }, "613": { "op": "!", "defined_out": [ - "tmp%123#0" + "tmp%116#0" ], "stack_out": [ - "tmp%123#0" + "tmp%116#0" ] }, "614": { @@ -1378,10 +1547,10 @@ "615": { "op": "txn ApplicationID", "defined_out": [ - "tmp%124#0" + "tmp%117#0" ], "stack_out": [ - "tmp%124#0" + "tmp%117#0" ] }, "617": { @@ -1403,26 +1572,27 @@ ] }, "622": { - "op": "return" + "op": "return", + "stack_out": [] }, "623": { "block": "main_box_map_struct_length_route@26", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%117#0" + "tmp%110#0" ], "stack_out": [ - "tmp%117#0" + "tmp%110#0" ] }, "625": { "op": "!", "defined_out": [ - "tmp%118#0" + "tmp%111#0" ], "stack_out": [ - "tmp%118#0" + "tmp%111#0" ] }, "626": { @@ -1433,10 +1603,10 @@ "627": { "op": "txn ApplicationID", "defined_out": [ - "tmp%119#0" + "tmp%112#0" ], "stack_out": [ - "tmp%119#0" + "tmp%112#0" ] }, "629": { @@ -1516,10 +1686,10 @@ "640": { "op": "concat", "defined_out": [ - "tmp%121#0" + "tmp%114#0" ], "stack_out": [ - "tmp%121#0" + "tmp%114#0" ] }, "641": { @@ -1536,26 +1706,27 @@ ] }, "643": { - "op": "return" + "op": "return", + "stack_out": [] }, "644": { "block": "main_length_box_ref_route@25", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%112#0" + "tmp%105#0" ], "stack_out": [ - "tmp%112#0" + "tmp%105#0" ] }, "646": { "op": "!", "defined_out": [ - "tmp%113#0" + "tmp%106#0" ], "stack_out": [ - "tmp%113#0" + "tmp%106#0" ] }, "647": { @@ -1566,10 +1737,10 @@ "648": { "op": "txn ApplicationID", "defined_out": [ - "tmp%114#0" + "tmp%107#0" ], "stack_out": [ - "tmp%114#0" + "tmp%107#0" ] }, "650": { @@ -1617,10 +1788,10 @@ "657": { "op": "concat", "defined_out": [ - "tmp%116#0" + "tmp%109#0" ], "stack_out": [ - "tmp%116#0" + "tmp%109#0" ] }, "658": { @@ -1637,26 +1808,27 @@ ] }, "660": { - "op": "return" + "op": "return", + "stack_out": [] }, "661": { "block": "main_box_map_length_route@24", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%107#0" + "tmp%100#0" ], "stack_out": [ - "tmp%107#0" + "tmp%100#0" ] }, "663": { "op": "!", "defined_out": [ - "tmp%108#0" + "tmp%101#0" ], "stack_out": [ - "tmp%108#0" + "tmp%101#0" ] }, "664": { @@ -1667,10 +1839,10 @@ "665": { "op": "txn ApplicationID", "defined_out": [ - "tmp%109#0" + "tmp%102#0" ], "stack_out": [ - "tmp%109#0" + "tmp%102#0" ] }, "667": { @@ -1718,10 +1890,10 @@ "674": { "op": "concat", "defined_out": [ - "tmp%111#0" + "tmp%104#0" ], "stack_out": [ - "tmp%111#0" + "tmp%104#0" ] }, "675": { @@ -1738,26 +1910,27 @@ ] }, "677": { - "op": "return" + "op": "return", + "stack_out": [] }, "678": { "block": "main_delete_box_ref_route@23", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%103#0" + "tmp%96#0" ], "stack_out": [ - "tmp%103#0" + "tmp%96#0" ] }, "680": { "op": "!", "defined_out": [ - "tmp%104#0" + "tmp%97#0" ], "stack_out": [ - "tmp%104#0" + "tmp%97#0" ] }, "681": { @@ -1768,10 +1941,10 @@ "682": { "op": "txn ApplicationID", "defined_out": [ - "tmp%105#0" + "tmp%98#0" ], "stack_out": [ - "tmp%105#0" + "tmp%98#0" ] }, "684": { @@ -1793,26 +1966,27 @@ ] }, "689": { - "op": "return" + "op": "return", + "stack_out": [] }, "690": { "block": "main_delete_box_map_route@22", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%97#0" + "tmp%91#0" ], "stack_out": [ - "tmp%97#0" + "tmp%91#0" ] }, "692": { "op": "!", "defined_out": [ - "tmp%98#0" + "tmp%92#0" ], "stack_out": [ - "tmp%98#0" + "tmp%92#0" ] }, "693": { @@ -1823,10 +1997,10 @@ "694": { "op": "txn ApplicationID", "defined_out": [ - "tmp%99#0" + "tmp%93#0" ], "stack_out": [ - "tmp%99#0" + "tmp%93#0" ] }, "696": { @@ -1837,19 +2011,19 @@ "697": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%101#0" + "reinterpret_bytes[8]%6#0" ], "stack_out": [ - "tmp%101#0" + "reinterpret_bytes[8]%6#0" ] }, "700": { "op": "btoi", "defined_out": [ - "tmp%102#0" + "tmp%95#0" ], "stack_out": [ - "tmp%102#0" + "tmp%95#0" ] }, "701": { @@ -1867,26 +2041,27 @@ ] }, "705": { - "op": "return" + "op": "return", + "stack_out": [] }, "706": { "block": "main_delete_box_route@21", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%93#0" + "tmp%87#0" ], "stack_out": [ - "tmp%93#0" + "tmp%87#0" ] }, "708": { "op": "!", "defined_out": [ - "tmp%94#0" + "tmp%88#0" ], "stack_out": [ - "tmp%94#0" + "tmp%88#0" ] }, "709": { @@ -1897,10 +2072,10 @@ "710": { "op": "txn ApplicationID", "defined_out": [ - "tmp%95#0" + "tmp%89#0" ], "stack_out": [ - "tmp%95#0" + "tmp%89#0" ] }, "712": { @@ -1922,26 +2097,27 @@ ] }, "717": { - "op": "return" + "op": "return", + "stack_out": [] }, "718": { "block": "main_set_box_example_route@20", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%85#0" + "tmp%80#0" ], "stack_out": [ - "tmp%85#0" + "tmp%80#0" ] }, "720": { "op": "!", "defined_out": [ - "tmp%86#0" + "tmp%81#0" ], "stack_out": [ - "tmp%86#0" + "tmp%81#0" ] }, "721": { @@ -1952,10 +2128,10 @@ "722": { "op": "txn ApplicationID", "defined_out": [ - "tmp%87#0" + "tmp%82#0" ], "stack_out": [ - "tmp%87#0" + "tmp%82#0" ] }, "724": { @@ -1966,43 +2142,43 @@ "725": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%89#0" + "reinterpret_bytes[8]%5#0" ], "stack_out": [ - "tmp%89#0" + "reinterpret_bytes[8]%5#0" ] }, "728": { "op": "btoi", "defined_out": [ - "tmp%90#0" + "tmp%84#0" ], "stack_out": [ - "tmp%90#0" + "tmp%84#0" ] }, "729": { "op": "txna ApplicationArgs 2", "defined_out": [ - "tmp%90#0", - "tmp%91#0" + "tmp%84#0", + "tmp%85#0" ], "stack_out": [ - "tmp%90#0", - "tmp%91#0" + "tmp%84#0", + "tmp%85#0" ] }, "732": { "op": "txna ApplicationArgs 3", "defined_out": [ - "tmp%90#0", - "tmp%91#0", - "tmp%92#0" + "tmp%84#0", + "tmp%85#0", + "tmp%86#0" ], "stack_out": [ - "tmp%90#0", - "tmp%91#0", - "tmp%92#0" + "tmp%84#0", + "tmp%85#0", + "tmp%86#0" ] }, "735": { @@ -2020,26 +2196,27 @@ ] }, "739": { - "op": "return" + "op": "return", + "stack_out": [] }, "740": { "block": "main_set_box_map_struct_route@19", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%78#0" + "tmp%74#0" ], "stack_out": [ - "tmp%78#0" + "tmp%74#0" ] }, "742": { "op": "!", "defined_out": [ - "tmp%79#0" + "tmp%75#0" ], "stack_out": [ - "tmp%79#0" + "tmp%75#0" ] }, "743": { @@ -2050,10 +2227,10 @@ "744": { "op": "txn ApplicationID", "defined_out": [ - "tmp%80#0" + "tmp%76#0" ], "stack_out": [ - "tmp%80#0" + "tmp%76#0" ] }, "746": { @@ -2062,17 +2239,23 @@ "stack_out": [] }, "747": { - "op": "txna ApplicationArgs 1" - }, - "750": { - "op": "txna ApplicationArgs 2", + "op": "txna ApplicationArgs 1", + "defined_out": [ + "reinterpret_bytes[8]%4#0" + ], + "stack_out": [ + "reinterpret_bytes[8]%4#0" + ] + }, + "750": { + "op": "txna ApplicationArgs 2", "defined_out": [ - "tmp%82#0", - "tmp%83#0" + "reinterpret_bytes[8]%4#0", + "tmp%78#0" ], "stack_out": [ - "tmp%82#0", - "tmp%83#0" + "reinterpret_bytes[8]%4#0", + "tmp%78#0" ] }, "753": { @@ -2147,10 +2330,10 @@ "763": { "op": "concat", "defined_out": [ - "tmp%84#0" + "tmp%79#0" ], "stack_out": [ - "tmp%84#0" + "tmp%79#0" ] }, "764": { @@ -2167,26 +2350,27 @@ ] }, "766": { - "op": "return" + "op": "return", + "stack_out": [] }, "767": { "block": "main_set_box_map_route@18", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%70#0" + "tmp%67#0" ], "stack_out": [ - "tmp%70#0" + "tmp%67#0" ] }, "769": { "op": "!", "defined_out": [ - "tmp%71#0" + "tmp%68#0" ], "stack_out": [ - "tmp%71#0" + "tmp%68#0" ] }, "770": { @@ -2197,10 +2381,10 @@ "771": { "op": "txn ApplicationID", "defined_out": [ - "tmp%72#0" + "tmp%69#0" ], "stack_out": [ - "tmp%72#0" + "tmp%69#0" ] }, "773": { @@ -2211,41 +2395,41 @@ "774": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%74#0" + "reinterpret_bytes[8]%3#0" ], "stack_out": [ - "tmp%74#0" + "reinterpret_bytes[8]%3#0" ] }, "777": { "op": "btoi", "defined_out": [ - "tmp%75#0" + "tmp%71#0" ], "stack_out": [ - "tmp%75#0" + "tmp%71#0" ] }, "778": { "op": "txna ApplicationArgs 2", "defined_out": [ - "tmp%75#0", - "tmp%76#0" + "tmp%71#0", + "tmp%72#0" ], "stack_out": [ - "tmp%75#0", - "tmp%76#0" + "tmp%71#0", + "tmp%72#0" ] }, "781": { "op": "extract 2 0", "defined_out": [ - "tmp%75#0", - "tmp%77#0" + "tmp%71#0", + "tmp%73#0" ], "stack_out": [ - "tmp%75#0", - "tmp%77#0" + "tmp%71#0", + "tmp%73#0" ] }, "784": { @@ -2263,26 +2447,27 @@ ] }, "788": { - "op": "return" + "op": "return", + "stack_out": [] }, "789": { "block": "main_set_box_route@17", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%64#0" + "tmp%62#0" ], "stack_out": [ - "tmp%64#0" + "tmp%62#0" ] }, "791": { "op": "!", "defined_out": [ - "tmp%65#0" + "tmp%63#0" ], "stack_out": [ - "tmp%65#0" + "tmp%63#0" ] }, "792": { @@ -2293,10 +2478,10 @@ "793": { "op": "txn ApplicationID", "defined_out": [ - "tmp%66#0" + "tmp%64#0" ], "stack_out": [ - "tmp%66#0" + "tmp%64#0" ] }, "795": { @@ -2307,19 +2492,19 @@ "796": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%68#0" + "reinterpret_bytes[8]%2#0" ], "stack_out": [ - "tmp%68#0" + "reinterpret_bytes[8]%2#0" ] }, "799": { "op": "btoi", "defined_out": [ - "tmp%69#0" + "tmp%66#0" ], "stack_out": [ - "tmp%69#0" + "tmp%66#0" ] }, "800": { @@ -2337,26 +2522,27 @@ ] }, "804": { - "op": "return" + "op": "return", + "stack_out": [] }, "805": { "block": "main_get_box_map_struct_route@16", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%57#0" + "tmp%56#0" ], "stack_out": [ - "tmp%57#0" + "tmp%56#0" ] }, "807": { "op": "!", "defined_out": [ - "tmp%58#0" + "tmp%57#0" ], "stack_out": [ - "tmp%58#0" + "tmp%57#0" ] }, "808": { @@ -2367,10 +2553,10 @@ "809": { "op": "txn ApplicationID", "defined_out": [ - "tmp%59#0" + "tmp%58#0" ], "stack_out": [ - "tmp%59#0" + "tmp%58#0" ] }, "811": { @@ -2381,30 +2567,30 @@ "812": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%61#0" + "reinterpret_bytes[8]%1#0" ], "stack_out": [ - "tmp%61#0" + "reinterpret_bytes[8]%1#0" ] }, "815": { "callsub": "smart_contracts.box_storage.contract.BoxStorage.get_box_map_struct", "op": "callsub get_box_map_struct", "defined_out": [ - "tmp%62#0" + "tmp%60#0" ], "stack_out": [ - "tmp%62#0" + "tmp%60#0" ] }, "818": { "op": "bytec_1 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "tmp%62#0" + "tmp%60#0" ], "stack_out": [ - "tmp%62#0", + "tmp%60#0", "0x151f7c75" ] }, @@ -2412,16 +2598,16 @@ "op": "swap", "stack_out": [ "0x151f7c75", - "tmp%62#0" + "tmp%60#0" ] }, "820": { "op": "concat", "defined_out": [ - "tmp%63#0" + "tmp%61#0" ], "stack_out": [ - "tmp%63#0" + "tmp%61#0" ] }, "821": { @@ -2438,26 +2624,27 @@ ] }, "823": { - "op": "return" + "op": "return", + "stack_out": [] }, "824": { "block": "main_maybe_box_map_example_route@15", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%53#0" + "tmp%52#0" ], "stack_out": [ - "tmp%53#0" + "tmp%52#0" ] }, "826": { "op": "!", "defined_out": [ - "tmp%54#0" + "tmp%53#0" ], "stack_out": [ - "tmp%54#0" + "tmp%53#0" ] }, "827": { @@ -2468,10 +2655,10 @@ "828": { "op": "txn ApplicationID", "defined_out": [ - "tmp%55#0" + "tmp%54#0" ], "stack_out": [ - "tmp%55#0" + "tmp%54#0" ] }, "830": { @@ -2493,26 +2680,27 @@ ] }, "835": { - "op": "return" + "op": "return", + "stack_out": [] }, "836": { "block": "main_maybe_box_example_route@14", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%49#0" + "tmp%48#0" ], "stack_out": [ - "tmp%49#0" + "tmp%48#0" ] }, "838": { "op": "!", "defined_out": [ - "tmp%50#0" + "tmp%49#0" ], "stack_out": [ - "tmp%50#0" + "tmp%49#0" ] }, "839": { @@ -2523,10 +2711,10 @@ "840": { "op": "txn ApplicationID", "defined_out": [ - "tmp%51#0" + "tmp%50#0" ], "stack_out": [ - "tmp%51#0" + "tmp%50#0" ] }, "842": { @@ -2548,26 +2736,27 @@ ] }, "847": { - "op": "return" + "op": "return", + "stack_out": [] }, "848": { "block": "main_get_box_map_example_route@13", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%44#0" + "tmp%43#0" ], "stack_out": [ - "tmp%44#0" + "tmp%43#0" ] }, "850": { "op": "!", "defined_out": [ - "tmp%45#0" + "tmp%44#0" ], "stack_out": [ - "tmp%45#0" + "tmp%44#0" ] }, "851": { @@ -2578,10 +2767,10 @@ "852": { "op": "txn ApplicationID", "defined_out": [ - "tmp%46#0" + "tmp%45#0" ], "stack_out": [ - "tmp%46#0" + "tmp%45#0" ] }, "854": { @@ -2661,10 +2850,10 @@ "865": { "op": "concat", "defined_out": [ - "tmp%48#0" + "tmp%47#0" ], "stack_out": [ - "tmp%48#0" + "tmp%47#0" ] }, "866": { @@ -2681,26 +2870,27 @@ ] }, "868": { - "op": "return" + "op": "return", + "stack_out": [] }, "869": { "block": "main_get_box_example_route@12", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%39#0" + "tmp%38#0" ], "stack_out": [ - "tmp%39#0" + "tmp%38#0" ] }, "871": { "op": "!", "defined_out": [ - "tmp%40#0" + "tmp%39#0" ], "stack_out": [ - "tmp%40#0" + "tmp%39#0" ] }, "872": { @@ -2711,10 +2901,10 @@ "873": { "op": "txn ApplicationID", "defined_out": [ - "tmp%41#0" + "tmp%40#0" ], "stack_out": [ - "tmp%41#0" + "tmp%40#0" ] }, "875": { @@ -3036,10 +3226,10 @@ "915": { "op": "concat", "defined_out": [ - "tmp%43#0" + "tmp%42#0" ], "stack_out": [ - "tmp%43#0" + "tmp%42#0" ] }, "916": { @@ -3056,26 +3246,27 @@ ] }, "918": { - "op": "return" + "op": "return", + "stack_out": [] }, "919": { "block": "main_maybe_box_ref_route@11", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%34#0" + "tmp%33#0" ], "stack_out": [ - "tmp%34#0" + "tmp%33#0" ] }, "921": { "op": "!", "defined_out": [ - "tmp%35#0" + "tmp%34#0" ], "stack_out": [ - "tmp%35#0" + "tmp%34#0" ] }, "922": { @@ -3086,10 +3277,10 @@ "923": { "op": "txn ApplicationID", "defined_out": [ - "tmp%36#0" + "tmp%35#0" ], "stack_out": [ - "tmp%36#0" + "tmp%35#0" ] }, "925": { @@ -3297,10 +3488,10 @@ "952": { "op": "concat", "defined_out": [ - "tmp%38#0" + "tmp%37#0" ], "stack_out": [ - "tmp%38#0" + "tmp%37#0" ] }, "953": { @@ -3317,26 +3508,27 @@ ] }, "955": { - "op": "return" + "op": "return", + "stack_out": [] }, "956": { "block": "main_maybe_box_map_route@10", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%29#0" + "tmp%28#0" ], "stack_out": [ - "tmp%29#0" + "tmp%28#0" ] }, "958": { "op": "!", "defined_out": [ - "tmp%30#0" + "tmp%29#0" ], "stack_out": [ - "tmp%30#0" + "tmp%29#0" ] }, "959": { @@ -3347,10 +3539,10 @@ "960": { "op": "txn ApplicationID", "defined_out": [ - "tmp%31#0" + "tmp%30#0" ], "stack_out": [ - "tmp%31#0" + "tmp%30#0" ] }, "962": { @@ -3558,10 +3750,10 @@ "989": { "op": "concat", "defined_out": [ - "tmp%33#0" + "tmp%32#0" ], "stack_out": [ - "tmp%33#0" + "tmp%32#0" ] }, "990": { @@ -3578,26 +3770,27 @@ ] }, "992": { - "op": "return" + "op": "return", + "stack_out": [] }, "993": { "block": "main_maybe_box_route@9", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%24#0" + "tmp%23#0" ], "stack_out": [ - "tmp%24#0" + "tmp%23#0" ] }, "995": { "op": "!", "defined_out": [ - "tmp%25#0" + "tmp%24#0" ], "stack_out": [ - "tmp%25#0" + "tmp%24#0" ] }, "996": { @@ -3608,10 +3801,10 @@ "997": { "op": "txn ApplicationID", "defined_out": [ - "tmp%26#0" + "tmp%25#0" ], "stack_out": [ - "tmp%26#0" + "tmp%25#0" ] }, "999": { @@ -3727,10 +3920,10 @@ "1013": { "op": "concat", "defined_out": [ - "tmp%28#0" + "tmp%27#0" ], "stack_out": [ - "tmp%28#0" + "tmp%27#0" ] }, "1014": { @@ -3747,26 +3940,27 @@ ] }, "1016": { - "op": "return" + "op": "return", + "stack_out": [] }, "1017": { "block": "main_get_box_ref_route@8", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%20#0" + "tmp%19#0" ], "stack_out": [ - "tmp%20#0" + "tmp%19#0" ] }, "1019": { "op": "!", "defined_out": [ - "tmp%21#0" + "tmp%20#0" ], "stack_out": [ - "tmp%21#0" + "tmp%20#0" ] }, "1020": { @@ -3777,10 +3971,10 @@ "1021": { "op": "txn ApplicationID", "defined_out": [ - "tmp%22#0" + "tmp%21#0" ], "stack_out": [ - "tmp%22#0" + "tmp%21#0" ] }, "1023": { @@ -3802,26 +3996,27 @@ ] }, "1028": { - "op": "return" + "op": "return", + "stack_out": [] }, "1029": { "block": "main_get_box_map_route@7", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%15#0" + "tmp%14#0" ], "stack_out": [ - "tmp%15#0" + "tmp%14#0" ] }, "1031": { "op": "!", "defined_out": [ - "tmp%16#0" + "tmp%15#0" ], "stack_out": [ - "tmp%16#0" + "tmp%15#0" ] }, "1032": { @@ -3832,10 +4027,10 @@ "1033": { "op": "txn ApplicationID", "defined_out": [ - "tmp%17#0" + "tmp%16#0" ], "stack_out": [ - "tmp%17#0" + "tmp%16#0" ] }, "1035": { @@ -3934,10 +4129,10 @@ "1049": { "op": "concat", "defined_out": [ - "tmp%19#0" + "tmp%18#0" ], "stack_out": [ - "tmp%19#0" + "tmp%18#0" ] }, "1050": { @@ -3954,7 +4149,8 @@ ] }, "1052": { - "op": "return" + "op": "return", + "stack_out": [] }, "1053": { "block": "main_get_item_box_map_route@6", @@ -3998,19 +4194,19 @@ "1060": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%12#0" + "reinterpret_bytes[8]%0#0" ], "stack_out": [ - "tmp%12#0" + "reinterpret_bytes[8]%0#0" ] }, "1063": { "op": "btoi", "defined_out": [ - "tmp%13#0" + "tmp%12#0" ], "stack_out": [ - "tmp%13#0" + "tmp%12#0" ] }, "1064": { @@ -4104,10 +4300,10 @@ "1077": { "op": "concat", "defined_out": [ - "tmp%14#0" + "tmp%13#0" ], "stack_out": [ - "tmp%14#0" + "tmp%13#0" ] }, "1078": { @@ -4124,7 +4320,8 @@ ] }, "1080": { - "op": "return" + "op": "return", + "stack_out": [] }, "1081": { "block": "main_get_box_route@5", @@ -4225,17 +4422,18 @@ ] }, "1097": { - "op": "return" + "op": "return", + "stack_out": [] }, "1098": { "block": "main_bare_routing@41", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%187#0" + "tmp%178#0" ], "stack_out": [ - "tmp%187#0" + "tmp%178#0" ] }, "1100": { @@ -4243,29 +4441,46 @@ "stack_out": [] }, "1103": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%179#0" + ], + "stack_out": [ + "tmp%179#0" + ] }, "1105": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%180#0" + ], + "stack_out": [ + "tmp%180#0" + ] }, "1106": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "1107": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#1" + ], + "stack_out": [ + "tmp%0#1" + ] }, "1108": { - "op": "return" + "op": "return", + "stack_out": [] }, "1109": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.get_box", "params": {}, "block": "get_box", "stack_in": [], - "op": "proto 0 1" - }, - "1112": { "op": "bytec_2 // \"box_int\"", "defined_out": [ "\"box_int\"" @@ -4274,7 +4489,7 @@ "\"box_int\"" ] }, - "1113": { + "1110": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -4285,14 +4500,14 @@ "maybe_exists%0#0" ] }, - "1114": { + "1111": { "op": "swap", "stack_out": [ "maybe_exists%0#0", "maybe_value%0#0" ] }, - "1115": { + "1112": { "op": "btoi", "defined_out": [ "maybe_exists%0#0", @@ -4303,25 +4518,25 @@ "maybe_value_converted%0#0" ] }, - "1116": { + "1113": { "op": "swap", "stack_out": [ "maybe_value_converted%0#0", "maybe_exists%0#0" ] }, - "1117": { + "1114": { "error": "check self.box_int exists", "op": "assert // check self.box_int exists", "stack_out": [ "maybe_value_converted%0#0" ] }, - "1118": { + "1115": { "retsub": true, "op": "retsub" }, - "1119": { + "1116": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.get_item_box_map", "params": { "key#0": "uint64" @@ -4330,7 +4545,7 @@ "stack_in": [], "op": "proto 1 1" }, - "1122": { + "1119": { "op": "frame_dig -1", "defined_out": [ "key#0 (copy)" @@ -4339,7 +4554,7 @@ "key#0 (copy)" ] }, - "1124": { + "1121": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -4348,7 +4563,7 @@ "tmp%0#0" ] }, - "1125": { + "1122": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -4359,25 +4574,22 @@ "maybe_exists%0#0" ] }, - "1126": { + "1123": { "error": "check self.box_map entry exists", "op": "assert // check self.box_map entry exists", "stack_out": [ "maybe_value%0#0" ] }, - "1127": { + "1124": { "retsub": true, "op": "retsub" }, - "1128": { + "1125": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.get_box_map", "params": {}, "block": "get_box_map", "stack_in": [], - "op": "proto 0 1" - }, - "1131": { "op": "intc_0 // 1", "defined_out": [ "1" @@ -4386,7 +4598,7 @@ "1" ] }, - "1132": { + "1126": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -4395,7 +4607,7 @@ "tmp%0#0" ] }, - "1133": { + "1127": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -4406,7 +4618,7 @@ "maybe_exists%0#0" ] }, - "1134": { + "1128": { "op": "bytec 10 // \"default\"", "defined_out": [ "\"default\"", @@ -4419,7 +4631,7 @@ "\"default\"" ] }, - "1136": { + "1130": { "op": "cover 2", "stack_out": [ "\"default\"", @@ -4427,27 +4639,24 @@ "maybe_exists%0#0" ] }, - "1138": { + "1132": { "op": "select", "defined_out": [ - "tmp%2#0" + "state_get%0#0" ], "stack_out": [ - "tmp%2#0" + "state_get%0#0" ] }, - "1139": { + "1133": { "retsub": true, "op": "retsub" }, - "1140": { + "1134": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.get_box_ref", "params": {}, "block": "get_box_ref", "stack_in": [], - "op": "proto 0 0" - }, - "1143": { "op": "bytec_0 // \"blob\"", "defined_out": [ "\"blob\"" @@ -4456,7 +4665,7 @@ "\"blob\"" ] }, - "1144": { + "1135": { "op": "intc_2 // 32", "defined_out": [ "\"blob\"", @@ -4467,7 +4676,7 @@ "32" ] }, - "1145": { + "1136": { "op": "box_create", "defined_out": [ "tmp%0#0" @@ -4476,11 +4685,11 @@ "tmp%0#0" ] }, - "1146": { + "1137": { "op": "assert", "stack_out": [] }, - "1147": { + "1138": { "op": "txn Sender", "defined_out": [ "sender_bytes#0" @@ -4489,14 +4698,14 @@ "sender_bytes#0" ] }, - "1149": { + "1140": { "op": "bytec_0 // \"blob\"", "stack_out": [ "sender_bytes#0", "\"blob\"" ] }, - "1150": { + "1141": { "op": "box_del", "defined_out": [ "sender_bytes#0", @@ -4507,20 +4716,20 @@ "tmp%1#0" ] }, - "1151": { + "1142": { "op": "assert", "stack_out": [ "sender_bytes#0" ] }, - "1152": { + "1143": { "op": "bytec_0 // \"blob\"", "stack_out": [ "sender_bytes#0", "\"blob\"" ] }, - "1153": { + "1144": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -4533,7 +4742,7 @@ "maybe_exists%0#0" ] }, - "1154": { + "1145": { "op": "dig 2", "defined_out": [ "maybe_exists%0#0", @@ -4548,7 +4757,7 @@ "sender_bytes#0 (copy)" ] }, - "1156": { + "1147": { "op": "cover 2", "stack_out": [ "sender_bytes#0", @@ -4557,42 +4766,39 @@ "maybe_exists%0#0" ] }, - "1158": { + "1149": { "op": "select", "defined_out": [ "sender_bytes#0", - "tmp%3#0" + "state_get%0#0" ], "stack_out": [ "sender_bytes#0", - "tmp%3#0" + "state_get%0#0" ] }, - "1159": { + "1150": { "op": "==", "defined_out": [ - "tmp%4#0" + "tmp%3#0" ], "stack_out": [ - "tmp%4#0" + "tmp%3#0" ] }, - "1160": { + "1151": { "op": "assert", "stack_out": [] }, - "1161": { + "1152": { "retsub": true, "op": "retsub" }, - "1162": { + "1153": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.maybe_box", "params": {}, "block": "maybe_box", "stack_in": [], - "op": "proto 0 2" - }, - "1165": { "op": "bytec_2 // \"box_int\"", "defined_out": [ "\"box_int\"" @@ -4601,7 +4807,7 @@ "\"box_int\"" ] }, - "1166": { + "1154": { "op": "box_get", "defined_out": [ "box_int_exists#0", @@ -4612,14 +4818,14 @@ "box_int_exists#0" ] }, - "1167": { + "1155": { "op": "swap", "stack_out": [ "box_int_exists#0", "maybe_value%0#0" ] }, - "1168": { + "1156": { "op": "btoi", "defined_out": [ "box_int_exists#0", @@ -4630,25 +4836,25 @@ "box_int_value#0" ] }, - "1169": { + "1157": { "op": "swap", "stack_out": [ "box_int_value#0", "box_int_exists#0" ] }, - "1170": { + "1158": { "retsub": true, "op": "retsub" }, - "1171": { + "1159": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.maybe_box_map", "params": {}, "block": "maybe_box_map", "stack_in": [], "op": "proto 0 2" }, - "1174": { + "1162": { "op": "intc_0 // 1", "defined_out": [ "1" @@ -4657,7 +4863,7 @@ "1" ] }, - "1175": { + "1163": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -4666,7 +4872,7 @@ "tmp%0#0" ] }, - "1176": { + "1164": { "op": "box_get", "defined_out": [ "exists#0", @@ -4677,7 +4883,7 @@ "exists#0" ] }, - "1177": { + "1165": { "op": "dup", "stack_out": [ "value#0", @@ -4685,7 +4891,7 @@ "exists#0 (copy)" ] }, - "1178": { + "1166": { "op": "uncover 2", "defined_out": [ "exists#0", @@ -4697,7 +4903,7 @@ "value#0" ] }, - "1180": { + "1168": { "op": "swap", "defined_out": [ "exists#0", @@ -4709,20 +4915,29 @@ "exists#0" ] }, - "1181": { + "1169": { "op": "bnz maybe_box_map_after_if_else@2", "stack_out": [ "exists#0", "value#0" ] }, - "1184": { - "op": "pushbytes \"\"" + "1172": { + "op": "pushbytes \"\"", + "stack_out": [ + "exists#0", + "value#0", + "value#0" + ] }, - "1186": { - "op": "frame_bury 1" + "1174": { + "op": "frame_bury 1", + "stack_out": [ + "exists#0", + "value#0" + ] }, - "1188": { + "1176": { "block": "maybe_box_map_after_if_else@2", "stack_in": [ "exists#0", @@ -4738,7 +4953,7 @@ "value#0" ] }, - "1190": { + "1178": { "op": "frame_dig 0", "defined_out": [ "exists#0", @@ -4751,24 +4966,24 @@ "exists#0" ] }, - "1192": { + "1180": { "op": "uncover 3" }, - "1194": { + "1182": { "op": "uncover 3" }, - "1196": { + "1184": { "retsub": true, "op": "retsub" }, - "1197": { + "1185": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.maybe_box_ref", "params": {}, "block": "maybe_box_ref", "stack_in": [], "op": "proto 0 2" }, - "1200": { + "1188": { "op": "bytec_0 // \"blob\"", "defined_out": [ "\"blob\"" @@ -4777,7 +4992,7 @@ "\"blob\"" ] }, - "1201": { + "1189": { "op": "intc_2 // 32", "defined_out": [ "\"blob\"", @@ -4788,7 +5003,7 @@ "32" ] }, - "1202": { + "1190": { "op": "box_create", "defined_out": [ "tmp%0#0" @@ -4797,17 +5012,17 @@ "tmp%0#0" ] }, - "1203": { + "1191": { "op": "assert", "stack_out": [] }, - "1204": { + "1192": { "op": "bytec_0 // \"blob\"", "stack_out": [ "\"blob\"" ] }, - "1205": { + "1193": { "op": "box_get", "defined_out": [ "exists#0", @@ -4818,7 +5033,7 @@ "exists#0" ] }, - "1206": { + "1194": { "op": "dup", "stack_out": [ "value#0", @@ -4826,7 +5041,7 @@ "exists#0 (copy)" ] }, - "1207": { + "1195": { "op": "uncover 2", "defined_out": [ "exists#0", @@ -4838,7 +5053,7 @@ "value#0" ] }, - "1209": { + "1197": { "op": "swap", "defined_out": [ "exists#0", @@ -4850,20 +5065,29 @@ "exists#0" ] }, - "1210": { + "1198": { "op": "bnz maybe_box_ref_after_if_else@2", "stack_out": [ "exists#0", "value#0" ] }, - "1213": { - "op": "pushbytes 0x" + "1201": { + "op": "pushbytes 0x", + "stack_out": [ + "exists#0", + "value#0", + "value#0" + ] }, - "1215": { - "op": "frame_bury 1" + "1203": { + "op": "frame_bury 1", + "stack_out": [ + "exists#0", + "value#0" + ] }, - "1217": { + "1205": { "block": "maybe_box_ref_after_if_else@2", "stack_in": [ "exists#0", @@ -4879,7 +5103,7 @@ "value#0" ] }, - "1219": { + "1207": { "op": "frame_dig 0", "defined_out": [ "exists#0", @@ -4892,24 +5116,21 @@ "exists#0" ] }, - "1221": { + "1209": { "op": "uncover 3" }, - "1223": { + "1211": { "op": "uncover 3" }, - "1225": { + "1213": { "retsub": true, "op": "retsub" }, - "1226": { + "1214": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.get_box_example", "params": {}, "block": "get_box_example", "stack_in": [], - "op": "proto 0 3" - }, - "1229": { "op": "bytec_2 // \"box_int\"", "defined_out": [ "\"box_int\"" @@ -4918,7 +5139,7 @@ "\"box_int\"" ] }, - "1230": { + "1215": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -4929,14 +5150,14 @@ "maybe_exists%0#0" ] }, - "1231": { + "1216": { "op": "swap", "stack_out": [ "maybe_exists%0#0", "maybe_value%0#0" ] }, - "1232": { + "1217": { "op": "btoi", "defined_out": [ "maybe_exists%0#0", @@ -4947,21 +5168,21 @@ "maybe_value_converted%0#0" ] }, - "1233": { + "1218": { "op": "swap", "stack_out": [ "maybe_value_converted%0#0", "maybe_exists%0#0" ] }, - "1234": { + "1219": { "error": "check self.box_int exists", "op": "assert // check self.box_int exists", "stack_out": [ "maybe_value_converted%0#0" ] }, - "1235": { + "1220": { "op": "bytec 5 // \"b\"", "defined_out": [ "\"b\"", @@ -4972,7 +5193,7 @@ "\"b\"" ] }, - "1237": { + "1222": { "op": "box_get", "defined_out": [ "maybe_exists%1#0", @@ -4985,7 +5206,7 @@ "maybe_exists%1#0" ] }, - "1238": { + "1223": { "error": "check self.box_dynamic_bytes exists", "op": "assert // check self.box_dynamic_bytes exists", "stack_out": [ @@ -4993,7 +5214,7 @@ "maybe_value%1#0" ] }, - "1239": { + "1224": { "op": "extract 2 0", "defined_out": [ "maybe_value_converted%0#0", @@ -5004,7 +5225,7 @@ "tmp%0#0" ] }, - "1242": { + "1227": { "op": "bytec 4 // 0x424f585f43", "defined_out": [ "0x424f585f43", @@ -5017,7 +5238,7 @@ "0x424f585f43" ] }, - "1244": { + "1229": { "op": "box_get", "defined_out": [ "maybe_exists%2#0", @@ -5032,7 +5253,7 @@ "maybe_exists%2#0" ] }, - "1245": { + "1230": { "error": "check self.box_string exists", "op": "assert // check self.box_string exists", "stack_out": [ @@ -5041,18 +5262,15 @@ "maybe_value%2#0" ] }, - "1246": { + "1231": { "retsub": true, "op": "retsub" }, - "1247": { + "1232": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.get_box_map_example", "params": {}, "block": "get_box_map_example", "stack_in": [], - "op": "proto 0 1" - }, - "1250": { "op": "intc_0 // 1", "defined_out": [ "1" @@ -5061,7 +5279,7 @@ "1" ] }, - "1251": { + "1233": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -5070,7 +5288,7 @@ "tmp%0#0" ] }, - "1252": { + "1234": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -5081,7 +5299,7 @@ "maybe_exists%0#0" ] }, - "1253": { + "1235": { "op": "bytec 10 // \"default\"", "defined_out": [ "\"default\"", @@ -5094,7 +5312,7 @@ "\"default\"" ] }, - "1255": { + "1237": { "op": "cover 2", "stack_out": [ "\"default\"", @@ -5102,53 +5320,50 @@ "maybe_exists%0#0" ] }, - "1257": { + "1239": { "op": "select", "defined_out": [ - "tmp%2#0" + "state_get%0#0" ], "stack_out": [ - "tmp%2#0" + "state_get%0#0" ] }, - "1258": { + "1240": { "op": "bytec 10 // \"default\"", "stack_out": [ - "tmp%2#0", + "state_get%0#0", "\"default\"" ] }, - "1260": { + "1242": { "op": "==", "defined_out": [ - "tmp%3#0" + "tmp%2#0" ], "stack_out": [ - "tmp%3#0" + "tmp%2#0" ] }, - "1261": { + "1243": { "op": "assert", "stack_out": [] }, - "1262": { + "1244": { "op": "intc_0 // 1", "stack_out": [ "1" ] }, - "1263": { + "1245": { "retsub": true, "op": "retsub" }, - "1264": { + "1246": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.maybe_box_example", "params": {}, "block": "maybe_box_example", "stack_in": [], - "op": "proto 0 0" - }, - "1267": { "op": "bytec_2 // \"box_int\"", "defined_out": [ "\"box_int\"" @@ -5157,7 +5372,7 @@ "\"box_int\"" ] }, - "1268": { + "1247": { "op": "box_del", "defined_out": [ "{box_del}" @@ -5166,17 +5381,17 @@ "{box_del}" ] }, - "1269": { + "1248": { "op": "pop", "stack_out": [] }, - "1270": { + "1249": { "op": "bytec_2 // \"box_int\"", "stack_out": [ "\"box_int\"" ] }, - "1271": { + "1250": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -5187,14 +5402,14 @@ "maybe_exists%0#0" ] }, - "1272": { + "1251": { "op": "swap", "stack_out": [ "maybe_exists%0#0", "maybe_value%0#0" ] }, - "1273": { + "1252": { "op": "btoi", "defined_out": [ "maybe_exists%0#0", @@ -5205,7 +5420,7 @@ "maybe_value_converted%0#0" ] }, - "1274": { + "1253": { "op": "pushint 42 // 42", "defined_out": [ "42", @@ -5218,7 +5433,7 @@ "42" ] }, - "1276": { + "1255": { "op": "swap", "stack_out": [ "maybe_exists%0#0", @@ -5226,7 +5441,7 @@ "maybe_value_converted%0#0" ] }, - "1277": { + "1256": { "op": "uncover 2", "stack_out": [ "42", @@ -5234,42 +5449,42 @@ "maybe_exists%0#0" ] }, - "1279": { + "1258": { "op": "select", "defined_out": [ - "tmp%0#0" + "state_get%0#0" ], "stack_out": [ - "tmp%0#0" + "state_get%0#0" ] }, - "1280": { + "1259": { "op": "pushint 42 // 42", "stack_out": [ - "tmp%0#0", + "state_get%0#0", "42" ] }, - "1282": { + "1261": { "op": "==", "defined_out": [ - "tmp%1#0" + "tmp%0#0" ], "stack_out": [ - "tmp%1#0" + "tmp%0#0" ] }, - "1283": { + "1262": { "op": "assert", "stack_out": [] }, - "1284": { + "1263": { "op": "bytec_2 // \"box_int\"", "stack_out": [ "\"box_int\"" ] }, - "1285": { + "1264": { "op": "box_get", "defined_out": [ "box_int_exists#0", @@ -5280,14 +5495,14 @@ "box_int_exists#0" ] }, - "1286": { + "1265": { "op": "swap", "stack_out": [ "box_int_exists#0", "maybe_value%1#0" ] }, - "1287": { + "1266": { "op": "btoi", "defined_out": [ "box_int_exists#0", @@ -5298,55 +5513,52 @@ "box_int_value#0" ] }, - "1288": { + "1267": { "op": "swap", "stack_out": [ "box_int_value#0", "box_int_exists#0" ] }, - "1289": { + "1268": { "op": "!", "defined_out": [ "box_int_value#0", - "tmp%2#0" + "tmp%1#0" ], "stack_out": [ "box_int_value#0", - "tmp%2#0" + "tmp%1#0" ] }, - "1290": { + "1269": { "op": "assert", "stack_out": [ "box_int_value#0" ] }, - "1291": { + "1270": { "op": "!", "defined_out": [ - "tmp%3#0" + "tmp%2#0" ], "stack_out": [ - "tmp%3#0" + "tmp%2#0" ] }, - "1292": { + "1271": { "op": "assert", "stack_out": [] }, - "1293": { + "1272": { "retsub": true, "op": "retsub" }, - "1294": { + "1273": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.maybe_box_map_example", "params": {}, "block": "maybe_box_map_example", "stack_in": [], - "op": "proto 0 0" - }, - "1297": { "op": "intc_0 // 1", "defined_out": [ "1" @@ -5355,7 +5567,7 @@ "1" ] }, - "1298": { + "1274": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -5364,7 +5576,7 @@ "tmp%0#0" ] }, - "1299": { + "1275": { "op": "box_get", "defined_out": [ "exists#0", @@ -5375,13 +5587,13 @@ "exists#0" ] }, - "1300": { + "1276": { "op": "bury 1", "stack_out": [ "exists#0" ] }, - "1302": { + "1278": { "op": "!", "defined_out": [ "tmp%2#0" @@ -5390,11 +5602,11 @@ "tmp%2#0" ] }, - "1303": { + "1279": { "op": "assert", "stack_out": [] }, - "1304": { + "1280": { "op": "intc_1 // 0", "defined_out": [ "0" @@ -5403,7 +5615,7 @@ "0" ] }, - "1305": { + "1281": { "op": "itob", "defined_out": [ "tmp%3#0" @@ -5412,7 +5624,7 @@ "tmp%3#0" ] }, - "1306": { + "1282": { "op": "box_len", "defined_out": [ "maybe_exists%1#0", @@ -5423,21 +5635,21 @@ "maybe_exists%1#0" ] }, - "1307": { + "1283": { "op": "bury 1", "stack_out": [ "maybe_exists%1#0" ] }, - "1309": { + "1285": { "op": "assert", "stack_out": [] }, - "1310": { + "1286": { "retsub": true, "op": "retsub" }, - "1311": { + "1287": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.get_box_map_struct", "params": { "key#0": "bytes" @@ -5446,7 +5658,7 @@ "stack_in": [], "op": "proto 1 1" }, - "1314": { + "1290": { "op": "bytec 11 // \"users\"", "defined_out": [ "\"users\"" @@ -5455,7 +5667,7 @@ "\"users\"" ] }, - "1316": { + "1292": { "op": "frame_dig -1", "defined_out": [ "\"users\"", @@ -5466,7 +5678,7 @@ "key#0 (copy)" ] }, - "1318": { + "1294": { "op": "concat", "defined_out": [ "tmp%0#0" @@ -5475,7 +5687,7 @@ "tmp%0#0" ] }, - "1319": { + "1295": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -5486,18 +5698,18 @@ "maybe_exists%0#0" ] }, - "1320": { + "1296": { "error": "check self.box_map_struct entry exists", "op": "assert // check self.box_map_struct entry exists", "stack_out": [ "maybe_value%0#0" ] }, - "1321": { + "1297": { "retsub": true, "op": "retsub" }, - "1322": { + "1298": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.set_box", "params": { "value_int#0": "uint64" @@ -5506,7 +5718,7 @@ "stack_in": [], "op": "proto 1 0" }, - "1325": { + "1301": { "op": "frame_dig -1", "defined_out": [ "value_int#0 (copy)" @@ -5515,7 +5727,7 @@ "value_int#0 (copy)" ] }, - "1327": { + "1303": { "op": "itob", "defined_out": [ "new_box_value%0#0" @@ -5524,7 +5736,7 @@ "new_box_value%0#0" ] }, - "1328": { + "1304": { "op": "bytec_2 // \"box_int\"", "defined_out": [ "\"box_int\"", @@ -5535,22 +5747,22 @@ "\"box_int\"" ] }, - "1329": { + "1305": { "op": "swap", "stack_out": [ "\"box_int\"", "new_box_value%0#0" ] }, - "1330": { + "1306": { "op": "box_put", "stack_out": [] }, - "1331": { + "1307": { "retsub": true, "op": "retsub" }, - "1332": { + "1308": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.set_box_map", "params": { "key#0": "uint64", @@ -5560,7 +5772,7 @@ "stack_in": [], "op": "proto 2 0" }, - "1335": { + "1311": { "op": "frame_dig -2", "defined_out": [ "key#0 (copy)" @@ -5569,7 +5781,7 @@ "key#0 (copy)" ] }, - "1337": { + "1313": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -5578,7 +5790,7 @@ "tmp%0#0" ] }, - "1338": { + "1314": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -5589,7 +5801,7 @@ "tmp%0#0 (copy)" ] }, - "1339": { + "1315": { "op": "box_del", "defined_out": [ "tmp%0#0", @@ -5600,13 +5812,13 @@ "{box_del}" ] }, - "1340": { + "1316": { "op": "pop", "stack_out": [ "tmp%0#0" ] }, - "1341": { + "1317": { "op": "frame_dig -1", "defined_out": [ "tmp%0#0", @@ -5617,15 +5829,15 @@ "value#0 (copy)" ] }, - "1343": { + "1319": { "op": "box_put", "stack_out": [] }, - "1344": { + "1320": { "retsub": true, "op": "retsub" }, - "1345": { + "1321": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.set_box_map_struct", "params": { "key#0": "bytes", @@ -5635,7 +5847,7 @@ "stack_in": [], "op": "proto 2 1" }, - "1348": { + "1324": { "op": "bytec 11 // \"users\"", "defined_out": [ "\"users\"" @@ -5644,7 +5856,7 @@ "\"users\"" ] }, - "1350": { + "1326": { "op": "frame_dig -2", "defined_out": [ "\"users\"", @@ -5655,7 +5867,7 @@ "key#0 (copy)" ] }, - "1352": { + "1328": { "op": "concat", "defined_out": [ "tmp%0#0" @@ -5664,7 +5876,7 @@ "tmp%0#0" ] }, - "1353": { + "1329": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -5675,7 +5887,7 @@ "tmp%0#0 (copy)" ] }, - "1354": { + "1330": { "op": "box_del", "defined_out": [ "tmp%0#0", @@ -5686,20 +5898,20 @@ "{box_del}" ] }, - "1355": { + "1331": { "op": "pop", "stack_out": [ "tmp%0#0" ] }, - "1356": { + "1332": { "op": "dup", "stack_out": [ "tmp%0#0", "tmp%0#0 (copy)" ] }, - "1357": { + "1333": { "op": "frame_dig -1", "defined_out": [ "tmp%0#0", @@ -5712,13 +5924,13 @@ "value#0 (copy)" ] }, - "1359": { + "1335": { "op": "box_put", "stack_out": [ "tmp%0#0" ] }, - "1360": { + "1336": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -5729,21 +5941,21 @@ "maybe_exists%0#0" ] }, - "1361": { + "1337": { "error": "check self.box_map_struct entry exists", "op": "assert // check self.box_map_struct entry exists", "stack_out": [ "maybe_value%0#0" ] }, - "1362": { + "1338": { "op": "frame_dig -1", "stack_out": [ "maybe_value%0#0", "value#0 (copy)" ] }, - "1364": { + "1340": { "op": "==", "defined_out": [ "tmp%2#0" @@ -5752,11 +5964,11 @@ "tmp%2#0" ] }, - "1365": { + "1341": { "op": "assert", "stack_out": [] }, - "1366": { + "1342": { "op": "intc_0 // 1", "defined_out": [ "1" @@ -5765,11 +5977,11 @@ "1" ] }, - "1367": { + "1343": { "retsub": true, "op": "retsub" }, - "1368": { + "1344": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.set_box_example", "params": { "value_int#0": "uint64", @@ -5780,7 +5992,7 @@ "stack_in": [], "op": "proto 3 0" }, - "1371": { + "1347": { "op": "frame_dig -3", "defined_out": [ "value_int#0 (copy)" @@ -5789,7 +6001,7 @@ "value_int#0 (copy)" ] }, - "1373": { + "1349": { "op": "itob", "defined_out": [ "new_box_value%0#0" @@ -5798,7 +6010,7 @@ "new_box_value%0#0" ] }, - "1374": { + "1350": { "op": "bytec_2 // \"box_int\"", "defined_out": [ "\"box_int\"", @@ -5809,18 +6021,18 @@ "\"box_int\"" ] }, - "1375": { + "1351": { "op": "swap", "stack_out": [ "\"box_int\"", "new_box_value%0#0" ] }, - "1376": { + "1352": { "op": "box_put", "stack_out": [] }, - "1377": { + "1353": { "op": "bytec 5 // \"b\"", "defined_out": [ "\"b\"" @@ -5829,7 +6041,7 @@ "\"b\"" ] }, - "1379": { + "1355": { "op": "box_del", "defined_out": [ "{box_del}" @@ -5838,17 +6050,17 @@ "{box_del}" ] }, - "1380": { + "1356": { "op": "pop", "stack_out": [] }, - "1381": { + "1357": { "op": "bytec 5 // \"b\"", "stack_out": [ "\"b\"" ] }, - "1383": { + "1359": { "op": "frame_dig -2", "defined_out": [ "\"b\"", @@ -5859,11 +6071,11 @@ "value_dbytes#0 (copy)" ] }, - "1385": { + "1361": { "op": "box_put", "stack_out": [] }, - "1386": { + "1362": { "op": "bytec 4 // 0x424f585f43", "defined_out": [ "0x424f585f43" @@ -5872,23 +6084,23 @@ "0x424f585f43" ] }, - "1388": { + "1364": { "op": "box_del", "stack_out": [ "{box_del}" ] }, - "1389": { + "1365": { "op": "pop", "stack_out": [] }, - "1390": { + "1366": { "op": "bytec 4 // 0x424f585f43", "stack_out": [ "0x424f585f43" ] }, - "1392": { + "1368": { "op": "frame_dig -1", "defined_out": [ "0x424f585f43", @@ -5899,17 +6111,17 @@ "value_string#0 (copy)" ] }, - "1394": { + "1370": { "op": "box_put", "stack_out": [] }, - "1395": { + "1371": { "op": "frame_dig -2", "stack_out": [ "value_dbytes#0 (copy)" ] }, - "1397": { + "1373": { "op": "extract 2 0", "defined_out": [ "new_box_value%1#0" @@ -5918,7 +6130,7 @@ "new_box_value%1#0" ] }, - "1400": { + "1376": { "op": "bytec 12 // \"box_bytes\"", "defined_out": [ "\"box_bytes\"", @@ -5929,44 +6141,44 @@ "\"box_bytes\"" ] }, - "1402": { + "1378": { "op": "box_del", "stack_out": [ "new_box_value%1#0", "{box_del}" ] }, - "1403": { + "1379": { "op": "pop", "stack_out": [ "new_box_value%1#0" ] }, - "1404": { + "1380": { "op": "bytec 12 // \"box_bytes\"", "stack_out": [ "new_box_value%1#0", "\"box_bytes\"" ] }, - "1406": { + "1382": { "op": "swap", "stack_out": [ "\"box_bytes\"", "new_box_value%1#0" ] }, - "1407": { + "1383": { "op": "box_put", "stack_out": [] }, - "1408": { + "1384": { "op": "bytec 5 // \"b\"", "stack_out": [ "\"b\"" ] }, - "1410": { + "1386": { "op": "box_get", "defined_out": [ "byte_value#0", @@ -5977,21 +6189,21 @@ "maybe_exists%0#0" ] }, - "1411": { + "1387": { "error": "check self.box_dynamic_bytes exists", "op": "assert // check self.box_dynamic_bytes exists", "stack_out": [ "byte_value#0" ] }, - "1412": { + "1388": { "op": "bytec 5 // \"b\"", "stack_out": [ "byte_value#0", "\"b\"" ] }, - "1414": { + "1390": { "op": "box_get", "defined_out": [ "byte_value#0", @@ -6004,7 +6216,7 @@ "maybe_exists%1#0" ] }, - "1415": { + "1391": { "error": "check self.box_dynamic_bytes exists", "op": "assert // check self.box_dynamic_bytes exists", "stack_out": [ @@ -6012,7 +6224,7 @@ "maybe_value%1#0" ] }, - "1416": { + "1392": { "op": "intc_1 // 0", "defined_out": [ "0", @@ -6025,7 +6237,7 @@ "0" ] }, - "1417": { + "1393": { "op": "extract_uint16", "defined_out": [ "byte_value#0", @@ -6036,14 +6248,14 @@ "tmp%0#0" ] }, - "1418": { + "1394": { "op": "swap", "stack_out": [ "tmp%0#0", "byte_value#0" ] }, - "1419": { + "1395": { "op": "intc_1 // 0", "stack_out": [ "tmp%0#0", @@ -6051,7 +6263,7 @@ "0" ] }, - "1420": { + "1396": { "op": "extract_uint16", "defined_out": [ "tmp%0#0", @@ -6062,7 +6274,7 @@ "tmp%1#0" ] }, - "1421": { + "1397": { "op": "==", "defined_out": [ "tmp%2#0" @@ -6071,18 +6283,18 @@ "tmp%2#0" ] }, - "1422": { + "1398": { "error": "direct reference should match copy", "op": "assert // direct reference should match copy", "stack_out": [] }, - "1423": { + "1399": { "op": "bytec_2 // \"box_int\"", "stack_out": [ "\"box_int\"" ] }, - "1424": { + "1400": { "op": "box_get", "defined_out": [ "maybe_exists%2#0", @@ -6093,14 +6305,14 @@ "maybe_exists%2#0" ] }, - "1425": { + "1401": { "op": "swap", "stack_out": [ "maybe_exists%2#0", "maybe_value%2#0" ] }, - "1426": { + "1402": { "op": "btoi", "defined_out": [ "maybe_exists%2#0", @@ -6111,21 +6323,21 @@ "maybe_value_converted%0#0" ] }, - "1427": { + "1403": { "op": "swap", "stack_out": [ "maybe_value_converted%0#0", "maybe_exists%2#0" ] }, - "1428": { + "1404": { "error": "check self.box_int exists", "op": "assert // check self.box_int exists", "stack_out": [ "maybe_value_converted%0#0" ] }, - "1429": { + "1405": { "op": "pushint 3 // 3", "defined_out": [ "3", @@ -6136,7 +6348,7 @@ "3" ] }, - "1431": { + "1407": { "op": "+", "defined_out": [ "new_box_value%2#0" @@ -6145,7 +6357,7 @@ "new_box_value%2#0" ] }, - "1432": { + "1408": { "op": "itob", "defined_out": [ "new_box_value%3#0" @@ -6154,36 +6366,33 @@ "new_box_value%3#0" ] }, - "1433": { + "1409": { "op": "bytec_2 // \"box_int\"", "stack_out": [ "new_box_value%3#0", "\"box_int\"" ] }, - "1434": { + "1410": { "op": "swap", "stack_out": [ "\"box_int\"", "new_box_value%3#0" ] }, - "1435": { + "1411": { "op": "box_put", "stack_out": [] }, - "1436": { + "1412": { "retsub": true, "op": "retsub" }, - "1437": { + "1413": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.delete_box", "params": {}, "block": "delete_box", "stack_in": [], - "op": "proto 0 0" - }, - "1440": { "op": "bytec_2 // \"box_int\"", "defined_out": [ "\"box_int\"" @@ -6192,7 +6401,7 @@ "\"box_int\"" ] }, - "1441": { + "1414": { "op": "box_del", "defined_out": [ "{box_del}" @@ -6201,11 +6410,11 @@ "{box_del}" ] }, - "1442": { + "1415": { "op": "pop", "stack_out": [] }, - "1443": { + "1416": { "op": "bytec 5 // \"b\"", "defined_out": [ "\"b\"" @@ -6214,17 +6423,17 @@ "\"b\"" ] }, - "1445": { + "1418": { "op": "box_del", "stack_out": [ "{box_del}" ] }, - "1446": { + "1419": { "op": "pop", "stack_out": [] }, - "1447": { + "1420": { "op": "bytec 4 // 0x424f585f43", "defined_out": [ "0x424f585f43" @@ -6233,23 +6442,23 @@ "0x424f585f43" ] }, - "1449": { + "1422": { "op": "box_del", "stack_out": [ "{box_del}" ] }, - "1450": { + "1423": { "op": "pop", "stack_out": [] }, - "1451": { + "1424": { "op": "bytec_2 // \"box_int\"", "stack_out": [ "\"box_int\"" ] }, - "1452": { + "1425": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -6260,14 +6469,14 @@ "maybe_exists%0#0" ] }, - "1453": { + "1426": { "op": "swap", "stack_out": [ "maybe_exists%0#0", "maybe_value%0#0" ] }, - "1454": { + "1427": { "op": "btoi", "defined_out": [ "maybe_exists%0#0", @@ -6278,7 +6487,7 @@ "maybe_value_converted%0#0" ] }, - "1455": { + "1428": { "op": "pushint 42 // 42", "defined_out": [ "42", @@ -6291,7 +6500,7 @@ "42" ] }, - "1457": { + "1430": { "op": "swap", "stack_out": [ "maybe_exists%0#0", @@ -6299,7 +6508,7 @@ "maybe_value_converted%0#0" ] }, - "1458": { + "1431": { "op": "uncover 2", "stack_out": [ "42", @@ -6307,42 +6516,42 @@ "maybe_exists%0#0" ] }, - "1460": { + "1433": { "op": "select", "defined_out": [ - "tmp%0#0" + "state_get%0#0" ], "stack_out": [ - "tmp%0#0" + "state_get%0#0" ] }, - "1461": { + "1434": { "op": "pushint 42 // 42", "stack_out": [ - "tmp%0#0", + "state_get%0#0", "42" ] }, - "1463": { + "1436": { "op": "==", "defined_out": [ - "tmp%1#0" + "tmp%0#0" ], "stack_out": [ - "tmp%1#0" + "tmp%0#0" ] }, - "1464": { + "1437": { "op": "assert", "stack_out": [] }, - "1465": { + "1438": { "op": "bytec 5 // \"b\"", "stack_out": [ "\"b\"" ] }, - "1467": { + "1440": { "op": "box_get", "defined_out": [ "maybe_exists%1#0", @@ -6353,7 +6562,7 @@ "maybe_exists%1#0" ] }, - "1468": { + "1441": { "op": "bytec 13 // 0x00023432", "defined_out": [ "0x00023432", @@ -6366,7 +6575,7 @@ "0x00023432" ] }, - "1470": { + "1443": { "op": "cover 2", "stack_out": [ "0x00023432", @@ -6374,55 +6583,55 @@ "maybe_exists%1#0" ] }, - "1472": { + "1445": { "op": "select", "defined_out": [ - "tmp%2#0" + "state_get%1#0" ], "stack_out": [ - "tmp%2#0" + "state_get%1#0" ] }, - "1473": { + "1446": { "op": "extract 2 0", "defined_out": [ - "tmp%3#0" + "tmp%1#0" ], "stack_out": [ - "tmp%3#0" + "tmp%1#0" ] }, - "1476": { + "1449": { "op": "pushbytes 0x3432", "defined_out": [ "0x3432", - "tmp%3#0" + "tmp%1#0" ], "stack_out": [ - "tmp%3#0", + "tmp%1#0", "0x3432" ] }, - "1480": { + "1453": { "op": "==", "defined_out": [ - "tmp%4#0" + "tmp%2#0" ], "stack_out": [ - "tmp%4#0" + "tmp%2#0" ] }, - "1481": { + "1454": { "op": "assert", "stack_out": [] }, - "1482": { + "1455": { "op": "bytec 4 // 0x424f585f43", "stack_out": [ "0x424f585f43" ] }, - "1484": { + "1457": { "op": "box_get", "defined_out": [ "maybe_exists%2#0", @@ -6433,7 +6642,7 @@ "maybe_exists%2#0" ] }, - "1485": { + "1458": { "op": "bytec 13 // 0x00023432", "stack_out": [ "maybe_value%2#0", @@ -6441,7 +6650,7 @@ "0x00023432" ] }, - "1487": { + "1460": { "op": "cover 2", "stack_out": [ "0x00023432", @@ -6449,40 +6658,40 @@ "maybe_exists%2#0" ] }, - "1489": { + "1462": { "op": "select", "defined_out": [ - "tmp%5#0" + "state_get%2#0" ], "stack_out": [ - "tmp%5#0" + "state_get%2#0" ] }, - "1490": { + "1463": { "op": "bytec 13 // 0x00023432", "stack_out": [ - "tmp%5#0", + "state_get%2#0", "0x00023432" ] }, - "1492": { + "1465": { "op": "==", "defined_out": [ - "tmp%6#0" + "tmp%3#0" ], "stack_out": [ - "tmp%6#0" + "tmp%3#0" ] }, - "1493": { + "1466": { "op": "assert", "stack_out": [] }, - "1494": { + "1467": { "retsub": true, "op": "retsub" }, - "1495": { + "1468": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.delete_box_map", "params": { "key#0": "uint64" @@ -6491,7 +6700,7 @@ "stack_in": [], "op": "proto 1 0" }, - "1498": { + "1471": { "op": "frame_dig -1", "defined_out": [ "key#0 (copy)" @@ -6500,7 +6709,7 @@ "key#0 (copy)" ] }, - "1500": { + "1473": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -6509,7 +6718,7 @@ "tmp%0#0" ] }, - "1501": { + "1474": { "op": "box_del", "defined_out": [ "{box_del}" @@ -6518,22 +6727,19 @@ "{box_del}" ] }, - "1502": { + "1475": { "op": "pop", "stack_out": [] }, - "1503": { + "1476": { "retsub": true, "op": "retsub" }, - "1504": { + "1477": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.delete_box_ref", "params": {}, "block": "delete_box_ref", "stack_in": [], - "op": "proto 0 0" - }, - "1507": { "op": "bytec 14 // \"box_ref\"", "defined_out": [ "\"box_ref\"" @@ -6542,7 +6748,7 @@ "\"box_ref\"" ] }, - "1509": { + "1479": { "op": "intc_2 // 32", "defined_out": [ "\"box_ref\"", @@ -6553,7 +6759,7 @@ "32" ] }, - "1510": { + "1480": { "op": "box_create", "defined_out": [ "{box_create}" @@ -6562,17 +6768,17 @@ "{box_create}" ] }, - "1511": { + "1481": { "op": "pop", "stack_out": [] }, - "1512": { + "1482": { "op": "bytec 14 // \"box_ref\"", "stack_out": [ "\"box_ref\"" ] }, - "1514": { + "1484": { "op": "box_len", "defined_out": [ "maybe_exists%0#0", @@ -6583,24 +6789,24 @@ "maybe_exists%0#0" ] }, - "1515": { + "1485": { "op": "bury 1", "stack_out": [ "maybe_exists%0#0" ] }, - "1517": { + "1487": { "error": "has data", "op": "assert // has data", "stack_out": [] }, - "1518": { + "1488": { "op": "bytec 14 // \"box_ref\"", "stack_out": [ "\"box_ref\"" ] }, - "1520": { + "1490": { "op": "box_del", "defined_out": [ "{box_del}" @@ -6609,11 +6815,11 @@ "{box_del}" ] }, - "1521": { + "1491": { "op": "pop", "stack_out": [] }, - "1522": { + "1492": { "op": "bytec_0 // \"blob\"", "defined_out": [ "\"blob\"" @@ -6622,7 +6828,7 @@ "\"blob\"" ] }, - "1523": { + "1493": { "op": "box_get", "defined_out": [ "exists#0", @@ -6633,7 +6839,7 @@ "exists#0" ] }, - "1524": { + "1494": { "op": "!", "defined_out": [ "tmp%0#0", @@ -6644,13 +6850,13 @@ "tmp%0#0" ] }, - "1525": { + "1495": { "op": "assert", "stack_out": [ "value#0" ] }, - "1526": { + "1496": { "op": "pushbytes 0x", "defined_out": [ "0x", @@ -6661,7 +6867,7 @@ "0x" ] }, - "1528": { + "1498": { "op": "==", "defined_out": [ "tmp%1#0" @@ -6670,22 +6876,22 @@ "tmp%1#0" ] }, - "1529": { + "1499": { "op": "assert", "stack_out": [] }, - "1530": { + "1500": { "retsub": true, "op": "retsub" }, - "1531": { + "1501": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.box_map_length", "params": {}, "block": "box_map_length", "stack_in": [], "op": "proto 0 1" }, - "1534": { + "1504": { "op": "intc_1 // 0", "defined_out": [ "0" @@ -6694,7 +6900,7 @@ "0" ] }, - "1535": { + "1505": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -6703,7 +6909,7 @@ "tmp%0#0" ] }, - "1536": { + "1506": { "op": "dup", "defined_out": [ "tmp%0#0" @@ -6713,7 +6919,7 @@ "tmp%0#0" ] }, - "1537": { + "1507": { "op": "box_len", "defined_out": [ "maybe_exists%0#0", @@ -6726,30 +6932,34 @@ "maybe_exists%0#0" ] }, - "1538": { + "1508": { "op": "bury 1", "stack_out": [ "tmp%0#0", "maybe_exists%0#0" ] }, - "1540": { + "1510": { "op": "bnz box_map_length_after_if_else@2", "stack_out": [ "tmp%0#0" ] }, - "1543": { - "op": "intc_1 // 0" + "1513": { + "op": "intc_1 // 0", + "stack_out": [ + "tmp%0#0", + "0" + ] }, - "1544": { + "1514": { "op": "swap" }, - "1545": { + "1515": { "retsub": true, "op": "retsub" }, - "1546": { + "1516": { "block": "box_map_length_after_if_else@2", "stack_in": [ "tmp%0#0" @@ -6763,7 +6973,7 @@ "tmp%0#0" ] }, - "1548": { + "1518": { "op": "box_len", "defined_out": [ "check%0#0", @@ -6776,7 +6986,7 @@ "check%0#0" ] }, - "1549": { + "1519": { "error": "check self.box_map entry exists", "op": "assert // check self.box_map entry exists", "stack_out": [ @@ -6784,21 +6994,18 @@ "value%0#0" ] }, - "1550": { + "1520": { "op": "swap" }, - "1551": { + "1521": { "retsub": true, "op": "retsub" }, - "1552": { + "1522": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.length_box_ref", "params": {}, "block": "length_box_ref", "stack_in": [], - "op": "proto 0 1" - }, - "1555": { "op": "bytec_0 // \"blob\"", "defined_out": [ "\"blob\"" @@ -6807,7 +7014,7 @@ "\"blob\"" ] }, - "1556": { + "1523": { "op": "intc_2 // 32", "defined_out": [ "\"blob\"", @@ -6818,7 +7025,7 @@ "32" ] }, - "1557": { + "1524": { "op": "box_create", "defined_out": [ "tmp%0#0" @@ -6827,17 +7034,17 @@ "tmp%0#0" ] }, - "1558": { + "1525": { "op": "assert", "stack_out": [] }, - "1559": { + "1526": { "op": "bytec_0 // \"blob\"", "stack_out": [ "\"blob\"" ] }, - "1560": { + "1527": { "op": "box_len", "defined_out": [ "check%0#0", @@ -6848,25 +7055,22 @@ "check%0#0" ] }, - "1561": { + "1528": { "error": "check BoxRef exists", "op": "assert // check BoxRef exists", "stack_out": [ "value%0#0" ] }, - "1562": { + "1529": { "retsub": true, "op": "retsub" }, - "1563": { + "1530": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.box_map_struct_length", "params": {}, "block": "box_map_struct_length", "stack_in": [], - "op": "proto 0 1" - }, - "1566": { "op": "bytec 7 // 0x75736572730000000000000000", "defined_out": [ "0x75736572730000000000000000" @@ -6875,7 +7079,7 @@ "0x75736572730000000000000000" ] }, - "1568": { + "1532": { "op": "box_del", "defined_out": [ "{box_del}" @@ -6884,17 +7088,17 @@ "{box_del}" ] }, - "1569": { + "1533": { "op": "pop", "stack_out": [] }, - "1570": { + "1534": { "op": "bytec 7 // 0x75736572730000000000000000", "stack_out": [ "0x75736572730000000000000000" ] }, - "1572": { + "1536": { "op": "pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", "defined_out": [ "0x0012000000000000004600000000000000020008746573744e616d65", @@ -6905,17 +7109,17 @@ "0x0012000000000000004600000000000000020008746573744e616d65" ] }, - "1602": { + "1566": { "op": "box_put", "stack_out": [] }, - "1603": { + "1567": { "op": "bytec 7 // 0x75736572730000000000000000", "stack_out": [ "0x75736572730000000000000000" ] }, - "1605": { + "1569": { "op": "box_len", "defined_out": [ "check%0#0", @@ -6926,14 +7130,14 @@ "check%0#0" ] }, - "1606": { + "1570": { "error": "check self.box_map_struct entry exists", "op": "assert // check self.box_map_struct entry exists", "stack_out": [ "value%0#0" ] }, - "1607": { + "1571": { "op": "pushint 28 // 28", "defined_out": [ "28", @@ -6944,7 +7148,7 @@ "28" ] }, - "1609": { + "1573": { "op": "==", "defined_out": [ "tmp%3#0" @@ -6953,17 +7157,17 @@ "tmp%3#0" ] }, - "1610": { + "1574": { "op": "assert", "stack_out": [] }, - "1611": { + "1575": { "op": "bytec 7 // 0x75736572730000000000000000", "stack_out": [ "0x75736572730000000000000000" ] }, - "1613": { + "1577": { "op": "box_len", "defined_out": [ "check%1#0", @@ -6974,21 +7178,21 @@ "check%1#0" ] }, - "1614": { + "1578": { "error": "check self.box_map_struct entry exists", "op": "assert // check self.box_map_struct entry exists", "stack_out": [ "value%1#0" ] }, - "1615": { + "1579": { "op": "pushint 28 // 28", "stack_out": [ "value%1#0", "28" ] }, - "1617": { + "1581": { "op": "==", "defined_out": [ "tmp%6#0" @@ -6997,11 +7201,11 @@ "tmp%6#0" ] }, - "1618": { + "1582": { "op": "assert", "stack_out": [] }, - "1619": { + "1583": { "op": "intc_0 // 1", "defined_out": [ "1" @@ -7010,18 +7214,15 @@ "1" ] }, - "1620": { + "1584": { "retsub": true, "op": "retsub" }, - "1621": { + "1585": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.box_map_length_example", "params": {}, "block": "box_map_length_example", "stack_in": [], - "op": "proto 0 0" - }, - "1624": { "op": "intc_1 // 0", "defined_out": [ "0" @@ -7030,7 +7231,7 @@ "0" ] }, - "1625": { + "1586": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -7039,7 +7240,7 @@ "tmp%0#0" ] }, - "1626": { + "1587": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -7050,7 +7251,7 @@ "tmp%0#0 (copy)" ] }, - "1627": { + "1588": { "op": "box_del", "defined_out": [ "tmp%0#0", @@ -7061,20 +7262,20 @@ "{box_del}" ] }, - "1628": { + "1589": { "op": "pop", "stack_out": [ "tmp%0#0" ] }, - "1629": { + "1590": { "op": "dup", "stack_out": [ "tmp%0#0", "tmp%0#0 (copy)" ] }, - "1630": { + "1591": { "op": "pushbytes \"Hmmmmm\"", "defined_out": [ "\"Hmmmmm\"", @@ -7087,20 +7288,20 @@ "\"Hmmmmm\"" ] }, - "1638": { + "1599": { "op": "box_put", "stack_out": [ "tmp%0#0" ] }, - "1639": { + "1600": { "op": "dup", "stack_out": [ "tmp%0#0", "tmp%0#0 (copy)" ] }, - "1640": { + "1601": { "op": "box_len", "defined_out": [ "check%0#0", @@ -7113,7 +7314,7 @@ "check%0#0" ] }, - "1641": { + "1602": { "error": "check self.box_map entry exists", "op": "assert // check self.box_map entry exists", "stack_out": [ @@ -7121,7 +7322,7 @@ "value%0#0" ] }, - "1642": { + "1603": { "op": "pushint 6 // 6", "defined_out": [ "6", @@ -7134,7 +7335,7 @@ "6" ] }, - "1644": { + "1605": { "op": "==", "defined_out": [ "tmp%0#0", @@ -7145,13 +7346,13 @@ "tmp%5#0" ] }, - "1645": { + "1606": { "op": "assert", "stack_out": [ "tmp%0#0" ] }, - "1646": { + "1607": { "op": "box_len", "defined_out": [ "check%1#0", @@ -7162,21 +7363,21 @@ "check%1#0" ] }, - "1647": { + "1608": { "error": "check self.box_map entry exists", "op": "assert // check self.box_map entry exists", "stack_out": [ "value%1#0" ] }, - "1648": { + "1609": { "op": "pushint 6 // 6", "stack_out": [ "value%1#0", "6" ] }, - "1650": { + "1611": { "op": "==", "defined_out": [ "tmp%9#0" @@ -7185,22 +7386,19 @@ "tmp%9#0" ] }, - "1651": { + "1612": { "op": "assert", "stack_out": [] }, - "1652": { + "1613": { "retsub": true, "op": "retsub" }, - "1653": { + "1614": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.length_box_ref_example", "params": {}, "block": "length_box_ref_example", "stack_in": [], - "op": "proto 0 0" - }, - "1656": { "op": "bytec_0 // \"blob\"", "defined_out": [ "\"blob\"" @@ -7209,7 +7407,7 @@ "\"blob\"" ] }, - "1657": { + "1615": { "op": "intc_2 // 32", "defined_out": [ "\"blob\"", @@ -7220,7 +7418,7 @@ "32" ] }, - "1658": { + "1616": { "op": "box_create", "defined_out": [ "tmp%0#0" @@ -7229,17 +7427,17 @@ "tmp%0#0" ] }, - "1659": { + "1617": { "op": "assert", "stack_out": [] }, - "1660": { + "1618": { "op": "bytec_0 // \"blob\"", "stack_out": [ "\"blob\"" ] }, - "1661": { + "1619": { "op": "box_len", "defined_out": [ "check%0#0", @@ -7250,14 +7448,14 @@ "check%0#0" ] }, - "1662": { + "1620": { "error": "check BoxRef exists", "op": "assert // check BoxRef exists", "stack_out": [ "value%0#0" ] }, - "1663": { + "1621": { "op": "intc_3 // 64", "defined_out": [ "64", @@ -7268,7 +7466,7 @@ "64" ] }, - "1664": { + "1622": { "op": "==", "defined_out": [ "tmp%1#0" @@ -7277,11 +7475,11 @@ "tmp%1#0" ] }, - "1665": { + "1623": { "op": "assert", "stack_out": [] }, - "1666": { + "1624": { "op": "bytec_0 // 0x626c6f62", "defined_out": [ "0x626c6f62" @@ -7290,14 +7488,14 @@ "0x626c6f62" ] }, - "1667": { + "1625": { "op": "intc_2 // 32", "stack_out": [ "0x626c6f62", "32" ] }, - "1668": { + "1626": { "op": "box_create", "defined_out": [ "tmp%2#0" @@ -7306,17 +7504,17 @@ "tmp%2#0" ] }, - "1669": { + "1627": { "op": "assert", "stack_out": [] }, - "1670": { + "1628": { "op": "bytec_0 // 0x626c6f62", "stack_out": [ "0x626c6f62" ] }, - "1671": { + "1629": { "op": "box_len", "defined_out": [ "check%1#0", @@ -7327,21 +7525,21 @@ "check%1#0" ] }, - "1672": { + "1630": { "error": "check BoxRef exists", "op": "assert // check BoxRef exists", "stack_out": [ "value%1#0" ] }, - "1673": { + "1631": { "op": "intc_3 // 64", "stack_out": [ "value%1#0", "64" ] }, - "1674": { + "1632": { "op": "==", "defined_out": [ "tmp%3#0" @@ -7350,24 +7548,24 @@ "tmp%3#0" ] }, - "1675": { + "1633": { "op": "assert", "stack_out": [] }, - "1676": { + "1634": { "op": "bytec_0 // 0x626c6f62", "stack_out": [ "0x626c6f62" ] }, - "1677": { + "1635": { "op": "intc_2 // 32", "stack_out": [ "0x626c6f62", "32" ] }, - "1678": { + "1636": { "op": "box_create", "defined_out": [ "tmp%4#0" @@ -7376,17 +7574,17 @@ "tmp%4#0" ] }, - "1679": { + "1637": { "op": "assert", "stack_out": [] }, - "1680": { + "1638": { "op": "bytec_0 // 0x626c6f62", "stack_out": [ "0x626c6f62" ] }, - "1681": { + "1639": { "op": "box_len", "defined_out": [ "check%2#0", @@ -7397,21 +7595,21 @@ "check%2#0" ] }, - "1682": { + "1640": { "error": "check BoxRef exists", "op": "assert // check BoxRef exists", "stack_out": [ "value%2#0" ] }, - "1683": { + "1641": { "op": "intc_3 // 64", "stack_out": [ "value%2#0", "64" ] }, - "1684": { + "1642": { "op": "==", "defined_out": [ "tmp%5#0" @@ -7420,24 +7618,24 @@ "tmp%5#0" ] }, - "1685": { + "1643": { "op": "assert", "stack_out": [] }, - "1686": { + "1644": { "op": "bytec_0 // \"blob\"", "stack_out": [ "\"blob\"" ] }, - "1687": { + "1645": { "op": "intc_2 // 32", "stack_out": [ "\"blob\"", "32" ] }, - "1688": { + "1646": { "op": "box_create", "defined_out": [ "tmp%6#0" @@ -7446,17 +7644,17 @@ "tmp%6#0" ] }, - "1689": { + "1647": { "op": "assert", "stack_out": [] }, - "1690": { + "1648": { "op": "bytec_0 // \"blob\"", "stack_out": [ "\"blob\"" ] }, - "1691": { + "1649": { "op": "box_len", "defined_out": [ "check%3#0", @@ -7467,21 +7665,21 @@ "check%3#0" ] }, - "1692": { + "1650": { "error": "check BoxRef exists", "op": "assert // check BoxRef exists", "stack_out": [ "value%3#0" ] }, - "1693": { + "1651": { "op": "intc_3 // 64", "stack_out": [ "value%3#0", "64" ] }, - "1694": { + "1652": { "op": "==", "defined_out": [ "tmp%7#0" @@ -7490,22 +7688,19 @@ "tmp%7#0" ] }, - "1695": { + "1653": { "op": "assert", "stack_out": [] }, - "1696": { + "1654": { "retsub": true, "op": "retsub" }, - "1697": { + "1655": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.extract_box_ref", "params": {}, "block": "extract_box_ref", "stack_in": [], - "op": "proto 0 0" - }, - "1700": { "op": "bytec_0 // \"blob\"", "defined_out": [ "\"blob\"" @@ -7514,7 +7709,7 @@ "\"blob\"" ] }, - "1701": { + "1656": { "op": "intc_2 // 32", "defined_out": [ "\"blob\"", @@ -7525,7 +7720,7 @@ "32" ] }, - "1702": { + "1657": { "op": "box_create", "defined_out": [ "tmp%0#0" @@ -7534,11 +7729,11 @@ "tmp%0#0" ] }, - "1703": { + "1658": { "op": "assert", "stack_out": [] }, - "1704": { + "1659": { "op": "txn Sender", "defined_out": [ "sender_bytes#0" @@ -7547,7 +7742,7 @@ "sender_bytes#0" ] }, - "1706": { + "1661": { "op": "global CurrentApplicationAddress", "defined_out": [ "app_address#0", @@ -7558,7 +7753,7 @@ "app_address#0" ] }, - "1708": { + "1663": { "op": "bytec_0 // \"blob\"", "stack_out": [ "sender_bytes#0", @@ -7566,7 +7761,7 @@ "\"blob\"" ] }, - "1709": { + "1664": { "op": "intc_1 // 0", "defined_out": [ "\"blob\"", @@ -7581,7 +7776,7 @@ "0" ] }, - "1710": { + "1665": { "op": "dig 3", "defined_out": [ "\"blob\"", @@ -7598,14 +7793,14 @@ "sender_bytes#0 (copy)" ] }, - "1712": { + "1667": { "op": "box_replace", "stack_out": [ "sender_bytes#0", "app_address#0" ] }, - "1713": { + "1668": { "op": "bytec_0 // \"blob\"", "stack_out": [ "sender_bytes#0", @@ -7613,7 +7808,7 @@ "\"blob\"" ] }, - "1714": { + "1669": { "op": "intc_1 // 0", "stack_out": [ "sender_bytes#0", @@ -7622,7 +7817,7 @@ "0" ] }, - "1715": { + "1670": { "op": "dup", "stack_out": [ "sender_bytes#0", @@ -7632,7 +7827,7 @@ "0" ] }, - "1716": { + "1671": { "op": "dig 3", "defined_out": [ "\"blob\"", @@ -7650,14 +7845,14 @@ "app_address#0 (copy)" ] }, - "1718": { + "1673": { "op": "box_splice", "stack_out": [ "sender_bytes#0", "app_address#0" ] }, - "1719": { + "1674": { "op": "bytec_0 // \"blob\"", "stack_out": [ "sender_bytes#0", @@ -7665,7 +7860,7 @@ "\"blob\"" ] }, - "1720": { + "1675": { "op": "intc_3 // 64", "defined_out": [ "\"blob\"", @@ -7680,7 +7875,7 @@ "64" ] }, - "1721": { + "1676": { "op": "bytec 8 // 0x68656c6c6f", "defined_out": [ "\"blob\"", @@ -7697,14 +7892,14 @@ "0x68656c6c6f" ] }, - "1723": { + "1678": { "op": "box_replace", "stack_out": [ "sender_bytes#0", "app_address#0" ] }, - "1724": { + "1679": { "op": "bytec_0 // \"blob\"", "stack_out": [ "sender_bytes#0", @@ -7712,7 +7907,7 @@ "\"blob\"" ] }, - "1725": { + "1680": { "op": "intc_1 // 0", "stack_out": [ "sender_bytes#0", @@ -7721,7 +7916,7 @@ "0" ] }, - "1726": { + "1681": { "op": "pushint 69 // 69", "defined_out": [ "\"blob\"", @@ -7738,7 +7933,7 @@ "69" ] }, - "1728": { + "1683": { "op": "box_extract", "defined_out": [ "app_address#0", @@ -7751,7 +7946,7 @@ "prefix#0" ] }, - "1729": { + "1684": { "op": "swap", "stack_out": [ "sender_bytes#0", @@ -7759,7 +7954,7 @@ "app_address#0" ] }, - "1730": { + "1685": { "op": "uncover 2", "stack_out": [ "prefix#0", @@ -7767,7 +7962,7 @@ "sender_bytes#0" ] }, - "1732": { + "1687": { "op": "concat", "defined_out": [ "prefix#0", @@ -7778,7 +7973,7 @@ "tmp%3#0" ] }, - "1733": { + "1688": { "op": "bytec 8 // 0x68656c6c6f", "stack_out": [ "prefix#0", @@ -7786,7 +7981,7 @@ "0x68656c6c6f" ] }, - "1735": { + "1690": { "op": "concat", "defined_out": [ "prefix#0", @@ -7797,7 +7992,7 @@ "tmp%4#0" ] }, - "1736": { + "1691": { "op": "==", "defined_out": [ "tmp%5#0" @@ -7806,22 +8001,19 @@ "tmp%5#0" ] }, - "1737": { + "1692": { "op": "assert", "stack_out": [] }, - "1738": { + "1693": { "retsub": true, "op": "retsub" }, - "1739": { + "1694": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.manipulate_box_ref", "params": {}, "block": "manipulate_box_ref", "stack_in": [], - "op": "proto 0 0" - }, - "1742": { "op": "bytec_0 // \"blob\"", "defined_out": [ "\"blob\"" @@ -7830,7 +8022,7 @@ "\"blob\"" ] }, - "1743": { + "1695": { "op": "intc_2 // 32", "defined_out": [ "\"blob\"", @@ -7841,7 +8033,7 @@ "32" ] }, - "1744": { + "1696": { "op": "box_create", "defined_out": [ "tmp%0#0" @@ -7850,17 +8042,17 @@ "tmp%0#0" ] }, - "1745": { + "1697": { "op": "assert", "stack_out": [] }, - "1746": { + "1698": { "op": "bytec_0 // \"blob\"", "stack_out": [ "\"blob\"" ] }, - "1747": { + "1699": { "op": "box_len", "defined_out": [ "maybe_exists%0#0", @@ -7871,18 +8063,18 @@ "maybe_exists%0#0" ] }, - "1748": { + "1700": { "op": "bury 1", "stack_out": [ "maybe_exists%0#0" ] }, - "1750": { + "1702": { "error": "has data", "op": "assert // has data", "stack_out": [] }, - "1751": { + "1703": { "op": "txn Sender", "defined_out": [ "sender_bytes#0" @@ -7891,7 +8083,7 @@ "sender_bytes#0" ] }, - "1753": { + "1705": { "op": "global CurrentApplicationAddress", "defined_out": [ "app_address#0", @@ -7902,7 +8094,7 @@ "app_address#0" ] }, - "1755": { + "1707": { "op": "bytec_0 // \"blob\"", "stack_out": [ "sender_bytes#0", @@ -7910,7 +8102,7 @@ "\"blob\"" ] }, - "1756": { + "1708": { "op": "intc_1 // 0", "defined_out": [ "\"blob\"", @@ -7925,7 +8117,7 @@ "0" ] }, - "1757": { + "1709": { "op": "dig 3", "defined_out": [ "\"blob\"", @@ -7942,14 +8134,14 @@ "sender_bytes#0 (copy)" ] }, - "1759": { + "1711": { "op": "box_replace", "stack_out": [ "sender_bytes#0", "app_address#0" ] }, - "1760": { + "1712": { "op": "bytec_0 // \"blob\"", "stack_out": [ "sender_bytes#0", @@ -7957,7 +8149,7 @@ "\"blob\"" ] }, - "1761": { + "1713": { "op": "intc_1 // 0", "stack_out": [ "sender_bytes#0", @@ -7966,7 +8158,7 @@ "0" ] }, - "1762": { + "1714": { "op": "dup", "stack_out": [ "sender_bytes#0", @@ -7976,7 +8168,7 @@ "0" ] }, - "1763": { + "1715": { "op": "dig 3", "defined_out": [ "\"blob\"", @@ -7994,14 +8186,14 @@ "app_address#0 (copy)" ] }, - "1765": { + "1717": { "op": "box_splice", "stack_out": [ "sender_bytes#0", "app_address#0" ] }, - "1766": { + "1718": { "op": "bytec_0 // \"blob\"", "stack_out": [ "sender_bytes#0", @@ -8009,7 +8201,7 @@ "\"blob\"" ] }, - "1767": { + "1719": { "op": "intc_3 // 64", "defined_out": [ "\"blob\"", @@ -8024,7 +8216,7 @@ "64" ] }, - "1768": { + "1720": { "op": "bytec 8 // 0x68656c6c6f", "defined_out": [ "\"blob\"", @@ -8041,14 +8233,14 @@ "0x68656c6c6f" ] }, - "1770": { + "1722": { "op": "box_replace", "stack_out": [ "sender_bytes#0", "app_address#0" ] }, - "1771": { + "1723": { "op": "bytec_0 // \"blob\"", "stack_out": [ "sender_bytes#0", @@ -8056,7 +8248,7 @@ "\"blob\"" ] }, - "1772": { + "1724": { "op": "intc_1 // 0", "stack_out": [ "sender_bytes#0", @@ -8065,7 +8257,7 @@ "0" ] }, - "1773": { + "1725": { "op": "pushint 69 // 69", "defined_out": [ "\"blob\"", @@ -8082,7 +8274,7 @@ "69" ] }, - "1775": { + "1727": { "op": "box_extract", "defined_out": [ "app_address#0", @@ -8095,7 +8287,7 @@ "prefix#0" ] }, - "1776": { + "1728": { "op": "dig 1", "stack_out": [ "sender_bytes#0", @@ -8104,7 +8296,7 @@ "app_address#0 (copy)" ] }, - "1778": { + "1730": { "op": "dig 3", "stack_out": [ "sender_bytes#0", @@ -8114,7 +8306,7 @@ "sender_bytes#0 (copy)" ] }, - "1780": { + "1732": { "op": "concat", "defined_out": [ "app_address#0", @@ -8129,7 +8321,7 @@ "tmp%3#0" ] }, - "1781": { + "1733": { "op": "bytec 8 // 0x68656c6c6f", "stack_out": [ "sender_bytes#0", @@ -8139,7 +8331,7 @@ "0x68656c6c6f" ] }, - "1783": { + "1735": { "op": "concat", "defined_out": [ "app_address#0", @@ -8154,7 +8346,7 @@ "tmp%4#0" ] }, - "1784": { + "1736": { "op": "==", "defined_out": [ "app_address#0", @@ -8167,14 +8359,14 @@ "tmp%5#0" ] }, - "1785": { + "1737": { "op": "assert", "stack_out": [ "sender_bytes#0", "app_address#0" ] }, - "1786": { + "1738": { "op": "bytec_0 // \"blob\"", "stack_out": [ "sender_bytes#0", @@ -8182,7 +8374,7 @@ "\"blob\"" ] }, - "1787": { + "1739": { "op": "box_del", "defined_out": [ "app_address#0", @@ -8195,14 +8387,14 @@ "tmp%6#0" ] }, - "1788": { + "1740": { "op": "assert", "stack_out": [ "sender_bytes#0", "app_address#0" ] }, - "1789": { + "1741": { "op": "concat", "defined_out": [ "tmp%8#0" @@ -8211,31 +8403,31 @@ "tmp%8#0" ] }, - "1790": { + "1742": { "op": "bytec_0 // \"blob\"", "stack_out": [ "tmp%8#0", "\"blob\"" ] }, - "1791": { + "1743": { "op": "swap", "stack_out": [ "\"blob\"", "tmp%8#0" ] }, - "1792": { + "1744": { "op": "box_put", "stack_out": [] }, - "1793": { + "1745": { "op": "bytec_0 // \"blob\"", "stack_out": [ "\"blob\"" ] }, - "1794": { + "1746": { "op": "box_len", "defined_out": [ "maybe_exists%1#0", @@ -8246,24 +8438,24 @@ "maybe_exists%1#0" ] }, - "1795": { + "1747": { "op": "bury 1", "stack_out": [ "maybe_exists%1#0" ] }, - "1797": { + "1749": { "error": "Blob exists", "op": "assert // Blob exists", "stack_out": [] }, - "1798": { + "1750": { "op": "bytec_0 // \"blob\"", "stack_out": [ "\"blob\"" ] }, - "1799": { + "1751": { "op": "box_len", "defined_out": [ "check%0#0", @@ -8274,21 +8466,21 @@ "check%0#0" ] }, - "1800": { + "1752": { "error": "check BoxRef exists", "op": "assert // check BoxRef exists", "stack_out": [ "value%0#0" ] }, - "1801": { + "1753": { "op": "intc_3 // 64", "stack_out": [ "value%0#0", "64" ] }, - "1802": { + "1754": { "op": "==", "defined_out": [ "tmp%9#0" @@ -8297,22 +8489,19 @@ "tmp%9#0" ] }, - "1803": { + "1755": { "op": "assert", "stack_out": [] }, - "1804": { + "1756": { "retsub": true, "op": "retsub" }, - "1805": { + "1757": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.value_box", "params": {}, "block": "value_box", "stack_in": [], - "op": "proto 0 0" - }, - "1808": { "op": "bytec_2 // \"box_int\"", "defined_out": [ "\"box_int\"" @@ -8321,7 +8510,7 @@ "\"box_int\"" ] }, - "1809": { + "1758": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -8332,14 +8521,14 @@ "maybe_exists%0#0" ] }, - "1810": { + "1759": { "op": "swap", "stack_out": [ "maybe_exists%0#0", "maybe_value%0#0" ] }, - "1811": { + "1760": { "op": "btoi", "defined_out": [ "maybe_exists%0#0", @@ -8350,21 +8539,21 @@ "maybe_value_converted%0#0" ] }, - "1812": { + "1761": { "op": "swap", "stack_out": [ "maybe_value_converted%0#0", "maybe_exists%0#0" ] }, - "1813": { + "1762": { "error": "check self.box_int exists", "op": "assert // check self.box_int exists", "stack_out": [ "maybe_value_converted%0#0" ] }, - "1814": { + "1763": { "op": "pushint 10 // 10", "defined_out": [ "10", @@ -8375,7 +8564,7 @@ "10" ] }, - "1816": { + "1765": { "op": "==", "defined_out": [ "tmp%0#0" @@ -8384,22 +8573,19 @@ "tmp%0#0" ] }, - "1817": { + "1766": { "op": "assert", "stack_out": [] }, - "1818": { + "1767": { "retsub": true, "op": "retsub" }, - "1819": { + "1768": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.exist_box", "params": {}, "block": "exist_box", "stack_in": [], - "op": "proto 0 1" - }, - "1822": { "op": "bytec_2 // \"box_int\"", "defined_out": [ "\"box_int\"" @@ -8408,7 +8594,7 @@ "\"box_int\"" ] }, - "1823": { + "1769": { "op": "box_len", "defined_out": [ "maybe_exists%0#0", @@ -8419,24 +8605,21 @@ "maybe_exists%0#0" ] }, - "1824": { + "1770": { "op": "bury 1", "stack_out": [ "maybe_exists%0#0" ] }, - "1826": { + "1772": { "retsub": true, "op": "retsub" }, - "1827": { + "1773": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.exist_box_example", "params": {}, "block": "exist_box_example", "stack_in": [], - "op": "proto 0 3" - }, - "1830": { "op": "bytec 5 // \"b\"", "defined_out": [ "\"b\"" @@ -8445,7 +8628,7 @@ "\"b\"" ] }, - "1832": { + "1775": { "op": "box_len", "defined_out": [ "maybe_exists%0#0", @@ -8456,13 +8639,13 @@ "maybe_exists%0#0" ] }, - "1833": { + "1776": { "op": "bury 1", "stack_out": [ "maybe_exists%0#0" ] }, - "1835": { + "1778": { "op": "bytec 4 // 0x424f585f43", "defined_out": [ "0x424f585f43", @@ -8473,7 +8656,7 @@ "0x424f585f43" ] }, - "1837": { + "1780": { "op": "box_len", "defined_out": [ "maybe_exists%0#0", @@ -8486,14 +8669,14 @@ "maybe_exists%1#0" ] }, - "1838": { + "1781": { "op": "bury 1", "stack_out": [ "maybe_exists%0#0", "maybe_exists%1#0" ] }, - "1840": { + "1783": { "op": "bytec 12 // \"box_bytes\"", "defined_out": [ "\"box_bytes\"", @@ -8506,7 +8689,7 @@ "\"box_bytes\"" ] }, - "1842": { + "1785": { "op": "box_len", "defined_out": [ "maybe_exists%0#0", @@ -8521,7 +8704,7 @@ "maybe_exists%2#0" ] }, - "1843": { + "1786": { "op": "bury 1", "stack_out": [ "maybe_exists%0#0", @@ -8529,18 +8712,15 @@ "maybe_exists%2#0" ] }, - "1845": { + "1788": { "retsub": true, "op": "retsub" }, - "1846": { + "1789": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.slice_box", "params": {}, "block": "slice_box", "stack_in": [], - "op": "proto 0 0" - }, - "1849": { "op": "bytec 9 // \"0\"", "defined_out": [ "\"0\"" @@ -8549,7 +8729,7 @@ "\"0\"" ] }, - "1851": { + "1791": { "op": "box_del", "defined_out": [ "{box_del}" @@ -8558,17 +8738,17 @@ "{box_del}" ] }, - "1852": { + "1792": { "op": "pop", "stack_out": [] }, - "1853": { + "1793": { "op": "bytec 9 // \"0\"", "stack_out": [ "\"0\"" ] }, - "1855": { + "1795": { "op": "pushbytes 0x54657374696e672074657374696e6720313233", "defined_out": [ "\"0\"", @@ -8579,17 +8759,17 @@ "0x54657374696e672074657374696e6720313233" ] }, - "1876": { + "1816": { "op": "box_put", "stack_out": [] }, - "1877": { + "1817": { "op": "bytec 9 // \"0\"", "stack_out": [ "\"0\"" ] }, - "1879": { + "1819": { "op": "box_len", "defined_out": [ "tmp%0#0", @@ -8600,13 +8780,13 @@ "tmp%1#0" ] }, - "1880": { + "1820": { "op": "pop", "stack_out": [ "tmp%0#0" ] }, - "1881": { + "1821": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -8617,7 +8797,7 @@ "tmp%0#0 (copy)" ] }, - "1882": { + "1822": { "op": "intc_1 // 0", "defined_out": [ "0", @@ -8630,7 +8810,7 @@ "0" ] }, - "1883": { + "1823": { "op": "dig 2", "stack_out": [ "tmp%0#0", @@ -8639,7 +8819,7 @@ "tmp%0#0 (copy)" ] }, - "1885": { + "1825": { "op": "select", "defined_out": [ "tmp%0#0", @@ -8650,7 +8830,7 @@ "tmp%3#0" ] }, - "1886": { + "1826": { "op": "pushint 7 // 7", "defined_out": [ "7", @@ -8663,7 +8843,7 @@ "7" ] }, - "1888": { + "1828": { "op": "dig 2", "stack_out": [ "tmp%0#0", @@ -8672,7 +8852,7 @@ "tmp%0#0 (copy)" ] }, - "1890": { + "1830": { "op": "<", "defined_out": [ "tmp%0#0", @@ -8685,7 +8865,7 @@ "tmp%4#0" ] }, - "1891": { + "1831": { "op": "uncover 2", "stack_out": [ "tmp%3#0", @@ -8693,7 +8873,7 @@ "tmp%0#0" ] }, - "1893": { + "1833": { "op": "pushint 7 // 7", "stack_out": [ "tmp%3#0", @@ -8702,7 +8882,7 @@ "7" ] }, - "1895": { + "1835": { "op": "uncover 2", "stack_out": [ "tmp%3#0", @@ -8711,7 +8891,7 @@ "tmp%4#0" ] }, - "1897": { + "1837": { "op": "select", "defined_out": [ "tmp%3#0", @@ -8722,7 +8902,7 @@ "tmp%5#0" ] }, - "1898": { + "1838": { "op": "dig 1", "defined_out": [ "tmp%3#0", @@ -8735,7 +8915,7 @@ "tmp%3#0 (copy)" ] }, - "1900": { + "1840": { "op": "-", "defined_out": [ "tmp%3#0", @@ -8746,7 +8926,7 @@ "tmp%6#0" ] }, - "1901": { + "1841": { "op": "bytec 9 // \"0\"", "stack_out": [ "tmp%3#0", @@ -8754,7 +8934,7 @@ "\"0\"" ] }, - "1903": { + "1843": { "op": "cover 2", "stack_out": [ "\"0\"", @@ -8762,7 +8942,7 @@ "tmp%6#0" ] }, - "1905": { + "1845": { "op": "box_extract", "defined_out": [ "tmp%7#0" @@ -8771,7 +8951,7 @@ "tmp%7#0" ] }, - "1906": { + "1846": { "op": "pushbytes 0x54657374696e67", "defined_out": [ "0x54657374696e67", @@ -8782,7 +8962,7 @@ "0x54657374696e67" ] }, - "1915": { + "1855": { "op": "==", "defined_out": [ "tmp%8#0" @@ -8791,11 +8971,11 @@ "tmp%8#0" ] }, - "1916": { + "1856": { "op": "assert", "stack_out": [] }, - "1917": { + "1857": { "op": "bytec 4 // 0x424f585f43", "defined_out": [ "0x424f585f43" @@ -8804,23 +8984,23 @@ "0x424f585f43" ] }, - "1919": { + "1859": { "op": "box_del", "stack_out": [ "{box_del}" ] }, - "1920": { + "1860": { "op": "pop", "stack_out": [] }, - "1921": { + "1861": { "op": "bytec 4 // 0x424f585f43", "stack_out": [ "0x424f585f43" ] }, - "1923": { + "1863": { "op": "pushbytes 0x000548656c6c6f", "defined_out": [ "0x000548656c6c6f", @@ -8831,17 +9011,17 @@ "0x000548656c6c6f" ] }, - "1932": { + "1872": { "op": "box_put", "stack_out": [] }, - "1933": { + "1873": { "op": "bytec 4 // 0x424f585f43", "stack_out": [ "0x424f585f43" ] }, - "1935": { + "1875": { "op": "box_len", "defined_out": [ "tmp%10#0", @@ -8852,13 +9032,13 @@ "tmp%10#0" ] }, - "1936": { + "1876": { "op": "pop", "stack_out": [ "tmp%9#0" ] }, - "1937": { + "1877": { "op": "pushint 2 // 2", "defined_out": [ "2", @@ -8869,7 +9049,7 @@ "2" ] }, - "1939": { + "1879": { "op": "dig 1", "defined_out": [ "2", @@ -8882,7 +9062,7 @@ "tmp%9#0 (copy)" ] }, - "1941": { + "1881": { "op": "<", "defined_out": [ "tmp%11#0", @@ -8893,7 +9073,7 @@ "tmp%11#0" ] }, - "1942": { + "1882": { "op": "dig 1", "stack_out": [ "tmp%9#0", @@ -8901,7 +9081,7 @@ "tmp%9#0 (copy)" ] }, - "1944": { + "1884": { "op": "pushint 2 // 2", "stack_out": [ "tmp%9#0", @@ -8910,7 +9090,7 @@ "2" ] }, - "1946": { + "1886": { "op": "uncover 2", "stack_out": [ "tmp%9#0", @@ -8919,7 +9099,7 @@ "tmp%11#0" ] }, - "1948": { + "1888": { "op": "select", "defined_out": [ "tmp%12#0", @@ -8930,7 +9110,7 @@ "tmp%12#0" ] }, - "1949": { + "1889": { "op": "pushint 10 // 10", "defined_out": [ "10", @@ -8943,7 +9123,7 @@ "10" ] }, - "1951": { + "1891": { "op": "dig 2", "stack_out": [ "tmp%9#0", @@ -8952,7 +9132,7 @@ "tmp%9#0 (copy)" ] }, - "1953": { + "1893": { "op": "<", "defined_out": [ "tmp%12#0", @@ -8965,7 +9145,7 @@ "tmp%13#0" ] }, - "1954": { + "1894": { "op": "uncover 2", "stack_out": [ "tmp%12#0", @@ -8973,7 +9153,7 @@ "tmp%9#0" ] }, - "1956": { + "1896": { "op": "pushint 10 // 10", "stack_out": [ "tmp%12#0", @@ -8982,7 +9162,7 @@ "10" ] }, - "1958": { + "1898": { "op": "uncover 2", "stack_out": [ "tmp%12#0", @@ -8991,7 +9171,7 @@ "tmp%13#0" ] }, - "1960": { + "1900": { "op": "select", "defined_out": [ "tmp%12#0", @@ -9002,7 +9182,7 @@ "tmp%14#0" ] }, - "1961": { + "1901": { "op": "dig 1", "defined_out": [ "tmp%12#0", @@ -9015,7 +9195,7 @@ "tmp%12#0 (copy)" ] }, - "1963": { + "1903": { "op": "-", "defined_out": [ "tmp%12#0", @@ -9026,7 +9206,7 @@ "tmp%15#0" ] }, - "1964": { + "1904": { "op": "bytec 4 // 0x424f585f43", "stack_out": [ "tmp%12#0", @@ -9034,7 +9214,7 @@ "0x424f585f43" ] }, - "1966": { + "1906": { "op": "cover 2", "stack_out": [ "0x424f585f43", @@ -9042,7 +9222,7 @@ "tmp%15#0" ] }, - "1968": { + "1908": { "op": "box_extract", "defined_out": [ "tmp%16#0" @@ -9051,7 +9231,7 @@ "tmp%16#0" ] }, - "1969": { + "1909": { "op": "pushbytes 0x48656c6c6f", "defined_out": [ "0x48656c6c6f", @@ -9062,7 +9242,7 @@ "0x48656c6c6f" ] }, - "1976": { + "1916": { "op": "==", "defined_out": [ "tmp%17#0" @@ -9071,22 +9251,19 @@ "tmp%17#0" ] }, - "1977": { + "1917": { "op": "assert", "stack_out": [] }, - "1978": { + "1918": { "retsub": true, "op": "retsub" }, - "1979": { + "1919": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.arc4_box", "params": {}, "block": "arc4_box", "stack_in": [], - "op": "proto 0 0" - }, - "1982": { "op": "bytec 6 // 0x64", "defined_out": [ "0x64" @@ -9095,7 +9272,7 @@ "0x64" ] }, - "1984": { + "1921": { "op": "pushbytes 0x00010203", "defined_out": [ "0x00010203", @@ -9106,17 +9283,17 @@ "0x00010203" ] }, - "1990": { + "1927": { "op": "box_put", "stack_out": [] }, - "1991": { + "1928": { "op": "bytec 6 // 0x64", "stack_out": [ "0x64" ] }, - "1993": { + "1930": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -9127,14 +9304,14 @@ "maybe_exists%0#0" ] }, - "1994": { + "1931": { "error": "check Box exists", "op": "assert // check Box exists", "stack_out": [ "maybe_value%0#0" ] }, - "1995": { + "1932": { "error": "Index access is out of bounds", "op": "extract 0 1 // on error: Index access is out of bounds", "defined_out": [ @@ -9144,7 +9321,7 @@ "reinterpret_biguint%0#0" ] }, - "1998": { + "1935": { "op": "bytec_3 // 0x00", "defined_out": [ "0x00", @@ -9155,7 +9332,7 @@ "0x00" ] }, - "1999": { + "1936": { "op": "b==", "defined_out": [ "tmp%0#0" @@ -9164,17 +9341,17 @@ "tmp%0#0" ] }, - "2000": { + "1937": { "op": "assert", "stack_out": [] }, - "2001": { + "1938": { "op": "bytec 6 // 0x64", "stack_out": [ "0x64" ] }, - "2003": { + "1940": { "op": "box_get", "defined_out": [ "maybe_exists%1#0", @@ -9185,14 +9362,14 @@ "maybe_exists%1#0" ] }, - "2004": { + "1941": { "error": "check Box exists", "op": "assert // check Box exists", "stack_out": [ "maybe_value%1#0" ] }, - "2005": { + "1942": { "error": "Index access is out of bounds", "op": "extract 1 1 // on error: Index access is out of bounds", "defined_out": [ @@ -9202,7 +9379,7 @@ "reinterpret_biguint%2#0" ] }, - "2008": { + "1945": { "op": "pushbytes 0x01", "defined_out": [ "0x01", @@ -9213,7 +9390,7 @@ "0x01" ] }, - "2011": { + "1948": { "op": "b==", "defined_out": [ "tmp%1#0" @@ -9222,17 +9399,17 @@ "tmp%1#0" ] }, - "2012": { + "1949": { "op": "assert", "stack_out": [] }, - "2013": { + "1950": { "op": "bytec 6 // 0x64", "stack_out": [ "0x64" ] }, - "2015": { + "1952": { "op": "box_get", "defined_out": [ "maybe_exists%2#0", @@ -9243,14 +9420,14 @@ "maybe_exists%2#0" ] }, - "2016": { + "1953": { "error": "check Box exists", "op": "assert // check Box exists", "stack_out": [ "maybe_value%2#0" ] }, - "2017": { + "1954": { "error": "Index access is out of bounds", "op": "extract 2 1 // on error: Index access is out of bounds", "defined_out": [ @@ -9260,7 +9437,7 @@ "reinterpret_biguint%4#0" ] }, - "2020": { + "1957": { "op": "pushbytes 0x02", "defined_out": [ "0x02", @@ -9271,7 +9448,7 @@ "0x02" ] }, - "2023": { + "1960": { "op": "b==", "defined_out": [ "tmp%2#0" @@ -9280,17 +9457,17 @@ "tmp%2#0" ] }, - "2024": { + "1961": { "op": "assert", "stack_out": [] }, - "2025": { + "1962": { "op": "bytec 6 // 0x64", "stack_out": [ "0x64" ] }, - "2027": { + "1964": { "op": "box_get", "defined_out": [ "maybe_exists%3#0", @@ -9301,14 +9478,14 @@ "maybe_exists%3#0" ] }, - "2028": { + "1965": { "error": "check Box exists", "op": "assert // check Box exists", "stack_out": [ "maybe_value%3#0" ] }, - "2029": { + "1966": { "error": "Index access is out of bounds", "op": "extract 3 1 // on error: Index access is out of bounds", "defined_out": [ @@ -9318,7 +9495,7 @@ "reinterpret_biguint%6#0" ] }, - "2032": { + "1969": { "op": "pushbytes 0x03", "defined_out": [ "0x03", @@ -9329,7 +9506,7 @@ "0x03" ] }, - "2035": { + "1972": { "op": "b==", "defined_out": [ "tmp%3#0" @@ -9338,22 +9515,19 @@ "tmp%3#0" ] }, - "2036": { + "1973": { "op": "assert", "stack_out": [] }, - "2037": { + "1974": { "retsub": true, "op": "retsub" }, - "2038": { + "1975": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.key_box_example", "params": {}, "block": "key_box_example", "stack_in": [], - "op": "proto 0 0" - }, - "2041": { "op": "intc_1 // 0", "defined_out": [ "0" @@ -9362,16 +9536,16 @@ "0" ] }, - "2042": { + "1976": { "error": "box string key ok", "op": "assert // box string key ok", "stack_out": [] }, - "2043": { + "1977": { "retsub": true, "op": "retsub" }, - "2044": { + "1978": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.box_map_exists", "params": { "key#0": "uint64" @@ -9380,7 +9554,7 @@ "stack_in": [], "op": "proto 1 1" }, - "2047": { + "1981": { "op": "frame_dig -1", "defined_out": [ "key#0 (copy)" @@ -9389,7 +9563,7 @@ "key#0 (copy)" ] }, - "2049": { + "1983": { "op": "itob", "defined_out": [ "tmp%0#0" @@ -9398,7 +9572,7 @@ "tmp%0#0" ] }, - "2050": { + "1984": { "op": "box_len", "defined_out": [ "maybe_exists%0#0", @@ -9409,17 +9583,17 @@ "maybe_exists%0#0" ] }, - "2051": { + "1985": { "op": "bury 1", "stack_out": [ "maybe_exists%0#0" ] }, - "2053": { + "1987": { "retsub": true, "op": "retsub" }, - "2054": { + "1988": { "subroutine": "smart_contracts.box_storage.contract.BoxStorage.box_map_struct_exists", "params": { "key#0": "bytes" @@ -9428,7 +9602,7 @@ "stack_in": [], "op": "proto 1 1" }, - "2057": { + "1991": { "op": "bytec 11 // \"users\"", "defined_out": [ "\"users\"" @@ -9437,7 +9611,7 @@ "\"users\"" ] }, - "2059": { + "1993": { "op": "frame_dig -1", "defined_out": [ "\"users\"", @@ -9448,7 +9622,7 @@ "key#0 (copy)" ] }, - "2061": { + "1995": { "op": "concat", "defined_out": [ "tmp%0#0" @@ -9457,7 +9631,7 @@ "tmp%0#0" ] }, - "2062": { + "1996": { "op": "box_len", "defined_out": [ "maybe_exists%0#0", @@ -9468,13 +9642,13 @@ "maybe_exists%0#0" ] }, - "2063": { + "1997": { "op": "bury 1", "stack_out": [ "maybe_exists%0#0" ] }, - "2065": { + "1999": { "retsub": true, "op": "retsub" } diff --git a/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.approval.teal b/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.approval.teal index 6d6937d..4e76a11 100644 --- a/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.approval.teal +++ b/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.approval.teal @@ -728,11 +728,6 @@ main_bare_routing@41: // smart_contracts.box_storage.contract.BoxStorage.get_box() -> uint64: get_box: - // smart_contracts/box_storage/contract.py:40-42 - // # example: GET_BOX_STORAGE - // @arc4.abimethod - // def get_box(self) -> UInt64: - proto 0 1 // smart_contracts/box_storage/contract.py:43 // return self.box_int.value bytec_2 // "box_int" @@ -761,10 +756,6 @@ get_item_box_map: // smart_contracts.box_storage.contract.BoxStorage.get_box_map() -> bytes: get_box_map: - // smart_contracts/box_storage/contract.py:49-50 - // @arc4.abimethod - // def get_box_map(self) -> String: - proto 0 1 // smart_contracts/box_storage/contract.py:51 // key_1 = UInt64(1) intc_0 // 1 @@ -780,10 +771,6 @@ get_box_map: // smart_contracts.box_storage.contract.BoxStorage.get_box_ref() -> void: get_box_ref: - // smart_contracts/box_storage/contract.py:54-55 - // @arc4.abimethod - // def get_box_ref(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:56 // box_ref = BoxRef(key=String("blob")) bytec_0 // "blob" @@ -818,10 +805,6 @@ get_box_ref: // smart_contracts.box_storage.contract.BoxStorage.maybe_box() -> uint64, uint64: maybe_box: - // smart_contracts/box_storage/contract.py:64-65 - // @arc4.abimethod - // def maybe_box(self) -> tuple[UInt64, bool]: - proto 0 2 // smart_contracts/box_storage/contract.py:66 // box_int_value, box_int_exists = self.box_int.maybe() bytec_2 // "box_int" @@ -911,11 +894,6 @@ maybe_box_ref_after_if_else@2: // smart_contracts.box_storage.contract.BoxStorage.get_box_example() -> uint64, bytes, bytes: get_box_example: - // smart_contracts/box_storage/contract.py:89-91 - // # example: GET_BOX_STORAGE_EXAMPLE - // @arc4.abimethod - // def get_box_example(self) -> tuple[UInt64, Bytes, arc4.String]: - proto 0 3 // smart_contracts/box_storage/contract.py:93 // self.box_int.value, bytec_2 // "box_int" @@ -946,10 +924,6 @@ get_box_example: // smart_contracts.box_storage.contract.BoxStorage.get_box_map_example() -> uint64: get_box_map_example: - // smart_contracts/box_storage/contract.py:98-99 - // @arc4.abimethod - // def get_box_map_example(self) -> bool: - proto 0 1 // smart_contracts/box_storage/contract.py:100 // key_1 = UInt64(1) intc_0 // 1 @@ -971,10 +945,6 @@ get_box_map_example: // smart_contracts.box_storage.contract.BoxStorage.maybe_box_example() -> void: maybe_box_example: - // smart_contracts/box_storage/contract.py:104-105 - // @arc4.abimethod - // def maybe_box_example(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:106 // del self.box_int.value bytec_2 // "box_int" @@ -1013,10 +983,6 @@ maybe_box_example: // smart_contracts.box_storage.contract.BoxStorage.maybe_box_map_example() -> void: maybe_box_map_example: - // smart_contracts/box_storage/contract.py:112-113 - // @arc4.abimethod - // def maybe_box_map_example(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:115 // key_1 = UInt64(1) intc_0 // 1 @@ -1207,11 +1173,6 @@ set_box_example: // smart_contracts.box_storage.contract.BoxStorage.delete_box() -> void: delete_box: - // smart_contracts/box_storage/contract.py:165-167 - // # example: DELETE_BOX_STORAGE - // @arc4.abimethod - // def delete_box(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:168 // del self.box_int.value bytec_2 // "box_int" @@ -1285,10 +1246,6 @@ delete_box_map: // smart_contracts.box_storage.contract.BoxStorage.delete_box_ref() -> void: delete_box_ref: - // smart_contracts/box_storage/contract.py:182-183 - // @arc4.abimethod - // def delete_box_ref(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:185 // self.box_ref.create(size=UInt64(32)) bytec 14 // "box_ref" @@ -1359,10 +1316,6 @@ box_map_length_after_if_else@2: // smart_contracts.box_storage.contract.BoxStorage.length_box_ref() -> uint64: length_box_ref: - // smart_contracts/box_storage/contract.py:203-204 - // @arc4.abimethod - // def length_box_ref(self) -> UInt64: - proto 0 1 // smart_contracts/box_storage/contract.py:205 // box_ref = BoxRef(key=String("blob")) bytec_0 // "blob" @@ -1383,10 +1336,6 @@ length_box_ref: // smart_contracts.box_storage.contract.BoxStorage.box_map_struct_length() -> uint64: box_map_struct_length: - // smart_contracts/box_storage/contract.py:209-210 - // @arc4.abimethod - // def box_map_struct_length(self) -> bool: - proto 0 1 // smart_contracts/box_storage/contract.py:214 // self.box_map_struct[key_0] = value.copy() bytec 7 // 0x75736572730000000000000000 @@ -1423,11 +1372,6 @@ box_map_struct_length: // smart_contracts.box_storage.contract.BoxStorage.box_map_length_example() -> void: box_map_length_example: - // smart_contracts/box_storage/contract.py:221-223 - // # example: LENGTH_BOX_STORAGE_EXAMPLES - // @arc4.abimethod - // def box_map_length_example(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:224 // key_0 = UInt64(0) intc_1 // 0 @@ -1464,10 +1408,6 @@ box_map_length_example: // smart_contracts.box_storage.contract.BoxStorage.length_box_ref_example() -> void: length_box_ref_example: - // smart_contracts/box_storage/contract.py:230-231 - // @arc4.abimethod - // def length_box_ref_example(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:232 // box_ref = BoxRef(key="blob") bytec_0 // "blob" @@ -1545,11 +1485,6 @@ length_box_ref_example: // smart_contracts.box_storage.contract.BoxStorage.extract_box_ref() -> void: extract_box_ref: - // smart_contracts/box_storage/contract.py:250-252 - // # example: EXTRACT_BOX_REF - // @arc4.abimethod - // def extract_box_ref(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:253 // box_ref = BoxRef(key=String("blob")) bytec_0 // "blob" @@ -1619,11 +1554,6 @@ extract_box_ref: // smart_contracts.box_storage.contract.BoxStorage.manipulate_box_ref() -> void: manipulate_box_ref: - // smart_contracts/box_storage/contract.py:267-269 - // # example: OTHER_OPS_BOX_REF - // @arc4.abimethod - // def manipulate_box_ref(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:270 // box_ref = BoxRef(key=String("blob")) bytec_0 // "blob" @@ -1737,11 +1667,6 @@ manipulate_box_ref: // smart_contracts.box_storage.contract.BoxStorage.value_box() -> void: value_box: - // smart_contracts/box_storage/contract.py:293-295 - // # example: OTHER_OPS_BOX - // @arc4.abimethod - // def value_box(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:296 // assert self.box_int.value == UInt64(10) bytec_2 // "box_int" @@ -1758,10 +1683,6 @@ value_box: // smart_contracts.box_storage.contract.BoxStorage.exist_box() -> uint64: exist_box: - // smart_contracts/box_storage/contract.py:298-299 - // @arc4.abimethod - // def exist_box(self) -> bool: - proto 0 1 // smart_contracts/box_storage/contract.py:300 // return bool(self.box_int) bytec_2 // "box_int" @@ -1772,10 +1693,6 @@ exist_box: // smart_contracts.box_storage.contract.BoxStorage.exist_box_example() -> uint64, uint64, uint64: exist_box_example: - // smart_contracts/box_storage/contract.py:302-303 - // @arc4.abimethod - // def exist_box_example(self) -> tuple[bool, bool, bool]: - proto 0 3 // smart_contracts/box_storage/contract.py:304 // return bool(self.box_dynamic_bytes), bool(self.box_string), bool(self.box_bytes) bytec 5 // "b" @@ -1792,10 +1709,6 @@ exist_box_example: // smart_contracts.box_storage.contract.BoxStorage.slice_box() -> void: slice_box: - // smart_contracts/box_storage/contract.py:306-307 - // @arc4.abimethod - // def slice_box(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:308 // box_0 = Box(Bytes, key=String("0")) bytec 9 // "0" @@ -1880,10 +1793,6 @@ slice_box: // smart_contracts.box_storage.contract.BoxStorage.arc4_box() -> void: arc4_box: - // smart_contracts/box_storage/contract.py:315-316 - // @arc4.abimethod - // def arc4_box(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:317 // box_bytes = Box(StaticInts, key=Bytes(b"d")) bytec 6 // 0x64 @@ -1942,10 +1851,6 @@ arc4_box: // smart_contracts.box_storage.contract.BoxStorage.key_box_example() -> void: key_box_example: - // smart_contracts/box_storage/contract.py:331-332 - // @arc4.abimethod - // def key_box_example(self) -> None: - proto 0 0 // smart_contracts/box_storage/contract.py:334 // assert self.box_string.key == b"BOX_STRING", "box string key ok" intc_1 // 0 diff --git a/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.arc56.json b/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.arc56.json index 0d12cf5..223a8ba 100644 --- a/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/box_storage/BoxStorage.arc56.json @@ -732,16 +732,16 @@ "sourceInfo": [ { "pc": [ - 1797 + 1749 ], "errorMessage": "Blob exists" }, { "pc": [ - 1995, - 2005, - 2017, - 2029 + 1932, + 1942, + 1954, + 1966 ], "errorMessage": "Index access is out of bounds" }, @@ -788,7 +788,7 @@ }, { "pc": [ - 2042 + 1976 ], "errorMessage": "box string key ok" }, @@ -841,75 +841,75 @@ }, { "pc": [ - 1994, - 2004, - 2016, - 2028 + 1931, + 1941, + 1953, + 1965 ], "errorMessage": "check Box exists" }, { "pc": [ - 1561, - 1662, - 1672, - 1682, - 1692, - 1800 + 1528, + 1620, + 1630, + 1640, + 1650, + 1752 ], "errorMessage": "check BoxRef exists" }, { "pc": [ - 1238, - 1411, - 1415 + 1223, + 1387, + 1391 ], "errorMessage": "check self.box_dynamic_bytes exists" }, { "pc": [ - 1117, - 1234, - 1428, - 1813 + 1114, + 1219, + 1404, + 1762 ], "errorMessage": "check self.box_int exists" }, { "pc": [ - 1126, - 1549, - 1641, - 1647 + 1123, + 1519, + 1602, + 1608 ], "errorMessage": "check self.box_map entry exists" }, { "pc": [ - 1320, - 1361, - 1606, - 1614 + 1296, + 1337, + 1570, + 1578 ], "errorMessage": "check self.box_map_struct entry exists" }, { "pc": [ - 1245 + 1230 ], "errorMessage": "check self.box_string exists" }, { "pc": [ - 1422 + 1398 ], "errorMessage": "direct reference should match copy" }, { "pc": [ - 1517, - 1750 + 1487, + 1702 ], "errorMessage": "has data" } @@ -922,19 +922,19 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMzIgNjQKICAgIGJ5dGVjYmxvY2sgMHg2MjZjNmY2MiAweDE1MWY3Yzc1ICJib3hfaW50IiAweDAwIDB4NDI0ZjU4NWY0MyAiYiIgMHg2NCAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwIDB4Njg2NTZjNmM2ZiAiMCIgImRlZmF1bHQiICJ1c2VycyIgImJveF9ieXRlcyIgMHgwMDAyMzQzMiAiYm94X3JlZiIgMHgwMDAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A0MQogICAgcHVzaGJ5dGVzcyAweDU4ODhiOTk4IDB4MThkMGZiZTMgMHgzYWYyMzcyOCAweGNiOTExOTY5IDB4NGZjMjc5ZTEgMHg5ZWY2Njk3MSAweGU4OWI3ZjZmIDB4NGU2ZjA4OWUgMHgxMjgwNmY2YiAweDc1ZWQzNDg1IDB4NThlMjdlYWYgMHhhZjkxMTU5MCAweGFlODRhYzRkIDB4ZWZmNWI2NTcgMHgxYjhkYWRlMCAweDY1YzMwNjNlIDB4ODI3MDg1NjUgMHg0N2JiNzA0MyAweDNiOGNhZTJmIDB4NzhiMDczNGUgMHhiMTNlNjRkOCAweGQ2Nzc4OWViIDB4OTRlNWQzZjQgMHhhODZkMTZiMSAweDU0ZGI2MmRlIDB4ZWYxNTY4MzAgMHg3OWRmNTdmYyAweGY3NjEyNWI5IDB4MjFhY2E2ZmYgMHgwNGVmNDk3MSAweDIzZWNiMzJjIDB4ZWNkMWQxZjkgMHg3ZmEyZDFjMCAweDhlZTJjMzY0IDB4OTgwMjA4OGMgMHgzNmY4NmM4ZSAvLyBtZXRob2QgImdldF9ib3goKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2l0ZW1fYm94X21hcCh1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJnZXRfYm94X21hcCgpc3RyaW5nIiwgbWV0aG9kICJnZXRfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAibWF5YmVfYm94KCkodWludDY0LGJvb2wpIiwgbWV0aG9kICJtYXliZV9ib3hfbWFwKCkoc3RyaW5nLGJvb2wpIiwgbWV0aG9kICJtYXliZV9ib3hfcmVmKCkoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJnZXRfYm94X2V4YW1wbGUoKSh1aW50NjQsYnl0ZVtdLHN0cmluZykiLCBtZXRob2QgImdldF9ib3hfbWFwX2V4YW1wbGUoKWJvb2wiLCBtZXRob2QgIm1heWJlX2JveF9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJtYXliZV9ib3hfbWFwX2V4YW1wbGUoKXZvaWQiLCBtZXRob2QgImdldF9ib3hfbWFwX3N0cnVjdCh1aW50NjQpKHN0cmluZyx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAic2V0X2JveCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0X2JveF9tYXAodWludDY0LHN0cmluZyl2b2lkIiwgbWV0aG9kICJzZXRfYm94X21hcF9zdHJ1Y3QodWludDY0LChzdHJpbmcsdWludDY0LHVpbnQ2NCkpYm9vbCIsIG1ldGhvZCAic2V0X2JveF9leGFtcGxlKHVpbnQ2NCxieXRlW10sc3RyaW5nKXZvaWQiLCBtZXRob2QgImRlbGV0ZV9ib3goKXZvaWQiLCBtZXRob2QgImRlbGV0ZV9ib3hfbWFwKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZWxldGVfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAiYm94X21hcF9sZW5ndGgoKXVpbnQ2NCIsIG1ldGhvZCAibGVuZ3RoX2JveF9yZWYoKXVpbnQ2NCIsIG1ldGhvZCAiYm94X21hcF9zdHJ1Y3RfbGVuZ3RoKClib29sIiwgbWV0aG9kICJib3hfbWFwX2xlbmd0aF9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJsZW5ndGhfYm94X3JlZl9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJleHRyYWN0X2JveF9yZWYoKXZvaWQiLCBtZXRob2QgIm1hbmlwdWxhdGVfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAidmFsdWVfYm94KCl2b2lkIiwgbWV0aG9kICJleGlzdF9ib3goKWJvb2wiLCBtZXRob2QgImV4aXN0X2JveF9leGFtcGxlKCkoYm9vbCxib29sLGJvb2wpIiwgbWV0aG9kICJzbGljZV9ib3goKXZvaWQiLCBtZXRob2QgImFyYzRfYm94KCl2b2lkIiwgbWV0aG9kICJrZXlfYm94KClieXRlW10iLCBtZXRob2QgImtleV9ib3hfZXhhbXBsZSgpdm9pZCIsIG1ldGhvZCAiYm94X21hcF9leGlzdHModWludDY0KWJvb2wiLCBtZXRob2QgImJveF9tYXBfc3RydWN0X2V4aXN0cyh1aW50NjQpYm9vbCIsIG1ldGhvZCAia2V5X3ByZWZpeF9ib3hfbWFwKClieXRlW10iCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldF9ib3hfcm91dGVANSBtYWluX2dldF9pdGVtX2JveF9tYXBfcm91dGVANiBtYWluX2dldF9ib3hfbWFwX3JvdXRlQDcgbWFpbl9nZXRfYm94X3JlZl9yb3V0ZUA4IG1haW5fbWF5YmVfYm94X3JvdXRlQDkgbWFpbl9tYXliZV9ib3hfbWFwX3JvdXRlQDEwIG1haW5fbWF5YmVfYm94X3JlZl9yb3V0ZUAxMSBtYWluX2dldF9ib3hfZXhhbXBsZV9yb3V0ZUAxMiBtYWluX2dldF9ib3hfbWFwX2V4YW1wbGVfcm91dGVAMTMgbWFpbl9tYXliZV9ib3hfZXhhbXBsZV9yb3V0ZUAxNCBtYWluX21heWJlX2JveF9tYXBfZXhhbXBsZV9yb3V0ZUAxNSBtYWluX2dldF9ib3hfbWFwX3N0cnVjdF9yb3V0ZUAxNiBtYWluX3NldF9ib3hfcm91dGVAMTcgbWFpbl9zZXRfYm94X21hcF9yb3V0ZUAxOCBtYWluX3NldF9ib3hfbWFwX3N0cnVjdF9yb3V0ZUAxOSBtYWluX3NldF9ib3hfZXhhbXBsZV9yb3V0ZUAyMCBtYWluX2RlbGV0ZV9ib3hfcm91dGVAMjEgbWFpbl9kZWxldGVfYm94X21hcF9yb3V0ZUAyMiBtYWluX2RlbGV0ZV9ib3hfcmVmX3JvdXRlQDIzIG1haW5fYm94X21hcF9sZW5ndGhfcm91dGVAMjQgbWFpbl9sZW5ndGhfYm94X3JlZl9yb3V0ZUAyNSBtYWluX2JveF9tYXBfc3RydWN0X2xlbmd0aF9yb3V0ZUAyNiBtYWluX2JveF9tYXBfbGVuZ3RoX2V4YW1wbGVfcm91dGVAMjcgbWFpbl9sZW5ndGhfYm94X3JlZl9leGFtcGxlX3JvdXRlQDI4IG1haW5fZXh0cmFjdF9ib3hfcmVmX3JvdXRlQDI5IG1haW5fbWFuaXB1bGF0ZV9ib3hfcmVmX3JvdXRlQDMwIG1haW5fdmFsdWVfYm94X3JvdXRlQDMxIG1haW5fZXhpc3RfYm94X3JvdXRlQDMyIG1haW5fZXhpc3RfYm94X2V4YW1wbGVfcm91dGVAMzMgbWFpbl9zbGljZV9ib3hfcm91dGVAMzQgbWFpbl9hcmM0X2JveF9yb3V0ZUAzNSBtYWluX2tleV9ib3hfcm91dGVAMzYgbWFpbl9rZXlfYm94X2V4YW1wbGVfcm91dGVAMzcgbWFpbl9ib3hfbWFwX2V4aXN0c19yb3V0ZUAzOCBtYWluX2JveF9tYXBfc3RydWN0X2V4aXN0c19yb3V0ZUAzOSBtYWluX2tleV9wcmVmaXhfYm94X21hcF9yb3V0ZUA0MAoKbWFpbl9hZnRlcl9pZl9lbHNlQDQzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX2tleV9wcmVmaXhfYm94X21hcF9yb3V0ZUA0MDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozNDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3N0cnVjdF9leGlzdHNfcm91dGVAMzk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgYm94X21hcF9zdHJ1Y3RfZXhpc3RzCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX2V4aXN0c19yb3V0ZUAzODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzktMzQwCiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfTUFQCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzM5LTM0MAogICAgLy8gIyBleGFtcGxlOiBPVEhFUl9PUFNfQk9YX01BUAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGJveF9tYXBfZXhpc3RzCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9rZXlfYm94X2V4YW1wbGVfcm91dGVAMzc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBrZXlfYm94X2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fa2V5X2JveF9yb3V0ZUAzNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDc2MjZmNzg1ZjY5NmU3NAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzRfYm94X3JvdXRlQDM1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjNF9ib3gKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2xpY2VfYm94X3JvdXRlQDM0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc2xpY2VfYm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4aXN0X2JveF9leGFtcGxlX3JvdXRlQDMzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZXhpc3RfYm94X2V4YW1wbGUKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIHN3YXAKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBwdXNoaW50IDIgLy8gMgogICAgc3dhcAogICAgc2V0Yml0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4aXN0X2JveF9yb3V0ZUAzMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGV4aXN0X2JveAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmFsdWVfYm94X3JvdXRlQDMxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI5My0yOTQKICAgIC8vICMgZXhhbXBsZTogT1RIRVJfT1BTX0JPWAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdmFsdWVfYm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21hbmlwdWxhdGVfYm94X3JlZl9yb3V0ZUAzMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjctMjY4CiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYW5pcHVsYXRlX2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZXh0cmFjdF9ib3hfcmVmX3JvdXRlQDI5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MC0yNTEKICAgIC8vICMgZXhhbXBsZTogRVhUUkFDVF9CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBleHRyYWN0X2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbGVuZ3RoX2JveF9yZWZfZXhhbXBsZV9yb3V0ZUAyODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGxlbmd0aF9ib3hfcmVmX2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF9sZW5ndGhfZXhhbXBsZV9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjEtMjIyCiAgICAvLyAjIGV4YW1wbGU6IExFTkdUSF9CT1hfU1RPUkFHRV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYm94X21hcF9sZW5ndGhfZXhhbXBsZQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3N0cnVjdF9sZW5ndGhfcm91dGVAMjY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBib3hfbWFwX3N0cnVjdF9sZW5ndGgKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2xlbmd0aF9ib3hfcmVmX3JvdXRlQDI1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbGVuZ3RoX2JveF9yZWYKICAgIGl0b2IKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF9sZW5ndGhfcm91dGVAMjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk1LTE5NgogICAgLy8gIyBleGFtcGxlOiBMRU5HVEhfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGJveF9tYXBfbGVuZ3RoCiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZV9ib3hfcmVmX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlX2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsZXRlX2JveF9tYXBfcm91dGVAMjI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZGVsZXRlX2JveF9tYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsZXRlX2JveF9yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNjUtMTY2CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlX2JveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfYm94X2V4YW1wbGVfcm91dGVAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTQzLTE0NAogICAgLy8gIyBleGFtcGxlOiBTRVRfQk9YX1NUT1JBR0VfRVhBTVBMRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0My0xNDQKICAgIC8vICMgZXhhbXBsZTogU0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBzZXRfYm94X2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2JveF9tYXBfc3RydWN0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2JveF9tYXBfcm91dGVAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3hfbWFwCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9ib3hfcm91dGVAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTI2LTEyNwogICAgLy8gIyBleGFtcGxlOiBTRVRfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMjYtMTI3CiAgICAvLyAjIGV4YW1wbGU6IFNFVF9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3gKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9tYXBfc3RydWN0X3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGdldF9ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZV9ib3hfbWFwX2V4YW1wbGVfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfbWFwX2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfYm94X2V4YW1wbGVfcm91dGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfZXhhbXBsZQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYm94X21hcF9leGFtcGxlX3JvdXRlQDEzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfYm94X21hcF9leGFtcGxlCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYm94X2V4YW1wbGVfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogR0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9ib3hfZXhhbXBsZQogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBkaWcgMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIHB1c2hieXRlcyAweDAwMGMKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgcHVzaGludCAxMiAvLyAxMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfYm94X3JlZl9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWF5YmVfYm94X3JlZgogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgMTUgLy8gMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZV9ib3hfbWFwX3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfbWFwCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBieXRlYyAxNSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2JveF9yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3gKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9yZWZfcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9tYXBfcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveF9tYXAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pdGVtX2JveF9tYXBfcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2l0ZW1fYm94X21hcAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQwLTQxCiAgICAvLyAjIGV4YW1wbGU6IEdFVF9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveAogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VANDMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2JveCgpIC0+IHVpbnQ2NDoKZ2V0X2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MC00MgogICAgLy8gIyBleGFtcGxlOiBHRVRfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9ib3goc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDMKICAgIC8vIHJldHVybiBzZWxmLmJveF9pbnQudmFsdWUKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfaW50IGV4aXN0cwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2l0ZW1fYm94X21hcChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9pdGVtX2JveF9tYXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDUtNDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9pdGVtX2JveF9tYXAoc2VsZiwga2V5OiBVSW50NjQpIC0+IFN0cmluZzoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gc2VsZi5ib3hfbWFwW2tleV0KICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcCBlbnRyeSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfbWFwKCkgLT4gYnl0ZXM6CmdldF9ib3hfbWFwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ5LTUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBnZXRfYm94X21hcChzZWxmKSAtPiBTdHJpbmc6CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1MQogICAgLy8ga2V5XzEgPSBVSW50NjQoMSkKICAgIGludGNfMCAvLyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTIKICAgIC8vIHJldHVybiBzZWxmLmJveF9tYXAuZ2V0KGtleV8xLCBkZWZhdWx0PVN0cmluZygiZGVmYXVsdCIpKQogICAgaXRvYgogICAgYm94X2dldAogICAgYnl0ZWMgMTAgLy8gImRlZmF1bHQiCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfcmVmKCkgLT4gdm9pZDoKZ2V0X2JveF9yZWY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTQtNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9ib3hfcmVmKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1NgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU3CiAgICAvLyBhc3NlcnQgYm94X3JlZi5jcmVhdGUoc2l6ZT0zMikKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTgKICAgIC8vIHNlbmRlcl9ieXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1NgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjYwCiAgICAvLyBhc3NlcnQgYm94X3JlZi5kZWxldGUoKQogICAgYm94X2RlbAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTYKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo2MgogICAgLy8gYXNzZXJ0IGJveF9yZWYuZ2V0KGRlZmF1bHQ9c2VuZGVyX2J5dGVzKSA9PSBzZW5kZXJfYnl0ZXMKICAgIGJveF9nZXQKICAgIGRpZyAyCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLm1heWJlX2JveCgpIC0+IHVpbnQ2NCwgdWludDY0OgptYXliZV9ib3g6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjQtNjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIG1heWJlX2JveChzZWxmKSAtPiB0dXBsZVtVSW50NjQsIGJvb2xdOgogICAgcHJvdG8gMCAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjYKICAgIC8vIGJveF9pbnRfdmFsdWUsIGJveF9pbnRfZXhpc3RzID0gc2VsZi5ib3hfaW50Lm1heWJlKCkKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjcKICAgIC8vIHJldHVybiBib3hfaW50X3ZhbHVlLCBib3hfaW50X2V4aXN0cwogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UubWF5YmVfYm94X21hcCgpIC0+IGJ5dGVzLCB1aW50NjQ6Cm1heWJlX2JveF9tYXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjktNzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIG1heWJlX2JveF9tYXAoc2VsZikgLT4gdHVwbGVbU3RyaW5nLCBib29sXToKICAgIHByb3RvIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjcxCiAgICAvLyBrZXlfMSA9IFVJbnQ2NCgxKQogICAgaW50Y18wIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3MgogICAgLy8gdmFsdWUsIGV4aXN0cyA9IHNlbGYuYm94X21hcC5tYXliZShrZXlfMSkKICAgIGl0b2IKICAgIGJveF9nZXQKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzMKICAgIC8vIGlmIG5vdCBleGlzdHM6CiAgICBibnogbWF5YmVfYm94X21hcF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3NAogICAgLy8gdmFsdWUgPSBTdHJpbmcoIiIpCiAgICBwdXNoYnl0ZXMgIiIKICAgIGZyYW1lX2J1cnkgMQoKbWF5YmVfYm94X21hcF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzUKICAgIC8vIHJldHVybiB2YWx1ZSwgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5tYXliZV9ib3hfcmVmKCkgLT4gYnl0ZXMsIHVpbnQ2NDoKbWF5YmVfYm94X3JlZjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3Ny03OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgbWF5YmVfYm94X3JlZihzZWxmKSAtPiB0dXBsZVtCeXRlcywgYm9vbF06CiAgICBwcm90byAwIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3OQogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBhc3NlcnQgYm94X3JlZi5jcmVhdGUoc2l6ZT0zMikKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzkKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo4MgogICAgLy8gdmFsdWUsIGV4aXN0cyA9IGJveF9yZWYubWF5YmUoKQogICAgYm94X2dldAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo4MwogICAgLy8gaWYgbm90IGV4aXN0czoKICAgIGJueiBtYXliZV9ib3hfcmVmX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyB2YWx1ZSA9IEJ5dGVzKGIiIikKICAgIHB1c2hieXRlcyAweAogICAgZnJhbWVfYnVyeSAxCgptYXliZV9ib3hfcmVmX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo4NQogICAgLy8gcmV0dXJuIHZhbHVlLCBleGlzdHMKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfZXhhbXBsZSgpIC0+IHVpbnQ2NCwgYnl0ZXMsIGJ5dGVzOgpnZXRfYm94X2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODktOTEKICAgIC8vICMgZXhhbXBsZTogR0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9ib3hfZXhhbXBsZShzZWxmKSAtPiB0dXBsZVtVSW50NjQsIEJ5dGVzLCBhcmM0LlN0cmluZ106CiAgICBwcm90byAwIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo5MwogICAgLy8gc2VsZi5ib3hfaW50LnZhbHVlLAogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTQKICAgIC8vIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubmF0aXZlLAogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9keW5hbWljX2J5dGVzIGV4aXN0cwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo5NQogICAgLy8gc2VsZi5ib3hfc3RyaW5nLnZhbHVlLAogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9zdHJpbmcgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTItOTYKICAgIC8vIHJldHVybiAoCiAgICAvLyAgICAgc2VsZi5ib3hfaW50LnZhbHVlLAogICAgLy8gICAgIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubmF0aXZlLAogICAgLy8gICAgIHNlbGYuYm94X3N0cmluZy52YWx1ZSwKICAgIC8vICkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfbWFwX2V4YW1wbGUoKSAtPiB1aW50NjQ6CmdldF9ib3hfbWFwX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTgtOTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9ib3hfbWFwX2V4YW1wbGUoc2VsZikgLT4gYm9vbDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMAogICAgLy8ga2V5XzEgPSBVSW50NjQoMSkKICAgIGludGNfMCAvLyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTAxCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfbWFwLmdldChrZXlfMSwgZGVmYXVsdD1TdHJpbmcoImRlZmF1bHQiKSkgPT0gU3RyaW5nKCJkZWZhdWx0IikKICAgIGl0b2IKICAgIGJveF9nZXQKICAgIGJ5dGVjIDEwIC8vICJkZWZhdWx0IgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBieXRlYyAxMCAvLyAiZGVmYXVsdCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDIKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UubWF5YmVfYm94X2V4YW1wbGUoKSAtPiB2b2lkOgptYXliZV9ib3hfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDQtMTA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYXliZV9ib3hfZXhhbXBsZShzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA2CiAgICAvLyBkZWwgc2VsZi5ib3hfaW50LnZhbHVlCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA3CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfaW50LmdldChkZWZhdWx0PVVJbnQ2NCg0MikpID09IDQyCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgcHVzaGludCA0MiAvLyA0MgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHB1c2hpbnQgNDIgLy8gNDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDgKICAgIC8vIGJveF9pbnRfdmFsdWUsIGJveF9pbnRfZXhpc3RzID0gc2VsZi5ib3hfaW50Lm1heWJlKCkKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA5CiAgICAvLyBhc3NlcnQgbm90IGJveF9pbnRfZXhpc3RzCiAgICBzd2FwCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTAKICAgIC8vIGFzc2VydCBib3hfaW50X3ZhbHVlID09IDAKICAgICEKICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UubWF5YmVfYm94X21hcF9leGFtcGxlKCkgLT4gdm9pZDoKbWF5YmVfYm94X21hcF9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExMi0xMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIG1heWJlX2JveF9tYXBfZXhhbXBsZShzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTE1CiAgICAvLyBrZXlfMSA9IFVJbnQ2NCgxKQogICAgaW50Y18wIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTYKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBzZWxmLmJveF9tYXAubWF5YmUoa2V5XzEpCiAgICBpdG9iCiAgICBib3hfZ2V0CiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTcKICAgIC8vIGFzc2VydCBub3QgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTQKICAgIC8vIGtleV8wID0gVUludDY0KDApCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExOAogICAgLy8gYXNzZXJ0IGtleV8wIGluIHNlbGYuYm94X21hcAogICAgaXRvYgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfbWFwX3N0cnVjdChrZXk6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2JveF9tYXBfc3RydWN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMC0xMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9ib3hfbWFwX3N0cnVjdChzZWxmLCBrZXk6IGFyYzQuVUludDY0KSAtPiBVc2VyU3RydWN0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTIyCiAgICAvLyByZXR1cm4gc2VsZi5ib3hfbWFwX3N0cnVjdFtrZXldCiAgICBieXRlYyAxMSAvLyAidXNlcnMiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcF9zdHJ1Y3QgZW50cnkgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5zZXRfYm94KHZhbHVlX2ludDogdWludDY0KSAtPiB2b2lkOgpzZXRfYm94OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyNi0xMjgKICAgIC8vICMgZXhhbXBsZTogU0VUX0JPWF9TVE9SQUdFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzZXRfYm94KHNlbGYsIHZhbHVlX2ludDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTI5CiAgICAvLyBzZWxmLmJveF9pbnQudmFsdWUgPSB2YWx1ZV9pbnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnNldF9ib3hfbWFwKGtleTogdWludDY0LCB2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldF9ib3hfbWFwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzMS0xMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9ib3hfbWFwKHNlbGYsIGtleTogVUludDY0LCB2YWx1ZTogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTMzCiAgICAvLyBzZWxmLmJveF9tYXBba2V5XSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnNldF9ib3hfbWFwX3N0cnVjdChrZXk6IGJ5dGVzLCB2YWx1ZTogYnl0ZXMpIC0+IHVpbnQ2NDoKc2V0X2JveF9tYXBfc3RydWN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNS0xMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9ib3hfbWFwX3N0cnVjdChzZWxmLCBrZXk6IGFyYzQuVUludDY0LCB2YWx1ZTogVXNlclN0cnVjdCkgLT4gYm9vbDoKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNwogICAgLy8gc2VsZi5ib3hfbWFwX3N0cnVjdFtrZXldID0gdmFsdWUuY29weSgpCiAgICBieXRlYyAxMSAvLyAidXNlcnMiCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTM4CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfbWFwX3N0cnVjdFtrZXldID09IHZhbHVlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwX3N0cnVjdCBlbnRyeSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzOQogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5zZXRfYm94X2V4YW1wbGUodmFsdWVfaW50OiB1aW50NjQsIHZhbHVlX2RieXRlczogYnl0ZXMsIHZhbHVlX3N0cmluZzogYnl0ZXMpIC0+IHZvaWQ6CnNldF9ib3hfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNDMtMTUwCiAgICAvLyAjIGV4YW1wbGU6IFNFVF9CT1hfU1RPUkFHRV9FWEFNUExFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzZXRfYm94X2V4YW1wbGUoCiAgICAvLyAgICAgc2VsZiwKICAgIC8vICAgICB2YWx1ZV9pbnQ6IFVJbnQ2NCwKICAgIC8vICAgICB2YWx1ZV9kYnl0ZXM6IGFyYzQuRHluYW1pY0J5dGVzLAogICAgLy8gICAgIHZhbHVlX3N0cmluZzogYXJjNC5TdHJpbmcsCiAgICAvLyApIC0+IE5vbmU6CiAgICBwcm90byAzIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNTEKICAgIC8vIHNlbGYuYm94X2ludC52YWx1ZSA9IHZhbHVlX2ludAogICAgZnJhbWVfZGlnIC0zCiAgICBpdG9iCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1MgogICAgLy8gc2VsZi5ib3hfZHluYW1pY19ieXRlcy52YWx1ZSA9IHZhbHVlX2RieXRlcy5jb3B5KCkKICAgIGJ5dGVjIDUgLy8gImIiCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJ5dGVjIDUgLy8gImIiCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNTMKICAgIC8vIHNlbGYuYm94X3N0cmluZy52YWx1ZSA9IHZhbHVlX3N0cmluZwogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NAogICAgLy8gc2VsZi5ib3hfYnl0ZXMudmFsdWUgPSB2YWx1ZV9kYnl0ZXMubmF0aXZlCiAgICBmcmFtZV9kaWcgLTIKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAxMiAvLyAiYm94X2J5dGVzIgogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyAxMiAvLyAiYm94X2J5dGVzIgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gYnl0ZV92YWx1ZSA9IHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUuY29weSgpCiAgICBieXRlYyA1IC8vICJiIgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTU4CiAgICAvLyBzZWxmLmJveF9keW5hbWljX2J5dGVzLnZhbHVlLmxlbmd0aCA9PSBieXRlX3ZhbHVlLmxlbmd0aAogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9keW5hbWljX2J5dGVzIGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTU3LTE1OQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmJveF9keW5hbWljX2J5dGVzLnZhbHVlLmxlbmd0aCA9PSBieXRlX3ZhbHVlLmxlbmd0aAogICAgLy8gKSwgImRpcmVjdCByZWZlcmVuY2Ugc2hvdWxkIG1hdGNoIGNvcHkiCiAgICBhc3NlcnQgLy8gZGlyZWN0IHJlZmVyZW5jZSBzaG91bGQgbWF0Y2ggY29weQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2MQogICAgLy8gc2VsZi5ib3hfaW50LnZhbHVlICs9IDMKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfaW50IGV4aXN0cwogICAgcHVzaGludCAzIC8vIDMKICAgICsKICAgIGl0b2IKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5kZWxldGVfYm94KCkgLT4gdm9pZDoKZGVsZXRlX2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNjUtMTY3CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZGVsZXRlX2JveChzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTY4CiAgICAvLyBkZWwgc2VsZi5ib3hfaW50LnZhbHVlCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTY5CiAgICAvLyBkZWwgc2VsZi5ib3hfZHluYW1pY19ieXRlcy52YWx1ZQogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3MAogICAgLy8gZGVsIHNlbGYuYm94X3N0cmluZy52YWx1ZQogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3MgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2ludC5nZXQoZGVmYXVsdD1VSW50NjQoNDIpKSA9PSA0MgogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHB1c2hpbnQgNDIgLy8gNDIKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBwdXNoaW50IDQyIC8vIDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc0CiAgICAvLyBzZWxmLmJveF9keW5hbWljX2J5dGVzLmdldChkZWZhdWx0PWFyYzQuRHluYW1pY0J5dGVzKGIiNDIiKSkubmF0aXZlID09IGIiNDIiCiAgICBieXRlYyA1IC8vICJiIgogICAgYm94X2dldAogICAgYnl0ZWMgMTMgLy8gMHgwMDAyMzQzMgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBleHRyYWN0IDIgMAogICAgcHVzaGJ5dGVzIDB4MzQzMgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzMtMTc1CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMuZ2V0KGRlZmF1bHQ9YXJjNC5EeW5hbWljQnl0ZXMoYiI0MiIpKS5uYXRpdmUgPT0gYiI0MiIKICAgIC8vICkKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X3N0cmluZy5nZXQoZGVmYXVsdD1hcmM0LlN0cmluZygiNDIiKSkgPT0gIjQyIgogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9nZXQKICAgIGJ5dGVjIDEzIC8vIDB4MDAwMjM0MzIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgMTMgLy8gMHgwMDAyMzQzMgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZGVsZXRlX2JveF9tYXAoa2V5OiB1aW50NjQpIC0+IHZvaWQ6CmRlbGV0ZV9ib3hfbWFwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3OC0xNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlbGV0ZV9ib3hfbWFwKHNlbGYsIGtleTogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTgwCiAgICAvLyBkZWwgc2VsZi5ib3hfbWFwW2tleV0KICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5kZWxldGVfYm94X3JlZigpIC0+IHZvaWQ6CmRlbGV0ZV9ib3hfcmVmOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4Mi0xODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlbGV0ZV9ib3hfcmVmKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxODUKICAgIC8vIHNlbGYuYm94X3JlZi5jcmVhdGUoc2l6ZT1VSW50NjQoMzIpKQogICAgYnl0ZWMgMTQgLy8gImJveF9yZWYiCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4NgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X3JlZiwgImhhcyBkYXRhIgogICAgYnl0ZWMgMTQgLy8gImJveF9yZWYiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBoYXMgZGF0YQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4OAogICAgLy8gc2VsZi5ib3hfcmVmLmRlbGV0ZSgpCiAgICBieXRlYyAxNCAvLyAiYm94X3JlZiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4NAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4OQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IGJveF9yZWYubWF5YmUoKQogICAgYm94X2dldAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gYXNzZXJ0IG5vdCBleGlzdHMKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5MQogICAgLy8gYXNzZXJ0IHZhbHVlID09IGIiIgogICAgcHVzaGJ5dGVzIDB4CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX2xlbmd0aCgpIC0+IHVpbnQ2NDoKYm94X21hcF9sZW5ndGg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk1LTE5NwogICAgLy8gIyBleGFtcGxlOiBMRU5HVEhfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfbGVuZ3RoKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5OAogICAgLy8ga2V5XzAgPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk5CiAgICAvLyBpZiBrZXlfMCBub3QgaW4gc2VsZi5ib3hfbWFwOgogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBib3hfbWFwX2xlbmd0aF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDAKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmJveF9tYXBfbGVuZ3RoX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDEKICAgIC8vIHJldHVybiBzZWxmLmJveF9tYXAubGVuZ3RoKGtleV8wKQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9tYXAgZW50cnkgZXhpc3RzCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5sZW5ndGhfYm94X3JlZigpIC0+IHVpbnQ2NDoKbGVuZ3RoX2JveF9yZWY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjAzLTIwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgbGVuZ3RoX2JveF9yZWYoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA1CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA2CiAgICAvLyBhc3NlcnQgYm94X3JlZi5jcmVhdGUoc2l6ZT0zMikKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA1CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA3CiAgICAvLyByZXR1cm4gYm94X3JlZi5sZW5ndGgKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX3N0cnVjdF9sZW5ndGgoKSAtPiB1aW50NjQ6CmJveF9tYXBfc3RydWN0X2xlbmd0aDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDktMjEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfbWFwX3N0cnVjdF9sZW5ndGgoc2VsZikgLT4gYm9vbDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIxNAogICAgLy8gc2VsZi5ib3hfbWFwX3N0cnVjdFtrZXlfMF0gPSB2YWx1ZS5jb3B5KCkKICAgIGJ5dGVjIDcgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyA3IC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMTIKICAgIC8vIHZhbHVlID0gVXNlclN0cnVjdChhcmM0LlN0cmluZygidGVzdE5hbWUiKSwgYXJjNC5VSW50NjQoNzApLCBhcmM0LlVJbnQ2NCgyKSkKICAgIHB1c2hieXRlcyAweDAwMTIwMDAwMDAwMDAwMDAwMDQ2MDAwMDAwMDAwMDAwMDAwMjAwMDg3NDY1NzM3NDRlNjE2ZDY1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjE0CiAgICAvLyBzZWxmLmJveF9tYXBfc3RydWN0W2tleV8wXSA9IHZhbHVlLmNvcHkoKQogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIxNQogICAgLy8gYXNzZXJ0IHNlbGYuYm94X21hcF9zdHJ1Y3Rba2V5XzBdLmJ5dGVzLmxlbmd0aCA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGJ5dGVjIDcgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcF9zdHJ1Y3QgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjE2CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfbWFwX3N0cnVjdC5sZW5ndGgoa2V5XzApID09IHZhbHVlLmJ5dGVzLmxlbmd0aAogICAgYnl0ZWMgNyAvLyAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwX3N0cnVjdCBlbnRyeSBleGlzdHMKICAgIHB1c2hpbnQgMjggLy8gMjgKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMTcKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuYm94X21hcF9sZW5ndGhfZXhhbXBsZSgpIC0+IHZvaWQ6CmJveF9tYXBfbGVuZ3RoX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjIxLTIyMwogICAgLy8gIyBleGFtcGxlOiBMRU5HVEhfQk9YX1NUT1JBR0VfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfbGVuZ3RoX2V4YW1wbGUoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyNAogICAgLy8ga2V5XzAgPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI2CiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjUKICAgIC8vIHZhbHVlID0gU3RyaW5nKCJIbW1tbW0iKQogICAgcHVzaGJ5dGVzICJIbW1tbW0iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI2CiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjcKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXBba2V5XzBdLmJ5dGVzLmxlbmd0aCA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGR1cAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcCBlbnRyeSBleGlzdHMKICAgIHB1c2hpbnQgNiAvLyA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI4CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfbWFwLmxlbmd0aChrZXlfMCkgPT0gdmFsdWUuYnl0ZXMubGVuZ3RoCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwIGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmxlbmd0aF9ib3hfcmVmX2V4YW1wbGUoKSAtPiB2b2lkOgpsZW5ndGhfYm94X3JlZl9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIzMC0yMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGxlbmd0aF9ib3hfcmVmX2V4YW1wbGUoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIzMgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9ImJsb2IiKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzMKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzIKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PSJibG9iIikKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjM0CiAgICAvLyBhc3NlcnQgYm94X3JlZi5sZW5ndGggPT0gNjQKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICBpbnRjXzMgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzYKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PWIiYmxvYiIpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzcKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzYKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PWIiYmxvYiIpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzgKICAgIC8vIGFzc2VydCBib3hfcmVmLmxlbmd0aCA9PSA2NAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIEJveFJlZiBleGlzdHMKICAgIGludGNfMyAvLyA2NAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9Qnl0ZXMoYiJibG9iIikpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDEKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PUJ5dGVzKGIiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAweDYyNmM2ZjYyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQyCiAgICAvLyBhc3NlcnQgYm94X3JlZi5sZW5ndGggPT0gNjQKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICBpbnRjXzMgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDQKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDUKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDQKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDYKICAgIC8vIGFzc2VydCBib3hfcmVmLmxlbmd0aCA9PSA2NAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIEJveFJlZiBleGlzdHMKICAgIGludGNfMyAvLyA2NAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZXh0cmFjdF9ib3hfcmVmKCkgLT4gdm9pZDoKZXh0cmFjdF9ib3hfcmVmOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MC0yNTIKICAgIC8vICMgZXhhbXBsZTogRVhUUkFDVF9CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBleHRyYWN0X2JveF9yZWYoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NAogICAgLy8gYXNzZXJ0IGJveF9yZWYuY3JlYXRlKHNpemU9MzIpCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gc2VuZGVyX2J5dGVzID0gVHhuLnNlbmRlci5ieXRlcwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NwogICAgLy8gYXBwX2FkZHJlc3MgPSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmJ5dGVzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYm94X3JlZi5yZXBsYWNlKDAsIHNlbmRlcl9ieXRlcykKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMwogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTMKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjAKICAgIC8vIGJveF9yZWYuc3BsaWNlKDAsIDAsIGFwcF9hZGRyZXNzKQogICAgaW50Y18xIC8vIDAKICAgIGR1cAogICAgZGlnIDMKICAgIGJveF9zcGxpY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTMKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjEKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIGludGNfMyAvLyA2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OAogICAgLy8gdmFsdWVfMyA9IEJ5dGVzKGIiaGVsbG8iKQogICAgYnl0ZWMgOCAvLyAweDY4NjU2YzZjNmYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjEKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUzCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjYyCiAgICAvLyBwcmVmaXggPSBib3hfcmVmLmV4dHJhY3QoMCwgMzIgKiAyICsgdmFsdWVfMy5sZW5ndGgpCiAgICBpbnRjXzEgLy8gMAogICAgcHVzaGludCA2OSAvLyA2OQogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjMKICAgIC8vIGFzc2VydCBwcmVmaXggPT0gYXBwX2FkZHJlc3MgKyBzZW5kZXJfYnl0ZXMgKyB2YWx1ZV8zCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OAogICAgLy8gdmFsdWVfMyA9IEJ5dGVzKGIiaGVsbG8iKQogICAgYnl0ZWMgOCAvLyAweDY4NjU2YzZjNmYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjMKICAgIC8vIGFzc2VydCBwcmVmaXggPT0gYXBwX2FkZHJlc3MgKyBzZW5kZXJfYnl0ZXMgKyB2YWx1ZV8zCiAgICBjb25jYXQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLm1hbmlwdWxhdGVfYm94X3JlZigpIC0+IHZvaWQ6Cm1hbmlwdWxhdGVfYm94X3JlZjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjctMjY5CiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYW5pcHVsYXRlX2JveF9yZWYoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MQogICAgLy8gYXNzZXJ0IGJveF9yZWYuY3JlYXRlKHNpemU9MzIpCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MgogICAgLy8gYXNzZXJ0IGJveF9yZWYsICJoYXMgZGF0YSIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGhhcyBkYXRhCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc0LTI3NQogICAgLy8gIyBtYW5pcHVsYXRlIGRhdGEKICAgIC8vIHNlbmRlcl9ieXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzYKICAgIC8vIGFwcF9hZGRyZXNzID0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5ieXRlcwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzgKICAgIC8vIGJveF9yZWYucmVwbGFjZSgwLCBzZW5kZXJfYnl0ZXMpCiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDMKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc5CiAgICAvLyBib3hfcmVmLnNwbGljZSgwLCAwLCBhcHBfYWRkcmVzcykKICAgIGludGNfMSAvLyAwCiAgICBkdXAKICAgIGRpZyAzCiAgICBib3hfc3BsaWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjgwCiAgICAvLyBib3hfcmVmLnJlcGxhY2UoNjQsIHZhbHVlXzMpCiAgICBpbnRjXzMgLy8gNjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzcKICAgIC8vIHZhbHVlXzMgPSBCeXRlcyhiImhlbGxvIikKICAgIGJ5dGVjIDggLy8gMHg2ODY1NmM2YzZmCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjgwCiAgICAvLyBib3hfcmVmLnJlcGxhY2UoNjQsIHZhbHVlXzMpCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MQogICAgLy8gcHJlZml4ID0gYm94X3JlZi5leHRyYWN0KDAsIDMyICogMiArIHZhbHVlXzMubGVuZ3RoKQogICAgaW50Y18xIC8vIDAKICAgIHB1c2hpbnQgNjkgLy8gNjkKICAgIGJveF9leHRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjgyCiAgICAvLyBhc3NlcnQgcHJlZml4ID09IGFwcF9hZGRyZXNzICsgc2VuZGVyX2J5dGVzICsgdmFsdWVfMwogICAgZGlnIDEKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzcKICAgIC8vIHZhbHVlXzMgPSBCeXRlcyhiImhlbGxvIikKICAgIGJ5dGVjIDggLy8gMHg2ODY1NmM2YzZmCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjgyCiAgICAvLyBhc3NlcnQgcHJlZml4ID09IGFwcF9hZGRyZXNzICsgc2VuZGVyX2J5dGVzICsgdmFsdWVfMwogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjg0CiAgICAvLyBhc3NlcnQgYm94X3JlZi5kZWxldGUoKQogICAgYm94X2RlbAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjg3CiAgICAvLyBib3hfcmVmLnB1dChzZW5kZXJfYnl0ZXMgKyBhcHBfYWRkcmVzcykKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4NwogICAgLy8gYm94X3JlZi5wdXQoc2VuZGVyX2J5dGVzICsgYXBwX2FkZHJlc3MpCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjg4CiAgICAvLyBhc3NlcnQgYm94X3JlZiwgIkJsb2IgZXhpc3RzIgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQmxvYiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyODkKICAgIC8vIGFzc2VydCBib3hfcmVmLmxlbmd0aCA9PSA2NAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIEJveFJlZiBleGlzdHMKICAgIGludGNfMyAvLyA2NAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UudmFsdWVfYm94KCkgLT4gdm9pZDoKdmFsdWVfYm94OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI5My0yOTUKICAgIC8vICMgZXhhbXBsZTogT1RIRVJfT1BTX0JPWAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgdmFsdWVfYm94KHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTYKICAgIC8vIGFzc2VydCBzZWxmLmJveF9pbnQudmFsdWUgPT0gVUludDY0KDEwKQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5leGlzdF9ib3goKSAtPiB1aW50NjQ6CmV4aXN0X2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTgtMjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBleGlzdF9ib3goc2VsZikgLT4gYm9vbDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwMAogICAgLy8gcmV0dXJuIGJvb2woc2VsZi5ib3hfaW50KQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZXhpc3RfYm94X2V4YW1wbGUoKSAtPiB1aW50NjQsIHVpbnQ2NCwgdWludDY0OgpleGlzdF9ib3hfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDItMzAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBleGlzdF9ib3hfZXhhbXBsZShzZWxmKSAtPiB0dXBsZVtib29sLCBib29sLCBib29sXToKICAgIHByb3RvIDAgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwNAogICAgLy8gcmV0dXJuIGJvb2woc2VsZi5ib3hfZHluYW1pY19ieXRlcyksIGJvb2woc2VsZi5ib3hfc3RyaW5nKSwgYm9vbChzZWxmLmJveF9ieXRlcykKICAgIGJ5dGVjIDUgLy8gImIiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ5dGVjIDQgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ5dGVjIDEyIC8vICJib3hfYnl0ZXMiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnNsaWNlX2JveCgpIC0+IHZvaWQ6CnNsaWNlX2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDYtMzA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzbGljZV9ib3goc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOAogICAgLy8gYm94XzAgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoIjAiKSkKICAgIGJ5dGVjIDkgLy8gIjAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzA5CiAgICAvLyBib3hfMC52YWx1ZSA9IEJ5dGVzKGIiVGVzdGluZyB0ZXN0aW5nIDEyMyIpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDgKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyA5IC8vICIwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOQogICAgLy8gYm94XzAudmFsdWUgPSBCeXRlcyhiIlRlc3RpbmcgdGVzdGluZyAxMjMiKQogICAgcHVzaGJ5dGVzIDB4NTQ2NTczNzQ2OTZlNjcyMDc0NjU3Mzc0Njk2ZTY3MjAzMTMyMzMKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDgKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyA5IC8vICIwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxMAogICAgLy8gYXNzZXJ0IGJveF8wLnZhbHVlWzA6N10gPT0gYiJUZXN0aW5nIgogICAgYm94X2xlbgogICAgcG9wCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMgogICAgc2VsZWN0CiAgICBwdXNoaW50IDcgLy8gNwogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA3IC8vIDcKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOAogICAgLy8gYm94XzAgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoIjAiKSkKICAgIGJ5dGVjIDkgLy8gIjAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzEwCiAgICAvLyBhc3NlcnQgYm94XzAudmFsdWVbMDo3XSA9PSBiIlRlc3RpbmciCiAgICBjb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgcHVzaGJ5dGVzIDB4NTQ2NTczNzQ2OTZlNjcKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTIKICAgIC8vIHNlbGYuYm94X3N0cmluZy52YWx1ZSA9IGFyYzQuU3RyaW5nKCJIZWxsbyIpCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgcHVzaGJ5dGVzIDB4MDAwNTQ4NjU2YzZjNmYKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTMKICAgIC8vIGFzc2VydCBzZWxmLmJveF9zdHJpbmcudmFsdWUuYnl0ZXNbMjoxMF0gPT0gYiJIZWxsbyIKICAgIGJ5dGVjIDQgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfbGVuCiAgICBwb3AKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBkaWcgMQogICAgPAogICAgZGlnIDEKICAgIHB1c2hpbnQgMiAvLyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAxMCAvLyAxMAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAxCiAgICAtCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIHB1c2hieXRlcyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmFyYzRfYm94KCkgLT4gdm9pZDoKYXJjNF9ib3g6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzE1LTMxNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYXJjNF9ib3goc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gYm94X2J5dGVzID0gQm94KFN0YXRpY0ludHMsIGtleT1CeXRlcyhiImQiKSkKICAgIGJ5dGVjIDYgLy8gMHg2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxOC0zMjAKICAgIC8vIGJveF9ieXRlcy52YWx1ZSA9IFN0YXRpY0ludHMoCiAgICAvLyAgICAgYXJjNC5VSW50OCgwKSwgYXJjNC5VSW50OCgxKSwgYXJjNC5VSW50OCgyKSwgYXJjNC5VSW50OCgzKQogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4MDAwMTAyMDMKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTcKICAgIC8vIGJveF9ieXRlcyA9IEJveChTdGF0aWNJbnRzLCBrZXk9Qnl0ZXMoYiJkIikpCiAgICBieXRlYyA2IC8vIDB4NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMjIKICAgIC8vIGFzc2VydCBib3hfYnl0ZXMudmFsdWVbMF0gPT0gMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveCBleGlzdHMKICAgIGV4dHJhY3QgMCAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gYm94X2J5dGVzID0gQm94KFN0YXRpY0ludHMsIGtleT1CeXRlcyhiImQiKSkKICAgIGJ5dGVjIDYgLy8gMHg2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyMwogICAgLy8gYXNzZXJ0IGJveF9ieXRlcy52YWx1ZVsxXSA9PSAxCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94IGV4aXN0cwogICAgZXh0cmFjdCAxIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoYnl0ZXMgMHgwMQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTcKICAgIC8vIGJveF9ieXRlcyA9IEJveChTdGF0aWNJbnRzLCBrZXk9Qnl0ZXMoYiJkIikpCiAgICBieXRlYyA2IC8vIDB4NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMjQKICAgIC8vIGFzc2VydCBib3hfYnl0ZXMudmFsdWVbMl0gPT0gMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveCBleGlzdHMKICAgIGV4dHJhY3QgMiAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcHVzaGJ5dGVzIDB4MDIKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzE3CiAgICAvLyBib3hfYnl0ZXMgPSBCb3goU3RhdGljSW50cywga2V5PUJ5dGVzKGIiZCIpKQogICAgYnl0ZWMgNiAvLyAweDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzI1CiAgICAvLyBhc3NlcnQgYm94X2J5dGVzLnZhbHVlWzNdID09IDMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3ggZXhpc3RzCiAgICBleHRyYWN0IDMgMSAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweDAzCiAgICBiPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2Uua2V5X2JveF9leGFtcGxlKCkgLT4gdm9pZDoKa2V5X2JveF9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMzMS0zMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGtleV9ib3hfZXhhbXBsZShzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzM0CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfc3RyaW5nLmtleSA9PSBiIkJPWF9TVFJJTkciLCAiYm94IHN0cmluZyBrZXkgb2siCiAgICBpbnRjXzEgLy8gMAogICAgYXNzZXJ0IC8vIGJveCBzdHJpbmcga2V5IG9rCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX2V4aXN0cyhrZXk6IHVpbnQ2NCkgLT4gdWludDY0Ogpib3hfbWFwX2V4aXN0czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzktMzQxCiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfTUFQCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfbWFwX2V4aXN0cyhzZWxmLCBrZXk6IFVJbnQ2NCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM0MgogICAgLy8gcmV0dXJuIGtleSBpbiBzZWxmLmJveF9tYXAKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX3N0cnVjdF9leGlzdHMoa2V5OiBieXRlcykgLT4gdWludDY0Ogpib3hfbWFwX3N0cnVjdF9leGlzdHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0LTM0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYm94X21hcF9zdHJ1Y3RfZXhpc3RzKHNlbGYsIGtleTogYXJjNC5VSW50NjQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozNDYKICAgIC8vIHJldHVybiBrZXkgaW4gc2VsZi5ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWMgMTEgLy8gInVzZXJzIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMzIgNjQKICAgIGJ5dGVjYmxvY2sgMHg2MjZjNmY2MiAweDE1MWY3Yzc1ICJib3hfaW50IiAweDAwIDB4NDI0ZjU4NWY0MyAiYiIgMHg2NCAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwIDB4Njg2NTZjNmM2ZiAiMCIgImRlZmF1bHQiICJ1c2VycyIgImJveF9ieXRlcyIgMHgwMDAyMzQzMiAiYm94X3JlZiIgMHgwMDAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A0MQogICAgcHVzaGJ5dGVzcyAweDU4ODhiOTk4IDB4MThkMGZiZTMgMHgzYWYyMzcyOCAweGNiOTExOTY5IDB4NGZjMjc5ZTEgMHg5ZWY2Njk3MSAweGU4OWI3ZjZmIDB4NGU2ZjA4OWUgMHgxMjgwNmY2YiAweDc1ZWQzNDg1IDB4NThlMjdlYWYgMHhhZjkxMTU5MCAweGFlODRhYzRkIDB4ZWZmNWI2NTcgMHgxYjhkYWRlMCAweDY1YzMwNjNlIDB4ODI3MDg1NjUgMHg0N2JiNzA0MyAweDNiOGNhZTJmIDB4NzhiMDczNGUgMHhiMTNlNjRkOCAweGQ2Nzc4OWViIDB4OTRlNWQzZjQgMHhhODZkMTZiMSAweDU0ZGI2MmRlIDB4ZWYxNTY4MzAgMHg3OWRmNTdmYyAweGY3NjEyNWI5IDB4MjFhY2E2ZmYgMHgwNGVmNDk3MSAweDIzZWNiMzJjIDB4ZWNkMWQxZjkgMHg3ZmEyZDFjMCAweDhlZTJjMzY0IDB4OTgwMjA4OGMgMHgzNmY4NmM4ZSAvLyBtZXRob2QgImdldF9ib3goKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2l0ZW1fYm94X21hcCh1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJnZXRfYm94X21hcCgpc3RyaW5nIiwgbWV0aG9kICJnZXRfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAibWF5YmVfYm94KCkodWludDY0LGJvb2wpIiwgbWV0aG9kICJtYXliZV9ib3hfbWFwKCkoc3RyaW5nLGJvb2wpIiwgbWV0aG9kICJtYXliZV9ib3hfcmVmKCkoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJnZXRfYm94X2V4YW1wbGUoKSh1aW50NjQsYnl0ZVtdLHN0cmluZykiLCBtZXRob2QgImdldF9ib3hfbWFwX2V4YW1wbGUoKWJvb2wiLCBtZXRob2QgIm1heWJlX2JveF9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJtYXliZV9ib3hfbWFwX2V4YW1wbGUoKXZvaWQiLCBtZXRob2QgImdldF9ib3hfbWFwX3N0cnVjdCh1aW50NjQpKHN0cmluZyx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAic2V0X2JveCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0X2JveF9tYXAodWludDY0LHN0cmluZyl2b2lkIiwgbWV0aG9kICJzZXRfYm94X21hcF9zdHJ1Y3QodWludDY0LChzdHJpbmcsdWludDY0LHVpbnQ2NCkpYm9vbCIsIG1ldGhvZCAic2V0X2JveF9leGFtcGxlKHVpbnQ2NCxieXRlW10sc3RyaW5nKXZvaWQiLCBtZXRob2QgImRlbGV0ZV9ib3goKXZvaWQiLCBtZXRob2QgImRlbGV0ZV9ib3hfbWFwKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZWxldGVfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAiYm94X21hcF9sZW5ndGgoKXVpbnQ2NCIsIG1ldGhvZCAibGVuZ3RoX2JveF9yZWYoKXVpbnQ2NCIsIG1ldGhvZCAiYm94X21hcF9zdHJ1Y3RfbGVuZ3RoKClib29sIiwgbWV0aG9kICJib3hfbWFwX2xlbmd0aF9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJsZW5ndGhfYm94X3JlZl9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJleHRyYWN0X2JveF9yZWYoKXZvaWQiLCBtZXRob2QgIm1hbmlwdWxhdGVfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAidmFsdWVfYm94KCl2b2lkIiwgbWV0aG9kICJleGlzdF9ib3goKWJvb2wiLCBtZXRob2QgImV4aXN0X2JveF9leGFtcGxlKCkoYm9vbCxib29sLGJvb2wpIiwgbWV0aG9kICJzbGljZV9ib3goKXZvaWQiLCBtZXRob2QgImFyYzRfYm94KCl2b2lkIiwgbWV0aG9kICJrZXlfYm94KClieXRlW10iLCBtZXRob2QgImtleV9ib3hfZXhhbXBsZSgpdm9pZCIsIG1ldGhvZCAiYm94X21hcF9leGlzdHModWludDY0KWJvb2wiLCBtZXRob2QgImJveF9tYXBfc3RydWN0X2V4aXN0cyh1aW50NjQpYm9vbCIsIG1ldGhvZCAia2V5X3ByZWZpeF9ib3hfbWFwKClieXRlW10iCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldF9ib3hfcm91dGVANSBtYWluX2dldF9pdGVtX2JveF9tYXBfcm91dGVANiBtYWluX2dldF9ib3hfbWFwX3JvdXRlQDcgbWFpbl9nZXRfYm94X3JlZl9yb3V0ZUA4IG1haW5fbWF5YmVfYm94X3JvdXRlQDkgbWFpbl9tYXliZV9ib3hfbWFwX3JvdXRlQDEwIG1haW5fbWF5YmVfYm94X3JlZl9yb3V0ZUAxMSBtYWluX2dldF9ib3hfZXhhbXBsZV9yb3V0ZUAxMiBtYWluX2dldF9ib3hfbWFwX2V4YW1wbGVfcm91dGVAMTMgbWFpbl9tYXliZV9ib3hfZXhhbXBsZV9yb3V0ZUAxNCBtYWluX21heWJlX2JveF9tYXBfZXhhbXBsZV9yb3V0ZUAxNSBtYWluX2dldF9ib3hfbWFwX3N0cnVjdF9yb3V0ZUAxNiBtYWluX3NldF9ib3hfcm91dGVAMTcgbWFpbl9zZXRfYm94X21hcF9yb3V0ZUAxOCBtYWluX3NldF9ib3hfbWFwX3N0cnVjdF9yb3V0ZUAxOSBtYWluX3NldF9ib3hfZXhhbXBsZV9yb3V0ZUAyMCBtYWluX2RlbGV0ZV9ib3hfcm91dGVAMjEgbWFpbl9kZWxldGVfYm94X21hcF9yb3V0ZUAyMiBtYWluX2RlbGV0ZV9ib3hfcmVmX3JvdXRlQDIzIG1haW5fYm94X21hcF9sZW5ndGhfcm91dGVAMjQgbWFpbl9sZW5ndGhfYm94X3JlZl9yb3V0ZUAyNSBtYWluX2JveF9tYXBfc3RydWN0X2xlbmd0aF9yb3V0ZUAyNiBtYWluX2JveF9tYXBfbGVuZ3RoX2V4YW1wbGVfcm91dGVAMjcgbWFpbl9sZW5ndGhfYm94X3JlZl9leGFtcGxlX3JvdXRlQDI4IG1haW5fZXh0cmFjdF9ib3hfcmVmX3JvdXRlQDI5IG1haW5fbWFuaXB1bGF0ZV9ib3hfcmVmX3JvdXRlQDMwIG1haW5fdmFsdWVfYm94X3JvdXRlQDMxIG1haW5fZXhpc3RfYm94X3JvdXRlQDMyIG1haW5fZXhpc3RfYm94X2V4YW1wbGVfcm91dGVAMzMgbWFpbl9zbGljZV9ib3hfcm91dGVAMzQgbWFpbl9hcmM0X2JveF9yb3V0ZUAzNSBtYWluX2tleV9ib3hfcm91dGVAMzYgbWFpbl9rZXlfYm94X2V4YW1wbGVfcm91dGVAMzcgbWFpbl9ib3hfbWFwX2V4aXN0c19yb3V0ZUAzOCBtYWluX2JveF9tYXBfc3RydWN0X2V4aXN0c19yb3V0ZUAzOSBtYWluX2tleV9wcmVmaXhfYm94X21hcF9yb3V0ZUA0MAoKbWFpbl9hZnRlcl9pZl9lbHNlQDQzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX2tleV9wcmVmaXhfYm94X21hcF9yb3V0ZUA0MDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozNDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3N0cnVjdF9leGlzdHNfcm91dGVAMzk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgYm94X21hcF9zdHJ1Y3RfZXhpc3RzCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX2V4aXN0c19yb3V0ZUAzODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzktMzQwCiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfTUFQCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzM5LTM0MAogICAgLy8gIyBleGFtcGxlOiBPVEhFUl9PUFNfQk9YX01BUAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGJveF9tYXBfZXhpc3RzCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9rZXlfYm94X2V4YW1wbGVfcm91dGVAMzc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBrZXlfYm94X2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fa2V5X2JveF9yb3V0ZUAzNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDc2MjZmNzg1ZjY5NmU3NAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzRfYm94X3JvdXRlQDM1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjNF9ib3gKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2xpY2VfYm94X3JvdXRlQDM0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc2xpY2VfYm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4aXN0X2JveF9leGFtcGxlX3JvdXRlQDMzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZXhpc3RfYm94X2V4YW1wbGUKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIHN3YXAKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBwdXNoaW50IDIgLy8gMgogICAgc3dhcAogICAgc2V0Yml0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4aXN0X2JveF9yb3V0ZUAzMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGV4aXN0X2JveAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmFsdWVfYm94X3JvdXRlQDMxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI5My0yOTQKICAgIC8vICMgZXhhbXBsZTogT1RIRVJfT1BTX0JPWAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdmFsdWVfYm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21hbmlwdWxhdGVfYm94X3JlZl9yb3V0ZUAzMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjctMjY4CiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYW5pcHVsYXRlX2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZXh0cmFjdF9ib3hfcmVmX3JvdXRlQDI5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MC0yNTEKICAgIC8vICMgZXhhbXBsZTogRVhUUkFDVF9CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBleHRyYWN0X2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbGVuZ3RoX2JveF9yZWZfZXhhbXBsZV9yb3V0ZUAyODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGxlbmd0aF9ib3hfcmVmX2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF9sZW5ndGhfZXhhbXBsZV9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjEtMjIyCiAgICAvLyAjIGV4YW1wbGU6IExFTkdUSF9CT1hfU1RPUkFHRV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYm94X21hcF9sZW5ndGhfZXhhbXBsZQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3N0cnVjdF9sZW5ndGhfcm91dGVAMjY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBib3hfbWFwX3N0cnVjdF9sZW5ndGgKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2xlbmd0aF9ib3hfcmVmX3JvdXRlQDI1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbGVuZ3RoX2JveF9yZWYKICAgIGl0b2IKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF9sZW5ndGhfcm91dGVAMjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk1LTE5NgogICAgLy8gIyBleGFtcGxlOiBMRU5HVEhfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGJveF9tYXBfbGVuZ3RoCiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZV9ib3hfcmVmX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlX2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsZXRlX2JveF9tYXBfcm91dGVAMjI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZGVsZXRlX2JveF9tYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsZXRlX2JveF9yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNjUtMTY2CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlX2JveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfYm94X2V4YW1wbGVfcm91dGVAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTQzLTE0NAogICAgLy8gIyBleGFtcGxlOiBTRVRfQk9YX1NUT1JBR0VfRVhBTVBMRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0My0xNDQKICAgIC8vICMgZXhhbXBsZTogU0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBzZXRfYm94X2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2JveF9tYXBfc3RydWN0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2JveF9tYXBfcm91dGVAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3hfbWFwCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9ib3hfcm91dGVAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTI2LTEyNwogICAgLy8gIyBleGFtcGxlOiBTRVRfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMjYtMTI3CiAgICAvLyAjIGV4YW1wbGU6IFNFVF9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3gKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9tYXBfc3RydWN0X3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGdldF9ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZV9ib3hfbWFwX2V4YW1wbGVfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfbWFwX2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfYm94X2V4YW1wbGVfcm91dGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfZXhhbXBsZQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYm94X21hcF9leGFtcGxlX3JvdXRlQDEzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfYm94X21hcF9leGFtcGxlCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYm94X2V4YW1wbGVfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogR0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9ib3hfZXhhbXBsZQogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBkaWcgMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIHB1c2hieXRlcyAweDAwMGMKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgcHVzaGludCAxMiAvLyAxMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfYm94X3JlZl9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWF5YmVfYm94X3JlZgogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgMTUgLy8gMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZV9ib3hfbWFwX3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfbWFwCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBieXRlYyAxNSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2JveF9yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3gKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9yZWZfcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9tYXBfcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveF9tYXAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pdGVtX2JveF9tYXBfcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2l0ZW1fYm94X21hcAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQwLTQxCiAgICAvLyAjIGV4YW1wbGU6IEdFVF9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveAogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VANDMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2JveCgpIC0+IHVpbnQ2NDoKZ2V0X2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MwogICAgLy8gcmV0dXJuIHNlbGYuYm94X2ludC52YWx1ZQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5nZXRfaXRlbV9ib3hfbWFwKGtleTogdWludDY0KSAtPiBieXRlczoKZ2V0X2l0ZW1fYm94X21hcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0NS00NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZ2V0X2l0ZW1fYm94X21hcChzZWxmLCBrZXk6IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDcKICAgIC8vIHJldHVybiBzZWxmLmJveF9tYXBba2V5XQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwIGVudHJ5IGV4aXN0cwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2JveF9tYXAoKSAtPiBieXRlczoKZ2V0X2JveF9tYXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTEKICAgIC8vIGtleV8xID0gVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjUyCiAgICAvLyByZXR1cm4gc2VsZi5ib3hfbWFwLmdldChrZXlfMSwgZGVmYXVsdD1TdHJpbmcoImRlZmF1bHQiKSkKICAgIGl0b2IKICAgIGJveF9nZXQKICAgIGJ5dGVjIDEwIC8vICJkZWZhdWx0IgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5nZXRfYm94X3JlZigpIC0+IHZvaWQ6CmdldF9ib3hfcmVmOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU2CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTcKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1OAogICAgLy8gc2VuZGVyX2J5dGVzID0gVHhuLnNlbmRlci5ieXRlcwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU2CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjAKICAgIC8vIGFzc2VydCBib3hfcmVmLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1NgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjYyCiAgICAvLyBhc3NlcnQgYm94X3JlZi5nZXQoZGVmYXVsdD1zZW5kZXJfYnl0ZXMpID09IHNlbmRlcl9ieXRlcwogICAgYm94X2dldAogICAgZGlnIDIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UubWF5YmVfYm94KCkgLT4gdWludDY0LCB1aW50NjQ6Cm1heWJlX2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo2NgogICAgLy8gYm94X2ludF92YWx1ZSwgYm94X2ludF9leGlzdHMgPSBzZWxmLmJveF9pbnQubWF5YmUoKQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo2NwogICAgLy8gcmV0dXJuIGJveF9pbnRfdmFsdWUsIGJveF9pbnRfZXhpc3RzCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5tYXliZV9ib3hfbWFwKCkgLT4gYnl0ZXMsIHVpbnQ2NDoKbWF5YmVfYm94X21hcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo2OS03MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgbWF5YmVfYm94X21hcChzZWxmKSAtPiB0dXBsZVtTdHJpbmcsIGJvb2xdOgogICAgcHJvdG8gMCAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzEKICAgIC8vIGtleV8xID0gVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjcyCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gc2VsZi5ib3hfbWFwLm1heWJlKGtleV8xKQogICAgaXRvYgogICAgYm94X2dldAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3MwogICAgLy8gaWYgbm90IGV4aXN0czoKICAgIGJueiBtYXliZV9ib3hfbWFwX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyB2YWx1ZSA9IFN0cmluZygiIikKICAgIHB1c2hieXRlcyAiIgogICAgZnJhbWVfYnVyeSAxCgptYXliZV9ib3hfbWFwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3NQogICAgLy8gcmV0dXJuIHZhbHVlLCBleGlzdHMKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLm1heWJlX2JveF9yZWYoKSAtPiBieXRlcywgdWludDY0OgptYXliZV9ib3hfcmVmOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc3LTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYXliZV9ib3hfcmVmKHNlbGYpIC0+IHR1cGxlW0J5dGVzLCBib29sXToKICAgIHByb3RvIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc5CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODAKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3OQogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgyCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gYm94X3JlZi5tYXliZSgpCiAgICBib3hfZ2V0CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBpZiBub3QgZXhpc3RzOgogICAgYm56IG1heWJlX2JveF9yZWZfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODQKICAgIC8vIHZhbHVlID0gQnl0ZXMoYiIiKQogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDEKCm1heWJlX2JveF9yZWZfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg1CiAgICAvLyByZXR1cm4gdmFsdWUsIGV4aXN0cwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2JveF9leGFtcGxlKCkgLT4gdWludDY0LCBieXRlcywgYnl0ZXM6CmdldF9ib3hfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo5MwogICAgLy8gc2VsZi5ib3hfaW50LnZhbHVlLAogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTQKICAgIC8vIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubmF0aXZlLAogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9keW5hbWljX2J5dGVzIGV4aXN0cwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo5NQogICAgLy8gc2VsZi5ib3hfc3RyaW5nLnZhbHVlLAogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9zdHJpbmcgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTItOTYKICAgIC8vIHJldHVybiAoCiAgICAvLyAgICAgc2VsZi5ib3hfaW50LnZhbHVlLAogICAgLy8gICAgIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubmF0aXZlLAogICAgLy8gICAgIHNlbGYuYm94X3N0cmluZy52YWx1ZSwKICAgIC8vICkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfbWFwX2V4YW1wbGUoKSAtPiB1aW50NjQ6CmdldF9ib3hfbWFwX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTAwCiAgICAvLyBrZXlfMSA9IFVJbnQ2NCgxKQogICAgaW50Y18wIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDEKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXAuZ2V0KGtleV8xLCBkZWZhdWx0PVN0cmluZygiZGVmYXVsdCIpKSA9PSBTdHJpbmcoImRlZmF1bHQiKQogICAgaXRvYgogICAgYm94X2dldAogICAgYnl0ZWMgMTAgLy8gImRlZmF1bHQiCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIGJ5dGVjIDEwIC8vICJkZWZhdWx0IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5tYXliZV9ib3hfZXhhbXBsZSgpIC0+IHZvaWQ6Cm1heWJlX2JveF9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwNgogICAgLy8gZGVsIHNlbGYuYm94X2ludC52YWx1ZQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwNwogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2ludC5nZXQoZGVmYXVsdD1VSW50NjQoNDIpKSA9PSA0MgogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHB1c2hpbnQgNDIgLy8gNDIKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBwdXNoaW50IDQyIC8vIDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA4CiAgICAvLyBib3hfaW50X3ZhbHVlLCBib3hfaW50X2V4aXN0cyA9IHNlbGYuYm94X2ludC5tYXliZSgpCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwOQogICAgLy8gYXNzZXJ0IG5vdCBib3hfaW50X2V4aXN0cwogICAgc3dhcAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTEwCiAgICAvLyBhc3NlcnQgYm94X2ludF92YWx1ZSA9PSAwCiAgICAhCiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLm1heWJlX2JveF9tYXBfZXhhbXBsZSgpIC0+IHZvaWQ6Cm1heWJlX2JveF9tYXBfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTUKICAgIC8vIGtleV8xID0gVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExNgogICAgLy8gdmFsdWUsIGV4aXN0cyA9IHNlbGYuYm94X21hcC5tYXliZShrZXlfMSkKICAgIGl0b2IKICAgIGJveF9nZXQKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExNwogICAgLy8gYXNzZXJ0IG5vdCBleGlzdHMKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExNAogICAgLy8ga2V5XzAgPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTE4CiAgICAvLyBhc3NlcnQga2V5XzAgaW4gc2VsZi5ib3hfbWFwCiAgICBpdG9iCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2JveF9tYXBfc3RydWN0KGtleTogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfYm94X21hcF9zdHJ1Y3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTIwLTEyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZ2V0X2JveF9tYXBfc3RydWN0KHNlbGYsIGtleTogYXJjNC5VSW50NjQpIC0+IFVzZXJTdHJ1Y3Q6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMjIKICAgIC8vIHJldHVybiBzZWxmLmJveF9tYXBfc3RydWN0W2tleV0KICAgIGJ5dGVjIDExIC8vICJ1c2VycyIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwX3N0cnVjdCBlbnRyeSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnNldF9ib3godmFsdWVfaW50OiB1aW50NjQpIC0+IHZvaWQ6CnNldF9ib3g6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTI2LTEyOAogICAgLy8gIyBleGFtcGxlOiBTRVRfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9ib3goc2VsZiwgdmFsdWVfaW50OiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMjkKICAgIC8vIHNlbGYuYm94X2ludC52YWx1ZSA9IHZhbHVlX2ludAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2Uuc2V0X2JveF9tYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2JveF9tYXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTMxLTEzMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgc2V0X2JveF9tYXAoc2VsZiwga2V5OiBVSW50NjQsIHZhbHVlOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMzMKICAgIC8vIHNlbGYuYm94X21hcFtrZXldID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2Uuc2V0X2JveF9tYXBfc3RydWN0KGtleTogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gdWludDY0OgpzZXRfYm94X21hcF9zdHJ1Y3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTM1LTEzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgc2V0X2JveF9tYXBfc3RydWN0KHNlbGYsIGtleTogYXJjNC5VSW50NjQsIHZhbHVlOiBVc2VyU3RydWN0KSAtPiBib29sOgogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTM3CiAgICAvLyBzZWxmLmJveF9tYXBfc3RydWN0W2tleV0gPSB2YWx1ZS5jb3B5KCkKICAgIGJ5dGVjIDExIC8vICJ1c2VycyIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMzgKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXBfc3RydWN0W2tleV0gPT0gdmFsdWUKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9tYXBfc3RydWN0IGVudHJ5IGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTM5CiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnNldF9ib3hfZXhhbXBsZSh2YWx1ZV9pbnQ6IHVpbnQ2NCwgdmFsdWVfZGJ5dGVzOiBieXRlcywgdmFsdWVfc3RyaW5nOiBieXRlcykgLT4gdm9pZDoKc2V0X2JveF9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0My0xNTAKICAgIC8vICMgZXhhbXBsZTogU0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9ib3hfZXhhbXBsZSgKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgIHZhbHVlX2ludDogVUludDY0LAogICAgLy8gICAgIHZhbHVlX2RieXRlczogYXJjNC5EeW5hbWljQnl0ZXMsCiAgICAvLyAgICAgdmFsdWVfc3RyaW5nOiBhcmM0LlN0cmluZywKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDMgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gc2VsZi5ib3hfaW50LnZhbHVlID0gdmFsdWVfaW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTUyCiAgICAvLyBzZWxmLmJveF9keW5hbWljX2J5dGVzLnZhbHVlID0gdmFsdWVfZGJ5dGVzLmNvcHkoKQogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1MwogICAgLy8gc2VsZi5ib3hfc3RyaW5nLnZhbHVlID0gdmFsdWVfc3RyaW5nCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTU0CiAgICAvLyBzZWxmLmJveF9ieXRlcy52YWx1ZSA9IHZhbHVlX2RieXRlcy5uYXRpdmUKICAgIGZyYW1lX2RpZyAtMgogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDEyIC8vICJib3hfYnl0ZXMiCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJ5dGVjIDEyIC8vICJib3hfYnl0ZXMiCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTU2CiAgICAvLyBieXRlX3ZhbHVlID0gc2VsZi5ib3hfZHluYW1pY19ieXRlcy52YWx1ZS5jb3B5KCkKICAgIGJ5dGVjIDUgLy8gImIiCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZHluYW1pY19ieXRlcyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNTgKICAgIC8vIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubGVuZ3RoID09IGJ5dGVfdmFsdWUubGVuZ3RoCiAgICBieXRlYyA1IC8vICJiIgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNTctMTU5CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubGVuZ3RoID09IGJ5dGVfdmFsdWUubGVuZ3RoCiAgICAvLyApLCAiZGlyZWN0IHJlZmVyZW5jZSBzaG91bGQgbWF0Y2ggY29weSIKICAgIGFzc2VydCAvLyBkaXJlY3QgcmVmZXJlbmNlIHNob3VsZCBtYXRjaCBjb3B5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTYxCiAgICAvLyBzZWxmLmJveF9pbnQudmFsdWUgKz0gMwogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICBwdXNoaW50IDMgLy8gMwogICAgKwogICAgaXRvYgogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmRlbGV0ZV9ib3goKSAtPiB2b2lkOgpkZWxldGVfYm94OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gZGVsIHNlbGYuYm94X2ludC52YWx1ZQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gZGVsIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUKICAgIGJ5dGVjIDUgLy8gImIiCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzAKICAgIC8vIGRlbCBzZWxmLmJveF9zdHJpbmcudmFsdWUKICAgIGJ5dGVjIDQgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzIKICAgIC8vIGFzc2VydCBzZWxmLmJveF9pbnQuZ2V0KGRlZmF1bHQ9VUludDY0KDQyKSkgPT0gNDIKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBwdXNoaW50IDQyIC8vIDQyCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgcHVzaGludCA0MiAvLyA0MgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3NAogICAgLy8gc2VsZi5ib3hfZHluYW1pY19ieXRlcy5nZXQoZGVmYXVsdD1hcmM0LkR5bmFtaWNCeXRlcyhiIjQyIikpLm5hdGl2ZSA9PSBiIjQyIgogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9nZXQKICAgIGJ5dGVjIDEzIC8vIDB4MDAwMjM0MzIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgZXh0cmFjdCAyIDAKICAgIHB1c2hieXRlcyAweDM0MzIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTczLTE3NQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmJveF9keW5hbWljX2J5dGVzLmdldChkZWZhdWx0PWFyYzQuRHluYW1pY0J5dGVzKGIiNDIiKSkubmF0aXZlID09IGIiNDIiCiAgICAvLyApCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzYKICAgIC8vIGFzc2VydCBzZWxmLmJveF9zdHJpbmcuZ2V0KGRlZmF1bHQ9YXJjNC5TdHJpbmcoIjQyIikpID09ICI0MiIKICAgIGJ5dGVjIDQgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfZ2V0CiAgICBieXRlYyAxMyAvLyAweDAwMDIzNDMyCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIGJ5dGVjIDEzIC8vIDB4MDAwMjM0MzIKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmRlbGV0ZV9ib3hfbWFwKGtleTogdWludDY0KSAtPiB2b2lkOgpkZWxldGVfYm94X21hcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzgtMTc5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBkZWxldGVfYm94X21hcChzZWxmLCBrZXk6IFVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4MAogICAgLy8gZGVsIHNlbGYuYm94X21hcFtrZXldCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJveF9kZWwKICAgIHBvcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZGVsZXRlX2JveF9yZWYoKSAtPiB2b2lkOgpkZWxldGVfYm94X3JlZjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxODUKICAgIC8vIHNlbGYuYm94X3JlZi5jcmVhdGUoc2l6ZT1VSW50NjQoMzIpKQogICAgYnl0ZWMgMTQgLy8gImJveF9yZWYiCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4NgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X3JlZiwgImhhcyBkYXRhIgogICAgYnl0ZWMgMTQgLy8gImJveF9yZWYiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBoYXMgZGF0YQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4OAogICAgLy8gc2VsZi5ib3hfcmVmLmRlbGV0ZSgpCiAgICBieXRlYyAxNCAvLyAiYm94X3JlZiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4NAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4OQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IGJveF9yZWYubWF5YmUoKQogICAgYm94X2dldAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gYXNzZXJ0IG5vdCBleGlzdHMKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5MQogICAgLy8gYXNzZXJ0IHZhbHVlID09IGIiIgogICAgcHVzaGJ5dGVzIDB4CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX2xlbmd0aCgpIC0+IHVpbnQ2NDoKYm94X21hcF9sZW5ndGg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk1LTE5NwogICAgLy8gIyBleGFtcGxlOiBMRU5HVEhfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfbGVuZ3RoKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5OAogICAgLy8ga2V5XzAgPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk5CiAgICAvLyBpZiBrZXlfMCBub3QgaW4gc2VsZi5ib3hfbWFwOgogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBib3hfbWFwX2xlbmd0aF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDAKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmJveF9tYXBfbGVuZ3RoX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDEKICAgIC8vIHJldHVybiBzZWxmLmJveF9tYXAubGVuZ3RoKGtleV8wKQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9tYXAgZW50cnkgZXhpc3RzCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5sZW5ndGhfYm94X3JlZigpIC0+IHVpbnQ2NDoKbGVuZ3RoX2JveF9yZWY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA1CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA2CiAgICAvLyBhc3NlcnQgYm94X3JlZi5jcmVhdGUoc2l6ZT0zMikKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA1CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA3CiAgICAvLyByZXR1cm4gYm94X3JlZi5sZW5ndGgKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX3N0cnVjdF9sZW5ndGgoKSAtPiB1aW50NjQ6CmJveF9tYXBfc3RydWN0X2xlbmd0aDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMTQKICAgIC8vIHNlbGYuYm94X21hcF9zdHJ1Y3Rba2V5XzBdID0gdmFsdWUuY29weSgpCiAgICBieXRlYyA3IC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgNyAvLyAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjEyCiAgICAvLyB2YWx1ZSA9IFVzZXJTdHJ1Y3QoYXJjNC5TdHJpbmcoInRlc3ROYW1lIiksIGFyYzQuVUludDY0KDcwKSwgYXJjNC5VSW50NjQoMikpCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDA0NjAwMDAwMDAwMDAwMDAwMDIwMDA4NzQ2NTczNzQ0ZTYxNmQ2NQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIxNAogICAgLy8gc2VsZi5ib3hfbWFwX3N0cnVjdFtrZXlfMF0gPSB2YWx1ZS5jb3B5KCkKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMTUKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXBfc3RydWN0W2tleV8wXS5ieXRlcy5sZW5ndGggPT0gdmFsdWUuYnl0ZXMubGVuZ3RoCiAgICBieXRlYyA3IC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9tYXBfc3RydWN0IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCAyOCAvLyAyOAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X21hcF9zdHJ1Y3QubGVuZ3RoKGtleV8wKSA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGJ5dGVjIDcgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcF9zdHJ1Y3QgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjE3CiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmJveF9tYXBfbGVuZ3RoX2V4YW1wbGUoKSAtPiB2b2lkOgpib3hfbWFwX2xlbmd0aF9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyNAogICAgLy8ga2V5XzAgPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI2CiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjUKICAgIC8vIHZhbHVlID0gU3RyaW5nKCJIbW1tbW0iKQogICAgcHVzaGJ5dGVzICJIbW1tbW0iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI2CiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjcKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXBba2V5XzBdLmJ5dGVzLmxlbmd0aCA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGR1cAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcCBlbnRyeSBleGlzdHMKICAgIHB1c2hpbnQgNiAvLyA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI4CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfbWFwLmxlbmd0aChrZXlfMCkgPT0gdmFsdWUuYnl0ZXMubGVuZ3RoCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwIGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmxlbmd0aF9ib3hfcmVmX2V4YW1wbGUoKSAtPiB2b2lkOgpsZW5ndGhfYm94X3JlZl9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIzMgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9ImJsb2IiKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzMKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzIKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PSJibG9iIikKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjM0CiAgICAvLyBhc3NlcnQgYm94X3JlZi5sZW5ndGggPT0gNjQKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICBpbnRjXzMgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzYKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PWIiYmxvYiIpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzcKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzYKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PWIiYmxvYiIpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzgKICAgIC8vIGFzc2VydCBib3hfcmVmLmxlbmd0aCA9PSA2NAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIEJveFJlZiBleGlzdHMKICAgIGludGNfMyAvLyA2NAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9Qnl0ZXMoYiJibG9iIikpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDEKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PUJ5dGVzKGIiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAweDYyNmM2ZjYyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQyCiAgICAvLyBhc3NlcnQgYm94X3JlZi5sZW5ndGggPT0gNjQKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICBpbnRjXzMgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDQKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDUKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDQKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDYKICAgIC8vIGFzc2VydCBib3hfcmVmLmxlbmd0aCA9PSA2NAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIEJveFJlZiBleGlzdHMKICAgIGludGNfMyAvLyA2NAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZXh0cmFjdF9ib3hfcmVmKCkgLT4gdm9pZDoKZXh0cmFjdF9ib3hfcmVmOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NAogICAgLy8gYXNzZXJ0IGJveF9yZWYuY3JlYXRlKHNpemU9MzIpCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gc2VuZGVyX2J5dGVzID0gVHhuLnNlbmRlci5ieXRlcwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NwogICAgLy8gYXBwX2FkZHJlc3MgPSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmJ5dGVzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYm94X3JlZi5yZXBsYWNlKDAsIHNlbmRlcl9ieXRlcykKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMwogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTMKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjAKICAgIC8vIGJveF9yZWYuc3BsaWNlKDAsIDAsIGFwcF9hZGRyZXNzKQogICAgaW50Y18xIC8vIDAKICAgIGR1cAogICAgZGlnIDMKICAgIGJveF9zcGxpY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTMKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjEKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIGludGNfMyAvLyA2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OAogICAgLy8gdmFsdWVfMyA9IEJ5dGVzKGIiaGVsbG8iKQogICAgYnl0ZWMgOCAvLyAweDY4NjU2YzZjNmYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjEKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUzCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjYyCiAgICAvLyBwcmVmaXggPSBib3hfcmVmLmV4dHJhY3QoMCwgMzIgKiAyICsgdmFsdWVfMy5sZW5ndGgpCiAgICBpbnRjXzEgLy8gMAogICAgcHVzaGludCA2OSAvLyA2OQogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjMKICAgIC8vIGFzc2VydCBwcmVmaXggPT0gYXBwX2FkZHJlc3MgKyBzZW5kZXJfYnl0ZXMgKyB2YWx1ZV8zCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OAogICAgLy8gdmFsdWVfMyA9IEJ5dGVzKGIiaGVsbG8iKQogICAgYnl0ZWMgOCAvLyAweDY4NjU2YzZjNmYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjMKICAgIC8vIGFzc2VydCBwcmVmaXggPT0gYXBwX2FkZHJlc3MgKyBzZW5kZXJfYnl0ZXMgKyB2YWx1ZV8zCiAgICBjb25jYXQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLm1hbmlwdWxhdGVfYm94X3JlZigpIC0+IHZvaWQ6Cm1hbmlwdWxhdGVfYm94X3JlZjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzEKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzIKICAgIC8vIGFzc2VydCBib3hfcmVmLCAiaGFzIGRhdGEiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBoYXMgZGF0YQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3NC0yNzUKICAgIC8vICMgbWFuaXB1bGF0ZSBkYXRhCiAgICAvLyBzZW5kZXJfYnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc2CiAgICAvLyBhcHBfYWRkcmVzcyA9IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuYnl0ZXMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc4CiAgICAvLyBib3hfcmVmLnJlcGxhY2UoMCwgc2VuZGVyX2J5dGVzKQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAzCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gYm94X3JlZi5zcGxpY2UoMCwgMCwgYXBwX2FkZHJlc3MpCiAgICBpbnRjXzEgLy8gMAogICAgZHVwCiAgICBkaWcgMwogICAgYm94X3NwbGljZQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MAogICAgLy8gYm94X3JlZi5yZXBsYWNlKDY0LCB2YWx1ZV8zKQogICAgaW50Y18zIC8vIDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc3CiAgICAvLyB2YWx1ZV8zID0gQnl0ZXMoYiJoZWxsbyIpCiAgICBieXRlYyA4IC8vIDB4Njg2NTZjNmM2ZgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MAogICAgLy8gYm94X3JlZi5yZXBsYWNlKDY0LCB2YWx1ZV8zKQogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyODEKICAgIC8vIHByZWZpeCA9IGJveF9yZWYuZXh0cmFjdCgwLCAzMiAqIDIgKyB2YWx1ZV8zLmxlbmd0aCkKICAgIGludGNfMSAvLyAwCiAgICBwdXNoaW50IDY5IC8vIDY5CiAgICBib3hfZXh0cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MgogICAgLy8gYXNzZXJ0IHByZWZpeCA9PSBhcHBfYWRkcmVzcyArIHNlbmRlcl9ieXRlcyArIHZhbHVlXzMKICAgIGRpZyAxCiAgICBkaWcgMwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc3CiAgICAvLyB2YWx1ZV8zID0gQnl0ZXMoYiJoZWxsbyIpCiAgICBieXRlYyA4IC8vIDB4Njg2NTZjNmM2ZgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MgogICAgLy8gYXNzZXJ0IHByZWZpeCA9PSBhcHBfYWRkcmVzcyArIHNlbmRlcl9ieXRlcyArIHZhbHVlXzMKICAgIGNvbmNhdAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4NAogICAgLy8gYXNzZXJ0IGJveF9yZWYuZGVsZXRlKCkKICAgIGJveF9kZWwKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4NwogICAgLy8gYm94X3JlZi5wdXQoc2VuZGVyX2J5dGVzICsgYXBwX2FkZHJlc3MpCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyODcKICAgIC8vIGJveF9yZWYucHV0KHNlbmRlcl9ieXRlcyArIGFwcF9hZGRyZXNzKQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4OAogICAgLy8gYXNzZXJ0IGJveF9yZWYsICJCbG9iIGV4aXN0cyIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJsb2IgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjg5CiAgICAvLyBhc3NlcnQgYm94X3JlZi5sZW5ndGggPT0gNjQKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICBpbnRjXzMgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnZhbHVlX2JveCgpIC0+IHZvaWQ6CnZhbHVlX2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTYKICAgIC8vIGFzc2VydCBzZWxmLmJveF9pbnQudmFsdWUgPT0gVUludDY0KDEwKQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5leGlzdF9ib3goKSAtPiB1aW50NjQ6CmV4aXN0X2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDAKICAgIC8vIHJldHVybiBib29sKHNlbGYuYm94X2ludCkKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmV4aXN0X2JveF9leGFtcGxlKCkgLT4gdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKZXhpc3RfYm94X2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzA0CiAgICAvLyByZXR1cm4gYm9vbChzZWxmLmJveF9keW5hbWljX2J5dGVzKSwgYm9vbChzZWxmLmJveF9zdHJpbmcpLCBib29sKHNlbGYuYm94X2J5dGVzKQogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnl0ZWMgMTIgLy8gImJveF9ieXRlcyIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2Uuc2xpY2VfYm94KCkgLT4gdm9pZDoKc2xpY2VfYm94OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOAogICAgLy8gYm94XzAgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoIjAiKSkKICAgIGJ5dGVjIDkgLy8gIjAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzA5CiAgICAvLyBib3hfMC52YWx1ZSA9IEJ5dGVzKGIiVGVzdGluZyB0ZXN0aW5nIDEyMyIpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDgKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyA5IC8vICIwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOQogICAgLy8gYm94XzAudmFsdWUgPSBCeXRlcyhiIlRlc3RpbmcgdGVzdGluZyAxMjMiKQogICAgcHVzaGJ5dGVzIDB4NTQ2NTczNzQ2OTZlNjcyMDc0NjU3Mzc0Njk2ZTY3MjAzMTMyMzMKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDgKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyA5IC8vICIwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxMAogICAgLy8gYXNzZXJ0IGJveF8wLnZhbHVlWzA6N10gPT0gYiJUZXN0aW5nIgogICAgYm94X2xlbgogICAgcG9wCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMgogICAgc2VsZWN0CiAgICBwdXNoaW50IDcgLy8gNwogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA3IC8vIDcKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOAogICAgLy8gYm94XzAgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoIjAiKSkKICAgIGJ5dGVjIDkgLy8gIjAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzEwCiAgICAvLyBhc3NlcnQgYm94XzAudmFsdWVbMDo3XSA9PSBiIlRlc3RpbmciCiAgICBjb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgcHVzaGJ5dGVzIDB4NTQ2NTczNzQ2OTZlNjcKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTIKICAgIC8vIHNlbGYuYm94X3N0cmluZy52YWx1ZSA9IGFyYzQuU3RyaW5nKCJIZWxsbyIpCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgcHVzaGJ5dGVzIDB4MDAwNTQ4NjU2YzZjNmYKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTMKICAgIC8vIGFzc2VydCBzZWxmLmJveF9zdHJpbmcudmFsdWUuYnl0ZXNbMjoxMF0gPT0gYiJIZWxsbyIKICAgIGJ5dGVjIDQgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfbGVuCiAgICBwb3AKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBkaWcgMQogICAgPAogICAgZGlnIDEKICAgIHB1c2hpbnQgMiAvLyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAxMCAvLyAxMAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAxCiAgICAtCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIHB1c2hieXRlcyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmFyYzRfYm94KCkgLT4gdm9pZDoKYXJjNF9ib3g6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzE3CiAgICAvLyBib3hfYnl0ZXMgPSBCb3goU3RhdGljSW50cywga2V5PUJ5dGVzKGIiZCIpKQogICAgYnl0ZWMgNiAvLyAweDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzE4LTMyMAogICAgLy8gYm94X2J5dGVzLnZhbHVlID0gU3RhdGljSW50cygKICAgIC8vICAgICBhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDEpLCBhcmM0LlVJbnQ4KDIpLCBhcmM0LlVJbnQ4KDMpCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAxMDIwMwogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gYm94X2J5dGVzID0gQm94KFN0YXRpY0ludHMsIGtleT1CeXRlcyhiImQiKSkKICAgIGJ5dGVjIDYgLy8gMHg2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyMgogICAgLy8gYXNzZXJ0IGJveF9ieXRlcy52YWx1ZVswXSA9PSAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94IGV4aXN0cwogICAgZXh0cmFjdCAwIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzE3CiAgICAvLyBib3hfYnl0ZXMgPSBCb3goU3RhdGljSW50cywga2V5PUJ5dGVzKGIiZCIpKQogICAgYnl0ZWMgNiAvLyAweDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzIzCiAgICAvLyBhc3NlcnQgYm94X2J5dGVzLnZhbHVlWzFdID09IDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3ggZXhpc3RzCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweDAxCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gYm94X2J5dGVzID0gQm94KFN0YXRpY0ludHMsIGtleT1CeXRlcyhiImQiKSkKICAgIGJ5dGVjIDYgLy8gMHg2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyNAogICAgLy8gYXNzZXJ0IGJveF9ieXRlcy52YWx1ZVsyXSA9PSAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94IGV4aXN0cwogICAgZXh0cmFjdCAyIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoYnl0ZXMgMHgwMgogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTcKICAgIC8vIGJveF9ieXRlcyA9IEJveChTdGF0aWNJbnRzLCBrZXk9Qnl0ZXMoYiJkIikpCiAgICBieXRlYyA2IC8vIDB4NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMjUKICAgIC8vIGFzc2VydCBib3hfYnl0ZXMudmFsdWVbM10gPT0gMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveCBleGlzdHMKICAgIGV4dHJhY3QgMyAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcHVzaGJ5dGVzIDB4MDMKICAgIGI9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5rZXlfYm94X2V4YW1wbGUoKSAtPiB2b2lkOgprZXlfYm94X2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzM0CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfc3RyaW5nLmtleSA9PSBiIkJPWF9TVFJJTkciLCAiYm94IHN0cmluZyBrZXkgb2siCiAgICBpbnRjXzEgLy8gMAogICAgYXNzZXJ0IC8vIGJveCBzdHJpbmcga2V5IG9rCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX2V4aXN0cyhrZXk6IHVpbnQ2NCkgLT4gdWludDY0Ogpib3hfbWFwX2V4aXN0czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzktMzQxCiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfTUFQCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfbWFwX2V4aXN0cyhzZWxmLCBrZXk6IFVJbnQ2NCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM0MgogICAgLy8gcmV0dXJuIGtleSBpbiBzZWxmLmJveF9tYXAKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX3N0cnVjdF9leGlzdHMoa2V5OiBieXRlcykgLT4gdWludDY0Ogpib3hfbWFwX3N0cnVjdF9leGlzdHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0LTM0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYm94X21hcF9zdHJ1Y3RfZXhpc3RzKHNlbGYsIGtleTogYXJjNC5VSW50NjQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozNDYKICAgIC8vIHJldHVybiBrZXkgaW4gc2VsZi5ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWMgMTEgLy8gInVzZXJzIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { - "approval": "CiAEAQAgQCYQBGJsb2IEFR98dQdib3hfaW50AQAFQk9YX0MBYgFkDXVzZXJzAAAAAAAAAAAFaGVsbG8BMAdkZWZhdWx0BXVzZXJzCWJveF9ieXRlcwQAAjQyB2JveF9yZWYCAAMxG0ED4IIkBFiIuZgEGND74wQ68jcoBMuRGWkET8J54QSe9mlxBOibf28ETm8IngQSgG9rBHXtNIUEWOJ+rwSvkRWQBK6ErE0E7/W2VwQbja3gBGXDBj4EgnCFZQRHu3BDBDuMri8EeLBzTgSxPmTYBNZ3iesElOXT9ASobRaxBFTbYt4E7xVoMAR531f8BPdhJbkEIaym/wQE70lxBCPssywE7NHR+QR/otHABI7iw2QEmAIIjAQ2+GyONhoAjiQCzAKwApgCjAJ0Ak8CKgH4AeMB1wHLAbgBqAGSAXcBYQFVAUUBOQEoARcBAgD2AOoA3gDSAMYAsQCCAHYAagBRAEUALAAUAAIjQzEZFEQxGESABhUffHUAALAiQzEZFEQxGEQ2GgGIBngrI08CVClMULAiQzEZFEQxGEQ2GgEXiAZVKyNPAlQpTFCwIkMxGRREMRhEiAY6IkMxGRREMRhEgA0VH3x1AAdib3hfaW50sCJDMRkURDEYRIgF2iJDMRkURDEYRIgFSSJDMRkURDEYRIgFKisjTwRUKyNPBFQrI08EVEwjU08CIk8CVEwjU4ECTFQpTFCwIkMxGRREMRhEiATzKyNPAlQpTFCwIkMxGRREMRhEiATQIkMxGRREMRhEiASCIkMxGRREMRhEiARMIkMxGRREMRhEiAQUIkMxGRREMRhEiAPoIkMxGRREMRhEiAOiKyNPAlQpTFCwIkMxGRREMRhEiAOCFilMULAiQzEZFEQxGESIA1wWKUxQsCJDMRkURDEYRIgDMCJDMRkURDEYRDYaAReIAxciQzEZFEQxGESIAtEiQzEZFEQxGEQ2GgEXNhoCNhoDiAJ2IkMxGRREMRhENhoBNhoCiAJNKyNPAlQpTFCwIkMxGRREMRhENhoBFzYaAlcCAIgCISJDMRkURDEYRDYaAReIAgciQzEZFEQxGEQ2GgGIAe0pTFCwIkMxGRREMRhEiAHMIkMxGRREMRhEiAGiIkMxGRREMRhEiAGFKyNPAlQpTFCwIkMxGRREMRhEiAFbTwIWSwIVFlcGAk8DUEyAAgAMUEsBFYEMCBZXBgJQTFBMUClMULAiQzEZFEQxGESIAQxLARUWVwYCTwJQKyNPA1QnD0xQTFApTFCwIkMxGRREMRhEiADNSwEVFlcGAk8CUCsjTwNUJw9MUExQKUxQsCJDMRkURDEYRIgAn0wWKyNPA1RQKUxQsCJDMRkURDEYRIgAcSJDMRkURDEYRIgAWUkVFlcGAkxQKUxQsCJDMRkURDEYRDYaAReIADRJFRZXBgJMUClMULAiQzEZFEQxGESIABIWKUxQsCJDMRlA/R4xGBREIkOKAAEqvkwXTESJigEBi/8WvkSJigABIha+JwpOAk2JigAAKCS5RDEAKLxEKL5LAk4CTRJEiYoAAiq+TBdMiYoAAiIWvklPAkxAAASAAIwBiwGLAE8DTwOJigACKCS5RCi+SU8CTEAABIAAjAGLAYsATwNPA4mKAAMqvkwXTEQnBb5EVwIAJwS+RImKAAEiFr4nCk4CTScKEkQiiYoAACq8SCq+TBeBKkxPAk2BKhJEKr5MF0wURBREiYoAACIWvkUBFEQjFr1FAUSJigEBJwuL/1C+RImKAQCL/xYqTL+JigIAi/4WSbxIi/+/iYoCAScLi/5QSbxISYv/v75Ei/8SRCKJigMAi/0WKky/JwW8SCcFi/6/JwS8SCcEi/+/i/5XAgAnDLxIJwxMvycFvkQnBb5EI1lMI1kSRCq+TBdMRIEDCBYqTL+JigAAKrxIJwW8SCcEvEgqvkwXgSpMTwJNgSoSRCcFvicNTgJNVwIAgAI0MhJEJwS+Jw1OAk0nDRJEiYoBAIv/FrxIiYoAACcOJLlIJw69RQFEJw68SCi+FESAABJEiYoAASMWSb1FAUAAAyNMiYsAvURMiYoAASgkuUQovUSJigABJwe8SCcHgBwAEgAAAAAAAABGAAAAAAAAAAIACHRlc3ROYW1lvycHvUSBHBJEJwe9RIEcEkQiiYoAACMWSbxISYAGSG1tbW1tv0m9RIEGEkS9RIEGEkSJigAAKCS5RCi9RCUSRCgkuUQovUQlEkQoJLlEKL1EJRJEKCS5RCi9RCUSRImKAAAoJLlEMQAyCigjSwO7KCNJSwPSKCUnCLsoI4FFukxPAlAnCFASRImKAAAoJLlEKL1FAUQxADIKKCNLA7soI0lLA9IoJScIuygjgUW6SwFLA1AnCFASRCi8RFAoTL8ovUUBRCi9RCUSRImKAAAqvkwXTESBChJEiYoAASq9RQGJigADJwW9RQEnBL1FAScMvUUBiYoAACcJvEgnCYATVGVzdGluZyB0ZXN0aW5nIDEyM78nCb1ISSNLAk2BB0sCDE8CgQdPAk1LAQknCU4CuoAHVGVzdGluZxJEJwS8SCcEgAcABUhlbGxvvycEvUiBAksBDEsBgQJPAk2BCksCDE8CgQpPAk1LAQknBE4CuoAFSGVsbG8SRImKAAAnBoAEAAECA78nBr5EVwABK6hEJwa+RFcBAYABAahEJwa+RFcCAYABAqhEJwa+RFcDAYABA6hEiYoAACNEiYoBAYv/Fr1FAYmKAQEnC4v/UL1FAYk=", + "approval": "CiAEAQAgQCYQBGJsb2IEFR98dQdib3hfaW50AQAFQk9YX0MBYgFkDXVzZXJzAAAAAAAAAAAFaGVsbG8BMAdkZWZhdWx0BXVzZXJzCWJveF9ieXRlcwQAAjQyB2JveF9yZWYCAAMxG0ED4IIkBFiIuZgEGND74wQ68jcoBMuRGWkET8J54QSe9mlxBOibf28ETm8IngQSgG9rBHXtNIUEWOJ+rwSvkRWQBK6ErE0E7/W2VwQbja3gBGXDBj4EgnCFZQRHu3BDBDuMri8EeLBzTgSxPmTYBNZ3iesElOXT9ASobRaxBFTbYt4E7xVoMAR531f8BPdhJbkEIaym/wQE70lxBCPssywE7NHR+QR/otHABI7iw2QEmAIIjAQ2+GyONhoAjiQCzAKwApgCjAJ0Ak8CKgH4AeMB1wHLAbgBqAGSAXcBYQFVAUUBOQEoARcBAgD2AOoA3gDSAMYAsQCCAHYAagBRAEUALAAUAAIjQzEZFEQxGESABhUffHUAALAiQzEZFEQxGEQ2GgGIBjYrI08CVClMULAiQzEZFEQxGEQ2GgEXiAYTKyNPAlQpTFCwIkMxGRREMRhEiAX7IkMxGRREMRhEgA0VH3x1AAdib3hfaW50sCJDMRkURDEYRIgFniJDMRkURDEYRIgFECJDMRkURDEYRIgE9CsjTwRUKyNPBFQrI08EVEwjU08CIk8CVEwjU4ECTFQpTFCwIkMxGRREMRhEiATAKyNPAlQpTFCwIkMxGRREMRhEiASgIkMxGRREMRhEiARVIkMxGRREMRhEiAQiIkMxGRREMRhEiAPtIkMxGRREMRhEiAPEIkMxGRREMRhEiAOBKyNPAlQpTFCwIkMxGRREMRhEiANkFilMULAiQzEZFEQxGESIAz4WKUxQsCJDMRkURDEYRIgDFSJDMRkURDEYRDYaAReIAvwiQzEZFEQxGESIArkiQzEZFEQxGEQ2GgEXNhoCNhoDiAJeIkMxGRREMRhENhoBNhoCiAI1KyNPAlQpTFCwIkMxGRREMRhENhoBFzYaAlcCAIgCCSJDMRkURDEYRDYaAReIAe8iQzEZFEQxGEQ2GgGIAdUpTFCwIkMxGRREMRhEiAG3IkMxGRREMRhEiAGQIkMxGRREMRhEiAF2KyNPAlQpTFCwIkMxGRREMRhEiAFPTwIWSwIVFlcGAk8DUEyAAgAMUEsBFYEMCBZXBgJQTFBMUClMULAiQzEZFEQxGESIAQBLARUWVwYCTwJQKyNPA1QnD0xQTFApTFCwIkMxGRREMRhEiADBSwEVFlcGAk8CUCsjTwNUJw9MUExQKUxQsCJDMRkURDEYRIgAlkwWKyNPA1RQKUxQsCJDMRkURDEYRIgAayJDMRkURDEYRIgAVkkVFlcGAkxQKUxQsCJDMRkURDEYRDYaAReIADFJFRZXBgJMUClMULAiQzEZFEQxGESIABIWKUxQsCJDMRlA/R4xGBREIkMqvkwXTESJigEBi/8WvkSJIha+JwpOAk2JKCS5RDEAKLxEKL5LAk4CTRJEiSq+TBdMiYoAAiIWvklPAkxAAASAAIwBiwGLAE8DTwOJigACKCS5RCi+SU8CTEAABIAAjAGLAYsATwNPA4kqvkwXTEQnBb5EVwIAJwS+RIkiFr4nCk4CTScKEkQiiSq8SCq+TBeBKkxPAk2BKhJEKr5MF0wURBREiSIWvkUBFEQjFr1FAUSJigEBJwuL/1C+RImKAQCL/xYqTL+JigIAi/4WSbxIi/+/iYoCAScLi/5QSbxISYv/v75Ei/8SRCKJigMAi/0WKky/JwW8SCcFi/6/JwS8SCcEi/+/i/5XAgAnDLxIJwxMvycFvkQnBb5EI1lMI1kSRCq+TBdMRIEDCBYqTL+JKrxIJwW8SCcEvEgqvkwXgSpMTwJNgSoSRCcFvicNTgJNVwIAgAI0MhJEJwS+Jw1OAk0nDRJEiYoBAIv/FrxIiScOJLlIJw69RQFEJw68SCi+FESAABJEiYoAASMWSb1FAUAAAyNMiYsAvURMiSgkuUQovUSJJwe8SCcHgBwAEgAAAAAAAABGAAAAAAAAAAIACHRlc3ROYW1lvycHvUSBHBJEJwe9RIEcEkQiiSMWSbxISYAGSG1tbW1tv0m9RIEGEkS9RIEGEkSJKCS5RCi9RCUSRCgkuUQovUQlEkQoJLlEKL1EJRJEKCS5RCi9RCUSRIkoJLlEMQAyCigjSwO7KCNJSwPSKCUnCLsoI4FFukxPAlAnCFASRIkoJLlEKL1FAUQxADIKKCNLA7soI0lLA9IoJScIuygjgUW6SwFLA1AnCFASRCi8RFAoTL8ovUUBRCi9RCUSRIkqvkwXTESBChJEiSq9RQGJJwW9RQEnBL1FAScMvUUBiScJvEgnCYATVGVzdGluZyB0ZXN0aW5nIDEyM78nCb1ISSNLAk2BB0sCDE8CgQdPAk1LAQknCU4CuoAHVGVzdGluZxJEJwS8SCcEgAcABUhlbGxvvycEvUiBAksBDEsBgQJPAk2BCksCDE8CgQpPAk1LAQknBE4CuoAFSGVsbG8SRIknBoAEAAECA78nBr5EVwABK6hEJwa+RFcBAYABAahEJwa+RFcCAYABAqhEJwa+RFcDAYABA6hEiSNEiYoBAYv/Fr1FAYmKAQEnC4v/UL1FAYk=", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/box_storage/box_storage_client.py b/projects/python-examples/smart_contracts/artifacts/box_storage/box_storage_client.py index fb7ead2..1c7b75a 100644 --- a/projects/python-examples/smart_contracts/artifacts/box_storage/box_storage_client.py +++ b/projects/python-examples/smart_contracts/artifacts/box_storage/box_storage_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_box", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "get_item_box_map", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_box_map", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_box_ref", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_box", "returns": {"type": "(uint64,bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_box_map", "returns": {"type": "(string,bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_box_ref", "returns": {"type": "(byte[],bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_box_example", "returns": {"type": "(uint64,byte[],string)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_box_map_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_box_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_box_map_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "get_box_map_struct", "returns": {"type": "(string,uint64,uint64)", "struct": "UserStruct"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "value_int"}], "name": "set_box", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}, {"type": "string", "name": "value"}], "name": "set_box_map", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}, {"type": "(string,uint64,uint64)", "name": "value", "struct": "UserStruct"}], "name": "set_box_map_struct", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "value_int"}, {"type": "byte[]", "name": "value_dbytes"}, {"type": "string", "name": "value_string"}], "name": "set_box_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "delete_box", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "delete_box_map", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "delete_box_ref", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "box_map_length", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "length_box_ref", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "box_map_struct_length", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "box_map_length_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "length_box_ref_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "extract_box_ref", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "manipulate_box_ref", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "value_box", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "exist_box", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "exist_box_example", "returns": {"type": "(bool,bool,bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "slice_box", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "arc4_box", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "key_box", "returns": {"type": "byte[]"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "key_box_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "box_map_exists", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "box_map_struct_exists", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "key_prefix_box_map", "returns": {"type": "byte[]"}, "events": [], "readonly": false, "recommendations": {}}], "name": "BoxStorage", "state": {"keys": {"box": {"box_int": {"key": "Ym94X2ludA==", "keyType": "AVMString", "valueType": "AVMUint64"}, "box_dynamic_bytes": {"key": "Yg==", "keyType": "AVMString", "valueType": "byte[]"}, "box_string": {"key": "Qk9YX0M=", "keyType": "AVMBytes", "valueType": "string"}, "box_bytes": {"key": "Ym94X2J5dGVz", "keyType": "AVMString", "valueType": "AVMBytes"}, "box_ref": {"key": "Ym94X3JlZg==", "keyType": "AVMString", "valueType": "AVMBytes"}}, "global": {}, "local": {}}, "maps": {"box": {"box_map": {"keyType": "AVMUint64", "valueType": "AVMString", "prefix": ""}, "box_map_struct": {"keyType": "uint64", "valueType": "UserStruct", "prefix": "dXNlcnM="}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {"UserStruct": [{"name": "name", "type": "string"}, {"name": "id", "type": "uint64"}, {"name": "asset", "type": "uint64"}]}, "byteCode": {"approval": "CiAEAQAgQCYQBGJsb2IEFR98dQdib3hfaW50AQAFQk9YX0MBYgFkDXVzZXJzAAAAAAAAAAAFaGVsbG8BMAdkZWZhdWx0BXVzZXJzCWJveF9ieXRlcwQAAjQyB2JveF9yZWYCAAMxG0ED4IIkBFiIuZgEGND74wQ68jcoBMuRGWkET8J54QSe9mlxBOibf28ETm8IngQSgG9rBHXtNIUEWOJ+rwSvkRWQBK6ErE0E7/W2VwQbja3gBGXDBj4EgnCFZQRHu3BDBDuMri8EeLBzTgSxPmTYBNZ3iesElOXT9ASobRaxBFTbYt4E7xVoMAR531f8BPdhJbkEIaym/wQE70lxBCPssywE7NHR+QR/otHABI7iw2QEmAIIjAQ2+GyONhoAjiQCzAKwApgCjAJ0Ak8CKgH4AeMB1wHLAbgBqAGSAXcBYQFVAUUBOQEoARcBAgD2AOoA3gDSAMYAsQCCAHYAagBRAEUALAAUAAIjQzEZFEQxGESABhUffHUAALAiQzEZFEQxGEQ2GgGIBngrI08CVClMULAiQzEZFEQxGEQ2GgEXiAZVKyNPAlQpTFCwIkMxGRREMRhEiAY6IkMxGRREMRhEgA0VH3x1AAdib3hfaW50sCJDMRkURDEYRIgF2iJDMRkURDEYRIgFSSJDMRkURDEYRIgFKisjTwRUKyNPBFQrI08EVEwjU08CIk8CVEwjU4ECTFQpTFCwIkMxGRREMRhEiATzKyNPAlQpTFCwIkMxGRREMRhEiATQIkMxGRREMRhEiASCIkMxGRREMRhEiARMIkMxGRREMRhEiAQUIkMxGRREMRhEiAPoIkMxGRREMRhEiAOiKyNPAlQpTFCwIkMxGRREMRhEiAOCFilMULAiQzEZFEQxGESIA1wWKUxQsCJDMRkURDEYRIgDMCJDMRkURDEYRDYaAReIAxciQzEZFEQxGESIAtEiQzEZFEQxGEQ2GgEXNhoCNhoDiAJ2IkMxGRREMRhENhoBNhoCiAJNKyNPAlQpTFCwIkMxGRREMRhENhoBFzYaAlcCAIgCISJDMRkURDEYRDYaAReIAgciQzEZFEQxGEQ2GgGIAe0pTFCwIkMxGRREMRhEiAHMIkMxGRREMRhEiAGiIkMxGRREMRhEiAGFKyNPAlQpTFCwIkMxGRREMRhEiAFbTwIWSwIVFlcGAk8DUEyAAgAMUEsBFYEMCBZXBgJQTFBMUClMULAiQzEZFEQxGESIAQxLARUWVwYCTwJQKyNPA1QnD0xQTFApTFCwIkMxGRREMRhEiADNSwEVFlcGAk8CUCsjTwNUJw9MUExQKUxQsCJDMRkURDEYRIgAn0wWKyNPA1RQKUxQsCJDMRkURDEYRIgAcSJDMRkURDEYRIgAWUkVFlcGAkxQKUxQsCJDMRkURDEYRDYaAReIADRJFRZXBgJMUClMULAiQzEZFEQxGESIABIWKUxQsCJDMRlA/R4xGBREIkOKAAEqvkwXTESJigEBi/8WvkSJigABIha+JwpOAk2JigAAKCS5RDEAKLxEKL5LAk4CTRJEiYoAAiq+TBdMiYoAAiIWvklPAkxAAASAAIwBiwGLAE8DTwOJigACKCS5RCi+SU8CTEAABIAAjAGLAYsATwNPA4mKAAMqvkwXTEQnBb5EVwIAJwS+RImKAAEiFr4nCk4CTScKEkQiiYoAACq8SCq+TBeBKkxPAk2BKhJEKr5MF0wURBREiYoAACIWvkUBFEQjFr1FAUSJigEBJwuL/1C+RImKAQCL/xYqTL+JigIAi/4WSbxIi/+/iYoCAScLi/5QSbxISYv/v75Ei/8SRCKJigMAi/0WKky/JwW8SCcFi/6/JwS8SCcEi/+/i/5XAgAnDLxIJwxMvycFvkQnBb5EI1lMI1kSRCq+TBdMRIEDCBYqTL+JigAAKrxIJwW8SCcEvEgqvkwXgSpMTwJNgSoSRCcFvicNTgJNVwIAgAI0MhJEJwS+Jw1OAk0nDRJEiYoBAIv/FrxIiYoAACcOJLlIJw69RQFEJw68SCi+FESAABJEiYoAASMWSb1FAUAAAyNMiYsAvURMiYoAASgkuUQovUSJigABJwe8SCcHgBwAEgAAAAAAAABGAAAAAAAAAAIACHRlc3ROYW1lvycHvUSBHBJEJwe9RIEcEkQiiYoAACMWSbxISYAGSG1tbW1tv0m9RIEGEkS9RIEGEkSJigAAKCS5RCi9RCUSRCgkuUQovUQlEkQoJLlEKL1EJRJEKCS5RCi9RCUSRImKAAAoJLlEMQAyCigjSwO7KCNJSwPSKCUnCLsoI4FFukxPAlAnCFASRImKAAAoJLlEKL1FAUQxADIKKCNLA7soI0lLA9IoJScIuygjgUW6SwFLA1AnCFASRCi8RFAoTL8ovUUBRCi9RCUSRImKAAAqvkwXTESBChJEiYoAASq9RQGJigADJwW9RQEnBL1FAScMvUUBiYoAACcJvEgnCYATVGVzdGluZyB0ZXN0aW5nIDEyM78nCb1ISSNLAk2BB0sCDE8CgQdPAk1LAQknCU4CuoAHVGVzdGluZxJEJwS8SCcEgAcABUhlbGxvvycEvUiBAksBDEsBgQJPAk2BCksCDE8CgQpPAk1LAQknBE4CuoAFSGVsbG8SRImKAAAnBoAEAAECA78nBr5EVwABK6hEJwa+RFcBAYABAahEJwa+RFcCAYABAqhEJwa+RFcDAYABA6hEiYoAACNEiYoBAYv/Fr1FAYmKAQEnC4v/UL1FAYk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMzIgNjQKICAgIGJ5dGVjYmxvY2sgMHg2MjZjNmY2MiAweDE1MWY3Yzc1ICJib3hfaW50IiAweDAwIDB4NDI0ZjU4NWY0MyAiYiIgMHg2NCAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwIDB4Njg2NTZjNmM2ZiAiMCIgImRlZmF1bHQiICJ1c2VycyIgImJveF9ieXRlcyIgMHgwMDAyMzQzMiAiYm94X3JlZiIgMHgwMDAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A0MQogICAgcHVzaGJ5dGVzcyAweDU4ODhiOTk4IDB4MThkMGZiZTMgMHgzYWYyMzcyOCAweGNiOTExOTY5IDB4NGZjMjc5ZTEgMHg5ZWY2Njk3MSAweGU4OWI3ZjZmIDB4NGU2ZjA4OWUgMHgxMjgwNmY2YiAweDc1ZWQzNDg1IDB4NThlMjdlYWYgMHhhZjkxMTU5MCAweGFlODRhYzRkIDB4ZWZmNWI2NTcgMHgxYjhkYWRlMCAweDY1YzMwNjNlIDB4ODI3MDg1NjUgMHg0N2JiNzA0MyAweDNiOGNhZTJmIDB4NzhiMDczNGUgMHhiMTNlNjRkOCAweGQ2Nzc4OWViIDB4OTRlNWQzZjQgMHhhODZkMTZiMSAweDU0ZGI2MmRlIDB4ZWYxNTY4MzAgMHg3OWRmNTdmYyAweGY3NjEyNWI5IDB4MjFhY2E2ZmYgMHgwNGVmNDk3MSAweDIzZWNiMzJjIDB4ZWNkMWQxZjkgMHg3ZmEyZDFjMCAweDhlZTJjMzY0IDB4OTgwMjA4OGMgMHgzNmY4NmM4ZSAvLyBtZXRob2QgImdldF9ib3goKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2l0ZW1fYm94X21hcCh1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJnZXRfYm94X21hcCgpc3RyaW5nIiwgbWV0aG9kICJnZXRfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAibWF5YmVfYm94KCkodWludDY0LGJvb2wpIiwgbWV0aG9kICJtYXliZV9ib3hfbWFwKCkoc3RyaW5nLGJvb2wpIiwgbWV0aG9kICJtYXliZV9ib3hfcmVmKCkoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJnZXRfYm94X2V4YW1wbGUoKSh1aW50NjQsYnl0ZVtdLHN0cmluZykiLCBtZXRob2QgImdldF9ib3hfbWFwX2V4YW1wbGUoKWJvb2wiLCBtZXRob2QgIm1heWJlX2JveF9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJtYXliZV9ib3hfbWFwX2V4YW1wbGUoKXZvaWQiLCBtZXRob2QgImdldF9ib3hfbWFwX3N0cnVjdCh1aW50NjQpKHN0cmluZyx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAic2V0X2JveCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0X2JveF9tYXAodWludDY0LHN0cmluZyl2b2lkIiwgbWV0aG9kICJzZXRfYm94X21hcF9zdHJ1Y3QodWludDY0LChzdHJpbmcsdWludDY0LHVpbnQ2NCkpYm9vbCIsIG1ldGhvZCAic2V0X2JveF9leGFtcGxlKHVpbnQ2NCxieXRlW10sc3RyaW5nKXZvaWQiLCBtZXRob2QgImRlbGV0ZV9ib3goKXZvaWQiLCBtZXRob2QgImRlbGV0ZV9ib3hfbWFwKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZWxldGVfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAiYm94X21hcF9sZW5ndGgoKXVpbnQ2NCIsIG1ldGhvZCAibGVuZ3RoX2JveF9yZWYoKXVpbnQ2NCIsIG1ldGhvZCAiYm94X21hcF9zdHJ1Y3RfbGVuZ3RoKClib29sIiwgbWV0aG9kICJib3hfbWFwX2xlbmd0aF9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJsZW5ndGhfYm94X3JlZl9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJleHRyYWN0X2JveF9yZWYoKXZvaWQiLCBtZXRob2QgIm1hbmlwdWxhdGVfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAidmFsdWVfYm94KCl2b2lkIiwgbWV0aG9kICJleGlzdF9ib3goKWJvb2wiLCBtZXRob2QgImV4aXN0X2JveF9leGFtcGxlKCkoYm9vbCxib29sLGJvb2wpIiwgbWV0aG9kICJzbGljZV9ib3goKXZvaWQiLCBtZXRob2QgImFyYzRfYm94KCl2b2lkIiwgbWV0aG9kICJrZXlfYm94KClieXRlW10iLCBtZXRob2QgImtleV9ib3hfZXhhbXBsZSgpdm9pZCIsIG1ldGhvZCAiYm94X21hcF9leGlzdHModWludDY0KWJvb2wiLCBtZXRob2QgImJveF9tYXBfc3RydWN0X2V4aXN0cyh1aW50NjQpYm9vbCIsIG1ldGhvZCAia2V5X3ByZWZpeF9ib3hfbWFwKClieXRlW10iCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldF9ib3hfcm91dGVANSBtYWluX2dldF9pdGVtX2JveF9tYXBfcm91dGVANiBtYWluX2dldF9ib3hfbWFwX3JvdXRlQDcgbWFpbl9nZXRfYm94X3JlZl9yb3V0ZUA4IG1haW5fbWF5YmVfYm94X3JvdXRlQDkgbWFpbl9tYXliZV9ib3hfbWFwX3JvdXRlQDEwIG1haW5fbWF5YmVfYm94X3JlZl9yb3V0ZUAxMSBtYWluX2dldF9ib3hfZXhhbXBsZV9yb3V0ZUAxMiBtYWluX2dldF9ib3hfbWFwX2V4YW1wbGVfcm91dGVAMTMgbWFpbl9tYXliZV9ib3hfZXhhbXBsZV9yb3V0ZUAxNCBtYWluX21heWJlX2JveF9tYXBfZXhhbXBsZV9yb3V0ZUAxNSBtYWluX2dldF9ib3hfbWFwX3N0cnVjdF9yb3V0ZUAxNiBtYWluX3NldF9ib3hfcm91dGVAMTcgbWFpbl9zZXRfYm94X21hcF9yb3V0ZUAxOCBtYWluX3NldF9ib3hfbWFwX3N0cnVjdF9yb3V0ZUAxOSBtYWluX3NldF9ib3hfZXhhbXBsZV9yb3V0ZUAyMCBtYWluX2RlbGV0ZV9ib3hfcm91dGVAMjEgbWFpbl9kZWxldGVfYm94X21hcF9yb3V0ZUAyMiBtYWluX2RlbGV0ZV9ib3hfcmVmX3JvdXRlQDIzIG1haW5fYm94X21hcF9sZW5ndGhfcm91dGVAMjQgbWFpbl9sZW5ndGhfYm94X3JlZl9yb3V0ZUAyNSBtYWluX2JveF9tYXBfc3RydWN0X2xlbmd0aF9yb3V0ZUAyNiBtYWluX2JveF9tYXBfbGVuZ3RoX2V4YW1wbGVfcm91dGVAMjcgbWFpbl9sZW5ndGhfYm94X3JlZl9leGFtcGxlX3JvdXRlQDI4IG1haW5fZXh0cmFjdF9ib3hfcmVmX3JvdXRlQDI5IG1haW5fbWFuaXB1bGF0ZV9ib3hfcmVmX3JvdXRlQDMwIG1haW5fdmFsdWVfYm94X3JvdXRlQDMxIG1haW5fZXhpc3RfYm94X3JvdXRlQDMyIG1haW5fZXhpc3RfYm94X2V4YW1wbGVfcm91dGVAMzMgbWFpbl9zbGljZV9ib3hfcm91dGVAMzQgbWFpbl9hcmM0X2JveF9yb3V0ZUAzNSBtYWluX2tleV9ib3hfcm91dGVAMzYgbWFpbl9rZXlfYm94X2V4YW1wbGVfcm91dGVAMzcgbWFpbl9ib3hfbWFwX2V4aXN0c19yb3V0ZUAzOCBtYWluX2JveF9tYXBfc3RydWN0X2V4aXN0c19yb3V0ZUAzOSBtYWluX2tleV9wcmVmaXhfYm94X21hcF9yb3V0ZUA0MAoKbWFpbl9hZnRlcl9pZl9lbHNlQDQzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX2tleV9wcmVmaXhfYm94X21hcF9yb3V0ZUA0MDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozNDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3N0cnVjdF9leGlzdHNfcm91dGVAMzk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgYm94X21hcF9zdHJ1Y3RfZXhpc3RzCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX2V4aXN0c19yb3V0ZUAzODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzktMzQwCiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfTUFQCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzM5LTM0MAogICAgLy8gIyBleGFtcGxlOiBPVEhFUl9PUFNfQk9YX01BUAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGJveF9tYXBfZXhpc3RzCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9rZXlfYm94X2V4YW1wbGVfcm91dGVAMzc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBrZXlfYm94X2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fa2V5X2JveF9yb3V0ZUAzNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDc2MjZmNzg1ZjY5NmU3NAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzRfYm94X3JvdXRlQDM1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjNF9ib3gKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2xpY2VfYm94X3JvdXRlQDM0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc2xpY2VfYm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4aXN0X2JveF9leGFtcGxlX3JvdXRlQDMzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZXhpc3RfYm94X2V4YW1wbGUKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIHN3YXAKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBwdXNoaW50IDIgLy8gMgogICAgc3dhcAogICAgc2V0Yml0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4aXN0X2JveF9yb3V0ZUAzMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGV4aXN0X2JveAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmFsdWVfYm94X3JvdXRlQDMxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI5My0yOTQKICAgIC8vICMgZXhhbXBsZTogT1RIRVJfT1BTX0JPWAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdmFsdWVfYm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21hbmlwdWxhdGVfYm94X3JlZl9yb3V0ZUAzMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjctMjY4CiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYW5pcHVsYXRlX2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZXh0cmFjdF9ib3hfcmVmX3JvdXRlQDI5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MC0yNTEKICAgIC8vICMgZXhhbXBsZTogRVhUUkFDVF9CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBleHRyYWN0X2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbGVuZ3RoX2JveF9yZWZfZXhhbXBsZV9yb3V0ZUAyODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGxlbmd0aF9ib3hfcmVmX2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF9sZW5ndGhfZXhhbXBsZV9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjEtMjIyCiAgICAvLyAjIGV4YW1wbGU6IExFTkdUSF9CT1hfU1RPUkFHRV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYm94X21hcF9sZW5ndGhfZXhhbXBsZQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3N0cnVjdF9sZW5ndGhfcm91dGVAMjY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBib3hfbWFwX3N0cnVjdF9sZW5ndGgKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2xlbmd0aF9ib3hfcmVmX3JvdXRlQDI1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbGVuZ3RoX2JveF9yZWYKICAgIGl0b2IKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF9sZW5ndGhfcm91dGVAMjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk1LTE5NgogICAgLy8gIyBleGFtcGxlOiBMRU5HVEhfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGJveF9tYXBfbGVuZ3RoCiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZV9ib3hfcmVmX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlX2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsZXRlX2JveF9tYXBfcm91dGVAMjI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZGVsZXRlX2JveF9tYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsZXRlX2JveF9yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNjUtMTY2CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlX2JveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfYm94X2V4YW1wbGVfcm91dGVAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTQzLTE0NAogICAgLy8gIyBleGFtcGxlOiBTRVRfQk9YX1NUT1JBR0VfRVhBTVBMRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0My0xNDQKICAgIC8vICMgZXhhbXBsZTogU0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBzZXRfYm94X2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2JveF9tYXBfc3RydWN0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2JveF9tYXBfcm91dGVAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3hfbWFwCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9ib3hfcm91dGVAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTI2LTEyNwogICAgLy8gIyBleGFtcGxlOiBTRVRfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMjYtMTI3CiAgICAvLyAjIGV4YW1wbGU6IFNFVF9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3gKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9tYXBfc3RydWN0X3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGdldF9ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZV9ib3hfbWFwX2V4YW1wbGVfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfbWFwX2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfYm94X2V4YW1wbGVfcm91dGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfZXhhbXBsZQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYm94X21hcF9leGFtcGxlX3JvdXRlQDEzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfYm94X21hcF9leGFtcGxlCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYm94X2V4YW1wbGVfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogR0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9ib3hfZXhhbXBsZQogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBkaWcgMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIHB1c2hieXRlcyAweDAwMGMKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgcHVzaGludCAxMiAvLyAxMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfYm94X3JlZl9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWF5YmVfYm94X3JlZgogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgMTUgLy8gMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZV9ib3hfbWFwX3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfbWFwCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBieXRlYyAxNSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2JveF9yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3gKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9yZWZfcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9tYXBfcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveF9tYXAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pdGVtX2JveF9tYXBfcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2l0ZW1fYm94X21hcAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQwLTQxCiAgICAvLyAjIGV4YW1wbGU6IEdFVF9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveAogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VANDMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2JveCgpIC0+IHVpbnQ2NDoKZ2V0X2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MC00MgogICAgLy8gIyBleGFtcGxlOiBHRVRfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9ib3goc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDMKICAgIC8vIHJldHVybiBzZWxmLmJveF9pbnQudmFsdWUKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfaW50IGV4aXN0cwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2l0ZW1fYm94X21hcChrZXk6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9pdGVtX2JveF9tYXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDUtNDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9pdGVtX2JveF9tYXAoc2VsZiwga2V5OiBVSW50NjQpIC0+IFN0cmluZzoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gc2VsZi5ib3hfbWFwW2tleV0KICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcCBlbnRyeSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfbWFwKCkgLT4gYnl0ZXM6CmdldF9ib3hfbWFwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ5LTUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBnZXRfYm94X21hcChzZWxmKSAtPiBTdHJpbmc6CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1MQogICAgLy8ga2V5XzEgPSBVSW50NjQoMSkKICAgIGludGNfMCAvLyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTIKICAgIC8vIHJldHVybiBzZWxmLmJveF9tYXAuZ2V0KGtleV8xLCBkZWZhdWx0PVN0cmluZygiZGVmYXVsdCIpKQogICAgaXRvYgogICAgYm94X2dldAogICAgYnl0ZWMgMTAgLy8gImRlZmF1bHQiCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfcmVmKCkgLT4gdm9pZDoKZ2V0X2JveF9yZWY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTQtNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9ib3hfcmVmKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1NgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU3CiAgICAvLyBhc3NlcnQgYm94X3JlZi5jcmVhdGUoc2l6ZT0zMikKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTgKICAgIC8vIHNlbmRlcl9ieXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1NgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjYwCiAgICAvLyBhc3NlcnQgYm94X3JlZi5kZWxldGUoKQogICAgYm94X2RlbAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTYKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo2MgogICAgLy8gYXNzZXJ0IGJveF9yZWYuZ2V0KGRlZmF1bHQ9c2VuZGVyX2J5dGVzKSA9PSBzZW5kZXJfYnl0ZXMKICAgIGJveF9nZXQKICAgIGRpZyAyCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLm1heWJlX2JveCgpIC0+IHVpbnQ2NCwgdWludDY0OgptYXliZV9ib3g6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjQtNjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIG1heWJlX2JveChzZWxmKSAtPiB0dXBsZVtVSW50NjQsIGJvb2xdOgogICAgcHJvdG8gMCAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjYKICAgIC8vIGJveF9pbnRfdmFsdWUsIGJveF9pbnRfZXhpc3RzID0gc2VsZi5ib3hfaW50Lm1heWJlKCkKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjcKICAgIC8vIHJldHVybiBib3hfaW50X3ZhbHVlLCBib3hfaW50X2V4aXN0cwogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UubWF5YmVfYm94X21hcCgpIC0+IGJ5dGVzLCB1aW50NjQ6Cm1heWJlX2JveF9tYXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjktNzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIG1heWJlX2JveF9tYXAoc2VsZikgLT4gdHVwbGVbU3RyaW5nLCBib29sXToKICAgIHByb3RvIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjcxCiAgICAvLyBrZXlfMSA9IFVJbnQ2NCgxKQogICAgaW50Y18wIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3MgogICAgLy8gdmFsdWUsIGV4aXN0cyA9IHNlbGYuYm94X21hcC5tYXliZShrZXlfMSkKICAgIGl0b2IKICAgIGJveF9nZXQKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzMKICAgIC8vIGlmIG5vdCBleGlzdHM6CiAgICBibnogbWF5YmVfYm94X21hcF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3NAogICAgLy8gdmFsdWUgPSBTdHJpbmcoIiIpCiAgICBwdXNoYnl0ZXMgIiIKICAgIGZyYW1lX2J1cnkgMQoKbWF5YmVfYm94X21hcF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzUKICAgIC8vIHJldHVybiB2YWx1ZSwgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5tYXliZV9ib3hfcmVmKCkgLT4gYnl0ZXMsIHVpbnQ2NDoKbWF5YmVfYm94X3JlZjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3Ny03OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgbWF5YmVfYm94X3JlZihzZWxmKSAtPiB0dXBsZVtCeXRlcywgYm9vbF06CiAgICBwcm90byAwIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3OQogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgwCiAgICAvLyBhc3NlcnQgYm94X3JlZi5jcmVhdGUoc2l6ZT0zMikKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzkKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo4MgogICAgLy8gdmFsdWUsIGV4aXN0cyA9IGJveF9yZWYubWF5YmUoKQogICAgYm94X2dldAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo4MwogICAgLy8gaWYgbm90IGV4aXN0czoKICAgIGJueiBtYXliZV9ib3hfcmVmX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyB2YWx1ZSA9IEJ5dGVzKGIiIikKICAgIHB1c2hieXRlcyAweAogICAgZnJhbWVfYnVyeSAxCgptYXliZV9ib3hfcmVmX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo4NQogICAgLy8gcmV0dXJuIHZhbHVlLCBleGlzdHMKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfZXhhbXBsZSgpIC0+IHVpbnQ2NCwgYnl0ZXMsIGJ5dGVzOgpnZXRfYm94X2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODktOTEKICAgIC8vICMgZXhhbXBsZTogR0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9ib3hfZXhhbXBsZShzZWxmKSAtPiB0dXBsZVtVSW50NjQsIEJ5dGVzLCBhcmM0LlN0cmluZ106CiAgICBwcm90byAwIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo5MwogICAgLy8gc2VsZi5ib3hfaW50LnZhbHVlLAogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTQKICAgIC8vIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubmF0aXZlLAogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9keW5hbWljX2J5dGVzIGV4aXN0cwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo5NQogICAgLy8gc2VsZi5ib3hfc3RyaW5nLnZhbHVlLAogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9zdHJpbmcgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTItOTYKICAgIC8vIHJldHVybiAoCiAgICAvLyAgICAgc2VsZi5ib3hfaW50LnZhbHVlLAogICAgLy8gICAgIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubmF0aXZlLAogICAgLy8gICAgIHNlbGYuYm94X3N0cmluZy52YWx1ZSwKICAgIC8vICkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfbWFwX2V4YW1wbGUoKSAtPiB1aW50NjQ6CmdldF9ib3hfbWFwX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTgtOTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9ib3hfbWFwX2V4YW1wbGUoc2VsZikgLT4gYm9vbDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMAogICAgLy8ga2V5XzEgPSBVSW50NjQoMSkKICAgIGludGNfMCAvLyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTAxCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfbWFwLmdldChrZXlfMSwgZGVmYXVsdD1TdHJpbmcoImRlZmF1bHQiKSkgPT0gU3RyaW5nKCJkZWZhdWx0IikKICAgIGl0b2IKICAgIGJveF9nZXQKICAgIGJ5dGVjIDEwIC8vICJkZWZhdWx0IgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBieXRlYyAxMCAvLyAiZGVmYXVsdCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDIKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UubWF5YmVfYm94X2V4YW1wbGUoKSAtPiB2b2lkOgptYXliZV9ib3hfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDQtMTA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYXliZV9ib3hfZXhhbXBsZShzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA2CiAgICAvLyBkZWwgc2VsZi5ib3hfaW50LnZhbHVlCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA3CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfaW50LmdldChkZWZhdWx0PVVJbnQ2NCg0MikpID09IDQyCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgcHVzaGludCA0MiAvLyA0MgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHB1c2hpbnQgNDIgLy8gNDIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDgKICAgIC8vIGJveF9pbnRfdmFsdWUsIGJveF9pbnRfZXhpc3RzID0gc2VsZi5ib3hfaW50Lm1heWJlKCkKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA5CiAgICAvLyBhc3NlcnQgbm90IGJveF9pbnRfZXhpc3RzCiAgICBzd2FwCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTAKICAgIC8vIGFzc2VydCBib3hfaW50X3ZhbHVlID09IDAKICAgICEKICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UubWF5YmVfYm94X21hcF9leGFtcGxlKCkgLT4gdm9pZDoKbWF5YmVfYm94X21hcF9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExMi0xMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIG1heWJlX2JveF9tYXBfZXhhbXBsZShzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTE1CiAgICAvLyBrZXlfMSA9IFVJbnQ2NCgxKQogICAgaW50Y18wIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTYKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBzZWxmLmJveF9tYXAubWF5YmUoa2V5XzEpCiAgICBpdG9iCiAgICBib3hfZ2V0CiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTcKICAgIC8vIGFzc2VydCBub3QgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTQKICAgIC8vIGtleV8wID0gVUludDY0KDApCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExOAogICAgLy8gYXNzZXJ0IGtleV8wIGluIHNlbGYuYm94X21hcAogICAgaXRvYgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfbWFwX3N0cnVjdChrZXk6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2JveF9tYXBfc3RydWN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMC0xMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9ib3hfbWFwX3N0cnVjdChzZWxmLCBrZXk6IGFyYzQuVUludDY0KSAtPiBVc2VyU3RydWN0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTIyCiAgICAvLyByZXR1cm4gc2VsZi5ib3hfbWFwX3N0cnVjdFtrZXldCiAgICBieXRlYyAxMSAvLyAidXNlcnMiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcF9zdHJ1Y3QgZW50cnkgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5zZXRfYm94KHZhbHVlX2ludDogdWludDY0KSAtPiB2b2lkOgpzZXRfYm94OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyNi0xMjgKICAgIC8vICMgZXhhbXBsZTogU0VUX0JPWF9TVE9SQUdFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzZXRfYm94KHNlbGYsIHZhbHVlX2ludDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTI5CiAgICAvLyBzZWxmLmJveF9pbnQudmFsdWUgPSB2YWx1ZV9pbnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnNldF9ib3hfbWFwKGtleTogdWludDY0LCB2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnNldF9ib3hfbWFwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzMS0xMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9ib3hfbWFwKHNlbGYsIGtleTogVUludDY0LCB2YWx1ZTogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTMzCiAgICAvLyBzZWxmLmJveF9tYXBba2V5XSA9IHZhbHVlCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnNldF9ib3hfbWFwX3N0cnVjdChrZXk6IGJ5dGVzLCB2YWx1ZTogYnl0ZXMpIC0+IHVpbnQ2NDoKc2V0X2JveF9tYXBfc3RydWN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNS0xMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9ib3hfbWFwX3N0cnVjdChzZWxmLCBrZXk6IGFyYzQuVUludDY0LCB2YWx1ZTogVXNlclN0cnVjdCkgLT4gYm9vbDoKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNwogICAgLy8gc2VsZi5ib3hfbWFwX3N0cnVjdFtrZXldID0gdmFsdWUuY29weSgpCiAgICBieXRlYyAxMSAvLyAidXNlcnMiCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTM4CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfbWFwX3N0cnVjdFtrZXldID09IHZhbHVlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwX3N0cnVjdCBlbnRyeSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzOQogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5zZXRfYm94X2V4YW1wbGUodmFsdWVfaW50OiB1aW50NjQsIHZhbHVlX2RieXRlczogYnl0ZXMsIHZhbHVlX3N0cmluZzogYnl0ZXMpIC0+IHZvaWQ6CnNldF9ib3hfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNDMtMTUwCiAgICAvLyAjIGV4YW1wbGU6IFNFVF9CT1hfU1RPUkFHRV9FWEFNUExFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzZXRfYm94X2V4YW1wbGUoCiAgICAvLyAgICAgc2VsZiwKICAgIC8vICAgICB2YWx1ZV9pbnQ6IFVJbnQ2NCwKICAgIC8vICAgICB2YWx1ZV9kYnl0ZXM6IGFyYzQuRHluYW1pY0J5dGVzLAogICAgLy8gICAgIHZhbHVlX3N0cmluZzogYXJjNC5TdHJpbmcsCiAgICAvLyApIC0+IE5vbmU6CiAgICBwcm90byAzIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNTEKICAgIC8vIHNlbGYuYm94X2ludC52YWx1ZSA9IHZhbHVlX2ludAogICAgZnJhbWVfZGlnIC0zCiAgICBpdG9iCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1MgogICAgLy8gc2VsZi5ib3hfZHluYW1pY19ieXRlcy52YWx1ZSA9IHZhbHVlX2RieXRlcy5jb3B5KCkKICAgIGJ5dGVjIDUgLy8gImIiCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJ5dGVjIDUgLy8gImIiCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNTMKICAgIC8vIHNlbGYuYm94X3N0cmluZy52YWx1ZSA9IHZhbHVlX3N0cmluZwogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NAogICAgLy8gc2VsZi5ib3hfYnl0ZXMudmFsdWUgPSB2YWx1ZV9kYnl0ZXMubmF0aXZlCiAgICBmcmFtZV9kaWcgLTIKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAxMiAvLyAiYm94X2J5dGVzIgogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyAxMiAvLyAiYm94X2J5dGVzIgogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gYnl0ZV92YWx1ZSA9IHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUuY29weSgpCiAgICBieXRlYyA1IC8vICJiIgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTU4CiAgICAvLyBzZWxmLmJveF9keW5hbWljX2J5dGVzLnZhbHVlLmxlbmd0aCA9PSBieXRlX3ZhbHVlLmxlbmd0aAogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9keW5hbWljX2J5dGVzIGV4aXN0cwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTU3LTE1OQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmJveF9keW5hbWljX2J5dGVzLnZhbHVlLmxlbmd0aCA9PSBieXRlX3ZhbHVlLmxlbmd0aAogICAgLy8gKSwgImRpcmVjdCByZWZlcmVuY2Ugc2hvdWxkIG1hdGNoIGNvcHkiCiAgICBhc3NlcnQgLy8gZGlyZWN0IHJlZmVyZW5jZSBzaG91bGQgbWF0Y2ggY29weQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2MQogICAgLy8gc2VsZi5ib3hfaW50LnZhbHVlICs9IDMKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfaW50IGV4aXN0cwogICAgcHVzaGludCAzIC8vIDMKICAgICsKICAgIGl0b2IKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5kZWxldGVfYm94KCkgLT4gdm9pZDoKZGVsZXRlX2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNjUtMTY3CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZGVsZXRlX2JveChzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTY4CiAgICAvLyBkZWwgc2VsZi5ib3hfaW50LnZhbHVlCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTY5CiAgICAvLyBkZWwgc2VsZi5ib3hfZHluYW1pY19ieXRlcy52YWx1ZQogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3MAogICAgLy8gZGVsIHNlbGYuYm94X3N0cmluZy52YWx1ZQogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3MgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2ludC5nZXQoZGVmYXVsdD1VSW50NjQoNDIpKSA9PSA0MgogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHB1c2hpbnQgNDIgLy8gNDIKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBwdXNoaW50IDQyIC8vIDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc0CiAgICAvLyBzZWxmLmJveF9keW5hbWljX2J5dGVzLmdldChkZWZhdWx0PWFyYzQuRHluYW1pY0J5dGVzKGIiNDIiKSkubmF0aXZlID09IGIiNDIiCiAgICBieXRlYyA1IC8vICJiIgogICAgYm94X2dldAogICAgYnl0ZWMgMTMgLy8gMHgwMDAyMzQzMgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBleHRyYWN0IDIgMAogICAgcHVzaGJ5dGVzIDB4MzQzMgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzMtMTc1CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMuZ2V0KGRlZmF1bHQ9YXJjNC5EeW5hbWljQnl0ZXMoYiI0MiIpKS5uYXRpdmUgPT0gYiI0MiIKICAgIC8vICkKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X3N0cmluZy5nZXQoZGVmYXVsdD1hcmM0LlN0cmluZygiNDIiKSkgPT0gIjQyIgogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9nZXQKICAgIGJ5dGVjIDEzIC8vIDB4MDAwMjM0MzIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgMTMgLy8gMHgwMDAyMzQzMgogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZGVsZXRlX2JveF9tYXAoa2V5OiB1aW50NjQpIC0+IHZvaWQ6CmRlbGV0ZV9ib3hfbWFwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3OC0xNzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlbGV0ZV9ib3hfbWFwKHNlbGYsIGtleTogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTgwCiAgICAvLyBkZWwgc2VsZi5ib3hfbWFwW2tleV0KICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5kZWxldGVfYm94X3JlZigpIC0+IHZvaWQ6CmRlbGV0ZV9ib3hfcmVmOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4Mi0xODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlbGV0ZV9ib3hfcmVmKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxODUKICAgIC8vIHNlbGYuYm94X3JlZi5jcmVhdGUoc2l6ZT1VSW50NjQoMzIpKQogICAgYnl0ZWMgMTQgLy8gImJveF9yZWYiCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4NgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X3JlZiwgImhhcyBkYXRhIgogICAgYnl0ZWMgMTQgLy8gImJveF9yZWYiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBoYXMgZGF0YQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4OAogICAgLy8gc2VsZi5ib3hfcmVmLmRlbGV0ZSgpCiAgICBieXRlYyAxNCAvLyAiYm94X3JlZiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4NAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4OQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IGJveF9yZWYubWF5YmUoKQogICAgYm94X2dldAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gYXNzZXJ0IG5vdCBleGlzdHMKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5MQogICAgLy8gYXNzZXJ0IHZhbHVlID09IGIiIgogICAgcHVzaGJ5dGVzIDB4CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX2xlbmd0aCgpIC0+IHVpbnQ2NDoKYm94X21hcF9sZW5ndGg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk1LTE5NwogICAgLy8gIyBleGFtcGxlOiBMRU5HVEhfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfbGVuZ3RoKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5OAogICAgLy8ga2V5XzAgPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk5CiAgICAvLyBpZiBrZXlfMCBub3QgaW4gc2VsZi5ib3hfbWFwOgogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBib3hfbWFwX2xlbmd0aF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDAKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmJveF9tYXBfbGVuZ3RoX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDEKICAgIC8vIHJldHVybiBzZWxmLmJveF9tYXAubGVuZ3RoKGtleV8wKQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9tYXAgZW50cnkgZXhpc3RzCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5sZW5ndGhfYm94X3JlZigpIC0+IHVpbnQ2NDoKbGVuZ3RoX2JveF9yZWY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjAzLTIwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgbGVuZ3RoX2JveF9yZWYoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA1CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA2CiAgICAvLyBhc3NlcnQgYm94X3JlZi5jcmVhdGUoc2l6ZT0zMikKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA1CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA3CiAgICAvLyByZXR1cm4gYm94X3JlZi5sZW5ndGgKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX3N0cnVjdF9sZW5ndGgoKSAtPiB1aW50NjQ6CmJveF9tYXBfc3RydWN0X2xlbmd0aDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDktMjEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfbWFwX3N0cnVjdF9sZW5ndGgoc2VsZikgLT4gYm9vbDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIxNAogICAgLy8gc2VsZi5ib3hfbWFwX3N0cnVjdFtrZXlfMF0gPSB2YWx1ZS5jb3B5KCkKICAgIGJ5dGVjIDcgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyA3IC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMTIKICAgIC8vIHZhbHVlID0gVXNlclN0cnVjdChhcmM0LlN0cmluZygidGVzdE5hbWUiKSwgYXJjNC5VSW50NjQoNzApLCBhcmM0LlVJbnQ2NCgyKSkKICAgIHB1c2hieXRlcyAweDAwMTIwMDAwMDAwMDAwMDAwMDQ2MDAwMDAwMDAwMDAwMDAwMjAwMDg3NDY1NzM3NDRlNjE2ZDY1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjE0CiAgICAvLyBzZWxmLmJveF9tYXBfc3RydWN0W2tleV8wXSA9IHZhbHVlLmNvcHkoKQogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIxNQogICAgLy8gYXNzZXJ0IHNlbGYuYm94X21hcF9zdHJ1Y3Rba2V5XzBdLmJ5dGVzLmxlbmd0aCA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGJ5dGVjIDcgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcF9zdHJ1Y3QgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjE2CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfbWFwX3N0cnVjdC5sZW5ndGgoa2V5XzApID09IHZhbHVlLmJ5dGVzLmxlbmd0aAogICAgYnl0ZWMgNyAvLyAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwX3N0cnVjdCBlbnRyeSBleGlzdHMKICAgIHB1c2hpbnQgMjggLy8gMjgKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMTcKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuYm94X21hcF9sZW5ndGhfZXhhbXBsZSgpIC0+IHZvaWQ6CmJveF9tYXBfbGVuZ3RoX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjIxLTIyMwogICAgLy8gIyBleGFtcGxlOiBMRU5HVEhfQk9YX1NUT1JBR0VfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfbGVuZ3RoX2V4YW1wbGUoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyNAogICAgLy8ga2V5XzAgPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI2CiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjUKICAgIC8vIHZhbHVlID0gU3RyaW5nKCJIbW1tbW0iKQogICAgcHVzaGJ5dGVzICJIbW1tbW0iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI2CiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjcKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXBba2V5XzBdLmJ5dGVzLmxlbmd0aCA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGR1cAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcCBlbnRyeSBleGlzdHMKICAgIHB1c2hpbnQgNiAvLyA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI4CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfbWFwLmxlbmd0aChrZXlfMCkgPT0gdmFsdWUuYnl0ZXMubGVuZ3RoCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwIGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmxlbmd0aF9ib3hfcmVmX2V4YW1wbGUoKSAtPiB2b2lkOgpsZW5ndGhfYm94X3JlZl9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIzMC0yMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGxlbmd0aF9ib3hfcmVmX2V4YW1wbGUoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIzMgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9ImJsb2IiKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzMKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzIKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PSJibG9iIikKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjM0CiAgICAvLyBhc3NlcnQgYm94X3JlZi5sZW5ndGggPT0gNjQKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICBpbnRjXzMgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzYKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PWIiYmxvYiIpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzcKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzYKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PWIiYmxvYiIpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzgKICAgIC8vIGFzc2VydCBib3hfcmVmLmxlbmd0aCA9PSA2NAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIEJveFJlZiBleGlzdHMKICAgIGludGNfMyAvLyA2NAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9Qnl0ZXMoYiJibG9iIikpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDEKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PUJ5dGVzKGIiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAweDYyNmM2ZjYyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQyCiAgICAvLyBhc3NlcnQgYm94X3JlZi5sZW5ndGggPT0gNjQKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICBpbnRjXzMgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDQKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDUKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDQKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDYKICAgIC8vIGFzc2VydCBib3hfcmVmLmxlbmd0aCA9PSA2NAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIEJveFJlZiBleGlzdHMKICAgIGludGNfMyAvLyA2NAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZXh0cmFjdF9ib3hfcmVmKCkgLT4gdm9pZDoKZXh0cmFjdF9ib3hfcmVmOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MC0yNTIKICAgIC8vICMgZXhhbXBsZTogRVhUUkFDVF9CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBleHRyYWN0X2JveF9yZWYoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NAogICAgLy8gYXNzZXJ0IGJveF9yZWYuY3JlYXRlKHNpemU9MzIpCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gc2VuZGVyX2J5dGVzID0gVHhuLnNlbmRlci5ieXRlcwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NwogICAgLy8gYXBwX2FkZHJlc3MgPSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmJ5dGVzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYm94X3JlZi5yZXBsYWNlKDAsIHNlbmRlcl9ieXRlcykKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMwogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTMKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjAKICAgIC8vIGJveF9yZWYuc3BsaWNlKDAsIDAsIGFwcF9hZGRyZXNzKQogICAgaW50Y18xIC8vIDAKICAgIGR1cAogICAgZGlnIDMKICAgIGJveF9zcGxpY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTMKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjEKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIGludGNfMyAvLyA2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OAogICAgLy8gdmFsdWVfMyA9IEJ5dGVzKGIiaGVsbG8iKQogICAgYnl0ZWMgOCAvLyAweDY4NjU2YzZjNmYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjEKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUzCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjYyCiAgICAvLyBwcmVmaXggPSBib3hfcmVmLmV4dHJhY3QoMCwgMzIgKiAyICsgdmFsdWVfMy5sZW5ndGgpCiAgICBpbnRjXzEgLy8gMAogICAgcHVzaGludCA2OSAvLyA2OQogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjMKICAgIC8vIGFzc2VydCBwcmVmaXggPT0gYXBwX2FkZHJlc3MgKyBzZW5kZXJfYnl0ZXMgKyB2YWx1ZV8zCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OAogICAgLy8gdmFsdWVfMyA9IEJ5dGVzKGIiaGVsbG8iKQogICAgYnl0ZWMgOCAvLyAweDY4NjU2YzZjNmYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjMKICAgIC8vIGFzc2VydCBwcmVmaXggPT0gYXBwX2FkZHJlc3MgKyBzZW5kZXJfYnl0ZXMgKyB2YWx1ZV8zCiAgICBjb25jYXQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLm1hbmlwdWxhdGVfYm94X3JlZigpIC0+IHZvaWQ6Cm1hbmlwdWxhdGVfYm94X3JlZjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjctMjY5CiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYW5pcHVsYXRlX2JveF9yZWYoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MQogICAgLy8gYXNzZXJ0IGJveF9yZWYuY3JlYXRlKHNpemU9MzIpCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MgogICAgLy8gYXNzZXJ0IGJveF9yZWYsICJoYXMgZGF0YSIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGhhcyBkYXRhCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc0LTI3NQogICAgLy8gIyBtYW5pcHVsYXRlIGRhdGEKICAgIC8vIHNlbmRlcl9ieXRlcyA9IFR4bi5zZW5kZXIuYnl0ZXMKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzYKICAgIC8vIGFwcF9hZGRyZXNzID0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5ieXRlcwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzgKICAgIC8vIGJveF9yZWYucmVwbGFjZSgwLCBzZW5kZXJfYnl0ZXMpCiAgICBpbnRjXzEgLy8gMAogICAgZGlnIDMKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc5CiAgICAvLyBib3hfcmVmLnNwbGljZSgwLCAwLCBhcHBfYWRkcmVzcykKICAgIGludGNfMSAvLyAwCiAgICBkdXAKICAgIGRpZyAzCiAgICBib3hfc3BsaWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjgwCiAgICAvLyBib3hfcmVmLnJlcGxhY2UoNjQsIHZhbHVlXzMpCiAgICBpbnRjXzMgLy8gNjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzcKICAgIC8vIHZhbHVlXzMgPSBCeXRlcyhiImhlbGxvIikKICAgIGJ5dGVjIDggLy8gMHg2ODY1NmM2YzZmCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjgwCiAgICAvLyBib3hfcmVmLnJlcGxhY2UoNjQsIHZhbHVlXzMpCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MQogICAgLy8gcHJlZml4ID0gYm94X3JlZi5leHRyYWN0KDAsIDMyICogMiArIHZhbHVlXzMubGVuZ3RoKQogICAgaW50Y18xIC8vIDAKICAgIHB1c2hpbnQgNjkgLy8gNjkKICAgIGJveF9leHRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjgyCiAgICAvLyBhc3NlcnQgcHJlZml4ID09IGFwcF9hZGRyZXNzICsgc2VuZGVyX2J5dGVzICsgdmFsdWVfMwogICAgZGlnIDEKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzcKICAgIC8vIHZhbHVlXzMgPSBCeXRlcyhiImhlbGxvIikKICAgIGJ5dGVjIDggLy8gMHg2ODY1NmM2YzZmCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjgyCiAgICAvLyBhc3NlcnQgcHJlZml4ID09IGFwcF9hZGRyZXNzICsgc2VuZGVyX2J5dGVzICsgdmFsdWVfMwogICAgY29uY2F0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjg0CiAgICAvLyBhc3NlcnQgYm94X3JlZi5kZWxldGUoKQogICAgYm94X2RlbAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjg3CiAgICAvLyBib3hfcmVmLnB1dChzZW5kZXJfYnl0ZXMgKyBhcHBfYWRkcmVzcykKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4NwogICAgLy8gYm94X3JlZi5wdXQoc2VuZGVyX2J5dGVzICsgYXBwX2FkZHJlc3MpCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjg4CiAgICAvLyBhc3NlcnQgYm94X3JlZiwgIkJsb2IgZXhpc3RzIgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQmxvYiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyODkKICAgIC8vIGFzc2VydCBib3hfcmVmLmxlbmd0aCA9PSA2NAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIEJveFJlZiBleGlzdHMKICAgIGludGNfMyAvLyA2NAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UudmFsdWVfYm94KCkgLT4gdm9pZDoKdmFsdWVfYm94OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI5My0yOTUKICAgIC8vICMgZXhhbXBsZTogT1RIRVJfT1BTX0JPWAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgdmFsdWVfYm94KHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTYKICAgIC8vIGFzc2VydCBzZWxmLmJveF9pbnQudmFsdWUgPT0gVUludDY0KDEwKQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5leGlzdF9ib3goKSAtPiB1aW50NjQ6CmV4aXN0X2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTgtMjk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBleGlzdF9ib3goc2VsZikgLT4gYm9vbDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwMAogICAgLy8gcmV0dXJuIGJvb2woc2VsZi5ib3hfaW50KQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZXhpc3RfYm94X2V4YW1wbGUoKSAtPiB1aW50NjQsIHVpbnQ2NCwgdWludDY0OgpleGlzdF9ib3hfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDItMzAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBleGlzdF9ib3hfZXhhbXBsZShzZWxmKSAtPiB0dXBsZVtib29sLCBib29sLCBib29sXToKICAgIHByb3RvIDAgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwNAogICAgLy8gcmV0dXJuIGJvb2woc2VsZi5ib3hfZHluYW1pY19ieXRlcyksIGJvb2woc2VsZi5ib3hfc3RyaW5nKSwgYm9vbChzZWxmLmJveF9ieXRlcykKICAgIGJ5dGVjIDUgLy8gImIiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ5dGVjIDQgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ5dGVjIDEyIC8vICJib3hfYnl0ZXMiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnNsaWNlX2JveCgpIC0+IHZvaWQ6CnNsaWNlX2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDYtMzA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzbGljZV9ib3goc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOAogICAgLy8gYm94XzAgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoIjAiKSkKICAgIGJ5dGVjIDkgLy8gIjAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzA5CiAgICAvLyBib3hfMC52YWx1ZSA9IEJ5dGVzKGIiVGVzdGluZyB0ZXN0aW5nIDEyMyIpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDgKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyA5IC8vICIwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOQogICAgLy8gYm94XzAudmFsdWUgPSBCeXRlcyhiIlRlc3RpbmcgdGVzdGluZyAxMjMiKQogICAgcHVzaGJ5dGVzIDB4NTQ2NTczNzQ2OTZlNjcyMDc0NjU3Mzc0Njk2ZTY3MjAzMTMyMzMKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDgKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyA5IC8vICIwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxMAogICAgLy8gYXNzZXJ0IGJveF8wLnZhbHVlWzA6N10gPT0gYiJUZXN0aW5nIgogICAgYm94X2xlbgogICAgcG9wCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMgogICAgc2VsZWN0CiAgICBwdXNoaW50IDcgLy8gNwogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA3IC8vIDcKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOAogICAgLy8gYm94XzAgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoIjAiKSkKICAgIGJ5dGVjIDkgLy8gIjAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzEwCiAgICAvLyBhc3NlcnQgYm94XzAudmFsdWVbMDo3XSA9PSBiIlRlc3RpbmciCiAgICBjb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgcHVzaGJ5dGVzIDB4NTQ2NTczNzQ2OTZlNjcKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTIKICAgIC8vIHNlbGYuYm94X3N0cmluZy52YWx1ZSA9IGFyYzQuU3RyaW5nKCJIZWxsbyIpCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgcHVzaGJ5dGVzIDB4MDAwNTQ4NjU2YzZjNmYKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTMKICAgIC8vIGFzc2VydCBzZWxmLmJveF9zdHJpbmcudmFsdWUuYnl0ZXNbMjoxMF0gPT0gYiJIZWxsbyIKICAgIGJ5dGVjIDQgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfbGVuCiAgICBwb3AKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBkaWcgMQogICAgPAogICAgZGlnIDEKICAgIHB1c2hpbnQgMiAvLyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAxMCAvLyAxMAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAxCiAgICAtCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIHB1c2hieXRlcyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmFyYzRfYm94KCkgLT4gdm9pZDoKYXJjNF9ib3g6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzE1LTMxNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYXJjNF9ib3goc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gYm94X2J5dGVzID0gQm94KFN0YXRpY0ludHMsIGtleT1CeXRlcyhiImQiKSkKICAgIGJ5dGVjIDYgLy8gMHg2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxOC0zMjAKICAgIC8vIGJveF9ieXRlcy52YWx1ZSA9IFN0YXRpY0ludHMoCiAgICAvLyAgICAgYXJjNC5VSW50OCgwKSwgYXJjNC5VSW50OCgxKSwgYXJjNC5VSW50OCgyKSwgYXJjNC5VSW50OCgzKQogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4MDAwMTAyMDMKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTcKICAgIC8vIGJveF9ieXRlcyA9IEJveChTdGF0aWNJbnRzLCBrZXk9Qnl0ZXMoYiJkIikpCiAgICBieXRlYyA2IC8vIDB4NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMjIKICAgIC8vIGFzc2VydCBib3hfYnl0ZXMudmFsdWVbMF0gPT0gMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveCBleGlzdHMKICAgIGV4dHJhY3QgMCAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gYm94X2J5dGVzID0gQm94KFN0YXRpY0ludHMsIGtleT1CeXRlcyhiImQiKSkKICAgIGJ5dGVjIDYgLy8gMHg2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyMwogICAgLy8gYXNzZXJ0IGJveF9ieXRlcy52YWx1ZVsxXSA9PSAxCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94IGV4aXN0cwogICAgZXh0cmFjdCAxIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoYnl0ZXMgMHgwMQogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTcKICAgIC8vIGJveF9ieXRlcyA9IEJveChTdGF0aWNJbnRzLCBrZXk9Qnl0ZXMoYiJkIikpCiAgICBieXRlYyA2IC8vIDB4NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMjQKICAgIC8vIGFzc2VydCBib3hfYnl0ZXMudmFsdWVbMl0gPT0gMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveCBleGlzdHMKICAgIGV4dHJhY3QgMiAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcHVzaGJ5dGVzIDB4MDIKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzE3CiAgICAvLyBib3hfYnl0ZXMgPSBCb3goU3RhdGljSW50cywga2V5PUJ5dGVzKGIiZCIpKQogICAgYnl0ZWMgNiAvLyAweDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzI1CiAgICAvLyBhc3NlcnQgYm94X2J5dGVzLnZhbHVlWzNdID09IDMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3ggZXhpc3RzCiAgICBleHRyYWN0IDMgMSAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweDAzCiAgICBiPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2Uua2V5X2JveF9leGFtcGxlKCkgLT4gdm9pZDoKa2V5X2JveF9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMzMS0zMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGtleV9ib3hfZXhhbXBsZShzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzM0CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfc3RyaW5nLmtleSA9PSBiIkJPWF9TVFJJTkciLCAiYm94IHN0cmluZyBrZXkgb2siCiAgICBpbnRjXzEgLy8gMAogICAgYXNzZXJ0IC8vIGJveCBzdHJpbmcga2V5IG9rCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX2V4aXN0cyhrZXk6IHVpbnQ2NCkgLT4gdWludDY0Ogpib3hfbWFwX2V4aXN0czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzktMzQxCiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfTUFQCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfbWFwX2V4aXN0cyhzZWxmLCBrZXk6IFVJbnQ2NCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM0MgogICAgLy8gcmV0dXJuIGtleSBpbiBzZWxmLmJveF9tYXAKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX3N0cnVjdF9leGlzdHMoa2V5OiBieXRlcykgLT4gdWludDY0Ogpib3hfbWFwX3N0cnVjdF9leGlzdHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0LTM0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYm94X21hcF9zdHJ1Y3RfZXhpc3RzKHNlbGYsIGtleTogYXJjNC5VSW50NjQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozNDYKICAgIC8vIHJldHVybiBrZXkgaW4gc2VsZi5ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWMgMTEgLy8gInVzZXJzIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [1797], "errorMessage": "Blob exists"}, {"pc": [1995, 2005, 2017, 2029], "errorMessage": "Index access is out of bounds"}, {"pc": [370, 388, 412, 437, 449, 474, 486, 498, 545, 566, 578, 590, 602, 614, 626, 647, 664, 681, 693, 709, 721, 743, 770, 792, 808, 827, 839, 851, 872, 922, 959, 996, 1020, 1032, 1056, 1084], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [2042], "errorMessage": "box string key ok"}, {"pc": [1106], "errorMessage": "can only call when creating"}, {"pc": [373, 391, 415, 440, 452, 477, 489, 501, 548, 569, 581, 593, 605, 617, 629, 650, 667, 684, 696, 712, 724, 746, 773, 795, 811, 830, 842, 854, 875, 925, 962, 999, 1023, 1035, 1059, 1087], "errorMessage": "can only call when not creating"}, {"pc": [1994, 2004, 2016, 2028], "errorMessage": "check Box exists"}, {"pc": [1561, 1662, 1672, 1682, 1692, 1800], "errorMessage": "check BoxRef exists"}, {"pc": [1238, 1411, 1415], "errorMessage": "check self.box_dynamic_bytes exists"}, {"pc": [1117, 1234, 1428, 1813], "errorMessage": "check self.box_int exists"}, {"pc": [1126, 1549, 1641, 1647], "errorMessage": "check self.box_map entry exists"}, {"pc": [1320, 1361, 1606, 1614], "errorMessage": "check self.box_map_struct entry exists"}, {"pc": [1245], "errorMessage": "check self.box_string exists"}, {"pc": [1422], "errorMessage": "direct reference should match copy"}, {"pc": [1517, 1750], "errorMessage": "has data"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_box", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "get_item_box_map", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_box_map", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_box_ref", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_box", "returns": {"type": "(uint64,bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_box_map", "returns": {"type": "(string,bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_box_ref", "returns": {"type": "(byte[],bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_box_example", "returns": {"type": "(uint64,byte[],string)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_box_map_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_box_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_box_map_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "get_box_map_struct", "returns": {"type": "(string,uint64,uint64)", "struct": "UserStruct"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "value_int"}], "name": "set_box", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}, {"type": "string", "name": "value"}], "name": "set_box_map", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}, {"type": "(string,uint64,uint64)", "name": "value", "struct": "UserStruct"}], "name": "set_box_map_struct", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "value_int"}, {"type": "byte[]", "name": "value_dbytes"}, {"type": "string", "name": "value_string"}], "name": "set_box_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "delete_box", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "delete_box_map", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "delete_box_ref", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "box_map_length", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "length_box_ref", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "box_map_struct_length", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "box_map_length_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "length_box_ref_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "extract_box_ref", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "manipulate_box_ref", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "value_box", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "exist_box", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "exist_box_example", "returns": {"type": "(bool,bool,bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "slice_box", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "arc4_box", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "key_box", "returns": {"type": "byte[]"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "key_box_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "box_map_exists", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "box_map_struct_exists", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "key_prefix_box_map", "returns": {"type": "byte[]"}, "events": [], "readonly": false, "recommendations": {}}], "name": "BoxStorage", "state": {"keys": {"box": {"box_int": {"key": "Ym94X2ludA==", "keyType": "AVMString", "valueType": "AVMUint64"}, "box_dynamic_bytes": {"key": "Yg==", "keyType": "AVMString", "valueType": "byte[]"}, "box_string": {"key": "Qk9YX0M=", "keyType": "AVMBytes", "valueType": "string"}, "box_bytes": {"key": "Ym94X2J5dGVz", "keyType": "AVMString", "valueType": "AVMBytes"}, "box_ref": {"key": "Ym94X3JlZg==", "keyType": "AVMString", "valueType": "AVMBytes"}}, "global": {}, "local": {}}, "maps": {"box": {"box_map": {"keyType": "AVMUint64", "valueType": "AVMString", "prefix": ""}, "box_map_struct": {"keyType": "uint64", "valueType": "UserStruct", "prefix": "dXNlcnM="}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {"UserStruct": [{"name": "name", "type": "string"}, {"name": "id", "type": "uint64"}, {"name": "asset", "type": "uint64"}]}, "byteCode": {"approval": "CiAEAQAgQCYQBGJsb2IEFR98dQdib3hfaW50AQAFQk9YX0MBYgFkDXVzZXJzAAAAAAAAAAAFaGVsbG8BMAdkZWZhdWx0BXVzZXJzCWJveF9ieXRlcwQAAjQyB2JveF9yZWYCAAMxG0ED4IIkBFiIuZgEGND74wQ68jcoBMuRGWkET8J54QSe9mlxBOibf28ETm8IngQSgG9rBHXtNIUEWOJ+rwSvkRWQBK6ErE0E7/W2VwQbja3gBGXDBj4EgnCFZQRHu3BDBDuMri8EeLBzTgSxPmTYBNZ3iesElOXT9ASobRaxBFTbYt4E7xVoMAR531f8BPdhJbkEIaym/wQE70lxBCPssywE7NHR+QR/otHABI7iw2QEmAIIjAQ2+GyONhoAjiQCzAKwApgCjAJ0Ak8CKgH4AeMB1wHLAbgBqAGSAXcBYQFVAUUBOQEoARcBAgD2AOoA3gDSAMYAsQCCAHYAagBRAEUALAAUAAIjQzEZFEQxGESABhUffHUAALAiQzEZFEQxGEQ2GgGIBjYrI08CVClMULAiQzEZFEQxGEQ2GgEXiAYTKyNPAlQpTFCwIkMxGRREMRhEiAX7IkMxGRREMRhEgA0VH3x1AAdib3hfaW50sCJDMRkURDEYRIgFniJDMRkURDEYRIgFECJDMRkURDEYRIgE9CsjTwRUKyNPBFQrI08EVEwjU08CIk8CVEwjU4ECTFQpTFCwIkMxGRREMRhEiATAKyNPAlQpTFCwIkMxGRREMRhEiASgIkMxGRREMRhEiARVIkMxGRREMRhEiAQiIkMxGRREMRhEiAPtIkMxGRREMRhEiAPEIkMxGRREMRhEiAOBKyNPAlQpTFCwIkMxGRREMRhEiANkFilMULAiQzEZFEQxGESIAz4WKUxQsCJDMRkURDEYRIgDFSJDMRkURDEYRDYaAReIAvwiQzEZFEQxGESIArkiQzEZFEQxGEQ2GgEXNhoCNhoDiAJeIkMxGRREMRhENhoBNhoCiAI1KyNPAlQpTFCwIkMxGRREMRhENhoBFzYaAlcCAIgCCSJDMRkURDEYRDYaAReIAe8iQzEZFEQxGEQ2GgGIAdUpTFCwIkMxGRREMRhEiAG3IkMxGRREMRhEiAGQIkMxGRREMRhEiAF2KyNPAlQpTFCwIkMxGRREMRhEiAFPTwIWSwIVFlcGAk8DUEyAAgAMUEsBFYEMCBZXBgJQTFBMUClMULAiQzEZFEQxGESIAQBLARUWVwYCTwJQKyNPA1QnD0xQTFApTFCwIkMxGRREMRhEiADBSwEVFlcGAk8CUCsjTwNUJw9MUExQKUxQsCJDMRkURDEYRIgAlkwWKyNPA1RQKUxQsCJDMRkURDEYRIgAayJDMRkURDEYRIgAVkkVFlcGAkxQKUxQsCJDMRkURDEYRDYaAReIADFJFRZXBgJMUClMULAiQzEZFEQxGESIABIWKUxQsCJDMRlA/R4xGBREIkMqvkwXTESJigEBi/8WvkSJIha+JwpOAk2JKCS5RDEAKLxEKL5LAk4CTRJEiSq+TBdMiYoAAiIWvklPAkxAAASAAIwBiwGLAE8DTwOJigACKCS5RCi+SU8CTEAABIAAjAGLAYsATwNPA4kqvkwXTEQnBb5EVwIAJwS+RIkiFr4nCk4CTScKEkQiiSq8SCq+TBeBKkxPAk2BKhJEKr5MF0wURBREiSIWvkUBFEQjFr1FAUSJigEBJwuL/1C+RImKAQCL/xYqTL+JigIAi/4WSbxIi/+/iYoCAScLi/5QSbxISYv/v75Ei/8SRCKJigMAi/0WKky/JwW8SCcFi/6/JwS8SCcEi/+/i/5XAgAnDLxIJwxMvycFvkQnBb5EI1lMI1kSRCq+TBdMRIEDCBYqTL+JKrxIJwW8SCcEvEgqvkwXgSpMTwJNgSoSRCcFvicNTgJNVwIAgAI0MhJEJwS+Jw1OAk0nDRJEiYoBAIv/FrxIiScOJLlIJw69RQFEJw68SCi+FESAABJEiYoAASMWSb1FAUAAAyNMiYsAvURMiSgkuUQovUSJJwe8SCcHgBwAEgAAAAAAAABGAAAAAAAAAAIACHRlc3ROYW1lvycHvUSBHBJEJwe9RIEcEkQiiSMWSbxISYAGSG1tbW1tv0m9RIEGEkS9RIEGEkSJKCS5RCi9RCUSRCgkuUQovUQlEkQoJLlEKL1EJRJEKCS5RCi9RCUSRIkoJLlEMQAyCigjSwO7KCNJSwPSKCUnCLsoI4FFukxPAlAnCFASRIkoJLlEKL1FAUQxADIKKCNLA7soI0lLA9IoJScIuygjgUW6SwFLA1AnCFASRCi8RFAoTL8ovUUBRCi9RCUSRIkqvkwXTESBChJEiSq9RQGJJwW9RQEnBL1FAScMvUUBiScJvEgnCYATVGVzdGluZyB0ZXN0aW5nIDEyM78nCb1ISSNLAk2BB0sCDE8CgQdPAk1LAQknCU4CuoAHVGVzdGluZxJEJwS8SCcEgAcABUhlbGxvvycEvUiBAksBDEsBgQJPAk2BCksCDE8CgQpPAk1LAQknBE4CuoAFSGVsbG8SRIknBoAEAAECA78nBr5EVwABK6hEJwa+RFcBAYABAahEJwa+RFcCAYABAqhEJwa+RFcDAYABA6hEiSNEiYoBAYv/Fr1FAYmKAQEnC4v/UL1FAYk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMzIgNjQKICAgIGJ5dGVjYmxvY2sgMHg2MjZjNmY2MiAweDE1MWY3Yzc1ICJib3hfaW50IiAweDAwIDB4NDI0ZjU4NWY0MyAiYiIgMHg2NCAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwIDB4Njg2NTZjNmM2ZiAiMCIgImRlZmF1bHQiICJ1c2VycyIgImJveF9ieXRlcyIgMHgwMDAyMzQzMiAiYm94X3JlZiIgMHgwMDAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A0MQogICAgcHVzaGJ5dGVzcyAweDU4ODhiOTk4IDB4MThkMGZiZTMgMHgzYWYyMzcyOCAweGNiOTExOTY5IDB4NGZjMjc5ZTEgMHg5ZWY2Njk3MSAweGU4OWI3ZjZmIDB4NGU2ZjA4OWUgMHgxMjgwNmY2YiAweDc1ZWQzNDg1IDB4NThlMjdlYWYgMHhhZjkxMTU5MCAweGFlODRhYzRkIDB4ZWZmNWI2NTcgMHgxYjhkYWRlMCAweDY1YzMwNjNlIDB4ODI3MDg1NjUgMHg0N2JiNzA0MyAweDNiOGNhZTJmIDB4NzhiMDczNGUgMHhiMTNlNjRkOCAweGQ2Nzc4OWViIDB4OTRlNWQzZjQgMHhhODZkMTZiMSAweDU0ZGI2MmRlIDB4ZWYxNTY4MzAgMHg3OWRmNTdmYyAweGY3NjEyNWI5IDB4MjFhY2E2ZmYgMHgwNGVmNDk3MSAweDIzZWNiMzJjIDB4ZWNkMWQxZjkgMHg3ZmEyZDFjMCAweDhlZTJjMzY0IDB4OTgwMjA4OGMgMHgzNmY4NmM4ZSAvLyBtZXRob2QgImdldF9ib3goKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2l0ZW1fYm94X21hcCh1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJnZXRfYm94X21hcCgpc3RyaW5nIiwgbWV0aG9kICJnZXRfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAibWF5YmVfYm94KCkodWludDY0LGJvb2wpIiwgbWV0aG9kICJtYXliZV9ib3hfbWFwKCkoc3RyaW5nLGJvb2wpIiwgbWV0aG9kICJtYXliZV9ib3hfcmVmKCkoYnl0ZVtdLGJvb2wpIiwgbWV0aG9kICJnZXRfYm94X2V4YW1wbGUoKSh1aW50NjQsYnl0ZVtdLHN0cmluZykiLCBtZXRob2QgImdldF9ib3hfbWFwX2V4YW1wbGUoKWJvb2wiLCBtZXRob2QgIm1heWJlX2JveF9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJtYXliZV9ib3hfbWFwX2V4YW1wbGUoKXZvaWQiLCBtZXRob2QgImdldF9ib3hfbWFwX3N0cnVjdCh1aW50NjQpKHN0cmluZyx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAic2V0X2JveCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0X2JveF9tYXAodWludDY0LHN0cmluZyl2b2lkIiwgbWV0aG9kICJzZXRfYm94X21hcF9zdHJ1Y3QodWludDY0LChzdHJpbmcsdWludDY0LHVpbnQ2NCkpYm9vbCIsIG1ldGhvZCAic2V0X2JveF9leGFtcGxlKHVpbnQ2NCxieXRlW10sc3RyaW5nKXZvaWQiLCBtZXRob2QgImRlbGV0ZV9ib3goKXZvaWQiLCBtZXRob2QgImRlbGV0ZV9ib3hfbWFwKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZWxldGVfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAiYm94X21hcF9sZW5ndGgoKXVpbnQ2NCIsIG1ldGhvZCAibGVuZ3RoX2JveF9yZWYoKXVpbnQ2NCIsIG1ldGhvZCAiYm94X21hcF9zdHJ1Y3RfbGVuZ3RoKClib29sIiwgbWV0aG9kICJib3hfbWFwX2xlbmd0aF9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJsZW5ndGhfYm94X3JlZl9leGFtcGxlKCl2b2lkIiwgbWV0aG9kICJleHRyYWN0X2JveF9yZWYoKXZvaWQiLCBtZXRob2QgIm1hbmlwdWxhdGVfYm94X3JlZigpdm9pZCIsIG1ldGhvZCAidmFsdWVfYm94KCl2b2lkIiwgbWV0aG9kICJleGlzdF9ib3goKWJvb2wiLCBtZXRob2QgImV4aXN0X2JveF9leGFtcGxlKCkoYm9vbCxib29sLGJvb2wpIiwgbWV0aG9kICJzbGljZV9ib3goKXZvaWQiLCBtZXRob2QgImFyYzRfYm94KCl2b2lkIiwgbWV0aG9kICJrZXlfYm94KClieXRlW10iLCBtZXRob2QgImtleV9ib3hfZXhhbXBsZSgpdm9pZCIsIG1ldGhvZCAiYm94X21hcF9leGlzdHModWludDY0KWJvb2wiLCBtZXRob2QgImJveF9tYXBfc3RydWN0X2V4aXN0cyh1aW50NjQpYm9vbCIsIG1ldGhvZCAia2V5X3ByZWZpeF9ib3hfbWFwKClieXRlW10iCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2dldF9ib3hfcm91dGVANSBtYWluX2dldF9pdGVtX2JveF9tYXBfcm91dGVANiBtYWluX2dldF9ib3hfbWFwX3JvdXRlQDcgbWFpbl9nZXRfYm94X3JlZl9yb3V0ZUA4IG1haW5fbWF5YmVfYm94X3JvdXRlQDkgbWFpbl9tYXliZV9ib3hfbWFwX3JvdXRlQDEwIG1haW5fbWF5YmVfYm94X3JlZl9yb3V0ZUAxMSBtYWluX2dldF9ib3hfZXhhbXBsZV9yb3V0ZUAxMiBtYWluX2dldF9ib3hfbWFwX2V4YW1wbGVfcm91dGVAMTMgbWFpbl9tYXliZV9ib3hfZXhhbXBsZV9yb3V0ZUAxNCBtYWluX21heWJlX2JveF9tYXBfZXhhbXBsZV9yb3V0ZUAxNSBtYWluX2dldF9ib3hfbWFwX3N0cnVjdF9yb3V0ZUAxNiBtYWluX3NldF9ib3hfcm91dGVAMTcgbWFpbl9zZXRfYm94X21hcF9yb3V0ZUAxOCBtYWluX3NldF9ib3hfbWFwX3N0cnVjdF9yb3V0ZUAxOSBtYWluX3NldF9ib3hfZXhhbXBsZV9yb3V0ZUAyMCBtYWluX2RlbGV0ZV9ib3hfcm91dGVAMjEgbWFpbl9kZWxldGVfYm94X21hcF9yb3V0ZUAyMiBtYWluX2RlbGV0ZV9ib3hfcmVmX3JvdXRlQDIzIG1haW5fYm94X21hcF9sZW5ndGhfcm91dGVAMjQgbWFpbl9sZW5ndGhfYm94X3JlZl9yb3V0ZUAyNSBtYWluX2JveF9tYXBfc3RydWN0X2xlbmd0aF9yb3V0ZUAyNiBtYWluX2JveF9tYXBfbGVuZ3RoX2V4YW1wbGVfcm91dGVAMjcgbWFpbl9sZW5ndGhfYm94X3JlZl9leGFtcGxlX3JvdXRlQDI4IG1haW5fZXh0cmFjdF9ib3hfcmVmX3JvdXRlQDI5IG1haW5fbWFuaXB1bGF0ZV9ib3hfcmVmX3JvdXRlQDMwIG1haW5fdmFsdWVfYm94X3JvdXRlQDMxIG1haW5fZXhpc3RfYm94X3JvdXRlQDMyIG1haW5fZXhpc3RfYm94X2V4YW1wbGVfcm91dGVAMzMgbWFpbl9zbGljZV9ib3hfcm91dGVAMzQgbWFpbl9hcmM0X2JveF9yb3V0ZUAzNSBtYWluX2tleV9ib3hfcm91dGVAMzYgbWFpbl9rZXlfYm94X2V4YW1wbGVfcm91dGVAMzcgbWFpbl9ib3hfbWFwX2V4aXN0c19yb3V0ZUAzOCBtYWluX2JveF9tYXBfc3RydWN0X2V4aXN0c19yb3V0ZUAzOSBtYWluX2tleV9wcmVmaXhfYm94X21hcF9yb3V0ZUA0MAoKbWFpbl9hZnRlcl9pZl9lbHNlQDQzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX2tleV9wcmVmaXhfYm94X21hcF9yb3V0ZUA0MDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozNDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDAKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3N0cnVjdF9leGlzdHNfcm91dGVAMzk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgYm94X21hcF9zdHJ1Y3RfZXhpc3RzCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX2V4aXN0c19yb3V0ZUAzODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzktMzQwCiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfTUFQCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzM5LTM0MAogICAgLy8gIyBleGFtcGxlOiBPVEhFUl9PUFNfQk9YX01BUAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGJveF9tYXBfZXhpc3RzCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9rZXlfYm94X2V4YW1wbGVfcm91dGVAMzc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBrZXlfYm94X2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fa2V5X2JveF9yb3V0ZUAzNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTAwMDc2MjZmNzg1ZjY5NmU3NAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzRfYm94X3JvdXRlQDM1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjNF9ib3gKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2xpY2VfYm94X3JvdXRlQDM0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc2xpY2VfYm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4aXN0X2JveF9leGFtcGxlX3JvdXRlQDMzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZXhpc3RfYm94X2V4YW1wbGUKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIHN3YXAKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDEKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBwdXNoaW50IDIgLy8gMgogICAgc3dhcAogICAgc2V0Yml0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2V4aXN0X2JveF9yb3V0ZUAzMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGV4aXN0X2JveAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmFsdWVfYm94X3JvdXRlQDMxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI5My0yOTQKICAgIC8vICMgZXhhbXBsZTogT1RIRVJfT1BTX0JPWAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdmFsdWVfYm94CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21hbmlwdWxhdGVfYm94X3JlZl9yb3V0ZUAzMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjctMjY4CiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYW5pcHVsYXRlX2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZXh0cmFjdF9ib3hfcmVmX3JvdXRlQDI5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MC0yNTEKICAgIC8vICMgZXhhbXBsZTogRVhUUkFDVF9CT1hfUkVGCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBleHRyYWN0X2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbGVuZ3RoX2JveF9yZWZfZXhhbXBsZV9yb3V0ZUAyODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGxlbmd0aF9ib3hfcmVmX2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF9sZW5ndGhfZXhhbXBsZV9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjEtMjIyCiAgICAvLyAjIGV4YW1wbGU6IExFTkdUSF9CT1hfU1RPUkFHRV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYm94X21hcF9sZW5ndGhfZXhhbXBsZQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3N0cnVjdF9sZW5ndGhfcm91dGVAMjY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBib3hfbWFwX3N0cnVjdF9sZW5ndGgKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2xlbmd0aF9ib3hfcmVmX3JvdXRlQDI1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbGVuZ3RoX2JveF9yZWYKICAgIGl0b2IKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF9sZW5ndGhfcm91dGVAMjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk1LTE5NgogICAgLy8gIyBleGFtcGxlOiBMRU5HVEhfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGJveF9tYXBfbGVuZ3RoCiAgICBpdG9iCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZV9ib3hfcmVmX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlX2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsZXRlX2JveF9tYXBfcm91dGVAMjI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZGVsZXRlX2JveF9tYXAKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsZXRlX2JveF9yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNjUtMTY2CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlX2JveAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfYm94X2V4YW1wbGVfcm91dGVAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTQzLTE0NAogICAgLy8gIyBleGFtcGxlOiBTRVRfQk9YX1NUT1JBR0VfRVhBTVBMRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0My0xNDQKICAgIC8vICMgZXhhbXBsZTogU0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBzZXRfYm94X2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2JveF9tYXBfc3RydWN0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2JveF9tYXBfcm91dGVAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1CiAgICAvLyBjbGFzcyBCb3hTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3hfbWFwCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9ib3hfcm91dGVAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTI2LTEyNwogICAgLy8gIyBleGFtcGxlOiBTRVRfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMjYtMTI3CiAgICAvLyAjIGV4YW1wbGU6IFNFVF9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9ib3gKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9tYXBfc3RydWN0X3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGdldF9ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZV9ib3hfbWFwX2V4YW1wbGVfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfbWFwX2V4YW1wbGUKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfYm94X2V4YW1wbGVfcm91dGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfZXhhbXBsZQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYm94X21hcF9leGFtcGxlX3JvdXRlQDEzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfYm94X21hcF9leGFtcGxlCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYm94X2V4YW1wbGVfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogR0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9ib3hfZXhhbXBsZQogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBkaWcgMgogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIHB1c2hieXRlcyAweDAwMGMKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgcHVzaGludCAxMiAvLyAxMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfYm94X3JlZl9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWF5YmVfYm94X3JlZgogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgMTUgLy8gMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXliZV9ib3hfbWFwX3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3hfbWFwCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBieXRlYyAxNSAvLyAweDAwMDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2JveF9yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9ib3gKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9yZWZfcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveF9yZWYKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9tYXBfcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveF9tYXAKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9pdGVtX2JveF9tYXBfcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNQogICAgLy8gY2xhc3MgQm94U3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2l0ZW1fYm94X21hcAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2JveF9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQwLTQxCiAgICAvLyAjIGV4YW1wbGU6IEdFVF9CT1hfU1RPUkFHRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X2JveAogICAgaXRvYgogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUKICAgIC8vIGNsYXNzIEJveFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VANDMKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2JveCgpIC0+IHVpbnQ2NDoKZ2V0X2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MwogICAgLy8gcmV0dXJuIHNlbGYuYm94X2ludC52YWx1ZQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5nZXRfaXRlbV9ib3hfbWFwKGtleTogdWludDY0KSAtPiBieXRlczoKZ2V0X2l0ZW1fYm94X21hcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo0NS00NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZ2V0X2l0ZW1fYm94X21hcChzZWxmLCBrZXk6IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDcKICAgIC8vIHJldHVybiBzZWxmLmJveF9tYXBba2V5XQogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwIGVudHJ5IGV4aXN0cwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2JveF9tYXAoKSAtPiBieXRlczoKZ2V0X2JveF9tYXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTEKICAgIC8vIGtleV8xID0gVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjUyCiAgICAvLyByZXR1cm4gc2VsZi5ib3hfbWFwLmdldChrZXlfMSwgZGVmYXVsdD1TdHJpbmcoImRlZmF1bHQiKSkKICAgIGl0b2IKICAgIGJveF9nZXQKICAgIGJ5dGVjIDEwIC8vICJkZWZhdWx0IgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5nZXRfYm94X3JlZigpIC0+IHZvaWQ6CmdldF9ib3hfcmVmOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU2CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NTcKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1OAogICAgLy8gc2VuZGVyX2J5dGVzID0gVHhuLnNlbmRlci5ieXRlcwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU2CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjAKICAgIC8vIGFzc2VydCBib3hfcmVmLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo1NgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjYyCiAgICAvLyBhc3NlcnQgYm94X3JlZi5nZXQoZGVmYXVsdD1zZW5kZXJfYnl0ZXMpID09IHNlbmRlcl9ieXRlcwogICAgYm94X2dldAogICAgZGlnIDIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UubWF5YmVfYm94KCkgLT4gdWludDY0LCB1aW50NjQ6Cm1heWJlX2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo2NgogICAgLy8gYm94X2ludF92YWx1ZSwgYm94X2ludF9leGlzdHMgPSBzZWxmLmJveF9pbnQubWF5YmUoKQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo2NwogICAgLy8gcmV0dXJuIGJveF9pbnRfdmFsdWUsIGJveF9pbnRfZXhpc3RzCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5tYXliZV9ib3hfbWFwKCkgLT4gYnl0ZXMsIHVpbnQ2NDoKbWF5YmVfYm94X21hcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo2OS03MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgbWF5YmVfYm94X21hcChzZWxmKSAtPiB0dXBsZVtTdHJpbmcsIGJvb2xdOgogICAgcHJvdG8gMCAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NzEKICAgIC8vIGtleV8xID0gVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjcyCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gc2VsZi5ib3hfbWFwLm1heWJlKGtleV8xKQogICAgaXRvYgogICAgYm94X2dldAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3MwogICAgLy8gaWYgbm90IGV4aXN0czoKICAgIGJueiBtYXliZV9ib3hfbWFwX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyB2YWx1ZSA9IFN0cmluZygiIikKICAgIHB1c2hieXRlcyAiIgogICAgZnJhbWVfYnVyeSAxCgptYXliZV9ib3hfbWFwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3NQogICAgLy8gcmV0dXJuIHZhbHVlLCBleGlzdHMKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLm1heWJlX2JveF9yZWYoKSAtPiBieXRlcywgdWludDY0OgptYXliZV9ib3hfcmVmOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc3LTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYXliZV9ib3hfcmVmKHNlbGYpIC0+IHR1cGxlW0J5dGVzLCBib29sXToKICAgIHByb3RvIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc5CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODAKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo3OQogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgyCiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gYm94X3JlZi5tYXliZSgpCiAgICBib3hfZ2V0CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBpZiBub3QgZXhpc3RzOgogICAgYm56IG1heWJlX2JveF9yZWZfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODQKICAgIC8vIHZhbHVlID0gQnl0ZXMoYiIiKQogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDEKCm1heWJlX2JveF9yZWZfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg1CiAgICAvLyByZXR1cm4gdmFsdWUsIGV4aXN0cwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2JveF9leGFtcGxlKCkgLT4gdWludDY0LCBieXRlcywgYnl0ZXM6CmdldF9ib3hfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo5MwogICAgLy8gc2VsZi5ib3hfaW50LnZhbHVlLAogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTQKICAgIC8vIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubmF0aXZlLAogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9keW5hbWljX2J5dGVzIGV4aXN0cwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTo5NQogICAgLy8gc2VsZi5ib3hfc3RyaW5nLnZhbHVlLAogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9zdHJpbmcgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTItOTYKICAgIC8vIHJldHVybiAoCiAgICAvLyAgICAgc2VsZi5ib3hfaW50LnZhbHVlLAogICAgLy8gICAgIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubmF0aXZlLAogICAgLy8gICAgIHNlbGYuYm94X3N0cmluZy52YWx1ZSwKICAgIC8vICkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmdldF9ib3hfbWFwX2V4YW1wbGUoKSAtPiB1aW50NjQ6CmdldF9ib3hfbWFwX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTAwCiAgICAvLyBrZXlfMSA9IFVJbnQ2NCgxKQogICAgaW50Y18wIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDEKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXAuZ2V0KGtleV8xLCBkZWZhdWx0PVN0cmluZygiZGVmYXVsdCIpKSA9PSBTdHJpbmcoImRlZmF1bHQiKQogICAgaXRvYgogICAgYm94X2dldAogICAgYnl0ZWMgMTAgLy8gImRlZmF1bHQiCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIGJ5dGVjIDEwIC8vICJkZWZhdWx0IgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5tYXliZV9ib3hfZXhhbXBsZSgpIC0+IHZvaWQ6Cm1heWJlX2JveF9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwNgogICAgLy8gZGVsIHNlbGYuYm94X2ludC52YWx1ZQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwNwogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2ludC5nZXQoZGVmYXVsdD1VSW50NjQoNDIpKSA9PSA0MgogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHB1c2hpbnQgNDIgLy8gNDIKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBwdXNoaW50IDQyIC8vIDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA4CiAgICAvLyBib3hfaW50X3ZhbHVlLCBib3hfaW50X2V4aXN0cyA9IHNlbGYuYm94X2ludC5tYXliZSgpCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwOQogICAgLy8gYXNzZXJ0IG5vdCBib3hfaW50X2V4aXN0cwogICAgc3dhcAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTEwCiAgICAvLyBhc3NlcnQgYm94X2ludF92YWx1ZSA9PSAwCiAgICAhCiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLm1heWJlX2JveF9tYXBfZXhhbXBsZSgpIC0+IHZvaWQ6Cm1heWJlX2JveF9tYXBfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTUKICAgIC8vIGtleV8xID0gVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExNgogICAgLy8gdmFsdWUsIGV4aXN0cyA9IHNlbGYuYm94X21hcC5tYXliZShrZXlfMSkKICAgIGl0b2IKICAgIGJveF9nZXQKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExNwogICAgLy8gYXNzZXJ0IG5vdCBleGlzdHMKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExNAogICAgLy8ga2V5XzAgPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTE4CiAgICAvLyBhc3NlcnQga2V5XzAgaW4gc2VsZi5ib3hfbWFwCiAgICBpdG9iCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZ2V0X2JveF9tYXBfc3RydWN0KGtleTogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfYm94X21hcF9zdHJ1Y3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTIwLTEyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZ2V0X2JveF9tYXBfc3RydWN0KHNlbGYsIGtleTogYXJjNC5VSW50NjQpIC0+IFVzZXJTdHJ1Y3Q6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMjIKICAgIC8vIHJldHVybiBzZWxmLmJveF9tYXBfc3RydWN0W2tleV0KICAgIGJ5dGVjIDExIC8vICJ1c2VycyIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwX3N0cnVjdCBlbnRyeSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnNldF9ib3godmFsdWVfaW50OiB1aW50NjQpIC0+IHZvaWQ6CnNldF9ib3g6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTI2LTEyOAogICAgLy8gIyBleGFtcGxlOiBTRVRfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9ib3goc2VsZiwgdmFsdWVfaW50OiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMjkKICAgIC8vIHNlbGYuYm94X2ludC52YWx1ZSA9IHZhbHVlX2ludAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBieXRlY18yIC8vICJib3hfaW50IgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2Uuc2V0X2JveF9tYXAoa2V5OiB1aW50NjQsIHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2JveF9tYXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTMxLTEzMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgc2V0X2JveF9tYXAoc2VsZiwga2V5OiBVSW50NjQsIHZhbHVlOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMzMKICAgIC8vIHNlbGYuYm94X21hcFtrZXldID0gdmFsdWUKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2Uuc2V0X2JveF9tYXBfc3RydWN0KGtleTogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gdWludDY0OgpzZXRfYm94X21hcF9zdHJ1Y3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTM1LTEzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgc2V0X2JveF9tYXBfc3RydWN0KHNlbGYsIGtleTogYXJjNC5VSW50NjQsIHZhbHVlOiBVc2VyU3RydWN0KSAtPiBib29sOgogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTM3CiAgICAvLyBzZWxmLmJveF9tYXBfc3RydWN0W2tleV0gPSB2YWx1ZS5jb3B5KCkKICAgIGJ5dGVjIDExIC8vICJ1c2VycyIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxMzgKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXBfc3RydWN0W2tleV0gPT0gdmFsdWUKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9tYXBfc3RydWN0IGVudHJ5IGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTM5CiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnNldF9ib3hfZXhhbXBsZSh2YWx1ZV9pbnQ6IHVpbnQ2NCwgdmFsdWVfZGJ5dGVzOiBieXRlcywgdmFsdWVfc3RyaW5nOiBieXRlcykgLT4gdm9pZDoKc2V0X2JveF9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0My0xNTAKICAgIC8vICMgZXhhbXBsZTogU0VUX0JPWF9TVE9SQUdFX0VYQU1QTEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9ib3hfZXhhbXBsZSgKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgIHZhbHVlX2ludDogVUludDY0LAogICAgLy8gICAgIHZhbHVlX2RieXRlczogYXJjNC5EeW5hbWljQnl0ZXMsCiAgICAvLyAgICAgdmFsdWVfc3RyaW5nOiBhcmM0LlN0cmluZywKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDMgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gc2VsZi5ib3hfaW50LnZhbHVlID0gdmFsdWVfaW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTUyCiAgICAvLyBzZWxmLmJveF9keW5hbWljX2J5dGVzLnZhbHVlID0gdmFsdWVfZGJ5dGVzLmNvcHkoKQogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1MwogICAgLy8gc2VsZi5ib3hfc3RyaW5nLnZhbHVlID0gdmFsdWVfc3RyaW5nCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTU0CiAgICAvLyBzZWxmLmJveF9ieXRlcy52YWx1ZSA9IHZhbHVlX2RieXRlcy5uYXRpdmUKICAgIGZyYW1lX2RpZyAtMgogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDEyIC8vICJib3hfYnl0ZXMiCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJ5dGVjIDEyIC8vICJib3hfYnl0ZXMiCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTU2CiAgICAvLyBieXRlX3ZhbHVlID0gc2VsZi5ib3hfZHluYW1pY19ieXRlcy52YWx1ZS5jb3B5KCkKICAgIGJ5dGVjIDUgLy8gImIiCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfZHluYW1pY19ieXRlcyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNTgKICAgIC8vIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubGVuZ3RoID09IGJ5dGVfdmFsdWUubGVuZ3RoCiAgICBieXRlYyA1IC8vICJiIgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMgZXhpc3RzCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNTctMTU5CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUubGVuZ3RoID09IGJ5dGVfdmFsdWUubGVuZ3RoCiAgICAvLyApLCAiZGlyZWN0IHJlZmVyZW5jZSBzaG91bGQgbWF0Y2ggY29weSIKICAgIGFzc2VydCAvLyBkaXJlY3QgcmVmZXJlbmNlIHNob3VsZCBtYXRjaCBjb3B5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTYxCiAgICAvLyBzZWxmLmJveF9pbnQudmFsdWUgKz0gMwogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICBwdXNoaW50IDMgLy8gMwogICAgKwogICAgaXRvYgogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmRlbGV0ZV9ib3goKSAtPiB2b2lkOgpkZWxldGVfYm94OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gZGVsIHNlbGYuYm94X2ludC52YWx1ZQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gZGVsIHNlbGYuYm94X2R5bmFtaWNfYnl0ZXMudmFsdWUKICAgIGJ5dGVjIDUgLy8gImIiCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzAKICAgIC8vIGRlbCBzZWxmLmJveF9zdHJpbmcudmFsdWUKICAgIGJ5dGVjIDQgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzIKICAgIC8vIGFzc2VydCBzZWxmLmJveF9pbnQuZ2V0KGRlZmF1bHQ9VUludDY0KDQyKSkgPT0gNDIKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBwdXNoaW50IDQyIC8vIDQyCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgcHVzaGludCA0MiAvLyA0MgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3NAogICAgLy8gc2VsZi5ib3hfZHluYW1pY19ieXRlcy5nZXQoZGVmYXVsdD1hcmM0LkR5bmFtaWNCeXRlcyhiIjQyIikpLm5hdGl2ZSA9PSBiIjQyIgogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9nZXQKICAgIGJ5dGVjIDEzIC8vIDB4MDAwMjM0MzIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgZXh0cmFjdCAyIDAKICAgIHB1c2hieXRlcyAweDM0MzIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTczLTE3NQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmJveF9keW5hbWljX2J5dGVzLmdldChkZWZhdWx0PWFyYzQuRHluYW1pY0J5dGVzKGIiNDIiKSkubmF0aXZlID09IGIiNDIiCiAgICAvLyApCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzYKICAgIC8vIGFzc2VydCBzZWxmLmJveF9zdHJpbmcuZ2V0KGRlZmF1bHQ9YXJjNC5TdHJpbmcoIjQyIikpID09ICI0MiIKICAgIGJ5dGVjIDQgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfZ2V0CiAgICBieXRlYyAxMyAvLyAweDAwMDIzNDMyCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIGJ5dGVjIDEzIC8vIDB4MDAwMjM0MzIKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmRlbGV0ZV9ib3hfbWFwKGtleTogdWludDY0KSAtPiB2b2lkOgpkZWxldGVfYm94X21hcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzgtMTc5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBkZWxldGVfYm94X21hcChzZWxmLCBrZXk6IFVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4MAogICAgLy8gZGVsIHNlbGYuYm94X21hcFtrZXldCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJveF9kZWwKICAgIHBvcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZGVsZXRlX2JveF9yZWYoKSAtPiB2b2lkOgpkZWxldGVfYm94X3JlZjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToxODUKICAgIC8vIHNlbGYuYm94X3JlZi5jcmVhdGUoc2l6ZT1VSW50NjQoMzIpKQogICAgYnl0ZWMgMTQgLy8gImJveF9yZWYiCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4NgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X3JlZiwgImhhcyBkYXRhIgogICAgYnl0ZWMgMTQgLy8gImJveF9yZWYiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBoYXMgZGF0YQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4OAogICAgLy8gc2VsZi5ib3hfcmVmLmRlbGV0ZSgpCiAgICBieXRlYyAxNCAvLyAiYm94X3JlZiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4NAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4OQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IGJveF9yZWYubWF5YmUoKQogICAgYm94X2dldAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gYXNzZXJ0IG5vdCBleGlzdHMKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5MQogICAgLy8gYXNzZXJ0IHZhbHVlID09IGIiIgogICAgcHVzaGJ5dGVzIDB4CiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX2xlbmd0aCgpIC0+IHVpbnQ2NDoKYm94X21hcF9sZW5ndGg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk1LTE5NwogICAgLy8gIyBleGFtcGxlOiBMRU5HVEhfQk9YX1NUT1JBR0UKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfbGVuZ3RoKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5OAogICAgLy8ga2V5XzAgPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk5CiAgICAvLyBpZiBrZXlfMCBub3QgaW4gc2VsZi5ib3hfbWFwOgogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBib3hfbWFwX2xlbmd0aF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDAKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCmJveF9tYXBfbGVuZ3RoX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDEKICAgIC8vIHJldHVybiBzZWxmLmJveF9tYXAubGVuZ3RoKGtleV8wKQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9tYXAgZW50cnkgZXhpc3RzCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5sZW5ndGhfYm94X3JlZigpIC0+IHVpbnQ2NDoKbGVuZ3RoX2JveF9yZWY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA1CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA2CiAgICAvLyBhc3NlcnQgYm94X3JlZi5jcmVhdGUoc2l6ZT0zMikKICAgIGludGNfMiAvLyAzMgogICAgYm94X2NyZWF0ZQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA1CiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA3CiAgICAvLyByZXR1cm4gYm94X3JlZi5sZW5ndGgKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX3N0cnVjdF9sZW5ndGgoKSAtPiB1aW50NjQ6CmJveF9tYXBfc3RydWN0X2xlbmd0aDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMTQKICAgIC8vIHNlbGYuYm94X21hcF9zdHJ1Y3Rba2V5XzBdID0gdmFsdWUuY29weSgpCiAgICBieXRlYyA3IC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgNyAvLyAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjEyCiAgICAvLyB2YWx1ZSA9IFVzZXJTdHJ1Y3QoYXJjNC5TdHJpbmcoInRlc3ROYW1lIiksIGFyYzQuVUludDY0KDcwKSwgYXJjNC5VSW50NjQoMikpCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDA0NjAwMDAwMDAwMDAwMDAwMDIwMDA4NzQ2NTczNzQ0ZTYxNmQ2NQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIxNAogICAgLy8gc2VsZi5ib3hfbWFwX3N0cnVjdFtrZXlfMF0gPSB2YWx1ZS5jb3B5KCkKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMTUKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXBfc3RydWN0W2tleV8wXS5ieXRlcy5sZW5ndGggPT0gdmFsdWUuYnl0ZXMubGVuZ3RoCiAgICBieXRlYyA3IC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9tYXBfc3RydWN0IGVudHJ5IGV4aXN0cwogICAgcHVzaGludCAyOCAvLyAyOAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X21hcF9zdHJ1Y3QubGVuZ3RoKGtleV8wKSA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGJ5dGVjIDcgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcF9zdHJ1Y3QgZW50cnkgZXhpc3RzCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjE3CiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmJveF9tYXBfbGVuZ3RoX2V4YW1wbGUoKSAtPiB2b2lkOgpib3hfbWFwX2xlbmd0aF9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyNAogICAgLy8ga2V5XzAgPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI2CiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjUKICAgIC8vIHZhbHVlID0gU3RyaW5nKCJIbW1tbW0iKQogICAgcHVzaGJ5dGVzICJIbW1tbW0iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI2CiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjcKICAgIC8vIGFzc2VydCBzZWxmLmJveF9tYXBba2V5XzBdLmJ5dGVzLmxlbmd0aCA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGR1cAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X21hcCBlbnRyeSBleGlzdHMKICAgIHB1c2hpbnQgNiAvLyA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI4CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfbWFwLmxlbmd0aChrZXlfMCkgPT0gdmFsdWUuYnl0ZXMubGVuZ3RoCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfbWFwIGVudHJ5IGV4aXN0cwogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmxlbmd0aF9ib3hfcmVmX2V4YW1wbGUoKSAtPiB2b2lkOgpsZW5ndGhfYm94X3JlZl9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIzMgogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9ImJsb2IiKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzMKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzIKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PSJibG9iIikKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjM0CiAgICAvLyBhc3NlcnQgYm94X3JlZi5sZW5ndGggPT0gNjQKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICBpbnRjXzMgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzYKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PWIiYmxvYiIpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzcKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzYKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PWIiYmxvYiIpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzgKICAgIC8vIGFzc2VydCBib3hfcmVmLmxlbmd0aCA9PSA2NAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIEJveFJlZiBleGlzdHMKICAgIGludGNfMyAvLyA2NAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9Qnl0ZXMoYiJibG9iIikpCiAgICBieXRlY18wIC8vIDB4NjI2YzZmNjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDEKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PUJ5dGVzKGIiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAweDYyNmM2ZjYyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQyCiAgICAvLyBhc3NlcnQgYm94X3JlZi5sZW5ndGggPT0gNjQKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICBpbnRjXzMgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDQKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDUKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDQKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDYKICAgIC8vIGFzc2VydCBib3hfcmVmLmxlbmd0aCA9PSA2NAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIEJveFJlZiBleGlzdHMKICAgIGludGNfMyAvLyA2NAogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2UuZXh0cmFjdF9ib3hfcmVmKCkgLT4gdm9pZDoKZXh0cmFjdF9ib3hfcmVmOgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NAogICAgLy8gYXNzZXJ0IGJveF9yZWYuY3JlYXRlKHNpemU9MzIpCiAgICBpbnRjXzIgLy8gMzIKICAgIGJveF9jcmVhdGUKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gc2VuZGVyX2J5dGVzID0gVHhuLnNlbmRlci5ieXRlcwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NwogICAgLy8gYXBwX2FkZHJlc3MgPSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmJ5dGVzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYm94X3JlZi5yZXBsYWNlKDAsIHNlbmRlcl9ieXRlcykKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMwogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTMKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjAKICAgIC8vIGJveF9yZWYuc3BsaWNlKDAsIDAsIGFwcF9hZGRyZXNzKQogICAgaW50Y18xIC8vIDAKICAgIGR1cAogICAgZGlnIDMKICAgIGJveF9zcGxpY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTMKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjEKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIGludGNfMyAvLyA2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OAogICAgLy8gdmFsdWVfMyA9IEJ5dGVzKGIiaGVsbG8iKQogICAgYnl0ZWMgOCAvLyAweDY4NjU2YzZjNmYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjEKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUzCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjYyCiAgICAvLyBwcmVmaXggPSBib3hfcmVmLmV4dHJhY3QoMCwgMzIgKiAyICsgdmFsdWVfMy5sZW5ndGgpCiAgICBpbnRjXzEgLy8gMAogICAgcHVzaGludCA2OSAvLyA2OQogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjMKICAgIC8vIGFzc2VydCBwcmVmaXggPT0gYXBwX2FkZHJlc3MgKyBzZW5kZXJfYnl0ZXMgKyB2YWx1ZV8zCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OAogICAgLy8gdmFsdWVfMyA9IEJ5dGVzKGIiaGVsbG8iKQogICAgYnl0ZWMgOCAvLyAweDY4NjU2YzZjNmYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjMKICAgIC8vIGFzc2VydCBwcmVmaXggPT0gYXBwX2FkZHJlc3MgKyBzZW5kZXJfYnl0ZXMgKyB2YWx1ZV8zCiAgICBjb25jYXQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLm1hbmlwdWxhdGVfYm94X3JlZigpIC0+IHZvaWQ6Cm1hbmlwdWxhdGVfYm94X3JlZjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzEKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPTMyKQogICAgaW50Y18yIC8vIDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzIKICAgIC8vIGFzc2VydCBib3hfcmVmLCAiaGFzIGRhdGEiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBoYXMgZGF0YQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3NC0yNzUKICAgIC8vICMgbWFuaXB1bGF0ZSBkYXRhCiAgICAvLyBzZW5kZXJfYnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc2CiAgICAvLyBhcHBfYWRkcmVzcyA9IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuYnl0ZXMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc4CiAgICAvLyBib3hfcmVmLnJlcGxhY2UoMCwgc2VuZGVyX2J5dGVzKQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAzCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gYm94X3JlZi5zcGxpY2UoMCwgMCwgYXBwX2FkZHJlc3MpCiAgICBpbnRjXzEgLy8gMAogICAgZHVwCiAgICBkaWcgMwogICAgYm94X3NwbGljZQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MAogICAgLy8gYm94X3JlZi5yZXBsYWNlKDY0LCB2YWx1ZV8zKQogICAgaW50Y18zIC8vIDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc3CiAgICAvLyB2YWx1ZV8zID0gQnl0ZXMoYiJoZWxsbyIpCiAgICBieXRlYyA4IC8vIDB4Njg2NTZjNmM2ZgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MAogICAgLy8gYm94X3JlZi5yZXBsYWNlKDY0LCB2YWx1ZV8zKQogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyODEKICAgIC8vIHByZWZpeCA9IGJveF9yZWYuZXh0cmFjdCgwLCAzMiAqIDIgKyB2YWx1ZV8zLmxlbmd0aCkKICAgIGludGNfMSAvLyAwCiAgICBwdXNoaW50IDY5IC8vIDY5CiAgICBib3hfZXh0cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MgogICAgLy8gYXNzZXJ0IHByZWZpeCA9PSBhcHBfYWRkcmVzcyArIHNlbmRlcl9ieXRlcyArIHZhbHVlXzMKICAgIGRpZyAxCiAgICBkaWcgMwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc3CiAgICAvLyB2YWx1ZV8zID0gQnl0ZXMoYiJoZWxsbyIpCiAgICBieXRlYyA4IC8vIDB4Njg2NTZjNmM2ZgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MgogICAgLy8gYXNzZXJ0IHByZWZpeCA9PSBhcHBfYWRkcmVzcyArIHNlbmRlcl9ieXRlcyArIHZhbHVlXzMKICAgIGNvbmNhdAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4NAogICAgLy8gYXNzZXJ0IGJveF9yZWYuZGVsZXRlKCkKICAgIGJveF9kZWwKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4NwogICAgLy8gYm94X3JlZi5wdXQoc2VuZGVyX2J5dGVzICsgYXBwX2FkZHJlc3MpCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIGJveF9yZWYgPSBCb3hSZWYoa2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWNfMCAvLyAiYmxvYiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyODcKICAgIC8vIGJveF9yZWYucHV0KHNlbmRlcl9ieXRlcyArIGFwcF9hZGRyZXNzKQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gYm94X3JlZiA9IEJveFJlZihrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlY18wIC8vICJibG9iIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4OAogICAgLy8gYXNzZXJ0IGJveF9yZWYsICJCbG9iIGV4aXN0cyIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJsb2IgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjcwCiAgICAvLyBib3hfcmVmID0gQm94UmVmKGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjXzAgLy8gImJsb2IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjg5CiAgICAvLyBhc3NlcnQgYm94X3JlZi5sZW5ndGggPT0gNjQKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBCb3hSZWYgZXhpc3RzCiAgICBpbnRjXzMgLy8gNjQKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLnZhbHVlX2JveCgpIC0+IHZvaWQ6CnZhbHVlX2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTYKICAgIC8vIGFzc2VydCBzZWxmLmJveF9pbnQudmFsdWUgPT0gVUludDY0KDEwKQogICAgYnl0ZWNfMiAvLyAiYm94X2ludCIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9pbnQgZXhpc3RzCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5leGlzdF9ib3goKSAtPiB1aW50NjQ6CmV4aXN0X2JveDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDAKICAgIC8vIHJldHVybiBib29sKHNlbGYuYm94X2ludCkKICAgIGJ5dGVjXzIgLy8gImJveF9pbnQiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmV4aXN0X2JveF9leGFtcGxlKCkgLT4gdWludDY0LCB1aW50NjQsIHVpbnQ2NDoKZXhpc3RfYm94X2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzA0CiAgICAvLyByZXR1cm4gYm9vbChzZWxmLmJveF9keW5hbWljX2J5dGVzKSwgYm9vbChzZWxmLmJveF9zdHJpbmcpLCBib29sKHNlbGYuYm94X2J5dGVzKQogICAgYnl0ZWMgNSAvLyAiYiIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnl0ZWMgNCAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnl0ZWMgMTIgLy8gImJveF9ieXRlcyIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveFN0b3JhZ2Uuc2xpY2VfYm94KCkgLT4gdm9pZDoKc2xpY2VfYm94OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOAogICAgLy8gYm94XzAgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoIjAiKSkKICAgIGJ5dGVjIDkgLy8gIjAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzA5CiAgICAvLyBib3hfMC52YWx1ZSA9IEJ5dGVzKGIiVGVzdGluZyB0ZXN0aW5nIDEyMyIpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDgKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyA5IC8vICIwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOQogICAgLy8gYm94XzAudmFsdWUgPSBCeXRlcyhiIlRlc3RpbmcgdGVzdGluZyAxMjMiKQogICAgcHVzaGJ5dGVzIDB4NTQ2NTczNzQ2OTZlNjcyMDc0NjU3Mzc0Njk2ZTY3MjAzMTMyMzMKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDgKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyA5IC8vICIwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxMAogICAgLy8gYXNzZXJ0IGJveF8wLnZhbHVlWzA6N10gPT0gYiJUZXN0aW5nIgogICAgYm94X2xlbgogICAgcG9wCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBkaWcgMgogICAgc2VsZWN0CiAgICBwdXNoaW50IDcgLy8gNwogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA3IC8vIDcKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwOAogICAgLy8gYm94XzAgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoIjAiKSkKICAgIGJ5dGVjIDkgLy8gIjAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzEwCiAgICAvLyBhc3NlcnQgYm94XzAudmFsdWVbMDo3XSA9PSBiIlRlc3RpbmciCiAgICBjb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgcHVzaGJ5dGVzIDB4NTQ2NTczNzQ2OTZlNjcKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTIKICAgIC8vIHNlbGYuYm94X3N0cmluZy52YWx1ZSA9IGFyYzQuU3RyaW5nKCJIZWxsbyIpCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgcHVzaGJ5dGVzIDB4MDAwNTQ4NjU2YzZjNmYKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTMKICAgIC8vIGFzc2VydCBzZWxmLmJveF9zdHJpbmcudmFsdWUuYnl0ZXNbMjoxMF0gPT0gYiJIZWxsbyIKICAgIGJ5dGVjIDQgLy8gMHg0MjRmNTg1ZjQzCiAgICBib3hfbGVuCiAgICBwb3AKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBkaWcgMQogICAgPAogICAgZGlnIDEKICAgIHB1c2hpbnQgMiAvLyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgcHVzaGludCAxMCAvLyAxMAogICAgZGlnIDIKICAgIDwKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAxMCAvLyAxMAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAxCiAgICAtCiAgICBieXRlYyA0IC8vIDB4NDI0ZjU4NWY0MwogICAgY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIHB1c2hieXRlcyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hTdG9yYWdlLmFyYzRfYm94KCkgLT4gdm9pZDoKYXJjNF9ib3g6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzE3CiAgICAvLyBib3hfYnl0ZXMgPSBCb3goU3RhdGljSW50cywga2V5PUJ5dGVzKGIiZCIpKQogICAgYnl0ZWMgNiAvLyAweDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzE4LTMyMAogICAgLy8gYm94X2J5dGVzLnZhbHVlID0gU3RhdGljSW50cygKICAgIC8vICAgICBhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDEpLCBhcmM0LlVJbnQ4KDIpLCBhcmM0LlVJbnQ4KDMpCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAxMDIwMwogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gYm94X2J5dGVzID0gQm94KFN0YXRpY0ludHMsIGtleT1CeXRlcyhiImQiKSkKICAgIGJ5dGVjIDYgLy8gMHg2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyMgogICAgLy8gYXNzZXJ0IGJveF9ieXRlcy52YWx1ZVswXSA9PSAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94IGV4aXN0cwogICAgZXh0cmFjdCAwIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzE3CiAgICAvLyBib3hfYnl0ZXMgPSBCb3goU3RhdGljSW50cywga2V5PUJ5dGVzKGIiZCIpKQogICAgYnl0ZWMgNiAvLyAweDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzIzCiAgICAvLyBhc3NlcnQgYm94X2J5dGVzLnZhbHVlWzFdID09IDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3ggZXhpc3RzCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweDAxCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxNwogICAgLy8gYm94X2J5dGVzID0gQm94KFN0YXRpY0ludHMsIGtleT1CeXRlcyhiImQiKSkKICAgIGJ5dGVjIDYgLy8gMHg2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyNAogICAgLy8gYXNzZXJ0IGJveF9ieXRlcy52YWx1ZVsyXSA9PSAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgQm94IGV4aXN0cwogICAgZXh0cmFjdCAyIDEgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoYnl0ZXMgMHgwMgogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTcKICAgIC8vIGJveF9ieXRlcyA9IEJveChTdGF0aWNJbnRzLCBrZXk9Qnl0ZXMoYiJkIikpCiAgICBieXRlYyA2IC8vIDB4NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMjUKICAgIC8vIGFzc2VydCBib3hfYnl0ZXMudmFsdWVbM10gPT0gMwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIEJveCBleGlzdHMKICAgIGV4dHJhY3QgMyAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcHVzaGJ5dGVzIDB4MDMKICAgIGI9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5rZXlfYm94X2V4YW1wbGUoKSAtPiB2b2lkOgprZXlfYm94X2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzM0CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfc3RyaW5nLmtleSA9PSBiIkJPWF9TVFJJTkciLCAiYm94IHN0cmluZyBrZXkgb2siCiAgICBpbnRjXzEgLy8gMAogICAgYXNzZXJ0IC8vIGJveCBzdHJpbmcga2V5IG9rCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX2V4aXN0cyhrZXk6IHVpbnQ2NCkgLT4gdWludDY0Ogpib3hfbWFwX2V4aXN0czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzktMzQxCiAgICAvLyAjIGV4YW1wbGU6IE9USEVSX09QU19CT1hfTUFQCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfbWFwX2V4aXN0cyhzZWxmLCBrZXk6IFVJbnQ2NCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2JveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM0MgogICAgLy8gcmV0dXJuIGtleSBpbiBzZWxmLmJveF9tYXAKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94U3RvcmFnZS5ib3hfbWFwX3N0cnVjdF9leGlzdHMoa2V5OiBieXRlcykgLT4gdWludDY0Ogpib3hfbWFwX3N0cnVjdF9leGlzdHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQ0LTM0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYm94X21hcF9zdHJ1Y3RfZXhpc3RzKHNlbGYsIGtleTogYXJjNC5VSW50NjQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9ib3hfc3RvcmFnZS9jb250cmFjdC5weTozNDYKICAgIC8vIHJldHVybiBrZXkgaW4gc2VsZi5ib3hfbWFwX3N0cnVjdAogICAgYnl0ZWMgMTEgLy8gInVzZXJzIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [1749], "errorMessage": "Blob exists"}, {"pc": [1932, 1942, 1954, 1966], "errorMessage": "Index access is out of bounds"}, {"pc": [370, 388, 412, 437, 449, 474, 486, 498, 545, 566, 578, 590, 602, 614, 626, 647, 664, 681, 693, 709, 721, 743, 770, 792, 808, 827, 839, 851, 872, 922, 959, 996, 1020, 1032, 1056, 1084], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [1976], "errorMessage": "box string key ok"}, {"pc": [1106], "errorMessage": "can only call when creating"}, {"pc": [373, 391, 415, 440, 452, 477, 489, 501, 548, 569, 581, 593, 605, 617, 629, 650, 667, 684, 696, 712, 724, 746, 773, 795, 811, 830, 842, 854, 875, 925, 962, 999, 1023, 1035, 1059, 1087], "errorMessage": "can only call when not creating"}, {"pc": [1931, 1941, 1953, 1965], "errorMessage": "check Box exists"}, {"pc": [1528, 1620, 1630, 1640, 1650, 1752], "errorMessage": "check BoxRef exists"}, {"pc": [1223, 1387, 1391], "errorMessage": "check self.box_dynamic_bytes exists"}, {"pc": [1114, 1219, 1404, 1762], "errorMessage": "check self.box_int exists"}, {"pc": [1123, 1519, 1602, 1608], "errorMessage": "check self.box_map entry exists"}, {"pc": [1296, 1337, 1570, 1578], "errorMessage": "check self.box_map_struct entry exists"}, {"pc": [1230], "errorMessage": "check self.box_string exists"}, {"pc": [1398], "errorMessage": "direct reference should match copy"}, {"pc": [1487, 1702], "errorMessage": "has data"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.approval.puya.map index c587473..3d3c396 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../control_flow/contract.py" ], - "mappings": ";;;;;AA4BA;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;AAGK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;AAHL;;AAAA;;;;;;;;;AAGA;;;AAEgB;;;;;;;;AAE+B;;;AACpB;;AAAA;AAAA;AAAA;;;AAAf;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AADZ;;;AAA+C;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;;;;AAGnC;AAAJ;;AAEmB;AAAf;;AAAQ;;AAAU;;AAAV;AAApB;;;AACY;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AADQ;AAAA;AAAA;;;;;AAGL;;AAAK;;AAAL;AAAP;AAEA;;AAAA;;AAAA", + "mappings": ";;;;;AA8BA;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;AAEK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;AAFL;;AAAA;;;;;;;;;AAEA;;;AAEgB;;;;;;;;AAE+B;;;AACpB;;AAAA;AAAA;AAAA;;;AAAf;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AADZ;;;AAA+C;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;;;;AAGnC;AAAJ;;AAEmB;AAAf;;AAAQ;;AAAU;;AAAV;AAApB;;;AACY;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AADQ;AAAA;AAAA;;;;;AAGL;;AAAK;;AAAL;AAAP;AAEA;;AAAA;;AAAA", "op_pc_offset": 0, "pc_events": { "1": { @@ -27,13 +27,28 @@ "stack_out": [] }, "10": { - "op": "pushbytes 0x91d632fb // method \"for_loop()uint8[4]\"" + "op": "pushbytes 0x91d632fb // method \"for_loop()uint8[4]\"", + "defined_out": [ + "Method(for_loop()uint8[4])" + ], + "stack_out": [ + "Method(for_loop()uint8[4])" + ] }, "16": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(for_loop()uint8[4])", + "tmp%2#0" + ], + "stack_out": [ + "Method(for_loop()uint8[4])", + "tmp%2#0" + ] }, "19": { - "op": "match main_for_loop_route@3" + "op": "match main_for_loop_route@3", + "stack_out": [] }, "23": { "block": "main_after_if_else@10", @@ -47,7 +62,8 @@ ] }, "24": { - "op": "return" + "op": "return", + "stack_out": [] }, "25": { "block": "main_for_loop_route@3", @@ -139,7 +155,8 @@ ] }, "45": { - "op": "return" + "op": "return", + "stack_out": [] }, "46": { "block": "main_bare_routing@6", @@ -157,20 +174,40 @@ "stack_out": [] }, "51": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%10#0" + ], + "stack_out": [ + "tmp%10#0" + ] }, "53": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%11#0" + ], + "stack_out": [ + "tmp%11#0" + ] }, "54": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "55": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "56": { - "op": "return" + "op": "return", + "stack_out": [] }, "57": { "subroutine": "smart_contracts.control_flow.contract.ForLoopsExample.for_loop", @@ -180,7 +217,10 @@ "op": "proto 0 1" }, "60": { - "op": "pushbytess \"\" 0x00000000 // \"\", 0x00000000" + "op": "pushbytess \"\" 0x00000000 // \"\", 0x00000000", + "stack_out": [ + "x#0" + ] }, "68": { "op": "pushint 3 // 3" @@ -434,28 +474,100 @@ ] }, "96": { - "op": "frame_dig 2" + "op": "frame_dig 2", + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "item#0" + ] }, "98": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "defined_out": [ + "1", + "array#0", + "index#0", + "item#0" + ], + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "item#0", + "1" + ] }, "99": { - "op": "-" + "op": "-", + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "item#0" + ] }, "100": { - "op": "frame_bury 2" + "op": "frame_bury 2", + "defined_out": [ + "array#0", + "index#0", + "item#0" + ], + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0" + ] }, "102": { - "op": "frame_dig 3" + "op": "frame_dig 3", + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "index#0" + ] }, "104": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "index#0", + "1" + ] }, "105": { - "op": "+" + "op": "+", + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "index#0" + ] }, "106": { - "op": "frame_bury 3" + "op": "frame_bury 3", + "defined_out": [ + "array#0", + "index#0", + "item#0" + ], + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0" + ] }, "108": { "op": "b for_loop_for_body@2" @@ -578,31 +690,122 @@ ] }, "125": { - "op": "frame_dig 0" + "op": "frame_dig 0", + "defined_out": [ + "item#0", + "x#0" + ], + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "x#0" + ] }, "127": { - "op": "frame_dig 2" + "op": "frame_dig 2", + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "x#0", + "item#0" + ] }, "129": { - "op": "dup" + "op": "dup", + "defined_out": [ + "item#0", + "item#0 (copy)", + "x#0" + ], + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "x#0", + "item#0 (copy)", + "item#0 (copy)" + ] }, "130": { - "op": "cover 2" + "op": "cover 2", + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "item#0", + "x#0", + "item#0 (copy)" + ] }, "132": { - "op": "+" + "op": "+", + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "item#0", + "x#0" + ] }, "133": { - "op": "frame_bury 0" + "op": "frame_bury 0", + "defined_out": [ + "item#0", + "x#0" + ], + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "item#0" + ] }, "135": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "defined_out": [ + "1", + "item#0", + "x#0" + ], + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "item#0", + "1" + ] }, "136": { - "op": "+" + "op": "+", + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0", + "item#0" + ] }, "137": { - "op": "frame_bury 2" + "op": "frame_bury 2", + "defined_out": [ + "item#0", + "x#0" + ], + "stack_out": [ + "x#0", + "array#0", + "item#0", + "index#0" + ] }, "139": { "op": "b for_loop_for_header@6" diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.approval.teal b/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.approval.teal index 7c28d02..23fd9e0 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.approval.teal +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.approval.teal @@ -4,7 +4,7 @@ // algopy.arc4.ARC4Contract.approval_program() -> uint64: main: intcblock 1 0 - // smart_contracts/control_flow/contract.py:29 + // smart_contracts/control_flow/contract.py:31 // class ForLoopsExample(ARC4Contract): txn NumAppArgs bz main_bare_routing@6 @@ -13,13 +13,13 @@ main: match main_for_loop_route@3 main_after_if_else@10: - // smart_contracts/control_flow/contract.py:29 + // smart_contracts/control_flow/contract.py:31 // class ForLoopsExample(ARC4Contract): intc_1 // 0 return main_for_loop_route@3: - // smart_contracts/control_flow/contract.py:31-32 + // smart_contracts/control_flow/contract.py:32-33 // # urange: reversed items, forward index // @arc4.abimethod txn OnCompletion @@ -36,7 +36,7 @@ main_for_loop_route@3: return main_bare_routing@6: - // smart_contracts/control_flow/contract.py:29 + // smart_contracts/control_flow/contract.py:31 // class ForLoopsExample(ARC4Contract): txn OnCompletion bnz main_after_if_else@10 @@ -49,21 +49,21 @@ main_bare_routing@6: // smart_contracts.control_flow.contract.ForLoopsExample.for_loop() -> bytes: for_loop: - // smart_contracts/control_flow/contract.py:31-33 + // smart_contracts/control_flow/contract.py:32-34 // # urange: reversed items, forward index // @arc4.abimethod // def for_loop(self) -> FourArray: proto 0 1 - // smart_contracts/control_flow/contract.py:34 + // smart_contracts/control_flow/contract.py:35 // array = FourArray(arc4.UInt8(0), arc4.UInt8(0), arc4.UInt8(0), arc4.UInt8(0)) pushbytess "" 0x00000000 // "", 0x00000000 - // smart_contracts/control_flow/contract.py:36 + // smart_contracts/control_flow/contract.py:37 // for index, item in uenumerate(reversed(urange(4))): # [3, 2, 1, 0] pushint 3 // 3 intc_1 // 0 for_loop_for_body@2: - // smart_contracts/control_flow/contract.py:37 + // smart_contracts/control_flow/contract.py:38 // array[index] = arc4.UInt8(item) frame_dig 2 dup @@ -79,7 +79,7 @@ for_loop_for_body@2: uncover 2 replace3 frame_bury 1 - // smart_contracts/control_flow/contract.py:36 + // smart_contracts/control_flow/contract.py:37 // for index, item in uenumerate(reversed(urange(4))): # [3, 2, 1, 0] bz for_loop_after_for@5 frame_dig 2 @@ -93,23 +93,23 @@ for_loop_for_body@2: b for_loop_for_body@2 for_loop_after_for@5: - // smart_contracts/control_flow/contract.py:39 + // smart_contracts/control_flow/contract.py:40 // x = UInt64(0) intc_1 // 0 frame_bury 0 - // smart_contracts/control_flow/contract.py:41 + // smart_contracts/control_flow/contract.py:42 // for item in urange(1, 5): # [1, 2, 3, 4] intc_0 // 1 frame_bury 2 for_loop_for_header@6: - // smart_contracts/control_flow/contract.py:41 + // smart_contracts/control_flow/contract.py:42 // for item in urange(1, 5): # [1, 2, 3, 4] frame_dig 2 pushint 5 // 5 < bz for_loop_after_for@9 - // smart_contracts/control_flow/contract.py:42 + // smart_contracts/control_flow/contract.py:43 // x += item frame_dig 0 frame_dig 2 @@ -117,7 +117,7 @@ for_loop_for_header@6: cover 2 + frame_bury 0 - // smart_contracts/control_flow/contract.py:41 + // smart_contracts/control_flow/contract.py:42 // for item in urange(1, 5): # [1, 2, 3, 4] intc_0 // 1 + @@ -125,13 +125,13 @@ for_loop_for_header@6: b for_loop_for_header@6 for_loop_after_for@9: - // smart_contracts/control_flow/contract.py:44 + // smart_contracts/control_flow/contract.py:45 // assert x == 10 frame_dig 0 pushint 10 // 10 == assert - // smart_contracts/control_flow/contract.py:46 + // smart_contracts/control_flow/contract.py:47 // return array frame_dig 1 frame_bury 0 diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.arc56.json b/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.arc56.json index e113474..165566e 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/ForLoopsExample.arc56.json @@ -88,7 +88,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MjkKICAgIC8vIGNsYXNzIEZvckxvb3BzRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweDkxZDYzMmZiIC8vIG1ldGhvZCAiZm9yX2xvb3AoKXVpbnQ4WzRdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9mb3JfbG9vcF9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjI5CiAgICAvLyBjbGFzcyBGb3JMb29wc0V4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fZm9yX2xvb3Bfcm91dGVAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzEtMzIKICAgIC8vICMgdXJhbmdlOiByZXZlcnNlZCBpdGVtcywgZm9yd2FyZCBpbmRleAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZm9yX2xvb3AKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MjkKICAgIC8vIGNsYXNzIEZvckxvb3BzRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0LkZvckxvb3BzRXhhbXBsZS5mb3JfbG9vcCgpIC0+IGJ5dGVzOgpmb3JfbG9vcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzEtMzMKICAgIC8vICMgdXJhbmdlOiByZXZlcnNlZCBpdGVtcywgZm9yd2FyZCBpbmRleAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZm9yX2xvb3Aoc2VsZikgLT4gRm91ckFycmF5OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM0CiAgICAvLyBhcnJheSA9IEZvdXJBcnJheShhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApKQogICAgcHVzaGJ5dGVzcyAiIiAweDAwMDAwMDAwIC8vICIiLCAweDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM2CiAgICAvLyBmb3IgaW5kZXgsIGl0ZW0gaW4gdWVudW1lcmF0ZShyZXZlcnNlZCh1cmFuZ2UoNCkpKTogICMgWzMsIDIsIDEsIDBdCiAgICBwdXNoaW50IDMgLy8gMwogICAgaW50Y18xIC8vIDAKCmZvcl9sb29wX2Zvcl9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM3CiAgICAvLyBhcnJheVtpbmRleF0gPSBhcmM0LlVJbnQ4KGl0ZW0pCiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDcgMQogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgcHVzaGludCA0IC8vIDQKICAgIDwKICAgIGFzc2VydCAvLyBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgcmVwbGFjZTMKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTozNgogICAgLy8gZm9yIGluZGV4LCBpdGVtIGluIHVlbnVtZXJhdGUocmV2ZXJzZWQodXJhbmdlKDQpKSk6ICAjIFszLCAyLCAxLCAwXQogICAgYnogZm9yX2xvb3BfYWZ0ZXJfZm9yQDUKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBmb3JfbG9vcF9mb3JfYm9keUAyCgpmb3JfbG9vcF9hZnRlcl9mb3JANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzkKICAgIC8vIHggPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NDEKICAgIC8vIGZvciBpdGVtIGluIHVyYW5nZSgxLCA1KTogICMgWzEsIDIsIDMsIDRdCiAgICBpbnRjXzAgLy8gMQogICAgZnJhbWVfYnVyeSAyCgpmb3JfbG9vcF9mb3JfaGVhZGVyQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBmb3IgaXRlbSBpbiB1cmFuZ2UoMSwgNSk6ICAjIFsxLCAyLCAzLCA0XQogICAgZnJhbWVfZGlnIDIKICAgIHB1c2hpbnQgNSAvLyA1CiAgICA8CiAgICBieiBmb3JfbG9vcF9hZnRlcl9mb3JAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo0MgogICAgLy8geCArPSBpdGVtCiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgKwogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBmb3IgaXRlbSBpbiB1cmFuZ2UoMSwgNSk6ICAjIFsxLCAyLCAzLCA0XQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgYiBmb3JfbG9vcF9mb3JfaGVhZGVyQDYKCmZvcl9sb29wX2FmdGVyX2ZvckA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo0NAogICAgLy8gYXNzZXJ0IHggPT0gMTAKICAgIGZyYW1lX2RpZyAwCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQ2CiAgICAvLyByZXR1cm4gYXJyYXkKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzEKICAgIC8vIGNsYXNzIEZvckxvb3BzRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweDkxZDYzMmZiIC8vIG1ldGhvZCAiZm9yX2xvb3AoKXVpbnQ4WzRdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9mb3JfbG9vcF9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjMxCiAgICAvLyBjbGFzcyBGb3JMb29wc0V4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fZm9yX2xvb3Bfcm91dGVAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzItMzMKICAgIC8vICMgdXJhbmdlOiByZXZlcnNlZCBpdGVtcywgZm9yd2FyZCBpbmRleAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZm9yX2xvb3AKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzEKICAgIC8vIGNsYXNzIEZvckxvb3BzRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0LkZvckxvb3BzRXhhbXBsZS5mb3JfbG9vcCgpIC0+IGJ5dGVzOgpmb3JfbG9vcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzItMzQKICAgIC8vICMgdXJhbmdlOiByZXZlcnNlZCBpdGVtcywgZm9yd2FyZCBpbmRleAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZm9yX2xvb3Aoc2VsZikgLT4gRm91ckFycmF5OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM1CiAgICAvLyBhcnJheSA9IEZvdXJBcnJheShhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApKQogICAgcHVzaGJ5dGVzcyAiIiAweDAwMDAwMDAwIC8vICIiLCAweDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM3CiAgICAvLyBmb3IgaW5kZXgsIGl0ZW0gaW4gdWVudW1lcmF0ZShyZXZlcnNlZCh1cmFuZ2UoNCkpKTogICMgWzMsIDIsIDEsIDBdCiAgICBwdXNoaW50IDMgLy8gMwogICAgaW50Y18xIC8vIDAKCmZvcl9sb29wX2Zvcl9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM4CiAgICAvLyBhcnJheVtpbmRleF0gPSBhcmM0LlVJbnQ4KGl0ZW0pCiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDcgMQogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgcHVzaGludCA0IC8vIDQKICAgIDwKICAgIGFzc2VydCAvLyBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgcmVwbGFjZTMKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTozNwogICAgLy8gZm9yIGluZGV4LCBpdGVtIGluIHVlbnVtZXJhdGUocmV2ZXJzZWQodXJhbmdlKDQpKSk6ICAjIFszLCAyLCAxLCAwXQogICAgYnogZm9yX2xvb3BfYWZ0ZXJfZm9yQDUKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBmb3JfbG9vcF9mb3JfYm9keUAyCgpmb3JfbG9vcF9hZnRlcl9mb3JANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NDAKICAgIC8vIHggPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NDIKICAgIC8vIGZvciBpdGVtIGluIHVyYW5nZSgxLCA1KTogICMgWzEsIDIsIDMsIDRdCiAgICBpbnRjXzAgLy8gMQogICAgZnJhbWVfYnVyeSAyCgpmb3JfbG9vcF9mb3JfaGVhZGVyQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQyCiAgICAvLyBmb3IgaXRlbSBpbiB1cmFuZ2UoMSwgNSk6ICAjIFsxLCAyLCAzLCA0XQogICAgZnJhbWVfZGlnIDIKICAgIHB1c2hpbnQgNSAvLyA1CiAgICA8CiAgICBieiBmb3JfbG9vcF9hZnRlcl9mb3JAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo0MwogICAgLy8geCArPSBpdGVtCiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgKwogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQyCiAgICAvLyBmb3IgaXRlbSBpbiB1cmFuZ2UoMSwgNSk6ICAjIFsxLCAyLCAzLCA0XQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgYiBmb3JfbG9vcF9mb3JfaGVhZGVyQDYKCmZvcl9sb29wX2FmdGVyX2ZvckA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo0NQogICAgLy8gYXNzZXJ0IHggPT0gMTAKICAgIGZyYW1lX2RpZyAwCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJyYXkKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { @@ -99,8 +99,8 @@ "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.approval.puya.map index b6f68ab..44cd310 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../control_flow/contract.py" ], - "mappings": ";;;;;;;;AAMA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;;AAWK;;AAAA;AAAA;AAAA;;AAAA;AAXL;;;AAAA;AAWK;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AATA;;AAAA;AAAA;AAAA;;AAAA;AAFL;;;AAAA;AAEK;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAFL;;AAAA;;;;;;;;;;AAEA;;;AAEW;;AAAkB;;;AAAlB;AAAX;;;AACmB;;;;;;;;;;;;;;;;;;;;;;;AAAP;AACC;;AAAkB;;AAAlB;AAAb;;;AACmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAP;AAEO;;;;;;;;;;;;;;;;;;;;;;;;;AAAP;AAEZ;;;AAEiC;;AAAS;;AAAT;AAAlB;;;AAAA;;;;;;AAAP;AAA8C;;;;;AAA9C", + "mappings": ";;;;;;;;AAKA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;;AAcK;;AAAA;AAAA;AAAA;;AAAA;AAdL;;;AAAA;AAcK;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AAFL;;;AAAA;AAEK;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAFL;;AAAA;;;;;;;;;;AAEA;;;AAEW;;AAAkB;;;AAAlB;AAAX;;;AACmB;;;;;;;;;;;;;;;;;;;;;;;AAAP;AACC;;AAAkB;;AAAlB;AAAb;;;AACmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAP;AAEO;;;;;;;;;;;;;;;;;;;;;;;;;AAAP;AAKZ;;;AAEiC;;AAAS;;AAAT;AAAlB;;;AAAA;;;;;;AAAP;AAA8C;;;;;AAA9C", "op_pc_offset": 0, "pc_events": { "1": { @@ -27,13 +27,32 @@ "stack_out": [] }, "13": { - "op": "pushbytess 0x37c01090 0x6632c2d6 // method \"is_rich(uint64)string\", method \"is_even(uint64)string\"" + "op": "pushbytess 0x37c01090 0x6632c2d6 // method \"is_rich(uint64)string\", method \"is_even(uint64)string\"", + "defined_out": [ + "Method(is_even(uint64)string)", + "Method(is_rich(uint64)string)" + ], + "stack_out": [ + "Method(is_rich(uint64)string)", + "Method(is_even(uint64)string)" + ] }, "25": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(is_even(uint64)string)", + "Method(is_rich(uint64)string)", + "tmp%2#0" + ], + "stack_out": [ + "Method(is_rich(uint64)string)", + "Method(is_even(uint64)string)", + "tmp%2#0" + ] }, "28": { - "op": "match main_is_rich_route@3 main_is_even_route@4" + "op": "match main_is_rich_route@3 main_is_even_route@4", + "stack_out": [] }, "34": { "block": "main_after_if_else@11", @@ -47,26 +66,27 @@ ] }, "36": { - "op": "return" + "op": "return", + "stack_out": [] }, "37": { "block": "main_is_even_route@4", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%10#0" + "tmp%9#0" ], "stack_out": [ - "tmp%10#0" + "tmp%9#0" ] }, "39": { "op": "!", "defined_out": [ - "tmp%11#0" + "tmp%10#0" ], "stack_out": [ - "tmp%11#0" + "tmp%10#0" ] }, "40": { @@ -77,10 +97,10 @@ "41": { "op": "txn ApplicationID", "defined_out": [ - "tmp%12#0" + "tmp%11#0" ], "stack_out": [ - "tmp%12#0" + "tmp%11#0" ] }, "43": { @@ -91,19 +111,19 @@ "44": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%14#0" + "reinterpret_bytes[8]%1#0" ], "stack_out": [ - "tmp%14#0" + "reinterpret_bytes[8]%1#0" ] }, "47": { "op": "btoi", "defined_out": [ - "tmp%15#0" + "tmp%13#0" ], "stack_out": [ - "tmp%15#0" + "tmp%13#0" ] }, "48": { @@ -197,10 +217,10 @@ "61": { "op": "concat", "defined_out": [ - "tmp%16#0" + "tmp%14#0" ], "stack_out": [ - "tmp%16#0" + "tmp%14#0" ] }, "62": { @@ -217,7 +237,8 @@ ] }, "65": { - "op": "return" + "op": "return", + "stack_out": [] }, "66": { "block": "main_is_rich_route@3", @@ -261,19 +282,19 @@ "73": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%7#0" + "reinterpret_bytes[8]%0#0" ], "stack_out": [ - "tmp%7#0" + "reinterpret_bytes[8]%0#0" ] }, "76": { "op": "btoi", "defined_out": [ - "tmp%8#0" + "tmp%7#0" ], "stack_out": [ - "tmp%8#0" + "tmp%7#0" ] }, "77": { @@ -367,10 +388,10 @@ "90": { "op": "concat", "defined_out": [ - "tmp%9#0" + "tmp%8#0" ], "stack_out": [ - "tmp%9#0" + "tmp%8#0" ] }, "91": { @@ -387,17 +408,18 @@ ] }, "94": { - "op": "return" + "op": "return", + "stack_out": [] }, "95": { "block": "main_bare_routing@7", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%17#0" + "tmp%15#0" ], "stack_out": [ - "tmp%17#0" + "tmp%15#0" ] }, "97": { @@ -405,20 +427,40 @@ "stack_out": [] }, "100": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%16#0" + ], + "stack_out": [ + "tmp%16#0" + ] }, "102": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%17#0" + ], + "stack_out": [ + "tmp%17#0" + ] }, "103": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "104": { - "op": "pushint 1 // 1" + "op": "pushint 1 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "106": { - "op": "return" + "op": "return", + "stack_out": [] }, "107": { "subroutine": "smart_contracts.control_flow.contract.IfElseExample.is_rich", @@ -463,7 +505,13 @@ "stack_out": [] }, "119": { - "op": "pushbytes \"This account is rich!\"" + "op": "pushbytes \"This account is rich!\"", + "defined_out": [ + "\"This account is rich!\"" + ], + "stack_out": [ + "\"This account is rich!\"" + ] }, "142": { "retsub": true, @@ -505,7 +553,13 @@ "stack_out": [] }, "151": { - "op": "pushbytes \"This account is doing well.\"" + "op": "pushbytes \"This account is doing well.\"", + "defined_out": [ + "\"This account is doing well.\"" + ], + "stack_out": [ + "\"This account is doing well.\"" + ] }, "180": { "retsub": true, @@ -569,7 +623,13 @@ "stack_out": [] }, "218": { - "op": "pushbytes \"Even\"" + "op": "pushbytes \"Even\"", + "defined_out": [ + "ternary_result%0#0" + ], + "stack_out": [ + "ternary_result%0#0" + ] }, "224": { "retsub": true, diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.approval.teal b/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.approval.teal index ee4fad2..b62c1ed 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.approval.teal +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.approval.teal @@ -4,8 +4,7 @@ // algopy.arc4.ARC4Contract.approval_program() -> uint64: main: bytecblock 0x151f7c75 - // smart_contracts/control_flow/contract.py:6-7 - // # example: IF_ELSE + // smart_contracts/control_flow/contract.py:6 // class IfElseExample(ARC4Contract): txn NumAppArgs bz main_bare_routing@7 @@ -14,26 +13,26 @@ main: match main_is_rich_route@3 main_is_even_route@4 main_after_if_else@11: - // smart_contracts/control_flow/contract.py:6-7 - // # example: IF_ELSE + // smart_contracts/control_flow/contract.py:6 // class IfElseExample(ARC4Contract): pushint 0 // 0 return main_is_even_route@4: - // smart_contracts/control_flow/contract.py:18 + // smart_contracts/control_flow/contract.py:19-20 + // # example: TERNARY // @arc4.abimethod txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/control_flow/contract.py:6-7 - // # example: IF_ELSE + // smart_contracts/control_flow/contract.py:6 // class IfElseExample(ARC4Contract): txna ApplicationArgs 1 btoi - // smart_contracts/control_flow/contract.py:18 + // smart_contracts/control_flow/contract.py:19-20 + // # example: TERNARY // @arc4.abimethod callsub is_even dup @@ -50,19 +49,20 @@ main_is_even_route@4: return main_is_rich_route@3: - // smart_contracts/control_flow/contract.py:9 + // smart_contracts/control_flow/contract.py:7-8 + // # example: IF_ELSE // @arc4.abimethod txn OnCompletion ! assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/control_flow/contract.py:6-7 - // # example: IF_ELSE + // smart_contracts/control_flow/contract.py:6 // class IfElseExample(ARC4Contract): txna ApplicationArgs 1 btoi - // smart_contracts/control_flow/contract.py:9 + // smart_contracts/control_flow/contract.py:7-8 + // # example: IF_ELSE // @arc4.abimethod callsub is_rich dup @@ -79,8 +79,7 @@ main_is_rich_route@3: return main_bare_routing@7: - // smart_contracts/control_flow/contract.py:6-7 - // # example: IF_ELSE + // smart_contracts/control_flow/contract.py:6 // class IfElseExample(ARC4Contract): txn OnCompletion bnz main_after_if_else@11 @@ -93,35 +92,36 @@ main_bare_routing@7: // smart_contracts.control_flow.contract.IfElseExample.is_rich(account_balance: uint64) -> bytes: is_rich: - // smart_contracts/control_flow/contract.py:9-10 + // smart_contracts/control_flow/contract.py:7-9 + // # example: IF_ELSE // @arc4.abimethod // def is_rich(self, account_balance: UInt64) -> String: proto 1 1 - // smart_contracts/control_flow/contract.py:11 + // smart_contracts/control_flow/contract.py:10 // if account_balance > 1000: frame_dig -1 pushint 1000 // 1000 > bz is_rich_else_body@2 - // smart_contracts/control_flow/contract.py:12 + // smart_contracts/control_flow/contract.py:11 // return String("This account is rich!") pushbytes "This account is rich!" retsub is_rich_else_body@2: - // smart_contracts/control_flow/contract.py:13 + // smart_contracts/control_flow/contract.py:12 // elif account_balance > 100: frame_dig -1 pushint 100 // 100 > bz is_rich_else_body@4 - // smart_contracts/control_flow/contract.py:14 + // smart_contracts/control_flow/contract.py:13 // return String("This account is doing well.") pushbytes "This account is doing well." retsub is_rich_else_body@4: - // smart_contracts/control_flow/contract.py:16 + // smart_contracts/control_flow/contract.py:15 // return String("This account is poor :(") pushbytes "This account is poor :(" retsub @@ -129,11 +129,12 @@ is_rich_else_body@4: // smart_contracts.control_flow.contract.IfElseExample.is_even(number: uint64) -> bytes: is_even: - // smart_contracts/control_flow/contract.py:18-19 + // smart_contracts/control_flow/contract.py:19-21 + // # example: TERNARY // @arc4.abimethod // def is_even(self, number: UInt64) -> String: proto 1 1 - // smart_contracts/control_flow/contract.py:20 + // smart_contracts/control_flow/contract.py:22 // return String("Even") if number % 2 == 0 else String("Odd") frame_dig -1 pushint 2 // 2 @@ -143,7 +144,7 @@ is_even: retsub is_even_ternary_false@2: - // smart_contracts/control_flow/contract.py:20 + // smart_contracts/control_flow/contract.py:22 // return String("Even") if number % 2 == 0 else String("Odd") pushbytes "Odd" retsub diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.arc56.json b/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.arc56.json index eb160de..05fb8bf 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/IfElseExample.arc56.json @@ -110,7 +110,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2LTcKICAgIC8vICMgZXhhbXBsZTogSUZfRUxTRQogICAgLy8gY2xhc3MgSWZFbHNlRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHgzN2MwMTA5MCAweDY2MzJjMmQ2IC8vIG1ldGhvZCAiaXNfcmljaCh1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJpc19ldmVuKHVpbnQ2NClzdHJpbmciCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2lzX3JpY2hfcm91dGVAMyBtYWluX2lzX2V2ZW5fcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2LTcKICAgIC8vICMgZXhhbXBsZTogSUZfRUxTRQogICAgLy8gY2xhc3MgSWZFbHNlRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9pc19ldmVuX3JvdXRlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2LTcKICAgIC8vICMgZXhhbXBsZTogSUZfRUxTRQogICAgLy8gY2xhc3MgSWZFbHNlRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGlzX2V2ZW4KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX2lzX3JpY2hfcm91dGVAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6Ni03CiAgICAvLyAjIGV4YW1wbGU6IElGX0VMU0UKICAgIC8vIGNsYXNzIElmRWxzZUV4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGlzX3JpY2gKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2LTcKICAgIC8vICMgZXhhbXBsZTogSUZfRUxTRQogICAgLy8gY2xhc3MgSWZFbHNlRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0LklmRWxzZUV4YW1wbGUuaXNfcmljaChhY2NvdW50X2JhbGFuY2U6IHVpbnQ2NCkgLT4gYnl0ZXM6CmlzX3JpY2g6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjktMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGlzX3JpY2goc2VsZiwgYWNjb3VudF9iYWxhbmNlOiBVSW50NjQpIC0+IFN0cmluZzoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxMQogICAgLy8gaWYgYWNjb3VudF9iYWxhbmNlID4gMTAwMDoKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAxMDAwIC8vIDEwMDAKICAgID4KICAgIGJ6IGlzX3JpY2hfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MTIKICAgIC8vIHJldHVybiBTdHJpbmcoIlRoaXMgYWNjb3VudCBpcyByaWNoISIpCiAgICBwdXNoYnl0ZXMgIlRoaXMgYWNjb3VudCBpcyByaWNoISIKICAgIHJldHN1YgoKaXNfcmljaF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MTMKICAgIC8vIGVsaWYgYWNjb3VudF9iYWxhbmNlID4gMTAwOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgID4KICAgIGJ6IGlzX3JpY2hfZWxzZV9ib2R5QDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MTQKICAgIC8vIHJldHVybiBTdHJpbmcoIlRoaXMgYWNjb3VudCBpcyBkb2luZyB3ZWxsLiIpCiAgICBwdXNoYnl0ZXMgIlRoaXMgYWNjb3VudCBpcyBkb2luZyB3ZWxsLiIKICAgIHJldHN1YgoKaXNfcmljaF9lbHNlX2JvZHlANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MTYKICAgIC8vIHJldHVybiBTdHJpbmcoIlRoaXMgYWNjb3VudCBpcyBwb29yIDooIikKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIHBvb3IgOigiCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0LklmRWxzZUV4YW1wbGUuaXNfZXZlbihudW1iZXI6IHVpbnQ2NCkgLT4gYnl0ZXM6CmlzX2V2ZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjE4LTE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBpc19ldmVuKHNlbGYsIG51bWJlcjogVUludDY0KSAtPiBTdHJpbmc6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MjAKICAgIC8vIHJldHVybiBTdHJpbmcoIkV2ZW4iKSBpZiBudW1iZXIgJSAyID09IDAgZWxzZSBTdHJpbmcoIk9kZCIpCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgMiAvLyAyCiAgICAlCiAgICBibnogaXNfZXZlbl90ZXJuYXJ5X2ZhbHNlQDIKICAgIHB1c2hieXRlcyAiRXZlbiIKICAgIHJldHN1YgoKaXNfZXZlbl90ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjIwCiAgICAvLyByZXR1cm4gU3RyaW5nKCJFdmVuIikgaWYgbnVtYmVyICUgMiA9PSAwIGVsc2UgU3RyaW5nKCJPZGQiKQogICAgcHVzaGJ5dGVzICJPZGQiCiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBJZkVsc2VFeGFtcGxlKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwogICAgcHVzaGJ5dGVzcyAweDM3YzAxMDkwIDB4NjYzMmMyZDYgLy8gbWV0aG9kICJpc19yaWNoKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImlzX2V2ZW4odWludDY0KXN0cmluZyIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5faXNfcmljaF9yb3V0ZUAzIG1haW5faXNfZXZlbl9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjYKICAgIC8vIGNsYXNzIElmRWxzZUV4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5faXNfZXZlbl9yb3V0ZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxOS0yMAogICAgLy8gIyBleGFtcGxlOiBURVJOQVJZCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBJZkVsc2VFeGFtcGxlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjE5LTIwCiAgICAvLyAjIGV4YW1wbGU6IFRFUk5BUlkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBpc19ldmVuCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9pc19yaWNoX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjctOAogICAgLy8gIyBleGFtcGxlOiBJRl9FTFNFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBJZkVsc2VFeGFtcGxlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjctOAogICAgLy8gIyBleGFtcGxlOiBJRl9FTFNFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgaXNfcmljaAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjYKICAgIC8vIGNsYXNzIElmRWxzZUV4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmNvbnRyb2xfZmxvdy5jb250cmFjdC5JZkVsc2VFeGFtcGxlLmlzX3JpY2goYWNjb3VudF9iYWxhbmNlOiB1aW50NjQpIC0+IGJ5dGVzOgppc19yaWNoOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo3LTkKICAgIC8vICMgZXhhbXBsZTogSUZfRUxTRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgaXNfcmljaChzZWxmLCBhY2NvdW50X2JhbGFuY2U6IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBpZiBhY2NvdW50X2JhbGFuY2UgPiAxMDAwOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDEwMDAgLy8gMTAwMAogICAgPgogICAgYnogaXNfcmljaF9lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxMQogICAgLy8gcmV0dXJuIFN0cmluZygiVGhpcyBhY2NvdW50IGlzIHJpY2ghIikKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIHJpY2ghIgogICAgcmV0c3ViCgppc19yaWNoX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxMgogICAgLy8gZWxpZiBhY2NvdW50X2JhbGFuY2UgPiAxMDA6CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgMTAwIC8vIDEwMAogICAgPgogICAgYnogaXNfcmljaF9lbHNlX2JvZHlANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxMwogICAgLy8gcmV0dXJuIFN0cmluZygiVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuIikKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuIgogICAgcmV0c3ViCgppc19yaWNoX2Vsc2VfYm9keUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxNQogICAgLy8gcmV0dXJuIFN0cmluZygiVGhpcyBhY2NvdW50IGlzIHBvb3IgOigiKQogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgcG9vciA6KCIKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jb250cm9sX2Zsb3cuY29udHJhY3QuSWZFbHNlRXhhbXBsZS5pc19ldmVuKG51bWJlcjogdWludDY0KSAtPiBieXRlczoKaXNfZXZlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MTktMjEKICAgIC8vICMgZXhhbXBsZTogVEVSTkFSWQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgaXNfZXZlbihzZWxmLCBudW1iZXI6IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjIyCiAgICAvLyByZXR1cm4gU3RyaW5nKCJFdmVuIikgaWYgbnVtYmVyICUgMiA9PSAwIGVsc2UgU3RyaW5nKCJPZGQiKQogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDIgLy8gMgogICAgJQogICAgYm56IGlzX2V2ZW5fdGVybmFyeV9mYWxzZUAyCiAgICBwdXNoYnl0ZXMgIkV2ZW4iCiAgICByZXRzdWIKCmlzX2V2ZW5fdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToyMgogICAgLy8gcmV0dXJuIFN0cmluZygiRXZlbiIpIGlmIG51bWJlciAlIDIgPT0gMCBlbHNlIFN0cmluZygiT2RkIikKICAgIHB1c2hieXRlcyAiT2RkIgogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { @@ -121,8 +121,8 @@ "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.approval.puya.map index aa19b94..94aea14 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../control_flow/contract.py" ], - "mappings": ";AAoDA;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;;AAEK;;AAAA;AAAA;AAAA;;AAAA;AAFL;;;AAAA;AAEK;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;;AAFL;;AAAA;;;;;;;;;;AAEA;;;AAGQ;;AAAA;;;;;;;;;;;;;;;;AAgBe;;;;;;;;;;;;;AAAP;AAFO;;;;;;;;AAAP;AAFO;;;;;;;;;;AAAP;AAFO;;;;;;;;AAAP;AAFO;;;;;;;;;;AAAP;AAFO;;;;;;;;;;;AAAP;AAFO;;;;;;;;;AAAP;AAFO;;;;;;;;AAAP", + "mappings": ";AAqDA;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;;AACK;;AAAA;AAAA;AAAA;;AAAA;AADL;;;AAAA;AACK;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;;AADL;;AAAA;;;;;;;;;;AACA;;;AAEQ;;AAAA;;;;;;;;;;;;;;;;AAgBe;;;;;;;;;;;;;AAAP;AAFO;;;;;;;;AAAP;AAFO;;;;;;;;;;AAAP;AAFO;;;;;;;;AAAP;AAFO;;;;;;;;;;AAAP;AAFO;;;;;;;;;;;AAAP;AAFO;;;;;;;;;AAAP;AAFO;;;;;;;;AAAP", "op_pc_offset": 0, "pc_events": { "1": { @@ -24,13 +24,28 @@ "stack_out": [] }, "6": { - "op": "pushbytes 0xe5a4ea52 // method \"get_day(uint64)string\"" + "op": "pushbytes 0xe5a4ea52 // method \"get_day(uint64)string\"", + "defined_out": [ + "Method(get_day(uint64)string)" + ], + "stack_out": [ + "Method(get_day(uint64)string)" + ] }, "12": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(get_day(uint64)string)", + "tmp%2#0" + ], + "stack_out": [ + "Method(get_day(uint64)string)", + "tmp%2#0" + ] }, "15": { - "op": "match main_get_day_route@3" + "op": "match main_get_day_route@3", + "stack_out": [] }, "19": { "block": "main_after_if_else@10", @@ -44,7 +59,8 @@ ] }, "21": { - "op": "return" + "op": "return", + "stack_out": [] }, "22": { "block": "main_get_day_route@3", @@ -88,19 +104,19 @@ "29": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%7#0" + "reinterpret_bytes[8]%0#0" ], "stack_out": [ - "tmp%7#0" + "reinterpret_bytes[8]%0#0" ] }, "32": { "op": "btoi", "defined_out": [ - "tmp%8#0" + "tmp%7#0" ], "stack_out": [ - "tmp%8#0" + "tmp%7#0" ] }, "33": { @@ -194,10 +210,10 @@ "51": { "op": "concat", "defined_out": [ - "tmp%9#0" + "tmp%8#0" ], "stack_out": [ - "tmp%9#0" + "tmp%8#0" ] }, "52": { @@ -214,17 +230,18 @@ ] }, "55": { - "op": "return" + "op": "return", + "stack_out": [] }, "56": { "block": "main_bare_routing@6", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%10#0" + "tmp%9#0" ], "stack_out": [ - "tmp%10#0" + "tmp%9#0" ] }, "58": { @@ -232,20 +249,40 @@ "stack_out": [] }, "61": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%10#0" + ], + "stack_out": [ + "tmp%10#0" + ] }, "63": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%11#0" + ], + "stack_out": [ + "tmp%11#0" + ] }, "64": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "65": { - "op": "pushint 1 // 1" + "op": "pushint 1 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "67": { - "op": "return" + "op": "return", + "stack_out": [] }, "68": { "subroutine": "smart_contracts.control_flow.contract.MatchStatements.get_day", @@ -270,7 +307,13 @@ "stack_out": [] }, "89": { - "op": "pushbytes \"Invalid day\"" + "op": "pushbytes \"Invalid day\"", + "defined_out": [ + "\"Invalid day\"" + ], + "stack_out": [ + "\"Invalid day\"" + ] }, "102": { "retsub": true, diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.approval.teal b/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.approval.teal index b4699a2..4b25713 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.approval.teal +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.approval.teal @@ -3,7 +3,7 @@ // algopy.arc4.ARC4Contract.approval_program() -> uint64: main: - // smart_contracts/control_flow/contract.py:52-53 + // smart_contracts/control_flow/contract.py:53-54 // # example: MATCH // class MatchStatements(ARC4Contract): txn NumAppArgs @@ -13,7 +13,7 @@ main: match main_get_day_route@3 main_after_if_else@10: - // smart_contracts/control_flow/contract.py:52-53 + // smart_contracts/control_flow/contract.py:53-54 // # example: MATCH // class MatchStatements(ARC4Contract): pushint 0 // 0 @@ -27,7 +27,7 @@ main_get_day_route@3: assert // OnCompletion is not NoOp txn ApplicationID assert // can only call when not creating - // smart_contracts/control_flow/contract.py:52-53 + // smart_contracts/control_flow/contract.py:53-54 // # example: MATCH // class MatchStatements(ARC4Contract): txna ApplicationArgs 1 @@ -49,7 +49,7 @@ main_get_day_route@3: return main_bare_routing@6: - // smart_contracts/control_flow/contract.py:52-53 + // smart_contracts/control_flow/contract.py:53-54 // # example: MATCH // class MatchStatements(ARC4Contract): txn OnCompletion @@ -67,7 +67,7 @@ get_day: // @arc4.abimethod // def get_day(self, date: UInt64) -> String: proto 1 1 - // smart_contracts/control_flow/contract.py:58-74 + // smart_contracts/control_flow/contract.py:57-73 // match date: // case UInt64(0): // return String("Monday") @@ -87,49 +87,49 @@ get_day: // return String("Invalid day") frame_dig -1 switch get_day_switch_case_0@1 get_day_switch_case_1@2 get_day_switch_case_2@3 get_day_switch_case_3@4 get_day_switch_case_4@5 get_day_switch_case_5@6 get_day_switch_case_6@7 - // smart_contracts/control_flow/contract.py:74 + // smart_contracts/control_flow/contract.py:73 // return String("Invalid day") pushbytes "Invalid day" retsub get_day_switch_case_6@7: - // smart_contracts/control_flow/contract.py:72 + // smart_contracts/control_flow/contract.py:71 // return String("Sunday") pushbytes "Sunday" retsub get_day_switch_case_5@6: - // smart_contracts/control_flow/contract.py:70 + // smart_contracts/control_flow/contract.py:69 // return String("Saturday") pushbytes "Saturday" retsub get_day_switch_case_4@5: - // smart_contracts/control_flow/contract.py:68 + // smart_contracts/control_flow/contract.py:67 // return String("Friday") pushbytes "Friday" retsub get_day_switch_case_3@4: - // smart_contracts/control_flow/contract.py:66 + // smart_contracts/control_flow/contract.py:65 // return String("Thursday") pushbytes "Thursday" retsub get_day_switch_case_2@3: - // smart_contracts/control_flow/contract.py:64 + // smart_contracts/control_flow/contract.py:63 // return String("Wednesday") pushbytes "Wednesday" retsub get_day_switch_case_1@2: - // smart_contracts/control_flow/contract.py:62 + // smart_contracts/control_flow/contract.py:61 // return String("Tuesday") pushbytes "Tuesday" retsub get_day_switch_case_0@1: - // smart_contracts/control_flow/contract.py:60 + // smart_contracts/control_flow/contract.py:59 // return String("Monday") pushbytes "Monday" retsub diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.arc56.json b/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.arc56.json index 4636561..6349a9d 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/MatchStatements.arc56.json @@ -87,7 +87,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTItNTMKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweGU1YTRlYTUyIC8vIG1ldGhvZCAiZ2V0X2RheSh1aW50NjQpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRfZGF5X3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTItNTMKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRfZGF5X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo1Mi01MwogICAgLy8gIyBleGFtcGxlOiBNQVRDSAogICAgLy8gY2xhc3MgTWF0Y2hTdGF0ZW1lbnRzKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2RheQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTItNTMKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0Lk1hdGNoU3RhdGVtZW50cy5nZXRfZGF5KGRhdGU6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9kYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1LTU2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBnZXRfZGF5KHNlbGYsIGRhdGU6IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU4LTc0CiAgICAvLyBtYXRjaCBkYXRlOgogICAgLy8gICAgIGNhc2UgVUludDY0KDApOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJNb25kYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDEpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJUdWVzZGF5IikKICAgIC8vICAgICBjYXNlIFVJbnQ2NCgyKToKICAgIC8vICAgICAgICAgcmV0dXJuIFN0cmluZygiV2VkbmVzZGF5IikKICAgIC8vICAgICBjYXNlIFVJbnQ2NCgzKToKICAgIC8vICAgICAgICAgcmV0dXJuIFN0cmluZygiVGh1cnNkYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDQpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJGcmlkYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDUpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJTYXR1cmRheSIpCiAgICAvLyAgICAgY2FzZSBVSW50NjQoNik6CiAgICAvLyAgICAgICAgIHJldHVybiBTdHJpbmcoIlN1bmRheSIpCiAgICAvLyAgICAgY2FzZSBfOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJJbnZhbGlkIGRheSIpCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3aXRjaCBnZXRfZGF5X3N3aXRjaF9jYXNlXzBAMSBnZXRfZGF5X3N3aXRjaF9jYXNlXzFAMiBnZXRfZGF5X3N3aXRjaF9jYXNlXzJAMyBnZXRfZGF5X3N3aXRjaF9jYXNlXzNANCBnZXRfZGF5X3N3aXRjaF9jYXNlXzRANSBnZXRfZGF5X3N3aXRjaF9jYXNlXzVANiBnZXRfZGF5X3N3aXRjaF9jYXNlXzZANwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo3NAogICAgLy8gcmV0dXJuIFN0cmluZygiSW52YWxpZCBkYXkiKQogICAgcHVzaGJ5dGVzICJJbnZhbGlkIGRheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV82QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjcyCiAgICAvLyByZXR1cm4gU3RyaW5nKCJTdW5kYXkiKQogICAgcHVzaGJ5dGVzICJTdW5kYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfNUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo3MAogICAgLy8gcmV0dXJuIFN0cmluZygiU2F0dXJkYXkiKQogICAgcHVzaGJ5dGVzICJTYXR1cmRheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV80QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjY4CiAgICAvLyByZXR1cm4gU3RyaW5nKCJGcmlkYXkiKQogICAgcHVzaGJ5dGVzICJGcmlkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfM0A0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2NgogICAgLy8gcmV0dXJuIFN0cmluZygiVGh1cnNkYXkiKQogICAgcHVzaGJ5dGVzICJUaHVyc2RheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV8yQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjY0CiAgICAvLyByZXR1cm4gU3RyaW5nKCJXZWRuZXNkYXkiKQogICAgcHVzaGJ5dGVzICJXZWRuZXNkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfMUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2MgogICAgLy8gcmV0dXJuIFN0cmluZygiVHVlc2RheSIpCiAgICBwdXNoYnl0ZXMgIlR1ZXNkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfMEAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2MAogICAgLy8gcmV0dXJuIFN0cmluZygiTW9uZGF5IikKICAgIHB1c2hieXRlcyAiTW9uZGF5IgogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTMtNTQKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweGU1YTRlYTUyIC8vIG1ldGhvZCAiZ2V0X2RheSh1aW50NjQpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRfZGF5X3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTMtNTQKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRfZGF5X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo1My01NAogICAgLy8gIyBleGFtcGxlOiBNQVRDSAogICAgLy8gY2xhc3MgTWF0Y2hTdGF0ZW1lbnRzKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2RheQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTMtNTQKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0Lk1hdGNoU3RhdGVtZW50cy5nZXRfZGF5KGRhdGU6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9kYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1LTU2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBnZXRfZGF5KHNlbGYsIGRhdGU6IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU3LTczCiAgICAvLyBtYXRjaCBkYXRlOgogICAgLy8gICAgIGNhc2UgVUludDY0KDApOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJNb25kYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDEpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJUdWVzZGF5IikKICAgIC8vICAgICBjYXNlIFVJbnQ2NCgyKToKICAgIC8vICAgICAgICAgcmV0dXJuIFN0cmluZygiV2VkbmVzZGF5IikKICAgIC8vICAgICBjYXNlIFVJbnQ2NCgzKToKICAgIC8vICAgICAgICAgcmV0dXJuIFN0cmluZygiVGh1cnNkYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDQpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJGcmlkYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDUpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJTYXR1cmRheSIpCiAgICAvLyAgICAgY2FzZSBVSW50NjQoNik6CiAgICAvLyAgICAgICAgIHJldHVybiBTdHJpbmcoIlN1bmRheSIpCiAgICAvLyAgICAgY2FzZSBfOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJJbnZhbGlkIGRheSIpCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3aXRjaCBnZXRfZGF5X3N3aXRjaF9jYXNlXzBAMSBnZXRfZGF5X3N3aXRjaF9jYXNlXzFAMiBnZXRfZGF5X3N3aXRjaF9jYXNlXzJAMyBnZXRfZGF5X3N3aXRjaF9jYXNlXzNANCBnZXRfZGF5X3N3aXRjaF9jYXNlXzRANSBnZXRfZGF5X3N3aXRjaF9jYXNlXzVANiBnZXRfZGF5X3N3aXRjaF9jYXNlXzZANwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo3MwogICAgLy8gcmV0dXJuIFN0cmluZygiSW52YWxpZCBkYXkiKQogICAgcHVzaGJ5dGVzICJJbnZhbGlkIGRheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV82QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjcxCiAgICAvLyByZXR1cm4gU3RyaW5nKCJTdW5kYXkiKQogICAgcHVzaGJ5dGVzICJTdW5kYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfNUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2OQogICAgLy8gcmV0dXJuIFN0cmluZygiU2F0dXJkYXkiKQogICAgcHVzaGJ5dGVzICJTYXR1cmRheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV80QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjY3CiAgICAvLyByZXR1cm4gU3RyaW5nKCJGcmlkYXkiKQogICAgcHVzaGJ5dGVzICJGcmlkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfM0A0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2NQogICAgLy8gcmV0dXJuIFN0cmluZygiVGh1cnNkYXkiKQogICAgcHVzaGJ5dGVzICJUaHVyc2RheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV8yQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjYzCiAgICAvLyByZXR1cm4gU3RyaW5nKCJXZWRuZXNkYXkiKQogICAgcHVzaGJ5dGVzICJXZWRuZXNkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfMUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2MQogICAgLy8gcmV0dXJuIFN0cmluZygiVHVlc2RheSIpCiAgICBwdXNoYnl0ZXMgIlR1ZXNkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfMEAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo1OQogICAgLy8gcmV0dXJuIFN0cmluZygiTW9uZGF5IikKICAgIHB1c2hieXRlcyAiTW9uZGF5IgogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { @@ -98,8 +98,8 @@ "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.approval.puya.map index d415231..68949d0 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../control_flow/contract.py" ], - "mappings": ";;;;;AAgFA;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;AAEK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;AAFL;;AAAA;;;;;;;;;AAEA;;;;;AAGc;;AACO;;;;;AAErB;;AAAA;;;AACe;;AAAM;;AAAN;AAAf;;;AACgB;;AAAO;AAAP;AAAA;;AACA;;AAAc;AAAd;AAAA;;AACA;;;AAEJ;;AAAO;;AAAP;AAAA;AAAA;;AACA;;AAAc;AAAd;AAAA;;AAEU;AAAP;AAAf;;;;;;;AAGQ", + "mappings": ";;;;;AA+EA;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;AACK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;AADL;;AAAA;;;;;;;;;AACA;;;;;AAEc;;AACO;;;;;AAErB;;AAAA;;;AACe;;AAAM;;AAAN;AAAf;;;AACgB;;AAAO;AAAP;AAAA;;AACA;;AAAc;AAAd;AAAA;;AACA;;;AAEJ;;AAAO;;AAAP;AAAA;AAAA;;AACA;;AAAc;AAAd;AAAA;;AAEU;AAAP;AAAf;;;;;;;AAGQ", "op_pc_offset": 0, "pc_events": { "1": { @@ -27,13 +27,28 @@ "stack_out": [] }, "10": { - "op": "pushbytes 0xf82a2654 // method \"loop()uint64\"" + "op": "pushbytes 0xf82a2654 // method \"loop()uint64\"", + "defined_out": [ + "Method(loop()uint64)" + ], + "stack_out": [ + "Method(loop()uint64)" + ] }, "16": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(loop()uint64)", + "tmp%2#0" + ], + "stack_out": [ + "Method(loop()uint64)", + "tmp%2#0" + ] }, "19": { - "op": "match main_loop_route@3" + "op": "match main_loop_route@3", + "stack_out": [] }, "23": { "block": "main_after_if_else@10", @@ -47,7 +62,8 @@ ] }, "24": { - "op": "return" + "op": "return", + "stack_out": [] }, "25": { "block": "main_loop_route@3", @@ -148,7 +164,8 @@ ] }, "46": { - "op": "return" + "op": "return", + "stack_out": [] }, "47": { "block": "main_bare_routing@6", @@ -166,20 +183,40 @@ "stack_out": [] }, "52": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0" + ] }, "54": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%10#0" + ], + "stack_out": [ + "tmp%10#0" + ] }, "55": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "56": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "57": { - "op": "return" + "op": "return", + "stack_out": [] }, "58": { "subroutine": "smart_contracts.control_flow.contract.WhileLoopExample.loop", @@ -189,7 +226,10 @@ "op": "proto 0 1" }, "61": { - "op": "pushbytes \"\"" + "op": "pushbytes \"\"", + "stack_out": [ + "loop_count#11" + ] }, "63": { "op": "pushint 10 // 10" @@ -257,40 +297,131 @@ ] }, "75": { - "op": "frame_dig 1" + "op": "frame_dig 1", + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0", + "num#0" + ] }, "77": { - "op": "pushint 5 // 5" + "op": "pushint 5 // 5", + "defined_out": [ + "5", + "loop_count#11", + "num#0" + ], + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0", + "num#0", + "5" + ] }, "79": { - "op": ">" + "op": ">", + "defined_out": [ + "loop_count#11", + "num#0", + "tmp%1#0" + ], + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0", + "tmp%1#0" + ] }, "80": { - "op": "bz loop_after_if_else@4" + "op": "bz loop_after_if_else@4", + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0" + ] }, "83": { - "op": "frame_dig 1" + "op": "frame_dig 1", + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0", + "num#0" + ] }, "85": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0", + "num#0", + "1" + ] }, "86": { - "op": "-" + "op": "-", + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0", + "num#0" + ] }, "87": { - "op": "frame_bury 1" + "op": "frame_bury 1", + "defined_out": [ + "loop_count#11", + "num#0" + ], + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0" + ] }, "89": { - "op": "frame_dig 2" + "op": "frame_dig 2", + "defined_out": [ + "loop_count#0", + "loop_count#11", + "num#0" + ], + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0", + "loop_count#0" + ] }, "91": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0", + "loop_count#0", + "1" + ] }, "92": { - "op": "+" + "op": "+", + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0", + "loop_count#0" + ] }, "93": { - "op": "frame_bury 2" + "op": "frame_bury 2", + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0" + ] }, "95": { "op": "b loop_while_top@1" @@ -444,10 +575,26 @@ ] }, "117": { - "op": "frame_dig 2" + "op": "frame_dig 2", + "defined_out": [ + "loop_count#0", + "loop_count#11", + "num#0" + ], + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0", + "loop_count#11" + ] }, "119": { - "op": "frame_bury 0" + "op": "frame_bury 0", + "stack_out": [ + "loop_count#11", + "num#0", + "loop_count#0" + ] }, "121": { "block": "loop_after_while@7", diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.approval.teal b/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.approval.teal index df7fb8d..bbc9be7 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.approval.teal +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.approval.teal @@ -4,7 +4,7 @@ // algopy.arc4.ARC4Contract.approval_program() -> uint64: main: intcblock 1 0 - // smart_contracts/control_flow/contract.py:80-81 + // smart_contracts/control_flow/contract.py:79-80 // # example: WHILE_LOOP // class WhileLoopExample(ARC4Contract): txn NumAppArgs @@ -14,14 +14,14 @@ main: match main_loop_route@3 main_after_if_else@10: - // smart_contracts/control_flow/contract.py:80-81 + // smart_contracts/control_flow/contract.py:79-80 // # example: WHILE_LOOP // class WhileLoopExample(ARC4Contract): intc_1 // 0 return main_loop_route@3: - // smart_contracts/control_flow/contract.py:83 + // smart_contracts/control_flow/contract.py:81 // @arc4.abimethod txn OnCompletion ! @@ -38,7 +38,7 @@ main_loop_route@3: return main_bare_routing@6: - // smart_contracts/control_flow/contract.py:80-81 + // smart_contracts/control_flow/contract.py:79-80 // # example: WHILE_LOOP // class WhileLoopExample(ARC4Contract): txn OnCompletion @@ -52,62 +52,62 @@ main_bare_routing@6: // smart_contracts.control_flow.contract.WhileLoopExample.loop() -> uint64: loop: - // smart_contracts/control_flow/contract.py:83-84 + // smart_contracts/control_flow/contract.py:81-82 // @arc4.abimethod // def loop(self) -> UInt64: proto 0 1 pushbytes "" - // smart_contracts/control_flow/contract.py:86 + // smart_contracts/control_flow/contract.py:83 // num = UInt64(10) pushint 10 // 10 - // smart_contracts/control_flow/contract.py:87 + // smart_contracts/control_flow/contract.py:84 // loop_count = UInt64(0) intc_1 // 0 loop_while_top@1: frame_dig 2 frame_bury 0 - // smart_contracts/control_flow/contract.py:89 + // smart_contracts/control_flow/contract.py:86 // while num > 0: frame_dig 1 bz loop_after_while@7 - // smart_contracts/control_flow/contract.py:90 + // smart_contracts/control_flow/contract.py:87 // if num > 5: frame_dig 1 pushint 5 // 5 > bz loop_after_if_else@4 - // smart_contracts/control_flow/contract.py:91 + // smart_contracts/control_flow/contract.py:88 // num -= 1 frame_dig 1 intc_0 // 1 - frame_bury 1 - // smart_contracts/control_flow/contract.py:92 + // smart_contracts/control_flow/contract.py:89 // loop_count += 1 frame_dig 2 intc_0 // 1 + frame_bury 2 - // smart_contracts/control_flow/contract.py:93 + // smart_contracts/control_flow/contract.py:90 // continue b loop_while_top@1 loop_after_if_else@4: - // smart_contracts/control_flow/contract.py:95 + // smart_contracts/control_flow/contract.py:92 // num -= 2 frame_dig 1 pushint 2 // 2 - dup frame_bury 1 - // smart_contracts/control_flow/contract.py:96 + // smart_contracts/control_flow/contract.py:93 // loop_count += 1 frame_dig 2 intc_0 // 1 + frame_bury 2 - // smart_contracts/control_flow/contract.py:98 + // smart_contracts/control_flow/contract.py:95 // if num == 1: intc_0 // 1 == @@ -116,6 +116,6 @@ loop_after_if_else@4: frame_bury 0 loop_after_while@7: - // smart_contracts/control_flow/contract.py:101 + // smart_contracts/control_flow/contract.py:98 // return loop_count retsub diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.arc56.json b/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.arc56.json index 7b8cbc1..69ddb05 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/WhileLoopExample.arc56.json @@ -82,7 +82,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6ODAtODEKICAgIC8vICMgZXhhbXBsZTogV0hJTEVfTE9PUAogICAgLy8gY2xhc3MgV2hpbGVMb29wRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweGY4MmEyNjU0IC8vIG1ldGhvZCAibG9vcCgpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9sb29wX3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6ODAtODEKICAgIC8vICMgZXhhbXBsZTogV0hJTEVfTE9PUAogICAgLy8gY2xhc3MgV2hpbGVMb29wRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9sb29wX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBsb29wCiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgwLTgxCiAgICAvLyAjIGV4YW1wbGU6IFdISUxFX0xPT1AKICAgIC8vIGNsYXNzIFdoaWxlTG9vcEV4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmNvbnRyb2xfZmxvdy5jb250cmFjdC5XaGlsZUxvb3BFeGFtcGxlLmxvb3AoKSAtPiB1aW50NjQ6Cmxvb3A6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgzLTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBsb29wKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBudW0gPSBVSW50NjQoMTApCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBsb29wX2NvdW50ID0gVUludDY0KDApCiAgICBpbnRjXzEgLy8gMAoKbG9vcF93aGlsZV90b3BAMToKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6ODkKICAgIC8vIHdoaWxlIG51bSA+IDA6CiAgICBmcmFtZV9kaWcgMQogICAgYnogbG9vcF9hZnRlcl93aGlsZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjkwCiAgICAvLyBpZiBudW0gPiA1OgogICAgZnJhbWVfZGlnIDEKICAgIHB1c2hpbnQgNSAvLyA1CiAgICA+CiAgICBieiBsb29wX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo5MQogICAgLy8gbnVtIC09IDEKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjkyCiAgICAvLyBsb29wX2NvdW50ICs9IDEKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjkzCiAgICAvLyBjb250aW51ZQogICAgYiBsb29wX3doaWxlX3RvcEAxCgpsb29wX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6OTUKICAgIC8vIG51bSAtPSAyCiAgICBmcmFtZV9kaWcgMQogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBsb29wX2NvdW50ICs9IDEKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBpZiBudW0gPT0gMToKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYnogbG9vcF93aGlsZV90b3BAMQogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2J1cnkgMAoKbG9vcF9hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxMDEKICAgIC8vIHJldHVybiBsb29wX2NvdW50CiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NzktODAKICAgIC8vICMgZXhhbXBsZTogV0hJTEVfTE9PUAogICAgLy8gY2xhc3MgV2hpbGVMb29wRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweGY4MmEyNjU0IC8vIG1ldGhvZCAibG9vcCgpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9sb29wX3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NzktODAKICAgIC8vICMgZXhhbXBsZTogV0hJTEVfTE9PUAogICAgLy8gY2xhc3MgV2hpbGVMb29wRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9sb29wX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBsb29wCiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojc5LTgwCiAgICAvLyAjIGV4YW1wbGU6IFdISUxFX0xPT1AKICAgIC8vIGNsYXNzIFdoaWxlTG9vcEV4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmNvbnRyb2xfZmxvdy5jb250cmFjdC5XaGlsZUxvb3BFeGFtcGxlLmxvb3AoKSAtPiB1aW50NjQ6Cmxvb3A6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgxLTgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBsb29wKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgzCiAgICAvLyBudW0gPSBVSW50NjQoMTApCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBsb29wX2NvdW50ID0gVUludDY0KDApCiAgICBpbnRjXzEgLy8gMAoKbG9vcF93aGlsZV90b3BAMToKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6ODYKICAgIC8vIHdoaWxlIG51bSA+IDA6CiAgICBmcmFtZV9kaWcgMQogICAgYnogbG9vcF9hZnRlcl93aGlsZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBpZiBudW0gPiA1OgogICAgZnJhbWVfZGlnIDEKICAgIHB1c2hpbnQgNSAvLyA1CiAgICA+CiAgICBieiBsb29wX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo4OAogICAgLy8gbnVtIC09IDEKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojg5CiAgICAvLyBsb29wX2NvdW50ICs9IDEKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjkwCiAgICAvLyBjb250aW51ZQogICAgYiBsb29wX3doaWxlX3RvcEAxCgpsb29wX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6OTIKICAgIC8vIG51bSAtPSAyCiAgICBmcmFtZV9kaWcgMQogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjkzCiAgICAvLyBsb29wX2NvdW50ICs9IDEKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBpZiBudW0gPT0gMToKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYnogbG9vcF93aGlsZV90b3BAMQogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2J1cnkgMAoKbG9vcF9hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo5OAogICAgLy8gcmV0dXJuIGxvb3BfY291bnQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { @@ -93,8 +93,8 @@ "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/for_loops_example_client.py b/projects/python-examples/smart_contracts/artifacts/control_flow/for_loops_example_client.py index fe45609..3d7a23a 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/for_loops_example_client.py +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/for_loops_example_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "for_loop", "returns": {"type": "uint8[4]"}, "events": [], "readonly": false, "recommendations": {}}], "name": "ForLoopsExample", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiACAQAxG0EAJIAEkdYy+zYaAI4BAAIjQzEZFEQxGESIABaABBUffHVMULAiQzEZQP/kMRgURCJDigABggIABAAAAACBAyOLAkkWVwcBiwNJgQQMRIsBTE8CXYwBQQAPiwIiCYwCiwMiCIwDQv/YI4wAIowCiwKBBQxBABGLAIsCSU4CCIwAIgiMAkL/54sAgQoSRIsBjACJ", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MjkKICAgIC8vIGNsYXNzIEZvckxvb3BzRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweDkxZDYzMmZiIC8vIG1ldGhvZCAiZm9yX2xvb3AoKXVpbnQ4WzRdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9mb3JfbG9vcF9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjI5CiAgICAvLyBjbGFzcyBGb3JMb29wc0V4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fZm9yX2xvb3Bfcm91dGVAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzEtMzIKICAgIC8vICMgdXJhbmdlOiByZXZlcnNlZCBpdGVtcywgZm9yd2FyZCBpbmRleAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZm9yX2xvb3AKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MjkKICAgIC8vIGNsYXNzIEZvckxvb3BzRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0LkZvckxvb3BzRXhhbXBsZS5mb3JfbG9vcCgpIC0+IGJ5dGVzOgpmb3JfbG9vcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzEtMzMKICAgIC8vICMgdXJhbmdlOiByZXZlcnNlZCBpdGVtcywgZm9yd2FyZCBpbmRleAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZm9yX2xvb3Aoc2VsZikgLT4gRm91ckFycmF5OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM0CiAgICAvLyBhcnJheSA9IEZvdXJBcnJheShhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApKQogICAgcHVzaGJ5dGVzcyAiIiAweDAwMDAwMDAwIC8vICIiLCAweDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM2CiAgICAvLyBmb3IgaW5kZXgsIGl0ZW0gaW4gdWVudW1lcmF0ZShyZXZlcnNlZCh1cmFuZ2UoNCkpKTogICMgWzMsIDIsIDEsIDBdCiAgICBwdXNoaW50IDMgLy8gMwogICAgaW50Y18xIC8vIDAKCmZvcl9sb29wX2Zvcl9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM3CiAgICAvLyBhcnJheVtpbmRleF0gPSBhcmM0LlVJbnQ4KGl0ZW0pCiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDcgMQogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgcHVzaGludCA0IC8vIDQKICAgIDwKICAgIGFzc2VydCAvLyBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgcmVwbGFjZTMKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTozNgogICAgLy8gZm9yIGluZGV4LCBpdGVtIGluIHVlbnVtZXJhdGUocmV2ZXJzZWQodXJhbmdlKDQpKSk6ICAjIFszLCAyLCAxLCAwXQogICAgYnogZm9yX2xvb3BfYWZ0ZXJfZm9yQDUKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBmb3JfbG9vcF9mb3JfYm9keUAyCgpmb3JfbG9vcF9hZnRlcl9mb3JANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzkKICAgIC8vIHggPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NDEKICAgIC8vIGZvciBpdGVtIGluIHVyYW5nZSgxLCA1KTogICMgWzEsIDIsIDMsIDRdCiAgICBpbnRjXzAgLy8gMQogICAgZnJhbWVfYnVyeSAyCgpmb3JfbG9vcF9mb3JfaGVhZGVyQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBmb3IgaXRlbSBpbiB1cmFuZ2UoMSwgNSk6ICAjIFsxLCAyLCAzLCA0XQogICAgZnJhbWVfZGlnIDIKICAgIHB1c2hpbnQgNSAvLyA1CiAgICA8CiAgICBieiBmb3JfbG9vcF9hZnRlcl9mb3JAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo0MgogICAgLy8geCArPSBpdGVtCiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgKwogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBmb3IgaXRlbSBpbiB1cmFuZ2UoMSwgNSk6ICAjIFsxLCAyLCAzLCA0XQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgYiBmb3JfbG9vcF9mb3JfaGVhZGVyQDYKCmZvcl9sb29wX2FmdGVyX2ZvckA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo0NAogICAgLy8gYXNzZXJ0IHggPT0gMTAKICAgIGZyYW1lX2RpZyAwCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQ2CiAgICAvLyByZXR1cm4gYXJyYXkKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [84], "errorMessage": "Index access is out of bounds"}, {"pc": [28], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [54], "errorMessage": "can only call when creating"}, {"pc": [31], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "for_loop", "returns": {"type": "uint8[4]"}, "events": [], "readonly": false, "recommendations": {}}], "name": "ForLoopsExample", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiACAQAxG0EAJIAEkdYy+zYaAI4BAAIjQzEZFEQxGESIABaABBUffHVMULAiQzEZQP/kMRgURCJDigABggIABAAAAACBAyOLAkkWVwcBiwNJgQQMRIsBTE8CXYwBQQAPiwIiCYwCiwMiCIwDQv/YI4wAIowCiwKBBQxBABGLAIsCSU4CCIwAIgiMAkL/54sAgQoSRIsBjACJ", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzEKICAgIC8vIGNsYXNzIEZvckxvb3BzRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweDkxZDYzMmZiIC8vIG1ldGhvZCAiZm9yX2xvb3AoKXVpbnQ4WzRdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9mb3JfbG9vcF9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjMxCiAgICAvLyBjbGFzcyBGb3JMb29wc0V4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fZm9yX2xvb3Bfcm91dGVAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzItMzMKICAgIC8vICMgdXJhbmdlOiByZXZlcnNlZCBpdGVtcywgZm9yd2FyZCBpbmRleAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZm9yX2xvb3AKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzEKICAgIC8vIGNsYXNzIEZvckxvb3BzRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0LkZvckxvb3BzRXhhbXBsZS5mb3JfbG9vcCgpIC0+IGJ5dGVzOgpmb3JfbG9vcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MzItMzQKICAgIC8vICMgdXJhbmdlOiByZXZlcnNlZCBpdGVtcywgZm9yd2FyZCBpbmRleAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZm9yX2xvb3Aoc2VsZikgLT4gRm91ckFycmF5OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM1CiAgICAvLyBhcnJheSA9IEZvdXJBcnJheShhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApLCBhcmM0LlVJbnQ4KDApKQogICAgcHVzaGJ5dGVzcyAiIiAweDAwMDAwMDAwIC8vICIiLCAweDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM3CiAgICAvLyBmb3IgaW5kZXgsIGl0ZW0gaW4gdWVudW1lcmF0ZShyZXZlcnNlZCh1cmFuZ2UoNCkpKTogICMgWzMsIDIsIDEsIDBdCiAgICBwdXNoaW50IDMgLy8gMwogICAgaW50Y18xIC8vIDAKCmZvcl9sb29wX2Zvcl9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjM4CiAgICAvLyBhcnJheVtpbmRleF0gPSBhcmM0LlVJbnQ4KGl0ZW0pCiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDcgMQogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgcHVzaGludCA0IC8vIDQKICAgIDwKICAgIGFzc2VydCAvLyBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgcmVwbGFjZTMKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTozNwogICAgLy8gZm9yIGluZGV4LCBpdGVtIGluIHVlbnVtZXJhdGUocmV2ZXJzZWQodXJhbmdlKDQpKSk6ICAjIFszLCAyLCAxLCAwXQogICAgYnogZm9yX2xvb3BfYWZ0ZXJfZm9yQDUKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBmb3JfbG9vcF9mb3JfYm9keUAyCgpmb3JfbG9vcF9hZnRlcl9mb3JANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NDAKICAgIC8vIHggPSBVSW50NjQoMCkKICAgIGludGNfMSAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NDIKICAgIC8vIGZvciBpdGVtIGluIHVyYW5nZSgxLCA1KTogICMgWzEsIDIsIDMsIDRdCiAgICBpbnRjXzAgLy8gMQogICAgZnJhbWVfYnVyeSAyCgpmb3JfbG9vcF9mb3JfaGVhZGVyQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQyCiAgICAvLyBmb3IgaXRlbSBpbiB1cmFuZ2UoMSwgNSk6ICAjIFsxLCAyLCAzLCA0XQogICAgZnJhbWVfZGlnIDIKICAgIHB1c2hpbnQgNSAvLyA1CiAgICA8CiAgICBieiBmb3JfbG9vcF9hZnRlcl9mb3JAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo0MwogICAgLy8geCArPSBpdGVtCiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgKwogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQyCiAgICAvLyBmb3IgaXRlbSBpbiB1cmFuZ2UoMSwgNSk6ICAjIFsxLCAyLCAzLCA0XQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMgogICAgYiBmb3JfbG9vcF9mb3JfaGVhZGVyQDYKCmZvcl9sb29wX2FmdGVyX2ZvckA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo0NQogICAgLy8gYXNzZXJ0IHggPT0gMTAKICAgIGZyYW1lX2RpZyAwCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjQ3CiAgICAvLyByZXR1cm4gYXJyYXkKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [84], "errorMessage": "Index access is out of bounds"}, {"pc": [28], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [54], "errorMessage": "can only call when creating"}, {"pc": [31], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/if_else_example_client.py b/projects/python-examples/smart_contracts/artifacts/control_flow/if_else_example_client.py index 84c5e51..8733260 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/if_else_example_client.py +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/if_else_example_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "account_balance"}], "name": "is_rich", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "number"}], "name": "is_even", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}], "name": "IfElseExample", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiYBBBUffHUxG0EAUoICBDfAEJAEZjLC1jYaAI4CACAAA4EAQzEZFEQxGEQ2GgEXiACcSRUWVwYCTFAoTFCwgQFDMRkURDEYRDYaAReIABtJFRZXBgJMUChMULCBAUMxGUD/vjEYFESBAUOKAQGL/4HoBw1BABiAFVRoaXMgYWNjb3VudCBpcyByaWNoIYmL/4FkDUEAHoAbVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuiYAXVGhpcyBhY2NvdW50IGlzIHBvb3IgOiiJigEBi/+BAhhAAAeABEV2ZW6JgANPZGSJ", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2LTcKICAgIC8vICMgZXhhbXBsZTogSUZfRUxTRQogICAgLy8gY2xhc3MgSWZFbHNlRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDcKICAgIHB1c2hieXRlc3MgMHgzN2MwMTA5MCAweDY2MzJjMmQ2IC8vIG1ldGhvZCAiaXNfcmljaCh1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJpc19ldmVuKHVpbnQ2NClzdHJpbmciCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2lzX3JpY2hfcm91dGVAMyBtYWluX2lzX2V2ZW5fcm91dGVANAoKbWFpbl9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2LTcKICAgIC8vICMgZXhhbXBsZTogSUZfRUxTRQogICAgLy8gY2xhc3MgSWZFbHNlRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9pc19ldmVuX3JvdXRlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2LTcKICAgIC8vICMgZXhhbXBsZTogSUZfRUxTRQogICAgLy8gY2xhc3MgSWZFbHNlRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGlzX2V2ZW4KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX2lzX3JpY2hfcm91dGVAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6Ni03CiAgICAvLyAjIGV4YW1wbGU6IElGX0VMU0UKICAgIC8vIGNsYXNzIElmRWxzZUV4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGlzX3JpY2gKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0A3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2LTcKICAgIC8vICMgZXhhbXBsZTogSUZfRUxTRQogICAgLy8gY2xhc3MgSWZFbHNlRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0LklmRWxzZUV4YW1wbGUuaXNfcmljaChhY2NvdW50X2JhbGFuY2U6IHVpbnQ2NCkgLT4gYnl0ZXM6CmlzX3JpY2g6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjktMTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGlzX3JpY2goc2VsZiwgYWNjb3VudF9iYWxhbmNlOiBVSW50NjQpIC0+IFN0cmluZzoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxMQogICAgLy8gaWYgYWNjb3VudF9iYWxhbmNlID4gMTAwMDoKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAxMDAwIC8vIDEwMDAKICAgID4KICAgIGJ6IGlzX3JpY2hfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MTIKICAgIC8vIHJldHVybiBTdHJpbmcoIlRoaXMgYWNjb3VudCBpcyByaWNoISIpCiAgICBwdXNoYnl0ZXMgIlRoaXMgYWNjb3VudCBpcyByaWNoISIKICAgIHJldHN1YgoKaXNfcmljaF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MTMKICAgIC8vIGVsaWYgYWNjb3VudF9iYWxhbmNlID4gMTAwOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgID4KICAgIGJ6IGlzX3JpY2hfZWxzZV9ib2R5QDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MTQKICAgIC8vIHJldHVybiBTdHJpbmcoIlRoaXMgYWNjb3VudCBpcyBkb2luZyB3ZWxsLiIpCiAgICBwdXNoYnl0ZXMgIlRoaXMgYWNjb3VudCBpcyBkb2luZyB3ZWxsLiIKICAgIHJldHN1YgoKaXNfcmljaF9lbHNlX2JvZHlANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MTYKICAgIC8vIHJldHVybiBTdHJpbmcoIlRoaXMgYWNjb3VudCBpcyBwb29yIDooIikKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIHBvb3IgOigiCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0LklmRWxzZUV4YW1wbGUuaXNfZXZlbihudW1iZXI6IHVpbnQ2NCkgLT4gYnl0ZXM6CmlzX2V2ZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjE4LTE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBpc19ldmVuKHNlbGYsIG51bWJlcjogVUludDY0KSAtPiBTdHJpbmc6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MjAKICAgIC8vIHJldHVybiBTdHJpbmcoIkV2ZW4iKSBpZiBudW1iZXIgJSAyID09IDAgZWxzZSBTdHJpbmcoIk9kZCIpCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgMiAvLyAyCiAgICAlCiAgICBibnogaXNfZXZlbl90ZXJuYXJ5X2ZhbHNlQDIKICAgIHB1c2hieXRlcyAiRXZlbiIKICAgIHJldHN1YgoKaXNfZXZlbl90ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjIwCiAgICAvLyByZXR1cm4gU3RyaW5nKCJFdmVuIikgaWYgbnVtYmVyICUgMiA9PSAwIGVsc2UgU3RyaW5nKCJPZGQiKQogICAgcHVzaGJ5dGVzICJPZGQiCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [40, 69], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [103], "errorMessage": "can only call when creating"}, {"pc": [43, 72], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "account_balance"}], "name": "is_rich", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "number"}], "name": "is_even", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}], "name": "IfElseExample", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiYBBBUffHUxG0EAUoICBDfAEJAEZjLC1jYaAI4CACAAA4EAQzEZFEQxGEQ2GgEXiACcSRUWVwYCTFAoTFCwgQFDMRkURDEYRDYaAReIABtJFRZXBgJMUChMULCBAUMxGUD/vjEYFESBAUOKAQGL/4HoBw1BABiAFVRoaXMgYWNjb3VudCBpcyByaWNoIYmL/4FkDUEAHoAbVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuiYAXVGhpcyBhY2NvdW50IGlzIHBvb3IgOiiJigEBi/+BAhhAAAeABEV2ZW6JgANPZGSJ", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBJZkVsc2VFeGFtcGxlKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANwogICAgcHVzaGJ5dGVzcyAweDM3YzAxMDkwIDB4NjYzMmMyZDYgLy8gbWV0aG9kICJpc19yaWNoKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImlzX2V2ZW4odWludDY0KXN0cmluZyIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5faXNfcmljaF9yb3V0ZUAzIG1haW5faXNfZXZlbl9yb3V0ZUA0CgptYWluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjYKICAgIC8vIGNsYXNzIElmRWxzZUV4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIHB1c2hpbnQgMCAvLyAwCiAgICByZXR1cm4KCm1haW5faXNfZXZlbl9yb3V0ZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxOS0yMAogICAgLy8gIyBleGFtcGxlOiBURVJOQVJZCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBJZkVsc2VFeGFtcGxlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjE5LTIwCiAgICAvLyAjIGV4YW1wbGU6IFRFUk5BUlkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBpc19ldmVuCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9pc19yaWNoX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjctOAogICAgLy8gIyBleGFtcGxlOiBJRl9FTFNFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBJZkVsc2VFeGFtcGxlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjctOAogICAgLy8gIyBleGFtcGxlOiBJRl9FTFNFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgaXNfcmljaAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjYKICAgIC8vIGNsYXNzIElmRWxzZUV4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmNvbnRyb2xfZmxvdy5jb250cmFjdC5JZkVsc2VFeGFtcGxlLmlzX3JpY2goYWNjb3VudF9iYWxhbmNlOiB1aW50NjQpIC0+IGJ5dGVzOgppc19yaWNoOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo3LTkKICAgIC8vICMgZXhhbXBsZTogSUZfRUxTRQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgaXNfcmljaChzZWxmLCBhY2NvdW50X2JhbGFuY2U6IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjEwCiAgICAvLyBpZiBhY2NvdW50X2JhbGFuY2UgPiAxMDAwOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDEwMDAgLy8gMTAwMAogICAgPgogICAgYnogaXNfcmljaF9lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxMQogICAgLy8gcmV0dXJuIFN0cmluZygiVGhpcyBhY2NvdW50IGlzIHJpY2ghIikKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIHJpY2ghIgogICAgcmV0c3ViCgppc19yaWNoX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxMgogICAgLy8gZWxpZiBhY2NvdW50X2JhbGFuY2UgPiAxMDA6CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgMTAwIC8vIDEwMAogICAgPgogICAgYnogaXNfcmljaF9lbHNlX2JvZHlANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxMwogICAgLy8gcmV0dXJuIFN0cmluZygiVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuIikKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuIgogICAgcmV0c3ViCgppc19yaWNoX2Vsc2VfYm9keUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxNQogICAgLy8gcmV0dXJuIFN0cmluZygiVGhpcyBhY2NvdW50IGlzIHBvb3IgOigiKQogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgcG9vciA6KCIKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jb250cm9sX2Zsb3cuY29udHJhY3QuSWZFbHNlRXhhbXBsZS5pc19ldmVuKG51bWJlcjogdWludDY0KSAtPiBieXRlczoKaXNfZXZlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6MTktMjEKICAgIC8vICMgZXhhbXBsZTogVEVSTkFSWQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgaXNfZXZlbihzZWxmLCBudW1iZXI6IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjIyCiAgICAvLyByZXR1cm4gU3RyaW5nKCJFdmVuIikgaWYgbnVtYmVyICUgMiA9PSAwIGVsc2UgU3RyaW5nKCJPZGQiKQogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDIgLy8gMgogICAgJQogICAgYm56IGlzX2V2ZW5fdGVybmFyeV9mYWxzZUAyCiAgICBwdXNoYnl0ZXMgIkV2ZW4iCiAgICByZXRzdWIKCmlzX2V2ZW5fdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToyMgogICAgLy8gcmV0dXJuIFN0cmluZygiRXZlbiIpIGlmIG51bWJlciAlIDIgPT0gMCBlbHNlIFN0cmluZygiT2RkIikKICAgIHB1c2hieXRlcyAiT2RkIgogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [40, 69], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [103], "errorMessage": "can only call when creating"}, {"pc": [43, 72], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/match_statements_client.py b/projects/python-examples/smart_contracts/artifacts/control_flow/match_statements_client.py index 8c50da3..4b02982 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/match_statements_client.py +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/match_statements_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "date"}], "name": "get_day", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}], "name": "MatchStatements", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CjEbQQAygATlpOpSNhoAjgEAA4EAQzEZFEQxGEQ2GgEXiAAgSRUWVwYCTFCABBUffHVMULCBAUMxGUD/1jEYFESBAUOKAQGL/40HAEwAQgA2ACsAIgAXAA6AC0ludmFsaWQgZGF5iYAGU3VuZGF5iYAIU2F0dXJkYXmJgAZGcmlkYXmJgAhUaHVyc2RheYmACVdlZG5lc2RheYmAB1R1ZXNkYXmJgAZNb25kYXmJ", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTItNTMKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweGU1YTRlYTUyIC8vIG1ldGhvZCAiZ2V0X2RheSh1aW50NjQpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRfZGF5X3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTItNTMKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRfZGF5X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo1Mi01MwogICAgLy8gIyBleGFtcGxlOiBNQVRDSAogICAgLy8gY2xhc3MgTWF0Y2hTdGF0ZW1lbnRzKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2RheQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTItNTMKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0Lk1hdGNoU3RhdGVtZW50cy5nZXRfZGF5KGRhdGU6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9kYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1LTU2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBnZXRfZGF5KHNlbGYsIGRhdGU6IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU4LTc0CiAgICAvLyBtYXRjaCBkYXRlOgogICAgLy8gICAgIGNhc2UgVUludDY0KDApOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJNb25kYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDEpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJUdWVzZGF5IikKICAgIC8vICAgICBjYXNlIFVJbnQ2NCgyKToKICAgIC8vICAgICAgICAgcmV0dXJuIFN0cmluZygiV2VkbmVzZGF5IikKICAgIC8vICAgICBjYXNlIFVJbnQ2NCgzKToKICAgIC8vICAgICAgICAgcmV0dXJuIFN0cmluZygiVGh1cnNkYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDQpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJGcmlkYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDUpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJTYXR1cmRheSIpCiAgICAvLyAgICAgY2FzZSBVSW50NjQoNik6CiAgICAvLyAgICAgICAgIHJldHVybiBTdHJpbmcoIlN1bmRheSIpCiAgICAvLyAgICAgY2FzZSBfOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJJbnZhbGlkIGRheSIpCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3aXRjaCBnZXRfZGF5X3N3aXRjaF9jYXNlXzBAMSBnZXRfZGF5X3N3aXRjaF9jYXNlXzFAMiBnZXRfZGF5X3N3aXRjaF9jYXNlXzJAMyBnZXRfZGF5X3N3aXRjaF9jYXNlXzNANCBnZXRfZGF5X3N3aXRjaF9jYXNlXzRANSBnZXRfZGF5X3N3aXRjaF9jYXNlXzVANiBnZXRfZGF5X3N3aXRjaF9jYXNlXzZANwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo3NAogICAgLy8gcmV0dXJuIFN0cmluZygiSW52YWxpZCBkYXkiKQogICAgcHVzaGJ5dGVzICJJbnZhbGlkIGRheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV82QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjcyCiAgICAvLyByZXR1cm4gU3RyaW5nKCJTdW5kYXkiKQogICAgcHVzaGJ5dGVzICJTdW5kYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfNUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo3MAogICAgLy8gcmV0dXJuIFN0cmluZygiU2F0dXJkYXkiKQogICAgcHVzaGJ5dGVzICJTYXR1cmRheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV80QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjY4CiAgICAvLyByZXR1cm4gU3RyaW5nKCJGcmlkYXkiKQogICAgcHVzaGJ5dGVzICJGcmlkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfM0A0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2NgogICAgLy8gcmV0dXJuIFN0cmluZygiVGh1cnNkYXkiKQogICAgcHVzaGJ5dGVzICJUaHVyc2RheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV8yQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjY0CiAgICAvLyByZXR1cm4gU3RyaW5nKCJXZWRuZXNkYXkiKQogICAgcHVzaGJ5dGVzICJXZWRuZXNkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfMUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2MgogICAgLy8gcmV0dXJuIFN0cmluZygiVHVlc2RheSIpCiAgICBwdXNoYnl0ZXMgIlR1ZXNkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfMEAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2MAogICAgLy8gcmV0dXJuIFN0cmluZygiTW9uZGF5IikKICAgIHB1c2hieXRlcyAiTW9uZGF5IgogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [25], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [64], "errorMessage": "can only call when creating"}, {"pc": [28], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "date"}], "name": "get_day", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}], "name": "MatchStatements", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CjEbQQAygATlpOpSNhoAjgEAA4EAQzEZFEQxGEQ2GgEXiAAgSRUWVwYCTFCABBUffHVMULCBAUMxGUD/1jEYFESBAUOKAQGL/40HAEwAQgA2ACsAIgAXAA6AC0ludmFsaWQgZGF5iYAGU3VuZGF5iYAIU2F0dXJkYXmJgAZGcmlkYXmJgAhUaHVyc2RheYmACVdlZG5lc2RheYmAB1R1ZXNkYXmJgAZNb25kYXmJ", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTMtNTQKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweGU1YTRlYTUyIC8vIG1ldGhvZCAiZ2V0X2RheSh1aW50NjQpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRfZGF5X3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTMtNTQKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRfZGF5X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo1My01NAogICAgLy8gIyBleGFtcGxlOiBNQVRDSAogICAgLy8gY2xhc3MgTWF0Y2hTdGF0ZW1lbnRzKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2RheQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NTMtNTQKICAgIC8vICMgZXhhbXBsZTogTUFUQ0gKICAgIC8vIGNsYXNzIE1hdGNoU3RhdGVtZW50cyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY29udHJvbF9mbG93LmNvbnRyYWN0Lk1hdGNoU3RhdGVtZW50cy5nZXRfZGF5KGRhdGU6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldF9kYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU1LTU2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBnZXRfZGF5KHNlbGYsIGRhdGU6IFVJbnQ2NCkgLT4gU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjU3LTczCiAgICAvLyBtYXRjaCBkYXRlOgogICAgLy8gICAgIGNhc2UgVUludDY0KDApOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJNb25kYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDEpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJUdWVzZGF5IikKICAgIC8vICAgICBjYXNlIFVJbnQ2NCgyKToKICAgIC8vICAgICAgICAgcmV0dXJuIFN0cmluZygiV2VkbmVzZGF5IikKICAgIC8vICAgICBjYXNlIFVJbnQ2NCgzKToKICAgIC8vICAgICAgICAgcmV0dXJuIFN0cmluZygiVGh1cnNkYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDQpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJGcmlkYXkiKQogICAgLy8gICAgIGNhc2UgVUludDY0KDUpOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJTYXR1cmRheSIpCiAgICAvLyAgICAgY2FzZSBVSW50NjQoNik6CiAgICAvLyAgICAgICAgIHJldHVybiBTdHJpbmcoIlN1bmRheSIpCiAgICAvLyAgICAgY2FzZSBfOgogICAgLy8gICAgICAgICByZXR1cm4gU3RyaW5nKCJJbnZhbGlkIGRheSIpCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3aXRjaCBnZXRfZGF5X3N3aXRjaF9jYXNlXzBAMSBnZXRfZGF5X3N3aXRjaF9jYXNlXzFAMiBnZXRfZGF5X3N3aXRjaF9jYXNlXzJAMyBnZXRfZGF5X3N3aXRjaF9jYXNlXzNANCBnZXRfZGF5X3N3aXRjaF9jYXNlXzRANSBnZXRfZGF5X3N3aXRjaF9jYXNlXzVANiBnZXRfZGF5X3N3aXRjaF9jYXNlXzZANwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo3MwogICAgLy8gcmV0dXJuIFN0cmluZygiSW52YWxpZCBkYXkiKQogICAgcHVzaGJ5dGVzICJJbnZhbGlkIGRheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV82QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjcxCiAgICAvLyByZXR1cm4gU3RyaW5nKCJTdW5kYXkiKQogICAgcHVzaGJ5dGVzICJTdW5kYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfNUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2OQogICAgLy8gcmV0dXJuIFN0cmluZygiU2F0dXJkYXkiKQogICAgcHVzaGJ5dGVzICJTYXR1cmRheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV80QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjY3CiAgICAvLyByZXR1cm4gU3RyaW5nKCJGcmlkYXkiKQogICAgcHVzaGJ5dGVzICJGcmlkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfM0A0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2NQogICAgLy8gcmV0dXJuIFN0cmluZygiVGh1cnNkYXkiKQogICAgcHVzaGJ5dGVzICJUaHVyc2RheSIKICAgIHJldHN1YgoKZ2V0X2RheV9zd2l0Y2hfY2FzZV8yQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjYzCiAgICAvLyByZXR1cm4gU3RyaW5nKCJXZWRuZXNkYXkiKQogICAgcHVzaGJ5dGVzICJXZWRuZXNkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfMUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo2MQogICAgLy8gcmV0dXJuIFN0cmluZygiVHVlc2RheSIpCiAgICBwdXNoYnl0ZXMgIlR1ZXNkYXkiCiAgICByZXRzdWIKCmdldF9kYXlfc3dpdGNoX2Nhc2VfMEAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo1OQogICAgLy8gcmV0dXJuIFN0cmluZygiTW9uZGF5IikKICAgIHB1c2hieXRlcyAiTW9uZGF5IgogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [25], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [64], "errorMessage": "can only call when creating"}, {"pc": [28], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/control_flow/while_loop_example_client.py b/projects/python-examples/smart_contracts/artifacts/control_flow/while_loop_example_client.py index 4a55113..6d4f10c 100644 --- a/projects/python-examples/smart_contracts/artifacts/control_flow/while_loop_example_client.py +++ b/projects/python-examples/smart_contracts/artifacts/control_flow/while_loop_example_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "loop", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}], "name": "WhileLoopExample", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiACAQAxG0EAJYAE+ComVDYaAI4BAAIjQzEZFEQxGESIABcWgAQVH3x1TFCwIkMxGUD/4zEYFEQiQ4oAAYAAgQojiwKMAIsBQQAuiwGBBQ1BAA+LASIJjAGLAiIIjAJC/+CLAYECCUmMAYsCIgiMAiISQf/NiwKMAIk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6ODAtODEKICAgIC8vICMgZXhhbXBsZTogV0hJTEVfTE9PUAogICAgLy8gY2xhc3MgV2hpbGVMb29wRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweGY4MmEyNjU0IC8vIG1ldGhvZCAibG9vcCgpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9sb29wX3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6ODAtODEKICAgIC8vICMgZXhhbXBsZTogV0hJTEVfTE9PUAogICAgLy8gY2xhc3MgV2hpbGVMb29wRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9sb29wX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBsb29wCiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgwLTgxCiAgICAvLyAjIGV4YW1wbGU6IFdISUxFX0xPT1AKICAgIC8vIGNsYXNzIFdoaWxlTG9vcEV4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmNvbnRyb2xfZmxvdy5jb250cmFjdC5XaGlsZUxvb3BFeGFtcGxlLmxvb3AoKSAtPiB1aW50NjQ6Cmxvb3A6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgzLTg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBsb29wKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojg2CiAgICAvLyBudW0gPSBVSW50NjQoMTApCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBsb29wX2NvdW50ID0gVUludDY0KDApCiAgICBpbnRjXzEgLy8gMAoKbG9vcF93aGlsZV90b3BAMToKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6ODkKICAgIC8vIHdoaWxlIG51bSA+IDA6CiAgICBmcmFtZV9kaWcgMQogICAgYnogbG9vcF9hZnRlcl93aGlsZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjkwCiAgICAvLyBpZiBudW0gPiA1OgogICAgZnJhbWVfZGlnIDEKICAgIHB1c2hpbnQgNSAvLyA1CiAgICA+CiAgICBieiBsb29wX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo5MQogICAgLy8gbnVtIC09IDEKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjkyCiAgICAvLyBsb29wX2NvdW50ICs9IDEKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjkzCiAgICAvLyBjb250aW51ZQogICAgYiBsb29wX3doaWxlX3RvcEAxCgpsb29wX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6OTUKICAgIC8vIG51bSAtPSAyCiAgICBmcmFtZV9kaWcgMQogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBsb29wX2NvdW50ICs9IDEKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBpZiBudW0gPT0gMToKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYnogbG9vcF93aGlsZV90b3BAMQogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2J1cnkgMAoKbG9vcF9hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weToxMDEKICAgIC8vIHJldHVybiBsb29wX2NvdW50CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [28], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [55], "errorMessage": "can only call when creating"}, {"pc": [31], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "loop", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}], "name": "WhileLoopExample", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiACAQAxG0EAJYAE+ComVDYaAI4BAAIjQzEZFEQxGESIABcWgAQVH3x1TFCwIkMxGUD/4zEYFEQiQ4oAAYAAgQojiwKMAIsBQQAuiwGBBQ1BAA+LASIJjAGLAiIIjAJC/+CLAYECCUmMAYsCIgiMAiISQf/NiwKMAIk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NzktODAKICAgIC8vICMgZXhhbXBsZTogV0hJTEVfTE9PUAogICAgLy8gY2xhc3MgV2hpbGVMb29wRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDYKICAgIHB1c2hieXRlcyAweGY4MmEyNjU0IC8vIG1ldGhvZCAibG9vcCgpdWludDY0IgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9sb29wX3JvdXRlQDMKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6NzktODAKICAgIC8vICMgZXhhbXBsZTogV0hJTEVfTE9PUAogICAgLy8gY2xhc3MgV2hpbGVMb29wRXhhbXBsZShBUkM0Q29udHJhY3QpOgogICAgaW50Y18xIC8vIDAKICAgIHJldHVybgoKbWFpbl9sb29wX3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBsb29wCiAgICBpdG9iCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojc5LTgwCiAgICAvLyAjIGV4YW1wbGU6IFdISUxFX0xPT1AKICAgIC8vIGNsYXNzIFdoaWxlTG9vcEV4YW1wbGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMTAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmNvbnRyb2xfZmxvdy5jb250cmFjdC5XaGlsZUxvb3BFeGFtcGxlLmxvb3AoKSAtPiB1aW50NjQ6Cmxvb3A6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgxLTgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBsb29wKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjgzCiAgICAvLyBudW0gPSBVSW50NjQoMTApCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojg0CiAgICAvLyBsb29wX2NvdW50ID0gVUludDY0KDApCiAgICBpbnRjXzEgLy8gMAoKbG9vcF93aGlsZV90b3BAMToKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6ODYKICAgIC8vIHdoaWxlIG51bSA+IDA6CiAgICBmcmFtZV9kaWcgMQogICAgYnogbG9vcF9hZnRlcl93aGlsZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBpZiBudW0gPiA1OgogICAgZnJhbWVfZGlnIDEKICAgIHB1c2hpbnQgNSAvLyA1CiAgICA+CiAgICBieiBsb29wX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo4OAogICAgLy8gbnVtIC09IDEKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojg5CiAgICAvLyBsb29wX2NvdW50ICs9IDEKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjkwCiAgICAvLyBjb250aW51ZQogICAgYiBsb29wX3doaWxlX3RvcEAxCgpsb29wX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cm9sX2Zsb3cvY29udHJhY3QucHk6OTIKICAgIC8vIG51bSAtPSAyCiAgICBmcmFtZV9kaWcgMQogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5OjkzCiAgICAvLyBsb29wX2NvdW50ICs9IDEKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJvbF9mbG93L2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBpZiBudW0gPT0gMToKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYnogbG9vcF93aGlsZV90b3BAMQogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2J1cnkgMAoKbG9vcF9hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyb2xfZmxvdy9jb250cmFjdC5weTo5OAogICAgLy8gcmV0dXJuIGxvb3BfY291bnQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [28], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [55], "errorMessage": "can only call when creating"}, {"pc": [31], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.approval.puya.map index e901666..25493fc 100644 --- a/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../custom_create/contract.py" ], - "mappings": ";;;;;;;;;;;AAKA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;AAQK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAJL;;;AAAA;AAIK;;;AAAA;;AAAL;;;AAEQ;AAAA;;AAAA;;AAER;;;AAEe;AAAA;AAAA;AAAA;AAAP", + "mappings": ";;;;;;;;;;;AAKA;;AAAA;;;AAAA;;;;;;;;;;;;AAAA;;;AAAA;;;;;;AAAA;;AAQK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;;;;;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAJL;;;AAAA;AAIK;;;AAAA;;AAAL;;;AAEQ;AAAA;;AAAA;;AAIO;AAAA;AAAA;AAAA;AAAP", "op_pc_offset": 0, "pc_events": { "1": { @@ -30,13 +30,32 @@ "stack_out": [] }, "16": { - "op": "pushbytess 0x483331ee 0x5627b3cd // method \"custom_create(uint64)void\", method \"get_age()uint64\"" + "op": "pushbytess 0x483331ee 0x5627b3cd // method \"custom_create(uint64)void\", method \"get_age()uint64\"", + "defined_out": [ + "Method(custom_create(uint64)void)", + "Method(get_age()uint64)" + ], + "stack_out": [ + "Method(custom_create(uint64)void)", + "Method(get_age()uint64)" + ] }, "28": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(custom_create(uint64)void)", + "Method(get_age()uint64)", + "tmp%2#0" + ], + "stack_out": [ + "Method(custom_create(uint64)void)", + "Method(get_age()uint64)", + "tmp%2#0" + ] }, "31": { - "op": "match main_custom_create_route@5 main_get_age_route@6" + "op": "match main_custom_create_route@5 main_get_age_route@6", + "stack_out": [] }, "37": { "block": "main_after_if_else@7", @@ -50,26 +69,27 @@ ] }, "38": { - "op": "return" + "op": "return", + "stack_out": [] }, "39": { "block": "main_get_age_route@6", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%9#0" + "tmp%8#0" ], "stack_out": [ - "tmp%9#0" + "tmp%8#0" ] }, "41": { "op": "!", "defined_out": [ - "tmp%10#0" + "tmp%9#0" ], "stack_out": [ - "tmp%10#0" + "tmp%9#0" ] }, "42": { @@ -80,10 +100,10 @@ "43": { "op": "txn ApplicationID", "defined_out": [ - "tmp%11#0" + "tmp%10#0" ], "stack_out": [ - "tmp%11#0" + "tmp%10#0" ] }, "45": { @@ -131,10 +151,10 @@ "57": { "op": "concat", "defined_out": [ - "tmp%13#0" + "tmp%12#0" ], "stack_out": [ - "tmp%13#0" + "tmp%12#0" ] }, "58": { @@ -151,7 +171,8 @@ ] }, "60": { - "op": "return" + "op": "return", + "stack_out": [] }, "61": { "block": "main_custom_create_route@5", @@ -204,19 +225,19 @@ "69": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%7#0" + "reinterpret_bytes[8]%0#0" ], "stack_out": [ - "tmp%7#0" + "reinterpret_bytes[8]%0#0" ] }, "72": { "op": "btoi", "defined_out": [ - "tmp%8#0" + "tmp%7#0" ], "stack_out": [ - "tmp%8#0" + "tmp%7#0" ] }, "73": { @@ -234,7 +255,8 @@ ] }, "77": { - "op": "return" + "op": "return", + "stack_out": [] }, "78": { "subroutine": "smart_contracts.custom_create.contract.CustomCreate.custom_create", @@ -278,9 +300,6 @@ "params": {}, "block": "get_age", "stack_in": [], - "op": "proto 0 1" - }, - "89": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -289,7 +308,7 @@ "0" ] }, - "90": { + "87": { "op": "bytec_0 // \"age\"", "defined_out": [ "\"age\"", @@ -300,7 +319,7 @@ "\"age\"" ] }, - "91": { + "88": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%0#0", @@ -311,14 +330,14 @@ "maybe_exists%0#0" ] }, - "92": { + "89": { "error": "check self.age exists", "op": "assert // check self.age exists", "stack_out": [ "maybe_value%0#0" ] }, - "93": { + "90": { "retsub": true, "op": "retsub" } diff --git a/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.approval.teal b/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.approval.teal index 9894f9e..9f95622 100644 --- a/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.approval.teal +++ b/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.approval.teal @@ -72,10 +72,6 @@ custom_create: // smart_contracts.custom_create.contract.CustomCreate.get_age() -> uint64: get_age: - // smart_contracts/custom_create/contract.py:14-15 - // @abimethod() - // def get_age(self) -> UInt64: - proto 0 1 // smart_contracts/custom_create/contract.py:16 // return self.age.value intc_0 // 0 diff --git a/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.arc56.json b/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.arc56.json index 88aa369..155958f 100644 --- a/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/custom_create/CustomCreate.arc56.json @@ -101,7 +101,7 @@ }, { "pc": [ - 92 + 89 ], "errorMessage": "check self.age exists" } @@ -114,19 +114,19 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuY3VzdG9tX2NyZWF0ZS5jb250cmFjdC5DdXN0b21DcmVhdGUuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJhZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBDdXN0b21DcmVhdGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2FmdGVyX2lmX2Vsc2VANwogICAgcHVzaGJ5dGVzcyAweDQ4MzMzMWVlIDB4NTYyN2IzY2QgLy8gbWV0aG9kICJjdXN0b21fY3JlYXRlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRfYWdlKCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2N1c3RvbV9jcmVhdGVfcm91dGVANSBtYWluX2dldF9hZ2Vfcm91dGVANgoKbWFpbl9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBDdXN0b21DcmVhdGUoQVJDNENvbnRyYWN0KToKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0X2FnZV9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hZ2UKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jdXN0b21fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weToxMAogICAgLy8gQGFiaW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jdXN0b21fY3JlYXRlL2NvbnRyYWN0LnB5OjYKICAgIC8vIGNsYXNzIEN1c3RvbUNyZWF0ZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTAKICAgIC8vIEBhYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIGNhbGxzdWIgY3VzdG9tX2NyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jdXN0b21fY3JlYXRlLmNvbnRyYWN0LkN1c3RvbUNyZWF0ZS5jdXN0b21fY3JlYXRlKGFnZTogdWludDY0KSAtPiB2b2lkOgpjdXN0b21fY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTAtMTEKICAgIC8vIEBhYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIC8vIGRlZiBjdXN0b21fY3JlYXRlKHNlbGYsIGFnZTogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weToxMgogICAgLy8gc2VsZi5hZ2UudmFsdWUgPSBhZ2UKICAgIGJ5dGVjXzAgLy8gImFnZSIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jdXN0b21fY3JlYXRlLmNvbnRyYWN0LkN1c3RvbUNyZWF0ZS5nZXRfYWdlKCkgLT4gdWludDY0OgpnZXRfYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTQtMTUKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGdldF9hZ2Uoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weToxNgogICAgLy8gcmV0dXJuIHNlbGYuYWdlLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiYWdlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFnZSBleGlzdHMKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuY3VzdG9tX2NyZWF0ZS5jb250cmFjdC5DdXN0b21DcmVhdGUuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJhZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBDdXN0b21DcmVhdGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2FmdGVyX2lmX2Vsc2VANwogICAgcHVzaGJ5dGVzcyAweDQ4MzMzMWVlIDB4NTYyN2IzY2QgLy8gbWV0aG9kICJjdXN0b21fY3JlYXRlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRfYWdlKCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2N1c3RvbV9jcmVhdGVfcm91dGVANSBtYWluX2dldF9hZ2Vfcm91dGVANgoKbWFpbl9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBDdXN0b21DcmVhdGUoQVJDNENvbnRyYWN0KToKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0X2FnZV9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hZ2UKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jdXN0b21fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weToxMAogICAgLy8gQGFiaW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jdXN0b21fY3JlYXRlL2NvbnRyYWN0LnB5OjYKICAgIC8vIGNsYXNzIEN1c3RvbUNyZWF0ZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTAKICAgIC8vIEBhYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIGNhbGxzdWIgY3VzdG9tX2NyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jdXN0b21fY3JlYXRlLmNvbnRyYWN0LkN1c3RvbUNyZWF0ZS5jdXN0b21fY3JlYXRlKGFnZTogdWludDY0KSAtPiB2b2lkOgpjdXN0b21fY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTAtMTEKICAgIC8vIEBhYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIC8vIGRlZiBjdXN0b21fY3JlYXRlKHNlbGYsIGFnZTogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weToxMgogICAgLy8gc2VsZi5hZ2UudmFsdWUgPSBhZ2UKICAgIGJ5dGVjXzAgLy8gImFnZSIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jdXN0b21fY3JlYXRlLmNvbnRyYWN0LkN1c3RvbUNyZWF0ZS5nZXRfYWdlKCkgLT4gdWludDY0OgpnZXRfYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTYKICAgIC8vIHJldHVybiBzZWxmLmFnZS52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImFnZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZ2UgZXhpc3RzCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { - "approval": "CiACAAEmAQNhZ2UxG0EAFYICBEgzMe4EViezzTYaAI4CABgAAiJDMRkURDEYRIgAJRaABBUffHVMULAjQzEZFEQxGBRENhoBF4gAAiNDigEAKIv/Z4mKAAEiKGVEiQ==", + "approval": "CiACAAEmAQNhZ2UxG0EAFYICBEgzMe4EViezzTYaAI4CABgAAiJDMRkURDEYRIgAJRaABBUffHVMULAjQzEZFEQxGBRENhoBF4gAAiNDigEAKIv/Z4kiKGVEiQ==", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/custom_create/custom_create_client.py b/projects/python-examples/smart_contracts/artifacts/custom_create/custom_create_client.py index 615bc4f..06875c5 100644 --- a/projects/python-examples/smart_contracts/artifacts/custom_create/custom_create_client.py +++ b/projects/python-examples/smart_contracts/artifacts/custom_create/custom_create_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": []}, "methods": [{"actions": {"call": [], "create": ["NoOp"]}, "args": [{"type": "uint64", "name": "age"}], "name": "custom_create", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_age", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}], "name": "CustomCreate", "state": {"keys": {"box": {}, "global": {"age": {"key": "YWdl", "keyType": "AVMString", "valueType": "AVMUint64"}}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 1}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiACAAEmAQNhZ2UxG0EAFYICBEgzMe4EViezzTYaAI4CABgAAiJDMRkURDEYRIgAJRaABBUffHVMULAjQzEZFEQxGBRENhoBF4gAAiNDigEAKIv/Z4mKAAEiKGVEiQ==", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuY3VzdG9tX2NyZWF0ZS5jb250cmFjdC5DdXN0b21DcmVhdGUuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJhZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBDdXN0b21DcmVhdGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2FmdGVyX2lmX2Vsc2VANwogICAgcHVzaGJ5dGVzcyAweDQ4MzMzMWVlIDB4NTYyN2IzY2QgLy8gbWV0aG9kICJjdXN0b21fY3JlYXRlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRfYWdlKCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2N1c3RvbV9jcmVhdGVfcm91dGVANSBtYWluX2dldF9hZ2Vfcm91dGVANgoKbWFpbl9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBDdXN0b21DcmVhdGUoQVJDNENvbnRyYWN0KToKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0X2FnZV9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hZ2UKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jdXN0b21fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weToxMAogICAgLy8gQGFiaW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jdXN0b21fY3JlYXRlL2NvbnRyYWN0LnB5OjYKICAgIC8vIGNsYXNzIEN1c3RvbUNyZWF0ZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTAKICAgIC8vIEBhYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIGNhbGxzdWIgY3VzdG9tX2NyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jdXN0b21fY3JlYXRlLmNvbnRyYWN0LkN1c3RvbUNyZWF0ZS5jdXN0b21fY3JlYXRlKGFnZTogdWludDY0KSAtPiB2b2lkOgpjdXN0b21fY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTAtMTEKICAgIC8vIEBhYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIC8vIGRlZiBjdXN0b21fY3JlYXRlKHNlbGYsIGFnZTogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weToxMgogICAgLy8gc2VsZi5hZ2UudmFsdWUgPSBhZ2UKICAgIGJ5dGVjXzAgLy8gImFnZSIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jdXN0b21fY3JlYXRlLmNvbnRyYWN0LkN1c3RvbUNyZWF0ZS5nZXRfYWdlKCkgLT4gdWludDY0OgpnZXRfYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTQtMTUKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGdldF9hZ2Uoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weToxNgogICAgLy8gcmV0dXJuIHNlbGYuYWdlLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAiYWdlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFnZSBleGlzdHMKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [42, 64], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [68], "errorMessage": "can only call when creating"}, {"pc": [45], "errorMessage": "can only call when not creating"}, {"pc": [92], "errorMessage": "check self.age exists"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": []}, "methods": [{"actions": {"call": [], "create": ["NoOp"]}, "args": [{"type": "uint64", "name": "age"}], "name": "custom_create", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_age", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}], "name": "CustomCreate", "state": {"keys": {"box": {}, "global": {"age": {"key": "YWdl", "keyType": "AVMString", "valueType": "AVMUint64"}}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 1}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiACAAEmAQNhZ2UxG0EAFYICBEgzMe4EViezzTYaAI4CABgAAiJDMRkURDEYRIgAJRaABBUffHVMULAjQzEZFEQxGBRENhoBF4gAAiNDigEAKIv/Z4kiKGVEiQ==", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuY3VzdG9tX2NyZWF0ZS5jb250cmFjdC5DdXN0b21DcmVhdGUuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxCiAgICBieXRlY2Jsb2NrICJhZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBDdXN0b21DcmVhdGUoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2FmdGVyX2lmX2Vsc2VANwogICAgcHVzaGJ5dGVzcyAweDQ4MzMzMWVlIDB4NTYyN2IzY2QgLy8gbWV0aG9kICJjdXN0b21fY3JlYXRlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRfYWdlKCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2N1c3RvbV9jcmVhdGVfcm91dGVANSBtYWluX2dldF9hZ2Vfcm91dGVANgoKbWFpbl9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBDdXN0b21DcmVhdGUoQVJDNENvbnRyYWN0KToKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fZ2V0X2FnZV9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hZ2UKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jdXN0b21fY3JlYXRlX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weToxMAogICAgLy8gQGFiaW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jdXN0b21fY3JlYXRlL2NvbnRyYWN0LnB5OjYKICAgIC8vIGNsYXNzIEN1c3RvbUNyZWF0ZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTAKICAgIC8vIEBhYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIGNhbGxzdWIgY3VzdG9tX2NyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jdXN0b21fY3JlYXRlLmNvbnRyYWN0LkN1c3RvbUNyZWF0ZS5jdXN0b21fY3JlYXRlKGFnZTogdWludDY0KSAtPiB2b2lkOgpjdXN0b21fY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTAtMTEKICAgIC8vIEBhYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIC8vIGRlZiBjdXN0b21fY3JlYXRlKHNlbGYsIGFnZTogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY3VzdG9tX2NyZWF0ZS9jb250cmFjdC5weToxMgogICAgLy8gc2VsZi5hZ2UudmFsdWUgPSBhZ2UKICAgIGJ5dGVjXzAgLy8gImFnZSIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jdXN0b21fY3JlYXRlLmNvbnRyYWN0LkN1c3RvbUNyZWF0ZS5nZXRfYWdlKCkgLT4gdWludDY0OgpnZXRfYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2N1c3RvbV9jcmVhdGUvY29udHJhY3QucHk6MTYKICAgIC8vIHJldHVybiBzZWxmLmFnZS52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gImFnZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hZ2UgZXhpc3RzCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [42, 64], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [68], "errorMessage": "can only call when creating"}, {"pc": [45], "errorMessage": "can only call when not creating"}, {"pc": [89], "errorMessage": "check self.age exists"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.approval.puya.map index 2446085..293825b 100644 --- a/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../global_storage/contract.py" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeQ;AAAmC;AAAnC;AACA;;AAA6B;AAA7B;AAMA;AACI;AADJ;AAGA;;AAA+B;AAA/B;AAMA;;AAA8B;AAA9B;AAnBR;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;AAAA;;AA2IK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AApBA;;AAAA;AAAA;AAAA;;AAAA;AA/GL;;;AAAA;;;AAAA;;;AAAA;AAAA;;AAAA;;;;AAAA;AA+GK;;;AAAA;;AAPA;;AAAA;AAAA;AAAA;;AAAA;AAxGL;;;AAAA;;;AAwGK;;;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AA/BA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAPA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AA7BL;;AAAA;;;;;;;;;AA6BA;;;AAEe;AAAA;AAAA;AAAiC;AAAjC;;AAAA;AAAP;AAER;;;AAEgC;AAAA;AAAA;AAAA;AAAA;;AAAA;AACrB;;;AACa;AAAZ;;AACJ;;AAAA;;AAAA;;AAAA;;AAAA;AAER;;;AAEe;AAAA;AAAA;AAAiC;AAAjC;;AAAA;AAA+C;AAA/C;AAAP;AACO;AAAA;;AAAA;AAAA;AAA8B;AAA9B;AAAP;AACO;AAAA;;AAAA;AAAuC;AAAvC;;AAAA;AAAA;AAAP;AAEO;AAAA;AAAA;AAA2B;;;;;;;;;AAA3B;;AAAA;AAAiD;AAAjD;AAAP;AACO;AAAP;AAKR;;;AAE8B;AAAA;AAAA;AACtB;AACoB;AAAb;AAAP;AAEuB;AAAA;AAAA;AACvB;AACqB;AAAd;AAAP;AAE2B;AAAA;AAAA;AAAA;;AACpB;AAAP;AACO;AAAA;AAAA;AAAA;AAAgC;AAAhC;AAAP;AAEuB;AAAA;;AAAA;AACvB;AACA;AAEwB;AAAA;;AAAA;AACxB;AAC4B;AAArB;AAAP;AAEwB;AAAA;;AAAA;AACxB;AACkC;AAA3B;AAAP;AAEO;AAAP;AAKR;;;AAEe;AAAA;AAAA;AAAA;AAA8B;AAA9B;AAAP;AACO;AAAA;AAAA;AAAA;AAAgC;AAAhC;AAAP;AAEO;AAAA;;AAAA;AAAA;AAA8B;AAA9B;AAAP;AACO;AAAA;;AAAA;AAAA;AAAgC;AAAhC;AAAP;AACY;AAAA;;AAAA;AAAA;AAAZ;AAEO;AAAI;;AAAJ;AAAA;;AAAA;AAAP;AACO;AAAI;;AAAJ;AAAA;;AAAA;AAAP;AACO;AAAI;;AAAJ;AAAA;;AAAA;AAAP;AAEO;AAAA;;AAAA;AAAA;AAAiC;AAAjC;AAAP;AACO;AAAA;;AAAA;AAAA;AAA6C;AAA7C;AAAP;AACO;AAAA;;;;;;;;;;;;;;;;AAAA;AAAA;AAA6B;AAAA;AAAQ;AAArC;AAAP;AACO;AAAP;AAKR;;;AAEQ;AAAA;;AAAA;;AAKR;;;AAQQ;;AAAA;;AAAA;AACO;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAP;AAEA;;AAAA;;AAAA;AACY;AAAA;;AAAA;AAAA;AAAZ;AAEA;;AAAA;;AAAA;AACO;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAP;;AAKR;;;AAEY;AAAJ;AACO;AAAP;AAKR;;;AAEY;;AAAJ;AACI;;AAAJ;AACI;;AAAJ;AACO;AAAP", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeQ;AAAmC;AAAnC;AACA;;AAA6B;AAA7B;AAMA;AACI;AADJ;AAGA;;AAA+B;AAA/B;AAMA;;AAA8B;AAA9B;AAnBR;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;AAAA;;AA2IK;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AApBA;;AAAA;AAAA;AAAA;;AAAA;AA/GL;;;AAAA;;;AAAA;;;AAAA;AAAA;;AAAA;;;;AAAA;AA+GK;;;AAAA;;AAPA;;AAAA;AAAA;AAAA;;AAAA;AAxGL;;;AAAA;;;AAwGK;;;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AA/BA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAPA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AA7BL;;AAAA;;;;;;;;;AA+Be;AAAA;AAAA;AAAiC;AAAjC;;AAAA;AAAP;AAER;;;AAEgC;AAAA;AAAA;AAAA;AAAA;;AAAA;AACrB;;;AACa;AAAZ;;AACJ;;AAAA;;AAAA;;AAAA;;AAAA;AAIO;AAAA;AAAA;AAAiC;AAAjC;;AAAA;AAA+C;AAA/C;AAAP;AACO;AAAA;;AAAA;AAAA;AAA8B;AAA9B;AAAP;AACO;AAAA;;AAAA;AAAuC;AAAvC;;AAAA;AAAA;AAAP;AAEO;AAAA;AAAA;AAA2B;;;;;;;;;AAA3B;;AAAA;AAAiD;AAAjD;AAAP;AACO;AAAP;AAOsB;AAAA;AAAA;AACtB;AACoB;AAAb;AAAP;AAEuB;AAAA;AAAA;AACvB;AACqB;AAAd;AAAP;AAE2B;AAAA;AAAA;AAAA;;AACpB;AAAP;AACO;AAAA;AAAA;AAAA;AAAgC;AAAhC;AAAP;AAEuB;AAAA;;AAAA;AACvB;AACA;AAEwB;AAAA;;AAAA;AACxB;AAC4B;AAArB;AAAP;AAEwB;AAAA;;AAAA;AACxB;AACkC;AAA3B;AAAP;AAEO;AAAP;AAOO;AAAA;AAAA;AAAA;AAA8B;AAA9B;AAAP;AACO;AAAA;AAAA;AAAA;AAAgC;AAAhC;AAAP;AAEO;AAAA;;AAAA;AAAA;AAA8B;AAA9B;AAAP;AACO;AAAA;;AAAA;AAAA;AAAgC;AAAhC;AAAP;AACY;AAAA;;AAAA;AAAA;AAAZ;AAEO;AAAI;;AAAJ;AAAA;;AAAA;AAAP;AACO;AAAI;;AAAJ;AAAA;;AAAA;AAAP;AACO;AAAI;;AAAJ;AAAA;;AAAA;AAAP;AAEO;AAAA;;AAAA;AAAA;AAAiC;AAAjC;AAAP;AACO;AAAA;;AAAA;AAAA;AAA6C;AAA7C;AAAP;AACO;AAAA;;;;;;;;;;;;;;;;AAAA;AAAA;AAA6B;AAAA;AAAQ;AAArC;AAAP;AACO;AAAP;AAKR;;;AAEQ;AAAA;;AAAA;;AAKR;;;AAQQ;;AAAA;;AAAA;AACO;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAP;AAEA;;AAAA;;AAAA;AACY;AAAA;;AAAA;AAAA;AAAZ;AAEA;;AAAA;;AAAA;AACO;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAP;;AAOI;AAAJ;AACO;AAAP;AAOI;;AAAJ;AACI;;AAAJ;AACI;;AAAJ;AACO;AAAP", "op_pc_offset": 0, "pc_events": { "1": { @@ -30,49 +30,120 @@ "stack_out": [] }, "231": { - "op": "bytec_1 // \"global_int_full\"" + "op": "bytec_1 // \"global_int_full\"", + "defined_out": [ + "\"global_int_full\"" + ], + "stack_out": [ + "\"global_int_full\"" + ] }, "232": { - "op": "intc_3 // 50" + "op": "intc_3 // 50", + "defined_out": [ + "\"global_int_full\"", + "50" + ], + "stack_out": [ + "\"global_int_full\"", + "50" + ] }, "233": { - "op": "app_global_put" + "op": "app_global_put", + "stack_out": [] }, "234": { - "op": "bytec 8 // \"global_int_simplified\"" + "op": "bytec 8 // \"global_int_simplified\"", + "defined_out": [ + "\"global_int_simplified\"" + ], + "stack_out": [ + "\"global_int_simplified\"" + ] }, "236": { - "op": "intc_2 // 10" + "op": "intc_2 // 10", + "defined_out": [ + "\"global_int_simplified\"", + "10" + ], + "stack_out": [ + "\"global_int_simplified\"", + "10" + ] }, "237": { - "op": "app_global_put" + "op": "app_global_put", + "stack_out": [] }, "238": { - "op": "bytec_2 // \"global_bytes_full\"" + "op": "bytec_2 // \"global_bytes_full\"", + "defined_out": [ + "\"global_bytes_full\"" + ], + "stack_out": [ + "\"global_bytes_full\"" + ] }, "239": { - "op": "bytec_0 // 0x48656c6c6f" + "op": "bytec_0 // 0x48656c6c6f", + "defined_out": [ + "\"global_bytes_full\"", + "0x48656c6c6f" + ], + "stack_out": [ + "\"global_bytes_full\"", + "0x48656c6c6f" + ] }, "240": { - "op": "app_global_put" + "op": "app_global_put", + "stack_out": [] }, "241": { - "op": "bytec 9 // \"global_bytes_simplified\"" + "op": "bytec 9 // \"global_bytes_simplified\"", + "defined_out": [ + "\"global_bytes_simplified\"" + ], + "stack_out": [ + "\"global_bytes_simplified\"" + ] }, "243": { - "op": "bytec_0 // 0x48656c6c6f" + "op": "bytec_0 // 0x48656c6c6f", + "stack_out": [ + "\"global_bytes_simplified\"", + "0x48656c6c6f" + ] }, "244": { - "op": "app_global_put" + "op": "app_global_put", + "stack_out": [] }, "245": { - "op": "bytec 10 // \"global_bool_simplified\"" + "op": "bytec 10 // \"global_bool_simplified\"", + "defined_out": [ + "\"global_bool_simplified\"" + ], + "stack_out": [ + "\"global_bool_simplified\"" + ] }, "247": { - "op": "intc_1 // 1" + "op": "intc_1 // 1", + "defined_out": [ + "\"global_bool_simplified\"", + "1" + ], + "stack_out": [ + "\"global_bool_simplified\"", + "1" + ] }, "248": { - "op": "app_global_put" + "op": "app_global_put", + "stack_out": [] }, "249": { "block": "main_after_if_else@2", @@ -90,13 +161,60 @@ "stack_out": [] }, "254": { - "op": "pushbytess 0xce16d083 0x89e2e128 0xcf665878 0xd49869da 0x5ba4f469 0x866d4484 0x3868e4c7 0x3feae30e 0x8fd05d5a // method \"get_global_state()uint64\", method \"maybe_global_state()(uint64,bool)\", method \"get_global_state_example()bool\", method \"maybe_global_state_example()bool\", method \"check_global_state_example()bool\", method \"set_global_state(byte[])void\", method \"set_global_state_example(byte[],asset,bool)void\", method \"del_global_state()bool\", method \"del_global_state_example()bool\"" + "op": "pushbytess 0xce16d083 0x89e2e128 0xcf665878 0xd49869da 0x5ba4f469 0x866d4484 0x3868e4c7 0x3feae30e 0x8fd05d5a // method \"get_global_state()uint64\", method \"maybe_global_state()(uint64,bool)\", method \"get_global_state_example()bool\", method \"maybe_global_state_example()bool\", method \"check_global_state_example()bool\", method \"set_global_state(byte[])void\", method \"set_global_state_example(byte[],asset,bool)void\", method \"del_global_state()bool\", method \"del_global_state_example()bool\"", + "defined_out": [ + "Method(check_global_state_example()bool)", + "Method(del_global_state()bool)", + "Method(del_global_state_example()bool)", + "Method(get_global_state()uint64)", + "Method(get_global_state_example()bool)", + "Method(maybe_global_state()(uint64,bool))", + "Method(maybe_global_state_example()bool)", + "Method(set_global_state(byte[])void)", + "Method(set_global_state_example(byte[],asset,bool)void)" + ], + "stack_out": [ + "Method(get_global_state()uint64)", + "Method(maybe_global_state()(uint64,bool))", + "Method(get_global_state_example()bool)", + "Method(maybe_global_state_example()bool)", + "Method(check_global_state_example()bool)", + "Method(set_global_state(byte[])void)", + "Method(set_global_state_example(byte[],asset,bool)void)", + "Method(del_global_state()bool)", + "Method(del_global_state_example()bool)" + ] }, "301": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(check_global_state_example()bool)", + "Method(del_global_state()bool)", + "Method(del_global_state_example()bool)", + "Method(get_global_state()uint64)", + "Method(get_global_state_example()bool)", + "Method(maybe_global_state()(uint64,bool))", + "Method(maybe_global_state_example()bool)", + "Method(set_global_state(byte[])void)", + "Method(set_global_state_example(byte[],asset,bool)void)", + "tmp%2#0" + ], + "stack_out": [ + "Method(get_global_state()uint64)", + "Method(maybe_global_state()(uint64,bool))", + "Method(get_global_state_example()bool)", + "Method(maybe_global_state_example()bool)", + "Method(check_global_state_example()bool)", + "Method(set_global_state(byte[])void)", + "Method(set_global_state_example(byte[],asset,bool)void)", + "Method(del_global_state()bool)", + "Method(del_global_state_example()bool)", + "tmp%2#0" + ] }, "304": { - "op": "match main_get_global_state_route@5 main_maybe_global_state_route@6 main_get_global_state_example_route@7 main_maybe_global_state_example_route@8 main_check_global_state_example_route@9 main_set_global_state_route@10 main_set_global_state_example_route@11 main_del_global_state_route@12 main_del_global_state_example_route@13" + "op": "match main_get_global_state_route@5 main_maybe_global_state_route@6 main_get_global_state_example_route@7 main_maybe_global_state_example_route@8 main_check_global_state_example_route@9 main_set_global_state_route@10 main_set_global_state_example_route@11 main_del_global_state_route@12 main_del_global_state_example_route@13", + "stack_out": [] }, "324": { "block": "main_after_if_else@16", @@ -110,26 +228,27 @@ ] }, "325": { - "op": "return" + "op": "return", + "stack_out": [] }, "326": { "block": "main_del_global_state_example_route@13", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%50#0" + "tmp%48#0" ], "stack_out": [ - "tmp%50#0" + "tmp%48#0" ] }, "328": { "op": "!", "defined_out": [ - "tmp%51#0" + "tmp%49#0" ], "stack_out": [ - "tmp%51#0" + "tmp%49#0" ] }, "329": { @@ -140,10 +259,10 @@ "330": { "op": "txn ApplicationID", "defined_out": [ - "tmp%52#0" + "tmp%50#0" ], "stack_out": [ - "tmp%52#0" + "tmp%50#0" ] }, "332": { @@ -223,10 +342,10 @@ "344": { "op": "concat", "defined_out": [ - "tmp%54#0" + "tmp%52#0" ], "stack_out": [ - "tmp%54#0" + "tmp%52#0" ] }, "345": { @@ -243,26 +362,27 @@ ] }, "347": { - "op": "return" + "op": "return", + "stack_out": [] }, "348": { "block": "main_del_global_state_route@12", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%45#0" + "tmp%43#0" ], "stack_out": [ - "tmp%45#0" + "tmp%43#0" ] }, "350": { "op": "!", "defined_out": [ - "tmp%46#0" + "tmp%44#0" ], "stack_out": [ - "tmp%46#0" + "tmp%44#0" ] }, "351": { @@ -273,10 +393,10 @@ "352": { "op": "txn ApplicationID", "defined_out": [ - "tmp%47#0" + "tmp%45#0" ], "stack_out": [ - "tmp%47#0" + "tmp%45#0" ] }, "354": { @@ -356,10 +476,10 @@ "366": { "op": "concat", "defined_out": [ - "tmp%49#0" + "tmp%47#0" ], "stack_out": [ - "tmp%49#0" + "tmp%47#0" ] }, "367": { @@ -376,7 +496,8 @@ ] }, "369": { - "op": "return" + "op": "return", + "stack_out": [] }, "370": { "block": "main_set_global_state_example_route@11", @@ -438,61 +559,61 @@ "383": { "op": "txna ApplicationArgs 2", "defined_out": [ - "tmp%39#0", - "tmp%40#0" + "reinterpret_bytes[1]%0#0", + "tmp%39#0" ], "stack_out": [ "tmp%39#0", - "tmp%40#0" + "reinterpret_bytes[1]%0#0" ] }, "386": { "op": "btoi", "defined_out": [ "tmp%39#0", - "tmp%41#0" + "tmp%40#0" ], "stack_out": [ "tmp%39#0", - "tmp%41#0" + "tmp%40#0" ] }, "387": { "op": "txnas Assets", "defined_out": [ "tmp%39#0", - "tmp%42#0" + "tmp%41#0" ], "stack_out": [ "tmp%39#0", - "tmp%42#0" + "tmp%41#0" ] }, "389": { "op": "txna ApplicationArgs 3", "defined_out": [ + "reinterpret_bytes[1]%1#0", "tmp%39#0", - "tmp%42#0", - "tmp%43#0" + "tmp%41#0" ], "stack_out": [ "tmp%39#0", - "tmp%42#0", - "tmp%43#0" + "tmp%41#0", + "reinterpret_bytes[1]%1#0" ] }, "392": { "op": "intc_0 // 0", "defined_out": [ "0", + "reinterpret_bytes[1]%1#0", "tmp%39#0", - "tmp%42#0", - "tmp%43#0" + "tmp%41#0" ], "stack_out": [ "tmp%39#0", - "tmp%42#0", - "tmp%43#0", + "tmp%41#0", + "reinterpret_bytes[1]%1#0", "0" ] }, @@ -500,13 +621,13 @@ "op": "getbit", "defined_out": [ "tmp%39#0", - "tmp%42#0", - "tmp%44#0" + "tmp%41#0", + "tmp%42#0" ], "stack_out": [ "tmp%39#0", - "tmp%42#0", - "tmp%44#0" + "tmp%41#0", + "tmp%42#0" ] }, "394": { @@ -524,7 +645,8 @@ ] }, "398": { - "op": "return" + "op": "return", + "stack_out": [] }, "399": { "block": "main_set_global_state_route@10", @@ -598,7 +720,8 @@ ] }, "416": { - "op": "return" + "op": "return", + "stack_out": [] }, "417": { "block": "main_check_global_state_example_route@9", @@ -731,7 +854,8 @@ ] }, "438": { - "op": "return" + "op": "return", + "stack_out": [] }, "439": { "block": "main_maybe_global_state_example_route@8", @@ -864,7 +988,8 @@ ] }, "460": { - "op": "return" + "op": "return", + "stack_out": [] }, "461": { "block": "main_get_global_state_example_route@7", @@ -997,7 +1122,8 @@ ] }, "482": { - "op": "return" + "op": "return", + "stack_out": [] }, "483": { "block": "main_maybe_global_state_route@6", @@ -1166,7 +1292,8 @@ ] }, "507": { - "op": "return" + "op": "return", + "stack_out": [] }, "508": { "block": "main_get_global_state_route@5", @@ -1267,17 +1394,18 @@ ] }, "524": { - "op": "return" + "op": "return", + "stack_out": [] }, "525": { "block": "main_bare_routing@14", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%55#0" + "tmp%53#0" ], "stack_out": [ - "tmp%55#0" + "tmp%53#0" ] }, "527": { @@ -1285,29 +1413,46 @@ "stack_out": [] }, "530": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%54#0" + ], + "stack_out": [ + "tmp%54#0" + ] }, "532": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%55#0" + ], + "stack_out": [ + "tmp%55#0" + ] }, "533": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "534": { - "op": "intc_1 // 1" + "op": "intc_1 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "535": { - "op": "return" + "op": "return", + "stack_out": [] }, "536": { "subroutine": "smart_contracts.global_storage.contract.GlobalStorage.get_global_state", "params": {}, "block": "get_global_state", "stack_in": [], - "op": "proto 0 1" - }, - "539": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -1316,7 +1461,7 @@ "0" ] }, - "540": { + "537": { "op": "bytec_1 // \"global_int_full\"", "defined_out": [ "\"global_int_full\"", @@ -1327,7 +1472,7 @@ "\"global_int_full\"" ] }, - "541": { + "538": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%0#0", @@ -1338,7 +1483,7 @@ "maybe_exists%0#0" ] }, - "542": { + "539": { "op": "intc_0 // 0", "stack_out": [ "maybe_value%0#0", @@ -1346,7 +1491,7 @@ "0" ] }, - "543": { + "540": { "op": "cover 2", "stack_out": [ "0", @@ -1354,27 +1499,27 @@ "maybe_exists%0#0" ] }, - "545": { + "542": { "op": "select", "defined_out": [ - "tmp%0#0" + "state_get%0#0" ], "stack_out": [ - "tmp%0#0" + "state_get%0#0" ] }, - "546": { + "543": { "retsub": true, "op": "retsub" }, - "547": { + "544": { "subroutine": "smart_contracts.global_storage.contract.GlobalStorage.maybe_global_state", "params": {}, "block": "maybe_global_state", "stack_in": [], "op": "proto 0 2" }, - "550": { + "547": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -1383,7 +1528,7 @@ "0" ] }, - "551": { + "548": { "op": "bytec_1 // \"global_int_full\"", "defined_out": [ "\"global_int_full\"", @@ -1394,7 +1539,7 @@ "\"global_int_full\"" ] }, - "552": { + "549": { "op": "app_global_get_ex", "defined_out": [ "int_exists#0", @@ -1405,7 +1550,7 @@ "int_exists#0" ] }, - "553": { + "550": { "op": "dup", "stack_out": [ "int_value#0", @@ -1413,7 +1558,7 @@ "int_exists#0 (copy)" ] }, - "554": { + "551": { "op": "uncover 2", "defined_out": [ "int_exists#0", @@ -1425,7 +1570,7 @@ "int_value#0" ] }, - "556": { + "553": { "op": "swap", "defined_out": [ "int_exists#0", @@ -1437,20 +1582,29 @@ "int_exists#0" ] }, - "557": { + "554": { "op": "bnz maybe_global_state_after_if_else@2", "stack_out": [ "int_exists#0", "int_value#0" ] }, - "560": { - "op": "intc_0 // 0" + "557": { + "op": "intc_0 // 0", + "stack_out": [ + "int_exists#0", + "int_value#0", + "int_value#0" + ] }, - "561": { - "op": "frame_bury 1" + "558": { + "op": "frame_bury 1", + "stack_out": [ + "int_exists#0", + "int_value#0" + ] }, - "563": { + "560": { "block": "maybe_global_state_after_if_else@2", "stack_in": [ "int_exists#0", @@ -1466,7 +1620,7 @@ "int_value#0" ] }, - "565": { + "562": { "op": "frame_dig 0", "defined_out": [ "int_exists#0", @@ -1479,24 +1633,21 @@ "int_exists#0" ] }, - "567": { + "564": { "op": "uncover 3" }, - "569": { + "566": { "op": "uncover 3" }, - "571": { + "568": { "retsub": true, "op": "retsub" }, - "572": { + "569": { "subroutine": "smart_contracts.global_storage.contract.GlobalStorage.get_global_state_example", "params": {}, "block": "get_global_state_example", "stack_in": [], - "op": "proto 0 1" - }, - "575": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -1505,7 +1656,7 @@ "0" ] }, - "576": { + "570": { "op": "bytec_1 // \"global_int_full\"", "defined_out": [ "\"global_int_full\"", @@ -1516,7 +1667,7 @@ "\"global_int_full\"" ] }, - "577": { + "571": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%0#0", @@ -1527,7 +1678,7 @@ "maybe_exists%0#0" ] }, - "578": { + "572": { "op": "intc_0 // 0", "stack_out": [ "maybe_value%0#0", @@ -1535,7 +1686,7 @@ "0" ] }, - "579": { + "573": { "op": "cover 2", "stack_out": [ "0", @@ -1543,46 +1694,46 @@ "maybe_exists%0#0" ] }, - "581": { + "575": { "op": "select", "defined_out": [ - "tmp%0#0" + "state_get%0#0" ], "stack_out": [ - "tmp%0#0" + "state_get%0#0" ] }, - "582": { + "576": { "op": "intc_3 // 50", "defined_out": [ "50", - "tmp%0#0" + "state_get%0#0" ], "stack_out": [ - "tmp%0#0", + "state_get%0#0", "50" ] }, - "583": { + "577": { "op": "==", "defined_out": [ - "tmp%1#0" + "tmp%0#0" ], "stack_out": [ - "tmp%1#0" + "tmp%0#0" ] }, - "584": { + "578": { "op": "assert", "stack_out": [] }, - "585": { + "579": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "586": { + "580": { "op": "bytec 8 // \"global_int_simplified\"", "defined_out": [ "\"global_int_simplified\"", @@ -1593,7 +1744,7 @@ "\"global_int_simplified\"" ] }, - "588": { + "582": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%1#0", @@ -1604,14 +1755,14 @@ "maybe_exists%1#0" ] }, - "589": { + "583": { "error": "check self.global_int_simplified exists", "op": "assert // check self.global_int_simplified exists", "stack_out": [ "maybe_value%1#0" ] }, - "590": { + "584": { "op": "intc_2 // 10", "defined_out": [ "10", @@ -1622,26 +1773,26 @@ "10" ] }, - "591": { + "585": { "op": "==", "defined_out": [ - "tmp%2#0" + "tmp%1#0" ], "stack_out": [ - "tmp%2#0" + "tmp%1#0" ] }, - "592": { + "586": { "op": "assert", "stack_out": [] }, - "593": { + "587": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "594": { + "588": { "op": "bytec 11 // \"global_int_no_default\"", "defined_out": [ "\"global_int_no_default\"", @@ -1652,7 +1803,7 @@ "\"global_int_no_default\"" ] }, - "596": { + "590": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%2#0", @@ -1663,7 +1814,7 @@ "maybe_exists%2#0" ] }, - "597": { + "591": { "op": "intc_0 // 0", "stack_out": [ "maybe_value%2#0", @@ -1671,7 +1822,7 @@ "0" ] }, - "598": { + "592": { "op": "cover 2", "stack_out": [ "0", @@ -1679,35 +1830,35 @@ "maybe_exists%2#0" ] }, - "600": { + "594": { "op": "select", "defined_out": [ - "tmp%3#0" + "state_get%1#0" ], "stack_out": [ - "tmp%3#0" + "state_get%1#0" ] }, - "601": { + "595": { "op": "!", "defined_out": [ - "tmp%4#0" + "tmp%2#0" ], "stack_out": [ - "tmp%4#0" + "tmp%2#0" ] }, - "602": { + "596": { "op": "assert", "stack_out": [] }, - "603": { + "597": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "604": { + "598": { "op": "bytec_2 // \"global_bytes_full\"", "defined_out": [ "\"global_bytes_full\"", @@ -1718,7 +1869,7 @@ "\"global_bytes_full\"" ] }, - "605": { + "599": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%3#0", @@ -1729,7 +1880,7 @@ "maybe_exists%3#0" ] }, - "606": { + "600": { "op": "pushbytes 0x64656661756c74", "defined_out": [ "0x64656661756c74", @@ -1742,7 +1893,7 @@ "0x64656661756c74" ] }, - "615": { + "609": { "op": "cover 2", "stack_out": [ "0x64656661756c74", @@ -1750,40 +1901,40 @@ "maybe_exists%3#0" ] }, - "617": { + "611": { "op": "select", "defined_out": [ - "tmp%5#0" + "state_get%2#0" ], "stack_out": [ - "tmp%5#0" + "state_get%2#0" ] }, - "618": { + "612": { "op": "bytec_0 // 0x48656c6c6f", "defined_out": [ "0x48656c6c6f", - "tmp%5#0" + "state_get%2#0" ], "stack_out": [ - "tmp%5#0", + "state_get%2#0", "0x48656c6c6f" ] }, - "619": { + "613": { "op": "==", "defined_out": [ - "tmp%6#0" + "tmp%3#0" ], "stack_out": [ - "tmp%6#0" + "tmp%3#0" ] }, - "620": { + "614": { "op": "assert", "stack_out": [] }, - "621": { + "615": { "op": "intc_1 // 1", "defined_out": [ "1" @@ -1792,18 +1943,15 @@ "1" ] }, - "622": { + "616": { "retsub": true, "op": "retsub" }, - "623": { + "617": { "subroutine": "smart_contracts.global_storage.contract.GlobalStorage.maybe_global_state_example", "params": {}, "block": "maybe_global_state_example", "stack_in": [], - "op": "proto 0 1" - }, - "626": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -1812,7 +1960,7 @@ "0" ] }, - "627": { + "618": { "op": "bytec_1 // \"global_int_full\"", "defined_out": [ "\"global_int_full\"", @@ -1823,7 +1971,7 @@ "\"global_int_full\"" ] }, - "628": { + "619": { "op": "app_global_get_ex", "defined_out": [ "i_exists#0", @@ -1834,13 +1982,13 @@ "i_exists#0" ] }, - "629": { + "620": { "op": "assert", "stack_out": [ "int_value#0" ] }, - "630": { + "621": { "op": "intc_3 // 50", "defined_out": [ "50", @@ -1851,7 +1999,7 @@ "50" ] }, - "631": { + "622": { "op": "==", "defined_out": [ "tmp%0#0" @@ -1860,17 +2008,17 @@ "tmp%0#0" ] }, - "632": { + "623": { "op": "assert", "stack_out": [] }, - "633": { + "624": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "634": { + "625": { "op": "bytec_2 // \"global_bytes_full\"", "defined_out": [ "\"global_bytes_full\"", @@ -1881,7 +2029,7 @@ "\"global_bytes_full\"" ] }, - "635": { + "626": { "op": "app_global_get_ex", "defined_out": [ "b_exists#0", @@ -1892,13 +2040,13 @@ "b_exists#0" ] }, - "636": { + "627": { "op": "assert", "stack_out": [ "byte_value#0" ] }, - "637": { + "628": { "op": "bytec_0 // 0x48656c6c6f", "defined_out": [ "0x48656c6c6f", @@ -1909,7 +2057,7 @@ "0x48656c6c6f" ] }, - "638": { + "629": { "op": "==", "defined_out": [ "tmp%1#0" @@ -1918,24 +2066,24 @@ "tmp%1#0" ] }, - "639": { + "630": { "op": "assert", "stack_out": [] }, - "640": { + "631": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "641": { + "632": { "op": "bytec_2 // \"global_bytes_full\"", "stack_out": [ "0", "\"global_bytes_full\"" ] }, - "642": { + "633": { "op": "app_global_get_ex", "defined_out": [ "b_exists#0", @@ -1946,13 +2094,13 @@ "b_exists#0" ] }, - "643": { + "634": { "op": "bury 1", "stack_out": [ "b_exists#0" ] }, - "645": { + "636": { "op": "!", "defined_out": [ "tmp%2#0" @@ -1961,24 +2109,24 @@ "tmp%2#0" ] }, - "646": { + "637": { "op": "assert", "stack_out": [] }, - "647": { + "638": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "648": { + "639": { "op": "bytec_2 // \"global_bytes_full\"", "stack_out": [ "0", "\"global_bytes_full\"" ] }, - "649": { + "640": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%3#0", @@ -1989,21 +2137,21 @@ "maybe_exists%3#0" ] }, - "650": { + "641": { "error": "check self.global_bytes_full exists", "op": "assert // check self.global_bytes_full exists", "stack_out": [ "maybe_value%3#0" ] }, - "651": { + "642": { "op": "bytec_0 // 0x48656c6c6f", "stack_out": [ "maybe_value%3#0", "0x48656c6c6f" ] }, - "652": { + "643": { "op": "==", "defined_out": [ "tmp%3#0" @@ -2012,17 +2160,17 @@ "tmp%3#0" ] }, - "653": { + "644": { "op": "assert", "stack_out": [] }, - "654": { + "645": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "655": { + "646": { "op": "bytec 5 // \"global_bool_no_default\"", "defined_out": [ "\"global_bool_no_default\"", @@ -2033,7 +2181,7 @@ "\"global_bool_no_default\"" ] }, - "657": { + "648": { "op": "app_global_get_ex", "defined_out": [ "bool_value#0", @@ -2044,23 +2192,23 @@ "i_exists#0" ] }, - "658": { + "649": { "op": "assert", "stack_out": [ "bool_value#0" ] }, - "659": { + "650": { "op": "assert", "stack_out": [] }, - "660": { + "651": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "661": { + "652": { "op": "bytec 6 // \"global_asset\"", "defined_out": [ "\"global_asset\"", @@ -2071,7 +2219,7 @@ "\"global_asset\"" ] }, - "663": { + "654": { "op": "app_global_get_ex", "defined_out": [ "asset_value#0", @@ -2082,13 +2230,13 @@ "i_exists#0" ] }, - "664": { + "655": { "op": "assert", "stack_out": [ "asset_value#0" ] }, - "665": { + "656": { "op": "intc_2 // 10", "defined_out": [ "10", @@ -2099,7 +2247,7 @@ "10" ] }, - "666": { + "657": { "op": "==", "defined_out": [ "tmp%4#0" @@ -2108,17 +2256,17 @@ "tmp%4#0" ] }, - "667": { + "658": { "op": "assert", "stack_out": [] }, - "668": { + "659": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "669": { + "660": { "op": "bytec 12 // \"global_application\"", "defined_out": [ "\"global_application\"", @@ -2129,7 +2277,7 @@ "\"global_application\"" ] }, - "671": { + "662": { "op": "app_global_get_ex", "defined_out": [ "appln_value#0", @@ -2140,20 +2288,20 @@ "i_exists#0" ] }, - "672": { + "663": { "op": "assert", "stack_out": [ "appln_value#0" ] }, - "673": { + "664": { "op": "intc_2 // 10", "stack_out": [ "appln_value#0", "10" ] }, - "674": { + "665": { "op": "==", "defined_out": [ "tmp%5#0" @@ -2162,11 +2310,11 @@ "tmp%5#0" ] }, - "675": { + "666": { "op": "assert", "stack_out": [] }, - "676": { + "667": { "op": "intc_1 // 1", "defined_out": [ "1" @@ -2175,18 +2323,15 @@ "1" ] }, - "677": { + "668": { "retsub": true, "op": "retsub" }, - "678": { + "669": { "subroutine": "smart_contracts.global_storage.contract.GlobalStorage.check_global_state_example", "params": {}, "block": "check_global_state_example", "stack_in": [], - "op": "proto 0 1" - }, - "681": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2195,7 +2340,7 @@ "0" ] }, - "682": { + "670": { "op": "bytec_1 // \"global_int_full\"", "defined_out": [ "\"global_int_full\"", @@ -2206,7 +2351,7 @@ "\"global_int_full\"" ] }, - "683": { + "671": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%0#0", @@ -2217,14 +2362,14 @@ "maybe_exists%0#0" ] }, - "684": { + "672": { "error": "check self.global_int_full exists", "op": "assert // check self.global_int_full exists", "stack_out": [ "maybe_value%0#0" ] }, - "685": { + "673": { "op": "intc_3 // 50", "defined_out": [ "50", @@ -2235,7 +2380,7 @@ "50" ] }, - "686": { + "674": { "op": "==", "defined_out": [ "tmp%0#0" @@ -2244,17 +2389,17 @@ "tmp%0#0" ] }, - "687": { + "675": { "op": "assert", "stack_out": [] }, - "688": { + "676": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "689": { + "677": { "op": "bytec_2 // \"global_bytes_full\"", "defined_out": [ "\"global_bytes_full\"", @@ -2265,7 +2410,7 @@ "\"global_bytes_full\"" ] }, - "690": { + "678": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%1#0", @@ -2276,14 +2421,14 @@ "maybe_exists%1#0" ] }, - "691": { + "679": { "error": "check self.global_bytes_full exists", "op": "assert // check self.global_bytes_full exists", "stack_out": [ "maybe_value%1#0" ] }, - "692": { + "680": { "op": "bytec_0 // 0x48656c6c6f", "defined_out": [ "0x48656c6c6f", @@ -2294,7 +2439,7 @@ "0x48656c6c6f" ] }, - "693": { + "681": { "op": "==", "defined_out": [ "tmp%1#0" @@ -2303,17 +2448,17 @@ "tmp%1#0" ] }, - "694": { + "682": { "op": "assert", "stack_out": [] }, - "695": { + "683": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "696": { + "684": { "op": "bytec 8 // \"global_int_simplified\"", "defined_out": [ "\"global_int_simplified\"", @@ -2324,7 +2469,7 @@ "\"global_int_simplified\"" ] }, - "698": { + "686": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%2#0", @@ -2335,14 +2480,14 @@ "maybe_exists%2#0" ] }, - "699": { + "687": { "error": "check self.global_int_simplified exists", "op": "assert // check self.global_int_simplified exists", "stack_out": [ "maybe_value%2#0" ] }, - "700": { + "688": { "op": "intc_2 // 10", "defined_out": [ "10", @@ -2353,7 +2498,7 @@ "10" ] }, - "701": { + "689": { "op": "==", "defined_out": [ "tmp%2#0" @@ -2362,17 +2507,17 @@ "tmp%2#0" ] }, - "702": { + "690": { "op": "assert", "stack_out": [] }, - "703": { + "691": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "704": { + "692": { "op": "bytec 9 // \"global_bytes_simplified\"", "defined_out": [ "\"global_bytes_simplified\"", @@ -2383,7 +2528,7 @@ "\"global_bytes_simplified\"" ] }, - "706": { + "694": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%3#0", @@ -2394,21 +2539,21 @@ "maybe_exists%3#0" ] }, - "707": { + "695": { "error": "check self.global_bytes_simplified exists", "op": "assert // check self.global_bytes_simplified exists", "stack_out": [ "maybe_value%3#0" ] }, - "708": { + "696": { "op": "bytec_0 // 0x48656c6c6f", "stack_out": [ "maybe_value%3#0", "0x48656c6c6f" ] }, - "709": { + "697": { "op": "==", "defined_out": [ "tmp%3#0" @@ -2417,17 +2562,17 @@ "tmp%3#0" ] }, - "710": { + "698": { "op": "assert", "stack_out": [] }, - "711": { + "699": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "712": { + "700": { "op": "bytec 10 // \"global_bool_simplified\"", "defined_out": [ "\"global_bool_simplified\"", @@ -2438,7 +2583,7 @@ "\"global_bool_simplified\"" ] }, - "714": { + "702": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%4#0", @@ -2449,24 +2594,24 @@ "maybe_exists%4#0" ] }, - "715": { + "703": { "error": "check self.global_bool_simplified exists", "op": "assert // check self.global_bool_simplified exists", "stack_out": [ "maybe_value%4#0" ] }, - "716": { + "704": { "op": "assert", "stack_out": [] }, - "717": { + "705": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "718": { + "706": { "op": "bytec 11 // \"global_int_no_default\"", "defined_out": [ "\"global_int_no_default\"", @@ -2477,7 +2622,7 @@ "\"global_int_no_default\"" ] }, - "720": { + "708": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%5#0", @@ -2488,13 +2633,13 @@ "maybe_exists%5#0" ] }, - "721": { + "709": { "op": "bury 1", "stack_out": [ "maybe_exists%5#0" ] }, - "723": { + "711": { "op": "!", "defined_out": [ "tmp%4#0" @@ -2503,17 +2648,17 @@ "tmp%4#0" ] }, - "724": { + "712": { "op": "assert", "stack_out": [] }, - "725": { + "713": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "726": { + "714": { "op": "bytec 7 // \"global_bytes_no_default\"", "defined_out": [ "\"global_bytes_no_default\"", @@ -2524,7 +2669,7 @@ "\"global_bytes_no_default\"" ] }, - "728": { + "716": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%6#0", @@ -2535,13 +2680,13 @@ "maybe_exists%6#0" ] }, - "729": { + "717": { "op": "bury 1", "stack_out": [ "maybe_exists%6#0" ] }, - "731": { + "719": { "op": "!", "defined_out": [ "tmp%5#0" @@ -2550,17 +2695,17 @@ "tmp%5#0" ] }, - "732": { + "720": { "op": "assert", "stack_out": [] }, - "733": { + "721": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "734": { + "722": { "op": "bytec 5 // \"global_bool_no_default\"", "defined_out": [ "\"global_bool_no_default\"", @@ -2571,7 +2716,7 @@ "\"global_bool_no_default\"" ] }, - "736": { + "724": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%7#0", @@ -2582,13 +2727,13 @@ "maybe_exists%7#0" ] }, - "737": { + "725": { "op": "bury 1", "stack_out": [ "maybe_exists%7#0" ] }, - "739": { + "727": { "op": "!", "defined_out": [ "tmp%6#0" @@ -2597,17 +2742,17 @@ "tmp%6#0" ] }, - "740": { + "728": { "op": "assert", "stack_out": [] }, - "741": { + "729": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "742": { + "730": { "op": "bytec 6 // \"global_asset\"", "defined_out": [ "\"global_asset\"", @@ -2618,7 +2763,7 @@ "\"global_asset\"" ] }, - "744": { + "732": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%8#0", @@ -2629,21 +2774,21 @@ "maybe_exists%8#0" ] }, - "745": { + "733": { "error": "check self.global_asset exists", "op": "assert // check self.global_asset exists", "stack_out": [ "maybe_value%8#0" ] }, - "746": { + "734": { "op": "intc_2 // 10", "stack_out": [ "maybe_value%8#0", "10" ] }, - "747": { + "735": { "op": "==", "defined_out": [ "tmp%7#0" @@ -2652,17 +2797,17 @@ "tmp%7#0" ] }, - "748": { + "736": { "op": "assert", "stack_out": [] }, - "749": { + "737": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "750": { + "738": { "op": "bytec 12 // \"global_application\"", "defined_out": [ "\"global_application\"", @@ -2673,7 +2818,7 @@ "\"global_application\"" ] }, - "752": { + "740": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%9#0", @@ -2684,21 +2829,21 @@ "maybe_exists%9#0" ] }, - "753": { + "741": { "error": "check self.global_application exists", "op": "assert // check self.global_application exists", "stack_out": [ "maybe_value%9#0" ] }, - "754": { + "742": { "op": "intc_2 // 10", "stack_out": [ "maybe_value%9#0", "10" ] }, - "755": { + "743": { "op": "==", "defined_out": [ "tmp%8#0" @@ -2707,17 +2852,17 @@ "tmp%8#0" ] }, - "756": { + "744": { "op": "assert", "stack_out": [] }, - "757": { + "745": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "758": { + "746": { "op": "pushbytes \"global_account\"", "defined_out": [ "\"global_account\"", @@ -2728,7 +2873,7 @@ "\"global_account\"" ] }, - "774": { + "762": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%10#0", @@ -2739,35 +2884,35 @@ "maybe_exists%10#0" ] }, - "775": { + "763": { "error": "check self.global_account exists", "op": "assert // check self.global_account exists", "stack_out": [ "maybe_value%10#0" ] }, - "776": { + "764": { "op": "intc_0 // 0", "stack_out": [ "maybe_value%10#0", "0" ] }, - "777": { + "765": { "error": "Address length is 32 bytes", "op": "assert // Address length is 32 bytes", "stack_out": [ "maybe_value%10#0" ] }, - "778": { + "766": { "op": "bytec_0 // 0x48656c6c6f", "stack_out": [ "maybe_value%10#0", "0x48656c6c6f" ] }, - "779": { + "767": { "op": "==", "defined_out": [ "tmp%11#0" @@ -2776,11 +2921,11 @@ "tmp%11#0" ] }, - "780": { + "768": { "op": "assert", "stack_out": [] }, - "781": { + "769": { "op": "intc_1 // 1", "defined_out": [ "1" @@ -2789,11 +2934,11 @@ "1" ] }, - "782": { + "770": { "retsub": true, "op": "retsub" }, - "783": { + "771": { "subroutine": "smart_contracts.global_storage.contract.GlobalStorage.set_global_state", "params": { "value#0": "bytes" @@ -2802,7 +2947,7 @@ "stack_in": [], "op": "proto 1 0" }, - "786": { + "774": { "op": "bytec_2 // \"global_bytes_full\"", "defined_out": [ "\"global_bytes_full\"" @@ -2811,7 +2956,7 @@ "\"global_bytes_full\"" ] }, - "787": { + "775": { "op": "frame_dig -1", "defined_out": [ "\"global_bytes_full\"", @@ -2822,15 +2967,15 @@ "value#0 (copy)" ] }, - "789": { + "777": { "op": "app_global_put", "stack_out": [] }, - "790": { + "778": { "retsub": true, "op": "retsub" }, - "791": { + "779": { "subroutine": "smart_contracts.global_storage.contract.GlobalStorage.set_global_state_example", "params": { "value_bytes#0": "bytes", @@ -2841,7 +2986,7 @@ "stack_in": [], "op": "proto 3 0" }, - "794": { + "782": { "op": "bytec 7 // \"global_bytes_no_default\"", "defined_out": [ "\"global_bytes_no_default\"" @@ -2850,7 +2995,7 @@ "\"global_bytes_no_default\"" ] }, - "796": { + "784": { "op": "frame_dig -3", "defined_out": [ "\"global_bytes_no_default\"", @@ -2861,11 +3006,11 @@ "value_bytes#0 (copy)" ] }, - "798": { + "786": { "op": "app_global_put", "stack_out": [] }, - "799": { + "787": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2874,14 +3019,14 @@ "0" ] }, - "800": { + "788": { "op": "bytec 7 // \"global_bytes_no_default\"", "stack_out": [ "0", "\"global_bytes_no_default\"" ] }, - "802": { + "790": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%0#0", @@ -2892,21 +3037,21 @@ "maybe_exists%0#0" ] }, - "803": { + "791": { "error": "check self.global_bytes_no_default exists", "op": "assert // check self.global_bytes_no_default exists", "stack_out": [ "maybe_value%0#0" ] }, - "804": { + "792": { "op": "frame_dig -3", "stack_out": [ "maybe_value%0#0", "value_bytes#0 (copy)" ] }, - "806": { + "794": { "op": "==", "defined_out": [ "tmp%0#0" @@ -2915,11 +3060,11 @@ "tmp%0#0" ] }, - "807": { + "795": { "op": "assert", "stack_out": [] }, - "808": { + "796": { "op": "bytec 5 // \"global_bool_no_default\"", "defined_out": [ "\"global_bool_no_default\"" @@ -2928,7 +3073,7 @@ "\"global_bool_no_default\"" ] }, - "810": { + "798": { "op": "frame_dig -1", "defined_out": [ "\"global_bool_no_default\"", @@ -2939,24 +3084,24 @@ "value_bool#0 (copy)" ] }, - "812": { + "800": { "op": "app_global_put", "stack_out": [] }, - "813": { + "801": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "814": { + "802": { "op": "bytec 5 // \"global_bool_no_default\"", "stack_out": [ "0", "\"global_bool_no_default\"" ] }, - "816": { + "804": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%1#0", @@ -2967,18 +3112,18 @@ "maybe_exists%1#0" ] }, - "817": { + "805": { "error": "check self.global_bool_no_default exists", "op": "assert // check self.global_bool_no_default exists", "stack_out": [ "maybe_value%1#0" ] }, - "818": { + "806": { "op": "assert", "stack_out": [] }, - "819": { + "807": { "op": "bytec 6 // \"global_asset\"", "defined_out": [ "\"global_asset\"" @@ -2987,7 +3132,7 @@ "\"global_asset\"" ] }, - "821": { + "809": { "op": "frame_dig -2", "defined_out": [ "\"global_asset\"", @@ -2998,24 +3143,24 @@ "value_asset#0 (copy)" ] }, - "823": { + "811": { "op": "app_global_put", "stack_out": [] }, - "824": { + "812": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "825": { + "813": { "op": "bytec 6 // \"global_asset\"", "stack_out": [ "0", "\"global_asset\"" ] }, - "827": { + "815": { "op": "app_global_get_ex", "defined_out": [ "maybe_exists%2#0", @@ -3026,21 +3171,21 @@ "maybe_exists%2#0" ] }, - "828": { + "816": { "error": "check self.global_asset exists", "op": "assert // check self.global_asset exists", "stack_out": [ "maybe_value%2#0" ] }, - "829": { + "817": { "op": "frame_dig -2", "stack_out": [ "maybe_value%2#0", "value_asset#0 (copy)" ] }, - "831": { + "819": { "op": "==", "defined_out": [ "tmp%1#0" @@ -3049,22 +3194,19 @@ "tmp%1#0" ] }, - "832": { + "820": { "op": "assert", "stack_out": [] }, - "833": { + "821": { "retsub": true, "op": "retsub" }, - "834": { + "822": { "subroutine": "smart_contracts.global_storage.contract.GlobalStorage.del_global_state", "params": {}, "block": "del_global_state", "stack_in": [], - "op": "proto 0 1" - }, - "837": { "op": "bytec_1 // \"global_int_full\"", "defined_out": [ "\"global_int_full\"" @@ -3073,11 +3215,11 @@ "\"global_int_full\"" ] }, - "838": { + "823": { "op": "app_global_del", "stack_out": [] }, - "839": { + "824": { "op": "intc_1 // 1", "defined_out": [ "1" @@ -3086,18 +3228,15 @@ "1" ] }, - "840": { + "825": { "retsub": true, "op": "retsub" }, - "841": { + "826": { "subroutine": "smart_contracts.global_storage.contract.GlobalStorage.del_global_state_example", "params": {}, "block": "del_global_state_example", "stack_in": [], - "op": "proto 0 1" - }, - "844": { "op": "bytec 7 // \"global_bytes_no_default\"", "defined_out": [ "\"global_bytes_no_default\"" @@ -3106,11 +3245,11 @@ "\"global_bytes_no_default\"" ] }, - "846": { + "828": { "op": "app_global_del", "stack_out": [] }, - "847": { + "829": { "op": "bytec 5 // \"global_bool_no_default\"", "defined_out": [ "\"global_bool_no_default\"" @@ -3119,11 +3258,11 @@ "\"global_bool_no_default\"" ] }, - "849": { + "831": { "op": "app_global_del", "stack_out": [] }, - "850": { + "832": { "op": "bytec 6 // \"global_asset\"", "defined_out": [ "\"global_asset\"" @@ -3132,11 +3271,11 @@ "\"global_asset\"" ] }, - "852": { + "834": { "op": "app_global_del", "stack_out": [] }, - "853": { + "835": { "op": "intc_1 // 1", "defined_out": [ "1" @@ -3145,7 +3284,7 @@ "1" ] }, - "854": { + "836": { "retsub": true, "op": "retsub" } diff --git a/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.approval.teal b/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.approval.teal index 827c686..0f10254 100644 --- a/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.approval.teal +++ b/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.approval.teal @@ -269,11 +269,6 @@ main_bare_routing@14: // smart_contracts.global_storage.contract.GlobalStorage.get_global_state() -> uint64: get_global_state: - // smart_contracts/global_storage/contract.py:41-43 - // # example: READ_GLOBAL_STATE - // @arc4.abimethod - // def get_global_state(self) -> UInt64: - proto 0 1 // smart_contracts/global_storage/contract.py:44 // return self.global_int_full.get(default=UInt64(0)) intc_0 // 0 @@ -319,10 +314,6 @@ maybe_global_state_after_if_else@2: // smart_contracts.global_storage.contract.GlobalStorage.get_global_state_example() -> uint64: get_global_state_example: - // smart_contracts/global_storage/contract.py:53-54 - // @arc4.abimethod - // def get_global_state_example(self) -> bool: - proto 0 1 // smart_contracts/global_storage/contract.py:55 // assert self.global_int_full.get(default=UInt64(0)) == 50 # uint64 intc_0 // 0 @@ -372,11 +363,6 @@ get_global_state_example: // smart_contracts.global_storage.contract.GlobalStorage.maybe_global_state_example() -> uint64: maybe_global_state_example: - // smart_contracts/global_storage/contract.py:64-66 - // # example: READ_GLOBAL_STATE_EXAMPLES - // @arc4.abimethod - // def maybe_global_state_example(self) -> bool: - proto 0 1 // smart_contracts/global_storage/contract.py:67 // int_value, i_exists = self.global_int_full.maybe() # uint64 intc_0 // 0 @@ -467,11 +453,6 @@ maybe_global_state_example: // smart_contracts.global_storage.contract.GlobalStorage.check_global_state_example() -> uint64: check_global_state_example: - // smart_contracts/global_storage/contract.py:95-97 - // # example: VALUE_PROPERTY_GLOBAL_STATE_EXAMPLES - // @arc4.abimethod - // def check_global_state_example(self) -> bool: - proto 0 1 // smart_contracts/global_storage/contract.py:98 // assert self.global_int_full.value == 50 # uint64 intc_0 // 0 @@ -647,11 +628,6 @@ set_global_state_example: // smart_contracts.global_storage.contract.GlobalStorage.del_global_state() -> uint64: del_global_state: - // smart_contracts/global_storage/contract.py:143-145 - // # example: DELETE_GLOBAL_STATE - // @arc4.abimethod - // def del_global_state(self) -> bool: - proto 0 1 // smart_contracts/global_storage/contract.py:146 // del self.global_int_full.value bytec_1 // "global_int_full" @@ -664,11 +640,6 @@ del_global_state: // smart_contracts.global_storage.contract.GlobalStorage.del_global_state_example() -> uint64: del_global_state_example: - // smart_contracts/global_storage/contract.py:151-153 - // # example: DELETE_GLOBAL_STATE_EXAMPLES - // @arc4.abimethod - // def del_global_state_example(self) -> bool: - proto 0 1 // smart_contracts/global_storage/contract.py:154 // del self.global_bytes_no_default.value bytec 7 // "global_bytes_no_default" diff --git a/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.arc56.json b/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.arc56.json index 9cffbfd..83daca4 100644 --- a/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/global_storage/GlobalStorage.arc56.json @@ -259,7 +259,7 @@ "sourceInfo": [ { "pc": [ - 777 + 765 ], "errorMessage": "Address length is 32 bytes" }, @@ -299,64 +299,64 @@ }, { "pc": [ - 775 + 763 ], "errorMessage": "check self.global_account exists" }, { "pc": [ - 753 + 741 ], "errorMessage": "check self.global_application exists" }, { "pc": [ - 745, - 828 + 733, + 816 ], "errorMessage": "check self.global_asset exists" }, { "pc": [ - 817 + 805 ], "errorMessage": "check self.global_bool_no_default exists" }, { "pc": [ - 715 + 703 ], "errorMessage": "check self.global_bool_simplified exists" }, { "pc": [ - 650, - 691 + 641, + 679 ], "errorMessage": "check self.global_bytes_full exists" }, { "pc": [ - 803 + 791 ], "errorMessage": "check self.global_bytes_no_default exists" }, { "pc": [ - 707 + 695 ], "errorMessage": "check self.global_bytes_simplified exists" }, { "pc": [ - 684 + 672 ], "errorMessage": "check self.global_int_full exists" }, { "pc": [ - 589, - 699 + 583, + 687 ], "errorMessage": "check self.global_int_simplified exists" } @@ -369,19 +369,19 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMTAgNTAKICAgIGJ5dGVjYmxvY2sgMHg0ODY1NmM2YzZmICJnbG9iYWxfaW50X2Z1bGwiICJnbG9iYWxfYnl0ZXNfZnVsbCIgMHgxNTFmN2M3NSAweDAwICJnbG9iYWxfYm9vbF9ub19kZWZhdWx0IiAiZ2xvYmFsX2Fzc2V0IiAiZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQiICJnbG9iYWxfaW50X3NpbXBsaWZpZWQiICJnbG9iYWxfYnl0ZXNfc2ltcGxpZmllZCIgImdsb2JhbF9ib29sX3NpbXBsaWZpZWQiICJnbG9iYWxfaW50X25vX2RlZmF1bHQiICJnbG9iYWxfYXBwbGljYXRpb24iCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYuZ2xvYmFsX2ludF9mdWxsID0gR2xvYmFsU3RhdGUoVUludDY0KDUwKSkgICMgVUludDY0IHdpdGggZGVmYXVsdCB2YWx1ZSA9IDUwCiAgICBieXRlY18xIC8vICJnbG9iYWxfaW50X2Z1bGwiCiAgICBpbnRjXzMgLy8gNTAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTcKICAgIC8vIHNlbGYuZ2xvYmFsX2ludF9zaW1wbGlmaWVkID0gVUludDY0KAogICAgYnl0ZWMgOCAvLyAiZ2xvYmFsX2ludF9zaW1wbGlmaWVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3LTE5CiAgICAvLyBzZWxmLmdsb2JhbF9pbnRfc2ltcGxpZmllZCA9IFVJbnQ2NCgKICAgIC8vICAgICAxMAogICAgLy8gKSAgIyBVSW50NjQgc2ltcGxpZmllZCB3aXRoIGRlZmF1bHQgdmFsdWUgPSAxMAogICAgaW50Y18yIC8vIDEwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyLTIzCiAgICAvLyAjIGV4YW1wbGU6IElOSVRfQllURVMKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwgPSBHbG9iYWxTdGF0ZSgKICAgIGJ5dGVjXzIgLy8gImdsb2JhbF9ieXRlc19mdWxsIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0CiAgICAvLyBCeXRlcyhiIkhlbGxvIikKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MjItMjUKICAgIC8vICMgZXhhbXBsZTogSU5JVF9CWVRFUwogICAgLy8gc2VsZi5nbG9iYWxfYnl0ZXNfZnVsbCA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIEJ5dGVzKGIiSGVsbG8iKQogICAgLy8gKSAgIyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUgPSBieXRlcyhIZWxsbykKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MjYKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX3NpbXBsaWZpZWQgPSBCeXRlcygKICAgIGJ5dGVjIDkgLy8gImdsb2JhbF9ieXRlc19zaW1wbGlmaWVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2LTI4CiAgICAvLyBzZWxmLmdsb2JhbF9ieXRlc19zaW1wbGlmaWVkID0gQnl0ZXMoCiAgICAvLyAgICAgYiJIZWxsbyIKICAgIC8vICkgICMgQnl0ZXMgc2ltcGxpZmllZCB3aXRoIGRlZmF1bHQgdmFsdWUgPSBieXRlcyhIZWxsbykKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyCiAgICAvLyBzZWxmLmdsb2JhbF9ib29sX3NpbXBsaWZpZWQgPSBUcnVlICAjIEJvb2wKICAgIGJ5dGVjIDEwIC8vICJnbG9iYWxfYm9vbF9zaW1wbGlmaWVkIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDE0CiAgICBwdXNoYnl0ZXNzIDB4Y2UxNmQwODMgMHg4OWUyZTEyOCAweGNmNjY1ODc4IDB4ZDQ5ODY5ZGEgMHg1YmE0ZjQ2OSAweDg2NmQ0NDg0IDB4Mzg2OGU0YzcgMHgzZmVhZTMwZSAweDhmZDA1ZDVhIC8vIG1ldGhvZCAiZ2V0X2dsb2JhbF9zdGF0ZSgpdWludDY0IiwgbWV0aG9kICJtYXliZV9nbG9iYWxfc3RhdGUoKSh1aW50NjQsYm9vbCkiLCBtZXRob2QgImdldF9nbG9iYWxfc3RhdGVfZXhhbXBsZSgpYm9vbCIsIG1ldGhvZCAibWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoKWJvb2wiLCBtZXRob2QgImNoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlKClib29sIiwgbWV0aG9kICJzZXRfZ2xvYmFsX3N0YXRlKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJzZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoYnl0ZVtdLGFzc2V0LGJvb2wpdm9pZCIsIG1ldGhvZCAiZGVsX2dsb2JhbF9zdGF0ZSgpYm9vbCIsIG1ldGhvZCAiZGVsX2dsb2JhbF9zdGF0ZV9leGFtcGxlKClib29sIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRfZ2xvYmFsX3N0YXRlX3JvdXRlQDUgbWFpbl9tYXliZV9nbG9iYWxfc3RhdGVfcm91dGVANiBtYWluX2dldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUA3IG1haW5fbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGVfcm91dGVAOCBtYWluX2NoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDkgbWFpbl9zZXRfZ2xvYmFsX3N0YXRlX3JvdXRlQDEwIG1haW5fc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDExIG1haW5fZGVsX2dsb2JhbF9zdGF0ZV9yb3V0ZUAxMiBtYWluX2RlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMwoKbWFpbl9hZnRlcl9pZl9lbHNlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzCiAgICAvLyBjbGFzcyBHbG9iYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2RlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTEtMTUyCiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9HTE9CQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZQogICAgYnl0ZWMgNCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsX2dsb2JhbF9zdGF0ZV9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDMtMTQ0CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbF9nbG9iYWxfc3RhdGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjMtMTI0CiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0dMT0JBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMy0xMjQKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9nbG9iYWxfc3RhdGVfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE2LTExNwogICAgLy8gIyBleGFtcGxlOiBXUklURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIEdsb2JhbFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE2LTExNwogICAgLy8gIyBleGFtcGxlOiBXUklURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBzZXRfZ2xvYmFsX3N0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6OTUtOTYKICAgIC8vICMgZXhhbXBsZTogVkFMVUVfUFJPUEVSVFlfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjaGVja19nbG9iYWxfc3RhdGVfZXhhbXBsZQogICAgYnl0ZWMgNCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGVfcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2NC02NQogICAgLy8gIyBleGFtcGxlOiBSRUFEX0dMT0JBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2dsb2JhbF9zdGF0ZV9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9nbG9iYWxfc3RhdGUKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2dsb2JhbF9zdGF0ZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQxLTQyCiAgICAvLyAjIGV4YW1wbGU6IFJFQURfR0xPQkFMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfZ2xvYmFsX3N0YXRlCiAgICBpdG9iCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5nZXRfZ2xvYmFsX3N0YXRlKCkgLT4gdWludDY0OgpnZXRfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQxLTQzCiAgICAvLyAjIGV4YW1wbGU6IFJFQURfR0xPQkFMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBnZXRfZ2xvYmFsX3N0YXRlKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyByZXR1cm4gc2VsZi5nbG9iYWxfaW50X2Z1bGwuZ2V0KGRlZmF1bHQ9VUludDY0KDApKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5tYXliZV9nbG9iYWxfc3RhdGUoKSAtPiB1aW50NjQsIHVpbnQ2NDoKbWF5YmVfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ2LTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYXliZV9nbG9iYWxfc3RhdGUoc2VsZikgLT4gdHVwbGVbVUludDY0LCBib29sXToKICAgIHByb3RvIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBpbnRfdmFsdWUsIGludF9leGlzdHMgPSBzZWxmLmdsb2JhbF9pbnRfZnVsbC5tYXliZSgpICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBpZiBub3QgaW50X2V4aXN0czoKICAgIGJueiBtYXliZV9nbG9iYWxfc3RhdGVfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NTAKICAgIC8vIGludF92YWx1ZSA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMQoKbWF5YmVfZ2xvYmFsX3N0YXRlX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1MQogICAgLy8gcmV0dXJuIGludF92YWx1ZSwgaW50X2V4aXN0cwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmdsb2JhbF9zdG9yYWdlLmNvbnRyYWN0Lkdsb2JhbFN0b3JhZ2UuZ2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlKCkgLT4gdWludDY0OgpnZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NTMtNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9nbG9iYWxfc3RhdGVfZXhhbXBsZShzZWxmKSAtPiBib29sOgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NTUKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9pbnRfZnVsbC5nZXQoZGVmYXVsdD1VSW50NjQoMCkpID09IDUwICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzMgLy8gNTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1NgogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2ludF9zaW1wbGlmaWVkID09IFVJbnQ2NCgxMCkgICMgZ2V0IGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZ2xvYmFsX2ludF9zaW1wbGlmaWVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9pbnRfc2ltcGxpZmllZCBleGlzdHMKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU3CiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfaW50X25vX2RlZmF1bHQuZ2V0KGRlZmF1bHQ9VUludDY0KDApKSA9PSAwCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gImdsb2JhbF9pbnRfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1OQogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwuZ2V0KEJ5dGVzKGIiZGVmYXVsdCIpKSA9PSBiIkhlbGxvIiAgIyBieXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsX2J5dGVzX2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcHVzaGJ5dGVzIDB4NjQ2NTY2NjE3NTZjNzQKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWNfMCAvLyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2MAogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5tYXliZV9nbG9iYWxfc3RhdGVfZXhhbXBsZSgpIC0+IHVpbnQ2NDoKbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NjQtNjYKICAgIC8vICMgZXhhbXBsZTogUkVBRF9HTE9CQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIG1heWJlX2dsb2JhbF9zdGF0ZV9leGFtcGxlKHNlbGYpIC0+IGJvb2w6CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2NwogICAgLy8gaW50X3ZhbHVlLCBpX2V4aXN0cyA9IHNlbGYuZ2xvYmFsX2ludF9mdWxsLm1heWJlKCkgICMgdWludDY0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsX2ludF9mdWxsIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2OAogICAgLy8gYXNzZXJ0IGlfZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2OQogICAgLy8gYXNzZXJ0IGludF92YWx1ZSA9PSBVSW50NjQoNTApCiAgICBpbnRjXzMgLy8gNTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3MQogICAgLy8gYnl0ZV92YWx1ZSwgYl9leGlzdHMgPSBzZWxmLmdsb2JhbF9ieXRlc19mdWxsLm1heWJlKCkgICMgYnl0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbF9ieXRlc19mdWxsIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3MgogICAgLy8gYXNzZXJ0IGJfZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3MwogICAgLy8gYXNzZXJ0IGJ5dGVfdmFsdWUgPT0gYiJIZWxsbyIKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NzUKICAgIC8vIGJ5dGVfZGVsX3ZhbHVlLCBiX2V4aXN0cyA9IHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwubWF5YmUoKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbF9ieXRlc19mdWxsIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBhc3NlcnQgbm90IGJfZXhpc3RzCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3NwogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwudmFsdWUgPT0gQnl0ZXMoYiJIZWxsbyIpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsX2J5dGVzX2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwgZXhpc3RzCiAgICBieXRlY18wIC8vIDB4NDg2NTZjNmM2ZgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc5CiAgICAvLyBib29sX3ZhbHVlLCBpX2V4aXN0cyA9IHNlbGYuZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdC5tYXliZSgpICAjIGJvb2wKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJnbG9iYWxfYm9vbF9ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4MAogICAgLy8gYXNzZXJ0IGlfZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4MQogICAgLy8gYXNzZXJ0IGJvb2woYm9vbF92YWx1ZSkKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBhc3NldF92YWx1ZSwgaV9leGlzdHMgPSBzZWxmLmdsb2JhbF9hc3NldC5tYXliZSgpICAjIEFzc2V0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Fzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4NAogICAgLy8gYXNzZXJ0IGlfZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4NQogICAgLy8gYXNzZXJ0IGFzc2V0X3ZhbHVlID09IEFzc2V0KFVJbnQ2NCgxMCkpCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4NwogICAgLy8gYXBwbG5fdmFsdWUsIGlfZXhpc3RzID0gc2VsZi5nbG9iYWxfYXBwbGljYXRpb24ubWF5YmUoKSAgIyBBcHBsaWNhdGlvbgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJnbG9iYWxfYXBwbGljYXRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg4CiAgICAvLyBhc3NlcnQgaV9leGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg5CiAgICAvLyBhc3NlcnQgYXBwbG5fdmFsdWUgPT0gQXBwbGljYXRpb24oVUludDY0KDEwKSkKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjkxCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nbG9iYWxfc3RvcmFnZS5jb250cmFjdC5HbG9iYWxTdG9yYWdlLmNoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlKCkgLT4gdWludDY0OgpjaGVja19nbG9iYWxfc3RhdGVfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo5NS05NwogICAgLy8gIyBleGFtcGxlOiBWQUxVRV9QUk9QRVJUWV9HTE9CQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGNoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlKHNlbGYpIC0+IGJvb2w6CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo5OAogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2ludF9mdWxsLnZhbHVlID09IDUwICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfaW50X2Z1bGwgZXhpc3RzCiAgICBpbnRjXzMgLy8gNTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwudmFsdWUgPT0gQnl0ZXMoYiJIZWxsbyIpICAjIGJ5dGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJnbG9iYWxfYnl0ZXNfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYnl0ZXNfZnVsbCBleGlzdHMKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAxCiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfaW50X3NpbXBsaWZpZWQgPT0gMTAgICMgdWludDY0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZ2xvYmFsX2ludF9zaW1wbGlmaWVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9pbnRfc2ltcGxpZmllZCBleGlzdHMKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2J5dGVzX3NpbXBsaWZpZWQgPT0gYiJIZWxsbyIgICMgYnl0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDkgLy8gImdsb2JhbF9ieXRlc19zaW1wbGlmaWVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9ieXRlc19zaW1wbGlmaWVkIGV4aXN0cwogICAgYnl0ZWNfMCAvLyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDMKICAgIC8vIGFzc2VydCBib29sKHNlbGYuZ2xvYmFsX2Jvb2xfc2ltcGxpZmllZCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAiZ2xvYmFsX2Jvb2xfc2ltcGxpZmllZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYm9vbF9zaW1wbGlmaWVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTA1CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuZ2xvYmFsX2ludF9ub19kZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gImdsb2JhbF9pbnRfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwNgogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmdsb2JhbF9ieXRlc19ub19kZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAiZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDcKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5nbG9iYWxfYm9vbF9ub19kZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwOQogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2Fzc2V0LnZhbHVlID09IEFzc2V0KFVJbnQ2NCgxMCkpICAjIEFzc2V0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Fzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9hc3NldCBleGlzdHMKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExMAogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2FwcGxpY2F0aW9uLnZhbHVlID09IEFwcGxpY2F0aW9uKFVJbnQ2NCgxMCkpICAjIEFwcGxpY2F0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTIgLy8gImdsb2JhbF9hcHBsaWNhdGlvbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYXBwbGljYXRpb24gZXhpc3RzCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTEKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9hY2NvdW50LnZhbHVlID09IEFjY291bnQoQnl0ZXMoYiJIZWxsbyIpKSAgIyBBY2NvdW50CiAgICBpbnRjXzAgLy8gMAogICAgcHVzaGJ5dGVzICJnbG9iYWxfYWNjb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYWNjb3VudCBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBhc3NlcnQgLy8gQWRkcmVzcyBsZW5ndGggaXMgMzIgYnl0ZXMKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTEyCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nbG9iYWxfc3RvcmFnZS5jb250cmFjdC5HbG9iYWxTdG9yYWdlLnNldF9nbG9iYWxfc3RhdGUodmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExNi0xMTgKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfR0xPQkFMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzZXRfZ2xvYmFsX3N0YXRlKHNlbGYsIHZhbHVlOiBCeXRlcykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExOQogICAgLy8gc2VsZi5nbG9iYWxfYnl0ZXNfZnVsbC52YWx1ZSA9IHZhbHVlCiAgICBieXRlY18yIC8vICJnbG9iYWxfYnl0ZXNfZnVsbCIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nbG9iYWxfc3RvcmFnZS5jb250cmFjdC5HbG9iYWxTdG9yYWdlLnNldF9nbG9iYWxfc3RhdGVfZXhhbXBsZSh2YWx1ZV9ieXRlczogYnl0ZXMsIHZhbHVlX2Fzc2V0OiB1aW50NjQsIHZhbHVlX2Jvb2w6IHVpbnQ2NCkgLT4gdm9pZDoKc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMy0xMzEKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoCiAgICAvLyAgICAgc2VsZiwKICAgIC8vICAgICB2YWx1ZV9ieXRlczogQnl0ZXMsCiAgICAvLyAgICAgdmFsdWVfYXNzZXQ6IEFzc2V0LAogICAgLy8gICAgICosCiAgICAvLyAgICAgdmFsdWVfYm9vbDogYm9vbCwKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDMgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzMgogICAgLy8gc2VsZi5nbG9iYWxfYnl0ZXNfbm9fZGVmYXVsdC52YWx1ZSA9IHZhbHVlX2J5dGVzCiAgICBieXRlYyA3IC8vICJnbG9iYWxfYnl0ZXNfbm9fZGVmYXVsdCIKICAgIGZyYW1lX2RpZyAtMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzMKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9ieXRlc19ub19kZWZhdWx0LnZhbHVlID09IHZhbHVlX2J5dGVzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAiZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzUKICAgIC8vIHNlbGYuZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdC52YWx1ZSA9IHZhbHVlX2Jvb2wgICMgQm9vbAogICAgYnl0ZWMgNSAvLyAiZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdCIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzYKICAgIC8vIGFzc2VydCBib29sKHNlbGYuZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdC52YWx1ZSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJnbG9iYWxfYm9vbF9ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9ib29sX25vX2RlZmF1bHQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzgKICAgIC8vIHNlbGYuZ2xvYmFsX2Fzc2V0LnZhbHVlID0gdmFsdWVfYXNzZXQgICMgQXNzZXQKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9hc3NldCIKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzkKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9hc3NldC52YWx1ZSA9PSB2YWx1ZV9hc3NldAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYXNzZXQgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nbG9iYWxfc3RvcmFnZS5jb250cmFjdC5HbG9iYWxTdG9yYWdlLmRlbF9nbG9iYWxfc3RhdGUoKSAtPiB1aW50NjQ6CmRlbF9nbG9iYWxfc3RhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTQzLTE0NQogICAgLy8gIyBleGFtcGxlOiBERUxFVEVfR0xPQkFMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBkZWxfZ2xvYmFsX3N0YXRlKHNlbGYpIC0+IGJvb2w6CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDYKICAgIC8vIGRlbCBzZWxmLmdsb2JhbF9pbnRfZnVsbC52YWx1ZQogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsX2ludF9mdWxsIgogICAgYXBwX2dsb2JhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDcKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmdsb2JhbF9zdG9yYWdlLmNvbnRyYWN0Lkdsb2JhbFN0b3JhZ2UuZGVsX2dsb2JhbF9zdGF0ZV9leGFtcGxlKCkgLT4gdWludDY0OgpkZWxfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTUxLTE1MwogICAgLy8gIyBleGFtcGxlOiBERUxFVEVfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBkZWxfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoc2VsZikgLT4gYm9vbDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NAogICAgLy8gZGVsIHNlbGYuZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQudmFsdWUKICAgIGJ5dGVjIDcgLy8gImdsb2JhbF9ieXRlc19ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTUKICAgIC8vIGRlbCBzZWxmLmdsb2JhbF9ib29sX25vX2RlZmF1bHQudmFsdWUKICAgIGJ5dGVjIDUgLy8gImdsb2JhbF9ib29sX25vX2RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2RlbAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gZGVsIHNlbGYuZ2xvYmFsX2Fzc2V0LnZhbHVlCiAgICBieXRlYyA2IC8vICJnbG9iYWxfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2RlbAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NwogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMTAgNTAKICAgIGJ5dGVjYmxvY2sgMHg0ODY1NmM2YzZmICJnbG9iYWxfaW50X2Z1bGwiICJnbG9iYWxfYnl0ZXNfZnVsbCIgMHgxNTFmN2M3NSAweDAwICJnbG9iYWxfYm9vbF9ub19kZWZhdWx0IiAiZ2xvYmFsX2Fzc2V0IiAiZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQiICJnbG9iYWxfaW50X3NpbXBsaWZpZWQiICJnbG9iYWxfYnl0ZXNfc2ltcGxpZmllZCIgImdsb2JhbF9ib29sX3NpbXBsaWZpZWQiICJnbG9iYWxfaW50X25vX2RlZmF1bHQiICJnbG9iYWxfYXBwbGljYXRpb24iCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYuZ2xvYmFsX2ludF9mdWxsID0gR2xvYmFsU3RhdGUoVUludDY0KDUwKSkgICMgVUludDY0IHdpdGggZGVmYXVsdCB2YWx1ZSA9IDUwCiAgICBieXRlY18xIC8vICJnbG9iYWxfaW50X2Z1bGwiCiAgICBpbnRjXzMgLy8gNTAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTcKICAgIC8vIHNlbGYuZ2xvYmFsX2ludF9zaW1wbGlmaWVkID0gVUludDY0KAogICAgYnl0ZWMgOCAvLyAiZ2xvYmFsX2ludF9zaW1wbGlmaWVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3LTE5CiAgICAvLyBzZWxmLmdsb2JhbF9pbnRfc2ltcGxpZmllZCA9IFVJbnQ2NCgKICAgIC8vICAgICAxMAogICAgLy8gKSAgIyBVSW50NjQgc2ltcGxpZmllZCB3aXRoIGRlZmF1bHQgdmFsdWUgPSAxMAogICAgaW50Y18yIC8vIDEwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyLTIzCiAgICAvLyAjIGV4YW1wbGU6IElOSVRfQllURVMKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwgPSBHbG9iYWxTdGF0ZSgKICAgIGJ5dGVjXzIgLy8gImdsb2JhbF9ieXRlc19mdWxsIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0CiAgICAvLyBCeXRlcyhiIkhlbGxvIikKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MjItMjUKICAgIC8vICMgZXhhbXBsZTogSU5JVF9CWVRFUwogICAgLy8gc2VsZi5nbG9iYWxfYnl0ZXNfZnVsbCA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIEJ5dGVzKGIiSGVsbG8iKQogICAgLy8gKSAgIyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUgPSBieXRlcyhIZWxsbykKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MjYKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX3NpbXBsaWZpZWQgPSBCeXRlcygKICAgIGJ5dGVjIDkgLy8gImdsb2JhbF9ieXRlc19zaW1wbGlmaWVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2LTI4CiAgICAvLyBzZWxmLmdsb2JhbF9ieXRlc19zaW1wbGlmaWVkID0gQnl0ZXMoCiAgICAvLyAgICAgYiJIZWxsbyIKICAgIC8vICkgICMgQnl0ZXMgc2ltcGxpZmllZCB3aXRoIGRlZmF1bHQgdmFsdWUgPSBieXRlcyhIZWxsbykKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyCiAgICAvLyBzZWxmLmdsb2JhbF9ib29sX3NpbXBsaWZpZWQgPSBUcnVlICAjIEJvb2wKICAgIGJ5dGVjIDEwIC8vICJnbG9iYWxfYm9vbF9zaW1wbGlmaWVkIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDE0CiAgICBwdXNoYnl0ZXNzIDB4Y2UxNmQwODMgMHg4OWUyZTEyOCAweGNmNjY1ODc4IDB4ZDQ5ODY5ZGEgMHg1YmE0ZjQ2OSAweDg2NmQ0NDg0IDB4Mzg2OGU0YzcgMHgzZmVhZTMwZSAweDhmZDA1ZDVhIC8vIG1ldGhvZCAiZ2V0X2dsb2JhbF9zdGF0ZSgpdWludDY0IiwgbWV0aG9kICJtYXliZV9nbG9iYWxfc3RhdGUoKSh1aW50NjQsYm9vbCkiLCBtZXRob2QgImdldF9nbG9iYWxfc3RhdGVfZXhhbXBsZSgpYm9vbCIsIG1ldGhvZCAibWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoKWJvb2wiLCBtZXRob2QgImNoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlKClib29sIiwgbWV0aG9kICJzZXRfZ2xvYmFsX3N0YXRlKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJzZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoYnl0ZVtdLGFzc2V0LGJvb2wpdm9pZCIsIG1ldGhvZCAiZGVsX2dsb2JhbF9zdGF0ZSgpYm9vbCIsIG1ldGhvZCAiZGVsX2dsb2JhbF9zdGF0ZV9leGFtcGxlKClib29sIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRfZ2xvYmFsX3N0YXRlX3JvdXRlQDUgbWFpbl9tYXliZV9nbG9iYWxfc3RhdGVfcm91dGVANiBtYWluX2dldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUA3IG1haW5fbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGVfcm91dGVAOCBtYWluX2NoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDkgbWFpbl9zZXRfZ2xvYmFsX3N0YXRlX3JvdXRlQDEwIG1haW5fc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDExIG1haW5fZGVsX2dsb2JhbF9zdGF0ZV9yb3V0ZUAxMiBtYWluX2RlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMwoKbWFpbl9hZnRlcl9pZl9lbHNlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzCiAgICAvLyBjbGFzcyBHbG9iYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2RlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTEtMTUyCiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9HTE9CQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZQogICAgYnl0ZWMgNCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsX2dsb2JhbF9zdGF0ZV9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDMtMTQ0CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbF9nbG9iYWxfc3RhdGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjMtMTI0CiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0dMT0JBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMy0xMjQKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9nbG9iYWxfc3RhdGVfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE2LTExNwogICAgLy8gIyBleGFtcGxlOiBXUklURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIEdsb2JhbFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE2LTExNwogICAgLy8gIyBleGFtcGxlOiBXUklURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBzZXRfZ2xvYmFsX3N0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6OTUtOTYKICAgIC8vICMgZXhhbXBsZTogVkFMVUVfUFJPUEVSVFlfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjaGVja19nbG9iYWxfc3RhdGVfZXhhbXBsZQogICAgYnl0ZWMgNCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGVfcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2NC02NQogICAgLy8gIyBleGFtcGxlOiBSRUFEX0dMT0JBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2dsb2JhbF9zdGF0ZV9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9nbG9iYWxfc3RhdGUKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2dsb2JhbF9zdGF0ZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQxLTQyCiAgICAvLyAjIGV4YW1wbGU6IFJFQURfR0xPQkFMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfZ2xvYmFsX3N0YXRlCiAgICBpdG9iCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5nZXRfZ2xvYmFsX3N0YXRlKCkgLT4gdWludDY0OgpnZXRfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyByZXR1cm4gc2VsZi5nbG9iYWxfaW50X2Z1bGwuZ2V0KGRlZmF1bHQ9VUludDY0KDApKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5tYXliZV9nbG9iYWxfc3RhdGUoKSAtPiB1aW50NjQsIHVpbnQ2NDoKbWF5YmVfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ2LTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYXliZV9nbG9iYWxfc3RhdGUoc2VsZikgLT4gdHVwbGVbVUludDY0LCBib29sXToKICAgIHByb3RvIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBpbnRfdmFsdWUsIGludF9leGlzdHMgPSBzZWxmLmdsb2JhbF9pbnRfZnVsbC5tYXliZSgpICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBpZiBub3QgaW50X2V4aXN0czoKICAgIGJueiBtYXliZV9nbG9iYWxfc3RhdGVfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NTAKICAgIC8vIGludF92YWx1ZSA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMQoKbWF5YmVfZ2xvYmFsX3N0YXRlX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1MQogICAgLy8gcmV0dXJuIGludF92YWx1ZSwgaW50X2V4aXN0cwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmdsb2JhbF9zdG9yYWdlLmNvbnRyYWN0Lkdsb2JhbFN0b3JhZ2UuZ2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlKCkgLT4gdWludDY0OgpnZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NTUKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9pbnRfZnVsbC5nZXQoZGVmYXVsdD1VSW50NjQoMCkpID09IDUwICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzMgLy8gNTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1NgogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2ludF9zaW1wbGlmaWVkID09IFVJbnQ2NCgxMCkgICMgZ2V0IGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZ2xvYmFsX2ludF9zaW1wbGlmaWVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9pbnRfc2ltcGxpZmllZCBleGlzdHMKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU3CiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfaW50X25vX2RlZmF1bHQuZ2V0KGRlZmF1bHQ9VUludDY0KDApKSA9PSAwCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gImdsb2JhbF9pbnRfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1OQogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwuZ2V0KEJ5dGVzKGIiZGVmYXVsdCIpKSA9PSBiIkhlbGxvIiAgIyBieXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsX2J5dGVzX2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcHVzaGJ5dGVzIDB4NjQ2NTY2NjE3NTZjNzQKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWNfMCAvLyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2MAogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5tYXliZV9nbG9iYWxfc3RhdGVfZXhhbXBsZSgpIC0+IHVpbnQ2NDoKbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NjcKICAgIC8vIGludF92YWx1ZSwgaV9leGlzdHMgPSBzZWxmLmdsb2JhbF9pbnRfZnVsbC5tYXliZSgpICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NjgKICAgIC8vIGFzc2VydCBpX2V4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NjkKICAgIC8vIGFzc2VydCBpbnRfdmFsdWUgPT0gVUludDY0KDUwKQogICAgaW50Y18zIC8vIDUwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NzEKICAgIC8vIGJ5dGVfdmFsdWUsIGJfZXhpc3RzID0gc2VsZi5nbG9iYWxfYnl0ZXNfZnVsbC5tYXliZSgpICAjIGJ5dGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJnbG9iYWxfYnl0ZXNfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NzIKICAgIC8vIGFzc2VydCBiX2V4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NzMKICAgIC8vIGFzc2VydCBieXRlX3ZhbHVlID09IGIiSGVsbG8iCiAgICBieXRlY18wIC8vIDB4NDg2NTZjNmM2ZgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBieXRlX2RlbF92YWx1ZSwgYl9leGlzdHMgPSBzZWxmLmdsb2JhbF9ieXRlc19mdWxsLm1heWJlKCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJnbG9iYWxfYnl0ZXNfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3NgogICAgLy8gYXNzZXJ0IG5vdCBiX2V4aXN0cwogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NzcKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9ieXRlc19mdWxsLnZhbHVlID09IEJ5dGVzKGIiSGVsbG8iKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbF9ieXRlc19mdWxsIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9ieXRlc19mdWxsIGV4aXN0cwogICAgYnl0ZWNfMCAvLyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3OQogICAgLy8gYm9vbF92YWx1ZSwgaV9leGlzdHMgPSBzZWxmLmdsb2JhbF9ib29sX25vX2RlZmF1bHQubWF5YmUoKSAgIyBib29sCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6ODAKICAgIC8vIGFzc2VydCBpX2V4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6ODEKICAgIC8vIGFzc2VydCBib29sKGJvb2xfdmFsdWUpCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXRfdmFsdWUsIGlfZXhpc3RzID0gc2VsZi5nbG9iYWxfYXNzZXQubWF5YmUoKSAgIyBBc3NldAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBpX2V4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6ODUKICAgIC8vIGFzc2VydCBhc3NldF92YWx1ZSA9PSBBc3NldChVSW50NjQoMTApKQogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6ODcKICAgIC8vIGFwcGxuX3ZhbHVlLCBpX2V4aXN0cyA9IHNlbGYuZ2xvYmFsX2FwcGxpY2F0aW9uLm1heWJlKCkgICMgQXBwbGljYXRpb24KICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAiZ2xvYmFsX2FwcGxpY2F0aW9uIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4OAogICAgLy8gYXNzZXJ0IGlfZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4OQogICAgLy8gYXNzZXJ0IGFwcGxuX3ZhbHVlID09IEFwcGxpY2F0aW9uKFVJbnQ2NCgxMCkpCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo5MQogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5jaGVja19nbG9iYWxfc3RhdGVfZXhhbXBsZSgpIC0+IHVpbnQ2NDoKY2hlY2tfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6OTgKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9pbnRfZnVsbC52YWx1ZSA9PSA1MCAgIyB1aW50NjQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJnbG9iYWxfaW50X2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2ludF9mdWxsIGV4aXN0cwogICAgaW50Y18zIC8vIDUwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6OTkKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9ieXRlc19mdWxsLnZhbHVlID09IEJ5dGVzKGIiSGVsbG8iKSAgIyBieXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsX2J5dGVzX2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwgZXhpc3RzCiAgICBieXRlY18wIC8vIDB4NDg2NTZjNmM2ZgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMQogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2ludF9zaW1wbGlmaWVkID09IDEwICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gImdsb2JhbF9pbnRfc2ltcGxpZmllZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfaW50X3NpbXBsaWZpZWQgZXhpc3RzCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDIKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9ieXRlc19zaW1wbGlmaWVkID09IGIiSGVsbG8iICAjIGJ5dGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJnbG9iYWxfYnl0ZXNfc2ltcGxpZmllZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYnl0ZXNfc2ltcGxpZmllZCBleGlzdHMKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAzCiAgICAvLyBhc3NlcnQgYm9vbChzZWxmLmdsb2JhbF9ib29sX3NpbXBsaWZpZWQpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gImdsb2JhbF9ib29sX3NpbXBsaWZpZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2Jvb2xfc2ltcGxpZmllZCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwNQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmdsb2JhbF9pbnRfbm9fZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJnbG9iYWxfaW50X25vX2RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDYKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5nbG9iYWxfYnl0ZXNfbm9fZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImdsb2JhbF9ieXRlc19ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTA3CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImdsb2JhbF9ib29sX25vX2RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDkKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9hc3NldC52YWx1ZSA9PSBBc3NldChVSW50NjQoMTApKSAgIyBBc3NldAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYXNzZXQgZXhpc3RzCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTAKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9hcHBsaWNhdGlvbi52YWx1ZSA9PSBBcHBsaWNhdGlvbihVSW50NjQoMTApKSAgIyBBcHBsaWNhdGlvbgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJnbG9iYWxfYXBwbGljYXRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2FwcGxpY2F0aW9uIGV4aXN0cwogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTExCiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfYWNjb3VudC52YWx1ZSA9PSBBY2NvdW50KEJ5dGVzKGIiSGVsbG8iKSkgICMgQWNjb3VudAogICAgaW50Y18wIC8vIDAKICAgIHB1c2hieXRlcyAiZ2xvYmFsX2FjY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2FjY291bnQgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYXNzZXJ0IC8vIEFkZHJlc3MgbGVuZ3RoIGlzIDMyIGJ5dGVzCiAgICBieXRlY18wIC8vIDB4NDg2NTZjNmM2ZgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExMgogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5zZXRfZ2xvYmFsX3N0YXRlKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2dsb2JhbF9zdGF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTYtMTE4CiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0dMT0JBTF9TVEFURQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgc2V0X2dsb2JhbF9zdGF0ZShzZWxmLCB2YWx1ZTogQnl0ZXMpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTkKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwudmFsdWUgPSB2YWx1ZQogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsX2J5dGVzX2Z1bGwiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5zZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUodmFsdWVfYnl0ZXM6IGJ5dGVzLCB2YWx1ZV9hc3NldDogdWludDY0LCB2YWx1ZV9ib29sOiB1aW50NjQpIC0+IHZvaWQ6CnNldF9nbG9iYWxfc3RhdGVfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjMtMTMxCiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0dMT0JBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlKAogICAgLy8gICAgIHNlbGYsCiAgICAvLyAgICAgdmFsdWVfYnl0ZXM6IEJ5dGVzLAogICAgLy8gICAgIHZhbHVlX2Fzc2V0OiBBc3NldCwKICAgIC8vICAgICAqLAogICAgLy8gICAgIHZhbHVlX2Jvb2w6IGJvb2wsCiAgICAvLyApIC0+IE5vbmU6CiAgICBwcm90byAzIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzIKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQudmFsdWUgPSB2YWx1ZV9ieXRlcwogICAgYnl0ZWMgNyAvLyAiZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQiCiAgICBmcmFtZV9kaWcgLTMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMzCiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfYnl0ZXNfbm9fZGVmYXVsdC52YWx1ZSA9PSB2YWx1ZV9ieXRlcwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImdsb2JhbF9ieXRlc19ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9ieXRlc19ub19kZWZhdWx0IGV4aXN0cwogICAgZnJhbWVfZGlnIC0zCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTM1CiAgICAvLyBzZWxmLmdsb2JhbF9ib29sX25vX2RlZmF1bHQudmFsdWUgPSB2YWx1ZV9ib29sICAjIEJvb2wKICAgIGJ5dGVjIDUgLy8gImdsb2JhbF9ib29sX25vX2RlZmF1bHQiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTM2CiAgICAvLyBhc3NlcnQgYm9vbChzZWxmLmdsb2JhbF9ib29sX25vX2RlZmF1bHQudmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYm9vbF9ub19kZWZhdWx0IGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTM4CiAgICAvLyBzZWxmLmdsb2JhbF9hc3NldC52YWx1ZSA9IHZhbHVlX2Fzc2V0ICAjIEFzc2V0CiAgICBieXRlYyA2IC8vICJnbG9iYWxfYXNzZXQiCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTM5CiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfYXNzZXQudmFsdWUgPT0gdmFsdWVfYXNzZXQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJnbG9iYWxfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2Fzc2V0IGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5kZWxfZ2xvYmFsX3N0YXRlKCkgLT4gdWludDY0OgpkZWxfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gZGVsIHNlbGYuZ2xvYmFsX2ludF9mdWxsLnZhbHVlCiAgICBieXRlY18xIC8vICJnbG9iYWxfaW50X2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2RlbAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0NwogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5kZWxfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoKSAtPiB1aW50NjQ6CmRlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTQKICAgIC8vIGRlbCBzZWxmLmdsb2JhbF9ieXRlc19ub19kZWZhdWx0LnZhbHVlCiAgICBieXRlYyA3IC8vICJnbG9iYWxfYnl0ZXNfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZGVsCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTU1CiAgICAvLyBkZWwgc2VsZi5nbG9iYWxfYm9vbF9ub19kZWZhdWx0LnZhbHVlCiAgICBieXRlYyA1IC8vICJnbG9iYWxfYm9vbF9ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTYKICAgIC8vIGRlbCBzZWxmLmdsb2JhbF9hc3NldC52YWx1ZQogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Fzc2V0IgogICAgYXBwX2dsb2JhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTcKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { - "approval": "CiAEAAEKMiYNBUhlbGxvD2dsb2JhbF9pbnRfZnVsbBFnbG9iYWxfYnl0ZXNfZnVsbAQVH3x1AQAWZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdAxnbG9iYWxfYXNzZXQXZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQVZ2xvYmFsX2ludF9zaW1wbGlmaWVkF2dsb2JhbF9ieXRlc19zaW1wbGlmaWVkFmdsb2JhbF9ib29sX3NpbXBsaWZpZWQVZ2xvYmFsX2ludF9ub19kZWZhdWx0Emdsb2JhbF9hcHBsaWNhdGlvbjEYQAASKSVnJwgkZyooZycJKGcnCiNnMRtBAQ+CCQTOFtCDBIni4SgEz2ZYeATUmGnaBFuk9GkEhm1EhAQ4aOTHBD/q4w4Ej9BdWjYaAI4JALgAnwCJAHMAXQBLAC4AGAACIkMxGRREMRhEiAH5JwQiTwJUK0xQsCNDMRkURDEYRIgB3CcEIk8CVCtMULAjQzEZFEQxGEQ2GgFXAgA2GgIXwDA2GgMiU4gBiiNDMRkURDEYRDYaAVcCAIgBcCNDMRkURDEYRIgA+ycEIk8CVCtMULAjQzEZFEQxGESIAK4nBCJPAlQrTFCwI0MxGRREMRhEiABlJwQiTwJUK0xQsCNDMRkURDEYRIgANkwWJwQiTwNUUCtMULAjQzEZFEQxGESIABIWK0xQsCNDMRlA/zIxGBREI0OKAAEiKWUiTgJNiYoAAiIpZUlPAkxAAAMijAGLAYsATwNPA4mKAAEiKWUiTgJNJRJEIicIZUQkEkQiJwtlIk4CTRREIiplgAdkZWZhdWx0TgJNKBJEI4mKAAEiKWVEJRJEIiplRCgSRCIqZUUBFEQiKmVEKBJEIicFZUREIicGZUQkEkQiJwxlRCQSRCOJigABIillRCUSRCIqZUQoEkQiJwhlRCQSRCInCWVEKBJEIicKZUREIicLZUUBFEQiJwdlRQEURCInBWVFARREIicGZUQkEkQiJwxlRCQSRCKADmdsb2JhbF9hY2NvdW50ZUQiRCgSRCOJigEAKov/Z4mKAwAnB4v9ZyInB2VEi/0SRCcFi/9nIicFZUREJwaL/mciJwZlRIv+EkSJigABKWkjiYoAAScHaScFaScGaSOJ", + "approval": "CiAEAAEKMiYNBUhlbGxvD2dsb2JhbF9pbnRfZnVsbBFnbG9iYWxfYnl0ZXNfZnVsbAQVH3x1AQAWZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdAxnbG9iYWxfYXNzZXQXZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQVZ2xvYmFsX2ludF9zaW1wbGlmaWVkF2dsb2JhbF9ieXRlc19zaW1wbGlmaWVkFmdsb2JhbF9ib29sX3NpbXBsaWZpZWQVZ2xvYmFsX2ludF9ub19kZWZhdWx0Emdsb2JhbF9hcHBsaWNhdGlvbjEYQAASKSVnJwgkZyooZycJKGcnCiNnMRtBAQ+CCQTOFtCDBIni4SgEz2ZYeATUmGnaBFuk9GkEhm1EhAQ4aOTHBD/q4w4Ej9BdWjYaAI4JALgAnwCJAHMAXQBLAC4AGAACIkMxGRREMRhEiAHqJwQiTwJUK0xQsCNDMRkURDEYRIgB0CcEIk8CVCtMULAjQzEZFEQxGEQ2GgFXAgA2GgIXwDA2GgMiU4gBfiNDMRkURDEYRDYaAVcCAIgBZCNDMRkURDEYRIgA8icEIk8CVCtMULAjQzEZFEQxGESIAKgnBCJPAlQrTFCwI0MxGRREMRhEiABiJwQiTwJUK0xQsCNDMRkURDEYRIgAM0wWJwQiTwNUUCtMULAjQzEZFEQxGESIABIWK0xQsCNDMRlA/zIxGBREI0MiKWUiTgJNiYoAAiIpZUlPAkxAAAMijAGLAYsATwNPA4kiKWUiTgJNJRJEIicIZUQkEkQiJwtlIk4CTRREIiplgAdkZWZhdWx0TgJNKBJEI4kiKWVEJRJEIiplRCgSRCIqZUUBFEQiKmVEKBJEIicFZUREIicGZUQkEkQiJwxlRCQSRCOJIillRCUSRCIqZUQoEkQiJwhlRCQSRCInCWVEKBJEIicKZUREIicLZUUBFEQiJwdlRQEURCInBWVFARREIicGZUQkEkQiJwxlRCQSRCKADmdsb2JhbF9hY2NvdW50ZUQiRCgSRCOJigEAKov/Z4mKAwAnB4v9ZyInB2VEi/0SRCcFi/9nIicFZUREJwaL/mciJwZlRIv+EkSJKWkjiScHaScFaScGaSOJ", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/global_storage/global_storage_client.py b/projects/python-examples/smart_contracts/artifacts/global_storage/global_storage_client.py index e67a257..fb12524 100644 --- a/projects/python-examples/smart_contracts/artifacts/global_storage/global_storage_client.py +++ b/projects/python-examples/smart_contracts/artifacts/global_storage/global_storage_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_global_state", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_global_state", "returns": {"type": "(uint64,bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_global_state_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_global_state_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "check_global_state_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "byte[]", "name": "value"}], "name": "set_global_state", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "byte[]", "name": "value_bytes"}, {"type": "asset", "name": "value_asset"}, {"type": "bool", "name": "value_bool"}], "name": "set_global_state_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "del_global_state", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "del_global_state_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}], "name": "GlobalStorage", "state": {"keys": {"box": {}, "global": {"global_int_full": {"key": "Z2xvYmFsX2ludF9mdWxs", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_int_simplified": {"key": "Z2xvYmFsX2ludF9zaW1wbGlmaWVk", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_int_no_default": {"key": "Z2xvYmFsX2ludF9ub19kZWZhdWx0", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_bytes_full": {"key": "Z2xvYmFsX2J5dGVzX2Z1bGw=", "keyType": "AVMString", "valueType": "AVMBytes"}, "global_bytes_simplified": {"key": "Z2xvYmFsX2J5dGVzX3NpbXBsaWZpZWQ=", "keyType": "AVMString", "valueType": "AVMBytes"}, "global_bytes_no_default": {"key": "Z2xvYmFsX2J5dGVzX25vX2RlZmF1bHQ=", "keyType": "AVMString", "valueType": "AVMBytes"}, "global_bool_simplified": {"key": "Z2xvYmFsX2Jvb2xfc2ltcGxpZmllZA==", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_bool_no_default": {"key": "Z2xvYmFsX2Jvb2xfbm9fZGVmYXVsdA==", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_asset": {"key": "Z2xvYmFsX2Fzc2V0", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_application": {"key": "Z2xvYmFsX2FwcGxpY2F0aW9u", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_account": {"key": "Z2xvYmFsX2FjY291bnQ=", "keyType": "AVMString", "valueType": "AVMBytes"}}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 4, "ints": 7}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiAEAAEKMiYNBUhlbGxvD2dsb2JhbF9pbnRfZnVsbBFnbG9iYWxfYnl0ZXNfZnVsbAQVH3x1AQAWZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdAxnbG9iYWxfYXNzZXQXZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQVZ2xvYmFsX2ludF9zaW1wbGlmaWVkF2dsb2JhbF9ieXRlc19zaW1wbGlmaWVkFmdsb2JhbF9ib29sX3NpbXBsaWZpZWQVZ2xvYmFsX2ludF9ub19kZWZhdWx0Emdsb2JhbF9hcHBsaWNhdGlvbjEYQAASKSVnJwgkZyooZycJKGcnCiNnMRtBAQ+CCQTOFtCDBIni4SgEz2ZYeATUmGnaBFuk9GkEhm1EhAQ4aOTHBD/q4w4Ej9BdWjYaAI4JALgAnwCJAHMAXQBLAC4AGAACIkMxGRREMRhEiAH5JwQiTwJUK0xQsCNDMRkURDEYRIgB3CcEIk8CVCtMULAjQzEZFEQxGEQ2GgFXAgA2GgIXwDA2GgMiU4gBiiNDMRkURDEYRDYaAVcCAIgBcCNDMRkURDEYRIgA+ycEIk8CVCtMULAjQzEZFEQxGESIAK4nBCJPAlQrTFCwI0MxGRREMRhEiABlJwQiTwJUK0xQsCNDMRkURDEYRIgANkwWJwQiTwNUUCtMULAjQzEZFEQxGESIABIWK0xQsCNDMRlA/zIxGBREI0OKAAEiKWUiTgJNiYoAAiIpZUlPAkxAAAMijAGLAYsATwNPA4mKAAEiKWUiTgJNJRJEIicIZUQkEkQiJwtlIk4CTRREIiplgAdkZWZhdWx0TgJNKBJEI4mKAAEiKWVEJRJEIiplRCgSRCIqZUUBFEQiKmVEKBJEIicFZUREIicGZUQkEkQiJwxlRCQSRCOJigABIillRCUSRCIqZUQoEkQiJwhlRCQSRCInCWVEKBJEIicKZUREIicLZUUBFEQiJwdlRQEURCInBWVFARREIicGZUQkEkQiJwxlRCQSRCKADmdsb2JhbF9hY2NvdW50ZUQiRCgSRCOJigEAKov/Z4mKAwAnB4v9ZyInB2VEi/0SRCcFi/9nIicFZUREJwaL/mciJwZlRIv+EkSJigABKWkjiYoAAScHaScFaScGaSOJ", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMTAgNTAKICAgIGJ5dGVjYmxvY2sgMHg0ODY1NmM2YzZmICJnbG9iYWxfaW50X2Z1bGwiICJnbG9iYWxfYnl0ZXNfZnVsbCIgMHgxNTFmN2M3NSAweDAwICJnbG9iYWxfYm9vbF9ub19kZWZhdWx0IiAiZ2xvYmFsX2Fzc2V0IiAiZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQiICJnbG9iYWxfaW50X3NpbXBsaWZpZWQiICJnbG9iYWxfYnl0ZXNfc2ltcGxpZmllZCIgImdsb2JhbF9ib29sX3NpbXBsaWZpZWQiICJnbG9iYWxfaW50X25vX2RlZmF1bHQiICJnbG9iYWxfYXBwbGljYXRpb24iCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYuZ2xvYmFsX2ludF9mdWxsID0gR2xvYmFsU3RhdGUoVUludDY0KDUwKSkgICMgVUludDY0IHdpdGggZGVmYXVsdCB2YWx1ZSA9IDUwCiAgICBieXRlY18xIC8vICJnbG9iYWxfaW50X2Z1bGwiCiAgICBpbnRjXzMgLy8gNTAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTcKICAgIC8vIHNlbGYuZ2xvYmFsX2ludF9zaW1wbGlmaWVkID0gVUludDY0KAogICAgYnl0ZWMgOCAvLyAiZ2xvYmFsX2ludF9zaW1wbGlmaWVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3LTE5CiAgICAvLyBzZWxmLmdsb2JhbF9pbnRfc2ltcGxpZmllZCA9IFVJbnQ2NCgKICAgIC8vICAgICAxMAogICAgLy8gKSAgIyBVSW50NjQgc2ltcGxpZmllZCB3aXRoIGRlZmF1bHQgdmFsdWUgPSAxMAogICAgaW50Y18yIC8vIDEwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyLTIzCiAgICAvLyAjIGV4YW1wbGU6IElOSVRfQllURVMKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwgPSBHbG9iYWxTdGF0ZSgKICAgIGJ5dGVjXzIgLy8gImdsb2JhbF9ieXRlc19mdWxsIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0CiAgICAvLyBCeXRlcyhiIkhlbGxvIikKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MjItMjUKICAgIC8vICMgZXhhbXBsZTogSU5JVF9CWVRFUwogICAgLy8gc2VsZi5nbG9iYWxfYnl0ZXNfZnVsbCA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIEJ5dGVzKGIiSGVsbG8iKQogICAgLy8gKSAgIyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUgPSBieXRlcyhIZWxsbykKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MjYKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX3NpbXBsaWZpZWQgPSBCeXRlcygKICAgIGJ5dGVjIDkgLy8gImdsb2JhbF9ieXRlc19zaW1wbGlmaWVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2LTI4CiAgICAvLyBzZWxmLmdsb2JhbF9ieXRlc19zaW1wbGlmaWVkID0gQnl0ZXMoCiAgICAvLyAgICAgYiJIZWxsbyIKICAgIC8vICkgICMgQnl0ZXMgc2ltcGxpZmllZCB3aXRoIGRlZmF1bHQgdmFsdWUgPSBieXRlcyhIZWxsbykKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyCiAgICAvLyBzZWxmLmdsb2JhbF9ib29sX3NpbXBsaWZpZWQgPSBUcnVlICAjIEJvb2wKICAgIGJ5dGVjIDEwIC8vICJnbG9iYWxfYm9vbF9zaW1wbGlmaWVkIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDE0CiAgICBwdXNoYnl0ZXNzIDB4Y2UxNmQwODMgMHg4OWUyZTEyOCAweGNmNjY1ODc4IDB4ZDQ5ODY5ZGEgMHg1YmE0ZjQ2OSAweDg2NmQ0NDg0IDB4Mzg2OGU0YzcgMHgzZmVhZTMwZSAweDhmZDA1ZDVhIC8vIG1ldGhvZCAiZ2V0X2dsb2JhbF9zdGF0ZSgpdWludDY0IiwgbWV0aG9kICJtYXliZV9nbG9iYWxfc3RhdGUoKSh1aW50NjQsYm9vbCkiLCBtZXRob2QgImdldF9nbG9iYWxfc3RhdGVfZXhhbXBsZSgpYm9vbCIsIG1ldGhvZCAibWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoKWJvb2wiLCBtZXRob2QgImNoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlKClib29sIiwgbWV0aG9kICJzZXRfZ2xvYmFsX3N0YXRlKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJzZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoYnl0ZVtdLGFzc2V0LGJvb2wpdm9pZCIsIG1ldGhvZCAiZGVsX2dsb2JhbF9zdGF0ZSgpYm9vbCIsIG1ldGhvZCAiZGVsX2dsb2JhbF9zdGF0ZV9leGFtcGxlKClib29sIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRfZ2xvYmFsX3N0YXRlX3JvdXRlQDUgbWFpbl9tYXliZV9nbG9iYWxfc3RhdGVfcm91dGVANiBtYWluX2dldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUA3IG1haW5fbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGVfcm91dGVAOCBtYWluX2NoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDkgbWFpbl9zZXRfZ2xvYmFsX3N0YXRlX3JvdXRlQDEwIG1haW5fc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDExIG1haW5fZGVsX2dsb2JhbF9zdGF0ZV9yb3V0ZUAxMiBtYWluX2RlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMwoKbWFpbl9hZnRlcl9pZl9lbHNlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzCiAgICAvLyBjbGFzcyBHbG9iYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2RlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTEtMTUyCiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9HTE9CQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZQogICAgYnl0ZWMgNCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsX2dsb2JhbF9zdGF0ZV9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDMtMTQ0CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbF9nbG9iYWxfc3RhdGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjMtMTI0CiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0dMT0JBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMy0xMjQKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9nbG9iYWxfc3RhdGVfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE2LTExNwogICAgLy8gIyBleGFtcGxlOiBXUklURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIEdsb2JhbFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE2LTExNwogICAgLy8gIyBleGFtcGxlOiBXUklURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBzZXRfZ2xvYmFsX3N0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6OTUtOTYKICAgIC8vICMgZXhhbXBsZTogVkFMVUVfUFJPUEVSVFlfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjaGVja19nbG9iYWxfc3RhdGVfZXhhbXBsZQogICAgYnl0ZWMgNCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGVfcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2NC02NQogICAgLy8gIyBleGFtcGxlOiBSRUFEX0dMT0JBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2dsb2JhbF9zdGF0ZV9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9nbG9iYWxfc3RhdGUKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2dsb2JhbF9zdGF0ZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQxLTQyCiAgICAvLyAjIGV4YW1wbGU6IFJFQURfR0xPQkFMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfZ2xvYmFsX3N0YXRlCiAgICBpdG9iCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5nZXRfZ2xvYmFsX3N0YXRlKCkgLT4gdWludDY0OgpnZXRfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQxLTQzCiAgICAvLyAjIGV4YW1wbGU6IFJFQURfR0xPQkFMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBnZXRfZ2xvYmFsX3N0YXRlKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyByZXR1cm4gc2VsZi5nbG9iYWxfaW50X2Z1bGwuZ2V0KGRlZmF1bHQ9VUludDY0KDApKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5tYXliZV9nbG9iYWxfc3RhdGUoKSAtPiB1aW50NjQsIHVpbnQ2NDoKbWF5YmVfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ2LTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYXliZV9nbG9iYWxfc3RhdGUoc2VsZikgLT4gdHVwbGVbVUludDY0LCBib29sXToKICAgIHByb3RvIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBpbnRfdmFsdWUsIGludF9leGlzdHMgPSBzZWxmLmdsb2JhbF9pbnRfZnVsbC5tYXliZSgpICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBpZiBub3QgaW50X2V4aXN0czoKICAgIGJueiBtYXliZV9nbG9iYWxfc3RhdGVfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NTAKICAgIC8vIGludF92YWx1ZSA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMQoKbWF5YmVfZ2xvYmFsX3N0YXRlX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1MQogICAgLy8gcmV0dXJuIGludF92YWx1ZSwgaW50X2V4aXN0cwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmdsb2JhbF9zdG9yYWdlLmNvbnRyYWN0Lkdsb2JhbFN0b3JhZ2UuZ2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlKCkgLT4gdWludDY0OgpnZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NTMtNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9nbG9iYWxfc3RhdGVfZXhhbXBsZShzZWxmKSAtPiBib29sOgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NTUKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9pbnRfZnVsbC5nZXQoZGVmYXVsdD1VSW50NjQoMCkpID09IDUwICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzMgLy8gNTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1NgogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2ludF9zaW1wbGlmaWVkID09IFVJbnQ2NCgxMCkgICMgZ2V0IGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZ2xvYmFsX2ludF9zaW1wbGlmaWVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9pbnRfc2ltcGxpZmllZCBleGlzdHMKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU3CiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfaW50X25vX2RlZmF1bHQuZ2V0KGRlZmF1bHQ9VUludDY0KDApKSA9PSAwCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gImdsb2JhbF9pbnRfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1OQogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwuZ2V0KEJ5dGVzKGIiZGVmYXVsdCIpKSA9PSBiIkhlbGxvIiAgIyBieXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsX2J5dGVzX2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcHVzaGJ5dGVzIDB4NjQ2NTY2NjE3NTZjNzQKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWNfMCAvLyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2MAogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5tYXliZV9nbG9iYWxfc3RhdGVfZXhhbXBsZSgpIC0+IHVpbnQ2NDoKbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NjQtNjYKICAgIC8vICMgZXhhbXBsZTogUkVBRF9HTE9CQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIG1heWJlX2dsb2JhbF9zdGF0ZV9leGFtcGxlKHNlbGYpIC0+IGJvb2w6CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2NwogICAgLy8gaW50X3ZhbHVlLCBpX2V4aXN0cyA9IHNlbGYuZ2xvYmFsX2ludF9mdWxsLm1heWJlKCkgICMgdWludDY0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsX2ludF9mdWxsIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2OAogICAgLy8gYXNzZXJ0IGlfZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2OQogICAgLy8gYXNzZXJ0IGludF92YWx1ZSA9PSBVSW50NjQoNTApCiAgICBpbnRjXzMgLy8gNTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3MQogICAgLy8gYnl0ZV92YWx1ZSwgYl9leGlzdHMgPSBzZWxmLmdsb2JhbF9ieXRlc19mdWxsLm1heWJlKCkgICMgYnl0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbF9ieXRlc19mdWxsIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3MgogICAgLy8gYXNzZXJ0IGJfZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3MwogICAgLy8gYXNzZXJ0IGJ5dGVfdmFsdWUgPT0gYiJIZWxsbyIKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NzUKICAgIC8vIGJ5dGVfZGVsX3ZhbHVlLCBiX2V4aXN0cyA9IHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwubWF5YmUoKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbF9ieXRlc19mdWxsIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc2CiAgICAvLyBhc3NlcnQgbm90IGJfZXhpc3RzCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3NwogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwudmFsdWUgPT0gQnl0ZXMoYiJIZWxsbyIpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsX2J5dGVzX2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwgZXhpc3RzCiAgICBieXRlY18wIC8vIDB4NDg2NTZjNmM2ZgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc5CiAgICAvLyBib29sX3ZhbHVlLCBpX2V4aXN0cyA9IHNlbGYuZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdC5tYXliZSgpICAjIGJvb2wKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJnbG9iYWxfYm9vbF9ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4MAogICAgLy8gYXNzZXJ0IGlfZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4MQogICAgLy8gYXNzZXJ0IGJvb2woYm9vbF92YWx1ZSkKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBhc3NldF92YWx1ZSwgaV9leGlzdHMgPSBzZWxmLmdsb2JhbF9hc3NldC5tYXliZSgpICAjIEFzc2V0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Fzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4NAogICAgLy8gYXNzZXJ0IGlfZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4NQogICAgLy8gYXNzZXJ0IGFzc2V0X3ZhbHVlID09IEFzc2V0KFVJbnQ2NCgxMCkpCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4NwogICAgLy8gYXBwbG5fdmFsdWUsIGlfZXhpc3RzID0gc2VsZi5nbG9iYWxfYXBwbGljYXRpb24ubWF5YmUoKSAgIyBBcHBsaWNhdGlvbgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJnbG9iYWxfYXBwbGljYXRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg4CiAgICAvLyBhc3NlcnQgaV9leGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg5CiAgICAvLyBhc3NlcnQgYXBwbG5fdmFsdWUgPT0gQXBwbGljYXRpb24oVUludDY0KDEwKSkKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjkxCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nbG9iYWxfc3RvcmFnZS5jb250cmFjdC5HbG9iYWxTdG9yYWdlLmNoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlKCkgLT4gdWludDY0OgpjaGVja19nbG9iYWxfc3RhdGVfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo5NS05NwogICAgLy8gIyBleGFtcGxlOiBWQUxVRV9QUk9QRVJUWV9HTE9CQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGNoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlKHNlbGYpIC0+IGJvb2w6CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo5OAogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2ludF9mdWxsLnZhbHVlID09IDUwICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfaW50X2Z1bGwgZXhpc3RzCiAgICBpbnRjXzMgLy8gNTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwudmFsdWUgPT0gQnl0ZXMoYiJIZWxsbyIpICAjIGJ5dGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJnbG9iYWxfYnl0ZXNfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYnl0ZXNfZnVsbCBleGlzdHMKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAxCiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfaW50X3NpbXBsaWZpZWQgPT0gMTAgICMgdWludDY0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZ2xvYmFsX2ludF9zaW1wbGlmaWVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9pbnRfc2ltcGxpZmllZCBleGlzdHMKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2J5dGVzX3NpbXBsaWZpZWQgPT0gYiJIZWxsbyIgICMgYnl0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDkgLy8gImdsb2JhbF9ieXRlc19zaW1wbGlmaWVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9ieXRlc19zaW1wbGlmaWVkIGV4aXN0cwogICAgYnl0ZWNfMCAvLyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDMKICAgIC8vIGFzc2VydCBib29sKHNlbGYuZ2xvYmFsX2Jvb2xfc2ltcGxpZmllZCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAiZ2xvYmFsX2Jvb2xfc2ltcGxpZmllZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYm9vbF9zaW1wbGlmaWVkIGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTA1CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuZ2xvYmFsX2ludF9ub19kZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gImdsb2JhbF9pbnRfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwNgogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmdsb2JhbF9ieXRlc19ub19kZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAiZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDcKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5nbG9iYWxfYm9vbF9ub19kZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwOQogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2Fzc2V0LnZhbHVlID09IEFzc2V0KFVJbnQ2NCgxMCkpICAjIEFzc2V0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Fzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9hc3NldCBleGlzdHMKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExMAogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2FwcGxpY2F0aW9uLnZhbHVlID09IEFwcGxpY2F0aW9uKFVJbnQ2NCgxMCkpICAjIEFwcGxpY2F0aW9uCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTIgLy8gImdsb2JhbF9hcHBsaWNhdGlvbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYXBwbGljYXRpb24gZXhpc3RzCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTEKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9hY2NvdW50LnZhbHVlID09IEFjY291bnQoQnl0ZXMoYiJIZWxsbyIpKSAgIyBBY2NvdW50CiAgICBpbnRjXzAgLy8gMAogICAgcHVzaGJ5dGVzICJnbG9iYWxfYWNjb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYWNjb3VudCBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBhc3NlcnQgLy8gQWRkcmVzcyBsZW5ndGggaXMgMzIgYnl0ZXMKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTEyCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nbG9iYWxfc3RvcmFnZS5jb250cmFjdC5HbG9iYWxTdG9yYWdlLnNldF9nbG9iYWxfc3RhdGUodmFsdWU6IGJ5dGVzKSAtPiB2b2lkOgpzZXRfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExNi0xMTgKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfR0xPQkFMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzZXRfZ2xvYmFsX3N0YXRlKHNlbGYsIHZhbHVlOiBCeXRlcykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExOQogICAgLy8gc2VsZi5nbG9iYWxfYnl0ZXNfZnVsbC52YWx1ZSA9IHZhbHVlCiAgICBieXRlY18yIC8vICJnbG9iYWxfYnl0ZXNfZnVsbCIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nbG9iYWxfc3RvcmFnZS5jb250cmFjdC5HbG9iYWxTdG9yYWdlLnNldF9nbG9iYWxfc3RhdGVfZXhhbXBsZSh2YWx1ZV9ieXRlczogYnl0ZXMsIHZhbHVlX2Fzc2V0OiB1aW50NjQsIHZhbHVlX2Jvb2w6IHVpbnQ2NCkgLT4gdm9pZDoKc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMy0xMzEKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoCiAgICAvLyAgICAgc2VsZiwKICAgIC8vICAgICB2YWx1ZV9ieXRlczogQnl0ZXMsCiAgICAvLyAgICAgdmFsdWVfYXNzZXQ6IEFzc2V0LAogICAgLy8gICAgICosCiAgICAvLyAgICAgdmFsdWVfYm9vbDogYm9vbCwKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDMgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzMgogICAgLy8gc2VsZi5nbG9iYWxfYnl0ZXNfbm9fZGVmYXVsdC52YWx1ZSA9IHZhbHVlX2J5dGVzCiAgICBieXRlYyA3IC8vICJnbG9iYWxfYnl0ZXNfbm9fZGVmYXVsdCIKICAgIGZyYW1lX2RpZyAtMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzMKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9ieXRlc19ub19kZWZhdWx0LnZhbHVlID09IHZhbHVlX2J5dGVzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAiZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzUKICAgIC8vIHNlbGYuZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdC52YWx1ZSA9IHZhbHVlX2Jvb2wgICMgQm9vbAogICAgYnl0ZWMgNSAvLyAiZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdCIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzYKICAgIC8vIGFzc2VydCBib29sKHNlbGYuZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdC52YWx1ZSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJnbG9iYWxfYm9vbF9ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9ib29sX25vX2RlZmF1bHQgZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzgKICAgIC8vIHNlbGYuZ2xvYmFsX2Fzc2V0LnZhbHVlID0gdmFsdWVfYXNzZXQgICMgQXNzZXQKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9hc3NldCIKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzkKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9hc3NldC52YWx1ZSA9PSB2YWx1ZV9hc3NldAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYXNzZXQgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nbG9iYWxfc3RvcmFnZS5jb250cmFjdC5HbG9iYWxTdG9yYWdlLmRlbF9nbG9iYWxfc3RhdGUoKSAtPiB1aW50NjQ6CmRlbF9nbG9iYWxfc3RhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTQzLTE0NQogICAgLy8gIyBleGFtcGxlOiBERUxFVEVfR0xPQkFMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBkZWxfZ2xvYmFsX3N0YXRlKHNlbGYpIC0+IGJvb2w6CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDYKICAgIC8vIGRlbCBzZWxmLmdsb2JhbF9pbnRfZnVsbC52YWx1ZQogICAgYnl0ZWNfMSAvLyAiZ2xvYmFsX2ludF9mdWxsIgogICAgYXBwX2dsb2JhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDcKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmdsb2JhbF9zdG9yYWdlLmNvbnRyYWN0Lkdsb2JhbFN0b3JhZ2UuZGVsX2dsb2JhbF9zdGF0ZV9leGFtcGxlKCkgLT4gdWludDY0OgpkZWxfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTUxLTE1MwogICAgLy8gIyBleGFtcGxlOiBERUxFVEVfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBkZWxfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoc2VsZikgLT4gYm9vbDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NAogICAgLy8gZGVsIHNlbGYuZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQudmFsdWUKICAgIGJ5dGVjIDcgLy8gImdsb2JhbF9ieXRlc19ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTUKICAgIC8vIGRlbCBzZWxmLmdsb2JhbF9ib29sX25vX2RlZmF1bHQudmFsdWUKICAgIGJ5dGVjIDUgLy8gImdsb2JhbF9ib29sX25vX2RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2RlbAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gZGVsIHNlbGYuZ2xvYmFsX2Fzc2V0LnZhbHVlCiAgICBieXRlYyA2IC8vICJnbG9iYWxfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2RlbAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NwogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [777], "errorMessage": "Address length is 32 bytes"}, {"pc": [329, 351, 373, 402, 420, 442, 464, 486, 511], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [533], "errorMessage": "can only call when creating"}, {"pc": [332, 354, 376, 405, 423, 445, 467, 489, 514], "errorMessage": "can only call when not creating"}, {"pc": [775], "errorMessage": "check self.global_account exists"}, {"pc": [753], "errorMessage": "check self.global_application exists"}, {"pc": [745, 828], "errorMessage": "check self.global_asset exists"}, {"pc": [817], "errorMessage": "check self.global_bool_no_default exists"}, {"pc": [715], "errorMessage": "check self.global_bool_simplified exists"}, {"pc": [650, 691], "errorMessage": "check self.global_bytes_full exists"}, {"pc": [803], "errorMessage": "check self.global_bytes_no_default exists"}, {"pc": [707], "errorMessage": "check self.global_bytes_simplified exists"}, {"pc": [684], "errorMessage": "check self.global_int_full exists"}, {"pc": [589, 699], "errorMessage": "check self.global_int_simplified exists"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_global_state", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_global_state", "returns": {"type": "(uint64,bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "get_global_state_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "maybe_global_state_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "check_global_state_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "byte[]", "name": "value"}], "name": "set_global_state", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "byte[]", "name": "value_bytes"}, {"type": "asset", "name": "value_asset"}, {"type": "bool", "name": "value_bool"}], "name": "set_global_state_example", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "del_global_state", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "del_global_state_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}], "name": "GlobalStorage", "state": {"keys": {"box": {}, "global": {"global_int_full": {"key": "Z2xvYmFsX2ludF9mdWxs", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_int_simplified": {"key": "Z2xvYmFsX2ludF9zaW1wbGlmaWVk", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_int_no_default": {"key": "Z2xvYmFsX2ludF9ub19kZWZhdWx0", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_bytes_full": {"key": "Z2xvYmFsX2J5dGVzX2Z1bGw=", "keyType": "AVMString", "valueType": "AVMBytes"}, "global_bytes_simplified": {"key": "Z2xvYmFsX2J5dGVzX3NpbXBsaWZpZWQ=", "keyType": "AVMString", "valueType": "AVMBytes"}, "global_bytes_no_default": {"key": "Z2xvYmFsX2J5dGVzX25vX2RlZmF1bHQ=", "keyType": "AVMString", "valueType": "AVMBytes"}, "global_bool_simplified": {"key": "Z2xvYmFsX2Jvb2xfc2ltcGxpZmllZA==", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_bool_no_default": {"key": "Z2xvYmFsX2Jvb2xfbm9fZGVmYXVsdA==", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_asset": {"key": "Z2xvYmFsX2Fzc2V0", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_application": {"key": "Z2xvYmFsX2FwcGxpY2F0aW9u", "keyType": "AVMString", "valueType": "AVMUint64"}, "global_account": {"key": "Z2xvYmFsX2FjY291bnQ=", "keyType": "AVMString", "valueType": "AVMBytes"}}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 4, "ints": 7}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiAEAAEKMiYNBUhlbGxvD2dsb2JhbF9pbnRfZnVsbBFnbG9iYWxfYnl0ZXNfZnVsbAQVH3x1AQAWZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdAxnbG9iYWxfYXNzZXQXZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQVZ2xvYmFsX2ludF9zaW1wbGlmaWVkF2dsb2JhbF9ieXRlc19zaW1wbGlmaWVkFmdsb2JhbF9ib29sX3NpbXBsaWZpZWQVZ2xvYmFsX2ludF9ub19kZWZhdWx0Emdsb2JhbF9hcHBsaWNhdGlvbjEYQAASKSVnJwgkZyooZycJKGcnCiNnMRtBAQ+CCQTOFtCDBIni4SgEz2ZYeATUmGnaBFuk9GkEhm1EhAQ4aOTHBD/q4w4Ej9BdWjYaAI4JALgAnwCJAHMAXQBLAC4AGAACIkMxGRREMRhEiAHqJwQiTwJUK0xQsCNDMRkURDEYRIgB0CcEIk8CVCtMULAjQzEZFEQxGEQ2GgFXAgA2GgIXwDA2GgMiU4gBfiNDMRkURDEYRDYaAVcCAIgBZCNDMRkURDEYRIgA8icEIk8CVCtMULAjQzEZFEQxGESIAKgnBCJPAlQrTFCwI0MxGRREMRhEiABiJwQiTwJUK0xQsCNDMRkURDEYRIgAM0wWJwQiTwNUUCtMULAjQzEZFEQxGESIABIWK0xQsCNDMRlA/zIxGBREI0MiKWUiTgJNiYoAAiIpZUlPAkxAAAMijAGLAYsATwNPA4kiKWUiTgJNJRJEIicIZUQkEkQiJwtlIk4CTRREIiplgAdkZWZhdWx0TgJNKBJEI4kiKWVEJRJEIiplRCgSRCIqZUUBFEQiKmVEKBJEIicFZUREIicGZUQkEkQiJwxlRCQSRCOJIillRCUSRCIqZUQoEkQiJwhlRCQSRCInCWVEKBJEIicKZUREIicLZUUBFEQiJwdlRQEURCInBWVFARREIicGZUQkEkQiJwxlRCQSRCKADmdsb2JhbF9hY2NvdW50ZUQiRCgSRCOJigEAKov/Z4mKAwAnB4v9ZyInB2VEi/0SRCcFi/9nIicFZUREJwaL/mciJwZlRIv+EkSJKWkjiScHaScFaScGaSOJ", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMTAgNTAKICAgIGJ5dGVjYmxvY2sgMHg0ODY1NmM2YzZmICJnbG9iYWxfaW50X2Z1bGwiICJnbG9iYWxfYnl0ZXNfZnVsbCIgMHgxNTFmN2M3NSAweDAwICJnbG9iYWxfYm9vbF9ub19kZWZhdWx0IiAiZ2xvYmFsX2Fzc2V0IiAiZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQiICJnbG9iYWxfaW50X3NpbXBsaWZpZWQiICJnbG9iYWxfYnl0ZXNfc2ltcGxpZmllZCIgImdsb2JhbF9ib29sX3NpbXBsaWZpZWQiICJnbG9iYWxfaW50X25vX2RlZmF1bHQiICJnbG9iYWxfYXBwbGljYXRpb24iCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTYKICAgIC8vIHNlbGYuZ2xvYmFsX2ludF9mdWxsID0gR2xvYmFsU3RhdGUoVUludDY0KDUwKSkgICMgVUludDY0IHdpdGggZGVmYXVsdCB2YWx1ZSA9IDUwCiAgICBieXRlY18xIC8vICJnbG9iYWxfaW50X2Z1bGwiCiAgICBpbnRjXzMgLy8gNTAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTcKICAgIC8vIHNlbGYuZ2xvYmFsX2ludF9zaW1wbGlmaWVkID0gVUludDY0KAogICAgYnl0ZWMgOCAvLyAiZ2xvYmFsX2ludF9zaW1wbGlmaWVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3LTE5CiAgICAvLyBzZWxmLmdsb2JhbF9pbnRfc2ltcGxpZmllZCA9IFVJbnQ2NCgKICAgIC8vICAgICAxMAogICAgLy8gKSAgIyBVSW50NjQgc2ltcGxpZmllZCB3aXRoIGRlZmF1bHQgdmFsdWUgPSAxMAogICAgaW50Y18yIC8vIDEwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyLTIzCiAgICAvLyAjIGV4YW1wbGU6IElOSVRfQllURVMKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwgPSBHbG9iYWxTdGF0ZSgKICAgIGJ5dGVjXzIgLy8gImdsb2JhbF9ieXRlc19mdWxsIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0CiAgICAvLyBCeXRlcyhiIkhlbGxvIikKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MjItMjUKICAgIC8vICMgZXhhbXBsZTogSU5JVF9CWVRFUwogICAgLy8gc2VsZi5nbG9iYWxfYnl0ZXNfZnVsbCA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIEJ5dGVzKGIiSGVsbG8iKQogICAgLy8gKSAgIyBCeXRlcyB3aXRoIGRlZmF1bHQgdmFsdWUgPSBieXRlcyhIZWxsbykKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MjYKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX3NpbXBsaWZpZWQgPSBCeXRlcygKICAgIGJ5dGVjIDkgLy8gImdsb2JhbF9ieXRlc19zaW1wbGlmaWVkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2LTI4CiAgICAvLyBzZWxmLmdsb2JhbF9ieXRlc19zaW1wbGlmaWVkID0gQnl0ZXMoCiAgICAvLyAgICAgYiJIZWxsbyIKICAgIC8vICkgICMgQnl0ZXMgc2ltcGxpZmllZCB3aXRoIGRlZmF1bHQgdmFsdWUgPSBieXRlcyhIZWxsbykKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyCiAgICAvLyBzZWxmLmdsb2JhbF9ib29sX3NpbXBsaWZpZWQgPSBUcnVlICAjIEJvb2wKICAgIGJ5dGVjIDEwIC8vICJnbG9iYWxfYm9vbF9zaW1wbGlmaWVkIgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDE0CiAgICBwdXNoYnl0ZXNzIDB4Y2UxNmQwODMgMHg4OWUyZTEyOCAweGNmNjY1ODc4IDB4ZDQ5ODY5ZGEgMHg1YmE0ZjQ2OSAweDg2NmQ0NDg0IDB4Mzg2OGU0YzcgMHgzZmVhZTMwZSAweDhmZDA1ZDVhIC8vIG1ldGhvZCAiZ2V0X2dsb2JhbF9zdGF0ZSgpdWludDY0IiwgbWV0aG9kICJtYXliZV9nbG9iYWxfc3RhdGUoKSh1aW50NjQsYm9vbCkiLCBtZXRob2QgImdldF9nbG9iYWxfc3RhdGVfZXhhbXBsZSgpYm9vbCIsIG1ldGhvZCAibWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoKWJvb2wiLCBtZXRob2QgImNoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlKClib29sIiwgbWV0aG9kICJzZXRfZ2xvYmFsX3N0YXRlKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJzZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoYnl0ZVtdLGFzc2V0LGJvb2wpdm9pZCIsIG1ldGhvZCAiZGVsX2dsb2JhbF9zdGF0ZSgpYm9vbCIsIG1ldGhvZCAiZGVsX2dsb2JhbF9zdGF0ZV9leGFtcGxlKClib29sIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9nZXRfZ2xvYmFsX3N0YXRlX3JvdXRlQDUgbWFpbl9tYXliZV9nbG9iYWxfc3RhdGVfcm91dGVANiBtYWluX2dldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUA3IG1haW5fbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGVfcm91dGVAOCBtYWluX2NoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDkgbWFpbl9zZXRfZ2xvYmFsX3N0YXRlX3JvdXRlQDEwIG1haW5fc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDExIG1haW5fZGVsX2dsb2JhbF9zdGF0ZV9yb3V0ZUAxMiBtYWluX2RlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMwoKbWFpbl9hZnRlcl9pZl9lbHNlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzCiAgICAvLyBjbGFzcyBHbG9iYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2RlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTEtMTUyCiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9HTE9CQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZQogICAgYnl0ZWMgNCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVsX2dsb2JhbF9zdGF0ZV9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDMtMTQ0CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRlbF9nbG9iYWxfc3RhdGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjMtMTI0CiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0dMT0JBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMy0xMjQKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9nbG9iYWxfc3RhdGVfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE2LTExNwogICAgLy8gIyBleGFtcGxlOiBXUklURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIEdsb2JhbFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE2LTExNwogICAgLy8gIyBleGFtcGxlOiBXUklURV9HTE9CQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBzZXRfZ2xvYmFsX3N0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NoZWNrX2dsb2JhbF9zdGF0ZV9leGFtcGxlX3JvdXRlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6OTUtOTYKICAgIC8vICMgZXhhbXBsZTogVkFMVUVfUFJPUEVSVFlfR0xPQkFMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjaGVja19nbG9iYWxfc3RhdGVfZXhhbXBsZQogICAgYnl0ZWMgNCAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGVfcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2NC02NQogICAgLy8gIyBleGFtcGxlOiBSRUFEX0dMT0JBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9nbG9iYWxfc3RhdGVfZXhhbXBsZV9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2dsb2JhbF9zdGF0ZV9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBtYXliZV9nbG9iYWxfc3RhdGUKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGVjIDQgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2dsb2JhbF9zdGF0ZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQxLTQyCiAgICAvLyAjIGV4YW1wbGU6IFJFQURfR0xPQkFMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfZ2xvYmFsX3N0YXRlCiAgICBpdG9iCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgR2xvYmFsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5nZXRfZ2xvYmFsX3N0YXRlKCkgLT4gdWludDY0OgpnZXRfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyByZXR1cm4gc2VsZi5nbG9iYWxfaW50X2Z1bGwuZ2V0KGRlZmF1bHQ9VUludDY0KDApKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5tYXliZV9nbG9iYWxfc3RhdGUoKSAtPiB1aW50NjQsIHVpbnQ2NDoKbWF5YmVfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ2LTQ3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYXliZV9nbG9iYWxfc3RhdGUoc2VsZikgLT4gdHVwbGVbVUludDY0LCBib29sXToKICAgIHByb3RvIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBpbnRfdmFsdWUsIGludF9leGlzdHMgPSBzZWxmLmdsb2JhbF9pbnRfZnVsbC5tYXliZSgpICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyBpZiBub3QgaW50X2V4aXN0czoKICAgIGJueiBtYXliZV9nbG9iYWxfc3RhdGVfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NTAKICAgIC8vIGludF92YWx1ZSA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMQoKbWF5YmVfZ2xvYmFsX3N0YXRlX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1MQogICAgLy8gcmV0dXJuIGludF92YWx1ZSwgaW50X2V4aXN0cwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmdsb2JhbF9zdG9yYWdlLmNvbnRyYWN0Lkdsb2JhbFN0b3JhZ2UuZ2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlKCkgLT4gdWludDY0OgpnZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NTUKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9pbnRfZnVsbC5nZXQoZGVmYXVsdD1VSW50NjQoMCkpID09IDUwICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBpbnRjXzMgLy8gNTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1NgogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2ludF9zaW1wbGlmaWVkID09IFVJbnQ2NCgxMCkgICMgZ2V0IGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZ2xvYmFsX2ludF9zaW1wbGlmaWVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9pbnRfc2ltcGxpZmllZCBleGlzdHMKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU3CiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfaW50X25vX2RlZmF1bHQuZ2V0KGRlZmF1bHQ9VUludDY0KDApKSA9PSAwCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gImdsb2JhbF9pbnRfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo1OQogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwuZ2V0KEJ5dGVzKGIiZGVmYXVsdCIpKSA9PSBiIkhlbGxvIiAgIyBieXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsX2J5dGVzX2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcHVzaGJ5dGVzIDB4NjQ2NTY2NjE3NTZjNzQKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWNfMCAvLyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo2MAogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5tYXliZV9nbG9iYWxfc3RhdGVfZXhhbXBsZSgpIC0+IHVpbnQ2NDoKbWF5YmVfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NjcKICAgIC8vIGludF92YWx1ZSwgaV9leGlzdHMgPSBzZWxmLmdsb2JhbF9pbnRfZnVsbC5tYXliZSgpICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdsb2JhbF9pbnRfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NjgKICAgIC8vIGFzc2VydCBpX2V4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NjkKICAgIC8vIGFzc2VydCBpbnRfdmFsdWUgPT0gVUludDY0KDUwKQogICAgaW50Y18zIC8vIDUwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NzEKICAgIC8vIGJ5dGVfdmFsdWUsIGJfZXhpc3RzID0gc2VsZi5nbG9iYWxfYnl0ZXNfZnVsbC5tYXliZSgpICAjIGJ5dGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJnbG9iYWxfYnl0ZXNfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NzIKICAgIC8vIGFzc2VydCBiX2V4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NzMKICAgIC8vIGFzc2VydCBieXRlX3ZhbHVlID09IGIiSGVsbG8iCiAgICBieXRlY18wIC8vIDB4NDg2NTZjNmM2ZgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBieXRlX2RlbF92YWx1ZSwgYl9leGlzdHMgPSBzZWxmLmdsb2JhbF9ieXRlc19mdWxsLm1heWJlKCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJnbG9iYWxfYnl0ZXNfZnVsbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3NgogICAgLy8gYXNzZXJ0IG5vdCBiX2V4aXN0cwogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6NzcKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9ieXRlc19mdWxsLnZhbHVlID09IEJ5dGVzKGIiSGVsbG8iKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImdsb2JhbF9ieXRlc19mdWxsIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9ieXRlc19mdWxsIGV4aXN0cwogICAgYnl0ZWNfMCAvLyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo3OQogICAgLy8gYm9vbF92YWx1ZSwgaV9leGlzdHMgPSBzZWxmLmdsb2JhbF9ib29sX25vX2RlZmF1bHQubWF5YmUoKSAgIyBib29sCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6ODAKICAgIC8vIGFzc2VydCBpX2V4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6ODEKICAgIC8vIGFzc2VydCBib29sKGJvb2xfdmFsdWUpCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4MwogICAgLy8gYXNzZXRfdmFsdWUsIGlfZXhpc3RzID0gc2VsZi5nbG9iYWxfYXNzZXQubWF5YmUoKSAgIyBBc3NldAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBpX2V4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6ODUKICAgIC8vIGFzc2VydCBhc3NldF92YWx1ZSA9PSBBc3NldChVSW50NjQoMTApKQogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6ODcKICAgIC8vIGFwcGxuX3ZhbHVlLCBpX2V4aXN0cyA9IHNlbGYuZ2xvYmFsX2FwcGxpY2F0aW9uLm1heWJlKCkgICMgQXBwbGljYXRpb24KICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAiZ2xvYmFsX2FwcGxpY2F0aW9uIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4OAogICAgLy8gYXNzZXJ0IGlfZXhpc3RzCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo4OQogICAgLy8gYXNzZXJ0IGFwcGxuX3ZhbHVlID09IEFwcGxpY2F0aW9uKFVJbnQ2NCgxMCkpCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weTo5MQogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5jaGVja19nbG9iYWxfc3RhdGVfZXhhbXBsZSgpIC0+IHVpbnQ2NDoKY2hlY2tfZ2xvYmFsX3N0YXRlX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6OTgKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9pbnRfZnVsbC52YWx1ZSA9PSA1MCAgIyB1aW50NjQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJnbG9iYWxfaW50X2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2ludF9mdWxsIGV4aXN0cwogICAgaW50Y18zIC8vIDUwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6OTkKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9ieXRlc19mdWxsLnZhbHVlID09IEJ5dGVzKGIiSGVsbG8iKSAgIyBieXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsX2J5dGVzX2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwgZXhpc3RzCiAgICBieXRlY18wIC8vIDB4NDg2NTZjNmM2ZgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMQogICAgLy8gYXNzZXJ0IHNlbGYuZ2xvYmFsX2ludF9zaW1wbGlmaWVkID09IDEwICAjIHVpbnQ2NAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gImdsb2JhbF9pbnRfc2ltcGxpZmllZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfaW50X3NpbXBsaWZpZWQgZXhpc3RzCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDIKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9ieXRlc19zaW1wbGlmaWVkID09IGIiSGVsbG8iICAjIGJ5dGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJnbG9iYWxfYnl0ZXNfc2ltcGxpZmllZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYnl0ZXNfc2ltcGxpZmllZCBleGlzdHMKICAgIGJ5dGVjXzAgLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAzCiAgICAvLyBhc3NlcnQgYm9vbChzZWxmLmdsb2JhbF9ib29sX3NpbXBsaWZpZWQpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gImdsb2JhbF9ib29sX3NpbXBsaWZpZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2Jvb2xfc2ltcGxpZmllZCBleGlzdHMKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwNQogICAgLy8gYXNzZXJ0IG5vdCBzZWxmLmdsb2JhbF9pbnRfbm9fZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJnbG9iYWxfaW50X25vX2RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDYKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5nbG9iYWxfYnl0ZXNfbm9fZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImdsb2JhbF9ieXRlc19ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTA3CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImdsb2JhbF9ib29sX25vX2RlZmF1bHQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDkKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9hc3NldC52YWx1ZSA9PSBBc3NldChVSW50NjQoMTApKSAgIyBBc3NldAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImdsb2JhbF9hc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYXNzZXQgZXhpc3RzCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTAKICAgIC8vIGFzc2VydCBzZWxmLmdsb2JhbF9hcHBsaWNhdGlvbi52YWx1ZSA9PSBBcHBsaWNhdGlvbihVSW50NjQoMTApKSAgIyBBcHBsaWNhdGlvbgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJnbG9iYWxfYXBwbGljYXRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2FwcGxpY2F0aW9uIGV4aXN0cwogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTExCiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfYWNjb3VudC52YWx1ZSA9PSBBY2NvdW50KEJ5dGVzKGIiSGVsbG8iKSkgICMgQWNjb3VudAogICAgaW50Y18wIC8vIDAKICAgIHB1c2hieXRlcyAiZ2xvYmFsX2FjY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2FjY291bnQgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYXNzZXJ0IC8vIEFkZHJlc3MgbGVuZ3RoIGlzIDMyIGJ5dGVzCiAgICBieXRlY18wIC8vIDB4NDg2NTZjNmM2ZgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExMgogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5zZXRfZ2xvYmFsX3N0YXRlKHZhbHVlOiBieXRlcykgLT4gdm9pZDoKc2V0X2dsb2JhbF9zdGF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTYtMTE4CiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0dMT0JBTF9TVEFURQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgc2V0X2dsb2JhbF9zdGF0ZShzZWxmLCB2YWx1ZTogQnl0ZXMpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTkKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX2Z1bGwudmFsdWUgPSB2YWx1ZQogICAgYnl0ZWNfMiAvLyAiZ2xvYmFsX2J5dGVzX2Z1bGwiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5zZXRfZ2xvYmFsX3N0YXRlX2V4YW1wbGUodmFsdWVfYnl0ZXM6IGJ5dGVzLCB2YWx1ZV9hc3NldDogdWludDY0LCB2YWx1ZV9ib29sOiB1aW50NjQpIC0+IHZvaWQ6CnNldF9nbG9iYWxfc3RhdGVfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjMtMTMxCiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0dMT0JBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgc2V0X2dsb2JhbF9zdGF0ZV9leGFtcGxlKAogICAgLy8gICAgIHNlbGYsCiAgICAvLyAgICAgdmFsdWVfYnl0ZXM6IEJ5dGVzLAogICAgLy8gICAgIHZhbHVlX2Fzc2V0OiBBc3NldCwKICAgIC8vICAgICAqLAogICAgLy8gICAgIHZhbHVlX2Jvb2w6IGJvb2wsCiAgICAvLyApIC0+IE5vbmU6CiAgICBwcm90byAzIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzIKICAgIC8vIHNlbGYuZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQudmFsdWUgPSB2YWx1ZV9ieXRlcwogICAgYnl0ZWMgNyAvLyAiZ2xvYmFsX2J5dGVzX25vX2RlZmF1bHQiCiAgICBmcmFtZV9kaWcgLTMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMzCiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfYnl0ZXNfbm9fZGVmYXVsdC52YWx1ZSA9PSB2YWx1ZV9ieXRlcwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImdsb2JhbF9ieXRlc19ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdsb2JhbF9ieXRlc19ub19kZWZhdWx0IGV4aXN0cwogICAgZnJhbWVfZGlnIC0zCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTM1CiAgICAvLyBzZWxmLmdsb2JhbF9ib29sX25vX2RlZmF1bHQudmFsdWUgPSB2YWx1ZV9ib29sICAjIEJvb2wKICAgIGJ5dGVjIDUgLy8gImdsb2JhbF9ib29sX25vX2RlZmF1bHQiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTM2CiAgICAvLyBhc3NlcnQgYm9vbChzZWxmLmdsb2JhbF9ib29sX25vX2RlZmF1bHQudmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiZ2xvYmFsX2Jvb2xfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5nbG9iYWxfYm9vbF9ub19kZWZhdWx0IGV4aXN0cwogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTM4CiAgICAvLyBzZWxmLmdsb2JhbF9hc3NldC52YWx1ZSA9IHZhbHVlX2Fzc2V0ICAjIEFzc2V0CiAgICBieXRlYyA2IC8vICJnbG9iYWxfYXNzZXQiCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTM5CiAgICAvLyBhc3NlcnQgc2VsZi5nbG9iYWxfYXNzZXQudmFsdWUgPT0gdmFsdWVfYXNzZXQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJnbG9iYWxfYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ2xvYmFsX2Fzc2V0IGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYXNzZXJ0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5kZWxfZ2xvYmFsX3N0YXRlKCkgLT4gdWludDY0OgpkZWxfZ2xvYmFsX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gZGVsIHNlbGYuZ2xvYmFsX2ludF9mdWxsLnZhbHVlCiAgICBieXRlY18xIC8vICJnbG9iYWxfaW50X2Z1bGwiCiAgICBhcHBfZ2xvYmFsX2RlbAogICAgLy8gc21hcnRfY29udHJhY3RzL2dsb2JhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0NwogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2xvYmFsX3N0b3JhZ2UuY29udHJhY3QuR2xvYmFsU3RvcmFnZS5kZWxfZ2xvYmFsX3N0YXRlX2V4YW1wbGUoKSAtPiB1aW50NjQ6CmRlbF9nbG9iYWxfc3RhdGVfZXhhbXBsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTQKICAgIC8vIGRlbCBzZWxmLmdsb2JhbF9ieXRlc19ub19kZWZhdWx0LnZhbHVlCiAgICBieXRlYyA3IC8vICJnbG9iYWxfYnl0ZXNfbm9fZGVmYXVsdCIKICAgIGFwcF9nbG9iYWxfZGVsCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2xvYmFsX3N0b3JhZ2UvY29udHJhY3QucHk6MTU1CiAgICAvLyBkZWwgc2VsZi5nbG9iYWxfYm9vbF9ub19kZWZhdWx0LnZhbHVlCiAgICBieXRlYyA1IC8vICJnbG9iYWxfYm9vbF9ub19kZWZhdWx0IgogICAgYXBwX2dsb2JhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTYKICAgIC8vIGRlbCBzZWxmLmdsb2JhbF9hc3NldC52YWx1ZQogICAgYnl0ZWMgNiAvLyAiZ2xvYmFsX2Fzc2V0IgogICAgYXBwX2dsb2JhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nbG9iYWxfc3RvcmFnZS9jb250cmFjdC5weToxNTcKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [765], "errorMessage": "Address length is 32 bytes"}, {"pc": [329, 351, 373, 402, 420, 442, 464, 486, 511], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [533], "errorMessage": "can only call when creating"}, {"pc": [332, 354, 376, 405, 423, 445, 467, 489, 514], "errorMessage": "can only call when not creating"}, {"pc": [763], "errorMessage": "check self.global_account exists"}, {"pc": [741], "errorMessage": "check self.global_application exists"}, {"pc": [733, 816], "errorMessage": "check self.global_asset exists"}, {"pc": [805], "errorMessage": "check self.global_bool_no_default exists"}, {"pc": [703], "errorMessage": "check self.global_bool_simplified exists"}, {"pc": [641, 679], "errorMessage": "check self.global_bytes_full exists"}, {"pc": [791], "errorMessage": "check self.global_bytes_no_default exists"}, {"pc": [695], "errorMessage": "check self.global_bytes_simplified exists"}, {"pc": [672], "errorMessage": "check self.global_int_full exists"}, {"pc": [583, 687], "errorMessage": "check self.global_int_simplified exists"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/hello_world/HelloWorld.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/hello_world/HelloWorld.approval.puya.map index a44ce65..6eb62f6 100644 --- a/projects/python-examples/smart_contracts/artifacts/hello_world/HelloWorld.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/hello_world/HelloWorld.approval.puya.map @@ -24,13 +24,28 @@ "stack_out": [] }, "6": { - "op": "pushbytes 0x02bece11 // method \"hello(string)string\"" + "op": "pushbytes 0x02bece11 // method \"hello(string)string\"", + "defined_out": [ + "Method(hello(string)string)" + ], + "stack_out": [ + "Method(hello(string)string)" + ] }, "12": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(hello(string)string)", + "tmp%2#0" + ], + "stack_out": [ + "Method(hello(string)string)", + "tmp%2#0" + ] }, "15": { - "op": "match main_hello_route@3" + "op": "match main_hello_route@3", + "stack_out": [] }, "19": { "block": "main_after_if_else@10", @@ -44,7 +59,8 @@ ] }, "21": { - "op": "return" + "op": "return", + "stack_out": [] }, "22": { "block": "main_hello_route@3", @@ -214,7 +230,8 @@ ] }, "57": { - "op": "return" + "op": "return", + "stack_out": [] }, "58": { "block": "main_bare_routing@6", @@ -232,20 +249,40 @@ "stack_out": [] }, "63": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%11#0" + ], + "stack_out": [ + "tmp%11#0" + ] }, "65": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%12#0" + ], + "stack_out": [ + "tmp%12#0" + ] }, "66": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "67": { - "op": "pushint 1 // 1" + "op": "pushint 1 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "69": { - "op": "return" + "op": "return", + "stack_out": [] }, "70": { "subroutine": "smart_contracts.hello_world.contract.HelloWorld.hello", diff --git a/projects/python-examples/smart_contracts/artifacts/hello_world/HelloWorld.arc56.json b/projects/python-examples/smart_contracts/artifacts/hello_world/HelloWorld.arc56.json index b707477..9163c67 100644 --- a/projects/python-examples/smart_contracts/artifacts/hello_world/HelloWorld.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/hello_world/HelloWorld.arc56.json @@ -98,8 +98,8 @@ "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/hello_world/hello_world_client.py b/projects/python-examples/smart_contracts/artifacts/hello_world/hello_world_client.py index cff16c8..e9e3997 100644 --- a/projects/python-examples/smart_contracts/artifacts/hello_world/hello_world_client.py +++ b/projects/python-examples/smart_contracts/artifacts/hello_world/hello_world_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "name"}], "name": "hello", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}], "name": "HelloWorld", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBIZWxsb1dvcmxkKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANgogICAgcHVzaGJ5dGVzIDB4MDJiZWNlMTEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9oZWxsb19yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaGVsbG9fd29ybGQvY29udHJhY3QucHk6NgogICAgLy8gY2xhc3MgSGVsbG9Xb3JsZChBUkM0Q29udHJhY3QpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9oZWxsb19yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2hlbGxvX3dvcmxkL2NvbnRyYWN0LnB5OjcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaGVsbG9fd29ybGQvY29udHJhY3QucHk6NgogICAgLy8gY2xhc3MgSGVsbG9Xb3JsZChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgaGVsbG8KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaGVsbG9fd29ybGQvY29udHJhY3QucHk6NgogICAgLy8gY2xhc3MgSGVsbG9Xb3JsZChBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaGVsbG9fd29ybGQuY29udHJhY3QuSGVsbG9Xb3JsZC5oZWxsbyhuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmhlbGxvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2hlbGxvX3dvcmxkL2NvbnRyYWN0LnB5OjctOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgaGVsbG8oc2VsZiwgbmFtZTogU3RyaW5nKSAtPiBTdHJpbmc6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo5CiAgICAvLyByZXR1cm4gIkhlbGxvLCAiICsgbmFtZQogICAgcHVzaGJ5dGVzICJIZWxsbywgIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [25], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [66], "errorMessage": "can only call when creating"}, {"pc": [28], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "string", "name": "name"}], "name": "hello", "returns": {"type": "string"}, "events": [], "readonly": false, "recommendations": {}}], "name": "HelloWorld", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIk=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo2CiAgICAvLyBjbGFzcyBIZWxsb1dvcmxkKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANgogICAgcHVzaGJ5dGVzIDB4MDJiZWNlMTEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9oZWxsb19yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaGVsbG9fd29ybGQvY29udHJhY3QucHk6NgogICAgLy8gY2xhc3MgSGVsbG9Xb3JsZChBUkM0Q29udHJhY3QpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl9oZWxsb19yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2hlbGxvX3dvcmxkL2NvbnRyYWN0LnB5OjcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaGVsbG9fd29ybGQvY29udHJhY3QucHk6NgogICAgLy8gY2xhc3MgSGVsbG9Xb3JsZChBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgaGVsbG8KICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaGVsbG9fd29ybGQvY29udHJhY3QucHk6NgogICAgLy8gY2xhc3MgSGVsbG9Xb3JsZChBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuaGVsbG9fd29ybGQuY29udHJhY3QuSGVsbG9Xb3JsZC5oZWxsbyhuYW1lOiBieXRlcykgLT4gYnl0ZXM6CmhlbGxvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2hlbGxvX3dvcmxkL2NvbnRyYWN0LnB5OjctOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgaGVsbG8oc2VsZiwgbmFtZTogU3RyaW5nKSAtPiBTdHJpbmc6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9oZWxsb193b3JsZC9jb250cmFjdC5weTo5CiAgICAvLyByZXR1cm4gIkhlbGxvLCAiICsgbmFtZQogICAgcHVzaGJ5dGVzICJIZWxsbywgIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [25], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [66], "errorMessage": "can only call when creating"}, {"pc": [28], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.puya.map index ebba8fe..6e549c8 100644 --- a/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../inner_transactions/contract.py" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAmNK;;AAAA;AAAA;AAAA;;AAAA;AAnNL;;;AAAA;AAAA;;AAmNK;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAhBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAzBA;;AAAA;AAAA;AAAA;;AAAA;AA9JL;;;AAAA;AAAA;;AA8JK;;;AAAA;AAAA;AAAA;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AApJL;;;AAAA;AAAA;;AAoJK;;;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AA/HL;;;AAAA;AAAA;;AA+HK;;;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AA1GL;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;AA0GK;;;AAAA;;AAhBA;;AAAA;AAAA;AAAA;;AAAA;AA1FL;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AA0FK;;;AAAA;;AAnBA;;AAAA;AAAA;AAAA;;AAAA;AAvEL;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;AAuEK;;;AAAA;;AAnBA;;AAAA;AAAA;AAAA;;AAAA;AApDL;;;AAAA;AAAA;;AAoDK;;;AAAA;;AAxBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAXA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAfA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAFL;;AAAA;;;;;;;;;AAEA;;;AAEiB;AAAmC;;;;AAAf;;;;;AAApB;;;AAAmD;;;AAAnD;;;AACT;AAYR;;;AAEsB;AAIC;;;;;;;;;;;;;;;;;;AADD;;;;;;AADD;;;;AADH;;;;;;;;;AADI;;;;AAAA;;;AAAA;;;AAOd;AAER;;;AAOsB;AAMF;;AACA;;;;;;;;;;AAFJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AADO;;;;;;;;;;;;;AADD;;;;;;AADD;;;;AADH;;;;AADI;;;;AAAA;;;AAAA;;;AAYd;AAKR;;;AAEQ;AACmB;;AAEF;;;;;;;;;AAHjB;;;AAIQ;;;AAJR;;AAiBR;;;AAEQ;;;;;;;;;;;;;AAAA;;;AAIQ;;;AAJR;;AAiBR;;;AAEQ;AAGW;;;;;;;;;;;AAHX;;;;AAIQ;;;AAJR;;AAcR;;;AAIQ;AACmB;;;;;;;;;;;;;;;;AADnB;;;AAKQ;;;AALR;;AAiBR;;;AAEQ;AAEY;;AACA;AACD;;AACE;;;;;;;;;;;;;AALb;;;;AAMQ;;;AANR;;AAmBR;;;AAEQ;;;;;AAAA;;;;AAEQ;;;AAFR;;AAQR;;;AAE4D;;AAQ5B;;;AARa;;;;;AAApB;;;AAAmD;;;AAQX;AAJ3C;;;AAA4C;;;;;;;AAFxC;;;AAGV;;;AAGgB;;;;;;AAEH;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AACrB;AAYR;;;AAOkB;AAFU;;;AAAA;;;;AAEV;;;AAGF;;;AAHE;;;AAOV;AAER;;;AAKkB;AAAA;;;AAAA;;;;AAAA;;;AAAA;;;AAAA;;;AAEV;AAKR;;;AAGmB;AAEG;;;AAA4C;;;;;;;AAF/C;;;AAAA;;;AAAA;;;AAKgB;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAGW;;;;;AAAA;;;AAElC;;;;;;;;;;;AAFkC;;;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAMtC", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAmNK;;AAAA;AAAA;AAAA;;AAAA;AAnNL;;;AAAA;AAAA;;AAmNK;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAZA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAhBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAzBA;;AAAA;AAAA;AAAA;;AAAA;AA9JL;;;AAAA;AAAA;;AA8JK;;;AAAA;AAAA;AAAA;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AApJL;;;AAAA;AAAA;;AAoJK;;;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AA/HL;;;AAAA;AAAA;;AA+HK;;;AAAA;;AArBA;;AAAA;AAAA;AAAA;;AAAA;AA1GL;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;AA0GK;;;AAAA;;AAhBA;;AAAA;AAAA;AAAA;;AAAA;AA1FL;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AA0FK;;;AAAA;;AAnBA;;AAAA;AAAA;AAAA;;AAAA;AAvEL;;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;AAuEK;;;AAAA;;AAnBA;;AAAA;AAAA;AAAA;;AAAA;AApDL;;;AAAA;AAAA;;AAoDK;;;AAAA;;AAxBA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAXA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAfA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAFL;;AAAA;;;;;;;;;AAIiB;AAAmC;;;;AAAf;;;;;AAApB;;;AAAmD;;;AAAnD;;;AACT;AAcc;AAIC;;;;;;;;;;;;;;;;;;AADD;;;;;;AADD;;;;AADH;;;;;;;;;AADI;;;;AAAA;;;AAAA;;;AAOd;AASc;AAMF;;AACA;;;;;;;;;;AAFJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AADO;;;;;;;;;;;;;AADD;;;;;;AADD;;;;AADH;;;;AADI;;;;AAAA;;;AAAA;;;AAYd;AAKR;;;AAEQ;AACmB;;AAEF;;;;;;;;;AAHjB;;;AAIQ;;;AAJR;;AAiBR;;;AAEQ;;;;;;;;;;;;;AAAA;;;AAIQ;;;AAJR;;AAiBR;;;AAEQ;AAGW;;;;;;;;;;;AAHX;;;;AAIQ;;;AAJR;;AAcR;;;AAIQ;AACmB;;;;;;;;;;;;;;;;AADnB;;;AAKQ;;;AALR;;AAiBR;;;AAEQ;AAEY;;AACA;AACD;;AACE;;;;;;;;;;;;;AALb;;;;AAMQ;;;AANR;;AAmBR;;;AAEQ;;;;;AAAA;;;;AAEQ;;;AAFR;;AAQR;;;AAE4D;;AAQ5B;;;AARa;;;;;AAApB;;;AAAmD;;;AAQX;AAJ3C;;;AAA4C;;;;;;;AAFxC;;;AAGV;;;AAGgB;;;;;;AAEH;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AACrB;AAmBU;AAFU;;;AAAA;;;;AAEV;;;AAGF;;;AAHE;;;AAOV;AAOU;AAAA;;;AAAA;;;;AAAA;;;AAAA;;;AAAA;;;AAEV;AAKR;;;AAGmB;AAEG;;;AAA4C;;;;;;;AAF/C;;;AAAA;;;AAAA;;;AAKgB;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAGW;;;;;AAAA;;;AAElC;;;;;;;;;;;AAFkC;;;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;;AAMtC", "op_pc_offset": 0, "pc_events": { "1": { @@ -30,13 +30,76 @@ "stack_out": [] }, "124": { - "op": "pushbytess 0x23950027 0xea7689f3 0xfe264730 0xb6c2b148 0x4b19dfdd 0xa90e6a4f 0xc5046282 0x584400ff 0xa9e812a5 0x0e739814 0x3631745d 0x10a9b102 0x9d0c5de1 // method \"payment()uint64\", method \"fungible_asset_create()uint64\", method \"non_fungible_asset_create()uint64\", method \"asset_opt_in(asset)void\", method \"asset_transfer(asset,account,uint64)void\", method \"asset_freeze(account,asset)void\", method \"asset_revoke(asset,account,uint64)void\", method \"asset_config(asset)void\", method \"asset_delete(asset)void\", method \"multi_inner_txns(application)(uint64,string)\", method \"deploy_app()uint64\", method \"arc4_deploy_app()uint64\", method \"noop_app_call(application)(string,string)\"" + "op": "pushbytess 0x23950027 0xea7689f3 0xfe264730 0xb6c2b148 0x4b19dfdd 0xa90e6a4f 0xc5046282 0x584400ff 0xa9e812a5 0x0e739814 0x3631745d 0x10a9b102 0x9d0c5de1 // method \"payment()uint64\", method \"fungible_asset_create()uint64\", method \"non_fungible_asset_create()uint64\", method \"asset_opt_in(asset)void\", method \"asset_transfer(asset,account,uint64)void\", method \"asset_freeze(account,asset)void\", method \"asset_revoke(asset,account,uint64)void\", method \"asset_config(asset)void\", method \"asset_delete(asset)void\", method \"multi_inner_txns(application)(uint64,string)\", method \"deploy_app()uint64\", method \"arc4_deploy_app()uint64\", method \"noop_app_call(application)(string,string)\"", + "defined_out": [ + "Method(arc4_deploy_app()uint64)", + "Method(asset_config(asset)void)", + "Method(asset_delete(asset)void)", + "Method(asset_freeze(account,asset)void)", + "Method(asset_opt_in(asset)void)", + "Method(asset_revoke(asset,account,uint64)void)", + "Method(asset_transfer(asset,account,uint64)void)", + "Method(deploy_app()uint64)", + "Method(fungible_asset_create()uint64)", + "Method(multi_inner_txns(application)(uint64,string))", + "Method(non_fungible_asset_create()uint64)", + "Method(noop_app_call(application)(string,string))", + "Method(payment()uint64)" + ], + "stack_out": [ + "Method(payment()uint64)", + "Method(fungible_asset_create()uint64)", + "Method(non_fungible_asset_create()uint64)", + "Method(asset_opt_in(asset)void)", + "Method(asset_transfer(asset,account,uint64)void)", + "Method(asset_freeze(account,asset)void)", + "Method(asset_revoke(asset,account,uint64)void)", + "Method(asset_config(asset)void)", + "Method(asset_delete(asset)void)", + "Method(multi_inner_txns(application)(uint64,string))", + "Method(deploy_app()uint64)", + "Method(arc4_deploy_app()uint64)", + "Method(noop_app_call(application)(string,string))" + ] }, "191": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(arc4_deploy_app()uint64)", + "Method(asset_config(asset)void)", + "Method(asset_delete(asset)void)", + "Method(asset_freeze(account,asset)void)", + "Method(asset_opt_in(asset)void)", + "Method(asset_revoke(asset,account,uint64)void)", + "Method(asset_transfer(asset,account,uint64)void)", + "Method(deploy_app()uint64)", + "Method(fungible_asset_create()uint64)", + "Method(multi_inner_txns(application)(uint64,string))", + "Method(non_fungible_asset_create()uint64)", + "Method(noop_app_call(application)(string,string))", + "Method(payment()uint64)", + "tmp%2#0" + ], + "stack_out": [ + "Method(payment()uint64)", + "Method(fungible_asset_create()uint64)", + "Method(non_fungible_asset_create()uint64)", + "Method(asset_opt_in(asset)void)", + "Method(asset_transfer(asset,account,uint64)void)", + "Method(asset_freeze(account,asset)void)", + "Method(asset_revoke(asset,account,uint64)void)", + "Method(asset_config(asset)void)", + "Method(asset_delete(asset)void)", + "Method(multi_inner_txns(application)(uint64,string))", + "Method(deploy_app()uint64)", + "Method(arc4_deploy_app()uint64)", + "Method(noop_app_call(application)(string,string))", + "tmp%2#0" + ] }, "194": { - "op": "match main_payment_route@3 main_fungible_asset_create_route@4 main_non_fungible_asset_create_route@5 main_asset_opt_in_route@6 main_asset_transfer_route@7 main_asset_freeze_route@8 main_asset_revoke_route@9 main_asset_config_route@10 main_asset_delete_route@11 main_multi_inner_txns_route@12 main_deploy_app_route@13 main_arc4_deploy_app_route@14 main_noop_app_call_route@15" + "op": "match main_payment_route@3 main_fungible_asset_create_route@4 main_non_fungible_asset_create_route@5 main_asset_opt_in_route@6 main_asset_transfer_route@7 main_asset_freeze_route@8 main_asset_revoke_route@9 main_asset_config_route@10 main_asset_delete_route@11 main_multi_inner_txns_route@12 main_deploy_app_route@13 main_arc4_deploy_app_route@14 main_noop_app_call_route@15", + "stack_out": [] }, "222": { "block": "main_after_if_else@22", @@ -50,26 +113,27 @@ ] }, "223": { - "op": "return" + "op": "return", + "stack_out": [] }, "224": { "block": "main_noop_app_call_route@15", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%91#0" + "tmp%79#0" ], "stack_out": [ - "tmp%91#0" + "tmp%79#0" ] }, "226": { "op": "!", "defined_out": [ - "tmp%92#0" + "tmp%80#0" ], "stack_out": [ - "tmp%92#0" + "tmp%80#0" ] }, "227": { @@ -80,10 +144,10 @@ "228": { "op": "txn ApplicationID", "defined_out": [ - "tmp%93#0" + "tmp%81#0" ], "stack_out": [ - "tmp%93#0" + "tmp%81#0" ] }, "230": { @@ -94,28 +158,28 @@ "231": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%95#0" + "reinterpret_bytes[1]%10#0" ], "stack_out": [ - "tmp%95#0" + "reinterpret_bytes[1]%10#0" ] }, "234": { "op": "btoi", "defined_out": [ - "tmp%96#0" + "tmp%83#0" ], "stack_out": [ - "tmp%96#0" + "tmp%83#0" ] }, "235": { "op": "txnas Applications", "defined_out": [ - "tmp%97#0" + "tmp%84#0" ], "stack_out": [ - "tmp%97#0" + "tmp%84#0" ] }, "237": { @@ -374,10 +438,10 @@ "270": { "op": "concat", "defined_out": [ - "tmp%98#0" + "tmp%85#0" ], "stack_out": [ - "tmp%98#0" + "tmp%85#0" ] }, "271": { @@ -394,26 +458,27 @@ ] }, "273": { - "op": "return" + "op": "return", + "stack_out": [] }, "274": { "block": "main_arc4_deploy_app_route@14", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%86#0" + "tmp%74#0" ], "stack_out": [ - "tmp%86#0" + "tmp%74#0" ] }, "276": { "op": "!", "defined_out": [ - "tmp%87#0" + "tmp%75#0" ], "stack_out": [ - "tmp%87#0" + "tmp%75#0" ] }, "277": { @@ -424,10 +489,10 @@ "278": { "op": "txn ApplicationID", "defined_out": [ - "tmp%88#0" + "tmp%76#0" ], "stack_out": [ - "tmp%88#0" + "tmp%76#0" ] }, "280": { @@ -475,10 +540,10 @@ "287": { "op": "concat", "defined_out": [ - "tmp%90#0" + "tmp%78#0" ], "stack_out": [ - "tmp%90#0" + "tmp%78#0" ] }, "288": { @@ -495,26 +560,27 @@ ] }, "290": { - "op": "return" + "op": "return", + "stack_out": [] }, "291": { "block": "main_deploy_app_route@13", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%81#0" + "tmp%69#0" ], "stack_out": [ - "tmp%81#0" + "tmp%69#0" ] }, "293": { "op": "!", "defined_out": [ - "tmp%82#0" + "tmp%70#0" ], "stack_out": [ - "tmp%82#0" + "tmp%70#0" ] }, "294": { @@ -525,10 +591,10 @@ "295": { "op": "txn ApplicationID", "defined_out": [ - "tmp%83#0" + "tmp%71#0" ], "stack_out": [ - "tmp%83#0" + "tmp%71#0" ] }, "297": { @@ -576,10 +642,10 @@ "304": { "op": "concat", "defined_out": [ - "tmp%85#0" + "tmp%73#0" ], "stack_out": [ - "tmp%85#0" + "tmp%73#0" ] }, "305": { @@ -596,26 +662,27 @@ ] }, "307": { - "op": "return" + "op": "return", + "stack_out": [] }, "308": { "block": "main_multi_inner_txns_route@12", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%73#0" + "tmp%62#0" ], "stack_out": [ - "tmp%73#0" + "tmp%62#0" ] }, "310": { "op": "!", "defined_out": [ - "tmp%74#0" + "tmp%63#0" ], "stack_out": [ - "tmp%74#0" + "tmp%63#0" ] }, "311": { @@ -626,10 +693,10 @@ "312": { "op": "txn ApplicationID", "defined_out": [ - "tmp%75#0" + "tmp%64#0" ], "stack_out": [ - "tmp%75#0" + "tmp%64#0" ] }, "314": { @@ -640,28 +707,28 @@ "315": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%77#0" + "reinterpret_bytes[1]%9#0" ], "stack_out": [ - "tmp%77#0" + "reinterpret_bytes[1]%9#0" ] }, "318": { "op": "btoi", "defined_out": [ - "tmp%78#0" + "tmp%66#0" ], "stack_out": [ - "tmp%78#0" + "tmp%66#0" ] }, "319": { "op": "txnas Applications", "defined_out": [ - "tmp%79#0" + "tmp%67#0" ], "stack_out": [ - "tmp%79#0" + "tmp%67#0" ] }, "321": { @@ -755,10 +822,10 @@ "335": { "op": "concat", "defined_out": [ - "tmp%80#0" + "tmp%68#0" ], "stack_out": [ - "tmp%80#0" + "tmp%68#0" ] }, "336": { @@ -775,26 +842,27 @@ ] }, "338": { - "op": "return" + "op": "return", + "stack_out": [] }, "339": { "block": "main_asset_delete_route@11", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%66#0" + "tmp%56#0" ], "stack_out": [ - "tmp%66#0" + "tmp%56#0" ] }, "341": { "op": "!", "defined_out": [ - "tmp%67#0" + "tmp%57#0" ], "stack_out": [ - "tmp%67#0" + "tmp%57#0" ] }, "342": { @@ -805,10 +873,10 @@ "343": { "op": "txn ApplicationID", "defined_out": [ - "tmp%68#0" + "tmp%58#0" ], "stack_out": [ - "tmp%68#0" + "tmp%58#0" ] }, "345": { @@ -819,28 +887,28 @@ "346": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%70#0" + "reinterpret_bytes[1]%8#0" ], "stack_out": [ - "tmp%70#0" + "reinterpret_bytes[1]%8#0" ] }, "349": { "op": "btoi", "defined_out": [ - "tmp%71#0" + "tmp%60#0" ], "stack_out": [ - "tmp%71#0" + "tmp%60#0" ] }, "350": { "op": "txnas Assets", "defined_out": [ - "tmp%72#0" + "tmp%61#0" ], "stack_out": [ - "tmp%72#0" + "tmp%61#0" ] }, "352": { @@ -858,26 +926,27 @@ ] }, "356": { - "op": "return" + "op": "return", + "stack_out": [] }, "357": { "block": "main_asset_config_route@10", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%59#0" + "tmp%50#0" ], "stack_out": [ - "tmp%59#0" + "tmp%50#0" ] }, "359": { "op": "!", "defined_out": [ - "tmp%60#0" + "tmp%51#0" ], "stack_out": [ - "tmp%60#0" + "tmp%51#0" ] }, "360": { @@ -888,10 +957,10 @@ "361": { "op": "txn ApplicationID", "defined_out": [ - "tmp%61#0" + "tmp%52#0" ], "stack_out": [ - "tmp%61#0" + "tmp%52#0" ] }, "363": { @@ -902,28 +971,28 @@ "364": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%63#0" + "reinterpret_bytes[1]%7#0" ], "stack_out": [ - "tmp%63#0" + "reinterpret_bytes[1]%7#0" ] }, "367": { "op": "btoi", "defined_out": [ - "tmp%64#0" + "tmp%54#0" ], "stack_out": [ - "tmp%64#0" + "tmp%54#0" ] }, "368": { "op": "txnas Assets", "defined_out": [ - "tmp%65#0" + "tmp%55#0" ], "stack_out": [ - "tmp%65#0" + "tmp%55#0" ] }, "370": { @@ -941,26 +1010,27 @@ ] }, "374": { - "op": "return" + "op": "return", + "stack_out": [] }, "375": { "block": "main_asset_revoke_route@9", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%47#0" + "tmp%41#0" ], "stack_out": [ - "tmp%47#0" + "tmp%41#0" ] }, "377": { "op": "!", "defined_out": [ - "tmp%48#0" + "tmp%42#0" ], "stack_out": [ - "tmp%48#0" + "tmp%42#0" ] }, "378": { @@ -971,10 +1041,10 @@ "379": { "op": "txn ApplicationID", "defined_out": [ - "tmp%49#0" + "tmp%43#0" ], "stack_out": [ - "tmp%49#0" + "tmp%43#0" ] }, "381": { @@ -985,87 +1055,87 @@ "382": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%51#0" + "reinterpret_bytes[1]%5#0" ], "stack_out": [ - "tmp%51#0" + "reinterpret_bytes[1]%5#0" ] }, "385": { "op": "btoi", "defined_out": [ - "tmp%52#0" + "tmp%45#0" ], "stack_out": [ - "tmp%52#0" + "tmp%45#0" ] }, "386": { "op": "txnas Assets", "defined_out": [ - "tmp%53#0" + "tmp%46#0" ], "stack_out": [ - "tmp%53#0" + "tmp%46#0" ] }, "388": { "op": "txna ApplicationArgs 2", "defined_out": [ - "tmp%53#0", - "tmp%54#0" + "reinterpret_bytes[1]%6#0", + "tmp%46#0" ], "stack_out": [ - "tmp%53#0", - "tmp%54#0" + "tmp%46#0", + "reinterpret_bytes[1]%6#0" ] }, "391": { "op": "btoi", "defined_out": [ - "tmp%53#0", - "tmp%55#0" + "tmp%46#0", + "tmp%47#0" ], "stack_out": [ - "tmp%53#0", - "tmp%55#0" + "tmp%46#0", + "tmp%47#0" ] }, "392": { "op": "txnas Accounts", "defined_out": [ - "tmp%53#0", - "tmp%56#0" + "tmp%46#0", + "tmp%48#0" ], "stack_out": [ - "tmp%53#0", - "tmp%56#0" + "tmp%46#0", + "tmp%48#0" ] }, "394": { "op": "txna ApplicationArgs 3", "defined_out": [ - "tmp%53#0", - "tmp%56#0", - "tmp%57#0" + "reinterpret_bytes[8]%1#0", + "tmp%46#0", + "tmp%48#0" ], "stack_out": [ - "tmp%53#0", - "tmp%56#0", - "tmp%57#0" + "tmp%46#0", + "tmp%48#0", + "reinterpret_bytes[8]%1#0" ] }, "397": { "op": "btoi", "defined_out": [ - "tmp%53#0", - "tmp%56#0", - "tmp%58#0" + "tmp%46#0", + "tmp%48#0", + "tmp%49#0" ], "stack_out": [ - "tmp%53#0", - "tmp%56#0", - "tmp%58#0" + "tmp%46#0", + "tmp%48#0", + "tmp%49#0" ] }, "398": { @@ -1083,26 +1153,27 @@ ] }, "402": { - "op": "return" + "op": "return", + "stack_out": [] }, "403": { "block": "main_asset_freeze_route@8", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%37#0" + "tmp%33#0" ], "stack_out": [ - "tmp%37#0" + "tmp%33#0" ] }, "405": { "op": "!", "defined_out": [ - "tmp%38#0" + "tmp%34#0" ], "stack_out": [ - "tmp%38#0" + "tmp%34#0" ] }, "406": { @@ -1113,10 +1184,10 @@ "407": { "op": "txn ApplicationID", "defined_out": [ - "tmp%39#0" + "tmp%35#0" ], "stack_out": [ - "tmp%39#0" + "tmp%35#0" ] }, "409": { @@ -1127,61 +1198,61 @@ "410": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%41#0" + "reinterpret_bytes[1]%3#0" ], "stack_out": [ - "tmp%41#0" + "reinterpret_bytes[1]%3#0" ] }, "413": { "op": "btoi", "defined_out": [ - "tmp%42#0" + "tmp%37#0" ], "stack_out": [ - "tmp%42#0" + "tmp%37#0" ] }, "414": { "op": "txnas Accounts", "defined_out": [ - "tmp%43#0" + "tmp%38#0" ], "stack_out": [ - "tmp%43#0" + "tmp%38#0" ] }, "416": { "op": "txna ApplicationArgs 2", "defined_out": [ - "tmp%43#0", - "tmp%44#0" + "reinterpret_bytes[1]%4#0", + "tmp%38#0" ], "stack_out": [ - "tmp%43#0", - "tmp%44#0" + "tmp%38#0", + "reinterpret_bytes[1]%4#0" ] }, "419": { "op": "btoi", "defined_out": [ - "tmp%43#0", - "tmp%45#0" + "tmp%38#0", + "tmp%39#0" ], "stack_out": [ - "tmp%43#0", - "tmp%45#0" + "tmp%38#0", + "tmp%39#0" ] }, "420": { "op": "txnas Assets", "defined_out": [ - "tmp%43#0", - "tmp%46#0" + "tmp%38#0", + "tmp%40#0" ], "stack_out": [ - "tmp%43#0", - "tmp%46#0" + "tmp%38#0", + "tmp%40#0" ] }, "422": { @@ -1199,26 +1270,27 @@ ] }, "426": { - "op": "return" + "op": "return", + "stack_out": [] }, "427": { "block": "main_asset_transfer_route@7", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%25#0" + "tmp%24#0" ], "stack_out": [ - "tmp%25#0" + "tmp%24#0" ] }, "429": { "op": "!", "defined_out": [ - "tmp%26#0" + "tmp%25#0" ], "stack_out": [ - "tmp%26#0" + "tmp%25#0" ] }, "430": { @@ -1229,10 +1301,10 @@ "431": { "op": "txn ApplicationID", "defined_out": [ - "tmp%27#0" + "tmp%26#0" ], "stack_out": [ - "tmp%27#0" + "tmp%26#0" ] }, "433": { @@ -1243,87 +1315,87 @@ "434": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%29#0" + "reinterpret_bytes[1]%1#0" ], "stack_out": [ - "tmp%29#0" + "reinterpret_bytes[1]%1#0" ] }, "437": { "op": "btoi", "defined_out": [ - "tmp%30#0" + "tmp%28#0" ], "stack_out": [ - "tmp%30#0" + "tmp%28#0" ] }, "438": { "op": "txnas Assets", "defined_out": [ - "tmp%31#0" + "tmp%29#0" ], "stack_out": [ - "tmp%31#0" + "tmp%29#0" ] }, "440": { "op": "txna ApplicationArgs 2", "defined_out": [ - "tmp%31#0", - "tmp%32#0" + "reinterpret_bytes[1]%2#0", + "tmp%29#0" ], "stack_out": [ - "tmp%31#0", - "tmp%32#0" + "tmp%29#0", + "reinterpret_bytes[1]%2#0" ] }, "443": { "op": "btoi", "defined_out": [ - "tmp%31#0", - "tmp%33#0" + "tmp%29#0", + "tmp%30#0" ], "stack_out": [ - "tmp%31#0", - "tmp%33#0" + "tmp%29#0", + "tmp%30#0" ] }, "444": { "op": "txnas Accounts", "defined_out": [ - "tmp%31#0", - "tmp%34#0" + "tmp%29#0", + "tmp%31#0" ], "stack_out": [ - "tmp%31#0", - "tmp%34#0" + "tmp%29#0", + "tmp%31#0" ] }, "446": { "op": "txna ApplicationArgs 3", "defined_out": [ - "tmp%31#0", - "tmp%34#0", - "tmp%35#0" + "reinterpret_bytes[8]%0#0", + "tmp%29#0", + "tmp%31#0" ], "stack_out": [ + "tmp%29#0", "tmp%31#0", - "tmp%34#0", - "tmp%35#0" + "reinterpret_bytes[8]%0#0" ] }, "449": { "op": "btoi", "defined_out": [ + "tmp%29#0", "tmp%31#0", - "tmp%34#0", - "tmp%36#0" + "tmp%32#0" ], "stack_out": [ + "tmp%29#0", "tmp%31#0", - "tmp%34#0", - "tmp%36#0" + "tmp%32#0" ] }, "450": { @@ -1341,7 +1413,8 @@ ] }, "454": { - "op": "return" + "op": "return", + "stack_out": [] }, "455": { "block": "main_asset_opt_in_route@6", @@ -1385,28 +1458,28 @@ "462": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%22#0" + "reinterpret_bytes[1]%0#0" ], "stack_out": [ - "tmp%22#0" + "reinterpret_bytes[1]%0#0" ] }, "465": { "op": "btoi", "defined_out": [ - "tmp%23#0" + "tmp%22#0" ], "stack_out": [ - "tmp%23#0" + "tmp%22#0" ] }, "466": { "op": "txnas Assets", "defined_out": [ - "tmp%24#0" + "tmp%23#0" ], "stack_out": [ - "tmp%24#0" + "tmp%23#0" ] }, "468": { @@ -1424,7 +1497,8 @@ ] }, "472": { - "op": "return" + "op": "return", + "stack_out": [] }, "473": { "block": "main_non_fungible_asset_create_route@5", @@ -1525,7 +1599,8 @@ ] }, "489": { - "op": "return" + "op": "return", + "stack_out": [] }, "490": { "block": "main_fungible_asset_create_route@4", @@ -1626,7 +1701,8 @@ ] }, "506": { - "op": "return" + "op": "return", + "stack_out": [] }, "507": { "block": "main_payment_route@3", @@ -1727,17 +1803,18 @@ ] }, "523": { - "op": "return" + "op": "return", + "stack_out": [] }, "524": { "block": "main_bare_routing@18", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%99#0" + "tmp%86#0" ], "stack_out": [ - "tmp%99#0" + "tmp%86#0" ] }, "526": { @@ -1745,32 +1822,49 @@ "stack_out": [] }, "529": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%87#0" + ], + "stack_out": [ + "tmp%87#0" + ] }, "531": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%88#0" + ], + "stack_out": [ + "tmp%88#0" + ] }, "532": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "533": { - "op": "intc_1 // 1" + "op": "intc_1 // 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] }, "534": { - "op": "return" + "op": "return", + "stack_out": [] }, "535": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.payment", "params": {}, "block": "payment", "stack_in": [], - "op": "proto 0 1" - }, - "538": { "op": "itxn_begin" }, - "539": { + "536": { "op": "txn Sender", "defined_out": [ "inner_txn_params%0%%param_Receiver_idx_0#0" @@ -1779,11 +1873,11 @@ "inner_txn_params%0%%param_Receiver_idx_0#0" ] }, - "541": { + "538": { "op": "itxn_field Receiver", "stack_out": [] }, - "543": { + "540": { "op": "pushint 5000 // 5000", "defined_out": [ "5000" @@ -1792,11 +1886,11 @@ "5000" ] }, - "546": { + "543": { "op": "itxn_field Amount", "stack_out": [] }, - "548": { + "545": { "op": "intc_1 // pay", "defined_out": [ "pay" @@ -1805,11 +1899,11 @@ "pay" ] }, - "549": { + "546": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "551": { + "548": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -1818,14 +1912,14 @@ "0" ] }, - "552": { + "549": { "op": "itxn_field Fee", "stack_out": [] }, - "554": { + "551": { "op": "itxn_submit" }, - "555": { + "552": { "op": "itxn Amount", "defined_out": [ "result.Amount#0" @@ -1834,21 +1928,18 @@ "result.Amount#0" ] }, - "557": { + "554": { "retsub": true, "op": "retsub" }, - "558": { + "555": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.fungible_asset_create", "params": {}, "block": "fungible_asset_create", "stack_in": [], - "op": "proto 0 1" - }, - "561": { "op": "itxn_begin" }, - "562": { + "556": { "op": "pushbytes \"Royalty Points\"", "defined_out": [ "\"Royalty Points\"" @@ -1857,11 +1948,11 @@ "\"Royalty Points\"" ] }, - "578": { + "572": { "op": "itxn_field ConfigAssetName", "stack_out": [] }, - "580": { + "574": { "op": "pushbytes \"RP\"", "defined_out": [ "\"RP\"" @@ -1870,11 +1961,11 @@ "\"RP\"" ] }, - "584": { + "578": { "op": "itxn_field ConfigAssetUnitName", "stack_out": [] }, - "586": { + "580": { "op": "pushint 2 // 2", "defined_out": [ "2" @@ -1883,11 +1974,11 @@ "2" ] }, - "588": { + "582": { "op": "itxn_field ConfigAssetDecimals", "stack_out": [] }, - "590": { + "584": { "op": "pushint 100000000000 // 100000000000", "defined_out": [ "100000000000" @@ -1896,11 +1987,11 @@ "100000000000" ] }, - "597": { + "591": { "op": "itxn_field ConfigAssetTotal", "stack_out": [] }, - "599": { + "593": { "op": "pushint 3 // acfg", "defined_out": [ "acfg" @@ -1909,11 +2000,11 @@ "acfg" ] }, - "601": { + "595": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "603": { + "597": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -1922,14 +2013,14 @@ "0" ] }, - "604": { + "598": { "op": "itxn_field Fee", "stack_out": [] }, - "606": { + "600": { "op": "itxn_submit" }, - "607": { + "601": { "op": "itxn CreatedAssetID", "defined_out": [ "itxn_result.CreatedAssetID#0" @@ -1938,21 +2029,18 @@ "itxn_result.CreatedAssetID#0" ] }, - "609": { + "603": { "retsub": true, "op": "retsub" }, - "610": { + "604": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.non_fungible_asset_create", "params": {}, "block": "non_fungible_asset_create", "stack_in": [], - "op": "proto 0 1" - }, - "613": { "op": "itxn_begin" }, - "614": { + "605": { "op": "global CurrentApplicationAddress", "defined_out": [ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" @@ -1961,7 +2049,7 @@ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" ] }, - "616": { + "607": { "op": "dupn 3", "defined_out": [ "inner_txn_params%0%%param_ConfigAssetClawback_idx_0#0", @@ -1976,7 +2064,7 @@ "inner_txn_params%0%%param_ConfigAssetClawback_idx_0#0" ] }, - "618": { + "609": { "op": "itxn_field ConfigAssetClawback", "stack_out": [ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0", @@ -1984,24 +2072,24 @@ "inner_txn_params%0%%param_ConfigAssetFreeze_idx_0#0" ] }, - "620": { + "611": { "op": "itxn_field ConfigAssetFreeze", "stack_out": [ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0", "inner_txn_params%0%%param_ConfigAssetReserve_idx_0#0" ] }, - "622": { + "613": { "op": "itxn_field ConfigAssetReserve", "stack_out": [ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" ] }, - "624": { + "615": { "op": "itxn_field ConfigAssetManager", "stack_out": [] }, - "626": { + "617": { "op": "pushbytes \"https://link_to_ipfs/Mona_Lisa\"", "defined_out": [ "\"https://link_to_ipfs/Mona_Lisa\"" @@ -2010,11 +2098,11 @@ "\"https://link_to_ipfs/Mona_Lisa\"" ] }, - "658": { + "649": { "op": "itxn_field ConfigAssetURL", "stack_out": [] }, - "660": { + "651": { "op": "pushbytes \"Mona Lisa\"", "defined_out": [ "\"Mona Lisa\"" @@ -2023,11 +2111,11 @@ "\"Mona Lisa\"" ] }, - "671": { + "662": { "op": "itxn_field ConfigAssetName", "stack_out": [] }, - "673": { + "664": { "op": "pushbytes \"ML\"", "defined_out": [ "\"ML\"" @@ -2036,11 +2124,11 @@ "\"ML\"" ] }, - "677": { + "668": { "op": "itxn_field ConfigAssetUnitName", "stack_out": [] }, - "679": { + "670": { "op": "pushint 2 // 2", "defined_out": [ "2" @@ -2049,11 +2137,11 @@ "2" ] }, - "681": { + "672": { "op": "itxn_field ConfigAssetDecimals", "stack_out": [] }, - "683": { + "674": { "op": "pushint 100 // 100", "defined_out": [ "100" @@ -2062,11 +2150,11 @@ "100" ] }, - "685": { + "676": { "op": "itxn_field ConfigAssetTotal", "stack_out": [] }, - "687": { + "678": { "op": "pushint 3 // acfg", "defined_out": [ "acfg" @@ -2075,11 +2163,11 @@ "acfg" ] }, - "689": { + "680": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "691": { + "682": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2088,14 +2176,14 @@ "0" ] }, - "692": { + "683": { "op": "itxn_field Fee", "stack_out": [] }, - "694": { + "685": { "op": "itxn_submit" }, - "695": { + "686": { "op": "itxn CreatedAssetID", "defined_out": [ "itxn_result.CreatedAssetID#0" @@ -2104,11 +2192,11 @@ "itxn_result.CreatedAssetID#0" ] }, - "697": { + "688": { "retsub": true, "op": "retsub" }, - "698": { + "689": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.asset_opt_in", "params": { "asset#0": "uint64" @@ -2117,10 +2205,10 @@ "stack_in": [], "op": "proto 1 0" }, - "701": { + "692": { "op": "itxn_begin" }, - "702": { + "693": { "op": "global CurrentApplicationAddress", "defined_out": [ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" @@ -2129,7 +2217,7 @@ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" ] }, - "704": { + "695": { "op": "intc_0 // 0", "defined_out": [ "0", @@ -2140,13 +2228,13 @@ "0" ] }, - "705": { + "696": { "op": "itxn_field AssetAmount", "stack_out": [ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" ] }, - "707": { + "698": { "op": "frame_dig -1", "defined_out": [ "asset#0 (copy)", @@ -2157,17 +2245,17 @@ "asset#0 (copy)" ] }, - "709": { + "700": { "op": "itxn_field XferAsset", "stack_out": [ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" ] }, - "711": { + "702": { "op": "itxn_field AssetReceiver", "stack_out": [] }, - "713": { + "704": { "op": "intc_3 // axfer", "defined_out": [ "axfer" @@ -2176,28 +2264,28 @@ "axfer" ] }, - "714": { + "705": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "716": { + "707": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "717": { + "708": { "op": "itxn_field Fee", "stack_out": [] }, - "719": { + "710": { "op": "itxn_submit" }, - "720": { + "711": { "retsub": true, "op": "retsub" }, - "721": { + "712": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.asset_transfer", "params": { "asset#0": "uint64", @@ -2208,10 +2296,10 @@ "stack_in": [], "op": "proto 3 0" }, - "724": { + "715": { "op": "itxn_begin" }, - "725": { + "716": { "op": "frame_dig -1", "defined_out": [ "amount#0 (copy)" @@ -2220,11 +2308,11 @@ "amount#0 (copy)" ] }, - "727": { + "718": { "op": "itxn_field AssetAmount", "stack_out": [] }, - "729": { + "720": { "op": "frame_dig -3", "defined_out": [ "asset#0 (copy)" @@ -2233,11 +2321,11 @@ "asset#0 (copy)" ] }, - "731": { + "722": { "op": "itxn_field XferAsset", "stack_out": [] }, - "733": { + "724": { "op": "frame_dig -2", "defined_out": [ "receiver#0 (copy)" @@ -2246,11 +2334,11 @@ "receiver#0 (copy)" ] }, - "735": { + "726": { "op": "itxn_field AssetReceiver", "stack_out": [] }, - "737": { + "728": { "op": "intc_3 // axfer", "defined_out": [ "axfer" @@ -2259,11 +2347,11 @@ "axfer" ] }, - "738": { + "729": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "740": { + "731": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2272,18 +2360,18 @@ "0" ] }, - "741": { + "732": { "op": "itxn_field Fee", "stack_out": [] }, - "743": { + "734": { "op": "itxn_submit" }, - "744": { + "735": { "retsub": true, "op": "retsub" }, - "745": { + "736": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.asset_freeze", "params": { "acct_to_be_frozen#0": "bytes", @@ -2293,10 +2381,10 @@ "stack_in": [], "op": "proto 2 0" }, - "748": { + "739": { "op": "itxn_begin" }, - "749": { + "740": { "op": "intc_1 // 1", "defined_out": [ "1" @@ -2305,11 +2393,11 @@ "1" ] }, - "750": { + "741": { "op": "itxn_field FreezeAssetFrozen", "stack_out": [] }, - "752": { + "743": { "op": "frame_dig -1", "defined_out": [ "asset#0 (copy)" @@ -2318,11 +2406,11 @@ "asset#0 (copy)" ] }, - "754": { + "745": { "op": "itxn_field FreezeAsset", "stack_out": [] }, - "756": { + "747": { "op": "frame_dig -2", "defined_out": [ "acct_to_be_frozen#0 (copy)" @@ -2331,11 +2419,11 @@ "acct_to_be_frozen#0 (copy)" ] }, - "758": { + "749": { "op": "itxn_field FreezeAssetAccount", "stack_out": [] }, - "760": { + "751": { "op": "pushint 5 // afrz", "defined_out": [ "afrz" @@ -2344,11 +2432,11 @@ "afrz" ] }, - "762": { + "753": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "764": { + "755": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2357,18 +2445,18 @@ "0" ] }, - "765": { + "756": { "op": "itxn_field Fee", "stack_out": [] }, - "767": { + "758": { "op": "itxn_submit" }, - "768": { + "759": { "retsub": true, "op": "retsub" }, - "769": { + "760": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.asset_revoke", "params": { "asset#0": "uint64", @@ -2379,10 +2467,10 @@ "stack_in": [], "op": "proto 3 0" }, - "772": { + "763": { "op": "itxn_begin" }, - "773": { + "764": { "op": "global CurrentApplicationAddress", "defined_out": [ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" @@ -2391,7 +2479,7 @@ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" ] }, - "775": { + "766": { "op": "frame_dig -1", "defined_out": [ "amount#0 (copy)", @@ -2402,13 +2490,13 @@ "amount#0 (copy)" ] }, - "777": { + "768": { "op": "itxn_field AssetAmount", "stack_out": [ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" ] }, - "779": { + "770": { "op": "frame_dig -2", "defined_out": [ "account_to_be_revoked#0 (copy)", @@ -2419,13 +2507,13 @@ "account_to_be_revoked#0 (copy)" ] }, - "781": { + "772": { "op": "itxn_field AssetSender", "stack_out": [ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" ] }, - "783": { + "774": { "op": "frame_dig -3", "defined_out": [ "asset#0 (copy)", @@ -2436,17 +2524,17 @@ "asset#0 (copy)" ] }, - "785": { + "776": { "op": "itxn_field XferAsset", "stack_out": [ "inner_txn_params%0%%param_AssetReceiver_idx_0#0" ] }, - "787": { + "778": { "op": "itxn_field AssetReceiver", "stack_out": [] }, - "789": { + "780": { "op": "intc_3 // axfer", "defined_out": [ "axfer" @@ -2455,11 +2543,11 @@ "axfer" ] }, - "790": { + "781": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "792": { + "783": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2468,18 +2556,18 @@ "0" ] }, - "793": { + "784": { "op": "itxn_field Fee", "stack_out": [] }, - "795": { + "786": { "op": "itxn_submit" }, - "796": { + "787": { "retsub": true, "op": "retsub" }, - "797": { + "788": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.asset_config", "params": { "asset#0": "uint64" @@ -2488,10 +2576,10 @@ "stack_in": [], "op": "proto 1 0" }, - "800": { + "791": { "op": "itxn_begin" }, - "801": { + "792": { "op": "global CurrentApplicationAddress", "defined_out": [ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" @@ -2500,7 +2588,7 @@ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" ] }, - "803": { + "794": { "op": "dup", "defined_out": [ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0", @@ -2511,7 +2599,7 @@ "inner_txn_params%0%%param_ConfigAssetReserve_idx_0#0" ] }, - "804": { + "795": { "op": "txn Sender", "defined_out": [ "inner_txn_params%0%%param_ConfigAssetFreeze_idx_0#0", @@ -2524,7 +2612,7 @@ "inner_txn_params%0%%param_ConfigAssetFreeze_idx_0#0" ] }, - "806": { + "797": { "op": "dup", "defined_out": [ "inner_txn_params%0%%param_ConfigAssetClawback_idx_0#0", @@ -2539,7 +2627,7 @@ "inner_txn_params%0%%param_ConfigAssetClawback_idx_0#0" ] }, - "807": { + "798": { "op": "itxn_field ConfigAssetClawback", "stack_out": [ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0", @@ -2547,24 +2635,24 @@ "inner_txn_params%0%%param_ConfigAssetFreeze_idx_0#0" ] }, - "809": { + "800": { "op": "itxn_field ConfigAssetFreeze", "stack_out": [ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0", "inner_txn_params%0%%param_ConfigAssetReserve_idx_0#0" ] }, - "811": { + "802": { "op": "itxn_field ConfigAssetReserve", "stack_out": [ "inner_txn_params%0%%param_ConfigAssetManager_idx_0#0" ] }, - "813": { + "804": { "op": "itxn_field ConfigAssetManager", "stack_out": [] }, - "815": { + "806": { "op": "frame_dig -1", "defined_out": [ "asset#0 (copy)" @@ -2573,11 +2661,11 @@ "asset#0 (copy)" ] }, - "817": { + "808": { "op": "itxn_field ConfigAsset", "stack_out": [] }, - "819": { + "810": { "op": "pushint 3 // acfg", "defined_out": [ "acfg" @@ -2586,11 +2674,11 @@ "acfg" ] }, - "821": { + "812": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "823": { + "814": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2599,18 +2687,18 @@ "0" ] }, - "824": { + "815": { "op": "itxn_field Fee", "stack_out": [] }, - "826": { + "817": { "op": "itxn_submit" }, - "827": { + "818": { "retsub": true, "op": "retsub" }, - "828": { + "819": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.asset_delete", "params": { "asset#0": "uint64" @@ -2619,10 +2707,10 @@ "stack_in": [], "op": "proto 1 0" }, - "831": { + "822": { "op": "itxn_begin" }, - "832": { + "823": { "op": "frame_dig -1", "defined_out": [ "asset#0 (copy)" @@ -2631,11 +2719,11 @@ "asset#0 (copy)" ] }, - "834": { + "825": { "op": "itxn_field ConfigAsset", "stack_out": [] }, - "836": { + "827": { "op": "pushint 3 // acfg", "defined_out": [ "acfg" @@ -2644,11 +2732,11 @@ "acfg" ] }, - "838": { + "829": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "840": { + "831": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2657,18 +2745,18 @@ "0" ] }, - "841": { + "832": { "op": "itxn_field Fee", "stack_out": [] }, - "843": { + "834": { "op": "itxn_submit" }, - "844": { + "835": { "retsub": true, "op": "retsub" }, - "845": { + "836": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.multi_inner_txns", "params": { "app_id#0": "uint64" @@ -2677,7 +2765,7 @@ "stack_in": [], "op": "proto 1 2" }, - "848": { + "839": { "op": "txn Sender", "defined_out": [ "payment_params%%param_Receiver_idx_0#0" @@ -2686,14 +2774,14 @@ "payment_params%%param_Receiver_idx_0#0" ] }, - "850": { + "841": { "op": "itxn_begin" }, - "851": { + "842": { "op": "itxn_field Receiver", "stack_out": [] }, - "853": { + "844": { "op": "pushint 5000 // 5000", "defined_out": [ "5000" @@ -2702,11 +2790,11 @@ "5000" ] }, - "856": { + "847": { "op": "itxn_field Amount", "stack_out": [] }, - "858": { + "849": { "op": "intc_1 // pay", "defined_out": [ "pay" @@ -2715,11 +2803,11 @@ "pay" ] }, - "859": { + "850": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "861": { + "852": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2728,14 +2816,14 @@ "0" ] }, - "862": { + "853": { "op": "itxn_field Fee", "stack_out": [] }, - "864": { + "855": { "op": "itxn_next" }, - "865": { + "856": { "op": "bytec_1 // method \"hello(string)string\"", "defined_out": [ "Method(hello(string)string)" @@ -2744,11 +2832,11 @@ "Method(hello(string)string)" ] }, - "866": { + "857": { "op": "itxn_field ApplicationArgs", "stack_out": [] }, - "868": { + "859": { "op": "bytec_2 // 0x0005576f726c64", "defined_out": [ "0x0005576f726c64" @@ -2757,11 +2845,11 @@ "0x0005576f726c64" ] }, - "869": { + "860": { "op": "itxn_field ApplicationArgs", "stack_out": [] }, - "871": { + "862": { "op": "frame_dig -1", "defined_out": [ "app_id#0 (copy)" @@ -2770,11 +2858,11 @@ "app_id#0 (copy)" ] }, - "873": { + "864": { "op": "itxn_field ApplicationID", "stack_out": [] }, - "875": { + "866": { "op": "intc_2 // appl", "defined_out": [ "appl" @@ -2783,30 +2871,44 @@ "appl" ] }, - "876": { + "867": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "878": { + "869": { "op": "intc_0 // 0", "stack_out": [ "0" ] }, - "879": { + "870": { "op": "itxn_field Fee", "stack_out": [] }, - "881": { + "872": { "op": "itxn_submit" }, - "882": { - "op": "gitxn 0 Amount" + "873": { + "op": "gitxn 0 Amount", + "defined_out": [ + "pay_txn.Amount#0" + ], + "stack_out": [ + "pay_txn.Amount#0" + ] }, - "885": { - "op": "itxn LastLog" + "876": { + "op": "itxn LastLog", + "defined_out": [ + "app_call_txn.LastLog#0", + "pay_txn.Amount#0" + ], + "stack_out": [ + "pay_txn.Amount#0", + "app_call_txn.LastLog#0" + ] }, - "887": { + "878": { "op": "dup", "defined_out": [ "app_call_txn.LastLog#0", @@ -2819,7 +2921,7 @@ "app_call_txn.LastLog#0 (copy)" ] }, - "888": { + "879": { "op": "extract 4 0", "defined_out": [ "app_call_txn.LastLog#0", @@ -2832,7 +2934,7 @@ "hello_world_result#0" ] }, - "891": { + "882": { "op": "swap", "stack_out": [ "pay_txn.Amount#0", @@ -2840,7 +2942,7 @@ "app_call_txn.LastLog#0" ] }, - "892": { + "883": { "op": "extract 0 4", "defined_out": [ "hello_world_result#0", @@ -2853,7 +2955,7 @@ "tmp%1#0" ] }, - "895": { + "886": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", @@ -2868,7 +2970,7 @@ "0x151f7c75" ] }, - "896": { + "887": { "op": "==", "defined_out": [ "hello_world_result#0", @@ -2881,7 +2983,7 @@ "tmp%2#0" ] }, - "897": { + "888": { "error": "ARC4 prefix is valid", "op": "assert // ARC4 prefix is valid", "stack_out": [ @@ -2889,21 +2991,18 @@ "hello_world_result#0" ] }, - "898": { + "889": { "retsub": true, "op": "retsub" }, - "899": { + "890": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.deploy_app", "params": {}, "block": "deploy_app", "stack_in": [], - "op": "proto 0 1" - }, - "902": { "op": "itxn_begin" }, - "903": { + "891": { "op": "bytec_3 // base64(CoEBQw==)", "defined_out": [ "CoEBQw==" @@ -2912,11 +3011,11 @@ "CoEBQw==" ] }, - "904": { + "892": { "op": "itxn_field ClearStateProgramPages", "stack_out": [] }, - "906": { + "894": { "op": "bytec 4 // base64(CjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIk=)", "defined_out": [ "CjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIk=" @@ -2925,11 +3024,11 @@ "CjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIk=" ] }, - "908": { + "896": { "op": "itxn_field ApprovalProgramPages", "stack_out": [] }, - "910": { + "898": { "op": "intc_2 // appl", "defined_out": [ "appl" @@ -2938,11 +3037,11 @@ "appl" ] }, - "911": { + "899": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "913": { + "901": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -2951,14 +3050,14 @@ "0" ] }, - "914": { + "902": { "op": "itxn_field Fee", "stack_out": [] }, - "916": { + "904": { "op": "itxn_submit" }, - "917": { + "905": { "op": "itxn CreatedApplicationID", "defined_out": [ "app_txn.CreatedApplicationID#0" @@ -2967,21 +3066,18 @@ "app_txn.CreatedApplicationID#0" ] }, - "919": { + "907": { "retsub": true, "op": "retsub" }, - "920": { + "908": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.arc4_deploy_app", "params": {}, "block": "arc4_deploy_app", "stack_in": [], - "op": "proto 0 1" - }, - "923": { "op": "itxn_begin" }, - "924": { + "909": { "op": "bytec_3 // base64(CoEBQw==)", "defined_out": [ "CoEBQw==" @@ -2990,11 +3086,11 @@ "CoEBQw==" ] }, - "925": { + "910": { "op": "itxn_field ClearStateProgramPages", "stack_out": [] }, - "927": { + "912": { "op": "bytec 4 // base64(CjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIk=)", "defined_out": [ "CjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIk=" @@ -3003,11 +3099,11 @@ "CjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIk=" ] }, - "929": { + "914": { "op": "itxn_field ApprovalProgramPages", "stack_out": [] }, - "931": { + "916": { "op": "intc_2 // appl", "defined_out": [ "appl" @@ -3016,11 +3112,11 @@ "appl" ] }, - "932": { + "917": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "934": { + "919": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -3029,14 +3125,14 @@ "0" ] }, - "935": { + "920": { "op": "itxn_field Fee", "stack_out": [] }, - "937": { + "922": { "op": "itxn_submit" }, - "938": { + "923": { "op": "itxn CreatedApplicationID", "defined_out": [ "app_txn.CreatedApplicationID#0" @@ -3045,11 +3141,11 @@ "app_txn.CreatedApplicationID#0" ] }, - "940": { + "925": { "retsub": true, "op": "retsub" }, - "941": { + "926": { "subroutine": "smart_contracts.inner_transactions.contract.InnerTransactions.noop_app_call", "params": { "app_id#0": "uint64" @@ -3058,10 +3154,10 @@ "stack_in": [], "op": "proto 1 2" }, - "944": { + "929": { "op": "itxn_begin" }, - "945": { + "930": { "op": "bytec_1 // method \"hello(string)string\"", "defined_out": [ "Method(hello(string)string)" @@ -3070,11 +3166,11 @@ "Method(hello(string)string)" ] }, - "946": { + "931": { "op": "itxn_field ApplicationArgs", "stack_out": [] }, - "948": { + "933": { "op": "bytec_2 // 0x0005576f726c64", "defined_out": [ "0x0005576f726c64" @@ -3083,11 +3179,11 @@ "0x0005576f726c64" ] }, - "949": { + "934": { "op": "itxn_field ApplicationArgs", "stack_out": [] }, - "951": { + "936": { "op": "frame_dig -1", "defined_out": [ "app_id#0 (copy)" @@ -3096,11 +3192,11 @@ "app_id#0 (copy)" ] }, - "953": { + "938": { "op": "itxn_field ApplicationID", "stack_out": [] }, - "955": { + "940": { "op": "intc_2 // appl", "defined_out": [ "appl" @@ -3109,11 +3205,11 @@ "appl" ] }, - "956": { + "941": { "op": "itxn_field TypeEnum", "stack_out": [] }, - "958": { + "943": { "op": "intc_0 // 0", "defined_out": [ "0" @@ -3122,17 +3218,23 @@ "0" ] }, - "959": { + "944": { "op": "itxn_field Fee", "stack_out": [] }, - "961": { + "946": { "op": "itxn_submit" }, - "962": { - "op": "itxn LastLog" + "947": { + "op": "itxn LastLog", + "defined_out": [ + "call_txn.LastLog#0" + ], + "stack_out": [ + "call_txn.LastLog#0" + ] }, - "964": { + "949": { "op": "dup", "defined_out": [ "call_txn.LastLog#0", @@ -3143,7 +3245,7 @@ "call_txn.LastLog#0 (copy)" ] }, - "965": { + "950": { "op": "extract 4 0", "defined_out": [ "call_txn.LastLog#0", @@ -3154,14 +3256,14 @@ "first_hello_world_result#0" ] }, - "968": { + "953": { "op": "swap", "stack_out": [ "first_hello_world_result#0", "call_txn.LastLog#0" ] }, - "969": { + "954": { "op": "extract 0 4", "defined_out": [ "first_hello_world_result#0", @@ -3172,7 +3274,7 @@ "tmp%1#0" ] }, - "972": { + "957": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", @@ -3185,7 +3287,7 @@ "0x151f7c75" ] }, - "973": { + "958": { "op": "==", "defined_out": [ "first_hello_world_result#0", @@ -3196,43 +3298,43 @@ "tmp%2#0" ] }, - "974": { + "959": { "error": "ARC4 prefix is valid", "op": "assert // ARC4 prefix is valid", "stack_out": [ "first_hello_world_result#0" ] }, - "975": { + "960": { "op": "itxn_begin" }, - "976": { + "961": { "op": "frame_dig -1", "stack_out": [ "first_hello_world_result#0", "app_id#0 (copy)" ] }, - "978": { + "963": { "op": "itxn_field ApplicationID", "stack_out": [ "first_hello_world_result#0" ] }, - "980": { + "965": { "op": "bytec_1 // method \"hello(string)string\"", "stack_out": [ "first_hello_world_result#0", "Method(hello(string)string)" ] }, - "981": { + "966": { "op": "itxn_field ApplicationArgs", "stack_out": [ "first_hello_world_result#0" ] }, - "983": { + "968": { "op": "pushbytes 0x0005616761696e", "defined_out": [ "0x0005616761696e", @@ -3243,123 +3345,110 @@ "0x0005616761696e" ] }, - "992": { + "977": { "op": "itxn_field ApplicationArgs", "stack_out": [ "first_hello_world_result#0" ] }, - "994": { + "979": { "op": "intc_2 // appl", "stack_out": [ "first_hello_world_result#0", "appl" ] }, - "995": { + "980": { "op": "itxn_field TypeEnum", "stack_out": [ "first_hello_world_result#0" ] }, - "997": { + "982": { "op": "intc_0 // 0", "stack_out": [ "first_hello_world_result#0", "0" ] }, - "998": { + "983": { "op": "itxn_field Fee", "stack_out": [ "first_hello_world_result#0" ] }, - "1000": { + "985": { "op": "itxn_submit" }, - "1001": { - "op": "itxn LastLog" - }, - "1003": { - "op": "dup", + "986": { + "op": "itxn LastLog", "defined_out": [ "awst_tmp%0#0", - "awst_tmp%0#0 (copy)", "first_hello_world_result#0" ], "stack_out": [ "first_hello_world_result#0", - "awst_tmp%0#0", - "awst_tmp%0#0 (copy)" + "awst_tmp%0#0" ] }, - "1004": { - "op": "extract 4 0", + "988": { + "op": "dup", "defined_out": [ "awst_tmp%0#0", - "first_hello_world_result#0", - "tmp%3#0" + "awst_tmp%0#0 (copy)", + "first_hello_world_result#0" ], "stack_out": [ "first_hello_world_result#0", "awst_tmp%0#0", - "tmp%3#0" - ] - }, - "1007": { - "op": "swap", - "stack_out": [ - "first_hello_world_result#0", - "tmp%3#0", - "awst_tmp%0#0" + "awst_tmp%0#0 (copy)" ] }, - "1008": { + "989": { "op": "extract 0 4", "defined_out": [ + "awst_tmp%0#0", "first_hello_world_result#0", - "tmp%3#0", "tmp%4#0" ], "stack_out": [ "first_hello_world_result#0", - "tmp%3#0", + "awst_tmp%0#0", "tmp%4#0" ] }, - "1011": { + "992": { "op": "bytec_0 // 0x151f7c75", "stack_out": [ "first_hello_world_result#0", - "tmp%3#0", + "awst_tmp%0#0", "tmp%4#0", "0x151f7c75" ] }, - "1012": { + "993": { "op": "==", "defined_out": [ + "awst_tmp%0#0", "first_hello_world_result#0", - "tmp%3#0", "tmp%5#0" ], "stack_out": [ "first_hello_world_result#0", - "tmp%3#0", + "awst_tmp%0#0", "tmp%5#0" ] }, - "1013": { + "994": { "error": "ARC4 prefix is valid", "op": "assert // ARC4 prefix is valid", "stack_out": [ "first_hello_world_result#0", - "tmp%3#0" + "awst_tmp%0#0" ] }, - "1014": { - "op": "extract 2 0", + "995": { + "op": "extract 6 0", "defined_out": [ "first_hello_world_result#0", "second_hello_world_result#0" @@ -3369,7 +3458,7 @@ "second_hello_world_result#0" ] }, - "1017": { + "998": { "retsub": true, "op": "retsub" } diff --git a/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal b/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal index f094de8..836c5ac 100644 --- a/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal +++ b/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.approval.teal @@ -334,11 +334,6 @@ main_bare_routing@18: // smart_contracts.inner_transactions.contract.InnerTransactions.payment() -> uint64: payment: - // smart_contracts/inner_transactions/contract.py:20-22 - // # example: PAYMENT - // @abimethod() - // def payment(self) -> UInt64: - proto 0 1 // smart_contracts/inner_transactions/contract.py:23 // result = itxn.Payment(amount=5000, receiver=Txn.sender, fee=0).submit() itxn_begin @@ -359,11 +354,6 @@ payment: // smart_contracts.inner_transactions.contract.InnerTransactions.fungible_asset_create() -> uint64: fungible_asset_create: - // smart_contracts/inner_transactions/contract.py:35-37 - // # example: ASSET_CREATE - // @abimethod - // def fungible_asset_create(self) -> UInt64: - proto 0 1 // smart_contracts/inner_transactions/contract.py:38-43 // itxn_result = itxn.AssetConfig( // total=100_000_000_000, @@ -410,10 +400,6 @@ fungible_asset_create: // smart_contracts.inner_transactions.contract.InnerTransactions.non_fungible_asset_create() -> uint64: non_fungible_asset_create: - // smart_contracts/inner_transactions/contract.py:47-48 - // @abimethod - // def non_fungible_asset_create(self) -> UInt64: - proto 0 1 // smart_contracts/inner_transactions/contract.py:54-64 // itxn_result = itxn.AssetConfig( // total=100, @@ -808,10 +794,6 @@ multi_inner_txns: // smart_contracts.inner_transactions.contract.InnerTransactions.deploy_app() -> uint64: deploy_app: - // smart_contracts/inner_transactions/contract.py:202-203 - // @abimethod - // def deploy_app(self) -> UInt64: - proto 0 1 // smart_contracts/inner_transactions/contract.py:209-213 // app_txn = itxn.ApplicationCall( // approval_program=compiled_contract.approval_program, @@ -848,10 +830,6 @@ deploy_app: // smart_contracts.inner_transactions.contract.InnerTransactions.arc4_deploy_app() -> uint64: arc4_deploy_app: - // smart_contracts/inner_transactions/contract.py:218-219 - // @abimethod - // def arc4_deploy_app(self) -> UInt64: - proto 0 1 // smart_contracts/inner_transactions/contract.py:223 // app_txn = arc4.arc4_create(HelloWorld) itxn_begin @@ -947,13 +925,11 @@ noop_app_call: itxn_submit itxn LastLog dup - extract 4 0 - swap extract 0 4 bytec_0 // 0x151f7c75 == assert // ARC4 prefix is valid - extract 2 0 + extract 6 0 // smart_contracts/inner_transactions/contract.py:247 // return first_hello_world_result, second_hello_world_result retsub diff --git a/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc56.json b/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc56.json index 5d818a1..e135d9a 100644 --- a/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/inner_transactions/InnerTransactions.arc56.json @@ -312,9 +312,9 @@ "sourceInfo": [ { "pc": [ - 897, - 974, - 1013 + 888, + 959, + 994 ], "errorMessage": "ARC4 prefix is valid" }, @@ -369,19 +369,19 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgNiA0CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMmJlY2UxMSAweDAwMDU1NzZmNzI2YzY0IGJhc2U2NChDb0VCUXc9PSkgYmFzZTY0KENqRWJRUUEwZ0FRQ3ZzNFJOaG9BamdFQUE0RUFRekVaRkVReEdFUTJHZ0ZYQWdDSUFDQkpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNJRUJRekVaUVAvVU1SZ1VSSUVCUTRvQkFZQUhTR1ZzYkc4c0lJdi9VSWs9KQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxOAogICAgcHVzaGJ5dGVzcyAweDIzOTUwMDI3IDB4ZWE3Njg5ZjMgMHhmZTI2NDczMCAweGI2YzJiMTQ4IDB4NGIxOWRmZGQgMHhhOTBlNmE0ZiAweGM1MDQ2MjgyIDB4NTg0NDAwZmYgMHhhOWU4MTJhNSAweDBlNzM5ODE0IDB4MzYzMTc0NWQgMHgxMGE5YjEwMiAweDlkMGM1ZGUxIC8vIG1ldGhvZCAicGF5bWVudCgpdWludDY0IiwgbWV0aG9kICJmdW5naWJsZV9hc3NldF9jcmVhdGUoKXVpbnQ2NCIsIG1ldGhvZCAibm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpdWludDY0IiwgbWV0aG9kICJhc3NldF9vcHRfaW4oYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfZnJlZXplKGFjY291bnQsYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfcmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiLCBtZXRob2QgImFzc2V0X2NvbmZpZyhhc3NldCl2b2lkIiwgbWV0aG9kICJhc3NldF9kZWxldGUoYXNzZXQpdm9pZCIsIG1ldGhvZCAibXVsdGlfaW5uZXJfdHhucyhhcHBsaWNhdGlvbikodWludDY0LHN0cmluZykiLCBtZXRob2QgImRlcGxveV9hcHAoKXVpbnQ2NCIsIG1ldGhvZCAiYXJjNF9kZXBsb3lfYXBwKCl1aW50NjQiLCBtZXRob2QgIm5vb3BfYXBwX2NhbGwoYXBwbGljYXRpb24pKHN0cmluZyxzdHJpbmcpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9wYXltZW50X3JvdXRlQDMgbWFpbl9mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVANCBtYWluX25vbl9mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVANSBtYWluX2Fzc2V0X29wdF9pbl9yb3V0ZUA2IG1haW5fYXNzZXRfdHJhbnNmZXJfcm91dGVANyBtYWluX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA4IG1haW5fYXNzZXRfcmV2b2tlX3JvdXRlQDkgbWFpbl9hc3NldF9jb25maWdfcm91dGVAMTAgbWFpbl9hc3NldF9kZWxldGVfcm91dGVAMTEgbWFpbl9tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEyIG1haW5fZGVwbG95X2FwcF9yb3V0ZUAxMyBtYWluX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxNCBtYWluX25vb3BfYXBwX2NhbGxfcm91dGVAMTUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTkKICAgIC8vIGNsYXNzIElubmVyVHJhbnNhY3Rpb25zKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX25vb3BfYXBwX2NhbGxfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIyOS0yMzAKICAgIC8vICMgZXhhbXBsZTogTk9PUF9BUFBfQ0FMTAogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIyOS0yMzAKICAgIC8vICMgZXhhbXBsZTogTk9PUF9BUFBfQ0FMTAogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBub29wX2FwcF9jYWxsCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18zIC8vIDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBwdXNoYnl0ZXMgMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXJjNF9kZXBsb3lfYXBwX3JvdXRlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMTgKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X2RlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVwbG95X2FwcF9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjAyCiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwbG95X2FwcAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNzYtMTc3CiAgICAvLyAjIGV4YW1wbGU6IEdST1VQRURfSU5ORVJfVFhOUwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE3Ni0xNzcKICAgIC8vICMgZXhhbXBsZTogR1JPVVBFRF9JTk5FUl9UWE5TCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIG11bHRpX2lubmVyX3R4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwMGEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0X2RlbGV0ZV9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTY2LTE2NwogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9ERUxFVEUKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjYtMTY3CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0RFTEVURQogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9kZWxldGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfY29uZmlnX3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNDUtMTQ2CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0NPTkZJRwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE0NS0xNDYKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfQ09ORklHCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NldF9yZXZva2Vfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI0LTEyNQogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9SRVZPS0UKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI0LTEyNQogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9SRVZPS0UKICAgIC8vIEBhYmltZXRob2QKICAgIGNhbGxzdWIgYXNzZXRfcmV2b2tlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMDgtMTA5CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0ZSRUVaRQogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMDgtMTA5CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0ZSRUVaRQogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfdHJhbnNmZXJfcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfVFJBTlNGRVIKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfVFJBTlNGRVIKICAgIC8vIEBhYmltZXRob2QKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfb3B0X2luX3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjcwLTcxCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX09QVF9JTgogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjcwLTcxCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX09QVF9JTgogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9vcHRfaW4KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0NwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjM1LTM2CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0NSRUFURQogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9wYXltZW50X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwLTIxCiAgICAvLyAjIGV4YW1wbGU6IFBBWU1FTlQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHBheW1lbnQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMjIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMC0yMgogICAgLy8gIyBleGFtcGxlOiBQQVlNRU5UCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBwYXltZW50KHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMwogICAgLy8gcmVzdWx0ID0gaXR4bi5QYXltZW50KGFtb3VudD01MDAwLCByZWNlaXZlcj1UeG4uc2VuZGVyLCBmZWU9MCkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIHB1c2hpbnQgNTAwMCAvLyA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjQKICAgIC8vIHJldHVybiByZXN1bHQuYW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTozNS0zNwogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9DUkVBVEUKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBmdW5naWJsZV9hc3NldF9jcmVhdGUoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjM4LTQzCiAgICAvLyBpdHhuX3Jlc3VsdCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9MTAwXzAwMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzPTIsCiAgICAvLyAgICAgdW5pdF9uYW1lPSJSUCIsCiAgICAvLyAgICAgYXNzZXRfbmFtZT0iUm95YWx0eSBQb2ludHMiLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0MgogICAgLy8gYXNzZXRfbmFtZT0iUm95YWx0eSBQb2ludHMiLAogICAgcHVzaGJ5dGVzICJSb3lhbHR5IFBvaW50cyIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjQxCiAgICAvLyB1bml0X25hbWU9IlJQIiwKICAgIHB1c2hieXRlcyAiUlAiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NDAKICAgIC8vIGRlY2ltYWxzPTIsCiAgICBwdXNoaW50IDIgLy8gMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjM5CiAgICAvLyB0b3RhbD0xMDBfMDAwXzAwMF8wMDAsCiAgICBwdXNoaW50IDEwMDAwMDAwMDAwMCAvLyAxMDAwMDAwMDAwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTozOAogICAgLy8gaXR4bl9yZXN1bHQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgcHVzaGludCAzIC8vIGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTozOC00MwogICAgLy8gaXR4bl9yZXN1bHQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEwMF8wMDBfMDAwXzAwMCwKICAgIC8vICAgICBkZWNpbWFscz0yLAogICAgLy8gICAgIHVuaXRfbmFtZT0iUlAiLAogICAgLy8gICAgIGFzc2V0X25hbWU9IlJveWFsdHkgUG9pbnRzIiwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBc3NldElECiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyByZXR1cm4gaXR4bl9yZXN1bHQuY3JlYXRlZF9hc3NldC5pZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5ub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlKCkgLT4gdWludDY0Ogpub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0Ny00OAogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjU0LTY0CiAgICAvLyBpdHhuX3Jlc3VsdCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9MTAwLAogICAgLy8gICAgIGRlY2ltYWxzPTIsCiAgICAvLyAgICAgdW5pdF9uYW1lPSJNTCIsCiAgICAvLyAgICAgYXNzZXRfbmFtZT0iTW9uYSBMaXNhIiwKICAgIC8vICAgICB1cmw9Imh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYSIsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo2MAogICAgLy8gbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NjEtNjMKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vIGZyZWV6ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTkKICAgIC8vIHVybD0iaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIiwKICAgIHB1c2hieXRlcyAiaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVSTAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo1OAogICAgLy8gYXNzZXRfbmFtZT0iTW9uYSBMaXNhIiwKICAgIHB1c2hieXRlcyAiTW9uYSBMaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTcKICAgIC8vIHVuaXRfbmFtZT0iTUwiLAogICAgcHVzaGJ5dGVzICJNTCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo1NgogICAgLy8gZGVjaW1hbHM9MiwKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTUKICAgIC8vIHRvdGFsPTEwMCwKICAgIHB1c2hpbnQgMTAwIC8vIDEwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjU0CiAgICAvLyBpdHhuX3Jlc3VsdCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjU0LTY0CiAgICAvLyBpdHhuX3Jlc3VsdCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9MTAwLAogICAgLy8gICAgIGRlY2ltYWxzPTIsCiAgICAvLyAgICAgdW5pdF9uYW1lPSJNTCIsCiAgICAvLyAgICAgYXNzZXRfbmFtZT0iTW9uYSBMaXNhIiwKICAgIC8vICAgICB1cmw9Imh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYSIsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NjYKICAgIC8vIHJldHVybiBpdHhuX3Jlc3VsdC5jcmVhdGVkX2Fzc2V0LmlkCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X29wdF9pbihhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9vcHRfaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjcwLTcyCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX09QVF9JTgogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X29wdF9pbihzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NzMtNzgKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NzYKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo3MwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5Ojc3CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo3My03OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3RyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo4OS05MQogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9UUkFOU0ZFUgogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X3RyYW5zZmVyKHNlbGYsIGFzc2V0OiBBc3NldCwgcmVjZWl2ZXI6IEFjY291bnQsIGFtb3VudDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjkyLTk3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9cmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo5MgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo5Mi05NwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXJlY2VpdmVyLAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFtb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2ZyZWV6ZShhY2N0X3RvX2JlX2Zyb3plbjogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2ZyZWV6ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTA4LTExMAogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9GUkVFWkUKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBhc3NldF9mcmVlemUoc2VsZiwgYWNjdF90b19iZV9mcm96ZW46IEFjY291bnQsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMTEtMTE2CiAgICAvLyBpdHhuLkFzc2V0RnJlZXplKAogICAgLy8gICAgIGZyZWV6ZV9hY2NvdW50PWFjY3RfdG9fYmVfZnJvemVuLCAgIyBhY2NvdW50IHRvIGJlIGZyb3plbgogICAgLy8gICAgIGZyZWV6ZV9hc3NldD1hc3NldCwKICAgIC8vICAgICBmcm96ZW49VHJ1ZSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTE0CiAgICAvLyBmcm96ZW49VHJ1ZSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTExCiAgICAvLyBpdHhuLkFzc2V0RnJlZXplKAogICAgcHVzaGludCA1IC8vIGFmcnoKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTE1CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMTEtMTE2CiAgICAvLyBpdHhuLkFzc2V0RnJlZXplKAogICAgLy8gICAgIGZyZWV6ZV9hY2NvdW50PWFjY3RfdG9fYmVfZnJvemVuLCAgIyBhY2NvdW50IHRvIGJlIGZyb3plbgogICAgLy8gICAgIGZyZWV6ZV9hc3NldD1hc3NldCwKICAgIC8vICAgICBmcm96ZW49VHJ1ZSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3Jldm9rZShhc3NldDogdWludDY0LCBhY2NvdW50X3RvX2JlX3Jldm9rZWQ6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfcmV2b2tlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMjQtMTI4CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX1JFVk9LRQogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X3Jldm9rZSgKICAgIC8vICAgICBzZWxmLCBhc3NldDogQXNzZXQsIGFjY291bnRfdG9fYmVfcmV2b2tlZDogQWNjb3VudCwgYW1vdW50OiBVSW50NjQKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDMgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMjktMTM1CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1hY2NvdW50X3RvX2JlX3Jldm9rZWQsICAjIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjEzMAogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjEyOQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjEzNAogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI5LTEzNQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9zZW5kZXI9YWNjb3VudF90b19iZV9yZXZva2VkLCAgIyBBc3NldFNlbmRlciBpcyBvbmx5IHVzZWQgaW4gdGhlIGNhc2Ugb2YgY2xhd2JhY2sKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfY29uZmlnKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2NvbmZpZzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTQ1LTE0NwogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9DT05GSUcKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBhc3NldF9jb25maWcoc2VsZiwgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE0OC0xNTUKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgY29uZmlnX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgY2xhd2JhY2s9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTUwCiAgICAvLyBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNTEKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNTIKICAgIC8vIGZyZWV6ZT1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNTMKICAgIC8vIGNsYXdiYWNrPVR4bi5zZW5kZXIsCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTQ4CiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgcHVzaGludCAzIC8vIGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTU0CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNDgtMTU1CiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIGNvbmZpZ19hc3NldD1hc3NldCwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZT1UeG4uc2VuZGVyLAogICAgLy8gICAgIGNsYXdiYWNrPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9kZWxldGUoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZGVsZXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjYtMTY4CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0RFTEVURQogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X2RlbGV0ZShzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTY5LTE3MgogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBjb25maWdfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTY5CiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgcHVzaGludCAzIC8vIGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTcxCiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjktMTcyCiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIGNvbmZpZ19hc3NldD1hc3NldCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLm11bHRpX2lubmVyX3R4bnMoYXBwX2lkOiB1aW50NjQpIC0+IHVpbnQ2NCwgYnl0ZXM6Cm11bHRpX2lubmVyX3R4bnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE3Ni0xNzgKICAgIC8vICMgZXhhbXBsZTogR1JPVVBFRF9JTk5FUl9UWE5TCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgbXVsdGlfaW5uZXJfdHhucyhzZWxmLCBhcHBfaWQ6IEFwcGxpY2F0aW9uKSAtPiB0dXBsZVtVSW50NjQsIGFyYzQuU3RyaW5nXToKICAgIHByb3RvIDEgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNzkKICAgIC8vIHBheW1lbnRfcGFyYW1zID0gaXR4bi5QYXltZW50KGFtb3VudD01MDAwLCByZWNlaXZlcj1UeG4uc2VuZGVyLCBmZWU9MCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTg3CiAgICAvLyBwYXlfdHhuLCBhcHBfY2FsbF90eG4gPSBpdHhuLnN1Ym1pdF90eG5zKHBheW1lbnRfcGFyYW1zLCBhcHBfY2FsbF9wYXJhbXMpCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE3OQogICAgLy8gcGF5bWVudF9wYXJhbXMgPSBpdHhuLlBheW1lbnQoYW1vdW50PTUwMDAsIHJlY2VpdmVyPVR4bi5zZW5kZXIsIGZlZT0wKQogICAgcHVzaGludCA1MDAwIC8vIDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTg3CiAgICAvLyBwYXlfdHhuLCBhcHBfY2FsbF90eG4gPSBpdHhuLnN1Ym1pdF90eG5zKHBheW1lbnRfcGFyYW1zLCBhcHBfY2FsbF9wYXJhbXMpCiAgICBpdHhuX25leHQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTgzCiAgICAvLyBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiaGVsbG8oc3RyaW5nKXN0cmluZyIpLCBhcmM0LlN0cmluZygiV29ybGQiKSksCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlY18yIC8vIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODEKICAgIC8vIGFwcF9jYWxsX3BhcmFtcyA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTg0CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODcKICAgIC8vIHBheV90eG4sIGFwcF9jYWxsX3R4biA9IGl0eG4uc3VibWl0X3R4bnMocGF5bWVudF9wYXJhbXMsIGFwcF9jYWxsX3BhcmFtcykKICAgIGl0eG5fc3VibWl0CiAgICBnaXR4biAwIEFtb3VudAogICAgaXR4biBMYXN0TG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE4OQogICAgLy8gaGVsbG9fd29ybGRfcmVzdWx0ID0gYXJjNC5TdHJpbmcuZnJvbV9sb2coYXBwX2NhbGxfdHhuLmxhc3RfbG9nKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOTAKICAgIC8vIHJldHVybiBwYXlfdHhuLmFtb3VudCwgaGVsbG9fd29ybGRfcmVzdWx0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmRlcGxveV9hcHAoKSAtPiB1aW50NjQ6CmRlcGxveV9hcHA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwMi0yMDMKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBkZXBsb3lfYXBwKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMDktMjEzCiAgICAvLyBhcHBfdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZF9jb250cmFjdC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWRfY29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjA3CiAgICAvLyBjb21waWxlZF9jb250cmFjdCA9IGNvbXBpbGVfY29udHJhY3QoSGVsbG9Xb3JsZCkKICAgIGJ5dGVjXzMgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlYyA0IC8vIGJhc2U2NChDakViUVFBMGdBUUN2czRSTmhvQWpnRUFBNEVBUXpFWkZFUXhHRVEyR2dGWEFnQ0lBQ0JKRlJaWEJnSk1VSUFFRlI5OGRVeFFzSUVCUXpFWlFQL1VNUmdVUklFQlE0b0JBWUFIU0dWc2JHOHNJSXYvVUlrPSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjA5CiAgICAvLyBhcHBfdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMTIKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwOS0yMTMKICAgIC8vIGFwcF90eG4gPSBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkX2NvbnRyYWN0LmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1jb21waWxlZF9jb250cmFjdC5jbGVhcl9zdGF0ZV9wcm9ncmFtLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjE2CiAgICAvLyByZXR1cm4gYXBwLmlkCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFyYzRfZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKYXJjNF9kZXBsb3lfYXBwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMTgtMjE5CiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgYXJjNF9kZXBsb3lfYXBwKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMjMKICAgIC8vIGFwcF90eG4gPSBhcmM0LmFyYzRfY3JlYXRlKEhlbGxvV29ybGQpCiAgICBpdHhuX2JlZ2luCiAgICBieXRlY18zIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgNCAvLyBiYXNlNjQoQ2pFYlFRQTBnQVFDdnM0Uk5ob0FqZ0VBQTRFQVF6RVpGRVF4R0VRMkdnRlhBZ0NJQUNCSkZSWlhCZ0pNVUlBRUZSOThkVXhRc0lFQlF6RVpRUC9VTVJnVVJJRUJRNG9CQVlBSFNHVnNiRzhzSUl2L1VJaz0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMjUKICAgIC8vIHJldHVybiBhcHBfdHhuLmNyZWF0ZWRfYXBwLmlkCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLm5vb3BfYXBwX2NhbGwoYXBwX2lkOiB1aW50NjQpIC0+IGJ5dGVzLCBieXRlczoKbm9vcF9hcHBfY2FsbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjI5LTIzMQogICAgLy8gIyBleGFtcGxlOiBOT09QX0FQUF9DQUxMCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgbm9vcF9hcHBfY2FsbChzZWxmLCBhcHBfaWQ6IEFwcGxpY2F0aW9uKSAtPiB0dXBsZVthcmM0LlN0cmluZywgU3RyaW5nXToKICAgIHByb3RvIDEgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMzItMjM2CiAgICAvLyAjIGludm9rZSBhbiBBQkkgbWV0aG9kCiAgICAvLyBjYWxsX3R4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1hcHBfaWQsCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImhlbGxvKHN0cmluZylzdHJpbmciKSwgYXJjNC5TdHJpbmcoIldvcmxkIikpLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMzUKICAgIC8vIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJoZWxsbyhzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJXb3JsZCIpKSwKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIzMi0yMzMKICAgIC8vICMgaW52b2tlIGFuIEFCSSBtZXRob2QKICAgIC8vIGNhbGxfdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIzMi0yMzYKICAgIC8vICMgaW52b2tlIGFuIEFCSSBtZXRob2QKICAgIC8vIGNhbGxfdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2lkPWFwcF9pZCwKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiaGVsbG8oc3RyaW5nKXN0cmluZyIpLCBhcmM0LlN0cmluZygiV29ybGQiKSksCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIzNy0yMzgKICAgIC8vICMgZXh0cmFjdCByZXN1bHQKICAgIC8vIGZpcnN0X2hlbGxvX3dvcmxkX3Jlc3VsdCA9IGFyYzQuU3RyaW5nLmZyb21fbG9nKGNhbGxfdHhuLmxhc3RfbG9nKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyNDAtMjQ1CiAgICAvLyAjIE9SLCBjYWxsIGl0IGF1dG9tYXRpYyBBUkM0IGVuY29kaW5nLCB0eXBlIHZhbGlkYXRpb24gYW5kIHJlc3VsdCBoYW5kbGluZwogICAgLy8gc2Vjb25kX2hlbGxvX3dvcmxkX3Jlc3VsdCwgY2FsbF90eG4gPSBhcmM0LmFiaV9jYWxsKCAgIyBkZWNsYXJlIHJldHVybiB0eXBlCiAgICAvLyAgICAgSGVsbG9Xb3JsZC5oZWxsbywgICMgbWV0aG9kIHNpZ25hdHVyZSB0byBjYWxsCiAgICAvLyAgICAgImFnYWluIiwgICMgYWJpIG1ldGhvZCBhcmd1bWVudHMKICAgIC8vICAgICBhcHBfaWQ9YXBwX2lkLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjQzCiAgICAvLyAiYWdhaW4iLCAgIyBhYmkgbWV0aG9kIGFyZ3VtZW50cwogICAgcHVzaGJ5dGVzIDB4MDAwNTYxNjc2MTY5NmUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjI0MC0yNDUKICAgIC8vICMgT1IsIGNhbGwgaXQgYXV0b21hdGljIEFSQzQgZW5jb2RpbmcsIHR5cGUgdmFsaWRhdGlvbiBhbmQgcmVzdWx0IGhhbmRsaW5nCiAgICAvLyBzZWNvbmRfaGVsbG9fd29ybGRfcmVzdWx0LCBjYWxsX3R4biA9IGFyYzQuYWJpX2NhbGwoICAjIGRlY2xhcmUgcmV0dXJuIHR5cGUKICAgIC8vICAgICBIZWxsb1dvcmxkLmhlbGxvLCAgIyBtZXRob2Qgc2lnbmF0dXJlIHRvIGNhbGwKICAgIC8vICAgICAiYWdhaW4iLCAgIyBhYmkgbWV0aG9kIGFyZ3VtZW50cwogICAgLy8gICAgIGFwcF9pZD1hcHBfaWQsCiAgICAvLyApCiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyNDcKICAgIC8vIHJldHVybiBmaXJzdF9oZWxsb193b3JsZF9yZXN1bHQsIHNlY29uZF9oZWxsb193b3JsZF9yZXN1bHQKICAgIHJldHN1Ygo=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgNiA0CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMmJlY2UxMSAweDAwMDU1NzZmNzI2YzY0IGJhc2U2NChDb0VCUXc9PSkgYmFzZTY0KENqRWJRUUEwZ0FRQ3ZzNFJOaG9BamdFQUE0RUFRekVaRkVReEdFUTJHZ0ZYQWdDSUFDQkpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNJRUJRekVaUVAvVU1SZ1VSSUVCUTRvQkFZQUhTR1ZzYkc4c0lJdi9VSWs9KQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxOAogICAgcHVzaGJ5dGVzcyAweDIzOTUwMDI3IDB4ZWE3Njg5ZjMgMHhmZTI2NDczMCAweGI2YzJiMTQ4IDB4NGIxOWRmZGQgMHhhOTBlNmE0ZiAweGM1MDQ2MjgyIDB4NTg0NDAwZmYgMHhhOWU4MTJhNSAweDBlNzM5ODE0IDB4MzYzMTc0NWQgMHgxMGE5YjEwMiAweDlkMGM1ZGUxIC8vIG1ldGhvZCAicGF5bWVudCgpdWludDY0IiwgbWV0aG9kICJmdW5naWJsZV9hc3NldF9jcmVhdGUoKXVpbnQ2NCIsIG1ldGhvZCAibm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpdWludDY0IiwgbWV0aG9kICJhc3NldF9vcHRfaW4oYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfZnJlZXplKGFjY291bnQsYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfcmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiLCBtZXRob2QgImFzc2V0X2NvbmZpZyhhc3NldCl2b2lkIiwgbWV0aG9kICJhc3NldF9kZWxldGUoYXNzZXQpdm9pZCIsIG1ldGhvZCAibXVsdGlfaW5uZXJfdHhucyhhcHBsaWNhdGlvbikodWludDY0LHN0cmluZykiLCBtZXRob2QgImRlcGxveV9hcHAoKXVpbnQ2NCIsIG1ldGhvZCAiYXJjNF9kZXBsb3lfYXBwKCl1aW50NjQiLCBtZXRob2QgIm5vb3BfYXBwX2NhbGwoYXBwbGljYXRpb24pKHN0cmluZyxzdHJpbmcpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9wYXltZW50X3JvdXRlQDMgbWFpbl9mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVANCBtYWluX25vbl9mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVANSBtYWluX2Fzc2V0X29wdF9pbl9yb3V0ZUA2IG1haW5fYXNzZXRfdHJhbnNmZXJfcm91dGVANyBtYWluX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA4IG1haW5fYXNzZXRfcmV2b2tlX3JvdXRlQDkgbWFpbl9hc3NldF9jb25maWdfcm91dGVAMTAgbWFpbl9hc3NldF9kZWxldGVfcm91dGVAMTEgbWFpbl9tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEyIG1haW5fZGVwbG95X2FwcF9yb3V0ZUAxMyBtYWluX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxNCBtYWluX25vb3BfYXBwX2NhbGxfcm91dGVAMTUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTkKICAgIC8vIGNsYXNzIElubmVyVHJhbnNhY3Rpb25zKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX25vb3BfYXBwX2NhbGxfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIyOS0yMzAKICAgIC8vICMgZXhhbXBsZTogTk9PUF9BUFBfQ0FMTAogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIyOS0yMzAKICAgIC8vICMgZXhhbXBsZTogTk9PUF9BUFBfQ0FMTAogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBub29wX2FwcF9jYWxsCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18zIC8vIDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBwdXNoYnl0ZXMgMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXJjNF9kZXBsb3lfYXBwX3JvdXRlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMTgKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X2RlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVwbG95X2FwcF9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjAyCiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwbG95X2FwcAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNzYtMTc3CiAgICAvLyAjIGV4YW1wbGU6IEdST1VQRURfSU5ORVJfVFhOUwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE3Ni0xNzcKICAgIC8vICMgZXhhbXBsZTogR1JPVVBFRF9JTk5FUl9UWE5TCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIG11bHRpX2lubmVyX3R4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwMGEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0X2RlbGV0ZV9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTY2LTE2NwogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9ERUxFVEUKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjYtMTY3CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0RFTEVURQogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9kZWxldGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfY29uZmlnX3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNDUtMTQ2CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0NPTkZJRwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE0NS0xNDYKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfQ09ORklHCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NldF9yZXZva2Vfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI0LTEyNQogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9SRVZPS0UKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI0LTEyNQogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9SRVZPS0UKICAgIC8vIEBhYmltZXRob2QKICAgIGNhbGxzdWIgYXNzZXRfcmV2b2tlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMDgtMTA5CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0ZSRUVaRQogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMDgtMTA5CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0ZSRUVaRQogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfdHJhbnNmZXJfcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfVFJBTlNGRVIKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfVFJBTlNGRVIKICAgIC8vIEBhYmltZXRob2QKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfb3B0X2luX3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjcwLTcxCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX09QVF9JTgogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjcwLTcxCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX09QVF9JTgogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9vcHRfaW4KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0NwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjM1LTM2CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0NSRUFURQogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9wYXltZW50X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwLTIxCiAgICAvLyAjIGV4YW1wbGU6IFBBWU1FTlQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHBheW1lbnQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMjIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMwogICAgLy8gcmVzdWx0ID0gaXR4bi5QYXltZW50KGFtb3VudD01MDAwLCByZWNlaXZlcj1UeG4uc2VuZGVyLCBmZWU9MCkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIHB1c2hpbnQgNTAwMCAvLyA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjQKICAgIC8vIHJldHVybiByZXN1bHQuYW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTozOC00MwogICAgLy8gaXR4bl9yZXN1bHQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEwMF8wMDBfMDAwXzAwMCwKICAgIC8vICAgICBkZWNpbWFscz0yLAogICAgLy8gICAgIHVuaXRfbmFtZT0iUlAiLAogICAgLy8gICAgIGFzc2V0X25hbWU9IlJveWFsdHkgUG9pbnRzIiwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NDIKICAgIC8vIGFzc2V0X25hbWU9IlJveWFsdHkgUG9pbnRzIiwKICAgIHB1c2hieXRlcyAiUm95YWx0eSBQb2ludHMiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0MQogICAgLy8gdW5pdF9uYW1lPSJSUCIsCiAgICBwdXNoYnl0ZXMgIlJQIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBkZWNpbWFscz0yLAogICAgcHVzaGludCAyIC8vIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTozOQogICAgLy8gdG90YWw9MTAwXzAwMF8wMDBfMDAwLAogICAgcHVzaGludCAxMDAwMDAwMDAwMDAgLy8gMTAwMDAwMDAwMDAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MzgKICAgIC8vIGl0eG5fcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MzgtNDMKICAgIC8vIGl0eG5fcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xMDBfMDAwXzAwMF8wMDAsCiAgICAvLyAgICAgZGVjaW1hbHM9MiwKICAgIC8vICAgICB1bml0X25hbWU9IlJQIiwKICAgIC8vICAgICBhc3NldF9uYW1lPSJSb3lhbHR5IFBvaW50cyIsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0NQogICAgLy8gcmV0dXJuIGl0eG5fcmVzdWx0LmNyZWF0ZWRfYXNzZXQuaWQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTQtNjQKICAgIC8vIGl0eG5fcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xMDAsCiAgICAvLyAgICAgZGVjaW1hbHM9MiwKICAgIC8vICAgICB1bml0X25hbWU9Ik1MIiwKICAgIC8vICAgICBhc3NldF9uYW1lPSJNb25hIExpc2EiLAogICAgLy8gICAgIHVybD0iaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjYwCiAgICAvLyBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo2MS02MwogICAgLy8gcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gZnJlZXplPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZHVwbiAzCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo1OQogICAgLy8gdXJsPSJodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EiLAogICAgcHVzaGJ5dGVzICJodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjU4CiAgICAvLyBhc3NldF9uYW1lPSJNb25hIExpc2EiLAogICAgcHVzaGJ5dGVzICJNb25hIExpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo1NwogICAgLy8gdW5pdF9uYW1lPSJNTCIsCiAgICBwdXNoYnl0ZXMgIk1MIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjU2CiAgICAvLyBkZWNpbWFscz0yLAogICAgcHVzaGludCAyIC8vIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo1NQogICAgLy8gdG90YWw9MTAwLAogICAgcHVzaGludCAxMDAgLy8gMTAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTQKICAgIC8vIGl0eG5fcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTQtNjQKICAgIC8vIGl0eG5fcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xMDAsCiAgICAvLyAgICAgZGVjaW1hbHM9MiwKICAgIC8vICAgICB1bml0X25hbWU9Ik1MIiwKICAgIC8vICAgICBhc3NldF9uYW1lPSJNb25hIExpc2EiLAogICAgLy8gICAgIHVybD0iaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo2NgogICAgLy8gcmV0dXJuIGl0eG5fcmVzdWx0LmNyZWF0ZWRfYXNzZXQuaWQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfb3B0X2luKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X29wdF9pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NzAtNzIKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfT1BUX0lOCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgYXNzZXRfb3B0X2luKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo3My03OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NzQKICAgIC8vIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo3NgogICAgLy8gYXNzZXRfYW1vdW50PTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjczCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NzcKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjczLTc4CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfdHJhbnNmZXIoYXNzZXQ6IHVpbnQ2NCwgcmVjZWl2ZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfdHJhbnNmZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5Ojg5LTkxCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX1RSQU5TRkVSCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgYXNzZXRfdHJhbnNmZXIoc2VsZiwgYXNzZXQ6IEFzc2V0LCByZWNlaXZlcjogQWNjb3VudCwgYW1vdW50OiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAzIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6OTItOTcKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1yZWNlaXZlciwKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjkyCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6OTYKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjkyLTk3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9cmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfZnJlZXplKGFjY3RfdG9fYmVfZnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZnJlZXplOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMDgtMTEwCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0ZSRUVaRQogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X2ZyZWV6ZShzZWxmLCBhY2N0X3RvX2JlX2Zyb3plbjogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjExMS0xMTYKICAgIC8vIGl0eG4uQXNzZXRGcmVlemUoCiAgICAvLyAgICAgZnJlZXplX2FjY291bnQ9YWNjdF90b19iZV9mcm96ZW4sICAjIGFjY291bnQgdG8gYmUgZnJvemVuCiAgICAvLyAgICAgZnJlZXplX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGZyb3plbj1UcnVlLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMTQKICAgIC8vIGZyb3plbj1UcnVlLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRGcm96ZW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0QWNjb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMTEKICAgIC8vIGl0eG4uQXNzZXRGcmVlemUoCiAgICBwdXNoaW50IDUgLy8gYWZyegogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMTUKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjExMS0xMTYKICAgIC8vIGl0eG4uQXNzZXRGcmVlemUoCiAgICAvLyAgICAgZnJlZXplX2FjY291bnQ9YWNjdF90b19iZV9mcm96ZW4sICAjIGFjY291bnQgdG8gYmUgZnJvemVuCiAgICAvLyAgICAgZnJlZXplX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGZyb3plbj1UcnVlLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfcmV2b2tlKGFzc2V0OiB1aW50NjQsIGFjY291bnRfdG9fYmVfcmV2b2tlZDogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NldF9yZXZva2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjEyNC0xMjgKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfUkVWT0tFCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgYXNzZXRfcmV2b2tlKAogICAgLy8gICAgIHNlbGYsIGFzc2V0OiBBc3NldCwgYWNjb3VudF90b19iZV9yZXZva2VkOiBBY2NvdW50LCBhbW91bnQ6IFVJbnQ2NAogICAgLy8gKSAtPiBOb25lOgogICAgcHJvdG8gMyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjEyOS0xMzUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfc2VuZGVyPWFjY291bnRfdG9fYmVfcmV2b2tlZCwgICMgQXNzZXRTZW5kZXIgaXMgb25seSB1c2VkIGluIHRoZSBjYXNlIG9mIGNsYXdiYWNrCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFtb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTMwCiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI5CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTM0CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMjktMTM1CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1hY2NvdW50X3RvX2JlX3Jldm9rZWQsICAjIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9jb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfY29uZmlnOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNDUtMTQ3CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0NPTkZJRwogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X2NvbmZpZyhzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTQ4LTE1NQogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBjb25maWdfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmcmVlemU9VHhuLnNlbmRlciwKICAgIC8vICAgICBjbGF3YmFjaz1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNTAKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE1MgogICAgLy8gZnJlZXplPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE1MwogICAgLy8gY2xhd2JhY2s9VHhuLnNlbmRlciwKICAgIGR1cAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNDgKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNTQKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE0OC0xNTUKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgY29uZmlnX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgY2xhd2JhY2s9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2RlbGV0ZShhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9kZWxldGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE2Ni0xNjgKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfREVMRVRFCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgYXNzZXRfZGVsZXRlKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjktMTcyCiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIGNvbmZpZ19hc3NldD1hc3NldCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjkKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNzEKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE2OS0xNzIKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgY29uZmlnX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubXVsdGlfaW5uZXJfdHhucyhhcHBfaWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlfaW5uZXJfdHhuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTc2LTE3OAogICAgLy8gIyBleGFtcGxlOiBHUk9VUEVEX0lOTkVSX1RYTlMKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBtdWx0aV9pbm5lcl90eG5zKHNlbGYsIGFwcF9pZDogQXBwbGljYXRpb24pIC0+IHR1cGxlW1VJbnQ2NCwgYXJjNC5TdHJpbmddOgogICAgcHJvdG8gMSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE3OQogICAgLy8gcGF5bWVudF9wYXJhbXMgPSBpdHhuLlBheW1lbnQoYW1vdW50PTUwMDAsIHJlY2VpdmVyPVR4bi5zZW5kZXIsIGZlZT0wKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODcKICAgIC8vIHBheV90eG4sIGFwcF9jYWxsX3R4biA9IGl0eG4uc3VibWl0X3R4bnMocGF5bWVudF9wYXJhbXMsIGFwcF9jYWxsX3BhcmFtcykKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTc5CiAgICAvLyBwYXltZW50X3BhcmFtcyA9IGl0eG4uUGF5bWVudChhbW91bnQ9NTAwMCwgcmVjZWl2ZXI9VHhuLnNlbmRlciwgZmVlPTApCiAgICBwdXNoaW50IDUwMDAgLy8gNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODcKICAgIC8vIHBheV90eG4sIGFwcF9jYWxsX3R4biA9IGl0eG4uc3VibWl0X3R4bnMocGF5bWVudF9wYXJhbXMsIGFwcF9jYWxsX3BhcmFtcykKICAgIGl0eG5fbmV4dAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODMKICAgIC8vIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJoZWxsbyhzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJXb3JsZCIpKSwKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE4MQogICAgLy8gYXBwX2NhbGxfcGFyYW1zID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODQKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE4NwogICAgLy8gcGF5X3R4biwgYXBwX2NhbGxfdHhuID0gaXR4bi5zdWJtaXRfdHhucyhwYXltZW50X3BhcmFtcywgYXBwX2NhbGxfcGFyYW1zKQogICAgaXR4bl9zdWJtaXQKICAgIGdpdHhuIDAgQW1vdW50CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTg5CiAgICAvLyBoZWxsb193b3JsZF9yZXN1bHQgPSBhcmM0LlN0cmluZy5mcm9tX2xvZyhhcHBfY2FsbF90eG4ubGFzdF9sb2cpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gcmV0dXJuIHBheV90eG4uYW1vdW50LCBoZWxsb193b3JsZF9yZXN1bHQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKZGVwbG95X2FwcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjA5LTIxMwogICAgLy8gYXBwX3R4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWRfY29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkX2NvbnRyYWN0LmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwNwogICAgLy8gY29tcGlsZWRfY29udHJhY3QgPSBjb21waWxlX2NvbnRyYWN0KEhlbGxvV29ybGQpCiAgICBieXRlY18zIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgNCAvLyBiYXNlNjQoQ2pFYlFRQTBnQVFDdnM0Uk5ob0FqZ0VBQTRFQVF6RVpGRVF4R0VRMkdnRlhBZ0NJQUNCSkZSWlhCZ0pNVUlBRUZSOThkVXhRc0lFQlF6RVpRUC9VTVJnVVJJRUJRNG9CQVlBSFNHVnNiRzhzSUl2L1VJaz0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwOQogICAgLy8gYXBwX3R4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjEyCiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMDktMjEzCiAgICAvLyBhcHBfdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZF9jb250cmFjdC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWRfY29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gcmV0dXJuIGFwcC5pZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hcmM0X2RlcGxveV9hcHAoKSAtPiB1aW50NjQ6CmFyYzRfZGVwbG95X2FwcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjIzCiAgICAvLyBhcHBfdHhuID0gYXJjNC5hcmM0X2NyZWF0ZShIZWxsb1dvcmxkKQogICAgaXR4bl9iZWdpbgogICAgYnl0ZWNfMyAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjIDQgLy8gYmFzZTY0KENqRWJRUUEwZ0FRQ3ZzNFJOaG9BamdFQUE0RUFRekVaRkVReEdFUTJHZ0ZYQWdDSUFDQkpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNJRUJRekVaUVAvVU1SZ1VSSUVCUTRvQkFZQUhTR1ZzYkc4c0lJdi9VSWs9KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjI1CiAgICAvLyByZXR1cm4gYXBwX3R4bi5jcmVhdGVkX2FwcC5pZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5ub29wX2FwcF9jYWxsKGFwcF9pZDogdWludDY0KSAtPiBieXRlcywgYnl0ZXM6Cm5vb3BfYXBwX2NhbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIyOS0yMzEKICAgIC8vICMgZXhhbXBsZTogTk9PUF9BUFBfQ0FMTAogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIG5vb3BfYXBwX2NhbGwoc2VsZiwgYXBwX2lkOiBBcHBsaWNhdGlvbikgLT4gdHVwbGVbYXJjNC5TdHJpbmcsIFN0cmluZ106CiAgICBwcm90byAxIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjMyLTIzNgogICAgLy8gIyBpbnZva2UgYW4gQUJJIG1ldGhvZAogICAgLy8gY2FsbF90eG4gPSBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9YXBwX2lkLAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJoZWxsbyhzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJXb3JsZCIpKSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjM1CiAgICAvLyBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiaGVsbG8oc3RyaW5nKXN0cmluZyIpLCBhcmM0LlN0cmluZygiV29ybGQiKSksCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlY18yIC8vIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMzItMjMzCiAgICAvLyAjIGludm9rZSBhbiBBQkkgbWV0aG9kCiAgICAvLyBjYWxsX3R4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMzItMjM2CiAgICAvLyAjIGludm9rZSBhbiBBQkkgbWV0aG9kCiAgICAvLyBjYWxsX3R4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1hcHBfaWQsCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImhlbGxvKHN0cmluZylzdHJpbmciKSwgYXJjNC5TdHJpbmcoIldvcmxkIikpLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMzctMjM4CiAgICAvLyAjIGV4dHJhY3QgcmVzdWx0CiAgICAvLyBmaXJzdF9oZWxsb193b3JsZF9yZXN1bHQgPSBhcmM0LlN0cmluZy5mcm9tX2xvZyhjYWxsX3R4bi5sYXN0X2xvZykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjQwLTI0NQogICAgLy8gIyBPUiwgY2FsbCBpdCBhdXRvbWF0aWMgQVJDNCBlbmNvZGluZywgdHlwZSB2YWxpZGF0aW9uIGFuZCByZXN1bHQgaGFuZGxpbmcKICAgIC8vIHNlY29uZF9oZWxsb193b3JsZF9yZXN1bHQsIGNhbGxfdHhuID0gYXJjNC5hYmlfY2FsbCggICMgZGVjbGFyZSByZXR1cm4gdHlwZQogICAgLy8gICAgIEhlbGxvV29ybGQuaGVsbG8sICAjIG1ldGhvZCBzaWduYXR1cmUgdG8gY2FsbAogICAgLy8gICAgICJhZ2FpbiIsICAjIGFiaSBtZXRob2QgYXJndW1lbnRzCiAgICAvLyAgICAgYXBwX2lkPWFwcF9pZCwKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlY18xIC8vIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjI0MwogICAgLy8gImFnYWluIiwgICMgYWJpIG1ldGhvZCBhcmd1bWVudHMKICAgIHB1c2hieXRlcyAweDAwMDU2MTY3NjE2OTZlCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyNDAtMjQ1CiAgICAvLyAjIE9SLCBjYWxsIGl0IGF1dG9tYXRpYyBBUkM0IGVuY29kaW5nLCB0eXBlIHZhbGlkYXRpb24gYW5kIHJlc3VsdCBoYW5kbGluZwogICAgLy8gc2Vjb25kX2hlbGxvX3dvcmxkX3Jlc3VsdCwgY2FsbF90eG4gPSBhcmM0LmFiaV9jYWxsKCAgIyBkZWNsYXJlIHJldHVybiB0eXBlCiAgICAvLyAgICAgSGVsbG9Xb3JsZC5oZWxsbywgICMgbWV0aG9kIHNpZ25hdHVyZSB0byBjYWxsCiAgICAvLyAgICAgImFnYWluIiwgICMgYWJpIG1ldGhvZCBhcmd1bWVudHMKICAgIC8vICAgICBhcHBfaWQ9YXBwX2lkLAogICAgLy8gKQogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDYgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyNDcKICAgIC8vIHJldHVybiBmaXJzdF9oZWxsb193b3JsZF9yZXN1bHQsIHNlY29uZF9oZWxsb193b3JsZF9yZXN1bHQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { - "approval": "CiAEAAEGBCYFBBUffHUEAr7OEQcABVdvcmxkBAqBAUNWCjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIkxG0EBkIINBCOVACcE6naJ8wT+JkcwBLbCsUgESxnf3QSpDmpPBMUEYoIEWEQA/wSp6BKlBA5zmBQENjF0XQQQqbECBJ0MXeE2GgCODQEdAQwA+wDpAM0AtQCZAIcAdQBWAEUANAACIkMxGRREMRhENhoBF8AyiAK9SRUWVwYCTFBLARUlCBZXBgKAAgAETFBPAlBMUChMULAjQzEZFEQxGESIAnwWKExQsCNDMRkURDEYRIgCVhYoTFCwI0MxGRREMRhENhoBF8AyiAIJTBaAAgAKUExQKExQsCNDMRkURDEYRDYaARfAMIgB2SNDMRkURDEYRDYaARfAMIgBqCNDMRkURDEYRDYaARfAMDYaAhfAHDYaAxeIAXAjQzEZFEQxGEQ2GgEXwBw2GgIXwDCIAUAjQzEZFEQxGEQ2GgEXwDA2GgIXwBw2GgMXiAEMI0MxGRREMRhENhoBF8AwiADjI0MxGRREMRhEiAB/FihMULAjQzEZFEQxGESIADoWKExQsCNDMRkURDEYRIgAEhYoTFCwI0MxGUD+zTEYFEQjQ4oAAbExALIHgYgnsggjshAisgGztAiJigABsYAOUm95YWx0eSBQb2ludHOyJoACUlCyJYECsiOBgNDbw/QCsiKBA7IQIrIBs7Q8iYoAAbEyCkcDsiyyK7IqsimAHmh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYbIngAlNb25hIExpc2GyJoACTUyyJYECsiOBZLIigQOyECKyAbO0PImKAQCxMgoishKL/7IRshQlshAisgGziYoDALGL/7ISi/2yEYv+shQlshAisgGziYoCALEjsi+L/7Iti/6yLoEFshAisgGziYoDALEyCov/shKL/rITi/2yEbIUJbIQIrIBs4mKAQCxMgpJMQBJsiyyK7IqsimL/7IhgQOyECKyAbOJigEAsYv/siGBA7IQIrIBs4mKAQIxALGyB4GIJ7III7IQIrIBtimyGiqyGov/shgkshAisgGztwAItD5JVwQATFcABCgSRImKAAGxK7JCJwSyQCSyECKyAbO0PYmKAAGxK7JCJwSyQCSyECKyAbO0PYmKAQKxKbIaKrIai/+yGCSyECKyAbO0PklXBABMVwAEKBJEsYv/shgpshqABwAFYWdhaW6yGiSyECKyAbO0PklXBABMVwAEKBJEVwIAiQ==", + "approval": "CiAEAAEGBCYFBBUffHUEAr7OEQcABVdvcmxkBAqBAUNWCjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIkxG0EBkIINBCOVACcE6naJ8wT+JkcwBLbCsUgESxnf3QSpDmpPBMUEYoIEWEQA/wSp6BKlBA5zmBQENjF0XQQQqbECBJ0MXeE2GgCODQEdAQwA+wDpAM0AtQCZAIcAdQBWAEUANAACIkMxGRREMRhENhoBF8AyiAKuSRUWVwYCTFBLARUlCBZXBgKAAgAETFBPAlBMUChMULAjQzEZFEQxGESIAnAWKExQsCNDMRkURDEYRIgCTRYoTFCwI0MxGRREMRhENhoBF8AyiAIATBaAAgAKUExQKExQsCNDMRkURDEYRDYaARfAMIgB0CNDMRkURDEYRDYaARfAMIgBnyNDMRkURDEYRDYaARfAMDYaAhfAHDYaAxeIAWcjQzEZFEQxGEQ2GgEXwBw2GgIXwDCIATcjQzEZFEQxGEQ2GgEXwDA2GgIXwBw2GgMXiAEDI0MxGRREMRhENhoBF8AwiADaI0MxGRREMRhEiAB5FihMULAjQzEZFEQxGESIADcWKExQsCNDMRkURDEYRIgAEhYoTFCwI0MxGUD+zTEYFEQjQ7ExALIHgYgnsggjshAisgGztAiJsYAOUm95YWx0eSBQb2ludHOyJoACUlCyJYECsiOBgNDbw/QCsiKBA7IQIrIBs7Q8ibEyCkcDsiyyK7IqsimAHmh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYbIngAlNb25hIExpc2GyJoACTUyyJYECsiOBZLIigQOyECKyAbO0PImKAQCxMgoishKL/7IRshQlshAisgGziYoDALGL/7ISi/2yEYv+shQlshAisgGziYoCALEjsi+L/7Iti/6yLoEFshAisgGziYoDALEyCov/shKL/rITi/2yEbIUJbIQIrIBs4mKAQCxMgpJMQBJsiyyK7IqsimL/7IhgQOyECKyAbOJigEAsYv/siGBA7IQIrIBs4mKAQIxALGyB4GIJ7III7IQIrIBtimyGiqyGov/shgkshAisgGztwAItD5JVwQATFcABCgSRImxK7JCJwSyQCSyECKyAbO0PYmxK7JCJwSyQCSyECKyAbO0PYmKAQKxKbIaKrIai/+yGCSyECKyAbO0PklXBABMVwAEKBJEsYv/shgpshqABwAFYWdhaW6yGiSyECKyAbO0PklXAAQoEkRXBgCJ", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py b/projects/python-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py index 39e681f..c05378e 100644 --- a/projects/python-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py +++ b/projects/python-examples/smart_contracts/artifacts/inner_transactions/inner_transactions_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "payment", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "fungible_asset_create", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "non_fungible_asset_create", "returns": {"type": "uint64"}, "desc": "Following the ARC3 standard, the total supply must be 1 for a non-fungible asset.\nIf you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "asset", "name": "asset"}], "name": "asset_opt_in", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "asset", "name": "asset"}, {"type": "account", "name": "receiver"}, {"type": "uint64", "name": "amount"}], "name": "asset_transfer", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "acct_to_be_frozen"}, {"type": "asset", "name": "asset"}], "name": "asset_freeze", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "asset", "name": "asset"}, {"type": "account", "name": "account_to_be_revoked"}, {"type": "uint64", "name": "amount"}], "name": "asset_revoke", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "asset", "name": "asset"}], "name": "asset_config", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "asset", "name": "asset"}], "name": "asset_delete", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "application", "name": "app_id"}], "name": "multi_inner_txns", "returns": {"type": "(uint64,string)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "deploy_app", "returns": {"type": "uint64"}, "desc": "This method uses the itxn.ApplicationCall to deploy the HelloWorld contract.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "arc4_deploy_app", "returns": {"type": "uint64"}, "desc": "This method uses the arc4.arc4_create to deploy the HelloWorld contract.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "application", "name": "app_id"}], "name": "noop_app_call", "returns": {"type": "(string,string)"}, "events": [], "readonly": false, "recommendations": {}}], "name": "InnerTransactions", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiAEAAEGBCYFBBUffHUEAr7OEQcABVdvcmxkBAqBAUNWCjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIkxG0EBkIINBCOVACcE6naJ8wT+JkcwBLbCsUgESxnf3QSpDmpPBMUEYoIEWEQA/wSp6BKlBA5zmBQENjF0XQQQqbECBJ0MXeE2GgCODQEdAQwA+wDpAM0AtQCZAIcAdQBWAEUANAACIkMxGRREMRhENhoBF8AyiAK9SRUWVwYCTFBLARUlCBZXBgKAAgAETFBPAlBMUChMULAjQzEZFEQxGESIAnwWKExQsCNDMRkURDEYRIgCVhYoTFCwI0MxGRREMRhENhoBF8AyiAIJTBaAAgAKUExQKExQsCNDMRkURDEYRDYaARfAMIgB2SNDMRkURDEYRDYaARfAMIgBqCNDMRkURDEYRDYaARfAMDYaAhfAHDYaAxeIAXAjQzEZFEQxGEQ2GgEXwBw2GgIXwDCIAUAjQzEZFEQxGEQ2GgEXwDA2GgIXwBw2GgMXiAEMI0MxGRREMRhENhoBF8AwiADjI0MxGRREMRhEiAB/FihMULAjQzEZFEQxGESIADoWKExQsCNDMRkURDEYRIgAEhYoTFCwI0MxGUD+zTEYFEQjQ4oAAbExALIHgYgnsggjshAisgGztAiJigABsYAOUm95YWx0eSBQb2ludHOyJoACUlCyJYECsiOBgNDbw/QCsiKBA7IQIrIBs7Q8iYoAAbEyCkcDsiyyK7IqsimAHmh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYbIngAlNb25hIExpc2GyJoACTUyyJYECsiOBZLIigQOyECKyAbO0PImKAQCxMgoishKL/7IRshQlshAisgGziYoDALGL/7ISi/2yEYv+shQlshAisgGziYoCALEjsi+L/7Iti/6yLoEFshAisgGziYoDALEyCov/shKL/rITi/2yEbIUJbIQIrIBs4mKAQCxMgpJMQBJsiyyK7IqsimL/7IhgQOyECKyAbOJigEAsYv/siGBA7IQIrIBs4mKAQIxALGyB4GIJ7III7IQIrIBtimyGiqyGov/shgkshAisgGztwAItD5JVwQATFcABCgSRImKAAGxK7JCJwSyQCSyECKyAbO0PYmKAAGxK7JCJwSyQCSyECKyAbO0PYmKAQKxKbIaKrIai/+yGCSyECKyAbO0PklXBABMVwAEKBJEsYv/shgpshqABwAFYWdhaW6yGiSyECKyAbO0PklXBABMVwAEKBJEVwIAiQ==", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgNiA0CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMmJlY2UxMSAweDAwMDU1NzZmNzI2YzY0IGJhc2U2NChDb0VCUXc9PSkgYmFzZTY0KENqRWJRUUEwZ0FRQ3ZzNFJOaG9BamdFQUE0RUFRekVaRkVReEdFUTJHZ0ZYQWdDSUFDQkpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNJRUJRekVaUVAvVU1SZ1VSSUVCUTRvQkFZQUhTR1ZzYkc4c0lJdi9VSWs9KQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxOAogICAgcHVzaGJ5dGVzcyAweDIzOTUwMDI3IDB4ZWE3Njg5ZjMgMHhmZTI2NDczMCAweGI2YzJiMTQ4IDB4NGIxOWRmZGQgMHhhOTBlNmE0ZiAweGM1MDQ2MjgyIDB4NTg0NDAwZmYgMHhhOWU4MTJhNSAweDBlNzM5ODE0IDB4MzYzMTc0NWQgMHgxMGE5YjEwMiAweDlkMGM1ZGUxIC8vIG1ldGhvZCAicGF5bWVudCgpdWludDY0IiwgbWV0aG9kICJmdW5naWJsZV9hc3NldF9jcmVhdGUoKXVpbnQ2NCIsIG1ldGhvZCAibm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpdWludDY0IiwgbWV0aG9kICJhc3NldF9vcHRfaW4oYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfZnJlZXplKGFjY291bnQsYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfcmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiLCBtZXRob2QgImFzc2V0X2NvbmZpZyhhc3NldCl2b2lkIiwgbWV0aG9kICJhc3NldF9kZWxldGUoYXNzZXQpdm9pZCIsIG1ldGhvZCAibXVsdGlfaW5uZXJfdHhucyhhcHBsaWNhdGlvbikodWludDY0LHN0cmluZykiLCBtZXRob2QgImRlcGxveV9hcHAoKXVpbnQ2NCIsIG1ldGhvZCAiYXJjNF9kZXBsb3lfYXBwKCl1aW50NjQiLCBtZXRob2QgIm5vb3BfYXBwX2NhbGwoYXBwbGljYXRpb24pKHN0cmluZyxzdHJpbmcpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9wYXltZW50X3JvdXRlQDMgbWFpbl9mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVANCBtYWluX25vbl9mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVANSBtYWluX2Fzc2V0X29wdF9pbl9yb3V0ZUA2IG1haW5fYXNzZXRfdHJhbnNmZXJfcm91dGVANyBtYWluX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA4IG1haW5fYXNzZXRfcmV2b2tlX3JvdXRlQDkgbWFpbl9hc3NldF9jb25maWdfcm91dGVAMTAgbWFpbl9hc3NldF9kZWxldGVfcm91dGVAMTEgbWFpbl9tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEyIG1haW5fZGVwbG95X2FwcF9yb3V0ZUAxMyBtYWluX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxNCBtYWluX25vb3BfYXBwX2NhbGxfcm91dGVAMTUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTkKICAgIC8vIGNsYXNzIElubmVyVHJhbnNhY3Rpb25zKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX25vb3BfYXBwX2NhbGxfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIyOS0yMzAKICAgIC8vICMgZXhhbXBsZTogTk9PUF9BUFBfQ0FMTAogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIyOS0yMzAKICAgIC8vICMgZXhhbXBsZTogTk9PUF9BUFBfQ0FMTAogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBub29wX2FwcF9jYWxsCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18zIC8vIDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBwdXNoYnl0ZXMgMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXJjNF9kZXBsb3lfYXBwX3JvdXRlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMTgKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X2RlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVwbG95X2FwcF9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjAyCiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwbG95X2FwcAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNzYtMTc3CiAgICAvLyAjIGV4YW1wbGU6IEdST1VQRURfSU5ORVJfVFhOUwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE3Ni0xNzcKICAgIC8vICMgZXhhbXBsZTogR1JPVVBFRF9JTk5FUl9UWE5TCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIG11bHRpX2lubmVyX3R4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwMGEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0X2RlbGV0ZV9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTY2LTE2NwogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9ERUxFVEUKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjYtMTY3CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0RFTEVURQogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9kZWxldGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfY29uZmlnX3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNDUtMTQ2CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0NPTkZJRwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE0NS0xNDYKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfQ09ORklHCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NldF9yZXZva2Vfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI0LTEyNQogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9SRVZPS0UKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI0LTEyNQogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9SRVZPS0UKICAgIC8vIEBhYmltZXRob2QKICAgIGNhbGxzdWIgYXNzZXRfcmV2b2tlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMDgtMTA5CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0ZSRUVaRQogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMDgtMTA5CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0ZSRUVaRQogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfdHJhbnNmZXJfcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfVFJBTlNGRVIKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfVFJBTlNGRVIKICAgIC8vIEBhYmltZXRob2QKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfb3B0X2luX3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjcwLTcxCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX09QVF9JTgogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjcwLTcxCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX09QVF9JTgogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9vcHRfaW4KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0NwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjM1LTM2CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0NSRUFURQogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9wYXltZW50X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwLTIxCiAgICAvLyAjIGV4YW1wbGU6IFBBWU1FTlQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHBheW1lbnQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMjIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMC0yMgogICAgLy8gIyBleGFtcGxlOiBQQVlNRU5UCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBwYXltZW50KHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMwogICAgLy8gcmVzdWx0ID0gaXR4bi5QYXltZW50KGFtb3VudD01MDAwLCByZWNlaXZlcj1UeG4uc2VuZGVyLCBmZWU9MCkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIHB1c2hpbnQgNTAwMCAvLyA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjQKICAgIC8vIHJldHVybiByZXN1bHQuYW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTozNS0zNwogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9DUkVBVEUKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBmdW5naWJsZV9hc3NldF9jcmVhdGUoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjM4LTQzCiAgICAvLyBpdHhuX3Jlc3VsdCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9MTAwXzAwMF8wMDBfMDAwLAogICAgLy8gICAgIGRlY2ltYWxzPTIsCiAgICAvLyAgICAgdW5pdF9uYW1lPSJSUCIsCiAgICAvLyAgICAgYXNzZXRfbmFtZT0iUm95YWx0eSBQb2ludHMiLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0MgogICAgLy8gYXNzZXRfbmFtZT0iUm95YWx0eSBQb2ludHMiLAogICAgcHVzaGJ5dGVzICJSb3lhbHR5IFBvaW50cyIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjQxCiAgICAvLyB1bml0X25hbWU9IlJQIiwKICAgIHB1c2hieXRlcyAiUlAiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NDAKICAgIC8vIGRlY2ltYWxzPTIsCiAgICBwdXNoaW50IDIgLy8gMgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjM5CiAgICAvLyB0b3RhbD0xMDBfMDAwXzAwMF8wMDAsCiAgICBwdXNoaW50IDEwMDAwMDAwMDAwMCAvLyAxMDAwMDAwMDAwMDAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTozOAogICAgLy8gaXR4bl9yZXN1bHQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgcHVzaGludCAzIC8vIGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTozOC00MwogICAgLy8gaXR4bl9yZXN1bHQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEwMF8wMDBfMDAwXzAwMCwKICAgIC8vICAgICBkZWNpbWFscz0yLAogICAgLy8gICAgIHVuaXRfbmFtZT0iUlAiLAogICAgLy8gICAgIGFzc2V0X25hbWU9IlJveWFsdHkgUG9pbnRzIiwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBc3NldElECiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyByZXR1cm4gaXR4bl9yZXN1bHQuY3JlYXRlZF9hc3NldC5pZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5ub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlKCkgLT4gdWludDY0Ogpub25fZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0Ny00OAogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUoc2VsZikgLT4gVUludDY0OgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjU0LTY0CiAgICAvLyBpdHhuX3Jlc3VsdCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9MTAwLAogICAgLy8gICAgIGRlY2ltYWxzPTIsCiAgICAvLyAgICAgdW5pdF9uYW1lPSJNTCIsCiAgICAvLyAgICAgYXNzZXRfbmFtZT0iTW9uYSBMaXNhIiwKICAgIC8vICAgICB1cmw9Imh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYSIsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo2MAogICAgLy8gbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NjEtNjMKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vIGZyZWV6ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gY2xhd2JhY2s9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cG4gMwogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTkKICAgIC8vIHVybD0iaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIiwKICAgIHB1c2hieXRlcyAiaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVSTAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo1OAogICAgLy8gYXNzZXRfbmFtZT0iTW9uYSBMaXNhIiwKICAgIHB1c2hieXRlcyAiTW9uYSBMaXNhIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTcKICAgIC8vIHVuaXRfbmFtZT0iTUwiLAogICAgcHVzaGJ5dGVzICJNTCIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo1NgogICAgLy8gZGVjaW1hbHM9MiwKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTUKICAgIC8vIHRvdGFsPTEwMCwKICAgIHB1c2hpbnQgMTAwIC8vIDEwMAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjU0CiAgICAvLyBpdHhuX3Jlc3VsdCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjU0LTY0CiAgICAvLyBpdHhuX3Jlc3VsdCA9IGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgdG90YWw9MTAwLAogICAgLy8gICAgIGRlY2ltYWxzPTIsCiAgICAvLyAgICAgdW5pdF9uYW1lPSJNTCIsCiAgICAvLyAgICAgYXNzZXRfbmFtZT0iTW9uYSBMaXNhIiwKICAgIC8vICAgICB1cmw9Imh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYSIsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmcmVlemU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFzc2V0SUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NjYKICAgIC8vIHJldHVybiBpdHhuX3Jlc3VsdC5jcmVhdGVkX2Fzc2V0LmlkCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X29wdF9pbihhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9vcHRfaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjcwLTcyCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX09QVF9JTgogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X29wdF9pbihzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NzMtNzgKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NzYKICAgIC8vIGFzc2V0X2Ftb3VudD0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo3MwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5Ojc3CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo3My03OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3RyYW5zZmVyKGFzc2V0OiB1aW50NjQsIHJlY2VpdmVyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X3RyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo4OS05MQogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9UUkFOU0ZFUgogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X3RyYW5zZmVyKHNlbGYsIGFzc2V0OiBBc3NldCwgcmVjZWl2ZXI6IEFjY291bnQsIGFtb3VudDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjkyLTk3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9cmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo5MgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo5Mi05NwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXJlY2VpdmVyLAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFtb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2ZyZWV6ZShhY2N0X3RvX2JlX2Zyb3plbjogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2ZyZWV6ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTA4LTExMAogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9GUkVFWkUKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBhc3NldF9mcmVlemUoc2VsZiwgYWNjdF90b19iZV9mcm96ZW46IEFjY291bnQsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMTEtMTE2CiAgICAvLyBpdHhuLkFzc2V0RnJlZXplKAogICAgLy8gICAgIGZyZWV6ZV9hY2NvdW50PWFjY3RfdG9fYmVfZnJvemVuLCAgIyBhY2NvdW50IHRvIGJlIGZyb3plbgogICAgLy8gICAgIGZyZWV6ZV9hc3NldD1hc3NldCwKICAgIC8vICAgICBmcm96ZW49VHJ1ZSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTE0CiAgICAvLyBmcm96ZW49VHJ1ZSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0RnJvemVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldEFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTExCiAgICAvLyBpdHhuLkFzc2V0RnJlZXplKAogICAgcHVzaGludCA1IC8vIGFmcnoKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTE1CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMTEtMTE2CiAgICAvLyBpdHhuLkFzc2V0RnJlZXplKAogICAgLy8gICAgIGZyZWV6ZV9hY2NvdW50PWFjY3RfdG9fYmVfZnJvemVuLCAgIyBhY2NvdW50IHRvIGJlIGZyb3plbgogICAgLy8gICAgIGZyZWV6ZV9hc3NldD1hc3NldCwKICAgIC8vICAgICBmcm96ZW49VHJ1ZSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X3Jldm9rZShhc3NldDogdWludDY0LCBhY2NvdW50X3RvX2JlX3Jldm9rZWQ6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfcmV2b2tlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMjQtMTI4CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX1JFVk9LRQogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X3Jldm9rZSgKICAgIC8vICAgICBzZWxmLCBhc3NldDogQXNzZXQsIGFjY291bnRfdG9fYmVfcmV2b2tlZDogQWNjb3VudCwgYW1vdW50OiBVSW50NjQKICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDMgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMjktMTM1CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1hY2NvdW50X3RvX2JlX3Jldm9rZWQsICAjIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjEzMAogICAgLy8gYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjEyOQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgaW50Y18zIC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjEzNAogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI5LTEzNQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9zZW5kZXI9YWNjb3VudF90b19iZV9yZXZva2VkLCAgIyBBc3NldFNlbmRlciBpcyBvbmx5IHVzZWQgaW4gdGhlIGNhc2Ugb2YgY2xhd2JhY2sKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfY29uZmlnKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X2NvbmZpZzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTQ1LTE0NwogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9DT05GSUcKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBhc3NldF9jb25maWcoc2VsZiwgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE0OC0xNTUKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgY29uZmlnX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgY2xhd2JhY2s9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTUwCiAgICAvLyBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNTEKICAgIC8vIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNTIKICAgIC8vIGZyZWV6ZT1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNTMKICAgIC8vIGNsYXdiYWNrPVR4bi5zZW5kZXIsCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawogICAgaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTQ4CiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgcHVzaGludCAzIC8vIGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTU0CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNDgtMTU1CiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIGNvbmZpZ19hc3NldD1hc3NldCwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZT1UeG4uc2VuZGVyLAogICAgLy8gICAgIGNsYXdiYWNrPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9kZWxldGUoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZGVsZXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjYtMTY4CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0RFTEVURQogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X2RlbGV0ZShzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTY5LTE3MgogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBjb25maWdfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTY5CiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgcHVzaGludCAzIC8vIGFjZmcKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTcxCiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjktMTcyCiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIGNvbmZpZ19hc3NldD1hc3NldCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLm11bHRpX2lubmVyX3R4bnMoYXBwX2lkOiB1aW50NjQpIC0+IHVpbnQ2NCwgYnl0ZXM6Cm11bHRpX2lubmVyX3R4bnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE3Ni0xNzgKICAgIC8vICMgZXhhbXBsZTogR1JPVVBFRF9JTk5FUl9UWE5TCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgbXVsdGlfaW5uZXJfdHhucyhzZWxmLCBhcHBfaWQ6IEFwcGxpY2F0aW9uKSAtPiB0dXBsZVtVSW50NjQsIGFyYzQuU3RyaW5nXToKICAgIHByb3RvIDEgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNzkKICAgIC8vIHBheW1lbnRfcGFyYW1zID0gaXR4bi5QYXltZW50KGFtb3VudD01MDAwLCByZWNlaXZlcj1UeG4uc2VuZGVyLCBmZWU9MCkKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTg3CiAgICAvLyBwYXlfdHhuLCBhcHBfY2FsbF90eG4gPSBpdHhuLnN1Ym1pdF90eG5zKHBheW1lbnRfcGFyYW1zLCBhcHBfY2FsbF9wYXJhbXMpCiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE3OQogICAgLy8gcGF5bWVudF9wYXJhbXMgPSBpdHhuLlBheW1lbnQoYW1vdW50PTUwMDAsIHJlY2VpdmVyPVR4bi5zZW5kZXIsIGZlZT0wKQogICAgcHVzaGludCA1MDAwIC8vIDUwMDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTg3CiAgICAvLyBwYXlfdHhuLCBhcHBfY2FsbF90eG4gPSBpdHhuLnN1Ym1pdF90eG5zKHBheW1lbnRfcGFyYW1zLCBhcHBfY2FsbF9wYXJhbXMpCiAgICBpdHhuX25leHQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTgzCiAgICAvLyBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiaGVsbG8oc3RyaW5nKXN0cmluZyIpLCBhcmM0LlN0cmluZygiV29ybGQiKSksCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlY18yIC8vIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODEKICAgIC8vIGFwcF9jYWxsX3BhcmFtcyA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTg0CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODcKICAgIC8vIHBheV90eG4sIGFwcF9jYWxsX3R4biA9IGl0eG4uc3VibWl0X3R4bnMocGF5bWVudF9wYXJhbXMsIGFwcF9jYWxsX3BhcmFtcykKICAgIGl0eG5fc3VibWl0CiAgICBnaXR4biAwIEFtb3VudAogICAgaXR4biBMYXN0TG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE4OQogICAgLy8gaGVsbG9fd29ybGRfcmVzdWx0ID0gYXJjNC5TdHJpbmcuZnJvbV9sb2coYXBwX2NhbGxfdHhuLmxhc3RfbG9nKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOTAKICAgIC8vIHJldHVybiBwYXlfdHhuLmFtb3VudCwgaGVsbG9fd29ybGRfcmVzdWx0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmRlcGxveV9hcHAoKSAtPiB1aW50NjQ6CmRlcGxveV9hcHA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwMi0yMDMKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBkZXBsb3lfYXBwKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMDktMjEzCiAgICAvLyBhcHBfdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZF9jb250cmFjdC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWRfY29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjA3CiAgICAvLyBjb21waWxlZF9jb250cmFjdCA9IGNvbXBpbGVfY29udHJhY3QoSGVsbG9Xb3JsZCkKICAgIGJ5dGVjXzMgLy8gYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBieXRlYyA0IC8vIGJhc2U2NChDakViUVFBMGdBUUN2czRSTmhvQWpnRUFBNEVBUXpFWkZFUXhHRVEyR2dGWEFnQ0lBQ0JKRlJaWEJnSk1VSUFFRlI5OGRVeFFzSUVCUXpFWlFQL1VNUmdVUklFQlE0b0JBWUFIU0dWc2JHOHNJSXYvVUlrPSkKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjA5CiAgICAvLyBhcHBfdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMTIKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwOS0yMTMKICAgIC8vIGFwcF90eG4gPSBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkX2NvbnRyYWN0LmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgY2xlYXJfc3RhdGVfcHJvZ3JhbT1jb21waWxlZF9jb250cmFjdC5jbGVhcl9zdGF0ZV9wcm9ncmFtLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjE2CiAgICAvLyByZXR1cm4gYXBwLmlkCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFyYzRfZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKYXJjNF9kZXBsb3lfYXBwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMTgtMjE5CiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgYXJjNF9kZXBsb3lfYXBwKHNlbGYpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMjMKICAgIC8vIGFwcF90eG4gPSBhcmM0LmFyYzRfY3JlYXRlKEhlbGxvV29ybGQpCiAgICBpdHhuX2JlZ2luCiAgICBieXRlY18zIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgNCAvLyBiYXNlNjQoQ2pFYlFRQTBnQVFDdnM0Uk5ob0FqZ0VBQTRFQVF6RVpGRVF4R0VRMkdnRlhBZ0NJQUNCSkZSWlhCZ0pNVUlBRUZSOThkVXhRc0lFQlF6RVpRUC9VTVJnVVJJRUJRNG9CQVlBSFNHVnNiRzhzSUl2L1VJaz0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMjUKICAgIC8vIHJldHVybiBhcHBfdHhuLmNyZWF0ZWRfYXBwLmlkCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLm5vb3BfYXBwX2NhbGwoYXBwX2lkOiB1aW50NjQpIC0+IGJ5dGVzLCBieXRlczoKbm9vcF9hcHBfY2FsbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjI5LTIzMQogICAgLy8gIyBleGFtcGxlOiBOT09QX0FQUF9DQUxMCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgbm9vcF9hcHBfY2FsbChzZWxmLCBhcHBfaWQ6IEFwcGxpY2F0aW9uKSAtPiB0dXBsZVthcmM0LlN0cmluZywgU3RyaW5nXToKICAgIHByb3RvIDEgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMzItMjM2CiAgICAvLyAjIGludm9rZSBhbiBBQkkgbWV0aG9kCiAgICAvLyBjYWxsX3R4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1hcHBfaWQsCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImhlbGxvKHN0cmluZylzdHJpbmciKSwgYXJjNC5TdHJpbmcoIldvcmxkIikpLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMzUKICAgIC8vIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJoZWxsbyhzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJXb3JsZCIpKSwKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIzMi0yMzMKICAgIC8vICMgaW52b2tlIGFuIEFCSSBtZXRob2QKICAgIC8vIGNhbGxfdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIzMi0yMzYKICAgIC8vICMgaW52b2tlIGFuIEFCSSBtZXRob2QKICAgIC8vIGNhbGxfdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwX2lkPWFwcF9pZCwKICAgIC8vICAgICBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiaGVsbG8oc3RyaW5nKXN0cmluZyIpLCBhcmM0LlN0cmluZygiV29ybGQiKSksCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIzNy0yMzgKICAgIC8vICMgZXh0cmFjdCByZXN1bHQKICAgIC8vIGZpcnN0X2hlbGxvX3dvcmxkX3Jlc3VsdCA9IGFyYzQuU3RyaW5nLmZyb21fbG9nKGNhbGxfdHhuLmxhc3RfbG9nKQogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyNDAtMjQ1CiAgICAvLyAjIE9SLCBjYWxsIGl0IGF1dG9tYXRpYyBBUkM0IGVuY29kaW5nLCB0eXBlIHZhbGlkYXRpb24gYW5kIHJlc3VsdCBoYW5kbGluZwogICAgLy8gc2Vjb25kX2hlbGxvX3dvcmxkX3Jlc3VsdCwgY2FsbF90eG4gPSBhcmM0LmFiaV9jYWxsKCAgIyBkZWNsYXJlIHJldHVybiB0eXBlCiAgICAvLyAgICAgSGVsbG9Xb3JsZC5oZWxsbywgICMgbWV0aG9kIHNpZ25hdHVyZSB0byBjYWxsCiAgICAvLyAgICAgImFnYWluIiwgICMgYWJpIG1ldGhvZCBhcmd1bWVudHMKICAgIC8vICAgICBhcHBfaWQ9YXBwX2lkLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjQzCiAgICAvLyAiYWdhaW4iLCAgIyBhYmkgbWV0aG9kIGFyZ3VtZW50cwogICAgcHVzaGJ5dGVzIDB4MDAwNTYxNjc2MTY5NmUKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjI0MC0yNDUKICAgIC8vICMgT1IsIGNhbGwgaXQgYXV0b21hdGljIEFSQzQgZW5jb2RpbmcsIHR5cGUgdmFsaWRhdGlvbiBhbmQgcmVzdWx0IGhhbmRsaW5nCiAgICAvLyBzZWNvbmRfaGVsbG9fd29ybGRfcmVzdWx0LCBjYWxsX3R4biA9IGFyYzQuYWJpX2NhbGwoICAjIGRlY2xhcmUgcmV0dXJuIHR5cGUKICAgIC8vICAgICBIZWxsb1dvcmxkLmhlbGxvLCAgIyBtZXRob2Qgc2lnbmF0dXJlIHRvIGNhbGwKICAgIC8vICAgICAiYWdhaW4iLCAgIyBhYmkgbWV0aG9kIGFyZ3VtZW50cwogICAgLy8gICAgIGFwcF9pZD1hcHBfaWQsCiAgICAvLyApCiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyNDcKICAgIC8vIHJldHVybiBmaXJzdF9oZWxsb193b3JsZF9yZXN1bHQsIHNlY29uZF9oZWxsb193b3JsZF9yZXN1bHQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [897, 974, 1013], "errorMessage": "ARC4 prefix is valid"}, {"pc": [227, 277, 294, 311, 342, 360, 378, 406, 430, 458, 476, 493, 510], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [532], "errorMessage": "can only call when creating"}, {"pc": [230, 280, 297, 314, 345, 363, 381, 409, 433, 461, 479, 496, 513], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "payment", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "fungible_asset_create", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "non_fungible_asset_create", "returns": {"type": "uint64"}, "desc": "Following the ARC3 standard, the total supply must be 1 for a non-fungible asset.\nIf you want to create fractional NFTs, `total` * `decimals` point must be 1. ex) total=100, decimals=2, 100 * 0.01 = 1", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "asset", "name": "asset"}], "name": "asset_opt_in", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "asset", "name": "asset"}, {"type": "account", "name": "receiver"}, {"type": "uint64", "name": "amount"}], "name": "asset_transfer", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "acct_to_be_frozen"}, {"type": "asset", "name": "asset"}], "name": "asset_freeze", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "asset", "name": "asset"}, {"type": "account", "name": "account_to_be_revoked"}, {"type": "uint64", "name": "amount"}], "name": "asset_revoke", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "asset", "name": "asset"}], "name": "asset_config", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "asset", "name": "asset"}], "name": "asset_delete", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "application", "name": "app_id"}], "name": "multi_inner_txns", "returns": {"type": "(uint64,string)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "deploy_app", "returns": {"type": "uint64"}, "desc": "This method uses the itxn.ApplicationCall to deploy the HelloWorld contract.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "arc4_deploy_app", "returns": {"type": "uint64"}, "desc": "This method uses the arc4.arc4_create to deploy the HelloWorld contract.", "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "application", "name": "app_id"}], "name": "noop_app_call", "returns": {"type": "(string,string)"}, "events": [], "readonly": false, "recommendations": {}}], "name": "InnerTransactions", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {}, "byteCode": {"approval": "CiAEAAEGBCYFBBUffHUEAr7OEQcABVdvcmxkBAqBAUNWCjEbQQA0gAQCvs4RNhoAjgEAA4EAQzEZFEQxGEQ2GgFXAgCIACBJFRZXBgJMUIAEFR98dUxQsIEBQzEZQP/UMRgURIEBQ4oBAYAHSGVsbG8sIIv/UIkxG0EBkIINBCOVACcE6naJ8wT+JkcwBLbCsUgESxnf3QSpDmpPBMUEYoIEWEQA/wSp6BKlBA5zmBQENjF0XQQQqbECBJ0MXeE2GgCODQEdAQwA+wDpAM0AtQCZAIcAdQBWAEUANAACIkMxGRREMRhENhoBF8AyiAKuSRUWVwYCTFBLARUlCBZXBgKAAgAETFBPAlBMUChMULAjQzEZFEQxGESIAnAWKExQsCNDMRkURDEYRIgCTRYoTFCwI0MxGRREMRhENhoBF8AyiAIATBaAAgAKUExQKExQsCNDMRkURDEYRDYaARfAMIgB0CNDMRkURDEYRDYaARfAMIgBnyNDMRkURDEYRDYaARfAMDYaAhfAHDYaAxeIAWcjQzEZFEQxGEQ2GgEXwBw2GgIXwDCIATcjQzEZFEQxGEQ2GgEXwDA2GgIXwBw2GgMXiAEDI0MxGRREMRhENhoBF8AwiADaI0MxGRREMRhEiAB5FihMULAjQzEZFEQxGESIADcWKExQsCNDMRkURDEYRIgAEhYoTFCwI0MxGUD+zTEYFEQjQ7ExALIHgYgnsggjshAisgGztAiJsYAOUm95YWx0eSBQb2ludHOyJoACUlCyJYECsiOBgNDbw/QCsiKBA7IQIrIBs7Q8ibEyCkcDsiyyK7IqsimAHmh0dHBzOi8vbGlua190b19pcGZzL01vbmFfTGlzYbIngAlNb25hIExpc2GyJoACTUyyJYECsiOBZLIigQOyECKyAbO0PImKAQCxMgoishKL/7IRshQlshAisgGziYoDALGL/7ISi/2yEYv+shQlshAisgGziYoCALEjsi+L/7Iti/6yLoEFshAisgGziYoDALEyCov/shKL/rITi/2yEbIUJbIQIrIBs4mKAQCxMgpJMQBJsiyyK7IqsimL/7IhgQOyECKyAbOJigEAsYv/siGBA7IQIrIBs4mKAQIxALGyB4GIJ7III7IQIrIBtimyGiqyGov/shgkshAisgGztwAItD5JVwQATFcABCgSRImxK7JCJwSyQCSyECKyAbO0PYmxK7JCJwSyQCSyECKyAbO0PYmKAQKxKbIaKrIai/+yGCSyECKyAbO0PklXBABMVwAEKBJEsYv/shgpshqABwAFYWdhaW6yGiSyECKyAbO0PklXAAQoEkRXBgCJ", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgNiA0CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMmJlY2UxMSAweDAwMDU1NzZmNzI2YzY0IGJhc2U2NChDb0VCUXc9PSkgYmFzZTY0KENqRWJRUUEwZ0FRQ3ZzNFJOaG9BamdFQUE0RUFRekVaRkVReEdFUTJHZ0ZYQWdDSUFDQkpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNJRUJRekVaUVAvVU1SZ1VSSUVCUTRvQkFZQUhTR1ZzYkc4c0lJdi9VSWs9KQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxOAogICAgcHVzaGJ5dGVzcyAweDIzOTUwMDI3IDB4ZWE3Njg5ZjMgMHhmZTI2NDczMCAweGI2YzJiMTQ4IDB4NGIxOWRmZGQgMHhhOTBlNmE0ZiAweGM1MDQ2MjgyIDB4NTg0NDAwZmYgMHhhOWU4MTJhNSAweDBlNzM5ODE0IDB4MzYzMTc0NWQgMHgxMGE5YjEwMiAweDlkMGM1ZGUxIC8vIG1ldGhvZCAicGF5bWVudCgpdWludDY0IiwgbWV0aG9kICJmdW5naWJsZV9hc3NldF9jcmVhdGUoKXVpbnQ2NCIsIG1ldGhvZCAibm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpdWludDY0IiwgbWV0aG9kICJhc3NldF9vcHRfaW4oYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfdHJhbnNmZXIoYXNzZXQsYWNjb3VudCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfZnJlZXplKGFjY291bnQsYXNzZXQpdm9pZCIsIG1ldGhvZCAiYXNzZXRfcmV2b2tlKGFzc2V0LGFjY291bnQsdWludDY0KXZvaWQiLCBtZXRob2QgImFzc2V0X2NvbmZpZyhhc3NldCl2b2lkIiwgbWV0aG9kICJhc3NldF9kZWxldGUoYXNzZXQpdm9pZCIsIG1ldGhvZCAibXVsdGlfaW5uZXJfdHhucyhhcHBsaWNhdGlvbikodWludDY0LHN0cmluZykiLCBtZXRob2QgImRlcGxveV9hcHAoKXVpbnQ2NCIsIG1ldGhvZCAiYXJjNF9kZXBsb3lfYXBwKCl1aW50NjQiLCBtZXRob2QgIm5vb3BfYXBwX2NhbGwoYXBwbGljYXRpb24pKHN0cmluZyxzdHJpbmcpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9wYXltZW50X3JvdXRlQDMgbWFpbl9mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVANCBtYWluX25vbl9mdW5naWJsZV9hc3NldF9jcmVhdGVfcm91dGVANSBtYWluX2Fzc2V0X29wdF9pbl9yb3V0ZUA2IG1haW5fYXNzZXRfdHJhbnNmZXJfcm91dGVANyBtYWluX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA4IG1haW5fYXNzZXRfcmV2b2tlX3JvdXRlQDkgbWFpbl9hc3NldF9jb25maWdfcm91dGVAMTAgbWFpbl9hc3NldF9kZWxldGVfcm91dGVAMTEgbWFpbl9tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEyIG1haW5fZGVwbG95X2FwcF9yb3V0ZUAxMyBtYWluX2FyYzRfZGVwbG95X2FwcF9yb3V0ZUAxNCBtYWluX25vb3BfYXBwX2NhbGxfcm91dGVAMTUKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTkKICAgIC8vIGNsYXNzIElubmVyVHJhbnNhY3Rpb25zKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX25vb3BfYXBwX2NhbGxfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIyOS0yMzAKICAgIC8vICMgZXhhbXBsZTogTk9PUF9BUFBfQ0FMTAogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIyOS0yMzAKICAgIC8vICMgZXhhbXBsZTogTk9PUF9BUFBfQ0FMTAogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBub29wX2FwcF9jYWxsCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaW50Y18zIC8vIDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBwdXNoYnl0ZXMgMHgwMDA0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXJjNF9kZXBsb3lfYXBwX3JvdXRlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMTgKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBhcmM0X2RlcGxveV9hcHAKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZGVwbG95X2FwcF9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjAyCiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwbG95X2FwcAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9tdWx0aV9pbm5lcl90eG5zX3JvdXRlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNzYtMTc3CiAgICAvLyAjIGV4YW1wbGU6IEdST1VQRURfSU5ORVJfVFhOUwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE3Ni0xNzcKICAgIC8vICMgZXhhbXBsZTogR1JPVVBFRF9JTk5FUl9UWE5TCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIG11bHRpX2lubmVyX3R4bnMKICAgIHN3YXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwMGEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0X2RlbGV0ZV9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTY2LTE2NwogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9ERUxFVEUKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjYtMTY3CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0RFTEVURQogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9kZWxldGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfY29uZmlnX3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNDUtMTQ2CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0NPTkZJRwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE0NS0xNDYKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfQ09ORklHCiAgICAvLyBAYWJpbWV0aG9kCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NldF9yZXZva2Vfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI0LTEyNQogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9SRVZPS0UKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI0LTEyNQogICAgLy8gIyBleGFtcGxlOiBBU1NFVF9SRVZPS0UKICAgIC8vIEBhYmltZXRob2QKICAgIGNhbGxzdWIgYXNzZXRfcmV2b2tlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2Fzc2V0X2ZyZWV6ZV9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMDgtMTA5CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0ZSRUVaRQogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMDgtMTA5CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0ZSRUVaRQogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9mcmVlemUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfdHJhbnNmZXJfcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfVFJBTlNGRVIKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6ODktOTAKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfVFJBTlNGRVIKICAgIC8vIEBhYmltZXRob2QKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfb3B0X2luX3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjcwLTcxCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX09QVF9JTgogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5CiAgICAvLyBjbGFzcyBJbm5lclRyYW5zYWN0aW9ucyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjcwLTcxCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX09QVF9JTgogICAgLy8gQGFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NldF9vcHRfaW4KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0NwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG5vbl9mdW5naWJsZV9hc3NldF9jcmVhdGUKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZnVuZ2libGVfYXNzZXRfY3JlYXRlX3JvdXRlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjM1LTM2CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0NSRUFURQogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9wYXltZW50X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwLTIxCiAgICAvLyAjIGV4YW1wbGU6IFBBWU1FTlQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHBheW1lbnQKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxOQogICAgLy8gY2xhc3MgSW5uZXJUcmFuc2FjdGlvbnMoQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMjIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5wYXltZW50KCkgLT4gdWludDY0OgpwYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMwogICAgLy8gcmVzdWx0ID0gaXR4bi5QYXltZW50KGFtb3VudD01MDAwLCByZWNlaXZlcj1UeG4uc2VuZGVyLCBmZWU9MCkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIHB1c2hpbnQgNTAwMCAvLyA1MDAwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjQKICAgIC8vIHJldHVybiByZXN1bHQuYW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmZ1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKZnVuZ2libGVfYXNzZXRfY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTozOC00MwogICAgLy8gaXR4bl9yZXN1bHQgPSBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIHRvdGFsPTEwMF8wMDBfMDAwXzAwMCwKICAgIC8vICAgICBkZWNpbWFscz0yLAogICAgLy8gICAgIHVuaXRfbmFtZT0iUlAiLAogICAgLy8gICAgIGFzc2V0X25hbWU9IlJveWFsdHkgUG9pbnRzIiwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NDIKICAgIC8vIGFzc2V0X25hbWU9IlJveWFsdHkgUG9pbnRzIiwKICAgIHB1c2hieXRlcyAiUm95YWx0eSBQb2ludHMiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0MQogICAgLy8gdW5pdF9uYW1lPSJSUCIsCiAgICBwdXNoYnl0ZXMgIlJQIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBkZWNpbWFscz0yLAogICAgcHVzaGludCAyIC8vIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTozOQogICAgLy8gdG90YWw9MTAwXzAwMF8wMDBfMDAwLAogICAgcHVzaGludCAxMDAwMDAwMDAwMDAgLy8gMTAwMDAwMDAwMDAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MzgKICAgIC8vIGl0eG5fcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MzgtNDMKICAgIC8vIGl0eG5fcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xMDBfMDAwXzAwMF8wMDAsCiAgICAvLyAgICAgZGVjaW1hbHM9MiwKICAgIC8vICAgICB1bml0X25hbWU9IlJQIiwKICAgIC8vICAgICBhc3NldF9uYW1lPSJSb3lhbHR5IFBvaW50cyIsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo0NQogICAgLy8gcmV0dXJuIGl0eG5fcmVzdWx0LmNyZWF0ZWRfYXNzZXQuaWQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZSgpIC0+IHVpbnQ2NDoKbm9uX2Z1bmdpYmxlX2Fzc2V0X2NyZWF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTQtNjQKICAgIC8vIGl0eG5fcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xMDAsCiAgICAvLyAgICAgZGVjaW1hbHM9MiwKICAgIC8vICAgICB1bml0X25hbWU9Ik1MIiwKICAgIC8vICAgICBhc3NldF9uYW1lPSJNb25hIExpc2EiLAogICAgLy8gICAgIHVybD0iaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjYwCiAgICAvLyBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo2MS02MwogICAgLy8gcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gZnJlZXplPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyBjbGF3YmFjaz1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZHVwbiAzCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TWFuYWdlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo1OQogICAgLy8gdXJsPSJodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EiLAogICAgcHVzaGJ5dGVzICJodHRwczovL2xpbmtfdG9faXBmcy9Nb25hX0xpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjU4CiAgICAvLyBhc3NldF9uYW1lPSJNb25hIExpc2EiLAogICAgcHVzaGJ5dGVzICJNb25hIExpc2EiCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0TmFtZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo1NwogICAgLy8gdW5pdF9uYW1lPSJNTCIsCiAgICBwdXNoYnl0ZXMgIk1MIgogICAgaXR4bl9maWVsZCBDb25maWdBc3NldFVuaXROYW1lCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjU2CiAgICAvLyBkZWNpbWFscz0yLAogICAgcHVzaGludCAyIC8vIDIKICAgIGl0eG5fZmllbGQgQ29uZmlnQXNzZXREZWNpbWFscwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo1NQogICAgLy8gdG90YWw9MTAwLAogICAgcHVzaGludCAxMDAgLy8gMTAwCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTQKICAgIC8vIGl0eG5fcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIHB1c2hpbnQgMyAvLyBhY2ZnCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NTQtNjQKICAgIC8vIGl0eG5fcmVzdWx0ID0gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICB0b3RhbD0xMDAsCiAgICAvLyAgICAgZGVjaW1hbHM9MiwKICAgIC8vICAgICB1bml0X25hbWU9Ik1MIiwKICAgIC8vICAgICBhc3NldF9uYW1lPSJNb25hIExpc2EiLAogICAgLy8gICAgIHVybD0iaHR0cHM6Ly9saW5rX3RvX2lwZnMvTW9uYV9MaXNhIiwKICAgIC8vICAgICBtYW5hZ2VyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGZyZWV6ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGNsYXdiYWNrPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBDcmVhdGVkQXNzZXRJRAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo2NgogICAgLy8gcmV0dXJuIGl0eG5fcmVzdWx0LmNyZWF0ZWRfYXNzZXQuaWQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfb3B0X2luKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CmFzc2V0X29wdF9pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NzAtNzIKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfT1BUX0lOCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgYXNzZXRfb3B0X2luKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo3My03OAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NzQKICAgIC8vIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weTo3NgogICAgLy8gYXNzZXRfYW1vdW50PTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjczCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6NzcKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjczLTc4CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfdHJhbnNmZXIoYXNzZXQ6IHVpbnQ2NCwgcmVjZWl2ZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfdHJhbnNmZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5Ojg5LTkxCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX1RSQU5TRkVSCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgYXNzZXRfdHJhbnNmZXIoc2VsZiwgYXNzZXQ6IEFzc2V0LCByZWNlaXZlcjogQWNjb3VudCwgYW1vdW50OiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAzIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6OTItOTcKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1yZWNlaXZlciwKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGZyYW1lX2RpZyAtMwogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjkyCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6OTYKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjkyLTk3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9cmVjZWl2ZXIsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfZnJlZXplKGFjY3RfdG9fYmVfZnJvemVuOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfZnJlZXplOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMDgtMTEwCiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0ZSRUVaRQogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X2ZyZWV6ZShzZWxmLCBhY2N0X3RvX2JlX2Zyb3plbjogQWNjb3VudCwgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjExMS0xMTYKICAgIC8vIGl0eG4uQXNzZXRGcmVlemUoCiAgICAvLyAgICAgZnJlZXplX2FjY291bnQ9YWNjdF90b19iZV9mcm96ZW4sICAjIGFjY291bnQgdG8gYmUgZnJvemVuCiAgICAvLyAgICAgZnJlZXplX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGZyb3plbj1UcnVlLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMTQKICAgIC8vIGZyb3plbj1UcnVlLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgRnJlZXplQXNzZXRGcm96ZW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBGcmVlemVBc3NldAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEZyZWV6ZUFzc2V0QWNjb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMTEKICAgIC8vIGl0eG4uQXNzZXRGcmVlemUoCiAgICBwdXNoaW50IDUgLy8gYWZyegogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMTUKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjExMS0xMTYKICAgIC8vIGl0eG4uQXNzZXRGcmVlemUoCiAgICAvLyAgICAgZnJlZXplX2FjY291bnQ9YWNjdF90b19iZV9mcm96ZW4sICAjIGFjY291bnQgdG8gYmUgZnJvemVuCiAgICAvLyAgICAgZnJlZXplX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGZyb3plbj1UcnVlLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuYXNzZXRfcmV2b2tlKGFzc2V0OiB1aW50NjQsIGFjY291bnRfdG9fYmVfcmV2b2tlZDogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgphc3NldF9yZXZva2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjEyNC0xMjgKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfUkVWT0tFCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgYXNzZXRfcmV2b2tlKAogICAgLy8gICAgIHNlbGYsIGFzc2V0OiBBc3NldCwgYWNjb3VudF90b19iZV9yZXZva2VkOiBBY2NvdW50LCBhbW91bnQ6IFVJbnQ2NAogICAgLy8gKSAtPiBOb25lOgogICAgcHJvdG8gMyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjEyOS0xMzUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfc2VuZGVyPWFjY291bnRfdG9fYmVfcmV2b2tlZCwgICMgQXNzZXRTZW5kZXIgaXMgb25seSB1c2VkIGluIHRoZSBjYXNlIG9mIGNsYXdiYWNrCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFtb3VudCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTMwCiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTI5CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTM0CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxMjktMTM1CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X3NlbmRlcj1hY2NvdW50X3RvX2JlX3Jldm9rZWQsICAjIEFzc2V0U2VuZGVyIGlzIG9ubHkgdXNlZCBpbiB0aGUgY2FzZSBvZiBjbGF3YmFjawogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1hbW91bnQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hc3NldF9jb25maWcoYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYXNzZXRfY29uZmlnOgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNDUtMTQ3CiAgICAvLyAjIGV4YW1wbGU6IEFTU0VUX0NPTkZJRwogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIGFzc2V0X2NvbmZpZyhzZWxmLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTQ4LTE1NQogICAgLy8gaXR4bi5Bc3NldENvbmZpZygKICAgIC8vICAgICBjb25maWdfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgbWFuYWdlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIHJlc2VydmU9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICBmcmVlemU9VHhuLnNlbmRlciwKICAgIC8vICAgICBjbGF3YmFjaz1UeG4uc2VuZGVyLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNTAKICAgIC8vIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gcmVzZXJ2ZT1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE1MgogICAgLy8gZnJlZXplPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE1MwogICAgLy8gY2xhd2JhY2s9VHhuLnNlbmRlciwKICAgIGR1cAogICAgaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCiAgICBpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0UmVzZXJ2ZQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNDgKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNTQKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE0OC0xNTUKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgY29uZmlnX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIG1hbmFnZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICByZXNlcnZlPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgZnJlZXplPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgY2xhd2JhY2s9VHhuLnNlbmRlciwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuaW5uZXJfdHJhbnNhY3Rpb25zLmNvbnRyYWN0LklubmVyVHJhbnNhY3Rpb25zLmFzc2V0X2RlbGV0ZShhc3NldDogdWludDY0KSAtPiB2b2lkOgphc3NldF9kZWxldGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE2Ni0xNjgKICAgIC8vICMgZXhhbXBsZTogQVNTRVRfREVMRVRFCiAgICAvLyBAYWJpbWV0aG9kCiAgICAvLyBkZWYgYXNzZXRfZGVsZXRlKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjktMTcyCiAgICAvLyBpdHhuLkFzc2V0Q29uZmlnKAogICAgLy8gICAgIGNvbmZpZ19hc3NldD1hc3NldCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBDb25maWdBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNjkKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICBwdXNoaW50IDMgLy8gYWNmZwogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxNzEKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE2OS0xNzIKICAgIC8vIGl0eG4uQXNzZXRDb25maWcoCiAgICAvLyAgICAgY29uZmlnX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMubXVsdGlfaW5uZXJfdHhucyhhcHBfaWQ6IHVpbnQ2NCkgLT4gdWludDY0LCBieXRlczoKbXVsdGlfaW5uZXJfdHhuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTc2LTE3OAogICAgLy8gIyBleGFtcGxlOiBHUk9VUEVEX0lOTkVSX1RYTlMKICAgIC8vIEBhYmltZXRob2QKICAgIC8vIGRlZiBtdWx0aV9pbm5lcl90eG5zKHNlbGYsIGFwcF9pZDogQXBwbGljYXRpb24pIC0+IHR1cGxlW1VJbnQ2NCwgYXJjNC5TdHJpbmddOgogICAgcHJvdG8gMSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE3OQogICAgLy8gcGF5bWVudF9wYXJhbXMgPSBpdHhuLlBheW1lbnQoYW1vdW50PTUwMDAsIHJlY2VpdmVyPVR4bi5zZW5kZXIsIGZlZT0wKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODcKICAgIC8vIHBheV90eG4sIGFwcF9jYWxsX3R4biA9IGl0eG4uc3VibWl0X3R4bnMocGF5bWVudF9wYXJhbXMsIGFwcF9jYWxsX3BhcmFtcykKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTc5CiAgICAvLyBwYXltZW50X3BhcmFtcyA9IGl0eG4uUGF5bWVudChhbW91bnQ9NTAwMCwgcmVjZWl2ZXI9VHhuLnNlbmRlciwgZmVlPTApCiAgICBwdXNoaW50IDUwMDAgLy8gNTAwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODcKICAgIC8vIHBheV90eG4sIGFwcF9jYWxsX3R4biA9IGl0eG4uc3VibWl0X3R4bnMocGF5bWVudF9wYXJhbXMsIGFwcF9jYWxsX3BhcmFtcykKICAgIGl0eG5fbmV4dAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODMKICAgIC8vIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJoZWxsbyhzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJXb3JsZCIpKSwKICAgIGJ5dGVjXzEgLy8gbWV0aG9kICJoZWxsbyhzdHJpbmcpc3RyaW5nIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjXzIgLy8gMHgwMDA1NTc2ZjcyNmM2NAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE4MQogICAgLy8gYXBwX2NhbGxfcGFyYW1zID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToxODQKICAgIC8vIGZlZT0wLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE4NwogICAgLy8gcGF5X3R4biwgYXBwX2NhbGxfdHhuID0gaXR4bi5zdWJtaXRfdHhucyhwYXltZW50X3BhcmFtcywgYXBwX2NhbGxfcGFyYW1zKQogICAgaXR4bl9zdWJtaXQKICAgIGdpdHhuIDAgQW1vdW50CiAgICBpdHhuIExhc3RMb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MTg5CiAgICAvLyBoZWxsb193b3JsZF9yZXN1bHQgPSBhcmM0LlN0cmluZy5mcm9tX2xvZyhhcHBfY2FsbF90eG4ubGFzdF9sb2cpCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gcmV0dXJuIHBheV90eG4uYW1vdW50LCBoZWxsb193b3JsZF9yZXN1bHQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5pbm5lcl90cmFuc2FjdGlvbnMuY29udHJhY3QuSW5uZXJUcmFuc2FjdGlvbnMuZGVwbG95X2FwcCgpIC0+IHVpbnQ2NDoKZGVwbG95X2FwcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjA5LTIxMwogICAgLy8gYXBwX3R4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWRfY29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkX2NvbnRyYWN0LmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwNwogICAgLy8gY29tcGlsZWRfY29udHJhY3QgPSBjb21waWxlX2NvbnRyYWN0KEhlbGxvV29ybGQpCiAgICBieXRlY18zIC8vIGJhc2U2NChDb0VCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgYnl0ZWMgNCAvLyBiYXNlNjQoQ2pFYlFRQTBnQVFDdnM0Uk5ob0FqZ0VBQTRFQVF6RVpGRVF4R0VRMkdnRlhBZ0NJQUNCSkZSWlhCZ0pNVUlBRUZSOThkVXhRc0lFQlF6RVpRUC9VTVJnVVJJRUJRNG9CQVlBSFNHVnNiRzhzSUl2L1VJaz0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIwOQogICAgLy8gYXBwX3R4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjEyCiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMDktMjEzCiAgICAvLyBhcHBfdHhuID0gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZF9jb250cmFjdC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWRfY29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gcmV0dXJuIGFwcC5pZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5hcmM0X2RlcGxveV9hcHAoKSAtPiB1aW50NjQ6CmFyYzRfZGVwbG95X2FwcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjIzCiAgICAvLyBhcHBfdHhuID0gYXJjNC5hcmM0X2NyZWF0ZShIZWxsb1dvcmxkKQogICAgaXR4bl9iZWdpbgogICAgYnl0ZWNfMyAvLyBiYXNlNjQoQ29FQlF3PT0pCiAgICBpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKICAgIGJ5dGVjIDQgLy8gYmFzZTY0KENqRWJRUUEwZ0FRQ3ZzNFJOaG9BamdFQUE0RUFRekVaRkVReEdFUTJHZ0ZYQWdDSUFDQkpGUlpYQmdKTVVJQUVGUjk4ZFV4UXNJRUJRekVaUVAvVU1SZ1VSSUVCUTRvQkFZQUhTR1ZzYkc4c0lJdi9VSWs9KQogICAgaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjI1CiAgICAvLyByZXR1cm4gYXBwX3R4bi5jcmVhdGVkX2FwcC5pZAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmlubmVyX3RyYW5zYWN0aW9ucy5jb250cmFjdC5Jbm5lclRyYW5zYWN0aW9ucy5ub29wX2FwcF9jYWxsKGFwcF9pZDogdWludDY0KSAtPiBieXRlcywgYnl0ZXM6Cm5vb3BfYXBwX2NhbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjIyOS0yMzEKICAgIC8vICMgZXhhbXBsZTogTk9PUF9BUFBfQ0FMTAogICAgLy8gQGFiaW1ldGhvZAogICAgLy8gZGVmIG5vb3BfYXBwX2NhbGwoc2VsZiwgYXBwX2lkOiBBcHBsaWNhdGlvbikgLT4gdHVwbGVbYXJjNC5TdHJpbmcsIFN0cmluZ106CiAgICBwcm90byAxIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjMyLTIzNgogICAgLy8gIyBpbnZva2UgYW4gQUJJIG1ldGhvZAogICAgLy8gY2FsbF90eG4gPSBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIC8vICAgICBhcHBfaWQ9YXBwX2lkLAogICAgLy8gICAgIGFwcF9hcmdzPShhcmM0LmFyYzRfc2lnbmF0dXJlKCJoZWxsbyhzdHJpbmcpc3RyaW5nIiksIGFyYzQuU3RyaW5nKCJXb3JsZCIpKSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjM1CiAgICAvLyBhcHBfYXJncz0oYXJjNC5hcmM0X3NpZ25hdHVyZSgiaGVsbG8oc3RyaW5nKXN0cmluZyIpLCBhcmM0LlN0cmluZygiV29ybGQiKSksCiAgICBieXRlY18xIC8vIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBieXRlY18yIC8vIDB4MDAwNTU3NmY3MjZjNjQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMzItMjMzCiAgICAvLyAjIGludm9rZSBhbiBBQkkgbWV0aG9kCiAgICAvLyBjYWxsX3R4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMzItMjM2CiAgICAvLyAjIGludm9rZSBhbiBBQkkgbWV0aG9kCiAgICAvLyBjYWxsX3R4biA9IGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcF9pZD1hcHBfaWQsCiAgICAvLyAgICAgYXBwX2FyZ3M9KGFyYzQuYXJjNF9zaWduYXR1cmUoImhlbGxvKHN0cmluZylzdHJpbmciKSwgYXJjNC5TdHJpbmcoIldvcmxkIikpLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyMzctMjM4CiAgICAvLyAjIGV4dHJhY3QgcmVzdWx0CiAgICAvLyBmaXJzdF9oZWxsb193b3JsZF9yZXN1bHQgPSBhcmM0LlN0cmluZy5mcm9tX2xvZyhjYWxsX3R4bi5sYXN0X2xvZykKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQVJDNCBwcmVmaXggaXMgdmFsaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9pbm5lcl90cmFuc2FjdGlvbnMvY29udHJhY3QucHk6MjQwLTI0NQogICAgLy8gIyBPUiwgY2FsbCBpdCBhdXRvbWF0aWMgQVJDNCBlbmNvZGluZywgdHlwZSB2YWxpZGF0aW9uIGFuZCByZXN1bHQgaGFuZGxpbmcKICAgIC8vIHNlY29uZF9oZWxsb193b3JsZF9yZXN1bHQsIGNhbGxfdHhuID0gYXJjNC5hYmlfY2FsbCggICMgZGVjbGFyZSByZXR1cm4gdHlwZQogICAgLy8gICAgIEhlbGxvV29ybGQuaGVsbG8sICAjIG1ldGhvZCBzaWduYXR1cmUgdG8gY2FsbAogICAgLy8gICAgICJhZ2FpbiIsICAjIGFiaSBtZXRob2QgYXJndW1lbnRzCiAgICAvLyAgICAgYXBwX2lkPWFwcF9pZCwKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlY18xIC8vIG1ldGhvZCAiaGVsbG8oc3RyaW5nKXN0cmluZyIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvaW5uZXJfdHJhbnNhY3Rpb25zL2NvbnRyYWN0LnB5OjI0MwogICAgLy8gImFnYWluIiwgICMgYWJpIG1ldGhvZCBhcmd1bWVudHMKICAgIHB1c2hieXRlcyAweDAwMDU2MTY3NjE2OTZlCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyNDAtMjQ1CiAgICAvLyAjIE9SLCBjYWxsIGl0IGF1dG9tYXRpYyBBUkM0IGVuY29kaW5nLCB0eXBlIHZhbGlkYXRpb24gYW5kIHJlc3VsdCBoYW5kbGluZwogICAgLy8gc2Vjb25kX2hlbGxvX3dvcmxkX3Jlc3VsdCwgY2FsbF90eG4gPSBhcmM0LmFiaV9jYWxsKCAgIyBkZWNsYXJlIHJldHVybiB0eXBlCiAgICAvLyAgICAgSGVsbG9Xb3JsZC5oZWxsbywgICMgbWV0aG9kIHNpZ25hdHVyZSB0byBjYWxsCiAgICAvLyAgICAgImFnYWluIiwgICMgYWJpIG1ldGhvZCBhcmd1bWVudHMKICAgIC8vICAgICBhcHBfaWQ9YXBwX2lkLAogICAgLy8gKQogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICBleHRyYWN0IDYgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2lubmVyX3RyYW5zYWN0aW9ucy9jb250cmFjdC5weToyNDcKICAgIC8vIHJldHVybiBmaXJzdF9oZWxsb193b3JsZF9yZXN1bHQsIHNlY29uZF9oZWxsb193b3JsZF9yZXN1bHQKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [888, 959, 994], "errorMessage": "ARC4 prefix is valid"}, {"pc": [227, 277, 294, 311, 342, 360, 378, 406, 430, 458, 476, 493, 510], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [532], "errorMessage": "can only call when creating"}, {"pc": [230, 280, 297, 314, 345, 363, 381, 409, 433, 461, 479, 496, 513], "errorMessage": "can only call when not creating"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/local_storage/LocalStorage.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/local_storage/LocalStorage.approval.puya.map index 01eecf3..4038d03 100644 --- a/projects/python-examples/smart_contracts/artifacts/local_storage/LocalStorage.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/local_storage/LocalStorage.approval.puya.map @@ -30,13 +30,72 @@ "stack_out": [] }, "117": { - "op": "pushbytess 0xe6bcc075 0x155a16ab 0xc0621bde 0x96710870 0x57596171 0xc21cee78 0x81c6f03e 0x0f0c1d82 0xf1a77d16 0x812dee17 0x5bb7f47d 0x91763acb // method \"contains_local_data(account)bool\", method \"contains_local_data_example(account)bool\", method \"get_item_local_data(account)uint64\", method \"get_local_data_with_default_int(account)uint64\", method \"maybe_local_data(account)(uint64,bool)\", method \"get_item_local_data_example(account)bool\", method \"get_local_data_with_default(account)bool\", method \"maybe_local_data_example(account)bool\", method \"set_local_int(account,uint64)void\", method \"set_local_data_example(account,asset,account,application,byte[],bool)bool\", method \"delete_local_data(account)void\", method \"delete_local_data_example(account)bool\"" + "op": "pushbytess 0xe6bcc075 0x155a16ab 0xc0621bde 0x96710870 0x57596171 0xc21cee78 0x81c6f03e 0x0f0c1d82 0xf1a77d16 0x812dee17 0x5bb7f47d 0x91763acb // method \"contains_local_data(account)bool\", method \"contains_local_data_example(account)bool\", method \"get_item_local_data(account)uint64\", method \"get_local_data_with_default_int(account)uint64\", method \"maybe_local_data(account)(uint64,bool)\", method \"get_item_local_data_example(account)bool\", method \"get_local_data_with_default(account)bool\", method \"maybe_local_data_example(account)bool\", method \"set_local_int(account,uint64)void\", method \"set_local_data_example(account,asset,account,application,byte[],bool)bool\", method \"delete_local_data(account)void\", method \"delete_local_data_example(account)bool\"", + "defined_out": [ + "Method(contains_local_data(account)bool)", + "Method(contains_local_data_example(account)bool)", + "Method(delete_local_data(account)void)", + "Method(delete_local_data_example(account)bool)", + "Method(get_item_local_data(account)uint64)", + "Method(get_item_local_data_example(account)bool)", + "Method(get_local_data_with_default(account)bool)", + "Method(get_local_data_with_default_int(account)uint64)", + "Method(maybe_local_data(account)(uint64,bool))", + "Method(maybe_local_data_example(account)bool)", + "Method(set_local_data_example(account,asset,account,application,byte[],bool)bool)", + "Method(set_local_int(account,uint64)void)" + ], + "stack_out": [ + "Method(contains_local_data(account)bool)", + "Method(contains_local_data_example(account)bool)", + "Method(get_item_local_data(account)uint64)", + "Method(get_local_data_with_default_int(account)uint64)", + "Method(maybe_local_data(account)(uint64,bool))", + "Method(get_item_local_data_example(account)bool)", + "Method(get_local_data_with_default(account)bool)", + "Method(maybe_local_data_example(account)bool)", + "Method(set_local_int(account,uint64)void)", + "Method(set_local_data_example(account,asset,account,application,byte[],bool)bool)", + "Method(delete_local_data(account)void)", + "Method(delete_local_data_example(account)bool)" + ] }, "179": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(contains_local_data(account)bool)", + "Method(contains_local_data_example(account)bool)", + "Method(delete_local_data(account)void)", + "Method(delete_local_data_example(account)bool)", + "Method(get_item_local_data(account)uint64)", + "Method(get_item_local_data_example(account)bool)", + "Method(get_local_data_with_default(account)bool)", + "Method(get_local_data_with_default_int(account)uint64)", + "Method(maybe_local_data(account)(uint64,bool))", + "Method(maybe_local_data_example(account)bool)", + "Method(set_local_data_example(account,asset,account,application,byte[],bool)bool)", + "Method(set_local_int(account,uint64)void)", + "tmp%2#0" + ], + "stack_out": [ + "Method(contains_local_data(account)bool)", + "Method(contains_local_data_example(account)bool)", + "Method(get_item_local_data(account)uint64)", + "Method(get_local_data_with_default_int(account)uint64)", + "Method(maybe_local_data(account)(uint64,bool))", + "Method(get_item_local_data_example(account)bool)", + "Method(get_local_data_with_default(account)bool)", + "Method(maybe_local_data_example(account)bool)", + "Method(set_local_int(account,uint64)void)", + "Method(set_local_data_example(account,asset,account,application,byte[],bool)bool)", + "Method(delete_local_data(account)void)", + "Method(delete_local_data_example(account)bool)", + "tmp%2#0" + ] }, "182": { - "op": "match main_contains_local_data_route@5 main_contains_local_data_example_route@6 main_get_item_local_data_route@7 main_get_local_data_with_default_int_route@8 main_maybe_local_data_route@9 main_get_item_local_data_example_route@10 main_get_local_data_with_default_route@11 main_maybe_local_data_example_route@12 main_set_local_int_route@13 main_set_local_data_example_route@14 main_delete_local_data_route@15 main_delete_local_data_example_route@16" + "op": "match main_contains_local_data_route@5 main_contains_local_data_example_route@6 main_get_item_local_data_route@7 main_get_local_data_with_default_int_route@8 main_maybe_local_data_route@9 main_get_item_local_data_example_route@10 main_get_local_data_with_default_route@11 main_maybe_local_data_example_route@12 main_set_local_int_route@13 main_set_local_data_example_route@14 main_delete_local_data_route@15 main_delete_local_data_example_route@16", + "stack_out": [] }, "208": { "block": "main_after_if_else@19", @@ -50,26 +109,27 @@ ] }, "209": { - "op": "return" + "op": "return", + "stack_out": [] }, "210": { "block": "main_delete_local_data_example_route@16", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%104#0" + "tmp%88#0" ], "stack_out": [ - "tmp%104#0" + "tmp%88#0" ] }, "212": { "op": "!", "defined_out": [ - "tmp%105#0" + "tmp%89#0" ], "stack_out": [ - "tmp%105#0" + "tmp%89#0" ] }, "213": { @@ -80,10 +140,10 @@ "214": { "op": "txn ApplicationID", "defined_out": [ - "tmp%106#0" + "tmp%90#0" ], "stack_out": [ - "tmp%106#0" + "tmp%90#0" ] }, "216": { @@ -94,28 +154,28 @@ "217": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%108#0" + "reinterpret_bytes[1]%15#0" ], "stack_out": [ - "tmp%108#0" + "reinterpret_bytes[1]%15#0" ] }, "220": { "op": "btoi", "defined_out": [ - "tmp%109#0" + "tmp%92#0" ], "stack_out": [ - "tmp%109#0" + "tmp%92#0" ] }, "221": { "op": "txnas Accounts", "defined_out": [ - "tmp%110#0" + "tmp%93#0" ], "stack_out": [ - "tmp%110#0" + "tmp%93#0" ] }, "223": { @@ -190,10 +250,10 @@ "233": { "op": "concat", "defined_out": [ - "tmp%111#0" + "tmp%94#0" ], "stack_out": [ - "tmp%111#0" + "tmp%94#0" ] }, "234": { @@ -210,26 +270,27 @@ ] }, "236": { - "op": "return" + "op": "return", + "stack_out": [] }, "237": { "block": "main_delete_local_data_route@15", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%97#0" + "tmp%82#0" ], "stack_out": [ - "tmp%97#0" + "tmp%82#0" ] }, "239": { "op": "!", "defined_out": [ - "tmp%98#0" + "tmp%83#0" ], "stack_out": [ - "tmp%98#0" + "tmp%83#0" ] }, "240": { @@ -240,10 +301,10 @@ "241": { "op": "txn ApplicationID", "defined_out": [ - "tmp%99#0" + "tmp%84#0" ], "stack_out": [ - "tmp%99#0" + "tmp%84#0" ] }, "243": { @@ -254,28 +315,28 @@ "244": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%101#0" + "reinterpret_bytes[1]%14#0" ], "stack_out": [ - "tmp%101#0" + "reinterpret_bytes[1]%14#0" ] }, "247": { "op": "btoi", "defined_out": [ - "tmp%102#0" + "tmp%86#0" ], "stack_out": [ - "tmp%102#0" + "tmp%86#0" ] }, "248": { "op": "txnas Accounts", "defined_out": [ - "tmp%103#0" + "tmp%87#0" ], "stack_out": [ - "tmp%103#0" + "tmp%87#0" ] }, "250": { @@ -293,26 +354,27 @@ ] }, "254": { - "op": "return" + "op": "return", + "stack_out": [] }, "255": { "block": "main_set_local_data_example_route@14", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%76#0" + "tmp%66#0" ], "stack_out": [ - "tmp%76#0" + "tmp%66#0" ] }, "257": { "op": "!", "defined_out": [ - "tmp%77#0" + "tmp%67#0" ], "stack_out": [ - "tmp%77#0" + "tmp%67#0" ] }, "258": { @@ -323,10 +385,10 @@ "259": { "op": "txn ApplicationID", "defined_out": [ - "tmp%78#0" + "tmp%68#0" ], "stack_out": [ - "tmp%78#0" + "tmp%68#0" ] }, "261": { @@ -337,238 +399,238 @@ "262": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%80#0" + "reinterpret_bytes[1]%9#0" ], "stack_out": [ - "tmp%80#0" + "reinterpret_bytes[1]%9#0" ] }, "265": { "op": "btoi", "defined_out": [ - "tmp%81#0" + "tmp%70#0" ], "stack_out": [ - "tmp%81#0" + "tmp%70#0" ] }, "266": { "op": "txnas Accounts", "defined_out": [ - "tmp%82#0" + "tmp%71#0" ], "stack_out": [ - "tmp%82#0" + "tmp%71#0" ] }, "268": { "op": "txna ApplicationArgs 2", "defined_out": [ - "tmp%82#0", - "tmp%83#0" + "reinterpret_bytes[1]%10#0", + "tmp%71#0" ], "stack_out": [ - "tmp%82#0", - "tmp%83#0" + "tmp%71#0", + "reinterpret_bytes[1]%10#0" ] }, "271": { "op": "btoi", "defined_out": [ - "tmp%82#0", - "tmp%84#0" + "tmp%71#0", + "tmp%72#0" ], "stack_out": [ - "tmp%82#0", - "tmp%84#0" + "tmp%71#0", + "tmp%72#0" ] }, "272": { "op": "txnas Assets", "defined_out": [ - "tmp%82#0", - "tmp%85#0" + "tmp%71#0", + "tmp%73#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0" + "tmp%71#0", + "tmp%73#0" ] }, "274": { "op": "txna ApplicationArgs 3", "defined_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%86#0" + "reinterpret_bytes[1]%11#0", + "tmp%71#0", + "tmp%73#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%86#0" + "tmp%71#0", + "tmp%73#0", + "reinterpret_bytes[1]%11#0" ] }, "277": { "op": "btoi", "defined_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%87#0" + "tmp%71#0", + "tmp%73#0", + "tmp%74#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%87#0" + "tmp%71#0", + "tmp%73#0", + "tmp%74#0" ] }, "278": { "op": "txnas Accounts", "defined_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0" ] }, "280": { "op": "txna ApplicationArgs 4", "defined_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%89#0" + "reinterpret_bytes[1]%12#0", + "tmp%71#0", + "tmp%73#0", + "tmp%75#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%89#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "reinterpret_bytes[1]%12#0" ] }, "283": { "op": "btoi", "defined_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%90#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%76#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%90#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%76#0" ] }, "284": { "op": "txnas Applications", "defined_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0" ] }, "286": { "op": "txna ApplicationArgs 5", "defined_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0", - "tmp%92#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0", + "tmp%78#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0", - "tmp%92#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0", + "tmp%78#0" ] }, "289": { "op": "extract 2 0", "defined_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0", - "tmp%93#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0", + "tmp%79#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0", - "tmp%93#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0", + "tmp%79#0" ] }, "292": { "op": "txna ApplicationArgs 6", "defined_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0", - "tmp%93#0", - "tmp%94#0" + "reinterpret_bytes[1]%13#0", + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0", + "tmp%79#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0", - "tmp%93#0", - "tmp%94#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0", + "tmp%79#0", + "reinterpret_bytes[1]%13#0" ] }, "295": { "op": "intc_0 // 0", "defined_out": [ "0", - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0", - "tmp%93#0", - "tmp%94#0" + "reinterpret_bytes[1]%13#0", + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0", + "tmp%79#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0", - "tmp%93#0", - "tmp%94#0", + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0", + "tmp%79#0", + "reinterpret_bytes[1]%13#0", "0" ] }, "296": { "op": "getbit", "defined_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0", - "tmp%93#0", - "tmp%95#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0", + "tmp%79#0", + "tmp%80#0" ], "stack_out": [ - "tmp%82#0", - "tmp%85#0", - "tmp%88#0", - "tmp%91#0", - "tmp%93#0", - "tmp%95#0" + "tmp%71#0", + "tmp%73#0", + "tmp%75#0", + "tmp%77#0", + "tmp%79#0", + "tmp%80#0" ] }, "297": { @@ -638,10 +700,10 @@ "307": { "op": "concat", "defined_out": [ - "tmp%96#0" + "tmp%81#0" ], "stack_out": [ - "tmp%96#0" + "tmp%81#0" ] }, "308": { @@ -658,26 +720,27 @@ ] }, "310": { - "op": "return" + "op": "return", + "stack_out": [] }, "311": { "block": "main_set_local_int_route@13", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%67#0" + "tmp%59#0" ], "stack_out": [ - "tmp%67#0" + "tmp%59#0" ] }, "313": { "op": "!", "defined_out": [ - "tmp%68#0" + "tmp%60#0" ], "stack_out": [ - "tmp%68#0" + "tmp%60#0" ] }, "314": { @@ -688,10 +751,10 @@ "315": { "op": "txn ApplicationID", "defined_out": [ - "tmp%69#0" + "tmp%61#0" ], "stack_out": [ - "tmp%69#0" + "tmp%61#0" ] }, "317": { @@ -702,50 +765,50 @@ "318": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%71#0" + "reinterpret_bytes[1]%8#0" ], "stack_out": [ - "tmp%71#0" + "reinterpret_bytes[1]%8#0" ] }, "321": { "op": "btoi", "defined_out": [ - "tmp%72#0" + "tmp%63#0" ], "stack_out": [ - "tmp%72#0" + "tmp%63#0" ] }, "322": { "op": "txnas Accounts", "defined_out": [ - "tmp%73#0" + "tmp%64#0" ], "stack_out": [ - "tmp%73#0" + "tmp%64#0" ] }, "324": { "op": "txna ApplicationArgs 2", "defined_out": [ - "tmp%73#0", - "tmp%74#0" + "reinterpret_bytes[8]%0#0", + "tmp%64#0" ], "stack_out": [ - "tmp%73#0", - "tmp%74#0" + "tmp%64#0", + "reinterpret_bytes[8]%0#0" ] }, "327": { "op": "btoi", "defined_out": [ - "tmp%73#0", - "tmp%75#0" + "tmp%64#0", + "tmp%65#0" ], "stack_out": [ - "tmp%73#0", - "tmp%75#0" + "tmp%64#0", + "tmp%65#0" ] }, "328": { @@ -763,26 +826,27 @@ ] }, "332": { - "op": "return" + "op": "return", + "stack_out": [] }, "333": { "block": "main_maybe_local_data_example_route@12", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%59#0" + "tmp%52#0" ], "stack_out": [ - "tmp%59#0" + "tmp%52#0" ] }, "335": { "op": "!", "defined_out": [ - "tmp%60#0" + "tmp%53#0" ], "stack_out": [ - "tmp%60#0" + "tmp%53#0" ] }, "336": { @@ -793,10 +857,10 @@ "337": { "op": "txn ApplicationID", "defined_out": [ - "tmp%61#0" + "tmp%54#0" ], "stack_out": [ - "tmp%61#0" + "tmp%54#0" ] }, "339": { @@ -807,28 +871,28 @@ "340": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%63#0" + "reinterpret_bytes[1]%7#0" ], "stack_out": [ - "tmp%63#0" + "reinterpret_bytes[1]%7#0" ] }, "343": { "op": "btoi", "defined_out": [ - "tmp%64#0" + "tmp%56#0" ], "stack_out": [ - "tmp%64#0" + "tmp%56#0" ] }, "344": { "op": "txnas Accounts", "defined_out": [ - "tmp%65#0" + "tmp%57#0" ], "stack_out": [ - "tmp%65#0" + "tmp%57#0" ] }, "346": { @@ -903,10 +967,10 @@ "356": { "op": "concat", "defined_out": [ - "tmp%66#0" + "tmp%58#0" ], "stack_out": [ - "tmp%66#0" + "tmp%58#0" ] }, "357": { @@ -923,26 +987,27 @@ ] }, "359": { - "op": "return" + "op": "return", + "stack_out": [] }, "360": { "block": "main_get_local_data_with_default_route@11", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%51#0" + "tmp%45#0" ], "stack_out": [ - "tmp%51#0" + "tmp%45#0" ] }, "362": { "op": "!", "defined_out": [ - "tmp%52#0" + "tmp%46#0" ], "stack_out": [ - "tmp%52#0" + "tmp%46#0" ] }, "363": { @@ -953,10 +1018,10 @@ "364": { "op": "txn ApplicationID", "defined_out": [ - "tmp%53#0" + "tmp%47#0" ], "stack_out": [ - "tmp%53#0" + "tmp%47#0" ] }, "366": { @@ -967,28 +1032,28 @@ "367": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%55#0" + "reinterpret_bytes[1]%6#0" ], "stack_out": [ - "tmp%55#0" + "reinterpret_bytes[1]%6#0" ] }, "370": { "op": "btoi", "defined_out": [ - "tmp%56#0" + "tmp%49#0" ], "stack_out": [ - "tmp%56#0" + "tmp%49#0" ] }, "371": { "op": "txnas Accounts", "defined_out": [ - "tmp%57#0" + "tmp%50#0" ], "stack_out": [ - "tmp%57#0" + "tmp%50#0" ] }, "373": { @@ -1063,10 +1128,10 @@ "383": { "op": "concat", "defined_out": [ - "tmp%58#0" + "tmp%51#0" ], "stack_out": [ - "tmp%58#0" + "tmp%51#0" ] }, "384": { @@ -1083,26 +1148,27 @@ ] }, "386": { - "op": "return" + "op": "return", + "stack_out": [] }, "387": { "block": "main_get_item_local_data_example_route@10", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%43#0" + "tmp%38#0" ], "stack_out": [ - "tmp%43#0" + "tmp%38#0" ] }, "389": { "op": "!", "defined_out": [ - "tmp%44#0" + "tmp%39#0" ], "stack_out": [ - "tmp%44#0" + "tmp%39#0" ] }, "390": { @@ -1113,10 +1179,10 @@ "391": { "op": "txn ApplicationID", "defined_out": [ - "tmp%45#0" + "tmp%40#0" ], "stack_out": [ - "tmp%45#0" + "tmp%40#0" ] }, "393": { @@ -1127,28 +1193,28 @@ "394": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%47#0" + "reinterpret_bytes[1]%5#0" ], "stack_out": [ - "tmp%47#0" + "reinterpret_bytes[1]%5#0" ] }, "397": { "op": "btoi", "defined_out": [ - "tmp%48#0" + "tmp%42#0" ], "stack_out": [ - "tmp%48#0" + "tmp%42#0" ] }, "398": { "op": "txnas Accounts", "defined_out": [ - "tmp%49#0" + "tmp%43#0" ], "stack_out": [ - "tmp%49#0" + "tmp%43#0" ] }, "400": { @@ -1223,10 +1289,10 @@ "410": { "op": "concat", "defined_out": [ - "tmp%50#0" + "tmp%44#0" ], "stack_out": [ - "tmp%50#0" + "tmp%44#0" ] }, "411": { @@ -1243,26 +1309,27 @@ ] }, "413": { - "op": "return" + "op": "return", + "stack_out": [] }, "414": { "block": "main_maybe_local_data_route@9", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%35#0" + "tmp%31#0" ], "stack_out": [ - "tmp%35#0" + "tmp%31#0" ] }, "416": { "op": "!", "defined_out": [ - "tmp%36#0" + "tmp%32#0" ], "stack_out": [ - "tmp%36#0" + "tmp%32#0" ] }, "417": { @@ -1273,10 +1340,10 @@ "418": { "op": "txn ApplicationID", "defined_out": [ - "tmp%37#0" + "tmp%33#0" ], "stack_out": [ - "tmp%37#0" + "tmp%33#0" ] }, "420": { @@ -1287,28 +1354,28 @@ "421": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%39#0" + "reinterpret_bytes[1]%4#0" ], "stack_out": [ - "tmp%39#0" + "reinterpret_bytes[1]%4#0" ] }, "424": { "op": "btoi", "defined_out": [ - "tmp%40#0" + "tmp%35#0" ], "stack_out": [ - "tmp%40#0" + "tmp%35#0" ] }, "425": { "op": "txnas Accounts", "defined_out": [ - "tmp%41#0" + "tmp%36#0" ], "stack_out": [ - "tmp%41#0" + "tmp%36#0" ] }, "427": { @@ -1419,10 +1486,10 @@ "440": { "op": "concat", "defined_out": [ - "tmp%42#0" + "tmp%37#0" ], "stack_out": [ - "tmp%42#0" + "tmp%37#0" ] }, "441": { @@ -1439,26 +1506,27 @@ ] }, "443": { - "op": "return" + "op": "return", + "stack_out": [] }, "444": { "block": "main_get_local_data_with_default_int_route@8", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%27#0" + "tmp%24#0" ], "stack_out": [ - "tmp%27#0" + "tmp%24#0" ] }, "446": { "op": "!", "defined_out": [ - "tmp%28#0" + "tmp%25#0" ], "stack_out": [ - "tmp%28#0" + "tmp%25#0" ] }, "447": { @@ -1469,10 +1537,10 @@ "448": { "op": "txn ApplicationID", "defined_out": [ - "tmp%29#0" + "tmp%26#0" ], "stack_out": [ - "tmp%29#0" + "tmp%26#0" ] }, "450": { @@ -1483,28 +1551,28 @@ "451": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%31#0" + "reinterpret_bytes[1]%3#0" ], "stack_out": [ - "tmp%31#0" + "reinterpret_bytes[1]%3#0" ] }, "454": { "op": "btoi", "defined_out": [ - "tmp%32#0" + "tmp%28#0" ], "stack_out": [ - "tmp%32#0" + "tmp%28#0" ] }, "455": { "op": "txnas Accounts", "defined_out": [ - "tmp%33#0" + "tmp%29#0" ], "stack_out": [ - "tmp%33#0" + "tmp%29#0" ] }, "457": { @@ -1547,10 +1615,10 @@ "463": { "op": "concat", "defined_out": [ - "tmp%34#0" + "tmp%30#0" ], "stack_out": [ - "tmp%34#0" + "tmp%30#0" ] }, "464": { @@ -1567,26 +1635,27 @@ ] }, "466": { - "op": "return" + "op": "return", + "stack_out": [] }, "467": { "block": "main_get_item_local_data_route@7", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%19#0" + "tmp%17#0" ], "stack_out": [ - "tmp%19#0" + "tmp%17#0" ] }, "469": { "op": "!", "defined_out": [ - "tmp%20#0" + "tmp%18#0" ], "stack_out": [ - "tmp%20#0" + "tmp%18#0" ] }, "470": { @@ -1597,10 +1666,10 @@ "471": { "op": "txn ApplicationID", "defined_out": [ - "tmp%21#0" + "tmp%19#0" ], "stack_out": [ - "tmp%21#0" + "tmp%19#0" ] }, "473": { @@ -1611,28 +1680,28 @@ "474": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%23#0" + "reinterpret_bytes[1]%2#0" ], "stack_out": [ - "tmp%23#0" + "reinterpret_bytes[1]%2#0" ] }, "477": { "op": "btoi", "defined_out": [ - "tmp%24#0" + "tmp%21#0" ], "stack_out": [ - "tmp%24#0" + "tmp%21#0" ] }, "478": { "op": "txnas Accounts", "defined_out": [ - "tmp%25#0" + "tmp%22#0" ], "stack_out": [ - "tmp%25#0" + "tmp%22#0" ] }, "480": { @@ -1675,10 +1744,10 @@ "486": { "op": "concat", "defined_out": [ - "tmp%26#0" + "tmp%23#0" ], "stack_out": [ - "tmp%26#0" + "tmp%23#0" ] }, "487": { @@ -1695,26 +1764,27 @@ ] }, "489": { - "op": "return" + "op": "return", + "stack_out": [] }, "490": { "block": "main_contains_local_data_example_route@6", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%11#0" + "tmp%10#0" ], "stack_out": [ - "tmp%11#0" + "tmp%10#0" ] }, "492": { "op": "!", "defined_out": [ - "tmp%12#0" + "tmp%11#0" ], "stack_out": [ - "tmp%12#0" + "tmp%11#0" ] }, "493": { @@ -1725,10 +1795,10 @@ "494": { "op": "txn ApplicationID", "defined_out": [ - "tmp%13#0" + "tmp%12#0" ], "stack_out": [ - "tmp%13#0" + "tmp%12#0" ] }, "496": { @@ -1739,28 +1809,28 @@ "497": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%15#0" + "reinterpret_bytes[1]%1#0" ], "stack_out": [ - "tmp%15#0" + "reinterpret_bytes[1]%1#0" ] }, "500": { "op": "btoi", "defined_out": [ - "tmp%16#0" + "tmp%14#0" ], "stack_out": [ - "tmp%16#0" + "tmp%14#0" ] }, "501": { "op": "txnas Accounts", "defined_out": [ - "tmp%17#0" + "tmp%15#0" ], "stack_out": [ - "tmp%17#0" + "tmp%15#0" ] }, "503": { @@ -1835,10 +1905,10 @@ "513": { "op": "concat", "defined_out": [ - "tmp%18#0" + "tmp%16#0" ], "stack_out": [ - "tmp%18#0" + "tmp%16#0" ] }, "514": { @@ -1855,7 +1925,8 @@ ] }, "516": { - "op": "return" + "op": "return", + "stack_out": [] }, "517": { "block": "main_contains_local_data_route@5", @@ -1899,28 +1970,28 @@ "524": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%7#0" + "reinterpret_bytes[1]%0#0" ], "stack_out": [ - "tmp%7#0" + "reinterpret_bytes[1]%0#0" ] }, "527": { "op": "btoi", "defined_out": [ - "tmp%8#0" + "tmp%7#0" ], "stack_out": [ - "tmp%8#0" + "tmp%7#0" ] }, "528": { "op": "txnas Accounts", "defined_out": [ - "tmp%9#0" + "tmp%8#0" ], "stack_out": [ - "tmp%9#0" + "tmp%8#0" ] }, "530": { @@ -1995,10 +2066,10 @@ "540": { "op": "concat", "defined_out": [ - "tmp%10#0" + "tmp%9#0" ], "stack_out": [ - "tmp%10#0" + "tmp%9#0" ] }, "541": { @@ -2015,17 +2086,18 @@ ] }, "543": { - "op": "return" + "op": "return", + "stack_out": [] }, "544": { "block": "main_bare_routing@17", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%112#0" + "tmp%95#0" ], "stack_out": [ - "tmp%112#0" + "tmp%95#0" ] }, "546": { @@ -2033,20 +2105,40 @@ "stack_out": [] }, "549": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%96#0" + ], + "stack_out": [ + "tmp%96#0" + ] }, "551": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%97#0" + ], + "stack_out": [ + "tmp%97#0" + ] }, "552": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "553": { - "op": "intc_1 // 1" + "op": "intc_1 // 1", + "defined_out": [ + "tmp%0#1" + ], + "stack_out": [ + "tmp%0#1" + ] }, "554": { - "op": "return" + "op": "return", + "stack_out": [] }, "555": { "subroutine": "smart_contracts.local_storage.contract.LocalStorage.contains_local_data", @@ -2571,10 +2663,10 @@ "646": { "op": "select", "defined_out": [ - "tmp%0#0" + "state_get%0#0" ], "stack_out": [ - "tmp%0#0" + "state_get%0#0" ] }, "647": { @@ -2674,10 +2766,19 @@ ] }, "663": { - "op": "intc_0 // 0" + "op": "intc_0 // 0", + "stack_out": [ + "exists#0", + "result#0", + "result#0" + ] }, "664": { - "op": "frame_bury 1" + "op": "frame_bury 1", + "stack_out": [ + "exists#0", + "result#0" + ] }, "666": { "block": "maybe_local_data_after_if_else@2", @@ -3209,30 +3310,30 @@ "751": { "op": "select", "defined_out": [ - "tmp%0#0" + "state_get%0#0" ], "stack_out": [ - "tmp%0#0" + "state_get%0#0" ] }, "752": { "op": "intc_2 // 10", "defined_out": [ "10", - "tmp%0#0" + "state_get%0#0" ], "stack_out": [ - "tmp%0#0", + "state_get%0#0", "10" ] }, "753": { "op": "==", "defined_out": [ - "tmp%1#0" + "tmp%0#0" ], "stack_out": [ - "tmp%1#0" + "tmp%0#0" ] }, "754": { @@ -3300,30 +3401,30 @@ "765": { "op": "select", "defined_out": [ - "tmp%2#0" + "state_get%1#0" ], "stack_out": [ - "tmp%2#0" + "state_get%1#0" ] }, "766": { "op": "bytec 8 // 0x48656c6c6f", "defined_out": [ "0x48656c6c6f", - "tmp%2#0" + "state_get%1#0" ], "stack_out": [ - "tmp%2#0", + "state_get%1#0", "0x48656c6c6f" ] }, "768": { "op": "==", "defined_out": [ - "tmp%3#0" + "tmp%1#0" ], "stack_out": [ - "tmp%3#0" + "tmp%1#0" ] }, "769": { @@ -3386,10 +3487,10 @@ "779": { "op": "select", "defined_out": [ - "tmp%4#0" + "state_get%2#0" ], "stack_out": [ - "tmp%4#0" + "state_get%2#0" ] }, "780": { @@ -3452,26 +3553,26 @@ "790": { "op": "select", "defined_out": [ - "tmp%5#0" + "state_get%3#0" ], "stack_out": [ - "tmp%5#0" + "state_get%3#0" ] }, "791": { "op": "intc_2 // 10", "stack_out": [ - "tmp%5#0", + "state_get%3#0", "10" ] }, "792": { "op": "==", "defined_out": [ - "tmp%6#0" + "tmp%2#0" ], "stack_out": [ - "tmp%6#0" + "tmp%2#0" ] }, "793": { @@ -3534,26 +3635,26 @@ "803": { "op": "select", "defined_out": [ - "tmp%7#0" + "state_get%4#0" ], "stack_out": [ - "tmp%7#0" + "state_get%4#0" ] }, "804": { "op": "intc_2 // 10", "stack_out": [ - "tmp%7#0", + "state_get%4#0", "10" ] }, "805": { "op": "==", "defined_out": [ - "tmp%8#0" + "tmp%3#0" ], "stack_out": [ - "tmp%8#0" + "tmp%3#0" ] }, "806": { @@ -3627,26 +3728,26 @@ "818": { "op": "select", "defined_out": [ - "tmp%11#0" + "state_get%5#0" ], "stack_out": [ - "tmp%11#0" + "state_get%5#0" ] }, "819": { "op": "bytec 8 // 0x48656c6c6f", "stack_out": [ - "tmp%11#0", + "state_get%5#0", "0x48656c6c6f" ] }, "821": { "op": "==", "defined_out": [ - "tmp%14#0" + "tmp%8#0" ], "stack_out": [ - "tmp%14#0" + "tmp%8#0" ] }, "822": { diff --git a/projects/python-examples/smart_contracts/artifacts/local_storage/LocalStorage.arc56.json b/projects/python-examples/smart_contracts/artifacts/local_storage/LocalStorage.arc56.json index 84d4c43..ba5056b 100644 --- a/projects/python-examples/smart_contracts/artifacts/local_storage/LocalStorage.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/local_storage/LocalStorage.arc56.json @@ -467,8 +467,8 @@ "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/local_storage/local_storage_client.py b/projects/python-examples/smart_contracts/artifacts/local_storage/local_storage_client.py index c6a8489..832f88e 100644 --- a/projects/python-examples/smart_contracts/artifacts/local_storage/local_storage_client.py +++ b/projects/python-examples/smart_contracts/artifacts/local_storage/local_storage_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "contains_local_data", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "contains_local_data_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "get_item_local_data", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "get_local_data_with_default_int", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "maybe_local_data", "returns": {"type": "(uint64,bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "get_item_local_data_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "get_local_data_with_default", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "maybe_local_data_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}, {"type": "uint64", "name": "value"}], "name": "set_local_int", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}, {"type": "asset", "name": "value_asset"}, {"type": "account", "name": "value_account"}, {"type": "application", "name": "value_appln"}, {"type": "byte[]", "name": "value_byte"}, {"type": "bool", "name": "value_bool"}], "name": "set_local_data_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "delete_local_data", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "delete_local_data_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}], "name": "LocalStorage", "state": {"keys": {"box": {}, "global": {}, "local": {"local_int": {"key": "bG9jYWxfaW50", "keyType": "AVMString", "valueType": "AVMUint64"}, "local_bytes": {"key": "bG9jYWxfYnl0ZXM=", "keyType": "AVMString", "valueType": "AVMBytes"}, "local_bool": {"key": "bG9jYWxfYm9vbA==", "keyType": "AVMString", "valueType": "AVMUint64"}, "local_asset": {"key": "bG9jYWxfYXNzZXQ=", "keyType": "AVMString", "valueType": "AVMUint64"}, "local_application": {"key": "bG9jYWxfYXBwbGljYXRpb24=", "keyType": "AVMString", "valueType": "AVMUint64"}, "local_account": {"key": "bG9jYWxfYWNjb3VudA==", "keyType": "AVMString", "valueType": "AVMBytes"}}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 2, "ints": 4}}}, "structs": {}, "byteCode": {"approval": "CiADAAEKJgoEFR98dQlsb2NhbF9pbnQBAA1sb2NhbF9hY2NvdW50C2xvY2FsX2J5dGVzCmxvY2FsX2Jvb2wLbG9jYWxfYXNzZXQRbG9jYWxfYXBwbGljYXRpb24FSGVsbG8NRGVmYXVsdCBWYWx1ZTEbQQGrggwE5rzAdQQVWharBMBiG94ElnEIcARXWWFxBMIc7ngEgcbwPgQPDB2CBPGnfRYEgS3uFwRbt/R9BJF2Oss2GgCODAE1ARoBAwDsAM4AswCYAH0AZwAvAB0AAiJDMRkURDEYRDYaARfAHIgDByoiTwJUKExQsCNDMRkURDEYRDYaARfAHIgC5CNDMRkURDEYRDYaARfAHDYaAhfAMDYaAxfAHDYaBBfAMjYaBVcCADYaBiJTiAJYKiJPAlQoTFCwI0MxGRREMRhENhoBF8AcNhoCF4gCLyNDMRkURDEYRDYaARfAHIgB3CoiTwJUKExQsCNDMRkURDEYRDYaARfAHIgBbCoiTwJUKExQsCNDMRkURDEYRDYaARfAHIgBECoiTwJUKExQsCNDMRkURDEYRDYaARfAHIgA2kwWKiJPA1RQKExQsCNDMRkURDEYRDYaARfAHIgArxYoTFCwI0MxGRREMRhENhoBF8AciACOFihMULAjQzEZFEQxGEQ2GgEXwByIAD4qIk8CVChMULAjQzEZFEQxGEQ2GgEXwByIABYqIk8CVChMULAjQzEZQP6rMRgURCNDigEBi/8iKWNFAUQjiYoBAYv/IiljRQFEi/8iJwRjRQFEi/8iJwVjRQFEi/8iJwZjRQFEi/8iJwdjRQFEi/8iK2NFAUQjiYoBAYv/IiljRImKAQGL/yIpYyJOAk2JigECi/8iKWNJTwJMQAADIowBiwGLAE8DTwOJigEBi/8iKWNEJBJEi/8iJwRjRCcIEkSL/yInBWNERIv/IicGY0QkEkSL/yInB2NEJBJEi/8iK2NEIkQnCBJEI4mKAQGL/yIpYyJOAk0kEkSL/yInBGMnCU4CTScIEkSL/yInBWMiTgJNRIv/IicGYyJOAk0kEkSL/yInB2MiTgJNJBJEIkSL/yIrYycJTgJNJwgSRCOJigEBi/8iKWNEJBJEi/8iJwRjRCcIEkSL/yInBWNERIv/IicGY0QkEkSL/yInB2NEJBJEi/8iK2NEIkQnCBJEI4mKAgCL/imL/2aJigYBi/onBIv+Zov6IicEY0SL/hJEi/onBYv/Zov6IicFY0SL/xJEi/onBov7Zov6IicGY0SL+xJEi/onB4v9Zov6IicHY0SL/RJEi/ori/xmi/oiK2NEi/wSRCOJigEAi/8raImKAQGL/yloi/8nBGiL/ycFaIv/JwZoi/8nB2iL/ytoI4k=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMubG9jYWxfc3RvcmFnZS5jb250cmFjdC5Mb2NhbFN0b3JhZ2UuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDEwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImxvY2FsX2ludCIgMHgwMCAibG9jYWxfYWNjb3VudCIgImxvY2FsX2J5dGVzIiAibG9jYWxfYm9vbCIgImxvY2FsX2Fzc2V0IiAibG9jYWxfYXBwbGljYXRpb24iIDB4NDg2NTZjNmM2ZiAweDQ0NjU2NjYxNzU2Yzc0MjA1NjYxNmM3NTY1CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgTG9jYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTcKICAgIHB1c2hieXRlc3MgMHhlNmJjYzA3NSAweDE1NWExNmFiIDB4YzA2MjFiZGUgMHg5NjcxMDg3MCAweDU3NTk2MTcxIDB4YzIxY2VlNzggMHg4MWM2ZjAzZSAweDBmMGMxZDgyIDB4ZjFhNzdkMTYgMHg4MTJkZWUxNyAweDViYjdmNDdkIDB4OTE3NjNhY2IgLy8gbWV0aG9kICJjb250YWluc19sb2NhbF9kYXRhKGFjY291bnQpYm9vbCIsIG1ldGhvZCAiY29udGFpbnNfbG9jYWxfZGF0YV9leGFtcGxlKGFjY291bnQpYm9vbCIsIG1ldGhvZCAiZ2V0X2l0ZW1fbG9jYWxfZGF0YShhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2xvY2FsX2RhdGFfd2l0aF9kZWZhdWx0X2ludChhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAibWF5YmVfbG9jYWxfZGF0YShhY2NvdW50KSh1aW50NjQsYm9vbCkiLCBtZXRob2QgImdldF9pdGVtX2xvY2FsX2RhdGFfZXhhbXBsZShhY2NvdW50KWJvb2wiLCBtZXRob2QgImdldF9sb2NhbF9kYXRhX3dpdGhfZGVmYXVsdChhY2NvdW50KWJvb2wiLCBtZXRob2QgIm1heWJlX2xvY2FsX2RhdGFfZXhhbXBsZShhY2NvdW50KWJvb2wiLCBtZXRob2QgInNldF9sb2NhbF9pbnQoYWNjb3VudCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0X2xvY2FsX2RhdGFfZXhhbXBsZShhY2NvdW50LGFzc2V0LGFjY291bnQsYXBwbGljYXRpb24sYnl0ZVtdLGJvb2wpYm9vbCIsIG1ldGhvZCAiZGVsZXRlX2xvY2FsX2RhdGEoYWNjb3VudCl2b2lkIiwgbWV0aG9kICJkZWxldGVfbG9jYWxfZGF0YV9leGFtcGxlKGFjY291bnQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY29udGFpbnNfbG9jYWxfZGF0YV9yb3V0ZUA1IG1haW5fY29udGFpbnNfbG9jYWxfZGF0YV9leGFtcGxlX3JvdXRlQDYgbWFpbl9nZXRfaXRlbV9sb2NhbF9kYXRhX3JvdXRlQDcgbWFpbl9nZXRfbG9jYWxfZGF0YV93aXRoX2RlZmF1bHRfaW50X3JvdXRlQDggbWFpbl9tYXliZV9sb2NhbF9kYXRhX3JvdXRlQDkgbWFpbl9nZXRfaXRlbV9sb2NhbF9kYXRhX2V4YW1wbGVfcm91dGVAMTAgbWFpbl9nZXRfbG9jYWxfZGF0YV93aXRoX2RlZmF1bHRfcm91dGVAMTEgbWFpbl9tYXliZV9sb2NhbF9kYXRhX2V4YW1wbGVfcm91dGVAMTIgbWFpbl9zZXRfbG9jYWxfaW50X3JvdXRlQDEzIG1haW5fc2V0X2xvY2FsX2RhdGFfZXhhbXBsZV9yb3V0ZUAxNCBtYWluX2RlbGV0ZV9sb2NhbF9kYXRhX3JvdXRlQDE1IG1haW5fZGVsZXRlX2xvY2FsX2RhdGFfZXhhbXBsZV9yb3V0ZUAxNgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9kZWxldGVfbG9jYWxfZGF0YV9leGFtcGxlX3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTg0LTE4NQogICAgLy8gIyBleGFtcGxlOiBERUxFVEVfTE9DQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgTG9jYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTg0LTE4NQogICAgLy8gIyBleGFtcGxlOiBERUxFVEVfTE9DQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkZWxldGVfbG9jYWxfZGF0YV9leGFtcGxlCiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVfbG9jYWxfZGF0YV9yb3V0ZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3Ny0xNzgKICAgIC8vICMgZXhhbXBsZTogREVMRVRFX0xPQ0FMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3Ny0xNzgKICAgIC8vICMgZXhhbXBsZTogREVMRVRFX0xPQ0FMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZGVsZXRlX2xvY2FsX2RhdGEKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2xvY2FsX2RhdGFfZXhhbXBsZV9yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0Ny0xNDgKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfTE9DQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgTG9jYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTQ3LTE0OAogICAgLy8gIyBleGFtcGxlOiBXUklURV9MT0NBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9sb2NhbF9kYXRhX2V4YW1wbGUKICAgIGJ5dGVjXzIgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9sb2NhbF9pbnRfcm91dGVAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDAtMTQxCiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0xPQ0FMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0MC0xNDEKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfTE9DQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBzZXRfbG9jYWxfaW50CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2xvY2FsX2RhdGFfZXhhbXBsZV9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzCiAgICAvLyBjbGFzcyBMb2NhbFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBtYXliZV9sb2NhbF9kYXRhX2V4YW1wbGUKICAgIGJ5dGVjXzIgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9sb2NhbF9kYXRhX3dpdGhfZGVmYXVsdF9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2xvY2FsX2RhdGFfd2l0aF9kZWZhdWx0CiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaXRlbV9sb2NhbF9kYXRhX2V4YW1wbGVfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo2OC02OQogICAgLy8gIyBleGFtcGxlOiBSRUFEX0xPQ0FMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY4LTY5CiAgICAvLyAjIGV4YW1wbGU6IFJFQURfTE9DQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBnZXRfaXRlbV9sb2NhbF9kYXRhX2V4YW1wbGUKICAgIGJ5dGVjXzIgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2xvY2FsX2RhdGFfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU3LTU4CiAgICAvLyAjIG1heWJlIGZ1bmN0aW9uCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU3LTU4CiAgICAvLyAjIG1heWJlIGZ1bmN0aW9uCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgbWF5YmVfbG9jYWxfZGF0YQogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWNfMiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfbG9jYWxfZGF0YV93aXRoX2RlZmF1bHRfaW50X3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo1Mi01MwogICAgLy8gIyBnZXQgZnVuY3Rpb24KICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgTG9jYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NTItNTMKICAgIC8vICMgZ2V0IGZ1bmN0aW9uCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2xvY2FsX2RhdGFfd2l0aF9kZWZhdWx0X2ludAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaXRlbV9sb2NhbF9kYXRhX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo0Ny00OAogICAgLy8gIyBleGFtcGxlOiBSRUFEX0xPQ0FMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ3LTQ4CiAgICAvLyAjIGV4YW1wbGU6IFJFQURfTE9DQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBnZXRfaXRlbV9sb2NhbF9kYXRhCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NvbnRhaW5zX2xvY2FsX2RhdGFfZXhhbXBsZV9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MzQtMzUKICAgIC8vICMgZXhhbXBsZTogQ09OVEFJTl9QUk9QRVJUWV9MT0NBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzCiAgICAvLyBjbGFzcyBMb2NhbFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTozNC0zNQogICAgLy8gIyBleGFtcGxlOiBDT05UQUlOX1BST1BFUlRZX0xPQ0FMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgY29udGFpbnNfbG9jYWxfZGF0YV9leGFtcGxlCiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jb250YWluc19sb2NhbF9kYXRhX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToyNi0yNwogICAgLy8gIyBleGFtcGxlOiBDT05UQUlOX1BST1BFUlRZX0xPQ0FMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2LTI3CiAgICAvLyAjIGV4YW1wbGU6IENPTlRBSU5fUFJPUEVSVFlfTE9DQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBjb250YWluc19sb2NhbF9kYXRhCiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgTG9jYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5sb2NhbF9zdG9yYWdlLmNvbnRyYWN0LkxvY2FsU3RvcmFnZS5jb250YWluc19sb2NhbF9kYXRhKGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0Ogpjb250YWluc19sb2NhbF9kYXRhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MjYtMjgKICAgIC8vICMgZXhhbXBsZTogQ09OVEFJTl9QUk9QRVJUWV9MT0NBTF9TVEFURQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgY29udGFpbnNfbG9jYWxfZGF0YShzZWxmLCBmb3JfYWNjb3VudDogQWNjb3VudCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MjkKICAgIC8vIGFzc2VydCBmb3JfYWNjb3VudCBpbiBzZWxmLmxvY2FsX2ludCAgIyBVaW50NjQKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxvY2FsX2ludCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTozMAogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMubG9jYWxfc3RvcmFnZS5jb250cmFjdC5Mb2NhbFN0b3JhZ2UuY29udGFpbnNfbG9jYWxfZGF0YV9leGFtcGxlKGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0Ogpjb250YWluc19sb2NhbF9kYXRhX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTozNC0zNgogICAgLy8gIyBleGFtcGxlOiBDT05UQUlOX1BST1BFUlRZX0xPQ0FMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBjb250YWluc19sb2NhbF9kYXRhX2V4YW1wbGUoc2VsZiwgZm9yX2FjY291bnQ6IEFjY291bnQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM3CiAgICAvLyBhc3NlcnQgZm9yX2FjY291bnQgaW4gc2VsZi5sb2NhbF9pbnQgICMgVWludDY0CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsb2NhbF9pbnQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MzgKICAgIC8vIGFzc2VydCBmb3JfYWNjb3VudCBpbiBzZWxmLmxvY2FsX2J5dGVzICAjIEJ5dGVzCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJsb2NhbF9ieXRlcyIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTozOQogICAgLy8gYXNzZXJ0IGZvcl9hY2NvdW50IGluIHNlbGYubG9jYWxfYm9vbCAgIyBCb29sCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJsb2NhbF9ib29sIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBhc3NlcnQgZm9yX2FjY291bnQgaW4gc2VsZi5sb2NhbF9hc3NldCAgIyBBc3NldAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAibG9jYWxfYXNzZXQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NDEKICAgIC8vIGFzc2VydCBmb3JfYWNjb3VudCBpbiBzZWxmLmxvY2FsX2FwcGxpY2F0aW9uICAjIEFwcGxpY2F0aW9uCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJsb2NhbF9hcHBsaWNhdGlvbiIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo0MgogICAgLy8gYXNzZXJ0IGZvcl9hY2NvdW50IGluIHNlbGYubG9jYWxfYWNjb3VudCAgIyBBY2NvdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQzCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5sb2NhbF9zdG9yYWdlLmNvbnRyYWN0LkxvY2FsU3RvcmFnZS5nZXRfaXRlbV9sb2NhbF9kYXRhKGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0OgpnZXRfaXRlbV9sb2NhbF9kYXRhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NDctNDkKICAgIC8vICMgZXhhbXBsZTogUkVBRF9MT0NBTF9TVEFURQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZ2V0X2l0ZW1fbG9jYWxfZGF0YShzZWxmLCBmb3JfYWNjb3VudDogQWNjb3VudCkgLT4gVUludDY0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo1MAogICAgLy8gcmV0dXJuIHNlbGYubG9jYWxfaW50W2Zvcl9hY2NvdW50XQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibG9jYWxfaW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jYWxfaW50IGV4aXN0cyBmb3IgYWNjb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmxvY2FsX3N0b3JhZ2UuY29udHJhY3QuTG9jYWxTdG9yYWdlLmdldF9sb2NhbF9kYXRhX3dpdGhfZGVmYXVsdF9pbnQoZm9yX2FjY291bnQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldF9sb2NhbF9kYXRhX3dpdGhfZGVmYXVsdF9pbnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo1Mi01NAogICAgLy8gIyBnZXQgZnVuY3Rpb24KICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9sb2NhbF9kYXRhX3dpdGhfZGVmYXVsdF9pbnQoc2VsZiwgZm9yX2FjY291bnQ6IEFjY291bnQpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NTUKICAgIC8vIHJldHVybiBzZWxmLmxvY2FsX2ludC5nZXQoZm9yX2FjY291bnQsIGRlZmF1bHQ9VUludDY0KDApKSAgIyBVaW50NjQKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxvY2FsX2ludCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGludGNfMCAvLyAwCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5sb2NhbF9zdG9yYWdlLmNvbnRyYWN0LkxvY2FsU3RvcmFnZS5tYXliZV9sb2NhbF9kYXRhKGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0LCB1aW50NjQ6Cm1heWJlX2xvY2FsX2RhdGE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo1Ny01OQogICAgLy8gIyBtYXliZSBmdW5jdGlvbgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgbWF5YmVfbG9jYWxfZGF0YShzZWxmLCBmb3JfYWNjb3VudDogQWNjb3VudCkgLT4gdHVwbGVbVUludDY0LCBib29sXToKICAgIHByb3RvIDEgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NjAtNjEKICAgIC8vICMgdXNlZCB0byBnZXQgZGF0YSBvciBhc3NlcnQgaW50CiAgICAvLyByZXN1bHQsIGV4aXN0cyA9IHNlbGYubG9jYWxfaW50Lm1heWJlKGZvcl9hY2NvdW50KSAgIyBVaW50NjQKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxvY2FsX2ludCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo2MgogICAgLy8gaWYgbm90IGV4aXN0czoKICAgIGJueiBtYXliZV9sb2NhbF9kYXRhX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NjMKICAgIC8vIHJlc3VsdCA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMQoKbWF5YmVfbG9jYWxfZGF0YV9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo2NAogICAgLy8gcmV0dXJuIHJlc3VsdCwgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMubG9jYWxfc3RvcmFnZS5jb250cmFjdC5Mb2NhbFN0b3JhZ2UuZ2V0X2l0ZW1fbG9jYWxfZGF0YV9leGFtcGxlKGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0OgpnZXRfaXRlbV9sb2NhbF9kYXRhX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo2OC03MAogICAgLy8gIyBleGFtcGxlOiBSRUFEX0xPQ0FMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBnZXRfaXRlbV9sb2NhbF9kYXRhX2V4YW1wbGUoc2VsZiwgZm9yX2FjY291bnQ6IEFjY291bnQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjcxCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9pbnRbZm9yX2FjY291bnRdID09IFVJbnQ2NCgKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxvY2FsX2ludCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxvY2FsX2ludCBleGlzdHMgZm9yIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjcxLTczCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9pbnRbZm9yX2FjY291bnRdID09IFVJbnQ2NCgKICAgIC8vICAgICAxMAogICAgLy8gKSAgIyBVaW50NjQgLSByZXR1cm5zIGd1cmFudGVlZCBkYXRhCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9ieXRlc1tmb3JfYWNjb3VudF0gPT0gYiJIZWxsbyIgICMgQnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImxvY2FsX2J5dGVzIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jYWxfYnl0ZXMgZXhpc3RzIGZvciBhY2NvdW50CiAgICBieXRlYyA4IC8vIDB4NDg2NTZjNmM2ZgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NzUKICAgIC8vIGFzc2VydCBib29sKHNlbGYubG9jYWxfYm9vbFtmb3JfYWNjb3VudF0pICAjIEJvb2wKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImxvY2FsX2Jvb2wiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sb2NhbF9ib29sIGV4aXN0cyBmb3IgYWNjb3VudAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo3NgogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYXNzZXRbZm9yX2FjY291bnRdID09IEFzc2V0KFVJbnQ2NCgxMCkpICAjIEFzc2V0CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJsb2NhbF9hc3NldCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxvY2FsX2Fzc2V0IGV4aXN0cyBmb3IgYWNjb3VudAogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo3NwogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYXBwbGljYXRpb25bZm9yX2FjY291bnRdID09IEFwcGxpY2F0aW9uKAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAibG9jYWxfYXBwbGljYXRpb24iCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sb2NhbF9hcHBsaWNhdGlvbiBleGlzdHMgZm9yIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBVSW50NjQoMTApCiAgICBpbnRjXzIgLy8gMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc3LTc5CiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9hcHBsaWNhdGlvbltmb3JfYWNjb3VudF0gPT0gQXBwbGljYXRpb24oCiAgICAvLyAgICAgVUludDY0KDEwKQogICAgLy8gKSAgIyBBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6ODAKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2FjY291bnRbZm9yX2FjY291bnRdID09IEFjY291bnQoQnl0ZXMoYiJIZWxsbyIpKSAgIyBBY2NvdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jYWxfYWNjb3VudCBleGlzdHMgZm9yIGFjY291bnQKICAgIGludGNfMCAvLyAwCiAgICBhc3NlcnQgLy8gQWRkcmVzcyBsZW5ndGggaXMgMzIgYnl0ZXMKICAgIGJ5dGVjIDggLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo4MQogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMubG9jYWxfc3RvcmFnZS5jb250cmFjdC5Mb2NhbFN0b3JhZ2UuZ2V0X2xvY2FsX2RhdGFfd2l0aF9kZWZhdWx0KGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0OgpnZXRfbG9jYWxfZGF0YV93aXRoX2RlZmF1bHQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo4My04NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZ2V0X2xvY2FsX2RhdGFfd2l0aF9kZWZhdWx0KHNlbGYsIGZvcl9hY2NvdW50OiBBY2NvdW50KSAtPiBib29sOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo4NQogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfaW50LmdldChmb3JfYWNjb3VudCwgZGVmYXVsdD1VSW50NjQoMCkpID09IFVJbnQ2NCgKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxvY2FsX2ludCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGludGNfMCAvLyAwCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg1LTg3CiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9pbnQuZ2V0KGZvcl9hY2NvdW50LCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KAogICAgLy8gICAgIDEwCiAgICAvLyApICAjIFVpbnQ2NAogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo4OC05MAogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYnl0ZXMuZ2V0KAogICAgLy8gICAgIGZvcl9hY2NvdW50LCBkZWZhdWx0PUJ5dGVzKGIiRGVmYXVsdCBWYWx1ZSIpCiAgICAvLyApID09IEJ5dGVzKAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6ODgKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2J5dGVzLmdldCgKICAgIGJ5dGVjIDQgLy8gImxvY2FsX2J5dGVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6ODgtOTAKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2J5dGVzLmdldCgKICAgIC8vICAgICBmb3JfYWNjb3VudCwgZGVmYXVsdD1CeXRlcyhiIkRlZmF1bHQgVmFsdWUiKQogICAgLy8gKSA9PSBCeXRlcygKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg5CiAgICAvLyBmb3JfYWNjb3VudCwgZGVmYXVsdD1CeXRlcyhiIkRlZmF1bHQgVmFsdWUiKQogICAgYnl0ZWMgOSAvLyAweDQ0NjU2NjYxNzU2Yzc0MjA1NjYxNmM3NTY1CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo4OC05MAogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYnl0ZXMuZ2V0KAogICAgLy8gICAgIGZvcl9hY2NvdW50LCBkZWZhdWx0PUJ5dGVzKGIiRGVmYXVsdCBWYWx1ZSIpCiAgICAvLyApID09IEJ5dGVzKAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo5MC05MgogICAgLy8gKSA9PSBCeXRlcygKICAgIC8vICAgICBiIkhlbGxvIgogICAgLy8gKSAgIyBCeXRlcwogICAgYnl0ZWMgOCAvLyAweDQ4NjU2YzZjNmYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg4LTkyCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9ieXRlcy5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9Qnl0ZXMoYiJEZWZhdWx0IFZhbHVlIikKICAgIC8vICkgPT0gQnl0ZXMoCiAgICAvLyAgICAgYiJIZWxsbyIKICAgIC8vICkgICMgQnl0ZXMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjkzCiAgICAvLyBhc3NlcnQgYm9vbChzZWxmLmxvY2FsX2Jvb2wuZ2V0KGZvcl9hY2NvdW50LCBkZWZhdWx0PUZhbHNlKSkgICMgQm9vbAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAibG9jYWxfYm9vbCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGludGNfMCAvLyAwCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTUKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2Fzc2V0LmdldChmb3JfYWNjb3VudCwgZGVmYXVsdD1Bc3NldChVSW50NjQoMCkpKSA9PSBBc3NldCgKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImxvY2FsX2Fzc2V0IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgaW50Y18wIC8vIDAKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTYKICAgIC8vIFVJbnQ2NCgxMCkKICAgIGludGNfMiAvLyAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTUtOTcKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2Fzc2V0LmdldChmb3JfYWNjb3VudCwgZGVmYXVsdD1Bc3NldChVSW50NjQoMCkpKSA9PSBBc3NldCgKICAgIC8vICAgICBVSW50NjQoMTApCiAgICAvLyApICAjIEFzc2V0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo5OC0xMDAKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2FwcGxpY2F0aW9uLmdldCgKICAgIC8vICAgICBmb3JfYWNjb3VudCwgZGVmYXVsdD1BcHBsaWNhdGlvbihVSW50NjQoMCkpCiAgICAvLyApID09IEFwcGxpY2F0aW9uKAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTgKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2FwcGxpY2F0aW9uLmdldCgKICAgIGJ5dGVjIDcgLy8gImxvY2FsX2FwcGxpY2F0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTgtMTAwCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9hcHBsaWNhdGlvbi5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9QXBwbGljYXRpb24oVUludDY0KDApKQogICAgLy8gKSA9PSBBcHBsaWNhdGlvbigKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojk5CiAgICAvLyBmb3JfYWNjb3VudCwgZGVmYXVsdD1BcHBsaWNhdGlvbihVSW50NjQoMCkpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTgtMTAwCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9hcHBsaWNhdGlvbi5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9QXBwbGljYXRpb24oVUludDY0KDApKQogICAgLy8gKSA9PSBBcHBsaWNhdGlvbigKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAxCiAgICAvLyBVSW50NjQoMTApCiAgICBpbnRjXzIgLy8gMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojk4LTEwMgogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYXBwbGljYXRpb24uZ2V0KAogICAgLy8gICAgIGZvcl9hY2NvdW50LCBkZWZhdWx0PUFwcGxpY2F0aW9uKFVJbnQ2NCgwKSkKICAgIC8vICkgPT0gQXBwbGljYXRpb24oCiAgICAvLyAgICAgVUludDY0KDEwKQogICAgLy8gKSAgIyBBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTA0CiAgICAvLyBmb3JfYWNjb3VudCwgZGVmYXVsdD1BY2NvdW50KEJ5dGVzKGIiRGVmYXVsdCBWYWx1ZSIpKQogICAgaW50Y18wIC8vIDAKICAgIGFzc2VydCAvLyBBZGRyZXNzIGxlbmd0aCBpcyAzMiBieXRlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAzLTEwNQogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYWNjb3VudC5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9QWNjb3VudChCeXRlcyhiIkRlZmF1bHQgVmFsdWUiKSkKICAgIC8vICkgPT0gQWNjb3VudCgKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYWNjb3VudC5nZXQoCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAzLTEwNQogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYWNjb3VudC5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9QWNjb3VudChCeXRlcyhiIkRlZmF1bHQgVmFsdWUiKSkKICAgIC8vICkgPT0gQWNjb3VudCgKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwNAogICAgLy8gZm9yX2FjY291bnQsIGRlZmF1bHQ9QWNjb3VudChCeXRlcyhiIkRlZmF1bHQgVmFsdWUiKSkKICAgIGJ5dGVjIDkgLy8gMHg0NDY1NjY2MTc1NmM3NDIwNTY2MTZjNzU2NQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAzLTEwNQogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYWNjb3VudC5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9QWNjb3VudChCeXRlcyhiIkRlZmF1bHQgVmFsdWUiKSkKICAgIC8vICkgPT0gQWNjb3VudCgKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTA2CiAgICAvLyBCeXRlcyhiIkhlbGxvIikKICAgIGJ5dGVjIDggLy8gMHg0ODY1NmM2YzZmCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDMtMTA3CiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9hY2NvdW50LmdldCgKICAgIC8vICAgICBmb3JfYWNjb3VudCwgZGVmYXVsdD1BY2NvdW50KEJ5dGVzKGIiRGVmYXVsdCBWYWx1ZSIpKQogICAgLy8gKSA9PSBBY2NvdW50KAogICAgLy8gICAgIEJ5dGVzKGIiSGVsbG8iKQogICAgLy8gKSAgIyBBY2NvdW50CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDkKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmxvY2FsX3N0b3JhZ2UuY29udHJhY3QuTG9jYWxTdG9yYWdlLm1heWJlX2xvY2FsX2RhdGFfZXhhbXBsZShmb3JfYWNjb3VudDogYnl0ZXMpIC0+IHVpbnQ2NDoKbWF5YmVfbG9jYWxfZGF0YV9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTExLTExMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgbWF5YmVfbG9jYWxfZGF0YV9leGFtcGxlKHNlbGYsIGZvcl9hY2NvdW50OiBBY2NvdW50KSAtPiBib29sOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTMKICAgIC8vIHJlc3VsdCwgZXhpc3RzID0gc2VsZi5sb2NhbF9pbnQubWF5YmUoZm9yX2FjY291bnQpICAjIFVpbnQ2NAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibG9jYWxfaW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE0CiAgICAvLyBhc3NlcnQgZXhpc3RzLCAibm8gZGF0YSBmb3IgYWNjb3VudCIKICAgIGFzc2VydCAvLyBubyBkYXRhIGZvciBhY2NvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTUKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gVUludDY0KDEwKQogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTcKICAgIC8vIHJlc3VsdF9ieXRlcywgZXhpc3RzID0gc2VsZi5sb2NhbF9ieXRlcy5tYXliZShmb3JfYWNjb3VudCkgICMgQnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImxvY2FsX2J5dGVzIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE4CiAgICAvLyBhc3NlcnQgZXhpc3RzLCAibm8gZGF0YSBmb3IgYWNjb3VudCIKICAgIGFzc2VydCAvLyBubyBkYXRhIGZvciBhY2NvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTkKICAgIC8vIGFzc2VydCByZXN1bHRfYnl0ZXMgPT0gYiJIZWxsbyIKICAgIGJ5dGVjIDggLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjEKICAgIC8vIHJlc3VsdF9ib29sLCBleGlzdHMgPSBzZWxmLmxvY2FsX2Jvb2wubWF5YmUoZm9yX2FjY291bnQpICAjIEJvb2wKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImxvY2FsX2Jvb2wiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjIKICAgIC8vIGFzc2VydCBleGlzdHMsICJubyBkYXRhIGZvciBhY2NvdW50IgogICAgYXNzZXJ0IC8vIG5vIGRhdGEgZm9yIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMwogICAgLy8gYXNzZXJ0IGJvb2wocmVzdWx0X2Jvb2wpCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyNQogICAgLy8gcmVzdWx0X2Fzc2V0LCBleGlzdHMgPSBzZWxmLmxvY2FsX2Fzc2V0Lm1heWJlKGZvcl9hY2NvdW50KSAgIyBBc3NldAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAibG9jYWxfYXNzZXQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjYKICAgIC8vIGFzc2VydCBleGlzdHMsICJubyBkYXRhIGZvciBhY2NvdW50IgogICAgYXNzZXJ0IC8vIG5vIGRhdGEgZm9yIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyNwogICAgLy8gYXNzZXJ0IHJlc3VsdF9hc3NldCA9PSBBc3NldChVSW50NjQoMTApKQogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjkKICAgIC8vIHJlc3VsdF9hcHBsbiwgZXhpc3RzID0gc2VsZi5sb2NhbF9hcHBsaWNhdGlvbi5tYXliZShmb3JfYWNjb3VudCkgICMgQXBwbGljYXRpb24KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImxvY2FsX2FwcGxpY2F0aW9uIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMwCiAgICAvLyBhc3NlcnQgZXhpc3RzLCAibm8gZGF0YSBmb3IgYWNjb3VudCIKICAgIGFzc2VydCAvLyBubyBkYXRhIGZvciBhY2NvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzEKICAgIC8vIGFzc2VydCByZXN1bHRfYXBwbG4gPT0gQXBwbGljYXRpb24oVUludDY0KDEwKSkKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMzCiAgICAvLyByZXN1bHRfYWNjb3VudCwgZXhpc3RzID0gc2VsZi5sb2NhbF9hY2NvdW50Lm1heWJlKGZvcl9hY2NvdW50KSAgIyBBY2NvdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTM0CiAgICAvLyBhc3NlcnQgZXhpc3RzLCAibm8gZGF0YSBmb3IgYWNjb3VudCIKICAgIGFzc2VydCAvLyBubyBkYXRhIGZvciBhY2NvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzUKICAgIC8vIGFzc2VydCByZXN1bHRfYWNjb3VudCA9PSBBY2NvdW50KEJ5dGVzKGIiSGVsbG8iKSkKICAgIGludGNfMCAvLyAwCiAgICBhc3NlcnQgLy8gQWRkcmVzcyBsZW5ndGggaXMgMzIgYnl0ZXMKICAgIGJ5dGVjIDggLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzYKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmxvY2FsX3N0b3JhZ2UuY29udHJhY3QuTG9jYWxTdG9yYWdlLnNldF9sb2NhbF9pbnQoZm9yX2FjY291bnQ6IGJ5dGVzLCB2YWx1ZTogdWludDY0KSAtPiB2b2lkOgpzZXRfbG9jYWxfaW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTQwLTE0MgogICAgLy8gIyBleGFtcGxlOiBXUklURV9MT0NBTF9TVEFURQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgc2V0X2xvY2FsX2ludChzZWxmLCBmb3JfYWNjb3VudDogQWNjb3VudCwgdmFsdWU6IFVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTQzCiAgICAvLyBzZWxmLmxvY2FsX2ludFtmb3JfYWNjb3VudF0gPSB2YWx1ZSAgIyBVaW50NjQKICAgIGZyYW1lX2RpZyAtMgogICAgYnl0ZWNfMSAvLyAibG9jYWxfaW50IgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMubG9jYWxfc3RvcmFnZS5jb250cmFjdC5Mb2NhbFN0b3JhZ2Uuc2V0X2xvY2FsX2RhdGFfZXhhbXBsZShmb3JfYWNjb3VudDogYnl0ZXMsIHZhbHVlX2Fzc2V0OiB1aW50NjQsIHZhbHVlX2FjY291bnQ6IGJ5dGVzLCB2YWx1ZV9hcHBsbjogdWludDY0LCB2YWx1ZV9ieXRlOiBieXRlcywgdmFsdWVfYm9vbDogdWludDY0KSAtPiB1aW50NjQ6CnNldF9sb2NhbF9kYXRhX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDctMTU4CiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0xPQ0FMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzZXRfbG9jYWxfZGF0YV9leGFtcGxlKAogICAgLy8gICAgIHNlbGYsCiAgICAvLyAgICAgZm9yX2FjY291bnQ6IEFjY291bnQsCiAgICAvLyAgICAgdmFsdWVfYXNzZXQ6IEFzc2V0LAogICAgLy8gICAgIHZhbHVlX2FjY291bnQ6IEFjY291bnQsCiAgICAvLyAgICAgdmFsdWVfYXBwbG46IEFwcGxpY2F0aW9uLAogICAgLy8gICAgIHZhbHVlX2J5dGU6IEJ5dGVzLAogICAgLy8gICAgICosCiAgICAvLyAgICAgdmFsdWVfYm9vbDogYm9vbCwKICAgIC8vICkgLT4gYm9vbDoKICAgIHByb3RvIDYgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTU5CiAgICAvLyBzZWxmLmxvY2FsX2J5dGVzW2Zvcl9hY2NvdW50XSA9IHZhbHVlX2J5dGUgICMgQnl0ZXMKICAgIGZyYW1lX2RpZyAtNgogICAgYnl0ZWMgNCAvLyAibG9jYWxfYnl0ZXMiCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2MAogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYnl0ZXNbZm9yX2FjY291bnRdID09IHZhbHVlX2J5dGUKICAgIGZyYW1lX2RpZyAtNgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImxvY2FsX2J5dGVzIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jYWxfYnl0ZXMgZXhpc3RzIGZvciBhY2NvdW50CiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2MgogICAgLy8gc2VsZi5sb2NhbF9ib29sW2Zvcl9hY2NvdW50XSA9IHZhbHVlX2Jvb2wgICMgQm9vbAogICAgZnJhbWVfZGlnIC02CiAgICBieXRlYyA1IC8vICJsb2NhbF9ib29sIgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNjMKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2Jvb2xbZm9yX2FjY291bnRdID09IHZhbHVlX2Jvb2wKICAgIGZyYW1lX2RpZyAtNgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImxvY2FsX2Jvb2wiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sb2NhbF9ib29sIGV4aXN0cyBmb3IgYWNjb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNjUKICAgIC8vIHNlbGYubG9jYWxfYXNzZXRbZm9yX2FjY291bnRdID0gdmFsdWVfYXNzZXQgICMgQXNzZXQKICAgIGZyYW1lX2RpZyAtNgogICAgYnl0ZWMgNiAvLyAibG9jYWxfYXNzZXQiCiAgICBmcmFtZV9kaWcgLTUKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYXNzZXRbZm9yX2FjY291bnRdID09IHZhbHVlX2Fzc2V0CiAgICBmcmFtZV9kaWcgLTYKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJsb2NhbF9hc3NldCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxvY2FsX2Fzc2V0IGV4aXN0cyBmb3IgYWNjb3VudAogICAgZnJhbWVfZGlnIC01CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNjgKICAgIC8vIHNlbGYubG9jYWxfYXBwbGljYXRpb25bZm9yX2FjY291bnRdID0gdmFsdWVfYXBwbG4gICMgQXBwbGljYXRpb24KICAgIGZyYW1lX2RpZyAtNgogICAgYnl0ZWMgNyAvLyAibG9jYWxfYXBwbGljYXRpb24iCiAgICBmcmFtZV9kaWcgLTMKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYXBwbGljYXRpb25bZm9yX2FjY291bnRdID09IHZhbHVlX2FwcGxuCiAgICBmcmFtZV9kaWcgLTYKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJsb2NhbF9hcHBsaWNhdGlvbiIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxvY2FsX2FwcGxpY2F0aW9uIGV4aXN0cyBmb3IgYWNjb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNzEKICAgIC8vIHNlbGYubG9jYWxfYWNjb3VudFtmb3JfYWNjb3VudF0gPSB2YWx1ZV9hY2NvdW50ICAjIEFjY291bnQKICAgIGZyYW1lX2RpZyAtNgogICAgYnl0ZWNfMyAvLyAibG9jYWxfYWNjb3VudCIKICAgIGZyYW1lX2RpZyAtNAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTcyCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9hY2NvdW50W2Zvcl9hY2NvdW50XSA9PSB2YWx1ZV9hY2NvdW50CiAgICBmcmFtZV9kaWcgLTYKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jYWxfYWNjb3VudCBleGlzdHMgZm9yIGFjY291bnQKICAgIGZyYW1lX2RpZyAtNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTczCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5sb2NhbF9zdG9yYWdlLmNvbnRyYWN0LkxvY2FsU3RvcmFnZS5kZWxldGVfbG9jYWxfZGF0YShmb3JfYWNjb3VudDogYnl0ZXMpIC0+IHZvaWQ6CmRlbGV0ZV9sb2NhbF9kYXRhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTc3LTE3OQogICAgLy8gIyBleGFtcGxlOiBERUxFVEVfTE9DQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlbGV0ZV9sb2NhbF9kYXRhKHNlbGYsIGZvcl9hY2NvdW50OiBBY2NvdW50KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxODAKICAgIC8vIGRlbCBzZWxmLmxvY2FsX2FjY291bnRbZm9yX2FjY291bnRdICAjIFVpbnQ2NAogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2RlbAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmxvY2FsX3N0b3JhZ2UuY29udHJhY3QuTG9jYWxTdG9yYWdlLmRlbGV0ZV9sb2NhbF9kYXRhX2V4YW1wbGUoZm9yX2FjY291bnQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmRlbGV0ZV9sb2NhbF9kYXRhX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxODQtMTg2CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9MT0NBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZGVsZXRlX2xvY2FsX2RhdGFfZXhhbXBsZShzZWxmLCBmb3JfYWNjb3VudDogQWNjb3VudCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTg3CiAgICAvLyBkZWwgc2VsZi5sb2NhbF9pbnRbZm9yX2FjY291bnRdICAjIFVpbnQ2NAogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlY18xIC8vICJsb2NhbF9pbnQiCiAgICBhcHBfbG9jYWxfZGVsCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxODgKICAgIC8vIGRlbCBzZWxmLmxvY2FsX2J5dGVzW2Zvcl9hY2NvdW50XSAgIyBCeXRlcwogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlYyA0IC8vICJsb2NhbF9ieXRlcyIKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4OQogICAgLy8gZGVsIHNlbGYubG9jYWxfYm9vbFtmb3JfYWNjb3VudF0gICMgQm9vbAogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlYyA1IC8vICJsb2NhbF9ib29sIgogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTkwCiAgICAvLyBkZWwgc2VsZi5sb2NhbF9hc3NldFtmb3JfYWNjb3VudF0gICMgQXNzZXQKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWMgNiAvLyAibG9jYWxfYXNzZXQiCiAgICBhcHBfbG9jYWxfZGVsCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxOTEKICAgIC8vIGRlbCBzZWxmLmxvY2FsX2FwcGxpY2F0aW9uW2Zvcl9hY2NvdW50XSAgIyBBcHBsaWNhdGlvbgogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlYyA3IC8vICJsb2NhbF9hcHBsaWNhdGlvbiIKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5MgogICAgLy8gZGVsIHNlbGYubG9jYWxfYWNjb3VudFtmb3JfYWNjb3VudF0gICMgQWNjb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTkzCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [733, 808, 883], "errorMessage": "Address length is 32 bytes"}, {"pc": [213, 240, 258, 314, 336, 363, 390, 417, 447, 470, 493, 520], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [552], "errorMessage": "can only call when creating"}, {"pc": [216, 243, 261, 317, 339, 366, 393, 420, 450, 473, 496, 523], "errorMessage": "can only call when not creating"}, {"pc": [731, 986], "errorMessage": "check self.local_account exists for account"}, {"pc": [722, 970], "errorMessage": "check self.local_application exists for account"}, {"pc": [712, 952], "errorMessage": "check self.local_asset exists for account"}, {"pc": [704, 934], "errorMessage": "check self.local_bool exists for account"}, {"pc": [693, 916], "errorMessage": "check self.local_bytes exists for account"}, {"pc": [633, 683], "errorMessage": "check self.local_int exists for account"}, {"pc": [833, 843, 854, 862, 872, 881], "errorMessage": "no data for account"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "contains_local_data", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "contains_local_data_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "get_item_local_data", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "get_local_data_with_default_int", "returns": {"type": "uint64"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "maybe_local_data", "returns": {"type": "(uint64,bool)"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "get_item_local_data_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "get_local_data_with_default", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "maybe_local_data_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}, {"type": "uint64", "name": "value"}], "name": "set_local_int", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}, {"type": "asset", "name": "value_asset"}, {"type": "account", "name": "value_account"}, {"type": "application", "name": "value_appln"}, {"type": "byte[]", "name": "value_byte"}, {"type": "bool", "name": "value_bool"}], "name": "set_local_data_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "delete_local_data", "returns": {"type": "void"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "account", "name": "for_account"}], "name": "delete_local_data_example", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}], "name": "LocalStorage", "state": {"keys": {"box": {}, "global": {}, "local": {"local_int": {"key": "bG9jYWxfaW50", "keyType": "AVMString", "valueType": "AVMUint64"}, "local_bytes": {"key": "bG9jYWxfYnl0ZXM=", "keyType": "AVMString", "valueType": "AVMBytes"}, "local_bool": {"key": "bG9jYWxfYm9vbA==", "keyType": "AVMString", "valueType": "AVMUint64"}, "local_asset": {"key": "bG9jYWxfYXNzZXQ=", "keyType": "AVMString", "valueType": "AVMUint64"}, "local_application": {"key": "bG9jYWxfYXBwbGljYXRpb24=", "keyType": "AVMString", "valueType": "AVMUint64"}, "local_account": {"key": "bG9jYWxfYWNjb3VudA==", "keyType": "AVMString", "valueType": "AVMBytes"}}}, "maps": {"box": {}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 2, "ints": 4}}}, "structs": {}, "byteCode": {"approval": "CiADAAEKJgoEFR98dQlsb2NhbF9pbnQBAA1sb2NhbF9hY2NvdW50C2xvY2FsX2J5dGVzCmxvY2FsX2Jvb2wLbG9jYWxfYXNzZXQRbG9jYWxfYXBwbGljYXRpb24FSGVsbG8NRGVmYXVsdCBWYWx1ZTEbQQGrggwE5rzAdQQVWharBMBiG94ElnEIcARXWWFxBMIc7ngEgcbwPgQPDB2CBPGnfRYEgS3uFwRbt/R9BJF2Oss2GgCODAE1ARoBAwDsAM4AswCYAH0AZwAvAB0AAiJDMRkURDEYRDYaARfAHIgDByoiTwJUKExQsCNDMRkURDEYRDYaARfAHIgC5CNDMRkURDEYRDYaARfAHDYaAhfAMDYaAxfAHDYaBBfAMjYaBVcCADYaBiJTiAJYKiJPAlQoTFCwI0MxGRREMRhENhoBF8AcNhoCF4gCLyNDMRkURDEYRDYaARfAHIgB3CoiTwJUKExQsCNDMRkURDEYRDYaARfAHIgBbCoiTwJUKExQsCNDMRkURDEYRDYaARfAHIgBECoiTwJUKExQsCNDMRkURDEYRDYaARfAHIgA2kwWKiJPA1RQKExQsCNDMRkURDEYRDYaARfAHIgArxYoTFCwI0MxGRREMRhENhoBF8AciACOFihMULAjQzEZFEQxGEQ2GgEXwByIAD4qIk8CVChMULAjQzEZFEQxGEQ2GgEXwByIABYqIk8CVChMULAjQzEZQP6rMRgURCNDigEBi/8iKWNFAUQjiYoBAYv/IiljRQFEi/8iJwRjRQFEi/8iJwVjRQFEi/8iJwZjRQFEi/8iJwdjRQFEi/8iK2NFAUQjiYoBAYv/IiljRImKAQGL/yIpYyJOAk2JigECi/8iKWNJTwJMQAADIowBiwGLAE8DTwOJigEBi/8iKWNEJBJEi/8iJwRjRCcIEkSL/yInBWNERIv/IicGY0QkEkSL/yInB2NEJBJEi/8iK2NEIkQnCBJEI4mKAQGL/yIpYyJOAk0kEkSL/yInBGMnCU4CTScIEkSL/yInBWMiTgJNRIv/IicGYyJOAk0kEkSL/yInB2MiTgJNJBJEIkSL/yIrYycJTgJNJwgSRCOJigEBi/8iKWNEJBJEi/8iJwRjRCcIEkSL/yInBWNERIv/IicGY0QkEkSL/yInB2NEJBJEi/8iK2NEIkQnCBJEI4mKAgCL/imL/2aJigYBi/onBIv+Zov6IicEY0SL/hJEi/onBYv/Zov6IicFY0SL/xJEi/onBov7Zov6IicGY0SL+xJEi/onB4v9Zov6IicHY0SL/RJEi/ori/xmi/oiK2NEi/wSRCOJigEAi/8raImKAQGL/yloi/8nBGiL/ycFaIv/JwZoi/8nB2iL/ytoI4k=", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMubG9jYWxfc3RvcmFnZS5jb250cmFjdC5Mb2NhbFN0b3JhZ2UuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDEwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImxvY2FsX2ludCIgMHgwMCAibG9jYWxfYWNjb3VudCIgImxvY2FsX2J5dGVzIiAibG9jYWxfYm9vbCIgImxvY2FsX2Fzc2V0IiAibG9jYWxfYXBwbGljYXRpb24iIDB4NDg2NTZjNmM2ZiAweDQ0NjU2NjYxNzU2Yzc0MjA1NjYxNmM3NTY1CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgTG9jYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdAMTcKICAgIHB1c2hieXRlc3MgMHhlNmJjYzA3NSAweDE1NWExNmFiIDB4YzA2MjFiZGUgMHg5NjcxMDg3MCAweDU3NTk2MTcxIDB4YzIxY2VlNzggMHg4MWM2ZjAzZSAweDBmMGMxZDgyIDB4ZjFhNzdkMTYgMHg4MTJkZWUxNyAweDViYjdmNDdkIDB4OTE3NjNhY2IgLy8gbWV0aG9kICJjb250YWluc19sb2NhbF9kYXRhKGFjY291bnQpYm9vbCIsIG1ldGhvZCAiY29udGFpbnNfbG9jYWxfZGF0YV9leGFtcGxlKGFjY291bnQpYm9vbCIsIG1ldGhvZCAiZ2V0X2l0ZW1fbG9jYWxfZGF0YShhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2xvY2FsX2RhdGFfd2l0aF9kZWZhdWx0X2ludChhY2NvdW50KXVpbnQ2NCIsIG1ldGhvZCAibWF5YmVfbG9jYWxfZGF0YShhY2NvdW50KSh1aW50NjQsYm9vbCkiLCBtZXRob2QgImdldF9pdGVtX2xvY2FsX2RhdGFfZXhhbXBsZShhY2NvdW50KWJvb2wiLCBtZXRob2QgImdldF9sb2NhbF9kYXRhX3dpdGhfZGVmYXVsdChhY2NvdW50KWJvb2wiLCBtZXRob2QgIm1heWJlX2xvY2FsX2RhdGFfZXhhbXBsZShhY2NvdW50KWJvb2wiLCBtZXRob2QgInNldF9sb2NhbF9pbnQoYWNjb3VudCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0X2xvY2FsX2RhdGFfZXhhbXBsZShhY2NvdW50LGFzc2V0LGFjY291bnQsYXBwbGljYXRpb24sYnl0ZVtdLGJvb2wpYm9vbCIsIG1ldGhvZCAiZGVsZXRlX2xvY2FsX2RhdGEoYWNjb3VudCl2b2lkIiwgbWV0aG9kICJkZWxldGVfbG9jYWxfZGF0YV9leGFtcGxlKGFjY291bnQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY29udGFpbnNfbG9jYWxfZGF0YV9yb3V0ZUA1IG1haW5fY29udGFpbnNfbG9jYWxfZGF0YV9leGFtcGxlX3JvdXRlQDYgbWFpbl9nZXRfaXRlbV9sb2NhbF9kYXRhX3JvdXRlQDcgbWFpbl9nZXRfbG9jYWxfZGF0YV93aXRoX2RlZmF1bHRfaW50X3JvdXRlQDggbWFpbl9tYXliZV9sb2NhbF9kYXRhX3JvdXRlQDkgbWFpbl9nZXRfaXRlbV9sb2NhbF9kYXRhX2V4YW1wbGVfcm91dGVAMTAgbWFpbl9nZXRfbG9jYWxfZGF0YV93aXRoX2RlZmF1bHRfcm91dGVAMTEgbWFpbl9tYXliZV9sb2NhbF9kYXRhX2V4YW1wbGVfcm91dGVAMTIgbWFpbl9zZXRfbG9jYWxfaW50X3JvdXRlQDEzIG1haW5fc2V0X2xvY2FsX2RhdGFfZXhhbXBsZV9yb3V0ZUAxNCBtYWluX2RlbGV0ZV9sb2NhbF9kYXRhX3JvdXRlQDE1IG1haW5fZGVsZXRlX2xvY2FsX2RhdGFfZXhhbXBsZV9yb3V0ZUAxNgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9kZWxldGVfbG9jYWxfZGF0YV9leGFtcGxlX3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTg0LTE4NQogICAgLy8gIyBleGFtcGxlOiBERUxFVEVfTE9DQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgTG9jYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTg0LTE4NQogICAgLy8gIyBleGFtcGxlOiBERUxFVEVfTE9DQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkZWxldGVfbG9jYWxfZGF0YV9leGFtcGxlCiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVfbG9jYWxfZGF0YV9yb3V0ZUAxNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3Ny0xNzgKICAgIC8vICMgZXhhbXBsZTogREVMRVRFX0xPQ0FMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3Ny0xNzgKICAgIC8vICMgZXhhbXBsZTogREVMRVRFX0xPQ0FMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZGVsZXRlX2xvY2FsX2RhdGEKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2xvY2FsX2RhdGFfZXhhbXBsZV9yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0Ny0xNDgKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfTE9DQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgTG9jYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTQ3LTE0OAogICAgLy8gIyBleGFtcGxlOiBXUklURV9MT0NBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9sb2NhbF9kYXRhX2V4YW1wbGUKICAgIGJ5dGVjXzIgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9sb2NhbF9pbnRfcm91dGVAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDAtMTQxCiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0xPQ0FMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0MC0xNDEKICAgIC8vICMgZXhhbXBsZTogV1JJVEVfTE9DQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBzZXRfbG9jYWxfaW50CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2xvY2FsX2RhdGFfZXhhbXBsZV9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzCiAgICAvLyBjbGFzcyBMb2NhbFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBtYXliZV9sb2NhbF9kYXRhX2V4YW1wbGUKICAgIGJ5dGVjXzIgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9sb2NhbF9kYXRhX3dpdGhfZGVmYXVsdF9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2xvY2FsX2RhdGFfd2l0aF9kZWZhdWx0CiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaXRlbV9sb2NhbF9kYXRhX2V4YW1wbGVfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo2OC02OQogICAgLy8gIyBleGFtcGxlOiBSRUFEX0xPQ0FMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjY4LTY5CiAgICAvLyAjIGV4YW1wbGU6IFJFQURfTE9DQUxfU1RBVEVfRVhBTVBMRVMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBnZXRfaXRlbV9sb2NhbF9kYXRhX2V4YW1wbGUKICAgIGJ5dGVjXzIgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX21heWJlX2xvY2FsX2RhdGFfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU3LTU4CiAgICAvLyAjIG1heWJlIGZ1bmN0aW9uCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjU3LTU4CiAgICAvLyAjIG1heWJlIGZ1bmN0aW9uCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgbWF5YmVfbG9jYWxfZGF0YQogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWNfMiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfbG9jYWxfZGF0YV93aXRoX2RlZmF1bHRfaW50X3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo1Mi01MwogICAgLy8gIyBnZXQgZnVuY3Rpb24KICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgTG9jYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NTItNTMKICAgIC8vICMgZ2V0IGZ1bmN0aW9uCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgZ2V0X2xvY2FsX2RhdGFfd2l0aF9kZWZhdWx0X2ludAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfaXRlbV9sb2NhbF9kYXRhX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo0Ny00OAogICAgLy8gIyBleGFtcGxlOiBSRUFEX0xPQ0FMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ3LTQ4CiAgICAvLyAjIGV4YW1wbGU6IFJFQURfTE9DQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBnZXRfaXRlbV9sb2NhbF9kYXRhCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NvbnRhaW5zX2xvY2FsX2RhdGFfZXhhbXBsZV9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MzQtMzUKICAgIC8vICMgZXhhbXBsZTogQ09OVEFJTl9QUk9QRVJUWV9MT0NBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzCiAgICAvLyBjbGFzcyBMb2NhbFN0b3JhZ2UoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTozNC0zNQogICAgLy8gIyBleGFtcGxlOiBDT05UQUlOX1BST1BFUlRZX0xPQ0FMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgY29udGFpbnNfbG9jYWxfZGF0YV9leGFtcGxlCiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jb250YWluc19sb2NhbF9kYXRhX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToyNi0yNwogICAgLy8gIyBleGFtcGxlOiBDT05UQUlOX1BST1BFUlRZX0xPQ0FMX1NUQVRFCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMKICAgIC8vIGNsYXNzIExvY2FsU3RvcmFnZShBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2LTI3CiAgICAvLyAjIGV4YW1wbGU6IENPTlRBSU5fUFJPUEVSVFlfTE9DQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBjb250YWluc19sb2NhbF9kYXRhCiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMwogICAgLy8gY2xhc3MgTG9jYWxTdG9yYWdlKEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5sb2NhbF9zdG9yYWdlLmNvbnRyYWN0LkxvY2FsU3RvcmFnZS5jb250YWluc19sb2NhbF9kYXRhKGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0Ogpjb250YWluc19sb2NhbF9kYXRhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MjYtMjgKICAgIC8vICMgZXhhbXBsZTogQ09OVEFJTl9QUk9QRVJUWV9MT0NBTF9TVEFURQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgY29udGFpbnNfbG9jYWxfZGF0YShzZWxmLCBmb3JfYWNjb3VudDogQWNjb3VudCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MjkKICAgIC8vIGFzc2VydCBmb3JfYWNjb3VudCBpbiBzZWxmLmxvY2FsX2ludCAgIyBVaW50NjQKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxvY2FsX2ludCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTozMAogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMubG9jYWxfc3RvcmFnZS5jb250cmFjdC5Mb2NhbFN0b3JhZ2UuY29udGFpbnNfbG9jYWxfZGF0YV9leGFtcGxlKGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0Ogpjb250YWluc19sb2NhbF9kYXRhX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTozNC0zNgogICAgLy8gIyBleGFtcGxlOiBDT05UQUlOX1BST1BFUlRZX0xPQ0FMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBjb250YWluc19sb2NhbF9kYXRhX2V4YW1wbGUoc2VsZiwgZm9yX2FjY291bnQ6IEFjY291bnQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM3CiAgICAvLyBhc3NlcnQgZm9yX2FjY291bnQgaW4gc2VsZi5sb2NhbF9pbnQgICMgVWludDY0CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJsb2NhbF9pbnQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MzgKICAgIC8vIGFzc2VydCBmb3JfYWNjb3VudCBpbiBzZWxmLmxvY2FsX2J5dGVzICAjIEJ5dGVzCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJsb2NhbF9ieXRlcyIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTozOQogICAgLy8gYXNzZXJ0IGZvcl9hY2NvdW50IGluIHNlbGYubG9jYWxfYm9vbCAgIyBCb29sCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJsb2NhbF9ib29sIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQwCiAgICAvLyBhc3NlcnQgZm9yX2FjY291bnQgaW4gc2VsZi5sb2NhbF9hc3NldCAgIyBBc3NldAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAibG9jYWxfYXNzZXQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NDEKICAgIC8vIGFzc2VydCBmb3JfYWNjb3VudCBpbiBzZWxmLmxvY2FsX2FwcGxpY2F0aW9uICAjIEFwcGxpY2F0aW9uCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJsb2NhbF9hcHBsaWNhdGlvbiIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo0MgogICAgLy8gYXNzZXJ0IGZvcl9hY2NvdW50IGluIHNlbGYubG9jYWxfYWNjb3VudCAgIyBBY2NvdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQzCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5sb2NhbF9zdG9yYWdlLmNvbnRyYWN0LkxvY2FsU3RvcmFnZS5nZXRfaXRlbV9sb2NhbF9kYXRhKGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0OgpnZXRfaXRlbV9sb2NhbF9kYXRhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NDctNDkKICAgIC8vICMgZXhhbXBsZTogUkVBRF9MT0NBTF9TVEFURQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZ2V0X2l0ZW1fbG9jYWxfZGF0YShzZWxmLCBmb3JfYWNjb3VudDogQWNjb3VudCkgLT4gVUludDY0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo1MAogICAgLy8gcmV0dXJuIHNlbGYubG9jYWxfaW50W2Zvcl9hY2NvdW50XQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibG9jYWxfaW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jYWxfaW50IGV4aXN0cyBmb3IgYWNjb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmxvY2FsX3N0b3JhZ2UuY29udHJhY3QuTG9jYWxTdG9yYWdlLmdldF9sb2NhbF9kYXRhX3dpdGhfZGVmYXVsdF9pbnQoZm9yX2FjY291bnQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldF9sb2NhbF9kYXRhX3dpdGhfZGVmYXVsdF9pbnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo1Mi01NAogICAgLy8gIyBnZXQgZnVuY3Rpb24KICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGdldF9sb2NhbF9kYXRhX3dpdGhfZGVmYXVsdF9pbnQoc2VsZiwgZm9yX2FjY291bnQ6IEFjY291bnQpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NTUKICAgIC8vIHJldHVybiBzZWxmLmxvY2FsX2ludC5nZXQoZm9yX2FjY291bnQsIGRlZmF1bHQ9VUludDY0KDApKSAgIyBVaW50NjQKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxvY2FsX2ludCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGludGNfMCAvLyAwCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5sb2NhbF9zdG9yYWdlLmNvbnRyYWN0LkxvY2FsU3RvcmFnZS5tYXliZV9sb2NhbF9kYXRhKGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0LCB1aW50NjQ6Cm1heWJlX2xvY2FsX2RhdGE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo1Ny01OQogICAgLy8gIyBtYXliZSBmdW5jdGlvbgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgbWF5YmVfbG9jYWxfZGF0YShzZWxmLCBmb3JfYWNjb3VudDogQWNjb3VudCkgLT4gdHVwbGVbVUludDY0LCBib29sXToKICAgIHByb3RvIDEgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NjAtNjEKICAgIC8vICMgdXNlZCB0byBnZXQgZGF0YSBvciBhc3NlcnQgaW50CiAgICAvLyByZXN1bHQsIGV4aXN0cyA9IHNlbGYubG9jYWxfaW50Lm1heWJlKGZvcl9hY2NvdW50KSAgIyBVaW50NjQKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxvY2FsX2ludCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo2MgogICAgLy8gaWYgbm90IGV4aXN0czoKICAgIGJueiBtYXliZV9sb2NhbF9kYXRhX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NjMKICAgIC8vIHJlc3VsdCA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMQoKbWF5YmVfbG9jYWxfZGF0YV9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo2NAogICAgLy8gcmV0dXJuIHJlc3VsdCwgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMubG9jYWxfc3RvcmFnZS5jb250cmFjdC5Mb2NhbFN0b3JhZ2UuZ2V0X2l0ZW1fbG9jYWxfZGF0YV9leGFtcGxlKGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0OgpnZXRfaXRlbV9sb2NhbF9kYXRhX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo2OC03MAogICAgLy8gIyBleGFtcGxlOiBSRUFEX0xPQ0FMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBnZXRfaXRlbV9sb2NhbF9kYXRhX2V4YW1wbGUoc2VsZiwgZm9yX2FjY291bnQ6IEFjY291bnQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjcxCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9pbnRbZm9yX2FjY291bnRdID09IFVJbnQ2NCgKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxvY2FsX2ludCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxvY2FsX2ludCBleGlzdHMgZm9yIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjcxLTczCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9pbnRbZm9yX2FjY291bnRdID09IFVJbnQ2NCgKICAgIC8vICAgICAxMAogICAgLy8gKSAgIyBVaW50NjQgLSByZXR1cm5zIGd1cmFudGVlZCBkYXRhCiAgICBpbnRjXzIgLy8gMTAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9ieXRlc1tmb3JfYWNjb3VudF0gPT0gYiJIZWxsbyIgICMgQnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImxvY2FsX2J5dGVzIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jYWxfYnl0ZXMgZXhpc3RzIGZvciBhY2NvdW50CiAgICBieXRlYyA4IC8vIDB4NDg2NTZjNmM2ZgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6NzUKICAgIC8vIGFzc2VydCBib29sKHNlbGYubG9jYWxfYm9vbFtmb3JfYWNjb3VudF0pICAjIEJvb2wKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImxvY2FsX2Jvb2wiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sb2NhbF9ib29sIGV4aXN0cyBmb3IgYWNjb3VudAogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo3NgogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYXNzZXRbZm9yX2FjY291bnRdID09IEFzc2V0KFVJbnQ2NCgxMCkpICAjIEFzc2V0CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJsb2NhbF9hc3NldCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxvY2FsX2Fzc2V0IGV4aXN0cyBmb3IgYWNjb3VudAogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo3NwogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYXBwbGljYXRpb25bZm9yX2FjY291bnRdID09IEFwcGxpY2F0aW9uKAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAibG9jYWxfYXBwbGljYXRpb24iCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sb2NhbF9hcHBsaWNhdGlvbiBleGlzdHMgZm9yIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBVSW50NjQoMTApCiAgICBpbnRjXzIgLy8gMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojc3LTc5CiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9hcHBsaWNhdGlvbltmb3JfYWNjb3VudF0gPT0gQXBwbGljYXRpb24oCiAgICAvLyAgICAgVUludDY0KDEwKQogICAgLy8gKSAgIyBBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6ODAKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2FjY291bnRbZm9yX2FjY291bnRdID09IEFjY291bnQoQnl0ZXMoYiJIZWxsbyIpKSAgIyBBY2NvdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jYWxfYWNjb3VudCBleGlzdHMgZm9yIGFjY291bnQKICAgIGludGNfMCAvLyAwCiAgICBhc3NlcnQgLy8gQWRkcmVzcyBsZW5ndGggaXMgMzIgYnl0ZXMKICAgIGJ5dGVjIDggLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo4MQogICAgLy8gcmV0dXJuIFRydWUKICAgIGludGNfMSAvLyAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMubG9jYWxfc3RvcmFnZS5jb250cmFjdC5Mb2NhbFN0b3JhZ2UuZ2V0X2xvY2FsX2RhdGFfd2l0aF9kZWZhdWx0KGZvcl9hY2NvdW50OiBieXRlcykgLT4gdWludDY0OgpnZXRfbG9jYWxfZGF0YV93aXRoX2RlZmF1bHQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo4My04NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZ2V0X2xvY2FsX2RhdGFfd2l0aF9kZWZhdWx0KHNlbGYsIGZvcl9hY2NvdW50OiBBY2NvdW50KSAtPiBib29sOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo4NQogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfaW50LmdldChmb3JfYWNjb3VudCwgZGVmYXVsdD1VSW50NjQoMCkpID09IFVJbnQ2NCgKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImxvY2FsX2ludCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGludGNfMCAvLyAwCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg1LTg3CiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9pbnQuZ2V0KGZvcl9hY2NvdW50LCBkZWZhdWx0PVVJbnQ2NCgwKSkgPT0gVUludDY0KAogICAgLy8gICAgIDEwCiAgICAvLyApICAjIFVpbnQ2NAogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo4OC05MAogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYnl0ZXMuZ2V0KAogICAgLy8gICAgIGZvcl9hY2NvdW50LCBkZWZhdWx0PUJ5dGVzKGIiRGVmYXVsdCBWYWx1ZSIpCiAgICAvLyApID09IEJ5dGVzKAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6ODgKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2J5dGVzLmdldCgKICAgIGJ5dGVjIDQgLy8gImxvY2FsX2J5dGVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6ODgtOTAKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2J5dGVzLmdldCgKICAgIC8vICAgICBmb3JfYWNjb3VudCwgZGVmYXVsdD1CeXRlcyhiIkRlZmF1bHQgVmFsdWUiKQogICAgLy8gKSA9PSBCeXRlcygKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg5CiAgICAvLyBmb3JfYWNjb3VudCwgZGVmYXVsdD1CeXRlcyhiIkRlZmF1bHQgVmFsdWUiKQogICAgYnl0ZWMgOSAvLyAweDQ0NjU2NjYxNzU2Yzc0MjA1NjYxNmM3NTY1CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo4OC05MAogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYnl0ZXMuZ2V0KAogICAgLy8gICAgIGZvcl9hY2NvdW50LCBkZWZhdWx0PUJ5dGVzKGIiRGVmYXVsdCBWYWx1ZSIpCiAgICAvLyApID09IEJ5dGVzKAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo5MC05MgogICAgLy8gKSA9PSBCeXRlcygKICAgIC8vICAgICBiIkhlbGxvIgogICAgLy8gKSAgIyBCeXRlcwogICAgYnl0ZWMgOCAvLyAweDQ4NjU2YzZjNmYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg4LTkyCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9ieXRlcy5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9Qnl0ZXMoYiJEZWZhdWx0IFZhbHVlIikKICAgIC8vICkgPT0gQnl0ZXMoCiAgICAvLyAgICAgYiJIZWxsbyIKICAgIC8vICkgICMgQnl0ZXMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjkzCiAgICAvLyBhc3NlcnQgYm9vbChzZWxmLmxvY2FsX2Jvb2wuZ2V0KGZvcl9hY2NvdW50LCBkZWZhdWx0PUZhbHNlKSkgICMgQm9vbAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAibG9jYWxfYm9vbCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGludGNfMCAvLyAwCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTUKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2Fzc2V0LmdldChmb3JfYWNjb3VudCwgZGVmYXVsdD1Bc3NldChVSW50NjQoMCkpKSA9PSBBc3NldCgKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImxvY2FsX2Fzc2V0IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgaW50Y18wIC8vIDAKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTYKICAgIC8vIFVJbnQ2NCgxMCkKICAgIGludGNfMiAvLyAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTUtOTcKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2Fzc2V0LmdldChmb3JfYWNjb3VudCwgZGVmYXVsdD1Bc3NldChVSW50NjQoMCkpKSA9PSBBc3NldCgKICAgIC8vICAgICBVSW50NjQoMTApCiAgICAvLyApICAjIEFzc2V0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weTo5OC0xMDAKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2FwcGxpY2F0aW9uLmdldCgKICAgIC8vICAgICBmb3JfYWNjb3VudCwgZGVmYXVsdD1BcHBsaWNhdGlvbihVSW50NjQoMCkpCiAgICAvLyApID09IEFwcGxpY2F0aW9uKAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTgKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2FwcGxpY2F0aW9uLmdldCgKICAgIGJ5dGVjIDcgLy8gImxvY2FsX2FwcGxpY2F0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTgtMTAwCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9hcHBsaWNhdGlvbi5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9QXBwbGljYXRpb24oVUludDY0KDApKQogICAgLy8gKSA9PSBBcHBsaWNhdGlvbigKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojk5CiAgICAvLyBmb3JfYWNjb3VudCwgZGVmYXVsdD1BcHBsaWNhdGlvbihVSW50NjQoMCkpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6OTgtMTAwCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9hcHBsaWNhdGlvbi5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9QXBwbGljYXRpb24oVUludDY0KDApKQogICAgLy8gKSA9PSBBcHBsaWNhdGlvbigKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAxCiAgICAvLyBVSW50NjQoMTApCiAgICBpbnRjXzIgLy8gMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojk4LTEwMgogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYXBwbGljYXRpb24uZ2V0KAogICAgLy8gICAgIGZvcl9hY2NvdW50LCBkZWZhdWx0PUFwcGxpY2F0aW9uKFVJbnQ2NCgwKSkKICAgIC8vICkgPT0gQXBwbGljYXRpb24oCiAgICAvLyAgICAgVUludDY0KDEwKQogICAgLy8gKSAgIyBBcHBsaWNhdGlvbgogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTA0CiAgICAvLyBmb3JfYWNjb3VudCwgZGVmYXVsdD1BY2NvdW50KEJ5dGVzKGIiRGVmYXVsdCBWYWx1ZSIpKQogICAgaW50Y18wIC8vIDAKICAgIGFzc2VydCAvLyBBZGRyZXNzIGxlbmd0aCBpcyAzMiBieXRlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAzLTEwNQogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYWNjb3VudC5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9QWNjb3VudChCeXRlcyhiIkRlZmF1bHQgVmFsdWUiKSkKICAgIC8vICkgPT0gQWNjb3VudCgKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYWNjb3VudC5nZXQoCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAzLTEwNQogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYWNjb3VudC5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9QWNjb3VudChCeXRlcyhiIkRlZmF1bHQgVmFsdWUiKSkKICAgIC8vICkgPT0gQWNjb3VudCgKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwNAogICAgLy8gZm9yX2FjY291bnQsIGRlZmF1bHQ9QWNjb3VudChCeXRlcyhiIkRlZmF1bHQgVmFsdWUiKSkKICAgIGJ5dGVjIDkgLy8gMHg0NDY1NjY2MTc1NmM3NDIwNTY2MTZjNzU2NQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTAzLTEwNQogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYWNjb3VudC5nZXQoCiAgICAvLyAgICAgZm9yX2FjY291bnQsIGRlZmF1bHQ9QWNjb3VudChCeXRlcyhiIkRlZmF1bHQgVmFsdWUiKSkKICAgIC8vICkgPT0gQWNjb3VudCgKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTA2CiAgICAvLyBCeXRlcyhiIkhlbGxvIikKICAgIGJ5dGVjIDggLy8gMHg0ODY1NmM2YzZmCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDMtMTA3CiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9hY2NvdW50LmdldCgKICAgIC8vICAgICBmb3JfYWNjb3VudCwgZGVmYXVsdD1BY2NvdW50KEJ5dGVzKGIiRGVmYXVsdCBWYWx1ZSIpKQogICAgLy8gKSA9PSBBY2NvdW50KAogICAgLy8gICAgIEJ5dGVzKGIiSGVsbG8iKQogICAgLy8gKSAgIyBBY2NvdW50CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMDkKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmxvY2FsX3N0b3JhZ2UuY29udHJhY3QuTG9jYWxTdG9yYWdlLm1heWJlX2xvY2FsX2RhdGFfZXhhbXBsZShmb3JfYWNjb3VudDogYnl0ZXMpIC0+IHVpbnQ2NDoKbWF5YmVfbG9jYWxfZGF0YV9leGFtcGxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTExLTExMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgbWF5YmVfbG9jYWxfZGF0YV9leGFtcGxlKHNlbGYsIGZvcl9hY2NvdW50OiBBY2NvdW50KSAtPiBib29sOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTMKICAgIC8vIHJlc3VsdCwgZXhpc3RzID0gc2VsZi5sb2NhbF9pbnQubWF5YmUoZm9yX2FjY291bnQpICAjIFVpbnQ2NAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAibG9jYWxfaW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE0CiAgICAvLyBhc3NlcnQgZXhpc3RzLCAibm8gZGF0YSBmb3IgYWNjb3VudCIKICAgIGFzc2VydCAvLyBubyBkYXRhIGZvciBhY2NvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTUKICAgIC8vIGFzc2VydCByZXN1bHQgPT0gVUludDY0KDEwKQogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTcKICAgIC8vIHJlc3VsdF9ieXRlcywgZXhpc3RzID0gc2VsZi5sb2NhbF9ieXRlcy5tYXliZShmb3JfYWNjb3VudCkgICMgQnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImxvY2FsX2J5dGVzIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTE4CiAgICAvLyBhc3NlcnQgZXhpc3RzLCAibm8gZGF0YSBmb3IgYWNjb3VudCIKICAgIGFzc2VydCAvLyBubyBkYXRhIGZvciBhY2NvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMTkKICAgIC8vIGFzc2VydCByZXN1bHRfYnl0ZXMgPT0gYiJIZWxsbyIKICAgIGJ5dGVjIDggLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjEKICAgIC8vIHJlc3VsdF9ib29sLCBleGlzdHMgPSBzZWxmLmxvY2FsX2Jvb2wubWF5YmUoZm9yX2FjY291bnQpICAjIEJvb2wKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImxvY2FsX2Jvb2wiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjIKICAgIC8vIGFzc2VydCBleGlzdHMsICJubyBkYXRhIGZvciBhY2NvdW50IgogICAgYXNzZXJ0IC8vIG5vIGRhdGEgZm9yIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyMwogICAgLy8gYXNzZXJ0IGJvb2wocmVzdWx0X2Jvb2wpCiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyNQogICAgLy8gcmVzdWx0X2Fzc2V0LCBleGlzdHMgPSBzZWxmLmxvY2FsX2Fzc2V0Lm1heWJlKGZvcl9hY2NvdW50KSAgIyBBc3NldAogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAibG9jYWxfYXNzZXQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjYKICAgIC8vIGFzc2VydCBleGlzdHMsICJubyBkYXRhIGZvciBhY2NvdW50IgogICAgYXNzZXJ0IC8vIG5vIGRhdGEgZm9yIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyNwogICAgLy8gYXNzZXJ0IHJlc3VsdF9hc3NldCA9PSBBc3NldChVSW50NjQoMTApKQogICAgaW50Y18yIC8vIDEwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMjkKICAgIC8vIHJlc3VsdF9hcHBsbiwgZXhpc3RzID0gc2VsZi5sb2NhbF9hcHBsaWNhdGlvbi5tYXliZShmb3JfYWNjb3VudCkgICMgQXBwbGljYXRpb24KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImxvY2FsX2FwcGxpY2F0aW9uIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMwCiAgICAvLyBhc3NlcnQgZXhpc3RzLCAibm8gZGF0YSBmb3IgYWNjb3VudCIKICAgIGFzc2VydCAvLyBubyBkYXRhIGZvciBhY2NvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzEKICAgIC8vIGFzc2VydCByZXN1bHRfYXBwbG4gPT0gQXBwbGljYXRpb24oVUludDY0KDEwKSkKICAgIGludGNfMiAvLyAxMAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTMzCiAgICAvLyByZXN1bHRfYWNjb3VudCwgZXhpc3RzID0gc2VsZi5sb2NhbF9hY2NvdW50Lm1heWJlKGZvcl9hY2NvdW50KSAgIyBBY2NvdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTM0CiAgICAvLyBhc3NlcnQgZXhpc3RzLCAibm8gZGF0YSBmb3IgYWNjb3VudCIKICAgIGFzc2VydCAvLyBubyBkYXRhIGZvciBhY2NvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzUKICAgIC8vIGFzc2VydCByZXN1bHRfYWNjb3VudCA9PSBBY2NvdW50KEJ5dGVzKGIiSGVsbG8iKSkKICAgIGludGNfMCAvLyAwCiAgICBhc3NlcnQgLy8gQWRkcmVzcyBsZW5ndGggaXMgMzIgYnl0ZXMKICAgIGJ5dGVjIDggLy8gMHg0ODY1NmM2YzZmCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxMzYKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmxvY2FsX3N0b3JhZ2UuY29udHJhY3QuTG9jYWxTdG9yYWdlLnNldF9sb2NhbF9pbnQoZm9yX2FjY291bnQ6IGJ5dGVzLCB2YWx1ZTogdWludDY0KSAtPiB2b2lkOgpzZXRfbG9jYWxfaW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTQwLTE0MgogICAgLy8gIyBleGFtcGxlOiBXUklURV9MT0NBTF9TVEFURQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgc2V0X2xvY2FsX2ludChzZWxmLCBmb3JfYWNjb3VudDogQWNjb3VudCwgdmFsdWU6IFVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTQzCiAgICAvLyBzZWxmLmxvY2FsX2ludFtmb3JfYWNjb3VudF0gPSB2YWx1ZSAgIyBVaW50NjQKICAgIGZyYW1lX2RpZyAtMgogICAgYnl0ZWNfMSAvLyAibG9jYWxfaW50IgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMubG9jYWxfc3RvcmFnZS5jb250cmFjdC5Mb2NhbFN0b3JhZ2Uuc2V0X2xvY2FsX2RhdGFfZXhhbXBsZShmb3JfYWNjb3VudDogYnl0ZXMsIHZhbHVlX2Fzc2V0OiB1aW50NjQsIHZhbHVlX2FjY291bnQ6IGJ5dGVzLCB2YWx1ZV9hcHBsbjogdWludDY0LCB2YWx1ZV9ieXRlOiBieXRlcywgdmFsdWVfYm9vbDogdWludDY0KSAtPiB1aW50NjQ6CnNldF9sb2NhbF9kYXRhX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNDctMTU4CiAgICAvLyAjIGV4YW1wbGU6IFdSSVRFX0xPQ0FMX1NUQVRFX0VYQU1QTEVTCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzZXRfbG9jYWxfZGF0YV9leGFtcGxlKAogICAgLy8gICAgIHNlbGYsCiAgICAvLyAgICAgZm9yX2FjY291bnQ6IEFjY291bnQsCiAgICAvLyAgICAgdmFsdWVfYXNzZXQ6IEFzc2V0LAogICAgLy8gICAgIHZhbHVlX2FjY291bnQ6IEFjY291bnQsCiAgICAvLyAgICAgdmFsdWVfYXBwbG46IEFwcGxpY2F0aW9uLAogICAgLy8gICAgIHZhbHVlX2J5dGU6IEJ5dGVzLAogICAgLy8gICAgICosCiAgICAvLyAgICAgdmFsdWVfYm9vbDogYm9vbCwKICAgIC8vICkgLT4gYm9vbDoKICAgIHByb3RvIDYgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTU5CiAgICAvLyBzZWxmLmxvY2FsX2J5dGVzW2Zvcl9hY2NvdW50XSA9IHZhbHVlX2J5dGUgICMgQnl0ZXMKICAgIGZyYW1lX2RpZyAtNgogICAgYnl0ZWMgNCAvLyAibG9jYWxfYnl0ZXMiCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2MAogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYnl0ZXNbZm9yX2FjY291bnRdID09IHZhbHVlX2J5dGUKICAgIGZyYW1lX2RpZyAtNgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImxvY2FsX2J5dGVzIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jYWxfYnl0ZXMgZXhpc3RzIGZvciBhY2NvdW50CiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2MgogICAgLy8gc2VsZi5sb2NhbF9ib29sW2Zvcl9hY2NvdW50XSA9IHZhbHVlX2Jvb2wgICMgQm9vbAogICAgZnJhbWVfZGlnIC02CiAgICBieXRlYyA1IC8vICJsb2NhbF9ib29sIgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNjMKICAgIC8vIGFzc2VydCBzZWxmLmxvY2FsX2Jvb2xbZm9yX2FjY291bnRdID09IHZhbHVlX2Jvb2wKICAgIGZyYW1lX2RpZyAtNgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImxvY2FsX2Jvb2wiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sb2NhbF9ib29sIGV4aXN0cyBmb3IgYWNjb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNjUKICAgIC8vIHNlbGYubG9jYWxfYXNzZXRbZm9yX2FjY291bnRdID0gdmFsdWVfYXNzZXQgICMgQXNzZXQKICAgIGZyYW1lX2RpZyAtNgogICAgYnl0ZWMgNiAvLyAibG9jYWxfYXNzZXQiCiAgICBmcmFtZV9kaWcgLTUKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYXNzZXRbZm9yX2FjY291bnRdID09IHZhbHVlX2Fzc2V0CiAgICBmcmFtZV9kaWcgLTYKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJsb2NhbF9hc3NldCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxvY2FsX2Fzc2V0IGV4aXN0cyBmb3IgYWNjb3VudAogICAgZnJhbWVfZGlnIC01CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNjgKICAgIC8vIHNlbGYubG9jYWxfYXBwbGljYXRpb25bZm9yX2FjY291bnRdID0gdmFsdWVfYXBwbG4gICMgQXBwbGljYXRpb24KICAgIGZyYW1lX2RpZyAtNgogICAgYnl0ZWMgNyAvLyAibG9jYWxfYXBwbGljYXRpb24iCiAgICBmcmFtZV9kaWcgLTMKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gYXNzZXJ0IHNlbGYubG9jYWxfYXBwbGljYXRpb25bZm9yX2FjY291bnRdID09IHZhbHVlX2FwcGxuCiAgICBmcmFtZV9kaWcgLTYKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJsb2NhbF9hcHBsaWNhdGlvbiIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxvY2FsX2FwcGxpY2F0aW9uIGV4aXN0cyBmb3IgYWNjb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxNzEKICAgIC8vIHNlbGYubG9jYWxfYWNjb3VudFtmb3JfYWNjb3VudF0gPSB2YWx1ZV9hY2NvdW50ICAjIEFjY291bnQKICAgIGZyYW1lX2RpZyAtNgogICAgYnl0ZWNfMyAvLyAibG9jYWxfYWNjb3VudCIKICAgIGZyYW1lX2RpZyAtNAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTcyCiAgICAvLyBhc3NlcnQgc2VsZi5sb2NhbF9hY2NvdW50W2Zvcl9hY2NvdW50XSA9PSB2YWx1ZV9hY2NvdW50CiAgICBmcmFtZV9kaWcgLTYKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jYWxfYWNjb3VudCBleGlzdHMgZm9yIGFjY291bnQKICAgIGZyYW1lX2RpZyAtNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTczCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5sb2NhbF9zdG9yYWdlLmNvbnRyYWN0LkxvY2FsU3RvcmFnZS5kZWxldGVfbG9jYWxfZGF0YShmb3JfYWNjb3VudDogYnl0ZXMpIC0+IHZvaWQ6CmRlbGV0ZV9sb2NhbF9kYXRhOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTc3LTE3OQogICAgLy8gIyBleGFtcGxlOiBERUxFVEVfTE9DQUxfU1RBVEUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGRlbGV0ZV9sb2NhbF9kYXRhKHNlbGYsIGZvcl9hY2NvdW50OiBBY2NvdW50KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxODAKICAgIC8vIGRlbCBzZWxmLmxvY2FsX2FjY291bnRbZm9yX2FjY291bnRdICAjIFVpbnQ2NAogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2RlbAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmxvY2FsX3N0b3JhZ2UuY29udHJhY3QuTG9jYWxTdG9yYWdlLmRlbGV0ZV9sb2NhbF9kYXRhX2V4YW1wbGUoZm9yX2FjY291bnQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmRlbGV0ZV9sb2NhbF9kYXRhX2V4YW1wbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxODQtMTg2CiAgICAvLyAjIGV4YW1wbGU6IERFTEVURV9MT0NBTF9TVEFURV9FWEFNUExFUwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZGVsZXRlX2xvY2FsX2RhdGFfZXhhbXBsZShzZWxmLCBmb3JfYWNjb3VudDogQWNjb3VudCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTg3CiAgICAvLyBkZWwgc2VsZi5sb2NhbF9pbnRbZm9yX2FjY291bnRdICAjIFVpbnQ2NAogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlY18xIC8vICJsb2NhbF9pbnQiCiAgICBhcHBfbG9jYWxfZGVsCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxODgKICAgIC8vIGRlbCBzZWxmLmxvY2FsX2J5dGVzW2Zvcl9hY2NvdW50XSAgIyBCeXRlcwogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlYyA0IC8vICJsb2NhbF9ieXRlcyIKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4OQogICAgLy8gZGVsIHNlbGYubG9jYWxfYm9vbFtmb3JfYWNjb3VudF0gICMgQm9vbAogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlYyA1IC8vICJsb2NhbF9ib29sIgogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTkwCiAgICAvLyBkZWwgc2VsZi5sb2NhbF9hc3NldFtmb3JfYWNjb3VudF0gICMgQXNzZXQKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWMgNiAvLyAibG9jYWxfYXNzZXQiCiAgICBhcHBfbG9jYWxfZGVsCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9jYWxfc3RvcmFnZS9jb250cmFjdC5weToxOTEKICAgIC8vIGRlbCBzZWxmLmxvY2FsX2FwcGxpY2F0aW9uW2Zvcl9hY2NvdW50XSAgIyBBcHBsaWNhdGlvbgogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlYyA3IC8vICJsb2NhbF9hcHBsaWNhdGlvbiIKICAgIGFwcF9sb2NhbF9kZWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2NhbF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE5MgogICAgLy8gZGVsIHNlbGYubG9jYWxfYWNjb3VudFtmb3JfYWNjb3VudF0gICMgQWNjb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlY18zIC8vICJsb2NhbF9hY2NvdW50IgogICAgYXBwX2xvY2FsX2RlbAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvY2FsX3N0b3JhZ2UvY29udHJhY3QucHk6MTkzCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [733, 808, 883], "errorMessage": "Address length is 32 bytes"}, {"pc": [213, 240, 258, 314, 336, 363, 390, 417, 447, 470, 493, 520], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [552], "errorMessage": "can only call when creating"}, {"pc": [216, 243, 261, 317, 339, 366, 393, 420, 450, 473, 496, 523], "errorMessage": "can only call when not creating"}, {"pc": [731, 986], "errorMessage": "check self.local_account exists for account"}, {"pc": [722, 970], "errorMessage": "check self.local_application exists for account"}, {"pc": [712, 952], "errorMessage": "check self.local_asset exists for account"}, {"pc": [704, 934], "errorMessage": "check self.local_bool exists for account"}, {"pc": [693, 916], "errorMessage": "check self.local_bytes exists for account"}, {"pc": [633, 683], "errorMessage": "check self.local_int exists for account"}, {"pc": [833, 843, 854, 862, 872, 881], "errorMessage": "no data for account"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/self_payment/self_payment.puya.map b/projects/python-examples/smart_contracts/artifacts/self_payment/self_payment.puya.map index 3af9e0b..673ce8d 100644 --- a/projects/python-examples/smart_contracts/artifacts/self_payment/self_payment.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/self_payment/self_payment.puya.map @@ -40,103 +40,272 @@ "stack_out": [] }, "7": { - "op": "txn Receiver" + "op": "txn Receiver", + "defined_out": [ + "tmp%2#0" + ], + "stack_out": [ + "tmp%2#0" + ] }, "9": { - "op": "txn Sender" + "op": "txn Sender", + "defined_out": [ + "tmp%2#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%2#0", + "tmp%3#0" + ] }, "11": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%4#0" + ], + "stack_out": [ + "tmp%4#0" + ] }, "12": { - "op": "bz main_bool_false@10" + "op": "bz main_bool_false@10", + "stack_out": [] }, "15": { - "op": "txn Amount" + "op": "txn Amount", + "defined_out": [ + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0" + ] }, "17": { - "op": "bnz main_bool_false@10" + "op": "bnz main_bool_false@10", + "stack_out": [] }, "20": { - "op": "txn RekeyTo" + "op": "txn RekeyTo", + "defined_out": [ + "tmp%7#0" + ], + "stack_out": [ + "tmp%7#0" + ] }, "22": { - "op": "global ZeroAddress" + "op": "global ZeroAddress", + "defined_out": [ + "tmp%7#0", + "tmp%8#0" + ], + "stack_out": [ + "tmp%7#0", + "tmp%8#0" + ] }, "24": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0" + ] }, "25": { - "op": "bz main_bool_false@10" + "op": "bz main_bool_false@10", + "stack_out": [] }, "28": { - "op": "txn CloseRemainderTo" + "op": "txn CloseRemainderTo", + "defined_out": [ + "tmp%10#0" + ], + "stack_out": [ + "tmp%10#0" + ] }, "30": { - "op": "global ZeroAddress" + "op": "global ZeroAddress", + "defined_out": [ + "tmp%10#0", + "tmp%11#0" + ], + "stack_out": [ + "tmp%10#0", + "tmp%11#0" + ] }, "32": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%12#0" + ], + "stack_out": [ + "tmp%12#0" + ] }, "33": { - "op": "bz main_bool_false@10" + "op": "bz main_bool_false@10", + "stack_out": [] }, "36": { - "op": "txn Fee" + "op": "txn Fee", + "defined_out": [ + "tmp%13#0" + ], + "stack_out": [ + "tmp%13#0" + ] }, "38": { - "op": "global MinTxnFee" + "op": "global MinTxnFee", + "defined_out": [ + "tmp%13#0", + "tmp%14#0" + ], + "stack_out": [ + "tmp%13#0", + "tmp%14#0" + ] }, "40": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%15#0" + ], + "stack_out": [ + "tmp%15#0" + ] }, "41": { - "op": "bz main_bool_false@10" + "op": "bz main_bool_false@10", + "stack_out": [] }, "44": { - "op": "global GenesisHash" + "op": "global GenesisHash", + "defined_out": [ + "tmp%16#0" + ], + "stack_out": [ + "tmp%16#0" + ] }, "46": { - "op": "bytec_0 // TMPL_TARGET_NETWORK_GENESIS" + "op": "bytec_0 // TMPL_TARGET_NETWORK_GENESIS", + "defined_out": [ + "TMPL_TARGET_NETWORK_GENESIS", + "tmp%16#0" + ], + "stack_out": [ + "tmp%16#0", + "TMPL_TARGET_NETWORK_GENESIS" + ] }, "47": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%17#0" + ], + "stack_out": [ + "tmp%17#0" + ] }, "48": { - "op": "bz main_bool_false@10" + "op": "bz main_bool_false@10", + "stack_out": [] }, "51": { - "op": "txn LastValid" + "op": "txn LastValid", + "defined_out": [ + "tmp%18#0" + ], + "stack_out": [ + "tmp%18#0" + ] }, "53": { - "op": "intc_1 // TMPL_LAST_ROUND" + "op": "intc_1 // TMPL_LAST_ROUND", + "defined_out": [ + "TMPL_LAST_ROUND", + "tmp%18#0" + ], + "stack_out": [ + "tmp%18#0", + "TMPL_LAST_ROUND" + ] }, "54": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%19#0" + ], + "stack_out": [ + "tmp%19#0" + ] }, "55": { - "op": "bz main_bool_false@10" + "op": "bz main_bool_false@10", + "stack_out": [] }, "58": { - "op": "txn Lease" + "op": "txn Lease", + "defined_out": [ + "tmp%20#0" + ], + "stack_out": [ + "tmp%20#0" + ] }, "60": { - "op": "pushbytes 0x73656c662d7061796d656e74" + "op": "pushbytes 0x73656c662d7061796d656e74", + "defined_out": [ + "0x73656c662d7061796d656e74", + "tmp%20#0" + ], + "stack_out": [ + "tmp%20#0", + "0x73656c662d7061796d656e74" + ] }, "74": { - "op": "sha256" + "op": "sha256", + "defined_out": [ + "tmp%20#0", + "tmp%21#0" + ], + "stack_out": [ + "tmp%20#0", + "tmp%21#0" + ] }, "75": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%22#0" + ], + "stack_out": [ + "tmp%22#0" + ] }, "76": { - "op": "bz main_bool_false@10" + "op": "bz main_bool_false@10", + "stack_out": [] }, "79": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "defined_out": [ + "and_result%0#0" + ], + "stack_out": [ + "and_result%0#0" + ] }, "80": { - "op": "return" + "op": "return", + "stack_out": [] }, "81": { "block": "main_bool_false@10", @@ -150,7 +319,8 @@ ] }, "83": { - "op": "return" + "op": "return", + "stack_out": [] } } } \ No newline at end of file diff --git a/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.approval.puya.map b/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.approval.puya.map index 03a5648..9d01e99 100644 --- a/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.approval.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "../../struct_in_box/contract.py" ], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;AAAA;;AAwBK;;AAAA;AAAA;AAAA;;AAAA;AAxBL;;;AAwBK;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AApBL;;;AAoBK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AANA;;AAAA;AAAA;AAAA;;AAAA;AAdL;;;AAAA;;;AAcK;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJL;;AAAA;;;;;;;;;AAIA;;;AAKQ;AAAA;;AAAA;AAFQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAER;AACO;AAAA;AAAA;AAAqC;AAArC;AAAP;AACO;AAAA;AAAA;AAA+B;AAA/B;AAAP;AACO;AAAP;AAER;;;AAEQ;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AACO;AAAA;AAAA;;AAAA;AAAP;AACO;AAAP;AAER;;;AAEe;AAAA;;AAAA;AAAA;AAAA;AAAP;AAER;;;AAEsB;AAAP;;AAAA;AAAA;AAAA;;AAAP", + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;AAAA;;AAwBK;;AAAA;AAAA;AAAA;;AAAA;AAxBL;;;AAwBK;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJA;;AAAA;AAAA;AAAA;;AAAA;AApBL;;;AAoBK;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AANA;;AAAA;AAAA;AAAA;;AAAA;AAdL;;;AAAA;;;AAcK;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAVA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAJL;;AAAA;;;;;;;;;AASQ;AAAA;;AAAA;AAFQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAER;AACO;AAAA;AAAA;AAAqC;AAArC;AAAP;AACO;AAAA;AAAA;AAA+B;AAA/B;AAAP;AACO;AAAP;AAER;;;AAEQ;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AACO;AAAA;AAAA;;AAAA;AAAP;AACO;AAAP;AAER;;;AAEe;AAAA;;AAAA;AAAA;AAAA;AAAP;AAER;;;AAEsB;AAAP;;AAAA;AAAA;AAAA;;AAAP", "op_pc_offset": 0, "pc_events": { "1": { @@ -30,13 +30,40 @@ "stack_out": [] }, "40": { - "op": "pushbytess 0xcaad1623 0x079c27bd 0x6a02b350 0x8ee2c364 // method \"box_map_test()bool\", method \"box_map_set(uint64,(string,uint64,uint64))bool\", method \"box_map_get(uint64)(string,uint64,uint64)\", method \"box_map_exists(uint64)bool\"" + "op": "pushbytess 0xcaad1623 0x079c27bd 0x6a02b350 0x8ee2c364 // method \"box_map_test()bool\", method \"box_map_set(uint64,(string,uint64,uint64))bool\", method \"box_map_get(uint64)(string,uint64,uint64)\", method \"box_map_exists(uint64)bool\"", + "defined_out": [ + "Method(box_map_exists(uint64)bool)", + "Method(box_map_get(uint64)(string,uint64,uint64))", + "Method(box_map_set(uint64,(string,uint64,uint64))bool)", + "Method(box_map_test()bool)" + ], + "stack_out": [ + "Method(box_map_test()bool)", + "Method(box_map_set(uint64,(string,uint64,uint64))bool)", + "Method(box_map_get(uint64)(string,uint64,uint64))", + "Method(box_map_exists(uint64)bool)" + ] }, "62": { - "op": "txna ApplicationArgs 0" + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(box_map_exists(uint64)bool)", + "Method(box_map_get(uint64)(string,uint64,uint64))", + "Method(box_map_set(uint64,(string,uint64,uint64))bool)", + "Method(box_map_test()bool)", + "tmp%2#0" + ], + "stack_out": [ + "Method(box_map_test()bool)", + "Method(box_map_set(uint64,(string,uint64,uint64))bool)", + "Method(box_map_get(uint64)(string,uint64,uint64))", + "Method(box_map_exists(uint64)bool)", + "tmp%2#0" + ] }, "65": { - "op": "match main_box_map_test_route@5 main_box_map_set_route@6 main_box_map_get_route@7 main_box_map_exists_route@8" + "op": "match main_box_map_test_route@5 main_box_map_set_route@6 main_box_map_get_route@7 main_box_map_exists_route@8", + "stack_out": [] }, "75": { "block": "main_after_if_else@11", @@ -50,26 +77,27 @@ ] }, "76": { - "op": "return" + "op": "return", + "stack_out": [] }, "77": { "block": "main_box_map_exists_route@8", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%22#0" + "tmp%20#0" ], "stack_out": [ - "tmp%22#0" + "tmp%20#0" ] }, "79": { "op": "!", "defined_out": [ - "tmp%23#0" + "tmp%21#0" ], "stack_out": [ - "tmp%23#0" + "tmp%21#0" ] }, "80": { @@ -80,10 +108,10 @@ "81": { "op": "txn ApplicationID", "defined_out": [ - "tmp%24#0" + "tmp%22#0" ], "stack_out": [ - "tmp%24#0" + "tmp%22#0" ] }, "83": { @@ -94,10 +122,10 @@ "84": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%26#0" + "reinterpret_bytes[8]%2#0" ], "stack_out": [ - "tmp%26#0" + "reinterpret_bytes[8]%2#0" ] }, "87": { @@ -172,10 +200,10 @@ "97": { "op": "concat", "defined_out": [ - "tmp%27#0" + "tmp%24#0" ], "stack_out": [ - "tmp%27#0" + "tmp%24#0" ] }, "98": { @@ -192,26 +220,27 @@ ] }, "100": { - "op": "return" + "op": "return", + "stack_out": [] }, "101": { "block": "main_box_map_get_route@7", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%15#0" + "tmp%14#0" ], "stack_out": [ - "tmp%15#0" + "tmp%14#0" ] }, "103": { "op": "!", "defined_out": [ - "tmp%16#0" + "tmp%15#0" ], "stack_out": [ - "tmp%16#0" + "tmp%15#0" ] }, "104": { @@ -222,10 +251,10 @@ "105": { "op": "txn ApplicationID", "defined_out": [ - "tmp%17#0" + "tmp%16#0" ], "stack_out": [ - "tmp%17#0" + "tmp%16#0" ] }, "107": { @@ -236,30 +265,30 @@ "108": { "op": "txna ApplicationArgs 1", "defined_out": [ - "tmp%19#0" + "reinterpret_bytes[8]%1#0" ], "stack_out": [ - "tmp%19#0" + "reinterpret_bytes[8]%1#0" ] }, "111": { "callsub": "smart_contracts.struct_in_box.contract.StructInBoxMap.box_map_get", "op": "callsub box_map_get", "defined_out": [ - "tmp%20#0" + "tmp%18#0" ], "stack_out": [ - "tmp%20#0" + "tmp%18#0" ] }, "114": { "op": "bytec_0 // 0x151f7c75", "defined_out": [ "0x151f7c75", - "tmp%20#0" + "tmp%18#0" ], "stack_out": [ - "tmp%20#0", + "tmp%18#0", "0x151f7c75" ] }, @@ -267,16 +296,16 @@ "op": "swap", "stack_out": [ "0x151f7c75", - "tmp%20#0" + "tmp%18#0" ] }, "116": { "op": "concat", "defined_out": [ - "tmp%21#0" + "tmp%19#0" ], "stack_out": [ - "tmp%21#0" + "tmp%19#0" ] }, "117": { @@ -293,7 +322,8 @@ ] }, "119": { - "op": "return" + "op": "return", + "stack_out": [] }, "120": { "block": "main_box_map_set_route@6", @@ -335,17 +365,23 @@ "stack_out": [] }, "127": { - "op": "txna ApplicationArgs 1" + "op": "txna ApplicationArgs 1", + "defined_out": [ + "reinterpret_bytes[8]%0#0" + ], + "stack_out": [ + "reinterpret_bytes[8]%0#0" + ] }, "130": { "op": "txna ApplicationArgs 2", "defined_out": [ - "tmp%12#0", - "tmp%13#0" + "reinterpret_bytes[8]%0#0", + "tmp%12#0" ], "stack_out": [ - "tmp%12#0", - "tmp%13#0" + "reinterpret_bytes[8]%0#0", + "tmp%12#0" ] }, "133": { @@ -420,10 +456,10 @@ "143": { "op": "concat", "defined_out": [ - "tmp%14#0" + "tmp%13#0" ], "stack_out": [ - "tmp%14#0" + "tmp%13#0" ] }, "144": { @@ -440,7 +476,8 @@ ] }, "146": { - "op": "return" + "op": "return", + "stack_out": [] }, "147": { "block": "main_box_map_test_route@5", @@ -573,17 +610,18 @@ ] }, "167": { - "op": "return" + "op": "return", + "stack_out": [] }, "168": { "block": "main_bare_routing@9", "stack_in": [], "op": "txn OnCompletion", "defined_out": [ - "tmp%28#0" + "tmp%25#0" ], "stack_out": [ - "tmp%28#0" + "tmp%25#0" ] }, "170": { @@ -591,29 +629,46 @@ "stack_out": [] }, "173": { - "op": "txn ApplicationID" + "op": "txn ApplicationID", + "defined_out": [ + "tmp%26#0" + ], + "stack_out": [ + "tmp%26#0" + ] }, "175": { - "op": "!" + "op": "!", + "defined_out": [ + "tmp%27#0" + ], + "stack_out": [ + "tmp%27#0" + ] }, "176": { "error": "can only call when creating", - "op": "assert // can only call when creating" + "op": "assert // can only call when creating", + "stack_out": [] }, "177": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "defined_out": [ + "tmp%0#1" + ], + "stack_out": [ + "tmp%0#1" + ] }, "178": { - "op": "return" + "op": "return", + "stack_out": [] }, "179": { "subroutine": "smart_contracts.struct_in_box.contract.StructInBoxMap.box_map_test", "params": {}, "block": "box_map_test", "stack_in": [], - "op": "proto 0 1" - }, - "182": { "op": "bytec_1 // 0x75736572730000000000000000", "defined_out": [ "0x75736572730000000000000000" @@ -622,7 +677,7 @@ "0x75736572730000000000000000" ] }, - "183": { + "180": { "op": "box_del", "defined_out": [ "{box_del}" @@ -631,17 +686,17 @@ "{box_del}" ] }, - "184": { + "181": { "op": "pop", "stack_out": [] }, - "185": { + "182": { "op": "bytec_1 // 0x75736572730000000000000000", "stack_out": [ "0x75736572730000000000000000" ] }, - "186": { + "183": { "op": "pushbytes 0x0012000000000000004600000000000000020008746573744e616d65", "defined_out": [ "0x0012000000000000004600000000000000020008746573744e616d65", @@ -652,17 +707,17 @@ "0x0012000000000000004600000000000000020008746573744e616d65" ] }, - "216": { + "213": { "op": "box_put", "stack_out": [] }, - "217": { + "214": { "op": "bytec_1 // 0x75736572730000000000000000", "stack_out": [ "0x75736572730000000000000000" ] }, - "218": { + "215": { "op": "box_len", "defined_out": [ "check%0#0", @@ -673,14 +728,14 @@ "check%0#0" ] }, - "219": { + "216": { "error": "check self.user_map entry exists", "op": "assert // check self.user_map entry exists", "stack_out": [ "value%0#0" ] }, - "220": { + "217": { "op": "intc_2 // 28", "defined_out": [ "28", @@ -691,7 +746,7 @@ "28" ] }, - "221": { + "218": { "op": "==", "defined_out": [ "tmp%3#0" @@ -700,17 +755,17 @@ "tmp%3#0" ] }, - "222": { + "219": { "op": "assert", "stack_out": [] }, - "223": { + "220": { "op": "bytec_1 // 0x75736572730000000000000000", "stack_out": [ "0x75736572730000000000000000" ] }, - "224": { + "221": { "op": "box_len", "defined_out": [ "check%1#0", @@ -721,21 +776,21 @@ "check%1#0" ] }, - "225": { + "222": { "error": "check self.user_map entry exists", "op": "assert // check self.user_map entry exists", "stack_out": [ "value%1#0" ] }, - "226": { + "223": { "op": "intc_2 // 28", "stack_out": [ "value%1#0", "28" ] }, - "227": { + "224": { "op": "==", "defined_out": [ "tmp%6#0" @@ -744,11 +799,11 @@ "tmp%6#0" ] }, - "228": { + "225": { "op": "assert", "stack_out": [] }, - "229": { + "226": { "op": "intc_0 // 1", "defined_out": [ "1" @@ -757,11 +812,11 @@ "1" ] }, - "230": { + "227": { "retsub": true, "op": "retsub" }, - "231": { + "228": { "subroutine": "smart_contracts.struct_in_box.contract.StructInBoxMap.box_map_set", "params": { "key#0": "bytes", @@ -771,7 +826,7 @@ "stack_in": [], "op": "proto 2 1" }, - "234": { + "231": { "op": "bytec_3 // \"users\"", "defined_out": [ "\"users\"" @@ -780,7 +835,7 @@ "\"users\"" ] }, - "235": { + "232": { "op": "frame_dig -2", "defined_out": [ "\"users\"", @@ -791,7 +846,7 @@ "key#0 (copy)" ] }, - "237": { + "234": { "op": "concat", "defined_out": [ "tmp%0#0" @@ -800,7 +855,7 @@ "tmp%0#0" ] }, - "238": { + "235": { "op": "dup", "defined_out": [ "tmp%0#0", @@ -811,7 +866,7 @@ "tmp%0#0 (copy)" ] }, - "239": { + "236": { "op": "box_del", "defined_out": [ "tmp%0#0", @@ -822,20 +877,20 @@ "{box_del}" ] }, - "240": { + "237": { "op": "pop", "stack_out": [ "tmp%0#0" ] }, - "241": { + "238": { "op": "dup", "stack_out": [ "tmp%0#0", "tmp%0#0 (copy)" ] }, - "242": { + "239": { "op": "frame_dig -1", "defined_out": [ "tmp%0#0", @@ -848,13 +903,13 @@ "value#0 (copy)" ] }, - "244": { + "241": { "op": "box_put", "stack_out": [ "tmp%0#0" ] }, - "245": { + "242": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -865,21 +920,21 @@ "maybe_exists%0#0" ] }, - "246": { + "243": { "error": "check self.user_map entry exists", "op": "assert // check self.user_map entry exists", "stack_out": [ "maybe_value%0#0" ] }, - "247": { + "244": { "op": "frame_dig -1", "stack_out": [ "maybe_value%0#0", "value#0 (copy)" ] }, - "249": { + "246": { "op": "==", "defined_out": [ "tmp%2#0" @@ -888,11 +943,11 @@ "tmp%2#0" ] }, - "250": { + "247": { "op": "assert", "stack_out": [] }, - "251": { + "248": { "op": "intc_0 // 1", "defined_out": [ "1" @@ -901,11 +956,11 @@ "1" ] }, - "252": { + "249": { "retsub": true, "op": "retsub" }, - "253": { + "250": { "subroutine": "smart_contracts.struct_in_box.contract.StructInBoxMap.box_map_get", "params": { "key#0": "bytes" @@ -914,7 +969,7 @@ "stack_in": [], "op": "proto 1 1" }, - "256": { + "253": { "op": "bytec_3 // \"users\"", "defined_out": [ "\"users\"" @@ -923,7 +978,7 @@ "\"users\"" ] }, - "257": { + "254": { "op": "frame_dig -1", "defined_out": [ "\"users\"", @@ -934,7 +989,7 @@ "key#0 (copy)" ] }, - "259": { + "256": { "op": "concat", "defined_out": [ "tmp%0#0" @@ -943,7 +998,7 @@ "tmp%0#0" ] }, - "260": { + "257": { "op": "box_get", "defined_out": [ "maybe_exists%0#0", @@ -954,18 +1009,18 @@ "maybe_exists%0#0" ] }, - "261": { + "258": { "error": "check self.user_map entry exists", "op": "assert // check self.user_map entry exists", "stack_out": [ "maybe_value%0#0" ] }, - "262": { + "259": { "retsub": true, "op": "retsub" }, - "263": { + "260": { "subroutine": "smart_contracts.struct_in_box.contract.StructInBoxMap.box_map_exists", "params": { "key#0": "bytes" @@ -974,7 +1029,7 @@ "stack_in": [], "op": "proto 1 1" }, - "266": { + "263": { "op": "bytec_3 // \"users\"", "defined_out": [ "\"users\"" @@ -983,7 +1038,7 @@ "\"users\"" ] }, - "267": { + "264": { "op": "frame_dig -1", "defined_out": [ "\"users\"", @@ -994,7 +1049,7 @@ "key#0 (copy)" ] }, - "269": { + "266": { "op": "concat", "defined_out": [ "tmp%0#0" @@ -1003,7 +1058,7 @@ "tmp%0#0" ] }, - "270": { + "267": { "op": "box_len", "defined_out": [ "maybe_exists%0#0", @@ -1014,13 +1069,13 @@ "maybe_exists%0#0" ] }, - "271": { + "268": { "op": "bury 1", "stack_out": [ "maybe_exists%0#0" ] }, - "273": { + "270": { "retsub": true, "op": "retsub" } diff --git a/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.approval.teal b/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.approval.teal index 0d78f94..12db8d8 100644 --- a/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.approval.teal +++ b/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.approval.teal @@ -125,10 +125,6 @@ main_bare_routing@9: // smart_contracts.struct_in_box.contract.StructInBoxMap.box_map_test() -> uint64: box_map_test: - // smart_contracts/struct_in_box/contract.py:15-16 - // @arc4.abimethod - // def box_map_test(self) -> bool: - proto 0 1 // smart_contracts/struct_in_box/contract.py:20 // self.user_map[key_0] = value.copy() bytec_1 // 0x75736572730000000000000000 diff --git a/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.arc56.json b/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.arc56.json index 8a17636..dea4e8c 100644 --- a/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.arc56.json +++ b/projects/python-examples/smart_contracts/artifacts/struct_in_box/StructInBoxMap.arc56.json @@ -171,10 +171,10 @@ }, { "pc": [ - 219, - 225, - 246, - 261 + 216, + 222, + 243, + 258 ], "errorMessage": "check self.user_map entry exists" } @@ -187,19 +187,19 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuc3RydWN0X2luX2JveC5jb250cmFjdC5TdHJ1Y3RJbkJveE1hcC5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMjgKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwIDB4MDAgInVzZXJzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTEKICAgIC8vIGNsYXNzIFN0cnVjdEluQm94TWFwKGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A5CiAgICBwdXNoYnl0ZXNzIDB4Y2FhZDE2MjMgMHgwNzljMjdiZCAweDZhMDJiMzUwIDB4OGVlMmMzNjQgLy8gbWV0aG9kICJib3hfbWFwX3Rlc3QoKWJvb2wiLCBtZXRob2QgImJveF9tYXBfc2V0KHVpbnQ2NCwoc3RyaW5nLHVpbnQ2NCx1aW50NjQpKWJvb2wiLCBtZXRob2QgImJveF9tYXBfZ2V0KHVpbnQ2NCkoc3RyaW5nLHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJib3hfbWFwX2V4aXN0cyh1aW50NjQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYm94X21hcF90ZXN0X3JvdXRlQDUgbWFpbl9ib3hfbWFwX3NldF9yb3V0ZUA2IG1haW5fYm94X21hcF9nZXRfcm91dGVANyBtYWluX2JveF9tYXBfZXhpc3RzX3JvdXRlQDgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX2JveF9tYXBfZXhpc3RzX3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGJveF9tYXBfZXhpc3RzCiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX2dldF9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMQogICAgLy8gY2xhc3MgU3RydWN0SW5Cb3hNYXAoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBib3hfbWFwX2dldAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3NldF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMQogICAgLy8gY2xhc3MgU3RydWN0SW5Cb3hNYXAoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBib3hfbWFwX3NldAogICAgYnl0ZWNfMiAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF90ZXN0X3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYm94X21hcF90ZXN0CiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LlN0cnVjdEluQm94TWFwLmJveF9tYXBfdGVzdCgpIC0+IHVpbnQ2NDoKYm94X21hcF90ZXN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTUtMTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfdGVzdChzZWxmKSAtPiBib29sOgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToyMAogICAgLy8gc2VsZi51c2VyX21hcFtrZXlfMF0gPSB2YWx1ZS5jb3B5KCkKICAgIGJ5dGVjXzEgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlY18xIC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjE4CiAgICAvLyB2YWx1ZSA9IFVzZXJTdHJ1Y3QoYXJjNC5TdHJpbmcoInRlc3ROYW1lIiksIGFyYzQuVUludDY0KDcwKSwgYXJjNC5VSW50NjQoMikpCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDA0NjAwMDAwMDAwMDAwMDAwMDIwMDA4NzQ2NTczNzQ0ZTYxNmQ2NQogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjAKICAgIC8vIHNlbGYudXNlcl9tYXBba2V5XzBdID0gdmFsdWUuY29weSgpCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToyMQogICAgLy8gYXNzZXJ0IHNlbGYudXNlcl9tYXBba2V5XzBdLmJ5dGVzLmxlbmd0aCA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGJ5dGVjXzEgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudXNlcl9tYXAgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMjgKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjIyCiAgICAvLyBhc3NlcnQgc2VsZi51c2VyX21hcC5sZW5ndGgoa2V5XzApID09IHZhbHVlLmJ5dGVzLmxlbmd0aAogICAgYnl0ZWNfMSAvLyAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51c2VyX21hcCBlbnRyeSBleGlzdHMKICAgIGludGNfMiAvLyAyOAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjMKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnN0cnVjdF9pbl9ib3guY29udHJhY3QuU3RydWN0SW5Cb3hNYXAuYm94X21hcF9zZXQoa2V5OiBieXRlcywgdmFsdWU6IGJ5dGVzKSAtPiB1aW50NjQ6CmJveF9tYXBfc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjUtMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfc2V0KHNlbGYsIGtleTogYXJjNC5VSW50NjQsIHZhbHVlOiBVc2VyU3RydWN0KSAtPiBib29sOgogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToyNwogICAgLy8gc2VsZi51c2VyX21hcFtrZXldID0gdmFsdWUuY29weSgpCiAgICBieXRlY18zIC8vICJ1c2VycyIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjI4CiAgICAvLyBhc3NlcnQgc2VsZi51c2VyX21hcFtrZXldID09IHZhbHVlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51c2VyX21hcCBlbnRyeSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjkKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnN0cnVjdF9pbl9ib3guY29udHJhY3QuU3RydWN0SW5Cb3hNYXAuYm94X21hcF9nZXQoa2V5OiBieXRlcykgLT4gYnl0ZXM6CmJveF9tYXBfZ2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzEtMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfZ2V0KHNlbGYsIGtleTogYXJjNC5VSW50NjQpIC0+IFVzZXJTdHJ1Y3Q6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjMzCiAgICAvLyByZXR1cm4gc2VsZi51c2VyX21hcFtrZXldCiAgICBieXRlY18zIC8vICJ1c2VycyIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51c2VyX21hcCBlbnRyeSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LlN0cnVjdEluQm94TWFwLmJveF9tYXBfZXhpc3RzKGtleTogYnl0ZXMpIC0+IHVpbnQ2NDoKYm94X21hcF9leGlzdHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNS0zNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYm94X21hcF9leGlzdHMoc2VsZiwga2V5OiBhcmM0LlVJbnQ2NCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzcKICAgIC8vIHJldHVybiBrZXkgaW4gc2VsZi51c2VyX21hcAogICAgYnl0ZWNfMyAvLyAidXNlcnMiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIK", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuc3RydWN0X2luX2JveC5jb250cmFjdC5TdHJ1Y3RJbkJveE1hcC5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMjgKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwIDB4MDAgInVzZXJzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTEKICAgIC8vIGNsYXNzIFN0cnVjdEluQm94TWFwKGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A5CiAgICBwdXNoYnl0ZXNzIDB4Y2FhZDE2MjMgMHgwNzljMjdiZCAweDZhMDJiMzUwIDB4OGVlMmMzNjQgLy8gbWV0aG9kICJib3hfbWFwX3Rlc3QoKWJvb2wiLCBtZXRob2QgImJveF9tYXBfc2V0KHVpbnQ2NCwoc3RyaW5nLHVpbnQ2NCx1aW50NjQpKWJvb2wiLCBtZXRob2QgImJveF9tYXBfZ2V0KHVpbnQ2NCkoc3RyaW5nLHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJib3hfbWFwX2V4aXN0cyh1aW50NjQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYm94X21hcF90ZXN0X3JvdXRlQDUgbWFpbl9ib3hfbWFwX3NldF9yb3V0ZUA2IG1haW5fYm94X21hcF9nZXRfcm91dGVANyBtYWluX2JveF9tYXBfZXhpc3RzX3JvdXRlQDgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX2JveF9tYXBfZXhpc3RzX3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGJveF9tYXBfZXhpc3RzCiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX2dldF9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMQogICAgLy8gY2xhc3MgU3RydWN0SW5Cb3hNYXAoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBib3hfbWFwX2dldAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3NldF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMQogICAgLy8gY2xhc3MgU3RydWN0SW5Cb3hNYXAoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBib3hfbWFwX3NldAogICAgYnl0ZWNfMiAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF90ZXN0X3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYm94X21hcF90ZXN0CiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LlN0cnVjdEluQm94TWFwLmJveF9tYXBfdGVzdCgpIC0+IHVpbnQ2NDoKYm94X21hcF90ZXN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjAKICAgIC8vIHNlbGYudXNlcl9tYXBba2V5XzBdID0gdmFsdWUuY29weSgpCiAgICBieXRlY18xIC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWNfMSAvLyAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxOAogICAgLy8gdmFsdWUgPSBVc2VyU3RydWN0KGFyYzQuU3RyaW5nKCJ0ZXN0TmFtZSIpLCBhcmM0LlVJbnQ2NCg3MCksIGFyYzQuVUludDY0KDIpKQogICAgcHVzaGJ5dGVzIDB4MDAxMjAwMDAwMDAwMDAwMDAwNDYwMDAwMDAwMDAwMDAwMDAyMDAwODc0NjU3Mzc0NGU2MTZkNjUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjIwCiAgICAvLyBzZWxmLnVzZXJfbWFwW2tleV8wXSA9IHZhbHVlLmNvcHkoKQogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjEKICAgIC8vIGFzc2VydCBzZWxmLnVzZXJfbWFwW2tleV8wXS5ieXRlcy5sZW5ndGggPT0gdmFsdWUuYnl0ZXMubGVuZ3RoCiAgICBieXRlY18xIC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnVzZXJfbWFwIGVudHJ5IGV4aXN0cwogICAgaW50Y18yIC8vIDI4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToyMgogICAgLy8gYXNzZXJ0IHNlbGYudXNlcl9tYXAubGVuZ3RoKGtleV8wKSA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGJ5dGVjXzEgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudXNlcl9tYXAgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMjgKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjIzCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LlN0cnVjdEluQm94TWFwLmJveF9tYXBfc2V0KGtleTogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gdWludDY0Ogpib3hfbWFwX3NldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjI1LTI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfbWFwX3NldChzZWxmLCBrZXk6IGFyYzQuVUludDY0LCB2YWx1ZTogVXNlclN0cnVjdCkgLT4gYm9vbDoKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjcKICAgIC8vIHNlbGYudXNlcl9tYXBba2V5XSA9IHZhbHVlLmNvcHkoKQogICAgYnl0ZWNfMyAvLyAidXNlcnMiCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToyOAogICAgLy8gYXNzZXJ0IHNlbGYudXNlcl9tYXBba2V5XSA9PSB2YWx1ZQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudXNlcl9tYXAgZW50cnkgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjI5CiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LlN0cnVjdEluQm94TWFwLmJveF9tYXBfZ2V0KGtleTogYnl0ZXMpIC0+IGJ5dGVzOgpib3hfbWFwX2dldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjMxLTMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfbWFwX2dldChzZWxmLCBrZXk6IGFyYzQuVUludDY0KSAtPiBVc2VyU3RydWN0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozMwogICAgLy8gcmV0dXJuIHNlbGYudXNlcl9tYXBba2V5XQogICAgYnl0ZWNfMyAvLyAidXNlcnMiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudXNlcl9tYXAgZW50cnkgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuc3RydWN0X2luX2JveC5jb250cmFjdC5TdHJ1Y3RJbkJveE1hcC5ib3hfbWFwX2V4aXN0cyhrZXk6IGJ5dGVzKSAtPiB1aW50NjQ6CmJveF9tYXBfZXhpc3RzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzUtMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfZXhpc3RzKHNlbGYsIGtleTogYXJjNC5VSW50NjQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjM3CiAgICAvLyByZXR1cm4ga2V5IGluIHNlbGYudXNlcl9tYXAKICAgIGJ5dGVjXzMgLy8gInVzZXJzIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { - "approval": "CiADAQAcJgQEFR98dQ11c2VycwAAAAAAAAAAAQAFdXNlcnMxG0EAgIIEBMqtFiMEB5wnvQRqArNQBI7iw2Q2GgCOBABIAC0AGgACI0MxGRREMRhENhoBiACtKiNPAlQoTFCwIkMxGRREMRhENhoBiACLKExQsCJDMRkURDEYRDYaATYaAogAXyojTwJUKExQsCJDMRkURDEYRIgAFiojTwJUKExQsCJDMRlA/54xGBREIkOKAAEpvEgpgBwAEgAAAAAAAABGAAAAAAAAAAIACHRlc3ROYW1lvym9RCQSRCm9RCQSRCKJigIBK4v+UEm8SEmL/7++RIv/EkQiiYoBASuL/1C+RImKAQEri/9QvUUBiQ==", + "approval": "CiADAQAcJgQEFR98dQ11c2VycwAAAAAAAAAAAQAFdXNlcnMxG0EAgIIEBMqtFiMEB5wnvQRqArNQBI7iw2Q2GgCOBABIAC0AGgACI0MxGRREMRhENhoBiACqKiNPAlQoTFCwIkMxGRREMRhENhoBiACIKExQsCJDMRkURDEYRDYaATYaAogAXCojTwJUKExQsCJDMRkURDEYRIgAFiojTwJUKExQsCJDMRlA/54xGBREIkMpvEgpgBwAEgAAAAAAAABGAAAAAAAAAAIACHRlc3ROYW1lvym9RCQSRCm9RCQSRCKJigIBK4v+UEm8SEmL/7++RIv/EkQiiYoBASuL/1C+RImKAQEri/9QvUUBiQ==", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, - "minor": 3, - "patch": 3 + "minor": 5, + "patch": 2 } }, "events": [], diff --git a/projects/python-examples/smart_contracts/artifacts/struct_in_box/struct_in_box_map_client.py b/projects/python-examples/smart_contracts/artifacts/struct_in_box/struct_in_box_map_client.py index f3a439e..e37f72d 100644 --- a/projects/python-examples/smart_contracts/artifacts/struct_in_box/struct_in_box_map_client.py +++ b/projects/python-examples/smart_contracts/artifacts/struct_in_box/struct_in_box_map_client.py @@ -19,7 +19,7 @@ import algokit_utils from algokit_utils import AlgorandClient as _AlgoKitAlgorandClient -_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "box_map_test", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}, {"type": "(string,uint64,uint64)", "name": "value", "struct": "UserStruct"}], "name": "box_map_set", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "box_map_get", "returns": {"type": "(string,uint64,uint64)", "struct": "UserStruct"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "box_map_exists", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}], "name": "StructInBoxMap", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {"user_map": {"keyType": "uint64", "valueType": "UserStruct", "prefix": "dXNlcnM="}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {"UserStruct": [{"name": "name", "type": "string"}, {"name": "id", "type": "uint64"}, {"name": "asset", "type": "uint64"}]}, "byteCode": {"approval": "CiADAQAcJgQEFR98dQ11c2VycwAAAAAAAAAAAQAFdXNlcnMxG0EAgIIEBMqtFiMEB5wnvQRqArNQBI7iw2Q2GgCOBABIAC0AGgACI0MxGRREMRhENhoBiACtKiNPAlQoTFCwIkMxGRREMRhENhoBiACLKExQsCJDMRkURDEYRDYaATYaAogAXyojTwJUKExQsCJDMRkURDEYRIgAFiojTwJUKExQsCJDMRlA/54xGBREIkOKAAEpvEgpgBwAEgAAAAAAAABGAAAAAAAAAAIACHRlc3ROYW1lvym9RCQSRCm9RCQSRCKJigIBK4v+UEm8SEmL/7++RIv/EkQiiYoBASuL/1C+RImKAQEri/9QvUUBiQ==", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 3, "patch": 3}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuc3RydWN0X2luX2JveC5jb250cmFjdC5TdHJ1Y3RJbkJveE1hcC5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMjgKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwIDB4MDAgInVzZXJzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTEKICAgIC8vIGNsYXNzIFN0cnVjdEluQm94TWFwKGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A5CiAgICBwdXNoYnl0ZXNzIDB4Y2FhZDE2MjMgMHgwNzljMjdiZCAweDZhMDJiMzUwIDB4OGVlMmMzNjQgLy8gbWV0aG9kICJib3hfbWFwX3Rlc3QoKWJvb2wiLCBtZXRob2QgImJveF9tYXBfc2V0KHVpbnQ2NCwoc3RyaW5nLHVpbnQ2NCx1aW50NjQpKWJvb2wiLCBtZXRob2QgImJveF9tYXBfZ2V0KHVpbnQ2NCkoc3RyaW5nLHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJib3hfbWFwX2V4aXN0cyh1aW50NjQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYm94X21hcF90ZXN0X3JvdXRlQDUgbWFpbl9ib3hfbWFwX3NldF9yb3V0ZUA2IG1haW5fYm94X21hcF9nZXRfcm91dGVANyBtYWluX2JveF9tYXBfZXhpc3RzX3JvdXRlQDgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX2JveF9tYXBfZXhpc3RzX3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGJveF9tYXBfZXhpc3RzCiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX2dldF9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMQogICAgLy8gY2xhc3MgU3RydWN0SW5Cb3hNYXAoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBib3hfbWFwX2dldAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3NldF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMQogICAgLy8gY2xhc3MgU3RydWN0SW5Cb3hNYXAoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBib3hfbWFwX3NldAogICAgYnl0ZWNfMiAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF90ZXN0X3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYm94X21hcF90ZXN0CiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LlN0cnVjdEluQm94TWFwLmJveF9tYXBfdGVzdCgpIC0+IHVpbnQ2NDoKYm94X21hcF90ZXN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTUtMTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfdGVzdChzZWxmKSAtPiBib29sOgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToyMAogICAgLy8gc2VsZi51c2VyX21hcFtrZXlfMF0gPSB2YWx1ZS5jb3B5KCkKICAgIGJ5dGVjXzEgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlY18xIC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjE4CiAgICAvLyB2YWx1ZSA9IFVzZXJTdHJ1Y3QoYXJjNC5TdHJpbmcoInRlc3ROYW1lIiksIGFyYzQuVUludDY0KDcwKSwgYXJjNC5VSW50NjQoMikpCiAgICBwdXNoYnl0ZXMgMHgwMDEyMDAwMDAwMDAwMDAwMDA0NjAwMDAwMDAwMDAwMDAwMDIwMDA4NzQ2NTczNzQ0ZTYxNmQ2NQogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjAKICAgIC8vIHNlbGYudXNlcl9tYXBba2V5XzBdID0gdmFsdWUuY29weSgpCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToyMQogICAgLy8gYXNzZXJ0IHNlbGYudXNlcl9tYXBba2V5XzBdLmJ5dGVzLmxlbmd0aCA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGJ5dGVjXzEgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudXNlcl9tYXAgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMjgKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjIyCiAgICAvLyBhc3NlcnQgc2VsZi51c2VyX21hcC5sZW5ndGgoa2V5XzApID09IHZhbHVlLmJ5dGVzLmxlbmd0aAogICAgYnl0ZWNfMSAvLyAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwCiAgICBib3hfbGVuCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51c2VyX21hcCBlbnRyeSBleGlzdHMKICAgIGludGNfMiAvLyAyOAogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjMKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnN0cnVjdF9pbl9ib3guY29udHJhY3QuU3RydWN0SW5Cb3hNYXAuYm94X21hcF9zZXQoa2V5OiBieXRlcywgdmFsdWU6IGJ5dGVzKSAtPiB1aW50NjQ6CmJveF9tYXBfc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjUtMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfc2V0KHNlbGYsIGtleTogYXJjNC5VSW50NjQsIHZhbHVlOiBVc2VyU3RydWN0KSAtPiBib29sOgogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToyNwogICAgLy8gc2VsZi51c2VyX21hcFtrZXldID0gdmFsdWUuY29weSgpCiAgICBieXRlY18zIC8vICJ1c2VycyIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjI4CiAgICAvLyBhc3NlcnQgc2VsZi51c2VyX21hcFtrZXldID09IHZhbHVlCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51c2VyX21hcCBlbnRyeSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjkKICAgIC8vIHJldHVybiBUcnVlCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnN0cnVjdF9pbl9ib3guY29udHJhY3QuU3RydWN0SW5Cb3hNYXAuYm94X21hcF9nZXQoa2V5OiBieXRlcykgLT4gYnl0ZXM6CmJveF9tYXBfZ2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzEtMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfZ2V0KHNlbGYsIGtleTogYXJjNC5VSW50NjQpIC0+IFVzZXJTdHJ1Y3Q6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjMzCiAgICAvLyByZXR1cm4gc2VsZi51c2VyX21hcFtrZXldCiAgICBieXRlY18zIC8vICJ1c2VycyIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51c2VyX21hcCBlbnRyeSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LlN0cnVjdEluQm94TWFwLmJveF9tYXBfZXhpc3RzKGtleTogYnl0ZXMpIC0+IHVpbnQ2NDoKYm94X21hcF9leGlzdHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNS0zNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYm94X21hcF9leGlzdHMoc2VsZiwga2V5OiBhcmM0LlVJbnQ2NCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzcKICAgIC8vIHJldHVybiBrZXkgaW4gc2VsZi51c2VyX21hcAogICAgYnl0ZWNfMyAvLyAidXNlcnMiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [80, 104, 123, 150], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [176], "errorMessage": "can only call when creating"}, {"pc": [83, 107, 126, 153], "errorMessage": "can only call when not creating"}, {"pc": [219, 225, 246, 261], "errorMessage": "check self.user_map entry exists"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" +_APP_SPEC_JSON = r"""{"arcs": [22, 28], "bareActions": {"call": [], "create": ["NoOp"]}, "methods": [{"actions": {"call": ["NoOp"], "create": []}, "args": [], "name": "box_map_test", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}, {"type": "(string,uint64,uint64)", "name": "value", "struct": "UserStruct"}], "name": "box_map_set", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "box_map_get", "returns": {"type": "(string,uint64,uint64)", "struct": "UserStruct"}, "events": [], "readonly": false, "recommendations": {}}, {"actions": {"call": ["NoOp"], "create": []}, "args": [{"type": "uint64", "name": "key"}], "name": "box_map_exists", "returns": {"type": "bool"}, "events": [], "readonly": false, "recommendations": {}}], "name": "StructInBoxMap", "state": {"keys": {"box": {}, "global": {}, "local": {}}, "maps": {"box": {"user_map": {"keyType": "uint64", "valueType": "UserStruct", "prefix": "dXNlcnM="}}, "global": {}, "local": {}}, "schema": {"global": {"bytes": 0, "ints": 0}, "local": {"bytes": 0, "ints": 0}}}, "structs": {"UserStruct": [{"name": "name", "type": "string"}, {"name": "id", "type": "uint64"}, {"name": "asset", "type": "uint64"}]}, "byteCode": {"approval": "CiADAQAcJgQEFR98dQ11c2VycwAAAAAAAAAAAQAFdXNlcnMxG0EAgIIEBMqtFiMEB5wnvQRqArNQBI7iw2Q2GgCOBABIAC0AGgACI0MxGRREMRhENhoBiACqKiNPAlQoTFCwIkMxGRREMRhENhoBiACIKExQsCJDMRkURDEYRDYaATYaAogAXCojTwJUKExQsCJDMRkURDEYRIgAFiojTwJUKExQsCJDMRlA/54xGBREIkMpvEgpgBwAEgAAAAAAAABGAAAAAAAAAAIACHRlc3ROYW1lvym9RCQSRCm9RCQSRCKJigIBK4v+UEm8SEmL/7++RIv/EkQiiYoBASuL/1C+RImKAQEri/9QvUUBiQ==", "clear": "CoEBQw=="}, "compilerInfo": {"compiler": "puya", "compilerVersion": {"major": 4, "minor": 5, "patch": 2}}, "events": [], "networks": {}, "source": {"approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuc3RydWN0X2luX2JveC5jb250cmFjdC5TdHJ1Y3RJbkJveE1hcC5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMjgKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwIDB4MDAgInVzZXJzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MTEKICAgIC8vIGNsYXNzIFN0cnVjdEluQm94TWFwKGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A5CiAgICBwdXNoYnl0ZXNzIDB4Y2FhZDE2MjMgMHgwNzljMjdiZCAweDZhMDJiMzUwIDB4OGVlMmMzNjQgLy8gbWV0aG9kICJib3hfbWFwX3Rlc3QoKWJvb2wiLCBtZXRob2QgImJveF9tYXBfc2V0KHVpbnQ2NCwoc3RyaW5nLHVpbnQ2NCx1aW50NjQpKWJvb2wiLCBtZXRob2QgImJveF9tYXBfZ2V0KHVpbnQ2NCkoc3RyaW5nLHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJib3hfbWFwX2V4aXN0cyh1aW50NjQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYm94X21hcF90ZXN0X3JvdXRlQDUgbWFpbl9ib3hfbWFwX3NldF9yb3V0ZUA2IG1haW5fYm94X21hcF9nZXRfcm91dGVANyBtYWluX2JveF9tYXBfZXhpc3RzX3JvdXRlQDgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICBpbnRjXzEgLy8gMAogICAgcmV0dXJuCgptYWluX2JveF9tYXBfZXhpc3RzX3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGJveF9tYXBfZXhpc3RzCiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX2dldF9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMQogICAgLy8gY2xhc3MgU3RydWN0SW5Cb3hNYXAoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBib3hfbWFwX2dldAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfbWFwX3NldF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxMQogICAgLy8gY2xhc3MgU3RydWN0SW5Cb3hNYXAoYXJjNC5BUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBib3hfbWFwX3NldAogICAgYnl0ZWNfMiAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYm94X21hcF90ZXN0X3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYm94X21hcF90ZXN0CiAgICBieXRlY18yIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjExCiAgICAvLyBjbGFzcyBTdHJ1Y3RJbkJveE1hcChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDExCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LlN0cnVjdEluQm94TWFwLmJveF9tYXBfdGVzdCgpIC0+IHVpbnQ2NDoKYm94X21hcF90ZXN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjAKICAgIC8vIHNlbGYudXNlcl9tYXBba2V5XzBdID0gdmFsdWUuY29weSgpCiAgICBieXRlY18xIC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWNfMSAvLyAweDc1NzM2NTcyNzMwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToxOAogICAgLy8gdmFsdWUgPSBVc2VyU3RydWN0KGFyYzQuU3RyaW5nKCJ0ZXN0TmFtZSIpLCBhcmM0LlVJbnQ2NCg3MCksIGFyYzQuVUludDY0KDIpKQogICAgcHVzaGJ5dGVzIDB4MDAxMjAwMDAwMDAwMDAwMDAwNDYwMDAwMDAwMDAwMDAwMDAyMDAwODc0NjU3Mzc0NGU2MTZkNjUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjIwCiAgICAvLyBzZWxmLnVzZXJfbWFwW2tleV8wXSA9IHZhbHVlLmNvcHkoKQogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjEKICAgIC8vIGFzc2VydCBzZWxmLnVzZXJfbWFwW2tleV8wXS5ieXRlcy5sZW5ndGggPT0gdmFsdWUuYnl0ZXMubGVuZ3RoCiAgICBieXRlY18xIC8vIDB4NzU3MzY1NzI3MzAwMDAwMDAwMDAwMDAwMDAKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnVzZXJfbWFwIGVudHJ5IGV4aXN0cwogICAgaW50Y18yIC8vIDI4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToyMgogICAgLy8gYXNzZXJ0IHNlbGYudXNlcl9tYXAubGVuZ3RoKGtleV8wKSA9PSB2YWx1ZS5ieXRlcy5sZW5ndGgKICAgIGJ5dGVjXzEgLy8gMHg3NTczNjU3MjczMDAwMDAwMDAwMDAwMDAwMAogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudXNlcl9tYXAgZW50cnkgZXhpc3RzCiAgICBpbnRjXzIgLy8gMjgKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjIzCiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LlN0cnVjdEluQm94TWFwLmJveF9tYXBfc2V0KGtleTogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gdWludDY0Ogpib3hfbWFwX3NldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjI1LTI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfbWFwX3NldChzZWxmLCBrZXk6IGFyYzQuVUludDY0LCB2YWx1ZTogVXNlclN0cnVjdCkgLT4gYm9vbDoKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MjcKICAgIC8vIHNlbGYudXNlcl9tYXBba2V5XSA9IHZhbHVlLmNvcHkoKQogICAgYnl0ZWNfMyAvLyAidXNlcnMiCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weToyOAogICAgLy8gYXNzZXJ0IHNlbGYudXNlcl9tYXBba2V5XSA9PSB2YWx1ZQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudXNlcl9tYXAgZW50cnkgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjI5CiAgICAvLyByZXR1cm4gVHJ1ZQogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zdHJ1Y3RfaW5fYm94LmNvbnRyYWN0LlN0cnVjdEluQm94TWFwLmJveF9tYXBfZ2V0KGtleTogYnl0ZXMpIC0+IGJ5dGVzOgpib3hfbWFwX2dldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjMxLTMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfbWFwX2dldChzZWxmLCBrZXk6IGFyYzQuVUludDY0KSAtPiBVc2VyU3RydWN0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvc3RydWN0X2luX2JveC9jb250cmFjdC5weTozMwogICAgLy8gcmV0dXJuIHNlbGYudXNlcl9tYXBba2V5XQogICAgYnl0ZWNfMyAvLyAidXNlcnMiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudXNlcl9tYXAgZW50cnkgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuc3RydWN0X2luX2JveC5jb250cmFjdC5TdHJ1Y3RJbkJveE1hcC5ib3hfbWFwX2V4aXN0cyhrZXk6IGJ5dGVzKSAtPiB1aW50NjQ6CmJveF9tYXBfZXhpc3RzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3N0cnVjdF9pbl9ib3gvY29udHJhY3QucHk6MzUtMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIGJveF9tYXBfZXhpc3RzKHNlbGYsIGtleTogYXJjNC5VSW50NjQpIC0+IGJvb2w6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zdHJ1Y3RfaW5fYm94L2NvbnRyYWN0LnB5OjM3CiAgICAvLyByZXR1cm4ga2V5IGluIHNlbGYudXNlcl9tYXAKICAgIGJ5dGVjXzMgLy8gInVzZXJzIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgcmV0c3ViCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"}, "sourceInfo": {"approval": {"pcOffsetMethod": "none", "sourceInfo": [{"pc": [80, 104, 123, 150], "errorMessage": "OnCompletion is not NoOp"}, {"pc": [176], "errorMessage": "can only call when creating"}, {"pc": [83, 107, 126, 153], "errorMessage": "can only call when not creating"}, {"pc": [216, 222, 243, 258], "errorMessage": "check self.user_map entry exists"}]}, "clear": {"pcOffsetMethod": "none", "sourceInfo": []}}, "templateVariables": {}}""" APP_SPEC = algokit_utils.Arc56Contract.from_json(_APP_SPEC_JSON) def _parse_abi_args(args: object | None = None) -> list[object] | None: diff --git a/projects/python-examples/smart_contracts/artifacts/subsidize_app_call/subsidize_app_call.puya.map b/projects/python-examples/smart_contracts/artifacts/subsidize_app_call/subsidize_app_call.puya.map index e256725..df9e744 100644 --- a/projects/python-examples/smart_contracts/artifacts/subsidize_app_call/subsidize_app_call.puya.map +++ b/projects/python-examples/smart_contracts/artifacts/subsidize_app_call/subsidize_app_call.puya.map @@ -40,151 +40,410 @@ "stack_out": [] }, "7": { - "op": "txn Receiver" + "op": "txn Receiver", + "defined_out": [ + "tmp%2#0" + ], + "stack_out": [ + "tmp%2#0" + ] }, "9": { - "op": "txn Sender" + "op": "txn Sender", + "defined_out": [ + "tmp%2#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%2#0", + "tmp%3#0" + ] }, "11": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%4#0" + ], + "stack_out": [ + "tmp%4#0" + ] }, "12": { - "op": "bz main_bool_false@12" + "op": "bz main_bool_false@12", + "stack_out": [] }, "15": { - "op": "txn Amount" + "op": "txn Amount", + "defined_out": [ + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0" + ] }, "17": { - "op": "bnz main_bool_false@12" + "op": "bnz main_bool_false@12", + "stack_out": [] }, "20": { - "op": "txn RekeyTo" + "op": "txn RekeyTo", + "defined_out": [ + "tmp%7#0" + ], + "stack_out": [ + "tmp%7#0" + ] }, "22": { - "op": "global ZeroAddress" + "op": "global ZeroAddress", + "defined_out": [ + "tmp%7#0", + "tmp%8#0" + ], + "stack_out": [ + "tmp%7#0", + "tmp%8#0" + ] }, "24": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0" + ] }, "25": { - "op": "bz main_bool_false@12" + "op": "bz main_bool_false@12", + "stack_out": [] }, "28": { - "op": "txn CloseRemainderTo" + "op": "txn CloseRemainderTo", + "defined_out": [ + "tmp%10#0" + ], + "stack_out": [ + "tmp%10#0" + ] }, "30": { - "op": "global ZeroAddress" + "op": "global ZeroAddress", + "defined_out": [ + "tmp%10#0", + "tmp%11#0" + ], + "stack_out": [ + "tmp%10#0", + "tmp%11#0" + ] }, "32": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%12#0" + ], + "stack_out": [ + "tmp%12#0" + ] }, "33": { - "op": "bz main_bool_false@12" + "op": "bz main_bool_false@12", + "stack_out": [] }, "36": { - "op": "txn Fee" + "op": "txn Fee", + "defined_out": [ + "tmp%13#0" + ], + "stack_out": [ + "tmp%13#0" + ] }, "38": { - "op": "pushint 2 // 2" + "op": "pushint 2 // 2", + "defined_out": [ + "2", + "tmp%13#0" + ], + "stack_out": [ + "tmp%13#0", + "2" + ] }, "40": { - "op": "global MinTxnFee" + "op": "global MinTxnFee", + "defined_out": [ + "2", + "tmp%13#0", + "tmp%14#0" + ], + "stack_out": [ + "tmp%13#0", + "2", + "tmp%14#0" + ] }, "42": { - "op": "*" + "op": "*", + "defined_out": [ + "tmp%13#0", + "tmp%15#0" + ], + "stack_out": [ + "tmp%13#0", + "tmp%15#0" + ] }, "43": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%16#0" + ], + "stack_out": [ + "tmp%16#0" + ] }, "44": { - "op": "bz main_bool_false@12" + "op": "bz main_bool_false@12", + "stack_out": [] }, "47": { - "op": "txn LastValid" + "op": "txn LastValid", + "defined_out": [ + "tmp%17#0" + ], + "stack_out": [ + "tmp%17#0" + ] }, "49": { - "op": "intc_1 // TMPL_EXPIRATION_ROUND" + "op": "intc_1 // TMPL_EXPIRATION_ROUND", + "defined_out": [ + "TMPL_EXPIRATION_ROUND", + "tmp%17#0" + ], + "stack_out": [ + "tmp%17#0", + "TMPL_EXPIRATION_ROUND" + ] }, "50": { - "op": "<=" + "op": "<=", + "defined_out": [ + "tmp%18#0" + ], + "stack_out": [ + "tmp%18#0" + ] }, "51": { - "op": "bz main_bool_false@12" + "op": "bz main_bool_false@12", + "stack_out": [] }, "54": { - "op": "global GenesisHash" + "op": "global GenesisHash", + "defined_out": [ + "tmp%19#0" + ], + "stack_out": [ + "tmp%19#0" + ] }, "56": { - "op": "bytec_0 // TMPL_TARGET_NETWORK_GENESIS" + "op": "bytec_0 // TMPL_TARGET_NETWORK_GENESIS", + "defined_out": [ + "TMPL_TARGET_NETWORK_GENESIS", + "tmp%19#0" + ], + "stack_out": [ + "tmp%19#0", + "TMPL_TARGET_NETWORK_GENESIS" + ] }, "57": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%20#0" + ], + "stack_out": [ + "tmp%20#0" + ] }, "58": { - "op": "bz main_bool_false@12" + "op": "bz main_bool_false@12", + "stack_out": [] }, "61": { - "op": "txn GroupIndex" + "op": "txn GroupIndex", + "defined_out": [ + "tmp%21#0" + ], + "stack_out": [ + "tmp%21#0" + ] }, "63": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "defined_out": [ + "1", + "tmp%21#0" + ], + "stack_out": [ + "tmp%21#0", + "1" + ] }, "64": { - "op": "-" + "op": "-", + "defined_out": [ + "tmp%22#0" + ], + "stack_out": [ + "tmp%22#0" + ] }, "65": { - "op": "gtxns TypeEnum" + "op": "gtxns TypeEnum", + "defined_out": [ + "tmp%23#0" + ], + "stack_out": [ + "tmp%23#0" + ] }, "67": { - "op": "pushint 6 // appl" + "op": "pushint 6 // appl", + "defined_out": [ + "appl", + "tmp%23#0" + ], + "stack_out": [ + "tmp%23#0", + "appl" + ] }, "69": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%24#0" + ], + "stack_out": [ + "tmp%24#0" + ] }, "70": { - "op": "bz main_bool_false@12" + "op": "bz main_bool_false@12", + "stack_out": [] }, "73": { - "op": "txn GroupIndex" + "op": "txn GroupIndex", + "defined_out": [ + "tmp%25#0" + ], + "stack_out": [ + "tmp%25#0" + ] }, "75": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "stack_out": [ + "tmp%25#0", + "1" + ] }, "76": { - "op": "-" + "op": "-", + "defined_out": [ + "tmp%26#0" + ], + "stack_out": [ + "tmp%26#0" + ] }, "77": { - "op": "gtxns ApplicationID" + "op": "gtxns ApplicationID", + "defined_out": [ + "tmp%27#0" + ], + "stack_out": [ + "tmp%27#0" + ] }, "79": { - "op": "intc_2 // TMPL_KNOWN_APP" + "op": "intc_2 // TMPL_KNOWN_APP", + "defined_out": [ + "TMPL_KNOWN_APP", + "tmp%27#0" + ], + "stack_out": [ + "tmp%27#0", + "TMPL_KNOWN_APP" + ] }, "80": { - "op": "==" + "op": "==", + "defined_out": [ + "tmp%28#0" + ], + "stack_out": [ + "tmp%28#0" + ] }, "81": { - "op": "bz main_bool_false@12" + "op": "bz main_bool_false@12", + "stack_out": [] }, "84": { - "op": "txn GroupIndex" + "op": "txn GroupIndex", + "defined_out": [ + "tmp%29#0" + ], + "stack_out": [ + "tmp%29#0" + ] }, "86": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "stack_out": [ + "tmp%29#0", + "1" + ] }, "87": { - "op": "-" + "op": "-", + "defined_out": [ + "tmp%30#0" + ], + "stack_out": [ + "tmp%30#0" + ] }, "88": { - "op": "gtxns Fee" + "op": "gtxns Fee", + "defined_out": [ + "tmp%31#0" + ], + "stack_out": [ + "tmp%31#0" + ] }, "90": { - "op": "bnz main_bool_false@12" + "op": "bnz main_bool_false@12", + "stack_out": [] }, "93": { - "op": "intc_0 // 1" + "op": "intc_0 // 1", + "defined_out": [ + "and_result%0#0" + ], + "stack_out": [ + "and_result%0#0" + ] }, "94": { - "op": "return" + "op": "return", + "stack_out": [] }, "95": { "block": "main_bool_false@12", @@ -198,7 +457,8 @@ ] }, "97": { - "op": "return" + "op": "return", + "stack_out": [] } } } \ No newline at end of file diff --git a/projects/python-examples/smart_contracts/control_flow/contract.py b/projects/python-examples/smart_contracts/control_flow/contract.py index 14d46de..a4538a2 100644 --- a/projects/python-examples/smart_contracts/control_flow/contract.py +++ b/projects/python-examples/smart_contracts/control_flow/contract.py @@ -3,9 +3,8 @@ from algopy import ARC4Contract, String, UInt64, arc4, uenumerate, urange -# example: IF_ELSE class IfElseExample(ARC4Contract): - + # example: IF_ELSE @arc4.abimethod def is_rich(self, account_balance: UInt64) -> String: if account_balance > 1000: @@ -15,19 +14,21 @@ def is_rich(self, account_balance: UInt64) -> String: else: return String("This account is poor :(") + # example: IF_ELSE + + # example: TERNARY @arc4.abimethod def is_even(self, number: UInt64) -> String: return String("Even") if number % 2 == 0 else String("Odd") + # example: TERNARY -# example: IF_ELSE # example: FOR_LOOP FourArray: t.TypeAlias = arc4.StaticArray[arc4.UInt8, t.Literal[4]] class ForLoopsExample(ARC4Contract): - # urange: reversed items, forward index @arc4.abimethod def for_loop(self) -> FourArray: @@ -51,10 +52,8 @@ def for_loop(self) -> FourArray: # example: MATCH class MatchStatements(ARC4Contract): - @arc4.abimethod def get_day(self, date: UInt64) -> String: - match date: case UInt64(0): return String("Monday") @@ -79,10 +78,8 @@ def get_day(self, date: UInt64) -> String: # example: WHILE_LOOP class WhileLoopExample(ARC4Contract): - @arc4.abimethod def loop(self) -> UInt64: - num = UInt64(10) loop_count = UInt64(0) diff --git a/projects/typescript-examples/contracts/ControlFlow/contract.algo.ts b/projects/typescript-examples/contracts/ControlFlow/contract.algo.ts index 8b95d6c..0c85eb1 100644 --- a/projects/typescript-examples/contracts/ControlFlow/contract.algo.ts +++ b/projects/typescript-examples/contracts/ControlFlow/contract.algo.ts @@ -31,7 +31,9 @@ export default class ControlFlow extends Contract { return 'This account is poor :(' } } + // example: IF_ELSE + // example: TERNARY /** * Determines if a number is even or odd * @param number The number to check @@ -41,7 +43,7 @@ export default class ControlFlow extends Contract { public isEven(number: uint64): string { return number % 2 === 0 ? 'Even' : 'Odd' } - // example: IF_ELSE + // example: TERNARY // example: FOR_LOOP /** diff --git a/projects/typescript-examples/contracts/artifacts/clients/ControlFlow/ControlFlowClient.ts b/projects/typescript-examples/contracts/artifacts/clients/ControlFlow/ControlFlowClient.ts index e78f792..9a23ec4 100644 --- a/projects/typescript-examples/contracts/artifacts/clients/ControlFlow/ControlFlowClient.ts +++ b/projects/typescript-examples/contracts/artifacts/clients/ControlFlow/ControlFlowClient.ts @@ -24,7 +24,7 @@ import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerR import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' import SimulateResponse = modelsv2.SimulateResponse -export const APP_SPEC: Arc56Contract = {"name":"ControlFlow","structs":{},"methods":[{"name":"isRich","args":[{"type":"uint64","name":"accountBalance","desc":"The account balance to check"}],"returns":{"type":"string","desc":"A string describing the account's wealth status"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Determines if an account is rich based on its balance","events":[],"recommendations":{}},{"name":"isEven","args":[{"type":"uint64","name":"number","desc":"The number to check"}],"returns":{"type":"string","desc":"\"Even\" if the number is even, \"Odd\" otherwise"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Determines if a number is even or odd","events":[],"recommendations":{}},{"name":"forLoop","args":[],"returns":{"type":"uint64[]","desc":"An array of uint64 values in reversed order"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Demonstrates different types of for loops","events":[],"recommendations":{}},{"name":"getDay","args":[{"type":"uint64","name":"date","desc":"A number from 0-6 representing a day of the week"}],"returns":{"type":"string","desc":"The name of the day, or \"Invalid day\" if out of range"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns the day of the week based on a numeric input","events":[],"recommendations":{}},{"name":"calculateBoxStorageCost","args":[{"type":"string","name":"boxSizeLabel","desc":"The category of box size as a string label. Valid values:\n'xs' (8B), 'sm' (64B), 'md' (256B), 'lg' (1KB), 'max' (32KB)"},{"type":"string","name":"boxName","desc":"The name of the box (used to calculate name length)"}],"returns":{"type":"uint64","desc":"The MBR increase in microAlgos, or 0 if invalid size label"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Calculates the minimum balance requirement (MBR) increase for box storage\nbased on different box size categories.","events":[],"recommendations":{}},{"name":"loop","args":[],"returns":{"type":"uint64","desc":"The number of iterations performed"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Demonstrates while loop with continue and break statements","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"ControlFlow Contract\n\nThis contract demonstrates various control flow operations in Algorand smart contracts.\nIt shows how to use:\n- If/else statements\n- For loops\n- Switch statements (equivalent to Python's match)\n- While loops\n\nThe contract implements the same functionality as its Python counterpart\nin python-examples/smart_contracts/control_flow/contract.py","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[76,93,122,150,166,194],"errorMessage":"OnCompletion is not NoOp"},{"pc":[537],"errorMessage":"Sum of reversed array should be 6"},{"pc":[227],"errorMessage":"can only call when creating"},{"pc":[79,96,125,153,169,197],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAwMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCiAgICBwdXNoYnl0ZXNzIDB4ZWYwODJmN2IgMHg5NGZiN2VmMSAweDcyMmJhNjY4IDB4N2ZhYzZhNWUgMHhjOWMyYmM1NyAweGY4MmEyNjU0IC8vIG1ldGhvZCAiaXNSaWNoKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImlzRXZlbih1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJmb3JMb29wKCl1aW50NjRbXSIsIG1ldGhvZCAiZ2V0RGF5KHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0KHN0cmluZyxzdHJpbmcpdWludDY0IiwgbWV0aG9kICJsb29wKCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2lzUmljaF9yb3V0ZUAzIG1haW5faXNFdmVuX3JvdXRlQDQgbWFpbl9mb3JMb29wX3JvdXRlQDUgbWFpbl9nZXREYXlfcm91dGVANiBtYWluX2NhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X3JvdXRlQDcgbWFpbl9sb29wX3JvdXRlQDgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fbG9vcF9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGxvb3AKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY2FsY3VsYXRlQm94U3RvcmFnZUNvc3Rfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldERheV9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6ODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXREYXkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Zvckxvb3Bfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGZvckxvb3AKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNFdmVuX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzRXZlbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNSaWNoX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzUmljaAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuaXNSaWNoKGFjY291bnRCYWxhbmNlOiB1aW50NjQpIC0+IGJ5dGVzOgppc1JpY2g6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNC0yNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc1JpY2goYWNjb3VudEJhbGFuY2U6IHVpbnQ2NCk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBpZiAoYWNjb3VudEJhbGFuY2UgPiAxMDAwKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgMTAwMCAvLyAxMDAwCiAgICA+CiAgICBieiBpc1JpY2hfZWxzZV9ib2R5QDIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyByaWNoIScKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIHJpY2ghIgogICAgcmV0c3ViCgppc1JpY2hfZWxzZV9ib2R5QDI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gfSBlbHNlIGlmIChhY2NvdW50QmFsYW5jZSA+IDEwMCkgewogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgID4KICAgIGJ6IGlzUmljaF9lbHNlX2JvZHlANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHJldHVybiAnVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgZG9pbmcgd2VsbC4iCiAgICByZXRzdWIKCmlzUmljaF9lbHNlX2JvZHlANDoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyBwb29yIDooJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgcG9vciA6KCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5pc0V2ZW4obnVtYmVyOiB1aW50NjQpIC0+IGJ5dGVzOgppc0V2ZW46CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MC00MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc0V2ZW4obnVtYmVyOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcmV0dXJuIG51bWJlciAlIDIgPT09IDAgPyAnRXZlbicgOiAnT2RkJwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgJQogICAgYm56IGlzRXZlbl90ZXJuYXJ5X2ZhbHNlQDIKICAgIHB1c2hieXRlcyAiRXZlbiIKICAgIHJldHN1YgoKaXNFdmVuX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyByZXR1cm4gbnVtYmVyICUgMiA9PT0gMCA/ICdFdmVuJyA6ICdPZGQnCiAgICBwdXNoYnl0ZXMgIk9kZCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5mb3JMb29wKCkgLT4gYnl0ZXM6CmZvckxvb3A6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1MS01MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBmb3JMb29wKCk6IHVpbnQ2NFtdIHsKICAgIHByb3RvIDAgMQogICAgaW50Y18xIC8vIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwbiA0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gbGV0IG51bWJlcnM6IHVpbnQ2NFtdID0gW10KICAgIGJ5dGVjXzEgLy8gMHgwMDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1NwogICAgLy8gZm9yIChjb25zdCBpdGVtIG9mIHVyYW5nZSg0KSkgewogICAgaW50Y18xIC8vIDAKCmZvckxvb3BfZm9yX2hlYWRlckAxOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGZyYW1lX2RpZyA3CiAgICBwdXNoaW50IDQgLy8gNAogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG51bWJlcnMgPSBbLi4ubnVtYmVycywgaXRlbV0KICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDcKICAgIGR1cAogICAgY292ZXIgMgogICAgaXRvYgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICAvCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgNgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDcKICAgIGIgZm9yTG9vcF9mb3JfaGVhZGVyQDEKCmZvckxvb3BfYWZ0ZXJfZm9yQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gbGV0IHJldmVyc2VkOiB1aW50NjRbXSA9IFtdCiAgICBieXRlY18xIC8vIDB4MDAwMAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gZm9yIChjb25zdCBudW0gb2YgbnVtYmVycykgewogICAgZnJhbWVfZGlnIDYKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgpmb3JMb29wX2Zvcl9oZWFkZXJANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBmb3IgKGNvbnN0IG51bSBvZiBudW1iZXJzKSB7CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IGZvckxvb3BfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2OAogICAgLy8gcmV2ZXJzZWQgPSBbbnVtLCAuLi5yZXZlcnNlZF0KICAgIGl0b2IKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgLwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJANQoKZm9yTG9vcF9hZnRlcl9mb3JAODoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjcyCiAgICAvLyBsZXQgc3VtOiB1aW50NjQgPSAwCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgMgogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNAoKZm9yTG9vcF9mb3JfaGVhZGVyQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JAMTIKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VtICs9IG51bQogICAgZnJhbWVfZGlnIDUKICAgICsKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJAOQoKZm9yTG9vcF9hZnRlcl9mb3JAMTI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gYXNzZXJ0KHN1bSA9PT0gNiwgJ1N1bSBvZiByZXZlcnNlZCBhcnJheSBzaG91bGQgYmUgNicpCiAgICBmcmFtZV9kaWcgNQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQgLy8gU3VtIG9mIHJldmVyc2VkIGFycmF5IHNob3VsZCBiZSA2CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gcmV0dXJuIHJldmVyc2VkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuZ2V0RGF5KGRhdGU6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldERheToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjg5LTkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldERheShkYXRlOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5MgogICAgLy8gY2FzZSBVaW50NjQoMSk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTItOTMKICAgIC8vIGNhc2UgVWludDY0KDEpOgogICAgLy8gICByZXR1cm4gJ01vbmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyByZXR1cm4gJ01vbmRheScKICAgIHB1c2hieXRlcyAiTW9uZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTQKICAgIC8vIGNhc2UgVWludDY0KDIpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk0LTk1CiAgICAvLyBjYXNlIFVpbnQ2NCgyKToKICAgIC8vICAgcmV0dXJuICdUdWVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTUKICAgIC8vIHJldHVybiAnVHVlc2RheScKICAgIHB1c2hieXRlcyAiVHVlc2RheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk2CiAgICAvLyBjYXNlIFVpbnQ2NCgzKToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAzIC8vIDMKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5Ni05NwogICAgLy8gY2FzZSBVaW50NjQoMyk6CiAgICAvLyAgIHJldHVybiAnV2VkbmVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIHJldHVybiAnV2VkbmVzZGF5JwogICAgcHVzaGJ5dGVzICJXZWRuZXNkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5OAogICAgLy8gY2FzZSBVaW50NjQoNCk6CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTgtOTkKICAgIC8vIGNhc2UgVWludDY0KDQpOgogICAgLy8gICByZXR1cm4gJ1RodXJzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyByZXR1cm4gJ1RodXJzZGF5JwogICAgcHVzaGJ5dGVzICJUaHVyc2RheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIGNhc2UgVWludDY0KDUpOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDUgLy8gNQogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwMC0xMDEKICAgIC8vIGNhc2UgVWludDY0KDUpOgogICAgLy8gICByZXR1cm4gJ0ZyaWRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDE1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIHJldHVybiAnRnJpZGF5JwogICAgcHVzaGJ5dGVzICJGcmlkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBjYXNlIFVpbnQ2NCg2KToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDItMTAzCiAgICAvLyBjYXNlIFVpbnQ2NCg2KToKICAgIC8vICAgcmV0dXJuICdTYXR1cmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDE4CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHJldHVybiAnU2F0dXJkYXknCiAgICBwdXNoYnl0ZXMgIlNhdHVyZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxODoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNAogICAgLy8gY2FzZSBVaW50NjQoNyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgNyAvLyA3CiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA0LTEwNQogICAgLy8gY2FzZSBVaW50NjQoNyk6CiAgICAvLyAgIHJldHVybiAnU3VuZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMjEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNQogICAgLy8gcmV0dXJuICdTdW5kYXknCiAgICBwdXNoYnl0ZXMgIlN1bmRheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMjE6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIHJldHVybiAnSW52YWxpZCBkYXknCiAgICBwdXNoYnl0ZXMgIkludmFsaWQgZGF5IgogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OkNvbnRyb2xGbG93LmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0KGJveFNpemVMYWJlbDogYnl0ZXMsIGJveE5hbWU6IGJ5dGVzKSAtPiB1aW50NjQ6CmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTIyLTEyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdChib3hTaXplTGFiZWw6IHN0cmluZywgYm94TmFtZTogc3RyaW5nKTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyBjb25zdCBib3hOYW1lTGVuZ3RoOiB1aW50NjQgPSBCeXRlcyhib3hOYW1lKS5sZW5ndGgKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIGNhc2UgJ3hzJzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJ4cyIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMzUtMTM3CiAgICAvLyBjYXNlICd4cyc6CiAgICAvLyAgIGJveFNpemUgPSA4IC8vIDggYnl0ZXMgKGVub3VnaCBmb3IgYSB1aW50NjQpCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gYm94U2l6ZSA9IDggLy8gOCBieXRlcyAoZW5vdWdoIGZvciBhIHVpbnQ2NCkKICAgIGludGNfMiAvLyA4CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9ibG9ja0AxNzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gY29uc3QgbWJySW5jcmVhc2U6IHVpbnQ2NCA9IGJhc2VDb3N0ICsgYnl0ZVVuaXRDb3N0ICogKGJveE5hbWVMZW5ndGggKyBib3hTaXplKQogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNgogICAgLy8gY29uc3QgYnl0ZVVuaXRDb3N0OiB1aW50NjQgPSA0MDAgLy8gbWljcm9BbGdvcyBwZXIgYnl0ZQogICAgcHVzaGludCA0MDAgLy8gNDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIGNvbnN0IG1ickluY3JlYXNlOiB1aW50NjQgPSBiYXNlQ29zdCArIGJ5dGVVbml0Q29zdCAqIChib3hOYW1lTGVuZ3RoICsgYm94U2l6ZSkKICAgICoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gY29uc3QgYmFzZUNvc3Q6IHVpbnQ2NCA9IDI1MDAgLy8gbWljcm9BbGdvcwogICAgcHVzaGludCAyNTAwIC8vIDI1MDAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gY29uc3QgbWJySW5jcmVhc2U6IHVpbnQ2NCA9IGJhc2VDb3N0ICsgYnl0ZVVuaXRDb3N0ICogKGJveE5hbWVMZW5ndGggKyBib3hTaXplKQogICAgKwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTY0CiAgICAvLyByZXR1cm4gbWJySW5jcmVhc2UKICAgIHN3YXAKICAgIHJldHN1YgoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBjYXNlICdzbSc6CiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hieXRlcyAic20iCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM5LTE0MQogICAgLy8gY2FzZSAnc20nOgogICAgLy8gICBib3hTaXplID0gNjQgLy8gNjQgYnl0ZXMKICAgIC8vICAgYnJlYWsKICAgIGJ6IGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyBib3hTaXplID0gNjQgLy8gNjQgYnl0ZXMKICAgIHB1c2hpbnQgNjQgLy8gNjQKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gYnJlYWsKICAgIGIgY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYmxvY2tAMTcKCmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gY2FzZSAnbWQnOgogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoYnl0ZXMgIm1kIgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0My0xNDUKICAgIC8vIGNhc2UgJ21kJzoKICAgIC8vICAgYm94U2l6ZSA9IDI1NiAvLyAyNTYgYnl0ZXMKICAgIC8vICAgYnJlYWsKICAgIGJ6IGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ0CiAgICAvLyBib3hTaXplID0gMjU2IC8vIDI1NiBieXRlcwogICAgcHVzaGludCAyNTYgLy8gMjU2CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDcKICAgIC8vIGNhc2UgJ2xnJzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJsZyIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDctMTQ5CiAgICAvLyBjYXNlICdsZyc6CiAgICAvLyAgIGJveFNpemUgPSAxMDI0IC8vIDFLQgogICAgLy8gICBicmVhawogICAgYnogY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAxMgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ4CiAgICAvLyBib3hTaXplID0gMTAyNCAvLyAxS0IKICAgIHB1c2hpbnQgMTAyNCAvLyAxMDI0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyBjYXNlICdtYXgnOgogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoYnl0ZXMgIm1heCIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTEtMTUzCiAgICAvLyBjYXNlICdtYXgnOgogICAgLy8gICBib3hTaXplID0gMzIwMDAgLy8gMzJLQiAoY2xvc2UgdG8gbWF4IGFsbG93ZWQpCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDE1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGJveFNpemUgPSAzMjAwMCAvLyAzMktCIChjbG9zZSB0byBtYXggYWxsb3dlZCkKICAgIHB1c2hpbnQgMzIwMDAgLy8gMzIwMDAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gYnJlYWsKICAgIGIgY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYmxvY2tAMTcKCmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTcKICAgIC8vIHJldHVybiAwCiAgICBpbnRjXzEgLy8gMAogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OkNvbnRyb2xGbG93Lmxvb3AoKSAtPiB1aW50NjQ6Cmxvb3A6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNzMtMTc0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGxvb3AoKTogdWludDY0IHsKICAgIHByb3RvIDAgMQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyBsZXQgbnVtOiB1aW50NjQgPSAxMAogICAgcHVzaGludCAxMCAvLyAxMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc2CiAgICAvLyBsZXQgbG9vcENvdW50OiB1aW50NjQgPSAwCiAgICBpbnRjXzEgLy8gMAoKbG9vcF93aGlsZV90b3BAMToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3OC0xOTEKICAgIC8vIHdoaWxlIChudW0gPiAwKSB7CiAgICAvLyAgIGlmIChudW0gPiA1KSB7CiAgICAvLyAgICAgbnVtIC09IDEKICAgIC8vICAgICBsb29wQ291bnQgKz0gMQogICAgLy8gICAgIGNvbnRpbnVlCiAgICAvLyAgIH0KICAgIC8vIAogICAgLy8gICBudW0gLT0gMgogICAgLy8gICBsb29wQ291bnQgKz0gMQogICAgLy8gCiAgICAvLyAgIGlmIChudW0gPT09IDEpIHsKICAgIC8vICAgICBicmVhawogICAgLy8gICB9CiAgICAvLyB9CiAgICBmcmFtZV9kaWcgMAogICAgYnogbG9vcF9ibG9ja0A5CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGlmIChudW0gPiA1KSB7CiAgICBmcmFtZV9kaWcgMAogICAgcHVzaGludCA1IC8vIDUKICAgID4KICAgIGJ6IGxvb3BfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODAKICAgIC8vIG51bSAtPSAxCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBsb29wQ291bnQgKz0gMQogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gY29udGludWUKICAgIGIgbG9vcF93aGlsZV90b3BAMQoKbG9vcF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIG51bSAtPSAyCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18zIC8vIDIKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODYKICAgIC8vIGxvb3BDb3VudCArPSAxCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBpZiAobnVtID09PSAxKSB7CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGJ6IGxvb3Bfd2hpbGVfdG9wQDEKCmxvb3BfYmxvY2tAOToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gcmV0dXJuIGxvb3BDb3VudAogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiAEAQAIAiYCBBUffHUCAAAxG0EAxYIGBO8IL3sElPt+8QRyK6ZoBH+sal4EycK8VwT4KiZUNhoAjgYAeABcAEwAMAATAAIjQzEZFEQxGESIArgWKExQsCJDMRkURDEYRDYaAVcCADYaAlcCAIgCORYoTFCwIkMxGRREMRhENhoBF4gBlkkVFlcGAkxQKExQsCJDMRkURDEYRIgAxChMULAiQzEZFEQxGEQ2GgEXiACZSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBF4gAGUkVFlcGAkxQKExQsCJDMRlA/2cxGBREIkOKAQGL/4HoBw1BABiAFVRoaXMgYWNjb3VudCBpcyByaWNoIYmL/4FkDUEAHoAbVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuiYAXVGhpcyBhY2NvdW50IGlzIHBvb3IgOiiJigEBi/8lGEAAB4AERXZlbomAA09kZImKAAEjgABHBCkjiweBBAxBACyLBlcCAIsHSU4CFkkVJAoWVwYCTFBXAgBQSRUkChZXBgJMUIwGIgiMB0L/zCmMAIsGI1mMASOMA4sDiwEMQQA0iwZXAgCLA0lOAiQLWxZJFSQKFlcGAkxQVwIAiwBXAgBQSRUkChZXBgJMUIwAIgiMA0L/xCOMBYsAI1mMAiOMBIsEiwIMQQAZiwBXAgCLBElOAiQLW4sFCIwFIgiMBEL/34sFgQYSRImKAQGL/yISQQAJgAZNb25kYXmJi/8lEkEACoAHVHVlc2RheYmL/4EDEkEADIAJV2VkbmVzZGF5iYv/gQQSQQALgAhUaHVyc2RheYmL/4EFEkEACYAGRnJpZGF5iYv/gQYSQQALgAhTYXR1cmRheYmL/4EHEkEACYAGU3VuZGF5iYALSW52YWxpZCBkYXmJigIBi/8Vi/6AAnhzEkEADiSLAAiBkAMLgcQTCEyJi/6AAnNtEkEABYFAQv/ki/6AAm1kEkEABoGAAkL/1Iv+gAJsZxJBAAaBgAhC/8SL/oADbWF4EkEAB4GA+gFC/7IjTImKAAGBCiOLAEEAKYsAgQUNQQAPiwAiCYwAiwEiCIwBQv/kiwAlCUmMAIsBIgiMASISQf/SiwGMAIk=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract +export const APP_SPEC: Arc56Contract = {"name":"ControlFlow","structs":{},"methods":[{"name":"isRich","args":[{"type":"uint64","name":"accountBalance","desc":"The account balance to check"}],"returns":{"type":"string","desc":"A string describing the account's wealth status"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Determines if an account is rich based on its balance","events":[],"recommendations":{}},{"name":"isEven","args":[{"type":"uint64","name":"number","desc":"The number to check"}],"returns":{"type":"string","desc":"\"Even\" if the number is even, \"Odd\" otherwise"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Determines if a number is even or odd","events":[],"recommendations":{}},{"name":"forLoop","args":[],"returns":{"type":"uint64[]","desc":"An array of uint64 values in reversed order"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Demonstrates different types of for loops","events":[],"recommendations":{}},{"name":"getDay","args":[{"type":"uint64","name":"date","desc":"A number from 0-6 representing a day of the week"}],"returns":{"type":"string","desc":"The name of the day, or \"Invalid day\" if out of range"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Returns the day of the week based on a numeric input","events":[],"recommendations":{}},{"name":"calculateBoxStorageCost","args":[{"type":"string","name":"boxSizeLabel","desc":"The category of box size as a string label. Valid values:\n'xs' (8B), 'sm' (64B), 'md' (256B), 'lg' (1KB), 'max' (32KB)"},{"type":"string","name":"boxName","desc":"The name of the box (used to calculate name length)"}],"returns":{"type":"uint64","desc":"The MBR increase in microAlgos, or 0 if invalid size label"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Calculates the minimum balance requirement (MBR) increase for box storage\nbased on different box size categories.","events":[],"recommendations":{}},{"name":"loop","args":[],"returns":{"type":"uint64","desc":"The number of iterations performed"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Demonstrates while loop with continue and break statements","events":[],"recommendations":{}}],"arcs":[22,28],"desc":"ControlFlow Contract\n\nThis contract demonstrates various control flow operations in Algorand smart contracts.\nIt shows how to use:\n- If/else statements\n- For loops\n- Switch statements (equivalent to Python's match)\n- While loops\n\nThe contract implements the same functionality as its Python counterpart\nin python-examples/smart_contracts/control_flow/contract.py","networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[76,93,122,150,166,194],"errorMessage":"OnCompletion is not NoOp"},{"pc":[537],"errorMessage":"Sum of reversed array should be 6"},{"pc":[227],"errorMessage":"can only call when creating"},{"pc":[79,96,125,153,169,197],"errorMessage":"can only call when not creating"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAwMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCiAgICBwdXNoYnl0ZXNzIDB4ZWYwODJmN2IgMHg5NGZiN2VmMSAweDcyMmJhNjY4IDB4N2ZhYzZhNWUgMHhjOWMyYmM1NyAweGY4MmEyNjU0IC8vIG1ldGhvZCAiaXNSaWNoKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImlzRXZlbih1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJmb3JMb29wKCl1aW50NjRbXSIsIG1ldGhvZCAiZ2V0RGF5KHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0KHN0cmluZyxzdHJpbmcpdWludDY0IiwgbWV0aG9kICJsb29wKCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2lzUmljaF9yb3V0ZUAzIG1haW5faXNFdmVuX3JvdXRlQDQgbWFpbl9mb3JMb29wX3JvdXRlQDUgbWFpbl9nZXREYXlfcm91dGVANiBtYWluX2NhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X3JvdXRlQDcgbWFpbl9sb29wX3JvdXRlQDgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fbG9vcF9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGxvb3AKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY2FsY3VsYXRlQm94U3RvcmFnZUNvc3Rfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldERheV9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXREYXkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Zvckxvb3Bfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGZvckxvb3AKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNFdmVuX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzRXZlbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNSaWNoX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzUmljaAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuaXNSaWNoKGFjY291bnRCYWxhbmNlOiB1aW50NjQpIC0+IGJ5dGVzOgppc1JpY2g6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNC0yNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc1JpY2goYWNjb3VudEJhbGFuY2U6IHVpbnQ2NCk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBpZiAoYWNjb3VudEJhbGFuY2UgPiAxMDAwKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgMTAwMCAvLyAxMDAwCiAgICA+CiAgICBieiBpc1JpY2hfZWxzZV9ib2R5QDIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyByaWNoIScKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIHJpY2ghIgogICAgcmV0c3ViCgppc1JpY2hfZWxzZV9ib2R5QDI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gfSBlbHNlIGlmIChhY2NvdW50QmFsYW5jZSA+IDEwMCkgewogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgID4KICAgIGJ6IGlzUmljaF9lbHNlX2JvZHlANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHJldHVybiAnVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgZG9pbmcgd2VsbC4iCiAgICByZXRzdWIKCmlzUmljaF9lbHNlX2JvZHlANDoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyBwb29yIDooJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgcG9vciA6KCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5pc0V2ZW4obnVtYmVyOiB1aW50NjQpIC0+IGJ5dGVzOgppc0V2ZW46CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0Mi00MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc0V2ZW4obnVtYmVyOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmV0dXJuIG51bWJlciAlIDIgPT09IDAgPyAnRXZlbicgOiAnT2RkJwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgJQogICAgYm56IGlzRXZlbl90ZXJuYXJ5X2ZhbHNlQDIKICAgIHB1c2hieXRlcyAiRXZlbiIKICAgIHJldHN1YgoKaXNFdmVuX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXR1cm4gbnVtYmVyICUgMiA9PT0gMCA/ICdFdmVuJyA6ICdPZGQnCiAgICBwdXNoYnl0ZXMgIk9kZCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5mb3JMb29wKCkgLT4gYnl0ZXM6CmZvckxvb3A6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1My01NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBmb3JMb29wKCk6IHVpbnQ2NFtdIHsKICAgIHByb3RvIDAgMQogICAgaW50Y18xIC8vIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwbiA0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1NgogICAgLy8gbGV0IG51bWJlcnM6IHVpbnQ2NFtdID0gW10KICAgIGJ5dGVjXzEgLy8gMHgwMDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gZm9yIChjb25zdCBpdGVtIG9mIHVyYW5nZSg0KSkgewogICAgaW50Y18xIC8vIDAKCmZvckxvb3BfZm9yX2hlYWRlckAxOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGZyYW1lX2RpZyA3CiAgICBwdXNoaW50IDQgLy8gNAogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIG51bWJlcnMgPSBbLi4ubnVtYmVycywgaXRlbV0KICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDcKICAgIGR1cAogICAgY292ZXIgMgogICAgaXRvYgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICAvCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgNgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDcKICAgIGIgZm9yTG9vcF9mb3JfaGVhZGVyQDEKCmZvckxvb3BfYWZ0ZXJfZm9yQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gbGV0IHJldmVyc2VkOiB1aW50NjRbXSA9IFtdCiAgICBieXRlY18xIC8vIDB4MDAwMAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2OAogICAgLy8gZm9yIChjb25zdCBudW0gb2YgbnVtYmVycykgewogICAgZnJhbWVfZGlnIDYKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgpmb3JMb29wX2Zvcl9oZWFkZXJANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBmb3IgKGNvbnN0IG51bSBvZiBudW1iZXJzKSB7CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IGZvckxvb3BfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gcmV2ZXJzZWQgPSBbbnVtLCAuLi5yZXZlcnNlZF0KICAgIGl0b2IKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgLwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJANQoKZm9yTG9vcF9hZnRlcl9mb3JAODoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBsZXQgc3VtOiB1aW50NjQgPSAwCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgMgogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNAoKZm9yTG9vcF9mb3JfaGVhZGVyQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JAMTIKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gc3VtICs9IG51bQogICAgZnJhbWVfZGlnIDUKICAgICsKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJAOQoKZm9yTG9vcF9hZnRlcl9mb3JAMTI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gYXNzZXJ0KHN1bSA9PT0gNiwgJ1N1bSBvZiByZXZlcnNlZCBhcnJheSBzaG91bGQgYmUgNicpCiAgICBmcmFtZV9kaWcgNQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQgLy8gU3VtIG9mIHJldmVyc2VkIGFycmF5IHNob3VsZCBiZSA2CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcmV0dXJuIHJldmVyc2VkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuZ2V0RGF5KGRhdGU6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldERheToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjkxLTkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldERheShkYXRlOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5NAogICAgLy8gY2FzZSBVaW50NjQoMSk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTQtOTUKICAgIC8vIGNhc2UgVWludDY0KDEpOgogICAgLy8gICByZXR1cm4gJ01vbmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyByZXR1cm4gJ01vbmRheScKICAgIHB1c2hieXRlcyAiTW9uZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTYKICAgIC8vIGNhc2UgVWludDY0KDIpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk2LTk3CiAgICAvLyBjYXNlIFVpbnQ2NCgyKToKICAgIC8vICAgcmV0dXJuICdUdWVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIHJldHVybiAnVHVlc2RheScKICAgIHB1c2hieXRlcyAiVHVlc2RheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk4CiAgICAvLyBjYXNlIFVpbnQ2NCgzKToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAzIC8vIDMKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5OC05OQogICAgLy8gY2FzZSBVaW50NjQoMyk6CiAgICAvLyAgIHJldHVybiAnV2VkbmVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHJldHVybiAnV2VkbmVzZGF5JwogICAgcHVzaGJ5dGVzICJXZWRuZXNkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIGNhc2UgVWludDY0KDQpOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwMC0xMDEKICAgIC8vIGNhc2UgVWludDY0KDQpOgogICAgLy8gICByZXR1cm4gJ1RodXJzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gcmV0dXJuICdUaHVyc2RheScKICAgIHB1c2hieXRlcyAiVGh1cnNkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBjYXNlIFVpbnQ2NCg1KToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCA1IC8vIDUKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDItMTAzCiAgICAvLyBjYXNlIFVpbnQ2NCg1KToKICAgIC8vICAgcmV0dXJuICdGcmlkYXknCiAgICBieiBnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyByZXR1cm4gJ0ZyaWRheScKICAgIHB1c2hieXRlcyAiRnJpZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNAogICAgLy8gY2FzZSBVaW50NjQoNik6CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgNiAvLyA2CiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA0LTEwNQogICAgLy8gY2FzZSBVaW50NjQoNik6CiAgICAvLyAgIHJldHVybiAnU2F0dXJkYXknCiAgICBieiBnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxOAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyByZXR1cm4gJ1NhdHVyZGF5JwogICAgcHVzaGJ5dGVzICJTYXR1cmRheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTg6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGNhc2UgVWludDY0KDcpOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDcgLy8gNwogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNi0xMDcKICAgIC8vIGNhc2UgVWludDY0KDcpOgogICAgLy8gICByZXR1cm4gJ1N1bmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDIxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIHJldHVybiAnU3VuZGF5JwogICAgcHVzaGJ5dGVzICJTdW5kYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDIxOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyByZXR1cm4gJ0ludmFsaWQgZGF5JwogICAgcHVzaGJ5dGVzICJJbnZhbGlkIGRheSIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5jYWxjdWxhdGVCb3hTdG9yYWdlQ29zdChib3hTaXplTGFiZWw6IGJ5dGVzLCBib3hOYW1lOiBieXRlcykgLT4gdWludDY0OgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdDoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNC0xMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgY2FsY3VsYXRlQm94U3RvcmFnZUNvc3QoYm94U2l6ZUxhYmVsOiBzdHJpbmcsIGJveE5hbWU6IHN0cmluZyk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gY29uc3QgYm94TmFtZUxlbmd0aDogdWludDY0ID0gQnl0ZXMoYm94TmFtZSkubGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM3CiAgICAvLyBjYXNlICd4cyc6CiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hieXRlcyAieHMiCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM3LTEzOQogICAgLy8gY2FzZSAneHMnOgogICAgLy8gICBib3hTaXplID0gOCAvLyA4IGJ5dGVzIChlbm91Z2ggZm9yIGEgdWludDY0KQogICAgLy8gICBicmVhawogICAgYnogY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIGJveFNpemUgPSA4IC8vIDggYnl0ZXMgKGVub3VnaCBmb3IgYSB1aW50NjQpCiAgICBpbnRjXzIgLy8gOAoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYmxvY2tAMTc6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIGNvbnN0IG1ickluY3JlYXNlOiB1aW50NjQgPSBiYXNlQ29zdCArIGJ5dGVVbml0Q29zdCAqIChib3hOYW1lTGVuZ3RoICsgYm94U2l6ZSkKICAgIGZyYW1lX2RpZyAwCiAgICArCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIGNvbnN0IGJ5dGVVbml0Q29zdDogdWludDY0ID0gNDAwIC8vIG1pY3JvQWxnb3MgcGVyIGJ5dGUKICAgIHB1c2hpbnQgNDAwIC8vIDQwMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTY0CiAgICAvLyBjb25zdCBtYnJJbmNyZWFzZTogdWludDY0ID0gYmFzZUNvc3QgKyBieXRlVW5pdENvc3QgKiAoYm94TmFtZUxlbmd0aCArIGJveFNpemUpCiAgICAqCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjcKICAgIC8vIGNvbnN0IGJhc2VDb3N0OiB1aW50NjQgPSAyNTAwIC8vIG1pY3JvQWxnb3MKICAgIHB1c2hpbnQgMjUwMCAvLyAyNTAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIGNvbnN0IG1ickluY3JlYXNlOiB1aW50NjQgPSBiYXNlQ29zdCArIGJ5dGVVbml0Q29zdCAqIChib3hOYW1lTGVuZ3RoICsgYm94U2l6ZSkKICAgICsKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gcmV0dXJuIG1ickluY3JlYXNlCiAgICBzd2FwCiAgICByZXRzdWIKCmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gY2FzZSAnc20nOgogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoYnl0ZXMgInNtIgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MS0xNDMKICAgIC8vIGNhc2UgJ3NtJzoKICAgIC8vICAgYm94U2l6ZSA9IDY0IC8vIDY0IGJ5dGVzCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MgogICAgLy8gYm94U2l6ZSA9IDY0IC8vIDY0IGJ5dGVzCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDMKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGNhc2UgJ21kJzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJtZCIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDUtMTQ3CiAgICAvLyBjYXNlICdtZCc6CiAgICAvLyAgIGJveFNpemUgPSAyNTYgLy8gMjU2IGJ5dGVzCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0NgogICAgLy8gYm94U2l6ZSA9IDI1NiAvLyAyNTYgYnl0ZXMKICAgIHB1c2hpbnQgMjU2IC8vIDI1NgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ3CiAgICAvLyBicmVhawogICAgYiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9ibG9ja0AxNwoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ5CiAgICAvLyBjYXNlICdsZyc6CiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hieXRlcyAibGciCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ5LTE1MQogICAgLy8gY2FzZSAnbGcnOgogICAgLy8gICBib3hTaXplID0gMTAyNCAvLyAxS0IKICAgIC8vICAgYnJlYWsKICAgIGJ6IGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gYm94U2l6ZSA9IDEwMjQgLy8gMUtCCiAgICBwdXNoaW50IDEwMjQgLy8gMTAyNAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyBicmVhawogICAgYiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9ibG9ja0AxNwoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gY2FzZSAnbWF4JzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJtYXgiCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTUzLTE1NQogICAgLy8gY2FzZSAnbWF4JzoKICAgIC8vICAgYm94U2l6ZSA9IDMyMDAwIC8vIDMyS0IgKGNsb3NlIHRvIG1heCBhbGxvd2VkKQogICAgLy8gICBicmVhawogICAgYnogY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTU0CiAgICAvLyBib3hTaXplID0gMzIwMDAgLy8gMzJLQiAoY2xvc2UgdG8gbWF4IGFsbG93ZWQpCiAgICBwdXNoaW50IDMyMDAwIC8vIDMyMDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTUKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTU5CiAgICAvLyByZXR1cm4gMAogICAgaW50Y18xIC8vIDAKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5sb29wKCkgLT4gdWludDY0Ogpsb29wOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc1LTE3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBsb29wKCk6IHVpbnQ2NCB7CiAgICBwcm90byAwIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3NwogICAgLy8gbGV0IG51bTogdWludDY0ID0gMTAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gbGV0IGxvb3BDb3VudDogdWludDY0ID0gMAogICAgaW50Y18xIC8vIDAKCmxvb3Bfd2hpbGVfdG9wQDE6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODAtMTkzCiAgICAvLyB3aGlsZSAobnVtID4gMCkgewogICAgLy8gICBpZiAobnVtID4gNSkgewogICAgLy8gICAgIG51bSAtPSAxCiAgICAvLyAgICAgbG9vcENvdW50ICs9IDEKICAgIC8vICAgICBjb250aW51ZQogICAgLy8gICB9CiAgICAvLyAKICAgIC8vICAgbnVtIC09IDIKICAgIC8vICAgbG9vcENvdW50ICs9IDEKICAgIC8vIAogICAgLy8gICBpZiAobnVtID09PSAxKSB7CiAgICAvLyAgICAgYnJlYWsKICAgIC8vICAgfQogICAgLy8gfQogICAgZnJhbWVfZGlnIDAKICAgIGJ6IGxvb3BfYmxvY2tAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBpZiAobnVtID4gNSkgewogICAgZnJhbWVfZGlnIDAKICAgIHB1c2hpbnQgNSAvLyA1CiAgICA+CiAgICBieiBsb29wX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyBudW0gLT0gMQogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gbG9vcENvdW50ICs9IDEKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODQKICAgIC8vIGNvbnRpbnVlCiAgICBiIGxvb3Bfd2hpbGVfdG9wQDEKCmxvb3BfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTg3CiAgICAvLyBudW0gLT0gMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMyAvLyAyCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBsb29wQ291bnQgKz0gMQogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE5MAogICAgLy8gaWYgKG51bSA9PT0gMSkgewogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBieiBsb29wX3doaWxlX3RvcEAxCgpsb29wX2Jsb2NrQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxOTUKICAgIC8vIHJldHVybiBsb29wQ291bnQKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CiAEAQAIAiYCBBUffHUCAAAxG0EAxYIGBO8IL3sElPt+8QRyK6ZoBH+sal4EycK8VwT4KiZUNhoAjgYAeABcAEwAMAATAAIjQzEZFEQxGESIArgWKExQsCJDMRkURDEYRDYaAVcCADYaAlcCAIgCORYoTFCwIkMxGRREMRhENhoBF4gBlkkVFlcGAkxQKExQsCJDMRkURDEYRIgAxChMULAiQzEZFEQxGEQ2GgEXiACZSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBF4gAGUkVFlcGAkxQKExQsCJDMRlA/2cxGBREIkOKAQGL/4HoBw1BABiAFVRoaXMgYWNjb3VudCBpcyByaWNoIYmL/4FkDUEAHoAbVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuiYAXVGhpcyBhY2NvdW50IGlzIHBvb3IgOiiJigEBi/8lGEAAB4AERXZlbomAA09kZImKAAEjgABHBCkjiweBBAxBACyLBlcCAIsHSU4CFkkVJAoWVwYCTFBXAgBQSRUkChZXBgJMUIwGIgiMB0L/zCmMAIsGI1mMASOMA4sDiwEMQQA0iwZXAgCLA0lOAiQLWxZJFSQKFlcGAkxQVwIAiwBXAgBQSRUkChZXBgJMUIwAIgiMA0L/xCOMBYsAI1mMAiOMBIsEiwIMQQAZiwBXAgCLBElOAiQLW4sFCIwFIgiMBEL/34sFgQYSRImKAQGL/yISQQAJgAZNb25kYXmJi/8lEkEACoAHVHVlc2RheYmL/4EDEkEADIAJV2VkbmVzZGF5iYv/gQQSQQALgAhUaHVyc2RheYmL/4EFEkEACYAGRnJpZGF5iYv/gQYSQQALgAhTYXR1cmRheYmL/4EHEkEACYAGU3VuZGF5iYALSW52YWxpZCBkYXmJigIBi/8Vi/6AAnhzEkEADiSLAAiBkAMLgcQTCEyJi/6AAnNtEkEABYFAQv/ki/6AAm1kEkEABoGAAkL/1Iv+gAJsZxJBAAaBgAhC/8SL/oADbWF4EkEAB4GA+gFC/7IjTImKAAGBCiOLAEEAKYsAgQUNQQAPiwAiCYwAiwEiCIwBQv/kiwAlCUmMAIsBIgiMASISQf/SiwGMAIk=","clear":"CoEBQw=="},"compilerInfo":{"compiler":"puya","compilerVersion":{"major":4,"minor":4,"patch":4}},"events":[],"templateVariables":{}} as unknown as Arc56Contract /** * A state record containing binary data diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.approval.puya.map b/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.approval.puya.map index 7b0bbcb..f5f6048 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.approval.puya.map +++ b/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.approval.puya.map @@ -3,7 +3,7 @@ "sources": [ "/Users/gabe.algo/Code/devportal-code-examples/projects/typescript-examples/contracts/ControlFlow/contract.algo.ts" ], - "mappings": ";;;;;;;;;;;;;;;;;AAgBA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;AAAA;;AA4JG;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAnDA;;AAAA;AAAA;AAAA;;AAAA;AAzGH;;;AAAA;;;AAAA;;;AAAA;;;AAyGG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAjCA;;AAAA;AAAA;AAAA;;AAAA;AAxEH;;;AAAA;AAwEG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAtCA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAXA;;AAAA;AAAA;AAAA;;AAAA;AAvBH;;;AAAA;AAuBG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAhBA;;AAAA;AAAA;AAAA;;AAAA;AAPH;;;AAAA;AAOG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAPH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAOE;;;AAEM;;AAAiB;;;AAAjB;AAAJ;;;AACS;;;;;;;;;;;;;;;;;;;;;;;AAAP;AACS;;AAAiB;;AAAjB;AAAJ;;;AACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAP;AAEO;;;;;;;;;;;;;;;;;;;;;;;;;AAAP;AASJ;;;AAES;;AAAS;AAAT;AAAA;;;AAAmB;;;;;;AAA1B;AAAmC;;;;;AAAnC;AASF;;;;;;;;AAG0B;AAGL;AAAA;;AAAO;;AAAP;AAAnB;;;AACY;;AAAA;;;AAAa;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAb;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AADO;AAAA;AAAA;;;;;AAKM;AAAA;;AAIzB;;AAAA;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAEc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAD;;;AAAA;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;;;;;;;;AAIK;AAAd;;AACJ;;AAAA;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AACE;;AAAA;AAAA;;;;;;;;;AAIK;;AAAQ;;AAAR;AAAP;AAEA;AASF;;;AAGgB;;AAAA;AAAA;AAAZ;;;AACS;;;;;;;;AAAP;AACU;;AAAA;AAAA;AAAZ;;;AACS;;;;;;;;;AAAP;AACU;;AAAA;;AAAA;AAAZ;;;AACS;;;;;;;;;;;AAAP;AACU;;AAAA;;AAAA;AAAZ;;;AACS;;;;;;;;;;AAAP;AACU;;AAAA;;AAAA;AAAZ;;;AACS;;;;;;;;AAAP;AACU;;AAAA;;AAAA;AAAZ;;;AACS;;;;;;;;;;AAAP;AACU;;AAAA;;AAAA;AAAZ;;;AACS;;;;;;;;AAAP;AAEO;;;;;;;;;;;;;AAAP;AAeN;;;AAOQ;;AAAuC;AAMtC;;AAAA;;;;AAAA;AAAL;;;AACY;AA0ByC;;AAAA;AApC1B;;;AAoCU;AArCd;;;AAqCG;AAE5B;AAAA;AAzBO;;AAAA;;;;AAAA;AAAL;;;AACY;;AACV;;;AAEG;;AAAA;;;;AAAA;AAAL;;;AACY;;;AACV;;;AAEG;;AAAA;;;;AAAA;AAAL;;;AACY;;;AACV;;;AAEG;;AAAA;;;;;AAAA;AAAL;;;AACY;;;;AACV;;;AAIO;AAAP;AAAA;AAgBN;;;AAEoB;;AACM;AAExB;;AAAA;;;AACM;;AAAM;;AAAN;AAAJ;;;AACE;;AAAO;AAAP;AAAA;;AACA;;AAAa;AAAb;AAAA;;AACA;;;AAGF;;AAAO;AAAP;AAAA;AAAA;;AACA;;AAAa;AAAb;AAAA;;AAEY;AAAR;AAAJ;;;AAKF;;AAAA;;AAAA", + "mappings": ";;;;;;;;;;;;;;;;;AAgBA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;AAAA;;AA8JG;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAnDA;;AAAA;AAAA;AAAA;;AAAA;AA3GH;;;AAAA;;;AAAA;;;AAAA;;;AA2GG;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAjCA;;AAAA;AAAA;AAAA;;AAAA;AA1EH;;;AAAA;AA0EG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAtCA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAXA;;AAAA;AAAA;AAAA;;AAAA;AAzBH;;;AAAA;AAyBG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAlBA;;AAAA;AAAA;AAAA;;AAAA;AAPH;;;AAAA;AAOG;;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAPH;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAOE;;;AAEM;;AAAiB;;;AAAjB;AAAJ;;;AACS;;;;;;;;;;;;;;;;;;;;;;;AAAP;AACS;;AAAiB;;AAAjB;AAAJ;;;AACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAP;AAEO;;;;;;;;;;;;;;;;;;;;;;;;;AAAP;AAWJ;;;AAES;;AAAS;AAAT;AAAA;;;AAAmB;;;;;;AAA1B;AAAmC;;;;;AAAnC;AASF;;;;;;;;AAG0B;AAGL;AAAA;;AAAO;;AAAP;AAAnB;;;AACY;;AAAA;;;AAAa;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAb;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AADO;AAAA;AAAA;;;;;AAKM;AAAA;;AAIzB;;AAAA;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAEc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAD;;;AAAA;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;;;;;;;;AAIK;AAAd;;AACJ;;AAAA;AAAA;AAAA;;;;;AAAA;;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AACE;;AAAA;AAAA;;;;;;;;;AAIK;;AAAQ;;AAAR;AAAP;AAEA;AASF;;;AAGgB;;AAAA;AAAA;AAAZ;;;AACS;;;;;;;;AAAP;AACU;;AAAA;AAAA;AAAZ;;;AACS;;;;;;;;;AAAP;AACU;;AAAA;;AAAA;AAAZ;;;AACS;;;;;;;;;;;AAAP;AACU;;AAAA;;AAAA;AAAZ;;;AACS;;;;;;;;;;AAAP;AACU;;AAAA;;AAAA;AAAZ;;;AACS;;;;;;;;AAAP;AACU;;AAAA;;AAAA;AAAZ;;;AACS;;;;;;;;;;AAAP;AACU;;AAAA;;AAAA;AAAZ;;;AACS;;;;;;;;AAAP;AAEO;;;;;;;;;;;;;AAAP;AAeN;;;AAOQ;;AAAuC;AAMtC;;AAAA;;;;AAAA;AAAL;;;AACY;AA0ByC;;AAAA;AApC1B;;;AAoCU;AArCd;;;AAqCG;AAE5B;AAAA;AAzBO;;AAAA;;;;AAAA;AAAL;;;AACY;;AACV;;;AAEG;;AAAA;;;;AAAA;AAAL;;;AACY;;;AACV;;;AAEG;;AAAA;;;;AAAA;AAAL;;;AACY;;;AACV;;;AAEG;;AAAA;;;;;AAAA;AAAL;;;AACY;;;;AACV;;;AAIO;AAAP;AAAA;AAgBN;;;AAEoB;;AACM;AAExB;;AAAA;;;AACM;;AAAM;;AAAN;AAAJ;;;AACE;;AAAO;AAAP;AAAA;;AACA;;AAAa;AAAb;AAAA;;AACA;;;AAGF;;AAAO;AAAP;AAAA;AAAA;;AACA;;AAAa;AAAb;AAAA;;AAEY;AAAR;AAAJ;;;AAKF;;AAAA;;AAAA", "op_pc_offset": 0, "pc_events": { "1": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.approval.teal b/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.approval.teal index 80ca463..0d74dde 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.approval.teal +++ b/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.approval.teal @@ -20,7 +20,7 @@ main_after_if_else@15: return main_loop_route@8: - // contracts/ControlFlow/contract.algo.ts:173 + // contracts/ControlFlow/contract.algo.ts:175 // @arc4.abimethod({ readonly: true }) txn OnCompletion ! @@ -37,7 +37,7 @@ main_loop_route@8: return main_calculateBoxStorageCost_route@7: - // contracts/ControlFlow/contract.algo.ts:122 + // contracts/ControlFlow/contract.algo.ts:124 // @arc4.abimethod({ readonly: true }) txn OnCompletion ! @@ -50,7 +50,7 @@ main_calculateBoxStorageCost_route@7: extract 2 0 txna ApplicationArgs 2 extract 2 0 - // contracts/ControlFlow/contract.algo.ts:122 + // contracts/ControlFlow/contract.algo.ts:124 // @arc4.abimethod({ readonly: true }) callsub calculateBoxStorageCost itob @@ -62,7 +62,7 @@ main_calculateBoxStorageCost_route@7: return main_getDay_route@6: - // contracts/ControlFlow/contract.algo.ts:89 + // contracts/ControlFlow/contract.algo.ts:91 // @arc4.abimethod({ readonly: true }) txn OnCompletion ! @@ -73,7 +73,7 @@ main_getDay_route@6: // export default class ControlFlow extends Contract { txna ApplicationArgs 1 btoi - // contracts/ControlFlow/contract.algo.ts:89 + // contracts/ControlFlow/contract.algo.ts:91 // @arc4.abimethod({ readonly: true }) callsub getDay dup @@ -90,7 +90,7 @@ main_getDay_route@6: return main_forLoop_route@5: - // contracts/ControlFlow/contract.algo.ts:51 + // contracts/ControlFlow/contract.algo.ts:53 // @arc4.abimethod({ readonly: true }) txn OnCompletion ! @@ -106,7 +106,7 @@ main_forLoop_route@5: return main_isEven_route@4: - // contracts/ControlFlow/contract.algo.ts:40 + // contracts/ControlFlow/contract.algo.ts:42 // @arc4.abimethod({ readonly: true }) txn OnCompletion ! @@ -117,7 +117,7 @@ main_isEven_route@4: // export default class ControlFlow extends Contract { txna ApplicationArgs 1 btoi - // contracts/ControlFlow/contract.algo.ts:40 + // contracts/ControlFlow/contract.algo.ts:42 // @arc4.abimethod({ readonly: true }) callsub isEven dup @@ -211,11 +211,11 @@ isRich_else_body@4: // contracts/ControlFlow/contract.algo.ts::ControlFlow.isEven(number: uint64) -> bytes: isEven: - // contracts/ControlFlow/contract.algo.ts:40-41 + // contracts/ControlFlow/contract.algo.ts:42-43 // @arc4.abimethod({ readonly: true }) // public isEven(number: uint64): string { proto 1 1 - // contracts/ControlFlow/contract.algo.ts:42 + // contracts/ControlFlow/contract.algo.ts:44 // return number % 2 === 0 ? 'Even' : 'Odd' frame_dig -1 intc_3 // 2 @@ -225,7 +225,7 @@ isEven: retsub isEven_ternary_false@2: - // contracts/ControlFlow/contract.algo.ts:42 + // contracts/ControlFlow/contract.algo.ts:44 // return number % 2 === 0 ? 'Even' : 'Odd' pushbytes "Odd" retsub @@ -233,28 +233,28 @@ isEven_ternary_false@2: // contracts/ControlFlow/contract.algo.ts::ControlFlow.forLoop() -> bytes: forLoop: - // contracts/ControlFlow/contract.algo.ts:51-52 + // contracts/ControlFlow/contract.algo.ts:53-54 // @arc4.abimethod({ readonly: true }) // public forLoop(): uint64[] { proto 0 1 intc_1 // 0 pushbytes "" dupn 4 - // contracts/ControlFlow/contract.algo.ts:54 + // contracts/ControlFlow/contract.algo.ts:56 // let numbers: uint64[] = [] bytec_1 // 0x0000 - // contracts/ControlFlow/contract.algo.ts:57 + // contracts/ControlFlow/contract.algo.ts:59 // for (const item of urange(4)) { intc_1 // 0 forLoop_for_header@1: - // contracts/ControlFlow/contract.algo.ts:57 + // contracts/ControlFlow/contract.algo.ts:59 // for (const item of urange(4)) { frame_dig 7 pushint 4 // 4 < bz forLoop_after_for@4 - // contracts/ControlFlow/contract.algo.ts:58 + // contracts/ControlFlow/contract.algo.ts:60 // numbers = [...numbers, item] frame_dig 6 extract 2 0 @@ -281,7 +281,7 @@ forLoop_for_header@1: swap concat frame_bury 6 - // contracts/ControlFlow/contract.algo.ts:57 + // contracts/ControlFlow/contract.algo.ts:59 // for (const item of urange(4)) { intc_0 // 1 + @@ -289,11 +289,11 @@ forLoop_for_header@1: b forLoop_for_header@1 forLoop_after_for@4: - // contracts/ControlFlow/contract.algo.ts:62 + // contracts/ControlFlow/contract.algo.ts:64 // let reversed: uint64[] = [] bytec_1 // 0x0000 frame_bury 0 - // contracts/ControlFlow/contract.algo.ts:66 + // contracts/ControlFlow/contract.algo.ts:68 // for (const num of numbers) { frame_dig 6 intc_1 // 0 @@ -303,7 +303,7 @@ forLoop_after_for@4: frame_bury 3 forLoop_for_header@5: - // contracts/ControlFlow/contract.algo.ts:66 + // contracts/ControlFlow/contract.algo.ts:68 // for (const num of numbers) { frame_dig 3 frame_dig 1 @@ -317,7 +317,7 @@ forLoop_for_header@5: intc_2 // 8 * extract_uint64 - // contracts/ControlFlow/contract.algo.ts:68 + // contracts/ControlFlow/contract.algo.ts:70 // reversed = [num, ...reversed] itob dup @@ -347,11 +347,11 @@ forLoop_for_header@5: b forLoop_for_header@5 forLoop_after_for@8: - // contracts/ControlFlow/contract.algo.ts:72 + // contracts/ControlFlow/contract.algo.ts:74 // let sum: uint64 = 0 intc_1 // 0 frame_bury 5 - // contracts/ControlFlow/contract.algo.ts:73 + // contracts/ControlFlow/contract.algo.ts:75 // for (const num of reversed) { frame_dig 0 intc_1 // 0 @@ -361,7 +361,7 @@ forLoop_after_for@8: frame_bury 4 forLoop_for_header@9: - // contracts/ControlFlow/contract.algo.ts:73 + // contracts/ControlFlow/contract.algo.ts:75 // for (const num of reversed) { frame_dig 4 frame_dig 2 @@ -375,7 +375,7 @@ forLoop_for_header@9: intc_2 // 8 * extract_uint64 - // contracts/ControlFlow/contract.algo.ts:74 + // contracts/ControlFlow/contract.algo.ts:76 // sum += num frame_dig 5 + @@ -386,129 +386,129 @@ forLoop_for_header@9: b forLoop_for_header@9 forLoop_after_for@12: - // contracts/ControlFlow/contract.algo.ts:78 + // contracts/ControlFlow/contract.algo.ts:80 // assert(sum === 6, 'Sum of reversed array should be 6') frame_dig 5 pushint 6 // 6 == assert // Sum of reversed array should be 6 - // contracts/ControlFlow/contract.algo.ts:80 + // contracts/ControlFlow/contract.algo.ts:82 // return reversed retsub // contracts/ControlFlow/contract.algo.ts::ControlFlow.getDay(date: uint64) -> bytes: getDay: - // contracts/ControlFlow/contract.algo.ts:89-90 + // contracts/ControlFlow/contract.algo.ts:91-92 // @arc4.abimethod({ readonly: true }) // public getDay(date: uint64): string { proto 1 1 - // contracts/ControlFlow/contract.algo.ts:92 + // contracts/ControlFlow/contract.algo.ts:94 // case Uint64(1): frame_dig -1 intc_0 // 1 == - // contracts/ControlFlow/contract.algo.ts:92-93 + // contracts/ControlFlow/contract.algo.ts:94-95 // case Uint64(1): // return 'Monday' bz getDay_after_if_else@3 - // contracts/ControlFlow/contract.algo.ts:93 + // contracts/ControlFlow/contract.algo.ts:95 // return 'Monday' pushbytes "Monday" retsub getDay_after_if_else@3: - // contracts/ControlFlow/contract.algo.ts:94 + // contracts/ControlFlow/contract.algo.ts:96 // case Uint64(2): frame_dig -1 intc_3 // 2 == - // contracts/ControlFlow/contract.algo.ts:94-95 + // contracts/ControlFlow/contract.algo.ts:96-97 // case Uint64(2): // return 'Tuesday' bz getDay_after_if_else@6 - // contracts/ControlFlow/contract.algo.ts:95 + // contracts/ControlFlow/contract.algo.ts:97 // return 'Tuesday' pushbytes "Tuesday" retsub getDay_after_if_else@6: - // contracts/ControlFlow/contract.algo.ts:96 + // contracts/ControlFlow/contract.algo.ts:98 // case Uint64(3): frame_dig -1 pushint 3 // 3 == - // contracts/ControlFlow/contract.algo.ts:96-97 + // contracts/ControlFlow/contract.algo.ts:98-99 // case Uint64(3): // return 'Wednesday' bz getDay_after_if_else@9 - // contracts/ControlFlow/contract.algo.ts:97 + // contracts/ControlFlow/contract.algo.ts:99 // return 'Wednesday' pushbytes "Wednesday" retsub getDay_after_if_else@9: - // contracts/ControlFlow/contract.algo.ts:98 + // contracts/ControlFlow/contract.algo.ts:100 // case Uint64(4): frame_dig -1 pushint 4 // 4 == - // contracts/ControlFlow/contract.algo.ts:98-99 + // contracts/ControlFlow/contract.algo.ts:100-101 // case Uint64(4): // return 'Thursday' bz getDay_after_if_else@12 - // contracts/ControlFlow/contract.algo.ts:99 + // contracts/ControlFlow/contract.algo.ts:101 // return 'Thursday' pushbytes "Thursday" retsub getDay_after_if_else@12: - // contracts/ControlFlow/contract.algo.ts:100 + // contracts/ControlFlow/contract.algo.ts:102 // case Uint64(5): frame_dig -1 pushint 5 // 5 == - // contracts/ControlFlow/contract.algo.ts:100-101 + // contracts/ControlFlow/contract.algo.ts:102-103 // case Uint64(5): // return 'Friday' bz getDay_after_if_else@15 - // contracts/ControlFlow/contract.algo.ts:101 + // contracts/ControlFlow/contract.algo.ts:103 // return 'Friday' pushbytes "Friday" retsub getDay_after_if_else@15: - // contracts/ControlFlow/contract.algo.ts:102 + // contracts/ControlFlow/contract.algo.ts:104 // case Uint64(6): frame_dig -1 pushint 6 // 6 == - // contracts/ControlFlow/contract.algo.ts:102-103 + // contracts/ControlFlow/contract.algo.ts:104-105 // case Uint64(6): // return 'Saturday' bz getDay_after_if_else@18 - // contracts/ControlFlow/contract.algo.ts:103 + // contracts/ControlFlow/contract.algo.ts:105 // return 'Saturday' pushbytes "Saturday" retsub getDay_after_if_else@18: - // contracts/ControlFlow/contract.algo.ts:104 + // contracts/ControlFlow/contract.algo.ts:106 // case Uint64(7): frame_dig -1 pushint 7 // 7 == - // contracts/ControlFlow/contract.algo.ts:104-105 + // contracts/ControlFlow/contract.algo.ts:106-107 // case Uint64(7): // return 'Sunday' bz getDay_after_if_else@21 - // contracts/ControlFlow/contract.algo.ts:105 + // contracts/ControlFlow/contract.algo.ts:107 // return 'Sunday' pushbytes "Sunday" retsub getDay_after_if_else@21: - // contracts/ControlFlow/contract.algo.ts:107 + // contracts/ControlFlow/contract.algo.ts:109 // return 'Invalid day' pushbytes "Invalid day" retsub @@ -516,124 +516,124 @@ getDay_after_if_else@21: // contracts/ControlFlow/contract.algo.ts::ControlFlow.calculateBoxStorageCost(boxSizeLabel: bytes, boxName: bytes) -> uint64: calculateBoxStorageCost: - // contracts/ControlFlow/contract.algo.ts:122-123 + // contracts/ControlFlow/contract.algo.ts:124-125 // @arc4.abimethod({ readonly: true }) // public calculateBoxStorageCost(boxSizeLabel: string, boxName: string): uint64 { proto 2 1 - // contracts/ControlFlow/contract.algo.ts:129 + // contracts/ControlFlow/contract.algo.ts:131 // const boxNameLength: uint64 = Bytes(boxName).length frame_dig -1 len - // contracts/ControlFlow/contract.algo.ts:135 + // contracts/ControlFlow/contract.algo.ts:137 // case 'xs': frame_dig -2 pushbytes "xs" == - // contracts/ControlFlow/contract.algo.ts:135-137 + // contracts/ControlFlow/contract.algo.ts:137-139 // case 'xs': // boxSize = 8 // 8 bytes (enough for a uint64) // break bz calculateBoxStorageCost_after_if_else@3 - // contracts/ControlFlow/contract.algo.ts:136 + // contracts/ControlFlow/contract.algo.ts:138 // boxSize = 8 // 8 bytes (enough for a uint64) intc_2 // 8 calculateBoxStorageCost_block@17: - // contracts/ControlFlow/contract.algo.ts:162 + // contracts/ControlFlow/contract.algo.ts:164 // const mbrIncrease: uint64 = baseCost + byteUnitCost * (boxNameLength + boxSize) frame_dig 0 + - // contracts/ControlFlow/contract.algo.ts:126 + // contracts/ControlFlow/contract.algo.ts:128 // const byteUnitCost: uint64 = 400 // microAlgos per byte pushint 400 // 400 - // contracts/ControlFlow/contract.algo.ts:162 + // contracts/ControlFlow/contract.algo.ts:164 // const mbrIncrease: uint64 = baseCost + byteUnitCost * (boxNameLength + boxSize) * - // contracts/ControlFlow/contract.algo.ts:125 + // contracts/ControlFlow/contract.algo.ts:127 // const baseCost: uint64 = 2500 // microAlgos pushint 2500 // 2500 - // contracts/ControlFlow/contract.algo.ts:162 + // contracts/ControlFlow/contract.algo.ts:164 // const mbrIncrease: uint64 = baseCost + byteUnitCost * (boxNameLength + boxSize) + - // contracts/ControlFlow/contract.algo.ts:164 + // contracts/ControlFlow/contract.algo.ts:166 // return mbrIncrease swap retsub calculateBoxStorageCost_after_if_else@3: - // contracts/ControlFlow/contract.algo.ts:139 + // contracts/ControlFlow/contract.algo.ts:141 // case 'sm': frame_dig -2 pushbytes "sm" == - // contracts/ControlFlow/contract.algo.ts:139-141 + // contracts/ControlFlow/contract.algo.ts:141-143 // case 'sm': // boxSize = 64 // 64 bytes // break bz calculateBoxStorageCost_after_if_else@6 - // contracts/ControlFlow/contract.algo.ts:140 + // contracts/ControlFlow/contract.algo.ts:142 // boxSize = 64 // 64 bytes pushint 64 // 64 - // contracts/ControlFlow/contract.algo.ts:141 + // contracts/ControlFlow/contract.algo.ts:143 // break b calculateBoxStorageCost_block@17 calculateBoxStorageCost_after_if_else@6: - // contracts/ControlFlow/contract.algo.ts:143 + // contracts/ControlFlow/contract.algo.ts:145 // case 'md': frame_dig -2 pushbytes "md" == - // contracts/ControlFlow/contract.algo.ts:143-145 + // contracts/ControlFlow/contract.algo.ts:145-147 // case 'md': // boxSize = 256 // 256 bytes // break bz calculateBoxStorageCost_after_if_else@9 - // contracts/ControlFlow/contract.algo.ts:144 + // contracts/ControlFlow/contract.algo.ts:146 // boxSize = 256 // 256 bytes pushint 256 // 256 - // contracts/ControlFlow/contract.algo.ts:145 + // contracts/ControlFlow/contract.algo.ts:147 // break b calculateBoxStorageCost_block@17 calculateBoxStorageCost_after_if_else@9: - // contracts/ControlFlow/contract.algo.ts:147 + // contracts/ControlFlow/contract.algo.ts:149 // case 'lg': frame_dig -2 pushbytes "lg" == - // contracts/ControlFlow/contract.algo.ts:147-149 + // contracts/ControlFlow/contract.algo.ts:149-151 // case 'lg': // boxSize = 1024 // 1KB // break bz calculateBoxStorageCost_after_if_else@12 - // contracts/ControlFlow/contract.algo.ts:148 + // contracts/ControlFlow/contract.algo.ts:150 // boxSize = 1024 // 1KB pushint 1024 // 1024 - // contracts/ControlFlow/contract.algo.ts:149 + // contracts/ControlFlow/contract.algo.ts:151 // break b calculateBoxStorageCost_block@17 calculateBoxStorageCost_after_if_else@12: - // contracts/ControlFlow/contract.algo.ts:151 + // contracts/ControlFlow/contract.algo.ts:153 // case 'max': frame_dig -2 pushbytes "max" == - // contracts/ControlFlow/contract.algo.ts:151-153 + // contracts/ControlFlow/contract.algo.ts:153-155 // case 'max': // boxSize = 32000 // 32KB (close to max allowed) // break bz calculateBoxStorageCost_after_if_else@15 - // contracts/ControlFlow/contract.algo.ts:152 + // contracts/ControlFlow/contract.algo.ts:154 // boxSize = 32000 // 32KB (close to max allowed) pushint 32000 // 32000 - // contracts/ControlFlow/contract.algo.ts:153 + // contracts/ControlFlow/contract.algo.ts:155 // break b calculateBoxStorageCost_block@17 calculateBoxStorageCost_after_if_else@15: - // contracts/ControlFlow/contract.algo.ts:157 + // contracts/ControlFlow/contract.algo.ts:159 // return 0 intc_1 // 0 swap @@ -642,19 +642,19 @@ calculateBoxStorageCost_after_if_else@15: // contracts/ControlFlow/contract.algo.ts::ControlFlow.loop() -> uint64: loop: - // contracts/ControlFlow/contract.algo.ts:173-174 + // contracts/ControlFlow/contract.algo.ts:175-176 // @arc4.abimethod({ readonly: true }) // public loop(): uint64 { proto 0 1 - // contracts/ControlFlow/contract.algo.ts:175 + // contracts/ControlFlow/contract.algo.ts:177 // let num: uint64 = 10 pushint 10 // 10 - // contracts/ControlFlow/contract.algo.ts:176 + // contracts/ControlFlow/contract.algo.ts:178 // let loopCount: uint64 = 0 intc_1 // 0 loop_while_top@1: - // contracts/ControlFlow/contract.algo.ts:178-191 + // contracts/ControlFlow/contract.algo.ts:180-193 // while (num > 0) { // if (num > 5) { // num -= 1 @@ -671,50 +671,50 @@ loop_while_top@1: // } frame_dig 0 bz loop_block@9 - // contracts/ControlFlow/contract.algo.ts:179 + // contracts/ControlFlow/contract.algo.ts:181 // if (num > 5) { frame_dig 0 pushint 5 // 5 > bz loop_after_if_else@4 - // contracts/ControlFlow/contract.algo.ts:180 + // contracts/ControlFlow/contract.algo.ts:182 // num -= 1 frame_dig 0 intc_0 // 1 - frame_bury 0 - // contracts/ControlFlow/contract.algo.ts:181 + // contracts/ControlFlow/contract.algo.ts:183 // loopCount += 1 frame_dig 1 intc_0 // 1 + frame_bury 1 - // contracts/ControlFlow/contract.algo.ts:182 + // contracts/ControlFlow/contract.algo.ts:184 // continue b loop_while_top@1 loop_after_if_else@4: - // contracts/ControlFlow/contract.algo.ts:185 + // contracts/ControlFlow/contract.algo.ts:187 // num -= 2 frame_dig 0 intc_3 // 2 - dup frame_bury 0 - // contracts/ControlFlow/contract.algo.ts:186 + // contracts/ControlFlow/contract.algo.ts:188 // loopCount += 1 frame_dig 1 intc_0 // 1 + frame_bury 1 - // contracts/ControlFlow/contract.algo.ts:188 + // contracts/ControlFlow/contract.algo.ts:190 // if (num === 1) { intc_0 // 1 == bz loop_while_top@1 loop_block@9: - // contracts/ControlFlow/contract.algo.ts:193 + // contracts/ControlFlow/contract.algo.ts:195 // return loopCount frame_dig 1 frame_bury 0 diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.arc32.json b/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.arc32.json index c9aa7f0..97ce461 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.arc32.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.arc32.json @@ -38,7 +38,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAwMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCiAgICBwdXNoYnl0ZXNzIDB4ZWYwODJmN2IgMHg5NGZiN2VmMSAweDcyMmJhNjY4IDB4N2ZhYzZhNWUgMHhjOWMyYmM1NyAweGY4MmEyNjU0IC8vIG1ldGhvZCAiaXNSaWNoKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImlzRXZlbih1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJmb3JMb29wKCl1aW50NjRbXSIsIG1ldGhvZCAiZ2V0RGF5KHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0KHN0cmluZyxzdHJpbmcpdWludDY0IiwgbWV0aG9kICJsb29wKCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2lzUmljaF9yb3V0ZUAzIG1haW5faXNFdmVuX3JvdXRlQDQgbWFpbl9mb3JMb29wX3JvdXRlQDUgbWFpbl9nZXREYXlfcm91dGVANiBtYWluX2NhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X3JvdXRlQDcgbWFpbl9sb29wX3JvdXRlQDgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fbG9vcF9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGxvb3AKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY2FsY3VsYXRlQm94U3RvcmFnZUNvc3Rfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldERheV9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6ODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXREYXkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Zvckxvb3Bfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGZvckxvb3AKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNFdmVuX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzRXZlbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNSaWNoX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzUmljaAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuaXNSaWNoKGFjY291bnRCYWxhbmNlOiB1aW50NjQpIC0+IGJ5dGVzOgppc1JpY2g6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNC0yNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc1JpY2goYWNjb3VudEJhbGFuY2U6IHVpbnQ2NCk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBpZiAoYWNjb3VudEJhbGFuY2UgPiAxMDAwKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgMTAwMCAvLyAxMDAwCiAgICA+CiAgICBieiBpc1JpY2hfZWxzZV9ib2R5QDIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyByaWNoIScKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIHJpY2ghIgogICAgcmV0c3ViCgppc1JpY2hfZWxzZV9ib2R5QDI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gfSBlbHNlIGlmIChhY2NvdW50QmFsYW5jZSA+IDEwMCkgewogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgID4KICAgIGJ6IGlzUmljaF9lbHNlX2JvZHlANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHJldHVybiAnVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgZG9pbmcgd2VsbC4iCiAgICByZXRzdWIKCmlzUmljaF9lbHNlX2JvZHlANDoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyBwb29yIDooJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgcG9vciA6KCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5pc0V2ZW4obnVtYmVyOiB1aW50NjQpIC0+IGJ5dGVzOgppc0V2ZW46CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MC00MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc0V2ZW4obnVtYmVyOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcmV0dXJuIG51bWJlciAlIDIgPT09IDAgPyAnRXZlbicgOiAnT2RkJwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgJQogICAgYm56IGlzRXZlbl90ZXJuYXJ5X2ZhbHNlQDIKICAgIHB1c2hieXRlcyAiRXZlbiIKICAgIHJldHN1YgoKaXNFdmVuX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyByZXR1cm4gbnVtYmVyICUgMiA9PT0gMCA/ICdFdmVuJyA6ICdPZGQnCiAgICBwdXNoYnl0ZXMgIk9kZCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5mb3JMb29wKCkgLT4gYnl0ZXM6CmZvckxvb3A6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1MS01MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBmb3JMb29wKCk6IHVpbnQ2NFtdIHsKICAgIHByb3RvIDAgMQogICAgaW50Y18xIC8vIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwbiA0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gbGV0IG51bWJlcnM6IHVpbnQ2NFtdID0gW10KICAgIGJ5dGVjXzEgLy8gMHgwMDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1NwogICAgLy8gZm9yIChjb25zdCBpdGVtIG9mIHVyYW5nZSg0KSkgewogICAgaW50Y18xIC8vIDAKCmZvckxvb3BfZm9yX2hlYWRlckAxOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGZyYW1lX2RpZyA3CiAgICBwdXNoaW50IDQgLy8gNAogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG51bWJlcnMgPSBbLi4ubnVtYmVycywgaXRlbV0KICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDcKICAgIGR1cAogICAgY292ZXIgMgogICAgaXRvYgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICAvCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgNgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDcKICAgIGIgZm9yTG9vcF9mb3JfaGVhZGVyQDEKCmZvckxvb3BfYWZ0ZXJfZm9yQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gbGV0IHJldmVyc2VkOiB1aW50NjRbXSA9IFtdCiAgICBieXRlY18xIC8vIDB4MDAwMAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gZm9yIChjb25zdCBudW0gb2YgbnVtYmVycykgewogICAgZnJhbWVfZGlnIDYKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgpmb3JMb29wX2Zvcl9oZWFkZXJANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBmb3IgKGNvbnN0IG51bSBvZiBudW1iZXJzKSB7CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IGZvckxvb3BfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2OAogICAgLy8gcmV2ZXJzZWQgPSBbbnVtLCAuLi5yZXZlcnNlZF0KICAgIGl0b2IKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgLwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJANQoKZm9yTG9vcF9hZnRlcl9mb3JAODoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjcyCiAgICAvLyBsZXQgc3VtOiB1aW50NjQgPSAwCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgMgogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNAoKZm9yTG9vcF9mb3JfaGVhZGVyQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JAMTIKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VtICs9IG51bQogICAgZnJhbWVfZGlnIDUKICAgICsKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJAOQoKZm9yTG9vcF9hZnRlcl9mb3JAMTI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gYXNzZXJ0KHN1bSA9PT0gNiwgJ1N1bSBvZiByZXZlcnNlZCBhcnJheSBzaG91bGQgYmUgNicpCiAgICBmcmFtZV9kaWcgNQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQgLy8gU3VtIG9mIHJldmVyc2VkIGFycmF5IHNob3VsZCBiZSA2CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gcmV0dXJuIHJldmVyc2VkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuZ2V0RGF5KGRhdGU6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldERheToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjg5LTkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldERheShkYXRlOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5MgogICAgLy8gY2FzZSBVaW50NjQoMSk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTItOTMKICAgIC8vIGNhc2UgVWludDY0KDEpOgogICAgLy8gICByZXR1cm4gJ01vbmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyByZXR1cm4gJ01vbmRheScKICAgIHB1c2hieXRlcyAiTW9uZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTQKICAgIC8vIGNhc2UgVWludDY0KDIpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk0LTk1CiAgICAvLyBjYXNlIFVpbnQ2NCgyKToKICAgIC8vICAgcmV0dXJuICdUdWVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTUKICAgIC8vIHJldHVybiAnVHVlc2RheScKICAgIHB1c2hieXRlcyAiVHVlc2RheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk2CiAgICAvLyBjYXNlIFVpbnQ2NCgzKToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAzIC8vIDMKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5Ni05NwogICAgLy8gY2FzZSBVaW50NjQoMyk6CiAgICAvLyAgIHJldHVybiAnV2VkbmVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIHJldHVybiAnV2VkbmVzZGF5JwogICAgcHVzaGJ5dGVzICJXZWRuZXNkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5OAogICAgLy8gY2FzZSBVaW50NjQoNCk6CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTgtOTkKICAgIC8vIGNhc2UgVWludDY0KDQpOgogICAgLy8gICByZXR1cm4gJ1RodXJzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyByZXR1cm4gJ1RodXJzZGF5JwogICAgcHVzaGJ5dGVzICJUaHVyc2RheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIGNhc2UgVWludDY0KDUpOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDUgLy8gNQogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwMC0xMDEKICAgIC8vIGNhc2UgVWludDY0KDUpOgogICAgLy8gICByZXR1cm4gJ0ZyaWRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDE1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIHJldHVybiAnRnJpZGF5JwogICAgcHVzaGJ5dGVzICJGcmlkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBjYXNlIFVpbnQ2NCg2KToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDItMTAzCiAgICAvLyBjYXNlIFVpbnQ2NCg2KToKICAgIC8vICAgcmV0dXJuICdTYXR1cmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDE4CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHJldHVybiAnU2F0dXJkYXknCiAgICBwdXNoYnl0ZXMgIlNhdHVyZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxODoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNAogICAgLy8gY2FzZSBVaW50NjQoNyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgNyAvLyA3CiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA0LTEwNQogICAgLy8gY2FzZSBVaW50NjQoNyk6CiAgICAvLyAgIHJldHVybiAnU3VuZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMjEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNQogICAgLy8gcmV0dXJuICdTdW5kYXknCiAgICBwdXNoYnl0ZXMgIlN1bmRheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMjE6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIHJldHVybiAnSW52YWxpZCBkYXknCiAgICBwdXNoYnl0ZXMgIkludmFsaWQgZGF5IgogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OkNvbnRyb2xGbG93LmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0KGJveFNpemVMYWJlbDogYnl0ZXMsIGJveE5hbWU6IGJ5dGVzKSAtPiB1aW50NjQ6CmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTIyLTEyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdChib3hTaXplTGFiZWw6IHN0cmluZywgYm94TmFtZTogc3RyaW5nKTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyBjb25zdCBib3hOYW1lTGVuZ3RoOiB1aW50NjQgPSBCeXRlcyhib3hOYW1lKS5sZW5ndGgKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIGNhc2UgJ3hzJzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJ4cyIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMzUtMTM3CiAgICAvLyBjYXNlICd4cyc6CiAgICAvLyAgIGJveFNpemUgPSA4IC8vIDggYnl0ZXMgKGVub3VnaCBmb3IgYSB1aW50NjQpCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gYm94U2l6ZSA9IDggLy8gOCBieXRlcyAoZW5vdWdoIGZvciBhIHVpbnQ2NCkKICAgIGludGNfMiAvLyA4CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9ibG9ja0AxNzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gY29uc3QgbWJySW5jcmVhc2U6IHVpbnQ2NCA9IGJhc2VDb3N0ICsgYnl0ZVVuaXRDb3N0ICogKGJveE5hbWVMZW5ndGggKyBib3hTaXplKQogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNgogICAgLy8gY29uc3QgYnl0ZVVuaXRDb3N0OiB1aW50NjQgPSA0MDAgLy8gbWljcm9BbGdvcyBwZXIgYnl0ZQogICAgcHVzaGludCA0MDAgLy8gNDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIGNvbnN0IG1ickluY3JlYXNlOiB1aW50NjQgPSBiYXNlQ29zdCArIGJ5dGVVbml0Q29zdCAqIChib3hOYW1lTGVuZ3RoICsgYm94U2l6ZSkKICAgICoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gY29uc3QgYmFzZUNvc3Q6IHVpbnQ2NCA9IDI1MDAgLy8gbWljcm9BbGdvcwogICAgcHVzaGludCAyNTAwIC8vIDI1MDAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gY29uc3QgbWJySW5jcmVhc2U6IHVpbnQ2NCA9IGJhc2VDb3N0ICsgYnl0ZVVuaXRDb3N0ICogKGJveE5hbWVMZW5ndGggKyBib3hTaXplKQogICAgKwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTY0CiAgICAvLyByZXR1cm4gbWJySW5jcmVhc2UKICAgIHN3YXAKICAgIHJldHN1YgoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBjYXNlICdzbSc6CiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hieXRlcyAic20iCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM5LTE0MQogICAgLy8gY2FzZSAnc20nOgogICAgLy8gICBib3hTaXplID0gNjQgLy8gNjQgYnl0ZXMKICAgIC8vICAgYnJlYWsKICAgIGJ6IGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyBib3hTaXplID0gNjQgLy8gNjQgYnl0ZXMKICAgIHB1c2hpbnQgNjQgLy8gNjQKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gYnJlYWsKICAgIGIgY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYmxvY2tAMTcKCmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gY2FzZSAnbWQnOgogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoYnl0ZXMgIm1kIgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0My0xNDUKICAgIC8vIGNhc2UgJ21kJzoKICAgIC8vICAgYm94U2l6ZSA9IDI1NiAvLyAyNTYgYnl0ZXMKICAgIC8vICAgYnJlYWsKICAgIGJ6IGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ0CiAgICAvLyBib3hTaXplID0gMjU2IC8vIDI1NiBieXRlcwogICAgcHVzaGludCAyNTYgLy8gMjU2CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDcKICAgIC8vIGNhc2UgJ2xnJzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJsZyIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDctMTQ5CiAgICAvLyBjYXNlICdsZyc6CiAgICAvLyAgIGJveFNpemUgPSAxMDI0IC8vIDFLQgogICAgLy8gICBicmVhawogICAgYnogY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAxMgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ4CiAgICAvLyBib3hTaXplID0gMTAyNCAvLyAxS0IKICAgIHB1c2hpbnQgMTAyNCAvLyAxMDI0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyBjYXNlICdtYXgnOgogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoYnl0ZXMgIm1heCIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTEtMTUzCiAgICAvLyBjYXNlICdtYXgnOgogICAgLy8gICBib3hTaXplID0gMzIwMDAgLy8gMzJLQiAoY2xvc2UgdG8gbWF4IGFsbG93ZWQpCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDE1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGJveFNpemUgPSAzMjAwMCAvLyAzMktCIChjbG9zZSB0byBtYXggYWxsb3dlZCkKICAgIHB1c2hpbnQgMzIwMDAgLy8gMzIwMDAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gYnJlYWsKICAgIGIgY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYmxvY2tAMTcKCmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTcKICAgIC8vIHJldHVybiAwCiAgICBpbnRjXzEgLy8gMAogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OkNvbnRyb2xGbG93Lmxvb3AoKSAtPiB1aW50NjQ6Cmxvb3A6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNzMtMTc0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGxvb3AoKTogdWludDY0IHsKICAgIHByb3RvIDAgMQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyBsZXQgbnVtOiB1aW50NjQgPSAxMAogICAgcHVzaGludCAxMCAvLyAxMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc2CiAgICAvLyBsZXQgbG9vcENvdW50OiB1aW50NjQgPSAwCiAgICBpbnRjXzEgLy8gMAoKbG9vcF93aGlsZV90b3BAMToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3OC0xOTEKICAgIC8vIHdoaWxlIChudW0gPiAwKSB7CiAgICAvLyAgIGlmIChudW0gPiA1KSB7CiAgICAvLyAgICAgbnVtIC09IDEKICAgIC8vICAgICBsb29wQ291bnQgKz0gMQogICAgLy8gICAgIGNvbnRpbnVlCiAgICAvLyAgIH0KICAgIC8vIAogICAgLy8gICBudW0gLT0gMgogICAgLy8gICBsb29wQ291bnQgKz0gMQogICAgLy8gCiAgICAvLyAgIGlmIChudW0gPT09IDEpIHsKICAgIC8vICAgICBicmVhawogICAgLy8gICB9CiAgICAvLyB9CiAgICBmcmFtZV9kaWcgMAogICAgYnogbG9vcF9ibG9ja0A5CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGlmIChudW0gPiA1KSB7CiAgICBmcmFtZV9kaWcgMAogICAgcHVzaGludCA1IC8vIDUKICAgID4KICAgIGJ6IGxvb3BfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODAKICAgIC8vIG51bSAtPSAxCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBsb29wQ291bnQgKz0gMQogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gY29udGludWUKICAgIGIgbG9vcF93aGlsZV90b3BAMQoKbG9vcF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIG51bSAtPSAyCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18zIC8vIDIKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODYKICAgIC8vIGxvb3BDb3VudCArPSAxCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBpZiAobnVtID09PSAxKSB7CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGJ6IGxvb3Bfd2hpbGVfdG9wQDEKCmxvb3BfYmxvY2tAOToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gcmV0dXJuIGxvb3BDb3VudAogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAwMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCiAgICBwdXNoYnl0ZXNzIDB4ZWYwODJmN2IgMHg5NGZiN2VmMSAweDcyMmJhNjY4IDB4N2ZhYzZhNWUgMHhjOWMyYmM1NyAweGY4MmEyNjU0IC8vIG1ldGhvZCAiaXNSaWNoKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImlzRXZlbih1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJmb3JMb29wKCl1aW50NjRbXSIsIG1ldGhvZCAiZ2V0RGF5KHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0KHN0cmluZyxzdHJpbmcpdWludDY0IiwgbWV0aG9kICJsb29wKCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2lzUmljaF9yb3V0ZUAzIG1haW5faXNFdmVuX3JvdXRlQDQgbWFpbl9mb3JMb29wX3JvdXRlQDUgbWFpbl9nZXREYXlfcm91dGVANiBtYWluX2NhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X3JvdXRlQDcgbWFpbl9sb29wX3JvdXRlQDgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fbG9vcF9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGxvb3AKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY2FsY3VsYXRlQm94U3RvcmFnZUNvc3Rfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldERheV9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXREYXkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Zvckxvb3Bfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGZvckxvb3AKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNFdmVuX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzRXZlbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNSaWNoX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzUmljaAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuaXNSaWNoKGFjY291bnRCYWxhbmNlOiB1aW50NjQpIC0+IGJ5dGVzOgppc1JpY2g6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNC0yNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc1JpY2goYWNjb3VudEJhbGFuY2U6IHVpbnQ2NCk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBpZiAoYWNjb3VudEJhbGFuY2UgPiAxMDAwKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgMTAwMCAvLyAxMDAwCiAgICA+CiAgICBieiBpc1JpY2hfZWxzZV9ib2R5QDIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyByaWNoIScKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIHJpY2ghIgogICAgcmV0c3ViCgppc1JpY2hfZWxzZV9ib2R5QDI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gfSBlbHNlIGlmIChhY2NvdW50QmFsYW5jZSA+IDEwMCkgewogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgID4KICAgIGJ6IGlzUmljaF9lbHNlX2JvZHlANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHJldHVybiAnVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgZG9pbmcgd2VsbC4iCiAgICByZXRzdWIKCmlzUmljaF9lbHNlX2JvZHlANDoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyBwb29yIDooJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgcG9vciA6KCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5pc0V2ZW4obnVtYmVyOiB1aW50NjQpIC0+IGJ5dGVzOgppc0V2ZW46CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0Mi00MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc0V2ZW4obnVtYmVyOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmV0dXJuIG51bWJlciAlIDIgPT09IDAgPyAnRXZlbicgOiAnT2RkJwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgJQogICAgYm56IGlzRXZlbl90ZXJuYXJ5X2ZhbHNlQDIKICAgIHB1c2hieXRlcyAiRXZlbiIKICAgIHJldHN1YgoKaXNFdmVuX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXR1cm4gbnVtYmVyICUgMiA9PT0gMCA/ICdFdmVuJyA6ICdPZGQnCiAgICBwdXNoYnl0ZXMgIk9kZCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5mb3JMb29wKCkgLT4gYnl0ZXM6CmZvckxvb3A6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1My01NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBmb3JMb29wKCk6IHVpbnQ2NFtdIHsKICAgIHByb3RvIDAgMQogICAgaW50Y18xIC8vIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwbiA0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1NgogICAgLy8gbGV0IG51bWJlcnM6IHVpbnQ2NFtdID0gW10KICAgIGJ5dGVjXzEgLy8gMHgwMDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gZm9yIChjb25zdCBpdGVtIG9mIHVyYW5nZSg0KSkgewogICAgaW50Y18xIC8vIDAKCmZvckxvb3BfZm9yX2hlYWRlckAxOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGZyYW1lX2RpZyA3CiAgICBwdXNoaW50IDQgLy8gNAogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIG51bWJlcnMgPSBbLi4ubnVtYmVycywgaXRlbV0KICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDcKICAgIGR1cAogICAgY292ZXIgMgogICAgaXRvYgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICAvCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgNgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDcKICAgIGIgZm9yTG9vcF9mb3JfaGVhZGVyQDEKCmZvckxvb3BfYWZ0ZXJfZm9yQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gbGV0IHJldmVyc2VkOiB1aW50NjRbXSA9IFtdCiAgICBieXRlY18xIC8vIDB4MDAwMAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2OAogICAgLy8gZm9yIChjb25zdCBudW0gb2YgbnVtYmVycykgewogICAgZnJhbWVfZGlnIDYKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgpmb3JMb29wX2Zvcl9oZWFkZXJANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBmb3IgKGNvbnN0IG51bSBvZiBudW1iZXJzKSB7CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IGZvckxvb3BfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gcmV2ZXJzZWQgPSBbbnVtLCAuLi5yZXZlcnNlZF0KICAgIGl0b2IKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgLwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJANQoKZm9yTG9vcF9hZnRlcl9mb3JAODoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBsZXQgc3VtOiB1aW50NjQgPSAwCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgMgogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNAoKZm9yTG9vcF9mb3JfaGVhZGVyQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JAMTIKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gc3VtICs9IG51bQogICAgZnJhbWVfZGlnIDUKICAgICsKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJAOQoKZm9yTG9vcF9hZnRlcl9mb3JAMTI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gYXNzZXJ0KHN1bSA9PT0gNiwgJ1N1bSBvZiByZXZlcnNlZCBhcnJheSBzaG91bGQgYmUgNicpCiAgICBmcmFtZV9kaWcgNQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQgLy8gU3VtIG9mIHJldmVyc2VkIGFycmF5IHNob3VsZCBiZSA2CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcmV0dXJuIHJldmVyc2VkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuZ2V0RGF5KGRhdGU6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldERheToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjkxLTkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldERheShkYXRlOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5NAogICAgLy8gY2FzZSBVaW50NjQoMSk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTQtOTUKICAgIC8vIGNhc2UgVWludDY0KDEpOgogICAgLy8gICByZXR1cm4gJ01vbmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyByZXR1cm4gJ01vbmRheScKICAgIHB1c2hieXRlcyAiTW9uZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTYKICAgIC8vIGNhc2UgVWludDY0KDIpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk2LTk3CiAgICAvLyBjYXNlIFVpbnQ2NCgyKToKICAgIC8vICAgcmV0dXJuICdUdWVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIHJldHVybiAnVHVlc2RheScKICAgIHB1c2hieXRlcyAiVHVlc2RheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk4CiAgICAvLyBjYXNlIFVpbnQ2NCgzKToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAzIC8vIDMKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5OC05OQogICAgLy8gY2FzZSBVaW50NjQoMyk6CiAgICAvLyAgIHJldHVybiAnV2VkbmVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHJldHVybiAnV2VkbmVzZGF5JwogICAgcHVzaGJ5dGVzICJXZWRuZXNkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIGNhc2UgVWludDY0KDQpOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwMC0xMDEKICAgIC8vIGNhc2UgVWludDY0KDQpOgogICAgLy8gICByZXR1cm4gJ1RodXJzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gcmV0dXJuICdUaHVyc2RheScKICAgIHB1c2hieXRlcyAiVGh1cnNkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBjYXNlIFVpbnQ2NCg1KToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCA1IC8vIDUKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDItMTAzCiAgICAvLyBjYXNlIFVpbnQ2NCg1KToKICAgIC8vICAgcmV0dXJuICdGcmlkYXknCiAgICBieiBnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyByZXR1cm4gJ0ZyaWRheScKICAgIHB1c2hieXRlcyAiRnJpZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNAogICAgLy8gY2FzZSBVaW50NjQoNik6CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgNiAvLyA2CiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA0LTEwNQogICAgLy8gY2FzZSBVaW50NjQoNik6CiAgICAvLyAgIHJldHVybiAnU2F0dXJkYXknCiAgICBieiBnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxOAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyByZXR1cm4gJ1NhdHVyZGF5JwogICAgcHVzaGJ5dGVzICJTYXR1cmRheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTg6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGNhc2UgVWludDY0KDcpOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDcgLy8gNwogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNi0xMDcKICAgIC8vIGNhc2UgVWludDY0KDcpOgogICAgLy8gICByZXR1cm4gJ1N1bmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDIxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIHJldHVybiAnU3VuZGF5JwogICAgcHVzaGJ5dGVzICJTdW5kYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDIxOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyByZXR1cm4gJ0ludmFsaWQgZGF5JwogICAgcHVzaGJ5dGVzICJJbnZhbGlkIGRheSIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5jYWxjdWxhdGVCb3hTdG9yYWdlQ29zdChib3hTaXplTGFiZWw6IGJ5dGVzLCBib3hOYW1lOiBieXRlcykgLT4gdWludDY0OgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdDoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNC0xMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgY2FsY3VsYXRlQm94U3RvcmFnZUNvc3QoYm94U2l6ZUxhYmVsOiBzdHJpbmcsIGJveE5hbWU6IHN0cmluZyk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gY29uc3QgYm94TmFtZUxlbmd0aDogdWludDY0ID0gQnl0ZXMoYm94TmFtZSkubGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM3CiAgICAvLyBjYXNlICd4cyc6CiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hieXRlcyAieHMiCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM3LTEzOQogICAgLy8gY2FzZSAneHMnOgogICAgLy8gICBib3hTaXplID0gOCAvLyA4IGJ5dGVzIChlbm91Z2ggZm9yIGEgdWludDY0KQogICAgLy8gICBicmVhawogICAgYnogY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIGJveFNpemUgPSA4IC8vIDggYnl0ZXMgKGVub3VnaCBmb3IgYSB1aW50NjQpCiAgICBpbnRjXzIgLy8gOAoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYmxvY2tAMTc6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIGNvbnN0IG1ickluY3JlYXNlOiB1aW50NjQgPSBiYXNlQ29zdCArIGJ5dGVVbml0Q29zdCAqIChib3hOYW1lTGVuZ3RoICsgYm94U2l6ZSkKICAgIGZyYW1lX2RpZyAwCiAgICArCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIGNvbnN0IGJ5dGVVbml0Q29zdDogdWludDY0ID0gNDAwIC8vIG1pY3JvQWxnb3MgcGVyIGJ5dGUKICAgIHB1c2hpbnQgNDAwIC8vIDQwMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTY0CiAgICAvLyBjb25zdCBtYnJJbmNyZWFzZTogdWludDY0ID0gYmFzZUNvc3QgKyBieXRlVW5pdENvc3QgKiAoYm94TmFtZUxlbmd0aCArIGJveFNpemUpCiAgICAqCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjcKICAgIC8vIGNvbnN0IGJhc2VDb3N0OiB1aW50NjQgPSAyNTAwIC8vIG1pY3JvQWxnb3MKICAgIHB1c2hpbnQgMjUwMCAvLyAyNTAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIGNvbnN0IG1ickluY3JlYXNlOiB1aW50NjQgPSBiYXNlQ29zdCArIGJ5dGVVbml0Q29zdCAqIChib3hOYW1lTGVuZ3RoICsgYm94U2l6ZSkKICAgICsKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gcmV0dXJuIG1ickluY3JlYXNlCiAgICBzd2FwCiAgICByZXRzdWIKCmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gY2FzZSAnc20nOgogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoYnl0ZXMgInNtIgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MS0xNDMKICAgIC8vIGNhc2UgJ3NtJzoKICAgIC8vICAgYm94U2l6ZSA9IDY0IC8vIDY0IGJ5dGVzCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MgogICAgLy8gYm94U2l6ZSA9IDY0IC8vIDY0IGJ5dGVzCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDMKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGNhc2UgJ21kJzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJtZCIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDUtMTQ3CiAgICAvLyBjYXNlICdtZCc6CiAgICAvLyAgIGJveFNpemUgPSAyNTYgLy8gMjU2IGJ5dGVzCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0NgogICAgLy8gYm94U2l6ZSA9IDI1NiAvLyAyNTYgYnl0ZXMKICAgIHB1c2hpbnQgMjU2IC8vIDI1NgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ3CiAgICAvLyBicmVhawogICAgYiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9ibG9ja0AxNwoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ5CiAgICAvLyBjYXNlICdsZyc6CiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hieXRlcyAibGciCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ5LTE1MQogICAgLy8gY2FzZSAnbGcnOgogICAgLy8gICBib3hTaXplID0gMTAyNCAvLyAxS0IKICAgIC8vICAgYnJlYWsKICAgIGJ6IGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gYm94U2l6ZSA9IDEwMjQgLy8gMUtCCiAgICBwdXNoaW50IDEwMjQgLy8gMTAyNAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyBicmVhawogICAgYiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9ibG9ja0AxNwoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gY2FzZSAnbWF4JzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJtYXgiCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTUzLTE1NQogICAgLy8gY2FzZSAnbWF4JzoKICAgIC8vICAgYm94U2l6ZSA9IDMyMDAwIC8vIDMyS0IgKGNsb3NlIHRvIG1heCBhbGxvd2VkKQogICAgLy8gICBicmVhawogICAgYnogY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTU0CiAgICAvLyBib3hTaXplID0gMzIwMDAgLy8gMzJLQiAoY2xvc2UgdG8gbWF4IGFsbG93ZWQpCiAgICBwdXNoaW50IDMyMDAwIC8vIDMyMDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTUKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTU5CiAgICAvLyByZXR1cm4gMAogICAgaW50Y18xIC8vIDAKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5sb29wKCkgLT4gdWludDY0Ogpsb29wOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc1LTE3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBsb29wKCk6IHVpbnQ2NCB7CiAgICBwcm90byAwIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3NwogICAgLy8gbGV0IG51bTogdWludDY0ID0gMTAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gbGV0IGxvb3BDb3VudDogdWludDY0ID0gMAogICAgaW50Y18xIC8vIDAKCmxvb3Bfd2hpbGVfdG9wQDE6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODAtMTkzCiAgICAvLyB3aGlsZSAobnVtID4gMCkgewogICAgLy8gICBpZiAobnVtID4gNSkgewogICAgLy8gICAgIG51bSAtPSAxCiAgICAvLyAgICAgbG9vcENvdW50ICs9IDEKICAgIC8vICAgICBjb250aW51ZQogICAgLy8gICB9CiAgICAvLyAKICAgIC8vICAgbnVtIC09IDIKICAgIC8vICAgbG9vcENvdW50ICs9IDEKICAgIC8vIAogICAgLy8gICBpZiAobnVtID09PSAxKSB7CiAgICAvLyAgICAgYnJlYWsKICAgIC8vICAgfQogICAgLy8gfQogICAgZnJhbWVfZGlnIDAKICAgIGJ6IGxvb3BfYmxvY2tAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBpZiAobnVtID4gNSkgewogICAgZnJhbWVfZGlnIDAKICAgIHB1c2hpbnQgNSAvLyA1CiAgICA+CiAgICBieiBsb29wX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyBudW0gLT0gMQogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gbG9vcENvdW50ICs9IDEKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODQKICAgIC8vIGNvbnRpbnVlCiAgICBiIGxvb3Bfd2hpbGVfdG9wQDEKCmxvb3BfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTg3CiAgICAvLyBudW0gLT0gMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMyAvLyAyCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBsb29wQ291bnQgKz0gMQogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE5MAogICAgLy8gaWYgKG51bSA9PT0gMSkgewogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBieiBsb29wX3doaWxlX3RvcEAxCgpsb29wX2Jsb2NrQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxOTUKICAgIC8vIHJldHVybiBsb29wQ291bnQKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "state": { diff --git a/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.arc56.json b/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.arc56.json index c541e31..d15a34c 100644 --- a/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.arc56.json +++ b/projects/typescript-examples/contracts/artifacts/contracts/ControlFlow/ControlFlow.arc56.json @@ -220,7 +220,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAwMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCiAgICBwdXNoYnl0ZXNzIDB4ZWYwODJmN2IgMHg5NGZiN2VmMSAweDcyMmJhNjY4IDB4N2ZhYzZhNWUgMHhjOWMyYmM1NyAweGY4MmEyNjU0IC8vIG1ldGhvZCAiaXNSaWNoKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImlzRXZlbih1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJmb3JMb29wKCl1aW50NjRbXSIsIG1ldGhvZCAiZ2V0RGF5KHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0KHN0cmluZyxzdHJpbmcpdWludDY0IiwgbWV0aG9kICJsb29wKCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2lzUmljaF9yb3V0ZUAzIG1haW5faXNFdmVuX3JvdXRlQDQgbWFpbl9mb3JMb29wX3JvdXRlQDUgbWFpbl9nZXREYXlfcm91dGVANiBtYWluX2NhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X3JvdXRlQDcgbWFpbl9sb29wX3JvdXRlQDgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fbG9vcF9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGxvb3AKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY2FsY3VsYXRlQm94U3RvcmFnZUNvc3Rfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldERheV9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6ODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXREYXkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Zvckxvb3Bfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGZvckxvb3AKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNFdmVuX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzRXZlbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNSaWNoX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzUmljaAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuaXNSaWNoKGFjY291bnRCYWxhbmNlOiB1aW50NjQpIC0+IGJ5dGVzOgppc1JpY2g6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNC0yNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc1JpY2goYWNjb3VudEJhbGFuY2U6IHVpbnQ2NCk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBpZiAoYWNjb3VudEJhbGFuY2UgPiAxMDAwKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgMTAwMCAvLyAxMDAwCiAgICA+CiAgICBieiBpc1JpY2hfZWxzZV9ib2R5QDIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyByaWNoIScKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIHJpY2ghIgogICAgcmV0c3ViCgppc1JpY2hfZWxzZV9ib2R5QDI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gfSBlbHNlIGlmIChhY2NvdW50QmFsYW5jZSA+IDEwMCkgewogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgID4KICAgIGJ6IGlzUmljaF9lbHNlX2JvZHlANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHJldHVybiAnVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgZG9pbmcgd2VsbC4iCiAgICByZXRzdWIKCmlzUmljaF9lbHNlX2JvZHlANDoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyBwb29yIDooJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgcG9vciA6KCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5pc0V2ZW4obnVtYmVyOiB1aW50NjQpIC0+IGJ5dGVzOgppc0V2ZW46CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MC00MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc0V2ZW4obnVtYmVyOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gcmV0dXJuIG51bWJlciAlIDIgPT09IDAgPyAnRXZlbicgOiAnT2RkJwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgJQogICAgYm56IGlzRXZlbl90ZXJuYXJ5X2ZhbHNlQDIKICAgIHB1c2hieXRlcyAiRXZlbiIKICAgIHJldHN1YgoKaXNFdmVuX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyByZXR1cm4gbnVtYmVyICUgMiA9PT0gMCA/ICdFdmVuJyA6ICdPZGQnCiAgICBwdXNoYnl0ZXMgIk9kZCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5mb3JMb29wKCkgLT4gYnl0ZXM6CmZvckxvb3A6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1MS01MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBmb3JMb29wKCk6IHVpbnQ2NFtdIHsKICAgIHByb3RvIDAgMQogICAgaW50Y18xIC8vIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwbiA0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1NAogICAgLy8gbGV0IG51bWJlcnM6IHVpbnQ2NFtdID0gW10KICAgIGJ5dGVjXzEgLy8gMHgwMDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1NwogICAgLy8gZm9yIChjb25zdCBpdGVtIG9mIHVyYW5nZSg0KSkgewogICAgaW50Y18xIC8vIDAKCmZvckxvb3BfZm9yX2hlYWRlckAxOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGZyYW1lX2RpZyA3CiAgICBwdXNoaW50IDQgLy8gNAogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG51bWJlcnMgPSBbLi4ubnVtYmVycywgaXRlbV0KICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDcKICAgIGR1cAogICAgY292ZXIgMgogICAgaXRvYgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICAvCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgNgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDcKICAgIGIgZm9yTG9vcF9mb3JfaGVhZGVyQDEKCmZvckxvb3BfYWZ0ZXJfZm9yQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gbGV0IHJldmVyc2VkOiB1aW50NjRbXSA9IFtdCiAgICBieXRlY18xIC8vIDB4MDAwMAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gZm9yIChjb25zdCBudW0gb2YgbnVtYmVycykgewogICAgZnJhbWVfZGlnIDYKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgpmb3JMb29wX2Zvcl9oZWFkZXJANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBmb3IgKGNvbnN0IG51bSBvZiBudW1iZXJzKSB7CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IGZvckxvb3BfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2OAogICAgLy8gcmV2ZXJzZWQgPSBbbnVtLCAuLi5yZXZlcnNlZF0KICAgIGl0b2IKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgLwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJANQoKZm9yTG9vcF9hZnRlcl9mb3JAODoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjcyCiAgICAvLyBsZXQgc3VtOiB1aW50NjQgPSAwCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgMgogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNAoKZm9yTG9vcF9mb3JfaGVhZGVyQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JAMTIKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VtICs9IG51bQogICAgZnJhbWVfZGlnIDUKICAgICsKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJAOQoKZm9yTG9vcF9hZnRlcl9mb3JAMTI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3OAogICAgLy8gYXNzZXJ0KHN1bSA9PT0gNiwgJ1N1bSBvZiByZXZlcnNlZCBhcnJheSBzaG91bGQgYmUgNicpCiAgICBmcmFtZV9kaWcgNQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQgLy8gU3VtIG9mIHJldmVyc2VkIGFycmF5IHNob3VsZCBiZSA2CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gcmV0dXJuIHJldmVyc2VkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuZ2V0RGF5KGRhdGU6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldERheToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjg5LTkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldERheShkYXRlOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5MgogICAgLy8gY2FzZSBVaW50NjQoMSk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTItOTMKICAgIC8vIGNhc2UgVWludDY0KDEpOgogICAgLy8gICByZXR1cm4gJ01vbmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyByZXR1cm4gJ01vbmRheScKICAgIHB1c2hieXRlcyAiTW9uZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTQKICAgIC8vIGNhc2UgVWludDY0KDIpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk0LTk1CiAgICAvLyBjYXNlIFVpbnQ2NCgyKToKICAgIC8vICAgcmV0dXJuICdUdWVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTUKICAgIC8vIHJldHVybiAnVHVlc2RheScKICAgIHB1c2hieXRlcyAiVHVlc2RheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk2CiAgICAvLyBjYXNlIFVpbnQ2NCgzKToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAzIC8vIDMKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5Ni05NwogICAgLy8gY2FzZSBVaW50NjQoMyk6CiAgICAvLyAgIHJldHVybiAnV2VkbmVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIHJldHVybiAnV2VkbmVzZGF5JwogICAgcHVzaGJ5dGVzICJXZWRuZXNkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5OAogICAgLy8gY2FzZSBVaW50NjQoNCk6CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTgtOTkKICAgIC8vIGNhc2UgVWludDY0KDQpOgogICAgLy8gICByZXR1cm4gJ1RodXJzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyByZXR1cm4gJ1RodXJzZGF5JwogICAgcHVzaGJ5dGVzICJUaHVyc2RheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIGNhc2UgVWludDY0KDUpOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDUgLy8gNQogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwMC0xMDEKICAgIC8vIGNhc2UgVWludDY0KDUpOgogICAgLy8gICByZXR1cm4gJ0ZyaWRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDE1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIHJldHVybiAnRnJpZGF5JwogICAgcHVzaGJ5dGVzICJGcmlkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBjYXNlIFVpbnQ2NCg2KToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDItMTAzCiAgICAvLyBjYXNlIFVpbnQ2NCg2KToKICAgIC8vICAgcmV0dXJuICdTYXR1cmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDE4CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHJldHVybiAnU2F0dXJkYXknCiAgICBwdXNoYnl0ZXMgIlNhdHVyZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxODoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNAogICAgLy8gY2FzZSBVaW50NjQoNyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgNyAvLyA3CiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA0LTEwNQogICAgLy8gY2FzZSBVaW50NjQoNyk6CiAgICAvLyAgIHJldHVybiAnU3VuZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMjEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNQogICAgLy8gcmV0dXJuICdTdW5kYXknCiAgICBwdXNoYnl0ZXMgIlN1bmRheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMjE6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIHJldHVybiAnSW52YWxpZCBkYXknCiAgICBwdXNoYnl0ZXMgIkludmFsaWQgZGF5IgogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OkNvbnRyb2xGbG93LmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0KGJveFNpemVMYWJlbDogYnl0ZXMsIGJveE5hbWU6IGJ5dGVzKSAtPiB1aW50NjQ6CmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTIyLTEyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdChib3hTaXplTGFiZWw6IHN0cmluZywgYm94TmFtZTogc3RyaW5nKTogdWludDY0IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyBjb25zdCBib3hOYW1lTGVuZ3RoOiB1aW50NjQgPSBCeXRlcyhib3hOYW1lKS5sZW5ndGgKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIGNhc2UgJ3hzJzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJ4cyIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMzUtMTM3CiAgICAvLyBjYXNlICd4cyc6CiAgICAvLyAgIGJveFNpemUgPSA4IC8vIDggYnl0ZXMgKGVub3VnaCBmb3IgYSB1aW50NjQpCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gYm94U2l6ZSA9IDggLy8gOCBieXRlcyAoZW5vdWdoIGZvciBhIHVpbnQ2NCkKICAgIGludGNfMiAvLyA4CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9ibG9ja0AxNzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gY29uc3QgbWJySW5jcmVhc2U6IHVpbnQ2NCA9IGJhc2VDb3N0ICsgYnl0ZVVuaXRDb3N0ICogKGJveE5hbWVMZW5ndGggKyBib3hTaXplKQogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNgogICAgLy8gY29uc3QgYnl0ZVVuaXRDb3N0OiB1aW50NjQgPSA0MDAgLy8gbWljcm9BbGdvcyBwZXIgYnl0ZQogICAgcHVzaGludCA0MDAgLy8gNDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIGNvbnN0IG1ickluY3JlYXNlOiB1aW50NjQgPSBiYXNlQ29zdCArIGJ5dGVVbml0Q29zdCAqIChib3hOYW1lTGVuZ3RoICsgYm94U2l6ZSkKICAgICoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gY29uc3QgYmFzZUNvc3Q6IHVpbnQ2NCA9IDI1MDAgLy8gbWljcm9BbGdvcwogICAgcHVzaGludCAyNTAwIC8vIDI1MDAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gY29uc3QgbWJySW5jcmVhc2U6IHVpbnQ2NCA9IGJhc2VDb3N0ICsgYnl0ZVVuaXRDb3N0ICogKGJveE5hbWVMZW5ndGggKyBib3hTaXplKQogICAgKwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTY0CiAgICAvLyByZXR1cm4gbWJySW5jcmVhc2UKICAgIHN3YXAKICAgIHJldHN1YgoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBjYXNlICdzbSc6CiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hieXRlcyAic20iCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM5LTE0MQogICAgLy8gY2FzZSAnc20nOgogICAgLy8gICBib3hTaXplID0gNjQgLy8gNjQgYnl0ZXMKICAgIC8vICAgYnJlYWsKICAgIGJ6IGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyBib3hTaXplID0gNjQgLy8gNjQgYnl0ZXMKICAgIHB1c2hpbnQgNjQgLy8gNjQKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gYnJlYWsKICAgIGIgY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYmxvY2tAMTcKCmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gY2FzZSAnbWQnOgogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoYnl0ZXMgIm1kIgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0My0xNDUKICAgIC8vIGNhc2UgJ21kJzoKICAgIC8vICAgYm94U2l6ZSA9IDI1NiAvLyAyNTYgYnl0ZXMKICAgIC8vICAgYnJlYWsKICAgIGJ6IGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ0CiAgICAvLyBib3hTaXplID0gMjU2IC8vIDI1NiBieXRlcwogICAgcHVzaGludCAyNTYgLy8gMjU2CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDcKICAgIC8vIGNhc2UgJ2xnJzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJsZyIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDctMTQ5CiAgICAvLyBjYXNlICdsZyc6CiAgICAvLyAgIGJveFNpemUgPSAxMDI0IC8vIDFLQgogICAgLy8gICBicmVhawogICAgYnogY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAxMgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ4CiAgICAvLyBib3hTaXplID0gMTAyNCAvLyAxS0IKICAgIHB1c2hpbnQgMTAyNCAvLyAxMDI0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyBjYXNlICdtYXgnOgogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoYnl0ZXMgIm1heCIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTEtMTUzCiAgICAvLyBjYXNlICdtYXgnOgogICAgLy8gICBib3hTaXplID0gMzIwMDAgLy8gMzJLQiAoY2xvc2UgdG8gbWF4IGFsbG93ZWQpCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDE1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGJveFNpemUgPSAzMjAwMCAvLyAzMktCIChjbG9zZSB0byBtYXggYWxsb3dlZCkKICAgIHB1c2hpbnQgMzIwMDAgLy8gMzIwMDAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gYnJlYWsKICAgIGIgY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYmxvY2tAMTcKCmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTcKICAgIC8vIHJldHVybiAwCiAgICBpbnRjXzEgLy8gMAogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OkNvbnRyb2xGbG93Lmxvb3AoKSAtPiB1aW50NjQ6Cmxvb3A6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNzMtMTc0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGxvb3AoKTogdWludDY0IHsKICAgIHByb3RvIDAgMQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyBsZXQgbnVtOiB1aW50NjQgPSAxMAogICAgcHVzaGludCAxMCAvLyAxMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc2CiAgICAvLyBsZXQgbG9vcENvdW50OiB1aW50NjQgPSAwCiAgICBpbnRjXzEgLy8gMAoKbG9vcF93aGlsZV90b3BAMToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3OC0xOTEKICAgIC8vIHdoaWxlIChudW0gPiAwKSB7CiAgICAvLyAgIGlmIChudW0gPiA1KSB7CiAgICAvLyAgICAgbnVtIC09IDEKICAgIC8vICAgICBsb29wQ291bnQgKz0gMQogICAgLy8gICAgIGNvbnRpbnVlCiAgICAvLyAgIH0KICAgIC8vIAogICAgLy8gICBudW0gLT0gMgogICAgLy8gICBsb29wQ291bnQgKz0gMQogICAgLy8gCiAgICAvLyAgIGlmIChudW0gPT09IDEpIHsKICAgIC8vICAgICBicmVhawogICAgLy8gICB9CiAgICAvLyB9CiAgICBmcmFtZV9kaWcgMAogICAgYnogbG9vcF9ibG9ja0A5CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGlmIChudW0gPiA1KSB7CiAgICBmcmFtZV9kaWcgMAogICAgcHVzaGludCA1IC8vIDUKICAgID4KICAgIGJ6IGxvb3BfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODAKICAgIC8vIG51bSAtPSAxCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBsb29wQ291bnQgKz0gMQogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gY29udGludWUKICAgIGIgbG9vcF93aGlsZV90b3BAMQoKbG9vcF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIG51bSAtPSAyCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18zIC8vIDIKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODYKICAgIC8vIGxvb3BDb3VudCArPSAxCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBpZiAobnVtID09PSAxKSB7CiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGJ6IGxvb3Bfd2hpbGVfdG9wQDEKCmxvb3BfYmxvY2tAOToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gcmV0dXJuIGxvb3BDb3VudAogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4MDAwMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDExCiAgICBwdXNoYnl0ZXNzIDB4ZWYwODJmN2IgMHg5NGZiN2VmMSAweDcyMmJhNjY4IDB4N2ZhYzZhNWUgMHhjOWMyYmM1NyAweGY4MmEyNjU0IC8vIG1ldGhvZCAiaXNSaWNoKHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImlzRXZlbih1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJmb3JMb29wKCl1aW50NjRbXSIsIG1ldGhvZCAiZ2V0RGF5KHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0KHN0cmluZyxzdHJpbmcpdWludDY0IiwgbWV0aG9kICJsb29wKCl1aW50NjQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2lzUmljaF9yb3V0ZUAzIG1haW5faXNFdmVuX3JvdXRlQDQgbWFpbl9mb3JMb29wX3JvdXRlQDUgbWFpbl9nZXREYXlfcm91dGVANiBtYWluX2NhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X3JvdXRlQDcgbWFpbl9sb29wX3JvdXRlQDgKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGludGNfMSAvLyAwCiAgICByZXR1cm4KCm1haW5fbG9vcF9yb3V0ZUA4OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGxvb3AKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY2FsY3VsYXRlQm94U3RvcmFnZUNvc3Rfcm91dGVANzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2dldERheV9yb3V0ZUA2OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sRmxvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBnZXREYXkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Zvckxvb3Bfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGZvckxvb3AKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNFdmVuX3JvdXRlQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzRXZlbgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5faXNSaWNoX3JvdXRlQDM6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGlzUmljaAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDExOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTcKICAgIC8vIGV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xGbG93IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAxNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuaXNSaWNoKGFjY291bnRCYWxhbmNlOiB1aW50NjQpIC0+IGJ5dGVzOgppc1JpY2g6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyNC0yNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc1JpY2goYWNjb3VudEJhbGFuY2U6IHVpbnQ2NCk6IHN0cmluZyB7CiAgICBwcm90byAxIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBpZiAoYWNjb3VudEJhbGFuY2UgPiAxMDAwKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgMTAwMCAvLyAxMDAwCiAgICA+CiAgICBieiBpc1JpY2hfZWxzZV9ib2R5QDIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyByaWNoIScKICAgIHB1c2hieXRlcyAiVGhpcyBhY2NvdW50IGlzIHJpY2ghIgogICAgcmV0c3ViCgppc1JpY2hfZWxzZV9ib2R5QDI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gfSBlbHNlIGlmIChhY2NvdW50QmFsYW5jZSA+IDEwMCkgewogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgID4KICAgIGJ6IGlzUmljaF9lbHNlX2JvZHlANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHJldHVybiAnVGhpcyBhY2NvdW50IGlzIGRvaW5nIHdlbGwuJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgZG9pbmcgd2VsbC4iCiAgICByZXRzdWIKCmlzUmljaF9lbHNlX2JvZHlANDoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjMxCiAgICAvLyByZXR1cm4gJ1RoaXMgYWNjb3VudCBpcyBwb29yIDooJwogICAgcHVzaGJ5dGVzICJUaGlzIGFjY291bnQgaXMgcG9vciA6KCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5pc0V2ZW4obnVtYmVyOiB1aW50NjQpIC0+IGJ5dGVzOgppc0V2ZW46CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0Mi00MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBpc0V2ZW4obnVtYmVyOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmV0dXJuIG51bWJlciAlIDIgPT09IDAgPyAnRXZlbicgOiAnT2RkJwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgJQogICAgYm56IGlzRXZlbl90ZXJuYXJ5X2ZhbHNlQDIKICAgIHB1c2hieXRlcyAiRXZlbiIKICAgIHJldHN1YgoKaXNFdmVuX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXR1cm4gbnVtYmVyICUgMiA9PT0gMCA/ICdFdmVuJyA6ICdPZGQnCiAgICBwdXNoYnl0ZXMgIk9kZCIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5mb3JMb29wKCkgLT4gYnl0ZXM6CmZvckxvb3A6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1My01NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBmb3JMb29wKCk6IHVpbnQ2NFtdIHsKICAgIHByb3RvIDAgMQogICAgaW50Y18xIC8vIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwbiA0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1NgogICAgLy8gbGV0IG51bWJlcnM6IHVpbnQ2NFtdID0gW10KICAgIGJ5dGVjXzEgLy8gMHgwMDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gZm9yIChjb25zdCBpdGVtIG9mIHVyYW5nZSg0KSkgewogICAgaW50Y18xIC8vIDAKCmZvckxvb3BfZm9yX2hlYWRlckAxOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGZyYW1lX2RpZyA3CiAgICBwdXNoaW50IDQgLy8gNAogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIG51bWJlcnMgPSBbLi4ubnVtYmVycywgaXRlbV0KICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDcKICAgIGR1cAogICAgY292ZXIgMgogICAgaXRvYgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICAvCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgNgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIGZvciAoY29uc3QgaXRlbSBvZiB1cmFuZ2UoNCkpIHsKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDcKICAgIGIgZm9yTG9vcF9mb3JfaGVhZGVyQDEKCmZvckxvb3BfYWZ0ZXJfZm9yQDQ6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2NAogICAgLy8gbGV0IHJldmVyc2VkOiB1aW50NjRbXSA9IFtdCiAgICBieXRlY18xIC8vIDB4MDAwMAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo2OAogICAgLy8gZm9yIChjb25zdCBudW0gb2YgbnVtYmVycykgewogICAgZnJhbWVfZGlnIDYKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSAzCgpmb3JMb29wX2Zvcl9oZWFkZXJANToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBmb3IgKGNvbnN0IG51bSBvZiBudW1iZXJzKSB7CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IGZvckxvb3BfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyA2CiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3MAogICAgLy8gcmV2ZXJzZWQgPSBbbnVtLCAuLi5yZXZlcnNlZF0KICAgIGl0b2IKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgLwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJANQoKZm9yTG9vcF9hZnRlcl9mb3JAODoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBsZXQgc3VtOiB1aW50NjQgPSAwCiAgICBpbnRjXzEgLy8gMAogICAgZnJhbWVfYnVyeSA1CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgMgogICAgaW50Y18xIC8vIDAKICAgIGZyYW1lX2J1cnkgNAoKZm9yTG9vcF9mb3JfaGVhZGVyQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NQogICAgLy8gZm9yIChjb25zdCBudW0gb2YgcmV2ZXJzZWQpIHsKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZm9yTG9vcF9hZnRlcl9mb3JAMTIKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo3NgogICAgLy8gc3VtICs9IG51bQogICAgZnJhbWVfZGlnIDUKICAgICsKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBmb3JMb29wX2Zvcl9oZWFkZXJAOQoKZm9yTG9vcF9hZnRlcl9mb3JAMTI6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gYXNzZXJ0KHN1bSA9PT0gNiwgJ1N1bSBvZiByZXZlcnNlZCBhcnJheSBzaG91bGQgYmUgNicpCiAgICBmcmFtZV9kaWcgNQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICBhc3NlcnQgLy8gU3VtIG9mIHJldmVyc2VkIGFycmF5IHNob3VsZCBiZSA2CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo4MgogICAgLy8gcmV0dXJuIHJldmVyc2VkCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo6Q29udHJvbEZsb3cuZ2V0RGF5KGRhdGU6IHVpbnQ2NCkgLT4gYnl0ZXM6CmdldERheToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjkxLTkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGdldERheShkYXRlOiB1aW50NjQpOiBzdHJpbmcgewogICAgcHJvdG8gMSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5NAogICAgLy8gY2FzZSBVaW50NjQoMSk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTQtOTUKICAgIC8vIGNhc2UgVWludDY0KDEpOgogICAgLy8gICByZXR1cm4gJ01vbmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk1CiAgICAvLyByZXR1cm4gJ01vbmRheScKICAgIHB1c2hieXRlcyAiTW9uZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTYKICAgIC8vIGNhc2UgVWludDY0KDIpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzMgLy8gMgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk2LTk3CiAgICAvLyBjYXNlIFVpbnQ2NCgyKToKICAgIC8vICAgcmV0dXJuICdUdWVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIHJldHVybiAnVHVlc2RheScKICAgIHB1c2hieXRlcyAiVHVlc2RheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjk4CiAgICAvLyBjYXNlIFVpbnQ2NCgzKToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCAzIC8vIDMKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czo5OC05OQogICAgLy8gY2FzZSBVaW50NjQoMyk6CiAgICAvLyAgIHJldHVybiAnV2VkbmVzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHJldHVybiAnV2VkbmVzZGF5JwogICAgcHVzaGJ5dGVzICJXZWRuZXNkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIGNhc2UgVWludDY0KDQpOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwMC0xMDEKICAgIC8vIGNhc2UgVWludDY0KDQpOgogICAgLy8gICByZXR1cm4gJ1RodXJzZGF5JwogICAgYnogZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gcmV0dXJuICdUaHVyc2RheScKICAgIHB1c2hieXRlcyAiVGh1cnNkYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTAyCiAgICAvLyBjYXNlIFVpbnQ2NCg1KToKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCA1IC8vIDUKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDItMTAzCiAgICAvLyBjYXNlIFVpbnQ2NCg1KToKICAgIC8vICAgcmV0dXJuICdGcmlkYXknCiAgICBieiBnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTAzCiAgICAvLyByZXR1cm4gJ0ZyaWRheScKICAgIHB1c2hieXRlcyAiRnJpZGF5IgogICAgcmV0c3ViCgpnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxNToKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNAogICAgLy8gY2FzZSBVaW50NjQoNik6CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgNiAvLyA2CiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA0LTEwNQogICAgLy8gY2FzZSBVaW50NjQoNik6CiAgICAvLyAgIHJldHVybiAnU2F0dXJkYXknCiAgICBieiBnZXREYXlfYWZ0ZXJfaWZfZWxzZUAxOAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyByZXR1cm4gJ1NhdHVyZGF5JwogICAgcHVzaGJ5dGVzICJTYXR1cmRheSIKICAgIHJldHN1YgoKZ2V0RGF5X2FmdGVyX2lmX2Vsc2VAMTg6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGNhc2UgVWludDY0KDcpOgogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoaW50IDcgLy8gNwogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEwNi0xMDcKICAgIC8vIGNhc2UgVWludDY0KDcpOgogICAgLy8gICByZXR1cm4gJ1N1bmRheScKICAgIGJ6IGdldERheV9hZnRlcl9pZl9lbHNlQDIxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMDcKICAgIC8vIHJldHVybiAnU3VuZGF5JwogICAgcHVzaGJ5dGVzICJTdW5kYXkiCiAgICByZXRzdWIKCmdldERheV9hZnRlcl9pZl9lbHNlQDIxOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyByZXR1cm4gJ0ludmFsaWQgZGF5JwogICAgcHVzaGJ5dGVzICJJbnZhbGlkIGRheSIKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5jYWxjdWxhdGVCb3hTdG9yYWdlQ29zdChib3hTaXplTGFiZWw6IGJ5dGVzLCBib3hOYW1lOiBieXRlcykgLT4gdWludDY0OgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdDoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEyNC0xMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgY2FsY3VsYXRlQm94U3RvcmFnZUNvc3QoYm94U2l6ZUxhYmVsOiBzdHJpbmcsIGJveE5hbWU6IHN0cmluZyk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gY29uc3QgYm94TmFtZUxlbmd0aDogdWludDY0ID0gQnl0ZXMoYm94TmFtZSkubGVuZ3RoCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM3CiAgICAvLyBjYXNlICd4cyc6CiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hieXRlcyAieHMiCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTM3LTEzOQogICAgLy8gY2FzZSAneHMnOgogICAgLy8gICBib3hTaXplID0gOCAvLyA4IGJ5dGVzIChlbm91Z2ggZm9yIGEgdWludDY0KQogICAgLy8gICBicmVhawogICAgYnogY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMzgKICAgIC8vIGJveFNpemUgPSA4IC8vIDggYnl0ZXMgKGVub3VnaCBmb3IgYSB1aW50NjQpCiAgICBpbnRjXzIgLy8gOAoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYmxvY2tAMTc6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIGNvbnN0IG1ickluY3JlYXNlOiB1aW50NjQgPSBiYXNlQ29zdCArIGJ5dGVVbml0Q29zdCAqIChib3hOYW1lTGVuZ3RoICsgYm94U2l6ZSkKICAgIGZyYW1lX2RpZyAwCiAgICArCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIGNvbnN0IGJ5dGVVbml0Q29zdDogdWludDY0ID0gNDAwIC8vIG1pY3JvQWxnb3MgcGVyIGJ5dGUKICAgIHB1c2hpbnQgNDAwIC8vIDQwMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTY0CiAgICAvLyBjb25zdCBtYnJJbmNyZWFzZTogdWludDY0ID0gYmFzZUNvc3QgKyBieXRlVW5pdENvc3QgKiAoYm94TmFtZUxlbmd0aCArIGJveFNpemUpCiAgICAqCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxMjcKICAgIC8vIGNvbnN0IGJhc2VDb3N0OiB1aW50NjQgPSAyNTAwIC8vIG1pY3JvQWxnb3MKICAgIHB1c2hpbnQgMjUwMCAvLyAyNTAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIGNvbnN0IG1ickluY3JlYXNlOiB1aW50NjQgPSBiYXNlQ29zdCArIGJ5dGVVbml0Q29zdCAqIChib3hOYW1lTGVuZ3RoICsgYm94U2l6ZSkKICAgICsKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gcmV0dXJuIG1ickluY3JlYXNlCiAgICBzd2FwCiAgICByZXRzdWIKCmNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gY2FzZSAnc20nOgogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoYnl0ZXMgInNtIgogICAgPT0KICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MS0xNDMKICAgIC8vIGNhc2UgJ3NtJzoKICAgIC8vICAgYm94U2l6ZSA9IDY0IC8vIDY0IGJ5dGVzCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0MgogICAgLy8gYm94U2l6ZSA9IDY0IC8vIDY0IGJ5dGVzCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDMKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGNhc2UgJ21kJzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJtZCIKICAgID09CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNDUtMTQ3CiAgICAvLyBjYXNlICdtZCc6CiAgICAvLyAgIGJveFNpemUgPSAyNTYgLy8gMjU2IGJ5dGVzCiAgICAvLyAgIGJyZWFrCiAgICBieiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDkKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE0NgogICAgLy8gYm94U2l6ZSA9IDI1NiAvLyAyNTYgYnl0ZXMKICAgIHB1c2hpbnQgMjU2IC8vIDI1NgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ3CiAgICAvLyBicmVhawogICAgYiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9ibG9ja0AxNwoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ5CiAgICAvLyBjYXNlICdsZyc6CiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hieXRlcyAibGciCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTQ5LTE1MQogICAgLy8gY2FzZSAnbGcnOgogICAgLy8gICBib3hTaXplID0gMTAyNCAvLyAxS0IKICAgIC8vICAgYnJlYWsKICAgIGJ6IGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gYm94U2l6ZSA9IDEwMjQgLy8gMUtCCiAgICBwdXNoaW50IDEwMjQgLy8gMTAyNAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyBicmVhawogICAgYiBjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9ibG9ja0AxNwoKY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gY2FzZSAnbWF4JzoKICAgIGZyYW1lX2RpZyAtMgogICAgcHVzaGJ5dGVzICJtYXgiCiAgICA9PQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTUzLTE1NQogICAgLy8gY2FzZSAnbWF4JzoKICAgIC8vICAgYm94U2l6ZSA9IDMyMDAwIC8vIDMyS0IgKGNsb3NlIHRvIG1heCBhbGxvd2VkKQogICAgLy8gICBicmVhawogICAgYnogY2FsY3VsYXRlQm94U3RvcmFnZUNvc3RfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTU0CiAgICAvLyBib3hTaXplID0gMzIwMDAgLy8gMzJLQiAoY2xvc2UgdG8gbWF4IGFsbG93ZWQpCiAgICBwdXNoaW50IDMyMDAwIC8vIDMyMDAwCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxNTUKICAgIC8vIGJyZWFrCiAgICBiIGNhbGN1bGF0ZUJveFN0b3JhZ2VDb3N0X2Jsb2NrQDE3CgpjYWxjdWxhdGVCb3hTdG9yYWdlQ29zdF9hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTU5CiAgICAvLyByZXR1cm4gMAogICAgaW50Y18xIC8vIDAKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjpDb250cm9sRmxvdy5sb29wKCkgLT4gdWludDY0Ogpsb29wOgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTc1LTE3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIHB1YmxpYyBsb29wKCk6IHVpbnQ2NCB7CiAgICBwcm90byAwIDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3NwogICAgLy8gbGV0IG51bTogdWludDY0ID0gMTAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gbGV0IGxvb3BDb3VudDogdWludDY0ID0gMAogICAgaW50Y18xIC8vIDAKCmxvb3Bfd2hpbGVfdG9wQDE6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODAtMTkzCiAgICAvLyB3aGlsZSAobnVtID4gMCkgewogICAgLy8gICBpZiAobnVtID4gNSkgewogICAgLy8gICAgIG51bSAtPSAxCiAgICAvLyAgICAgbG9vcENvdW50ICs9IDEKICAgIC8vICAgICBjb250aW51ZQogICAgLy8gICB9CiAgICAvLyAKICAgIC8vICAgbnVtIC09IDIKICAgIC8vICAgbG9vcENvdW50ICs9IDEKICAgIC8vIAogICAgLy8gICBpZiAobnVtID09PSAxKSB7CiAgICAvLyAgICAgYnJlYWsKICAgIC8vICAgfQogICAgLy8gfQogICAgZnJhbWVfZGlnIDAKICAgIGJ6IGxvb3BfYmxvY2tAOQogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBpZiAobnVtID4gNSkgewogICAgZnJhbWVfZGlnIDAKICAgIHB1c2hpbnQgNSAvLyA1CiAgICA+CiAgICBieiBsb29wX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyBudW0gLT0gMQogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gbG9vcENvdW50ICs9IDEKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxODQKICAgIC8vIGNvbnRpbnVlCiAgICBiIGxvb3Bfd2hpbGVfdG9wQDEKCmxvb3BfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTg3CiAgICAvLyBudW0gLT0gMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMyAvLyAyCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gY29udHJhY3RzL0NvbnRyb2xGbG93L2NvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBsb29wQ291bnQgKz0gMQogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIGNvbnRyYWN0cy9Db250cm9sRmxvdy9jb250cmFjdC5hbGdvLnRzOjE5MAogICAgLy8gaWYgKG51bSA9PT0gMSkgewogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBieiBsb29wX3doaWxlX3RvcEAxCgpsb29wX2Jsb2NrQDk6CiAgICAvLyBjb250cmFjdHMvQ29udHJvbEZsb3cvY29udHJhY3QuYWxnby50czoxOTUKICAgIC8vIHJldHVybiBsb29wQ291bnQKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": {