{ "name": "ImmutableArrayContract", "structs": {}, "methods": [ { "name": "test_uint64_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_biguint_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_bool_array", "args": [ { "type": "uint64", "name": "length" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_fixed_size_tuple_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_fixed_size_named_tuple_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_dynamic_sized_tuple_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_dynamic_sized_named_tuple_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_implicit_conversion_log", "args": [ { "type": "uint64[]", "name": "arr" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_implicit_conversion_emit", "args": [ { "type": "uint64[]", "name": "arr" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [ { "name": "emit_test", "args": [ { "type": "uint64[]", "name": "field1" } ] } ], "recommendations": {} }, { "name": "test_nested_array", "args": [ { "type": "uint64", "name": "arr_to_add" }, { "type": "uint64[][]", "name": "arr" } ], "returns": { "type": "uint64[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_bit_packed_tuples", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "sum_uints_and_lengths_and_trues", "args": [ { "type": "uint64[]", "name": "arr1" }, { "type": "bool[]", "name": "arr2" }, { "type": "(uint64,bool,bool)[]", "name": "arr3" }, { "type": "(uint64,string)[]", "name": "arr4" } ], "returns": { "type": "(uint64,uint64,uint64,uint64)" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_uint64_return", "args": [ { "type": "uint64", "name": "append" } ], "returns": { "type": "uint64[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_bool_return", "args": [ { "type": "uint64", "name": "append" } ], "returns": { "type": "bool[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_tuple_return", "args": [ { "type": "uint64", "name": "append" } ], "returns": { "type": "(uint64,bool,bool)[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_dynamic_tuple_return", "args": [ { "type": "uint64", "name": "append" } ], "returns": { "type": "(uint64,string)[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_convert_to_array_and_back", "args": [ { "type": "(uint64,bool,bool)[]", "name": "arr" }, { "type": "uint64", "name": "append" } ], "returns": { "type": "(uint64,bool,bool)[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_concat_with_arc4_tuple", "args": [ { "type": "(uint64,uint64)", "name": "arg" } ], "returns": { "type": "uint64[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_concat_with_native_tuple", "args": [ { "type": "(uint64,uint64)", "name": "arg" } ], "returns": { "type": "uint64[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_dynamic_concat_with_arc4_tuple", "args": [ { "type": "(string,string)", "name": "arg" } ], "returns": { "type": "string[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_dynamic_concat_with_native_tuple", "args": [ { "type": "(string,string)", "name": "arg" } ], "returns": { "type": "string[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_concat_immutable_dynamic", "args": [ { "type": "(uint64,string)[]", "name": "imm1" }, { "type": "(uint64,string)[]", "name": "imm2" } ], "returns": { "type": "(uint64,string)[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_immutable_arc4", "args": [ { "type": "(uint64,uint64)[]", "name": "imm" } ], "returns": { "type": "(uint64,uint64)[]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_imm_fixed_arr", "args": [], "returns": { "type": "(uint64,uint64)[3]" }, "actions": { "create": [], "call": ["NoOp"] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [22, 28], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 11 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "a": { "keyType": "AVMString", "valueType": "uint64[]", "key": "YQ==" }, "g": { "keyType": "AVMString", "valueType": "bool[]", "key": "Zw==" }, "c": { "keyType": "AVMString", "valueType": "(uint64,uint64)[]", "key": "Yw==" }, "d": { "keyType": "AVMString", "valueType": "(uint64,bool,bool)[]", "key": "ZA==" }, "e": { "keyType": "AVMString", "valueType": "(uint64,byte[])[]", "key": "ZQ==" }, "f": { "keyType": "AVMString", "valueType": "(uint64,string)[]", "key": "Zg==" }, "bool2": { "keyType": "AVMString", "valueType": "(bool,bool)[]", "key": "Ym9vbDI=" }, "bool7": { "keyType": "AVMString", "valueType": "(uint64,bool,bool,bool,bool,bool,bool,bool,uint64)[]", "key": "Ym9vbDc=" }, "bool8": { "keyType": "AVMString", "valueType": "(uint64,bool,bool,bool,bool,bool,bool,bool,bool,uint64)[]", "key": "Ym9vbDg=" }, "bool9": { "keyType": "AVMString", "valueType": "(uint64,bool,bool,bool,bool,bool,bool,bool,bool,bool,uint64)[]", "key": "Ym9vbDk=" }, "imm_fixed_arr": { "keyType": "AVMString", "valueType": "(uint64,uint64)[3]", "key": "aW1tX2ZpeGVkX2Fycg==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": ["NoOp"], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [3798], "errorMessage": "check self.imm_fixed_arr exists" }, { "pc": [2109, 2320], "errorMessage": "expected 1, 0" }, { "pc": [2051, 2261], "errorMessage": "expected 1st element to be correct" }, { "pc": [2057, 2270], "errorMessage": "expected 2nd element to be correct" }, { "pc": [2147, 2359], "errorMessage": "expected 4, 3" }, { "pc": [3682], "errorMessage": "expected arrays to be different" }, { "pc": [3716], "errorMessage": "expected arrays to be the same" }, { "pc": [1562], "errorMessage": "expected element 0 to be False" }, { "pc": [1581], "errorMessage": "expected element 1 to be False" }, { "pc": [1599], "errorMessage": "expected element 2 to be True" }, { "pc": [3743], "errorMessage": "expected items on iteration to be the same" }, { "pc": [1625], "errorMessage": "expected last element to be False" }, { "pc": [3629], "errorMessage": "expected non empty array" }, { "pc": [3113], "errorMessage": "expected string length to match index" }, { "pc": [3793], "errorMessage": "expected sum to be 10" }, { "pc": [3766], "errorMessage": "expected sum to be 15" }, { "pc": [ 870, 1176, 1238, 1304, 1362, 1470, 1762, 1824, 3000, 3644, 3701, 3739, 3785 ], "errorMessage": "index access is out of bounds" }, { "pc": [1555, 1574, 1593, 1616], "errorMessage": "index out of bounds" }, { "pc": [ 987, 1029, 1084, 1111, 1152, 1180, 1221, 1284, 1342, 1452, 1539, 1667, 1724, 1786, 1911, 2002, 2070, 2212, 2283, 2479, 2520, 2798, 2807, 2816, 2825, 2893, 2930, 2974, 3055, 3612, 3627 ], "errorMessage": "invalid array length header" }, { "pc": [3483], "errorMessage": "max array length exceeded" }, { "pc": [1322], "errorMessage": "overflow" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMiA4CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHggMHgwMDAwIDB4MDAgMHgwMDAyIDB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgMHgwMDBhIDB4NjI2OTY3NzU2OTZlNzQgMHgxNTFmN2M3NTAwMDQwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMiAweDAwMDIwMDA0MDAwNzAwMDE2MTAwMDE2MiAiaW1tX2ZpeGVkX2FyciIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjkzCiAgICAvLyBjbGFzcyBJbW11dGFibGVBcnJheUNvbnRyYWN0KGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDMxCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHg0NGQ0MmY5OSAweGI3ZWFhNjBiIDB4NzQzZDcwZWQgMHgxYzdlMDQ5NCAweGEyZDU4NjBiIDB4ZTA1ZmM1NjQgMHgxZTA5MmI4MyAweDAxMzEwMjYyIDB4Yzg2NTRhOTggMHg4OWQxOTZmOCAweDZjYjdjOTkxIDB4OTg5OGJmMDIgMHhmNmI2MWVlOCAweDYwYjg2YTdiIDB4NzNhZDI4M2YgMHg1MjlkZmFlOSAweDIwNmQ1MTRmIDB4ZTA2NDY1ZTIgMHhlYzAzMDBhMiAweGVjZGYxNGFmIDB4NTExYWNhNjQgMHgyOTg1MmU0ZiAweDZkNGFhMzU4IDB4YjdjYjk2YmQgLy8gbWV0aG9kICJ0ZXN0X3VpbnQ2NF9hcnJheSgpdm9pZCIsIG1ldGhvZCAidGVzdF9iaWd1aW50X2FycmF5KCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2Jvb2xfYXJyYXkodWludDY0KXZvaWQiLCBtZXRob2QgInRlc3RfZml4ZWRfc2l6ZV90dXBsZV9hcnJheSgpdm9pZCIsIG1ldGhvZCAidGVzdF9maXhlZF9zaXplX25hbWVkX3R1cGxlX2FycmF5KCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2R5bmFtaWNfc2l6ZWRfdHVwbGVfYXJyYXkoKXZvaWQiLCBtZXRob2QgInRlc3RfZHluYW1pY19zaXplZF9uYW1lZF90dXBsZV9hcnJheSgpdm9pZCIsIG1ldGhvZCAidGVzdF9pbXBsaWNpdF9jb252ZXJzaW9uX2xvZyh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJ0ZXN0X2ltcGxpY2l0X2NvbnZlcnNpb25fZW1pdCh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJ0ZXN0X25lc3RlZF9hcnJheSh1aW50NjQsdWludDY0W11bXSl1aW50NjRbXSIsIG1ldGhvZCAidGVzdF9iaXRfcGFja2VkX3R1cGxlcygpdm9pZCIsIG1ldGhvZCAic3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlcyh1aW50NjRbXSxib29sW10sKHVpbnQ2NCxib29sLGJvb2wpW10sKHVpbnQ2NCxzdHJpbmcpW10pKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiLCBtZXRob2QgInRlc3RfdWludDY0X3JldHVybih1aW50NjQpdWludDY0W10iLCBtZXRob2QgInRlc3RfYm9vbF9yZXR1cm4odWludDY0KWJvb2xbXSIsIG1ldGhvZCAidGVzdF90dXBsZV9yZXR1cm4odWludDY0KSh1aW50NjQsYm9vbCxib29sKVtdIiwgbWV0aG9kICJ0ZXN0X2R5bmFtaWNfdHVwbGVfcmV0dXJuKHVpbnQ2NCkodWludDY0LHN0cmluZylbXSIsIG1ldGhvZCAidGVzdF9jb252ZXJ0X3RvX2FycmF5X2FuZF9iYWNrKCh1aW50NjQsYm9vbCxib29sKVtdLHVpbnQ2NCkodWludDY0LGJvb2wsYm9vbClbXSIsIG1ldGhvZCAidGVzdF9jb25jYXRfd2l0aF9hcmM0X3R1cGxlKCh1aW50NjQsdWludDY0KSl1aW50NjRbXSIsIG1ldGhvZCAidGVzdF9jb25jYXRfd2l0aF9uYXRpdmVfdHVwbGUoKHVpbnQ2NCx1aW50NjQpKXVpbnQ2NFtdIiwgbWV0aG9kICJ0ZXN0X2R5bmFtaWNfY29uY2F0X3dpdGhfYXJjNF90dXBsZSgoc3RyaW5nLHN0cmluZykpc3RyaW5nW10iLCBtZXRob2QgInRlc3RfZHluYW1pY19jb25jYXRfd2l0aF9uYXRpdmVfdHVwbGUoKHN0cmluZyxzdHJpbmcpKXN0cmluZ1tdIiwgbWV0aG9kICJ0ZXN0X2NvbmNhdF9pbW11dGFibGVfZHluYW1pYygodWludDY0LHN0cmluZylbXSwodWludDY0LHN0cmluZylbXSkodWludDY0LHN0cmluZylbXSIsIG1ldGhvZCAidGVzdF9pbW11dGFibGVfYXJjNCgodWludDY0LHVpbnQ2NClbXSkodWludDY0LHVpbnQ2NClbXSIsIG1ldGhvZCAidGVzdF9pbW1fZml4ZWRfYXJyKCkodWludDY0LHVpbnQ2NClbM10iCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCB0ZXN0X3VpbnQ2NF9hcnJheSB0ZXN0X2JpZ3VpbnRfYXJyYXkgdGVzdF9ib29sX2FycmF5IHRlc3RfZml4ZWRfc2l6ZV90dXBsZV9hcnJheSB0ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXkgdGVzdF9keW5hbWljX3NpemVkX3R1cGxlX2FycmF5IHRlc3RfZHluYW1pY19zaXplZF9uYW1lZF90dXBsZV9hcnJheSB0ZXN0X2ltcGxpY2l0X2NvbnZlcnNpb25fbG9nIHRlc3RfaW1wbGljaXRfY29udmVyc2lvbl9lbWl0IHRlc3RfbmVzdGVkX2FycmF5IHRlc3RfYml0X3BhY2tlZF90dXBsZXMgc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlcyB0ZXN0X3VpbnQ2NF9yZXR1cm4gdGVzdF9ib29sX3JldHVybiB0ZXN0X3R1cGxlX3JldHVybiB0ZXN0X2R5bmFtaWNfdHVwbGVfcmV0dXJuIHRlc3RfY29udmVydF90b19hcnJheV9hbmRfYmFjayB0ZXN0X2NvbmNhdF93aXRoX2FyYzRfdHVwbGUgdGVzdF9jb25jYXRfd2l0aF9uYXRpdmVfdHVwbGUgdGVzdF9keW5hbWljX2NvbmNhdF93aXRoX2FyYzRfdHVwbGUgdGVzdF9keW5hbWljX2NvbmNhdF93aXRoX25hdGl2ZV90dXBsZSB0ZXN0X2NvbmNhdF9pbW11dGFibGVfZHluYW1pYyB0ZXN0X2ltbXV0YWJsZV9hcmM0IHRlc3RfaW1tX2ZpeGVkX2FycgogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDMxOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X3BvcF9maXhlZF9zaXplKGFycmF5OiBieXRlcywgZml4ZWRfYnl0ZV9zaXplOiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X3BvcF9maXhlZF9zaXplOgogICAgcHJvdG8gMiAxCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHJlcGxhY2UyIDAKICAgIHJldHN1YgoKCi8vIF9wdXlhX2xpYi5hcmM0LmR5bmFtaWNfYXJyYXlfcG9wX2R5bmFtaWNfZWxlbWVudChhcnJheTogYnl0ZXMpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X3BvcF9keW5hbWljX2VsZW1lbnQ6CiAgICBwcm90byAxIDEKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgc3dhcAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGludGNfMiAvLyAyCgpkeW5hbWljX2FycmF5X3BvcF9keW5hbWljX2VsZW1lbnRfd2hpbGVfdG9wQDE6CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIDw9CiAgICBieiBkeW5hbWljX2FycmF5X3BvcF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfd2hpbGVAMwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgIC0KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDIKICAgIGIgZHluYW1pY19hcnJheV9wb3BfZHluYW1pY19lbGVtZW50X3doaWxlX3RvcEAxCgpkeW5hbWljX2FycmF5X3BvcF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfd2hpbGVAMzoKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgZnJhbWVfZGlnIDEKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgMgogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIDAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X3JlYWRfZHluYW1pY19lbGVtZW50KGFycmF5OiBieXRlcywgaW5kZXg6IHVpbnQ2NCkgLT4gYnl0ZXM6CmR5bmFtaWNfYXJyYXlfcmVhZF9keW5hbWljX2VsZW1lbnQ6CiAgICBwcm90byAyIDEKICAgIGZyYW1lX2RpZyAtMgogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMgogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyA1CiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIC0KICAgIHNlbGVjdAogICAgc3Vic3RyaW5nMwogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfYml0cyhhcnJheTogYnl0ZXMsIG5ld19pdGVtc19ieXRlczogYnl0ZXMsIG5ld19pdGVtc19jb3VudDogdWludDY0LCByZWFkX3N0ZXA6IHVpbnQ2NCkgLT4gYnl0ZXM6CmR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHM6CiAgICBwcm90byA0IDEKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGR1cG4gMgogICAgZnJhbWVfZGlnIC00CiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cG4gMgogICAgZnJhbWVfZGlnIC0yCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICBmcmFtZV9kaWcgLTQKICAgIHN3YXAKICAgIHJlcGxhY2UyIDAKICAgIGNvdmVyIDIKICAgIHN3YXAKICAgIHB1c2hpbnQgNwogICAgKwogICAgaW50Y18zIC8vIDgKICAgIC8KICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDcKICAgICsKICAgIGludGNfMyAvLyA4CiAgICAvCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHNfYWZ0ZXJfaWZfZWxzZUAyCiAgICBmcmFtZV9kaWcgNgogICAgZnJhbWVfZGlnIDUKICAgIC0KICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgNAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDQKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHNfYWZ0ZXJfaWZfZWxzZUAyOgogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMAogICAgZnJhbWVfZGlnIDMKICAgIHB1c2hpbnQgMTYKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGZyYW1lX2J1cnkgMQoKZHluYW1pY19hcnJheV9jb25jYXRfYml0c193aGlsZV90b3BAMzoKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYml0c19hZnRlcl93aGlsZUA1CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGdldGJpdAogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAyCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBmcmFtZV9idXJ5IDQKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDIKICAgIGZyYW1lX2RpZyAtMQogICAgKwogICAgZnJhbWVfYnVyeSAwCiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHNfd2hpbGVfdG9wQDMKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHNfYWZ0ZXJfd2hpbGVANToKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIF9wdXlhX2xpYi5hcmM0LmR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQoYXJyYXk6IGJ5dGVzLCBuZXdfaXRlbXNfYnl0ZXM6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQ6CiAgICBwcm90byAzIDEKICAgIGZyYW1lX2RpZyAtMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfZGlnIC0zCiAgICBpbnRjXzIgLy8gMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGJ6ZXJvCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9kaWcgLTMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgY29uY2F0CiAgICBzd2FwCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkdXAKICAgIGludGNfMCAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMjoKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgZGlnIDEKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAyCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA0OgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50KGFycmF5OiBieXRlcywgbmV3X2hlYWRfYW5kX3RhaWw6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudDoKICAgIHByb3RvIDMgMQogICAgYnl0ZWNfMSAvLyAiIgogICAgZnJhbWVfZGlnIC0zCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgc3dhcAogICAgZnJhbWVfZGlnIC0zCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGludGNfMCAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgNQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDQKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDUKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJAMQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA0OgogICAgZnJhbWVfZGlnIDIKICAgIGxlbgogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA1CgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckA1OgogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyA0CiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIDUKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAwCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA1CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDUKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAODoKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDAKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAxCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyA0CiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5zdW1faW1tX2ZpeGVkKGFycjogYnl0ZXMpIC0+IHVpbnQ2NDoKc3VtX2ltbV9maXhlZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU3MC01NzEKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgc3VtX2ltbV9maXhlZChhcnI6IE5hdGl2ZVN0cnVjdDMpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTcyCiAgICAvLyB0b3RhbCA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIGR1cAoKc3VtX2ltbV9maXhlZF9mb3JfaGVhZGVyQDE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NzMKICAgIC8vIGZvciBpdGVtIGluIGFycjoKICAgIGZyYW1lX2RpZyAxCiAgICBwdXNoaW50IDMKICAgIDwKICAgIGJ6IHN1bV9pbW1fZml4ZWRfYWZ0ZXJfZm9yQDQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU3My01NzQKICAgIC8vIGZvciBpdGVtIGluIGFycjoKICAgIC8vICAgICB0b3RhbCArPSBpdGVtLmZvbwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgcHVzaGludCAxNgogICAgKgogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU3NAogICAgLy8gdG90YWwgKz0gaXRlbS5mb28KICAgIGR1cAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTczLTU3NAogICAgLy8gZm9yIGl0ZW0gaW4gYXJyOgogICAgLy8gICAgIHRvdGFsICs9IGl0ZW0uZm9vCiAgICBpbnRjXzAgLy8gMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTc0CiAgICAvLyB0b3RhbCArPSBpdGVtLmZvbwogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2RpZyAwCiAgICArCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1NzUKICAgIC8vIHRvdGFsICs9IGl0ZW0uYmFyCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgICsKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBzdW1faW1tX2ZpeGVkX2Zvcl9oZWFkZXJAMQoKc3VtX2ltbV9maXhlZF9hZnRlcl9mb3JANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU3NgogICAgLy8gcmV0dXJuIHRvdGFsCiAgICByZXRzdWIKCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS50aW1lcyhuOiB1aW50NjQpIC0+IGJ5dGVzOgp0aW1lczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU3OS01ODAKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgdGltZXMobjogVUludDY0KSAtPiBTdHJpbmc6CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU4MQogICAgLy8gcmVzdWx0ID0gU3RyaW5nKCkKICAgIGJ5dGVjXzEgLy8gIiIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU4MgogICAgLy8gZm9yIF9pIGluIHVyYW5nZShuKToKICAgIGludGNfMCAvLyAwCgp0aW1lc19mb3JfaGVhZGVyQDE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1ODIKICAgIC8vIGZvciBfaSBpbiB1cmFuZ2Uobik6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIC0xCiAgICA8CiAgICBieiB0aW1lc19hZnRlcl9mb3JANAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTgzCiAgICAvLyByZXN1bHQgKz0gU3RyaW5nKCIgIikKICAgIGZyYW1lX2RpZyAwCiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTgyCiAgICAvLyBmb3IgX2kgaW4gdXJhbmdlKG4pOgogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgdGltZXNfZm9yX2hlYWRlckAxCgp0aW1lc19hZnRlcl9mb3JANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU4NAogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgcmV0c3ViCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuYWRkX3goYXJyOiBieXRlcywgeDogdWludDY0KSAtPiBieXRlczoKYWRkX3g6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1ODctNTg4CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGFkZF94KGFycjogSW1tdXRhYmxlQXJyYXlbVUludDY0XSwgeDogVUludDY0KSAtPiBJbW11dGFibGVBcnJheVtVSW50NjRdOgogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1ODkKICAgIC8vIGZvciBpIGluIHVyYW5nZSh4KToKICAgIGludGNfMCAvLyAwCgphZGRfeF9mb3JfaGVhZGVyQDE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1ODkKICAgIC8vIGZvciBpIGluIHVyYW5nZSh4KToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIDwKICAgIGJ6IGFkZF94X2FmdGVyX2ZvckA0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1OTAKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoaSkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1OTAKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoaSkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICByZXBsYWNlMiAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU4OQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHgpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMAogICAgYiBhZGRfeF9mb3JfaGVhZGVyQDEKCmFkZF94X2FmdGVyX2ZvckA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTkxCiAgICAvLyByZXR1cm4gYXJyCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF91aW50NjRfYXJyYXlbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X3VpbnQ2NF9hcnJheToKICAgIHB1c2hieXRlcyAweDAwMDEwMDAwMDAwMDAwMDAwMDJhCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMDMKICAgIC8vIGFyciA9IGFkZF94KGFyciwgVUludDY0KDUpKQogICAgcHVzaGludCA1CiAgICBjYWxsc3ViIGFkZF94CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMDQKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDYKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgcHVzaGludCA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMDUKICAgIC8vIGFzc2VydCBhcnJbLTFdID09IDQKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjEwNwogICAgLy8gYXJyID0gYXJyLmFwcGVuZChVSW50NjQoNDMpKQogICAgcHVzaGludCA0MwogICAgaXRvYgogICAgc3dhcAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTA3CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKFVJbnQ2NCg0MykpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXBuIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjEwOAogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gNwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgcHVzaGludCA3CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMDkKICAgIC8vIGFzc2VydCBhcnJbLTFdID09IDQzCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIHB1c2hpbnQgNDMKICAgID09CiAgICBhc3NlcnQKICAgIGludGNfMiAvLyAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMTAKICAgIC8vIGFzc2VydCBhcnJbMF0gPT0gNDIKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1OTYKICAgIC8vIGZvciBfaSBpbiB1cmFuZ2UoeCk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF91aW50NjRfYXJyYXlfZm9yX2hlYWRlckAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTk2CiAgICAvLyBmb3IgX2kgaW4gdXJhbmdlKHgpOgogICAgZHVwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMTIKICAgIC8vIGFyciA9IHBvcF94KGFyciwgVUludDY0KDMpKQogICAgcHVzaGludCAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo1OTYKICAgIC8vIGZvciBfaSBpbiB1cmFuZ2UoeCk6CiAgICA8CiAgICBieiB0ZXN0X3VpbnQ2NF9hcnJheV9hZnRlcl9mb3JANAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NTk3CiAgICAvLyBhcnIgPSBhcnIucG9wKCkKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3BvcF9maXhlZF9zaXplCiAgICBidXJ5IDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjU5NgogICAgLy8gZm9yIF9pIGluIHVyYW5nZSh4KToKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiB0ZXN0X3VpbnQ2NF9hcnJheV9mb3JfaGVhZGVyQDIKCnRlc3RfdWludDY0X2FycmF5X2FmdGVyX2ZvckA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTEzCiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA0CiAgICBkaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjExNAogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gMgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTE2CiAgICAvLyBhcnIgPSBhZGRfeChhcnIsIFVJbnQ2NCgxMCkpCiAgICBwdXNoaW50IDEwCiAgICBjYWxsc3ViIGFkZF94CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMTcKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDE0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgMTQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjExOAogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gOQogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIHB1c2hpbnQgOQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTIwCiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKFVJbnQ2NCg0NCkpCiAgICBwdXNoaW50IDQ0CiAgICBpdG9iCiAgICBzd2FwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMjAKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoVUludDY0KDQ0KSkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICByZXBsYWNlMiAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjEyMQogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gMTUKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgcHVzaGludCAxNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTIyCiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSA0NAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDQ0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMjQKICAgIC8vIGFyciA9IGFyci5yZXBsYWNlKDIsIFVJbnQ2NCgyMykpCiAgICBwdXNoaW50IDIzCiAgICBpdG9iCiAgICByZXBsYWNlMiAxOCAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjEyNQogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gMTUKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjEyNgogICAgLy8gYXNzZXJ0IGFyclsyXSA9PSAyMwogICAgZHVwCiAgICBwdXNoaW50IDE4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgcHVzaGludCAyMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTI4CiAgICAvLyBzZWxmLmEgPSBhcnIKICAgIHB1c2hieXRlcyAiYSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo5NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfYmlndWludF9hcnJheVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfYmlndWludF9hcnJheToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjEzNQogICAgLy8gYXJyID0gYXJyLmFwcGVuZChCaWdVSW50KFR4bi5udW1fYXBwX2FyZ3MgLSAxKSkKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgaXRvYgogICAgcHVzaGludCA2NAogICAgYnplcm8KICAgIGR1cAogICAgY292ZXIgMgogICAgYnwKICAgIHB1c2hieXRlcyAweDAwMDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMzYKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMzcKICAgIC8vIGFzc2VydCBhcnJbLTFdID09IDAKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgcHVzaGludCA2NAogICAgKgogICAgcHVzaGludCA2NAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlY18xIC8vIDB4CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NjAzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoeCk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9iaWd1aW50X2FycmF5X2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjYwMwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHgpOgogICAgZHVwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxMzkKICAgIC8vIGFyciA9IGFkZF94YihhcnIsIFVJbnQ2NCg1KSkKICAgIHB1c2hpbnQgNQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NjAzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoeCk6CiAgICA8CiAgICBieiB0ZXN0X2JpZ3VpbnRfYXJyYXlfYWZ0ZXJfZm9yQDQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjYwNAogICAgLy8gYXJyID0gYXJyLmFwcGVuZChCaWdVSW50KGkpKQogICAgZHVwbiAyCiAgICBpdG9iCiAgICBkaWcgNAogICAgYnwKICAgIGRpZyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NjA0CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKEJpZ1VJbnQoaSkpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHJlcGxhY2UyIDAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnVyeSAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo2MDMKICAgIC8vIGZvciBpIGluIHVyYW5nZSh4KToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgdGVzdF9iaWd1aW50X2FycmF5X2Zvcl9oZWFkZXJAMgoKdGVzdF9iaWd1aW50X2FycmF5X2FmdGVyX2ZvckA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTQwCiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA2CiAgICBkaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBwdXNoaW50IDYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE0MQogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gNAogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBwdXNoaW50IDY0CiAgICAqCiAgICBwdXNoaW50IDY0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweDA0CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTQzCiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKEJpZ1VJbnQoMioqNTEyIC0gMSkgLSBUeG4ubnVtX2FwcF9hcmdzKQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGl0b2IKICAgIGJ5dGVjIDUgLy8gMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgogICAgc3dhcAogICAgYi0KICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBkaWcgNQogICAgYnwKICAgIHN3YXAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE0MwogICAgLy8gYXJyID0gYXJyLmFwcGVuZChCaWdVSW50KDIqKjUxMiAtIDEpIC0gVHhuLm51bV9hcHBfYXJncykKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICByZXBsYWNlMiAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE0NAogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gNwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBwdXNoaW50IDcKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE0NQogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gMioqNTEyIC0gMgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBwdXNoaW50IDY0CiAgICAqCiAgICBwdXNoaW50IDY0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTQ2CiAgICAvLyBhc3NlcnQgYXJyWzBdID09IDAKICAgIGRpZyAxCiAgICBleHRyYWN0IDIgNjQKICAgIGJ5dGVjXzEgLy8gMHgKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNDgKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoQmlnVUludCgyKio1MTIgLSAxKSkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgcmVwbGFjZTIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTQ4CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKEJpZ1VJbnQoMioqNTEyIC0gMSkpCiAgICBieXRlYyA1IC8vIDB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTQ5CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA4CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNTAKICAgIC8vIGFzc2VydCBhcnJbLTFdID09IDIqKjUxMiAtIDEKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIHB1c2hpbnQgNjQKICAgICoKICAgIHB1c2hpbnQgNjQKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnl0ZWMgNSAvLyAweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmCiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTUxCiAgICAvLyBhc3NlcnQgYXJyWzBdID09IDAKICAgIGR1cAogICAgZXh0cmFjdCAyIDY0CiAgICBieXRlY18xIC8vIDB4CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTUzCiAgICAvLyBCb3goSW1tdXRhYmxlQXJyYXlbQmlnVUludF0sIGtleT1iImJpZ3VpbnQiKS52YWx1ZSA9IGFycgogICAgYnl0ZWMgNyAvLyAweDYyNjk2Nzc1Njk2ZTc0CiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJ5dGVjIDcgLy8gMHg2MjY5Njc3NTY5NmU3NAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9ib29sX2FycmF5W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9ib29sX2FycmF5OgogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTU3CiAgICAvLyBhcnIgPSBJbW11dGFibGVBcnJheVtib29sXSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTYxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UobGVuZ3RoKToKICAgIGludGNfMCAvLyAwCgp0ZXN0X2Jvb2xfYXJyYXlfZm9yX2hlYWRlckAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTYxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UobGVuZ3RoKToKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IHRlc3RfYm9vbF9hcnJheV9hZnRlcl9mb3JANQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTYyCiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKGkgPT0gVHhuLm51bV9hcHBfYXJncykKICAgIHR4biBOdW1BcHBBcmdzCiAgICBkaWcgMQogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZGlnIDMKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICBkdXAKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYml0cwogICAgYnVyeSAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNjEKICAgIC8vIGZvciBpIGluIHVyYW5nZShsZW5ndGgpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2Jvb2xfYXJyYXlfZm9yX2hlYWRlckAyCgp0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfZm9yQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNjQKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IGxlbmd0aAogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGJ1cnkgNQogICAgZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTY2CiAgICAvLyBpZiBsZW5ndGggPiAwOgogICAgYnogdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VANwogICAgZGlnIDMKICAgIGFzc2VydCAvLyBpbmRleCBvdXQgb2YgYm91bmRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNjcKICAgIC8vIGFzc2VydCBub3QgYXJyWzBdLCAiZXhwZWN0ZWQgZWxlbWVudCAwIHRvIGJlIEZhbHNlIgogICAgZGlnIDEKICAgIHB1c2hpbnQgMTYKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGVsZW1lbnQgMCB0byBiZSBGYWxzZQoKdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE2OAogICAgLy8gaWYgbGVuZ3RoID4gMToKICAgIGRpZyAyCiAgICBpbnRjXzEgLy8gMQogICAgPgogICAgYnogdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTY5CiAgICAvLyBhc3NlcnQgbm90IGFyclsxXSwgImV4cGVjdGVkIGVsZW1lbnQgMSB0byBiZSBGYWxzZSIKICAgIGludGNfMSAvLyAxCiAgICBkaWcgNAogICAgPAogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE2OQogICAgLy8gYXNzZXJ0IG5vdCBhcnJbMV0sICJleHBlY3RlZCBlbGVtZW50IDEgdG8gYmUgRmFsc2UiCiAgICBkaWcgMQogICAgcHVzaGludCAxNwogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZWxlbWVudCAxIHRvIGJlIEZhbHNlCgp0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTcwCiAgICAvLyBpZiBsZW5ndGggPiAyOgogICAgZGlnIDIKICAgIGludGNfMiAvLyAyCiAgICA+CiAgICBieiB0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfaWZfZWxzZUAxMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTcxCiAgICAvLyBhc3NlcnQgYXJyWzJdLCAiZXhwZWN0ZWQgZWxlbWVudCAyIHRvIGJlIFRydWUiCiAgICBpbnRjXzIgLy8gMgogICAgZGlnIDQKICAgIDwKICAgIGFzc2VydCAvLyBpbmRleCBvdXQgb2YgYm91bmRzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNzEKICAgIC8vIGFzc2VydCBhcnJbMl0sICJleHBlY3RlZCBlbGVtZW50IDIgdG8gYmUgVHJ1ZSIKICAgIGRpZyAxCiAgICBwdXNoaW50IDE4CiAgICBnZXRiaXQKICAgIGFzc2VydCAvLyBleHBlY3RlZCBlbGVtZW50IDIgdG8gYmUgVHJ1ZQoKdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNzIKICAgIC8vIGlmIGxlbmd0aCA+IDM6CiAgICBkaWcgMgogICAgcHVzaGludCAzCiAgICA+CiAgICBieiB0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfaWZfZWxzZUAxMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTczCiAgICAvLyBhc3NlcnQgbm90IGFycltsZW5ndGggLSAxXSwgImV4cGVjdGVkIGxhc3QgZWxlbWVudCB0byBiZSBGYWxzZSIKICAgIGRpZyAyCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBkaWcgNQogICAgPAogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE3MwogICAgLy8gYXNzZXJ0IG5vdCBhcnJbbGVuZ3RoIC0gMV0sICJleHBlY3RlZCBsYXN0IGVsZW1lbnQgdG8gYmUgRmFsc2UiCiAgICBwdXNoaW50IDE2CiAgICArCiAgICBkaWcgMgogICAgc3dhcAogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgbGFzdCBlbGVtZW50IHRvIGJlIEZhbHNlCgp0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE3NQogICAgLy8gc2VsZi5nID0gYXJyCiAgICBwdXNoYnl0ZXMgImciCiAgICBkaWcgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE3NgogICAgLy8gaWYgbGVuZ3RoOgogICAgZGlnIDIKICAgIGJ6IHRlc3RfYm9vbF9hcnJheV9hZnRlcl9pZl9lbHNlQDE1CiAgICBkaWcgMwogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIGRpZyAzCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBzZXRiaXQKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA3CiAgICArCiAgICBpbnRjXzMgLy8gOAogICAgLwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIGV4dHJhY3QzCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE3OAogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gbGVuZ3RoIC0gMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGRpZyAzCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgPT0KICAgIGFzc2VydAoKdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2ZpeGVkX3NpemVfdHVwbGVfYXJyYXlbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2ZpeGVkX3NpemVfdHVwbGVfYXJyYXk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxODIKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5W3R1cGxlW1VJbnQ2NCwgVUludDY0XV0oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE4NQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfZml4ZWRfc2l6ZV90dXBsZV9hcnJheV9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxODUKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGR1cAogICAgcHVzaGludCA1CiAgICA8CiAgICBieiB0ZXN0X2ZpeGVkX3NpemVfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE4NgogICAgLy8gYXJyID0gYXJyLmFwcGVuZCgoaSArIDEsIGkgKyAyKSkKICAgIGR1cG4gMgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE4NgogICAgLy8gYXJyID0gYXJyLmFwcGVuZCgoaSArIDEsIGkgKyAyKSkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBidXJ5IDMKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2ZpeGVkX3NpemVfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckAyCgp0ZXN0X2ZpeGVkX3NpemVfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxODgKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDUKICAgIGRpZyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTg5CiAgICAvLyBhc3NlcnQgYXJyWzBdID09IChVSW50NjQoMSksIFVJbnQ2NCgyKSkKICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAxNgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgICYmCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE5MAogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gKFVJbnQ2NCg1KSwgVUludDY0KDYpKQogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIHB1c2hpbnQgMTYKICAgICoKICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgcHVzaGludCA1CiAgICA9PQogICAgc3dhcAogICAgcHVzaGludCA2CiAgICA9PQogICAgJiYKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTkyCiAgICAvLyBhcnIgPSBhcnIucG9wKCkKICAgIHB1c2hpbnQgMTYKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9wb3BfZml4ZWRfc2l6ZQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTkzCiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTk0CiAgICAvLyBhc3NlcnQgYXJyWzBdID09IChVSW50NjQoMSksIFVJbnQ2NCgyKSkKICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAxNgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgICYmCiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjE5NQogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gKFVJbnQ2NCg0KSwgVUludDY0KDUpKQogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIHB1c2hpbnQgMTYKICAgICoKICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgcHVzaGludCA0CiAgICA9PQogICAgc3dhcAogICAgcHVzaGludCA1CiAgICA9PQogICAgJiYKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTk2CiAgICAvLyBzZWxmLmMgPSBhcnIKICAgIHB1c2hieXRlcyAiYyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToxODAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXlbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDAKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5W015VHVwbGVdKCkKICAgIGJ5dGVjXzIgLy8gMHgwMDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDMKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGludGNfMCAvLyAwCgp0ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjAzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNQogICAgPAogICAgYnogdGVzdF9maXhlZF9zaXplX25hbWVkX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDQKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoTXlUdXBsZShmb289aSwgYmFyPWkgJSAyID09IDAsIGJhej1pICogMyAlIDIgPT0gMCkpCiAgICBkdXBuIDIKICAgIGludGNfMiAvLyAyCiAgICAlCiAgICAhCiAgICBkaWcgMQogICAgcHVzaGludCAzCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgJQogICAgIQogICAgZGlnIDIKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDQKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoTXlUdXBsZShmb289aSwgYmFyPWkgJSAyID09IDAsIGJhej1pICogMyAlIDIgPT0gMCkpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHJlcGxhY2UyIDAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnVyeSAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDMKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgdGVzdF9maXhlZF9zaXplX25hbWVkX3R1cGxlX2FycmF5X2Zvcl9oZWFkZXJAMgoKdGVzdF9maXhlZF9zaXplX25hbWVkX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjA2CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA1CiAgICBkaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCA1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDcKICAgIC8vIGZvbywgYmFyLCBiYXogPSBhcnJbMF0KICAgIGR1cAogICAgZXh0cmFjdCAyIDkKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgMQogICAgcHVzaGludCA2NAogICAgZ2V0Yml0CiAgICB1bmNvdmVyIDIKICAgIHB1c2hpbnQgNjUKICAgIGdldGJpdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjA4CiAgICAvLyBhc3NlcnQgZm9vID09IDAKICAgIHVuY292ZXIgMgogICAgIQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMDkKICAgIC8vIGFzc2VydCBiYXIKICAgIHN3YXAKICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjEwCiAgICAvLyBhc3NlcnQgYmF6CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIxMQogICAgLy8gc2VsZi5kID0gYXJyCiAgICBwdXNoYnl0ZXMgImQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MTk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9keW5hbWljX3NpemVkX3R1cGxlX2FycmF5W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9keW5hbWljX3NpemVkX3R1cGxlX2FycmF5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjE1CiAgICAvLyBhcnIgPSBJbW11dGFibGVBcnJheVt0dXBsZVtVSW50NjQsIEJ5dGVzXV0oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIxOAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheV9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMTgKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGR1cAogICAgcHVzaGludCA1CiAgICA8CiAgICBieiB0ZXN0X2R5bmFtaWNfc2l6ZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIxOQogICAgLy8gYXJyID0gYXJyLmFwcGVuZCgoaSArIDEsIG9wLmJ6ZXJvKGkpKSkKICAgIGR1cG4gMgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHN3YXAKICAgIGJ6ZXJvCiAgICBkaWcgMQogICAgaXRvYgogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlYyA2IC8vIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDQgLy8gMHgwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAzCiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ1cnkgMwogICAgYnVyeSAxCiAgICBiIHRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheV9mb3JfaGVhZGVyQDIKCnRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheV9hZnRlcl9mb3JANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIyMQogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gNQogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIyMgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgMQoKdGVzdF9keW5hbWljX3NpemVkX3R1cGxlX2FycmF5X2Zvcl9oZWFkZXJANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIyMgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgZHVwCiAgICBwdXNoaW50IDUKICAgIDwKICAgIGJ6IHRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheV9hZnRlcl9mb3JAOQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjIzCiAgICAvLyBhc3NlcnQgYXJyW2ldWzBdID09IGkgKyAxLCAiZXhwZWN0ZWQgMXN0IGVsZW1lbnQgdG8gYmUgY29ycmVjdCIKICAgIGR1cDIKICAgIGR1cAogICAgY292ZXIgMgogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3JlYWRfZHluYW1pY19lbGVtZW50CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICB1bmNvdmVyIDIKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIDFzdCBlbGVtZW50IHRvIGJlIGNvcnJlY3QKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIyNAogICAgLy8gYXNzZXJ0IGFycltpXVsxXS5sZW5ndGggPT0gaSwgImV4cGVjdGVkIDJuZCBlbGVtZW50IHRvIGJlIGNvcnJlY3QiCiAgICBzd2FwCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCAybmQgZWxlbWVudCB0byBiZSBjb3JyZWN0CiAgICBidXJ5IDEKICAgIGIgdGVzdF9keW5hbWljX3NpemVkX3R1cGxlX2FycmF5X2Zvcl9oZWFkZXJANgoKdGVzdF9keW5hbWljX3NpemVkX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjI2CiAgICAvLyBhcnIgPSBhcnIucG9wKCkKICAgIGRpZyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfcG9wX2R5bmFtaWNfZWxlbWVudAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjI3CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgNAogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjI4CiAgICAvLyBhc3NlcnQgYXJyWzBdID09IChVSW50NjQoMSksIG9wLmJ6ZXJvKDApKSwgImV4cGVjdGVkIDEsIDAiCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9yZWFkX2R5bmFtaWNfZWxlbWVudAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBsZW4KICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgaW50Y18wIC8vIDAKICAgIGJ6ZXJvCiAgICB1bmNvdmVyIDIKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIDEsIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIyOQogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gKFVJbnQ2NCg0KSwgb3AuYnplcm8oMykpLCAiZXhwZWN0ZWQgNCwgMyIKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkaWcgMQogICAgc3dhcAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3JlYWRfZHluYW1pY19lbGVtZW50CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgcHVzaGludCA0CiAgICA9PQogICAgcHVzaGludCAzCiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBleHBlY3RlZCA0LCAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMzAKICAgIC8vIHNlbGYuZSA9IGFycgogICAgcHVzaGJ5dGVzICJlIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIxMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfZHluYW1pY19zaXplZF9uYW1lZF90dXBsZV9hcnJheVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfZHluYW1pY19zaXplZF9uYW1lZF90dXBsZV9hcnJheToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIzNAogICAgLy8gYXJyID0gSW1tdXRhYmxlQXJyYXlbTXlEeW5hbWljU2l6ZWRUdXBsZV0oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIzNwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfZHluYW1pY19zaXplZF9uYW1lZF90dXBsZV9hcnJheV9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyMzcKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGR1cAogICAgcHVzaGludCA1CiAgICA8CiAgICBieiB0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjIzOAogICAgLy8gYXJyID0gYXJyLmFwcGVuZChNeUR5bmFtaWNTaXplZFR1cGxlKGZvbz1pICsgMSwgYmFyPXRpbWVzKGkpKSkKICAgIGR1cG4gMgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHN3YXAKICAgIGNhbGxzdWIgdGltZXMKICAgIGRpZyAxCiAgICBpdG9iCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjIDYgLy8gMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAzCiAgICBidXJ5IDEKICAgIGIgdGVzdF9keW5hbWljX3NpemVkX25hbWVkX3R1cGxlX2FycmF5X2Zvcl9oZWFkZXJAMgoKdGVzdF9keW5hbWljX3NpemVkX25hbWVkX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjQwCiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA1CiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjQxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAxCgp0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjQxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNQogICAgPAogICAgYnogdGVzdF9keW5hbWljX3NpemVkX25hbWVkX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA5CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNDIKICAgIC8vIGFzc2VydCBhcnJbaV1bMF0gPT0gaSArIDEsICJleHBlY3RlZCAxc3QgZWxlbWVudCB0byBiZSBjb3JyZWN0IgogICAgZHVwMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfcmVhZF9keW5hbWljX2VsZW1lbnQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgMQogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgbGVuCiAgICB1bmNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgMXN0IGVsZW1lbnQgdG8gYmUgY29ycmVjdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjQzCiAgICAvLyBhc3NlcnQgYXJyW2ldWzFdID09IHRpbWVzKGkpLCAiZXhwZWN0ZWQgMm5kIGVsZW1lbnQgdG8gYmUgY29ycmVjdCIKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiB0aW1lcwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIDJuZCBlbGVtZW50IHRvIGJlIGNvcnJlY3QKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckA2Cgp0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNDUKICAgIC8vIGFyciA9IGFyci5wb3AoKQogICAgZGlnIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9wb3BfZHluYW1pY19lbGVtZW50CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNDYKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgcHVzaGludCA0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNDcKICAgIC8vIGFzc2VydCBhcnJbMF0gPT0gTXlEeW5hbWljU2l6ZWRUdXBsZShVSW50NjQoMSksIFN0cmluZygpKSwgImV4cGVjdGVkIDEsIDAiCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9yZWFkX2R5bmFtaWNfZWxlbWVudAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBsZW4KICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgc3dhcAogICAgYnl0ZWNfMSAvLyAiIgogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgMSwgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjQ4CiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSBNeUR5bmFtaWNTaXplZFR1cGxlKFVJbnQ2NCg0KSwgU3RyaW5nKCIgICAiKSksICJleHBlY3RlZCA0LCAzIgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICBzd2FwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfcmVhZF9keW5hbWljX2VsZW1lbnQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgMQogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgbGVuCiAgICB1bmNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBwdXNoaW50IDQKICAgID09CiAgICBzd2FwCiAgICBwdXNoYnl0ZXMgIiAgICIKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIDQsIDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI0OQogICAgLy8gc2VsZi5mID0gYXJyCiAgICBwdXNoYnl0ZXMgImYiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9pbXBsaWNpdF9jb252ZXJzaW9uX2xvZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfaW1wbGljaXRfY29udmVyc2lvbl9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNTMKICAgIC8vIGxvZyhhcnIpCiAgICBsb2cKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfaW1wbGljaXRfY29udmVyc2lvbl9lbWl0W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9pbXBsaWNpdF9jb252ZXJzaW9uX2VtaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNTcKICAgIC8vIGFyYzQuZW1pdCgiZW1pdF90ZXN0IiwgYXJyKQogICAgcHVzaGJ5dGVzIDB4ZmE0MGMwNTMwMDAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNTcKICAgIC8vIGFyYzQuZW1pdCgiZW1pdF90ZXN0IiwgYXJyKQogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfbmVzdGVkX2FycmF5W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9uZXN0ZWRfYXJyYXk6CiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAyCiAgICBieXRlY18xIC8vICIiCiAgICBkdXBuIDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI2My0yNjQKICAgIC8vICMgYWRkIG4gbmV3IGFycmF5cwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFycl90b19hZGQpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfbmVzdGVkX2FycmF5X2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI2My0yNjQKICAgIC8vICMgYWRkIG4gbmV3IGFycmF5cwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFycl90b19hZGQpOgogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDkKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI2NQogICAgLy8gZXh0cmFfYXJyID0gSW1tdXRhYmxlQXJyYXlbVUludDY0XSgpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgYnVyeSAxMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjY2CiAgICAvLyBmb3IgaiBpbiB1cmFuZ2UoaSk6CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSA1Cgp0ZXN0X25lc3RlZF9hcnJheV9mb3JfaGVhZGVyQDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNjYKICAgIC8vIGZvciBqIGluIHVyYW5nZShpKToKICAgIGRpZyA0CiAgICBkaWcgMQogICAgPAogICAgYnogdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI2NwogICAgLy8gZXh0cmFfYXJyID0gZXh0cmFfYXJyLmFwcGVuZChqKQogICAgZGlnIDQKICAgIGR1cAogICAgaXRvYgogICAgZGlnIDEzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjY3CiAgICAvLyBleHRyYV9hcnIgPSBleHRyYV9hcnIuYXBwZW5kKGopCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHJlcGxhY2UyIDAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnVyeSAxMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjY2CiAgICAvLyBmb3IgaiBpbiB1cmFuZ2UoaSk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA1CiAgICBiIHRlc3RfbmVzdGVkX2FycmF5X2Zvcl9oZWFkZXJANAoKdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNjgKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoZXh0cmFfYXJyKQogICAgYnl0ZWMgNCAvLyAweDAwMDIKICAgIGRpZyAxMgogICAgY29uY2F0CiAgICBkaWcgMgogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50CiAgICBidXJ5IDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI2My0yNjQKICAgIC8vICMgYWRkIG4gbmV3IGFycmF5cwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFycl90b19hZGQpOgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIHRlc3RfbmVzdGVkX2FycmF5X2Zvcl9oZWFkZXJAMgoKdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNzAtMjcxCiAgICAvLyAjIHN1bSBpbm5lciBhcnJheXMgYW5kIHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHN1bXMKICAgIC8vIHRvdGFscyA9IEltbXV0YWJsZUFycmF5W1VJbnQ2NF0oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIGJ1cnkgMTAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI3MgogICAgLy8gZm9yIGlubmVyX2FyciBpbiBhcnI6CiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGJ1cnkgOQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNwoKdGVzdF9uZXN0ZWRfYXJyYXlfZm9yX2hlYWRlckAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI3MgogICAgLy8gZm9yIGlubmVyX2FyciBpbiBhcnI6CiAgICBkaWcgNgogICAgZGlnIDkKICAgIDwKICAgIGJ6IHRlc3RfbmVzdGVkX2FycmF5X2FmdGVyX2ZvckAxMwogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgNwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIGR1cAogICAgYnVyeSAxMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NjEwCiAgICAvLyB0b3RhbCA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo2MTEKICAgIC8vIGZvciBpIGluIGFycjoKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBidXJ5IDgKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDYKCnRlc3RfbmVzdGVkX2FycmF5X2Zvcl9oZWFkZXJAMTU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo2MTEKICAgIC8vIGZvciBpIGluIGFycjoKICAgIGRpZyA1CiAgICBkaWcgOAogICAgPAogICAgYnogdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDE3CiAgICBkaWcgMTAKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjYxMgogICAgLy8gdG90YWwgKz0gaQogICAgZGlnIDUKICAgICsKICAgIGJ1cnkgNQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgNgogICAgYiB0ZXN0X25lc3RlZF9hcnJheV9mb3JfaGVhZGVyQDE1Cgp0ZXN0X25lc3RlZF9hcnJheV9hZnRlcl9mb3JAMTc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyNzMKICAgIC8vIHRvdGFscyA9IHRvdGFscy5hcHBlbmQoc3VtX2Fycihpbm5lcl9hcnIpKQogICAgZGlnIDMKICAgIGl0b2IKICAgIGRpZyAxMAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI3MwogICAgLy8gdG90YWxzID0gdG90YWxzLmFwcGVuZChzdW1fYXJyKGlubmVyX2FycikpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHJlcGxhY2UyIDAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnVyeSAxMAogICAgZGlnIDYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDcKICAgIGIgdGVzdF9uZXN0ZWRfYXJyYXlfZm9yX2hlYWRlckAxMAoKdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MjU5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMTAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2JpdF9wYWNrZWRfdHVwbGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9iaXRfcGFja2VkX3R1cGxlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI3OQogICAgLy8gYXJyMiA9IEltbXV0YWJsZUFycmF5W1R3b0Jvb2xUdXBsZV0oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI4MC0yODIKICAgIC8vIGFycjcgPSBJbW11dGFibGVBcnJheVtTZXZlbkJvb2xUdXBsZV0oKQogICAgLy8gYXJyOCA9IEltbXV0YWJsZUFycmF5W0VpZ2h0Qm9vbFR1cGxlXSgpCiAgICAvLyBhcnI5ID0gSW1tdXRhYmxlQXJyYXlbTmluZUJvb2xUdXBsZV0oKQogICAgZHVwbiAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyODgKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGludGNfMCAvLyAwCgp0ZXN0X2JpdF9wYWNrZWRfdHVwbGVzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI4OAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgZHVwCiAgICBwdXNoaW50IDUKICAgIDwKICAgIGJ6IHRlc3RfYml0X3BhY2tlZF90dXBsZXNfYWZ0ZXJfZm9yQDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI4OQogICAgLy8gYXJyMiA9IGFycjIuYXBwZW5kKFR3b0Jvb2xUdXBsZShhPWkgPT0gMCwgYj1pID09IDEpKQogICAgZHVwbiAyCiAgICAhCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBkaWcgNgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI4OQogICAgLy8gYXJyMiA9IGFycjIuYXBwZW5kKFR3b0Jvb2xUdXBsZShhPWkgPT0gMCwgYj1pID09IDEpKQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICByZXBsYWNlMiAwCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBidXJ5IDcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI5MwogICAgLy8gYmFyPWkgKyAxLAogICAgZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyOTYKICAgIC8vIGM9aSA9PSAyLAogICAgZGlnIDIKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mjk3CiAgICAvLyBkPWkgPT0gMywKICAgIGRpZyAzCiAgICBwdXNoaW50IDMKICAgID09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyOTgKICAgIC8vIGU9aSA9PSA0LAogICAgZGlnIDQKICAgIHB1c2hpbnQgNAogICAgPT0KICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjI5OQogICAgLy8gZj1pID09IDUsCiAgICBkaWcgNQogICAgcHVzaGludCA1CiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzAwCiAgICAvLyBnPWkgPT0gNiwKICAgIGRpZyA2CiAgICBwdXNoaW50IDYKICAgID09CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyOTAtMzAyCiAgICAvLyBhcnI3ID0gYXJyNy5hcHBlbmQoCiAgICAvLyAgICAgU2V2ZW5Cb29sVHVwbGUoCiAgICAvLyAgICAgICAgIGZvbz1pLAogICAgLy8gICAgICAgICBiYXI9aSArIDEsCiAgICAvLyAgICAgICAgIGE9aSA9PSAwLAogICAgLy8gICAgICAgICBiPWkgPT0gMSwKICAgIC8vICAgICAgICAgYz1pID09IDIsCiAgICAvLyAgICAgICAgIGQ9aSA9PSAzLAogICAgLy8gICAgICAgICBlPWkgPT0gNCwKICAgIC8vICAgICAgICAgZj1pID09IDUsCiAgICAvLyAgICAgICAgIGc9aSA9PSA2LAogICAgLy8gICAgICkKICAgIC8vICkKICAgIGRpZyA3CiAgICBpdG9iCiAgICB1bmNvdmVyIDcKICAgIGludGNfMiAvLyAyCiAgICB1bmNvdmVyIDcKICAgIHNldGJpdAogICAgcHVzaGludCAzCiAgICB1bmNvdmVyIDYKICAgIHNldGJpdAogICAgcHVzaGludCA0CiAgICB1bmNvdmVyIDUKICAgIHNldGJpdAogICAgcHVzaGludCA1CiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgcHVzaGludCA2CiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgZHVwMgogICAgY29uY2F0CiAgICBkaWcgMwogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDkKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weToyOTAtMzAyCiAgICAvLyBhcnI3ID0gYXJyNy5hcHBlbmQoCiAgICAvLyAgICAgU2V2ZW5Cb29sVHVwbGUoCiAgICAvLyAgICAgICAgIGZvbz1pLAogICAgLy8gICAgICAgICBiYXI9aSArIDEsCiAgICAvLyAgICAgICAgIGE9aSA9PSAwLAogICAgLy8gICAgICAgICBiPWkgPT0gMSwKICAgIC8vICAgICAgICAgYz1pID09IDIsCiAgICAvLyAgICAgICAgIGQ9aSA9PSAzLAogICAgLy8gICAgICAgICBlPWkgPT0gNCwKICAgIC8vICAgICAgICAgZj1pID09IDUsCiAgICAvLyAgICAgICAgIGc9aSA9PSA2LAogICAgLy8gICAgICkKICAgIC8vICkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBidXJ5IDkKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjMxNAogICAgLy8gaD1pID09IDcsCiAgICBkaWcgNAogICAgcHVzaGludCA3CiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzAzLTMxNgogICAgLy8gYXJyOCA9IGFycjguYXBwZW5kKAogICAgLy8gICAgIEVpZ2h0Qm9vbFR1cGxlKAogICAgLy8gICAgICAgICBmb289aSwKICAgIC8vICAgICAgICAgYmFyPWkgKyAxLAogICAgLy8gICAgICAgICBhPWkgPT0gMCwKICAgIC8vICAgICAgICAgYj1pID09IDEsCiAgICAvLyAgICAgICAgIGM9aSA9PSAyLAogICAgLy8gICAgICAgICBkPWkgPT0gMywKICAgIC8vICAgICAgICAgZT1pID09IDQsCiAgICAvLyAgICAgICAgIGY9aSA9PSA1LAogICAgLy8gICAgICAgICBnPWkgPT0gNiwKICAgIC8vICAgICAgICAgaD1pID09IDcsCiAgICAvLyAgICAgKQogICAgLy8gKQogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDcKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBkaWcgMgogICAgY29uY2F0CiAgICBkaWcgNwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjMwMy0zMTYKICAgIC8vIGFycjggPSBhcnI4LmFwcGVuZCgKICAgIC8vICAgICBFaWdodEJvb2xUdXBsZSgKICAgIC8vICAgICAgICAgZm9vPWksCiAgICAvLyAgICAgICAgIGJhcj1pICsgMSwKICAgIC8vICAgICAgICAgYT1pID09IDAsCiAgICAvLyAgICAgICAgIGI9aSA9PSAxLAogICAgLy8gICAgICAgICBjPWkgPT0gMiwKICAgIC8vICAgICAgICAgZD1pID09IDMsCiAgICAvLyAgICAgICAgIGU9aSA9PSA0LAogICAgLy8gICAgICAgICBmPWkgPT0gNSwKICAgIC8vICAgICAgICAgZz1pID09IDYsCiAgICAvLyAgICAgICAgIGg9aSA9PSA3LAogICAgLy8gICAgICkKICAgIC8vICkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBidXJ5IDcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjMyOQogICAgLy8gaT1pID09IDgsCiAgICB1bmNvdmVyIDMKICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzE3LTMzMQogICAgLy8gYXJyOSA9IGFycjkuYXBwZW5kKAogICAgLy8gICAgIE5pbmVCb29sVHVwbGUoCiAgICAvLyAgICAgICAgIGZvbz1pLAogICAgLy8gICAgICAgICBiYXI9aSArIDEsCiAgICAvLyAgICAgICAgIGE9aSA9PSAwLAogICAgLy8gICAgICAgICBiPWkgPT0gMSwKICAgIC8vICAgICAgICAgYz1pID09IDIsCiAgICAvLyAgICAgICAgIGQ9aSA9PSAzLAogICAgLy8gICAgICAgICBlPWkgPT0gNCwKICAgIC8vICAgICAgICAgZj1pID09IDUsCiAgICAvLyAgICAgICAgIGc9aSA9PSA2LAogICAgLy8gICAgICAgICBoPWkgPT0gNywKICAgIC8vICAgICAgICAgaT1pID09IDgsCiAgICAvLyAgICAgKQogICAgLy8gKQogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjMxNy0zMzEKICAgIC8vIGFycjkgPSBhcnI5LmFwcGVuZCgKICAgIC8vICAgICBOaW5lQm9vbFR1cGxlKAogICAgLy8gICAgICAgICBmb289aSwKICAgIC8vICAgICAgICAgYmFyPWkgKyAxLAogICAgLy8gICAgICAgICBhPWkgPT0gMCwKICAgIC8vICAgICAgICAgYj1pID09IDEsCiAgICAvLyAgICAgICAgIGM9aSA9PSAyLAogICAgLy8gICAgICAgICBkPWkgPT0gMywKICAgIC8vICAgICAgICAgZT1pID09IDQsCiAgICAvLyAgICAgICAgIGY9aSA9PSA1LAogICAgLy8gICAgICAgICBnPWkgPT0gNiwKICAgIC8vICAgICAgICAgaD1pID09IDcsCiAgICAvLyAgICAgICAgIGk9aSA9PSA4LAogICAgLy8gICAgICkKICAgIC8vICkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBidXJ5IDMKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2JpdF9wYWNrZWRfdHVwbGVzX2Zvcl9oZWFkZXJAMgoKdGVzdF9iaXRfcGFja2VkX3R1cGxlc19hZnRlcl9mb3JANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjMzMwogICAgLy8gYXNzZXJ0IGFycjIubGVuZ3RoID09IDUKICAgIGRpZyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjMzNAogICAgLy8gYXNzZXJ0IGFycjcubGVuZ3RoID09IDUKICAgIGRpZyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjMzNQogICAgLy8gYXNzZXJ0IGFycjgubGVuZ3RoID09IDUKICAgIGRpZyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjMzNgogICAgLy8gYXNzZXJ0IGFycjkubGVuZ3RoID09IDUKICAgIGRpZyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjMzNwogICAgLy8gc2VsZi5ib29sMiA9IGFycjIKICAgIHB1c2hieXRlcyAiYm9vbDIiCiAgICB1bmNvdmVyIDQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozMzgKICAgIC8vIHNlbGYuYm9vbDcgPSBhcnI3CiAgICBwdXNoYnl0ZXMgImJvb2w3IgogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzM5CiAgICAvLyBzZWxmLmJvb2w4ID0gYXJyOAogICAgcHVzaGJ5dGVzICJib29sOCIKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM0MAogICAgLy8gc2VsZi5ib29sOSA9IGFycjkKICAgIHB1c2hieXRlcyAiYm9vbDkiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mjc3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3Quc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXM6CiAgICBieXRlY18xIC8vICIiCiAgICBkdXBuIDYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM1MAogICAgLy8gc3VtMSA9IHN1bTIgPSBzdW0zID0gc3VtNCA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNTEKICAgIC8vIGZvciBpIGluIGFycjE6CiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18wIC8vIDAKCnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckAyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzUxCiAgICAvLyBmb3IgaSBpbiBhcnIxOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9mb3JANQogICAgZGlnIDkKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM1MgogICAgLy8gc3VtMSArPSBpCiAgICBkaWcgNAogICAgKwogICAgYnVyeSA0CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckAyCgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2ZvckA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzUzCiAgICAvLyBmb3IgYiBpbiBhcnIyOgogICAgZGlnIDgKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBidXJ5IDE3CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAxMwoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19mb3JfaGVhZGVyQDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNTMKICAgIC8vIGZvciBiIGluIGFycjI6CiAgICBkaWcgMTIKICAgIGRpZyAxNwogICAgPAogICAgYnogc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9mb3JAMTEKICAgIGRpZyAxMgogICAgcHVzaGludCAxNgogICAgKwogICAgZGlnIDkKICAgIHN3YXAKICAgIGdldGJpdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzU0CiAgICAvLyBpZiBiOgogICAgYnogc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM1NQogICAgLy8gc3VtMiArPSAxCiAgICBkaWcgMwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgNAoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9pZl9lbHNlQDk6CiAgICBkaWcgMTIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEzCiAgICBiIHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckA2CgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2ZvckAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM1NgogICAgLy8gZm9yIHR1cCBpbiBhcnIzOgogICAgZGlnIDcKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBidXJ5IDE2CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAxMgoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19mb3JfaGVhZGVyQDEyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzU2CiAgICAvLyBmb3IgdHVwIGluIGFycjM6CiAgICBkaWcgMTEKICAgIGRpZyAxNgogICAgPAogICAgYnogc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9mb3JAMTkKICAgIGRpZyA3CiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEyCiAgICBwdXNoaW50IDkKICAgICoKICAgIHB1c2hpbnQgOQogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDEKICAgIHB1c2hpbnQgNjQKICAgIGdldGJpdAogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDY1CiAgICBnZXRiaXQKICAgIGJ1cnkgMTMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM1NwogICAgLy8gc3VtMyArPSB0dXAuZm9vCiAgICBkaWcgNgogICAgdW5jb3ZlciAyCiAgICArCiAgICBidXJ5IDYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM1OAogICAgLy8gaWYgdHVwLmJhcjoKICAgIGJ6IHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfaWZfZWxzZUAxNQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzU5CiAgICAvLyBzdW0zICs9IDEKICAgIGRpZyA0CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA1CgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNjAKICAgIC8vIGlmIHR1cC5iYXo6CiAgICBkaWcgMTAKICAgIGJ6IHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfaWZfZWxzZUAxNwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzYxCiAgICAvLyBzdW0zICs9IDEKICAgIGRpZyA0CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA1CgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2lmX2Vsc2VAMTc6CiAgICBkaWcgMTEKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEyCiAgICBiIHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckAxMgoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9mb3JAMTk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNjIKICAgIC8vIGZvciBpZHgsIGR5bl90dXAgaW4gdWVudW1lcmF0ZShhcnI0KToKICAgIGRpZyA2CiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgYnVyeSAxNQogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgMTQKCnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckAyMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM2MgogICAgLy8gZm9yIGlkeCwgZHluX3R1cCBpbiB1ZW51bWVyYXRlKGFycjQpOgogICAgZGlnIDEzCiAgICBkaWcgMTUKICAgIDwKICAgIGJ6IHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfZm9yQDIzCiAgICBkaWcgNgogICAgZGlnIDE0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9yZWFkX2R5bmFtaWNfZWxlbWVudAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBsZW4KICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM2MwogICAgLy8gc3VtNCArPSBkeW5fdHVwLmZvbwogICAgZGlnIDgKICAgIHVuY292ZXIgMgogICAgKwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzY0CiAgICAvLyBzdW00ICs9IGR5bl90dXAuYmFyLmJ5dGVzLmxlbmd0aAogICAgc3dhcAogICAgbGVuCiAgICBzd2FwCiAgICBkaWcgMQogICAgKwogICAgYnVyeSA4CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNjUKICAgIC8vIGFzc2VydCBkeW5fdHVwLmJhci5ieXRlcy5sZW5ndGggPT0gaWR4LCAiZXhwZWN0ZWQgc3RyaW5nIGxlbmd0aCB0byBtYXRjaCBpbmRleCIKICAgIGRpZyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHN0cmluZyBsZW5ndGggdG8gbWF0Y2ggaW5kZXgKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDE0CiAgICBiIHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckAyMAoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9mb3JAMjM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkaWcgMgogICAgaXRvYgogICAgZGlnIDQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDUKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF91aW50NjRfcmV0dXJuW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF91aW50NjRfcmV0dXJuOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzcxCiAgICAvLyBhcnIgPSBJbW11dGFibGVBcnJheSgoVUludDY0KDEpLCBVSW50NjQoMiksIFVJbnQ2NCgzKSkpCiAgICBwdXNoYnl0ZXMgMHgwMDAzMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNzIKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfdWludDY0X3JldHVybl9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNzIKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogdGVzdF91aW50NjRfcmV0dXJuX2FmdGVyX2ZvckA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNzMKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoaSkKICAgIGR1cG4gMgogICAgaXRvYgogICAgZGlnIDMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNzMKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoaSkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBidXJ5IDMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM3MgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIHRlc3RfdWludDY0X3JldHVybl9mb3JfaGVhZGVyQDIKCnRlc3RfdWludDY0X3JldHVybl9hZnRlcl9mb3JANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgZGlnIDIKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2Jvb2xfcmV0dXJuW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9ib29sX3JldHVybjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM3OAogICAgLy8gYXJyID0gSW1tdXRhYmxlQXJyYXkoKFRydWUsIEZhbHNlLCBUcnVlLCBGYWxzZSwgVHJ1ZSkpCiAgICBwdXNoYnl0ZXMgMHgwMDA1YTgKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM3OQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9ib29sX3JldHVybl9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNzkKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogdGVzdF9ib29sX3JldHVybl9hZnRlcl9mb3JANQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzgwCiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKGkgJSAyID09IDApCiAgICBkdXBuIDIKICAgIGludGNfMiAvLyAyCiAgICAlCiAgICAhCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZGlnIDMKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICBkdXAKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYml0cwogICAgYnVyeSAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozNzkKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2Jvb2xfcmV0dXJuX2Zvcl9oZWFkZXJAMgoKdGVzdF9ib29sX3JldHVybl9hZnRlcl9mb3JANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgZGlnIDIKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X3R1cGxlX3JldHVybltyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfdHVwbGVfcmV0dXJuOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzgzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mzg1CiAgICAvLyBhcnIgPSBJbW11dGFibGVBcnJheSgoTXlUdXBsZShVSW50NjQoKSwgVHJ1ZSwgRmFsc2UpLCkpCiAgICBwdXNoYnl0ZXMgMHgwMDAxMDAwMDAwMDAwMDAwMDAwMDgwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozODYKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfdHVwbGVfcmV0dXJuX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM4NgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiB0ZXN0X3R1cGxlX3JldHVybl9hZnRlcl9mb3JANQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mzg3CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKE15VHVwbGUoZm9vPWksIGJhcj1pICUgMiA9PSAwLCBiYXo9aSAlIDMgPT0gMCkpCiAgICBkdXBuIDIKICAgIGludGNfMiAvLyAyCiAgICAlCiAgICAhCiAgICBkaWcgMQogICAgcHVzaGludCAzCiAgICAlCiAgICAhCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIGludGNfMSAvLyAxCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgY29uY2F0CiAgICBkaWcgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM4NwogICAgLy8gYXJyID0gYXJyLmFwcGVuZChNeVR1cGxlKGZvbz1pLCBiYXI9aSAlIDIgPT0gMCwgYmF6PWkgJSAzID09IDApKQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICByZXBsYWNlMiAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ1cnkgMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6Mzg2CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXBwZW5kKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgdGVzdF90dXBsZV9yZXR1cm5fZm9yX2hlYWRlckAyCgp0ZXN0X3R1cGxlX3JldHVybl9hZnRlcl9mb3JANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM4MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgZGlnIDIKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2R5bmFtaWNfdHVwbGVfcmV0dXJuW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9keW5hbWljX3R1cGxlX3JldHVybjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM5MgogICAgLy8gYXJyID0gSW1tdXRhYmxlQXJyYXkoKE15RHluYW1pY1NpemVkVHVwbGUoVUludDY0KCksIFN0cmluZygiSGVsbG8iKSksKSkKICAgIHB1c2hieXRlcyAweDAwMDEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMGEwMDA1NDg2NTZjNmM2ZgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6MzkzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXBwZW5kKToKICAgIGludGNfMCAvLyAwCgp0ZXN0X2R5bmFtaWNfdHVwbGVfcmV0dXJuX2Zvcl9oZWFkZXJAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM5MwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiB0ZXN0X2R5bmFtaWNfdHVwbGVfcmV0dXJuX2FmdGVyX2ZvckA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozOTQKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoTXlEeW5hbWljU2l6ZWRUdXBsZShpLCB0aW1lcyhpKSkpCiAgICBkdXBuIDIKICAgIGNhbGxzdWIgdGltZXMKICAgIGRpZyAxCiAgICBpdG9iCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjIDYgLy8gMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozOTMKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiB0ZXN0X2R5bmFtaWNfdHVwbGVfcmV0dXJuX2Zvcl9oZWFkZXJAMgoKdGVzdF9keW5hbWljX3R1cGxlX3JldHVybl9hZnRlcl9mb3JANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgZGlnIDIKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2NvbnZlcnRfdG9fYXJyYXlfYW5kX2JhY2tbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2NvbnZlcnRfdG9fYXJyYXlfYW5kX2JhY2s6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTozOTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICBzd2FwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MDIKICAgIC8vIG11dGFibGUuZXh0ZW5kKGFycikKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MDMKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfY29udmVydF90b19hcnJheV9hbmRfYmFja19mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MDMKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogdGVzdF9jb252ZXJ0X3RvX2FycmF5X2FuZF9iYWNrX2FmdGVyX2ZvckA1CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MDQKICAgIC8vIG11dGFibGUuYXBwZW5kKE15VHVwbGUoZm9vPWksIGJhcj1pICUgMiA9PSAwLCBiYXo9aSAlIDMgPT0gMCkpCiAgICBkdXBuIDIKICAgIGludGNfMiAvLyAyCiAgICAlCiAgICAhCiAgICBkaWcgMQogICAgcHVzaGludCAzCiAgICAlCiAgICAhCiAgICBkaWcgNAogICAgY292ZXIgMwogICAgZGlnIDIKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIGJ1cnkgMwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDAzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXBwZW5kKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgdGVzdF9jb252ZXJ0X3RvX2FycmF5X2FuZF9iYWNrX2Zvcl9oZWFkZXJAMgoKdGVzdF9jb252ZXJ0X3RvX2FycmF5X2FuZF9iYWNrX2FmdGVyX2ZvckA1OgogICAgZGlnIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQwNQogICAgLy8gcmV0dXJuIG11dGFibGUuZnJlZXplKCkKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDkKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjM5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfY29uY2F0X3dpdGhfYXJjNF90dXBsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfY29uY2F0X3dpdGhfYXJjNF90dXBsZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQwNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjIDggLy8gMHgxNTFmN2M3NTAwMDQwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfY29uY2F0X3dpdGhfbmF0aXZlX3R1cGxlW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9jb25jYXRfd2l0aF9uYXRpdmVfdHVwbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGV4dHJhY3QgMCA4CiAgICBzd2FwCiAgICBleHRyYWN0IDggOAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDIwCiAgICAvLyByZXN1bHQgPSBwcmVmaXggKyBhcmcKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDE1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWMgOCAvLyAweDE1MWY3Yzc1MDAwNDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9keW5hbWljX2NvbmNhdF93aXRoX2FyYzRfdHVwbGVbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2R5bmFtaWNfY29uY2F0X3dpdGhfYXJjNF90dXBsZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQyOAogICAgLy8gcmVzdWx0ID0gcHJlZml4ICsgYXJnCiAgICBleHRyYWN0IDQgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDI3CiAgICAvLyBwcmVmaXggPSBJbW11dGFibGVBcnJheSgoYXJjNC5TdHJpbmcoImEiKSwgYXJjNC5TdHJpbmcoImIiKSkpCiAgICBieXRlYyA5IC8vIDB4MDAwMjAwMDQwMDA3MDAwMTYxMDAwMTYyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MjgKICAgIC8vIHJlc3VsdCA9IHByZWZpeCArIGFyZwogICAgc3dhcAogICAgaW50Y18yIC8vIDIKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzLmFydGlmYWN0cy5BcnJheXMuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9keW5hbWljX2NvbmNhdF93aXRoX25hdGl2ZV90dXBsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfZHluYW1pY19jb25jYXRfd2l0aF9uYXRpdmVfdHVwbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGRpZyAyCiAgICBsZW4KICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQzNgogICAgLy8gcmVzdWx0ID0gcHJlZml4ICsgYXJnCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQzNQogICAgLy8gcHJlZml4ID0gSW1tdXRhYmxlQXJyYXkoKGFyYzQuU3RyaW5nKCJhIiksIGFyYzQuU3RyaW5nKCJiIikpKQogICAgYnl0ZWMgOSAvLyAweDAwMDIwMDA0MDAwNzAwMDE2MTAwMDE2MgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDM2CiAgICAvLyByZXN1bHQgPSBwcmVmaXggKyBhcmcKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfY29uY2F0X2ltbXV0YWJsZV9keW5hbWljW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9jb25jYXRfaW1tdXRhYmxlX2R5bmFtaWM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NDMKICAgIC8vIHJldHVybiBpbW0xICsgaW1tMgogICAgZHVwCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0MzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMuYXJ0aWZhY3RzLkFycmF5cy5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2ltbXV0YWJsZV9hcmM0W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9pbW11dGFibGVfYXJjNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ0NwogICAgLy8gYXNzZXJ0IGltbSwgImV4cGVjdGVkIG5vbiBlbXB0eSBhcnJheSIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIG5vbiBlbXB0eSBhcnJheQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDQ4CiAgICAvLyBpbW0gPSBpbW0ucmVwbGFjZShpbW0ubGVuZ3RoIC0gMSwgaW1tWzBdKQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMTYKICAgIHN3YXAKICAgIHB1c2hpbnQgMTYKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICByZXBsYWNlMyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy5hcnRpZmFjdHMuQXJyYXlzLmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfaW1tX2ZpeGVkX2Fycltyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfaW1tX2ZpeGVkX2FycjoKICAgIGJ5dGVjXzEgLy8gIiIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ1MwogICAgLy8gYXJyMSA9IHplcm9fYnl0ZXMoTmF0aXZlU3RydWN0MykKICAgIHB1c2hpbnQgNDgKICAgIGJ6ZXJvCiAgICBkdXAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ1NAogICAgLy8gc3RydWN0MTIgPSBOYXRpdmVTdHJ1Y3QoVHhuLm51bV9hcHBfYXJncyArIDEsIFR4bi5udW1fYXBwX2FyZ3MgKyAyKQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMSAvLyAxCiAgICArCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NTUKICAgIC8vIGFycjIgPSBOYXRpdmVTdHJ1Y3QzKChzdHJ1Y3QxMiwgc3RydWN0MTIsIHN0cnVjdDEyKSkKICAgIGR1cAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ1NwogICAgLy8gYXNzZXJ0IGFycjEgIT0gYXJyMiwgImV4cGVjdGVkIGFycmF5cyB0byBiZSBkaWZmZXJlbnQiCiAgICAhPQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGFycmF5cyB0byBiZSBkaWZmZXJlbnQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ2MAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDMpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfaW1tX2ZpeGVkX2Fycl9mb3JfaGVhZGVyQDI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NjAKICAgIC8vIGZvciBpIGluIHVyYW5nZSgzKToKICAgIGR1cAogICAgcHVzaGludCAzCiAgICA8CiAgICBieiB0ZXN0X2ltbV9maXhlZF9hcnJfYWZ0ZXJfZm9yQDUKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ2MQogICAgLy8gYXJyMSA9IGFycjEucmVwbGFjZShpLCBzdHJ1Y3QxMikKICAgIGR1cG4gMgogICAgcHVzaGludCAxNgogICAgKgogICAgZGlnIDUKICAgIHN3YXAKICAgIGRpZyA1CiAgICByZXBsYWNlMyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ1cnkgNQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDYwCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMyk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIHRlc3RfaW1tX2ZpeGVkX2Fycl9mb3JfaGVhZGVyQDIKCnRlc3RfaW1tX2ZpeGVkX2Fycl9hZnRlcl9mb3JANToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ2MwogICAgLy8gYXNzZXJ0IGFycjEgPT0gYXJyMiwgImV4cGVjdGVkIGFycmF5cyB0byBiZSB0aGUgc2FtZSIKICAgIGRpZyAzCiAgICBkaWcgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBhcnJheXMgdG8gYmUgdGhlIHNhbWUKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDUKCnRlc3RfaW1tX2ZpeGVkX2Fycl9mb3JfaGVhZGVyQDY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NjUKICAgIC8vIGZvciBzdHJ1Y3RfaXQgaW4gYXJyMToKICAgIGRpZyA0CiAgICBwdXNoaW50IDMKICAgIDwKICAgIGJ6IHRlc3RfaW1tX2ZpeGVkX2Fycl9hZnRlcl9mb3JAOQogICAgZGlnIDQKICAgIGR1cAogICAgcHVzaGludCAxNgogICAgKgogICAgZGlnIDUKICAgIHN3YXAKICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDY2CiAgICAvLyBhc3NlcnQgc3RydWN0X2l0ID09IHN0cnVjdDEyLCAiZXhwZWN0ZWQgaXRlbXMgb24gaXRlcmF0aW9uIHRvIGJlIHRoZSBzYW1lIgogICAgZGlnIDQKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgaXRlbXMgb24gaXRlcmF0aW9uIHRvIGJlIHRoZSBzYW1lCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA1CiAgICBiIHRlc3RfaW1tX2ZpeGVkX2Fycl9mb3JfaGVhZGVyQDYKCnRlc3RfaW1tX2ZpeGVkX2Fycl9hZnRlcl9mb3JAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ2OAogICAgLy8gc2VsZi5pbW1fZml4ZWRfYXJyID0gYXJyMQogICAgYnl0ZWMgMTAgLy8gImltbV9maXhlZF9hcnIiCiAgICBkaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDcyCiAgICAvLyBhc3NlcnQgc3VtX2ltbV9maXhlZChtdXRfYXJyLmZyZWV6ZSgpKSA9PSAxNSwgImV4cGVjdGVkIHN1bSB0byBiZSAxNSIKICAgIGR1cAogICAgY2FsbHN1YiBzdW1faW1tX2ZpeGVkCiAgICBwdXNoaW50IDE1CiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIHN1bSB0byBiZSAxNQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDc0CiAgICAvLyBtdXRfYXJyWzBdID0gTmF0aXZlU3RydWN0KFVJbnQ2NCgpLCBVSW50NjQoKSkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICByZXBsYWNlMiAwIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL0FycmF5cy9pbW11dGFibGUucHk6NDc1CiAgICAvLyBhc3NlcnQgc3VtX2ltbV9maXhlZChtdXRfYXJyLmZyZWV6ZSgpKSA9PSAxMCwgImV4cGVjdGVkIHN1bSB0byBiZSAxMCIKICAgIGNhbGxzdWIgc3VtX2ltbV9maXhlZAogICAgcHVzaGludCAxMAogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBzdW0gdG8gYmUgMTAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9BcnJheXMvaW1tdXRhYmxlLnB5OjQ3NwogICAgLy8gcmV0dXJuIHNlbGYuaW1tX2ZpeGVkX2FycgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEwIC8vICJpbW1fZml4ZWRfYXJyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmltbV9maXhlZF9hcnIgZXhpc3RzCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvQXJyYXlzL2ltbXV0YWJsZS5weTo0NTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAECCCYLBBUffHUAAgAAAQACAAJA/////////////////////////////////////////////////////////////////////////////////////wIACgdiaWd1aW50FhUffHUABAAAAAAAAAABAAAAAAAAAAIMAAIABAAHAAFhAAFiDWltbV9maXhlZF9hcnIxG0EAtzEZFEQxGESCGARE1C+ZBLfqpgsEdD1w7QQcfgSUBKLVhgsE4F/FZAQeCSuDBAExAmIEyGVKmASJ0Zb4BGy3yZEEmJi/AgT2th7oBGC4ansEc60oPwRSnfrpBCBtUU8E4GRl4gTsAwCiBOzfFK8EURrKZAQphS5PBG1Ko1gEt8uWvTYaAI4YAngDYASEBTwF6AZLBxsH7wf1CAQI0wnnCvYLQAtzC8MMGQxoDHEMhAyXDMAM1gzzADEZFDEYFBBDigIBi/4Vi/8Ji/4iTwJSSSJZIwkWVwYAXACJigEBi/8iWSMJSRZXBgBMJAskiwKLAQ5BABuL/4sCSU4CWSQJFlcGAIsATFCMACQIjAJC/92L/1cCAEmLAVmLAkxSiwBMUIwAiYoCAYv+VwIAi/4iWYv/JAtLAkxZSwIVi/8jCEkkC0sFTFlPBE8CCU1SiYoEASlHAov8IllHAov+CEkWVwYAi/xMXABOAkyBBwglCklPAoEHCCUKSU4CDEEADIsGiwUJr4sETFCMBCKMAIsDgRAISYwCi/4IjAGLAosBDEEAIIv9iwBJTgJTiwSLAklOA08CVIwEIwiMAov/CIwAQv/YiwSMAImKAwGL/SJZSSQLJAiL/SRLAlKL/yQLr1CL/RWL/U8DTwJSi/5QUEyL/whJFlcGAEwkC0kiiwSLAgxBACOLA0kWVwYAiwCLBElOBE8CXUmMAEsBWSQICIwDJAiMBEL/1YsBiwBQjACJigMBKYv9IllJi/8IFlcGAEyL/VcCAEwkC4v/JAsiiwWLAwxBAByLAosFSU4CWYsECBZXBgCLAUxQjAEkCIwFQv/ciwIVjAAijAWLBYsEDEEAHIv+iwVJTgJZiwAIFlcGAIsBTFCMASQIjAVC/9yLAosDiwBSiwFMUIv+FYv+iwRPAlJQjACJigEBIkmLAYEDDEEAH4sBSYEQC4v/TIEQWEkiW4sACEwlWwiMACMIjAFC/9mJigEBKSKLAYv/DEEAEYsAgAEgUIwAiwEjCIwBQv/niYoCASKLAIv/DEEAHosASRaL/iJZIwgWVwYAi/5MXABMUIz+IwiMAEL/2ov+TImACgABAAAAAAAAACqBBYj/wUkiWUmBBhJESSMJSwJXAgBMJQtbgQQSRIErFkwjCBZXBgBPAkxcAExQRwIiWUmBBxJEIwlLAVcCAEwlC1uBKxJEJFuBKhJEIkmBAwxBABBLASWI/StFAkkjCEUBQv/pSwFJIllJgQQSRCMJSwFXAgBMJQtbJBJEgQqI/0VJIllJgQ4SREkjCUsCVwIATCULW4EJEkSBLBZMIwgWVwYATwJMXABMUEkiWUmBDxJEIwlLAVcCAEwlC1uBLBJEgRcWXBJJIlmBDxJESYESW4EXEkSAAWFMZyNDMRsjCRaBQK9JTgKrgAIAAUxQRwIiWUkjEkQjCUxXAgBMgUALgUBYKahEIkmBBQxBAB5HAhZLBKtLA0kiWSMIFlcGAFwATFBFAyMIRQFC/9tLAUkiWUmBBhJESSMJSwJXAgBMgUALgUBYgAEEqEQxGxYnBUyhSRWBQA5ESwWrTCMIFlcGAE8CTFwATFBJIllJgQcSREkjCUsCVwIATIFAC4FAWIBA/////////////////////////////////////////////////////////////////////////////////////qhESwFXAkApqEQjCBZXBgBcACcFUEkiWUklEkQjCUsBVwIATIFAC4FAWCcFqERJVwJAKahEJwe8SCcHTL8jQyk2GgEXKiJJSwMMQQAeMRtLAUlPAhIrIk8CVEsDTCNJiPvwRQMjCEUBQv/bSwEiWUlFBUsDSU4CEkRBAApLA0RLAYEQUxRESwIjDUEADCNLBAxESwGBEVMUREsCJA1BAAskSwQMREsBgRJTREsCgQMNQQASSwIjCUlLBQxEgRAISwJMUxREgAFnSwJnSwJBACVLAyMJSRZXBgBLA1cCAEsCIlRPAoEHCCUKIkxYUCJZSwMjCRJEI0MqIkmBBQxBACNHAiMITCQISwEWTBZQSwNJIlkjCBZXBgBcAExQRQNFAUL/1ksBSSJZSYEFEkRLAVcCAEsCVwIQSSJbTCVbTCMSTCQSEERMIwmBEAuBEFhJIltMJVtMgQUSTIEGEhBEgRCI+mFJIllJgQQSREsBVwIASwJXAhBJIltMJVtMIxJMJBIQREwjCYEQC4EQWEkiW0wlW0yBBBJMgQUSEESAAWNMZyNDKiJJgQUMQQAyRwIkGBRLAYEDCyQYFEsCFisiTwRUI08DVFBLA0kiWSMIFlcGAFwATFBFAyMIRQFC/8dLAUkiWYEFEkRJVwIJSSJbSwGBQFNPAoFBU08CFERMRESAAWRMZyNDKiJJgQUMQQArRwIjCEyvSwEWSwEVFlcGAk8CUEwnBlBMUCcETFBLA0wjiPr/RQNFAUL/zksBIlmBBRJEIkUBSYEFDEEALkpJTgKI+dVJIltLASVZSwIVTwNOAlJXAgBLAiMITwJLARJETBVPAhJERQFC/8tLAYj5YEkiWUmBBBJESwEiiPmbSSJbSwElWUsCFU8DTgJSVwIATCMSIq9PAhIQRCMJSwFMiPl3SSJbSwElWUsCFU8DTgJSVwIATIEEEoEDr08CEhBEgAFlTGcjQyoiSYEFDEEALUcCIwhMiPr/SwEWSwEVFlcGAk8CUEwnBlBMUCcETFBLA0wjiPotRQNFAUL/zEsBIlmBBRJEIkUBSYEFDEEAMUpJTgKI+QNJIltLASVZSwIVTwNOAlJXAgBLAiMITwJLARJETwKI+qBPAhJERQFC/8hLAYj4i0kiWUmBBBJESwEiiPjGSSJbSwElWUsCFU8DTgJSVwIATCMSTCkSEEQjCUsBTIj4pEkiW0sBJVlLAhVPA04CUlcCAEyBBBJMgAMgICASEESAAWZMZyNDNhoBsCNDgAb6QMBTAAI2GgFQsCNDIkcCKUcFNhoBFzYaAiJJSwMMQQBAKkUMIkUFSwRLAQxBABxLBEkWSw1JIlkjCBZXBgBcAExQRQ0jCEUFQv/cJwRLDFBLAkwjiPkoRQJJIwhFAUL/uSpFCksBIllFCSJFB0sGSwkMQQBfSwFXAgBLByQLSwFMWUpZJQskCFhJRQwiRQUiWUUIIkUGSwVLCAxBABlLClcCAEsGSU4CJQtbSwUIRQUjCEUGQv/fSwMWSwpJIlkjCBZXBgBcAExQRQpLBiMIRQdC/5koSwpQsCNDKkcDIkmBBQxBALxHAhRLASMSKyJPA1QjTwJUSwZJIlkjCBZXBgBcAEsBUEUHSwEjCEsCJBJLA4EDEksEgQQSSwWBBRJLBoEGEksHFk8HJE8HVIEDTwZUgQRPBVSBBU8EVIEGTwNUSlBLAxZMSwFQSwlJIlkjCBZXBgBcAExQRQlLBIEHEk8CgQdPAlRPAkxQSUsCUEsHSSJZIwgWVwYAXABMUEUHTwMlEisiTwJUUExQSwNJIlkjCBZXBgBcAExQRQNFAUL/PUsESSJZgQUSREsESSJZgQUSREsESSJZgQUSREsESSJZgQUSRIAFYm9vbDJPBGeABWJvb2w3TwNngAVib29sOE8CZ4AFYm9vbDlMZyNDKUcGNhoBNhoCNhoDNhoEIkcDNhoBIlkiSUsCDEEAGUsJVwIASwFJTgIlC1tLBAhFBCMIRQFC/+BLCCJZRREiRQ1LDEsRDEEAG0sMgRAISwlMU0EABksDIwhFBEsMIwhFDUL/3UsHIllFECJFDEsLSxAMQQBASwdXAgBLDIEJC4EJWEkiW0sBgUBTTwKBQVNFDUsGTwIIRQZBAAZLBCMIRQVLCkEABksEIwhFBUsLIwhFDEL/uEsGIllFDyJFDksNSw8MQQA0SwZLDklOAoj1tkkiW0sBJVlLAhVPA04CUlcCAEsITwIITBVMSwEIRQhLARJEIwhFDkL/xEsCFksEFlBLBRZQSwYWUChMULAjQzYaAReAGgADAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAADIklLAwxBABtHAhZLA0kiWSMIFlcGAFwATFBFAyMIRQFC/94oSwJQsCNDNhoBF4ADAAWoIklLAwxBABtHAiQYFCsiTwJUSwNMI0mI9TRFAyMIRQFC/94oSwJQsCNDNhoBF4ALAAEAAAAAAAAAAIAiSUsDDEEAMEcCJBgUSwGBAxgUSwIWKyJPBFQjTwNUUEsDSSJZIwgWVwYAXABMUEUDIwhFAUL/yShLAlCwI0M2GgEXgBUAAQACAAAAAAAAAAAACgAFSGVsbG8iSUsDDEEALEcCiPZASwEWSwEVFlcGAk8CUEwnBlBMUCcETFBLA0wjiPVuRQMjCEUBQv/NKEsCULAjQzYaATYaAhdMVwIAIklLAwxBAClHAiQYFEsBgQMYFEsETgNLAhYrIk8EVCNPA1RQTwJMUEUDIwhFAUL/0EsBSRWBCQoWVwYCTFAoTFCwI0MnCDYaAVCwI0M2GgFJVwAITFcICFAnCExQsCNDNhoBVwQAJwlMJIj0fyhMULAjQzYaAUkiWUsBJFlLAk8CSwJSSwIVTwNPA08CUlAnCUwkiPRWKExQsCNDNhoBNhoCSVcCAEwiWYj0pyhMULAjQzYaAUkiWUlEIwlLAVcCEEyBEAskCExdKExQsCNDKYEwr0kxGyMIMRskCEwWTBZQSU4CSUsBUExQSU4CE0QiSYEDDEEAFEcCgRALSwVMSwVdRQUjCEUBQv/lSwNLAhJEIkUFSwSBAwxBABdLBEmBEAtLBUyBEFhLBBJEIwhFBUL/4ScKSwRJTgJnSYj0m4EPEkSAEAAAAAAAAAAAAAAAAAAAAABcAIj0gIEKEkQiJwplRChMULAjQw==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 8, "patch": 1 } }, "events": [ { "name": "emit_test", "args": [ { "type": "uint64[]", "name": "field1" } ] } ], "templateVariables": {} }