{ "name": "GamesHub", "structs": {}, "methods": [ { "name": "dice_join", "args": [ { "type": "account", "name": "player" }, { "type": "uint64", "name": "bet" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "dice_roll", "args": [ { "type": "account", "name": "player" }, { "type": "uint64", "name": "roll" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "dice_resolve", "args": [], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "rps_join", "args": [ { "type": "account", "name": "player" }, { "type": "uint64", "name": "bet" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "rps_play", "args": [ { "type": "account", "name": "player" }, { "type": "uint64", "name": "move" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "rps_resolve", "args": [], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_join", "args": [ { "type": "account", "name": "player" }, { "type": "uint64", "name": "bet" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_open", "args": [ { "type": "account", "name": "player" }, { "type": "uint64", "name": "choice" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "match_join", "args": [ { "type": "account", "name": "player" }, { "type": "uint64", "name": "bet" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "match_play", "args": [ { "type": "account", "name": "player" }, { "type": "uint64", "name": "success" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "match_end", "args": [ { "type": "account", "name": "player" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 21, "bytes": 6 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "dice_player1": { "keyType": "AVMString", "valueType": "address", "key": "ZGljZV9wbGF5ZXIx" }, "dice_player2": { "keyType": "AVMString", "valueType": "address", "key": "ZGljZV9wbGF5ZXIy" }, "dice_bet": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGljZV9iZXQ=" }, "dice_roll1": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGljZV9yb2xsMQ==" }, "dice_roll2": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGljZV9yb2xsMg==" }, "dice_active": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGljZV9hY3RpdmU=" }, "rps_player1": { "keyType": "AVMString", "valueType": "address", "key": "cnBzX3BsYXllcjE=" }, "rps_player2": { "keyType": "AVMString", "valueType": "address", "key": "cnBzX3BsYXllcjI=" }, "rps_bet": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cnBzX2JldA==" }, "rps_move1": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cnBzX21vdmUx" }, "rps_move2": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cnBzX21vdmUy" }, "rps_active": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cnBzX2FjdGl2ZQ==" }, "box_player": { "keyType": "AVMString", "valueType": "address", "key": "Ym94X3BsYXllcg==" }, "box_bet": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Ym94X2JldA==" }, "box_active": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Ym94X2FjdGl2ZQ==" }, "match_player": { "keyType": "AVMString", "valueType": "address", "key": "bWF0Y2hfcGxheWVy" }, "match_bet": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bWF0Y2hfYmV0" }, "match_count": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bWF0Y2hfY291bnQ=" }, "match_active": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bWF0Y2hfYWN0aXZl" }, "MIN_FEE": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "TUlOX0ZFRQ==" }, "ROCK": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Uk9DSw==" }, "PAPER": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "UEFQRVI=" }, "SCISSORS": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "U0NJU1NPUlM=" }, "MOVE_NONE": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "TU9WRV9OT05F" }, "BRONZE": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "QlJPTlpF" }, "SILVER": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "U0lMVkVS" }, "GOLD": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "R09MRA==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 584, 606, 632, 658, 684, 710, 726, 752, 778, 794, 820 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ 851 ], "errorMessage": "can only call when creating" }, { "pc": [ 587, 609, 635, 661, 687, 713, 729, 755, 781, 797, 823 ], "errorMessage": "can only call when not creating" }, { "pc": [ 2607 ], "errorMessage": "check self.BRONZE exists" }, { "pc": [ 2517 ], "errorMessage": "check self.GOLD exists" }, { "pc": [ 862 ], "errorMessage": "check self.MIN_FEE exists" }, { "pc": [ 445, 452, 1921, 1965, 2014, 2026, 2147, 2154 ], "errorMessage": "check self.MOVE_NONE exists" }, { "pc": [ 1863, 2198, 2237 ], "errorMessage": "check self.PAPER exists" }, { "pc": [ 1852, 2172, 2211 ], "errorMessage": "check self.ROCK exists" }, { "pc": [ 1874, 2185, 2224 ], "errorMessage": "check self.SCISSORS exists" }, { "pc": [ 2576 ], "errorMessage": "check self.SILVER exists" }, { "pc": [ 2367, 2445 ], "errorMessage": "check self.box_active exists" }, { "pc": [ 2512, 2571, 2602 ], "errorMessage": "check self.box_bet exists" }, { "pc": [ 2453, 2538 ], "errorMessage": "check self.box_player exists" }, { "pc": [ 934 ], "errorMessage": "check self.dice_active exists" }, { "pc": [ 993, 1379, 1407, 1420 ], "errorMessage": "check self.dice_bet exists" }, { "pc": [ 1038, 1134, 1223, 1402, 1484 ], "errorMessage": "check self.dice_player1 exists" }, { "pc": [ 982, 1145, 1415, 1520 ], "errorMessage": "check self.dice_player2 exists" }, { "pc": [ 1234, 1323, 1388, 1470 ], "errorMessage": "check self.dice_roll1 exists" }, { "pc": [ 1276, 1331, 1393, 1475 ], "errorMessage": "check self.dice_roll2 exists" }, { "pc": [ 2687, 2769, 2859 ], "errorMessage": "check self.match_active exists" }, { "pc": [ 2882 ], "errorMessage": "check self.match_bet exists" }, { "pc": [ 2798, 2887, 2909, 2957 ], "errorMessage": "check self.match_count exists" }, { "pc": [ 2777, 2867, 2899 ], "errorMessage": "check self.match_player exists" }, { "pc": [ 1607 ], "errorMessage": "check self.rps_active exists" }, { "pc": [ 1665, 2074, 2100, 2113 ], "errorMessage": "check self.rps_bet exists" }, { "pc": [ 1917, 2010, 2082, 2167, 2193, 2219 ], "errorMessage": "check self.rps_move1 exists" }, { "pc": [ 1961, 2022, 2086, 2180, 2206, 2232 ], "errorMessage": "check self.rps_move2 exists" }, { "pc": [ 1709, 1802, 1907, 2095, 2246 ], "errorMessage": "check self.rps_player1 exists" }, { "pc": [ 1654, 1813, 2108, 2281 ], "errorMessage": "check self.rps_player2 exists" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuZ2FtZXNodWIuY29udHJhY3QuR2FtZXNIdWIuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiTU9WRV9OT05FIiAicnBzX21vdmUxIiAicnBzX21vdmUyIiAiZGljZV9wbGF5ZXIxIiAicnBzX3BsYXllcjEiICJtYXRjaF9jb3VudCIgImRpY2VfcGxheWVyMiIgImRpY2VfYmV0IiAiZGljZV9yb2xsMSIgImRpY2Vfcm9sbDIiICJycHNfcGxheWVyMiIgInJwc19iZXQiICJib3hfYmV0IiAibWF0Y2hfcGxheWVyIiAibWF0Y2hfYWN0aXZlIiAiYm94X3BsYXllciIgImJveF9hY3RpdmUiICJST0NLIiAiUEFQRVIiICJTQ0lTU09SUyIgImRpY2VfYWN0aXZlIiAicnBzX2FjdGl2ZSIgIm1hdGNoX2JldCIgIk1JTl9GRUUiICJCUk9OWkUiICJTSUxWRVIiICJHT0xEIiAweDAwMTQ0NDY5NjM2NTNhMjA0MTZjNzI2NTYxNjQ3OTIwNzI2ZjZjNmM2NTY0IDB4MDAxMzUyNTA1MzNhMjA0MTZjNzI2NTYxNjQ3OTIwNzA2YzYxNzk2NTY0IDB4MDAyMTRkNjU2ZDZmNzI3OTNhMjA1MDZjNjE3OTY1NzIyMDZlNmY3NDIwNjk2ZTIwNjE2Mzc0Njk3NjY1MjA2NzYxNmQ2NQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjMyLTMzCiAgICAvLyAjIC0tLS0tLS0tLS0gQ29uc3RhbnRzIC0tLS0tLS0tLS0KICAgIC8vIHNlbGYuTUlOX0ZFRSA9IFVJbnQ2NCgxMDAwKQogICAgYnl0ZWMgMjQgLy8gIk1JTl9GRUUiCiAgICBwdXNoaW50IDEwMDAgLy8gMTAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTozNAogICAgLy8gc2VsZi5ST0NLID0gVUludDY0KDApCiAgICBieXRlYyAxOCAvLyAiUk9DSyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjM1CiAgICAvLyBzZWxmLlBBUEVSID0gVUludDY0KDEpCiAgICBieXRlYyAxOSAvLyAiUEFQRVIiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTozNgogICAgLy8gc2VsZi5TQ0lTU09SUyA9IFVJbnQ2NCgyKQogICAgYnl0ZWMgMjAgLy8gIlNDSVNTT1JTIgogICAgaW50Y18yIC8vIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MzcKICAgIC8vIHNlbGYuTU9WRV9OT05FID0gVUludDY0KDI1NSkKICAgIGJ5dGVjXzEgLy8gIk1PVkVfTk9ORSIKICAgIHB1c2hpbnQgMjU1IC8vIDI1NQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTozOAogICAgLy8gc2VsZi5CUk9OWkUgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDI1IC8vICJCUk9OWkUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTozOQogICAgLy8gc2VsZi5TSUxWRVIgPSBVSW50NjQoMikKICAgIGJ5dGVjIDI2IC8vICJTSUxWRVIiCiAgICBpbnRjXzIgLy8gMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo0MAogICAgLy8gc2VsZi5HT0xEID0gVUludDY0KDMpCiAgICBieXRlYyAyNyAvLyAiR09MRCIKICAgIHB1c2hpbnQgMyAvLyAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjQyLTQzCiAgICAvLyAjIERpY2UgUm9sbAogICAgLy8gc2VsZi5kaWNlX3BsYXllcjEgPSBBY2NvdW50KCkKICAgIGJ5dGVjIDQgLy8gImRpY2VfcGxheWVyMSIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo0NAogICAgLy8gc2VsZi5kaWNlX3BsYXllcjIgPSBBY2NvdW50KCkKICAgIGJ5dGVjIDcgLy8gImRpY2VfcGxheWVyMiIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo0NQogICAgLy8gc2VsZi5kaWNlX2JldCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgOCAvLyAiZGljZV9iZXQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo0NgogICAgLy8gc2VsZi5kaWNlX3JvbGwxID0gVUludDY0KDApCiAgICBieXRlYyA5IC8vICJkaWNlX3JvbGwxIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6NDcKICAgIC8vIHNlbGYuZGljZV9yb2xsMiA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTAgLy8gImRpY2Vfcm9sbDIiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo0OAogICAgLy8gc2VsZi5kaWNlX2FjdGl2ZSA9IEZhbHNlCiAgICBieXRlYyAyMSAvLyAiZGljZV9hY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo1MC01MQogICAgLy8gIyBSb2NrIFBhcGVyIFNjaXNzb3JzCiAgICAvLyBzZWxmLnJwc19wbGF5ZXIxID0gQWNjb3VudCgpCiAgICBieXRlYyA1IC8vICJycHNfcGxheWVyMSIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo1MgogICAgLy8gc2VsZi5ycHNfcGxheWVyMiA9IEFjY291bnQoKQogICAgYnl0ZWMgMTEgLy8gInJwc19wbGF5ZXIyIgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjUzCiAgICAvLyBzZWxmLnJwc19iZXQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDEyIC8vICJycHNfYmV0IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6NTQKICAgIC8vIHNlbGYucnBzX21vdmUxID0gc2VsZi5NT1ZFX05PTkUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJNT1ZFX05PTkUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuTU9WRV9OT05FIGV4aXN0cwogICAgYnl0ZWNfMiAvLyAicnBzX21vdmUxIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo1NQogICAgLy8gc2VsZi5ycHNfbW92ZTIgPSBzZWxmLk1PVkVfTk9ORQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIk1PVkVfTk9ORSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5NT1ZFX05PTkUgZXhpc3RzCiAgICBieXRlY18zIC8vICJycHNfbW92ZTIiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjU2CiAgICAvLyBzZWxmLnJwc19hY3RpdmUgPSBGYWxzZQogICAgYnl0ZWMgMjIgLy8gInJwc19hY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo1OC01OQogICAgLy8gIyBNeXN0ZXJ5IEJveAogICAgLy8gc2VsZi5ib3hfcGxheWVyID0gQWNjb3VudCgpCiAgICBieXRlYyAxNiAvLyAiYm94X3BsYXllciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo2MAogICAgLy8gc2VsZi5ib3hfYmV0ID0gVUludDY0KDApCiAgICBieXRlYyAxMyAvLyAiYm94X2JldCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjYxCiAgICAvLyBzZWxmLmJveF9hY3RpdmUgPSBGYWxzZQogICAgYnl0ZWMgMTcgLy8gImJveF9hY3RpdmUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo2My02NAogICAgLy8gIyBNZW1vcnkgTWF0Y2gKICAgIC8vIHNlbGYubWF0Y2hfcGxheWVyID0gQWNjb3VudCgpCiAgICBieXRlYyAxNCAvLyAibWF0Y2hfcGxheWVyIgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjY1CiAgICAvLyBzZWxmLm1hdGNoX2JldCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMjMgLy8gIm1hdGNoX2JldCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjY2CiAgICAvLyBzZWxmLm1hdGNoX2NvdW50ID0gVUludDY0KDApCiAgICBieXRlYyA2IC8vICJtYXRjaF9jb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBzZWxmLm1hdGNoX2FjdGl2ZSA9IEZhbHNlCiAgICBieXRlYyAxNSAvLyAibWF0Y2hfYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBHYW1lc0h1YihBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDE2CiAgICBwdXNoYnl0ZXNzIDB4ZjdhYTBkNDUgMHg5YjQ5ODlkNCAweDQ0OTdhYjViIDB4MzFjNmMyZmYgMHg2ODIwNTY3MyAweDhlNzAzYjgzIDB4Zjg2MTU5NWIgMHhlMjM4YzYzNSAweDU4YjhjZWNiIDB4MWU1MjBmM2EgMHg5MGEwMjMxYiAvLyBtZXRob2QgImRpY2Vfam9pbihhY2NvdW50LHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImRpY2Vfcm9sbChhY2NvdW50LHVpbnQ2NClzdHJpbmciLCBtZXRob2QgImRpY2VfcmVzb2x2ZSgpc3RyaW5nIiwgbWV0aG9kICJycHNfam9pbihhY2NvdW50LHVpbnQ2NClzdHJpbmciLCBtZXRob2QgInJwc19wbGF5KGFjY291bnQsdWludDY0KXN0cmluZyIsIG1ldGhvZCAicnBzX3Jlc29sdmUoKXN0cmluZyIsIG1ldGhvZCAiYm94X2pvaW4oYWNjb3VudCx1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJib3hfb3BlbihhY2NvdW50LHVpbnQ2NClzdHJpbmciLCBtZXRob2QgIm1hdGNoX2pvaW4oYWNjb3VudCx1aW50NjQpc3RyaW5nIiwgbWV0aG9kICJtYXRjaF9wbGF5KGFjY291bnQsdWludDY0KXN0cmluZyIsIG1ldGhvZCAibWF0Y2hfZW5kKGFjY291bnQpc3RyaW5nIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9kaWNlX2pvaW5fcm91dGVANSBtYWluX2RpY2Vfcm9sbF9yb3V0ZUA2IG1haW5fZGljZV9yZXNvbHZlX3JvdXRlQDcgbWFpbl9ycHNfam9pbl9yb3V0ZUA4IG1haW5fcnBzX3BsYXlfcm91dGVAOSBtYWluX3Jwc19yZXNvbHZlX3JvdXRlQDEwIG1haW5fYm94X2pvaW5fcm91dGVAMTEgbWFpbl9ib3hfb3Blbl9yb3V0ZUAxMiBtYWluX21hdGNoX2pvaW5fcm91dGVAMTMgbWFpbl9tYXRjaF9wbGF5X3JvdXRlQDE0IG1haW5fbWF0Y2hfZW5kX3JvdXRlQDE1CgptYWluX2FmdGVyX2lmX2Vsc2VAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgR2FtZXNIdWIoQVJDNENvbnRyYWN0KToKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fbWF0Y2hfZW5kX3JvdXRlQDE1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI2NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBHYW1lc0h1YihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBtYXRjaF9lbmQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fbWF0Y2hfcGxheV9yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgR2FtZXNIdWIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgbWF0Y2hfcGxheQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9tYXRjaF9qb2luX3JvdXRlQDEzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI0NC0yNDUKICAgIC8vICMgLS0tLS0tLS0tLSBNZW1vcnkgTWF0Y2ggLS0tLS0tLS0tLQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBHYW1lc0h1YihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNDQtMjQ1CiAgICAvLyAjIC0tLS0tLS0tLS0gTWVtb3J5IE1hdGNoIC0tLS0tLS0tLS0KICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBtYXRjaF9qb2luCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JveF9vcGVuX3JvdXRlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjIyMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBHYW1lc0h1YihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBib3hfb3BlbgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9ib3hfam9pbl9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMDctMjA4CiAgICAvLyAjIC0tLS0tLS0tLS0gTXlzdGVyeSBCb3ggLS0tLS0tLS0tLQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBHYW1lc0h1YihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMDctMjA4CiAgICAvLyAjIC0tLS0tLS0tLS0gTXlzdGVyeSBCb3ggLS0tLS0tLS0tLQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGJveF9qb2luCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3Jwc19yZXNvbHZlX3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjE3OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgcnBzX3Jlc29sdmUKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcnBzX3BsYXlfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MwogICAgLy8gY2xhc3MgR2FtZXNIdWIoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgcnBzX3BsYXkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcnBzX2pvaW5fcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMzktMTQwCiAgICAvLyAjIC0tLS0tLS0tLS0gUm9jayBQYXBlciBTY2lzc29ycyAtLS0tLS0tLS0tCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEdhbWVzSHViKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjEzOS0xNDAKICAgIC8vICMgLS0tLS0tLS0tLSBSb2NrIFBhcGVyIFNjaXNzb3JzIC0tLS0tLS0tLS0KICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBycHNfam9pbgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kaWNlX3Jlc29sdmVfcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGRpY2VfcmVzb2x2ZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kaWNlX3JvbGxfcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTozCiAgICAvLyBjbGFzcyBHYW1lc0h1YihBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGRpY2Vfcm9sbAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kaWNlX2pvaW5fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo3NC03NQogICAgLy8gIyAtLS0tLS0tLS0tIERpY2UgUm9sbCAtLS0tLS0tLS0tCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEdhbWVzSHViKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5Ojc0LTc1CiAgICAvLyAjIC0tLS0tLS0tLS0gRGljZSBSb2xsIC0tLS0tLS0tLS0KICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBkaWNlX2pvaW4KICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjMKICAgIC8vIGNsYXNzIEdhbWVzSHViKEFSQzRDb250cmFjdCk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE4CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nYW1lc2h1Yi5jb250cmFjdC5HYW1lc0h1Yi5wYXkocmVjZWl2ZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKcGF5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjY5LTcxCiAgICAvLyAjIC0tLS0tLS0tLS0gVXRpbGl0eSAtLS0tLS0tLS0tCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIHBheShzZWxmLCByZWNlaXZlcjogQWNjb3VudCwgYW1vdW50OiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo3MgogICAgLy8gaXR4bi5QYXltZW50KHJlY2VpdmVyPXJlY2VpdmVyLCBhbW91bnQ9YW1vdW50LCBmZWU9c2VsZi5NSU5fRkVFKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI0IC8vICJNSU5fRkVFIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLk1JTl9GRUUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmdhbWVzaHViLmNvbnRyYWN0LkdhbWVzSHViLmRpY2Vfam9pbihwbGF5ZXI6IGJ5dGVzLCBiZXQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmRpY2Vfam9pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo3NC03NgogICAgLy8gIyAtLS0tLS0tLS0tIERpY2UgUm9sbCAtLS0tLS0tLS0tCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBkaWNlX2pvaW4oc2VsZiwgcGxheWVyOiBBY2NvdW50LCBiZXQ6IFVJbnQ2NCkgLT4gYXJjNC5TdHJpbmc6CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo3NwogICAgLy8gaWYgVHhuLmFtb3VudCAhPSBiZXQ6CiAgICB0eG4gQW1vdW50CiAgICBmcmFtZV9kaWcgLTEKICAgICE9CiAgICBieiBkaWNlX2pvaW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6NzgKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiRGljZTogU2VudCBhbW91bnQgZG9lcyBub3QgbWF0Y2ggYmV0IikKICAgIHB1c2hieXRlcyAweDAwMjQ0NDY5NjM2NTNhMjA1MzY1NmU3NDIwNjE2ZDZmNzU2ZTc0MjA2NDZmNjU3MzIwNmU2Zjc0MjA2ZDYxNzQ2MzY4MjA2MjY1NzQKICAgIHJldHN1YgoKZGljZV9qb2luX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo4MAogICAgLy8gaWYgbm90IHNlbGYuZGljZV9hY3RpdmU6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjEgLy8gImRpY2VfYWN0aXZlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRpY2VfYWN0aXZlIGV4aXN0cwogICAgYm56IGRpY2Vfam9pbl9lbHNlX2JvZHlANAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjgxCiAgICAvLyBzZWxmLmRpY2VfcGxheWVyMSA9IHBsYXllcgogICAgYnl0ZWMgNCAvLyAiZGljZV9wbGF5ZXIxIgogICAgZnJhbWVfZGlnIC0yCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBzZWxmLmRpY2VfYmV0ID0gYmV0CiAgICBieXRlYyA4IC8vICJkaWNlX2JldCIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo4MwogICAgLy8gc2VsZi5kaWNlX2FjdGl2ZSA9IFRydWUKICAgIGJ5dGVjIDIxIC8vICJkaWNlX2FjdGl2ZSIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5Ojg0CiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIkRpY2U6IFBsYXllciAxIGpvaW5lZCIpCiAgICBwdXNoYnl0ZXMgMHgwMDE1NDQ2OTYzNjUzYTIwNTA2YzYxNzk2NTcyMjAzMTIwNmE2ZjY5NmU2NTY0CiAgICByZXRzdWIKCmRpY2Vfam9pbl9lbHNlX2JvZHlANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo4NQogICAgLy8gZWxpZiBzZWxmLmRpY2VfcGxheWVyMiA9PSBBY2NvdW50KCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAiZGljZV9wbGF5ZXIyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRpY2VfcGxheWVyMiBleGlzdHMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGJ6IGRpY2Vfam9pbl9lbHNlX2JvZHlAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo4NgogICAgLy8gaWYgYmV0ICE9IHNlbGYuZGljZV9iZXQ6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZGljZV9iZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGljZV9iZXQgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICE9CiAgICBieiBkaWNlX2pvaW5fYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6ODcKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiRGljZTogQmV0IG11c3QgbWF0Y2ggUGxheWVyIDEiKQogICAgcHVzaGJ5dGVzIDB4MDAxZDQ0Njk2MzY1M2EyMDQyNjU3NDIwNmQ3NTczNzQyMDZkNjE3NDYzNjgyMDUwNmM2MTc5NjU3MjIwMzEKICAgIHJldHN1YgoKZGljZV9qb2luX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo4OAogICAgLy8gaWYgcGxheWVyID09IHNlbGYuZGljZV9wbGF5ZXIxOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImRpY2VfcGxheWVyMSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kaWNlX3BsYXllcjEgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieiBkaWNlX2pvaW5fYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6ODkKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiRGljZTogUGxheWVyIGFscmVhZHkgam9pbmVkIikKICAgIHB1c2hieXRlcyAweDAwMWI0NDY5NjM2NTNhMjA1MDZjNjE3OTY1NzIyMDYxNmM3MjY1NjE2NDc5MjA2YTZmNjk2ZTY1NjQKICAgIHJldHN1YgoKZGljZV9qb2luX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo5MAogICAgLy8gc2VsZi5kaWNlX3BsYXllcjIgPSBwbGF5ZXIKICAgIGJ5dGVjIDcgLy8gImRpY2VfcGxheWVyMiIKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo5MQogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nKCJEaWNlOiBQbGF5ZXIgMiBqb2luZWQiKQogICAgcHVzaGJ5dGVzIDB4MDAxNTQ0Njk2MzY1M2EyMDUwNmM2MTc5NjU3MjIwMzIyMDZhNmY2OTZlNjU2NAogICAgcmV0c3ViCgpkaWNlX2pvaW5fZWxzZV9ib2R5QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjkzCiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIkRpY2UgZ2FtZSBmdWxsIikKICAgIHB1c2hieXRlcyAweDAwMGU0NDY5NjM2NTIwNjc2MTZkNjUyMDY2NzU2YzZjCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2FtZXNodWIuY29udHJhY3QuR2FtZXNIdWIuZGljZV9yb2xsKHBsYXllcjogYnl0ZXMsIHJvbGw6IHVpbnQ2NCkgLT4gYnl0ZXM6CmRpY2Vfcm9sbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo5NS05NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZGljZV9yb2xsKHNlbGYsIHBsYXllcjogQWNjb3VudCwgcm9sbDogVUludDY0KSAtPiBhcmM0LlN0cmluZzoKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5Ojk3CiAgICAvLyBpZiBwbGF5ZXIgIT0gc2VsZi5kaWNlX3BsYXllcjEgYW5kIHBsYXllciAhPSBzZWxmLmRpY2VfcGxheWVyMjoKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJkaWNlX3BsYXllcjEiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGljZV9wbGF5ZXIxIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAhPQogICAgYnogZGljZV9yb2xsX2FmdGVyX2lmX2Vsc2VAMwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImRpY2VfcGxheWVyMiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kaWNlX3BsYXllcjIgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgICE9CiAgICBieiBkaWNlX3JvbGxfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6OTgKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiRGljZTogUGxheWVyIG5vdCBpbiBnYW1lIikKICAgIHB1c2hieXRlcyAweDAwMTg0NDY5NjM2NTNhMjA1MDZjNjE3OTY1NzIyMDZlNmY3NDIwNjk2ZTIwNjc2MTZkNjUKICAgIHJldHN1YgoKZGljZV9yb2xsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weTo5OQogICAgLy8gaWYgcm9sbCA8IFVJbnQ2NCgxKSBvciByb2xsID4gVUludDY0KDYpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMQogICAgPAogICAgYm56IGRpY2Vfcm9sbF9pZl9ib2R5QDUKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGludCA2IC8vIDYKICAgID4KICAgIGJ6IGRpY2Vfcm9sbF9hZnRlcl9pZl9lbHNlQDYKCmRpY2Vfcm9sbF9pZl9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTAwCiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIkRpY2U6IEludmFsaWQgcm9sbCIpCiAgICBwdXNoYnl0ZXMgMHgwMDEyNDQ2OTYzNjUzYTIwNDk2ZTc2NjE2YzY5NjQyMDcyNmY2YzZjCiAgICByZXRzdWIKCmRpY2Vfcm9sbF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTAxCiAgICAvLyBpZiBwbGF5ZXIgPT0gc2VsZi5kaWNlX3BsYXllcjE6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiZGljZV9wbGF5ZXIxIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRpY2VfcGxheWVyMSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IGRpY2Vfcm9sbF9lbHNlX2JvZHlAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMDIKICAgIC8vIGlmIHNlbGYuZGljZV9yb2xsMSAhPSBVSW50NjQoMCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAiZGljZV9yb2xsMSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kaWNlX3JvbGwxIGV4aXN0cwogICAgYnogZGljZV9yb2xsX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nKCJEaWNlOiBBbHJlYWR5IHJvbGxlZCIpCiAgICBieXRlYyAyOCAvLyAweDAwMTQ0NDY5NjM2NTNhMjA0MTZjNzI2NTYxNjQ3OTIwNzI2ZjZjNmM2NTY0CiAgICByZXRzdWIKCmRpY2Vfcm9sbF9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTA0CiAgICAvLyBzZWxmLmRpY2Vfcm9sbDEgPSByb2xsCiAgICBieXRlYyA5IC8vICJkaWNlX3JvbGwxIgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjEwNQogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nKCJEaWNlOiBQbGF5ZXIgMSByb2xsZWQiKQogICAgcHVzaGJ5dGVzIDB4MDAxNTQ0Njk2MzY1M2EyMDUwNmM2MTc5NjU3MjIwMzEyMDcyNmY2YzZjNjU2NAogICAgcmV0c3ViCgpkaWNlX3JvbGxfZWxzZV9ib2R5QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjEwNwogICAgLy8gaWYgc2VsZi5kaWNlX3JvbGwyICE9IFVJbnQ2NCgwKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAiZGljZV9yb2xsMiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kaWNlX3JvbGwyIGV4aXN0cwogICAgYnogZGljZV9yb2xsX2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMDgKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiRGljZTogQWxyZWFkeSByb2xsZWQiKQogICAgYnl0ZWMgMjggLy8gMHgwMDE0NDQ2OTYzNjUzYTIwNDE2YzcyNjU2MTY0NzkyMDcyNmY2YzZjNjU2NAogICAgcmV0c3ViCgpkaWNlX3JvbGxfYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMDkKICAgIC8vIHNlbGYuZGljZV9yb2xsMiA9IHJvbGwKICAgIGJ5dGVjIDEwIC8vICJkaWNlX3JvbGwyIgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjExMAogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nKCJEaWNlOiBQbGF5ZXIgMiByb2xsZWQiKQogICAgcHVzaGJ5dGVzIDB4MDAxNTQ0Njk2MzY1M2EyMDUwNmM2MTc5NjU3MjIwMzIyMDcyNmY2YzZjNjU2NAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmdhbWVzaHViLmNvbnRyYWN0LkdhbWVzSHViLmRpY2VfcmVzb2x2ZSgpIC0+IGJ5dGVzOgpkaWNlX3Jlc29sdmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTEyLTExMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgZGljZV9yZXNvbHZlKHNlbGYpIC0+IGFyYzQuU3RyaW5nOgogICAgcHJvdG8gMCAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMTQKICAgIC8vIGlmIHNlbGYuZGljZV9yb2xsMSA9PSBVSW50NjQoMCkgb3Igc2VsZi5kaWNlX3JvbGwyID09IFVJbnQ2NCgwKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJkaWNlX3JvbGwxIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRpY2Vfcm9sbDEgZXhpc3RzCiAgICBieiBkaWNlX3Jlc29sdmVfaWZfYm9keUAyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gImRpY2Vfcm9sbDIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGljZV9yb2xsMiBleGlzdHMKICAgIGJueiBkaWNlX3Jlc29sdmVfYWZ0ZXJfaWZfZWxzZUAzCgpkaWNlX3Jlc29sdmVfaWZfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjExNQogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nKCJEaWNlOiBCb3RoIHBsYXllcnMgbXVzdCByb2xsIGZpcnN0IikKICAgIHB1c2hieXRlcyAweDAwMjI0NDY5NjM2NTNhMjA0MjZmNzQ2ODIwNzA2YzYxNzk2NTcyNzMyMDZkNzU3Mzc0MjA3MjZmNmM2YzIwNjY2OTcyNzM3NAogICAgc3dhcAogICAgcmV0c3ViCgpkaWNlX3Jlc29sdmVfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjExNwogICAgLy8gdG90YWxfcG90ID0gc2VsZi5kaWNlX2JldCAqIFVJbnQ2NCgyKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gImRpY2VfYmV0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRpY2VfYmV0IGV4aXN0cwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjExOQogICAgLy8gaWYgc2VsZi5kaWNlX3JvbGwxID09IHNlbGYuZGljZV9yb2xsMjoKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJkaWNlX3JvbGwxIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRpY2Vfcm9sbDEgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gImRpY2Vfcm9sbDIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGljZV9yb2xsMiBleGlzdHMKICAgID09CiAgICBieiBkaWNlX3Jlc29sdmVfZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMjAKICAgIC8vIHNlbGYucGF5KHNlbGYuZGljZV9wbGF5ZXIxLCBzZWxmLmRpY2VfYmV0KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImRpY2VfcGxheWVyMSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kaWNlX3BsYXllcjEgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiZGljZV9iZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGljZV9iZXQgZXhpc3RzCiAgICBjYWxsc3ViIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjEyMQogICAgLy8gc2VsZi5wYXkoc2VsZi5kaWNlX3BsYXllcjIsIHNlbGYuZGljZV9iZXQpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAiZGljZV9wbGF5ZXIyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRpY2VfcGxheWVyMiBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJkaWNlX2JldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kaWNlX2JldCBleGlzdHMKICAgIGNhbGxzdWIgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTIyCiAgICAvLyByZXN1bHQgPSBhcmM0LlN0cmluZygiRGljZTogRHJhdyIpCiAgICBwdXNoYnl0ZXMgMHgwMDBhNDQ2OTYzNjUzYTIwNDQ3MjYxNzcKCmRpY2VfcmVzb2x2ZV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTMwCiAgICAvLyBzZWxmLmRpY2VfcGxheWVyMSA9IEFjY291bnQoKQogICAgYnl0ZWMgNCAvLyAiZGljZV9wbGF5ZXIxIgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjEzMQogICAgLy8gc2VsZi5kaWNlX3BsYXllcjIgPSBBY2NvdW50KCkKICAgIGJ5dGVjIDcgLy8gImRpY2VfcGxheWVyMiIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMzIKICAgIC8vIHNlbGYuZGljZV9iZXQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDggLy8gImRpY2VfYmV0IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTMzCiAgICAvLyBzZWxmLmRpY2Vfcm9sbDEgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDkgLy8gImRpY2Vfcm9sbDEiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMzQKICAgIC8vIHNlbGYuZGljZV9yb2xsMiA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTAgLy8gImRpY2Vfcm9sbDIiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMzUKICAgIC8vIHNlbGYuZGljZV9hY3RpdmUgPSBGYWxzZQogICAgYnl0ZWMgMjEgLy8gImRpY2VfYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTM3CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICBzd2FwCiAgICByZXRzdWIKCmRpY2VfcmVzb2x2ZV9lbHNlX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMjMKICAgIC8vIGVsaWYgc2VsZi5kaWNlX3JvbGwxID4gc2VsZi5kaWNlX3JvbGwyOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDkgLy8gImRpY2Vfcm9sbDEiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGljZV9yb2xsMSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAiZGljZV9yb2xsMiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kaWNlX3JvbGwyIGV4aXN0cwogICAgPgogICAgYnogZGljZV9yZXNvbHZlX2Vsc2VfYm9keUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTI0CiAgICAvLyBzZWxmLnBheShzZWxmLmRpY2VfcGxheWVyMSwgdG90YWxfcG90KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gImRpY2VfcGxheWVyMSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kaWNlX3BsYXllcjEgZXhpc3RzCiAgICBmcmFtZV9kaWcgMAogICAgY2FsbHN1YiBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMjUKICAgIC8vIHJlc3VsdCA9IGFyYzQuU3RyaW5nKCJEaWNlOiBQbGF5ZXIgMSB3aW5zIikKICAgIHB1c2hieXRlcyAweDAwMTM0NDY5NjM2NTNhMjA1MDZjNjE3OTY1NzIyMDMxMjA3NzY5NmU3MwogICAgYiBkaWNlX3Jlc29sdmVfYWZ0ZXJfaWZfZWxzZUA5CgpkaWNlX3Jlc29sdmVfZWxzZV9ib2R5QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTI3CiAgICAvLyBzZWxmLnBheShzZWxmLmRpY2VfcGxheWVyMiwgdG90YWxfcG90KQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImRpY2VfcGxheWVyMiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kaWNlX3BsYXllcjIgZXhpc3RzCiAgICBmcmFtZV9kaWcgMAogICAgY2FsbHN1YiBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxMjgKICAgIC8vIHJlc3VsdCA9IGFyYzQuU3RyaW5nKCJEaWNlOiBQbGF5ZXIgMiB3aW5zIikKICAgIHB1c2hieXRlcyAweDAwMTM0NDY5NjM2NTNhMjA1MDZjNjE3OTY1NzIyMDMyMjA3NzY5NmU3MwogICAgYiBkaWNlX3Jlc29sdmVfYWZ0ZXJfaWZfZWxzZUA5CgoKLy8gc21hcnRfY29udHJhY3RzLmdhbWVzaHViLmNvbnRyYWN0LkdhbWVzSHViLnJwc19qb2luKHBsYXllcjogYnl0ZXMsIGJldDogdWludDY0KSAtPiBieXRlczoKcnBzX2pvaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTM5LTE0MQogICAgLy8gIyAtLS0tLS0tLS0tIFJvY2sgUGFwZXIgU2Npc3NvcnMgLS0tLS0tLS0tLQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgcnBzX2pvaW4oc2VsZiwgcGxheWVyOiBBY2NvdW50LCBiZXQ6IFVJbnQ2NCkgLT4gYXJjNC5TdHJpbmc6CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxNDIKICAgIC8vIGlmIFR4bi5hbW91bnQgIT0gYmV0OgogICAgdHhuIEFtb3VudAogICAgZnJhbWVfZGlnIC0xCiAgICAhPQogICAgYnogcnBzX2pvaW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTQzCiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIlJQUzogU2VudCBhbW91bnQgZG9lcyBub3QgbWF0Y2ggYmV0IikKICAgIHB1c2hieXRlcyAweDAwMjM1MjUwNTMzYTIwNTM2NTZlNzQyMDYxNmQ2Zjc1NmU3NDIwNjQ2ZjY1NzMyMDZlNmY3NDIwNmQ2MTc0NjM2ODIwNjI2NTc0CiAgICByZXRzdWIKCnJwc19qb2luX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxNDUKICAgIC8vIGlmIG5vdCBzZWxmLnJwc19hY3RpdmU6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjIgLy8gInJwc19hY3RpdmUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucnBzX2FjdGl2ZSBleGlzdHMKICAgIGJueiBycHNfam9pbl9lbHNlX2JvZHlANAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjE0NgogICAgLy8gc2VsZi5ycHNfcGxheWVyMSA9IHBsYXllcgogICAgYnl0ZWMgNSAvLyAicnBzX3BsYXllcjEiCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTQ3CiAgICAvLyBzZWxmLnJwc19iZXQgPSBiZXQKICAgIGJ5dGVjIDEyIC8vICJycHNfYmV0IgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjE0OAogICAgLy8gc2VsZi5ycHNfYWN0aXZlID0gVHJ1ZQogICAgYnl0ZWMgMjIgLy8gInJwc19hY3RpdmUiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxNDkKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiUlBTOiBQbGF5ZXIgMSBqb2luZWQiKQogICAgcHVzaGJ5dGVzIDB4MDAxNDUyNTA1MzNhMjA1MDZjNjE3OTY1NzIyMDMxMjA2YTZmNjk2ZTY1NjQKICAgIHJldHN1YgoKcnBzX2pvaW5fZWxzZV9ib2R5QDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTUwCiAgICAvLyBlbGlmIHNlbGYucnBzX3BsYXllcjIgPT0gQWNjb3VudCgpOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJycHNfcGxheWVyMiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ycHNfcGxheWVyMiBleGlzdHMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGJ6IHJwc19qb2luX2Vsc2VfYm9keUAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjE1MQogICAgLy8gaWYgYmV0ICE9IHNlbGYucnBzX2JldDoKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAicnBzX2JldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ycHNfYmV0IGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICAhPQogICAgYnogcnBzX2pvaW5fYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTUyCiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIlJQUzogQmV0IG11c3QgbWF0Y2ggUGxheWVyIDEiKQogICAgcHVzaGJ5dGVzIDB4MDAxYzUyNTA1MzNhMjA0MjY1NzQyMDZkNzU3Mzc0MjA2ZDYxNzQ2MzY4MjA1MDZjNjE3OTY1NzIyMDMxCiAgICByZXRzdWIKCnJwc19qb2luX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxNTMKICAgIC8vIGlmIHBsYXllciA9PSBzZWxmLnJwc19wbGF5ZXIxOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInJwc19wbGF5ZXIxIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJwc19wbGF5ZXIxIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYnogcnBzX2pvaW5fYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTU0CiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIlJQUzogUGxheWVyIGFscmVhZHkgam9pbmVkIikKICAgIHB1c2hieXRlcyAweDAwMWE1MjUwNTMzYTIwNTA2YzYxNzk2NTcyMjA2MTZjNzI2NTYxNjQ3OTIwNmE2ZjY5NmU2NTY0CiAgICByZXRzdWIKCnJwc19qb2luX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxNTUKICAgIC8vIHNlbGYucnBzX3BsYXllcjIgPSBwbGF5ZXIKICAgIGJ5dGVjIDExIC8vICJycHNfcGxheWVyMiIKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxNTYKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiUlBTOiBQbGF5ZXIgMiBqb2luZWQiKQogICAgcHVzaGJ5dGVzIDB4MDAxNDUyNTA1MzNhMjA1MDZjNjE3OTY1NzIyMDMyMjA2YTZmNjk2ZTY1NjQKICAgIHJldHN1YgoKcnBzX2pvaW5fZWxzZV9ib2R5QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjE1OAogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nKCJSUFMgZ2FtZSBmdWxsIikKICAgIHB1c2hieXRlcyAweDAwMGQ1MjUwNTMyMDY3NjE2ZDY1MjA2Njc1NmM2YwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmdhbWVzaHViLmNvbnRyYWN0LkdhbWVzSHViLnJwc19wbGF5KHBsYXllcjogYnl0ZXMsIG1vdmU6IHVpbnQ2NCkgLT4gYnl0ZXM6CnJwc19wbGF5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjE2MC0xNjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHJwc19wbGF5KHNlbGYsIHBsYXllcjogQWNjb3VudCwgbW92ZTogVUludDY0KSAtPiBhcmM0LlN0cmluZzoKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjE2MgogICAgLy8gaWYgcGxheWVyICE9IHNlbGYucnBzX3BsYXllcjEgYW5kIHBsYXllciAhPSBzZWxmLnJwc19wbGF5ZXIyOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInJwc19wbGF5ZXIxIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJwc19wbGF5ZXIxIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAhPQogICAgYnogcnBzX3BsYXlfYWZ0ZXJfaWZfZWxzZUAzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gInJwc19wbGF5ZXIyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJwc19wbGF5ZXIyIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAhPQogICAgYnogcnBzX3BsYXlfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTYzCiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIlJQUzogUGxheWVyIG5vdCBpbiBnYW1lIikKICAgIHB1c2hieXRlcyAweDAwMTc1MjUwNTMzYTIwNTA2YzYxNzk2NTcyMjA2ZTZmNzQyMDY5NmUyMDY3NjE2ZDY1CiAgICByZXRzdWIKCnJwc19wbGF5X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxNjQKICAgIC8vIGlmIG1vdmUgIT0gc2VsZi5ST0NLIGFuZCBtb3ZlICE9IHNlbGYuUEFQRVIgYW5kIG1vdmUgIT0gc2VsZi5TQ0lTU09SUzoKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxOCAvLyAiUk9DSyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ST0NLIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICAhPQogICAgYnogcnBzX3BsYXlfYWZ0ZXJfaWZfZWxzZUA3CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTkgLy8gIlBBUEVSIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLlBBUEVSIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICAhPQogICAgYnogcnBzX3BsYXlfYWZ0ZXJfaWZfZWxzZUA3CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjAgLy8gIlNDSVNTT1JTIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLlNDSVNTT1JTIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICAhPQogICAgYnogcnBzX3BsYXlfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTY1CiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIlJQUzogSW52YWxpZCBtb3ZlIikKICAgIHB1c2hieXRlcyAweDAwMTE1MjUwNTMzYTIwNDk2ZTc2NjE2YzY5NjQyMDZkNmY3NjY1CiAgICByZXRzdWIKCnJwc19wbGF5X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxNjcKICAgIC8vIGlmIHBsYXllciA9PSBzZWxmLnJwc19wbGF5ZXIxOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInJwc19wbGF5ZXIxIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJwc19wbGF5ZXIxIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICA9PQogICAgYnogcnBzX3BsYXlfZWxzZV9ib2R5QDExCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTY4CiAgICAvLyBpZiBzZWxmLnJwc19tb3ZlMSAhPSBzZWxmLk1PVkVfTk9ORToKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJycHNfbW92ZTEiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucnBzX21vdmUxIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIk1PVkVfTk9ORSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5NT1ZFX05PTkUgZXhpc3RzCiAgICAhPQogICAgYnogcnBzX3BsYXlfYWZ0ZXJfaWZfZWxzZUAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nKCJSUFM6IEFscmVhZHkgcGxheWVkIikKICAgIGJ5dGVjIDI5IC8vIDB4MDAxMzUyNTA1MzNhMjA0MTZjNzI2NTYxNjQ3OTIwNzA2YzYxNzk2NTY0CiAgICByZXRzdWIKCnJwc19wbGF5X2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTcwCiAgICAvLyBzZWxmLnJwc19tb3ZlMSA9IG1vdmUKICAgIGJ5dGVjXzIgLy8gInJwc19tb3ZlMSIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxNzEKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiUlBTOiBQbGF5ZXIgMSBwbGF5ZWQiKQogICAgcHVzaGJ5dGVzIDB4MDAxNDUyNTA1MzNhMjA1MDZjNjE3OTY1NzIyMDMxMjA3MDZjNjE3OTY1NjQKICAgIHJldHN1YgoKcnBzX3BsYXlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjE3MwogICAgLy8gaWYgc2VsZi5ycHNfbW92ZTIgIT0gc2VsZi5NT1ZFX05PTkU6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicnBzX21vdmUyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJwc19tb3ZlMiBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJNT1ZFX05PTkUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuTU9WRV9OT05FIGV4aXN0cwogICAgIT0KICAgIGJ6IHJwc19wbGF5X2FmdGVyX2lmX2Vsc2VAMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxNzQKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiUlBTOiBBbHJlYWR5IHBsYXllZCIpCiAgICBieXRlYyAyOSAvLyAweDAwMTM1MjUwNTMzYTIwNDE2YzcyNjU2MTY0NzkyMDcwNmM2MTc5NjU2NAogICAgcmV0c3ViCgpycHNfcGxheV9hZnRlcl9pZl9lbHNlQDEzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjE3NQogICAgLy8gc2VsZi5ycHNfbW92ZTIgPSBtb3ZlCiAgICBieXRlY18zIC8vICJycHNfbW92ZTIiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTc2CiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIlJQUzogUGxheWVyIDIgcGxheWVkIikKICAgIHB1c2hieXRlcyAweDAwMTQ1MjUwNTMzYTIwNTA2YzYxNzk2NTcyMjAzMjIwNzA2YzYxNzk2NTY0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2FtZXNodWIuY29udHJhY3QuR2FtZXNIdWIucnBzX3Jlc29sdmUoKSAtPiBieXRlczoKcnBzX3Jlc29sdmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTc4LTE3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgcnBzX3Jlc29sdmUoc2VsZikgLT4gYXJjNC5TdHJpbmc6CiAgICBwcm90byAwIDEKICAgIHB1c2hieXRlcyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjE4MAogICAgLy8gaWYgc2VsZi5ycHNfbW92ZTEgPT0gc2VsZi5NT1ZFX05PTkUgb3Igc2VsZi5ycHNfbW92ZTIgPT0gc2VsZi5NT1ZFX05PTkU6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAicnBzX21vdmUxIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJwc19tb3ZlMSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJNT1ZFX05PTkUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuTU9WRV9OT05FIGV4aXN0cwogICAgPT0KICAgIGJueiBycHNfcmVzb2x2ZV9pZl9ib2R5QDIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJycHNfbW92ZTIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucnBzX21vdmUyIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIk1PVkVfTk9ORSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5NT1ZFX05PTkUgZXhpc3RzCiAgICA9PQogICAgYnogcnBzX3Jlc29sdmVfYWZ0ZXJfaWZfZWxzZUAzCgpycHNfcmVzb2x2ZV9pZl9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTgxCiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIlJQUzogQm90aCBwbGF5ZXJzIG11c3QgcGxheSBmaXJzdCIpCiAgICBwdXNoYnl0ZXMgMHgwMDIxNTI1MDUzM2EyMDQyNmY3NDY4MjA3MDZjNjE3OTY1NzI3MzIwNmQ3NTczNzQyMDcwNmM2MTc5MjA2NjY5NzI3Mzc0CiAgICBzd2FwCiAgICByZXRzdWIKCnJwc19yZXNvbHZlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxODMKICAgIC8vIHRvdGFsX3BvdCA9IHNlbGYucnBzX2JldCAqIFVJbnQ2NCgyKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJycHNfYmV0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJwc19iZXQgZXhpc3RzCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTg1CiAgICAvLyBpZiBzZWxmLnJwc19tb3ZlMSA9PSBzZWxmLnJwc19tb3ZlMjoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJycHNfbW92ZTEiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucnBzX21vdmUxIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInJwc19tb3ZlMiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ycHNfbW92ZTIgZXhpc3RzCiAgICA9PQogICAgYnogcnBzX3Jlc29sdmVfZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxODYKICAgIC8vIHNlbGYucGF5KHNlbGYucnBzX3BsYXllcjEsIHNlbGYucnBzX2JldCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJycHNfcGxheWVyMSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ycHNfcGxheWVyMSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAicnBzX2JldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ycHNfYmV0IGV4aXN0cwogICAgY2FsbHN1YiBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxODcKICAgIC8vIHNlbGYucGF5KHNlbGYucnBzX3BsYXllcjIsIHNlbGYucnBzX2JldCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAicnBzX3BsYXllcjIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucnBzX3BsYXllcjIgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTIgLy8gInJwc19iZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucnBzX2JldCBleGlzdHMKICAgIGNhbGxzdWIgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTg4CiAgICAvLyByZXN1bHQgPSBhcmM0LlN0cmluZygiUlBTOiBEcmF3IikKICAgIHB1c2hieXRlcyAweDAwMDk1MjUwNTMzYTIwNDQ3MjYxNzcKCnJwc19yZXNvbHZlX2FmdGVyX2lmX2Vsc2VAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTk4CiAgICAvLyBzZWxmLnJwc19wbGF5ZXIxID0gQWNjb3VudCgpCiAgICBieXRlYyA1IC8vICJycHNfcGxheWVyMSIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxOTkKICAgIC8vIHNlbGYucnBzX3BsYXllcjIgPSBBY2NvdW50KCkKICAgIGJ5dGVjIDExIC8vICJycHNfcGxheWVyMiIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMDAKICAgIC8vIHNlbGYucnBzX2JldCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTIgLy8gInJwc19iZXQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMDEKICAgIC8vIHNlbGYucnBzX21vdmUxID0gc2VsZi5NT1ZFX05PTkUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJNT1ZFX05PTkUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuTU9WRV9OT05FIGV4aXN0cwogICAgYnl0ZWNfMiAvLyAicnBzX21vdmUxIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMDIKICAgIC8vIHNlbGYucnBzX21vdmUyID0gc2VsZi5NT1ZFX05PTkUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJNT1ZFX05PTkUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuTU9WRV9OT05FIGV4aXN0cwogICAgYnl0ZWNfMyAvLyAicnBzX21vdmUyIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMDMKICAgIC8vIHNlbGYucnBzX2FjdGl2ZSA9IEZhbHNlCiAgICBieXRlYyAyMiAvLyAicnBzX2FjdGl2ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjIwNQogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgc3dhcAogICAgcmV0c3ViCgpycHNfcmVzb2x2ZV9lbHNlX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxODkKICAgIC8vIGVsaWYgKHNlbGYucnBzX21vdmUxID09IHNlbGYuUk9DSyBhbmQgc2VsZi5ycHNfbW92ZTIgPT0gc2VsZi5TQ0lTU09SUykgb3IgXAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInJwc19tb3ZlMSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ycHNfbW92ZTEgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTggLy8gIlJPQ0siCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuUk9DSyBleGlzdHMKICAgID09CiAgICBieiBycHNfcmVzb2x2ZV9vcl9jb250ZEA3CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicnBzX21vdmUyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJwc19tb3ZlMiBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMCAvLyAiU0NJU1NPUlMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuU0NJU1NPUlMgZXhpc3RzCiAgICA9PQogICAgYm56IHJwc19yZXNvbHZlX2lmX2JvZHlAMTEKCnJwc19yZXNvbHZlX29yX2NvbnRkQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTkwCiAgICAvLyAoc2VsZi5ycHNfbW92ZTEgPT0gc2VsZi5QQVBFUiBhbmQgc2VsZi5ycHNfbW92ZTIgPT0gc2VsZi5ST0NLKSBvciBcCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAicnBzX21vdmUxIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJwc19tb3ZlMSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxOSAvLyAiUEFQRVIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuUEFQRVIgZXhpc3RzCiAgICA9PQogICAgYnogcnBzX3Jlc29sdmVfb3JfY29udGRAOQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInJwc19tb3ZlMiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ycHNfbW92ZTIgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTggLy8gIlJPQ0siCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuUk9DSyBleGlzdHMKICAgID09CiAgICBibnogcnBzX3Jlc29sdmVfaWZfYm9keUAxMQoKcnBzX3Jlc29sdmVfb3JfY29udGRAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxOTEKICAgIC8vIChzZWxmLnJwc19tb3ZlMSA9PSBzZWxmLlNDSVNTT1JTIGFuZCBzZWxmLnJwc19tb3ZlMiA9PSBzZWxmLlBBUEVSKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJycHNfbW92ZTEiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucnBzX21vdmUxIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIwIC8vICJTQ0lTU09SUyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5TQ0lTU09SUyBleGlzdHMKICAgID09CiAgICBieiBycHNfcmVzb2x2ZV9lbHNlX2JvZHlAMTIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJycHNfbW92ZTIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucnBzX21vdmUyIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE5IC8vICJQQVBFUiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5QQVBFUiBleGlzdHMKICAgID09CiAgICBieiBycHNfcmVzb2x2ZV9lbHNlX2JvZHlAMTIKCnJwc19yZXNvbHZlX2lmX2JvZHlAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTkyCiAgICAvLyBzZWxmLnBheShzZWxmLnJwc19wbGF5ZXIxLCB0b3RhbF9wb3QpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAicnBzX3BsYXllcjEiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucnBzX3BsYXllcjEgZXhpc3RzCiAgICBmcmFtZV9kaWcgMAogICAgY2FsbHN1YiBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToxOTMKICAgIC8vIHJlc3VsdCA9IGFyYzQuU3RyaW5nKCJSUFM6IFBsYXllciAxIHdpbnMiKQogICAgcHVzaGJ5dGVzIDB4MDAxMjUyNTA1MzNhMjA1MDZjNjE3OTY1NzIyMDMxMjA3NzY5NmU3MwogICAgYiBycHNfcmVzb2x2ZV9hZnRlcl9pZl9lbHNlQDE0CgpycHNfcmVzb2x2ZV9lbHNlX2JvZHlAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTk1CiAgICAvLyBzZWxmLnBheShzZWxmLnJwc19wbGF5ZXIyLCB0b3RhbF9wb3QpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gInJwc19wbGF5ZXIyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJwc19wbGF5ZXIyIGV4aXN0cwogICAgZnJhbWVfZGlnIDAKICAgIGNhbGxzdWIgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MTk2CiAgICAvLyByZXN1bHQgPSBhcmM0LlN0cmluZygiUlBTOiBQbGF5ZXIgMiB3aW5zIikKICAgIHB1c2hieXRlcyAweDAwMTI1MjUwNTMzYTIwNTA2YzYxNzk2NTcyMjAzMjIwNzc2OTZlNzMKICAgIGIgcnBzX3Jlc29sdmVfYWZ0ZXJfaWZfZWxzZUAxNAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nYW1lc2h1Yi5jb250cmFjdC5HYW1lc0h1Yi5ib3hfam9pbihwbGF5ZXI6IGJ5dGVzLCBiZXQ6IHVpbnQ2NCkgLT4gYnl0ZXM6CmJveF9qb2luOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjIwNy0yMDkKICAgIC8vICMgLS0tLS0tLS0tLSBNeXN0ZXJ5IEJveCAtLS0tLS0tLS0tCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfam9pbihzZWxmLCBwbGF5ZXI6IEFjY291bnQsIGJldDogVUludDY0KSAtPiBhcmM0LlN0cmluZzoKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjIxMAogICAgLy8gaWYgVHhuLmFtb3VudCAhPSBiZXQ6CiAgICB0eG4gQW1vdW50CiAgICBmcmFtZV9kaWcgLTEKICAgICE9CiAgICBieiBib3hfam9pbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMTEKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiQm94OiBTZW50IGFtb3VudCBkb2VzIG5vdCBtYXRjaCBiZXQiKQogICAgcHVzaGJ5dGVzIDB4MDAyMzQyNmY3ODNhMjA1MzY1NmU3NDIwNjE2ZDZmNzU2ZTc0MjA2NDZmNjU3MzIwNmU2Zjc0MjA2ZDYxNzQ2MzY4MjA2MjY1NzQKICAgIHJldHN1YgoKYm94X2pvaW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjIxMwogICAgLy8gaWYgbm90IHNlbGYuYm94X2FjdGl2ZToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNyAvLyAiYm94X2FjdGl2ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfYWN0aXZlIGV4aXN0cwogICAgYm56IGJveF9qb2luX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjIxNAogICAgLy8gc2VsZi5ib3hfcGxheWVyID0gcGxheWVyCiAgICBieXRlYyAxNiAvLyAiYm94X3BsYXllciIKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMTUKICAgIC8vIHNlbGYuYm94X2JldCA9IGJldAogICAgYnl0ZWMgMTMgLy8gImJveF9iZXQiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjE2CiAgICAvLyBzZWxmLmJveF9hY3RpdmUgPSBUcnVlCiAgICBieXRlYyAxNyAvLyAiYm94X2FjdGl2ZSIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjIxNwogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nKCJCb3g6IFBsYXllciBqb2luZWQiKQogICAgcHVzaGJ5dGVzIDB4MDAxMjQyNmY3ODNhMjA1MDZjNjE3OTY1NzIyMDZhNmY2OTZlNjU2NAogICAgcmV0c3ViCgpib3hfam9pbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjE4CiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIkJveCBhbHJlYWR5IGhhcyBhIHBsYXllciIpCiAgICBwdXNoYnl0ZXMgMHgwMDE4NDI2Zjc4MjA2MTZjNzI2NTYxNjQ3OTIwNjg2MTczMjA2MTIwNzA2YzYxNzk2NTcyCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuZ2FtZXNodWIuY29udHJhY3QuR2FtZXNIdWIuYm94X29wZW4ocGxheWVyOiBieXRlcywgY2hvaWNlOiB1aW50NjQpIC0+IGJ5dGVzOgpib3hfb3BlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMjAtMjIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBib3hfb3BlbihzZWxmLCBwbGF5ZXI6IEFjY291bnQsIGNob2ljZTogVUludDY0KSAtPiBhcmM0LlN0cmluZzoKICAgIHByb3RvIDIgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMjIKICAgIC8vIGlmIG5vdCBzZWxmLmJveF9hY3RpdmUgb3IgcGxheWVyICE9IHNlbGYuYm94X3BsYXllcjoKICAgIGR1cAogICAgYnl0ZWMgMTcgLy8gImJveF9hY3RpdmUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2FjdGl2ZSBleGlzdHMKICAgIGJ6IGJveF9vcGVuX2lmX2JvZHlAMgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE2IC8vICJib3hfcGxheWVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9wbGF5ZXIgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgICE9CiAgICBieiBib3hfb3Blbl9hZnRlcl9pZl9lbHNlQDMKCmJveF9vcGVuX2lmX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMjMKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiQm94OiBObyBhY3RpdmUgZ2FtZSBmb3IgdGhpcyBwbGF5ZXIiKQogICAgcHVzaGJ5dGVzIDB4MDAyMzQyNmY3ODNhMjA0ZTZmMjA2MTYzNzQ2OTc2NjUyMDY3NjE2ZDY1MjA2NjZmNzIyMDc0Njg2OTczMjA3MDZjNjE3OTY1NzIKICAgIHN3YXAKICAgIHJldHN1YgoKYm94X29wZW5fYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjIyNgogICAgLy8gaWYgY2hvaWNlID09IFVJbnQ2NCgxKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBib3hfb3Blbl9lbHNlX2JvZHlANQogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjIyNwogICAgLy8gcmV3YXJkID0gc2VsZi5ib3hfYmV0ICogc2VsZi5HT0xECiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTMgLy8gImJveF9iZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2JldCBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNyAvLyAiR09MRCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5HT0xEIGV4aXN0cwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjIyOAogICAgLy8gcmVzdWx0ID0gYXJjNC5TdHJpbmcoIkJveDogR29sZCIpCiAgICBwdXNoYnl0ZXMgMHgwMDA5NDI2Zjc4M2EyMDQ3NmY2YzY0CiAgICBmcmFtZV9idXJ5IDAKCmJveF9vcGVuX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMzYKICAgIC8vIHNlbGYucGF5KHNlbGYuYm94X3BsYXllciwgcmV3YXJkKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE2IC8vICJib3hfcGxheWVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9wbGF5ZXIgZXhpc3RzCiAgICBzd2FwCiAgICBjYWxsc3ViIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjIzOAogICAgLy8gc2VsZi5ib3hfcGxheWVyID0gQWNjb3VudCgpCiAgICBieXRlYyAxNiAvLyAiYm94X3BsYXllciIKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMzkKICAgIC8vIHNlbGYuYm94X2JldCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgMTMgLy8gImJveF9iZXQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNDAKICAgIC8vIHNlbGYuYm94X2FjdGl2ZSA9IEZhbHNlCiAgICBieXRlYyAxNyAvLyAiYm94X2FjdGl2ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI0MgogICAgLy8gcmV0dXJuIHJlc3VsdAogICAgZnJhbWVfZGlnIDAKICAgIHN3YXAKICAgIHJldHN1YgoKYm94X29wZW5fZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjI5CiAgICAvLyBlbGlmIGNob2ljZSA9PSBVSW50NjQoMik6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYnogYm94X29wZW5fZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMzAKICAgIC8vIHJld2FyZCA9IHNlbGYuYm94X2JldCAqIHNlbGYuU0lMVkVSCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTMgLy8gImJveF9iZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2JldCBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNiAvLyAiU0lMVkVSIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLlNJTFZFUiBleGlzdHMKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyMzEKICAgIC8vIHJlc3VsdCA9IGFyYzQuU3RyaW5nKCJCb3g6IFNpbHZlciIpCiAgICBwdXNoYnl0ZXMgMHgwMDBiNDI2Zjc4M2EyMDUzNjk2Yzc2NjU3MgogICAgZnJhbWVfYnVyeSAwCiAgICBiIGJveF9vcGVuX2FmdGVyX2lmX2Vsc2VAOQoKYm94X29wZW5fZWxzZV9ib2R5QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjMzCiAgICAvLyByZXdhcmQgPSBzZWxmLmJveF9iZXQgKiBzZWxmLkJST05aRQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEzIC8vICJib3hfYmV0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9iZXQgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjUgLy8gIkJST05aRSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5CUk9OWkUgZXhpc3RzCiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjM0CiAgICAvLyByZXN1bHQgPSBhcmM0LlN0cmluZygiQm94OiBCcm9uemUiKQogICAgcHVzaGJ5dGVzIDB4MDAwYjQyNmY3ODNhMjA0MjcyNmY2ZTdhNjUKICAgIGZyYW1lX2J1cnkgMAogICAgYiBib3hfb3Blbl9hZnRlcl9pZl9lbHNlQDkKCgovLyBzbWFydF9jb250cmFjdHMuZ2FtZXNodWIuY29udHJhY3QuR2FtZXNIdWIubWF0Y2hfam9pbihwbGF5ZXI6IGJ5dGVzLCBiZXQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cm1hdGNoX2pvaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjQ0LTI0NgogICAgLy8gIyAtLS0tLS0tLS0tIE1lbW9yeSBNYXRjaCAtLS0tLS0tLS0tCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYXRjaF9qb2luKHNlbGYsIHBsYXllcjogQWNjb3VudCwgYmV0OiBVSW50NjQpIC0+IGFyYzQuU3RyaW5nOgogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjQ3CiAgICAvLyBpZiBUeG4uYW1vdW50ICE9IGJldDoKICAgIHR4biBBbW91bnQKICAgIGZyYW1lX2RpZyAtMQogICAgIT0KICAgIGJ6IG1hdGNoX2pvaW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjQ4CiAgICAvLyByZXR1cm4gYXJjNC5TdHJpbmcoIk1lbW9yeTogU2VudCBhbW91bnQgZG9lcyBub3QgbWF0Y2ggYmV0IikKICAgIHB1c2hieXRlcyAweDAwMjY0ZDY1NmQ2ZjcyNzkzYTIwNTM2NTZlNzQyMDYxNmQ2Zjc1NmU3NDIwNjQ2ZjY1NzMyMDZlNmY3NDIwNmQ2MTc0NjM2ODIwNjI2NTc0CiAgICByZXRzdWIKCm1hdGNoX2pvaW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI1MAogICAgLy8gaWYgbm90IHNlbGYubWF0Y2hfYWN0aXZlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vICJtYXRjaF9hY3RpdmUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF0Y2hfYWN0aXZlIGV4aXN0cwogICAgYm56IG1hdGNoX2pvaW5fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjUxCiAgICAvLyBzZWxmLm1hdGNoX3BsYXllciA9IHBsYXllcgogICAgYnl0ZWMgMTQgLy8gIm1hdGNoX3BsYXllciIKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNTIKICAgIC8vIHNlbGYubWF0Y2hfYmV0ID0gYmV0CiAgICBieXRlYyAyMyAvLyAibWF0Y2hfYmV0IgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gc2VsZi5tYXRjaF9jb3VudCA9IFVJbnQ2NCgwKQogICAgYnl0ZWMgNiAvLyAibWF0Y2hfY291bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNTQKICAgIC8vIHNlbGYubWF0Y2hfYWN0aXZlID0gVHJ1ZQogICAgYnl0ZWMgMTUgLy8gIm1hdGNoX2FjdGl2ZSIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI1NQogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nKCJNZW1vcnk6IFBsYXllciBqb2luZWQiKQogICAgcHVzaGJ5dGVzIDB4MDAxNTRkNjU2ZDZmNzI3OTNhMjA1MDZjNjE3OTY1NzIyMDZhNmY2OTZlNjU2NAogICAgcmV0c3ViCgptYXRjaF9qb2luX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNTYKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiTWVtb3J5IGFscmVhZHkgcnVubmluZyIpCiAgICBwdXNoYnl0ZXMgMHgwMDE2NGQ2NTZkNmY3Mjc5MjA2MTZjNzI2NTYxNjQ3OTIwNzI3NTZlNmU2OTZlNjcKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nYW1lc2h1Yi5jb250cmFjdC5HYW1lc0h1Yi5tYXRjaF9wbGF5KHBsYXllcjogYnl0ZXMsIHN1Y2Nlc3M6IHVpbnQ2NCkgLT4gYnl0ZXM6Cm1hdGNoX3BsYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjU4LTI1OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgbWF0Y2hfcGxheShzZWxmLCBwbGF5ZXI6IEFjY291bnQsIHN1Y2Nlc3M6IFVJbnQ2NCkgLT4gYXJjNC5TdHJpbmc6CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNjAKICAgIC8vIGlmIG5vdCBzZWxmLm1hdGNoX2FjdGl2ZSBvciBwbGF5ZXIgIT0gc2VsZi5tYXRjaF9wbGF5ZXI6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTUgLy8gIm1hdGNoX2FjdGl2ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXRjaF9hY3RpdmUgZXhpc3RzCiAgICBieiBtYXRjaF9wbGF5X2lmX2JvZHlAMgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vICJtYXRjaF9wbGF5ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF0Y2hfcGxheWVyIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAhPQogICAgYnogbWF0Y2hfcGxheV9hZnRlcl9pZl9lbHNlQDMKCm1hdGNoX3BsYXlfaWZfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI2MQogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nKCJNZW1vcnk6IFBsYXllciBub3QgaW4gYWN0aXZlIGdhbWUiKQogICAgYnl0ZWMgMzAgLy8gMHgwMDIxNGQ2NTZkNmY3Mjc5M2EyMDUwNmM2MTc5NjU3MjIwNmU2Zjc0MjA2OTZlMjA2MTYzNzQ2OTc2NjUyMDY3NjE2ZDY1CiAgICByZXRzdWIKCm1hdGNoX3BsYXlfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI2MgogICAgLy8gaWYgc3VjY2VzcyA9PSBVSW50NjQoMSk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogbWF0Y2hfcGxheV9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNjMKICAgIC8vIHNlbGYubWF0Y2hfY291bnQgKz0gVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAibWF0Y2hfY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF0Y2hfY291bnQgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnl0ZWMgNiAvLyAibWF0Y2hfY291bnQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI2NAogICAgLy8gcmV0dXJuIGFyYzQuU3RyaW5nKCJNZW1vcnk6IE1hdGNoIGZvdW5kIikKICAgIHB1c2hieXRlcyAweDAwMTM0ZDY1NmQ2ZjcyNzkzYTIwNGQ2MTc0NjM2ODIwNjY2Zjc1NmU2NAogICAgcmV0c3ViCgptYXRjaF9wbGF5X2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNjUKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiTWVtb3J5OiBObyBtYXRjaCIpCiAgICBwdXNoYnl0ZXMgMHgwMDEwNGQ2NTZkNmY3Mjc5M2EyMDRlNmYyMDZkNjE3NDYzNjgKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5nYW1lc2h1Yi5jb250cmFjdC5HYW1lc0h1Yi5tYXRjaF9lbmQocGxheWVyOiBieXRlcykgLT4gYnl0ZXM6Cm1hdGNoX2VuZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNjctMjY4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBtYXRjaF9lbmQoc2VsZiwgcGxheWVyOiBBY2NvdW50KSAtPiBhcmM0LlN0cmluZzoKICAgIHByb3RvIDEgMQogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjY5CiAgICAvLyBpZiBub3Qgc2VsZi5tYXRjaF9hY3RpdmUgb3IgcGxheWVyICE9IHNlbGYubWF0Y2hfcGxheWVyOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vICJtYXRjaF9hY3RpdmUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF0Y2hfYWN0aXZlIGV4aXN0cwogICAgYnogbWF0Y2hfZW5kX2lmX2JvZHlAMgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vICJtYXRjaF9wbGF5ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF0Y2hfcGxheWVyIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICAhPQogICAgYnogbWF0Y2hfZW5kX2FmdGVyX2lmX2Vsc2VAMwoKbWF0Y2hfZW5kX2lmX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNzAKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZygiTWVtb3J5OiBQbGF5ZXIgbm90IGluIGFjdGl2ZSBnYW1lIikKICAgIGJ5dGVjIDMwIC8vIDB4MDAyMTRkNjU2ZDZmNzI3OTNhMjA1MDZjNjE3OTY1NzIyMDZlNmY3NDIwNjk2ZTIwNjE2Mzc0Njk3NjY1MjA2NzYxNmQ2NQogICAgc3dhcAogICAgcmV0c3ViCgptYXRjaF9lbmRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI3MgogICAgLy8gcmV3YXJkID0gc2VsZi5tYXRjaF9iZXQgKiBzZWxmLm1hdGNoX2NvdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjMgLy8gIm1hdGNoX2JldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXRjaF9iZXQgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAibWF0Y2hfY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF0Y2hfY291bnQgZXhpc3RzCiAgICAqCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI3MwogICAgLy8gaWYgcmV3YXJkID4gVUludDY0KDApOgogICAgYnogbWF0Y2hfZW5kX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI3NAogICAgLy8gc2VsZi5wYXkoc2VsZi5tYXRjaF9wbGF5ZXIsIHJld2FyZCkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNCAvLyAibWF0Y2hfcGxheWVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hdGNoX3BsYXllciBleGlzdHMKICAgIGZyYW1lX2RpZyAwCiAgICBjYWxsc3ViIHBheQoKbWF0Y2hfZW5kX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNzYKICAgIC8vIGlmIHNlbGYubWF0Y2hfY291bnQgPT0gVUludDY0KDApOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gIm1hdGNoX2NvdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hdGNoX2NvdW50IGV4aXN0cwogICAgYm56IG1hdGNoX2VuZF9lbHNlX2JvZHlANwogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI3NwogICAgLy8gcmVzdWx0ID0gYXJjNC5TdHJpbmcoIk1lbW9yeTogMCBtYXRjaGVzIikKICAgIHB1c2hieXRlcyAweDAwMTE0ZDY1NmQ2ZjcyNzkzYTIwMzAyMDZkNjE3NDYzNjg2NTczCgptYXRjaF9lbmRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyODMKICAgIC8vIHNlbGYubWF0Y2hfcGxheWVyID0gQWNjb3VudCgpCiAgICBieXRlYyAxNCAvLyAibWF0Y2hfcGxheWVyIgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI4NAogICAgLy8gc2VsZi5tYXRjaF9iZXQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDIzIC8vICJtYXRjaF9iZXQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyODUKICAgIC8vIHNlbGYubWF0Y2hfY291bnQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDYgLy8gIm1hdGNoX2NvdW50IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6Mjg2CiAgICAvLyBzZWxmLm1hdGNoX2FjdGl2ZSA9IEZhbHNlCiAgICBieXRlYyAxNSAvLyAibWF0Y2hfYWN0aXZlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6Mjg4CiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICBzd2FwCiAgICByZXRzdWIKCm1hdGNoX2VuZF9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9nYW1lc2h1Yi9jb250cmFjdC5weToyNzgKICAgIC8vIGVsaWYgc2VsZi5tYXRjaF9jb3VudCA9PSBVSW50NjQoMSk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAibWF0Y2hfY291bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF0Y2hfY291bnQgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGJ6IG1hdGNoX2VuZF9lbHNlX2JvZHlAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2dhbWVzaHViL2NvbnRyYWN0LnB5OjI3OQogICAgLy8gcmVzdWx0ID0gYXJjNC5TdHJpbmcoIk1lbW9yeTogMSBtYXRjaCIpCiAgICBwdXNoYnl0ZXMgMHgwMDBmNGQ2NTZkNmY3Mjc5M2EyMDMxMjA2ZDYxNzQ2MzY4CiAgICBiIG1hdGNoX2VuZF9hZnRlcl9pZl9lbHNlQDExCgptYXRjaF9lbmRfZWxzZV9ib2R5QDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZ2FtZXNodWIvY29udHJhY3QucHk6MjgxCiAgICAvLyByZXN1bHQgPSBhcmM0LlN0cmluZygiTWVtb3J5OiAyKyBtYXRjaGVzIikKICAgIHB1c2hieXRlcyAweDAwMTI0ZDY1NmQ2ZjcyNzkzYTIwMzIyYjIwNmQ2MTc0NjM2ODY1NzMKICAgIGIgbWF0Y2hfZW5kX2FmdGVyX2lmX2Vsc2VAMTEK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "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", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, "minor": 10, "patch": 0 } }, "events": [], "templateVariables": {} }