{ "name": "ValidationContract", "structs": {}, "methods": [ { "name": "validate_uint64", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_uint8", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_uint512", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_ufixed64", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_uint8_arr", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_uint8_arr3", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_bool", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_byte", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_string", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_bytes", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_address", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_account", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_bool_arr", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_bool_arr3", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_static_tuple", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_dynamic_tuple", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_static_struct", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_dynamic_struct", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_static_struct_arr", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_static_struct_arr3", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_dynamic_struct_arr", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_dynamic_struct_arr3", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_dynamic_struct_with_a_bool", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_native_dynamic_struct_imm_arr", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_native_dynamic_struct_imm_arr3", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "decode_uint64_with_validate", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "decode_uint64_without_validate", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_native_static_struct", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_native_dynamic_struct", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_native_static_struct_arr", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_native_static_struct_arr3", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_native_dynamic_struct_arr", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "validate_native_dynamic_struct_arr3", "args": [ { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 1 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 629, 701, 821, 897, 1114, 1190 ], "errorMessage": "invalid array encoding" }, { "pc": [ 329, 383, 400, 443, 506, 550, 566, 599, 656, 728, 770, 791, 848, 924, 947, 970, 1023, 1043, 1084, 1141, 1217 ], "errorMessage": "invalid array length header" }, { "pc": [ 432 ], "errorMessage": "invalid number of bytes for account" }, { "pc": [ 360 ], "errorMessage": "invalid number of bytes for arc4.bool" }, { "pc": [ 455 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 335, 389, 406, 954, 976 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 673 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 865 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 574 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 1158 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 1051 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 467 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 419 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 348 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 743 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 939 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 587 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 1232 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 1068 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 511 ], "errorMessage": "invalid number of bytes for arc4.tuple>" }, { "pc": [ 479 ], "errorMessage": "invalid number of bytes for arc4.tuple" }, { "pc": [ 318 ], "errorMessage": "invalid number of bytes for arc4.ufixed64x2" }, { "pc": [ 305 ], "errorMessage": "invalid number of bytes for arc4.uint512" }, { "pc": [ 280 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 292, 372 ], "errorMessage": "invalid number of bytes for arc4.uint8" }, { "pc": [ 555 ], "errorMessage": "invalid number of bytes for test_cases.arc4_validation.contract.ARC4DynamicStruct" }, { "pc": [ 523 ], "errorMessage": "invalid number of bytes for test_cases.arc4_validation.contract.ARC4StaticStruct" }, { "pc": [ 1028 ], "errorMessage": "invalid number of bytes for test_cases.arc4_validation.contract.NativeDynamicStruct" }, { "pc": [ 992 ], "errorMessage": "invalid number of bytes for test_cases.arc4_validation.contract.NativeStaticStruct" }, { "pc": [ 775 ], "errorMessage": "invalid number of bytes for test_cases.arc4_validation.contract.WithABool" }, { "pc": [ 962 ], "errorMessage": "invalid number of bytes for uint64" }, { "pc": [ 762 ], "errorMessage": "invalid tail pointer at index 1 of (uint8,(len+uint8[]),bool1)" }, { "pc": [ 498, 542, 652, 724, 844, 920, 1015, 1137, 1213 ], "errorMessage": "invalid tail pointer at index 2 of (uint64,uint8,(len+utf8[]))" }, { "pc": [ 637, 829, 1122 ], "errorMessage": "invalid tail pointer for (len+(uint64,uint8,(len+utf8[]))[])" }, { "pc": [ 709, 905, 1198 ], "errorMessage": "invalid tail pointer for (uint64,uint8,(len+utf8[]))[3]" }, { "pc": [ 493, 537, 647, 719, 757, 839, 915, 1010, 1132, 1208 ], "errorMessage": "invalid tuple encoding" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMiA5CiAgICBieXRlY2Jsb2NrICJ2IgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjU4CiAgICAvLyBjbGFzcyBWYWxpZGF0aW9uQ29udHJhY3QoQVJDNENvbnRyYWN0LCBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoZ2xvYmFsX2J5dGVzPTEpKToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDQwCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHg1NTdiOGZkZiAweDYxOTdiYmIxIDB4YTUxY2Y5NDEgMHg4ZWNlZTkwZiAweDQyZWJmNzFjIDB4OTZmYTUwNDAgMHgwNjA0Y2YxYiAweDBmZDE2ZDk4IDB4MGU5N2Y4YjQgMHgzZjY4YjdkMSAweDE3NWJhNWFlIDB4ZWQ0OWJiY2EgMHgwMmQ1NmFmYyAweDFjNDcwZGMwIDB4MjQ4ZjY5NjAgMHhmMDBjNDQ5YSAweGQyZWU0MzUxIDB4NWY5ZTEzZmEgMHgzNGQwY2VhZiAweDhhY2ZlOTRkIDB4MDA0YzgyMzUgMHg0MmVhN2M4MSAweDk1NzliMWRhIDB4NjY3Njc5YTkgMHgzZmRiOTQ2OCAweDRhOTU4NWYwIDB4ZmJlNTljNjcgMHhjMjIxZGE2YiAweDU2NmQ4YWI1IDB4ZWJkMzY3NzggMHg3NjkwZmU2YiAweGY3MjFlN2U4IDB4N2M5MGY2ZTIgLy8gbWV0aG9kICJ2YWxpZGF0ZV91aW50NjQoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInZhbGlkYXRlX3VpbnQ4KGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV91aW50NTEyKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV91Zml4ZWQ2NChieXRlW10pdm9pZCIsIG1ldGhvZCAidmFsaWRhdGVfdWludDhfYXJyKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV91aW50OF9hcnIzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9ib29sKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9ieXRlKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9zdHJpbmcoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInZhbGlkYXRlX2J5dGVzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9hZGRyZXNzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9hY2NvdW50KGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9ib29sX2FycihieXRlW10pdm9pZCIsIG1ldGhvZCAidmFsaWRhdGVfYm9vbF9hcnIzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9zdGF0aWNfdHVwbGUoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInZhbGlkYXRlX2R5bmFtaWNfdHVwbGUoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInZhbGlkYXRlX3N0YXRpY19zdHJ1Y3QoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInZhbGlkYXRlX2R5bmFtaWNfc3RydWN0KGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9zdGF0aWNfc3RydWN0X2FycihieXRlW10pdm9pZCIsIG1ldGhvZCAidmFsaWRhdGVfc3RhdGljX3N0cnVjdF9hcnIzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9keW5hbWljX3N0cnVjdF9hcnIoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInZhbGlkYXRlX2R5bmFtaWNfc3RydWN0X2FycjMoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInZhbGlkYXRlX2R5bmFtaWNfc3RydWN0X3dpdGhfYV9ib29sKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9uYXRpdmVfZHluYW1pY19zdHJ1Y3RfaW1tX2FycihieXRlW10pdm9pZCIsIG1ldGhvZCAidmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2ltbV9hcnIzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJkZWNvZGVfdWludDY0X3dpdGhfdmFsaWRhdGUoYnl0ZVtdKXZvaWQiLCBtZXRob2QgImRlY29kZV91aW50NjRfd2l0aG91dF92YWxpZGF0ZShieXRlW10pdm9pZCIsIG1ldGhvZCAidmFsaWRhdGVfbmF0aXZlX3N0YXRpY19zdHJ1Y3QoYnl0ZVtdKXZvaWQiLCBtZXRob2QgInZhbGlkYXRlX25hdGl2ZV9keW5hbWljX3N0cnVjdChieXRlW10pdm9pZCIsIG1ldGhvZCAidmFsaWRhdGVfbmF0aXZlX3N0YXRpY19zdHJ1Y3RfYXJyKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9uYXRpdmVfc3RhdGljX3N0cnVjdF9hcnIzKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9uYXRpdmVfZHluYW1pY19zdHJ1Y3RfYXJyKGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJ2YWxpZGF0ZV9uYXRpdmVfZHluYW1pY19zdHJ1Y3RfYXJyMyhieXRlW10pdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHZhbGlkYXRlX3VpbnQ2NCB2YWxpZGF0ZV91aW50OCB2YWxpZGF0ZV91aW50NTEyIHZhbGlkYXRlX3VmaXhlZDY0IHZhbGlkYXRlX3VpbnQ4X2FyciB2YWxpZGF0ZV91aW50OF9hcnIzIHZhbGlkYXRlX2Jvb2wgdmFsaWRhdGVfYnl0ZSB2YWxpZGF0ZV9zdHJpbmcgdmFsaWRhdGVfYnl0ZXMgdmFsaWRhdGVfYWRkcmVzcyB2YWxpZGF0ZV9hY2NvdW50IHZhbGlkYXRlX2Jvb2xfYXJyIHZhbGlkYXRlX2Jvb2xfYXJyMyB2YWxpZGF0ZV9zdGF0aWNfdHVwbGUgdmFsaWRhdGVfZHluYW1pY190dXBsZSB2YWxpZGF0ZV9zdGF0aWNfc3RydWN0IHZhbGlkYXRlX2R5bmFtaWNfc3RydWN0IHZhbGlkYXRlX3N0YXRpY19zdHJ1Y3RfYXJyIHZhbGlkYXRlX3N0YXRpY19zdHJ1Y3RfYXJyMyB2YWxpZGF0ZV9keW5hbWljX3N0cnVjdF9hcnIgdmFsaWRhdGVfZHluYW1pY19zdHJ1Y3RfYXJyMyB2YWxpZGF0ZV9keW5hbWljX3N0cnVjdF93aXRoX2FfYm9vbCB2YWxpZGF0ZV9uYXRpdmVfZHluYW1pY19zdHJ1Y3RfaW1tX2FyciB2YWxpZGF0ZV9uYXRpdmVfZHluYW1pY19zdHJ1Y3RfaW1tX2FycjMgZGVjb2RlX3VpbnQ2NF93aXRoX3ZhbGlkYXRlIGRlY29kZV91aW50NjRfd2l0aG91dF92YWxpZGF0ZSB2YWxpZGF0ZV9uYXRpdmVfc3RhdGljX3N0cnVjdCB2YWxpZGF0ZV9uYXRpdmVfZHluYW1pY19zdHJ1Y3QgdmFsaWRhdGVfbmF0aXZlX3N0YXRpY19zdHJ1Y3RfYXJyIHZhbGlkYXRlX25hdGl2ZV9zdGF0aWNfc3RydWN0X2FycjMgdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2FyciB2YWxpZGF0ZV9uYXRpdmVfZHluYW1pY19zdHJ1Y3RfYXJyMwogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDQwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfdWludDY0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfdWludDY0OgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjYxCiAgICAvLyBhcmM0LlVJbnQ2NC5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weTo1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LlZhbGlkYXRpb25Db250cmFjdC52YWxpZGF0ZV91aW50OFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX3VpbnQ4OgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjY1CiAgICAvLyBhcmM0LlVJbnQ4LmZyb21fYnl0ZXModmFsdWUpLnZhbGlkYXRlKCkKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weTo2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LlZhbGlkYXRpb25Db250cmFjdC52YWxpZGF0ZV91aW50NTEyW3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfdWludDUxMjoKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weTo2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weTo2OQogICAgLy8gYXJjNC5VSW50NTEyLmZyb21fYnl0ZXModmFsdWUpLnZhbGlkYXRlKCkKICAgIGxlbgogICAgcHVzaGludCA2NAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NTEyCiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6NjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfdWZpeGVkNjRbcm91dGluZ10oKSAtPiB2b2lkOgp2YWxpZGF0ZV91Zml4ZWQ2NDoKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weTo3MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weTo3MwogICAgLy8gYXJjNC5VRml4ZWROeE1bdHlwaW5nLkxpdGVyYWxbNjRdLCB0eXBpbmcuTGl0ZXJhbFsyXV0uZnJvbV9ieXRlcyh2YWx1ZSkudmFsaWRhdGUoKQogICAgbGVuCiAgICBwdXNoaW50IDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWZpeGVkNjR4MgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuVmFsaWRhdGlvbkNvbnRyYWN0LnZhbGlkYXRlX3VpbnQ4X2Fycltyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX3VpbnQ4X2FycjoKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weTo3NwogICAgLy8gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50OF0uZnJvbV9ieXRlcyh2YWx1ZSkudmFsaWRhdGUoKQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfdWludDhfYXJyM1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX3VpbnQ4X2FycjM6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6NzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6ODEKICAgIC8vIGFyYzQuU3RhdGljQXJyYXlbYXJjNC5VSW50OCwgdHlwaW5nLkxpdGVyYWxbM11dLmZyb21fYnl0ZXModmFsdWUpLnZhbGlkYXRlKCkKICAgIGxlbgogICAgcHVzaGludCAzCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzPgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5Ojc5CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuVmFsaWRhdGlvbkNvbnRyYWN0LnZhbGlkYXRlX2Jvb2xbcm91dGluZ10oKSAtPiB2b2lkOgp2YWxpZGF0ZV9ib29sOgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5Ojg1CiAgICAvLyBhcmM0LkJvb2wuZnJvbV9ieXRlcyh2YWx1ZSkudmFsaWRhdGUoKQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6ODMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfYnl0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX2J5dGU6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6ODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6ODkKICAgIC8vIGFyYzQuQnl0ZS5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6ODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfc3RyaW5nW3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfc3RyaW5nOgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjkzCiAgICAvLyBhcmM0LlN0cmluZy5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weTo5MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LlZhbGlkYXRpb25Db250cmFjdC52YWxpZGF0ZV9ieXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX2J5dGVzOgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5Ojk3CiAgICAvLyBhcmM0LkR5bmFtaWNCeXRlcy5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weTo5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LlZhbGlkYXRpb25Db250cmFjdC52YWxpZGF0ZV9hZGRyZXNzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfYWRkcmVzczoKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weTo5OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxMDEKICAgIC8vIGFyYzQuQWRkcmVzcy5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBsZW4KICAgIHB1c2hpbnQgMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5Ojk5CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuVmFsaWRhdGlvbkNvbnRyYWN0LnZhbGlkYXRlX2FjY291bnRbcm91dGluZ10oKSAtPiB2b2lkOgp2YWxpZGF0ZV9hY2NvdW50OgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxMDUKICAgIC8vIEFjY291bnQuZnJvbV9ieXRlcyh2YWx1ZSkudmFsaWRhdGUoKQogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhY2NvdW50CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuVmFsaWRhdGlvbkNvbnRyYWN0LnZhbGlkYXRlX2Jvb2xfYXJyW3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfYm9vbF9hcnI6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjEwOQogICAgLy8gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5Cb29sXS5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDcKICAgICsKICAgIHB1c2hpbnQgOAogICAgLwogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQuYm9vbD4KICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxMDcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfYm9vbF9hcnIzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfYm9vbF9hcnIzOgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjExMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxMTMKICAgIC8vIGFyYzQuU3RhdGljQXJyYXlbYXJjNC5Cb29sLCB0eXBpbmcuTGl0ZXJhbFszXV0uZnJvbV9ieXRlcyh2YWx1ZSkudmFsaWRhdGUoKQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC5ib29sLCAzPgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjExMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LlZhbGlkYXRpb25Db250cmFjdC52YWxpZGF0ZV9zdGF0aWNfdHVwbGVbcm91dGluZ10oKSAtPiB2b2lkOgp2YWxpZGF0ZV9zdGF0aWNfdHVwbGU6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjExNwogICAgLy8gQVJDNFN0YXRpY1R1cGxlLmZyb21fYnl0ZXModmFsdWUpLnZhbGlkYXRlKCkKICAgIGxlbgogICAgaW50Y18zIC8vIDkKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudHVwbGU8YXJjNC51aW50NjQsYXJjNC51aW50OD4KICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxMTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfZHluYW1pY190dXBsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX2R5bmFtaWNfdHVwbGU6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjEyMQogICAgLy8gQVJDNER5bmFtaWNUdXBsZS5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMyAvLyA5CiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDExCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDIgb2YgKHVpbnQ2NCx1aW50OCwobGVuK3V0ZjhbXSkpCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAxMwogICAgKwogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC50dXBsZTxhcmM0LnVpbnQ2NCxhcmM0LnVpbnQ4LGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4Pj4KICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfc3RhdGljX3N0cnVjdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX3N0YXRpY19zdHJ1Y3Q6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjEyNQogICAgLy8gQVJDNFN0YXRpY1N0cnVjdC5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBsZW4KICAgIGludGNfMyAvLyA5CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5BUkM0U3RhdGljU3RydWN0CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuVmFsaWRhdGlvbkNvbnRyYWN0LnZhbGlkYXRlX2R5bmFtaWNfc3RydWN0W3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfZHluYW1pY19zdHJ1Y3Q6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjEyOQogICAgLy8gQVJDNER5bmFtaWNTdHJ1Y3QuZnJvbV9ieXRlcyh2YWx1ZSkudmFsaWRhdGUoKQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOQogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAyIG9mICh1aW50NjQsdWludDgsKGxlbit1dGY4W10pKQogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTMKICAgICsKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LkFSQzREeW5hbWljU3RydWN0CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuVmFsaWRhdGlvbkNvbnRyYWN0LnZhbGlkYXRlX3N0YXRpY19zdHJ1Y3RfYXJyW3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfc3RhdGljX3N0cnVjdF9hcnI6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjEzMwogICAgLy8gYXJjNC5EeW5hbWljQXJyYXlbQVJDNFN0YXRpY1N0cnVjdF0uZnJvbV9ieXRlcyh2YWx1ZSkudmFsaWRhdGUoKQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18zIC8vIDkKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5BUkM0U3RhdGljU3RydWN0PgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjEzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LlZhbGlkYXRpb25Db250cmFjdC52YWxpZGF0ZV9zdGF0aWNfc3RydWN0X2FycjNbcm91dGluZ10oKSAtPiB2b2lkOgp2YWxpZGF0ZV9zdGF0aWNfc3RydWN0X2FycjM6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTM1CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjEzNwogICAgLy8gYXJjNC5TdGF0aWNBcnJheVtBUkM0U3RhdGljU3RydWN0LCB0eXBpbmcuTGl0ZXJhbFszXV0uZnJvbV9ieXRlcyh2YWx1ZSkudmFsaWRhdGUoKQogICAgbGVuCiAgICBwdXNoaW50IDI3CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTx0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5BUkM0U3RhdGljU3RydWN0LCAzPgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjEzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LlZhbGlkYXRpb25Db250cmFjdC52YWxpZGF0ZV9keW5hbWljX3N0cnVjdF9hcnJbcm91dGluZ10oKSAtPiB2b2lkOgp2YWxpZGF0ZV9keW5hbWljX3N0cnVjdF9hcnI6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTQxCiAgICAvLyBhcmM0LkR5bmFtaWNBcnJheVtBUkM0RHluYW1pY1N0cnVjdF0uZnJvbV9ieXRlcyh2YWx1ZSkudmFsaWRhdGUoKQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgY292ZXIgMgogICAgbGVuCiAgICBjb3ZlciAyCiAgICBleHRyYWN0IDQgMAogICAgaW50Y18xIC8vIDAKCnZhbGlkYXRlX2R5bmFtaWNfc3RydWN0X2Fycl9mb3JfaGVhZGVyQDI6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTQxCiAgICAvLyBhcmM0LkR5bmFtaWNBcnJheVtBUkM0RHluYW1pY1N0cnVjdF0uZnJvbV9ieXRlcyh2YWx1ZSkudmFsaWRhdGUoKQogICAgZHVwCiAgICBkaWcgNQogICAgPAogICAgYnogdmFsaWRhdGVfZHluYW1pY19zdHJ1Y3RfYXJyX2FmdGVyX2ZvckA1CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGVuY29kaW5nCiAgICBkdXAKICAgIHVuY292ZXIgNQogICAgZHVwCiAgICBjb3ZlciA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGZvciAobGVuKyh1aW50NjQsdWludDgsKGxlbit1dGY4W10pKVtdKQogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOQogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAyIG9mICh1aW50NjQsdWludDgsKGxlbit1dGY4W10pKQogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTMKICAgICsKICAgICsKICAgIGNvdmVyIDIKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBiIHZhbGlkYXRlX2R5bmFtaWNfc3RydWN0X2Fycl9mb3JfaGVhZGVyQDIKCnZhbGlkYXRlX2R5bmFtaWNfc3RydWN0X2Fycl9hZnRlcl9mb3JANToKICAgIHBvcG4gMgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE0MQogICAgLy8gYXJjNC5EeW5hbWljQXJyYXlbQVJDNER5bmFtaWNTdHJ1Y3RdLmZyb21fYnl0ZXModmFsdWUpLnZhbGlkYXRlKCkKICAgIGludGNfMiAvLyAyCiAgICArCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuQVJDNER5bmFtaWNTdHJ1Y3Q+CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuVmFsaWRhdGlvbkNvbnRyYWN0LnZhbGlkYXRlX2R5bmFtaWNfc3RydWN0X2FycjNbcm91dGluZ10oKSAtPiB2b2lkOgp2YWxpZGF0ZV9keW5hbWljX3N0cnVjdF9hcnIzOgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNDUKICAgIC8vIGFyYzQuU3RhdGljQXJyYXlbQVJDNER5bmFtaWNTdHJ1Y3QsIHR5cGluZy5MaXRlcmFsWzNdXS5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBwdXNoaW50IDYKICAgIHN3YXAKICAgIGludGNfMSAvLyAwCgp2YWxpZGF0ZV9keW5hbWljX3N0cnVjdF9hcnIzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNDUKICAgIC8vIGFyYzQuU3RhdGljQXJyYXlbQVJDNER5bmFtaWNTdHJ1Y3QsIHR5cGluZy5MaXRlcmFsWzNdXS5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPAogICAgYnogdmFsaWRhdGVfZHluYW1pY19zdHJ1Y3RfYXJyM19hZnRlcl9mb3JANQogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBlbmNvZGluZwogICAgZHVwCiAgICB1bmNvdmVyIDUKICAgIGR1cAogICAgY292ZXIgNAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBmb3IgKHVpbnQ2NCx1aW50OCwobGVuK3V0ZjhbXSkpWzNdCiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMyAvLyA5CiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDExCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDIgb2YgKHVpbnQ2NCx1aW50OCwobGVuK3V0ZjhbXSkpCiAgICBzd2FwCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAxMwogICAgKwogICAgKwogICAgY292ZXIgMgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGIgdmFsaWRhdGVfZHluYW1pY19zdHJ1Y3RfYXJyM19mb3JfaGVhZGVyQDIKCnZhbGlkYXRlX2R5bmFtaWNfc3RydWN0X2FycjNfYWZ0ZXJfZm9yQDU6CiAgICBwb3AKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNDUKICAgIC8vIGFyYzQuU3RhdGljQXJyYXlbQVJDNER5bmFtaWNTdHJ1Y3QsIHR5cGluZy5MaXRlcmFsWzNdXS5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LkFSQzREeW5hbWljU3RydWN0LCAzPgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LlZhbGlkYXRpb25Db250cmFjdC52YWxpZGF0ZV9keW5hbWljX3N0cnVjdF93aXRoX2FfYm9vbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX2R5bmFtaWNfc3RydWN0X3dpdGhfYV9ib29sOgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNDkKICAgIC8vIFdpdGhBQm9vbC5mcm9tX2J5dGVzKHZhbHVlKS52YWxpZGF0ZSgpCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMCAvLyAxCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgYXQgaW5kZXggMSBvZiAodWludDgsKGxlbit1aW50OFtdKSxib29sMSkKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDYKICAgICsKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LldpdGhBQm9vbAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE0NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LlZhbGlkYXRpb25Db250cmFjdC52YWxpZGF0ZV9uYXRpdmVfZHluYW1pY19zdHJ1Y3RfaW1tX2Fycltyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX25hdGl2ZV9keW5hbWljX3N0cnVjdF9pbW1fYXJyOgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE1MwogICAgLy8gYiA9IEdsb2JhbFN0YXRlKEJ5dGVzLCBrZXk9InYiKQogICAgYnl0ZWNfMCAvLyAidiIKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNTQKICAgIC8vIGIudmFsdWUgPSB2YWx1ZQogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTU2CiAgICAvLyBuLnZhbHVlLnZhbGlkYXRlKCkKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGNvdmVyIDIKICAgIGxlbgogICAgY292ZXIgMgogICAgZXh0cmFjdCA0IDAKICAgIGludGNfMSAvLyAwCgp2YWxpZGF0ZV9uYXRpdmVfZHluYW1pY19zdHJ1Y3RfaW1tX2Fycl9mb3JfaGVhZGVyQDI6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTU2CiAgICAvLyBuLnZhbHVlLnZhbGlkYXRlKCkKICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGJ6IHZhbGlkYXRlX25hdGl2ZV9keW5hbWljX3N0cnVjdF9pbW1fYXJyX2FmdGVyX2ZvckA1CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGVuY29kaW5nCiAgICBkdXAKICAgIHVuY292ZXIgNQogICAgZHVwCiAgICBjb3ZlciA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGZvciAobGVuKyh1aW50NjQsdWludDgsKGxlbit1dGY4W10pKVtdKQogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOQogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAyIG9mICh1aW50NjQsdWludDgsKGxlbit1dGY4W10pKQogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTMKICAgICsKICAgICsKICAgIGNvdmVyIDIKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBiIHZhbGlkYXRlX25hdGl2ZV9keW5hbWljX3N0cnVjdF9pbW1fYXJyX2Zvcl9oZWFkZXJAMgoKdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2ltbV9hcnJfYWZ0ZXJfZm9yQDU6CiAgICBwb3BuIDIKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNTYKICAgIC8vIG4udmFsdWUudmFsaWRhdGUoKQogICAgaW50Y18yIC8vIDIKICAgICsKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5BUkM0RnJvemVuRHluYW1pY1N0cnVjdD4KICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2ltbV9hcnIzW3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2ltbV9hcnIzOgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE1OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE2MAogICAgLy8gYiA9IEdsb2JhbFN0YXRlKEJ5dGVzLCBrZXk9InYiKQogICAgYnl0ZWNfMCAvLyAidiIKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNjEKICAgIC8vIGIudmFsdWUgPSB2YWx1ZQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNjMKICAgIC8vIG4udmFsdWUudmFsaWRhdGUoKQogICAgcHVzaGludCA2CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMAoKdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2ltbV9hcnIzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNjMKICAgIC8vIG4udmFsdWUudmFsaWRhdGUoKQogICAgZHVwCiAgICBwdXNoaW50IDMKICAgIDwKICAgIGJ6IHZhbGlkYXRlX25hdGl2ZV9keW5hbWljX3N0cnVjdF9pbW1fYXJyM19hZnRlcl9mb3JANQogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBlbmNvZGluZwogICAgZHVwCiAgICB1bmNvdmVyIDUKICAgIGR1cAogICAgY292ZXIgNAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBmb3IgKHVpbnQ2NCx1aW50OCwobGVuK3V0ZjhbXSkpWzNdCiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMyAvLyA5CiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDExCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDIgb2YgKHVpbnQ2NCx1aW50OCwobGVuK3V0ZjhbXSkpCiAgICBzd2FwCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAxMwogICAgKwogICAgKwogICAgY292ZXIgMgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGIgdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2ltbV9hcnIzX2Zvcl9oZWFkZXJAMgoKdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2ltbV9hcnIzX2FmdGVyX2ZvckA1OgogICAgcG9wCiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTYzCiAgICAvLyBuLnZhbHVlLnZhbGlkYXRlKCkKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8dGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuQVJDNEZyb3plbkR5bmFtaWNTdHJ1Y3QsIDM+CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuVmFsaWRhdGlvbkNvbnRyYWN0LmRlY29kZV91aW50NjRfd2l0aF92YWxpZGF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlY29kZV91aW50NjRfd2l0aF92YWxpZGF0ZToKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE2NwogICAgLy8gYXJjNC5kZWNvZGUoVUludDY0LCB2YWx1ZSkKICAgIGxlbgogICAgcHVzaGludCA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuVmFsaWRhdGlvbkNvbnRyYWN0LmRlY29kZV91aW50NjRfd2l0aG91dF92YWxpZGF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlY29kZV91aW50NjRfd2l0aG91dF92YWxpZGF0ZToKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfbmF0aXZlX3N0YXRpY19zdHJ1Y3Rbcm91dGluZ10oKSAtPiB2b2lkOgp2YWxpZGF0ZV9uYXRpdmVfc3RhdGljX3N0cnVjdDoKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTc1CiAgICAvLyBiID0gR2xvYmFsU3RhdGUoQnl0ZXMsIGtleT0idiIpCiAgICBieXRlY18wIC8vICJ2IgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gYi52YWx1ZSA9IHZhbHVlCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxNzgKICAgIC8vIG4udmFsdWUudmFsaWRhdGUoKQogICAgbGVuCiAgICBpbnRjXzMgLy8gOQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuTmF0aXZlU3RhdGljU3RydWN0CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTczCiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuVmFsaWRhdGlvbkNvbnRyYWN0LnZhbGlkYXRlX25hdGl2ZV9keW5hbWljX3N0cnVjdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX25hdGl2ZV9keW5hbWljX3N0cnVjdDoKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTgyCiAgICAvLyBiID0gR2xvYmFsU3RhdGUoQnl0ZXMsIGtleT0idiIpCiAgICBieXRlY18wIC8vICJ2IgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE4MwogICAgLy8gYi52YWx1ZSA9IHZhbHVlCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxODUKICAgIC8vIG4udmFsdWUudmFsaWRhdGUoKQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOQogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAyIG9mICh1aW50NjQsdWludDgsKGxlbit1dGY4W10pKQogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTMKICAgICsKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0Lk5hdGl2ZUR5bmFtaWNTdHJ1Y3QKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfbmF0aXZlX3N0YXRpY19zdHJ1Y3RfYXJyW3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfbmF0aXZlX3N0YXRpY19zdHJ1Y3RfYXJyOgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE4NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxODkKICAgIC8vIGIgPSBHbG9iYWxTdGF0ZShCeXRlcywga2V5PSJ2IikKICAgIGJ5dGVjXzAgLy8gInYiCiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTkwCiAgICAvLyBiLnZhbHVlID0gdmFsdWUKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE5MgogICAgLy8gbi52YWx1ZS52YWxpZGF0ZSgpCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gOQogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0Lk5hdGl2ZVN0YXRpY1N0cnVjdD4KICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5WYWxpZGF0aW9uQ29udHJhY3QudmFsaWRhdGVfbmF0aXZlX3N0YXRpY19zdHJ1Y3RfYXJyM1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX25hdGl2ZV9zdGF0aWNfc3RydWN0X2FycjM6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QodmFsaWRhdGVfZW5jb2Rpbmc9InVuc2FmZV9kaXNhYmxlZCIpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE5NgogICAgLy8gYiA9IEdsb2JhbFN0YXRlKEJ5dGVzLCBrZXk9InYiKQogICAgYnl0ZWNfMCAvLyAidiIKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToxOTcKICAgIC8vIGIudmFsdWUgPSB2YWx1ZQogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MTk5CiAgICAvLyBuLnZhbHVlLnZhbGlkYXRlKCkKICAgIGxlbgogICAgcHVzaGludCAyNwogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8dGVzdF9jYXNlcy5hcmM0X3ZhbGlkYXRpb24uY29udHJhY3QuTmF0aXZlU3RhdGljU3RydWN0LCAzPgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjE5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LlZhbGlkYXRpb25Db250cmFjdC52YWxpZGF0ZV9uYXRpdmVfZHluYW1pY19zdHJ1Y3RfYXJyW3JvdXRpbmddKCkgLT4gdm9pZDoKdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2FycjoKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToyMDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh2YWxpZGF0ZV9lbmNvZGluZz0idW5zYWZlX2Rpc2FibGVkIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToyMDMKICAgIC8vIGIgPSBHbG9iYWxTdGF0ZShCeXRlcywga2V5PSJ2IikKICAgIGJ5dGVjXzAgLy8gInYiCiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MjA0CiAgICAvLyBiLnZhbHVlID0gdmFsdWUKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjIwNgogICAgLy8gbi52YWx1ZS52YWxpZGF0ZSgpCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIGNvdmVyIDIKICAgIGV4dHJhY3QgNCAwCiAgICBpbnRjXzEgLy8gMAoKdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2Fycl9mb3JfaGVhZGVyQDI6CiAgICAvLyBhcmM0X3ZhbGlkYXRpb24vY29udHJhY3QucHk6MjA2CiAgICAvLyBuLnZhbHVlLnZhbGlkYXRlKCkKICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGJ6IHZhbGlkYXRlX25hdGl2ZV9keW5hbWljX3N0cnVjdF9hcnJfYWZ0ZXJfZm9yQDUKICAgIGR1cAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAyCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgZW5jb2RpbmcKICAgIGR1cAogICAgdW5jb3ZlciA1CiAgICBkdXAKICAgIGNvdmVyIDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgZm9yIChsZW4rKHVpbnQ2NCx1aW50OCwobGVuK3V0ZjhbXSkpW10pCiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMyAvLyA5CiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDExCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDIgb2YgKHVpbnQ2NCx1aW50OCwobGVuK3V0ZjhbXSkpCiAgICBzd2FwCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAxMwogICAgKwogICAgKwogICAgY292ZXIgMgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGIgdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2Fycl9mb3JfaGVhZGVyQDIKCnZhbGlkYXRlX25hdGl2ZV9keW5hbWljX3N0cnVjdF9hcnJfYWZ0ZXJfZm9yQDU6CiAgICBwb3BuIDIKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToyMDYKICAgIC8vIG4udmFsdWUudmFsaWRhdGUoKQogICAgaW50Y18yIC8vIDIKICAgICsKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5OYXRpdmVEeW5hbWljU3RydWN0PgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjIwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJjNF92YWxpZGF0aW9uLmNvbnRyYWN0LlZhbGlkYXRpb25Db250cmFjdC52YWxpZGF0ZV9uYXRpdmVfZHluYW1pY19zdHJ1Y3RfYXJyM1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnZhbGlkYXRlX25hdGl2ZV9keW5hbWljX3N0cnVjdF9hcnIzOgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjIwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjIxMAogICAgLy8gYiA9IEdsb2JhbFN0YXRlKEJ5dGVzLCBrZXk9InYiKQogICAgYnl0ZWNfMCAvLyAidiIKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToyMTEKICAgIC8vIGIudmFsdWUgPSB2YWx1ZQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToyMTMKICAgIC8vIG4udmFsdWUudmFsaWRhdGUoKQogICAgcHVzaGludCA2CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMAoKdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2FycjNfZm9yX2hlYWRlckAyOgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjIxMwogICAgLy8gbi52YWx1ZS52YWxpZGF0ZSgpCiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPAogICAgYnogdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2FycjNfYWZ0ZXJfZm9yQDUKICAgIGR1cAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAyCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgZW5jb2RpbmcKICAgIGR1cAogICAgdW5jb3ZlciA1CiAgICBkdXAKICAgIGNvdmVyIDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgZm9yICh1aW50NjQsdWludDgsKGxlbit1dGY4W10pKVszXQogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOQogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAyIG9mICh1aW50NjQsdWludDgsKGxlbit1dGY4W10pKQogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTMKICAgICsKICAgICsKICAgIGNvdmVyIDIKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBiIHZhbGlkYXRlX25hdGl2ZV9keW5hbWljX3N0cnVjdF9hcnIzX2Zvcl9oZWFkZXJAMgoKdmFsaWRhdGVfbmF0aXZlX2R5bmFtaWNfc3RydWN0X2FycjNfYWZ0ZXJfZm9yQDU6CiAgICBwb3AKICAgIC8vIGFyYzRfdmFsaWRhdGlvbi9jb250cmFjdC5weToyMTMKICAgIC8vIG4udmFsdWUudmFsaWRhdGUoKQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTx0ZXN0X2Nhc2VzLmFyYzRfdmFsaWRhdGlvbi5jb250cmFjdC5OYXRpdmVEeW5hbWljU3RydWN0LCAzPgogICAgLy8gYXJjNF92YWxpZGF0aW9uL2NvbnRyYWN0LnB5OjIwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHZhbGlkYXRlX2VuY29kaW5nPSJ1bnNhZmVfZGlzYWJsZWQiKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAQACCSYBAXYxG0EA9jEZFEQxGESCIQRVe4/fBGGXu7EEpRz5QQSOzukPBELr9xwElvpQQAQGBM8bBA/RbZgEDpf4tAQ/aLfRBBdbpa4E7Um7ygQC1Wr8BBxHDcAEJI9pYATwDESaBNLuQ1EEX54T+gQ00M6vBIrP6U0EAEyCNQRC6nyBBJV5sdoEZnZ5qQQ/25RoBEqVhfAE++WcZwTCIdprBFZtirUE69NneAR2kP5rBPch5+gEfJD24jYaAI4hAAkAFgAiAC8APABNAFoAZgByAIMAlAChAK4AxQDRAN0A/QEJASkBPAFJAZ8B5QIFAl8CqQLAAs4C3gMCAxkDKgOEADEZFDEYFBBDNhoBVwIAFYEIEkQiQzYaAVcCABUiEkQiQzYaAVcCABWBQBJEIkM2GgFXAgAVgQgSRCJDNhoBVwIASSNZJAhMFRJEIkM2GgFXAgAVgQMSRCJDNhoBVwIAFSISRCJDNhoBVwIAFSISRCJDNhoBVwIASSNZJAhMFRJEIkM2GgFXAgBJI1kkCEwVEkQiQzYaAVcCABWBIBJEIkM2GgFXAgAVgSASRCJDNhoBVwIASSNZgQcIgQgKJAhMFRJEIkM2GgFXAgAVIhJEIkM2GgFXAgAVJRJEIkM2GgFXAgBJFUsBJVlJgQsSRE8CTEsCUiNZgQ0IEkQiQzYaAVcCABUlEkQiQzYaAVcCAEkVSwElWUmBCxJETwJMSwJSI1mBDQgSRCJDNhoBVwIASSNZJQskCEwVEkQiQzYaAVcCABWBGxJEIkM2GgFJVwIASSNZSU4DJAtOAhVOAlcEACNJSwUMQQAvSSQLSwJJTwJZSU8FSU4EEkRLARVSSRVLASVZSYELEkRMUiNZgQ0ICE4CIghC/8pGAiQIEkQiQzYaAVcCAIEGTCNJgQMMQQAvSSQLSwJJTwJZSU8FSU4EEkRLARVSSRVLASVZSYELEkRMUiNZgQ0ICE4CIghC/8pIFRJEIkM2GgFXAgBJFUsBIllJgQQSRE8CTEsCUiNZgQYIEkQiQzYaAUlXAgAoSwFnSSNZSU4DJAtOAhVOAlcEACNJSwUMQQAvSSQLSwJJTwJZSU8FSU4EEkRLARVSSRVLASVZSYELEkRMUiNZgQ0ICE4CIghC/8pGAiQIEkQiQzYaAVcCAEkoTGeBBkwjSYEDDEEAL0kkC0sCSU8CWUlPBUlOBBJESwEVUkkVSwElWUmBCxJETFIjWYENCAhOAiIIQv/KSBUSRCJDNhoBSSNZJAhLARUSRFcCABWBCBJEIkM2GgFJI1kkCEwVEkQiQzYaAVcCAChLAWcVJRJEIkM2GgFXAgAoSwFnSRVLASVZSYELEkRPAkxLAlIjWYENCBJEIkM2GgFXAgAoSwFnSSNZJQskCEwVEkQiQzYaAVcCAChLAWcVgRsSRCJDNhoBSVcCAChLAWdJI1lJTgMkC04CFU4CVwQAI0lLBQxBAC9JJAtLAklPAllJTwVJTgQSREsBFVJJFUsBJVlJgQsSRExSI1mBDQgITgIiCEL/ykYCJAgSRCJDNhoBVwIASShMZ4EGTCNJgQMMQQAvSSQLSwJJTwJZSU8FSU4EEkRLARVSSRVLASVZSYELEkRMUiNZgQ0ICE4CIghC/8pIFRJEIkM=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [], "templateVariables": {} }