b'VVNFIGNoeXQuaGFobi9sZWxieV9ja2lxdWU7CnByYWdtYSBjaHl0LmR5bmFtaWNfdGFibGUuZW5hYmxlX2R5bmFtaWNfc3RvcmVfcmVhZCA9IDA7CnByYWdtYSBjaHl0LmV4ZWN1dGlvbi5qb2luX3BvbGljeT1sb2NhbDsKCklOU0VSVCBJTlRPICI8YXBwZW5kPSVmYWxzZT4vL2hvbWUveWFicy90YWMtbWFuYWdlci9yZXF1ZXN0L1RFU1RUQUNDSEFOR0VTLTIxL2ZpbHRlci90bXAvcGFnZXNfdG91Y2hlZDEiClNFTEVDVAogICAgRFNQSUQsCiAgICBwZC5QYWdlSUQgQVMgUGFnZUlELAogICAgSW1wSUQsCiAgICBQYXJ0bmVyU2hhcmUKRlJPTSBgLy9ob21lL3lhYnMtY3Mva2V5XzEvdjIvZXhwb3J0L0NhZXNhclBhZ2UvUGFnZURTUC5sYXN0YCBBUyBwZApMRUZUIFNFTUkgSk9JTiAoCiAgICBTRUxFQ1QgRElTVElOQ1QgcGFnZV9pZAogICAgRlJPTSBgLy9ob21lL2NvbWRlcC1hbmFseXRpY3MvWUFOL3NlZ21lbnRhdGlvbi9zdGF0aWMvbGF0ZXN0L2Jsb2Nrc2AKICAgIFdIRVJFIAogICAgICAgIHNlZ21lbnQgbm90IGluICgndGllci0xJywndGllci0wJykgQU5ECiAgICAgICAgdHJhZmZpY190eXBlIGluICgndHlwZTEnLCd0eXBlMicpCikgQVMgcyBPTgogICAgcy5wYWdlX2lkID0gdG9VSW50NjQocGQuUGFnZUlEKQpMRUZUIFNFTUkgSk9JTiAoCiAgICBTRUxFQ1QgUGFnZUlECiAgICBGUk9NIGAvL2hvbWUveWFicy9kaWN0L1BhcnRuZXJQYWdlYAogICAgV0hFUkUgCiAgICAgICAgTG9naW4gbm90IGluICgnYWFyaycsJ29rd2Vkb29rJykgQU5ECiAgICAgICAgc3BsaXRCeVN0cmluZygnLCcsIENPQUxFU0NFKERvbWFpbkxpc3QsICcnKSlbMV0gaW4gKCd5YW5kZXgucnUnLCd5YS5ydScpIEFORAogICAgICAgIFBhcnRuZXJJRCBpbiAoMjIsMzMsNDQpCikgQVMgcHAgT04KICAgIHBkLlBhZ2VJRCA9IHBwLlBhZ2VJRApMRUZUIFNFTUkgSk9JTiAoCiAgICBTRUxFQ1QgUGFnZUlECiAgICBGUk9NIGAvL2hvbWUveWFicy9kaWN0L1BhZ2VgCiAgICBXSEVSRSAKICAgICAgICAoT3B0aW9uc1lhbmRleEFwcCBvciBPcHRpb25zWWFuZGV4R3JvdXAgb3IgT3B0aW9uc1lhbmRleFBhZ2UpIGluICgxKQopIEFTIHAgT04KICAgIHBkLlBhZ2VJRCA9IHAuUGFnZUlECldIRVJFIAogICAgICAgIERTUElEIG5vdCBpbiAoNSw2KSBBTkQKICAgICAgICBQYWdlSUQgbm90IGluICg0MTQzMTQsNDE0MzE0KSBBTkQKICAgICAgICBEU1BJRCBub3QgaW4gKDUsMTApCjsKCklOU0VSVCBJTlRPICI8YXBwZW5kPSVmYWxzZT4vL2hvbWUveWFicy90YWMtbWFuYWdlci9yZXF1ZXN0L1RFU1RUQUNDSEFOR0VTLTIxL2ZpbHRlci90bXAvcGFnZV9kc3BfZmlsdGVyZWQxIgogICAgU0VMRUNUCiAgICAgICAgcGQuRFNQSUQgQVMgRFNQSUQsCiAgICAgICAgcGQuUGFnZUlEIEFTIFBhZ2VJRCwKICAgICAgICBwZC5JbXBJRCBBUyBJbXBJRCwKICAgICAgICBwZC5QYXJ0bmVyU2hhcmUgQVMgUGFydG5lclNoYXJlCiAgICBGUk9NIGAvL2hvbWUveWFicy90YWMtbWFuYWdlci9yZXF1ZXN0L1RFU1RUQUNDSEFOR0VTLTIxL2ZpbHRlci90bXAvcGFnZXNfdG91Y2hlZDFgIEFTIHBkCiAgICBMRUZUIFNFTUkgSk9JTiAoCiAgICAgICAgU0VMRUNUIHBhZ2VfaWQsIGJsb2NrX2lkIAogICAgICAgIEZST00gYC8vaG9tZS9jb21kZXAtYW5hbHl0aWNzL1lBTi9zZWdtZW50YXRpb24vc3RhdGljL2xhdGVzdC9ibG9ja3NgCiAgICAgICAgV0hFUkUKICAgICAgICBzZWdtZW50IG5vdCBpbiAoJ3RpZXItMScsJ3RpZXItMCcpIEFORAogICAgICAgIHRyYWZmaWNfdHlwZSBpbiAoJ3R5cGUxJywndHlwZTInKQogICAgKSBBUyBzIE9OCiAgICAgICAgcy5wYWdlX2lkID0gdG9VSW50NjQocGQuUGFnZUlEKSBBTkQKICAgICAgICBzLmJsb2NrX2lkID0gdG9VSW50NjQocGQuSW1wSUQpCiAgICBMRUZUIFNFTUkgSk9JTiAoCiAgICAgICAgU0VMRUNUIFBhZ2VJRAogICAgICAgIEZST00gYC8vaG9tZS95YWJzL2RpY3QvUGFydG5lclBhZ2VgCiAgICAgICAgV0hFUkUKICAgICAgICBMb2dpbiBub3QgaW4gKCdhYXJrJywnb2t3ZWRvb2snKSBBTkQKICAgICAgICBzcGxpdEJ5U3RyaW5nKCcsJywgQ09BTEVTQ0UoRG9tYWluTGlzdCwgJycpKVsxXSBpbiAoJ3lhbmRleC5ydScsJ3lhLnJ1JykgQU5ECiAgICAgICAgUGFydG5lcklEIGluICgyMiwzMyw0NCkKICAgICkgQVMgcHAgT04KICAgICAgICBwZC5QYWdlSUQgPSB0b1VJbnQ2NChwcC5QYWdlSUQpCiAgICBXSEVSRSAKICAgICAgICBEU1BJRCBub3QgaW4gKDUsNikgQU5ECiAgICAgICAgUGFnZUlEIG5vdCBpbiAoNDE0MzE0LDQxNDMxNCkgQU5ECiAgICAgICAgKFBhZ2VJRCxJbXBJRCkgbm90IGluICgoMSwyKSwoMyw0KSwoNSw2KSkgQU5ECiAgICAgICAgRFNQSUQgbm90IGluICg1LDEwKSBBTkQKICAgICAgICBQYXJ0bmVyU2hhcmUgPj0gMTAwMDAgQU5EIFBhcnRuZXJTaGFyZSA8PSA5MDAwMDAKOwoKSU5TRVJUIElOVE8gIjxhcHBlbmQ9JWZhbHNlPi8vaG9tZS95YWJzL3RhYy1tYW5hZ2VyL3JlcXVlc3QvVEVTVFRBQ0NIQU5HRVMtMjEvZmlsdGVyL3RtcC9jaGFuZ2VzMSIKCldJVEggJHNlY29uZGFyeV9wYWdlX2ltcHMgQVMgKAogICAgU0VMRUNUIAogICAgICAgIHRvVUludDY0KHBzLkRTUElEKSBBUyBEU1BJRCwKICAgICAgICB0b1VJbnQ2NChwcy5QYWdlSUQpIEFTIFBhZ2VJRCwKICAgICAgICB0b1VJbnQ2NChwcy5JbXBJRCkgQVMgSW1wSUQsCiAgICAgICAgdG9VSW50NjQocHMuUGFydG5lclNoYXJlKSBBUyBQYXJ0bmVyU2hhcmUKICAgIEZST00gYC8vaG9tZS95YWJzL2RpY3QvUGFnZVBhcnRuZXJTaGFyZWAgQVMgcHMKICAgIElOTkVSIEpPSU4gKAogICAgICAgIFNFTEVDVCAqCiAgICAgICAgRlJPTSBgLy9ob21lL3lhYnMvdGFjLW1hbmFnZXIvcmVxdWVzdC9URVNUVEFDQ0hBTkdFUy0yMS9maWx0ZXIvdG1wL3BhZ2VzX2NvbnNpc3RlbnQxYAogICAgICAgIC0tIERvIG5vdCBkdXBsaWNhdGUgdHVyYm8gaW1wcyBpbiBzZWNvbmRhcnkgcm93cywgYmVjYXVzZSBpZiB3ZSBjb3VsZCBjb2xsYXBzZSB0dXJibyBpbXBzLCB0aGlzIG1lYW5zIHRoYXQgYWxsIGltcHMgYXJlIGFscmVhZHkgb3ZlcnJpZGRlbgogICAgICAgIFdIRVJFIElzVHVyYm9PclR1cmJvRGVza3RvcCA9PSAwIE9SIERTUElEICE9IDEKICAgICkgQVMgcGMgT04KICAgICAgICB0b1VJbnQ2NChwcy5EU1BJRCkgPSBwYy5EU1BJRCBBTkQKICAgICAgICB0b1VJbnQ2NChwcy5QYWdlSUQpID0gcGMuUGFnZUlECiAgICBXSEVSRSAKICAgICAgICBwcy5JbXBJRCA+IDAgQU5ECiAgICAgICAgcHMuUGFydG5lclNoYXJlPj0wIEFORAogICAgICAgIHBzLlBhcnRuZXJTaGFyZTw9MTAwMDAwMAopLAokcGFnZV9pbXBzIEFTICgKICAgIFNFTEVDVAogICAgICAgIHRvVUludDY0KGYuRFNQSUQpIEFTIERTUElELAogICAgICAgIHRvVUludDY0KGYuUGFnZUlEKSBBUyBQYWdlSUQsCiAgICAgICAgdG9VSW50NjQoZi5JbXBJRCkgQVMgSW1wSUQsCiAgICAgICAgdG9VSW50NjQoZi5QYXJ0bmVyU2hhcmUpIEFTIFBhcnRuZXJTaGFyZQogICAgRlJPTSBgLy9ob21lL3lhYnMvdGFjLW1hbmFnZXIvcmVxdWVzdC9URVNUVEFDQ0hBTkdFUy0yMS9maWx0ZXIvdG1wL3BhZ2VfZHNwX2ZpbHRlcmVkMWAgQVMgZgogICAgTEVGVCBBTlRJIEpPSU4gKAogICAgICAgIFNFTEVDVCAqCiAgICAgICAgRlJPTSBgLy9ob21lL3lhYnMvdGFjLW1hbmFnZXIvcmVxdWVzdC9URVNUVEFDQ0hBTkdFUy0yMS9maWx0ZXIvdG1wL3BhZ2VzX2NvbnNpc3RlbnQxYAogICAgICAgIC0tIFRoaXMgb25lc2hvdCBzaG91bGQgY29udGFpbiByb3dzIGJvdGggZm9yIChQYWdlcyB3aXRoIHR1cmJvIGltcHMpIGFuZCAodHVyYm8gaW1wcykgZHVlIHRvIHR1cmJvIHByaW9yaXR5CiAgICAgICAgV0hFUkUgSXNUdXJib09yVHVyYm9EZXNrdG9wID09IDAgT1IgRFNQSUQgIT0gMQogICAgKSBBUyBhIE9OCiAgICAgICAgYS5EU1BJRCA9IGYuRFNQSUQgQU5ECiAgICAgICAgYS5QYWdlSUQgPSBmLlBhZ2VJRAopCgpTRUxFQ1QKICAgICosCiAgICAxIEFTIENoYW5nZXNGaWx0ZXJJZCwKICAgIDAgQVMgUGFydG5lcklELAogICAgbnVsbCBBUyBOZXdQYXJ0bmVyU2hhcmUsCiAgICAyMDAwMCBBUyBEZWx0YVBhcnRuZXJTaGFyZSwKICAgIExFQVNUKDEwMDAwMDAsIEdSRUFURVNUKDAsIFBhcnRuZXJTaGFyZSArIERlbHRhUGFydG5lclNoYXJlKSkgQVMgUGxhbm5lZFBhcnRuZXJTaGFyZQpGUk9NICgKICAgIFNFTEVDVCBEU1BJRCwgUGFnZUlELCBJbXBJRCwgUGFydG5lclNoYXJlLCAwIEFTIElzU2Vjb25kYXJ5CiAgICBGUk9NIGAvL2hvbWUveWFicy90YWMtbWFuYWdlci9yZXF1ZXN0L1RFU1RUQUNDSEFOR0VTLTIxL2ZpbHRlci90bXAvcGFnZXNfY29uc2lzdGVudDFgCgogICAgVU5JT04gQUxMCgogICAgU0VMRUNUICosIDAgQVMgSXNTZWNvbmRhcnkKICAgIEZST00gJHBhZ2VfaW1wcwoKICAgIFVOSU9OIEFMTAoKICAgIFNFTEVDVCAqLCAxIEFTIElzU2Vjb25kYXJ5CiAgICBGUk9NICRzZWNvbmRhcnlfcGFnZV9pbXBzCik7CgpJTlNFUlQgSU5UTyAiPGFwcGVuZD0lZmFsc2U+Ly9ob21lL3lhYnMvdGFjLW1hbmFnZXIvcmVxdWVzdC9URVNUVEFDQ0hBTkdFUy0yMS9maWx0ZXIvdG1wL3BhZ2VzX3RvdWNoZWQyIgpTRUxFQ1QKICAgIERTUElELAogICAgcGQuUGFnZUlEIEFTIFBhZ2VJRCwKICAgIEltcElELAogICAgUGFydG5lclNoYXJlCkZST00gYC8vaG9tZS95YWJzLWNzL2tleV8xL3YyL2V4cG9ydC9DYWVzYXJQYWdlL1BhZ2VEU1AubGFzdGAgQVMgcGQKTEVGVCBTRU1JIEpPSU4gKAogICAgU0VMRUNUIERJU1RJTkNUIHBhZ2VfaWQKICAgIEZST00gYC8vaG9tZS9jb21kZXAtYW5hbHl0aWNzL1lBTi9zZWdtZW50YXRpb24vc3RhdGljL2xhdGVzdC9ibG9ja3NgCiAgICBXSEVSRSAKICAgICAgICBzZWdtZW50IGluICgndGllci0xJywndGllci0wJykKKSBBUyBzIE9OCiAgICBzLnBhZ2VfaWQgPSB0b1VJbnQ2NChwZC5QYWdlSUQpCkxFRlQgU0VNSSBKT0lOICgKICAgIFNFTEVDVCBQYWdlSUQKICAgIEZST00gYC8vaG9tZS95YWJzL2RpY3QvUGFydG5lclBhZ2VgCiAgICBXSEVSRSAKICAgICAgICBMb2dpbiBpbiAoJ2FhcmsnLCdva3dlZG9vaycpCikgQVMgcHAgT04KICAgIHBkLlBhZ2VJRCA9IHBwLlBhZ2VJRApXSEVSRSAKICAgICAgICBEU1BJRCBpbiAoNSw2KSBBTkQKICAgICAgICBQYWdlSUQgaW4gKDEyMzQpIEFORAogICAgICAgIERTUElEIG5vdCBpbiAoNSwxMCkKOwoKSU5TRVJUIElOVE8gIjxhcHBlbmQ9JWZhbHNlPi8vaG9tZS95YWJzL3RhYy1tYW5hZ2VyL3JlcXVlc3QvVEVTVFRBQ0NIQU5HRVMtMjEvZmlsdGVyL3RtcC9wYWdlX2RzcF9maWx0ZXJlZDIiCiAgICBTRUxFQ1QKICAgICAgICBwZC5EU1BJRCBBUyBEU1BJRCwKICAgICAgICBwZC5QYWdlSUQgQVMgUGFnZUlELAogICAgICAgIHBkLkltcElEIEFTIEltcElELAogICAgICAgIHBkLlBhcnRuZXJTaGFyZSBBUyBQYXJ0bmVyU2hhcmUKICAgIEZST00gYC8vaG9tZS95YWJzL3RhYy1tYW5hZ2VyL3JlcXVlc3QvVEVTVFRBQ0NIQU5HRVMtMjEvZmlsdGVyL3RtcC9wYWdlc190b3VjaGVkMmAgQVMgcGQKICAgIExFRlQgU0VNSSBKT0lOICgKICAgICAgICBTRUxFQ1QgcGFnZV9pZCwgYmxvY2tfaWQgCiAgICAgICAgRlJPTSBgLy9ob21lL2NvbWRlcC1hbmFseXRpY3MvWUFOL3NlZ21lbnRhdGlvbi9zdGF0aWMvbGF0ZXN0L2Jsb2Nrc2AKICAgICAgICBXSEVSRQogICAgICAgIHNlZ21lbnQgaW4gKCd0aWVyLTEnLCd0aWVyLTAnKQogICAgKSBBUyBzIE9OCiAgICAgICAgcy5wYWdlX2lkID0gdG9VSW50NjQocGQuUGFnZUlEKSBBTkQKICAgICAgICBzLmJsb2NrX2lkID0gdG9VSW50NjQocGQuSW1wSUQpCiAgICBMRUZUIFNFTUkgSk9JTiAoCiAgICAgICAgU0VMRUNUIFBhZ2VJRAogICAgICAgIEZST00gYC8vaG9tZS95YWJzL2RpY3QvUGFydG5lclBhZ2VgCiAgICAgICAgV0hFUkUKICAgICAgICBMb2dpbiBpbiAoJ2FhcmsnLCdva3dlZG9vaycpCiAgICApIEFTIHBwIE9OCiAgICAgICAgcGQuUGFnZUlEID0gdG9VSW50NjQocHAuUGFnZUlEKQogICAgV0hFUkUgCiAgICAgICAgRFNQSUQgaW4gKDUsNikgQU5ECiAgICAgICAgKFBhZ2VJRCxJbXBJRCkgaW4gKCgxLDIpLCgzLDQpLCg1LDYpKSBBTkQKICAgICAgICBQYWdlSUQgaW4gKDEyMzQpIEFORAogICAgICAgIERTUElEIG5vdCBpbiAoNSwxMCkgQU5ECiAgICAgICAgUGFydG5lclNoYXJlID49IDIwMDAwIEFORCBQYXJ0bmVyU2hhcmUgPD0gODAwMDAwCjsKCklOU0VSVCBJTlRPICI8YXBwZW5kPSVmYWxzZT4vL2hvbWUveWFicy90YWMtbWFuYWdlci9yZXF1ZXN0L1RFU1RUQUNDSEFOR0VTLTIxL2ZpbHRlci90bXAvY2hhbmdlczIiCgpXSVRIICRzZWNvbmRhcnlfcGFnZV9pbXBzIEFTICgKICAgIFNFTEVDVCAKICAgICAgICB0b1VJbnQ2NChwcy5EU1BJRCkgQVMgRFNQSUQsCiAgICAgICAgdG9VSW50NjQocHMuUGFnZUlEKSBBUyBQYWdlSUQsCiAgICAgICAgdG9VSW50NjQocHMuSW1wSUQpIEFTIEltcElELAogICAgICAgIHRvVUludDY0KHBzLlBhcnRuZXJTaGFyZSkgQVMgUGFydG5lclNoYXJlCiAgICBGUk9NIGAvL2hvbWUveWFicy9kaWN0L1BhZ2VQYXJ0bmVyU2hhcmVgIEFTIHBzCiAgICBJTk5FUiBKT0lOICgKICAgICAgICBTRUxFQ1QgKgogICAgICAgIEZST00gYC8vaG9tZS95YWJzL3RhYy1tYW5hZ2VyL3JlcXVlc3QvVEVTVFRBQ0NIQU5HRVMtMjEvZmlsdGVyL3RtcC9wYWdlc19jb25zaXN0ZW50MmAKICAgICAgICAtLSBEbyBub3QgZHVwbGljYXRlIHR1cmJvIGltcHMgaW4gc2Vjb25kYXJ5IHJvd3MsIGJlY2F1c2UgaWYgd2UgY291bGQgY29sbGFwc2UgdHVyYm8gaW1wcywgdGhpcyBtZWFucyB0aGF0IGFsbCBpbXBzIGFyZSBhbHJlYWR5IG92ZXJyaWRkZW4KICAgICAgICBXSEVSRSBJc1R1cmJvT3JUdXJib0Rlc2t0b3AgPT0gMCBPUiBEU1BJRCAhPSAxCiAgICApIEFTIHBjIE9OCiAgICAgICAgdG9VSW50NjQocHMuRFNQSUQpID0gcGMuRFNQSUQgQU5ECiAgICAgICAgdG9VSW50NjQocHMuUGFnZUlEKSA9IHBjLlBhZ2VJRAogICAgV0hFUkUgCiAgICAgICAgcHMuSW1wSUQgPiAwIEFORAogICAgICAgIHBzLlBhcnRuZXJTaGFyZT49MCBBTkQKICAgICAgICBwcy5QYXJ0bmVyU2hhcmU8PTEwMDAwMDAKKSwKJHBhZ2VfaW1wcyBBUyAoCiAgICBTRUxFQ1QKICAgICAgICB0b1VJbnQ2NChmLkRTUElEKSBBUyBEU1BJRCwKICAgICAgICB0b1VJbnQ2NChmLlBhZ2VJRCkgQVMgUGFnZUlELAogICAgICAgIHRvVUludDY0KGYuSW1wSUQpIEFTIEltcElELAogICAgICAgIHRvVUludDY0KGYuUGFydG5lclNoYXJlKSBBUyBQYXJ0bmVyU2hhcmUKICAgIEZST00gYC8vaG9tZS95YWJzL3RhYy1tYW5hZ2VyL3JlcXVlc3QvVEVTVFRBQ0NIQU5HRVMtMjEvZmlsdGVyL3RtcC9wYWdlX2RzcF9maWx0ZXJlZDJgIEFTIGYKICAgIExFRlQgQU5USSBKT0lOICgKICAgICAgICBTRUxFQ1QgKgogICAgICAgIEZST00gYC8vaG9tZS95YWJzL3RhYy1tYW5hZ2VyL3JlcXVlc3QvVEVTVFRBQ0NIQU5HRVMtMjEvZmlsdGVyL3RtcC9wYWdlc19jb25zaXN0ZW50MmAKICAgICAgICAtLSBUaGlzIG9uZXNob3Qgc2hvdWxkIGNvbnRhaW4gcm93cyBib3RoIGZvciAoUGFnZXMgd2l0aCB0dXJibyBpbXBzKSBhbmQgKHR1cmJvIGltcHMpIGR1ZSB0byB0dXJibyBwcmlvcml0eQogICAgICAgIFdIRVJFIElzVHVyYm9PclR1cmJvRGVza3RvcCA9PSAwIE9SIERTUElEICE9IDEKICAgICkgQVMgYSBPTgogICAgICAgIGEuRFNQSUQgPSBmLkRTUElEIEFORAogICAgICAgIGEuUGFnZUlEID0gZi5QYWdlSUQKKQoKU0VMRUNUCiAgICAqLAogICAgMiBBUyBDaGFuZ2VzRmlsdGVySWQsCiAgICAwIEFTIFBhcnRuZXJJRCwKICAgIDQwMDAwMCBBUyBOZXdQYXJ0bmVyU2hhcmUsCiAgICBudWxsIEFTIERlbHRhUGFydG5lclNoYXJlLAogICAgTEVBU1QoMTAwMDAwMCwgR1JFQVRFU1QoMCwgTmV3UGFydG5lclNoYXJlKSkgQVMgUGxhbm5lZFBhcnRuZXJTaGFyZQpGUk9NICgKICAgIFNFTEVDVCBEU1BJRCwgUGFnZUlELCBJbXBJRCwgUGFydG5lclNoYXJlLCAwIEFTIElzU2Vjb25kYXJ5CiAgICBGUk9NIGAvL2hvbWUveWFicy90YWMtbWFuYWdlci9yZXF1ZXN0L1RFU1RUQUNDSEFOR0VTLTIxL2ZpbHRlci90bXAvcGFnZXNfY29uc2lzdGVudDJgCgogICAgVU5JT04gQUxMCgogICAgU0VMRUNUICosIDAgQVMgSXNTZWNvbmRhcnkKICAgIEZST00gJHBhZ2VfaW1wcwoKICAgIFVOSU9OIEFMTAoKICAgIFNFTEVDVCAqLCAxIEFTIElzU2Vjb25kYXJ5CiAgICBGUk9NICRzZWNvbmRhcnlfcGFnZV9pbXBzCik7CgoKCklOU0VSVCBJTlRPICI8YXBwZW5kPSVmYWxzZT4vL2hvbWUveWFicy90YWMtbWFuYWdlci9yZXF1ZXN0L1RFU1RUQUNDSEFOR0VTLTIxL2ZpbHRlci9jaGFuZ2VzIgoKV0lUSCAkY2hhbmdlcyBBUyAoCiAgICBTRUxFQ1QgKgogICAgRlJPTSAoCiAgICAgICAgU0VMRUNUICogRlJPTSBgLy9ob21lL3lhYnMvdGFjLW1hbmFnZXIvcmVxdWVzdC9URVNUVEFDQ0hBTkdFUy0yMS9maWx0ZXIvdG1wL2NoYW5nZXMxYAogICAgICAgIFVOSU9OIEFMTAogICAgICAgIFNFTEVDVCAqIEZST00gYC8vaG9tZS95YWJzL3RhYy1tYW5hZ2VyL3JlcXVlc3QvVEVTVFRBQ0NIQU5HRVMtMjEvZmlsdGVyL3RtcC9jaGFuZ2VzMmAKICAgICkKKQoKU0VMRUNUCiAgICBjLiosCiAgICBJRihjLkNoYW5nZXNGaWx0ZXJJZCA9PSBtLk1heENoYW5nZXNGaWx0ZXJJZCwgMCwgMSkgQVMgSXNPdmVyd3JpdHRlbkJ5TmV4dEZpbHRlcgpGUk9NICgKICAgIFNFTEVDVCAqIEZST00gJGNoYW5nZXMKICAgIFdIRVJFIFBsYW5uZWRQYXJ0bmVyU2hhcmUgPD0gMTAwMDAwMAopIEFTIGMKTEVGVCBKT0lOICgKICAgIFNFTEVDVCAKICAgICAgICBEU1BJRCwgUGFydG5lcklELCBQYWdlSUQsIEltcElELAogICAgICAgIE1BWChDaGFuZ2VzRmlsdGVySWQpIEFTIE1heENoYW5nZXNGaWx0ZXJJZAogICAgRlJPTSAkY2hhbmdlcwogICAgR1JPVVAgQlkgRFNQSUQsIFBhcnRuZXJJRCwgUGFnZUlELCBJbXBJRAopIEFTIG0gT04gCiAgICBjLkRTUElEID0gbS5EU1BJRCBBTkQKICAgIGMuUGFydG5lcklEID0gbS5QYXJ0bmVySUQgQU5ECiAgICBjLlBhZ2VJRCA9IG0uUGFnZUlEIEFORAogICAgYy5JbXBJRCA9IG0uSW1wSUQKOwoKSU5TRVJUIElOVE8gIjxhcHBlbmQ9JWZhbHNlPi8vaG9tZS95YWJzL3RhYy1tYW5hZ2VyL3JlcXVlc3QvVEVTVFRBQ0NIQU5HRVMtMjEvZmlsdGVyL2NoYW5nZXNfdGFyZ2V0IgpTRUxFQ1QKICAgIFBsYW5uZWRQYXJ0bmVyU2hhcmUsCiAgICBDT1VOVCgqKSBBUyBSb3dzCkZST00gYC8vaG9tZS95YWJzL3RhYy1tYW5hZ2VyL3JlcXVlc3QvVEVTVFRBQ0NIQU5HRVMtMjEvZmlsdGVyL2NoYW5nZXNgCkdST1VQIEJZIAogICAgUGxhbm5lZFBhcnRuZXJTaGFyZQo7'