{ "name": "TestLocalMap", "structs": {}, "methods": [ { "name": "optIn", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "OptIn" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setAndGetUint", "args": [ { "type": "string", "name": "key" }, { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setAndGetBytes", "args": [ { "type": "string", "name": "key" }, { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setAndGetString", "args": [ { "type": "string", "name": "key" }, { "type": "string", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "deleteValue", "args": [ { "type": "string", "name": "key" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "hasValue", "args": [ { "type": "string", "name": "key" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "testKeyPrefix", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "testPrefixedMap", "args": [ { "type": "string", "name": "key" }, { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setAndGetUintViaLocalState", "args": [ { "type": "string", "name": "key" }, { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 8, "bytes": 8 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": {}, "local": { "uintMap": { "keyType": "AVMString", "valueType": "AVMUint64", "prefix": "dWludE1hcA==" }, "bytesMap": { "keyType": "AVMString", "valueType": "AVMBytes", "prefix": "Ynl0ZXNNYXA=" }, "stringMap": { "keyType": "AVMString", "valueType": "AVMString", "prefix": "c3RyaW5nTWFw" }, "prefixedMap": { "keyType": "AVMString", "valueType": "AVMUint64", "prefix": "cC8=" } }, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 597 ], "errorMessage": "bytes value should match" }, { "pc": [ 560, 593, 626, 738, 771 ], "errorMessage": "check LocalState exists" }, { "pc": [ 705 ], "errorMessage": "default key prefix should be property name" }, { "pc": [ 709 ], "errorMessage": "explicit key prefix should match" }, { "pc": [ 267, 302, 320, 346, 364, 390, 416, 467, 502 ], "errorMessage": "invalid array length header" }, { "pc": [ 276, 311, 329, 355, 373, 399, 425, 476, 511 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 287, 487, 522 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 742 ], "errorMessage": "prefixed map value should match" }, { "pc": [ 659 ], "errorMessage": "should have value before delete" }, { "pc": [ 678 ], "errorMessage": "should not have value after delete" }, { "pc": [ 630 ], "errorMessage": "string value should match" }, { "pc": [ 564 ], "errorMessage": "uint value should match" }, { "pc": [ 775 ], "errorMessage": "uint value via LocalState should match" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgOAogICAgYnl0ZWNibG9jayAidWludE1hcCIgInAvIiAiYnl0ZXNNYXAiICJzdHJpbmdNYXAiCiAgICBiIG1haW5fYmxvY2tAMAoKbWFpbl9ibG9ja0AwOgogICAgYiBtYWluX2Jsb2NrQDEKCm1haW5fYmxvY2tAMToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo0LTUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGxvY2FsVWludHM6IDgsIGxvY2FsQnl0ZXM6IDggfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFRlc3RMb2NhbE1hcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDE3CiAgICBiIG1haW5fYWJpX3JvdXRpbmdAMgoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjQtNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgbG9jYWxVaW50czogOCwgbG9jYWxCeXRlczogOCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgVGVzdExvY2FsTWFwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgcHVzaGJ5dGVzIDB4MjkzMTRkOTUgLy8gbWV0aG9kICJvcHRJbigpdm9pZCIKICAgIHVuY292ZXIgMQogICAgbWF0Y2ggbWFpbl9vcHRJbl9yb3V0ZUAzCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEA0CgptYWluX3N3aXRjaF9jYXNlX25leHRANDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo0LTUKICAgIC8vIEBjb250cmFjdCh7IHN0YXRlVG90YWxzOiB7IGxvY2FsVWludHM6IDgsIGxvY2FsQnl0ZXM6IDggfSB9KQogICAgLy8gZXhwb3J0IGNsYXNzIFRlc3RMb2NhbE1hcCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMCAvLyBOb09wCiAgICA9PQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgICE9CiAgICBieiBtYWluX2NyZWF0ZV9Ob09wQDE1CiAgICBiIG1haW5fY2FsbF9Ob09wQDUKCm1haW5fY2FsbF9Ob09wQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6NC01CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBsb2NhbFVpbnRzOiA4LCBsb2NhbEJ5dGVzOiA4IH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBUZXN0TG9jYWxNYXAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHgwMTEyNGI3MyAvLyBtZXRob2QgInNldEFuZEdldFVpbnQoc3RyaW5nLHVpbnQ2NCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4YWVjNDQxYjggLy8gbWV0aG9kICJzZXRBbmRHZXRCeXRlcyhzdHJpbmcsYnl0ZVtdKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhhMmQyMDM5MiAvLyBtZXRob2QgInNldEFuZEdldFN0cmluZyhzdHJpbmcsc3RyaW5nKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHg3YmMxMjY5ZCAvLyBtZXRob2QgImRlbGV0ZVZhbHVlKHN0cmluZyl2b2lkIgogICAgcHVzaGJ5dGVzIDB4N2Q0NGFjOTYgLy8gbWV0aG9kICJoYXNWYWx1ZShzdHJpbmcpYm9vbCIKICAgIHB1c2hieXRlcyAweDM3NjRiMWVkIC8vIG1ldGhvZCAidGVzdEtleVByZWZpeCgpdm9pZCIKICAgIHB1c2hieXRlcyAweGIzNmNiZTJhIC8vIG1ldGhvZCAidGVzdFByZWZpeGVkTWFwKHN0cmluZyx1aW50NjQpdm9pZCIKICAgIHB1c2hieXRlcyAweGRlY2U5NjA1IC8vIG1ldGhvZCAic2V0QW5kR2V0VWludFZpYUxvY2FsU3RhdGUoc3RyaW5nLHVpbnQ2NCl2b2lkIgogICAgdW5jb3ZlciA4CiAgICBtYXRjaCBtYWluX3NldEFuZEdldFVpbnRfcm91dGVANiBtYWluX3NldEFuZEdldEJ5dGVzX3JvdXRlQDcgbWFpbl9zZXRBbmRHZXRTdHJpbmdfcm91dGVAOCBtYWluX2RlbGV0ZVZhbHVlX3JvdXRlQDkgbWFpbl9oYXNWYWx1ZV9yb3V0ZUAxMCBtYWluX3Rlc3RLZXlQcmVmaXhfcm91dGVAMTEgbWFpbl90ZXN0UHJlZml4ZWRNYXBfcm91dGVAMTIgbWFpbl9zZXRBbmRHZXRVaW50VmlhTG9jYWxTdGF0ZV9yb3V0ZUAxMwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTQKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNDoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE2CgptYWluX2FmdGVyX2lmX2Vsc2VAMTY6CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAxOAoKbWFpbl9hZnRlcl9pZl9lbHNlQDE4OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjQtNQogICAgLy8gQGNvbnRyYWN0KHsgc3RhdGVUb3RhbHM6IHsgbG9jYWxVaW50czogOCwgbG9jYWxCeXRlczogOCB9IH0pCiAgICAvLyBleHBvcnQgY2xhc3MgVGVzdExvY2FsTWFwIGV4dGVuZHMgQ29udHJhY3QgewogICAgZXJyCgptYWluX3NldEFuZEdldFVpbnRWaWFMb2NhbFN0YXRlX3JvdXRlQDEzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjUwCiAgICAvLyBzZXRBbmRHZXRVaW50VmlhTG9jYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHVpbnQ2NCkgewogICAgY2FsbHN1YiBzZXRBbmRHZXRVaW50VmlhTG9jYWxTdGF0ZQogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTQKCm1haW5fdGVzdFByZWZpeGVkTWFwX3JvdXRlQDEyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjQ1CiAgICAvLyB0ZXN0UHJlZml4ZWRNYXAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1aW50NjQpIHsKICAgIGNhbGxzdWIgdGVzdFByZWZpeGVkTWFwCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNAoKbWFpbl90ZXN0S2V5UHJlZml4X3JvdXRlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjQwCiAgICAvLyB0ZXN0S2V5UHJlZml4KCkgewogICAgY2FsbHN1YiB0ZXN0S2V5UHJlZml4CiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNAoKbWFpbl9oYXNWYWx1ZV9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czozNgogICAgLy8gaGFzVmFsdWUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHsKICAgIGNhbGxzdWIgaGFzVmFsdWUKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDE0CgptYWluX2RlbGV0ZVZhbHVlX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6MjkKICAgIC8vIGRlbGV0ZVZhbHVlKGtleTogc3RyaW5nKSB7CiAgICBjYWxsc3ViIGRlbGV0ZVZhbHVlCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNAoKbWFpbl9zZXRBbmRHZXRTdHJpbmdfcm91dGVAODoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czoyNAogICAgLy8gc2V0QW5kR2V0U3RyaW5nKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7CiAgICBjYWxsc3ViIHNldEFuZEdldFN0cmluZwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTQKCm1haW5fc2V0QW5kR2V0Qnl0ZXNfcm91dGVANzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czoxOQogICAgLy8gc2V0QW5kR2V0Qnl0ZXMoa2V5OiBzdHJpbmcsIHZhbHVlOiBieXRlcykgewogICAgY2FsbHN1YiBzZXRBbmRHZXRCeXRlcwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTQKCm1haW5fc2V0QW5kR2V0VWludF9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjE0CiAgICAvLyBzZXRBbmRHZXRVaW50KGtleTogc3RyaW5nLCB2YWx1ZTogdWludDY0KSB7CiAgICBjYWxsc3ViIHNldEFuZEdldFVpbnQKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDE0CgptYWluX2NyZWF0ZV9Ob09wQDE1OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTYKCm1haW5fb3B0SW5fcm91dGVAMzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czoxMQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ09wdEluJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIE9wdEluCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgJiYKICAgIGFzc2VydAogICAgY2FsbHN1YiBvcHRJbgogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRANAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6NC01CiAgICAvLyBAY29udHJhY3QoeyBzdGF0ZVRvdGFsczogeyBsb2NhbFVpbnRzOiA4LCBsb2NhbEJ5dGVzOiA4IH0gfSkKICAgIC8vIGV4cG9ydCBjbGFzcyBUZXN0TG9jYWxNYXAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgICYmCiAgICBhc3NlcnQKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAub3B0SW5bcm91dGluZ10oKSAtPiB2b2lkOgpvcHRJbjoKICAgIGIgb3B0SW5fYmxvY2tAMAoKb3B0SW5fYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czoxMQogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ09wdEluJyB9KQogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5vcHRJbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnNldEFuZEdldFVpbnRbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRBbmRHZXRVaW50OgogICAgYiBzZXRBbmRHZXRVaW50X2Jsb2NrQDAKCnNldEFuZEdldFVpbnRfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czoxNAogICAgLy8gc2V0QW5kR2V0VWludChrZXk6IHN0cmluZywgdmFsdWU6IHVpbnQ2NCkgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnNldEFuZEdldFVpbnQKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5zZXRBbmRHZXRCeXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFuZEdldEJ5dGVzOgogICAgYiBzZXRBbmRHZXRCeXRlc19ibG9ja0AwCgpzZXRBbmRHZXRCeXRlc19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjE5CiAgICAvLyBzZXRBbmRHZXRCeXRlcyhrZXk6IHN0cmluZywgdmFsdWU6IGJ5dGVzKSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMQogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMSAvLyAxCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5zZXRBbmRHZXRCeXRlcwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnNldEFuZEdldFN0cmluZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFuZEdldFN0cmluZzoKICAgIGIgc2V0QW5kR2V0U3RyaW5nX2Jsb2NrQDAKCnNldEFuZEdldFN0cmluZ19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjI0CiAgICAvLyBzZXRBbmRHZXRTdHJpbmcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMSAvLyAxCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnNldEFuZEdldFN0cmluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLmRlbGV0ZVZhbHVlW3JvdXRpbmddKCkgLT4gdm9pZDoKZGVsZXRlVmFsdWU6CiAgICBiIGRlbGV0ZVZhbHVlX2Jsb2NrQDAKCmRlbGV0ZVZhbHVlX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6MjkKICAgIC8vIGRlbGV0ZVZhbHVlKGtleTogc3RyaW5nKSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMQogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAuZGVsZXRlVmFsdWUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5oYXNWYWx1ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6Cmhhc1ZhbHVlOgogICAgYiBoYXNWYWx1ZV9ibG9ja0AwCgpoYXNWYWx1ZV9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjM2CiAgICAvLyBoYXNWYWx1ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4gewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLmhhc1ZhbHVlCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnRlc3RLZXlQcmVmaXhbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0S2V5UHJlZml4OgogICAgYiB0ZXN0S2V5UHJlZml4X2Jsb2NrQDAKCnRlc3RLZXlQcmVmaXhfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo0MAogICAgLy8gdGVzdEtleVByZWZpeCgpIHsKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAudGVzdEtleVByZWZpeAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnRlc3RQcmVmaXhlZE1hcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RQcmVmaXhlZE1hcDoKICAgIGIgdGVzdFByZWZpeGVkTWFwX2Jsb2NrQDAKCnRlc3RQcmVmaXhlZE1hcF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjQ1CiAgICAvLyB0ZXN0UHJlZml4ZWRNYXAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1aW50NjQpIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMSAvLyAxCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC50ZXN0UHJlZml4ZWRNYXAKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5zZXRBbmRHZXRVaW50VmlhTG9jYWxTdGF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFuZEdldFVpbnRWaWFMb2NhbFN0YXRlOgogICAgYiBzZXRBbmRHZXRVaW50VmlhTG9jYWxTdGF0ZV9ibG9ja0AwCgpzZXRBbmRHZXRVaW50VmlhTG9jYWxTdGF0ZV9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjUwCiAgICAvLyBzZXRBbmRHZXRVaW50VmlhTG9jYWxTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IHVpbnQ2NCkgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDEKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnNldEFuZEdldFVpbnRWaWFMb2NhbFN0YXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAub3B0SW4oKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5vcHRJbjoKICAgIGIgdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAub3B0SW5fYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAub3B0SW5fYmxvY2tAMDoKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnNldEFuZEdldFVpbnQoa2V5OiBieXRlcywgdmFsdWU6IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAuc2V0QW5kR2V0VWludDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czoxNAogICAgLy8gc2V0QW5kR2V0VWludChrZXk6IHN0cmluZywgdmFsdWU6IHVpbnQ2NCkgewogICAgcHJvdG8gMiAwCiAgICBiIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnNldEFuZEdldFVpbnRfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAuc2V0QW5kR2V0VWludF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjYKICAgIC8vIHVpbnRNYXAgPSBMb2NhbE1hcDxzdHJpbmcsIHVpbnQ2ND4oKQogICAgYnl0ZWNfMCAvLyAidWludE1hcCIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6MTUKICAgIC8vIHRoaXMudWludE1hcChrZXksIFR4bi5zZW5kZXIpLnZhbHVlID0gdmFsdWUKICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6NgogICAgLy8gdWludE1hcCA9IExvY2FsTWFwPHN0cmluZywgdWludDY0PigpCiAgICBieXRlY18wIC8vICJ1aW50TWFwIgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KHRoaXMudWludE1hcChrZXksIFR4bi5zZW5kZXIpLnZhbHVlID09PSB2YWx1ZSwgJ3VpbnQgdmFsdWUgc2hvdWxkIG1hdGNoJykKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIHVpbnQgdmFsdWUgc2hvdWxkIG1hdGNoCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5zZXRBbmRHZXRCeXRlcyhrZXk6IGJ5dGVzLCB2YWx1ZTogYnl0ZXMpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnNldEFuZEdldEJ5dGVzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjE5CiAgICAvLyBzZXRBbmRHZXRCeXRlcyhrZXk6IHN0cmluZywgdmFsdWU6IGJ5dGVzKSB7CiAgICBwcm90byAyIDAKICAgIGIgdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAuc2V0QW5kR2V0Qnl0ZXNfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAuc2V0QW5kR2V0Qnl0ZXNfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo3CiAgICAvLyBieXRlc01hcCA9IExvY2FsTWFwPHN0cmluZywgYnl0ZXM+KCkKICAgIGJ5dGVjXzIgLy8gImJ5dGVzTWFwIgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czoyMAogICAgLy8gdGhpcy5ieXRlc01hcChrZXksIFR4bi5zZW5kZXIpLnZhbHVlID0gdmFsdWUKICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6NwogICAgLy8gYnl0ZXNNYXAgPSBMb2NhbE1hcDxzdHJpbmcsIGJ5dGVzPigpCiAgICBieXRlY18yIC8vICJieXRlc01hcCIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6MjEKICAgIC8vIGFzc2VydCh0aGlzLmJ5dGVzTWFwKGtleSwgVHhuLnNlbmRlcikudmFsdWUgPT09IHZhbHVlLCAnYnl0ZXMgdmFsdWUgc2hvdWxkIG1hdGNoJykKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIGJ5dGVzIHZhbHVlIHNob3VsZCBtYXRjaAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAuc2V0QW5kR2V0U3RyaW5nKGtleTogYnl0ZXMsIHZhbHVlOiBieXRlcykgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAuc2V0QW5kR2V0U3RyaW5nOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjI0CiAgICAvLyBzZXRBbmRHZXRTdHJpbmcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHsKICAgIHByb3RvIDIgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5zZXRBbmRHZXRTdHJpbmdfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAuc2V0QW5kR2V0U3RyaW5nX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OAogICAgLy8gc3RyaW5nTWFwID0gTG9jYWxNYXA8c3RyaW5nLCBzdHJpbmc+KCkKICAgIGJ5dGVjXzMgLy8gInN0cmluZ01hcCIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6MjUKICAgIC8vIHRoaXMuc3RyaW5nTWFwKGtleSwgVHhuLnNlbmRlcikudmFsdWUgPSB2YWx1ZQogICAgdHhuIFNlbmRlcgogICAgdW5jb3ZlciAxCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo4CiAgICAvLyBzdHJpbmdNYXAgPSBMb2NhbE1hcDxzdHJpbmcsIHN0cmluZz4oKQogICAgYnl0ZWNfMyAvLyAic3RyaW5nTWFwIgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czoyNgogICAgLy8gYXNzZXJ0KHRoaXMuc3RyaW5nTWFwKGtleSwgVHhuLnNlbmRlcikudmFsdWUgPT09IHZhbHVlLCAnc3RyaW5nIHZhbHVlIHNob3VsZCBtYXRjaCcpCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydCAvLyBzdHJpbmcgdmFsdWUgc2hvdWxkIG1hdGNoCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5kZWxldGVWYWx1ZShrZXk6IGJ5dGVzKSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5kZWxldGVWYWx1ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czoyOQogICAgLy8gZGVsZXRlVmFsdWUoa2V5OiBzdHJpbmcpIHsKICAgIHByb3RvIDEgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5kZWxldGVWYWx1ZV9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5kZWxldGVWYWx1ZV9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjYKICAgIC8vIHVpbnRNYXAgPSBMb2NhbE1hcDxzdHJpbmcsIHVpbnQ2ND4oKQogICAgYnl0ZWNfMCAvLyAidWludE1hcCIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6MzAKICAgIC8vIHRoaXMudWludE1hcChrZXksIFR4bi5zZW5kZXIpLnZhbHVlID0gMTIzCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDEKICAgIHB1c2hpbnQgMTIzCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6NgogICAgLy8gdWludE1hcCA9IExvY2FsTWFwPHN0cmluZywgdWludDY0PigpCiAgICBieXRlY18wIC8vICJ1aW50TWFwIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czozMQogICAgLy8gYXNzZXJ0KHRoaXMudWludE1hcChrZXksIFR4bi5zZW5kZXIpLmhhc1ZhbHVlLCAnc2hvdWxkIGhhdmUgdmFsdWUgYmVmb3JlIGRlbGV0ZScpCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gc2hvdWxkIGhhdmUgdmFsdWUgYmVmb3JlIGRlbGV0ZQogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjMyCiAgICAvLyB0aGlzLnVpbnRNYXAoa2V5LCBUeG4uc2VuZGVyKS5kZWxldGUoKQogICAgdHhuIFNlbmRlcgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjYKICAgIC8vIHVpbnRNYXAgPSBMb2NhbE1hcDxzdHJpbmcsIHVpbnQ2ND4oKQogICAgYnl0ZWNfMCAvLyAidWludE1hcCIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6MzIKICAgIC8vIHRoaXMudWludE1hcChrZXksIFR4bi5zZW5kZXIpLmRlbGV0ZSgpCiAgICBhcHBfbG9jYWxfZGVsCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6NgogICAgLy8gdWludE1hcCA9IExvY2FsTWFwPHN0cmluZywgdWludDY0PigpCiAgICBieXRlY18wIC8vICJ1aW50TWFwIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czozMwogICAgLy8gYXNzZXJ0KCF0aGlzLnVpbnRNYXAoa2V5LCBUeG4uc2VuZGVyKS5oYXNWYWx1ZSwgJ3Nob3VsZCBub3QgaGF2ZSB2YWx1ZSBhZnRlciBkZWxldGUnKQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX2dldF9leAogICAgIQogICAgYXNzZXJ0IC8vIHNob3VsZCBub3QgaGF2ZSB2YWx1ZSBhZnRlciBkZWxldGUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLmhhc1ZhbHVlKGtleTogYnl0ZXMpIC0+IHVpbnQ2NDoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAuaGFzVmFsdWU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6MzYKICAgIC8vIGhhc1ZhbHVlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7CiAgICBwcm90byAxIDEKICAgIGIgdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAuaGFzVmFsdWVfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAuaGFzVmFsdWVfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo2CiAgICAvLyB1aW50TWFwID0gTG9jYWxNYXA8c3RyaW5nLCB1aW50NjQ+KCkKICAgIGJ5dGVjXzAgLy8gInVpbnRNYXAiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjM3CiAgICAvLyByZXR1cm4gdGhpcy51aW50TWFwKGtleSwgVHhuLnNlbmRlcikuaGFzVmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHVuY292ZXIgMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAudGVzdEtleVByZWZpeCgpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnRlc3RLZXlQcmVmaXg6CiAgICBiIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnRlc3RLZXlQcmVmaXhfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAudGVzdEtleVByZWZpeF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjQxCiAgICAvLyBhc3NlcnQodGhpcy51aW50TWFwLmtleVByZWZpeCA9PT0gQnl0ZXMoJ3VpbnRNYXAnKSwgJ2RlZmF1bHQga2V5IHByZWZpeCBzaG91bGQgYmUgcHJvcGVydHkgbmFtZScpCiAgICBieXRlY18wIC8vICJ1aW50TWFwIgogICAgYnl0ZWNfMCAvLyAidWludE1hcCIKICAgID09CiAgICBhc3NlcnQgLy8gZGVmYXVsdCBrZXkgcHJlZml4IHNob3VsZCBiZSBwcm9wZXJ0eSBuYW1lCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6NDIKICAgIC8vIGFzc2VydCh0aGlzLnByZWZpeGVkTWFwLmtleVByZWZpeCA9PT0gQnl0ZXMoJ3AvJyksICdleHBsaWNpdCBrZXkgcHJlZml4IHNob3VsZCBtYXRjaCcpCiAgICBieXRlY18xIC8vICJwLyIKICAgIGJ5dGVjXzEgLy8gInAvIgogICAgPT0KICAgIGFzc2VydCAvLyBleHBsaWNpdCBrZXkgcHJlZml4IHNob3VsZCBtYXRjaAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAudGVzdFByZWZpeGVkTWFwKGtleTogYnl0ZXMsIHZhbHVlOiB1aW50NjQpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnRlc3RQcmVmaXhlZE1hcDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo0NQogICAgLy8gdGVzdFByZWZpeGVkTWFwKGtleTogc3RyaW5nLCB2YWx1ZTogdWludDY0KSB7CiAgICBwcm90byAyIDAKICAgIGIgdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjpUZXN0TG9jYWxNYXAudGVzdFByZWZpeGVkTWFwX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo6VGVzdExvY2FsTWFwLnRlc3RQcmVmaXhlZE1hcF9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjkKICAgIC8vIHByZWZpeGVkTWFwID0gTG9jYWxNYXA8c3RyaW5nLCB1aW50NjQ+KHsga2V5UHJlZml4OiAncC8nIH0pCiAgICBieXRlY18xIC8vICJwLyIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6NDYKICAgIC8vIHRoaXMucHJlZml4ZWRNYXAoa2V5LCBUeG4uc2VuZGVyKS52YWx1ZSA9IHZhbHVlCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDEKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjkKICAgIC8vIHByZWZpeGVkTWFwID0gTG9jYWxNYXA8c3RyaW5nLCB1aW50NjQ+KHsga2V5UHJlZml4OiAncC8nIH0pCiAgICBieXRlY18xIC8vICJwLyIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6NDcKICAgIC8vIGFzc2VydCh0aGlzLnByZWZpeGVkTWFwKGtleSwgVHhuLnNlbmRlcikudmFsdWUgPT09IHZhbHVlLCAncHJlZml4ZWQgbWFwIHZhbHVlIHNob3VsZCBtYXRjaCcpCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydCAvLyBwcmVmaXhlZCBtYXAgdmFsdWUgc2hvdWxkIG1hdGNoCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5zZXRBbmRHZXRVaW50VmlhTG9jYWxTdGF0ZShrZXk6IGJ5dGVzLCB2YWx1ZTogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5zZXRBbmRHZXRVaW50VmlhTG9jYWxTdGF0ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo1MAogICAgLy8gc2V0QW5kR2V0VWludFZpYUxvY2FsU3RhdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1aW50NjQpIHsKICAgIHByb3RvIDIgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5zZXRBbmRHZXRVaW50VmlhTG9jYWxTdGF0ZV9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5zZXRBbmRHZXRVaW50VmlhTG9jYWxTdGF0ZV9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2xvY2FsLW1hcC5hbGdvLnRzOjYKICAgIC8vIHVpbnRNYXAgPSBMb2NhbE1hcDxzdHJpbmcsIHVpbnQ2ND4oKQogICAgYnl0ZWNfMCAvLyAidWludE1hcCIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6NTEKICAgIC8vIHRoaXMudWludE1hcChrZXkpKFR4bi5zZW5kZXIpLnZhbHVlID0gdmFsdWUKICAgIHR4biBTZW5kZXIKICAgIHVuY292ZXIgMQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6NgogICAgLy8gdWludE1hcCA9IExvY2FsTWFwPHN0cmluZywgdWludDY0PigpCiAgICBieXRlY18wIC8vICJ1aW50TWFwIgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9sb2NhbC1tYXAuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KHRoaXMudWludE1hcChrZXkpKFR4bi5zZW5kZXIpLnZhbHVlID09PSB2YWx1ZSwgJ3VpbnQgdmFsdWUgdmlhIExvY2FsU3RhdGUgc2hvdWxkIG1hdGNoJykKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIHVpbnQgdmFsdWUgdmlhIExvY2FsU3RhdGUgc2hvdWxkIG1hdGNoCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvbG9jYWwtbWFwLmFsZ28udHM6OlRlc3RMb2NhbE1hcC5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICBiIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZV9ibG9ja0AwCgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGVfYmxvY2tAMDoKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBiIG1haW5fYmxvY2tAMAoKbWFpbl9ibG9ja0AwOgogICAgcHVzaGludCAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CyAEAAECCCYEB3VpbnRNYXACcC8IYnl0ZXNNYXAJc3RyaW5nTWFwQgAAQgAAMRsiE0EAuEIAADYaAIAEKTFNlU8BjgEAlkIAADEZIhJEMRgiE0EAhEIAADYaAIAEARJLc4AErsRBuIAEotIDkoAEe8EmnYAEfUSsloAEN2Sx7YAEs2y+KoAE3s6WBU8IjggANAAuACgAIgAcABYAEAAKQgAAQgAAQgAAAIgBQkL/84gBGUL/7YgBC0L/54gA2kL/4YgAukL/24gAiEL/1YgAVkL/z4gALUL/yUL/yTEZIxIxGCITEESIABJC/10xGSISMRgiEhBEiAIQI0NCAACIARAjQ0IAADYaAUkiWSMLJAhLARUSRFcCADYaAkkVJRJEF4gA8SNDQgAANhoBSSJZIwskCEsBFRJEVwIANhoCSSJZIwskCEsBFRJEVwIAiADmI0NCAAA2GgFJIlkjCyQISwEVEkRXAgA2GgJJIlkjCyQISwEVEkRXAgCIANsjQ0IAADYaAUkiWSMLJAhLARUSRFcCAIgA4iNDQgAANhoBSSJZIwskCEsBFRJEVwIAiAD4gAEAIk8CVIAEFR98dU8BULAjQ0IAAIgA8iNDQgAANhoBSSJZIwskCEsBFRJEVwIANhoCSRUlEkQXiADbI0NCAAA2GgFJIlkjCyQISwEVEkRXAgA2GgJJFSUSRBeIANkjQ0IAAImKAgBCAAAoi/5QMQBPAYv/ZiiL/lAxACJPAmNEi/8SRImKAgBCAAAqi/5QMQBPAYv/ZiqL/lAxACJPAmNEi/8SRImKAgBCAAAri/5QMQBPAYv/ZiuL/lAxACJPAmNEi/8SRImKAQBCAAAoi/9QMQBPAYF7ZiiL/1AxACJPAmNEMQAoi/9QaCiL/1AxACJPAmMURImKAQFCAAAoi/9QMQAiTwJjTwGJQgAAKCgSRCkpEkSJigIAQgAAKYv+UDEATwGL/2Ypi/5QMQAiTwJjRIv/EkSJigIAQgAAKIv+UDEATwGL/2Yoi/5QMQAiTwJjRIv/EkSJQgAAiQ==", "clear": "C0IAAIEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 10, "patch": 0 } }, "events": [], "templateVariables": {} }