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

Variables

None

Stats

MD5 c49ffc6161fd471748ae18ade6fbc32e
Eval Count 1
Decode Time 48 ms