{ "name": "OrgConsent", "structs": { "ConsentRequest": [ { "name": "org", "type": "address" }, { "name": "user", "type": "address" }, { "name": "doc_type", "type": "uint8" }, { "name": "reason", "type": "string" }, { "name": "id_details", "type": "string" }, { "name": "requested_fields", "type": "uint16" }, { "name": "shared_fields", "type": "uint16" }, { "name": "expiry", "type": "uint64" }, { "name": "duration", "type": "uint64" }, { "name": "created_at", "type": "uint64" }, { "name": "status", "type": "uint8" } ] }, "methods": [ { "name": "set_whitelist_app", "args": [ { "type": "uint64", "name": "app" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "request_consent", "args": [ { "type": "address", "name": "user" }, { "type": "uint8", "name": "doc_type" }, { "type": "string", "name": "reason" }, { "type": "string", "name": "id_details" }, { "type": "uint16", "name": "requested_fields" }, { "type": "uint64", "name": "duration" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "approve_consent", "args": [ { "type": "uint64", "name": "request_id" }, { "type": "string", "name": "id_details" }, { "type": "uint16", "name": "shared_fields" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "reject_consent", "args": [ { "type": "uint64", "name": "request_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "revoke_consent", "args": [ { "type": "uint64", "name": "request_id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_request", "args": [ { "type": "uint64", "name": "request_id" } ], "returns": { "type": "(address,address,uint8,string,string,uint16,uint16,uint64,uint64,uint64,uint8)", "struct": "ConsentRequest" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "is_consent_valid", "args": [ { "type": "uint64", "name": "request_id" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 2, "bytes": 1 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "owner": { "keyType": "AVMString", "valueType": "address", "key": "b3duZXI=" }, "whitelist_app": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "d2hpdGVsaXN0X2FwcA==" }, "request_count": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cmVxdWVzdF9jb3VudA==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "requests": { "keyType": "uint64", "valueType": "ConsentRequest", "prefix": "Y3Jf" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 845 ], "errorMessage": "Can only revoke approved consent" }, { "pc": [ 510 ], "errorMessage": "Cannot share unrequested fields" }, { "pc": [ 249 ], "errorMessage": "Invalid doc type" }, { "pc": [ 254 ], "errorMessage": "Must request at least one field" }, { "pc": [ 495 ], "errorMessage": "Must share at least one field" }, { "pc": [ 169 ], "errorMessage": "Only owner" }, { "pc": [ 470 ], "errorMessage": "Only the user can approve" }, { "pc": [ 667 ], "errorMessage": "Only the user can reject" }, { "pc": [ 835 ], "errorMessage": "Only the user can revoke" }, { "pc": [ 299 ], "errorMessage": "Organisation not whitelisted" }, { "pc": [ 479, 676 ], "errorMessage": "Request already resolved" }, { "pc": [ 490 ], "errorMessage": "Request expired" }, { "pc": [ 452, 650, 818, 978, 1005 ], "errorMessage": "Request not found" }, { "pc": [ 242 ], "errorMessage": "Whitelist app not set" }, { "pc": [ 288 ], "errorMessage": "application log value is not the result of an ABI return" }, { "pc": [ 167 ], "errorMessage": "check self.owner exists" }, { "pc": [ 304 ], "errorMessage": "check self.request_count exists" }, { "pc": [ 240 ], "errorMessage": "check self.whitelist_app exists" }, { "pc": [ 197, 213, 426 ], "errorMessage": "invalid array length header" }, { "pc": [ 207, 220, 433 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 183 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 228, 441 ], "errorMessage": "invalid number of bytes for arc4.uint16" }, { "pc": [ 159, 236, 419, 640, 808, 968, 994 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 191 ], "errorMessage": "invalid number of bytes for arc4.uint8" }, { "pc": [ 296 ], "errorMessage": "invalid number of bytes for bool" }, { "pc": [ 328, 340, 542, 569, 695, 864 ], "errorMessage": "overflow" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayA4IDEgMCAyCiAgICBieXRlY2Jsb2NrIDB4NjM3MjVmIDB4MTUxZjdjNzUgMHgwMDYyICJ3aGl0ZWxpc3RfYXBwIiAicmVxdWVzdF9jb3VudCIgMHgwMDAwICJvd25lciIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MzEKICAgIC8vIHNlbGYub3duZXIgPSBUeG4uc2VuZGVyCiAgICBieXRlYyA2IC8vICJvd25lciIKICAgIHR4biBTZW5kZXIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjMyCiAgICAvLyBzZWxmLndoaXRlbGlzdF9hcHAgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzMgLy8gIndoaXRlbGlzdF9hcHAiCiAgICBpbnRjXzIgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MzMKICAgIC8vIHNlbGYucmVxdWVzdF9jb3VudCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgNCAvLyAicmVxdWVzdF9jb3VudCIKICAgIGludGNfMiAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjI5CiAgICAvLyBjbGFzcyBPcmdDb25zZW50KEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxNgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4ZGRhNjY0OWUgMHg0OTkzYmM1YiAweDc0ZjY5MWIzIDB4YWZjNDkzZGUgMHhiZWZkNjM2ZiAweDE5MWM0YTM0IDB4ZDQ4YzUzODEgLy8gbWV0aG9kICJzZXRfd2hpdGVsaXN0X2FwcCh1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVxdWVzdF9jb25zZW50KGFkZHJlc3MsdWludDgsc3RyaW5nLHN0cmluZyx1aW50MTYsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiYXBwcm92ZV9jb25zZW50KHVpbnQ2NCxzdHJpbmcsdWludDE2KXZvaWQiLCBtZXRob2QgInJlamVjdF9jb25zZW50KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZXZva2VfY29uc2VudCh1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0X3JlcXVlc3QodWludDY0KShhZGRyZXNzLGFkZHJlc3MsdWludDgsc3RyaW5nLHN0cmluZyx1aW50MTYsdWludDE2LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ4KSIsIG1ldGhvZCAiaXNfY29uc2VudF92YWxpZCh1aW50NjQpYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHNldF93aGl0ZWxpc3RfYXBwIHJlcXVlc3RfY29uc2VudCBhcHByb3ZlX2NvbnNlbnQgcmVqZWN0X2NvbnNlbnQgcmV2b2tlX2NvbnNlbnQgZ2V0X3JlcXVlc3QgaXNfY29uc2VudF92YWxpZAogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDE2OgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMub3JnLmNvbnRyYWN0Lk9yZ0NvbnNlbnQuc2V0X3doaXRlbGlzdF9hcHBbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfd2hpdGVsaXN0X2FwcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjM4CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLm93bmVyLCAiT25seSBvd25lciIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMiAvLyAwCiAgICBieXRlYyA2IC8vICJvd25lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vd25lciBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTozOQogICAgLy8gc2VsZi53aGl0ZWxpc3RfYXBwID0gYXBwLmlkCiAgICBieXRlY18zIC8vICJ3aGl0ZWxpc3RfYXBwIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLm9yZy5jb250cmFjdC5PcmdDb25zZW50LnJlcXVlc3RfY29uc2VudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlcXVlc3RfY29uc2VudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6NDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgaW50Y18yIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMyAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDE2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjUxCiAgICAvLyBhc3NlcnQgc2VsZi53aGl0ZWxpc3RfYXBwICE9IDAsICJXaGl0ZWxpc3QgYXBwIG5vdCBzZXQiCiAgICBpbnRjXzIgLy8gMAogICAgYnl0ZWNfMyAvLyAid2hpdGVsaXN0X2FwcCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi53aGl0ZWxpc3RfYXBwIGV4aXN0cwogICAgZHVwCiAgICBhc3NlcnQgLy8gV2hpdGVsaXN0IGFwcCBub3Qgc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjUyCiAgICAvLyBhc3NlcnQgZG9jX3R5cGUubmF0aXZlIDw9IDIsICJJbnZhbGlkIGRvYyB0eXBlIgogICAgdW5jb3ZlciA2CiAgICBidG9pCiAgICBkdXAKICAgIGludGNfMyAvLyAyCiAgICA8PQogICAgYXNzZXJ0IC8vIEludmFsaWQgZG9jIHR5cGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6NTMKICAgIC8vIGFzc2VydCByZXF1ZXN0ZWRfZmllbGRzLm5hdGl2ZSA+IDAsICJNdXN0IHJlcXVlc3QgYXQgbGVhc3Qgb25lIGZpZWxkIgogICAgdW5jb3ZlciAzCiAgICBidG9pCiAgICBkdXAKICAgIGFzc2VydCAvLyBNdXN0IHJlcXVlc3QgYXQgbGVhc3Qgb25lIGZpZWxkCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjU1LTYwCiAgICAvLyAjIFZlcmlmeSBjYWxsZXIgaXMgYSB3aGl0ZWxpc3RlZCBvcmcgdmlhIGlubmVyIGFwcCBjYWxsCiAgICAvLyBpc193aGl0ZWxpc3RlZCwgX3R4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgRHguaXNfd2hpdGVsaXN0ZWQsCiAgICAvLyAgICAgVHhuLnNlbmRlciwKICAgIC8vICAgICBhcHBfaWQ9QXBwbGljYXRpb24oc2VsZi53aGl0ZWxpc3RfYXBwKSwKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6NTgKICAgIC8vIFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTo1NS02MAogICAgLy8gIyBWZXJpZnkgY2FsbGVyIGlzIGEgd2hpdGVsaXN0ZWQgb3JnIHZpYSBpbm5lciBhcHAgY2FsbAogICAgLy8gaXNfd2hpdGVsaXN0ZWQsIF90eG4gPSBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIER4LmlzX3doaXRlbGlzdGVkLAogICAgLy8gICAgIFR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXBwX2lkPUFwcGxpY2F0aW9uKHNlbGYud2hpdGVsaXN0X2FwcCksCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHg4NDc0NDYxYyAvLyBtZXRob2QgImlzX3doaXRlbGlzdGVkKGFkZHJlc3MpYm9vbCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMiAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGxvZyB2YWx1ZSBpcyBub3QgdGhlIHJlc3VsdCBvZiBhbiBBQkkgcmV0dXJuCiAgICBleHRyYWN0IDQgMAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sCiAgICBpbnRjXzIgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjYxCiAgICAvLyBhc3NlcnQgaXNfd2hpdGVsaXN0ZWQsICJPcmdhbmlzYXRpb24gbm90IHdoaXRlbGlzdGVkIgogICAgYXNzZXJ0IC8vIE9yZ2FuaXNhdGlvbiBub3Qgd2hpdGVsaXN0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6NjMKICAgIC8vIHNlbGYucmVxdWVzdF9jb3VudCArPSAxCiAgICBpbnRjXzIgLy8gMAogICAgYnl0ZWMgNCAvLyAicmVxdWVzdF9jb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZXF1ZXN0X2NvdW50IGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ5dGVjIDQgLy8gInJlcXVlc3RfY291bnQiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6NjQtNjYKICAgIC8vICMgZXhwaXJ5ID0gcmVzcG9uc2UgZGVhZGxpbmUgKDI0aCBmb3IgdXNlciB0byByZXNwb25kKQogICAgLy8gIyBkdXJhdGlvbiA9IGNvbnNlbnQgd2luZG93IChzdGFydHMgY291bnRpbmcgb25seSBhZnRlciBhcHByb3ZhbCkKICAgIC8vIHJlc3BvbnNlX2RlYWRsaW5lID0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgKyBVSW50NjQoODY0MDApICAjIDI0aCByZXNwb25zZSB3aW5kb3cKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIHB1c2hpbnQgODY0MDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6NjkKICAgIC8vIG9yZz1hcmM0LkFkZHJlc3MoVHhuLnNlbmRlciksCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjcxCiAgICAvLyBkb2NfdHlwZT1hcmM0LlVJbnQ4KGRvY190eXBlLm5hdGl2ZSksCiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzAgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA3IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6NzQKICAgIC8vIHJlcXVlc3RlZF9maWVsZHM9YXJjNC5VSW50MTYocmVxdWVzdGVkX2ZpZWxkcy5uYXRpdmUpLAogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgcHVzaGludCAxNgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA2IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6NzYKICAgIC8vIGV4cGlyeT1hcmM0LlVJbnQ2NChyZXNwb25zZV9kZWFkbGluZSksCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6NzgKICAgIC8vIGNyZWF0ZWRfYXQ9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXApLAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTo2OC04MAogICAgLy8gc2VsZi5yZXF1ZXN0c1tzZWxmLnJlcXVlc3RfY291bnRdID0gQ29uc2VudFJlcXVlc3QoCiAgICAvLyAgICAgb3JnPWFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIC8vICAgICB1c2VyPWFyYzQuQWRkcmVzcyh1c2VyKSwKICAgIC8vICAgICBkb2NfdHlwZT1hcmM0LlVJbnQ4KGRvY190eXBlLm5hdGl2ZSksCiAgICAvLyAgICAgcmVhc29uPWFyYzQuU3RyaW5nKHJlYXNvbi5uYXRpdmUpLAogICAgLy8gICAgIGlkX2RldGFpbHM9YXJjNC5TdHJpbmcoaWRfZGV0YWlscy5uYXRpdmUpLAogICAgLy8gICAgIHJlcXVlc3RlZF9maWVsZHM9YXJjNC5VSW50MTYocmVxdWVzdGVkX2ZpZWxkcy5uYXRpdmUpLAogICAgLy8gICAgIHNoYXJlZF9maWVsZHM9YXJjNC5VSW50MTYoMCksCiAgICAvLyAgICAgZXhwaXJ5PWFyYzQuVUludDY0KHJlc3BvbnNlX2RlYWRsaW5lKSwKICAgIC8vICAgICBkdXJhdGlvbj1hcmM0LlVJbnQ2NChkdXJhdGlvbiksCiAgICAvLyAgICAgY3JlYXRlZF9hdD1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksCiAgICAvLyAgICAgc3RhdHVzPWFyYzQuVUludDgoMCksICAjIFBlbmRpbmcKICAgIC8vICkKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciAxMAogICAgY29uY2F0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAweDAwNjIKICAgIGNvbmNhdAogICAgcHVzaGludCA5OAogICAgdW5jb3ZlciA4CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTo3NQogICAgLy8gc2hhcmVkX2ZpZWxkcz1hcmM0LlVJbnQxNigwKSwKICAgIGJ5dGVjIDUgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjY4LTgwCiAgICAvLyBzZWxmLnJlcXVlc3RzW3NlbGYucmVxdWVzdF9jb3VudF0gPSBDb25zZW50UmVxdWVzdCgKICAgIC8vICAgICBvcmc9YXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIHVzZXI9YXJjNC5BZGRyZXNzKHVzZXIpLAogICAgLy8gICAgIGRvY190eXBlPWFyYzQuVUludDgoZG9jX3R5cGUubmF0aXZlKSwKICAgIC8vICAgICByZWFzb249YXJjNC5TdHJpbmcocmVhc29uLm5hdGl2ZSksCiAgICAvLyAgICAgaWRfZGV0YWlscz1hcmM0LlN0cmluZyhpZF9kZXRhaWxzLm5hdGl2ZSksCiAgICAvLyAgICAgcmVxdWVzdGVkX2ZpZWxkcz1hcmM0LlVJbnQxNihyZXF1ZXN0ZWRfZmllbGRzLm5hdGl2ZSksCiAgICAvLyAgICAgc2hhcmVkX2ZpZWxkcz1hcmM0LlVJbnQxNigwKSwKICAgIC8vICAgICBleHBpcnk9YXJjNC5VSW50NjQocmVzcG9uc2VfZGVhZGxpbmUpLAogICAgLy8gICAgIGR1cmF0aW9uPWFyYzQuVUludDY0KGR1cmF0aW9uKSwKICAgIC8vICAgICBjcmVhdGVkX2F0PWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIC8vICAgICBzdGF0dXM9YXJjNC5VSW50OCgwKSwgICMgUGVuZGluZwogICAgLy8gKQogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTo3OQogICAgLy8gc3RhdHVzPWFyYzQuVUludDgoMCksICAjIFBlbmRpbmcKICAgIHB1c2hieXRlcyAweDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjY4LTgwCiAgICAvLyBzZWxmLnJlcXVlc3RzW3NlbGYucmVxdWVzdF9jb3VudF0gPSBDb25zZW50UmVxdWVzdCgKICAgIC8vICAgICBvcmc9YXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICAgIHVzZXI9YXJjNC5BZGRyZXNzKHVzZXIpLAogICAgLy8gICAgIGRvY190eXBlPWFyYzQuVUludDgoZG9jX3R5cGUubmF0aXZlKSwKICAgIC8vICAgICByZWFzb249YXJjNC5TdHJpbmcocmVhc29uLm5hdGl2ZSksCiAgICAvLyAgICAgaWRfZGV0YWlscz1hcmM0LlN0cmluZyhpZF9kZXRhaWxzLm5hdGl2ZSksCiAgICAvLyAgICAgcmVxdWVzdGVkX2ZpZWxkcz1hcmM0LlVJbnQxNihyZXF1ZXN0ZWRfZmllbGRzLm5hdGl2ZSksCiAgICAvLyAgICAgc2hhcmVkX2ZpZWxkcz1hcmM0LlVJbnQxNigwKSwKICAgIC8vICAgICBleHBpcnk9YXJjNC5VSW50NjQocmVzcG9uc2VfZGVhZGxpbmUpLAogICAgLy8gICAgIGR1cmF0aW9uPWFyYzQuVUludDY0KGR1cmF0aW9uKSwKICAgIC8vICAgICBjcmVhdGVkX2F0PWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIC8vICAgICBzdGF0dXM9YXJjNC5VSW50OCgwKSwgICMgUGVuZGluZwogICAgLy8gKQogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6NjgKICAgIC8vIHNlbGYucmVxdWVzdHNbc2VsZi5yZXF1ZXN0X2NvdW50XSA9IENvbnNlbnRSZXF1ZXN0KAogICAgc3dhcAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDYzNzI1ZgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTo2OC04MAogICAgLy8gc2VsZi5yZXF1ZXN0c1tzZWxmLnJlcXVlc3RfY291bnRdID0gQ29uc2VudFJlcXVlc3QoCiAgICAvLyAgICAgb3JnPWFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIC8vICAgICB1c2VyPWFyYzQuQWRkcmVzcyh1c2VyKSwKICAgIC8vICAgICBkb2NfdHlwZT1hcmM0LlVJbnQ4KGRvY190eXBlLm5hdGl2ZSksCiAgICAvLyAgICAgcmVhc29uPWFyYzQuU3RyaW5nKHJlYXNvbi5uYXRpdmUpLAogICAgLy8gICAgIGlkX2RldGFpbHM9YXJjNC5TdHJpbmcoaWRfZGV0YWlscy5uYXRpdmUpLAogICAgLy8gICAgIHJlcXVlc3RlZF9maWVsZHM9YXJjNC5VSW50MTYocmVxdWVzdGVkX2ZpZWxkcy5uYXRpdmUpLAogICAgLy8gICAgIHNoYXJlZF9maWVsZHM9YXJjNC5VSW50MTYoMCksCiAgICAvLyAgICAgZXhwaXJ5PWFyYzQuVUludDY0KHJlc3BvbnNlX2RlYWRsaW5lKSwKICAgIC8vICAgICBkdXJhdGlvbj1hcmM0LlVJbnQ2NChkdXJhdGlvbiksCiAgICAvLyAgICAgY3JlYXRlZF9hdD1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksCiAgICAvLyAgICAgc3RhdHVzPWFyYzQuVUludDgoMCksICAjIFBlbmRpbmcKICAgIC8vICkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICB1bmNvdmVyIDIKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6NDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLm9yZy5jb250cmFjdC5PcmdDb25zZW50LmFwcHJvdmVfY29uc2VudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFwcHJvdmVfY29uc2VudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6ODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5Ojg4CiAgICAvLyBhc3NlcnQgcmVxdWVzdF9pZCBpbiBzZWxmLnJlcXVlc3RzLCAiUmVxdWVzdCBub3QgZm91bmQiCiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHg2MzcyNWYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSZXF1ZXN0IG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTo4OQogICAgLy8gcmVxdWVzdCA9IHNlbGYucmVxdWVzdHNbcmVxdWVzdF9pZF0uY29weSgpCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTo5MAogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gcmVxdWVzdC51c2VyLm5hdGl2ZSwgIk9ubHkgdGhlIHVzZXIgY2FuIGFwcHJvdmUiCiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5Ojg5LTkwCiAgICAvLyByZXF1ZXN0ID0gc2VsZi5yZXF1ZXN0c1tyZXF1ZXN0X2lkXS5jb3B5KCkKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHJlcXVlc3QudXNlci5uYXRpdmUsICJPbmx5IHRoZSB1c2VyIGNhbiBhcHByb3ZlIgogICAgZGlnIDEKICAgIHB1c2hpbnQgMzIKICAgIGR1cAogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6OTAKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHJlcXVlc3QudXNlci5uYXRpdmUsICJPbmx5IHRoZSB1c2VyIGNhbiBhcHByb3ZlIgogICAgc3dhcAogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gT25seSB0aGUgdXNlciBjYW4gYXBwcm92ZQogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTo5MQogICAgLy8gYXNzZXJ0IHJlcXVlc3Quc3RhdHVzLm5hdGl2ZSA9PSAwLCAiUmVxdWVzdCBhbHJlYWR5IHJlc29sdmVkIgogICAgZGlnIDEKICAgIHB1c2hpbnQgOTcKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgIQogICAgYXNzZXJ0IC8vIFJlcXVlc3QgYWxyZWFkeSByZXNvbHZlZAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTo5MgogICAgLy8gYXNzZXJ0IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wIDw9IHJlcXVlc3QuZXhwaXJ5Lm5hdGl2ZSwgIlJlcXVlc3QgZXhwaXJlZCIKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGRpZyAyCiAgICBwdXNoaW50IDczCiAgICBpbnRjXzAgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIDw9CiAgICBhc3NlcnQgLy8gUmVxdWVzdCBleHBpcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjkzCiAgICAvLyBhc3NlcnQgc2hhcmVkX2ZpZWxkcy5uYXRpdmUgPiAwLCAiTXVzdCBzaGFyZSBhdCBsZWFzdCBvbmUgZmllbGQiCiAgICB1bmNvdmVyIDIKICAgIGJ0b2kKICAgIGR1cAogICAgYXNzZXJ0IC8vIE11c3Qgc2hhcmUgYXQgbGVhc3Qgb25lIGZpZWxkCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBzaGFyZWRfZmllbGRzLm5hdGl2ZSAmIHJlcXVlc3QucmVxdWVzdGVkX2ZpZWxkcy5uYXRpdmUKICAgIGRpZyAyCiAgICBwdXNoaW50IDY5CiAgICBpbnRjXzMgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGR1cAogICAgYnRvaQogICAgZGlnIDIKICAgICYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6OTYtOTcKICAgIC8vICAgICBzaGFyZWRfZmllbGRzLm5hdGl2ZSAmIHJlcXVlc3QucmVxdWVzdGVkX2ZpZWxkcy5uYXRpdmUKICAgIC8vICkgPT0gc2hhcmVkX2ZpZWxkcy5uYXRpdmUsICJDYW5ub3Qgc2hhcmUgdW5yZXF1ZXN0ZWQgZmllbGRzIgogICAgZGlnIDIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5Ojk0LTk3CiAgICAvLyAjIHNoYXJlZF9maWVsZHMgbXVzdCBiZSBhIHN1YnNldCBvZiByZXF1ZXN0ZWRfZmllbGRzCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNoYXJlZF9maWVsZHMubmF0aXZlICYgcmVxdWVzdC5yZXF1ZXN0ZWRfZmllbGRzLm5hdGl2ZQogICAgLy8gKSA9PSBzaGFyZWRfZmllbGRzLm5hdGl2ZSwgIkNhbm5vdCBzaGFyZSB1bnJlcXVlc3RlZCBmaWVsZHMiCiAgICBhc3NlcnQgLy8gQ2Fubm90IHNoYXJlIHVucmVxdWVzdGVkIGZpZWxkcwogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTo5OS0xMDAKICAgIC8vICMgQ29uc2VudCBkdXJhdGlvbiBzdGFydHMgTk9XIChmcm9tIGFwcHJvdmFsIHRpbWUpCiAgICAvLyBjb25zZW50X2V4cGlyeSA9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wICsgcmVxdWVzdC5kdXJhdGlvbi5uYXRpdmUKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGRpZyA0CiAgICBwdXNoaW50IDgxCiAgICBpbnRjXzAgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGR1cAogICAgYnRvaQogICAgdW5jb3ZlciAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gb3JnPXJlcXVlc3Qub3JnLAogICAgZGlnIDUKICAgIGludGNfMiAvLyAwCiAgICBwdXNoaW50IDMyCiAgICBib3hfZXh0cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMDUKICAgIC8vIGRvY190eXBlPWFyYzQuVUludDgocmVxdWVzdC5kb2NfdHlwZS5uYXRpdmUpLAogICAgZGlnIDYKICAgIHB1c2hpbnQgNjQKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMCAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMDYKICAgIC8vIHJlYXNvbj1hcmM0LlN0cmluZyhyZXF1ZXN0LnJlYXNvbi5uYXRpdmUpLAogICAgZGlnIDgKICAgIHB1c2hpbnQgNjUKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgOQogICAgcHVzaGludCA2NwogICAgZXh0cmFjdF91aW50MTYKICAgIHVuY292ZXIgMTAKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTA5CiAgICAvLyBzaGFyZWRfZmllbGRzPWFyYzQuVUludDE2KHNoYXJlZF9maWVsZHMubmF0aXZlKSwKICAgIHVuY292ZXIgNgogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIHB1c2hpbnQgMTYKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjExMAogICAgLy8gZXhwaXJ5PWFyYzQuVUludDY0KGNvbnNlbnRfZXhwaXJ5KSwKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMTIKICAgIC8vIGNyZWF0ZWRfYXQ9cmVxdWVzdC5jcmVhdGVkX2F0LAogICAgZGlnIDgKICAgIHB1c2hpbnQgODkKICAgIGludGNfMCAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMDItMTE0CiAgICAvLyBzZWxmLnJlcXVlc3RzW3JlcXVlc3RfaWRdID0gQ29uc2VudFJlcXVlc3QoCiAgICAvLyAgICAgb3JnPXJlcXVlc3Qub3JnLAogICAgLy8gICAgIHVzZXI9cmVxdWVzdC51c2VyLAogICAgLy8gICAgIGRvY190eXBlPWFyYzQuVUludDgocmVxdWVzdC5kb2NfdHlwZS5uYXRpdmUpLAogICAgLy8gICAgIHJlYXNvbj1hcmM0LlN0cmluZyhyZXF1ZXN0LnJlYXNvbi5uYXRpdmUpLAogICAgLy8gICAgIGlkX2RldGFpbHM9YXJjNC5TdHJpbmcoaWRfZGV0YWlscy5uYXRpdmUpLAogICAgLy8gICAgIHJlcXVlc3RlZF9maWVsZHM9cmVxdWVzdC5yZXF1ZXN0ZWRfZmllbGRzLAogICAgLy8gICAgIHNoYXJlZF9maWVsZHM9YXJjNC5VSW50MTYoc2hhcmVkX2ZpZWxkcy5uYXRpdmUpLAogICAgLy8gICAgIGV4cGlyeT1hcmM0LlVJbnQ2NChjb25zZW50X2V4cGlyeSksCiAgICAvLyAgICAgZHVyYXRpb249cmVxdWVzdC5kdXJhdGlvbiwKICAgIC8vICAgICBjcmVhdGVkX2F0PXJlcXVlc3QuY3JlYXRlZF9hdCwKICAgIC8vICAgICBzdGF0dXM9YXJjNC5VSW50OCgxKSwgICMgQXBwcm92ZWQKICAgIC8vICkKICAgIHVuY292ZXIgNQogICAgdW5jb3ZlciA4CiAgICBjb25jYXQKICAgIHVuY292ZXIgNQogICAgY29uY2F0CiAgICBieXRlY18yIC8vIDB4MDA2MgogICAgY29uY2F0CiAgICBkaWcgNAogICAgbGVuCiAgICBwdXNoaW50IDk4CiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjExMwogICAgLy8gc3RhdHVzPWFyYzQuVUludDgoMSksICAjIEFwcHJvdmVkCiAgICBwdXNoYnl0ZXMgMHgwMQogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMDItMTE0CiAgICAvLyBzZWxmLnJlcXVlc3RzW3JlcXVlc3RfaWRdID0gQ29uc2VudFJlcXVlc3QoCiAgICAvLyAgICAgb3JnPXJlcXVlc3Qub3JnLAogICAgLy8gICAgIHVzZXI9cmVxdWVzdC51c2VyLAogICAgLy8gICAgIGRvY190eXBlPWFyYzQuVUludDgocmVxdWVzdC5kb2NfdHlwZS5uYXRpdmUpLAogICAgLy8gICAgIHJlYXNvbj1hcmM0LlN0cmluZyhyZXF1ZXN0LnJlYXNvbi5uYXRpdmUpLAogICAgLy8gICAgIGlkX2RldGFpbHM9YXJjNC5TdHJpbmcoaWRfZGV0YWlscy5uYXRpdmUpLAogICAgLy8gICAgIHJlcXVlc3RlZF9maWVsZHM9cmVxdWVzdC5yZXF1ZXN0ZWRfZmllbGRzLAogICAgLy8gICAgIHNoYXJlZF9maWVsZHM9YXJjNC5VSW50MTYoc2hhcmVkX2ZpZWxkcy5uYXRpdmUpLAogICAgLy8gICAgIGV4cGlyeT1hcmM0LlVJbnQ2NChjb25zZW50X2V4cGlyeSksCiAgICAvLyAgICAgZHVyYXRpb249cmVxdWVzdC5kdXJhdGlvbiwKICAgIC8vICAgICBjcmVhdGVkX2F0PXJlcXVlc3QuY3JlYXRlZF9hdCwKICAgIC8vICAgICBzdGF0dXM9YXJjNC5VSW50OCgxKSwgICMgQXBwcm92ZWQKICAgIC8vICkKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGJveF9kZWwKICAgIHBvcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weTo4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMub3JnLmNvbnRyYWN0Lk9yZ0NvbnNlbnQucmVqZWN0X2NvbnNlbnRbcm91dGluZ10oKSAtPiB2b2lkOgpyZWplY3RfY29uc2VudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTE2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMTgKICAgIC8vIGFzc2VydCByZXF1ZXN0X2lkIGluIHNlbGYucmVxdWVzdHMsICJSZXF1ZXN0IG5vdCBmb3VuZCIKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHg2MzcyNWYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSZXF1ZXN0IG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMTkKICAgIC8vIHJlcXVlc3QgPSBzZWxmLnJlcXVlc3RzW3JlcXVlc3RfaWRdLmNvcHkoKQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTIwCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSByZXF1ZXN0LnVzZXIubmF0aXZlLCAiT25seSB0aGUgdXNlciBjYW4gcmVqZWN0IgogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMTktMTIwCiAgICAvLyByZXF1ZXN0ID0gc2VsZi5yZXF1ZXN0c1tyZXF1ZXN0X2lkXS5jb3B5KCkKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHJlcXVlc3QudXNlci5uYXRpdmUsICJPbmx5IHRoZSB1c2VyIGNhbiByZWplY3QiCiAgICBkaWcgMQogICAgcHVzaGludCAzMgogICAgZHVwCiAgICBib3hfZXh0cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMjAKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHJlcXVlc3QudXNlci5uYXRpdmUsICJPbmx5IHRoZSB1c2VyIGNhbiByZWplY3QiCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IHRoZSB1c2VyIGNhbiByZWplY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTIxCiAgICAvLyBhc3NlcnQgcmVxdWVzdC5zdGF0dXMubmF0aXZlID09IDAsICJSZXF1ZXN0IGFscmVhZHkgcmVzb2x2ZWQiCiAgICBkaWcgMQogICAgcHVzaGludCA5NwogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICAhCiAgICBhc3NlcnQgLy8gUmVxdWVzdCBhbHJlYWR5IHJlc29sdmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjEyNAogICAgLy8gb3JnPXJlcXVlc3Qub3JnLAogICAgZGlnIDEKICAgIGludGNfMiAvLyAwCiAgICBwdXNoaW50IDMyCiAgICBib3hfZXh0cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMjYKICAgIC8vIGRvY190eXBlPWFyYzQuVUludDgocmVxdWVzdC5kb2NfdHlwZS5uYXRpdmUpLAogICAgZGlnIDIKICAgIHB1c2hpbnQgNjQKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMCAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMjcKICAgIC8vIHJlYXNvbj1hcmM0LlN0cmluZyhyZXF1ZXN0LnJlYXNvbi5uYXRpdmUpLAogICAgZGlnIDQKICAgIHB1c2hpbnQgNjUKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgNQogICAgcHVzaGludCA2NwogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyA2CiAgICB1bmNvdmVyIDIKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjEyOAogICAgLy8gaWRfZGV0YWlscz1hcmM0LlN0cmluZyhyZXF1ZXN0LmlkX2RldGFpbHMubmF0aXZlKSwKICAgIGRpZyA2CiAgICBsZW4KICAgIHVuY292ZXIgNwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTI5CiAgICAvLyByZXF1ZXN0ZWRfZmllbGRzPXJlcXVlc3QucmVxdWVzdGVkX2ZpZWxkcywKICAgIGRpZyA1CiAgICBwdXNoaW50IDY5CiAgICBpbnRjXzMgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTMxCiAgICAvLyBleHBpcnk9cmVxdWVzdC5leHBpcnksCiAgICBkaWcgNgogICAgcHVzaGludCA3MwogICAgaW50Y18wIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjEzMgogICAgLy8gZHVyYXRpb249cmVxdWVzdC5kdXJhdGlvbiwKICAgIGRpZyA3CiAgICBwdXNoaW50IDgxCiAgICBpbnRjXzAgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTMzCiAgICAvLyBjcmVhdGVkX2F0PXJlcXVlc3QuY3JlYXRlZF9hdCwKICAgIGRpZyA4CiAgICBwdXNoaW50IDg5CiAgICBpbnRjXzAgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTIzLTEzNQogICAgLy8gc2VsZi5yZXF1ZXN0c1tyZXF1ZXN0X2lkXSA9IENvbnNlbnRSZXF1ZXN0KAogICAgLy8gICAgIG9yZz1yZXF1ZXN0Lm9yZywKICAgIC8vICAgICB1c2VyPXJlcXVlc3QudXNlciwKICAgIC8vICAgICBkb2NfdHlwZT1hcmM0LlVJbnQ4KHJlcXVlc3QuZG9jX3R5cGUubmF0aXZlKSwKICAgIC8vICAgICByZWFzb249YXJjNC5TdHJpbmcocmVxdWVzdC5yZWFzb24ubmF0aXZlKSwKICAgIC8vICAgICBpZF9kZXRhaWxzPWFyYzQuU3RyaW5nKHJlcXVlc3QuaWRfZGV0YWlscy5uYXRpdmUpLAogICAgLy8gICAgIHJlcXVlc3RlZF9maWVsZHM9cmVxdWVzdC5yZXF1ZXN0ZWRfZmllbGRzLAogICAgLy8gICAgIHNoYXJlZF9maWVsZHM9YXJjNC5VSW50MTYoMCksCiAgICAvLyAgICAgZXhwaXJ5PXJlcXVlc3QuZXhwaXJ5LAogICAgLy8gICAgIGR1cmF0aW9uPXJlcXVlc3QuZHVyYXRpb24sCiAgICAvLyAgICAgY3JlYXRlZF9hdD1yZXF1ZXN0LmNyZWF0ZWRfYXQsCiAgICAvLyAgICAgc3RhdHVzPWFyYzQuVUludDgoMiksICAjIFJlamVjdGVkCiAgICAvLyApCiAgICB1bmNvdmVyIDcKICAgIHVuY292ZXIgOAogICAgY29uY2F0CiAgICB1bmNvdmVyIDcKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAweDAwNjIKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGxlbgogICAgcHVzaGludCA5OAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTMwCiAgICAvLyBzaGFyZWRfZmllbGRzPWFyYzQuVUludDE2KDApLAogICAgYnl0ZWMgNSAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTIzLTEzNQogICAgLy8gc2VsZi5yZXF1ZXN0c1tyZXF1ZXN0X2lkXSA9IENvbnNlbnRSZXF1ZXN0KAogICAgLy8gICAgIG9yZz1yZXF1ZXN0Lm9yZywKICAgIC8vICAgICB1c2VyPXJlcXVlc3QudXNlciwKICAgIC8vICAgICBkb2NfdHlwZT1hcmM0LlVJbnQ4KHJlcXVlc3QuZG9jX3R5cGUubmF0aXZlKSwKICAgIC8vICAgICByZWFzb249YXJjNC5TdHJpbmcocmVxdWVzdC5yZWFzb24ubmF0aXZlKSwKICAgIC8vICAgICBpZF9kZXRhaWxzPWFyYzQuU3RyaW5nKHJlcXVlc3QuaWRfZGV0YWlscy5uYXRpdmUpLAogICAgLy8gICAgIHJlcXVlc3RlZF9maWVsZHM9cmVxdWVzdC5yZXF1ZXN0ZWRfZmllbGRzLAogICAgLy8gICAgIHNoYXJlZF9maWVsZHM9YXJjNC5VSW50MTYoMCksCiAgICAvLyAgICAgZXhwaXJ5PXJlcXVlc3QuZXhwaXJ5LAogICAgLy8gICAgIGR1cmF0aW9uPXJlcXVlc3QuZHVyYXRpb24sCiAgICAvLyAgICAgY3JlYXRlZF9hdD1yZXF1ZXN0LmNyZWF0ZWRfYXQsCiAgICAvLyAgICAgc3RhdHVzPWFyYzQuVUludDgoMiksICAjIFJlamVjdGVkCiAgICAvLyApCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjEzNAogICAgLy8gc3RhdHVzPWFyYzQuVUludDgoMiksICAjIFJlamVjdGVkCiAgICBwdXNoYnl0ZXMgMHgwMgogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMjMtMTM1CiAgICAvLyBzZWxmLnJlcXVlc3RzW3JlcXVlc3RfaWRdID0gQ29uc2VudFJlcXVlc3QoCiAgICAvLyAgICAgb3JnPXJlcXVlc3Qub3JnLAogICAgLy8gICAgIHVzZXI9cmVxdWVzdC51c2VyLAogICAgLy8gICAgIGRvY190eXBlPWFyYzQuVUludDgocmVxdWVzdC5kb2NfdHlwZS5uYXRpdmUpLAogICAgLy8gICAgIHJlYXNvbj1hcmM0LlN0cmluZyhyZXF1ZXN0LnJlYXNvbi5uYXRpdmUpLAogICAgLy8gICAgIGlkX2RldGFpbHM9YXJjNC5TdHJpbmcocmVxdWVzdC5pZF9kZXRhaWxzLm5hdGl2ZSksCiAgICAvLyAgICAgcmVxdWVzdGVkX2ZpZWxkcz1yZXF1ZXN0LnJlcXVlc3RlZF9maWVsZHMsCiAgICAvLyAgICAgc2hhcmVkX2ZpZWxkcz1hcmM0LlVJbnQxNigwKSwKICAgIC8vICAgICBleHBpcnk9cmVxdWVzdC5leHBpcnksCiAgICAvLyAgICAgZHVyYXRpb249cmVxdWVzdC5kdXJhdGlvbiwKICAgIC8vICAgICBjcmVhdGVkX2F0PXJlcXVlc3QuY3JlYXRlZF9hdCwKICAgIC8vICAgICBzdGF0dXM9YXJjNC5VSW50OCgyKSwgICMgUmVqZWN0ZWQKICAgIC8vICkKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGJveF9kZWwKICAgIHBvcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxMTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLm9yZy5jb250cmFjdC5PcmdDb25zZW50LnJldm9rZV9jb25zZW50W3JvdXRpbmddKCkgLT4gdm9pZDoKcmV2b2tlX2NvbnNlbnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjEzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTM5CiAgICAvLyBhc3NlcnQgcmVxdWVzdF9pZCBpbiBzZWxmLnJlcXVlc3RzLCAiUmVxdWVzdCBub3QgZm91bmQiCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4NjM3MjVmCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gUmVxdWVzdCBub3QgZm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTQwCiAgICAvLyByZXF1ZXN0ID0gc2VsZi5yZXF1ZXN0c1tyZXF1ZXN0X2lkXS5jb3B5KCkKICAgIGR1cAogICAgYm94X2dldAogICAgcG9wCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjE0MQogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gcmVxdWVzdC51c2VyLm5hdGl2ZSwgIk9ubHkgdGhlIHVzZXIgY2FuIHJldm9rZSIKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTQwLTE0MQogICAgLy8gcmVxdWVzdCA9IHNlbGYucmVxdWVzdHNbcmVxdWVzdF9pZF0uY29weSgpCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSByZXF1ZXN0LnVzZXIubmF0aXZlLCAiT25seSB0aGUgdXNlciBjYW4gcmV2b2tlIgogICAgZGlnIDEKICAgIHB1c2hpbnQgMzIKICAgIGR1cAogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTQxCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSByZXF1ZXN0LnVzZXIubmF0aXZlLCAiT25seSB0aGUgdXNlciBjYW4gcmV2b2tlIgogICAgc3dhcAogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gT25seSB0aGUgdXNlciBjYW4gcmV2b2tlCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjE0MgogICAgLy8gYXNzZXJ0IHJlcXVlc3Quc3RhdHVzLm5hdGl2ZSA9PSAxLCAiQ2FuIG9ubHkgcmV2b2tlIGFwcHJvdmVkIGNvbnNlbnQiCiAgICBkaWcgMQogICAgcHVzaGludCA5NwogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBDYW4gb25seSByZXZva2UgYXBwcm92ZWQgY29uc2VudAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNDUKICAgIC8vIG9yZz1yZXF1ZXN0Lm9yZywKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMAogICAgcHVzaGludCAzMgogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTQ3CiAgICAvLyBkb2NfdHlwZT1hcmM0LlVJbnQ4KHJlcXVlc3QuZG9jX3R5cGUubmF0aXZlKSwKICAgIGRpZyAyCiAgICBwdXNoaW50IDY0CiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzAgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA3IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTQ4CiAgICAvLyByZWFzb249YXJjNC5TdHJpbmcocmVxdWVzdC5yZWFzb24ubmF0aXZlKSwKICAgIGRpZyA0CiAgICBwdXNoaW50IDY1CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDUKICAgIHB1c2hpbnQgNjcKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDYKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTUwCiAgICAvLyByZXF1ZXN0ZWRfZmllbGRzPXJlcXVlc3QucmVxdWVzdGVkX2ZpZWxkcywKICAgIGRpZyA0CiAgICBwdXNoaW50IDY5CiAgICBpbnRjXzMgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTUxCiAgICAvLyBzaGFyZWRfZmllbGRzPXJlcXVlc3Quc2hhcmVkX2ZpZWxkcywgICMgUHJlc2VydmUgZm9yIGF1ZGl0IHRyYWlsCiAgICBkaWcgNQogICAgcHVzaGludCA3MQogICAgaW50Y18zIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjE1MgogICAgLy8gZXhwaXJ5PWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwgICMgSW1tZWRpYXRlbHkgaW52YWxpZGF0ZQogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNTMKICAgIC8vIGR1cmF0aW9uPXJlcXVlc3QuZHVyYXRpb24sCiAgICBkaWcgNwogICAgcHVzaGludCA4MQogICAgaW50Y18wIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjE1NAogICAgLy8gY3JlYXRlZF9hdD1yZXF1ZXN0LmNyZWF0ZWRfYXQsCiAgICBkaWcgOAogICAgcHVzaGludCA4OQogICAgaW50Y18wIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjE0NC0xNTYKICAgIC8vIHNlbGYucmVxdWVzdHNbcmVxdWVzdF9pZF0gPSBDb25zZW50UmVxdWVzdCgKICAgIC8vICAgICBvcmc9cmVxdWVzdC5vcmcsCiAgICAvLyAgICAgdXNlcj1yZXF1ZXN0LnVzZXIsCiAgICAvLyAgICAgZG9jX3R5cGU9YXJjNC5VSW50OChyZXF1ZXN0LmRvY190eXBlLm5hdGl2ZSksCiAgICAvLyAgICAgcmVhc29uPWFyYzQuU3RyaW5nKHJlcXVlc3QucmVhc29uLm5hdGl2ZSksCiAgICAvLyAgICAgaWRfZGV0YWlscz1hcmM0LlN0cmluZygiIiksICAjIENsZWFyIGVuY3J5cHRlZCBkYXRhCiAgICAvLyAgICAgcmVxdWVzdGVkX2ZpZWxkcz1yZXF1ZXN0LnJlcXVlc3RlZF9maWVsZHMsCiAgICAvLyAgICAgc2hhcmVkX2ZpZWxkcz1yZXF1ZXN0LnNoYXJlZF9maWVsZHMsICAjIFByZXNlcnZlIGZvciBhdWRpdCB0cmFpbAogICAgLy8gICAgIGV4cGlyeT1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksICAjIEltbWVkaWF0ZWx5IGludmFsaWRhdGUKICAgIC8vICAgICBkdXJhdGlvbj1yZXF1ZXN0LmR1cmF0aW9uLAogICAgLy8gICAgIGNyZWF0ZWRfYXQ9cmVxdWVzdC5jcmVhdGVkX2F0LAogICAgLy8gICAgIHN0YXR1cz1hcmM0LlVJbnQ4KDMpLCAgIyBSZXZva2VkCiAgICAvLyApCiAgICB1bmNvdmVyIDcKICAgIHVuY292ZXIgOAogICAgY29uY2F0CiAgICB1bmNvdmVyIDcKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAweDAwNjIKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGxlbgogICAgcHVzaGludCA5OAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA1CiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNTUKICAgIC8vIHN0YXR1cz1hcmM0LlVJbnQ4KDMpLCAgIyBSZXZva2VkCiAgICBwdXNoYnl0ZXMgMHgwMwogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNDQtMTU2CiAgICAvLyBzZWxmLnJlcXVlc3RzW3JlcXVlc3RfaWRdID0gQ29uc2VudFJlcXVlc3QoCiAgICAvLyAgICAgb3JnPXJlcXVlc3Qub3JnLAogICAgLy8gICAgIHVzZXI9cmVxdWVzdC51c2VyLAogICAgLy8gICAgIGRvY190eXBlPWFyYzQuVUludDgocmVxdWVzdC5kb2NfdHlwZS5uYXRpdmUpLAogICAgLy8gICAgIHJlYXNvbj1hcmM0LlN0cmluZyhyZXF1ZXN0LnJlYXNvbi5uYXRpdmUpLAogICAgLy8gICAgIGlkX2RldGFpbHM9YXJjNC5TdHJpbmcoIiIpLCAgIyBDbGVhciBlbmNyeXB0ZWQgZGF0YQogICAgLy8gICAgIHJlcXVlc3RlZF9maWVsZHM9cmVxdWVzdC5yZXF1ZXN0ZWRfZmllbGRzLAogICAgLy8gICAgIHNoYXJlZF9maWVsZHM9cmVxdWVzdC5zaGFyZWRfZmllbGRzLCAgIyBQcmVzZXJ2ZSBmb3IgYXVkaXQgdHJhaWwKICAgIC8vICAgICBleHBpcnk9YXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXApLCAgIyBJbW1lZGlhdGVseSBpbnZhbGlkYXRlCiAgICAvLyAgICAgZHVyYXRpb249cmVxdWVzdC5kdXJhdGlvbiwKICAgIC8vICAgICBjcmVhdGVkX2F0PXJlcXVlc3QuY3JlYXRlZF9hdCwKICAgIC8vICAgICBzdGF0dXM9YXJjNC5VSW50OCgzKSwgICMgUmV2b2tlZAogICAgLy8gKQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTQ5CiAgICAvLyBpZF9kZXRhaWxzPWFyYzQuU3RyaW5nKCIiKSwgICMgQ2xlYXIgZW5jcnlwdGVkIGRhdGEKICAgIGJ5dGVjIDUgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjE0NC0xNTYKICAgIC8vIHNlbGYucmVxdWVzdHNbcmVxdWVzdF9pZF0gPSBDb25zZW50UmVxdWVzdCgKICAgIC8vICAgICBvcmc9cmVxdWVzdC5vcmcsCiAgICAvLyAgICAgdXNlcj1yZXF1ZXN0LnVzZXIsCiAgICAvLyAgICAgZG9jX3R5cGU9YXJjNC5VSW50OChyZXF1ZXN0LmRvY190eXBlLm5hdGl2ZSksCiAgICAvLyAgICAgcmVhc29uPWFyYzQuU3RyaW5nKHJlcXVlc3QucmVhc29uLm5hdGl2ZSksCiAgICAvLyAgICAgaWRfZGV0YWlscz1hcmM0LlN0cmluZygiIiksICAjIENsZWFyIGVuY3J5cHRlZCBkYXRhCiAgICAvLyAgICAgcmVxdWVzdGVkX2ZpZWxkcz1yZXF1ZXN0LnJlcXVlc3RlZF9maWVsZHMsCiAgICAvLyAgICAgc2hhcmVkX2ZpZWxkcz1yZXF1ZXN0LnNoYXJlZF9maWVsZHMsICAjIFByZXNlcnZlIGZvciBhdWRpdCB0cmFpbAogICAgLy8gICAgIGV4cGlyeT1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksICAjIEltbWVkaWF0ZWx5IGludmFsaWRhdGUKICAgIC8vICAgICBkdXJhdGlvbj1yZXF1ZXN0LmR1cmF0aW9uLAogICAgLy8gICAgIGNyZWF0ZWRfYXQ9cmVxdWVzdC5jcmVhdGVkX2F0LAogICAgLy8gICAgIHN0YXR1cz1hcmM0LlVJbnQ4KDMpLCAgIyBSZXZva2VkCiAgICAvLyApCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5vcmcuY29udHJhY3QuT3JnQ29uc2VudC5nZXRfcmVxdWVzdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9yZXF1ZXN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNjAKICAgIC8vIGFzc2VydCByZXF1ZXN0X2lkIGluIHNlbGYucmVxdWVzdHMsICJSZXF1ZXN0IG5vdCBmb3VuZCIKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHg2MzcyNWYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSZXF1ZXN0IG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNjEKICAgIC8vIHJldHVybiBzZWxmLnJlcXVlc3RzW3JlcXVlc3RfaWRdLmNvcHkoKQogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvb3JnL2NvbnRyYWN0LnB5OjE1OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLm9yZy5jb250cmFjdC5PcmdDb25zZW50LmlzX2NvbnNlbnRfdmFsaWRbcm91dGluZ10oKSAtPiB2b2lkOgppc19jb25zZW50X3ZhbGlkOgogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNjUKICAgIC8vIGFzc2VydCByZXF1ZXN0X2lkIGluIHNlbGYucmVxdWVzdHMsICJSZXF1ZXN0IG5vdCBmb3VuZCIKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHg2MzcyNWYKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSZXF1ZXN0IG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNjgKICAgIC8vIHJlcXVlc3Quc3RhdHVzLm5hdGl2ZSA9PSAxCiAgICBwdXNoaW50IDk3CiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNjgtMTY5CiAgICAvLyByZXF1ZXN0LnN0YXR1cy5uYXRpdmUgPT0gMQogICAgLy8gYW5kIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wIDw9IHJlcXVlc3QuZXhwaXJ5Lm5hdGl2ZQogICAgYnogaXNfY29uc2VudF92YWxpZF9ib29sX2ZhbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTY5CiAgICAvLyBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPD0gcmVxdWVzdC5leHBpcnkubmF0aXZlCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBkaWcgMQogICAgcHVzaGludCA3MwogICAgaW50Y18wIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL29yZy9jb250cmFjdC5weToxNjgtMTY5CiAgICAvLyByZXF1ZXN0LnN0YXR1cy5uYXRpdmUgPT0gMQogICAgLy8gYW5kIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wIDw9IHJlcXVlc3QuZXhwaXJ5Lm5hdGl2ZQogICAgYnogaXNfY29uc2VudF92YWxpZF9ib29sX2ZhbHNlQDQKICAgIGludGNfMSAvLyAxCgppc19jb25zZW50X3ZhbGlkX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9vcmcvY29udHJhY3QucHk6MTYzCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzIgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmlzX2NvbnNlbnRfdmFsaWRfYm9vbF9mYWxzZUA0OgogICAgaW50Y18yIC8vIDAKICAgIGIgaXNfY29uc2VudF92YWxpZF9ib29sX21lcmdlQDUK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAECAEAAiYHA2NyXwQVH3x1AgBiDXdoaXRlbGlzdF9hcHANcmVxdWVzdF9jb3VudAIAAAVvd25lcjEYQAAMJwYxAGcrJGcnBCRnMRtBAEAxGRREMRhEggcE3aZkngRJk7xbBHT2kbMEr8ST3gS+/WNvBBkcSjQE1IxTgTYaAI4HAAkAIAENAeoCkgMyA0wAMRkUMRgUEEM2GgFJFSISRBcxACQnBmVEEkQrTGcjQzYaAUkVgSASRDYaAkkVIxJENhoDSSRZJQhLARVJTwISRDYaBEkkWSUISwEVEkQ2GgVJFSUSRDYaBkkVIhJEJCtlRElETwYXSSUORE8DF0lEsTEATwOyGIAEhHRGHLIashqBBrIQJLIBs7Q+SVcABCkSRFcEAEkVIxJEJFNEJCcEZUQjCCcESwFnMgeBgKMFCDEATwQWSZMiDkRXBwFPBBZJk4EQDkRXBgJPAxYyBxZPBE8KUE8EUCpQgWJPCAgWVwYCUE8DUCcFUE8CUE8DUExQgAEAUE8DUE8CUEwWKEsBUEm8SE8CvylMULAjQzYaAUkVIhJEFzYaAkkkWSUISwEVEkQ2GgNJFSUSRE8CFihMUEm9RQFESb5ITgIxAEsBgSBJukxLARJESwGBYSO6FxREMgdLAoFJIroXDkRPAhdJREsCgUUlukkXSwIaSwISRDIHSwSBUSK6SRdPAghLBSSBILpLBoFAI7oXFkmTIg5EVwcBSwiBQVlLCYFDWU8KTgJSTwYWSZOBEA5EVwYCTwQWSwiBWSK6TwVPCFBPBVAqUEsEFYFiCBZXBgJQTwZQTwNQTwJQTwNQTFCAAQFQTFBPAlBLAbxIvyNDNhoBSRUiEkQXFihMUEm9RQFESb5ITDEASwGBIEm6TEsBEkRLAYFhI7oXFERLASSBILpLAoFAI7oXFkmTIg5EVwcBSwSBQVlLBYFDWUsGTwJLAlJLBhVPB08DTwJSSwWBRSW6SwaBSSK6SweBUSK6SwiBWSK6TwdPCFBPB1AqUEsGFYFiCBZXBgJQTwRQJwVQTwNQTwJQTFCAAQJQTwJQTFBLAbxIvyNDNhoBSRUiEkQXFihMUEm9RQFESb5ITDEASwGBIEm6TEsBEkRLAYFhI7oXIxJESwEkgSC6SwKBQCO6FxZJkyIORFcHAUsEgUFZSwWBQ1lPBk4CUksEgUUluksFgUclujIHFksHgVEiuksIgVkiuk8HTwhQTwdQKlBLBhWBYggWVwYCUE8FUE8EUE8DUE8CUExQgAEDUExQJwVQSwG8SL8jQzYaAUkVIhJEFxYoTFBJvUUBRL5IKUxQsCNDNhoBSRUiEkQXFihMUEcCvUUBRIFhI7oXIxJBABsyB0sBgUkiuhcOQQAOI4ABACRPAlQpTFCwI0MkQv/v", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 7, "patch": 1 } }, "events": [], "templateVariables": {} }