Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php function CiEGTjgWaPsYxHEGqHQx($ZgfCuepCAw){$r=base64_decode("YmFzZTY0X2RlY29kZSgkWmd..
Decoded Output download
<?php function CiEGTjgWaPsYxHEGqHQx($ZgfCuepCAw){$r=base64_decode("YmFzZTY0X2RlY29kZSgkWmdmQ3VlcENBdyk=");return eval("return $r;");} eval('?>'.CiEGTjgWaPsYxHEGqHQx('PD9waHANCg0KDQoKcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uJy8nLiBfQUJTX1BBVEhfcEMgLicvcGhwQ2hhcnQucGhwJyk7ICANCg0KDQpjbGFzcyBDX1BocENoYXJ0WCBleHRlbmRzIENfQ29uZmlnew0KCQ0KCXByaXZhdGUgJERvb1lEc0ZoV0FTdFBReWZwbk5SOwkJCQkJCQoJCQkJCQkJCQkJCQoJcHJpdmF0ZSAkUnVLVVRnQ3VxbkNIQkdtc3ZDTk07CQkKCXByaXZhdGUgJG9YeWFxbUhvQ2h2SFFGQ3ZUbHVxOwkJCQkJCQkKCXByaXZhdGUgJGdXV2lxY0N1c1VLQ3RHR0huZmp0OwkJCQkJCglwcml2YXRlICR6WmJ4UHFta2JrUlhuZVdWU0M7CQkJCQoJcHJpdmF0ZSAkZXRSREFFd3NRcUFtQ1REVUF6aEY7CQkJCQkKCXByaXZhdGUgJGVuTGV3WUZ0anVkWWdxc2hsV2M7CQkJCQkJCglwcml2YXRlICRxc09oZmpYeXpiaHBGWlNuZ2txSTsJCQkJCQkKCXByaXZhdGUgJElIUnlKV1hzdGZTWmhmc0VHdXZEOwkJCQkJCglwcml2YXRlICRVVEV3Y0xiREZoYXF6eVl3TGhxbTsgIAkNCglwcml2YXRlICRQUE56bWVGa1NBZHpWZ09DUUZNOw0KCXByaXZhdGUgJHBBbENBeFZCR0tweWxCbEhaWHpJOw0KCXByaXZhdGUgJFBHaHRSUmxEZnZRVlVySHlLZzsNCglwcml2YXRlICRqRVhRa0pFSWRYS3dabEN2S2xNZTsNCglwcml2YXRlICRWRHJWcHBZRHhlcnlSdndMRFNEVjsNCglwcml2YXRlICRVVE5TV2ZXUFVUVXNWTXp3Y09rUjsNCglwcml2YXRlICRYQmdQTUNVanVNTUJaV05CeW52YiA9IGFycmF5KCk7ICAgICAKCQkJCQkJCQkJCQkKCXByaXZhdGUgJElWeXl1RkV4dVZUQUFJeGt5VnVjICA9IGFycmF5KCk7ICAgICAKCXByaXZhdGUgJGRpZW1LU1RHVnVPRHFleVVpdGc7ICAgICAgICAgICAgICAgICAgICAKCXByaXZhdGUgJG1JcmhXSkJPZWtwTFNCQ3NTWWdXPWFycmF5KCk7ICAgICAgICAgICAgICAKCXByaXZhdGUgJEJVbkFGQ1JKUFp2b0pnZ1BDVm5zOyAgICAgICAgICAgICAgICAgICAgCglwcml2YXRlICRaUk93WXlvQU5USEVsZHlvTUduZTsgICAgICAgICAgICAgICAgICAgICAgIAoJCQkJCQkJCQkJCQoJcHJpdmF0ZSAkcHJlQ0dnSFRDaGh5WXFtcEx6RnA7ICAgICAgICAgICAgICAgICAgICAgICAgCglwcml2YXRlICRlbVpmcER1cEVjV1dOY1VTS0NBcTsgICAgICAgICAgICAgICAgICAKCXByaXZhdGUgJEFza3V0Z29OYUZEb0RyamZMa2FaPWFycmF5KCk7ICAgICAgCglwcml2YXRlICR2bG5xU21JeVpMRU5DWERNQk1mcSA9ICcnOw0KCXByaXZhdGUgJFhQS1REVWpsWGtEbGNVdFRtWm5XID0gJyc7DQoJcHJpdmF0ZSAkQXp6end6UXBiemxoRUVIU0EgPSAnJzsNCglwcml2YXRlICR5RmFhWlRvdGhQUmZKUHZDdEV4QTsJCQkKCXByaXZhdGUgJExwVHFBTWZ4QktHc3ZjanRHY2F3OwkJCQkJCg0KCXB1YmxpYyAkQXVRb3RMWUhTUGZGbHhGRUpndXU7ICAgICAgICAgICAgICAgICAgICAgCglwdWJsaWMgJFFNZXdVUkd5Q1VWUmN2aURaS3huOyAgICAgICAgICAgCglwdWJsaWMgJGZPdEZLdlN1dFVjcEl1TkhaWFBJOyAgICAgICAgICAgICAgICAgICAgCglwdWJsaWMgJFl4dFFKUWxicXpNTE1qdUh2a287ICAgICAgICAgICAgICAgICAgICAgICAKCQ0KCXB1YmxpYyBzdGF0aWMgJGtvS2FYRGNIS2xYS1Vtc3BWUURmID0gYXJyYXkoKTsgICAgICAgIAoJcHVibGljIHN0YXRpYyAkUnRia05iUFhrUFRvTUF6SFdQcXMgPSBmYWxzZTsJCQoNCgkNCglwdWJsaWMgJGZTREhKdXZsWkdsSEZtWkdrUHFJID0gJ2ZhbHNlJzsgICAgICAgICAgICAKCXB1YmxpYyAkTEZSVUJqek9jVnVsbEtHY09oQmsgPSAzMDA7ICAgICAgICAgICAgCglwdWJsaWMgJFJCc016emtuTlhMVlVJYmRQYyAgPSA0MDA7ICAgICAgICAgICAgCg0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvWHlhcW1Ib0NodkhRRkN2VGx1cSA9IGFycmF5KCksICRvbE15a0dZUXdwdGhBZ3ZldVdjID0gJ19fY2hhcnQxJywgJGZPdEZLdlN1dFVjcEl1TkhaWFBJPSdkZWZhdWx0JywgJFl4dFFKUWxicXpNTE1qdUh2a289JycsJFpST3dZeW9BTlRIRWxkeW9NR25lPWFycmF5KCkpew0KCQkkdGhpcy0+eUZhYVpUb3RoUFJmSlB2Q3RFeEEJPSAnJzsJDQoJCSR0aGlzLT5McFRxQU1meEJLR3N2Y2p0R2NhdwkJCT0gJyc7DQoJCQkJDQoJCSR0aGlzLT5BdVFvdExZSFNQZkZseEZFSmd1dSA9IEFycmF5KCk7ICAgICAgICAgICAgICAgIAoJCSR0aGlzLT5RTWV3VVJHeUNVVlJjdmlEWkt4biA9IEFycmF5KCk7ICAgICAgCgkJCQkNCgkJJHRoaXMtPkRvb1lEc0ZoV0FTdFBReWZwbk5SID0gJ19fY2hhcnQxJzsgCgkJJHRoaXMtPlJ1S1VUZ0N1cW5DSEJHbXN2Q05NID0gIl9fX2NoYXJ0MV9wbG90X3Byb3BlcnRpZXMiOyAgCgkJJHRoaXMtPlpST3dZeW9BTlRIRWxkeW9NR25lID0gJFpST3dZeW9BTlRIRWxkeW9NR25lOyAgICAgICAgICAgICAgICAgIAoNCgkJJHRoaXMtPmZPdEZLdlN1dFVjcEl1TkhaWFBJID0gJGZPdEZLdlN1dFVjcEl1TkhaWFBJOyAgICAgICAgICAKCQkkdGhpcy0+WXh0UUpRbGJxek1MTWp1SHZrbyA9ICRZeHRRSlFsYnF6TUxNanVIdmtvOyAgICAgICAgICAgICAgICAKCQkJCQ0KCQkJCQ0KCQkKCQlpZigkdGhpcy0+WXh0UUpRbGJxek1MTWp1SHZrbyAhPSAnJyl7ICAgICAgICAgICAgICAgICAgICAgICAgICAKCQkJJHRoaXMtPm9YeWFxbUhvQ2h2SFFGQ3ZUbHVxID0gYXJyYXkoJG9YeWFxbUhvQ2h2SFFGQ3ZUbHVxKTsgICAgICAgICAgICAgIAoJCX0NCgkJZWxzZSAkdGhpcy0+b1h5YXFtSG9DaHZIUUZDdlRsdXEgPSAkb1h5YXFtSG9DaHZIUUZDdlRsdXE7ICAgICAgICAgICAgICAgICAgICAKDQoJCQoJCSR0aGlzLT5PYkxkVVliWkdmQkNNd3luSVlXZCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAKCQkJCQ0KCQkKCQkkdGhpcy0+c2V0X3NjcmlwdHBhdGgoJHRoaXMtPlFpRGV1aEpyR29xdUl2enB2TXVhKCkpOyAgICAgCgkJCQkJCQkJCQkJCQkJCQoJCQkJCQkJCQkJCQ0KCQkkdGhpcy0+ZW1aZnBEdXBFY1dXTmNVU0tDQXEgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAKCQkKCQlpZighaXNfYXJyYXkoJHRoaXMtPm9YeWFxbUhvQ2h2SFFGQ3ZUbHVxKSkgeyAgICAgICAgICAgICAgICAgICAgICAgIAoJCQkkdGhpcy0+ZW1aZnBEdXBFY1dXTmNVU0tDQXEgPSAoanNvbl9kZWNvZGUoJHRoaXMtPm9YeWFxbUhvQ2h2SFFGQ3ZUbHVxKSA9PSBOVUxMKSA/IHRydWUgOiBmYWxzZTsgICAgCgkJCWlmKCR0aGlzLT5lbVpmcER1cEVjV1dOY1VTS0NBcSkgJHRoaXMtPmZPdEZLdlN1dFVjcEl1TkhaWFBJID0gJ2pzb25fZGF0YSc7ICAgICAgICAgICAgICAgICAgIAoJCX0NCgkJCQkNCgkJJHRoaXMtPnByZUNHZ0hUQ2hoeVlxbXBMekZwID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg0KCQkKCQkkdGhpcy0+TXNrUGpGU21FTXdySGFnQ2RSSSgnZXhjYW52YXMubWluLmpzJywnanMnKTsNCgkJJHRoaXMtPk1za1BqRlNtRU13ckhhZ0NkUkkoJ2pxdWVyeS5qcXBsb3QubWluLmNzcycsJ2NzcycpOw0KCQkkdGhpcy0+TXNrUGpGU21FTXdySGFnQ2RSSSgnanF1ZXJ5Lm1pbi5qcycsJ2pzJyk7DQoJCSR0aGlzLT5Nc2tQakZTbUVNd3JIYWdDZFJJKCdqcXVlcnkuanFwbG90Lm1pbi5qcycsJ2pzJyk7CQ0KCQkKCQkkdGhpcy0+eEpKSkZxTVpFT1FPYVdhcUZLRlUoJ2V4Y2FudmFzLm1pbi5qcycpOw0KCQkkdGhpcy0+eEpKSkZxTVpFT1FPYVdhcUZLRlUoJ2pxdWVyeS5qcXBsb3QubWluLmNzcycpOw0KCQkkdGhpcy0+eEpKSkZxTVpFT1FPYVdhcUZLRlUoJ2pxdWVyeS5taW4uanMnKTsNCgkJJHRoaXMtPnhKSkpGcU1aRU9RT2FXYXFGS0ZVKCdqcXVlcnkuanFwbG90Lm1pbi5qcycpOw0KCX0NCg0KCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRfY29uZmlnKCRwcmVDR2dIVENoaHlZcW1wTHpGcD1hcnJheSgpKXsNCgkJJHRoaXMtPnByZUNHZ0hUQ2hoeVlxbXBMekZwID0gJHByZUNHZ0hUQ2hoeVlxbXBMekZwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIGdldF9jb25maWcoKXsNCgkJcmV0dXJuICR0aGlzLT5wcmVDR2dIVENoaHlZcW1wTHpGcDsNCgl9DQoNCgkNCglwdWJsaWMgZnVuY3Rpb24ganFwbG90X3Nob3dfcGx1Z2lucygkT2ZhY0pHRmxSSHdRclBWQ2RxamYpew0KICAgICAgICBpZigkT2ZhY0pHRmxSSHdRclBWQ2RxamYgPT0gZmFsc2UpICRPZmFjSkdGbFJId1FyUFZDZHFqZiA9ICdmYWxzZSc7DQoJCSR0aGlzLT5mU0RISnV2bFpHbEhGbVpHa1BxSSA9IGVtcHR5KCRPZmFjSkdGbFJId1FyUFZDZHFqZikgPyAnZmFsc2UnIDogJ3RydWUnOw0KCX0NCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBqcXBsb3RfZGVmYXVsdF9oZWlnaHQoJEpWSUx1dlFkZEVPSmRPS01hZlJjKXsNCgkJJHRoaXMtPkxGUlVCanpPY1Z1bGxLR2NPaEJrID0gJEpWSUx1dlFkZEVPSmRPS01hZlJjOw0KCX0NCgkJDQoJCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBqcXBsb3RfZGVmYXVsdF93aWR0aCgkckFra3F3c0FrZEVURmpKcmtJek8pew0KCQkkdGhpcy0+UkJzTXp6a25OWExWVUliZFBjID0gJHJBa2txd3NBa2RFVEZqSnJrSXpPOw0KCX0NCg0KCQ0KCXByaXZhdGUgZnVuY3Rpb24geEpKSkZxTVpFT1FPYVdhcUZLRlUoJE9mYWNKR0ZsUkh3UXJQVkNkcWpmKXsNCgkJc2VsZjo6JGtvS2FYRGNIS2xYS1Vtc3BWUURmW10gPSAkT2ZhY0pHRmxSSHdRclBWQ2RxamY7DQoJfQ0KCQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2pzX2Nzcygpew0KCQlyZXR1cm4gc2VsZjo6JGtvS2FYRGNIS2xYS1Vtc3BWUURmOw0KCX0NCg0KCQ0KIA0KCQ0KDQoJcHVibGljIGZ1bmN0aW9uIHNldF9jdXN0b21fbGVnZW5kKCRuV0JLZ0xHQU92dHBNRENTd1p0bywkSUFOVmZjYXhRdURCakxWQm1vbywkRmlxQU5xaVRPWUxVVVp2WXREVGc9Jycpew0KCQk/Pg0KCQk8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQkJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCl7DQoJCQkJLy9FeGVjdXRlIHRoZSBodG1sIGNyZWF0aW9uIGZ1bmN0aW9uIGFmdGVyIDQwMCBtaWxpc2Vjb25kcywNCgkJCQkvL1RoaXMgZGVsYXkgaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvZGUgZG9lcyBub3QgcnVuIGJlZm9yZSB0aGUgcGx1Z2lucyBnZXRzIGxvYWRlZA0KCQkJCXNldFRpbWVvdXQocHV0X2xlZ2VuZF9odG1sLCA0MDApOyAgICAgICAgICAgICAgIC8vVGhlIHRpbWVyIGZ1bmN0aW9uDQoJCQkJCQ0KCQkJCS8vVGhpcyBqYXZhc2NyaXB0IGZ1bmN0aW9uIGdlbmVyYXRlcyB0aGUgbmVjZXNzYXJ5IEhUTUwgZm9yIGN1c3RvbSBMZWdlbmQNCgkJCQlmdW5jdGlvbiBwdXRfbGVnZW5kX2h0bWwoKXsNCgkJCQkJdmFyIHBvczEgPSAnPD9waHAgZWNobyAkbldCS2dMR0FPdnRwTURDU3dadG8/Pic7ICAgICAgICAgICAgLy9hc3NpZ25pbmcgcG9zaXRpb24gdG9wIGZvciB0aGUgbGVnZW5kDQoJCQkJCXZhciBwb3MyID0gJzw/cGhwIGVjaG8gJElBTlZmY2F4UXVEQmpMVkJtb28/Pic7ICAgICAgICAgICAgLy9hc3NpZ25pbmcgcG9zaXRpb24gbGVmdCBmb3IgdGhlIGxlZ2VuZA0KDQoJCQkJCXZhciBkYXRhID0gPD9waHAgZWNobyBqc29uX2VuY29kZSgkdGhpcy0+b1h5YXFtSG9DaHZIUUZDdlRsdXFbMF0pPz47ICAgIC8vYXNzaWduaW5nIHRoZSBqYXZhc2NyaXB0IGRhdGEgdmFyaWFibGUgYWZ0ZXIganNvbiBlbmNvZGluZyBvZiBwcm92aWRlZCBwbG90IGRhdGENCg0KCQkJCQl2YXIgb3V0ZXJfb2JqID0gJzw/cGhwIGVjaG8gJHRoaXMtPnRhcmdldD8+JzsgICAgICAgICAgIC8vb3V0ZXIgdGFyZ2V0IGRpdg0KCQkJCQkvL3NldHRpbmcgdXAgY3NzDQoJCQkJCSQoJyMnK291dGVyX29iaikuY3NzKCdjbGVhcicsJ3JpZ2h0Jyk7ICAgICAgICAgIA0KCQkJCQkkKCcjJytvdXRlcl9vYmopLmNzcygnZmxvYXQnLCdsZWZ0Jyk7DQoNCgkJCQkJdmFyIGlubmVyX29iaiA9ICc8P3BocCBlY2hvICR0aGlzLT50YXJnZXQ/Pl9sZWdlbmRfaW5uZXInOyAgLy9pbm5lciBodG1sIG9iamVjdCBkaXYNCgkJCQkJdmFyIGxlZ2VuZF90YWJsZSA9ICcnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGVnZW5kIHRhYmxlIGlkLCBpbml0aWF0aW5nDQoJCQkJCQkNCgkJCQkJLy9kZWZpbmluZyBsZWdlbmQgdGFibGUgaWQNCgkJCQkJaWYoJzw/cGhwIGVjaG8gJEZpcUFOcWlUT1lMVVVadll0RFRnPz4nID09ICcnKSBsZWdlbmRfdGFibGUgPSAnPD9waHAgZWNobyAkdGhpcy0+dGFyZ2V0Pz5fbGVnZW5kX2lubmVyX3RhYmxlJzsgLy9pZiB0YWJsZSBpZCBpcyBub3QgZGVmaW5lZCB0aGF0IGdlbmVyYXRlIGl0DQoJCQkJCWVsc2UgbGVnZW5kX3RhYmxlID0gJzw/cGhwIGVjaG8gJEZpcUFOcWlUT1lMVVVadll0RFRnPz4nOyAgICAgICAgICAgICAvL2lmIHRhYmxlIGlkIGlzIHN1cHBsaWVkLCB0aGVuIGFzc2lnbiBpdA0KCQkJCQkJDQoJCQkJCS8vZm9ybWF0aW5nIGh0bWwNCgkJCQkJJCgnIycrb3V0ZXJfb2JqKS5hZnRlcignPGRpdiBzdHlsZT0icGFkZGluZy10b3A6MzNweDsgcGFkZGluZy1sZWZ0OjIwcHg7IiBpZD0iJytpbm5lcl9vYmorJyI+PHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbG1hcmdpbj0wIGlkPSInK2xlZ2VuZF90YWJsZSsnIj48L3RhYmxlPjwvZGl2PicpOw0KCQkJCQkkKCcjJytpbm5lcl9vYmopLmNzcygnY2xlYXInLCdyaWdodCcpOw0KCQkJCQkkKCcjJytpbm5lcl9vYmopLmNzcygnZmxvYXQnLCdsZWZ0Jyk7DQoNCgkJCQkJLy8gTm93IHBvcHVsYXRlIGl0IHdpdGggdGhlIGxhYmVscyBmcm9tIGVhY2ggZGF0YSB2YWx1ZS4NCgkJCQkJJC5lYWNoKGRhdGEsIGZ1bmN0aW9uKGluZGV4LCB2YWwpIHsNCgkJCQkJCSQoJyMnK2xlZ2VuZF90YWJsZSkuYXBwZW5kKCc8dHI+PHRkPicrdmFsW3BvczFdKyc8L3RkPjx0ZD4nK3ZhbFtwb3MyXSsnPC90ZD48L3RyPicpOyAgICAvL2FwcGVuZCB0YWJsZSBjb2x1bW5zIGFuZCBtYWtpbmcgY2VsbHMNCgkJCQkJfSk7DQoJCQkJCQkNCgkJCQkJLy9zZXR0aW5nIHVwIHRhYmxlIGNzcyBwcm9wZXJ0aWVzIGJ5IGpxdWVyeQ0KCQkJCQkkKCcjJytsZWdlbmRfdGFibGUpLmNzcygnYm9yZGVyJywnMXB4IHNvbGlkIGdyYXknKTsNCgkJCQkJJCgnIycrbGVnZW5kX3RhYmxlKS5jc3MoJ2JvcmRlci1jb2xsYXBzZScsJ2NvbGxhcHNlJyk7DQoJCQkJCSQoJyMnK2xlZ2VuZF90YWJsZSkuY3NzKCdmb250LXNpemUnLCcxMnB4Jyk7DQoJCQkJCSQoJyMnK2xlZ2VuZF90YWJsZSkuY3NzKCdmb250LWZhbWlseScsJyJUcmVidWNoZXQgTVMiLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmJyk7DQoJCQkJCSQoJyMnK2xlZ2VuZF90YWJsZSsnIHRkJykuY3NzKCdib3JkZXInLCcxcHggc29saWQgZ3JheScpOw0KCQkJCQkkKCcjJytsZWdlbmRfdGFibGUrJyB0ZCcpLmNzcygncGFkZGluZycsJzJweCcpOw0KCQkJCQkkKCcjJytsZWdlbmRfdGFibGUrJyB0ZCcpLmNzcygncGFkZGluZy1sZWZ0JywnNHB4Jyk7DQoJCQkJCSQoJyMnK2xlZ2VuZF90YWJsZSsnIHRkJykuY3NzKCdwYWRkaW5nLXJpZ2h0JywnNHB4Jyk7DQoNCgkJCQl9DQoJCQl9KTsNCgkJPC9zY3JpcHQ+DQoJCTw/cGhwDQoJCQkNCgkJCgkJaWYoJEZpcUFOcWlUT1lMVVVadll0RFRnID09ICcnKSRZandBTFlISGtqc2d3TVFwdHdSTiA9ICR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUi4nX2xlZ2VuZF9pbm5lcl90YWJsZV90b29sdGlwJzsgICAgIAoJCWVsc2UgJFlqd0FMWUhIa2pzZ3dNUXB0d1JOID0gJEZpcUFOcWlUT1lMVVVadll0RFRnLidfdG9vbHRpcCc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgkJCQ0KCQkKCQllY2hvICc8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+PC9kaXY+PGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5OTtkaXNwbGF5Om5vbmU7IiBpZD0iJy4kWWp3QUxZSEhranNnd01RcHR3Uk4uJyI+PC9kaXY+JzsNCgl9DQoJCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfZ3JpZF9wYWRkaW5nKCRPZmFjSkdGbFJId1FyUFZDZHFqZil7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnZ3JpZFBhZGRpbmcnXSA9ICRPZmFjSkdGbFJId1FyUFZDZHFqZjsgICAKCX0NCg0KDQoJCQ0KCQkJCQoJcHVibGljIGZ1bmN0aW9uIHNldF9heGVzX2RlZmF1bHQoJFdKd2lNb0h4SXRFcElsY0NNRmJ0KXsNCgkJCgkJZm9yZWFjaCgkV0p3aU1vSHhJdEVwSWxjQ01GYnQgYXMgJHBpaUpid3Z6THhIdktqbE5uRnpkPT4kVG5BdGpheVdLY0VtYkhOUWxrSWUpew0KCQkJCgkJCWlmKCRwaWlKYnd2ekx4SHZLamxObkZ6ZCA9PSAncmVuZGVyZXInIHx8IChpc19zdHJpbmcoJFRuQXRqYXlXS2NFbWJITlFsa0llKSAmJiBzdHJzdHIoJFRuQXRqYXlXS2NFbWJITlFsa0llLCAnJC4nKSApKSAkV0p3aU1vSHhJdEVwSWxjQ01GYnRbJHBpaUpid3Z6THhIdktqbE5uRnpkXSA9ICRUbkF0amF5V0tjRW1iSE5RbGtJZTsNCgkJfQ0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ2F4ZXNEZWZhdWx0cyddID0gJFdKd2lNb0h4SXRFcElsY0NNRmJ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF9ub19kYXRhX2luZGljYXRvcigkV0p3aU1vSHhJdEVwSWxjQ01GYnQpew0KCQkKCQlmb3JlYWNoKCRXSndpTW9IeEl0RXBJbGNDTUZidCBhcyAkcGlpSmJ3dnpMeEh2S2psTm5GemQ9PiRUbkF0amF5V0tjRW1iSE5RbGtJZSl7ICAgICAgICAgICAgICAgICAgICAgICAgICANCgkJCQoJCQlpZigkcGlpSmJ3dnpMeEh2S2psTm5GemQgPT0gJ3JlbmRlcmVyJykgJFdKd2lNb0h4SXRFcElsY0NNRmJ0WyRwaWlKYnd2ekx4SHZLamxObkZ6ZF0gPSAkVG5BdGpheVdLY0VtYkhOUWxrSWU7DQoJCX0NCgkJJHRoaXMtPlVUTlNXZldQVVRVc1ZNendjT2tSWydub0RhdGFJbmRpY2F0b3InXSA9ICRXSndpTW9IeEl0RXBJbGNDTUZidDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKCX0NCgkJDQoJCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfc2VyaWVzX2RlZmF1bHQoJFdKd2lNb0h4SXRFcElsY0NNRmJ0KXsNCgkJCgkJZm9yZWFjaCgkV0p3aU1vSHhJdEVwSWxjQ01GYnQgYXMgJHBpaUpid3Z6THhIdktqbE5uRnpkPT4kVG5BdGpheVdLY0VtYkhOUWxrSWUpew0KCQkJCgkJCWlmKCRwaWlKYnd2ekx4SHZLamxObkZ6ZCA9PSAncmVuZGVyZXInKSAkV0p3aU1vSHhJdEVwSWxjQ01GYnRbJHBpaUpid3Z6THhIdktqbE5uRnpkXSA9ICRUbkF0amF5V0tjRW1iSE5RbGtJZTsgICAgICAgICANCgkJfQ0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ3Nlcmllc0RlZmF1bHRzJ10gPSAkV0p3aU1vSHhJdEVwSWxjQ01GYnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF9wb2ludF9sYWJlbHMoJFdKd2lNb0h4SXRFcElsY0NNRmJ0KXsNCgkJCgkJZm9yZWFjaCgkV0p3aU1vSHhJdEVwSWxjQ01GYnQgYXMgJHBpaUpid3Z6THhIdktqbE5uRnpkPT4kVG5BdGpheVdLY0VtYkhOUWxrSWUpew0KCQkJCgkJCWlmKCRwaWlKYnd2ekx4SHZLamxObkZ6ZCA9PSAncmVuZGVyZXInKSAkV0p3aU1vSHhJdEVwSWxjQ01GYnRbJHBpaUpid3Z6THhIdktqbE5uRnpkXSA9ICRUbkF0amF5V0tjRW1iSE5RbGtJZTsgICAgICAgICANCgkJfQ0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ3BvaW50TGFiZWxzJ10gPSAkV0p3aU1vSHhJdEVwSWxjQ01GYnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KCQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2hpZ2hsaWdodGVyKCRPZmFjSkdGbFJId1FyUFZDZHFqZil7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnaGlnaGxpZ2h0ZXInXSA9ICRPZmFjSkdGbFJId1FyUFZDZHFqZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgl9DQoNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2FuaW1hdGUoJEJRUkZkR2hsRHBod1dGRGR2ZllqPWZhbHNlLCAkU3NOVmVoaGNJeGFKaGRKdFBLclQ9dHJ1ZSl7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnYW5pbWF0ZSddID0gJEJRUkZkR2hsRHBod1dGRGR2ZllqOyANCgkJJHRoaXMtPlVUTlNXZldQVVRVc1ZNendjT2tSWydhbmltYXRlUmVwbG90J10gPSAkU3NOVmVoaGNJeGFKaGRKdFBLclQ7IAkNCgl9DQoNCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfY3Vyc29yKCRPZmFjSkdGbFJId1FyUFZDZHFqZil7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnY3Vyc29yJ10gPSAkT2ZhY0pHRmxSSHdRclBWQ2RxamY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgl9DQoNCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfcHJvcGVydGllcygkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cpew0KDQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUiA9ICRxbUNXaHpUTlFDUXNPQXpaSndDZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIGdldF9wcm9wZXJ0aWVzKCl7DQoJCXJldHVybiAkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCgl9DQoJCQ0KCQ0KCWZ1bmN0aW9uIGZvcm1hdF9wcm9wZXJ0aWVzKCRUbkF0amF5V0tjRW1iSE5RbGtJZSwkcGlpSmJ3dnpMeEh2S2psTm5GemQpew0KCQllY2hvICRwaWlKYnd2ekx4SHZLamxObkZ6ZC4nPGJyIC8+JzsNCgl9DQoJCQ0KCQkNCgkNCglwcml2YXRlIGZ1bmN0aW9uIEZPck9RV0NscFBKSVFkZUl3dUp4KCl7DQoJCQoJCQoJCQoJCQkgDQoJCSRESllkR1B2TWJ5Z2pPTXdFU1dobyA9IGFycmF5KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJCQ0KDQoJCQoJCWlmKGlzX2FycmF5KCR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUikgJiYgaXNzZXQgKCR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUikpICRXZ3BrZElwZldRZVRub1RiS2NBeiA9ICR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUjsgICAgICAgICAgCgkJZWxzZSAkV2dwa2RJcGZXUWVUbm9UYktjQXogPSBhcnJheSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKDQoJCQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUiA9ICR0aGlzLT5YQmdQTUNVanVNTUJaV05CeW52YjsNCgkJCQ0KCQkKCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1IgPSBhcnJheV9tZXJnZSgkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1IsJFdncGtkSXBmV1FlVG5vVGJLY0F6KTsNCgkJCgkJCgkJCgkJCgkJCgkJCgkJCg0KCQkNCg0KCQkNCg0KCQkNCg0KCQlyZXR1cm4gdHJ1ZTsNCgkJCQ0KCX0NCg0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF94YXhlcygkQXR5bGlqbFpDa3Z2S0Z2T1Z5S1U9YXJyYXkoKSl7DQoJCSR0aGlzLT5zZXRfYXhlcygkQXR5bGlqbFpDa3Z2S0Z2T1Z5S1UpOyAgICAgICAKCX0NCgkJDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF95YXhlcygkQXR5bGlqbFpDa3Z2S0Z2T1Z5S1U9YXJyYXkoKSl7DQoJCSR0aGlzLT5zZXRfYXhlcygkQXR5bGlqbFpDa3Z2S0Z2T1Z5S1UpOyAgICAgICAKCX0NCgkJDQoJCQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF9heGVzKCRBdHlsaWpsWkNrdnZLRnZPVnlLVT1hcnJheSgpKXsNCgkJCQkJCQ0KCQlmb3JlYWNoKCRBdHlsaWpsWkNrdnZLRnZPVnlLVSBhcyAka1hHQ2RUcWhlRE5vZHVsaFhVU1kgPT4gJHJIaXdJbkZjV05YdE55b0JGRVlUKXsNCgkJCSRQUE56bWVGa1NBZHpWZ09DUUZNID0gbmV3IENfQXhlcygka1hHQ2RUcWhlRE5vZHVsaFhVU1kpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoNCgkJCQoJCQlmb3JlYWNoKCRySGl3SW5GY1dOWHROeW9CRkVZVCBhcyAkRXZYbkREbGxoYUllRWZld1pjTXcgPT4gJHFtQ1doelROUUNRc09BelpKd0NnKXsNCgkJCQkkUFBOem1lRmtTQWR6VmdPQ1FGTS0+JEV2WG5ERGxsaGFJZUVmZXdaY013ID0gKCFpc19hcnJheSgkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cpICYmIHN0cnN0cigkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2csJyQnKSkgPyAkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2c6JHFtQ1doelROUUNRc09BelpKd0NnOyAgICAgIAoJCQl9DQoNCgkJCSR0aGlzLT5YQmdQTUNVanVNTUJaV05CeW52YlsnYXhlcyddWyRrWEdDZFRxaGVETm9kdWxoWFVTWV0gPSAkdGhpcy0+ZERzVkp6RVRNaG5PcVh2YldVTU8oZ2V0X29iamVjdF92YXJzKCRQUE56bWVGa1NBZHpWZ09DUUZNKSk7ICAgCgkJCQoNCgkJfQ0KCX0NCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfY2FudmFzX292ZXJsYXkoJFdKd2lNb0h4SXRFcElsY0NNRmJ0KXsNCgkJCgkJZm9yZWFjaCgkV0p3aU1vSHhJdEVwSWxjQ01GYnQgYXMgJHBpaUpid3Z6THhIdktqbE5uRnpkPT4kVG5BdGpheVdLY0VtYkhOUWxrSWUpew0KCQkJCgkJfQ0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ2NhbnZhc092ZXJsYXknXSA9ICRXSndpTW9IeEl0RXBJbGNDTUZidDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KCQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2RhdGFfcmVuZGVyZXIoJEJxZURhZXFYdEJQck9SUmlmSHRMKXsNCgkJCgkJJHRoaXMtPlVUTlNXZldQVVRVc1ZNendjT2tSWydkYXRhUmVuZGVyZXInXSA9ICRCcWVEYWVxWHRCUHJPUlJpZkh0TDsgICAgICAgICAgICAgCgl9DQoNCgkNCgkNCgkJDQoJcHVibGljIGZ1bmN0aW9uIHNldF9kYXRhX3JlbmRlcmVyT3B0aW9ucygkVVROU1dmV1BVVFVzVk16d2NPa1Ipew0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ2RhdGFSZW5kZXJlck9wdGlvbnMnXSA9ICRVVE5TV2ZXUFVUVXNWTXp3Y09rUjsgICAgICAgICAgICAgCgl9DQoJCQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X3Nlcmllc19jb2xvcigkT2ZhY0pHRmxSSHdRclBWQ2RxamYpew0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ3Nlcmllc0NvbG9ycyddID0gJE9mYWNKR0ZsUkh3UXJQVkNkcWpmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KDQoJDQoJCQkJDQoNCglwdWJsaWMgZnVuY3Rpb24gYWRkX3NlcmllcygkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cgPSBhcnJheSgpKXsNCgkJJHRoaXMtPnhJV0dJZG1uRWRiVnlxQkFPYmVtKCRxbUNXaHpUTlFDUXNPQXpaSndDZywnQ19TZXJpZXMnLCdzZXJpZXMnLHRydWUpOyAgICAgICAgICAgICAKCX0NCg0KCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzb3J0X2RhdGEoJE9mYWNKR0ZsUkh3UXJQVkNkcWpmKXsNCgkJJHRoaXMtPlVUTlNXZldQVVRVc1ZNendjT2tSWydzb3J0RGF0YSddID0gJE9mYWNKR0ZsUkh3UXJQVkNkcWpmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCX0NCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfdGl0bGUoJHFtQ1doelROUUNRc09BelpKd0NnID0gYXJyYXkoKSl7DQoJCSR0aGlzLT54SVdHSWRtbkVkYlZ5cUJBT2JlbSgkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2csJ0NfVGl0bGUnLCd0aXRsZScpOyAgICAgICAgICAgICAgICAgICAgCgl9DQoNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2xlZ2VuZCgkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cgPSBhcnJheSgpKXsNCgkJJHRoaXMtPnhJV0dJZG1uRWRiVnlxQkFPYmVtKCRxbUNXaHpUTlFDUXNPQXpaSndDZywnQ19MZWdlbmQnLCdsZWdlbmQnKTsgICAgICAgICAgICAgICAgICAKCX0NCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfZ3JpZCgkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cgPSBhcnJheSgpKXsNCgkJJHRoaXMtPnhJV0dJZG1uRWRiVnlxQkFPYmVtKCRxbUNXaHpUTlFDUXNPQXpaSndDZywnQ19HcmlkJywnZ3JpZCcpOyAgICAgICAgICAgICAgICAgICAgICAKCX0NCg0KDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiB4SVdHSWRtbkVkYlZ5cUJBT2JlbSgkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cgPSBhcnJheSgpLCAkVlRsSVJ2dUZKWFFUbVdNUWQ9JycsICRDdFpyUVpaa3pVYnNZQmJtV1J6Tz0nJywkUWRQeGJpUUJPVVRBWUFTY0lGVkU9ZmFsc2Upew0KCQkNCgkJJG13TGhacm9HSGRZUEFjUHpuVGluID0gbmV3ICRWVGxJUnZ1RkpYUVRtV01RZCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKDQoJCWZvcmVhY2goJHFtQ1doelROUUNRc09BelpKd0NnIGFzICRwaWlKYnd2ekx4SHZLamxObkZ6ZCA9PiAkckhpd0luRmNXTlh0TnlvQkZFWVQpeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQkJCgoKCQkJCQkJJG13TGhacm9HSGRZUEFjUHpuVGluLT4kcGlpSmJ3dnpMeEh2S2psTm5GemQgPSAoIWlzX2FycmF5KCRySGl3SW5GY1dOWHROeW9CRkVZVCkgJiYgc3Ryc3RyKCRySGl3SW5GY1dOWHROeW9CRkVZVCwnJC4nKSkgPyAkckhpd0luRmNXTlh0TnlvQkZFWVQgOiANCgkJCQkJCQkoKGlzX2Jvb2woJHJIaXdJbkZjV05YdE55b0JGRVlUKSAmJiAkckhpd0luRmNXTlh0TnlvQkZFWVQgPT0gZmFsc2UpID8gJzA6ZmFsc2UnOiAoJHJIaXdJbkZjV05YdE55b0JGRVlUID09IHRydWUgJiYgaXNfYm9vbCgkckhpd0luRmNXTlh0TnlvQkZFWVQpID8gJzE6dHJ1ZScgOiAkckhpd0luRmNXTlh0TnlvQkZFWVQpKTsNCgkJfQ0KCQkJDQoJCSAgIA0KCQkKCQlpZigkUWRQeGJpUUJPVVRBWUFTY0lGVkUpICR0aGlzLT5YQmdQTUNVanVNTUJaV05CeW52YlskQ3RaclFaWmt6VWJzWUJibVdSek9dW10gPSAkdGhpcy0+ZERzVkp6RVRNaG5PcVh2YldVTU8oZ2V0X29iamVjdF92YXJzKCRtd0xoWnJvR0hkWVBBY1B6blRpbikpOyAgICAKCQllbHNlICR0aGlzLT5YQmdQTUNVanVNTUJaV05CeW52YlskQ3RaclFaWmt6VWJzWUJibVdSek9dID0gJHRoaXMtPmREc1ZKekVUTWhuT3FYdmJXVU1PKGdldF9vYmplY3RfdmFycygkbXdMaFpyb0dIZFlQQWNQem5UaW4pKTsgICAgICAgICAgICAgICAgICAgCg0KCX0NCgkJDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiBkRHNWSnpFVE1obk9xWHZiV1VNTygkUXJua0NFV1JrSGJRUG9FUGVsWVEpew0KCQkkV21ESHJpcG5QTUF1YUJES0pkUFcgPSBhcnJheSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQlmb3JlYWNoKCRRcm5rQ0VXUmtIYlFQb0VQZWxZUSBhcyAkRXZYbkREbGxoYUllRWZld1pjTXc9PiRlampZeUlObVRLbElvU1ltVWRXdCl7DQoJCQkKCQkJaWYoJGVqall5SU5tVEtsSW9TWW1VZFd0ID09PSBOVUxMIHx8ICRlampZeUlObVRLbElvU1ltVWRXdCA9PT0gJycpIGNvbnRpbnVlOyAgICAgICAgIAoJCQkkV21ESHJpcG5QTUF1YUJES0pkUFdbJEV2WG5ERGxsaGFJZUVmZXdaY013XSA9ICgkZWpqWXlJTm1US2xJb1NZbVVkV3Q9PT0nMDpmYWxzZScpID8gZmFsc2UgOiAoKCRlampZeUlObVRLbElvU1ltVWRXdCA9PT0gJzE6dHJ1ZScpID8gdHJ1ZTogJGVqall5SU5tVEtsSW9TWW1VZFd0KTsgICAgICAgIAoJCX0NCg0KCQlyZXR1cm4gJFdtREhyaXBuUE1BdWFCREtKZFBXOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCX0NCgkNCgkJDQoJCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfc2NyaXB0cGF0aCgkTVZEc2VBcFJUU29HdUJIYXhWbmUpew0KCQkkdGhpcy0+ZGllbUtTVEdWdU9EcWV5VWl0ZyA9ICRNVkRzZUFwUlRTb0d1QkhheFZuZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfdGFyZ2V0KCRvbE15a0dZUXdwdGhBZ3ZldVdjKXsNCgkJJHRoaXMtPkRvb1lEc0ZoV0FTdFBReWZwbk5SID0gJG9sTXlrR1lRd3B0aEFndmV1V2M7ICAgICAgICAgICAgICAgICAgICAgICAJDQoJCQoJfQ0KCQ0KCQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2RlZmF1bHRzKCRXSndpTW9IeEl0RXBJbGNDTUZidD1hcnJheSgpKXsNCgkJZm9yZWFjaCgkV0p3aU1vSHhJdEVwSWxjQ01GYnQgYXMgJHljdUtEYWFpRnVkUFdaS1ZaQ21qPT4kT2ZhY0pHRmxSSHdRclBWQ2RxamYpeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KCQkJJHRoaXMtPlVUTlNXZldQVVRVc1ZNendjT2tSWyR5Y3VLRGFhaUZ1ZFBXWktWWkNtal0gPSAkT2ZhY0pHRmxSSHdRclBWQ2RxamY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQl9ICAgICAgICAgICAgDQoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF9jYXB0dXJlX3JpZ2h0X2NsaWNrKCRPZmFjSkdGbFJId1FyUFZDZHFqZil7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnY2FwdHVyZVJpZ2h0Q2xpY2snXSA9ICRPZmFjSkdGbFJId1FyUFZDZHFqZjsgICAgICAgICAgICAgICAgICAgICAgICAgCgl9DQoNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X3N0YWNrX3NlcmllcygkT2ZhY0pHRmxSSHdRclBWQ2RxamYpew0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ3N0YWNrU2VyaWVzJ10gPSAkT2ZhY0pHRmxSSHdRclBWQ2RxamY7DQoJfQ0KDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiBGdkZNaGpIdHpHcExWblJsUGNGVSgkQlZ2S0pFQWdxdmlneUVnRVdNTSl7DQoJCQoJCSRzTWxleURvWWhEQmhvdE9vdmN3SSA9IHByZWdfbWF0Y2hfYWxsKCcvInBsdWdpbjo6KFteIl0qKSIvaScsICRCVnZLSkVBZ3F2aWd5RWdFV01NLCAkcm9lS0Z4eUtvaWlGcmVhaFVvRUcpOw0KCQkKCQkKCQkKCQkKCQlpZigkc01sZXlEb1loREJob3RPb3Zjd0kpew0KICAgICAgICAgICAgZWNobw0KICAgICAgICAgICAgICAgICI8c3R5bGU+LnByaWNle2ZvbnQtc2l6ZTozOHB4ICFpbXBvcnRhbnR9PC9zdHlsZT48ZGl2IHN0eWxlPSdmb250LWZhbWlseTphcmlhbDtmb250LXNpemU6MTRwdDtmb250LXdlaWdodDpib2xkO3BhZGRpbmctbGVmdDo4cHgnPjxpbWcgc3JjPScuLi9jc3MvYWxlcnQucG5nJyBzdHlsZT0ncGFkZGluZy1yaWdodDo1cHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOi01cHgnIGFsaWduPSdsZWZ0JyB3aWR0aD0nMzAnIC8+UmVuZGVyZXJzIHVzZWQgYXJlIG5vdCBhdmFpbGFibGUgaW4gcGhwQ2hhcnQgTGl0ZS48L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSctbW96LWJveC1zaGFkb3c6IDAgMCAzMHB4IDVweCAjOTk5Oy13ZWJraXQtYm94LXNoYWRvdzogMCAwIDMwcHggNXB4ICM5OTk7YmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vY3NzL3BocGNoYXJ0LWxvZ28ucG5nKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIDEwMyU7Zm9udC1zaXplOjE0cHQ7YmFja2dyb3VuZC1jb2xvcjogI0ZGRURCNTsgZm9udC1mYW1pbHk6YXJpYWw7IGNvbG9yOiBibGFjazsgcGFkZGluZzogMTRweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDtib3JkZXI6c29saWQgMXB4O21hcmdpbjoxMHB4O3dpZHRoOjEwMDBweCc+DQogICAgICAgICAgICAgICAgcGhwQ2hhcnQgTGl0ZSBzdXBwb3J0cyBvbmx5IGRlZmF1bHQgPGI+TGluZTwvYj4gY2hhcnQgdHlwZS4gRm9yDQogICAgICAgICAgICAgICAgYWRkaXRpb25hbCByZW5kZXJlcnMgc3VwcG9ydCBzdWNoIGFzIDxiPlBpZSwgQmFyLCBCdWJibGUsIERvbnV0LCBNZWtrbywgR2F1Z2UsIENhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLCBEYXRlQXhpc1JlbmRlcmVyLCBldGM8L2I+DQogICAgICAgICAgICAgICAgKHNlZSA8YSBocmVmPSdodHRwOi8vcGhwY2hhcnQubmV0L2V4YW1wbGVzL2NoYW5nZS1yZW5kZXJlci10eXBlLz9yZWY9dXBncmFkZS1saXRlLW1zZycgdGFyZ2V0PSdfbmV3Jz48Yj5Db21wbGV0ZSBsaXN0IG9mIHJlbmRlcmVyIHBsdWdpbnM8L2I+PC9hPiksIGFuZCBtdWx0aXBsZSBjaGFydHMgc3VwcG9ydCwNCiAgICAgICAgICAgICAgICBwbGVhc2UgY29uc2lkZXIgdG8gdXBncmFkZSBwaHBDaGFydCB0byB0aGUgZnVsbCB2ZXJzaW9uLg0KICAgICAgICAgICAgICAgIDxociBzaXplPScxJyAvPg0KCQkgICAgICAgIDxzcGFuIHN0eWxlPSdjb2xvcjpyZWQ7Zm9udC1zaXplOjE4cHQnPjxiPjIwJSBPRkY8L2I+PC9zcGFuPiBkaXNjb3VudCBmb3IgZXhpc3RpbmcgTGl0ZSB1c2VycyBvbmx5OiA8c3BhbiBzdHlsZT0nY29sb3I6d2hpdGU7Zm9udC1zaXplOjE4cHQ7YmFja2dyb3VuZC1jb2xvcjpyZWQnPjxiPjIwUFJPTU9QQ01TR0xJVEU8L2I+PC9zcGFuPiAoZ29vZCB0aHJvdWdoICIuIGRhdGUoIkYgdCwgWSIsIHN0cnRvdGltZSgiMCBtb250aCIpICkgLiIpDQogICAgICAgICAgICAgICAgPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2NzcycgaHJlZj0nLi4vY3NzL3ByaWNpbmctc3R5bGUuY3NzJz48bGluayByZWw9J3N0eWxlc2hlZXQnIHR5cGU9J3RleHQvY3NzJyBocmVmPScuLi9jc3MvOTYwLmNzcyc+DQoJCSAgICAgICAgPGxpbmsgcmVsPXN0eWxlc2hlZXQgdHlwZT0ndGV4dC9jc3MnIGhyZWY9Jy4vcHJpY2luZy1zdHlsZS5jc3MnPjxsaW5rIHJlbD1zdHlsZXNoZWV0IHR5cGU9J3RleHQvY3NzJyBocmVmPScuLzk2MC5jc3MnPjwhLS1baWYgZ3RlIElFIDldPjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+LmdyYWRpZW50IHtmaWx0ZXI6IG5vbmU7fTwvc3R5bGU+PCFbZW5kaWZdLS0+PGRpdiBjbGFzcz1jb250YWluZXJfMTIgaWQ9c2hhb24tcHJpY2luZy10YWJsZT48ZGl2IGNsYXNzPWdyaWRfMTI+PGRpdiBjbGFzcz1wcmljaW5nLXRhYmxlPjxkaXYgY2xhc3M9Y29sMT48ZGl2IGNsYXNzPWZlYXR1cmVUaXRsZT48c3Bhbj4mbmJzcDs8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz1mZWF0dXJlLWNvbnRlbnQ+PHVsPjxsaT5XYXRlcm1hcms8L2xpPjxsaT5DaGFydCBUeXBlPC9saT48bGk+Tm8uIG9mIENoYXJ0czwvbGk+PGxpPkRldmVsb3BlcnM8L2xpPjxsaT5TaXRlcy9Ib3N0czwvbGk+PGxpPkZyZWUgVXBncmFkZTwvbGk+PGxpPlNvdXJjZSBDb2RlPC9saT48L3VsPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Y29sMT48ZGl2IGNsYXNzPWNvbGhlYWRlcj48c3BhbiBjbGFzcz0ncGFja05hbWUgYmFzaWNQYWNrIGxlZnQtdG9wLXJhZGlvdXMnPkxpdGU8L3NwYW4+PHNwYW4gY2xhc3M9J3ByaWNlIGJhc2ljUHJpY2UnPkZyZWU8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0ncHJpY2UtY29udGVudCBsZWZ0LWJvdHRvbS1yYWRpb3VzJz48dWw+PGxpPng8L2xpPjxsaT5MaW5lIE9ubHk8L2xpPjxsaT5TaW5nbGUgQ2hhcnQ8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT48L2xpPjwvdWw+PGEgY2xhc3M9c2lnbnVwIGhyZWY9Jycgc3R5bGU9dmlzaWJpbGl0eTpoaWRkZW4+PC9hPjxkaXYgc3R5bGU9J2NsZWFyOiBib3RoJz48YnI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz1jb2wxPjxkaXYgY2xhc3M9Y29saGVhZGVyPjxzcGFuIGNsYXNzPSdwYWNrTmFtZSBwcm9mZmVzc2lvbmFsUGFjayc+QmFzaWM8L3NwYW4+PHNwYW4gY2xhc3M9J3ByaWNlIHByb2ZmZXNzaW9uYWxQcmljZSc+PHM+JDg5PC9zPjxzcGFuIHN0eWxlPSdjb2xvcjpibGFjayc+JDcxPC9zcGFuPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSdwcmljZS1jb250ZW50IGxlZnQtYm90dG9tLXJhZGlvdXMnPjx1bD48bGk+Jm5ic3A7PC9saT48bGk+QWxsPC9saT48bGk+TXVsdGlwbGUgQ2hhcnRzPC9saT48bGk+MTwvbGk+PGxpPjE8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT48L2xpPjwvdWw+PGEgY2xhc3M9c2lnbnVwIGhyZWY9J2h0dHA6Ly9waHBjaGFydC5jb20vY2hlY2tvdXQvP2VkZF9hY3Rpb249YWRkX3RvX2NhcnQmZG93bmxvYWRfaWQ9MTIwMyZkaXNjb3VudD0yMFBST01PUENNU0dMSVRFJnJlZj1saXRlX21zZyc+QnV5IGl0IE5vdyE8L2E+PGRpdiBzdHlsZT0nY2xlYXI6IGJvdGgnPjxicj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPWNvbDE+PGRpdiBjbGFzcz1jb2xoZWFkZXI+PGRpdiBjbGFzcz1vZmZlci10YWc+PGEgaHJlZj0nJz48aW1nIGJvcmRlcj0wIHN0eWxlPSdwYWRkaW5nOjBweDtib3JkZXI6MHB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQnIHNyYz0naHR0cDovL3BocGNoYXJ0Lm5ldC93cC1jb250ZW50L3BsdWdpbnMvcHJpY2luZy10YWJsZS90YWJsZS10ZW1wbGF0ZXMvc3R5bGUzL2ltYWdlcy9vZmZlci10YWcucG5nJz48L2E+PC9kaXY+PHNwYW4gY2xhc3M9J3BhY2tOYW1lIGJ1c2luZXNzUGFjayc+UHJvZmVzc2lvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSdwcmljZSBidXNpbmVzc1ByaWNlJz48cz4kMTY5PC9zPjxzcGFuIHN0eWxlPSdjb2xvcjpibGFjayc+JDEzNTwvc3Bhbj48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0ncHJpY2UtY29udGVudCBsZWZ0LWJvdHRvbS1yYWRpb3VzJz48dWw+PGxpPiZuYnNwOzwvbGk+PGxpPkFsbDwvbGk+PGxpPk11bHRpcGxlIENoYXJ0czwvbGk+PGxpPjE8L2xpPjxsaT41PC9saT48bGk+MSB5ZWFyPC9saT48bGk+Jm5ic3A7PC9saT48bGk+PC9saT48L3VsPjxhIGNsYXNzPXNpZ251cCBocmVmPSdodHRwOi8vcGhwY2hhcnQuY29tL2NoZWNrb3V0Lz9lZGRfYWN0aW9uPWFkZF90b19jYXJ0JmRvd25sb2FkX2lkPTEyMDUmZGlzY291bnQ9MjBQUk9NT1BDTVNHTElURSZyZWY9bGl0ZV9tc2cnPkJ1eSBpdCBOb3chPC9hPjxkaXYgc3R5bGU9J2NsZWFyOiBib3RoJz48YnI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz1jb2wxPjxkaXYgY2xhc3M9Y29saGVhZGVyPjxzcGFuIGNsYXNzPSdwYWNrTmFtZSB1bmxpbWl0ZWRQYWNrIHJpZ2h0LXRvcC1yYWRpb3VzJz5FbnRlcnByaXNlPC9zcGFuPjxzcGFuIGNsYXNzPSdwcmljZSB1bmxpbWl0ZWRQcmljZSc+PHM+JDI5OTwvcz48c3BhbiBzdHlsZT0nY29sb3I6I0E2RTA0Myc+JDIzOTwvc3Bhbj48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0ncHJpY2UtY29udGVudCBsZWZ0LWJvdHRvbS1yYWRpb3VzJz48dWw+PGxpPiZuYnNwOzwvbGk+PGxpPkFsbDwvbGk+PGxpPk11bHRpcGxlIENoYXJ0czwvbGk+PGxpPjU8L2xpPjxsaT4xMDwvbGk+PGxpPjEgeWVhcjwvbGk+PGxpPkluY2x1ZGVkPC9saT48bGk+PC9saT48L3VsPjxhIGNsYXNzPXNpZ251cCBocmVmPSdodHRwOi8vcGhwY2hhcnQuY29tL2NoZWNrb3V0Lz9lZGRfYWN0aW9uPWFkZF90b19jYXJ0JmRvd25sb2FkX2lkPTEyMDcmZGlzY291bnQ9MjBQUk9NT1BDTVNHTElURSZyZWY9bGl0ZV9tc2cnPkJ1eSBpdCBOb3chPC9hPjxkaXYgc3R5bGU9J2NsZWFyOiBib3RoJz48YnI+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+DQoJCSAgICAgICAgPGJyIC8+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMnB0Jz5waHBDaGFydC5jb20gJmNvcHk7IEFsbCBSaWdodHMgUmVzZXJ2ZWQuPC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzdHlsZT5ib2R5e2JhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2Nzcy9waHBjaGFydC1zY3JlZW5zaG90LnBuZyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXk7YmFja2dyb3VuZC1wb3NpdGlvbjp0b3AgcmlnaHQ7PC9zdHlsZT4NCiAgICAgICAgICAgICAgICA8aW1nIHNyYz0naHR0cDovL3BocGNoYXJ0Lm5ldC93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8wMy8xeDEuZ2lmJyBzdHlsZT0nZGlzcGxheTpub25lJz4NCiAgICAgICAgICAgICAgICAiOw0KICAgICAgICB9DQoJfQ0KDQoJCQkJDQoNCgkNCgkJCQkNCglwdWJsaWMgZnVuY3Rpb24gYWRkX3BsdWdpbnMoJFJBd3pPY3NGWlNMTkh0SG1Gc051ID0gYXJyYXkoKSl7DQoJCSR0aGlzLT5JVnl5dUZFeHVWVEFBSXhreVZ1YyA9IGFycmF5X21lcmdlKCR0aGlzLT5JVnl5dUZFeHVWVEFBSXhreVZ1YywgYXJyYXlfbWFwKCdzdHJ0b2xvd2VyJywgJFJBd3pPY3NGWlNMTkh0SG1Gc051KSk7ICAgICAgDQoJfQ0KDQoNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2RlZmF1bHRfdGlja19mb3JtYXRfc3RyaW5nKCRORUpKYWJkQVZrYWpOUkxIdXdUYSl7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnZGVmYXVsdFRpY2tGb3JtYXRTdHJpbmcnXSA9ICRORUpKYWJkQVZrYWpOUkxIdXdUYTsgICAgICAgICAgICAgICAgICAgICAKCX0NCg0KCQ0KCXByaXZhdGUgZnVuY3Rpb24gTXNrUGpGU21FTXdySGFnQ2RSSSgkREpad1B1eVRMVm5keHRYRHVjVEo9JycsJFNoRFphTXhObXJLUEx6WkhTRmFuPScnLCRlSlByWmhwTVB1TkNYV2VSaGFjdT1mYWxzZSl7DQoJCSRiYnVxSVdmRkx1dHlBZGtMclF3eSA9ICRESlp3UHV5VExWbmR4dFhEdWNUSjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQlpZigkREpad1B1eVRMVm5keHRYRHVjVEo9PScnIHx8ICRTaERaYU14Tm1yS1BMelpIU0Zhbj09JycpIGRpZSgnYWRkQ1NTSlMgbWV0aG9kIHJlcXVpcmVzIDIgcGFyYW1ldGVycyB0byBiZSBkZWZpbmVkJyk7ICAKDQoJCWlmKCRTaERaYU14Tm1yS1BMelpIU0ZhbiA9PSAncGx1Z2lucycpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCgkJCSRESlp3UHV5VExWbmR4dFhEdWNUSiA9ICR0aGlzLT5kaWVtS1NUR1Z1T0RxZXlVaXRnLidqcy9wbHVnaW5zLycuJERKWndQdXlUTFZuZHh0WER1Y1RKOyAgCgkJZWxzZQkNCgkJCSRESlp3UHV5VExWbmR4dFhEdWNUSiA9ICR0aGlzLT5kaWVtS1NUR1Z1T0RxZXlVaXRnLidqcy8nLiRESlp3UHV5VExWbmR4dFhEdWNUSjsgICAgICAgICAgCg0KCQlpZighaW5fYXJyYXkoJGJidXFJV2ZGTHV0eUFka0xyUXd5LCAkdGhpcy0+Z2V0X2pzX2NzcygpKSl7ICAgICAgICAgICAgICAgICAgICAgCgkJCQkJCQkJCQkJCQkJCQkJCQoJCQkJCQkJCQkJCQkJCQkJCQkKDQoJCQlvYl9zdGFydCgpOw0KDQoJCQlpZigkZUpQclpocE1QdU5DWFdlUmhhY3Upew0KCQkJCWlmKCRTaERaYU14Tm1yS1BMelpIU0ZhbiA9PSAnY3NzJyl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJCQkJCWVjaG8gIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4NCgkJCQkJCXZhciBmaWxlcmVmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTsNCgkJCQkJCWZpbGVyZWYuc2V0QXR0cmlidXRlKCdyZWwnLCAnc3R5bGVzaGVldCcpOw0KCQkJCQkJZmlsZXJlZi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTsNCgkJCQkJCWZpbGVyZWYuc2V0QXR0cmlidXRlKCdocmVmJywgJyRESlp3UHV5VExWbmR4dFhEdWNUSicpOw0KCQkJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChmaWxlcmVmKQ0KCQkJCQkJLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnJHRoaXMtPkRvb1lEc0ZoV0FTdFBReWZwbk5SJykuYXBwZW5kQ2hpbGQoZmlsZXJlZikNCgkJCQkJPC9zY3JpcHQ+IjsNCgkJCQl9DQoJCQkJZWxzZSBpZigkU2hEWmFNeE5tcktQTHpaSFNGYW4gPT0gJ2pzJyB8fCAkU2hEWmFNeE5tcktQTHpaSFNGYW4gPT0gJ3BsdWdpbnMnKXsgICAgICAgCgkJCQkJZWNobyAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPg0KCQkJCQkJdmFyIGZpbGVyZWY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQoJCQkJCQlmaWxlcmVmLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTsNCgkJCQkJCWZpbGVyZWYuc2V0QXR0cmlidXRlKCdzcmMnLCAnJERKWndQdXlUTFZuZHh0WER1Y1RKJyk7DQoJCQkJCQkvL2FsZXJ0KCckREpad1B1eVRMVm5keHRYRHVjVEonKTsNCgkJCQkJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoZmlsZXJlZikNCgkJCQkJCS8vZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUicpLmFwcGVuZENoaWxkKGZpbGVyZWYpDQoJCQkJCTwvc2NyaXB0PiI7DQoJCQkJfQ0KCQkJfWVsc2V7DQoJCQkJaWYoJFNoRFphTXhObXJLUEx6WkhTRmFuID09ICdjc3MnKXsgDQoJCQkJCWVjaG8gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuICRESlp3UHV5VExWbmR4dFhEdWNUSiAuJyIgLz4nIC4iXG4iOw0KCQkJCX0NCgkJCQllbHNlIGlmKCRTaERaYU14Tm1yS1BMelpIU0ZhbiA9PSAnanMnIHx8ICRTaERaYU14Tm1yS1BMelpIU0ZhbiA9PSAncGx1Z2lucycpeyANCgkJCQkJaWYoc3Ryc3RyKCRESlp3UHV5VExWbmR4dFhEdWNUSiwgJ2V4Y2FudmFzLm1pbi5qcycpKXsNCgkJCQkJCWVjaG8gJzwhLS1baWYgbHQgSUUgOV0+PHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuICRESlp3UHV5VExWbmR4dFhEdWNUSiAuJyI+PC9zY3JpcHQ+PCFbZW5kaWZdLS0+JyAuIlxuIjsNCgkJCQkJfQ0KCQkJCQllbHNlIGlmKHN0cnN0cigkREpad1B1eVRMVm5keHRYRHVjVEosICdqcXVlcnkubWluLmpzJykpew0KCQkJCQkJZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmlmICh0eXBlb2YgalF1ZXJ5ID09ICJ1bmRlZmluZWQiKXtkb2N1bWVudC53cml0ZSgiPHNjcmlwdCBzcmM9XCcnLiAkREpad1B1eVRMVm5keHRYRHVjVEogLidcJyBsYW5ndWFnZT1cJ2phdmFzY3JpcHRcJyB0eXBlPVwndGV4dC9qYXZhc2NyaXB0XCc+PFwvc2NyaXB0PiIpO308L3NjcmlwdD4nIC4iXG4iOw0KCQkJCQl9DQoJCQkJCWVsc2V7DQoJCQkJCQllY2hvICc8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4gJERKWndQdXlUTFZuZHh0WER1Y1RKIC4nIj48L3NjcmlwdD4nIC4iXG4iOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkkdGhpcy0+eUZhYVpUb3RoUFJmSlB2Q3RFeEEgLj0gb2JfZ2V0X2NvbnRlbnRzKCk7CQkKCQkJb2JfZW5kX2ZsdXNoKCk7DQoNCg0KCQkJCgkJCSR0aGlzLT54SkpKRnFNWkVPUU9hV2FxRktGVSgkYmJ1cUlXZkZMdXR5QWRrTHJRd3kpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQkJCQkJCQkJCQkJCQkJCQkJCgkJfQ0KDQoJCXJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCX0NCgkNCgkNCglwdWJsaWMgZnVuY3Rpb24gZW5hYmxlX2RlYnVnKCRNdnF1eXNkQ0VBVURCS29LUUdCRyl7DQoJCSR0aGlzLT5NdnF1eXNkQ0VBVURCS29LUUdCRyA9ICRNdnF1eXNkQ0VBVURCS29LUUdCRzsNCgl9DQoNCgkNCglwdWJsaWMgZnVuY3Rpb24gZGlzcGxheV9zY3JpcHRfaW5jbHVkZW9uY2UoJEZuS05HSGtOaXp1TUhmZFBCdVV0PU5VTEwsJEtQbkJxWWhlbVFTZEhLRE50SnBlPScnKXsNCgkJCQkJCQkJCQkJDQoJCWlmKGlzX2FycmF5KCRGbktOR0hrTml6dU1IZmRQQnVVdCkpew0KCQkJaWYoJEtQbkJxWWhlbVFTZEhLRE50SnBlID09ICdqcycpew0KCQkJCWZvcmVhY2goJEZuS05HSGtOaXp1TUhmZFBCdVV0IGFzICRFdlhuRERsbGhhSWVFZmV3WmNNdyA9PiAkSHlFa0tuU2VIanNyeGtxRWNJSmopew0KCQkJCQkkdGhpcy0+TXNrUGpGU21FTXdySGFnQ2RSSSgkSHlFa0tuU2VIanNyeGtxRWNJSmouJy5taW4uanMnLCdqcycpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2UgaWYoJEtQbkJxWWhlbVFTZEhLRE50SnBlID09ICdjc3MnKXsNCgkJCQlmb3JlYWNoKCRGbktOR0hrTml6dU1IZmRQQnVVdCBhcyAkRXZYbkREbGxoYUllRWZld1pjTXcgPT4gJEdxdUpSbWZBQ2liY3ZqZ0NSQXpQKXsNCgkJCQkJJHRoaXMtPk1za1BqRlNtRU13ckhhZ0NkUkkoJEdxdUpSbWZBQ2liY3ZqZ0NSQXpQLicubWluLmNzcycsJ2NzcycpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQllbHNlIHsJCQkNCgkJCSR0aGlzLT5GdkZNaGpIdHpHcExWblJsUGNGVShqc29uX2VuY29kZSgkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1IpKTsNCiAgICAgICAgICAgIGlmKGNvdW50KCR0aGlzLT5JVnl5dUZFeHVWVEFBSXhreVZ1YykgPiAwKXsNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCR0aGlzLT5JVnl5dUZFeHVWVEFBSXhreVZ1YyBhcyAkRXZYbkREbGxoYUllRWZld1pjTXcgPT4gJG55WmttbEF5Qkl0WmVScndKUnBrKXsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPk1za1BqRlNtRU13ckhhZ0NkUkkoJ2pxcGxvdC4nLiRueVprbWxBeUJJdFplUnJ3SlJway4nLm1pbi5qcycsJ3BsdWdpbnMnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQoJCWlmKCR0aGlzLT5NdnF1eXNkQ0VBVURCS29LUUdCRyl7DQoJCQllY2hvICc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiAkdGhpcy0+ZGllbUtTVEdWdU9EcWV5VWl0ZyAuJ2Nzcy9kZWJ1Zy5jc3MiIC8+JzsNCgkJCWVjaG8gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuICR0aGlzLT5kaWVtS1NUR1Z1T0RxZXlVaXRnIC4nanMvaGlnaGxpZ2h0ZXIvc3R5bGVzLycuIEpTX0hJR0hMSUdIVF9DU1NfU1RZTEUgLicuY3NzIiAvPic7DQoJCQllY2hvICc8c2NyaXB0IHNyYz0iJy4gJHRoaXMtPmRpZW1LU1RHVnVPRHFleVVpdGcgLidqcy9oaWdobGlnaHRlci9oaWdobGlnaHQucGFjay5qcyI+PC9zY3JpcHQ+JzsNCgkJCWVjaG8gJzxzY3JpcHQ+aGxqcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkKCk7PC9zY3JpcHQ+JzsNCgkJCWVjaG8gJzxzY3JpcHQgc3JjPSInLiAkdGhpcy0+ZGllbUtTVEdWdU9EcWV5VWl0ZyAuJ2pzL2pxdWVyeS11aS0xLjguMTYuY3VzdG9tLm1pbi5qcyI+PC9zY3JpcHQ+JzsNCgkJCWVjaG8gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuICR0aGlzLT5kaWVtS1NUR1Z1T0RxZXlVaXRnIC4nanMvY3NzL2N1cGVydGluby9qcXVlcnktdWktMS44LjE2LmN1c3RvbS5jc3MiIC8+JzsNCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglwcml2YXRlIGZ1bmN0aW9uIFRiaEdJRnZFcU1KVXNWeHBSRG1xKCRjZmxSY1Vab0tKeUh1aGFkcywkY0xJcWJlelNyTnpGdUVTc1RHRmEpew0KCQkkZXFhcUJoZkhWdUxqcGNKQVVZUXQgPSAnPGRpdiBpZD0iYmluZF8nLiR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUi4nIj48c3BhbiBpZD0iYmluZF9zcGFuX2xhYmVsXycuJHRoaXMtPkRvb1lEc0ZoV0FTdFBReWZwbk5SLiciPjwvc3Bhbj48c3BhbiBpZD0iYmluZF9zcGFuX2RhdGFfJy4kdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlIuJyI+PC9zcGFuPjwvZGl2Pic7DQoJCSRwaGJNek1ERElUaEtnR3hycWNLViA9ICc8ZGl2IGlkPSInLiAkdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlIgLiciIGNsYXNzPSJwbG90IGpxcGxvdC10YXJnZXQiIHN0eWxlPSJ3aWR0aDonLiRjTElxYmV6U3JOekZ1RVNzVEdGYS4nO2hlaWdodDonLiRjZmxSY1Vab0tKeUh1aGFkcy4nOyI+JzsNCgkJJHBoYk16TURESVRoS2dHeHJxY0tWIC49ICc8L2Rpdj4nIC4iXG5cbiI7DQoJCQ0KCQllY2hvICRlcWFxQmhmSFZ1TGpwY0pBVVlRdC4kcGhiTXpNRERJVGhLZ0d4cnFjS1Y7DQoJfQ0KDQoJCgkKCXByaXZhdGUgZnVuY3Rpb24gcWJnVUpTUXRRWGZCV0tZdWpmSygpew0KCQlpZigkdGhpcy0+TXZxdXlzZENFQVVEQktvS1FHQkcpew0KCQkJZWNobyAiXG4iLiAnPGgzIHN0eWxlPSJjb2xvcjojMjc3OUFBOyI+UmVuZGVyZXIgcGx1Z2lucyB1c2VkOjwvaDM+JzsNCgkJCWVjaG8gIlxuIi4nPHByZT48Y29kZT4nOw0KCQkJcHJpbnRfcigkdGhpcy0+SVZ5eXVGRXh1VlRBQUl4a3lWdWMpOw0KCQkJZWNobyAnPC9jb2RlPjwvcHJlPicuIlxuIjsNCgkJCWVjaG8gJzxiciAvPjxiciAvPjxiciAvPjxiciAvPjxociBzaXplPSIxIiAvPic7DQoJCX0NCgkJZWNobyAiXG4iLiAnPHNjcmlwdCAnLiAoKCR0aGlzLT5NdnF1eXNkQ0VBVURCS29LUUdCRyk/J2NsYXNzPSJjb2RlIiAnOicnKSAuJyBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4gJyAuIlxuIjsNCgkJZm9yZWFjaCgkdGhpcy0+WlJPd1l5b0FOVEhFbGR5b01HbmUgYXMgJGlQS2ZzS0FMUWZ6UHhMUERpV2ROID0+ICRabHBOeVJqZFhxRHh5YWJhWHdqKXsNCgkJCWVjaG8gInZhciAkWmxwTnlSamRYcUR4eWFiYVh3ajsiLiAiXG4iOw0KCQl9DQoJCWVjaG8gInZhciAiLiAkdGhpcy0+UnVLVVRnQ3VxbkNIQkdtc3ZDTk0gLiI7Ii4iXG4iOw0KCQllY2hvICckKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpeyAnIC4iXG4iOw0KCX0NCg0KDQoJcHJpdmF0ZSBmdW5jdGlvbiBObFZSZ3poU3JadlR6R0tEbnN3RSgpeyAkdGhpcy0+dmxucVNtSXlaTEVOQ1hETUJNZnEgPSAnJzsNCgkJJHRoaXMtPlhQS1REVWpsWGtEbGNVdFRtWm5XID0gJyc7DQoJCSR0aGlzLT5Benp6d3pRcGJ6bGhFRUhTQSA9ICcnOw0KCQkJCQ0KCQlmb3JlYWNoKCR0aGlzLT5Bc2t1dGdvTmFGRG9EcmpmTGthWiBhcyAkYUtaWXRFdXNjakdXY1pYRG5XayA9PiAkdGxtaXF4WmtjeG5kZ2ZsZ0twaG8pew0KCQkJaWYoJHRsbWlxeFprY3huZGdmbGdLcGhvID09ICdiZWZvcmUnKSAkdGhpcy0+dmxucVNtSXlaTEVOQ1hETUJNZnEgPSAkdGhpcy0+dmxucVNtSXlaTEVOQ1hETUJNZnEuIlxuXG4iLiR0aGlzLT5tSXJoV0pCT2VrcExTQkNzU1lnV1skYUtaWXRFdXNjakdXY1pYRG5Xa10uICJcblxuIjsNCgkJCWVsc2UgaWYoJHRsbWlxeFprY3huZGdmbGdLcGhvID09ICdhZnRlcicpICR0aGlzLT5YUEtURFVqbFhrRGxjVXRUbVpuVyA9ICR0aGlzLT5YUEtURFVqbFhrRGxjVXRUbVpuVy4iXG5cbiIuJHRoaXMtPm1JcmhXSkJPZWtwTFNCQ3NTWWdXWyRhS1pZdEV1c2NqR1djWlhEbldrXS4gIlxuXG4iOw0KCQkJZWxzZSBpZigkdGxtaXF4WmtjeG5kZ2ZsZ0twaG8gPT0gJ291dHNpZGVfanF1ZXJ5JykgJHRoaXMtPkF6enp3elFwYnpsaEVFSFNBID0gJHRoaXMtPkF6enp3elFwYnpsaEVFSFNBIC4gIlxuXG4iLiR0aGlzLT5tSXJoV0pCT2VrcExTQkNzU1lnV1skYUtaWXRFdXNjakdXY1pYRG5Xa10uICJcblxuIjsNCgkJfQ0KDQoJCSRxbUhLenZoRkFZZ3B6dkJkWUd3UiA9ICcnOw0KCQkkcW1IS3p2aEZBWWdwenZCZFlHd1IgLj0gIiQuanFwbG90LmNvbmZpZy5lbmFibGVQbHVnaW5zID0gJHRoaXMtPmZTREhKdXZsWkdsSEZtWkdrUHFJOyIuIlxuIjsNCgkJJHFtSEt6dmhGQVlncHp2QmRZR3dSIC49ICIkLmpxcGxvdC5jb25maWcuZGVmYXVsdEhlaWdodCA9ICR0aGlzLT5MRlJVQmp6T2NWdWxsS0djT2hCazsiLiJcbiI7DQoJCSRxbUhLenZoRkFZZ3B6dkJkWUd3UiAuPSAiJC5qcXBsb3QuY29uZmlnLmRlZmF1bHRXaWR0aCAgPSAkdGhpcy0+UkJzTXp6a25OWExWVUliZFBjOyIuIlxuIjsNCg0KCQkkdWhsaXl4WVFOSkFuUVpXWUVIZ3YgPSAkdGhpcy0+Z2V0X2NvbmZpZygpOw0KCQlpZigkdWhsaXl4WVFOSkFuUVpXWUVIZ3YgIT0gTlVMTCl7DQoJCQlmb3JlYWNoKCR1aGxpeXhZUU5KQW5RWldZRUhndiBhcyAkeU1MS25hZkRSZGZid2JmWmhUWkkgPT4gJFR4QmRQdm1BUVZDb0xIR1dWakNUKXsNCgkJCQkkcW1IS3p2aEZBWWdwenZCZFlHd1IgLj0gIiQuanFwbG90LmNvbmZpZy4keU1MS25hZkRSZGZid2JmWmhUWkkgPSAnJFR4QmRQdm1BUVZDb0xIR1dWakNUJzsiLiJcbiI7DQoJCQl9DQoJCX0NCg0KCQkKCQkkWEJnUE1DVWp1TU1CWldOQnludmIgPSAnJzsNCgkJZm9yZWFjaCgkdGhpcy0+WlJPd1l5b0FOVEhFbGR5b01HbmUgYXMgJGlQS2ZzS0FMUWZ6UHhMUERpV2ROID0+ICRabHBOeVJqZFhxRHh5YWJhWHdqKXsNCgkJCSRYQmdQTUNVanVNTUJaV05CeW52YiAuPSAiJFpscE55UmpkWHFEeHlhYmFYd2ogPSAiLmpzb25fZW5jb2RlKCR0aGlzLT5vWHlhcW1Ib0NodkhRRkN2VGx1cVskaVBLZnNLQUxRZnpQeExQRGlXZE5dKS4gIjsiLiAiXG4iOwkNCgkJfQ0KCQkJCQ0KCQkKCQkKCQkKICAgICAgICAkSHNzUkZoTlFDaGRzRkR3ZWhOVWUgPSBqc29uX2VuY29kZSgkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1IpOw0KICAgICAgICAkWEJnUE1DVWp1TU1CWldOQnludmIgLj0gJHRoaXMtPlJ1S1VUZ0N1cW5DSEJHbXN2Q05NIC4iID0gIi4gcHJlZ19yZXBsYWNlKCcvImpzOjooW14iXSopIi9pJywgJyQxJywgKCR0aGlzLT5NdnF1eXNkQ0VBVURCS29LUUdCRyk/Q19VdGlsaXR5X3BDOjpBTkt1WnVLSGNndHRzaWNVRnpTbygkSHNzUkZoTlFDaGRzRkR3ZWhOVWUpOiRIc3NSRmhOUUNoZHNGRHdlaE5VZSkuIlxuIjsNCg0KICAgICAgICAKCQlzd2l0Y2ggKCR0aGlzLT5mT3RGS3ZTdXRVY3BJdU5IWlhQSSl7DQoJCQljYXNlICdleHRlbmQnOg0KCQkJCQoJCQkJJFhCZ1BNQ1VqdU1NQlpXTkJ5bnZiIC49ICJcbiIuJHRoaXMtPnZsbnFTbUl5WkxFTkNYRE1CTWZxLiJcbiIuIlxuIi4kcW1IS3p2aEZBWWdwenZCZFlHd1IuJyBfJy4kdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlIuJz0gJC5qcXBsb3QoIicuICR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUiAuJyIsICcuDQoJCQkJCWpzb25fZW5jb2RlKCR0aGlzLT5vWHlhcW1Ib0NodkhRRkN2VGx1cSkgLicsICcuDQoJCQkJCScgJC5leHRlbmQodHJ1ZSwge30sICcuanNvbl9lbmNvZGUoJHRoaXMtPll4dFFKUWxicXpNTE1qdUh2a28pIC4nLCAnLg0KCQkJCQkkdGhpcy0+UnVLVVRnQ3VxbkNIQkdtc3ZDTk0gLicpKTsnLiJcbiIuJHRoaXMtPlhQS1REVWpsWGtEbGNVdFRtWm5XLiJcbiI7DQoJCQkJYnJlYWs7DQoNCgkJCWNhc2UgJ2pzb25fZGF0YSc6DQoJCQkJJFhCZ1BNQ1VqdU1NQlpXTkJ5bnZiIC49ICJcbiIuJHRoaXMtPnZsbnFTbUl5WkxFTkNYRE1CTWZxLiJcbiIuIlxuIi4kcW1IS3p2aEZBWWdwenZCZFlHd1IuJyBfJy4kdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlIuJz0gJC5qcXBsb3QoIicuICR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUiAuJyIsIFwnJy4NCgkJCQkJJHRoaXMtPm9YeWFxbUhvQ2h2SFFGQ3ZUbHVxIC4nXCcsICcuDQoJCQkJCSR0aGlzLT5SdUtVVGdDdXFuQ0hCR21zdkNOTSAuJyk7Jy4iXG4iLiR0aGlzLT5YUEtURFVqbFhrRGxjVXRUbVpuVy4iXG4iOw0KCQkJCWJyZWFrOw0KDQoJCQljYXNlICdkZWZhdWx0JzoNCgkJCWRlZmF1bHQgOg0KCQkJCSRYQmdQTUNVanVNTUJaV05CeW52YiAuPSAiXG4iLiR0aGlzLT52bG5xU21JeVpMRU5DWERNQk1mcS4iXG4iLiJcbiIuJHFtSEt6dmhGQVlncHp2QmRZR3dSLicgXycuJHRoaXMtPkRvb1lEc0ZoV0FTdFBReWZwbk5SLic9ICQuanFwbG90KCInLiAkdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlIgLiciLCAnLg0KCQkJCQlqc29uX2VuY29kZSgkdGhpcy0+b1h5YXFtSG9DaHZIUUZDdlRsdXEpIC4nLCAnLg0KCQkJCQkkdGhpcy0+UnVLVVRnQ3VxbkNIQkdtc3ZDTk0gLicpOycuIlxuIi4kdGhpcy0+WFBLVERVamxYa0RsY1V0VG1ablcuIlxuIjsNCgkJCQlicmVhazsNCgkJfQ0KDQoJCQogICAgICAgIGVjaG8gJHBKdGZwRVliYVZyQ1JDYXhWZlNmID0gJFhCZ1BNQ1VqdU1NQlpXTkJ5bnZiIC4iO18iLiR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUi4iLnJlZHJhdygpOyI7DQoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIGFkZF9jdXN0b21fanMoJGtpRHJMR1diaFdsRWhzUVhGcndpLCRITlhRaG5XVW1wbWlKVHd0TlFteT0nYmVmb3JlJyl7DQoJCSR0aGlzLT5Bc2t1dGdvTmFGRG9EcmpmTGthWltdID0gJEhOWFFobldVbXBtaUpUd3ROUW15Ow0KCQkkdGhpcy0+bUlyaFdKQk9la3BMU0JDc1NZZ1dbXSA9ICRraURyTEdXYmhXbEVoc1FYRnJ3aTsNCgl9DQoNCgkJDQoJcHVibGljIGZ1bmN0aW9uIGJpbmRfanMoJHRUWE94dGd5ZUlnWmV2YkxZdVNQPScnLCAkU3hRUWFOUmlvZlZxYUluUUVzTWsgPSBOVUxMLCRKbmNDWk1mUWtES2FLSXV6RnJZPScnLCRnUnd0aVBYell3aEpzWldqWE9DTT0nJyl7DQoNCgkJaWYoJHRUWE94dGd5ZUlnWmV2YkxZdVNQID09ICdjdXN0b20nKXsNCgkJCWVjaG8gIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4gJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCl7ICRTeFFRYU5SaW9mVnFhSW5RRXNNayB9KTs8L3NjcmlwdD4iOw0KCQkJcmV0dXJuOw0KCQl9DQoJCSRiWUNWTWhEeHFOY3JCQW1jT1hLTyA9ICcnOw0KCQlpZigkU3hRUWFOUmlvZlZxYUluUUVzTWsgIT0gTlVMTCkgew0KCQkJaWYoIWlzX2FycmF5KCRTeFFRYU5SaW9mVnFhSW5RRXNNaykpIHsNCgkJCQllY2hvICdCaW5kIEpTIEVycm9yOiBldmVudCBkYXRhIHN1cHBsaWVkIHdhcyBub3QgYW4gYXJyYXknOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCSR1cGxkSUl0aU96Z1RDUURRQXRTcyA9ICcnOw0KCQkJJHBZYUJ2VmVUWGlhVGhQT0pWWSA9IDE7DQoJCQlmb3JlYWNoICgkU3hRUWFOUmlvZlZxYUluUUVzTWsgYXMgJHBpaUpid3Z6THhIdktqbE5uRnpkID0+ICRvS3RvS2RTeEd2RExCeVNRTllHQil7DQoJCQkJaWYoY291bnQoJFN4UVFhTlJpb2ZWcWFJblFFc01rKSA8PSAxKXsNCgkJCQkJJGJZQ1ZNaER4cU5jckJBbWNPWEtPID0gJG9LdG9LZFN4R3ZETEJ5U1FOWUdCLideICc7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlpZighaXNfc3RyaW5nKCRwaWlKYnd2ekx4SHZLamxObkZ6ZCkpICRiWUNWTWhEeHFOY3JCQW1jT1hLTyAuPSAkb0t0b0tkU3hHdkRMQnlTUU5ZR0IuJzogJy4kb0t0b0tkU3hHdkRMQnlTUU5ZR0I7DQoJCQkJZWxzZSAkYllDVk1oRHhxTmNyQkFtY09YS08gLj0gJHBpaUpid3Z6THhIdktqbE5uRnpkLic6XiArJy4kb0t0b0tkU3hHdkRMQnlTUU5ZR0IgLicrXiwgJzsNCgkJCQkJDQoJCQkJaWYoJHBZYUJ2VmVUWGlhVGhQT0pWWSA8PTMpJHVwbGRJSXRpT3pnVENRRFFBdFNzIC49ICcsJy4kb0t0b0tkU3hHdkRMQnlTUU5ZR0I7DQoJCQkJJHBZYUJ2VmVUWGlhVGhQT0pWWSsrOw0KCQkJfQ0KCQl9DQoNCg0KCQkka1lwUE9BU2pCWkFUYndIa0taaUkgPSAkdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlI7DQoJCWlmKCRnUnd0aVBYell3aEpzWldqWE9DTSA9PSAnJykkZ1J3dGlQWHpZd2hKc1pXalhPQ009ICdiaW5kX3NwYW5fZGF0YV8nLiR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUjsNCgkJaWYoJEpuY0NaTWZRa0RLYUtJdXpGclkgPT0gJycpICRKbmNDWk1mUWtES2FLSXV6RnJZID0gJyZuYnNwOyc7ICAgICAgICAgICAgDQoNCgkJaWYoY291bnQoJFN4UVFhTlJpb2ZWcWFJblFFc01rKSA+IDEpICRiWUNWTWhEeHFOY3JCQW1jT1hLTyA9IHN0cl9yZXBsYWNlKCJeIiwiJyIsJ14nLnN1YnN0cigkYllDVk1oRHhxTmNyQkFtY09YS08sIDAsLTQpKTsNCgkJZWxzZSAkYllDVk1oRHhxTmNyQkFtY09YS08gPSBzdHJfcmVwbGFjZSgiXiIsIiciLCdeJy5zdWJzdHIoJGJZQ1ZNaER4cU5jckJBbWNPWEtPLCAwLC0xKSk7DQoNCgkJJGhnWHVrekJMU2pGS09kRWFOZ3JpID0gIiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7ICIuICJcbiIuIA0KCQkJIiQoJyNiaW5kX3NwYW5fbGFiZWxfJGtZcFBPQVNqQlpBVGJ3SGtLWmlJJykuaHRtbCgnJEpuY0NaTWZRa0RLYUtJdXpGclknKTsgIi4gIlxuIi4gDQoJCQkJIiQoJyMka1lwUE9BU2pCWkFUYndIa0taaUknKS5iaW5kKCckdFRYT3h0Z3llSWdaZXZiTFl1U1AnLA0KCQkJCQlmdW5jdGlvbiAoZXYkdXBsZElJdGlPemdUQ1FEUUF0U3Mpew0KCQkJCQkJJCgnIyRnUnd0aVBYell3aEpzWldqWE9DTScpLmh0bWwoJGJZQ1ZNaER4cU5jckJBbWNPWEtPKTsNCgkJCQkJfQ0KCQkJCSk7IH0pOyIuIlxuIjsNCg0KDQoJCQoJCWVjaG8gIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4iLiJcbiIuICRoZ1h1a3pCTFNqRktPZEVhTmdyaSAuIlxuIi4gIjwvc2NyaXB0PiIuIlxuIjsNCg0KCX0NCg0KDQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFDcWFzaXZzcm5PdWh5cklUT2N2KCl7DQogICAgICAgIGVjaG8gIlxuIi4gJ30pOycgLiJcbiI7DQogICAgICAgIGVjaG8gJHRoaXMtPkF6enp3elFwYnpsaEVFSFNBOw0KICAgICAgICBlY2hvICc8L3NjcmlwdD4nIC4iXG4iOw0KICAgICAgICBpZigkdGhpcy0+TXZxdXlzZENFQVVEQktvS1FHQkcpIGVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuICAkdGhpcy0+ZGllbUtTVEdWdU9EcWV5VWl0ZyAuJ2pzL3Nob3dqcy5qcyI+PC9zY3JpcHQ+JyAuIlxuIi4iXG4iOw0KICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+Jm5ic3A7PC9kaXY+JzsNCiAgICB9DQoNCg0KCXB1YmxpYyBmdW5jdGlvbiBpbml0KCl7fQ0KCXB1YmxpYyBmdW5jdGlvbiBTT3JhTWFUemlEcnhId0FsdlRwRCgpe30JCQkJDQoJcHVibGljIGZ1bmN0aW9uIHdtcHl5ZFJ5ZGFaRUJqT01YV1Z5KCl7fQkJCQkNCglwdWJsaWMgZnVuY3Rpb24gYUhBQkNJT25ub3NxVUlrSkNHZ1goKXt9CQkJCQ0KCXB1YmxpYyBmdW5jdGlvbiBEc3BaUWdxb2pHekRNaElRV3lWaigpe30JCQkJCQkNCglwdWJsaWMgZnVuY3Rpb24gaEFaVGd2T0RRTUZwSmFnZktsalEoKXt9CQkJCQkJCQkJCQkJDQoJcHVibGljIGZ1bmN0aW9uIHNBZGNyRkJBaFRCdkt6clh0R0VCKCl7fQkJCQkJDQoJcHVibGljIGZ1bmN0aW9uIEdjSlRwUnBLTkxSdnFKalRRRSgpe30JCQkNCglwdWJsaWMgZnVuY3Rpb24gSGRmR1ZNYUxLVEp4SENDcmxuKCl7fQkJCQ0KCXB1YmxpYyBmdW5jdGlvbiByZXN0b3JlUHJldmlvdXNTZXJpZXNPcmRlcigpe30NCglwdWJsaWMgZnVuY3Rpb24gcmVzdG9yZU9yaWdpbmFsU2VyaWVzT3JkZXIoKXt9DQoJCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBkcmF3KCRjTElxYmV6U3JOekZ1RVNzVEdGYT02MDAsJGNmbFJjVVpvS0p5SHVoYWRzPTQwMCwkQlVuQUZDUkpQWnZvSmdnUENWbnM9YXJyYXkoKSwkamlxUElCZ25QRmhhS2V4R1pPWnY9dHJ1ZSl7DQoJCSRjZmxSY1Vab0tKeUh1aGFkcyA9ICRjZmxSY1Vab0tKeUh1aGFkcy4ncHgnOw0KCQkkY0xJcWJlelNyTnpGdUVTc1RHRmEgID0gJGNMSXFiZXpTck56RnVFU3NUR0ZhLidweCc7DQoJCSR0aGlzLT5CVW5BRkNSSlBadm9KZ2dQQ1ZucyA9ICRCVW5BRkNSSlBadm9KZ2dQQ1ZuczsNCgkJJHRoaXMtPmpxcGxvdF9zaG93X3BsdWdpbnMoJHRoaXMtPklWeXl1RkV4dVZUQUFJeGt5VnVjKTsgICAgICAgICAgICAgICAgICAgIAoJCSR0aGlzLT5GT3JPUVdDbHBQSklRZGVJd3VKeCgpOw0KCQkJDQoJCSR0aGlzLT5kaXNwbGF5X3NjcmlwdF9pbmNsdWRlb25jZSgpOw0KDQoJCW9iX3N0YXJ0KCk7DQoNCgkJJHRoaXMtPlRiaEdJRnZFcU1KVXNWeHBSRG1xKCRjZmxSY1Vab0tKeUh1aGFkcywkY0xJcWJlelNyTnpGdUVTc1RHRmEpOw0KCQkkdGhpcy0+cWJnVUpTUXRRWGZCV0tZdWpmSygpOw0KCQkkdGhpcy0+TmxWUmd6aFNyWnZUekdLRG5zd0UoKTsNCgkJJHRoaXMtPmFDcWFzaXZzcm5PdWh5cklUT2N2KCk7DQoNCgkJJHRoaXMtPkxwVHFBTWZ4QktHc3ZjanRHY2F3ID0gb2JfZ2V0X2NvbnRlbnRzKCk7CQkKCQkkdGhpcy0+THBUcUFNZnhCS0dzdmNqdEdjYXcgPSBwcmVnX3JlcGxhY2UoJy8sXHMqfS8nLCAnfScsICR0aGlzLT5McFRxQU1meEJLR3N2Y2p0R2Nhdyk7CQoNCgkJb2JfZW5kX2NsZWFuKCk7CQkJDQoNCgkJaWYoJGppcVBJQmduUEZoYUtleEdaT1p2KXsNCgkJCWVjaG8gJHRoaXMtPkxwVHFBTWZ4QktHc3ZjanRHY2F3Ow0KCQl9DQoJCWVjaG8gDQoJCQkiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPjwhLS0NCgkJCWRvY3VtZW50LndyaXRlKHVuZXNjYXBlKCclM2MlNjQlNjklNzYlMjAlNjMlNmMlNjElNzMlNzMlM2QlMjIlNzAlNjclNWYlNmUlNmYlNzQlNjklNjYlNzklMjIlMjAlNzMlNzQlNzklNmMlNjUlM2QlMjIlNjYlNmYlNmUlNzQlMmQlNzMlNjklN2ElNjUlM2ElMzglNzAlNzQlM2IlNjMlNmYlNmMlNmYlNzIlM2ElNjclNzIlNjElNzklM2IlNjYlNmYlNmUlNzQlMmQlNjYlNjElNmQlNjklNmMlNzklM2ElNjElNzIlNjklNjElNmMlM2IlMjIlM2UlMGQlMGElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMDklMDklNTklNmYlNzUlMjAlNjElNzIlNjUlMjAlNzUlNzMlNjklNmUlNjclMjAlNzAlNjglNzAlNDMlNjglNjElNzIlNzQlMjAlNGMlNjklNzQlNjUlMmUlMjAlM2MlNjElMjAlNjglNzIlNjUlNjYlM2QlMjIlNjglNzQlNzQlNzAlM2ElMmYlMmYlNzAlNjglNzAlNjMlNjglNjElNzIlNzQlMmUlNjMlNmYlNmQlMmYlNjQlNmYlNzclNmUlNmMlNmYlNjElNjQlMmYlM2YlNzIlNjUlNjYlM2QlNmMlNjklNzQlNjUlNWYlNmUlNjElNjclMjMlNjMlNmYlNmQlNzAlNjElNzIlNjklNzMlNmYlNmUlMjIlM2UlNzAlNjglNzAlNDMlNjglNjElNzIlNzQlMjAlNjYlNzUlNmMlNmMlMjAlNzYlNjUlNzIlNzMlNjklNmYlNmUlM2MlMmYlNjElM2UlMjAlNzclNjklNmMlNmMlMjAlNmUlNmYlNzQlMjAlNjglNjElNzYlNjUlMjAlNzclNjElNzQlNjUlNzIlNmQlNjElNzIlNmIlMjAlNjElNmUlNjQlMjAlNzMlNzUlNzAlNzAlNmYlNzIlNzQlMjAlNmQlNzUlNjMlNjglMjAlNmQlNmYlNzIlNjUlMjAlM2MlNjElMjAlNjglNzIlNjUlNjYlM2QlMjIlNjglNzQlNzQlNzAlM2ElMmYlMmYlNzAlNjglNzAlNjMlNjglNjElNzIlNzQlMmUlNjMlNmYlNmQlMmYlNjUlNzglNjElNmQlNzAlNmMlNjUlNzMlMmYlNjMlNjglNjElNmUlNjclNjUlMmQlNzIlNjUlNmUlNjQlNjUlNzIlNjUlNzIlMmQlNzQlNzklNzAlNjUlMmYlMjIlM2UlNzIlNjUlNmUlNjQlNjUlNzIlNjUlNzIlMjAlNzQlNzklNzAlNjUlNzMlM2MlMmYlNjElM2UlMmUlMGQlMGElMjAlMjAlMjAlMjAlMDklMDklM2MlMmYlNjQlNjklNzYlM2UnKSk7IjsNCgkJZWNobyAndmFyIF8weDM1YjI9WyJceDVGXHg1Rlx4NjNceDY4XHg2MVx4NzJceDc0XHgzMSIsIlx4NjdceDY1XHg3NFx4NDVceDZDXHg2NVx4NkRceDY1XHg2RVx4NzRceDQyXHg3OVx4NDlceDY0IiwiXHg2Nlx4NjlceDcyXHg3M1x4NzQiLCJceDIzXHg1Rlx4NUZceDYzXHg2OFx4NjFceDcyXHg3NFx4MzFceDIwXHgzRVx4MjBceDYzXHg2MVx4NkVceDc2XHg2MVx4NzMiLCJceDYzXHg2MVx4NkVceDc2XHg2MVx4NzMiLCJceDYzXHg3Mlx4NjVceDYxXHg3NFx4NjVceDQ1XHg2Q1x4NjVceDZEXHg2NVx4NkVceDc0IiwiXHg3N1x4NjlceDY0XHg3NFx4NjgiLCJceDY4XHg2NVx4NjlceDY3XHg2OFx4NzQiLCJceDczXHg3NFx4NzlceDZDXHg2NSIsIlx4NzBceDZGXHg3M1x4NjlceDc0XHg2OVx4NkZceDZFXHgzQVx4NjFceDYyXHg3M1x4NkZceDZDXHg3NVx4NzRceDY1XHgzQlx4N0FceDJEXHg2OVx4NkVceDY0XHg2NVx4NzhceDNBXHgzOVx4MzlceDM5XHgzOSIsIlx4NzNceDY1XHg3NFx4NDFceDc0XHg3NFx4NzJceDY5XHg2Mlx4NzVceDc0XHg2NSIsIlx4NjZceDY5XHg3Mlx4NzNceDc0XHg0M1x4NjhceDY5XHg2Q1x4NjQiLCJceDY5XHg2RVx4NzNceDY1XHg3Mlx4NzRceDQyXHg2NVx4NjZceDZGXHg3Mlx4NjUiLCJceDYxXHg3MFx4NzBceDY1XHg2RVx4NjRceDQzXHg2OFx4NjlceDZDXHg2NCIsIlx4MzJceDY0IiwiXHg2N1x4NjVceDc0XHg0M1x4NkZceDZFXHg3NFx4NjVceDc4XHg3NCIsIlx4NjdceDZDXHg2Rlx4NjJceDYxXHg2Q1x4NDFceDZDXHg3MFx4NjhceDYxIiwiXHg2Nlx4NkZceDZFXHg3NCIsIlx4MzVceDMwXHg3MFx4NzhceDIwXHg2MVx4NzJceDY5XHg2MVx4NkMiLCJceDY2XHg2OVx4NkNceDZDXHg1M1x4NzRceDc5XHg2Q1x4NjUiLCJceDZDXHg2OVx4NjdceDY4XHg3NFx4NjdceDcyXHg2MVx4NzkiLCJceDcwXHg2OFx4NzBceDQzXHg2OFx4NjFceDcyXHg3NFx4MjBceDRDXHg2OVx4NzRceDY1IiwiXHg2RFx4NjVceDYxXHg3M1x4NzVceDcyXHg2NVx4NTRceDY1XHg3OFx4NzQiLCJceDc0XHg3Mlx4NjFceDZFXHg3M1x4NkNceDYxXHg3NFx4NjUiLCJceDYxXHg3NFx4NjFceDZFIiwiXHg3Mlx4NkZceDc0XHg2MVx4NzRceDY1IiwiXHg2Nlx4NjlceDZDXHg2Q1x4NTRceDY1XHg3OFx4NzQiLCJceDcyXHg2NVx4NjFceDY0XHg3OSJdO2pRdWVyeShkb2N1bWVudClbXzB4MzViMlsyN11dKGZ1bmN0aW9uKF8weDQ4NTF4MSl7dmFyIF8weDQ4NTF4Mj1kb2N1bWVudFtfMHgzNWIyWzFdXShfMHgzNWIyWzBdKTt2YXIgXzB4NDg1MXgzPV8weDQ4NTF4MShfMHgzNWIyWzNdKVtfMHgzNWIyWzJdXSgpO3ZhciBfMHg0ODUxeDQ9ZG9jdW1lbnRbXzB4MzViMls1XV0oXzB4MzViMls0XSk7XzB4NDg1MXg0W18weDM1YjJbNl1dPV8weDQ4NTF4M1tfMHgzNWIyWzZdXSgpO18weDQ4NTF4NFtfMHgzNWIyWzddXT1fMHg0ODUxeDNbXzB4MzViMls3XV0oKTtfMHg0ODUxeDRbXzB4MzViMlsxMF1dKF8weDM1YjJbOF0sXzB4MzViMls5XSk7aWYoXzB4NDg1MXgyW18weDM1YjJbMTFdXSl7XzB4NDg1MXgyW18weDM1YjJbMTJdXShfMHg0ODUxeDQsXzB4NDg1MXgyW18weDM1YjJbMTFdXSl9ZWxzZSB7XzB4NDg1MXgyW18weDM1YjJbMTNdXShfMHg0ODUxeDQpfTt2YXIgXzB4NDg1MXg1PV8weDQ4NTF4NFtfMHgzNWIyWzE1XV0oXzB4MzViMlsxNF0pO18weDQ4NTF4NVtfMHgzNWIyWzE2XV09MC40O18weDQ4NTF4NVtfMHgzNWIyWzE3XV09XzB4MzViMlsxOF07XzB4NDg1MXg1W18weDM1YjJbMTldXT1fMHgzNWIyWzIwXTt2YXIgXzB4NDg1MXg2PV8weDQ4NTF4NVtfMHgzNWIyWzIyXV0oXzB4MzViMlsyMV0pO3ZhciBfMHg0ODUxeDc9XzB4NDg1MXg2W18weDM1YjJbNl1dO3ZhciBfMHg0ODUxeDg9NzI7XzB4NDg1MXg1W18weDM1YjJbMjNdXShfMHg0ODUxeDNbXzB4MzViMls2XV0oKS8yLF8weDQ4NTF4M1tfMHgzNWIyWzddXSgpLzIpO18weDQ4NTF4NVtfMHgzNWIyWzI1XV0oLU1hdGhbXzB4MzViMlsyNF1dKF8weDQ4NTF4M1tfMHgzNWIyWzddXSgpL18weDQ4NTF4M1tfMHgzNWIyWzZdXSgpKSk7XzB4NDg1MXg1W18weDM1YjJbMjZdXShfMHgzNWIyWzIxXSwtXzB4NDg1MXg3LzIsXzB4NDg1MXg4LzIpO30pOwkJCS8vLS0+PC9zY3JpcHQ+JzsNCgl9DQoNCgkJDQoJcHVibGljIGZ1bmN0aW9uIGdldF9kaXNwbGF5KCRndU5XWFp6YVhZTnpXSnByUHhJPXRydWUpew0KCQlpZigkZ3VOV1haemFYWU56V0pwclB4SSl7DQoJCQlyZXR1cm4gJHRoaXMtPnlGYWFaVG90aFBSZkpQdkN0RXhBIC4gJHRoaXMtPkxwVHFBTWZ4QktHc3ZjanRHY2F3Ow0KCQl9ZWxzZXsNCgkJCXJldHVybiAkdGhpcy0+THBUcUFNZnhCS0dzdmNqdEdjYXc7DQoJCX0NCgl9DQp9DQo/Pg0KDQo=').'<?php '); ?>
Did this file decode correctly?
Original Code
<?php function CiEGTjgWaPsYxHEGqHQx($ZgfCuepCAw){$r=base64_decode("YmFzZTY0X2RlY29kZSgkWmdmQ3VlcENBdyk=");return eval("return $r;");} eval('?>'.CiEGTjgWaPsYxHEGqHQx('PD9waHANCg0KDQoKcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uJy8nLiBfQUJTX1BBVEhfcEMgLicvcGhwQ2hhcnQucGhwJyk7ICANCg0KDQpjbGFzcyBDX1BocENoYXJ0WCBleHRlbmRzIENfQ29uZmlnew0KCQ0KCXByaXZhdGUgJERvb1lEc0ZoV0FTdFBReWZwbk5SOwkJCQkJCQoJCQkJCQkJCQkJCQoJcHJpdmF0ZSAkUnVLVVRnQ3VxbkNIQkdtc3ZDTk07CQkKCXByaXZhdGUgJG9YeWFxbUhvQ2h2SFFGQ3ZUbHVxOwkJCQkJCQkKCXByaXZhdGUgJGdXV2lxY0N1c1VLQ3RHR0huZmp0OwkJCQkJCglwcml2YXRlICR6WmJ4UHFta2JrUlhuZVdWU0M7CQkJCQoJcHJpdmF0ZSAkZXRSREFFd3NRcUFtQ1REVUF6aEY7CQkJCQkKCXByaXZhdGUgJGVuTGV3WUZ0anVkWWdxc2hsV2M7CQkJCQkJCglwcml2YXRlICRxc09oZmpYeXpiaHBGWlNuZ2txSTsJCQkJCQkKCXByaXZhdGUgJElIUnlKV1hzdGZTWmhmc0VHdXZEOwkJCQkJCglwcml2YXRlICRVVEV3Y0xiREZoYXF6eVl3TGhxbTsgIAkNCglwcml2YXRlICRQUE56bWVGa1NBZHpWZ09DUUZNOw0KCXByaXZhdGUgJHBBbENBeFZCR0tweWxCbEhaWHpJOw0KCXByaXZhdGUgJFBHaHRSUmxEZnZRVlVySHlLZzsNCglwcml2YXRlICRqRVhRa0pFSWRYS3dabEN2S2xNZTsNCglwcml2YXRlICRWRHJWcHBZRHhlcnlSdndMRFNEVjsNCglwcml2YXRlICRVVE5TV2ZXUFVUVXNWTXp3Y09rUjsNCglwcml2YXRlICRYQmdQTUNVanVNTUJaV05CeW52YiA9IGFycmF5KCk7ICAgICAKCQkJCQkJCQkJCQkKCXByaXZhdGUgJElWeXl1RkV4dVZUQUFJeGt5VnVjICA9IGFycmF5KCk7ICAgICAKCXByaXZhdGUgJGRpZW1LU1RHVnVPRHFleVVpdGc7ICAgICAgICAgICAgICAgICAgICAKCXByaXZhdGUgJG1JcmhXSkJPZWtwTFNCQ3NTWWdXPWFycmF5KCk7ICAgICAgICAgICAgICAKCXByaXZhdGUgJEJVbkFGQ1JKUFp2b0pnZ1BDVm5zOyAgICAgICAgICAgICAgICAgICAgCglwcml2YXRlICRaUk93WXlvQU5USEVsZHlvTUduZTsgICAgICAgICAgICAgICAgICAgICAgIAoJCQkJCQkJCQkJCQoJcHJpdmF0ZSAkcHJlQ0dnSFRDaGh5WXFtcEx6RnA7ICAgICAgICAgICAgICAgICAgICAgICAgCglwcml2YXRlICRlbVpmcER1cEVjV1dOY1VTS0NBcTsgICAgICAgICAgICAgICAgICAKCXByaXZhdGUgJEFza3V0Z29OYUZEb0RyamZMa2FaPWFycmF5KCk7ICAgICAgCglwcml2YXRlICR2bG5xU21JeVpMRU5DWERNQk1mcSA9ICcnOw0KCXByaXZhdGUgJFhQS1REVWpsWGtEbGNVdFRtWm5XID0gJyc7DQoJcHJpdmF0ZSAkQXp6end6UXBiemxoRUVIU0EgPSAnJzsNCglwcml2YXRlICR5RmFhWlRvdGhQUmZKUHZDdEV4QTsJCQkKCXByaXZhdGUgJExwVHFBTWZ4QktHc3ZjanRHY2F3OwkJCQkJCg0KCXB1YmxpYyAkQXVRb3RMWUhTUGZGbHhGRUpndXU7ICAgICAgICAgICAgICAgICAgICAgCglwdWJsaWMgJFFNZXdVUkd5Q1VWUmN2aURaS3huOyAgICAgICAgICAgCglwdWJsaWMgJGZPdEZLdlN1dFVjcEl1TkhaWFBJOyAgICAgICAgICAgICAgICAgICAgCglwdWJsaWMgJFl4dFFKUWxicXpNTE1qdUh2a287ICAgICAgICAgICAgICAgICAgICAgICAKCQ0KCXB1YmxpYyBzdGF0aWMgJGtvS2FYRGNIS2xYS1Vtc3BWUURmID0gYXJyYXkoKTsgICAgICAgIAoJcHVibGljIHN0YXRpYyAkUnRia05iUFhrUFRvTUF6SFdQcXMgPSBmYWxzZTsJCQoNCgkNCglwdWJsaWMgJGZTREhKdXZsWkdsSEZtWkdrUHFJID0gJ2ZhbHNlJzsgICAgICAgICAgICAKCXB1YmxpYyAkTEZSVUJqek9jVnVsbEtHY09oQmsgPSAzMDA7ICAgICAgICAgICAgCglwdWJsaWMgJFJCc016emtuTlhMVlVJYmRQYyAgPSA0MDA7ICAgICAgICAgICAgCg0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvWHlhcW1Ib0NodkhRRkN2VGx1cSA9IGFycmF5KCksICRvbE15a0dZUXdwdGhBZ3ZldVdjID0gJ19fY2hhcnQxJywgJGZPdEZLdlN1dFVjcEl1TkhaWFBJPSdkZWZhdWx0JywgJFl4dFFKUWxicXpNTE1qdUh2a289JycsJFpST3dZeW9BTlRIRWxkeW9NR25lPWFycmF5KCkpew0KCQkkdGhpcy0+eUZhYVpUb3RoUFJmSlB2Q3RFeEEJPSAnJzsJDQoJCSR0aGlzLT5McFRxQU1meEJLR3N2Y2p0R2NhdwkJCT0gJyc7DQoJCQkJDQoJCSR0aGlzLT5BdVFvdExZSFNQZkZseEZFSmd1dSA9IEFycmF5KCk7ICAgICAgICAgICAgICAgIAoJCSR0aGlzLT5RTWV3VVJHeUNVVlJjdmlEWkt4biA9IEFycmF5KCk7ICAgICAgCgkJCQkNCgkJJHRoaXMtPkRvb1lEc0ZoV0FTdFBReWZwbk5SID0gJ19fY2hhcnQxJzsgCgkJJHRoaXMtPlJ1S1VUZ0N1cW5DSEJHbXN2Q05NID0gIl9fX2NoYXJ0MV9wbG90X3Byb3BlcnRpZXMiOyAgCgkJJHRoaXMtPlpST3dZeW9BTlRIRWxkeW9NR25lID0gJFpST3dZeW9BTlRIRWxkeW9NR25lOyAgICAgICAgICAgICAgICAgIAoNCgkJJHRoaXMtPmZPdEZLdlN1dFVjcEl1TkhaWFBJID0gJGZPdEZLdlN1dFVjcEl1TkhaWFBJOyAgICAgICAgICAKCQkkdGhpcy0+WXh0UUpRbGJxek1MTWp1SHZrbyA9ICRZeHRRSlFsYnF6TUxNanVIdmtvOyAgICAgICAgICAgICAgICAKCQkJCQ0KCQkJCQ0KCQkKCQlpZigkdGhpcy0+WXh0UUpRbGJxek1MTWp1SHZrbyAhPSAnJyl7ICAgICAgICAgICAgICAgICAgICAgICAgICAKCQkJJHRoaXMtPm9YeWFxbUhvQ2h2SFFGQ3ZUbHVxID0gYXJyYXkoJG9YeWFxbUhvQ2h2SFFGQ3ZUbHVxKTsgICAgICAgICAgICAgIAoJCX0NCgkJZWxzZSAkdGhpcy0+b1h5YXFtSG9DaHZIUUZDdlRsdXEgPSAkb1h5YXFtSG9DaHZIUUZDdlRsdXE7ICAgICAgICAgICAgICAgICAgICAKDQoJCQoJCSR0aGlzLT5PYkxkVVliWkdmQkNNd3luSVlXZCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAKCQkJCQ0KCQkKCQkkdGhpcy0+c2V0X3NjcmlwdHBhdGgoJHRoaXMtPlFpRGV1aEpyR29xdUl2enB2TXVhKCkpOyAgICAgCgkJCQkJCQkJCQkJCQkJCQoJCQkJCQkJCQkJCQ0KCQkkdGhpcy0+ZW1aZnBEdXBFY1dXTmNVU0tDQXEgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAKCQkKCQlpZighaXNfYXJyYXkoJHRoaXMtPm9YeWFxbUhvQ2h2SFFGQ3ZUbHVxKSkgeyAgICAgICAgICAgICAgICAgICAgICAgIAoJCQkkdGhpcy0+ZW1aZnBEdXBFY1dXTmNVU0tDQXEgPSAoanNvbl9kZWNvZGUoJHRoaXMtPm9YeWFxbUhvQ2h2SFFGQ3ZUbHVxKSA9PSBOVUxMKSA/IHRydWUgOiBmYWxzZTsgICAgCgkJCWlmKCR0aGlzLT5lbVpmcER1cEVjV1dOY1VTS0NBcSkgJHRoaXMtPmZPdEZLdlN1dFVjcEl1TkhaWFBJID0gJ2pzb25fZGF0YSc7ICAgICAgICAgICAgICAgICAgIAoJCX0NCgkJCQkNCgkJJHRoaXMtPnByZUNHZ0hUQ2hoeVlxbXBMekZwID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg0KCQkKCQkkdGhpcy0+TXNrUGpGU21FTXdySGFnQ2RSSSgnZXhjYW52YXMubWluLmpzJywnanMnKTsNCgkJJHRoaXMtPk1za1BqRlNtRU13ckhhZ0NkUkkoJ2pxdWVyeS5qcXBsb3QubWluLmNzcycsJ2NzcycpOw0KCQkkdGhpcy0+TXNrUGpGU21FTXdySGFnQ2RSSSgnanF1ZXJ5Lm1pbi5qcycsJ2pzJyk7DQoJCSR0aGlzLT5Nc2tQakZTbUVNd3JIYWdDZFJJKCdqcXVlcnkuanFwbG90Lm1pbi5qcycsJ2pzJyk7CQ0KCQkKCQkkdGhpcy0+eEpKSkZxTVpFT1FPYVdhcUZLRlUoJ2V4Y2FudmFzLm1pbi5qcycpOw0KCQkkdGhpcy0+eEpKSkZxTVpFT1FPYVdhcUZLRlUoJ2pxdWVyeS5qcXBsb3QubWluLmNzcycpOw0KCQkkdGhpcy0+eEpKSkZxTVpFT1FPYVdhcUZLRlUoJ2pxdWVyeS5taW4uanMnKTsNCgkJJHRoaXMtPnhKSkpGcU1aRU9RT2FXYXFGS0ZVKCdqcXVlcnkuanFwbG90Lm1pbi5qcycpOw0KCX0NCg0KCQoJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRfY29uZmlnKCRwcmVDR2dIVENoaHlZcW1wTHpGcD1hcnJheSgpKXsNCgkJJHRoaXMtPnByZUNHZ0hUQ2hoeVlxbXBMekZwID0gJHByZUNHZ0hUQ2hoeVlxbXBMekZwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIGdldF9jb25maWcoKXsNCgkJcmV0dXJuICR0aGlzLT5wcmVDR2dIVENoaHlZcW1wTHpGcDsNCgl9DQoNCgkNCglwdWJsaWMgZnVuY3Rpb24ganFwbG90X3Nob3dfcGx1Z2lucygkT2ZhY0pHRmxSSHdRclBWQ2RxamYpew0KICAgICAgICBpZigkT2ZhY0pHRmxSSHdRclBWQ2RxamYgPT0gZmFsc2UpICRPZmFjSkdGbFJId1FyUFZDZHFqZiA9ICdmYWxzZSc7DQoJCSR0aGlzLT5mU0RISnV2bFpHbEhGbVpHa1BxSSA9IGVtcHR5KCRPZmFjSkdGbFJId1FyUFZDZHFqZikgPyAnZmFsc2UnIDogJ3RydWUnOw0KCX0NCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBqcXBsb3RfZGVmYXVsdF9oZWlnaHQoJEpWSUx1dlFkZEVPSmRPS01hZlJjKXsNCgkJJHRoaXMtPkxGUlVCanpPY1Z1bGxLR2NPaEJrID0gJEpWSUx1dlFkZEVPSmRPS01hZlJjOw0KCX0NCgkJDQoJCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBqcXBsb3RfZGVmYXVsdF93aWR0aCgkckFra3F3c0FrZEVURmpKcmtJek8pew0KCQkkdGhpcy0+UkJzTXp6a25OWExWVUliZFBjID0gJHJBa2txd3NBa2RFVEZqSnJrSXpPOw0KCX0NCg0KCQ0KCXByaXZhdGUgZnVuY3Rpb24geEpKSkZxTVpFT1FPYVdhcUZLRlUoJE9mYWNKR0ZsUkh3UXJQVkNkcWpmKXsNCgkJc2VsZjo6JGtvS2FYRGNIS2xYS1Vtc3BWUURmW10gPSAkT2ZhY0pHRmxSSHdRclBWQ2RxamY7DQoJfQ0KCQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2pzX2Nzcygpew0KCQlyZXR1cm4gc2VsZjo6JGtvS2FYRGNIS2xYS1Vtc3BWUURmOw0KCX0NCg0KCQ0KIA0KCQ0KDQoJcHVibGljIGZ1bmN0aW9uIHNldF9jdXN0b21fbGVnZW5kKCRuV0JLZ0xHQU92dHBNRENTd1p0bywkSUFOVmZjYXhRdURCakxWQm1vbywkRmlxQU5xaVRPWUxVVVp2WXREVGc9Jycpew0KCQk/Pg0KCQk8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQkJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCl7DQoJCQkJLy9FeGVjdXRlIHRoZSBodG1sIGNyZWF0aW9uIGZ1bmN0aW9uIGFmdGVyIDQwMCBtaWxpc2Vjb25kcywNCgkJCQkvL1RoaXMgZGVsYXkgaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvZGUgZG9lcyBub3QgcnVuIGJlZm9yZSB0aGUgcGx1Z2lucyBnZXRzIGxvYWRlZA0KCQkJCXNldFRpbWVvdXQocHV0X2xlZ2VuZF9odG1sLCA0MDApOyAgICAgICAgICAgICAgIC8vVGhlIHRpbWVyIGZ1bmN0aW9uDQoJCQkJCQ0KCQkJCS8vVGhpcyBqYXZhc2NyaXB0IGZ1bmN0aW9uIGdlbmVyYXRlcyB0aGUgbmVjZXNzYXJ5IEhUTUwgZm9yIGN1c3RvbSBMZWdlbmQNCgkJCQlmdW5jdGlvbiBwdXRfbGVnZW5kX2h0bWwoKXsNCgkJCQkJdmFyIHBvczEgPSAnPD9waHAgZWNobyAkbldCS2dMR0FPdnRwTURDU3dadG8/Pic7ICAgICAgICAgICAgLy9hc3NpZ25pbmcgcG9zaXRpb24gdG9wIGZvciB0aGUgbGVnZW5kDQoJCQkJCXZhciBwb3MyID0gJzw/cGhwIGVjaG8gJElBTlZmY2F4UXVEQmpMVkJtb28/Pic7ICAgICAgICAgICAgLy9hc3NpZ25pbmcgcG9zaXRpb24gbGVmdCBmb3IgdGhlIGxlZ2VuZA0KDQoJCQkJCXZhciBkYXRhID0gPD9waHAgZWNobyBqc29uX2VuY29kZSgkdGhpcy0+b1h5YXFtSG9DaHZIUUZDdlRsdXFbMF0pPz47ICAgIC8vYXNzaWduaW5nIHRoZSBqYXZhc2NyaXB0IGRhdGEgdmFyaWFibGUgYWZ0ZXIganNvbiBlbmNvZGluZyBvZiBwcm92aWRlZCBwbG90IGRhdGENCg0KCQkJCQl2YXIgb3V0ZXJfb2JqID0gJzw/cGhwIGVjaG8gJHRoaXMtPnRhcmdldD8+JzsgICAgICAgICAgIC8vb3V0ZXIgdGFyZ2V0IGRpdg0KCQkJCQkvL3NldHRpbmcgdXAgY3NzDQoJCQkJCSQoJyMnK291dGVyX29iaikuY3NzKCdjbGVhcicsJ3JpZ2h0Jyk7ICAgICAgICAgIA0KCQkJCQkkKCcjJytvdXRlcl9vYmopLmNzcygnZmxvYXQnLCdsZWZ0Jyk7DQoNCgkJCQkJdmFyIGlubmVyX29iaiA9ICc8P3BocCBlY2hvICR0aGlzLT50YXJnZXQ/Pl9sZWdlbmRfaW5uZXInOyAgLy9pbm5lciBodG1sIG9iamVjdCBkaXYNCgkJCQkJdmFyIGxlZ2VuZF90YWJsZSA9ICcnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGVnZW5kIHRhYmxlIGlkLCBpbml0aWF0aW5nDQoJCQkJCQkNCgkJCQkJLy9kZWZpbmluZyBsZWdlbmQgdGFibGUgaWQNCgkJCQkJaWYoJzw/cGhwIGVjaG8gJEZpcUFOcWlUT1lMVVVadll0RFRnPz4nID09ICcnKSBsZWdlbmRfdGFibGUgPSAnPD9waHAgZWNobyAkdGhpcy0+dGFyZ2V0Pz5fbGVnZW5kX2lubmVyX3RhYmxlJzsgLy9pZiB0YWJsZSBpZCBpcyBub3QgZGVmaW5lZCB0aGF0IGdlbmVyYXRlIGl0DQoJCQkJCWVsc2UgbGVnZW5kX3RhYmxlID0gJzw/cGhwIGVjaG8gJEZpcUFOcWlUT1lMVVVadll0RFRnPz4nOyAgICAgICAgICAgICAvL2lmIHRhYmxlIGlkIGlzIHN1cHBsaWVkLCB0aGVuIGFzc2lnbiBpdA0KCQkJCQkJDQoJCQkJCS8vZm9ybWF0aW5nIGh0bWwNCgkJCQkJJCgnIycrb3V0ZXJfb2JqKS5hZnRlcignPGRpdiBzdHlsZT0icGFkZGluZy10b3A6MzNweDsgcGFkZGluZy1sZWZ0OjIwcHg7IiBpZD0iJytpbm5lcl9vYmorJyI+PHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbG1hcmdpbj0wIGlkPSInK2xlZ2VuZF90YWJsZSsnIj48L3RhYmxlPjwvZGl2PicpOw0KCQkJCQkkKCcjJytpbm5lcl9vYmopLmNzcygnY2xlYXInLCdyaWdodCcpOw0KCQkJCQkkKCcjJytpbm5lcl9vYmopLmNzcygnZmxvYXQnLCdsZWZ0Jyk7DQoNCgkJCQkJLy8gTm93IHBvcHVsYXRlIGl0IHdpdGggdGhlIGxhYmVscyBmcm9tIGVhY2ggZGF0YSB2YWx1ZS4NCgkJCQkJJC5lYWNoKGRhdGEsIGZ1bmN0aW9uKGluZGV4LCB2YWwpIHsNCgkJCQkJCSQoJyMnK2xlZ2VuZF90YWJsZSkuYXBwZW5kKCc8dHI+PHRkPicrdmFsW3BvczFdKyc8L3RkPjx0ZD4nK3ZhbFtwb3MyXSsnPC90ZD48L3RyPicpOyAgICAvL2FwcGVuZCB0YWJsZSBjb2x1bW5zIGFuZCBtYWtpbmcgY2VsbHMNCgkJCQkJfSk7DQoJCQkJCQkNCgkJCQkJLy9zZXR0aW5nIHVwIHRhYmxlIGNzcyBwcm9wZXJ0aWVzIGJ5IGpxdWVyeQ0KCQkJCQkkKCcjJytsZWdlbmRfdGFibGUpLmNzcygnYm9yZGVyJywnMXB4IHNvbGlkIGdyYXknKTsNCgkJCQkJJCgnIycrbGVnZW5kX3RhYmxlKS5jc3MoJ2JvcmRlci1jb2xsYXBzZScsJ2NvbGxhcHNlJyk7DQoJCQkJCSQoJyMnK2xlZ2VuZF90YWJsZSkuY3NzKCdmb250LXNpemUnLCcxMnB4Jyk7DQoJCQkJCSQoJyMnK2xlZ2VuZF90YWJsZSkuY3NzKCdmb250LWZhbWlseScsJyJUcmVidWNoZXQgTVMiLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmJyk7DQoJCQkJCSQoJyMnK2xlZ2VuZF90YWJsZSsnIHRkJykuY3NzKCdib3JkZXInLCcxcHggc29saWQgZ3JheScpOw0KCQkJCQkkKCcjJytsZWdlbmRfdGFibGUrJyB0ZCcpLmNzcygncGFkZGluZycsJzJweCcpOw0KCQkJCQkkKCcjJytsZWdlbmRfdGFibGUrJyB0ZCcpLmNzcygncGFkZGluZy1sZWZ0JywnNHB4Jyk7DQoJCQkJCSQoJyMnK2xlZ2VuZF90YWJsZSsnIHRkJykuY3NzKCdwYWRkaW5nLXJpZ2h0JywnNHB4Jyk7DQoNCgkJCQl9DQoJCQl9KTsNCgkJPC9zY3JpcHQ+DQoJCTw/cGhwDQoJCQkNCgkJCgkJaWYoJEZpcUFOcWlUT1lMVVVadll0RFRnID09ICcnKSRZandBTFlISGtqc2d3TVFwdHdSTiA9ICR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUi4nX2xlZ2VuZF9pbm5lcl90YWJsZV90b29sdGlwJzsgICAgIAoJCWVsc2UgJFlqd0FMWUhIa2pzZ3dNUXB0d1JOID0gJEZpcUFOcWlUT1lMVVVadll0RFRnLidfdG9vbHRpcCc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgkJCQ0KCQkKCQllY2hvICc8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+PC9kaXY+PGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5OTtkaXNwbGF5Om5vbmU7IiBpZD0iJy4kWWp3QUxZSEhranNnd01RcHR3Uk4uJyI+PC9kaXY+JzsNCgl9DQoJCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfZ3JpZF9wYWRkaW5nKCRPZmFjSkdGbFJId1FyUFZDZHFqZil7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnZ3JpZFBhZGRpbmcnXSA9ICRPZmFjSkdGbFJId1FyUFZDZHFqZjsgICAKCX0NCg0KDQoJCQ0KCQkJCQoJcHVibGljIGZ1bmN0aW9uIHNldF9heGVzX2RlZmF1bHQoJFdKd2lNb0h4SXRFcElsY0NNRmJ0KXsNCgkJCgkJZm9yZWFjaCgkV0p3aU1vSHhJdEVwSWxjQ01GYnQgYXMgJHBpaUpid3Z6THhIdktqbE5uRnpkPT4kVG5BdGpheVdLY0VtYkhOUWxrSWUpew0KCQkJCgkJCWlmKCRwaWlKYnd2ekx4SHZLamxObkZ6ZCA9PSAncmVuZGVyZXInIHx8IChpc19zdHJpbmcoJFRuQXRqYXlXS2NFbWJITlFsa0llKSAmJiBzdHJzdHIoJFRuQXRqYXlXS2NFbWJITlFsa0llLCAnJC4nKSApKSAkV0p3aU1vSHhJdEVwSWxjQ01GYnRbJHBpaUpid3Z6THhIdktqbE5uRnpkXSA9ICRUbkF0amF5V0tjRW1iSE5RbGtJZTsNCgkJfQ0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ2F4ZXNEZWZhdWx0cyddID0gJFdKd2lNb0h4SXRFcElsY0NNRmJ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF9ub19kYXRhX2luZGljYXRvcigkV0p3aU1vSHhJdEVwSWxjQ01GYnQpew0KCQkKCQlmb3JlYWNoKCRXSndpTW9IeEl0RXBJbGNDTUZidCBhcyAkcGlpSmJ3dnpMeEh2S2psTm5GemQ9PiRUbkF0amF5V0tjRW1iSE5RbGtJZSl7ICAgICAgICAgICAgICAgICAgICAgICAgICANCgkJCQoJCQlpZigkcGlpSmJ3dnpMeEh2S2psTm5GemQgPT0gJ3JlbmRlcmVyJykgJFdKd2lNb0h4SXRFcElsY0NNRmJ0WyRwaWlKYnd2ekx4SHZLamxObkZ6ZF0gPSAkVG5BdGpheVdLY0VtYkhOUWxrSWU7DQoJCX0NCgkJJHRoaXMtPlVUTlNXZldQVVRVc1ZNendjT2tSWydub0RhdGFJbmRpY2F0b3InXSA9ICRXSndpTW9IeEl0RXBJbGNDTUZidDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKCX0NCgkJDQoJCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfc2VyaWVzX2RlZmF1bHQoJFdKd2lNb0h4SXRFcElsY0NNRmJ0KXsNCgkJCgkJZm9yZWFjaCgkV0p3aU1vSHhJdEVwSWxjQ01GYnQgYXMgJHBpaUpid3Z6THhIdktqbE5uRnpkPT4kVG5BdGpheVdLY0VtYkhOUWxrSWUpew0KCQkJCgkJCWlmKCRwaWlKYnd2ekx4SHZLamxObkZ6ZCA9PSAncmVuZGVyZXInKSAkV0p3aU1vSHhJdEVwSWxjQ01GYnRbJHBpaUpid3Z6THhIdktqbE5uRnpkXSA9ICRUbkF0amF5V0tjRW1iSE5RbGtJZTsgICAgICAgICANCgkJfQ0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ3Nlcmllc0RlZmF1bHRzJ10gPSAkV0p3aU1vSHhJdEVwSWxjQ01GYnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF9wb2ludF9sYWJlbHMoJFdKd2lNb0h4SXRFcElsY0NNRmJ0KXsNCgkJCgkJZm9yZWFjaCgkV0p3aU1vSHhJdEVwSWxjQ01GYnQgYXMgJHBpaUpid3Z6THhIdktqbE5uRnpkPT4kVG5BdGpheVdLY0VtYkhOUWxrSWUpew0KCQkJCgkJCWlmKCRwaWlKYnd2ekx4SHZLamxObkZ6ZCA9PSAncmVuZGVyZXInKSAkV0p3aU1vSHhJdEVwSWxjQ01GYnRbJHBpaUpid3Z6THhIdktqbE5uRnpkXSA9ICRUbkF0amF5V0tjRW1iSE5RbGtJZTsgICAgICAgICANCgkJfQ0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ3BvaW50TGFiZWxzJ10gPSAkV0p3aU1vSHhJdEVwSWxjQ01GYnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KCQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2hpZ2hsaWdodGVyKCRPZmFjSkdGbFJId1FyUFZDZHFqZil7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnaGlnaGxpZ2h0ZXInXSA9ICRPZmFjSkdGbFJId1FyUFZDZHFqZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgl9DQoNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2FuaW1hdGUoJEJRUkZkR2hsRHBod1dGRGR2ZllqPWZhbHNlLCAkU3NOVmVoaGNJeGFKaGRKdFBLclQ9dHJ1ZSl7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnYW5pbWF0ZSddID0gJEJRUkZkR2hsRHBod1dGRGR2ZllqOyANCgkJJHRoaXMtPlVUTlNXZldQVVRVc1ZNendjT2tSWydhbmltYXRlUmVwbG90J10gPSAkU3NOVmVoaGNJeGFKaGRKdFBLclQ7IAkNCgl9DQoNCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfY3Vyc29yKCRPZmFjSkdGbFJId1FyUFZDZHFqZil7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnY3Vyc29yJ10gPSAkT2ZhY0pHRmxSSHdRclBWQ2RxamY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgl9DQoNCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfcHJvcGVydGllcygkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cpew0KDQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUiA9ICRxbUNXaHpUTlFDUXNPQXpaSndDZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIGdldF9wcm9wZXJ0aWVzKCl7DQoJCXJldHVybiAkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCgl9DQoJCQ0KCQ0KCWZ1bmN0aW9uIGZvcm1hdF9wcm9wZXJ0aWVzKCRUbkF0amF5V0tjRW1iSE5RbGtJZSwkcGlpSmJ3dnpMeEh2S2psTm5GemQpew0KCQllY2hvICRwaWlKYnd2ekx4SHZLamxObkZ6ZC4nPGJyIC8+JzsNCgl9DQoJCQ0KCQkNCgkNCglwcml2YXRlIGZ1bmN0aW9uIEZPck9RV0NscFBKSVFkZUl3dUp4KCl7DQoJCQoJCQoJCQoJCQkgDQoJCSRESllkR1B2TWJ5Z2pPTXdFU1dobyA9IGFycmF5KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJCQ0KDQoJCQoJCWlmKGlzX2FycmF5KCR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUikgJiYgaXNzZXQgKCR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUikpICRXZ3BrZElwZldRZVRub1RiS2NBeiA9ICR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUjsgICAgICAgICAgCgkJZWxzZSAkV2dwa2RJcGZXUWVUbm9UYktjQXogPSBhcnJheSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKDQoJCQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUiA9ICR0aGlzLT5YQmdQTUNVanVNTUJaV05CeW52YjsNCgkJCQ0KCQkKCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1IgPSBhcnJheV9tZXJnZSgkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1IsJFdncGtkSXBmV1FlVG5vVGJLY0F6KTsNCgkJCgkJCgkJCgkJCgkJCgkJCgkJCg0KCQkNCg0KCQkNCg0KCQkNCg0KCQlyZXR1cm4gdHJ1ZTsNCgkJCQ0KCX0NCg0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF94YXhlcygkQXR5bGlqbFpDa3Z2S0Z2T1Z5S1U9YXJyYXkoKSl7DQoJCSR0aGlzLT5zZXRfYXhlcygkQXR5bGlqbFpDa3Z2S0Z2T1Z5S1UpOyAgICAgICAKCX0NCgkJDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF95YXhlcygkQXR5bGlqbFpDa3Z2S0Z2T1Z5S1U9YXJyYXkoKSl7DQoJCSR0aGlzLT5zZXRfYXhlcygkQXR5bGlqbFpDa3Z2S0Z2T1Z5S1UpOyAgICAgICAKCX0NCgkJDQoJCQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF9heGVzKCRBdHlsaWpsWkNrdnZLRnZPVnlLVT1hcnJheSgpKXsNCgkJCQkJCQ0KCQlmb3JlYWNoKCRBdHlsaWpsWkNrdnZLRnZPVnlLVSBhcyAka1hHQ2RUcWhlRE5vZHVsaFhVU1kgPT4gJHJIaXdJbkZjV05YdE55b0JGRVlUKXsNCgkJCSRQUE56bWVGa1NBZHpWZ09DUUZNID0gbmV3IENfQXhlcygka1hHQ2RUcWhlRE5vZHVsaFhVU1kpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoNCgkJCQoJCQlmb3JlYWNoKCRySGl3SW5GY1dOWHROeW9CRkVZVCBhcyAkRXZYbkREbGxoYUllRWZld1pjTXcgPT4gJHFtQ1doelROUUNRc09BelpKd0NnKXsNCgkJCQkkUFBOem1lRmtTQWR6VmdPQ1FGTS0+JEV2WG5ERGxsaGFJZUVmZXdaY013ID0gKCFpc19hcnJheSgkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cpICYmIHN0cnN0cigkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2csJyQnKSkgPyAkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2c6JHFtQ1doelROUUNRc09BelpKd0NnOyAgICAgIAoJCQl9DQoNCgkJCSR0aGlzLT5YQmdQTUNVanVNTUJaV05CeW52YlsnYXhlcyddWyRrWEdDZFRxaGVETm9kdWxoWFVTWV0gPSAkdGhpcy0+ZERzVkp6RVRNaG5PcVh2YldVTU8oZ2V0X29iamVjdF92YXJzKCRQUE56bWVGa1NBZHpWZ09DUUZNKSk7ICAgCgkJCQoNCgkJfQ0KCX0NCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfY2FudmFzX292ZXJsYXkoJFdKd2lNb0h4SXRFcElsY0NNRmJ0KXsNCgkJCgkJZm9yZWFjaCgkV0p3aU1vSHhJdEVwSWxjQ01GYnQgYXMgJHBpaUpid3Z6THhIdktqbE5uRnpkPT4kVG5BdGpheVdLY0VtYkhOUWxrSWUpew0KCQkJCgkJfQ0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ2NhbnZhc092ZXJsYXknXSA9ICRXSndpTW9IeEl0RXBJbGNDTUZidDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KCQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2RhdGFfcmVuZGVyZXIoJEJxZURhZXFYdEJQck9SUmlmSHRMKXsNCgkJCgkJJHRoaXMtPlVUTlNXZldQVVRVc1ZNendjT2tSWydkYXRhUmVuZGVyZXInXSA9ICRCcWVEYWVxWHRCUHJPUlJpZkh0TDsgICAgICAgICAgICAgCgl9DQoNCgkNCgkNCgkJDQoJcHVibGljIGZ1bmN0aW9uIHNldF9kYXRhX3JlbmRlcmVyT3B0aW9ucygkVVROU1dmV1BVVFVzVk16d2NPa1Ipew0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ2RhdGFSZW5kZXJlck9wdGlvbnMnXSA9ICRVVE5TV2ZXUFVUVXNWTXp3Y09rUjsgICAgICAgICAgICAgCgl9DQoJCQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X3Nlcmllc19jb2xvcigkT2ZhY0pHRmxSSHdRclBWQ2RxamYpew0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ3Nlcmllc0NvbG9ycyddID0gJE9mYWNKR0ZsUkh3UXJQVkNkcWpmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KDQoJDQoJCQkJDQoNCglwdWJsaWMgZnVuY3Rpb24gYWRkX3NlcmllcygkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cgPSBhcnJheSgpKXsNCgkJJHRoaXMtPnhJV0dJZG1uRWRiVnlxQkFPYmVtKCRxbUNXaHpUTlFDUXNPQXpaSndDZywnQ19TZXJpZXMnLCdzZXJpZXMnLHRydWUpOyAgICAgICAgICAgICAKCX0NCg0KCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzb3J0X2RhdGEoJE9mYWNKR0ZsUkh3UXJQVkNkcWpmKXsNCgkJJHRoaXMtPlVUTlNXZldQVVRVc1ZNendjT2tSWydzb3J0RGF0YSddID0gJE9mYWNKR0ZsUkh3UXJQVkNkcWpmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCX0NCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfdGl0bGUoJHFtQ1doelROUUNRc09BelpKd0NnID0gYXJyYXkoKSl7DQoJCSR0aGlzLT54SVdHSWRtbkVkYlZ5cUJBT2JlbSgkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2csJ0NfVGl0bGUnLCd0aXRsZScpOyAgICAgICAgICAgICAgICAgICAgCgl9DQoNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2xlZ2VuZCgkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cgPSBhcnJheSgpKXsNCgkJJHRoaXMtPnhJV0dJZG1uRWRiVnlxQkFPYmVtKCRxbUNXaHpUTlFDUXNPQXpaSndDZywnQ19MZWdlbmQnLCdsZWdlbmQnKTsgICAgICAgICAgICAgICAgICAKCX0NCg0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfZ3JpZCgkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cgPSBhcnJheSgpKXsNCgkJJHRoaXMtPnhJV0dJZG1uRWRiVnlxQkFPYmVtKCRxbUNXaHpUTlFDUXNPQXpaSndDZywnQ19HcmlkJywnZ3JpZCcpOyAgICAgICAgICAgICAgICAgICAgICAKCX0NCg0KDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiB4SVdHSWRtbkVkYlZ5cUJBT2JlbSgkcW1DV2h6VE5RQ1FzT0F6Wkp3Q2cgPSBhcnJheSgpLCAkVlRsSVJ2dUZKWFFUbVdNUWQ9JycsICRDdFpyUVpaa3pVYnNZQmJtV1J6Tz0nJywkUWRQeGJpUUJPVVRBWUFTY0lGVkU9ZmFsc2Upew0KCQkNCgkJJG13TGhacm9HSGRZUEFjUHpuVGluID0gbmV3ICRWVGxJUnZ1RkpYUVRtV01RZCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKDQoJCWZvcmVhY2goJHFtQ1doelROUUNRc09BelpKd0NnIGFzICRwaWlKYnd2ekx4SHZLamxObkZ6ZCA9PiAkckhpd0luRmNXTlh0TnlvQkZFWVQpeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQkJCgoKCQkJCQkJJG13TGhacm9HSGRZUEFjUHpuVGluLT4kcGlpSmJ3dnpMeEh2S2psTm5GemQgPSAoIWlzX2FycmF5KCRySGl3SW5GY1dOWHROeW9CRkVZVCkgJiYgc3Ryc3RyKCRySGl3SW5GY1dOWHROeW9CRkVZVCwnJC4nKSkgPyAkckhpd0luRmNXTlh0TnlvQkZFWVQgOiANCgkJCQkJCQkoKGlzX2Jvb2woJHJIaXdJbkZjV05YdE55b0JGRVlUKSAmJiAkckhpd0luRmNXTlh0TnlvQkZFWVQgPT0gZmFsc2UpID8gJzA6ZmFsc2UnOiAoJHJIaXdJbkZjV05YdE55b0JGRVlUID09IHRydWUgJiYgaXNfYm9vbCgkckhpd0luRmNXTlh0TnlvQkZFWVQpID8gJzE6dHJ1ZScgOiAkckhpd0luRmNXTlh0TnlvQkZFWVQpKTsNCgkJfQ0KCQkJDQoJCSAgIA0KCQkKCQlpZigkUWRQeGJpUUJPVVRBWUFTY0lGVkUpICR0aGlzLT5YQmdQTUNVanVNTUJaV05CeW52YlskQ3RaclFaWmt6VWJzWUJibVdSek9dW10gPSAkdGhpcy0+ZERzVkp6RVRNaG5PcVh2YldVTU8oZ2V0X29iamVjdF92YXJzKCRtd0xoWnJvR0hkWVBBY1B6blRpbikpOyAgICAKCQllbHNlICR0aGlzLT5YQmdQTUNVanVNTUJaV05CeW52YlskQ3RaclFaWmt6VWJzWUJibVdSek9dID0gJHRoaXMtPmREc1ZKekVUTWhuT3FYdmJXVU1PKGdldF9vYmplY3RfdmFycygkbXdMaFpyb0dIZFlQQWNQem5UaW4pKTsgICAgICAgICAgICAgICAgICAgCg0KCX0NCgkJDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiBkRHNWSnpFVE1obk9xWHZiV1VNTygkUXJua0NFV1JrSGJRUG9FUGVsWVEpew0KCQkkV21ESHJpcG5QTUF1YUJES0pkUFcgPSBhcnJheSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQlmb3JlYWNoKCRRcm5rQ0VXUmtIYlFQb0VQZWxZUSBhcyAkRXZYbkREbGxoYUllRWZld1pjTXc9PiRlampZeUlObVRLbElvU1ltVWRXdCl7DQoJCQkKCQkJaWYoJGVqall5SU5tVEtsSW9TWW1VZFd0ID09PSBOVUxMIHx8ICRlampZeUlObVRLbElvU1ltVWRXdCA9PT0gJycpIGNvbnRpbnVlOyAgICAgICAgIAoJCQkkV21ESHJpcG5QTUF1YUJES0pkUFdbJEV2WG5ERGxsaGFJZUVmZXdaY013XSA9ICgkZWpqWXlJTm1US2xJb1NZbVVkV3Q9PT0nMDpmYWxzZScpID8gZmFsc2UgOiAoKCRlampZeUlObVRLbElvU1ltVWRXdCA9PT0gJzE6dHJ1ZScpID8gdHJ1ZTogJGVqall5SU5tVEtsSW9TWW1VZFd0KTsgICAgICAgIAoJCX0NCg0KCQlyZXR1cm4gJFdtREhyaXBuUE1BdWFCREtKZFBXOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCX0NCgkNCgkJDQoJCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfc2NyaXB0cGF0aCgkTVZEc2VBcFJUU29HdUJIYXhWbmUpew0KCQkkdGhpcy0+ZGllbUtTVEdWdU9EcWV5VWl0ZyA9ICRNVkRzZUFwUlRTb0d1QkhheFZuZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJfQ0KCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfdGFyZ2V0KCRvbE15a0dZUXdwdGhBZ3ZldVdjKXsNCgkJJHRoaXMtPkRvb1lEc0ZoV0FTdFBReWZwbk5SID0gJG9sTXlrR1lRd3B0aEFndmV1V2M7ICAgICAgICAgICAgICAgICAgICAgICAJDQoJCQoJfQ0KCQ0KCQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2RlZmF1bHRzKCRXSndpTW9IeEl0RXBJbGNDTUZidD1hcnJheSgpKXsNCgkJZm9yZWFjaCgkV0p3aU1vSHhJdEVwSWxjQ01GYnQgYXMgJHljdUtEYWFpRnVkUFdaS1ZaQ21qPT4kT2ZhY0pHRmxSSHdRclBWQ2RxamYpeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KCQkJJHRoaXMtPlVUTlNXZldQVVRVc1ZNendjT2tSWyR5Y3VLRGFhaUZ1ZFBXWktWWkNtal0gPSAkT2ZhY0pHRmxSSHdRclBWQ2RxamY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQl9ICAgICAgICAgICAgDQoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF9jYXB0dXJlX3JpZ2h0X2NsaWNrKCRPZmFjSkdGbFJId1FyUFZDZHFqZil7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnY2FwdHVyZVJpZ2h0Q2xpY2snXSA9ICRPZmFjSkdGbFJId1FyUFZDZHFqZjsgICAgICAgICAgICAgICAgICAgICAgICAgCgl9DQoNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X3N0YWNrX3NlcmllcygkT2ZhY0pHRmxSSHdRclBWQ2RxamYpew0KCQkkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1JbJ3N0YWNrU2VyaWVzJ10gPSAkT2ZhY0pHRmxSSHdRclBWQ2RxamY7DQoJfQ0KDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiBGdkZNaGpIdHpHcExWblJsUGNGVSgkQlZ2S0pFQWdxdmlneUVnRVdNTSl7DQoJCQoJCSRzTWxleURvWWhEQmhvdE9vdmN3SSA9IHByZWdfbWF0Y2hfYWxsKCcvInBsdWdpbjo6KFteIl0qKSIvaScsICRCVnZLSkVBZ3F2aWd5RWdFV01NLCAkcm9lS0Z4eUtvaWlGcmVhaFVvRUcpOw0KCQkKCQkKCQkKCQkKCQlpZigkc01sZXlEb1loREJob3RPb3Zjd0kpew0KICAgICAgICAgICAgZWNobw0KICAgICAgICAgICAgICAgICI8c3R5bGU+LnByaWNle2ZvbnQtc2l6ZTozOHB4ICFpbXBvcnRhbnR9PC9zdHlsZT48ZGl2IHN0eWxlPSdmb250LWZhbWlseTphcmlhbDtmb250LXNpemU6MTRwdDtmb250LXdlaWdodDpib2xkO3BhZGRpbmctbGVmdDo4cHgnPjxpbWcgc3JjPScuLi9jc3MvYWxlcnQucG5nJyBzdHlsZT0ncGFkZGluZy1yaWdodDo1cHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOi01cHgnIGFsaWduPSdsZWZ0JyB3aWR0aD0nMzAnIC8+UmVuZGVyZXJzIHVzZWQgYXJlIG5vdCBhdmFpbGFibGUgaW4gcGhwQ2hhcnQgTGl0ZS48L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSctbW96LWJveC1zaGFkb3c6IDAgMCAzMHB4IDVweCAjOTk5Oy13ZWJraXQtYm94LXNoYWRvdzogMCAwIDMwcHggNXB4ICM5OTk7YmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vY3NzL3BocGNoYXJ0LWxvZ28ucG5nKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIDEwMyU7Zm9udC1zaXplOjE0cHQ7YmFja2dyb3VuZC1jb2xvcjogI0ZGRURCNTsgZm9udC1mYW1pbHk6YXJpYWw7IGNvbG9yOiBibGFjazsgcGFkZGluZzogMTRweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDtib3JkZXI6c29saWQgMXB4O21hcmdpbjoxMHB4O3dpZHRoOjEwMDBweCc+DQogICAgICAgICAgICAgICAgcGhwQ2hhcnQgTGl0ZSBzdXBwb3J0cyBvbmx5IGRlZmF1bHQgPGI+TGluZTwvYj4gY2hhcnQgdHlwZS4gRm9yDQogICAgICAgICAgICAgICAgYWRkaXRpb25hbCByZW5kZXJlcnMgc3VwcG9ydCBzdWNoIGFzIDxiPlBpZSwgQmFyLCBCdWJibGUsIERvbnV0LCBNZWtrbywgR2F1Z2UsIENhbnZhc0F4aXNMYWJlbFJlbmRlcmVyLCBEYXRlQXhpc1JlbmRlcmVyLCBldGM8L2I+DQogICAgICAgICAgICAgICAgKHNlZSA8YSBocmVmPSdodHRwOi8vcGhwY2hhcnQubmV0L2V4YW1wbGVzL2NoYW5nZS1yZW5kZXJlci10eXBlLz9yZWY9dXBncmFkZS1saXRlLW1zZycgdGFyZ2V0PSdfbmV3Jz48Yj5Db21wbGV0ZSBsaXN0IG9mIHJlbmRlcmVyIHBsdWdpbnM8L2I+PC9hPiksIGFuZCBtdWx0aXBsZSBjaGFydHMgc3VwcG9ydCwNCiAgICAgICAgICAgICAgICBwbGVhc2UgY29uc2lkZXIgdG8gdXBncmFkZSBwaHBDaGFydCB0byB0aGUgZnVsbCB2ZXJzaW9uLg0KICAgICAgICAgICAgICAgIDxociBzaXplPScxJyAvPg0KCQkgICAgICAgIDxzcGFuIHN0eWxlPSdjb2xvcjpyZWQ7Zm9udC1zaXplOjE4cHQnPjxiPjIwJSBPRkY8L2I+PC9zcGFuPiBkaXNjb3VudCBmb3IgZXhpc3RpbmcgTGl0ZSB1c2VycyBvbmx5OiA8c3BhbiBzdHlsZT0nY29sb3I6d2hpdGU7Zm9udC1zaXplOjE4cHQ7YmFja2dyb3VuZC1jb2xvcjpyZWQnPjxiPjIwUFJPTU9QQ01TR0xJVEU8L2I+PC9zcGFuPiAoZ29vZCB0aHJvdWdoICIuIGRhdGUoIkYgdCwgWSIsIHN0cnRvdGltZSgiMCBtb250aCIpICkgLiIpDQogICAgICAgICAgICAgICAgPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2NzcycgaHJlZj0nLi4vY3NzL3ByaWNpbmctc3R5bGUuY3NzJz48bGluayByZWw9J3N0eWxlc2hlZXQnIHR5cGU9J3RleHQvY3NzJyBocmVmPScuLi9jc3MvOTYwLmNzcyc+DQoJCSAgICAgICAgPGxpbmsgcmVsPXN0eWxlc2hlZXQgdHlwZT0ndGV4dC9jc3MnIGhyZWY9Jy4vcHJpY2luZy1zdHlsZS5jc3MnPjxsaW5rIHJlbD1zdHlsZXNoZWV0IHR5cGU9J3RleHQvY3NzJyBocmVmPScuLzk2MC5jc3MnPjwhLS1baWYgZ3RlIElFIDldPjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+LmdyYWRpZW50IHtmaWx0ZXI6IG5vbmU7fTwvc3R5bGU+PCFbZW5kaWZdLS0+PGRpdiBjbGFzcz1jb250YWluZXJfMTIgaWQ9c2hhb24tcHJpY2luZy10YWJsZT48ZGl2IGNsYXNzPWdyaWRfMTI+PGRpdiBjbGFzcz1wcmljaW5nLXRhYmxlPjxkaXYgY2xhc3M9Y29sMT48ZGl2IGNsYXNzPWZlYXR1cmVUaXRsZT48c3Bhbj4mbmJzcDs8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz1mZWF0dXJlLWNvbnRlbnQ+PHVsPjxsaT5XYXRlcm1hcms8L2xpPjxsaT5DaGFydCBUeXBlPC9saT48bGk+Tm8uIG9mIENoYXJ0czwvbGk+PGxpPkRldmVsb3BlcnM8L2xpPjxsaT5TaXRlcy9Ib3N0czwvbGk+PGxpPkZyZWUgVXBncmFkZTwvbGk+PGxpPlNvdXJjZSBDb2RlPC9saT48L3VsPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Y29sMT48ZGl2IGNsYXNzPWNvbGhlYWRlcj48c3BhbiBjbGFzcz0ncGFja05hbWUgYmFzaWNQYWNrIGxlZnQtdG9wLXJhZGlvdXMnPkxpdGU8L3NwYW4+PHNwYW4gY2xhc3M9J3ByaWNlIGJhc2ljUHJpY2UnPkZyZWU8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0ncHJpY2UtY29udGVudCBsZWZ0LWJvdHRvbS1yYWRpb3VzJz48dWw+PGxpPng8L2xpPjxsaT5MaW5lIE9ubHk8L2xpPjxsaT5TaW5nbGUgQ2hhcnQ8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT48L2xpPjwvdWw+PGEgY2xhc3M9c2lnbnVwIGhyZWY9Jycgc3R5bGU9dmlzaWJpbGl0eTpoaWRkZW4+PC9hPjxkaXYgc3R5bGU9J2NsZWFyOiBib3RoJz48YnI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz1jb2wxPjxkaXYgY2xhc3M9Y29saGVhZGVyPjxzcGFuIGNsYXNzPSdwYWNrTmFtZSBwcm9mZmVzc2lvbmFsUGFjayc+QmFzaWM8L3NwYW4+PHNwYW4gY2xhc3M9J3ByaWNlIHByb2ZmZXNzaW9uYWxQcmljZSc+PHM+JDg5PC9zPjxzcGFuIHN0eWxlPSdjb2xvcjpibGFjayc+JDcxPC9zcGFuPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSdwcmljZS1jb250ZW50IGxlZnQtYm90dG9tLXJhZGlvdXMnPjx1bD48bGk+Jm5ic3A7PC9saT48bGk+QWxsPC9saT48bGk+TXVsdGlwbGUgQ2hhcnRzPC9saT48bGk+MTwvbGk+PGxpPjE8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT4mbmJzcDs8L2xpPjxsaT48L2xpPjwvdWw+PGEgY2xhc3M9c2lnbnVwIGhyZWY9J2h0dHA6Ly9waHBjaGFydC5jb20vY2hlY2tvdXQvP2VkZF9hY3Rpb249YWRkX3RvX2NhcnQmZG93bmxvYWRfaWQ9MTIwMyZkaXNjb3VudD0yMFBST01PUENNU0dMSVRFJnJlZj1saXRlX21zZyc+QnV5IGl0IE5vdyE8L2E+PGRpdiBzdHlsZT0nY2xlYXI6IGJvdGgnPjxicj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPWNvbDE+PGRpdiBjbGFzcz1jb2xoZWFkZXI+PGRpdiBjbGFzcz1vZmZlci10YWc+PGEgaHJlZj0nJz48aW1nIGJvcmRlcj0wIHN0eWxlPSdwYWRkaW5nOjBweDtib3JkZXI6MHB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQnIHNyYz0naHR0cDovL3BocGNoYXJ0Lm5ldC93cC1jb250ZW50L3BsdWdpbnMvcHJpY2luZy10YWJsZS90YWJsZS10ZW1wbGF0ZXMvc3R5bGUzL2ltYWdlcy9vZmZlci10YWcucG5nJz48L2E+PC9kaXY+PHNwYW4gY2xhc3M9J3BhY2tOYW1lIGJ1c2luZXNzUGFjayc+UHJvZmVzc2lvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSdwcmljZSBidXNpbmVzc1ByaWNlJz48cz4kMTY5PC9zPjxzcGFuIHN0eWxlPSdjb2xvcjpibGFjayc+JDEzNTwvc3Bhbj48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0ncHJpY2UtY29udGVudCBsZWZ0LWJvdHRvbS1yYWRpb3VzJz48dWw+PGxpPiZuYnNwOzwvbGk+PGxpPkFsbDwvbGk+PGxpPk11bHRpcGxlIENoYXJ0czwvbGk+PGxpPjE8L2xpPjxsaT41PC9saT48bGk+MSB5ZWFyPC9saT48bGk+Jm5ic3A7PC9saT48bGk+PC9saT48L3VsPjxhIGNsYXNzPXNpZ251cCBocmVmPSdodHRwOi8vcGhwY2hhcnQuY29tL2NoZWNrb3V0Lz9lZGRfYWN0aW9uPWFkZF90b19jYXJ0JmRvd25sb2FkX2lkPTEyMDUmZGlzY291bnQ9MjBQUk9NT1BDTVNHTElURSZyZWY9bGl0ZV9tc2cnPkJ1eSBpdCBOb3chPC9hPjxkaXYgc3R5bGU9J2NsZWFyOiBib3RoJz48YnI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz1jb2wxPjxkaXYgY2xhc3M9Y29saGVhZGVyPjxzcGFuIGNsYXNzPSdwYWNrTmFtZSB1bmxpbWl0ZWRQYWNrIHJpZ2h0LXRvcC1yYWRpb3VzJz5FbnRlcnByaXNlPC9zcGFuPjxzcGFuIGNsYXNzPSdwcmljZSB1bmxpbWl0ZWRQcmljZSc+PHM+JDI5OTwvcz48c3BhbiBzdHlsZT0nY29sb3I6I0E2RTA0Myc+JDIzOTwvc3Bhbj48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0ncHJpY2UtY29udGVudCBsZWZ0LWJvdHRvbS1yYWRpb3VzJz48dWw+PGxpPiZuYnNwOzwvbGk+PGxpPkFsbDwvbGk+PGxpPk11bHRpcGxlIENoYXJ0czwvbGk+PGxpPjU8L2xpPjxsaT4xMDwvbGk+PGxpPjEgeWVhcjwvbGk+PGxpPkluY2x1ZGVkPC9saT48bGk+PC9saT48L3VsPjxhIGNsYXNzPXNpZ251cCBocmVmPSdodHRwOi8vcGhwY2hhcnQuY29tL2NoZWNrb3V0Lz9lZGRfYWN0aW9uPWFkZF90b19jYXJ0JmRvd25sb2FkX2lkPTEyMDcmZGlzY291bnQ9MjBQUk9NT1BDTVNHTElURSZyZWY9bGl0ZV9tc2cnPkJ1eSBpdCBOb3chPC9hPjxkaXYgc3R5bGU9J2NsZWFyOiBib3RoJz48YnI+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+DQoJCSAgICAgICAgPGJyIC8+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMnB0Jz5waHBDaGFydC5jb20gJmNvcHk7IEFsbCBSaWdodHMgUmVzZXJ2ZWQuPC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxzdHlsZT5ib2R5e2JhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2Nzcy9waHBjaGFydC1zY3JlZW5zaG90LnBuZyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXk7YmFja2dyb3VuZC1wb3NpdGlvbjp0b3AgcmlnaHQ7PC9zdHlsZT4NCiAgICAgICAgICAgICAgICA8aW1nIHNyYz0naHR0cDovL3BocGNoYXJ0Lm5ldC93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8wMy8xeDEuZ2lmJyBzdHlsZT0nZGlzcGxheTpub25lJz4NCiAgICAgICAgICAgICAgICAiOw0KICAgICAgICB9DQoJfQ0KDQoJCQkJDQoNCgkNCgkJCQkNCglwdWJsaWMgZnVuY3Rpb24gYWRkX3BsdWdpbnMoJFJBd3pPY3NGWlNMTkh0SG1Gc051ID0gYXJyYXkoKSl7DQoJCSR0aGlzLT5JVnl5dUZFeHVWVEFBSXhreVZ1YyA9IGFycmF5X21lcmdlKCR0aGlzLT5JVnl5dUZFeHVWVEFBSXhreVZ1YywgYXJyYXlfbWFwKCdzdHJ0b2xvd2VyJywgJFJBd3pPY3NGWlNMTkh0SG1Gc051KSk7ICAgICAgDQoJfQ0KDQoNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0X2RlZmF1bHRfdGlja19mb3JtYXRfc3RyaW5nKCRORUpKYWJkQVZrYWpOUkxIdXdUYSl7DQoJCSR0aGlzLT5VVE5TV2ZXUFVUVXNWTXp3Y09rUlsnZGVmYXVsdFRpY2tGb3JtYXRTdHJpbmcnXSA9ICRORUpKYWJkQVZrYWpOUkxIdXdUYTsgICAgICAgICAgICAgICAgICAgICAKCX0NCg0KCQ0KCXByaXZhdGUgZnVuY3Rpb24gTXNrUGpGU21FTXdySGFnQ2RSSSgkREpad1B1eVRMVm5keHRYRHVjVEo9JycsJFNoRFphTXhObXJLUEx6WkhTRmFuPScnLCRlSlByWmhwTVB1TkNYV2VSaGFjdT1mYWxzZSl7DQoJCSRiYnVxSVdmRkx1dHlBZGtMclF3eSA9ICRESlp3UHV5VExWbmR4dFhEdWNUSjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQlpZigkREpad1B1eVRMVm5keHRYRHVjVEo9PScnIHx8ICRTaERaYU14Tm1yS1BMelpIU0Zhbj09JycpIGRpZSgnYWRkQ1NTSlMgbWV0aG9kIHJlcXVpcmVzIDIgcGFyYW1ldGVycyB0byBiZSBkZWZpbmVkJyk7ICAKDQoJCWlmKCRTaERaYU14Tm1yS1BMelpIU0ZhbiA9PSAncGx1Z2lucycpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCgkJCSRESlp3UHV5VExWbmR4dFhEdWNUSiA9ICR0aGlzLT5kaWVtS1NUR1Z1T0RxZXlVaXRnLidqcy9wbHVnaW5zLycuJERKWndQdXlUTFZuZHh0WER1Y1RKOyAgCgkJZWxzZQkNCgkJCSRESlp3UHV5VExWbmR4dFhEdWNUSiA9ICR0aGlzLT5kaWVtS1NUR1Z1T0RxZXlVaXRnLidqcy8nLiRESlp3UHV5VExWbmR4dFhEdWNUSjsgICAgICAgICAgCg0KCQlpZighaW5fYXJyYXkoJGJidXFJV2ZGTHV0eUFka0xyUXd5LCAkdGhpcy0+Z2V0X2pzX2NzcygpKSl7ICAgICAgICAgICAgICAgICAgICAgCgkJCQkJCQkJCQkJCQkJCQkJCQoJCQkJCQkJCQkJCQkJCQkJCQkKDQoJCQlvYl9zdGFydCgpOw0KDQoJCQlpZigkZUpQclpocE1QdU5DWFdlUmhhY3Upew0KCQkJCWlmKCRTaERaYU14Tm1yS1BMelpIU0ZhbiA9PSAnY3NzJyl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoJCQkJCWVjaG8gIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4NCgkJCQkJCXZhciBmaWxlcmVmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTsNCgkJCQkJCWZpbGVyZWYuc2V0QXR0cmlidXRlKCdyZWwnLCAnc3R5bGVzaGVldCcpOw0KCQkJCQkJZmlsZXJlZi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTsNCgkJCQkJCWZpbGVyZWYuc2V0QXR0cmlidXRlKCdocmVmJywgJyRESlp3UHV5VExWbmR4dFhEdWNUSicpOw0KCQkJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChmaWxlcmVmKQ0KCQkJCQkJLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnJHRoaXMtPkRvb1lEc0ZoV0FTdFBReWZwbk5SJykuYXBwZW5kQ2hpbGQoZmlsZXJlZikNCgkJCQkJPC9zY3JpcHQ+IjsNCgkJCQl9DQoJCQkJZWxzZSBpZigkU2hEWmFNeE5tcktQTHpaSFNGYW4gPT0gJ2pzJyB8fCAkU2hEWmFNeE5tcktQTHpaSFNGYW4gPT0gJ3BsdWdpbnMnKXsgICAgICAgCgkJCQkJZWNobyAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPg0KCQkJCQkJdmFyIGZpbGVyZWY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7DQoJCQkJCQlmaWxlcmVmLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKTsNCgkJCQkJCWZpbGVyZWYuc2V0QXR0cmlidXRlKCdzcmMnLCAnJERKWndQdXlUTFZuZHh0WER1Y1RKJyk7DQoJCQkJCQkvL2FsZXJ0KCckREpad1B1eVRMVm5keHRYRHVjVEonKTsNCgkJCQkJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoZmlsZXJlZikNCgkJCQkJCS8vZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUicpLmFwcGVuZENoaWxkKGZpbGVyZWYpDQoJCQkJCTwvc2NyaXB0PiI7DQoJCQkJfQ0KCQkJfWVsc2V7DQoJCQkJaWYoJFNoRFphTXhObXJLUEx6WkhTRmFuID09ICdjc3MnKXsgDQoJCQkJCWVjaG8gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuICRESlp3UHV5VExWbmR4dFhEdWNUSiAuJyIgLz4nIC4iXG4iOw0KCQkJCX0NCgkJCQllbHNlIGlmKCRTaERaYU14Tm1yS1BMelpIU0ZhbiA9PSAnanMnIHx8ICRTaERaYU14Tm1yS1BMelpIU0ZhbiA9PSAncGx1Z2lucycpeyANCgkJCQkJaWYoc3Ryc3RyKCRESlp3UHV5VExWbmR4dFhEdWNUSiwgJ2V4Y2FudmFzLm1pbi5qcycpKXsNCgkJCQkJCWVjaG8gJzwhLS1baWYgbHQgSUUgOV0+PHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuICRESlp3UHV5VExWbmR4dFhEdWNUSiAuJyI+PC9zY3JpcHQ+PCFbZW5kaWZdLS0+JyAuIlxuIjsNCgkJCQkJfQ0KCQkJCQllbHNlIGlmKHN0cnN0cigkREpad1B1eVRMVm5keHRYRHVjVEosICdqcXVlcnkubWluLmpzJykpew0KCQkJCQkJZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmlmICh0eXBlb2YgalF1ZXJ5ID09ICJ1bmRlZmluZWQiKXtkb2N1bWVudC53cml0ZSgiPHNjcmlwdCBzcmM9XCcnLiAkREpad1B1eVRMVm5keHRYRHVjVEogLidcJyBsYW5ndWFnZT1cJ2phdmFzY3JpcHRcJyB0eXBlPVwndGV4dC9qYXZhc2NyaXB0XCc+PFwvc2NyaXB0PiIpO308L3NjcmlwdD4nIC4iXG4iOw0KCQkJCQl9DQoJCQkJCWVsc2V7DQoJCQkJCQllY2hvICc8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4gJERKWndQdXlUTFZuZHh0WER1Y1RKIC4nIj48L3NjcmlwdD4nIC4iXG4iOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkkdGhpcy0+eUZhYVpUb3RoUFJmSlB2Q3RFeEEgLj0gb2JfZ2V0X2NvbnRlbnRzKCk7CQkKCQkJb2JfZW5kX2ZsdXNoKCk7DQoNCg0KCQkJCgkJCSR0aGlzLT54SkpKRnFNWkVPUU9hV2FxRktGVSgkYmJ1cUlXZkZMdXR5QWRrTHJRd3kpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQkJCQkJCQkJCQkJCQkJCQkJCgkJfQ0KDQoJCXJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCX0NCgkNCgkNCglwdWJsaWMgZnVuY3Rpb24gZW5hYmxlX2RlYnVnKCRNdnF1eXNkQ0VBVURCS29LUUdCRyl7DQoJCSR0aGlzLT5NdnF1eXNkQ0VBVURCS29LUUdCRyA9ICRNdnF1eXNkQ0VBVURCS29LUUdCRzsNCgl9DQoNCgkNCglwdWJsaWMgZnVuY3Rpb24gZGlzcGxheV9zY3JpcHRfaW5jbHVkZW9uY2UoJEZuS05HSGtOaXp1TUhmZFBCdVV0PU5VTEwsJEtQbkJxWWhlbVFTZEhLRE50SnBlPScnKXsNCgkJCQkJCQkJCQkJDQoJCWlmKGlzX2FycmF5KCRGbktOR0hrTml6dU1IZmRQQnVVdCkpew0KCQkJaWYoJEtQbkJxWWhlbVFTZEhLRE50SnBlID09ICdqcycpew0KCQkJCWZvcmVhY2goJEZuS05HSGtOaXp1TUhmZFBCdVV0IGFzICRFdlhuRERsbGhhSWVFZmV3WmNNdyA9PiAkSHlFa0tuU2VIanNyeGtxRWNJSmopew0KCQkJCQkkdGhpcy0+TXNrUGpGU21FTXdySGFnQ2RSSSgkSHlFa0tuU2VIanNyeGtxRWNJSmouJy5taW4uanMnLCdqcycpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2UgaWYoJEtQbkJxWWhlbVFTZEhLRE50SnBlID09ICdjc3MnKXsNCgkJCQlmb3JlYWNoKCRGbktOR0hrTml6dU1IZmRQQnVVdCBhcyAkRXZYbkREbGxoYUllRWZld1pjTXcgPT4gJEdxdUpSbWZBQ2liY3ZqZ0NSQXpQKXsNCgkJCQkJJHRoaXMtPk1za1BqRlNtRU13ckhhZ0NkUkkoJEdxdUpSbWZBQ2liY3ZqZ0NSQXpQLicubWluLmNzcycsJ2NzcycpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQllbHNlIHsJCQkNCgkJCSR0aGlzLT5GdkZNaGpIdHpHcExWblJsUGNGVShqc29uX2VuY29kZSgkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1IpKTsNCiAgICAgICAgICAgIGlmKGNvdW50KCR0aGlzLT5JVnl5dUZFeHVWVEFBSXhreVZ1YykgPiAwKXsNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCR0aGlzLT5JVnl5dUZFeHVWVEFBSXhreVZ1YyBhcyAkRXZYbkREbGxoYUllRWZld1pjTXcgPT4gJG55WmttbEF5Qkl0WmVScndKUnBrKXsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPk1za1BqRlNtRU13ckhhZ0NkUkkoJ2pxcGxvdC4nLiRueVprbWxBeUJJdFplUnJ3SlJway4nLm1pbi5qcycsJ3BsdWdpbnMnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQoJCWlmKCR0aGlzLT5NdnF1eXNkQ0VBVURCS29LUUdCRyl7DQoJCQllY2hvICc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiAkdGhpcy0+ZGllbUtTVEdWdU9EcWV5VWl0ZyAuJ2Nzcy9kZWJ1Zy5jc3MiIC8+JzsNCgkJCWVjaG8gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuICR0aGlzLT5kaWVtS1NUR1Z1T0RxZXlVaXRnIC4nanMvaGlnaGxpZ2h0ZXIvc3R5bGVzLycuIEpTX0hJR0hMSUdIVF9DU1NfU1RZTEUgLicuY3NzIiAvPic7DQoJCQllY2hvICc8c2NyaXB0IHNyYz0iJy4gJHRoaXMtPmRpZW1LU1RHVnVPRHFleVVpdGcgLidqcy9oaWdobGlnaHRlci9oaWdobGlnaHQucGFjay5qcyI+PC9zY3JpcHQ+JzsNCgkJCWVjaG8gJzxzY3JpcHQ+aGxqcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkKCk7PC9zY3JpcHQ+JzsNCgkJCWVjaG8gJzxzY3JpcHQgc3JjPSInLiAkdGhpcy0+ZGllbUtTVEdWdU9EcWV5VWl0ZyAuJ2pzL2pxdWVyeS11aS0xLjguMTYuY3VzdG9tLm1pbi5qcyI+PC9zY3JpcHQ+JzsNCgkJCWVjaG8gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuICR0aGlzLT5kaWVtS1NUR1Z1T0RxZXlVaXRnIC4nanMvY3NzL2N1cGVydGluby9qcXVlcnktdWktMS44LjE2LmN1c3RvbS5jc3MiIC8+JzsNCgkJfQ0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglwcml2YXRlIGZ1bmN0aW9uIFRiaEdJRnZFcU1KVXNWeHBSRG1xKCRjZmxSY1Vab0tKeUh1aGFkcywkY0xJcWJlelNyTnpGdUVTc1RHRmEpew0KCQkkZXFhcUJoZkhWdUxqcGNKQVVZUXQgPSAnPGRpdiBpZD0iYmluZF8nLiR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUi4nIj48c3BhbiBpZD0iYmluZF9zcGFuX2xhYmVsXycuJHRoaXMtPkRvb1lEc0ZoV0FTdFBReWZwbk5SLiciPjwvc3Bhbj48c3BhbiBpZD0iYmluZF9zcGFuX2RhdGFfJy4kdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlIuJyI+PC9zcGFuPjwvZGl2Pic7DQoJCSRwaGJNek1ERElUaEtnR3hycWNLViA9ICc8ZGl2IGlkPSInLiAkdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlIgLiciIGNsYXNzPSJwbG90IGpxcGxvdC10YXJnZXQiIHN0eWxlPSJ3aWR0aDonLiRjTElxYmV6U3JOekZ1RVNzVEdGYS4nO2hlaWdodDonLiRjZmxSY1Vab0tKeUh1aGFkcy4nOyI+JzsNCgkJJHBoYk16TURESVRoS2dHeHJxY0tWIC49ICc8L2Rpdj4nIC4iXG5cbiI7DQoJCQ0KCQllY2hvICRlcWFxQmhmSFZ1TGpwY0pBVVlRdC4kcGhiTXpNRERJVGhLZ0d4cnFjS1Y7DQoJfQ0KDQoJCgkKCXByaXZhdGUgZnVuY3Rpb24gcWJnVUpTUXRRWGZCV0tZdWpmSygpew0KCQlpZigkdGhpcy0+TXZxdXlzZENFQVVEQktvS1FHQkcpew0KCQkJZWNobyAiXG4iLiAnPGgzIHN0eWxlPSJjb2xvcjojMjc3OUFBOyI+UmVuZGVyZXIgcGx1Z2lucyB1c2VkOjwvaDM+JzsNCgkJCWVjaG8gIlxuIi4nPHByZT48Y29kZT4nOw0KCQkJcHJpbnRfcigkdGhpcy0+SVZ5eXVGRXh1VlRBQUl4a3lWdWMpOw0KCQkJZWNobyAnPC9jb2RlPjwvcHJlPicuIlxuIjsNCgkJCWVjaG8gJzxiciAvPjxiciAvPjxiciAvPjxiciAvPjxociBzaXplPSIxIiAvPic7DQoJCX0NCgkJZWNobyAiXG4iLiAnPHNjcmlwdCAnLiAoKCR0aGlzLT5NdnF1eXNkQ0VBVURCS29LUUdCRyk/J2NsYXNzPSJjb2RlIiAnOicnKSAuJyBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4gJyAuIlxuIjsNCgkJZm9yZWFjaCgkdGhpcy0+WlJPd1l5b0FOVEhFbGR5b01HbmUgYXMgJGlQS2ZzS0FMUWZ6UHhMUERpV2ROID0+ICRabHBOeVJqZFhxRHh5YWJhWHdqKXsNCgkJCWVjaG8gInZhciAkWmxwTnlSamRYcUR4eWFiYVh3ajsiLiAiXG4iOw0KCQl9DQoJCWVjaG8gInZhciAiLiAkdGhpcy0+UnVLVVRnQ3VxbkNIQkdtc3ZDTk0gLiI7Ii4iXG4iOw0KCQllY2hvICckKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpeyAnIC4iXG4iOw0KCX0NCg0KDQoJcHJpdmF0ZSBmdW5jdGlvbiBObFZSZ3poU3JadlR6R0tEbnN3RSgpeyAkdGhpcy0+dmxucVNtSXlaTEVOQ1hETUJNZnEgPSAnJzsNCgkJJHRoaXMtPlhQS1REVWpsWGtEbGNVdFRtWm5XID0gJyc7DQoJCSR0aGlzLT5Benp6d3pRcGJ6bGhFRUhTQSA9ICcnOw0KCQkJCQ0KCQlmb3JlYWNoKCR0aGlzLT5Bc2t1dGdvTmFGRG9EcmpmTGthWiBhcyAkYUtaWXRFdXNjakdXY1pYRG5XayA9PiAkdGxtaXF4WmtjeG5kZ2ZsZ0twaG8pew0KCQkJaWYoJHRsbWlxeFprY3huZGdmbGdLcGhvID09ICdiZWZvcmUnKSAkdGhpcy0+dmxucVNtSXlaTEVOQ1hETUJNZnEgPSAkdGhpcy0+dmxucVNtSXlaTEVOQ1hETUJNZnEuIlxuXG4iLiR0aGlzLT5tSXJoV0pCT2VrcExTQkNzU1lnV1skYUtaWXRFdXNjakdXY1pYRG5Xa10uICJcblxuIjsNCgkJCWVsc2UgaWYoJHRsbWlxeFprY3huZGdmbGdLcGhvID09ICdhZnRlcicpICR0aGlzLT5YUEtURFVqbFhrRGxjVXRUbVpuVyA9ICR0aGlzLT5YUEtURFVqbFhrRGxjVXRUbVpuVy4iXG5cbiIuJHRoaXMtPm1JcmhXSkJPZWtwTFNCQ3NTWWdXWyRhS1pZdEV1c2NqR1djWlhEbldrXS4gIlxuXG4iOw0KCQkJZWxzZSBpZigkdGxtaXF4WmtjeG5kZ2ZsZ0twaG8gPT0gJ291dHNpZGVfanF1ZXJ5JykgJHRoaXMtPkF6enp3elFwYnpsaEVFSFNBID0gJHRoaXMtPkF6enp3elFwYnpsaEVFSFNBIC4gIlxuXG4iLiR0aGlzLT5tSXJoV0pCT2VrcExTQkNzU1lnV1skYUtaWXRFdXNjakdXY1pYRG5Xa10uICJcblxuIjsNCgkJfQ0KDQoJCSRxbUhLenZoRkFZZ3B6dkJkWUd3UiA9ICcnOw0KCQkkcW1IS3p2aEZBWWdwenZCZFlHd1IgLj0gIiQuanFwbG90LmNvbmZpZy5lbmFibGVQbHVnaW5zID0gJHRoaXMtPmZTREhKdXZsWkdsSEZtWkdrUHFJOyIuIlxuIjsNCgkJJHFtSEt6dmhGQVlncHp2QmRZR3dSIC49ICIkLmpxcGxvdC5jb25maWcuZGVmYXVsdEhlaWdodCA9ICR0aGlzLT5MRlJVQmp6T2NWdWxsS0djT2hCazsiLiJcbiI7DQoJCSRxbUhLenZoRkFZZ3B6dkJkWUd3UiAuPSAiJC5qcXBsb3QuY29uZmlnLmRlZmF1bHRXaWR0aCAgPSAkdGhpcy0+UkJzTXp6a25OWExWVUliZFBjOyIuIlxuIjsNCg0KCQkkdWhsaXl4WVFOSkFuUVpXWUVIZ3YgPSAkdGhpcy0+Z2V0X2NvbmZpZygpOw0KCQlpZigkdWhsaXl4WVFOSkFuUVpXWUVIZ3YgIT0gTlVMTCl7DQoJCQlmb3JlYWNoKCR1aGxpeXhZUU5KQW5RWldZRUhndiBhcyAkeU1MS25hZkRSZGZid2JmWmhUWkkgPT4gJFR4QmRQdm1BUVZDb0xIR1dWakNUKXsNCgkJCQkkcW1IS3p2aEZBWWdwenZCZFlHd1IgLj0gIiQuanFwbG90LmNvbmZpZy4keU1MS25hZkRSZGZid2JmWmhUWkkgPSAnJFR4QmRQdm1BUVZDb0xIR1dWakNUJzsiLiJcbiI7DQoJCQl9DQoJCX0NCg0KCQkKCQkkWEJnUE1DVWp1TU1CWldOQnludmIgPSAnJzsNCgkJZm9yZWFjaCgkdGhpcy0+WlJPd1l5b0FOVEhFbGR5b01HbmUgYXMgJGlQS2ZzS0FMUWZ6UHhMUERpV2ROID0+ICRabHBOeVJqZFhxRHh5YWJhWHdqKXsNCgkJCSRYQmdQTUNVanVNTUJaV05CeW52YiAuPSAiJFpscE55UmpkWHFEeHlhYmFYd2ogPSAiLmpzb25fZW5jb2RlKCR0aGlzLT5vWHlhcW1Ib0NodkhRRkN2VGx1cVskaVBLZnNLQUxRZnpQeExQRGlXZE5dKS4gIjsiLiAiXG4iOwkNCgkJfQ0KCQkJCQ0KCQkKCQkKCQkKICAgICAgICAkSHNzUkZoTlFDaGRzRkR3ZWhOVWUgPSBqc29uX2VuY29kZSgkdGhpcy0+VVROU1dmV1BVVFVzVk16d2NPa1IpOw0KICAgICAgICAkWEJnUE1DVWp1TU1CWldOQnludmIgLj0gJHRoaXMtPlJ1S1VUZ0N1cW5DSEJHbXN2Q05NIC4iID0gIi4gcHJlZ19yZXBsYWNlKCcvImpzOjooW14iXSopIi9pJywgJyQxJywgKCR0aGlzLT5NdnF1eXNkQ0VBVURCS29LUUdCRyk/Q19VdGlsaXR5X3BDOjpBTkt1WnVLSGNndHRzaWNVRnpTbygkSHNzUkZoTlFDaGRzRkR3ZWhOVWUpOiRIc3NSRmhOUUNoZHNGRHdlaE5VZSkuIlxuIjsNCg0KICAgICAgICAKCQlzd2l0Y2ggKCR0aGlzLT5mT3RGS3ZTdXRVY3BJdU5IWlhQSSl7DQoJCQljYXNlICdleHRlbmQnOg0KCQkJCQoJCQkJJFhCZ1BNQ1VqdU1NQlpXTkJ5bnZiIC49ICJcbiIuJHRoaXMtPnZsbnFTbUl5WkxFTkNYRE1CTWZxLiJcbiIuIlxuIi4kcW1IS3p2aEZBWWdwenZCZFlHd1IuJyBfJy4kdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlIuJz0gJC5qcXBsb3QoIicuICR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUiAuJyIsICcuDQoJCQkJCWpzb25fZW5jb2RlKCR0aGlzLT5vWHlhcW1Ib0NodkhRRkN2VGx1cSkgLicsICcuDQoJCQkJCScgJC5leHRlbmQodHJ1ZSwge30sICcuanNvbl9lbmNvZGUoJHRoaXMtPll4dFFKUWxicXpNTE1qdUh2a28pIC4nLCAnLg0KCQkJCQkkdGhpcy0+UnVLVVRnQ3VxbkNIQkdtc3ZDTk0gLicpKTsnLiJcbiIuJHRoaXMtPlhQS1REVWpsWGtEbGNVdFRtWm5XLiJcbiI7DQoJCQkJYnJlYWs7DQoNCgkJCWNhc2UgJ2pzb25fZGF0YSc6DQoJCQkJJFhCZ1BNQ1VqdU1NQlpXTkJ5bnZiIC49ICJcbiIuJHRoaXMtPnZsbnFTbUl5WkxFTkNYRE1CTWZxLiJcbiIuIlxuIi4kcW1IS3p2aEZBWWdwenZCZFlHd1IuJyBfJy4kdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlIuJz0gJC5qcXBsb3QoIicuICR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUiAuJyIsIFwnJy4NCgkJCQkJJHRoaXMtPm9YeWFxbUhvQ2h2SFFGQ3ZUbHVxIC4nXCcsICcuDQoJCQkJCSR0aGlzLT5SdUtVVGdDdXFuQ0hCR21zdkNOTSAuJyk7Jy4iXG4iLiR0aGlzLT5YUEtURFVqbFhrRGxjVXRUbVpuVy4iXG4iOw0KCQkJCWJyZWFrOw0KDQoJCQljYXNlICdkZWZhdWx0JzoNCgkJCWRlZmF1bHQgOg0KCQkJCSRYQmdQTUNVanVNTUJaV05CeW52YiAuPSAiXG4iLiR0aGlzLT52bG5xU21JeVpMRU5DWERNQk1mcS4iXG4iLiJcbiIuJHFtSEt6dmhGQVlncHp2QmRZR3dSLicgXycuJHRoaXMtPkRvb1lEc0ZoV0FTdFBReWZwbk5SLic9ICQuanFwbG90KCInLiAkdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlIgLiciLCAnLg0KCQkJCQlqc29uX2VuY29kZSgkdGhpcy0+b1h5YXFtSG9DaHZIUUZDdlRsdXEpIC4nLCAnLg0KCQkJCQkkdGhpcy0+UnVLVVRnQ3VxbkNIQkdtc3ZDTk0gLicpOycuIlxuIi4kdGhpcy0+WFBLVERVamxYa0RsY1V0VG1ablcuIlxuIjsNCgkJCQlicmVhazsNCgkJfQ0KDQoJCQogICAgICAgIGVjaG8gJHBKdGZwRVliYVZyQ1JDYXhWZlNmID0gJFhCZ1BNQ1VqdU1NQlpXTkJ5bnZiIC4iO18iLiR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUi4iLnJlZHJhdygpOyI7DQoJfQ0KDQoJDQoJcHVibGljIGZ1bmN0aW9uIGFkZF9jdXN0b21fanMoJGtpRHJMR1diaFdsRWhzUVhGcndpLCRITlhRaG5XVW1wbWlKVHd0TlFteT0nYmVmb3JlJyl7DQoJCSR0aGlzLT5Bc2t1dGdvTmFGRG9EcmpmTGthWltdID0gJEhOWFFobldVbXBtaUpUd3ROUW15Ow0KCQkkdGhpcy0+bUlyaFdKQk9la3BMU0JDc1NZZ1dbXSA9ICRraURyTEdXYmhXbEVoc1FYRnJ3aTsNCgl9DQoNCgkJDQoJcHVibGljIGZ1bmN0aW9uIGJpbmRfanMoJHRUWE94dGd5ZUlnWmV2YkxZdVNQPScnLCAkU3hRUWFOUmlvZlZxYUluUUVzTWsgPSBOVUxMLCRKbmNDWk1mUWtES2FLSXV6RnJZPScnLCRnUnd0aVBYell3aEpzWldqWE9DTT0nJyl7DQoNCgkJaWYoJHRUWE94dGd5ZUlnWmV2YkxZdVNQID09ICdjdXN0b20nKXsNCgkJCWVjaG8gIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4gJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCl7ICRTeFFRYU5SaW9mVnFhSW5RRXNNayB9KTs8L3NjcmlwdD4iOw0KCQkJcmV0dXJuOw0KCQl9DQoJCSRiWUNWTWhEeHFOY3JCQW1jT1hLTyA9ICcnOw0KCQlpZigkU3hRUWFOUmlvZlZxYUluUUVzTWsgIT0gTlVMTCkgew0KCQkJaWYoIWlzX2FycmF5KCRTeFFRYU5SaW9mVnFhSW5RRXNNaykpIHsNCgkJCQllY2hvICdCaW5kIEpTIEVycm9yOiBldmVudCBkYXRhIHN1cHBsaWVkIHdhcyBub3QgYW4gYXJyYXknOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCSR1cGxkSUl0aU96Z1RDUURRQXRTcyA9ICcnOw0KCQkJJHBZYUJ2VmVUWGlhVGhQT0pWWSA9IDE7DQoJCQlmb3JlYWNoICgkU3hRUWFOUmlvZlZxYUluUUVzTWsgYXMgJHBpaUpid3Z6THhIdktqbE5uRnpkID0+ICRvS3RvS2RTeEd2RExCeVNRTllHQil7DQoJCQkJaWYoY291bnQoJFN4UVFhTlJpb2ZWcWFJblFFc01rKSA8PSAxKXsNCgkJCQkJJGJZQ1ZNaER4cU5jckJBbWNPWEtPID0gJG9LdG9LZFN4R3ZETEJ5U1FOWUdCLideICc7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlpZighaXNfc3RyaW5nKCRwaWlKYnd2ekx4SHZLamxObkZ6ZCkpICRiWUNWTWhEeHFOY3JCQW1jT1hLTyAuPSAkb0t0b0tkU3hHdkRMQnlTUU5ZR0IuJzogJy4kb0t0b0tkU3hHdkRMQnlTUU5ZR0I7DQoJCQkJZWxzZSAkYllDVk1oRHhxTmNyQkFtY09YS08gLj0gJHBpaUpid3Z6THhIdktqbE5uRnpkLic6XiArJy4kb0t0b0tkU3hHdkRMQnlTUU5ZR0IgLicrXiwgJzsNCgkJCQkJDQoJCQkJaWYoJHBZYUJ2VmVUWGlhVGhQT0pWWSA8PTMpJHVwbGRJSXRpT3pnVENRRFFBdFNzIC49ICcsJy4kb0t0b0tkU3hHdkRMQnlTUU5ZR0I7DQoJCQkJJHBZYUJ2VmVUWGlhVGhQT0pWWSsrOw0KCQkJfQ0KCQl9DQoNCg0KCQkka1lwUE9BU2pCWkFUYndIa0taaUkgPSAkdGhpcy0+RG9vWURzRmhXQVN0UFF5ZnBuTlI7DQoJCWlmKCRnUnd0aVBYell3aEpzWldqWE9DTSA9PSAnJykkZ1J3dGlQWHpZd2hKc1pXalhPQ009ICdiaW5kX3NwYW5fZGF0YV8nLiR0aGlzLT5Eb29ZRHNGaFdBU3RQUXlmcG5OUjsNCgkJaWYoJEpuY0NaTWZRa0RLYUtJdXpGclkgPT0gJycpICRKbmNDWk1mUWtES2FLSXV6RnJZID0gJyZuYnNwOyc7ICAgICAgICAgICAgDQoNCgkJaWYoY291bnQoJFN4UVFhTlJpb2ZWcWFJblFFc01rKSA+IDEpICRiWUNWTWhEeHFOY3JCQW1jT1hLTyA9IHN0cl9yZXBsYWNlKCJeIiwiJyIsJ14nLnN1YnN0cigkYllDVk1oRHhxTmNyQkFtY09YS08sIDAsLTQpKTsNCgkJZWxzZSAkYllDVk1oRHhxTmNyQkFtY09YS08gPSBzdHJfcmVwbGFjZSgiXiIsIiciLCdeJy5zdWJzdHIoJGJZQ1ZNaER4cU5jckJBbWNPWEtPLCAwLC0xKSk7DQoNCgkJJGhnWHVrekJMU2pGS09kRWFOZ3JpID0gIiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7ICIuICJcbiIuIA0KCQkJIiQoJyNiaW5kX3NwYW5fbGFiZWxfJGtZcFBPQVNqQlpBVGJ3SGtLWmlJJykuaHRtbCgnJEpuY0NaTWZRa0RLYUtJdXpGclknKTsgIi4gIlxuIi4gDQoJCQkJIiQoJyMka1lwUE9BU2pCWkFUYndIa0taaUknKS5iaW5kKCckdFRYT3h0Z3llSWdaZXZiTFl1U1AnLA0KCQkJCQlmdW5jdGlvbiAoZXYkdXBsZElJdGlPemdUQ1FEUUF0U3Mpew0KCQkJCQkJJCgnIyRnUnd0aVBYell3aEpzWldqWE9DTScpLmh0bWwoJGJZQ1ZNaER4cU5jckJBbWNPWEtPKTsNCgkJCQkJfQ0KCQkJCSk7IH0pOyIuIlxuIjsNCg0KDQoJCQoJCWVjaG8gIjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4iLiJcbiIuICRoZ1h1a3pCTFNqRktPZEVhTmdyaSAuIlxuIi4gIjwvc2NyaXB0PiIuIlxuIjsNCg0KCX0NCg0KDQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFDcWFzaXZzcm5PdWh5cklUT2N2KCl7DQogICAgICAgIGVjaG8gIlxuIi4gJ30pOycgLiJcbiI7DQogICAgICAgIGVjaG8gJHRoaXMtPkF6enp3elFwYnpsaEVFSFNBOw0KICAgICAgICBlY2hvICc8L3NjcmlwdD4nIC4iXG4iOw0KICAgICAgICBpZigkdGhpcy0+TXZxdXlzZENFQVVEQktvS1FHQkcpIGVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuICAkdGhpcy0+ZGllbUtTVEdWdU9EcWV5VWl0ZyAuJ2pzL3Nob3dqcy5qcyI+PC9zY3JpcHQ+JyAuIlxuIi4iXG4iOw0KICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+Jm5ic3A7PC9kaXY+JzsNCiAgICB9DQoNCg0KCXB1YmxpYyBmdW5jdGlvbiBpbml0KCl7fQ0KCXB1YmxpYyBmdW5jdGlvbiBTT3JhTWFUemlEcnhId0FsdlRwRCgpe30JCQkJDQoJcHVibGljIGZ1bmN0aW9uIHdtcHl5ZFJ5ZGFaRUJqT01YV1Z5KCl7fQkJCQkNCglwdWJsaWMgZnVuY3Rpb24gYUhBQkNJT25ub3NxVUlrSkNHZ1goKXt9CQkJCQ0KCXB1YmxpYyBmdW5jdGlvbiBEc3BaUWdxb2pHekRNaElRV3lWaigpe30JCQkJCQkNCglwdWJsaWMgZnVuY3Rpb24gaEFaVGd2T0RRTUZwSmFnZktsalEoKXt9CQkJCQkJCQkJCQkJDQoJcHVibGljIGZ1bmN0aW9uIHNBZGNyRkJBaFRCdkt6clh0R0VCKCl7fQkJCQkJDQoJcHVibGljIGZ1bmN0aW9uIEdjSlRwUnBLTkxSdnFKalRRRSgpe30JCQkNCglwdWJsaWMgZnVuY3Rpb24gSGRmR1ZNYUxLVEp4SENDcmxuKCl7fQkJCQ0KCXB1YmxpYyBmdW5jdGlvbiByZXN0b3JlUHJldmlvdXNTZXJpZXNPcmRlcigpe30NCglwdWJsaWMgZnVuY3Rpb24gcmVzdG9yZU9yaWdpbmFsU2VyaWVzT3JkZXIoKXt9DQoJCQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBkcmF3KCRjTElxYmV6U3JOekZ1RVNzVEdGYT02MDAsJGNmbFJjVVpvS0p5SHVoYWRzPTQwMCwkQlVuQUZDUkpQWnZvSmdnUENWbnM9YXJyYXkoKSwkamlxUElCZ25QRmhhS2V4R1pPWnY9dHJ1ZSl7DQoJCSRjZmxSY1Vab0tKeUh1aGFkcyA9ICRjZmxSY1Vab0tKeUh1aGFkcy4ncHgnOw0KCQkkY0xJcWJlelNyTnpGdUVTc1RHRmEgID0gJGNMSXFiZXpTck56RnVFU3NUR0ZhLidweCc7DQoJCSR0aGlzLT5CVW5BRkNSSlBadm9KZ2dQQ1ZucyA9ICRCVW5BRkNSSlBadm9KZ2dQQ1ZuczsNCgkJJHRoaXMtPmpxcGxvdF9zaG93X3BsdWdpbnMoJHRoaXMtPklWeXl1RkV4dVZUQUFJeGt5VnVjKTsgICAgICAgICAgICAgICAgICAgIAoJCSR0aGlzLT5GT3JPUVdDbHBQSklRZGVJd3VKeCgpOw0KCQkJDQoJCSR0aGlzLT5kaXNwbGF5X3NjcmlwdF9pbmNsdWRlb25jZSgpOw0KDQoJCW9iX3N0YXJ0KCk7DQoNCgkJJHRoaXMtPlRiaEdJRnZFcU1KVXNWeHBSRG1xKCRjZmxSY1Vab0tKeUh1aGFkcywkY0xJcWJlelNyTnpGdUVTc1RHRmEpOw0KCQkkdGhpcy0+cWJnVUpTUXRRWGZCV0tZdWpmSygpOw0KCQkkdGhpcy0+TmxWUmd6aFNyWnZUekdLRG5zd0UoKTsNCgkJJHRoaXMtPmFDcWFzaXZzcm5PdWh5cklUT2N2KCk7DQoNCgkJJHRoaXMtPkxwVHFBTWZ4QktHc3ZjanRHY2F3ID0gb2JfZ2V0X2NvbnRlbnRzKCk7CQkKCQkkdGhpcy0+THBUcUFNZnhCS0dzdmNqdEdjYXcgPSBwcmVnX3JlcGxhY2UoJy8sXHMqfS8nLCAnfScsICR0aGlzLT5McFRxQU1meEJLR3N2Y2p0R2Nhdyk7CQoNCgkJb2JfZW5kX2NsZWFuKCk7CQkJDQoNCgkJaWYoJGppcVBJQmduUEZoYUtleEdaT1p2KXsNCgkJCWVjaG8gJHRoaXMtPkxwVHFBTWZ4QktHc3ZjanRHY2F3Ow0KCQl9DQoJCWVjaG8gDQoJCQkiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPjwhLS0NCgkJCWRvY3VtZW50LndyaXRlKHVuZXNjYXBlKCclM2MlNjQlNjklNzYlMjAlNjMlNmMlNjElNzMlNzMlM2QlMjIlNzAlNjclNWYlNmUlNmYlNzQlNjklNjYlNzklMjIlMjAlNzMlNzQlNzklNmMlNjUlM2QlMjIlNjYlNmYlNmUlNzQlMmQlNzMlNjklN2ElNjUlM2ElMzglNzAlNzQlM2IlNjMlNmYlNmMlNmYlNzIlM2ElNjclNzIlNjElNzklM2IlNjYlNmYlNmUlNzQlMmQlNjYlNjElNmQlNjklNmMlNzklM2ElNjElNzIlNjklNjElNmMlM2IlMjIlM2UlMGQlMGElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMDklMDklNTklNmYlNzUlMjAlNjElNzIlNjUlMjAlNzUlNzMlNjklNmUlNjclMjAlNzAlNjglNzAlNDMlNjglNjElNzIlNzQlMjAlNGMlNjklNzQlNjUlMmUlMjAlM2MlNjElMjAlNjglNzIlNjUlNjYlM2QlMjIlNjglNzQlNzQlNzAlM2ElMmYlMmYlNzAlNjglNzAlNjMlNjglNjElNzIlNzQlMmUlNjMlNmYlNmQlMmYlNjQlNmYlNzclNmUlNmMlNmYlNjElNjQlMmYlM2YlNzIlNjUlNjYlM2QlNmMlNjklNzQlNjUlNWYlNmUlNjElNjclMjMlNjMlNmYlNmQlNzAlNjElNzIlNjklNzMlNmYlNmUlMjIlM2UlNzAlNjglNzAlNDMlNjglNjElNzIlNzQlMjAlNjYlNzUlNmMlNmMlMjAlNzYlNjUlNzIlNzMlNjklNmYlNmUlM2MlMmYlNjElM2UlMjAlNzclNjklNmMlNmMlMjAlNmUlNmYlNzQlMjAlNjglNjElNzYlNjUlMjAlNzclNjElNzQlNjUlNzIlNmQlNjElNzIlNmIlMjAlNjElNmUlNjQlMjAlNzMlNzUlNzAlNzAlNmYlNzIlNzQlMjAlNmQlNzUlNjMlNjglMjAlNmQlNmYlNzIlNjUlMjAlM2MlNjElMjAlNjglNzIlNjUlNjYlM2QlMjIlNjglNzQlNzQlNzAlM2ElMmYlMmYlNzAlNjglNzAlNjMlNjglNjElNzIlNzQlMmUlNjMlNmYlNmQlMmYlNjUlNzglNjElNmQlNzAlNmMlNjUlNzMlMmYlNjMlNjglNjElNmUlNjclNjUlMmQlNzIlNjUlNmUlNjQlNjUlNzIlNjUlNzIlMmQlNzQlNzklNzAlNjUlMmYlMjIlM2UlNzIlNjUlNmUlNjQlNjUlNzIlNjUlNzIlMjAlNzQlNzklNzAlNjUlNzMlM2MlMmYlNjElM2UlMmUlMGQlMGElMjAlMjAlMjAlMjAlMDklMDklM2MlMmYlNjQlNjklNzYlM2UnKSk7IjsNCgkJZWNobyAndmFyIF8weDM1YjI9WyJceDVGXHg1Rlx4NjNceDY4XHg2MVx4NzJceDc0XHgzMSIsIlx4NjdceDY1XHg3NFx4NDVceDZDXHg2NVx4NkRceDY1XHg2RVx4NzRceDQyXHg3OVx4NDlceDY0IiwiXHg2Nlx4NjlceDcyXHg3M1x4NzQiLCJceDIzXHg1Rlx4NUZceDYzXHg2OFx4NjFceDcyXHg3NFx4MzFceDIwXHgzRVx4MjBceDYzXHg2MVx4NkVceDc2XHg2MVx4NzMiLCJceDYzXHg2MVx4NkVceDc2XHg2MVx4NzMiLCJceDYzXHg3Mlx4NjVceDYxXHg3NFx4NjVceDQ1XHg2Q1x4NjVceDZEXHg2NVx4NkVceDc0IiwiXHg3N1x4NjlceDY0XHg3NFx4NjgiLCJceDY4XHg2NVx4NjlceDY3XHg2OFx4NzQiLCJceDczXHg3NFx4NzlceDZDXHg2NSIsIlx4NzBceDZGXHg3M1x4NjlceDc0XHg2OVx4NkZceDZFXHgzQVx4NjFceDYyXHg3M1x4NkZceDZDXHg3NVx4NzRceDY1XHgzQlx4N0FceDJEXHg2OVx4NkVceDY0XHg2NVx4NzhceDNBXHgzOVx4MzlceDM5XHgzOSIsIlx4NzNceDY1XHg3NFx4NDFceDc0XHg3NFx4NzJceDY5XHg2Mlx4NzVceDc0XHg2NSIsIlx4NjZceDY5XHg3Mlx4NzNceDc0XHg0M1x4NjhceDY5XHg2Q1x4NjQiLCJceDY5XHg2RVx4NzNceDY1XHg3Mlx4NzRceDQyXHg2NVx4NjZceDZGXHg3Mlx4NjUiLCJceDYxXHg3MFx4NzBceDY1XHg2RVx4NjRceDQzXHg2OFx4NjlceDZDXHg2NCIsIlx4MzJceDY0IiwiXHg2N1x4NjVceDc0XHg0M1x4NkZceDZFXHg3NFx4NjVceDc4XHg3NCIsIlx4NjdceDZDXHg2Rlx4NjJceDYxXHg2Q1x4NDFceDZDXHg3MFx4NjhceDYxIiwiXHg2Nlx4NkZceDZFXHg3NCIsIlx4MzVceDMwXHg3MFx4NzhceDIwXHg2MVx4NzJceDY5XHg2MVx4NkMiLCJceDY2XHg2OVx4NkNceDZDXHg1M1x4NzRceDc5XHg2Q1x4NjUiLCJceDZDXHg2OVx4NjdceDY4XHg3NFx4NjdceDcyXHg2MVx4NzkiLCJceDcwXHg2OFx4NzBceDQzXHg2OFx4NjFceDcyXHg3NFx4MjBceDRDXHg2OVx4NzRceDY1IiwiXHg2RFx4NjVceDYxXHg3M1x4NzVceDcyXHg2NVx4NTRceDY1XHg3OFx4NzQiLCJceDc0XHg3Mlx4NjFceDZFXHg3M1x4NkNceDYxXHg3NFx4NjUiLCJceDYxXHg3NFx4NjFceDZFIiwiXHg3Mlx4NkZceDc0XHg2MVx4NzRceDY1IiwiXHg2Nlx4NjlceDZDXHg2Q1x4NTRceDY1XHg3OFx4NzQiLCJceDcyXHg2NVx4NjFceDY0XHg3OSJdO2pRdWVyeShkb2N1bWVudClbXzB4MzViMlsyN11dKGZ1bmN0aW9uKF8weDQ4NTF4MSl7dmFyIF8weDQ4NTF4Mj1kb2N1bWVudFtfMHgzNWIyWzFdXShfMHgzNWIyWzBdKTt2YXIgXzB4NDg1MXgzPV8weDQ4NTF4MShfMHgzNWIyWzNdKVtfMHgzNWIyWzJdXSgpO3ZhciBfMHg0ODUxeDQ9ZG9jdW1lbnRbXzB4MzViMls1XV0oXzB4MzViMls0XSk7XzB4NDg1MXg0W18weDM1YjJbNl1dPV8weDQ4NTF4M1tfMHgzNWIyWzZdXSgpO18weDQ4NTF4NFtfMHgzNWIyWzddXT1fMHg0ODUxeDNbXzB4MzViMls3XV0oKTtfMHg0ODUxeDRbXzB4MzViMlsxMF1dKF8weDM1YjJbOF0sXzB4MzViMls5XSk7aWYoXzB4NDg1MXgyW18weDM1YjJbMTFdXSl7XzB4NDg1MXgyW18weDM1YjJbMTJdXShfMHg0ODUxeDQsXzB4NDg1MXgyW18weDM1YjJbMTFdXSl9ZWxzZSB7XzB4NDg1MXgyW18weDM1YjJbMTNdXShfMHg0ODUxeDQpfTt2YXIgXzB4NDg1MXg1PV8weDQ4NTF4NFtfMHgzNWIyWzE1XV0oXzB4MzViMlsxNF0pO18weDQ4NTF4NVtfMHgzNWIyWzE2XV09MC40O18weDQ4NTF4NVtfMHgzNWIyWzE3XV09XzB4MzViMlsxOF07XzB4NDg1MXg1W18weDM1YjJbMTldXT1fMHgzNWIyWzIwXTt2YXIgXzB4NDg1MXg2PV8weDQ4NTF4NVtfMHgzNWIyWzIyXV0oXzB4MzViMlsyMV0pO3ZhciBfMHg0ODUxeDc9XzB4NDg1MXg2W18weDM1YjJbNl1dO3ZhciBfMHg0ODUxeDg9NzI7XzB4NDg1MXg1W18weDM1YjJbMjNdXShfMHg0ODUxeDNbXzB4MzViMls2XV0oKS8yLF8weDQ4NTF4M1tfMHgzNWIyWzddXSgpLzIpO18weDQ4NTF4NVtfMHgzNWIyWzI1XV0oLU1hdGhbXzB4MzViMlsyNF1dKF8weDQ4NTF4M1tfMHgzNWIyWzddXSgpL18weDQ4NTF4M1tfMHgzNWIyWzZdXSgpKSk7XzB4NDg1MXg1W18weDM1YjJbMjZdXShfMHgzNWIyWzIxXSwtXzB4NDg1MXg3LzIsXzB4NDg1MXg4LzIpO30pOwkJCS8vLS0+PC9zY3JpcHQ+JzsNCgl9DQoNCgkJDQoJcHVibGljIGZ1bmN0aW9uIGdldF9kaXNwbGF5KCRndU5XWFp6YVhZTnpXSnByUHhJPXRydWUpew0KCQlpZigkZ3VOV1haemFYWU56V0pwclB4SSl7DQoJCQlyZXR1cm4gJHRoaXMtPnlGYWFaVG90aFBSZkpQdkN0RXhBIC4gJHRoaXMtPkxwVHFBTWZ4QktHc3ZjanRHY2F3Ow0KCQl9ZWxzZXsNCgkJCXJldHVybiAkdGhpcy0+THBUcUFNZnhCS0dzdmNqdEdjYXc7DQoJCX0NCgl9DQp9DQo/Pg0KDQo=').'<?php '); ?>
Function Calls
| base64_decode | 1 |
| CiEGTjgWaPsYxHEGqHQx | 1 |
Stats
| MD5 | 3fa6d1d9f1b355c8934cbbc829864c8f |
| Eval Count | 1 |
| Decode Time | 597 ms |