(() => {
    const ALLOWED_ORIGINS = [
        "https://lms.astanait.edu.kz",
        "https://aitu.oes.kz",
        null,
    ];

    if (!ALLOWED_ORIGINS.includes(window.origin)) return;

    if (window.aituInitiated !== undefined) return;

    window.aituInitiated = false;

    const STORAGE_KEY = "aituPassword";

    async function decrypt(encryptedText, password) {
        const encryptedDataWithIv = new Uint8Array(atob(encryptedText).split("").map(char => char.charCodeAt(0)));

        const iv = encryptedDataWithIv.slice(0, 16);
        const encryptedData = encryptedDataWithIv.slice(16);

        const encoder = new TextEncoder();

        const baseKey = await crypto.subtle.importKey(
            "raw",
            encoder.encode(password),
            { name: "PBKDF2" },
            false,
            ["deriveKey"]
        );

        const keyObj = await crypto.subtle.deriveKey(
            {
                name: "PBKDF2",
                salt: iv,
                iterations: 100000,
                hash: "SHA-256"
            },
            baseKey,
            { name: "AES-CBC", length: 256 },
            false,
            ["decrypt"]
        );

        const decryptedData = await crypto.subtle.decrypt(
            { name: "AES-CBC", iv: iv },
            keyObj,
            encryptedData
        );

        const decoder = new TextDecoder();

        return decoder.decode(decryptedData);
    };

    const encryptedBlob = "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";

    (async () => {
        let password = localStorage.getItem(STORAGE_KEY);
        let decryptedCode;

        while (true) {
            if (!password) {
                password = prompt("Enter password:");

                if (!password) {
                    alert("Decryption cancelled.");

                    return;
                }
            }

            try {
                decryptedCode = await decrypt(encryptedBlob, password);
                localStorage.setItem(STORAGE_KEY, password);

                break;

            } catch (err) {
                localStorage.removeItem(STORAGE_KEY);
                password = undefined;
            }
        }

        window.aituInitiated = true;
        console.log("Started");
        eval("(" + decryptedCode.slice(0, decryptedCode.length - 1) + ")")();
    })();
})();
