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 @eval("?>".base64_decode("PD9waHAKc2Vzc2lvbl9zdGFydCgpOwpyZXF1aXJlX29uY2UoImNvbnRyb2..
Decoded Output download
?>b'<?php
session_start();
require_once("controles/conexao.php");
require_once("cabecalho.php");
global $conexao;
// Configuraes do banco de dados
$mysqlUserName = \'iptvbrpainel\';
$mysqlPassword = \'#1997play#\';
$mysqlHostName = \'localhost\';
$DbName = \'iptvbrpainel\';
$backup_dir = \'BACKUP_DIR/\';
// Inicializa varivel de resultado de restaurao
$restore_result = \'\';
if ($_SERVER[\'REQUEST_METHOD\'] === \'POST\') {
$action = $_POST[\'action\'] ?? \'\';
if ($action === \'backup\') {
$backup_name = $DbName . "_Backup_" . date(\'d-m-Y_H-i-s\') . ".sql";
Export_Database($mysqlHostName, $mysqlUserName, $mysqlPassword, $DbName, $backup_name, $backup_dir);
} elseif ($action === \'restore\') {
$selected_file = basename($_POST[\'backup_file\'] ?? \'\');
$file_path = $backup_dir . $selected_file;
$restore_result = file_exists($file_path) ? Restore_Database($file_path) : "O arquivo selecionado no existe.";
}
}
function Export_Database($host, $user, $pass, $name, $backup_name, $backup_dir) {
$mysqli = new mysqli($host, $user, $pass, $name);
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$mysqli->query("SET NAMES \'utf8\'");
$queryTables = $mysqli->query(\'SHOW TABLES\');
$target_tables = [];
while ($row = $queryTables->fetch_row()) {
$target_tables[] = $row[0];
}
$content = "";
foreach ($target_tables as $table) {
$result = $mysqli->query(\'SELECT * FROM \' . $table);
$fields_amount = $result->field_count;
$rows_num = $mysqli->affected_rows;
$res = $mysqli->query(\'SHOW CREATE TABLE \' . $table);
$TableMLine = $res->fetch_row();
$create_table_query = str_replace(\'CREATE TABLE\', \'CREATE TABLE IF NOT EXISTS\', $TableMLine[1]);
$content .= "
" . $create_table_query . ";
";
for ($i = 0, $st_counter = 0; $i < $fields_amount; $i++, $st_counter = 0) {
while ($row = $result->fetch_row()) {
if ($st_counter % 100 === 0 || $st_counter === 0) {
$content .= "
INSERT INTO " . $table . " VALUES";
}
$content .= "
(";
for ($j = 0; $j < $fields_amount; $j++) {
$row[$j] = str_replace("
", "\n", addslashes($row[$j]));
$content .= isset($row[$j]) ? \'"\' . $row[$j] . \'"\' : \'""\';
if ($j < ($fields_amount - 1)) {
$content .= \',\';
}
}
$content .= ")";
if ((($st_counter + 1) % 100 === 0 && $st_counter !== 0) || $st_counter + 1 === $rows_num) {
$content .= ";";
} else {
$content .= ",";
}
$st_counter++;
}
}
$content .= "
";
}
if (!file_exists($backup_dir)) {
mkdir($backup_dir, 0755, true);
}
$file_path = $backup_dir . $backup_name;
file_put_contents($file_path, $content);
header(\'Content-Type: application/octet-stream\');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . $backup_name . "\"");
echo $content;
exit;
}
function Restore_Database($file_path) {
$mysqli = new mysqli($GLOBALS[\'mysqlHostName\'], $GLOBALS[\'mysqlUserName\'], $GLOBALS[\'mysqlPassword\'], $GLOBALS[\'DbName\']);
if ($mysqli->connect_error) {
return "Connection failed: " . $mysqli->connect_error;
}
$content = file_get_contents($file_path);
$content = preg_replace(\'/CREATE TABLE `(.+?)`/\', \'DROP TABLE IF EXISTS `$1`; CREATE TABLE `$1`\', $content);
if ($mysqli->multi_query($content)) {
do {
if ($result = $mysqli->store_result()) {
$result->free();
}
} while ($mysqli->more_results() && $mysqli->next_result());
$mysqli->close();
return "Restaurao concluda com sucesso.";
} else {
$mysqli->close();
return "Erro na restaurao: " . $mysqli->error;
}
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Backup e Restaurao</title>
<style>
body {
font-family: \'Arial\', sans-serif;
background: linear-gradient(135deg, #f5f7fa, #c3cfe2);
margin: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
color: #333;
}
.container {
background: #fff;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
padding: 40px;
width: 90%;
max-width: 400px;
text-align: center;
border: 1px solid #ddd;
}
h1 {
margin-bottom: 20px;
font-size: 26px;
color: #007bff;
}
form {
margin-bottom: 20px;
}
button {
padding: 12px 20px;
font-size: 16px;
cursor: pointer;
background-color: #007bff;
color: #fff;
border: none;
border-radius: 6px;
transition: background-color 0.3s, transform 0.2s;
margin-top: 10px;
width: 100%;
}
button:hover {
background-color: #0056b3;
transform: scale(1.03);
}
select {
padding: 10px;
font-size: 16px;
border-radius: 6px;
border: 1px solid #ccc;
margin-bottom: 15px;
width: 100%;
box-sizing: border-box;
}
.alert {
padding: 12px;
margin-top: 15px;
border-radius: 6px;
color: #fff;
display: inline-block;
width: 100%;
box-sizing: border-box;
opacity: 0.9;
}
.success {
background-color: #28a745;
}
.error {
background-color: #dc3545;
}
</style>
<script>
function showAlert(message, type) {
const alertBox = document.createElement(\'div\');
alertBox.className = \'alert \' + type;
alertBox.textContent = message;
document.querySelector(\'.container\').appendChild(alertBox);
setTimeout(() => alertBox.remove(), 5000);
}
</script>
</head>
<body>
<div class="container">
<h1>Backup e Restaurao</h1>
<!-- Formulrio para criar backup -->
<form method="post" action="">
<input type="hidden" name="action" value="backup">
<button type="submit">Criar Backup</button>
</form>
<hr>
<!-- Formulrio para restaurar backup -->
<form method="post" action="">
<input type="hidden" name="action" value="restore">
<label for="backup_file">Escolha o arquivo de backup:</label>
<select name="backup_file" id="backup_file">
<option value="" disabled selected>Escolha um arquivo para a restaurao</option>
<?php
if (is_dir($backup_dir)) {
$files = array_diff(scandir($backup_dir), array(\'..\', \'.\'));
$backup_files = array_filter($files, function($file) {
return pathinfo($file, PATHINFO_EXTENSION) === \'sql\';
});
if (count($backup_files) > 0) {
foreach ($backup_files as $file) {
echo "<option value=\"$file\">$file</option>";
}
} else {
echo "<option value=\"\">Nenhum arquivo de backup encontrado</option>";
}
} else {
echo "<option value=\"\">Nenhum diretrio encontrado</option>";
}
?>
</select>
<button type="submit">Restaurar</button>
</form>
<!-- Mensagem de sucesso ou erro -->
<?php if ($restore_result): ?>
<script>
showAlert("<?php echo $restore_result; ?>", "<?php echo strpos($restore_result, \'Erro\') !== false ? \'error\' : \'success\'; ?>");
</script>
<?php endif; ?>
</div>
</body>
</html>
'
Did this file decode correctly?
Original Code
<?php @eval("?>".base64_decode("PD9waHAKc2Vzc2lvbl9zdGFydCgpOwpyZXF1aXJlX29uY2UoImNvbnRyb2xlcy9jb25leGFvLnBocCIpOwpyZXF1aXJlX29uY2UoImNhYmVjYWxoby5waHAiKTsKZ2xvYmFsICRjb25leGFvOwoKLy8gQ29uZmlndXJhw6fDtWVzIGRvIGJhbmNvIGRlIGRhZG9zCiRteXNxbFVzZXJOYW1lID0gJ2lwdHZicnBhaW5lbCc7CiRteXNxbFBhc3N3b3JkID0gJyMxOTk3cGxheSMnOwokbXlzcWxIb3N0TmFtZSA9ICdsb2NhbGhvc3QnOwokRGJOYW1lID0gJ2lwdHZicnBhaW5lbCc7CiRiYWNrdXBfZGlyID0gJ0JBQ0tVUF9ESVIvJzsKCi8vIEluaWNpYWxpemEgdmFyacOhdmVsIGRlIHJlc3VsdGFkbyBkZSByZXN0YXVyYcOnw6NvCiRyZXN0b3JlX3Jlc3VsdCA9ICcnOwoKaWYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09PSAnUE9TVCcpIHsKICAgICRhY3Rpb24gPSAkX1BPU1RbJ2FjdGlvbiddID8/ICcnOwoKICAgIGlmICgkYWN0aW9uID09PSAnYmFja3VwJykgewogICAgICAgICRiYWNrdXBfbmFtZSA9ICREYk5hbWUgLiAiX0JhY2t1cF8iIC4gZGF0ZSgnZC1tLVlfSC1pLXMnKSAuICIuc3FsIjsKICAgICAgICBFeHBvcnRfRGF0YWJhc2UoJG15c3FsSG9zdE5hbWUsICRteXNxbFVzZXJOYW1lLCAkbXlzcWxQYXNzd29yZCwgJERiTmFtZSwgJGJhY2t1cF9uYW1lLCAkYmFja3VwX2Rpcik7CiAgICB9IGVsc2VpZiAoJGFjdGlvbiA9PT0gJ3Jlc3RvcmUnKSB7CiAgICAgICAgJHNlbGVjdGVkX2ZpbGUgPSBiYXNlbmFtZSgkX1BPU1RbJ2JhY2t1cF9maWxlJ10gPz8gJycpOwogICAgICAgICRmaWxlX3BhdGggPSAkYmFja3VwX2RpciAuICRzZWxlY3RlZF9maWxlOwogICAgICAgICRyZXN0b3JlX3Jlc3VsdCA9IGZpbGVfZXhpc3RzKCRmaWxlX3BhdGgpID8gUmVzdG9yZV9EYXRhYmFzZSgkZmlsZV9wYXRoKSA6ICJPIGFycXVpdm8gc2VsZWNpb25hZG8gbsOjbyBleGlzdGUuIjsKICAgIH0KfQoKZnVuY3Rpb24gRXhwb3J0X0RhdGFiYXNlKCRob3N0LCAkdXNlciwgJHBhc3MsICRuYW1lLCAkYmFja3VwX25hbWUsICRiYWNrdXBfZGlyKSB7CiAgICAkbXlzcWxpID0gbmV3IG15c3FsaSgkaG9zdCwgJHVzZXIsICRwYXNzLCAkbmFtZSk7IAogICAgaWYgKCRteXNxbGktPmNvbm5lY3RfZXJyb3IpIHsKICAgICAgICBkaWUoIkNvbm5lY3Rpb24gZmFpbGVkOiAiIC4gJG15c3FsaS0+Y29ubmVjdF9lcnJvcik7CiAgICB9CiAgICAKICAgICRteXNxbGktPnF1ZXJ5KCJTRVQgTkFNRVMgJ3V0ZjgnIik7CgogICAgJHF1ZXJ5VGFibGVzID0gJG15c3FsaS0+cXVlcnkoJ1NIT1cgVEFCTEVTJyk7CiAgICAkdGFyZ2V0X3RhYmxlcyA9IFtdOwogICAgd2hpbGUgKCRyb3cgPSAkcXVlcnlUYWJsZXMtPmZldGNoX3JvdygpKSB7CiAgICAgICAgJHRhcmdldF90YWJsZXNbXSA9ICRyb3dbMF07CiAgICB9CgogICAgJGNvbnRlbnQgPSAiIjsKICAgIGZvcmVhY2ggKCR0YXJnZXRfdGFibGVzIGFzICR0YWJsZSkgewogICAgICAgICRyZXN1bHQgPSAkbXlzcWxpLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnIC4gJHRhYmxlKTsKICAgICAgICAkZmllbGRzX2Ftb3VudCA9ICRyZXN1bHQtPmZpZWxkX2NvdW50OwogICAgICAgICRyb3dzX251bSA9ICRteXNxbGktPmFmZmVjdGVkX3Jvd3M7CiAgICAgICAgJHJlcyA9ICRteXNxbGktPnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSAnIC4gJHRhYmxlKTsKICAgICAgICAkVGFibGVNTGluZSA9ICRyZXMtPmZldGNoX3JvdygpOwogICAgICAgICRjcmVhdGVfdGFibGVfcXVlcnkgPSBzdHJfcmVwbGFjZSgnQ1JFQVRFIFRBQkxFJywgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTJywgJFRhYmxlTUxpbmVbMV0pOwogICAgICAgICRjb250ZW50IC49ICJcblxuIiAuICRjcmVhdGVfdGFibGVfcXVlcnkgLiAiO1xuXG4iOwoKICAgICAgICBmb3IgKCRpID0gMCwgJHN0X2NvdW50ZXIgPSAwOyAkaSA8ICRmaWVsZHNfYW1vdW50OyAkaSsrLCAkc3RfY291bnRlciA9IDApIHsKICAgICAgICAgICAgd2hpbGUgKCRyb3cgPSAkcmVzdWx0LT5mZXRjaF9yb3coKSkgewogICAgICAgICAgICAgICAgaWYgKCRzdF9jb3VudGVyICUgMTAwID09PSAwIHx8ICRzdF9jb3VudGVyID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gIlxuSU5TRVJUIElOVE8gIiAuICR0YWJsZSAuICIgVkFMVUVTIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRjb250ZW50IC49ICJcbigiOwogICAgICAgICAgICAgICAgZm9yICgkaiA9IDA7ICRqIDwgJGZpZWxkc19hbW91bnQ7ICRqKyspIHsKICAgICAgICAgICAgICAgICAgICAkcm93WyRqXSA9IHN0cl9yZXBsYWNlKCJcbiIsICJcXG4iLCBhZGRzbGFzaGVzKCRyb3dbJGpdKSk7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gaXNzZXQoJHJvd1skal0pID8gJyInIC4gJHJvd1skal0gLiAnIicgOiAnIiInOwogICAgICAgICAgICAgICAgICAgIGlmICgkaiA8ICgkZmllbGRzX2Ftb3VudCAtIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50IC49ICcsJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkY29udGVudCAuPSAiKSI7CiAgICAgICAgICAgICAgICBpZiAoKCgkc3RfY291bnRlciArIDEpICUgMTAwID09PSAwICYmICRzdF9jb3VudGVyICE9PSAwKSB8fCAkc3RfY291bnRlciArIDEgPT09ICRyb3dzX251bSkgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50IC49ICI7IjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gIiwiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHN0X2NvdW50ZXIrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkY29udGVudCAuPSAiXG5cblxuIjsKICAgIH0KCiAgICBpZiAoIWZpbGVfZXhpc3RzKCRiYWNrdXBfZGlyKSkgewogICAgICAgIG1rZGlyKCRiYWNrdXBfZGlyLCAwNzU1LCB0cnVlKTsKICAgIH0KICAgIAogICAgJGZpbGVfcGF0aCA9ICRiYWNrdXBfZGlyIC4gJGJhY2t1cF9uYW1lOwogICAgZmlsZV9wdXRfY29udGVudHMoJGZpbGVfcGF0aCwgJGNvbnRlbnQpOwoKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTsKICAgIGhlYWRlcigiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogQmluYXJ5Iik7CiAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIiAuICRiYWNrdXBfbmFtZSAuICJcIiIpOwogICAgZWNobyAkY29udGVudDsKICAgIGV4aXQ7Cn0KCmZ1bmN0aW9uIFJlc3RvcmVfRGF0YWJhc2UoJGZpbGVfcGF0aCkgewogICAgJG15c3FsaSA9IG5ldyBteXNxbGkoJEdMT0JBTFNbJ215c3FsSG9zdE5hbWUnXSwgJEdMT0JBTFNbJ215c3FsVXNlck5hbWUnXSwgJEdMT0JBTFNbJ215c3FsUGFzc3dvcmQnXSwgJEdMT0JBTFNbJ0RiTmFtZSddKTsKICAgIAogICAgaWYgKCRteXNxbGktPmNvbm5lY3RfZXJyb3IpIHsKICAgICAgICByZXR1cm4gIkNvbm5lY3Rpb24gZmFpbGVkOiAiIC4gJG15c3FsaS0+Y29ubmVjdF9lcnJvcjsKICAgIH0KCiAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpOwogICAgJGNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoJy9DUkVBVEUgVEFCTEUgYCguKz8pYC8nLCAnRFJPUCBUQUJMRSBJRiBFWElTVFMgYCQxYDsgQ1JFQVRFIFRBQkxFIGAkMWAnLCAkY29udGVudCk7CgogICAgaWYgKCRteXNxbGktPm11bHRpX3F1ZXJ5KCRjb250ZW50KSkgewogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKCRyZXN1bHQgPSAkbXlzcWxpLT5zdG9yZV9yZXN1bHQoKSkgewogICAgICAgICAgICAgICAgJHJlc3VsdC0+ZnJlZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoJG15c3FsaS0+bW9yZV9yZXN1bHRzKCkgJiYgJG15c3FsaS0+bmV4dF9yZXN1bHQoKSk7CgogICAgICAgICRteXNxbGktPmNsb3NlKCk7CiAgICAgICAgcmV0dXJuICJSZXN0YXVyYcOnw6NvIGNvbmNsdcOtZGEgY29tIHN1Y2Vzc28uIjsKICAgIH0gZWxzZSB7CiAgICAgICAgJG15c3FsaS0+Y2xvc2UoKTsKICAgICAgICByZXR1cm4gIkVycm8gbmEgcmVzdGF1cmHDp8OjbzogIiAuICRteXNxbGktPmVycm9yOwogICAgfQp9Cgo/PgoKPCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InB0LWJyIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+QmFja3VwIGUgUmVzdGF1cmHDp8OjbzwvdGl0bGU+CiAgICA8c3R5bGU+CiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnQXJpYWwnLCBzYW5zLXNlcmlmOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZjVmN2ZhLCAjYzNjZmUyKTsKICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICAgICAgY29sb3I6ICMzMzM7CiAgICAgICAgfQogICAgICAgIC5jb250YWluZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgICAgd2lkdGg6IDkwJTsKICAgICAgICAgICAgbWF4LXdpZHRoOiA0MDBweDsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogICAgICAgIH0KICAgICAgICBoMSB7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjZweDsKICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7CiAgICAgICAgfQogICAgICAgIGZvcm0gewogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIH0KICAgICAgICBidXR0b24gewogICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDIwcHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3YmZmOwogICAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcywgdHJhbnNmb3JtIDAuMnM7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIH0KICAgICAgICBidXR0b246aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA1NmIzOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDMpOwogICAgICAgIH0KICAgICAgICBzZWxlY3QgewogICAgICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQogICAgICAgIC5hbGVydCB7CiAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICAgIG9wYWNpdHk6IDAuOTsKICAgICAgICB9CiAgICAgICAgLnN1Y2Nlc3MgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjhhNzQ1OwogICAgICAgIH0KICAgICAgICAuZXJyb3IgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGMzNTQ1OwogICAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2NyaXB0PgogICAgICAgIGZ1bmN0aW9uIHNob3dBbGVydChtZXNzYWdlLCB0eXBlKSB7CiAgICAgICAgICAgIGNvbnN0IGFsZXJ0Qm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgIGFsZXJ0Qm94LmNsYXNzTmFtZSA9ICdhbGVydCAnICsgdHlwZTsKICAgICAgICAgICAgYWxlcnRCb3gudGV4dENvbnRlbnQgPSBtZXNzYWdlOwogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoYWxlcnRCb3gpOwogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGFsZXJ0Qm94LnJlbW92ZSgpLCA1MDAwKTsKICAgICAgICB9CiAgICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgPGgxPkJhY2t1cCBlIFJlc3RhdXJhw6fDo288L2gxPgogICAgICAgIAogICAgICAgIDwhLS0gRm9ybXVsw6FyaW8gcGFyYSBjcmlhciBiYWNrdXAgLS0+CiAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9ImJhY2t1cCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0Ij5DcmlhciBCYWNrdXA8L2J1dHRvbj4KICAgICAgICA8L2Zvcm0+CgogICAgICAgIDxocj4KCiAgICAgICAgPCEtLSBGb3JtdWzDoXJpbyBwYXJhIHJlc3RhdXJhciBiYWNrdXAgLS0+CiAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InJlc3RvcmUiPgogICAgICAgICAgICA8bGFiZWwgZm9yPSJiYWNrdXBfZmlsZSI+RXNjb2xoYSBvIGFycXVpdm8gZGUgYmFja3VwOjwvbGFiZWw+CiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iYmFja3VwX2ZpbGUiIGlkPSJiYWNrdXBfZmlsZSI+CiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiIGRpc2FibGVkIHNlbGVjdGVkPkVzY29saGEgdW0gYXJxdWl2byBwYXJhIGEgcmVzdGF1cmHDp8Ojbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJGJhY2t1cF9kaXIpKSB7CiAgICAgICAgICAgICAgICAgICAgJGZpbGVzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRiYWNrdXBfZGlyKSwgYXJyYXkoJy4uJywgJy4nKSk7CiAgICAgICAgICAgICAgICAgICAgJGJhY2t1cF9maWxlcyA9IGFycmF5X2ZpbHRlcigkZmlsZXMsIGZ1bmN0aW9uKCRmaWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXRoaW5mbygkZmlsZSwgUEFUSElORk9fRVhURU5TSU9OKSA9PT0gJ3NxbCc7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50KCRiYWNrdXBfZmlsZXMpID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkYmFja3VwX2ZpbGVzIGFzICRmaWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiJGZpbGVcIj4kZmlsZTwvb3B0aW9uPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+TmVuaHVtIGFycXVpdm8gZGUgYmFja3VwIGVuY29udHJhZG88L29wdGlvbj4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPk5lbmh1bSBkaXJldMOzcmlvIGVuY29udHJhZG88L29wdGlvbj4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0Ij5SZXN0YXVyYXI8L2J1dHRvbj4KICAgICAgICA8L2Zvcm0+CgogICAgICAgIDwhLS0gTWVuc2FnZW0gZGUgc3VjZXNzbyBvdSBlcnJvIC0tPgogICAgICAgIDw/cGhwIGlmICgkcmVzdG9yZV9yZXN1bHQpOiA/PgogICAgICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAgICAgc2hvd0FsZXJ0KCI8P3BocCBlY2hvICRyZXN0b3JlX3Jlc3VsdDsgPz4iLCAiPD9waHAgZWNobyBzdHJwb3MoJHJlc3RvcmVfcmVzdWx0LCAnRXJybycpICE9PSBmYWxzZSA/ICdlcnJvcicgOiAnc3VjY2Vzcyc7ID8+Iik7CiAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9kaXY+CjwvYm9keT4KPC9odG1sPgo="));
Function Calls
base64_decode | 1 |
Stats
MD5 | c49ffc6161fd471748ae18ade6fbc32e |
Eval Count | 1 |
Decode Time | 48 ms |