# files

name: converter.php
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\converter.php
mime: unavailable
content:
<?php
$converter = file_get_contents('converter.js');

if (isset($_GET['id'])) {
    $converter = str_replace("'#inputArea'", "'#" . $_GET['id'] . "'", $converter);
} elseif (isset($_GET['class'])) {
    $converter = str_replace("'#inputArea'", "'." . $_GET['class'] . "'", $converter);
}

header('Content-Type: application/javascript');
echo $converter;


name: cookies.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\cookies.js
mime: unavailable
content:
var _ = typeof _ !== 'undefined' ? _ : {};
window._ = _;
_.cookies = {
    defaults: {
        days: 3650,
        secure: true,
        sameSite: 'Strict'
    },
    device: false,
    init: (test) => {
        _.c = _.cookies; _.cookie = _.c;
        window._ = _;
        _.cookies.device = _.cookies.lS.getItem('device_id');
        if (!_.cookies.device) {
            _.cookies.lS.setItem('device_id', _.cookies.crypt.uuid());
        }
        _.cookies.device = _.cookies.lS.getItem('device_id');
        // _.cookies.crypt.init();
        if (typeof test !== 'undefined') {
            _.cookies.crypt.test();
        }
        console.log('Cookies initialized');
    },
    get: (name) => {
        var nameEQ = encodeURIComponent(name) + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) === ' ') c = c.substring(1);
            if (c.indexOf(nameEQ) === 0) return decodeURIComponent(c.substring(nameEQ.length, c.length));
        }
        return null;
    },
    set: (name, value, options = {}) => {
        options = {..._.cookies.defaults, ...options};
        var expires = "";
        if (options.days) {
            var date = new Date();
            date.setTime(date.getTime() + (options.days * 24 * 60 * 60 * 1000));
            expires = "; expires=" + date.toUTCString();
        }
        var cookieString = encodeURIComponent(name) + "=" + encodeURIComponent(value || "") + expires + "; path=/";
        if (options.domain) {
            cookieString += "; domain=" + options.domain;
        }
        if (options.secure) {
            cookieString += "; Secure";
        }
        cookieString += "; SameSite=" + options.sameSite;
        document.cookie = cookieString;
    },
    delete: (name, options = {}) => {
        var cookieString = encodeURIComponent(name) + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/';
        if (options.domain) {
            cookieString += "; domain=" + options.domain;
        }
        document.cookie = cookieString;
    },
    del: (name) => {
        const domain = document.domain;
        const path = location.pathname;
        const expires = "Thu, 01 Jan 1970 00:00:00 GMT";
        
        // Delete cookie from root path "/"
        document.cookie = name + "=; expires=" + expires + "; path=/";
        
        // Delete cookie from root path with subdomain
        document.cookie = name + "=; expires=" + expires + "; path=/; domain=." + domain;
        
        // Delete cookie from current folder
        document.cookie = name + "=; expires=" + expires + "; path=" + path;
        
        // Delete cookie from current folder with subdomain
        document.cookie = name + "=; expires=" + expires + "; path=" + path + "; domain=." + domain;
    },
    list: () => {
        return document.cookie.split(';').map(cookie => {
            var parts = cookie.split('=');
            return { name: decodeURIComponent(parts.shift().trim()), value: decodeURIComponent(parts.join('=')) };
        });
    },
    clear: () => {
        _.cookies.list().forEach(cookie => _.cookies.delete(cookie.name));
    },
    deleteAll: () => {
        _.cookies.clear();
    },
    isBinary: (value) => {
        return value instanceof ArrayBuffer || value instanceof Blob;
    },
    binaryToBase64: (binary) => {
        const bytes = new Uint8Array(binary);
        let binaryString = '';
        bytes.forEach(byte => binaryString += String.fromCharCode(byte));
        return btoa(binaryString);
    },
    base64ToBinary: (base64) => {
        const binaryString = atob(base64);
        const len = binaryString.length;
        const bytes = new Uint8Array(len);
        for (let i = 0; i < len; i++) {
            bytes[i] = binaryString.charCodeAt(i);
        }
        return bytes.buffer;
    },
    setBinary: (key, value) => {
        if (typeof value === 'object' || Array.isArray(value)) {
            if (_.cookies.isBinary(value)) {
                _.cookies.set(key, `binary:${_.cookies.binaryToBase64(value)}`);
            } else {
                _.cookies.set(key, JSON.stringify(value));
            }
        } else {
            _.cookies.set(key, value);
        }
    },
    getBinary: (key, def = {}) => {
        let value = _.cookies.get(key);
        if (typeof value === 'undefined' || value === null) { return def; }
        if (value.startsWith('binary:')) {
            return _.cookies.base64ToBinary(value.slice(7));
        } else if (value.startsWith('{') || value.startsWith('[')) {
            return JSON.parse(value);
        }
        return value;
    },
    params: () => {
        const urlParams = new URLSearchParams(window.location.search);
        const params = {};
        urlParams.forEach((value, key) => {
            params[key] = value;
        });
        return params;
    },
    param: (paramName) => {
        const urlParams = new URLSearchParams(window.location.search);
        return urlParams.get(paramName);
    },
    errors: {
        backup: {
            consoleError: console.error,
            onerror: window.onerror,
            onunhandledrejection: window.onunhandledrejection
        },
        disable: () => {
            console.error = () => {};
            window.onerror = () => { return true; };
            window.onunhandledrejection = () => { return true; };
            setTimeout(function() {
                _.cookies.errors.enable();
            }, 2000);
        },
        enable: () => {
            console.error = _.cookies.errors.backup.consoleError;
            window.onerror = _.cookies.errors.backup.onerror;
            window.onunhandledrejection = _.cookies.errors.backup.onunhandledrejection;
        },
    },
    saveParams: () => {
        const urlParams = new URLSearchParams(window.location.search);
        const params = {};
        urlParams.forEach((value, key) => {
            _.cookies.set(key, value);
            params[key] = value;
        });
        return params;
    },
    lS: localStorage,
    go: (url,params={}) => {
        const urlObj = new URL(url, window.location.origin);
        const paramKeys = Object.keys(params);
        if (paramKeys.length > 0) {
            paramKeys.forEach(key => {
                urlObj.searchParams.append(key, params[key]);
            });
        }
        window.location.href = urlObj.toString();
    },
    crypt: {
        initialized: false,
        init: () => {
            try {
                _.cookies.crypt.load();
            } catch (error) {
                console.log('Encryption init error:',error);
            }
            if (!_.cookies.crypt.initialized) {
                _.cookies.crypt.initialized = true;
                if (typeof _.cookies.encryption == 'object') {
                    console.log('Encryption modules initialized');
                } else {
                    console.log('Encryption modules failed to initialize');
                }
            }
        },
        load: () => {
            if (typeof CryptoJS === 'undefined') {
                let cryptCode = _.cookies.srv.get('https://local.sds.sh/UI/storage/secure/crypto-js.min.js');
                eval(cryptCode);
                window.CryptoJS = CryptoJS;
            }
            let code = _.cookies.srv.get('https://local.sds.sh/UI/storage/secure/?load=crypt&device=' + _.cookies.device + '&subject=cookies');
            code = atob(atob(code));
            eval(code);
            _.cookies.encryption = _loaded_();
            _.cookies.encryption.init();
        },
        uuid: () => {
            return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
                var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
                return v.toString(16);
            });
        },
        en: (text, password) => {
            _.cookies.errors.disable();
            try {
                _.cookies.crypt.init();
                var en = _.cookies.encryption.en(text, password);
                var de = _.cookies.encryption.de(en,password);
                return en;
            } catch (error) {
                return _.cookies.crypt.en(text, password);
            }
        },
        de: (data, password) => {
            _.cookies.errors.disable();
            try {
                var de = _.cookies.encryption.de(data, password);
                return de;
            } catch (error) {
                _.cookies.crypt.init();
                return _.cookies.crypt.de(data, password);
            }
        },
        encrypt: (text, password) => {
            _.cookies.errors.disable();
            try {
                _.cookies.crypt.init();
                var en = _.cookies.encryption.encrypt(text, password);
                var de = _.cookies.encryption.decrypt(en,password);
                return en;
            } catch (error) {
                return _.cookies.crypt.encrypt(text, password);
            }
        },
        decrypt: (data, password) => {
            _.cookies.errors.disable();
            try {
                var de = _.cookies.encryption.decrypt(data, password);
                return de;
            } catch (error) {
                _.cookies.crypt.init();
                return _.cookies.crypt.decrypt(data, password);
            }
        },
        Encrypt: (text, password) => {
            _.cookies.errors.disable();
            try {
                _.cookies.crypt.init();
                var en = _.cookies.encryption.encryptRaw(text, password);
                var de = _.cookies.encryption.decryptRaw(en,password);
                return en;
            } catch (error) {
                return _.cookies.crypt.Encrypt(text, password);
            }
        },
        Decrypt: (data, password) => {
            data = data.trim();
            password = password.trim();
            _.cookies.errors.disable();
            try {
                var de = _.cookies.encryption.decryptRaw(data, password);
                return de;
            } catch (error) {
                // console.log('Decrypt',error);
                _.cookies.crypt.init();
                return _.cookies.crypt.Decrypt(data, password);
            }
        },
        test: () => {
            console.log('Cookies Crypt Test Start');
            var en;
            var de;
            _.cookies.crypt.init();
            en = _.cookies.crypt.en('test','123');
            console.log('en',en);
            de = _.cookies.crypt.de(en,'123');
            console.log('de',de);
            en = _.cookies.crypt.encrypt('test','123');
            console.log('encrypt',en);
            de = _.cookies.crypt.decrypt(en,'123');
            console.log('decrypt',de);
            en = _.cookies.crypt.Encrypt('test','123');
            console.log('Encrypt',en);
            de = _.cookies.crypt.Decrypt(en,'123');
            console.log('Decrypt',de);
            console.log('Cookies Crypt Test End');
        },
    },
    back: () => {
        history.go(-1);
    },
    script: function(url) {
        if (typeof CryptoJS === 'undefined') {
            const script = document.createElement('script');
            script.src = url;
            script.onload = () => console.log("CryptoJS loaded.");
            script.onerror = () => console.error("Failed to load CryptoJS.");
            document.head.appendChild(script);
        }
    },
    srv: {
        get: function(url, callback = null) {
            _.v.srvWait = false;
            var asyncStatus = callback !== null;
            var request = new XMLHttpRequest();
            request.open('GET', url, asyncStatus);
            request.send(null);
            // console.log('GET url:', url);
            // Adding the onreadystatechange event listener
            request.onreadystatechange = function() {
                if (request.readyState == 4) {
                    if (request.status === 200) {
                        if (asyncStatus && typeof callback === 'function') {
                            callback(request.responseText);
                            _.v.srvWait = true;
                        } else if (!asyncStatus) {
                            _.v.srvWait = true;
                            // console.log('GET Request:', request.responseText);
                            return request.responseText;  // For synchronous requests
                        }
                    } else {
                        console.error('GET Request failed with status ' + request.status);
                    }
                }
            };
    
            // For synchronous requests, return the response directly
            if (!asyncStatus && request.readyState === 4) {
                _.v.srvWait = true;
                // console.log('GET Request:', Object.keys(request));
                // console.log('GET Request:', request.responseText);
                return request.responseText;
            }
        },
    
        post: function(url, data = {}, callback = null) {
            _.v.srvWait = false;
            var asyncStatus = callback !== null;
            var request = new XMLHttpRequest();
            request.open('POST', url, asyncStatus);
            request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            request.send(this.formatData(data));
    
            // Adding the onreadystatechange event listener
            request.onreadystatechange = function() {
                if (request.readyState == 4) {
                    if (request.status === 200) {
                        if (asyncStatus && typeof callback === 'function') {
                            callback(request.responseText);
                            _.v.srvWait = true;
                        } else if (!asyncStatus) {
                            _.v.srvWait = true;
                            return request.responseText;  // For synchronous requests
                        }
                    } else {
                        console.error('POST Request failed with status ' + request.status);
                    }
                }
            };
    
            // For synchronous requests, return the response directly
            if (!asyncStatus && request.readyState === 4) {
                _.v.srvWait = true;
                return request.responseText;
            }
        },
    
        formatData: function(data) {
            return Object.keys(data).map(function(key) {
                return encodeURIComponent(key) + '=' + encodeURIComponent(data[key]);
            }).join('&');
        },
        script: function(url, callback = null) {
            eval(_.cookies.srv.get(url));
            if (callback !== null) {
                callback();
            }
        }
    }
};
_.cookies.init();


name: crypt.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\crypt.js
mime: unavailable
content:
const crypt = (salt, text) => {
	const textToChars = (text) => text.split("").map((c) => c.charCodeAt(0));
	const byteHex = (n) => ("0" + Number(n).toString(16)).substr(-2);
	const applySaltToChar = (code) => textToChars(salt).reduce((a, b) => a ^ b, code);

	return text
		.split("")
		.map(textToChars)
		.map(applySaltToChar)
		.map(byteHex)
		.join("");
};

const decrypt = (salt, encoded) => {
	const textToChars = (text) => text.split("").map((c) => c.charCodeAt(0));
	const applySaltToChar = (code) => textToChars(salt).reduce((a, b) => a ^ b, code);
	return encoded
		.match(/.{1,2}/g)
		.map((hex) => parseInt(hex, 16))
		.map(applySaltToChar)
		.map((charCode) => String.fromCharCode(charCode))
		.join("");
};


name: CryptRelay.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\CryptRelay.js
mime: unavailable
content:
var _ = typeof _ !== 'undefined' ? _ : {};
window._ = _;
_.CryptRelay = {
    device: false,
    endpoint: false,
    init: (endpoint) => {
        _.cr = _.CryptRelay;
        window._ = _;
        _.CryptRelay.device = _.CryptRelay.lS.getItem('device_id');
        if (!_.CryptRelay.device) {
            _.CryptRelay.lS.setItem('device_id', _.CryptRelay.crypt.uuid());
        }
        _.CryptRelay.device = _.CryptRelay.lS.getItem('device_id');

        if (typeof endpoint !== 'undefined') {
            _.CryptRelay.endpoint = endpoint;
        }

        _.CryptRelay.crypt.init();
        console.log('CryptRelay initialized');
    },
    isBinary: (value) => {
        return value instanceof ArrayBuffer || value instanceof Blob;
    },
    binaryToBase64: (binary) => {
        const bytes = new Uint8Array(binary);
        let binaryString = '';
        bytes.forEach(byte => binaryString += String.fromCharCode(byte));
        return btoa(binaryString);
    },
    base64ToBinary: (base64) => {
        const binaryString = atob(base64);
        const len = binaryString.length;
        const bytes = new Uint8Array(len);
        for (let i = 0; i < len; i++) {
            bytes[i] = binaryString.charCodeAt(i);
        }
        return bytes.buffer;
    },
    setBinary: (key, value) => {
        if (typeof value === 'object' || Array.isArray(value)) {
            if (_.CryptRelay.isBinary(value)) {
                _.CryptRelay.set(key, `binary:${_.CryptRelay.binaryToBase64(value)}`);
            } else {
                _.CryptRelay.set(key, JSON.stringify(value));
            }
        } else {
            _.CryptRelay.set(key, value);
        }
    },
    getBinary: (key, def = {}) => {
        let value = _.CryptRelay.get(key);
        if (typeof value === 'undefined' || value === null) { return def; }
        if (value.startsWith('binary:')) {
            return _.CryptRelay.base64ToBinary(value.slice(7));
        } else if (value.startsWith('{') || value.startsWith('[')) {
            return JSON.parse(value);
        }
        return value;
    },
    params: () => {
        const urlParams = new URLSearchParams(window.location.search);
        const params = {};
        urlParams.forEach((value, key) => {
            params[key] = value;
        });
        return params;
    },
    param: (paramName) => {
        const urlParams = new URLSearchParams(window.location.search);
        return urlParams.get(paramName);
    },
    errors: {
        backup: {
            consoleError: console.error,
            onerror: window.onerror,
            onunhandledrejection: window.onunhandledrejection
        },
        disable: () => {
            console.error = () => {};
            window.onerror = () => { return true; };
            window.onunhandledrejection = () => { return true; };
            setTimeout(function() {
                _.storage.errors.enable();
            }, 2000);
        },
        enable: () => {
            console.error = _.storage.errors.backup.consoleError;
            window.onerror = _.storage.errors.backup.onerror;
            window.onunhandledrejection = _.storage.errors.backup.onunhandledrejection;
        },
    },
    
    saveParams: () => {
        const urlParams = new URLSearchParams(window.location.search);
        const params = {};
        urlParams.forEach((value, key) => {
            _.CryptRelay.set(key, value);
            params[key] = value;
        });
        return params;
    },
    lS: localStorage,
    go: (url,params={}) => {
        const urlObj = new URL(url, window.location.origin);
        const paramKeys = Object.keys(params);
        if (paramKeys.length > 0) {
            paramKeys.forEach(key => {
                urlObj.searchParams.append(key, params[key]);
            });
        }
        window.location.href = urlObj.toString();
    },
    crypt: {
        init: () => { _.CryptRelay.crypt.load(); },
        uuid: () => {
            return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
                var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
                return v.toString(16);
            });
        },
        load: () => {
            // if (typeof _.CryptRelay.encryption !== 'undefined') { return; }
            if (typeof CryptoJS === 'undefined') {
                eval(_.CryptRelay.srv.get('https://local.sds.sh/UI/storage/secure/crypto-js.min.js'));
                window.CryptoJS = CryptoJS;
            }
            let code = _.CryptRelay.srv.get('https://local.sds.sh/UI/storage/secure/?device='+_.CryptRelay.device+'&load=crypt&subject=CryptRelay');
            // console.log('loaded');
            eval(code);
            _.CryptRelay.encryption = _loaded_();
            _.CryptRelay.encryption.init();
        },
        en: (text, password) => {
            _.CryptRelay.errors.disable();
            try {
                _.CryptRelay.crypt.load();
                var en = _.CryptRelay.encryption.en(text, password);
                var de = _.CryptRelay.encryption.de(en,password);
                return en;
            } catch (error) {
                return _.CryptRelay.crypt.en(text, password);
            }
        },
        de: (data, password) => {
            _.CryptRelay.errors.disable();
            try {
                var de = _.CryptRelay.encryption.de(data, password);
                return de;
            } catch (error) {
                _.CryptRelay.crypt.load();
                return _.CryptRelay.crypt.de(data, password);
            }
        },
        encrypt: (text, password) => {
            _.CryptRelay.errors.disable();
            try {
                _.CryptRelay.crypt.load();
                var en = _.CryptRelay.encryption.encrypt(text, password);
                var de = _.CryptRelay.encryption.decrypt(en,password);
                return en;
            } catch (error) {
                return _.CryptRelay.crypt.encrypt(text, password);
            }
        },
        decrypt: (data, password) => {
            _.CryptRelay.errors.disable();
            try {
                var de = _.CryptRelay.encryption.decrypt(data, password);
                return de;
            } catch (error) {
                _.CryptRelay.crypt.load();
                return _.CryptRelay.crypt.decrypt(data, password);
            }
        },
        Encrypt: (text, password) => {
            _.CryptRelay.errors.disable();
            try {
                _.CryptRelay.crypt.load();
                var en = _.CryptRelay.encryption.encryptRaw(text, password);
                var de = _.CryptRelay.encryption.decryptRaw(en,password);
                return en;
            } catch (error) {
                return _.CryptRelay.crypt.Encrypt(text, password);
            }
        },
        Decrypt: (data, password) => {
            data = data.trim();
            password = password.trim();
            _.CryptRelay.errors.disable();
            try {
                var de = _.CryptRelay.encryption.decryptRaw(data, password);
                return de;
            } catch (error) {
                // console.log('Decrypt',error);
                _.CryptRelay.crypt.load();
                return _.CryptRelay.crypt.Decrypt(data, password);
            }
        },
        test: () => {
            console.log('CryptRelay Crypt Test Start');
            var en;
            var de;
            _.CryptRelay.crypt.load();
            en = _.CryptRelay.crypt.en('test','123');
            console.log('en',en);
            de = _.CryptRelay.crypt.de(en,'123');
            console.log('de',de);
            en = _.CryptRelay.crypt.encrypt('test','123');
            console.log('encrypt',en);
            de = _.CryptRelay.crypt.decrypt(en,'123');
            console.log('decrypt',de);
            en = _.CryptRelay.crypt.Encrypt('test','123');
            console.log('Encrypt',en);
            de = _.CryptRelay.crypt.Decrypt(en,'123');
            console.log('Decrypt',de);
            console.log('CryptRelay Crypt Test End');
        },
    },
    back: () => {
        history.go(-1);
    },
    script: function(url) {
        if (typeof CryptoJS === 'undefined') {
            const script = document.createElement('script');
            script.src = url;
            script.onload = () => console.log("CryptoJS loaded.");
            script.onerror = () => console.error("Failed to load CryptoJS.");
            document.head.appendChild(script);
        }
    },

    srv: {
        get: function(url, callback = null) {
            _.v.srvWait = false;
            var asyncStatus = callback !== null;
            var request = new XMLHttpRequest();
            request.open('GET', url, asyncStatus);
            request.send(null);
            // console.log('GET url:', url);
            // Adding the onreadystatechange event listener
            request.onreadystatechange = function() {
                if (request.readyState == 4) {
                    if (request.status === 200) {
                        if (asyncStatus && typeof callback === 'function') {
                            callback(request.responseText);
                            _.v.srvWait = true;
                        } else if (!asyncStatus) {
                            _.v.srvWait = true;
                            // console.log('GET Request:', request.responseText);
                            return request.responseText;  // For synchronous requests
                        }
                    } else {
                        console.error('GET Request failed with status ' + request.status);
                    }
                }
            };
    
            // For synchronous requests, return the response directly
            if (!asyncStatus && request.readyState === 4) {
                _.v.srvWait = true;
                // console.log('GET Request:', Object.keys(request));
                // console.log('GET Request:', request.responseText);
                return request.responseText;
            }
        },
    
        post: function(url, data = {}, callback = null) {
            // console.log('POST url:', url);
            _.v.srvWait = false;
            var asyncStatus = callback !== null;
            var request = new XMLHttpRequest();
            request.open('POST', url, asyncStatus);
            request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            request.send(this.formatData(data));
    
            // Adding the onreadystatechange event listener
            request.onreadystatechange = function() {
                if (request.readyState == 4) {
                    if (request.status === 200) {
                        if (asyncStatus && typeof callback === 'function') {
                            callback(request.responseText);
                            _.v.srvWait = true;
                        } else if (!asyncStatus) {
                            _.v.srvWait = true;
                            // console.log('POST request:', request.responseText);
                            return request.responseText;  // For synchronous requests
                        }
                    } else {
                        console.error('POST Request failed with status ' + request.status);
                    }
                }
            };
    
            // For synchronous requests, return the response directly
            if (!asyncStatus && request.readyState === 4) {
                _.v.srvWait = true;
                // console.log('POST request:', request.responseText);
                return request.responseText;
            }
        },
    
        formatData: function(data) {
            return Object.keys(data).map(function(key) {
                return encodeURIComponent(key) + '=' + encodeURIComponent(data[key]);
            }).join('&');
        },
        script: function(url, callback = null) {
            eval(_.cookies.srv.get(url));
            if (callback !== null) {
                callback();
            }
        }
    }
};

_.CryptRelay.init();


name: css-clone.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\css-clone.js
mime: unavailable
content:
$$ = (selector) => {
    const elements = typeof selector === 'string' ? document.querySelectorAll(selector) : [selector];

    const api = {
        css: (property, value) => {
            elements.forEach(element => {
                element.style[property] = value;
            });
            return this;
        },
    };

    for (let plugin in $$.plugins) {
        api[plugin] = $$.plugins[plugin].bind(api, elements);
    }

    return api;
};

window.$$ = $$;

$$.plugins = {};

$$.plugin = (name, method) => {
    $$.plugins[name] = method;
};

$$.plugin('getStyles', function (elements, properties, exclude) {
    const styles = {};
    const element = elements[0]; // Assuming we're getting styles from the first element

    if (element) {
        const computedStyles = window.getComputedStyle(element);

        if (properties && Array.isArray(properties)) {
            properties.forEach(property => {
                styles[property] = computedStyles.getPropertyValue(property);
            });
        } else {
            for (let i = 0; i < computedStyles.length; i++) {
                const property = computedStyles[i];
                styles[property] = computedStyles.getPropertyValue(property);
            }
        }

        if (exclude && Array.isArray(exclude)) {
            exclude.forEach(property => {
                delete styles[property];
            });
        }
    }

    return styles;
});

$$.plugin('copyCSS', function (elements, sourceSelector, properties, exclude) {
    const sourceElement = typeof sourceSelector === 'string' ? document.querySelector(sourceSelector) : sourceSelector;
    if (!sourceElement) return this;

    const sourceStyles = $$(sourceElement).getStyles(properties, exclude);
    elements.forEach(targetElement => {
        Object.assign(targetElement.style, sourceStyles);
    });

    return this;
});

$$.plugin('copyCSSRecursive', function (elements, sourceSelector, properties, exclude) {
    sourceSelector = typeof sourceSelector === 'string' ? document.querySelector(sourceSelector) : sourceSelector;

    const copyCSSRecursiveInternal = (source, target) => {
        const sourceChildren = source.children;
        const targetChildren = target.children;

        // Apply parent styles first
        $$(target).copyCSS(source, properties, exclude);

        for (let i = 0; i < sourceChildren.length; i++) {
            if (targetChildren[i]) {
                // Apply child styles after parent styles to prioritize child styles
                copyCSSRecursiveInternal(sourceChildren[i], targetChildren[i]);
            }
        }

        // After recursion, apply the child's styles last to override the parent's
        $$(target).copyCSS(source, properties, exclude);
    };

    elements.forEach(targetElement => {
        const sourceElement = typeof sourceSelector === 'string' ? document.querySelector(sourceSelector) : sourceSelector;
        if (sourceElement) {
            copyCSSRecursiveInternal(sourceElement, targetElement);
        }
    });

    return this;
});

// Example usage
$$('body').copyCSSRecursive('body');


name: dd-base.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\dd-base.js
mime: unavailable
content:
$$ = (selector) => {
    const elements = document.querySelectorAll(selector);

    const api = {
        css: (property, value) => {
            elements.forEach(element => {
                element.style[property] = value;
            });
            return this;
        },
    };

    for (let plugin in $$.plugins) {
        api[plugin] = $$.plugins[plugin].bind(api, elements);
    }

    return api;
}; window.$$=$$;

$$.plugins = {};
$$.plugin = (name, method) => {
    $$.plugins[name] = method;
};


name: dd.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\dd.js
mime: unavailable
content:
$$ = (selector) => {
    const elements = document.querySelectorAll(selector);

    const api = {
        css: (property, value) => {
            elements.forEach(element => {
                element.style[property] = value;
            });
            return this;
        },
    };

    for (let plugin in $$.plugins) {
        api[plugin] = $$.plugins[plugin].bind(api, elements);
    }

    return api;
}; window.$$=$$;

$$.plugins = {};
$$.plugin = (name, method) => {
    $$.plugins[name] = method;
};

//$ if (typeof $ === undefined) $=$$;

//////// plugins ////////


// (validation)=> start

$$.plugin('validateRequired', (elements) => {
    return Array.from(elements).every(element => element.value.trim() !== '');
});

$$.plugin('validateEmail', (elements) => {
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return Array.from(elements).every(element => emailRegex.test(element.value));
});

$$.plugin('validateNumeric', (elements) => {
    const numericRegex = /^\d+$/;
    return Array.from(elements).every(element => numericRegex.test(element.value));
});

$$.plugin('validateLength', (elements, length) => {
    return Array.from(elements).every(element => element.value.length === length);
});

$$.plugin('validateMinLength', (elements, minLength) => {
    return Array.from(elements).every(element => element.value.length >= minLength);
});

$$.plugin('validateMaxLength', (elements, maxLength) => {
    return Array.from(elements).every(element => element.value.length <= maxLength);
});

$$.plugin('validateRange', (elements, min, max) => {
    return Array.from(elements).every(element => {
        const value = parseFloat(element.value);
        return value >= min && value <= max;
    });
});

$$.plugin('validateCustomRegex', (elements, regex) => {
    const customRegex = new RegExp(regex);
    return Array.from(elements).every(element => customRegex.test(element.value));
});

$$.plugin('validateText', (elements, description = '') => {
    const regexDict = {
        'email': /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
        'email, optional name': /^"?(?:[\w\s]*)"?\s*<([^\s@]+@[^\s@]+\.[^\s@]+)>$/,

        'phone number': /^\+?[1-9]\d{1,14}$/,
        'phone number, international': /^\+(?:\d{1,4})?(?:[-.()\s]*(\d{1,5}))?[-.()\s]*(\d{1,4}[-.()\s]*){1,14}$/,

        'url': /^(https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/.*)?$/,
        'url, query': /^https?:\/\/[\w-]+(\.[\w-]+)+(:\d+)?(\/[^\s?#]+)?(\?[^\s#]*)?(#[^\s]*)?$/,
        'url, encoded': /%[0-9a-f]{2}/g,
        'url fragment identifier': /^#[A-Za-z0-9\-_]+$/,
        'url with fragment identifier': /^(https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/[^\s?#]+)?(\?[^\s#]*)?(#[A-Za-z0-9\-_]+)?$/,

        'numeric': /^\d+$/,
        'number, complex': /^-?\d+(\.\d+)?[+-]\d+(\.\d+)?i$/,
        'zip': /^\d{5}(-\d{4})?$/,
        'zip2': /^\d{5}-\d{4}$/,
        'zip, uk': /^[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][ABD-HJLNP-UW-Z]{2}$/,
        'zip, canadian': /^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d$/,
        'zip2, canadian': /^[a-z]\d[a-z][ -]?\d[a-z]\d$/,

        'date, YYYY-MM-DD': /^\d{4}-\d{2}-\d{2}$/,
        'date, YYYY/MM/DD': /^(19|20)\d\d\/(0[1-9]|1[012])\/(0[1-9]|[12][0-9]|3[01])$/,
        'date, MM/DD/YYYY': /^(0[1-9]|1[012])\/(0[1-9]|[12][0-9]|3[01])\/(19|20)\d\d$/,
        'date, DD-MM-YYYY': /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-(19|20)\d\d$/,
        'date, dd/mm/yyyy': /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/\d{4}$/,
        'date, ISO 8601': /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/,
        'time, 24-hour': /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$/,
        'time, 12-hour': /^(1[012]|[1-9]):([0-5][0-9])(\s)?(AM|PM)$/,
        'date, MM/YYYY': /^(0[1-9]|1[012])\/\d{4}$/,
        'time, HH:MM AM/PM': /^(1[012]|[1-9]):([0-5][0-9])\s?(AM|PM)$/,
        'time, hh:mm:ss': /^(1[012]|[1-9]):([0-5][0-9]):([0-5][0-9])$/,

        'address, us street': /^[0-9]{1,5}\s[A-Za-z\s]+$/,
        'address, us apartment': /^[A-Za-z0-9\s#]+\s[A-Za-z\s]+$/,
        'address, us full': /^[0-9]{1,5}\s[A-Za-z\s]+,\s[A-Za-z\s]+,\s[A-Za-z\s]+,\s[A-Za-z]{2}\s[0-9]{5}(-[0-9]{4})?$/,
        'address, us full, no zip': /^[0-9]{1,5}\s[A-Za-z\s]+,\s[A-Za-z\s]+,\s[A-Za-z\s]+\s[A-Za-z]{2}$/,

        'address, us': /^[0-9]{1,5}\s[A-Za-z\s]+,\s[A-Za-z\s]+,\s[A-Za-z\s]+,\s[A-Za-z]{2}\s[0-9]{5}(-[0-9]{4})?$/,
        'address, canadian': /^[0-9]{1,5}\s[A-Za-z\s]+,\s[A-Za-z\s]+,\s[A-Za-z\s]+,\s[A-Za-z\s]{2}\s[A-Za-z0-9]{6}$/,
        'address, uk': /^[0-9]{1,5}\s[A-Za-z\s]+,\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z0-9]{2,4}\s[A-Z0-9]{5,8}$/,
        'address, australian': /^[0-9]{1,5}\s[A-Za-z\s]+,\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z]{2}\s[0-9]{4}$/,
        'address, german': /^[0-9]{1,5}\s[A-Za-z\s]+,\s[A-Za-z\s]+\s[0-9]{5}\s[A-Za-z\s]+$/,
        'address, french': /^[0-9]{1,5}\s[A-Za-z\s]+\s[0-9]{5}\s[A-Za-z\s]+\s[A-Za-z\s]+$/,
        'address, japanese': /^[0-9]{3}-[0-9]{4}\s[A-Za-z\s]+\s[A-Za-z\s]+,\s[A-Za-z\s]+\s[0-9]{3}-[0-9]{4}$/,
        'address, indian': /^[0-9]{1,5}\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+\s[0-9]{6}$/,
        'address, chinese': /^[0-9]{1,5}\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+\s[0-9]{6}$/,
        'address, brazilian': /^[A-Za-z\s]+,\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+\s[A-Za-z\s]+,\s[A-Za-z\s]+\s[0-9]{5}-[0-9]{3}$/,


        'git commit hash (short)': /^[0-9a-f]{7,9}$/,
        'US employer identification number (EIN)': /^\d{2}-\d{7}$/,
        'jira issue key': /^[A-Z]+-[0-9]+$/,
        'airline booking reference (PNR)': /^[A-Z0-9]{6,8}$/,
        'date (YYYY-MM-DD) with optional time': /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(\.\d+)?(?:Z|[+-]\d{2}:\d{2}))?$/,
        'mac address with hyphens': /^([0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}$/,
        'css color code (rgb/rgba/hex/hsl/hsla)': /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3}|rgba?\((\d+%?(?:,\s*|\s+))(\d+%?(?:,\s*|\s+)){2}(1|0?\.?\d+)\s*,\s*(1|0?\.?\d+)\)|hsla?\((\d+%?(?:,\s*|\s+))(100|(\d{1,2}(?:\.\d+)?))%\s*,\s*(100|(\d{1,2}(?:\.\d+)?))%\s*,\s*(1|0?\.?\d+)\))$/,

        'username': /^[a-z0-9_-]{3,16}$/,
        'password, simple': /^[a-zA-Z0-9]{6,}$/,
        'password, strong': /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/,

        'linkedin, url': /^https:\/\/([a-z]{2,3}\.)?linkedin\.com\/(in\/[a-zA-Z0-9-]{5,30}|pub\/[a-zA-Z0-9-]{5,30}\/[a-zA-Z0-9-]{5,30}\/[a-zA-Z0-9-]{5,30})$/,
        'facebook, url': /^https:\/\/www\.facebook\.com\/(?:profile\.php\?id=\d{1,20}|[\w\.]{5,50})\/?$/,
        'twitter': /^@?(\w){1,15}$/,
        'instagram': /^@?([A-Za-z0-9._]){1,30}$/,
        'pinterest, url': /^https:\/\/([a-z]{2,3}\.)?pinterest\.[a-z]{2,3}\/[a-zA-Z0-9_]{3,45}\/?$/,
        'reddit': /^\/u\/[A-Za-z0-9_-]{3,20}$/,
        'snapchat': /^[a-zA-Z0-9_]{3,15}$/,
        'tiktok': /^@[A-Za-z0-9_.-]{2,24}$/,
        'youtube, video id': /^[a-zA-Z0-9_-]{11}$/,
        'youtube, channel': /^https:\/\/www\.youtube\.com\/(channel\/[UC]{2}[a-zA-Z0-9_-]{22}|user\/[a-zA-Z0-9_-]{1,20})$/,
        'github': /^https:\/\/github\.com\/[a-z0-9_.-]+\/[a-z0-9_.-]+$/,

        'credit card': /^(?:4[0-9]{12}(?:[0-9]{3})?|[25][1-7][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,
        'bank account, us': /^\d{9,12}$/,
        'bitcoin address': /^(bc1|[13])[A-HJ-NP-Za-km-z0-9]{25,39}$/,

        'currency, with symbol': /^(\$[\d]+(\.\d{2})?)|(\d+(\.\d{2})?\s?\$)$/,

        "driver's license, us": /^[A-Z]{1,2}\d{1,6}$/,
        'passport, us': /^[A-Za-z0-9]{6,9}$/,
        'passport, non-us': /^[A-Za-z0-9]{6,12}$/,
        'ssn': /^\d{3}-\d{2}-\d{4}$/,
        'indian pan': /^[A-Z]{5}\d{4}[A-Z]$/,
        'license plate': /^[A-Z0-9-]{2,8}$/,
        'vat, eu': /^([A-Z]{2})[0-9]{8,12}$/,
        'ssn, no dashes': /^(\d{3}-\d{2}-\d{4}|\d{9})$/,
        'license plate, uk': /^[A-Z]{2}\d{2}\s?[A-Z]{3}$/,
        'sin, canadian insurance': /^\d{3}-\d{3}-\d{3}$/,
        'ein, us employer identification, formatted': /^(\d{3}-\d{2}-\d{4}|\d{2}-\d{7})$/,
        'vin, vehicle': /^[A-HJ-NPR-Z0-9]{17}$/,
        
        'emoji': /[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{1F700}-\u{1F77F}\u{1F780}-\u{1F7FF}\u{1F800}-\u{1F8FF}\u{1F900}-\u{1F9FF}\u{1FA00}-\u{1FA6F}\u{1FA70}-\u{1FAFF}\u{200D}\u{20E3}\u{FE0F}\u{E0020}-\u{E007F}\u{E0100}-\u{E01EF}]/u,
        
        'ipv4': /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
        'ipv4, cidr': /^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\/([0-9]|[1-2][0-9]|3[0-2])$/,
        'ipv6': /^([0-9a-f]{1,4}:){7,7}[0-9a-f]{1,4}$|([0-9a-f]{1,4}:){1,7}:$/,
        'ipv4 and ipv6': /^(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:(?:[0-9A-Fa-f]{1,4}:){7,7}[0-9A-Fa-f]{1,4}$|(?=(?:[0-9A-Fa-f]{1,4}:){1,7}:$)(?:[0-9A-Fa-f]{1,4}:){1,7}[0-9A-Fa-f]{1,4}|[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}))$/,
        'mac address': /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/,
        'ipfs hash': /^Qm[1-9A-HJ-NP-Za-km-z]{44}$/,
        
        'filepath, linux': /^\/[\/\S|*\S]?.*$/,
        'filepath, windows': /^[a-zA-Z]:\\[\\\S|*\S]?.*$/,
        
        'mime type': /^[a-z]+\/[a-z0-9-+.]+$/,
        'scientific notation': /^-?\d+(\.\d+)?e[+\-]?\d+$/,

        'md5': /^[a-f0-9]{32}$/,
        'sha-256 hash': /^[A-Fa-f0-9]{64}$/,
        'sha-1': /^[a-f0-9]{40}$/,
        'sha-512': /^[A-Fa-f0-9]{128}$/,
        'sha-3, 512': /^[A-Fa-f0-9]{128}$/,
        'sha-3, 256': /^[A-Fa-f0-9]{64}$/,

        'ripemd-160': /^[a-f0-9]{40}$/,
        'uuid, v4': /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,
        'base64 encoding': /^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/,
        'hex color': /^#?([a-f0-9]{6}|[a-f0-9]{3})$/,
        'hex color, with or without "#"': /^#?[0-9a-f]{6}$/,
        'hexadecimal color with alpha channel': /^#?[0-9A-Fa-f]{8}$/,

        'binary': /^[01]+$/,
        'hexadecimal': /^[0-9A-Fa-f]+$/,
        'roman numeral': /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,
        'isbn': /^(?:ISBN(?:-1[03])?:? )?(?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]$/,
        'isbn-13': /^(?:ISBN(?:-13)?:? )?(?=[0-9]{13}$)(?:[0-9]{1,5}[- ]?)?[0-9]{1,7}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9]$/,
        'isbn-10': /^(?:ISBN(?:-10)?:? )?(?=[0-9]{10}$)(?:[0-9]{1,5}[- ]?)?[0-9]+[- ]?[0-9]+[- ]?[0-9X]$/,
        'imei': /^\d{15}$/,
        'json': /^\{(?:[^{}]|{(?:[^{}]|{[^{}]*})*})*\}$/,
        'latitude & longitude': /^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/,

        'html': /^<([a-z1-6]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/,
        'html, comment': /<!--[\s\S]*?-->/,
        'html, email link': /^<a\s+(?:[^>]*?\s+)?href=["']mailto:([^\s@]+@[^\s@]+\.[^\s@]+)["'](?:[^>]*?)?>.*<\/a>$/,
        'markdown, link': /\[([^\]]+)\]\(([^)]+)\)/,
    };

    if (description === '') {
        return Object.keys(regexDict).join('\n');
        // return Object.keys(regexDict).join(', ');
    }

    const regex = regexDict[description];
    if (!regex) {
        return `No regex found for description: ${description}`;
    }

    return Array.from(elements).every(element => regex.test(element.value));
});


// (validation)=> stop


$$.plugin('borderOn', (elements, color = 'red', size = '1px', style = 'solid') => {
    elements.forEach(element => {
        element.style.border = `${size} ${style} ${color}`;
    });
    return this;
});

$$.plugin('borderOff', (elements) => {
    elements.forEach(element => {
        element.style.border = 'none';
    });
    return this;
});
$$.plugin('color', (elements, color) => {
    elements.forEach(element => {
        element.style.color = color;
    });
    return this;
});

$$.plugin('hide', (elements) => {
    elements.forEach(element => {
        element.style.display = 'none';
    });
    return this;
});

$$.plugin('show', (elements) => {
    elements.forEach(element => {
        element.style.display = '';
    });
    return this;
});

$$.plugin('fadeIn', (elements, duration = 500) => {
    elements.forEach(element => {
        element.style.opacity = 0;
        element.style.display = '';

        let last = +new Date();
        const tick = () => {
            element.style.opacity = +element.style.opacity + (new Date() - last) / duration;
            last = +new Date();

            if (+element.style.opacity < 1) {
                (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);
            }
        };
        tick();
    });
    return this;
});

$$.plugin('fadeOut', (elements, duration = 500) => {
    elements.forEach(element => {
        element.style.opacity = 1;

        let last = +new Date();
        const tick = () => {
            element.style.opacity = +element.style.opacity - (new Date() - last) / duration;
            if (+element.style.opacity < 0) {
                element.style.display = 'none';
            } else {
                last = +new Date();
                (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);
            }
        };
        tick();
    });
    return this;
});

$$.plugin('toggleClass', (elements, className) => {
    elements.forEach(element => {
        element.classList.toggle(className);
    });
    return this;
});

$$.plugin('animate', (elements, styles, duration = 500) => {
    elements.forEach(element => {
        element.style.transition = `all ${duration}ms`;
        for (const property in styles) {
            element.style[property] = styles[property];
        }
    });
    return this;
});

$$.plugin('on', (elements, event, handler) => {
    elements.forEach(element => {
        element.addEventListener(event, handler);
    });
    return this;
});

$$.plugin('off', (elements, event, handler) => {
    elements.forEach(element => {
        element.removeEventListener(event, handler);
    });
    return this;
});

$$.plugin('addClass', (elements, className) => {
    elements.forEach(element => {
        element.classList.add(className);
    });
    return this;
});

$$.plugin('removeClass', (elements, className) => {
    elements.forEach(element => {
        element.classList.remove(className);
    });
    return this;
});

$$.plugin('toggleAttribute', (elements, attribute, value) => {
    elements.forEach(element => {
        if (element.getAttribute(attribute) === value) {
            element.removeAttribute(attribute);
        } else {
            element.setAttribute(attribute, value);
        }
    });
    return this;
});

$$.plugin('scrollTo', (elements, duration = 500) => {
    if (elements.length > 0) {
        const elementPosition = elements[0].getBoundingClientRect().top;
        const startPosition = window.pageYOffset;
        const distance = elementPosition - startPosition;
        let startTime = null;

        const animation = currentTime => {
            if (startTime === null) startTime = currentTime;
            const timeElapsed = currentTime - startTime;
            const run = ease(timeElapsed, startPosition, distance, duration);
            window.scrollTo(0, run);
            if (timeElapsed < duration) requestAnimationFrame(animation);
        };

        const ease = (t, b, c, d) => {
            t /= d / 2;
            if (t < 1) return c / 2 * t * t + b;
            t--;
            return -c / 2 * (t * (t - 2) - 1) + b;
        };

        requestAnimationFrame(animation);
    }
});

$$.plugin('html', (elements, htmlContent) => {
    if (htmlContent === undefined) {
        return elements.length > 0 ? elements[0].innerHTML : null;
    } else {
        elements.forEach(element => {
            element.innerHTML = htmlContent;
        });
        return this;
    }
});

$$.plugin('attr', (elements, attributeName, value) => {
    if (value === undefined) {
        return elements.length > 0 ? elements[0].getAttribute(attributeName) : null;
    } else {
        elements.forEach(element => {
            element.setAttribute(attributeName, value);
        });
        return this;
    }
});

$$.plugin('remove', (elements) => {
    elements.forEach(element => {
        if (element.parentNode) {
            element.parentNode.removeChild(element);
        }
    });
    return this;
});

$$.plugin('append', (elements, content) => {
    elements.forEach(element => {
        if (typeof content === 'string') {
            element.insertAdjacentHTML('beforeend', content);
        } else if (content instanceof HTMLElement) {
            element.appendChild(content);
        }
    });
    return this;
});

$$.plugin('prepend', (elements, content) => {
    elements.forEach(element => {
        if (typeof content === 'string') {
            element.insertAdjacentHTML('afterbegin', content);
        } else if (content instanceof HTMLElement) {
            element.insertBefore(content, element.firstChild);
        }
    });
    return this;
});

$$.plugin('next', (elements) => {
    const nextElements = [];
    elements.forEach(element => {
        if (element.nextElementSibling) {
            nextElements.push(element.nextElementSibling);
        }
    });
    return $$(nextElements);
});

$$.plugin('empty', (elements) => {
    elements.forEach(element => {
        while (element.firstChild) {
            element.removeChild(element.firstChild);
        }
    });
    return this;
});

$$.plugin('clone', (elements) => {
    return elements.map(element => element.cloneNode(true));
});

$$.plugin('hover', (elements, onHover, onLeave) => {
    elements.forEach(element => {
        element.addEventListener('mouseenter', onHover);
        element.addEventListener('mouseleave', onLeave);
    });
    return this;
});

$$.plugin('data', (elements, key, value) => {
    if (value === undefined) {
        return elements.length > 0 ? elements[0].dataset[key] : undefined;
    } else {
        elements.forEach(element => {
            element.dataset[key] = value;
        });
        return this;
    }
});

$$.plugin('width', (elements, newWidth) => {
    if (newWidth === undefined) {
        return elements.length > 0 ? elements[0].clientWidth : undefined;
    } else {
        elements.forEach(element => {
            element.style.width = typeof newWidth === 'number' ? `${newWidth}px` : newWidth;
        });
        return this;
    }
});

$$.plugin('height', (elements, newHeight) => {
    if (newHeight === undefined) {
        return elements.length > 0 ? elements[0].clientHeight : undefined;
    } else {
        elements.forEach(element => {
            element.style.height = typeof newHeight === 'number' ? `${newHeight}px` : newHeight;
        });
        return this;
    }
});

$$.plugin('slideUp', (elements, duration = 500) => {
    elements.forEach(element => {
        element.style.transitionProperty = 'height, margin, padding';
        element.style.transitionDuration = `${duration}ms`;
        element.style.boxSizing = 'border-box';
        element.style.height = `${element.offsetHeight}px`;
        element.offsetHeight; // Force repaint
        element.style.overflow = 'hidden';
        element.style.height = '0';
        element.style.paddingTop = '0';
        element.style.paddingBottom = '0';
        element.style.marginTop = '0';
        element.style.marginBottom = '0';
        window.setTimeout(() => element.style.display = 'none', duration);
    });
    return this;
});

$$.plugin('slideDown', (elements, duration = 500) => {
    elements.forEach(element => {
        element.style.removeProperty('display');
        let display = window.getComputedStyle(element).display;
        if (display === 'none') display = 'block';
        element.style.display = display;
        let height = element.offsetHeight;
        element.style.overflow = 'hidden';
        element.style.height = '0';
        element.style.paddingTop = '0';
        element.style.paddingBottom = '0';
        element.style.marginTop = '0';
        element.style.marginBottom = '0';
        element.offsetHeight; // Force repaint
        element.style.transitionProperty = 'height, margin, padding';
        element.style.transitionDuration = `${duration}ms`;
        element.style.height = height + 'px';
        element.style.removeProperty('padding-top');
        element.style.removeProperty('padding-bottom');
        element.style.removeProperty('margin-top');
        element.style.removeProperty('margin-bottom');
        window.setTimeout(() => {
            element.style.removeProperty('height');
            element.style.removeProperty('overflow');
            element.style.removeProperty('transition-duration');
            element.style.removeProperty('transition-property');
        }, duration);
    });
    return this;
});

$$.plugin('outerWidth', (elements) => {
    return elements.length > 0 ? elements[0].offsetWidth : undefined;
});

$$.plugin('outerHeight', (elements) => {
    return elements.length > 0 ? elements[0].offsetHeight : undefined;
});

$$.plugin('parent', (elements) => {
    const parentElements = elements.map(element => element.parentElement).filter(el => el);
    return $$(parentElements);
});

$$.plugin('children', (elements) => {
    let childElements = [];
    elements.forEach(element => {
        childElements = childElements.concat(Array.from(element.children));
    });
    return $$(childElements);
});

$$.plugin('siblings', (elements) => {
    let siblingElements = [];
    elements.forEach(element => {
        Array.from(element.parentNode.children).forEach(sibling => {
            if (sibling !== element) {
                siblingElements.push(sibling);
            }
        });
    });
    return $$(siblingElements);
});

$$.plugin('cssAll', (elements, styles) => {
    elements.forEach(element => {
        for (const property in styles) {
            element.style[property] = styles[property];
        }
    });
    return this;
});

$$.plugin('removeAttr', (elements, attributeName) => {
    elements.forEach(element => {
        element.removeAttribute(attributeName);
    });
    return this;
});

$$.plugin('hasClass', (elements, className) => {
    return elements.some(element => element.classList.contains(className));
});

$$.plugin('toggle', (elements) => {
    elements.forEach(element => {
        const style = window.getComputedStyle(element);
        element.style.display = (style.display === 'none') ? '' : 'none';
    });
    return this;
});

$$.plugin('after', (elements, content) => {
    elements.forEach(element => {
        element.insertAdjacentHTML('afterend', content);
    });
    return this;
});

$$.plugin('prev', (elements) => {
    let prevElements = elements.map(element => element.previousElementSibling).filter(el => el);
    return $$(prevElements);
});

$$.plugin('val', (elements, newValue) => {
    if (newValue === undefined) {
        return elements.length > 0 ? elements[0].value : undefined;
    } else {
        elements.forEach(element => {
            element.value = newValue;
        });
        return this;
    }
});

$$.plugin('prop', (elements, propName, value) => {
    if (value === undefined) {
        return elements.length > 0 ? elements[0][propName] : undefined;
    } else {
        elements.forEach(element => {
            element[propName] = value;
        });
        return this;
    }
});

$$.plugin('each', (elements, func) => {
    elements.forEach((element, index) => {
        func.call(element, index, element);
    });
    return this;
});

$$.plugin('find', (elements, selector) => {
    let foundElements = [];
    elements.forEach(element => {
        foundElements = foundElements.concat(Array.from(element.querySelectorAll(selector)));
    });
    return $$(foundElements);
});

$$.plugin('focus', (elements) => {
    if (elements.length > 0) {
        elements[0].focus();
    }
    return this;
});

$$.plugin('blur', (elements) => {
    elements.forEach(element => {
        element.blur();
    });
    return this;
});

$$.plugin('submit', (elements) => {
    if (elements.length > 0 && elements[0].tagName === 'FORM') {
        elements[0].submit();
    }
    return this;
});

$$.plugin('disable', (elements) => {
    elements.forEach(element => {
        element.setAttribute('disabled', 'disabled');
    });
    return this;
});

$$.plugin('enable', (elements) => {
    elements.forEach(element => {
        element.removeAttribute('disabled');
    });
    return this;
});

$$.plugin('text', (elements, newText) => {
    if (newText === undefined) {
        return elements.length > 0 ? elements[0].textContent : undefined;
    } else {
        elements.forEach(element => {
            element.textContent = newText;
        });
        return this;
    }
});

$$.plugin('prependTo', (elements, targetSelector) => {
    const targetElements = document.querySelectorAll(targetSelector);
    elements.forEach(element => {
        if (targetElements.length > 0) {
            targetElements[0].insertBefore(element, targetElements[0].firstChild);
        }
    });
    return this;
});

$$.plugin('appendTo', (elements, targetSelector) => {
    const targetElements = document.querySelectorAll(targetSelector);
    elements.forEach(element => {
        if (targetElements.length > 0) {
            targetElements[0].appendChild(element);
        }
    });
    return this;
});

$$.plugin('fadeToggle', (elements, duration = 500) => {
    elements.forEach(element => {
        const computedStyle = window.getComputedStyle(element);
        if (computedStyle.display === 'none') {
            $$(element).fadeIn(duration);
        } else {
            $$(element).fadeOut(duration);
        }
    });
    return this;
});

$$.plugin('slideToggle', (elements, duration = 500) => {
    elements.forEach(element => {
        const computedStyle = window.getComputedStyle(element);
        if (computedStyle.display === 'none') {
            $$(element).slideDown(duration);
        } else {
            $$(element).slideUp(duration);
        }
    });
    return this;
});

$$.plugin('scrollTop', (elements, newPosition) => {
    if (newPosition === undefined) {
        return elements.length > 0 ? elements[0].scrollTop : undefined;
    } else {
        elements.forEach(element => {
            element.scrollTop = newPosition;
        });
        return this;
    }
});

$$.plugin('offset', (elements) => {
    if (elements.length > 0) {
        const rect = elements[0].getBoundingClientRect();
        return { top: rect.top + window.scrollY, left: rect.left + window.scrollX };
    }
    return null;
});

$$.plugin('position', (elements) => {
    if (elements.length > 0) {
        return { top: elements[0].offsetTop, left: elements[0].offsetLeft };
    }
    return null;
});

$$.plugin('one', (elements, eventType, handler) => {
    elements.forEach(element => {
        const oneTimeHandler = event => {
            element.removeEventListener(eventType, oneTimeHandler);
            handler(event);
        };
        element.addEventListener(eventType, oneTimeHandler);
    });
    return this;
});

$$.plugin('ready', (handler) => {
    if (document.readyState !== 'loading') {
        handler();
    } else {
        document.addEventListener('DOMContentLoaded', handler);
    }
});

$$.plugin('toggleClassAll', (elements, className, condition) => {
    elements.forEach(element => {
        if (condition) {
            element.classList.add(className);
        } else {
            element.classList.remove(className);
        }
    });
    return this;
});

$$.plugin('serialize', (elements) => {
    if (elements.length > 0 && elements[0].tagName === 'FORM') {
        return new URLSearchParams(new FormData(elements[0])).toString();
    }
    return '';
});

$$.plugin('isVisible', (elements) => {
    if (elements.length > 0) {
        const rect = elements[0].getBoundingClientRect();
        return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);
    }
    return false;
});

$$.plugin('load', (elements, url, callback) => {
    fetch(url).then(response => response.text()).then(data => {
        elements.forEach(element => {
            element.innerHTML = data;
        });
        if (callback) {
            callback();
        }
    });
    return this;
});

$$.plugin('outerHTML', (elements) => {
    return elements.length > 0 ? elements[0].outerHTML : undefined;
});

$$.plugin('nextAll', (elements) => {
    let allNextElements = [];
    elements.forEach(element => {
        let next = element.nextElementSibling;
        while (next) {
            allNextElements.push(next);
            next = next.nextElementSibling;
        }
    });
    return $$(allNextElements);
});

$$.plugin('prevAll', (elements) => {
    let allPrevElements = [];
    elements.forEach(element => {
        let prev = element.previousElementSibling;
        while (prev) {
            allPrevElements.push(prev);
            prev = prev.previousElementSibling;
        }
    });
    return $$(allPrevElements);
});

$$.plugin('wrap', (elements, wrapperHTML) => {
    elements.forEach(element => {
        const wrapper = document.createElement('div');
        wrapper.innerHTML = wrapperHTML;
        const wrapperNode = wrapper.firstChild;
        element.parentNode.insertBefore(wrapperNode, element);
        wrapperNode.appendChild(element);
    });
    return this;
});

$$.plugin('unwrap', (elements) => {
    elements.forEach(element => {
        const parent = element.parentNode;
        if (parent && parent.parentNode) {
            parent.parentNode.insertBefore(element, parent);
            parent.parentNode.removeChild(parent);
        }
    });
    return this;
});

$$.plugin('delegate', (elements, selector, eventType, handler) => {
    elements.forEach(element => {
        element.addEventListener(eventType, (event) => {
            if (event.target.matches(selector)) {
                handler(event);
            }
        });
    });
    return this;
});

$$.plugin('filter', (elements, criteria) => {
    if (typeof criteria === 'function') {
        return $$(elements.filter((element, index) => criteria(element, index)));
    } else {
        return $$(elements.filter(element => element.matches(criteria)));
    }
});

$$.plugin('first', (elements) => {
    return $$(elements.length > 0 ? [elements[0]] : []);$$.plugin('emptyAll', (elements) => {
    elements.forEach(element => {
        while (element.firstChild) {
            element.removeChild(element.firstChild);
        }
    });
    return this;
});

$$.plugin('replaceAll', (elements, newContent) => {
    elements.forEach(element => {
        element.outerHTML = newContent;
    });
    return this;
});

$$.plugin('htmlAll', (elements, htmlContent) => {
    if (htmlContent === undefined) {
        return elements.length > 0 ? elements[0].innerHTML : undefined;
    } else {
        elements.forEach(element => {
            element.innerHTML = htmlContent;
        });
        return this;
    }
});

$$.plugin('toggleAll', (elements) => {
    elements.forEach(element => {
        element.style.display = element.style.display === 'none' ? '' : 'none';
    });
    return this;
});

$$.plugin('scrollIntoView', (elements, options = {}) => {
    if (elements.length > 0) {
        elements[0].scrollIntoView(options);
    }
    return this;
});


$$.plugin('addClassAll', (elements, className) => {
    elements.forEach(element => {
        element.classList.add(className);
    });
    return this;
});

$$.plugin('removeClassAll', (elements, className) => {
    elements.forEach(element => {
        element.classList.remove(className);
    });
    return this;
});


$$.plugin('propAll', (elements, propName, value) => {
    if (value === undefined) {
        return elements.length > 0 ? elements[0][propName] : undefined;
    } else {
        elements.forEach(element => {
            element[propName] = value;
        });
        return this;
    }
});

$$.plugin('eachAll', (elements, action) => {
    elements.forEach((element, index) => action(element, index));
    return this;
});

$$.plugin('animateAll', (elements, properties, duration = 400, onComplete) => {
    elements.forEach(element => {
        for (const property in properties) {
            element.style.transition = `${property} ${duration}ms`;
            element.style[property] = properties[property];
        }
        if (onComplete && typeof onComplete === 'function') {
            setTimeout(onComplete, duration);
        }
    });
    return this;
});

$$.plugin('hoverAll', (elements, onHoverIn, onHoverOut) => {
    elements.forEach(element => {
        element.addEventListener('mouseenter', onHoverIn);
        element.addEventListener('mouseleave', onHoverOut);
    });
    return this;
});

$$.plugin('dataAll', (elements, key, value) => {
    if (value === undefined) {
        return elements.length > 0 ? elements[0].dataset[key] : undefined;
    } else {
        elements.forEach(element => {
            element.dataset[key] = value;
        });
        return this;
    }
});

$$.plugin('cloneAll', (elements) => {
    return elements.map(element => element.cloneNode(true));
});

$$.plugin('showAll', (elements) => {
    elements.forEach(element => {
        element.style.display = '';
    });
    return this;
});

$$.plugin('hideAll', (elements) => {
    elements.forEach(element => {
        element.style.display = 'none';
    });
    return this;
});

$$.plugin('toggleVisibilityAll', (elements) => {
    elements.forEach(element => {
        element.style.visibility = element.style.visibility === 'hidden' ? 'visible' : 'hidden';
    });
    return this;
});

$$.plugin('removeAll', (elements) => {
    elements.forEach(element => {
        if (element.parentNode) {
            element.parentNode.removeChild(element);
        }
    });
    return this;
});

$$.plugin('disableAll', (elements) => {
    elements.forEach(element => {
        if (['INPUT', 'BUTTON', 'SELECT', 'TEXTAREA'].includes(element.tagName)) {
            element.disabled = true;
        }
    });
    return this;
});

$$.plugin('fadeInAll', (elements, duration = 500) => {
    elements.forEach(element => {
        element.style.opacity = 0;
        element.style.display = '';
        let last = +new Date();
        const fade = () => {
            element.style.opacity = +element.style.opacity + (new Date() - last) / duration;
            last = +new Date();
            if (+element.style.opacity < 1) {
                requestAnimationFrame(fade);
            }
        };
        fade();
    });
    return this;
});

$$.plugin('fadeOutAll', (elements, duration = 500) => {
    elements.forEach(element => {
        element.style.opacity = 1;
        let last = +new Date();
        const fade = () => {
            element.style.opacity = +element.style.opacity - (new Date() - last) / duration;
            last = +new Date();
            if (+element.style.opacity > 0) {
                requestAnimationFrame(fade);
            } else {
                element.style.display = 'none';
            }
        };
        fade();
    });
    return this;
});

$$.plugin('onAll', (elements, eventType, handler) => {
    elements.forEach(element => {
        element.addEventListener(eventType, handler);
    });
    return this;
});

$$.plugin('offAll', (elements, eventType, handler) => {
    elements.forEach(element => {
        element.removeEventListener(eventType, handler);
    });
    return this;
});

$$.plugin('cssVars', (elements, varName, value) => {
    if (value === undefined) {
        return elements.length > 0 ? getComputedStyle(elements[0]).getPropertyValue(varName) : undefined;
    } else {
        elements.forEach(element => {
            element.style.setProperty(varName, value);
        });
        return this;
    }
});

$$.plugin('afterAll', (elements, content) => {
    elements.forEach(element => {
        element.insertAdjacentHTML('afterend', content);
    });
    return this;
});

$$.plugin('beforeAll', (elements, content) => {
    elements.forEach(element => {
        element.insertAdjacentHTML('beforebegin', content);
    });
    return this;
});

$$.plugin('addEventHandlerAll', (elements, events, handler) => {
    events.split(' ').forEach(eventType => {
        elements.forEach(element => {
            element.addEventListener(eventType, handler);
        });
    });
    return this;
});

$$.plugin('removeEventHandlerAll', (elements, events, handler) => {
    events.split(' ').forEach(eventType => {
        elements.forEach(element => {
            element.removeEventListener(eventType, handler);
        });
    });
    return this;
});

$$.plugin('scrollToTop', (elements) => {
    if (elements.length > 0) {
        elements[0].scrollTop = 0;
    }
    return this;
});


});

$$.plugin('last', (elements) => {
    return $$(elements.length > 0 ? [elements[elements.length - 1]] : []);
});

$$.plugin('not', (elements, criteria) => {
    if (typeof criteria === 'function') {
        return $$(elements.filter((element, index) => !criteria(element, index)));
    } else {
        return $$(elements.filter(element => !element.matches(criteria)));
    }
});

$$.plugin('closest', (elements, selector) => {
    let closestElements = [];
    elements.forEach(element => {
        const closest = element.closest(selector);
        if (closest) {
            closestElements.push(closest);
        }
    });
    return $$(closestElements);
});

$$.plugin('emptyAll', (elements) => {
    elements.forEach(element => {
        while (element.firstChild) {
            element.removeChild(element.firstChild);
        }
    });
    return this;
});

$$.plugin('replaceAll', (elements, newContent) => {
    elements.forEach(element => {
        element.outerHTML = newContent;
    });
    return this;
});

$$.plugin('htmlAll', (elements, htmlContent) => {
    if (htmlContent === undefined) {
        return elements.length > 0 ? elements[0].innerHTML : undefined;
    } else {
        elements.forEach(element => {
            element.innerHTML = htmlContent;
        });
        return this;
    }
});

$$.plugin('toggleAll', (elements) => {
    elements.forEach(element => {
        element.style.display = element.style.display === 'none' ? '' : 'none';
    });
    return this;
});

$$.plugin('scrollIntoView', (elements, options = {}) => {
    if (elements.length > 0) {
        elements[0].scrollIntoView(options);
    }
    return this;
});

$$.plugin('addClassAll', (elements, className) => {
    elements.forEach(element => {
        element.classList.add(className);
    });
    return this;
});

$$.plugin('removeClassAll', (elements, className) => {
    elements.forEach(element => {
        element.classList.remove(className);
    });
    return this;
});

$$.plugin('propAll', (elements, propName, value) => {
    if (value === undefined) {
        return elements.length > 0 ? elements[0][propName] : undefined;
    } else {
        elements.forEach(element => {
            element[propName] = value;
        });
        return this;
    }
});

$$.plugin('eachAll', (elements, action) => {
    elements.forEach((element, index) => action(element, index));
    return this;
});

$$.plugin('animateAll', (elements, properties, duration = 400, onComplete) => {
    elements.forEach(element => {
        for (const property in properties) {
            element.style.transition = `${property} ${duration}ms`;
            element.style[property] = properties[property];
        }
        if (onComplete && typeof onComplete === 'function') {
            setTimeout(onComplete, duration);
        }
    });
    return this;
});

$$.plugin('hoverAll', (elements, onHoverIn, onHoverOut) => {
    elements.forEach(element => {
        element.addEventListener('mouseenter', onHoverIn);
        element.addEventListener('mouseleave', onHoverOut);
    });
    return this;
});

$$.plugin('dataAll', (elements, key, value) => {
    if (value === undefined) {
        return elements.length > 0 ? elements[0].dataset[key] : undefined;
    } else {
        elements.forEach(element => {
            element.dataset[key] = value;
        });
        return this;
    }
});

$$.plugin('cloneAll', (elements) => {
    return elements.map(element => element.cloneNode(true));
});

$$.plugin('showAll', (elements) => {
    elements.forEach(element => {
        element.style.display = '';
    });
    return this;
});

$$.plugin('hideAll', (elements) => {
    elements.forEach(element => {
        element.style.display = 'none';
    });
    return this;
});

$$.plugin('toggleVisibilityAll', (elements) => {
    elements.forEach(element => {
        element.style.visibility = element.style.visibility === 'hidden' ? 'visible' : 'hidden';
    });
    return this;
});

$$.plugin('removeAll', (elements) => {
    elements.forEach(element => {
        if (element.parentNode) {
            element.parentNode.removeChild(element);
        }
    });
    return this;
});

$$.plugin('disableAll', (elements) => {
    elements.forEach(element => {
        if (['INPUT', 'BUTTON', 'SELECT', 'TEXTAREA'].includes(element.tagName)) {
            element.disabled = true;
        }
    });
    return this;
});

$$.plugin('fadeInAll', (elements, duration = 500) => {
    elements.forEach(element => {
        element.style.opacity = 0;
        element.style.display = '';
        let last = +new Date();
        const fade = () => {
            element.style.opacity = +element.style.opacity + (new Date() - last) / duration;
            last = +new Date();
            if (+element.style.opacity < 1) {
                requestAnimationFrame(fade);
            }
        };
        fade();
    });
    return this;
});

$$.plugin('fadeOutAll', (elements, duration = 500) => {
    elements.forEach(element => {
        element.style.opacity = 1;
        let last = +new Date();
        const fade = () => {
            element.style.opacity = +element.style.opacity - (new Date() - last) / duration;
            last = +new Date();
            if (+element.style.opacity > 0) {
                requestAnimationFrame(fade);
            } else {
                element.style.display = 'none';
            }
        };
        fade();
    });
    return this;
});

$$.plugin('onAll', (elements, eventType, handler) => {
    elements.forEach(element => {
        element.addEventListener(eventType, handler);
    });
    return this;
});

$$.plugin('offAll', (elements, eventType, handler) => {
    elements.forEach(element => {
        element.removeEventListener(eventType, handler);
    });
    return this;
});

$$.plugin('cssVars', (elements, varName, value) => {
    if (value === undefined) {
        return elements.length > 0 ? getComputedStyle(elements[0]).getPropertyValue(varName) : undefined;
    } else {
        elements.forEach(element => {
            element.style.setProperty(varName, value);
        });
        return this;
    }
});

$$.plugin('afterAll', (elements, content) => {
    elements.forEach(element => {
        element.insertAdjacentHTML('afterend', content);
    });
    return this;
});

$$.plugin('beforeAll', (elements, content) => {
    elements.forEach(element => {
        element.insertAdjacentHTML('beforebegin', content);
    });
    return this;
});

$$.plugin('addEventHandlerAll', (elements, events, handler) => {
    events.split(' ').forEach(eventType => {
        elements.forEach(element => {
            element.addEventListener(eventType, handler);
        });
    });
    return this;
});

$$.plugin('removeEventHandlerAll', (elements, events, handler) => {
    events.split(' ').forEach(eventType => {
        elements.forEach(element => {
            element.removeEventListener(eventType, handler);
        });
    });
    return this;
});

$$.plugin('scrollToTop', (elements) => {
    if (elements.length > 0) {
        elements[0].scrollTop = 0;
    }
    return this;
});

$$.plugin('setText', (elements, textContent) => {
    elements.forEach(element => {
        element.textContent = textContent;
    });
    return this;
});

$$.plugin('setAttribute', (elements, attributeName, attributeValue) => {
    elements.forEach(element => {
        element.setAttribute(attributeName, attributeValue);
    });
    return this;
});

$$.plugin('saveCssToJson', (elements) => {
    if (elements.length > 0) {
        const style = window.getComputedStyle(elements[0]);
        const styleObj = {};
        for (const property of style) {
            styleObj[property] = style.getPropertyValue(property);
        }
        return JSON.stringify(styleObj);
    }
    return '{}';
});

$$.plugin('saveCssToJson', (elements) => {
    if (elements.length > 0) {
        const style = window.getComputedStyle(elements[0]);
        const styleObj = {};
        for (const property of style) {
            styleObj[property] = style.getPropertyValue(property);
        }
        return JSON.stringify(styleObj);
    }
    return '{}';
});

$$.plugin('setCssFromJson', (elements, jsonStyles) => {
    const styles = JSON.parse(jsonStyles);
    elements.forEach(element => {
        for (const property in styles) {
            element.style[property] = styles[property];
        }
    });
    return this;
});

$$.plugin('saveAttributesToJson', (elements) => {
    if (elements.length > 0) {
        const attrs = elements[0].attributes;
        const attrsObj = {};
        for (let i = attrs.length - 1; i >= 0; i--) {
            attrsObj[attrs[i].name] = attrs[i].value;
        }
        return JSON.stringify(attrsObj);
    }
    return '{}';
});

$$.plugin('setAttributesFromJson', (elements, jsonAttrs) => {
    const attributes = JSON.parse(jsonAttrs);
    elements.forEach(element => {
        for (const attr in attributes) {
            element.setAttribute(attr, attributes[attr]);
        }
    });
    return this;
});

$$.plugin('selected', (elements, optionValue) => {
    let isSelected = false;
    
    elements.forEach(element => {
        if (element.type === 'radio' || element.type === 'checkbox') {
            if (optionValue !== undefined) {
                if (element.value === optionValue && element.checked) {
                    isSelected = true;
                }
            } else if (element.checked) {
                isSelected = true;
            }
        }
    });
    
    return isSelected;
});

$$.plugin('checked', (elements, optionValue) => {
    let isSelected = false;
    
    elements.forEach(element => {
        if (element.type === 'radio' || element.type === 'checkbox') {
            if (optionValue !== undefined) {
                if (element.value === optionValue && element.checked) {
                    isSelected = true;
                }
            } else if (element.checked) {
                isSelected = true;
            }
        }
    });
    
    return isSelected;
});

$$.post = (url, data, callback) => {
    const xhr = new XMLHttpRequest();
    xhr.open('POST', url, true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200) {
            callback(xhr.responseText);
        }
    };

    const encodedData = Object.keys(data).map(key => 
        encodeURIComponent(key) + '=' + encodeURIComponent(data[key])
    ).join('&');

    xhr.send(encodedData);
};

$$.plugin('check', (elements) => {
    elements.forEach(element => {
        if (element.type === 'checkbox' || element.type === 'radio') {
            element.checked = true;
        }
    });
    return this;
});

$$.plugin('uncheck', (elements) => {
    elements.forEach(element => {
        if (element.type === 'checkbox' || element.type === 'radio') {
            element.checked = false;
        }
    });
    return this;
});

$$.plugin('radio', (elements) => {
    const selected = Array.from(elements).find(element => element.checked);
    return selected ? selected.value : null;
});




const borderManager = {
    settings: [],
    backup: function(element) {
        if (!element) {
            return;
        }
        const isAlreadyBackedUp = this.settings.some(setting => setting.element === element);
        if (isAlreadyBackedUp) {
            this.restore(element);
            // console.warn('Border settings for this element are already backed up.');
            return;
        }
        const currentBorderStyle = {
            element: element,
            border: element.style.border
        };

        this.settings.push(currentBorderStyle);
    },

    restore: function(element) {
        const storedSetting = this.settings.find(setting => setting.element === element);
        if (storedSetting) {
            element.style.border = storedSetting.border;
        } else {
            // console.error('No stored settings for this element');
        }
    }
};

$$.plugin('autoValidate', (elements) => {
    let allValid = true;
    
    // Function to check for ten or more digits
    function hasTenOrMoreDigits(str) {
        return (str.match(/\d/g) || []).length >= 10;
    }

    // Regular expressions for validating different input types
    const regexPatterns = {
        'text': /.*/, // Any text
        'password': /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/, // At least 8 characters, including a number, an uppercase and a lowercase letter
        'color': /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/, // Hex color
        'date': /^\d{4}-\d{2}-\d{2}$/, // YYYY-MM-DD
        'datetime-local': /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/, // YYYY-MM-DDTHH:MM
        'email': /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
        'hidden': /.*/, // Any text (hidden inputs usually don't need validation)
        'month': /^\d{4}-\d{2}$/, // YYYY-MM
        'number': /^-?\d*\.?\d+$/, // Integer or decimal
        'range': /^-?\d*\.?\d+$/, // Similar to number
        'search': /.*/, // Any text
        'tel': /^\+?[1-9]\d{1,14}$/, // International phone number format
        'time': /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$/, // HH:MM
        'url': /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/,
        'week': /^\d{4}-W\d{2}$/, // YYYY-Www
        'textarea': /.*/, // Any text
    };

    elements.forEach(element => {
        // Backup original style if not already backed up
        if (!element.dataset.originalStyle) {
            element.dataset.originalStyle = element.style.cssText;
        }

        // Restore original style if present
        if (element.dataset.originalStyle) {
            element.style.cssText = element.dataset.originalStyle;
            delete element.dataset.originalStyle;
        }

        let isValid = true;
        const elementType = element.nodeName.toLowerCase();
        const inputType = element.type ? element.type.toLowerCase() : '';

        // New part: check for the `validate` attribute and use `validateText` plugin if present
        if (element.hasAttribute('validate')) {
            isValid = $$.plugin('validateText', [element], element.getAttribute('validate'));
        } else {
            // Existing validation logic
            if (elementType === 'input' && inputType === 'tel') {
                isValid = hasTenOrMoreDigits(element.value);
            } else if (elementType === 'input' && regexPatterns[inputType]) {
                isValid = regexPatterns[inputType].test(element.value);
            } else if (elementType === 'textarea') {
                isValid = regexPatterns['textarea'].test(element.value);
            } else if (elementType === 'select') {
                isValid = element.selectedIndex >= 0;
            }
        }

        // Visual feedback for validation
        if (!isValid) {
            allValid = false;
            if (!element.dataset.originalBorder) {
                element.dataset.originalBorder = element.style.border;
            }
            element.style.border = '2px solid red';
        } else if (element.dataset.originalBorder) {
            element.style.border = element.dataset.originalBorder;
            delete element.dataset.originalBorder;
        }
    });

    return allValid;
});


// $$.plugin('autoValidate', (elements) => {
//     let allValid = true;
//     function hasTenOrMoreDigits(str) {
//         return (str.match(/\d/g) || []).length >= 10;
//     }
//     const regexPatterns = {
//         'text': /.*/, // Any text
//         'password': /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/, // At least 6 characters
//         'color': /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/, // Hex color
//         'date': /^\d{4}-\d{2}-\d{2}$/, // YYYY-MM-DD
//         'datetime-local': /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/, // YYYY-MM-DDTHH:MM
//         'email': /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
//         'hidden': /.*/, // Any text (hidden inputs usually don't need validation)
//         'month': /^\d{4}-\d{2}$/, // YYYY-MM
//         'number': /^-?\d*\.?\d+$/, // Integer or decimal
//         'range': /^-?\d*\.?\d+$/, // Similar to number
//         'search': /.*/, // Any text
//         'tel': /^\+?[1-9]\d{1,14}$/, // International phone number format
//         'time': /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$/, // HH:MM
//         'url': /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/,
//         'week': /^\d{4}-W\d{2}$/, // YYYY-Www
//         'textarea': /.*/, // Any text
//     };

//     elements.forEach(element => {
//         borderManager.backup(element);
//         let isValid = true;
//         const elementType = element.nodeName.toLowerCase();
//         const inputType = element.type ? element.type.toLowerCase() : '';
//         console.log(element.dataset.originalStyle);
//         if (element.dataset.originalStyle) {
//             element.style.cssText = element.dataset.originalStyle;
//             delete element.dataset.originalStyle;
//         }
//         // Check for elements that need specific validation
//         if (elementType === 'input' && inputType == 'tel') {
//             console.log(inputType);
//             isValid = hasTenOrMoreDigits(element.value);
//         } else if (elementType === 'input' && regexPatterns[inputType]) {
//             isValid = regexPatterns[inputType].test(element.value);
//         } else if (elementType === 'textarea') {
//             isValid = regexPatterns['textarea'].test(element.value);
//         } else if (elementType === 'select') {
//             // Example: Validate that an option is selected
//             isValid = element.selectedIndex >= 0;
//         }
//         // Additional validation logic for other types (e.g., datalist, output) to build later

//         // Apply visual feedback
//         if (!isValid) {
//             allValid = false;
//             if (!element.dataset.originalBorder) {
//                 element.dataset.originalBorder = element.style.border;
//             }
//             element.style.border = '2px solid red';
//         } else if (element.dataset.originalBorder) {
//             element.style.border = element.dataset.originalBorder;
//             delete element.dataset.originalBorder;
//         }
//     });

//     return allValid;
// });



// fix
// $$.plugin('autoValidate', (elements) => {
//     let allValid = true;

//     // Function to check if a string contains 10 or more digits
//     function hasTenOrMoreDigits(str) {
//         return (str.match(/\d/g) || []).length >= 10;
//     }

//     const regexPatterns = {
//         'text': /.*/, // Any text
//         'password': /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/, // At least 6 characters
//         'color': /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/, // Hex color
//         'date': /^\d{4}-\d{2}-\d{2}$/, // YYYY-MM-DD
//         'datetime-local': /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/, // YYYY-MM-DDTHH:MM
//         'email': /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
//         'hidden': /.*/, // Any text (hidden inputs usually don't need validation)
//         'month': /^\d{4}-\d{2}$/, // YYYY-MM
//         'number': /^-?\d*\.?\d+$/, // Integer or decimal
//         'range': /^-?\d*\.?\d+$/, // Similar to number
//         'search': /.*/, // Any text
//         'tel': /^\+?[1-9]\d{1,14}$/, // International phone number format
//         'time': /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$/, // HH:MM
//         'url': /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/,
//         'week': /^\d{4}-W\d{2}$/, // YYYY-Www
//         'textarea': /.*/, // Any text
//         // Add a pattern for 10 or more digits
//         'tenOrMoreDigits': hasTenOrMoreDigits, 
//     };

//     elements.forEach(element => {
//         borderManager.backup(element);
//         let isValid = true;
//         const elementType = element.nodeName.toLowerCase();
//         const inputType = element.type ? element.type.toLowerCase() : '';
//         console.log(element.dataset.originalStyle);
//         if (element.dataset.originalStyle) {
//             element.style.cssText = element.dataset.originalStyle;
//             delete element.dataset.originalStyle;
//         }

//         // Check for elements that need specific validation
//         if (elementType === 'input' && regexPatterns[inputType]) {
//             // Use the function for 'tenOrMoreDigits' type
//             if (inputType === 'tenOrMoreDigits') {
//                 isValid = regexPatterns[inputType](element.value);
//             } else {
//                 isValid = regexPatterns[inputType].test(element.value);
//             }
//         } else if (elementType === 'textarea') {
//             isValid = regexPatterns['textarea'].test(element.value);
//         } else if (elementType === 'select') {
//             // Example: Validate that an option is selected
//             isValid = element.selectedIndex >= 0;
//         }
//         // Additional validation logic for other types (e.g., datalist, output) to build later

//         // Apply visual feedback
//         if (!isValid) {
//             allValid = false;
//             if (!element.dataset.originalBorder) {
//                 element.dataset.originalBorder = element.style.border;
//             }
//             element.style.border = '2px solid red';
//         } else if (element.dataset.originalBorder) {
//             element.style.border = element.dataset.originalBorder;
//             delete element.dataset.originalBorder;
//         }
//     });

//     return allValid;
// });
// fix


$$.plugin('css', (elements, property, value) => {
    elements.forEach(element => {
        element.style[property] = value;
    });
    return this;
});





$$.plugin('checkmark', (elements) => {
    return Array.from(elements).some(element => 
        (element.type === 'checkbox' || element.type === 'radio') && element.checked
    );
});


$$.plugin('click', (elements) => {
    elements.forEach(element => {
        element.click(); // Simulate a click event on the element
    });
    return this;
});
$$.plugin('keypress', (elements, handler) => {
    elements.forEach(element => {
        element.addEventListener('keypress', handler);
    });
    return this;
});

// SIG // Begin signature block
// SIG // MIIlhwYJKoZIhvcNAQcCoIIleDCCJXQCAQExDzANBglghkgBZQMEAgEFADB3Bgor
// SIG // BgEEAYI3AgEEoGkwZzAyBgorBgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvT
// SIG // UJACAQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQgQeQ+TaS+Qqoc1mZ0
// SIG // HABsJEB6KazDqIAXR+NDhQrMz+ygghLVMIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkw
// SIG // DQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRAw
// SIG // DgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAvBgNV
// SIG // BAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcN
// SIG // MTYwMjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwG
// SIG // A1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jw
// SIG // b3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0
// SIG // aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPkP3aMr
// SIG // fcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4X
// SIG // g4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8
// SIG // P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrI
// SIG // JZK0bnoix/geoeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI
// SIG // 68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9A
// SIG // hnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6
// SIG // niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJgUEAnl6/f8UImKIY
// SIG // LEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2UzU1
// SIG // /Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+X
// SIG // rOvvLsi81xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbt
// SIG // G3PrGqUNxCITIJRWCk4sbE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTd
// SIG // BAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaA
// SIG // FN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0B
// SIG // AQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq
// SIG // 9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E
// SIG // +ZUfijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSd
// SIG // a/wZY52jvATGGAslu1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYaky
// SIG // lszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2
// SIG // tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VF
// SIG // P3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJvTYw/ud3sqB1
// SIG // l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI
// SIG // Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w
// SIG // 7G6KVwuA406ywKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2Eb
// SIG // vPofkSvXRAdeuims2cXp71NIWuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7kwggZyMIIE
// SIG // WqADAgECAghkM1HTxzifCDANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzEO
// SIG // MAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBD
// SIG // b3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBSb290IENlcnRpZmljYXRpb24g
// SIG // QXV0aG9yaXR5IFJTQTAeFw0xNjA2MjQyMDQ0MzBaFw0zMTA2MjQyMDQ0MzBaMHgx
// SIG // CzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjER
// SIG // MA8GA1UECgwIU1NMIENvcnAxNDAyBgNVBAMMK1NTTC5jb20gQ29kZSBTaWduaW5n
// SIG // IEludGVybWVkaWF0ZSBDQSBSU0EgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
// SIG // ggIKAoICAQCfgxNzqrDGbSHL24t6h3TQcdyOl3Ka5LuINLTdgAPGL0WkdJq/Hg9Q
// SIG // 6p5tePOf+lEmqT2d0bKUVz77OYkbkStW72fL5gvjDjmMxjX0jD3dJekBrBdCfVgW
// SIG // QNz51ShEHZVkMGE6ZPKX13NMfXsjAm3zdetVPW+qLcSvvnSsXf5qtvzqXHnpD0Oc
// SIG // tVIFD+8+sbGP0EmtpuNCGVQ/8y8Ooct8/hP5IznaJRy4PgBKOm8yMDdkHseudQfY
// SIG // VdIYyQ6KvKNc8HwKp4WBwg6vj5lc02AlvINaaRwlE81y9eucgJvcLGfE3ckJmNVz
// SIG // 68Qho+Uyjj4vUpjGYDdkjLJvSlRyGMwnh/rNdaJjIUy1PWT9K6abVa8mTGC0uVz+
// SIG // q0O9rdATZlAfC9KJpv/XgAbxwxECMzNhF/dWH44vO2jnFfF3VkopngPawismYTJb
// SIG // oFblSSmNNqf1x1KiVgMgLzh4gL32Bq5BNMuURb2bx4kYHwu6/6muakCZE93vUN8B
// SIG // uvIE1tAx3zQ4XldbyDgeVtSsSKbt//m4wTvtwiS+RGCnd83VPZhZtEPqqmB9zcLl
// SIG // L/Hr9dQg1Zc0bl0EawUR0tOSjAknRO1PNTFGfnQZBWLsiePqI3CY5NEv1IoTGEaT
// SIG // ZeVYc9NMPSd6Ij/D+KNVt/nmh4LsRR7Fbjp8sU65q2j3m2PVkUG8qQIDAQABo4H7
// SIG // MIH4MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU3QQJB6L1en1SUxKSle44
// SIG // gCUNplkwMAYIKwYBBQUHAQEEJDAiMCAGCCsGAQUFBzABhhRodHRwOi8vb2NzcHMu
// SIG // c3NsLmNvbTARBgNVHSAECjAIMAYGBFUdIAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMw
// SIG // OwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybHMuc3NsLmNvbS9zc2wuY29tLXJz
// SIG // YS1Sb290Q0EuY3JsMB0GA1UdDgQWBBRUwv4QlQCTzWr158DX2bJLuI8M4zAOBgNV
// SIG // HQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAPUPJodwr5miyvXWyfCNZj05
// SIG // gtOII9iCv49UhCe204MH154niU2EjlTRIO5gQ9tXQjzHsJX2vszqoz2OTwbGK1mG
// SIG // f+tzG8rlQCbgPW/M9r1xxs19DiBAOdYF0q+UCL9/wlG3K7V7gyHwY9rlnOFpLnUd
// SIG // TsthHvWlM98CnRXZ7WmTV7pGRS6AvGW+5xI+3kf/kJwQrfZWsqTU+tb8LryXIbN2
// SIG // g9KR+gZQ0bGAKID+260PZ+34fdzZcFt6umi1s0pmF4/n8OdX3Wn+vF7h1YyfE7uV
// SIG // mhX7eSuF1W0+Z0duGwdc+1RFDxYRLhHDsLy1bhwzV5Qe/kI0Ro4xUE7bM1eV+jjk
// SIG // 5hLbq1guRbfZIsr0WkdJLCjoT4xCPGRo6eZDrBmRqccTgl/8cQo3t51Qezxd96JS
// SIG // gjXktefTCm9r/o35pNfVHUvnfWII+NnXrJlJ27WEQRQu9i5gl1NLmv7xiHp0up51
// SIG // 6eDap8nMLDt7TAp4z5T3NmC2gzyKVMtODWgqlBF1JhTqIDfM63kXdlV4cW3iSTgz
// SIG // N9vkbFnHI2LmvM4uVEv9XgMqyN0eS3FE0HU+MWJliymm7STheh2ENH+kF3y0rH0/
// SIG // NVjLw78a3Z9UVm1F5VPziIorMaPKPlDRADTsJwjDZ8Zc6Gi/zy4WZbg8Zv87spWr
// SIG // mo2dzJTw7XhQf+xkR6OdMIIGejCCBGKgAwIBAgIQPBnaWyQzI+wY4HLhDfTAzjAN
// SIG // BgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO
// SIG // BgNVBAcMB0hvdXN0b24xETAPBgNVBAoMCFNTTCBDb3JwMTQwMgYDVQQDDCtTU0wu
// SIG // Y29tIENvZGUgU2lnbmluZyBJbnRlcm1lZGlhdGUgQ0EgUlNBIFIxMB4XDTI0MDIw
// SIG // NzAxMTQwOVoXDTI1MDIwNTAxMTQwOVowYTELMAkGA1UEBhMCVVMxEDAOBgNVBAgM
// SIG // B0Zsb3JpZGExFjAUBgNVBAcMDUxhbmQgTycgTGFrZXMxEzARBgNVBAoMClNjb3R0
// SIG // IFJlcGgxEzARBgNVBAMMClNjb3R0IFJlcGgwggGiMA0GCSqGSIb3DQEBAQUAA4IB
// SIG // jwAwggGKAoIBgQCC2LhXs1NQFGLB7sETzBZxQryIOxPFAloJYDOJwho5tEsCMkRt
// SIG // iZydmIH4Dky+hv4ii0Kqaqj6cVkVwojlhV+r2bg345puYfexrmsoODsEvE4jzgqs
// SIG // iekJNkVbXYn9QsdFYYxLTKgvEAbe2PXkpeB+RIVWaLSXEVCaMoZ6BhAy8a/iNkSN
// SIG // zUE5KND4j9qvQslUcU5SJTj+K6DySejJfcgtkPv/SQI+9q/tgpDCnfqG5KaoPjrz
// SIG // ATbThMtAAn7Lga3WZQCr7uV3s6XAXq5nw1Hn5nqiXHj0yCuXMYPf86AcDMjoOt42
// SIG // kj8j5FDbzEnkmf5JOJJVSVy0fvLazrOK3I6sOb54LskV5dehsWTzJHNNHKwOjzmO
// SIG // W7mv3VbQ3wohTCAzKXmx2n/HL0C0/klabPlVAFVch78mHqJjtpeuwgMdHx9Zo8aP
// SIG // zpb6g1/yQgzW2QfVtxxUj5o/ObcutsdxuweSNUJKUJJkN+fHHEcBIco2SbqenNmE
// SIG // kHIxAx/r1TQdE/8CAwEAAaOCAZUwggGRMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgw
// SIG // FoAUVML+EJUAk81q9efA19myS7iPDOMwegYIKwYBBQUHAQEEbjBsMEgGCCsGAQUF
// SIG // BzAChjxodHRwOi8vY2VydC5zc2wuY29tL1NTTGNvbS1TdWJDQS1Db2RlU2lnbmlu
// SIG // Zy1SU0EtNDA5Ni1SMS5jZXIwIAYIKwYBBQUHMAGGFGh0dHA6Ly9vY3Nwcy5zc2wu
// SIG // Y29tMFEGA1UdIARKMEgwCAYGZ4EMAQQBMDwGDCsGAQQBgqkwAQMDATAsMCoGCCsG
// SIG // AQUFBwIBFh5odHRwczovL3d3dy5zc2wuY29tL3JlcG9zaXRvcnkwEwYDVR0lBAww
// SIG // CgYIKwYBBQUHAwMwTQYDVR0fBEYwRDBCoECgPoY8aHR0cDovL2NybHMuc3NsLmNv
// SIG // bS9TU0xjb20tU3ViQ0EtQ29kZVNpZ25pbmctUlNBLTQwOTYtUjEuY3JsMB0GA1Ud
// SIG // DgQWBBRN5yTEvfxaho8b7VwlyRxlCEM4UzAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZI
// SIG // hvcNAQELBQADggIBAJxeEdGEc/MQSrzh2T2BaWtDV9x0Y4/NWVR3LZlGOe4hP2ux
// SIG // h7FzoBZWXuJknrCWJArzPzG3xSLpqzZJf9k4zm/vQ9pwNLS4RSoBr7wfNpl7oICr
// SIG // PXTTRD1Yz6XBNr8INDRaU+8y1rj71JhiZmrsox6VdkPoNcUnsk9DTwNzsCwcBtR1
// SIG // gTKpnyVgpEdxguEuIp8F6qD6RfR9333omy5RKzOLjU3K2NY6uUJ9rkTIyJU0vFDH
// SIG // Rw52dPPAl0Lz3buSRhdx07pGWF8zqGSmEEeGHDJH17NUwrRhbYbv2V4zKxZ3WXOd
// SIG // fCg/S6uOA+coz5cexL8veVr2br/D/BSpnFjhu5w2CtJsJSuHFrSBnZ9Pj55HfQAa
// SIG // pQao2nZld45Tu7BskSd2kxAXtXMPtvWJ4d+Q5XjYn0Ms7dW10c4/jYvkQ9pg2A71
// SIG // 2CU+hSCtj7beWPecSakYxDlO/iFktMIkiNiuHkLxxrJGXc//02f8ZyXqnlTdOI42
// SIG // cbj57YO/BOtq+5MhdWceLOctBdN4KF6Co9nufynhH3RR2mzG25gXohuaMYkhx46J
// SIG // 26H3QBRJdRpSFiU8lQNnHsgIw8A/yUbF2ZlxGuGeFcXaWCYPxM0H0Jt0jzOMa6pW
// SIG // w9hTkBkR35G0UgYtPHA+K2jeJNLGcntFi3aV54+5YKeRbWpL28c0Q3eIgBc8MYIS
// SIG // CjCCEgYCAQEwgYwweDELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYD
// SIG // VQQHDAdIb3VzdG9uMREwDwYDVQQKDAhTU0wgQ29ycDE0MDIGA1UEAwwrU1NMLmNv
// SIG // bSBDb2RlIFNpZ25pbmcgSW50ZXJtZWRpYXRlIENBIFJTQSBSMQIQPBnaWyQzI+wY
// SIG // 4HLhDfTAzjANBglghkgBZQMEAgEFAKCBrzAUBgorBgEEAYI3AgEMMQYwBKECgAAw
// SIG // GQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisG
// SIG // AQQBgjcCARUwLQYJKoZIhvcNAQk0MSAwHjANBglghkgBZQMEAgEFAKENBgkqhkiG
// SIG // 9w0BAQsFADAvBgkqhkiG9w0BCQQxIgQgcA+QIc988q40Eg4NiC4ZOsaoyT5goCBO
// SIG // whqiT5m6kEowDQYJKoZIhvcNAQELBQAEggGAVxgJLFo6JuSiKcOPtSw7XX8Qx3DM
// SIG // sJdyVgBGQYBgVyibsPhdMFNskClM/RTKBAso7ZzSxSvb9NVBu6r3y2+a/hILnzW3
// SIG // tT6MyyMrmLGKkp+R8JDpGVvb0T5lRJTWA5lCWtt2etBoDUmBAmhDEYuLmIHfIZ3v
// SIG // kVRfp0o24vpOC3oGy7cRZ9Ircci/ouYc1ujn4T4Myvm9TpqrSaVZiukIziraglDf
// SIG // DV6dIB0vvNJh3iVZ48ZLwxXoh3+x50pc3TDZJJKhX5r/SehDdpNviDaoaAKhHpej
// SIG // jM3cszpbz4DrT03LCqL5Sfuo7rH2LyPp/zBiDUxb1vWZ+HAwcRducz/K9nQpvBSt
// SIG // WMDDDZWI9dmkMpmAB/w134lNZHCKibJklukfBcFPbYNtI91npnu6Z/hGaYr9n8OK
// SIG // tdjjFOOgm2wK56MyGlLoWCz3TzN3TgulH4DKltlW8Ds1hf75fBu4mI+YhiQ7ZG00
// SIG // DMEb+4ETKC+LfZjZrma6WdZTg5FdqC2XYK7CoYIPHDCCDxgGCisGAQQBgjcDAwEx
// SIG // gg8IMIIPBAYJKoZIhvcNAQcCoIIO9TCCDvECAQMxDTALBglghkgBZQMEAgEwfwYL
// SIG // KoZIhvcNAQkQAQSgcARuMGwCAQEGDCsGAQQBgqkwAQMGATAxMA0GCWCGSAFlAwQC
// SIG // AQUABCBn4uYkkDt94XY2HT2bus5j9Y6w6eFl5+8TmfRUfZcX1QIIFJrGmyXftJoY
// SIG // DzIwMjQwMjA3MjE0ODExWjADAgEBAgYBjYWK79Ogggv9MIIE+TCCAuGgAwIBAgIQ
// SIG // GtYIp9Y0tc3el8ujzPDQSzANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJVUzEO
// SIG // MAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0b24xETAPBgNVBAoMCFNTTCBD
// SIG // b3JwMS8wLQYDVQQDDCZTU0wuY29tIFRpbWVzdGFtcGluZyBJc3N1aW5nIFJTQSBD
// SIG // QSBSMTAeFw0yMjEyMDkxODMwNTFaFw0zMjEyMDYxODMwNTBaMGsxCzAJBgNVBAYT
// SIG // AlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjERMA8GA1UECgwI
// SIG // U1NMIENvcnAxJzAlBgNVBAMMHlNTTC5jb20gVGltZXN0YW1waW5nIFVuaXQgMjAy
// SIG // MjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABN58+pIllLLZNNnIXgaHKkSv1gJj
// SIG // jgpCv7j9Hb7hA4fIDEIvJgwiiVUtDNqo7JJ4jqcjiP/4vVoHcm/0d4E9O7ijggFa
// SIG // MIIBVjAfBgNVHSMEGDAWgBQMnRAljpqnG5mHQ88IfuG9gZD0zzBRBggrBgEFBQcB
// SIG // AQRFMEMwQQYIKwYBBQUHMAKGNWh0dHA6Ly9jZXJ0LnNzbC5jb20vU1NMLmNvbS10
// SIG // aW1lU3RhbXBpbmctSS1SU0EtUjEuY2VyMFEGA1UdIARKMEgwPAYMKwYBBAGCqTAB
// SIG // AwYBMCwwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LnNzbC5jb20vcmVwb3NpdG9y
// SIG // eTAIBgZngQwBBAIwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwRgYDVR0fBD8wPTA7
// SIG // oDmgN4Y1aHR0cDovL2NybHMuc3NsLmNvbS9TU0wuY29tLXRpbWVTdGFtcGluZy1J
// SIG // LVJTQS1SMS5jcmwwHQYDVR0OBBYEFAW6k9Hf4hSsICqGWTF/KHIOraxfMA4GA1Ud
// SIG // DwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAWqi0lhBjDURozMeTk2UktonP
// SIG // EN/eeN5k1LeIys69k8AycnHM94hYaqd4jqvEZ07B7CpLeBhwI9koRqDZZVOOuEGk
// SIG // W03mgJ1udoJC5Zwke9/cfXTg0GFiyqQKszBaijcTZR1rDj08F5mhkUzKQ+tpMb8j
// SIG // dbvoWg/UG7Mj3GFIbnoPNGfeUjAiDzQmCKaxEBIkTBzDgrZSTRrVo7eEnz9EeFns
// SIG // RnZtIRB/LKbrqRRu4aySzHNuC0JJmmTvpct9P6tI4gvlJj5YIiJV34WtQ98uEUxL
// SIG // PGPBtW5EDkUt1wvv6n2S5KCClQj6bZ/PCuil1foYemnkR9h2lYZkN0H1H59sqIsL
// SIG // niBvN3a5sCsSfVAc7B7krWpeqNit6Vq0hs2UDk1RLsEmaZyOUu2IYx+rD9+ZJ8Y6
// SIG // +jWV7UcWdEWPVAlhf2tiS7aJO2MZLqOJQCY/pDbKK6efyc1W2BRgKisPk2yBuZUS
// SIG // rNxwgiQoiZb0jFYc5IUa7jVmzClIYoMAFx2r41xRVPCODpCW8aLetC0BVkppdbNt
// SIG // tlKJHuEzQIO1w/Bc8p2Fu10aQma8K8F9ffnurv52aQHdcdgu16jER8KXMxEwn0Ao
// SIG // XSpKHqF/g9OD1ZsvAU0IKVZB4z0Je2mLkRYPfC7kOV8gOkic3BRkM86tU7QMa736
// SIG // ax3vadow9dlOX5y+u/0wggb8MIIE5KADAgECAhBtUhhwh+gjTYVgANCAj5NWMA0G
// SIG // CSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G
// SIG // A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTEwLwYDVQQD
// SIG // DChTU0wuY29tIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBMB4XDTE5
// SIG // MTExMzE4NTAwNVoXDTM0MTExMjE4NTAwNVowczELMAkGA1UEBhMCVVMxDjAMBgNV
// SIG // BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMREwDwYDVQQKDAhTU0wgQ29ycDEv
// SIG // MC0GA1UEAwwmU1NMLmNvbSBUaW1lc3RhbXBpbmcgSXNzdWluZyBSU0EgQ0EgUjEw
// SIG // ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCuURAT0vk8IKAghd7JUBxk
// SIG // yeH9xek0/wp/MUjoclrFXqhh/fGH91Fc+7fm0MHCE7A+wmOiqBj9ODrJAYGq3rm3
// SIG // 3jCnHSsCBNWAQYyoauLq8IjqsS1JlXL29qDNMMdwZ8UNzQS7vWZMDJ40JSGNphMG
// SIG // TIA2qn2bohGtgRc4p1395ESypUOaGvJ3t0FNL3BuKmb6YctMcQUF2sqooMzd89h0
// SIG // E6ujdvBDo6ZwNnWoxj7YmfWjSXg33A5GuY9ym4QZM5OEVgo8ebz/B+gyhyCLNNhh
// SIG // 4Mb/4xvCTCMVmNYrBviGgdPZYrym8Zb84TQCmSuX0JlLLa6WK1aO6qlwISbb9bVG
// SIG // h866ekKblC/XRP20gAu1CjvcYciUgNTrGFg8f8AJgQPOCc1/CCdaJSYwhJpSdheK
// SIG // OnQgESgNmYZPhFOC6IKaMAUXk5U1tjTcFCgFvvArXtK4azAWUOO1Y3fdldIBL6Lj
// SIG // kzLUCYJNkFXqhsBVcPMuB0nUDWvLJfPimstjJ8lF4S6ECxWnlWi7OElVwTnt1GtR
// SIG // qeY9ydvvGLntU+FecK7DbqHDUd366UreMkSBtzevAc9aqoZPnjVMjvFqV1pYOjzm
// SIG // TiVHZtAc80bAfFe5LLfJzPI6DntNyqobpwTevQpHqPDN9qqNO83r3kaw8A9j+HZi
// SIG // Sw2AX5cGdQP0kG0vhzfgBwIDAQABo4IBgTCCAX0wEgYDVR0TAQH/BAgwBgEB/wIB
// SIG // ADAfBgNVHSMEGDAWgBTdBAkHovV6fVJTEpKV7jiAJQ2mWTCBgwYIKwYBBQUHAQEE
// SIG // dzB1MFEGCCsGAQUFBzAChkVodHRwOi8vd3d3LnNzbC5jb20vcmVwb3NpdG9yeS9T
// SIG // U0xjb21Sb290Q2VydGlmaWNhdGlvbkF1dGhvcml0eVJTQS5jcnQwIAYIKwYBBQUH
// SIG // MAGGFGh0dHA6Ly9vY3Nwcy5zc2wuY29tMD8GA1UdIAQ4MDYwNAYEVR0gADAsMCoG
// SIG // CCsGAQUFBwIBFh5odHRwczovL3d3dy5zc2wuY29tL3JlcG9zaXRvcnkwEwYDVR0l
// SIG // BAwwCgYIKwYBBQUHAwgwOwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybHMuc3Ns
// SIG // LmNvbS9zc2wuY29tLXJzYS1Sb290Q0EuY3JsMB0GA1UdDgQWBBQMnRAljpqnG5mH
// SIG // Q88IfuG9gZD0zzAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJIZ
// SIG // dQ2mWkLPGQfZ8vyU+sCb8BXpRJZaL3Ez3VDlE3uZk3cPxPtybVfLuqaci0W6SB22
// SIG // JTMttCiQMnIVOsXWnIuAbD/aFTcUkTLBI3xys+wEajzXaXJYWACDS47BRjDtYlDW
// SIG // 14gLJxf8W6DQoH3jHDGGy8kGJFOlDKG7/YrK7UGfHtBAEDVe6lyZ+FtCsrk7dD/I
// SIG // iL/+Q3Q6SFASJLQ2XI89ihFugdYL77CiDNXrI2MFspQGswXEAGpHuaQDTHUp/LdR
// SIG // 3TyrIsLlnzoLskUGswF/KF8+kpWUiKJNC4rPWtNrxlbXYRGgdEdx8SMjUTDClldc
// SIG // rknlFxbqHsVmr9xkT2QtFmG+dEq1v5fsIK0vHaHrWjMMmaJ9i+4qGJSD0stYfQ6v
// SIG // 0PddT7EpGxGd867Ada6FZyHwbuQSadMb0K0P0OC2r7rwqBUe0BaMqTa6LWzWItgB
// SIG // jGcObXeMxmbQqlEz2YtAcErkZvh0WABDDE4U8GyV/32FdaAvJgTfe9MiL2nSBioY
// SIG // e/g5mHUSWAay/Ip1RQmQCvmF9sNfqlhJwkjy/1U1ibUkTIUBX3HgymyQvqQTZLLy
// SIG // s6pL2tCdWcjI9YuLw30rgZm8+K387L7ycUvqrmQ3ZJlujHl3r1hgV76s3WwMPgKk
// SIG // 1bAEFMj+rRXimSC+Ev30hXZdqyMdl/il5Ksd0vhGMYICWTCCAlUCAQEwgYcwczEL
// SIG // MAkGA1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMREw
// SIG // DwYDVQQKDAhTU0wgQ29ycDEvMC0GA1UEAwwmU1NMLmNvbSBUaW1lc3RhbXBpbmcg
// SIG // SXNzdWluZyBSU0EgQ0EgUjECEBrWCKfWNLXN3pfLo8zw0EswCwYJYIZIAWUDBAIB
// SIG // oIIBYTAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8X
// SIG // DTI0MDIwNzIxNDgxMVowKAYJKoZIhvcNAQk0MRswGTALBglghkgBZQMEAgGhCgYI
// SIG // KoZIzj0EAwIwLwYJKoZIhvcNAQkEMSIEIKdQ/CG3UBlEv4WcElUu1Gen28QonzKm
// SIG // UsKi7mQyAEBxMIHJBgsqhkiG9w0BCRACLzGBuTCBtjCBszCBsAQgjcXEJULSTxXP
// SIG // 9cgZbtRag2jUyta9y+Qhqd4jUJ2L0yIwgYswd6R1MHMxCzAJBgNVBAYTAlVTMQ4w
// SIG // DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjERMA8GA1UECgwIU1NMIENv
// SIG // cnAxLzAtBgNVBAMMJlNTTC5jb20gVGltZXN0YW1waW5nIElzc3VpbmcgUlNBIENB
// SIG // IFIxAhAa1gin1jS1zd6Xy6PM8NBLMAoGCCqGSM49BAMCBEgwRgIhAJpG/OpnezwS
// SIG // j8sx7VpyB9+kal+g4mzKqdNtkIQFHzoAAiEA5uSuD7usiX0owIuUX8rzPjPiUZmt
// SIG // woUQhpVt5n6y4nM=
// SIG // End signature block


name: cookies.md
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\documentation\cookies.md
mime: unavailable
content:
___
## Breakdown of each default setting:

1. `days`: The number of days until the cookie expires. In this case, the default is 3650 days (approximately 10 years), which effectively makes the cookie long-lived.

2. `secure`: When set to `true`, the cookie will only be transmitted over secure protocols like HTTPS. This is set to `false` by default.

3. `httpOnly`: If `true`, the cookie cannot be accessed through JavaScript, which helps prevent cross-site scripting (XSS) attacks. The default is `false`.

4. `sameSite`: This attribute controls whether a cookie is sent with cross-site requests. Options are `Lax`, `Strict`, or `None`. The default is set to `Lax` for a reasonable balance between security and usability.



___
## Usage Examples

1. **Setting a Basic Cookie**
~~~js
   _.cookies.set('username', 'JohnDoe');
~~~
   This will create a cookie named `username` with the value `JohnDoe`, using the default expiration of 3650 days, not secure, not HTTP-only, and with `SameSite=Lax`.

2. **Setting a Secure Cookie with Custom Expiry**
~~~js
   _.cookies.set('secureData', 'xyz123', { days: 30, secure: true });
~~~
   Creates a cookie that expires in 30 days, is secure (only sent over HTTPS), retains other defaults (`httpOnly=false`, `SameSite=Lax`).

3. **Setting an HttpOnly Cookie**
~~~js
   _.cookies.set('sessionToken', 'abc123', { httpOnly: true });
~~~
   This cookie can't be accessed via JavaScript, enhancing protection against XSS attacks, and will use default settings for other attributes.

4. **Deleting a Cookie**
~~~js
   _.cookies.delete('username');
~~~
   Removes the `username` cookie.

5. **Listing All Cookies**
~~~js
   var allCookies = _.cookies.list();
   console.log(allCookies);
~~~
   Retrieves all cookies and logs them to the console. Each cookie is represented as an object with `name` and `value`.

6. **Setting a SameSite Strict Cookie**
~~~js
   _.cookies.set('authToken', 'token123', { sameSite: 'Strict' });
~~~
   Creates a cookie with `SameSite=Strict`, which means it won't be sent along with cross-site requests. This is useful for cookies that should be highly restricted, like authentication tokens.

7. **Custom Expiry with Default Security Settings**
~~~js
   _.cookies.set('preferences', JSON.stringify({ theme: 'dark' }), { days: 7 });
~~~
   Sets a cookie storing user preferences, expiring in 7 days, while other settings like `secure`, `httpOnly`, and `sameSite` follow the default values.



___
# Configurations

### 1. Basic Configuration
This is the most basic configuration with a long expiry and default security settings.

~~~js
const basicCookieSettings = {
    days: 3650, // Long-lived cookie, 10 years
    secure: false, // Not restricted to secure protocols
    httpOnly: false, // Accessible through JavaScript
    sameSite: 'Lax' // Default cross-site request setting
};
~~~

### 2. Secure Profile
This profile is more secure, suitable for handling sensitive information.

~~~js
const secureCookieProfile = {
    days: 30, // Shorter expiry for security
    secure: true, // Transmitted only over HTTPS
    httpOnly: true, // Protected against XSS attacks
    sameSite: 'Strict' // Strict cross-site request control
};
~~~

### 3. Session-Only Configuration
Cookies with this profile will expire when the browser session ends.

~~~js
const sessionOnlyCookieSettings = {
    days: 0, // Session cookie
    secure: false,
    httpOnly: false,
    sameSite: 'Lax'
};
~~~

### 4. Cross-Domain Profile
For cookies that need to be accessed across different domains.

~~~js
const crossDomainCookieProfile = {
    days: 365, // 1 year
    secure: true, // Recommended for cross-domain
    httpOnly: false,
    sameSite: 'None' // Necessary for cross-domain cookies
};
~~~

### 5. GDPR Compliant Profile
For use in scenarios where GDPR compliance is necessary.

~~~js
const gdprCompliantCookieProfile = {
    days: 365, // Typically a year as per GDPR guidelines
    secure: true,
    httpOnly: true,
    sameSite: 'Strict' // Enhanced privacy control
};
~~~

### Using the Profiles
You can easily switch the default settings of your cookie manager by assigning one of these profiles. For example:

~~~js
_.cookies.defaults = secureCookieProfile; // Set defaults to secure profile
~~~



___
## Options explained

### Example 1: Setting a Basic Cookie
This example sets a basic cookie without specifying any additional options, thus relying on the default settings.

~~~js
_.cookies.set('username', 'JohnDoe');
// Sets a cookie named 'username' with the value 'JohnDoe'. 
// Uses default settings for expiration, security, HTTP-only, and SameSite.
~~~

### Example 2: Secure Cookie with Custom Expiry
This example sets a secure cookie with a custom expiration period.

~~~js
_.cookies.set('sessionToken', 'abc123', { days: 7, secure: true, httpOnly: true });
// Sets a secure, HTTP-only cookie named 'sessionToken' that expires in 7 days.
~~~

### Example 3: Cross-Domain Cookie
Setting a cookie that is accessible across different subdomains.

~~~js
_.cookies.set('crossDomainId', 'xyz789', { days: 365, secure: true, sameSite: 'None' });
// Sets a cookie that's accessible across subdomains, secure, and with a 'None' SameSite policy.
// Note: 'Secure' is required if 'SameSite' is set to 'None'.
~~~

### Example 4: Session Cookie
Creating a cookie that expires when the browser session ends.

~~~js
_.cookies.set('sessionInfo', 'sessionData', { days: 0 });
// Sets a session cookie named 'sessionInfo'. It expires when the browser session ends.
~~~

### Example 5: GDPR Compliant Cookie
Setting a cookie with settings that are more aligned with GDPR compliance.

~~~js
_.cookies.set('preferences', JSON.stringify({ theme: 'dark' }), { days: 365, secure: true, httpOnly: true, sameSite: 'Strict' });
// Sets a GDPR-friendly cookie storing user preferences, with enhanced security and privacy settings.
~~~

### Example 6: Updating a Cookie
Updating an existing cookie's value and extending its expiration.

~~~js
_.cookies.set('username', 'JaneDoe', { days: 30 });
// Updates the 'username' cookie with a new value 'JaneDoe', extending its life for another 30 days.
~~~

### Example 7: Custom Secure Profile
Using a custom profile for a secure cookie.

~~~js
// First, define a secure profile
const secureProfile = { days: 90, secure: true, httpOnly: true, sameSite: 'Strict' };

// Set a cookie using this profile
_.cookies.set('authToken', 'secureToken123', secureProfile);
// Sets a highly secure cookie named 'authToken' with a custom secure profile.
~~~


name: dd.md
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\documentation\dd.md
mime: unavailable
content:
[gpt](https://chat.openai.com/c/983dbfd6-1f7f-4e65-9915-751314565942)
~~~js

// post
// Example usage of the post method
$$.post(
    'file.php', {
        'id': 123,
    },
    (data) => {
        console.log(data);
    }
);
_.poster = {
    send: function() {
        var valid = $$('#password').validateText('password, strong');
        if (!valid) {
            $$('#password').borderOn();
            $$('#badpass').css('display','inline-block');
        } else {
            $$('#password').borderOff();
            $$('#badpass').css('display','none');
            $$.post(
                    'https://a.sds.sh/apps/chat/createUser.php', {
                        'username': $$('#username').val(),
                        'password': $$('#password').val(),
                    },
                    (data) => {
                        console.log(data);
                    }
            );
        }
    },
};

// color
$$('.subject').color('red');

// Fade in elements with class 'subject'
$$('.subject').fadeIn(1000);

// Fade out elements after 2 seconds
setTimeout(() => {
    $$('.subject').fadeOut(1000);
}, 2000);

// Toggle a class on click
$$('.subject').on('click',() => {
    $$(this).toggleClass('highlighted');
});

// Animate elements to move 100px to the right
$$('.subject').animate({transform: 'translateX(100px)'}, 500);

// Add a class to elements with class 'subject'
$$('.subject').addClass('new-class');

// Remove a class from elements with class 'subject'
$$('.subject').removeClass('old-class');

// Toggle 'data-state' attribute between 'active' and no attribute
$$('.subject').toggleAttribute('data-state', 'active');

// Scroll to the first element with class 'subject'
$$('.subject').scrollTo();

// Change the HTML content of elements with class 'subject'
$$('.subject').html('<p>New content</p>');

// Set or get the 'data-id' attribute of elements with class 'subject'
$$('.subject').attr('data-id', '123');
const dataId = $$('.subject').attr('data-id');

// Remove elements with class 'subject' from the DOM
$$('.subject').remove();

// Append new content to elements with class 'subject'
$$('.subject').append('<span>Appended content</span>');

// Prepend new content to elements with class 'subject'
$$('.subject').prepend('<span>Prepended content</span>');

// Select the next sibling of elements with class 'subject'
$$('.subject').next().css('color', 'red');

// Empty the contents of elements with class 'subject'
$$('.subject').empty();

// Replace elements with class 'subject' with new content
$$('.subject').replaceWith('<div>New Content</div>');

// Clone the first '.subject' element
const clonedElement = $$('.subject').clone()[0];

// Add hover effects to elements with class 'subject'
$$('.subject').hover(
    () => console.log('Mouse entered'),
    () => console.log('Mouse left')
);

// Set or retrieve data associated with the first '.subject' element
$$('.subject').data('key', 'value123');
const dataValue = $$('.subject').data('key');

// Set or get the width of elements with class 'subject'
$$('.subject').width(300); // Set width to 300px
const width = $$('.subject').width(); // Get width

// Set or get the height of elements with class 'subject'
$$('.subject').height(150); // Set height to 150px
const height = $$('.subject').height(); // Get height

// Slide up elements with class 'subject'
$$('.subject').slideUp(400);

// Slide down elements with class 'subject'
$$('.subject').slideDown(400);

// Remove a click event listener from elements with class 'subject'
const handleClick = () => console.log('Clicked');
$$('.subject').on('click', handleClick);
$$('.subject').off('click', handleClick);

// Get the outer width of the first element with class 'subject'
const outerWidth = $$('.subject').outerWidth();

// Get the outer height of the first element with class 'subject'
const outerHeight = $$('.subject').outerHeight();

// Get the parent of the first element with class 'subject'
const parent = $$('.subject').parent();

// Get the children of the first element with class 'subject'
const children = $$('.subject').children();

// Get the siblings of the first element with class 'subject'
const siblings = $$('.subject').siblings();

// Apply multiple CSS styles to elements with class 'subject'
$$('.subject').cssAll({ color: 'blue', fontSize: '16px' });

// Remove the 'data-example' attribute from elements with class 'subject'
$$('.subject').removeAttr('data-example');

// Check if any of the elements with class 'subject' have the class 'active'
const hasActiveClass = $$('.subject').hasClass('active');

// Toggle visibility of elements with class 'subject'
$$('.subject').toggle();

// Insert content after each element with class 'subject'
$$('.subject').after('<span>Additional content</span>');

// Select the previous sibling of elements with class 'subject'
$$('.subject').prev().css('color', 'green');

// Set or get the value of form elements with class 'input-field'
$$('.input-field').val('New Value');
const inputValue = $$('.input-field').val();

// Set or get a property of elements with class 'checkbox'
$$('.checkbox').prop('checked', true);
const isChecked = $$('.checkbox').prop('checked');

// Iterate over each element with class 'list-item'
$$('.list-item').each((index, element) => {
    console.log(`Item ${index}:`, element.textContent);
});

// Find elements with class 'child' inside elements with class 'parent'
$$('.parent').find('.child').css('fontWeight', 'bold');

// Focus the first input field with class 'input-field'
$$('.input-field').focus();

// Blur all input fields with class 'input-field'
$$('.input-field').blur();

// Trigger submit on the first form with id 'my-form'
$$('form#my-form').submit();

// Disable all buttons with class 'submit-button'`
$$('.submit-button').disable();

// Enable all input fields with class 'input-field'
$$('.input-field').enable();

// Set or get the text content of elements with class 'info'
$$('.info').text('New text content');
const infoText = $$('.info').text();

// Prepend elements with class 'new-item' to the element with id 'container'
$$('.new-item').prependTo('#container');

// Append elements with class 'footer' to the element with id 'end'
$$('.footer').appendTo('#end');

// Toggle visibility of elements with class 'toggle-item' with a fade effect
$$('.toggle-item').fadeToggle(600);

// Toggle visibility of elements with class 'slide-item' with a slide effect
$$('.slide-item').slideToggle(600);

// Set or get the scroll position of an element with id 'container'
$$('div#container').scrollTop(100);
const scrollPosition = $$('div#container').scrollTop();

// Get the offset position of an element with class 'element'
const offset = $$('.element').offset();

// Get the position relative to the offset parent of an element with class 'element'
const position = $$('.element').position();

// Attach a one-time click event to elements with class 'button'
$$('.button').one('click', () => console.log('Button clicked once'));

// Execute a function when the DOM is fully loaded
$$.ready(() => console.log('DOM is ready'));

// Toggle class 'active' based on a condition
const isActive = true;
$$('.item').toggleClassAll('active', isActive);

// Serialize form data
const formData = $$('form#myForm').serialize();

// Check if an element with id 'banner' is visible
const isVisible = $$('#banner').isVisible();

// Load and insert HTML from a URL into an element with id 'content'
$$('#content').load('https://example.com/data', () => console.log('Content loaded'));

// Get the outer HTML of an element with class 'header'
const outerHtml = $$('.header').outerHTML();

// Select all following siblings of elements with class 'item'
$$('.item').nextAll().css('background-color', 'yellow');

// Select all preceding siblings of elements with class 'item'
$$('.item').prevAll().css('background-color', 'green');

// Wrap each '.photo' element with a div
$$('.photo').wrap('<div class="photo-wrapper"></div>');

// Unwrap each '.photo'
$$('.photo').unwrap();

// Delegate click event on dynamic elements within '#container'
$$('#container').delegate('.dynamic-btn', 'click', () => console.log('Button clicked'));

// Filter elements with class 'item' that are visible
$$('.item').filter(el => el.offsetWidth > 0 && el.offsetHeight > 0).css('border', '1px solid red');

// Select the first element with class 'item'
$$('.item').first().css('color', 'blue');

// Select the last element with class 'item'
$$('.item').last().css('color', 'green');

// Select all elements with class 'item' except the first one
$$('.item').not(':first-child').css('opacity', '0.5');

// Find the closest ancestor with class 'container' for each '.item'
$$('.item').closest('.container').css('background-color', 'lightgrey');

// Empty all elements with class 'container'
$$('.container').emptyAll();

// Replace all '.old-content' elements with new content
$$('.old-content').replaceAll('<div>New Content</div>');

// Set HTML content for all elements with class 'details'
$$('.details').htmlAll('<p>Updated details</p>');

// Toggle the display of all elements with class 'toggle-element'
$$('.toggle-element').toggleAll();

// Scroll the first element with class 'important' into view
$$('.important').scrollIntoView({ behavior: 'smooth' });

// Add a class to all elements with class 'item'
$$('.item').addClassAll('new-class');

// Remove a class from all elements with class 'item'
$$('.item').removeClassAll('old-class');

// Set or get an attribute for all elements with class 'button'
$$('.button').attrAll('disabled', 'disabled');
const type = $$('.button').attrAll('type');

// Remove an attribute from all elements with class 'input'
$$('.input').removeAttrAll('disabled');

// Set or get a property for all elements with class 'checkbox'
$$('.checkbox').propAll('checked', true);
const isChecked = $$('.checkbox').propAll('checked');

// Execute a function for each element with class 'item'
$$('.item').eachAll((element, index) => console.log(`Item ${index}:`, element));

// Animate all elements with class 'box'
$$('.box').animateAll({ opacity: '0.5', transform: 'translateX(50px)' }, 300, () => console.log('Animation complete'));

// Add hover effects to all elements with class 'card'
$$('.card').hoverAll(() => console.log('Hover in'), () => console.log('Hover out'));

// Set or retrieve data attributes for all elements with class 'info'
$$('.info').dataAll('role', 'admin');
const dataRole = $$('.info').dataAll('role');

// Clone all elements with class 'template'
const clones = $$('.template').cloneAll();

// Show all elements with class 'hidden-item'
$$('.hidden-item').showAll();

// Hide all elements with class 'visible-item'
$$('.visible-item').hideAll();

// Toggle visibility of all elements with class 'toggle-item'
$$('.toggle-item').toggleVisibilityAll();

// Remove all elements with class 'remove-item'
$$('.remove-item').removeAll();

// Disable all input elements within a form with id 'my-form'
$$('form#my-form input').disableAll();

// Fade in all elements with class 'faded-out'
$$('.faded-out').fadeInAll(1000);

// Fade out all elements with class 'visible'
$$('.visible').fadeOutAll(1000);

// Add a click event handler to all buttons
$$('button').onAll('click', () => console.log('Button clicked'));

// Remove click event handlers from all buttons
$$('button').offAll('click', someHandlerFunction);

// Set a CSS variable on all elements with class 'dynamic-theme'
$$('.dynamic-theme').cssVars('--primary-color', 'blue');

// Insert content after all elements with class 'item'
$$('.item').afterAll('<div>New Content After</div>');

// Insert content before all elements with class 'item'
$$('.item').beforeAll('<div>New Content Before</div>');

// Add 'click' and 'mouseover' event handlers to all elements with class 'interactive'
$$('.interactive').addEventHandlerAll('click mouseover', (event) => console.log(`Event: ${event.type}`));

// Remove 'click' and 'mouseover' event handlers from all elements with class 'interactive'
$$('.interactive').removeEventHandlerAll('click mouseover', someHandlerFunction);

// Scroll the first element with class 'scrollable-container' to the top
$$('.scrollable-container').scrollToTop();

$$.plugin('setHTML', (elements, htmlContent) => {
    elements.forEach(element => {
        element.innerHTML = htmlContent;
    });
    return this;
});

$$.plugin('getHTML', (elements) => {
    return elements.length > 0 ? elements[0].innerHTML : undefined;
});

$$.plugin('getText', (elements) => {
    return elements.length > 0 ? elements[0].textContent : undefined;
});


// Set the HTML content of all elements with class 'content'
$$('.content').setHTML('<p>New HTML content</p>');

// Get the HTML content of the first element with class 'content'
const contentHTML = $$('.content').getHTML();

// Get the text content of the first element with class 'info'
const infoText = $$('.info').getText();

// Set the text content of all elements with class 'info'
$$('.info').setText('Updated text content');

// Set a data attribute for all elements with class 'button'
$$('.button').setAttribute('data-clicked', 'true');

// Scroll the first element with class 'important' into view
$$('.important').scrollIntoView({ behavior: 'smooth' });

// Copy CSS styles from '.source-class' elements to '.target-class' elements
$$('.source-class').copyCss('.target-class');

// Save CSS of the first element with class 'example' to a JSON string
const cssJson = $$('.example').saveCssToJson();

// Apply CSS from a JSON string to all elements with class 'example'
const jsonStyles = '{"color": "blue", "font-size": "16px"}';
$$('.example').setCssFromJson(jsonStyles);

// Save attributes of the first element with class 'example' to a JSON string
const attrsJson = $$('.example').saveAttributesToJson();

// Apply attributes from a JSON string to all elements with class 'example'
const jsonAttrs = '{"data-role": "user", "title": "Example"}';
$$('.example').setAttributesFromJson(jsonAttrs);

// Applies a default black solid border of 1px width
$$('.my-element').border();

// Applies a red solid border of 1px width
$$('.my-element').border('red');

// Applies a red solid border of 1px width
$$('.my-element').border('red');

// Applies a blue solid border of 2px width
$$('.my-element').border('blue', '2px');

// Applies a green dashed border of 3px width
$$('.my-element').border('green', '3px', 'dashed');

// Validate required input
const isRequiredFilled = $$('.required-field').validateRequired();

// Validate email
const isEmailValid = $$('.email-field').validateEmail();

// Validate numeric input
const isNumeric = $$('.numeric-field').validateNumeric();

// Check (select) all checkboxes with class 'check-item'
$$('.check-item').check();

// Check (select) all radio buttons within a group
$$('input[name="radio-group"]').check();

// Determine which radio button is selected in a group named 'radio-group'
const selectedRadioValue = $$('input[name="radio-group"]').radio();
console.log(selectedRadioValue); // Logs the value of the selected radio button, or null if none are selected

// Check if any checkbox with class 'check-item' is checked
const isAnyChecked = $$('.check-item').checkmark();
// Check if any radio button within a group is checked
const isAnyRadioChecked = $$('input[name="radio-group"]').checkmark();
// Example: Check if any checkbox whose ID starts with 'item-' is checked
const isAnyItemChecked = $$('input[type="checkbox"][id^="item-"]').checkmark();
console.log(isAnyItemChecked); // Logs 'true' if any such checkbox is checked, 'false' otherwise


~~~


name: editor.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\editor.js
mime: unavailable
content:
function autoGrow(textarea) {
    try {
        textarea.style.height = 'auto';
        textarea.style.height = textarea.scrollHeight + 'px';
    } catch (error) {}
}
document.addEventListener('DOMContentLoaded', function() {
    // Call autoGrow after the DOM has fully loaded
    try {
        var textarea = document.getElementById('md_file');
        autoGrow(textarea);
    } catch (error) {}
});



function formatMarkdownChecklist(textareaId) {
    const textarea = document.getElementById(textareaId);
    if (!textarea) {
        console.error(`Textarea with id '${textareaId}' not found.`);
        return;
    }

    const lines = textarea.value.split('\n');
    const formattedLines = [];

    for (const line of lines) {
        const trimmedLine = line.trim();
        if (trimmedLine === '' || trimmedLine.startsWith('- ')) {
            // Skip blank lines and lines that already start with '- '
            formattedLines.push(line);
        } else if (/^\s*- \[x\]/.test(trimmedLine)) {
            // Line starts with '- [x]', replace with '- [ ]'
            formattedLines.push(line.replace(/^\s*- \[x\]/, '- [ ]'));
        } else {
            // Line starts with text or spaces, add '- [ ]' preserving indentation
            const precedingSpaces = line.match(/^\s*/)[0];
            formattedLines.push(`${precedingSpaces}- [ ] ${line.slice(precedingSpaces.length)}`);
        }
    }

    // Update the textarea with the formatted content
    textarea.value = formattedLines.join('\n');
}


function convertToMarkdownBullets(textareaId) {
  const textarea = document.getElementById(textareaId);
  if (!textarea) {
    console.error(`Textarea with ID "${textareaId}" not found.`);
    return;
  }

  const lines = textarea.value.split('\n');
  const resultLines = [];

  for (const line of lines) {
    const trimmedLine = line.trim();
    const leadingSpaces = line.match(/^\s*/)[0];
    
    if (trimmedLine.startsWith('-') || trimmedLine === '') {
      // If the line already starts with a bullet or is empty, leave it unchanged
      resultLines.push(line);
    } else {
      // Add a bullet and preserve leading spaces
      resultLines.push(leadingSpaces + '- ' + trimmedLine);
    }
  }

  textarea.value = resultLines.join('\n');
}

function convertMarkdownToList(textareaId) {
  // Get the textarea element by its ID
  const textarea = document.getElementById(textareaId);

  if (!textarea) {
    console.error(`Textarea with ID '${textareaId}' not found.`);
    return;
  }

  // Get the text content of the textarea
  const inputText = textarea.value;

  // Split the input text into lines
  const lines = inputText.split('\n');

  // Initialize an empty array to store the output lines
  const outputLines = [];

  // Regular expression to match markdown bullets and checklists
  // const markdownRegex = /^([\s\t]*)(-|\*|\d+\.)\s+(\[ \]|\[x\])?\s*(.*)/;
  const markdownRegex = /^([\s\t]*)(-|\*|\d+\.|\+)\s+(\[ \]|\[x\])?\s*(.*)/;


  for (const line of lines) {
    // Check if the line matches the markdown regex
    const match = line.match(markdownRegex);

    if (match) {
      const leadingSpaces = match[1];
      const text = match[4];

      // Remove markdown bullet prefixes and add back preceding spaces
      const outputLine = leadingSpaces + text;
      outputLines.push(outputLine);
    } else {
      // Preserve the line as is
      outputLines.push(line);
    }
  }

  // Join the output lines back into a single string
  const outputText = outputLines.join('\n');

  // Update the textarea with the converted text
  textarea.value = outputText;
}


document.addEventListener('keydown', function(event) {
    if (event.ctrlKey) {
        if (event.key === 's' || event.key === 'S') {
            event.preventDefault();
            eyeformeta.app.save();
        }
    }
});


eyeformeta = typeof eyeformeta !== 'undefined' ? eyeformeta : {} ;
eyeformeta.v = typeof eyeformeta.v !== 'undefined' ? eyeformeta.v : {} ;
eyeformeta.app = {
        last: Date.now(),
        record: 0,
        path: '',
        guid: '',
        delete: function() {
            var path = eyeformeta.app.path;
            $.post(
                    'index.php?save=1', {
                                                'path': '_docs_/'+path,
                                                'delete': '1',
                                },
                    function(data) {
                        console.log(data);
                        alert('deleted');
                    }
            );
            // eyeformeta.app.delete()
        }, //==============================================
        validate: function() {
            var path = $('#new-path').val().trim().replaceAll(' ','_');
            if (eyeformeta.app.path == path) { return false; }
            if ( !path.length ) { return false; }

            if ( path.startsWith('\\') ) { return false; }
            if ( path.startsWith('/') ) { return false; }
            if ( path.startsWith('.') ) { return false; }
            if ( !path.endsWith('.md') ) { return false; }

            if ( path.indexOf('/') > -1 ) {
                parts = path.split('/');
                var np=[];
                for (var i = 0; i < parts.length; i++) {
                    // np.push( parts[i].replace(/[^a-z0-9]/gi, '_') );
                    np.push( parts[i].replace(/[^a-z0-9\-\_\.]/gi, '_') );
                }
                path = np.join('/');
            }
            $('#new-path').val(path);

            return true;
            // eyeformeta.app.validate()
        }, //==============================================
        tab: function(tabname) {
            var i;
            var x = document.getElementsByClassName("tabs");
            for (i = 0; i < x.length; i++) {
                x[i].style.display = "none";
            }
            document.getElementById(tabname).style.display = "block";  
            // eyeformeta.app.tab('tabname')
        }, //==============================================
        save: function() {
            if ($("#html_ta").length) {
                var data = tinyMCE.get('html_ta').getContent();
            } else {
                var data = $('#md_file').val();
            }
        
            var valid = eyeformeta.app.validate();
            setTimeout(function() {
                        var path = eyeformeta.app.path;
                        var posting = {
                                                'path': '_docs_/'+path,
                                                'f': path,
                                                'file': data,
                                }
                        var rn=false;
                        if ( valid ) {
                            var rn=true;
                            posting['rename'] = $('#new-path').val().trim().replaceAll(' ','_');
                        }
                        _posting_=posting;
                        console.log( posting );
                        // return 0;
                        $.post(
                                'index.php?save=1', posting,
                                function(data) {
                                    console.log(data);
                                    if ( rn ) {
                                        window.location.href=window.location.href.replace('edit=','view=').replace(path,$('#new-path').val().trim().replaceAll(' ','_'));
                                    } else {
                                        window.location.href=window.location.href.replace('edit=','view=');
                                    }
                                }
                        );
            }, 800);
            // eyeformeta.app.save();
        }, //==============================================
        rename_hide: function() {
            $('#new-path').css('display','none');
            // eyeformeta.app.rename_hide();
        }, //==============================================
        rename: function() {
            // eyeformeta.app.last = Date.now();
            var diff
            // var diff = Date.now() - eyeformeta.app.last;
            // if ( diff < 3000 ) {
            //     $('#new-path').val(eyeformeta.app.path);
            //     eyeformeta.app.rename_hide();
            // }



            $('#new-path').val(eyeformeta.app.path);
            $('#new-path').css('display','block');
            $('#new-path').focus();
            var timeOut=10000
            setTimeout(function() {
                diff = Date.now() - eyeformeta.app.last;

                if (diff > timeOut-500 && eyeformeta.app.path == $('#new-path').val()) {
                    eyeformeta.app.rename_hide();
                }
            }, timeOut);
            // eyeformeta.app.rename();
        }, //==============================================
        three: function() {
                                    $.fn.centered = function () {
                                       this.css ("position", "absolute");
                                       this.css ("top", ($ (window). height () - this.height ()) / 2 + $ (window). scrollTop () + "px");
                                       this.css ("left", ($ (window). width () - this.width ()) / 2 + $ (window). scrollLeft () + "px")
                                       return this;
                                    }
                                    $.fn.hcentered = function () {
                                       this.css ("position", "absolute");
                                       this.css ("left", ($ (window). width () - this.width ()) / 2 + $ (window). scrollLeft () + "px")
                                       return this;
                                    }
                                    $.fn.vcentered = function () {
                                       this.css ("position", "absolute");
                                       this.css ("top", ($ (window). height () - this.height ()) / 2 + $ (window). scrollTop () + "px");
                                       return this;
                                    }
            console.log(data);
            // eyeformeta.app.three();
        } //==============================================
};
eyeformeta.url = {
        v: function(parameter, defaultvalue) {
            if ( typeof parameter == 'undefined')
                return eyeformeta.url.vars();
            return eyeformeta.url.var(parameter, defaultvalue);
            // eyeformeta.url.v()
        }, //==============================================
        vars: function() {
            var vars = {};
            var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function( m, key, value ) {
                vars[key] = value;
            });
            return vars;
            // eyeformeta.url.vars()
        }, //==============================================
        var: function( parameter, defaultvalue ) {
            var urlparameter = defaultvalue;
            if( typeof eyeformeta.url.vars()[parameter] != 'undefined')
                urlparameter = eyeformeta.url.vars()[parameter];
            return urlparameter;
            // eyeformeta.url.var(name)
        }, //==============================================
        addParam: function(url, param, value) {
            var a = document.createElement('a'), regex = /(?:\?|&amp;|&)+([^=]+)(?:=([^&]*))*/gi; var params = {}, match, str = []; a.href = url; while (match = regex.exec(a.search)) if (encodeURIComponent(param) != match[1]) str.push(match[1] + (match[2] ? "=" + match[2] : "")); str.push(encodeURIComponent(param) + (value ? "=" + encodeURIComponent(value) : "")); a.search = str.join("&");
            return a.href;
            // eyeformeta.url.addParam(url, param, value)
        }, //==============================================
        dic: function(url) {
            uj = new URL( url )
            var port = uj.port;
            var protocol = uj.protocol.replace(':','')
            if ( uj.port == '' ) {
                if ( protocol == 'https' ) {
                    var port = '443'
                } else if ( protocol == 'http' ) {
                    var port = '80'
                }
            }
            var params = {}
            var parts = uj.search.replace('?','').split('&')
            for (var i = 0; i < parts.length; i++) {
                var pp = parts[i].split('=')
                params[pp[0]] = pp[1];
            }
            var result = {
                        'href': url,
                        'origin': uj.origin,
                        'domain': uj.hostname.replace('www.','').toLowerCase(),
                        'host': uj.hostname,
                        'protocol': protocol,
                        'folder': '',
                        'path': uj.hostname.replace('www.','').toLowerCase()+uj.pathname,
                        'port': port,
                        'param': uj.search,
                        'params': params,
                        'username': uj.username,
                        'password': uj.password,
            };
            result.path=result.path.replace('//','/');
            result.folder=result.path.replace(result.domain,'');
            var temp=result.folder.split('/');
            temp.pop();
            result.folder=temp.join('/').replace('//','/');
            return result;
            // eyeformeta.url.dic(url);
        }, //==============================================
};
const crypt = (salt, text) => {
  const textToChars = (text) => text.split("").map((c) => c.charCodeAt(0));
  const byteHex = (n) => ("0" + Number(n).toString(16)).substr(-2);
  const applySaltToChar = (code) => textToChars(salt).reduce((a, b) => a ^ b, code);
  return text
    .split("")
    .map(textToChars)
    .map(applySaltToChar)
    .map(byteHex)
    .join("");
};
const decrypt = (salt, encoded) => {
  const textToChars = (text) => text.split("").map((c) => c.charCodeAt(0));
  const applySaltToChar = (code) => textToChars(salt).reduce((a, b) => a ^ b, code);
  return encoded
    .match(/.{1,2}/g)
    .map((hex) => parseInt(hex, 16))
    .map(applySaltToChar)
    .map((charCode) => String.fromCharCode(charCode))
    .join("");
};
// --> bind manager
eyeformeta.binder = {
        v: {
            recent: Date.now(),
        },
        binder: [],
        status: 0,
        loaded: 0,
        var: null,
        recent: Date.now(),
        q: {'ctrl':0},
        key: '',
        keyframe: {},
        which: 0,
        unbind: function() {
            for (var i = 0; i < eyeformeta.binder.binder.length; i++) {
                var binder = eyeformeta.binder.binder[i];
                binder.el.removeEventListener( binder.type, binder.handler );
            }
            // eyeformeta.binder.unbind();
        }, //==============================================
        bind: function(el,type,handler,end) {
            // console.log('bind');
            eyeformeta.binder.binder.push({ 'el': el, 'type': type, 'handler': handler });
            if (typeof end == 'undefined') {
                el.addEventListener( type, handler );
            } else {
                el.addEventListener( type, handler, end );
            }
            // console.log('bind');
        }, //==============================================
        l: {
            // eyeformeta.binder.l.active.ctrl
            active: {},
            history: [],
            patterns: {
                'ctrl': {
                    pattern: ['Control', 'Shift', '1'],
                    script: function() {
                        console.log("Executing 'test' pattern script.");
                        // Add any specific actions you want to perform here
                    }
                }
                // Add more patterns with their respective scripts here as needed
            },
            log: function(add) {
                this.history.push(add);
                if (this.history.length > 10) {
                    this.history.shift();
                }
            },
            activator: function() {
                for (const label in this.patterns) {
                    const patternObj = this.patterns[label];
                    const pattern = patternObj.pattern;
                    // Check if the end of the history matches the pattern
                    if (this.history.slice(-pattern.length).toString() === pattern.toString()) {
                        // If pattern matches, record the activation time
                        this.active[label] = Date.now();
                        console.log(`Pattern "${label}" activated.`);
                        // Check if a script function is defined and execute it
                        if (typeof patternObj.script === 'function') {
                            patternObj.script();
                        }
                    }
                }
            },
            do: function(event) {
                // Record the key value
                this.log(event.key); 
                
                // Call the activator function with the patterns you want to check
                this.activator();
            },
        },


        // l: {
        //     active: {},
        //     history: [],
        //     patterns: [
        //                 { label: 'test', pattern: ['Control', 'Shift', '1'] },
        //     ],
        //     log: function(add) {
        //         this.history.push(add);
        //         if (this.history.length > 10) {
        //             this.history.shift();
        //         }
        //     },
        //     activator: function(patterns) {
        //         patterns.forEach(pattern => {
        //             // Check if the end of the history matches the pattern
        //             if (this.history.slice(-pattern.pattern.length).toString() === pattern.pattern.toString()) {
        //                 // If pattern matches, record the activation time
        //                 this.active[pattern.label] = Date.now();
        //                 console.log(`Pattern "${pattern.label}" activated.`);
        //                 alert(pattern.label);
        //             }
        //         });
        //     },
        //     do: function(event) {
        //         // Record the key value
        //         this.log(event.key); 
        //         this.patterns
        //         // Call the activator function with the patterns you want to check
        //         this.activator();
        //     },
        // },
        listen: function(event) {
            eyeformeta.binder.l.do(event);
            // console.log('listen');
            // 17 = ctrl
            // 18 = alt
            // 13 = enter
            // console.log(event.key,event.keyCode);
            // console.log(event.which,event.key);
            // console.log(0,event.keyCode,event.key,event.which);
            // console.log(1,event.keyCode);
            // console.log(2,event.key);
            // console.log(3,event.which);
            // console.log(event.which);
            // console.log(Date.now() - eyeformeta.binder.recent);



// --> fn
    // --> fselect_line
    var select_line = function() {
        sel=eyeformeta.selection.get(  document.querySelector('#md_file'), true  );
        var val=$('#md_file').val();
        // var index=eyeformeta.oc.scan($('#md_file').val());
        // console.log(index);
        sel.start--;
        i=sel.start;
        try {
            // console.log('val[i]:',val[i].charCodeAt(i),val[i+1].charCodeAt(i+1))
            if (val[i+1]=='\n'||val[i]=='\n') {
                // console.log('ddddddddddddddddddddd');
                i--; sel.start--;
            } else {
                // console.log('zzzzzzzzzzzzzzzzzzzzz');
            }
        } catch (err) {}
        var first=1;
        while (i>0) {
            i--;
            // if (first && val[i]=='\n') i--;

            // first=0;
            
            // console.log('i',i)
            if (val[i]=='\n') {
                sel.start=i+1;
                while(true) {
                    i++;
                    if (val[i]=='\n') {
                        sel.end=i;

        // while (i>0) {
        //     i--;
        //     if (val[i]=='\n' || val[i]=='\r') {
        //         sel.start=i+1;
        //     }
        // }
        // if (i==0) {
        //     sel.start=0;
        // }

                        $('#md_file').selectRange(sel.start,sel.end);
                        console.log(2001);
                        return [sel.start,sel.end];
                    }
                    if (i==val.length) {
                        sel.end=i;
                        $('#md_file').selectRange(sel.start,sel.end);
                        console.log(2002);
                        return [sel.start,sel.end];
                    }
                }
            }
            // if (index.hasOwnProperty(i)) {
            //     sel.start=i;
            //     sel.end=index[i];
            //     $('#md_file').selectRange(sel.start,sel.end);
            //     console.log(2003);
            //     return null;
            //     break;
            // }
        }
        if (i==0) {
                sel.start=i+1;
                while(true) {
                    i++;
                    if (val[i]=='\n') {
                        sel.end=i-1;
                        $('#md_file').selectRange(sel.start,sel.end);
                        console.log(2001);
                        return [sel.start,sel.end];
                    }
                    if (i==val.length) {
                        sel.end=i;
                        $('#md_file').selectRange(sel.start,sel.end);
                        console.log(2002);
                        return [sel.start,sel.end];
                    }
                }
        }
    }
    // /--> fselect_line
// /--> fn



// console.log('Control',Date.now() - eyeformeta.binder.keyframe['Control']);
// console.log('Shift',Date.now() - eyeformeta.binder.keyframe['Shift']);
// console.log('ArrowUp',Date.now() - eyeformeta.binder.keyframe['ArrowUp']);
// console.log(eyeformeta.binder.keyframe);
            eyeformeta.binder.keyframe[event.key] = Date.now();
            if (
                    (
                        typeof eyeformeta.binder.keyframe['Control'] !== 'undefined' &&
                        typeof eyeformeta.binder.keyframe['Shift'] !== 'undefined' &&
                        typeof eyeformeta.binder.keyframe['ArrowUp'] !== 'undefined'
                    ) && 
                    (
                        Date.now() - eyeformeta.binder.keyframe['Control'] < 400  &&
                        Date.now() - eyeformeta.binder.keyframe['Shift'] < 400  &&
                        Date.now() - eyeformeta.binder.keyframe['ArrowUp'] < 400 
                    )
                ) {
                    // console.log('keyframe');
                    // select_line();

                sel=eyeformeta.selection.get(  document.querySelector('#md_file'), false  );
                var a = eyeformeta.oc.up(document.querySelector('#md_file').value,sel.start);
                console.log(a)

// one, two
                
                // console.log(one, two)
                // $('#md_file').selectRange(one[0],one[1]);
                // setTimeout(function() {$('#md_file').selectRange(two[0],two[1]);}, 1000);


                    event.preventDefault();
                    // return null;

            }

            // console.log(event.key);
            // if ( event.key=='Control' && event.key=='Shift' && event.key=='ArrowUp' ) {
            //     // select_line();
            //     sel=eyeformeta.selection.get(  document.querySelector('#md_file'), false  );
            //     var one, two = eyeformeta.oc.up(document.querySelector('#md_file'),sel.start);
            //     console.log(one, two)
            //     $('#md_file').selectRange(one[0],one[1]);
            //     setTimeout(function() {$('#md_file').selectRange(two[0],two[1]);}, 1000);


            //     event.preventDefault();
            //     return null;
            // }

            // if ($('#md_file').is(":focus") && ( event.key == '{' || event.key == '(' || event.key == '[' || event.key == '"' || event.key == "'"  )) {
            if (false) {
                var val,txt,a,b,oc;
                oc = {
                    '{': '}',
                    '[': ']',
                    '(': ')',
                    '"': '"',
                    "'": "'",
                };


                sel=eyeformeta.selection.get(  document.querySelector('#md_file'), false  );
                // console.log(sel);
                val=$('#md_file').val();
                txt=val.slice(sel.start,sel.end);
                a=val.slice(0,sel.start);
                b=val.slice(sel.end,val.length);
                data=a+event.key+txt+oc[event.key]+b;
                $('#md_file').val(data);

                // $('#md_file').selectRange(sel.end+2);
                $('#md_file').selectRange(sel.start+1,sel.end+1);

                event.preventDefault();
            }

            if ( event.shiftKey ) {
                eyeformeta.binder.k_shiftKey = Date.now()
            }
            // if ( event.key == 'd' ) {
            //     console.log('d');
            //     eyeformeta.binder.k_d = Date.now()
            // }
            // event.preventDefault();
            // 17 = ctrl
            // 18 = alt
            // 13 = enter
            // console.log(0,event.keyCode,event.key,event.which);
            if ( Date.now() - eyeformeta.binder.k_shiftKey < 400 && Date.now() - eyeformeta.binder.recent < 400 && event.key == 'D' ) {
                event.preventDefault();
                console.log('ctr,shift,D');
                let iline = select_line();
                // console.log('iline:',iline);
                let _md_file_ = $('#md_file').val();
                let dline = _md_file_.slice(iline[0],iline[1]);
                $('#md_file').val(_md_file_.slice(0,iline[1])+'\n'+dline+_md_file_.slice(iline[1],_md_file_.length))
                // console.log('dline:',dline);
                
                setTimeout(function() {$('#md_file').selectRange(iline[1]);}, 500);
            }
            if ( 
                typeof eyeformeta.binder.l.active.ctrl !== 'undefined' &&
                event.which == 17 && Date.now() - eyeformeta.binder.recent < 400 ) {
                let epoch = new Date().getTime();
                console.log(epoch);
                eyeformeta.binder.q.ctrl++;
                console.log('eyeformeta.binder.q.ctrl:',eyeformeta.binder.q.ctrl)
                // console.log(Date.now() - eyeformeta.binder.recent);
                if (eyeformeta.binder.q.ctrl==1) 
                    sel=eyeformeta.selection.get(  document.querySelector('#md_file'), true  );
                if (eyeformeta.binder.q.ctrl==2) {
                    sel=eyeformeta.selection.get(  document.querySelector('#md_file'), true  );
                    console.log(89,sel)
                    if (sel.start==0) {
                        $('#md_file').selectRange(sel.start,sel.end);
                    } else {
                        var val=$('#md_file').val();
                        var index=eyeformeta.oc.scan($('#md_file').val());
                        console.log(index);
                        i=sel.start;
                        while (i>0) {
                            i--;
                            console.log('i',i)
                            if (val[i]=='\n') {
                                sel.start=i+1;
                                while(true) {
                                    i++;
                                    if (val[i]=='\n') {
                                        sel.end=i-1;
                                        $('#md_file').selectRange(sel.start,sel.end);
                                        console.log(1001);
                                        return null;
                                    }
                                    if (i==val.length) {
                                        sel.end=i;
                                        $('#md_file').selectRange(sel.start,sel.end);
                                        console.log(1002);
                                        return null;
                                    }
                                }
                            }
                            if (index.hasOwnProperty(i)) {
                                sel.start=i;
                                sel.end=index[i];
                                $('#md_file').selectRange(sel.start,sel.end);
                                console.log(1003);
                                return null;
                                break;
                            }
                        }
// $('#md_file').selectRange(sel.start-1);
// sel=eyeformeta.selection.get(  document.querySelector('#md_file'), true,'"'+"'"  );
// // sel=eyeformeta.selection.get(  document.querySelector('#md_file'), true,'"'+"'"  );
// $('#md_file').selectRange(sel.start,sel.end);

                        // $('#md_file').selectRange(sel.start);
                        // sel=eyeformeta.selection.get(  document.querySelector('#md_file'), true,'()'  );
                        console.log(91,sel);
                    }
                } 
                
            } else {
                eyeformeta.binder.q.ctrl=0;
            }
            if ( event.which == 17 )
                eyeformeta.binder.recent = Date.now();
            
            //     window.location.href = 'https://eyeformeta.com/ronan/'; console.log('active');
            // if ( event.altKey && event.key === 'm'  )
            //     window.location.href = 'https://eyeformeta.com/ronan/'; console.log('active');
            // window.addEventListener( 'keydown', eyeformeta.binder.listen);
        }, //==============================================
        tail: function() {
        }, //==============================================
};
// /--> bind manager
// $( document ).ready(function() { });

$( document ).ready(function() {
    if (1) {                
            eyeformeta.binder.bind( document.querySelectorAll('#new-path')[0], 'blur', function(event) {
                                    if (eyeformeta.app.path == $('#new-path').val()) {
                                        eyeformeta.app.rename_hide();
                                    }
            }, false);
    }
});

// document.addEventListener("DOMContentLoaded", function(event) { });
function setDivHeight() {
    windowHeight = $(window).innerHeight()*0.8;
        $('#md_file').css('height', windowHeight);
};  
$(document).ready(function() {
    setDivHeight();
});



                    // --> mod: sample
                    eyeformeta.selection = typeof eyeformeta.selection !== 'undefined' ? eyeformeta.selection : {} ;
                        // --> mod child: sample
                        eyeformeta.selection.callbacks = {
                                var: null,
                                fn: function() {
                                    return null;
                                }, //==============================================
                        };
                        // /--> mod child
                    // /--> mod
    $(document).ready(function() {

        eyeformeta.binder.bind(window,'keydown',eyeformeta.binder.listen,false)

        $('#md_file').selectRange(0);
// $('#md_file').on('keypress', function(event) {
//     console.log(event.key,event.keyCode);
// });

    });



function foo() {
    $('#md_file').focus();
    var index=eyeformeta.oc.lines( $('#md_file').val() );
    var keys = Object.keys(index);
    var timeOut=0;
    for (var i = 0; i < keys.length; i++) {
        timeOut=timeOut+500;
        bar(keys[i],index[keys[i]],timeOut);
        

        
    }
}
function bar(k,i,t) {
        setTimeout(function() {
            // console.log(k,i,t);
            if ( i-k > 2 ) {
                $('#md_file').selectRange(k,i);
                console.log("$('#md_file').selectRange("+k+','+i+');');
            }

        }, t);
}





var _ = window._ || {};

_.scroll = {
    last: 99999999999999,
    height: 0,
    id: '',

    // Function to initialize the scroll object with a specific textarea ID
    init: function(textareaId) {
        this.id = textareaId;
    },


    // Function to get the current scroll height of the page
    getScrollHeight: function() {
        this.last = Date.now();
        this.height = window.scrollY;
    },

    // Function to set the scroll height of the page to the stored value
    setScrollHeight: function() {
        var now = Date.now();
        if ((now - this.last) < 3000) {
            window.scrollTo(0, this.height);
        }
    },


    // // Function to get the current scroll height of the assigned textarea
    // getScrollHeight: function() {
    //     this.last = Date.now();
    //     var textarea = document.getElementById(this.id);
    //     if (textarea) {
    //         this.height = textarea.scrollTop;
    //     } else {
    //         console.error('Textarea not found');
    //     }
    // },

    // // Function to set the scroll height of the assigned textarea to the stored value
    // setScrollHeight: function() {
    //     var now = Date.now();
    //     if ((now-this.last)<5000) {
    //         var textarea = document.getElementById(this.id);
    //         if (textarea) {
    //             textarea.scrollTop = this.height;
    //         } else {
    //             console.error('Textarea not found');
    //         }
    //     }
    // },
};
// _.scroll.init('md_file');


// setInterval(_.scroll.getScrollHeight, 1000);


// document.getElementById('md_file').addEventListener('input', function() {
//     setTimeout(function() {_.scroll.setScrollHeight();}, 50);

// // _.scroll.getScrollHeight();

//     // var textarea = this;
//     // setTimeout(function() {
//     //     var textareaRect = textarea.getBoundingClientRect();
//     //     var visibleAreaStart = window.scrollY;
//     //     var visibleAreaEnd = visibleAreaStart + window.innerHeight;

//     //     // Check if the textarea is outside the visible area
//     //     if (textareaRect.bottom > visibleAreaEnd || textareaRect.top < visibleAreaStart) {
//     //         // Scroll the window to keep the textarea centered
//     //         var newScrollY = textareaRect.top + window.scrollY - (window.innerHeight / 2) + (textareaRect.height / 2);
//     //         // window.scrollTo({ top: newScrollY, behavior: 'smooth' });
//     //         window.scrollTo({ top: newScrollY });
//     //     }
//     // }, 0);
// });


name: elements.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\elements.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {} ;
window._ = _;
_.v = typeof _.v !== 'undefined' ? _.v : {} ;
_.elements = typeof _.elements !== 'undefined' ? _.elements : {};

_.elements.copy = {
    getComputedStyleString: function(element) {
        const computedStyle = window.getComputedStyle(element);
        let styleString = "";
        for (let property of computedStyle) {
            styleString += `${property}: ${computedStyle.getPropertyValue(property)}; `;
        }
        return styleString;
    },

    copyCSSRecursive: function(source, target) {
        target.setAttribute("style", _.elements.copy.getComputedStyleString(source));
        const sourceChildren = Array.from(source.children);
        const targetChildren = Array.from(target.children);
        
        for (let i = 0; i < sourceChildren.length; i++) {
            _.elements.copy.copyCSSRecursive(sourceChildren[i], targetChildren[i]);
        }
    },

    html: function(selector) {
        return _.elements.copy.copyHTMLWithStyles(selector);
    },
    copyHTMLWithStyles: function(selector) {
        const source = document.querySelector(selector);
        if (!source) {
            console.error(`Element with selector ${selector} not found.`);
            return;
        }

        const target = source.cloneNode(true);
        _.elements.copy.copyCSSRecursive(source, target);

        const tempContainer = document.createElement('div');
        tempContainer.appendChild(target);

        const htmlToCopy = tempContainer.innerHTML;
        _.elements.copy.copyToClipboard(htmlToCopy);
    },

    copyToClipboard: function(text) {
        const textarea = document.createElement('textarea');
        textarea.value = text;
        document.body.appendChild(textarea);
        textarea.select();
        document.execCommand('copy');
        document.body.removeChild(textarea);
        console.log('Copied HTML to clipboard');
    }
};

_.elements.animate = {
    fadeIn: function(element, duration = 400) {
        element.style.opacity = 0;
        element.style.display = 'block';
        let last = +new Date();
        const tick = function() {
            element.style.opacity = +element.style.opacity + (new Date() - last) / duration;
            last = +new Date();
            if (+element.style.opacity < 1) {
                requestAnimationFrame(tick);
            }
        };
        tick();
    },

    fadeOut: function(element, duration = 400) {
        element.style.opacity = 1;
        let last = +new Date();
        const tick = function() {
            element.style.opacity = +element.style.opacity - (new Date() - last) / duration;
            last = +new Date();
            if (+element.style.opacity > 0) {
                requestAnimationFrame(tick);
            } else {
                element.style.display = 'none';
            }
        };
        tick();
    }
};

_.elements.storage = {
    saveToLocalStorage: function(key, value) {
        localStorage.setItem(key, JSON.stringify(value));
    },

    loadFromLocalStorage: function(key) {
        const value = localStorage.getItem(key);
        return value ? JSON.parse(value) : null;
    },

    removeFromLocalStorage: function(key) {
        localStorage.removeItem(key);
    }
};

_.elements.ajax = {
    get: function(url, callback) {
        const xhr = new XMLHttpRequest();
        xhr.open('GET', url, true);
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                callback(xhr.responseText);
            }
        };
        xhr.send();
    },

    post: function(url, data, callback) {
        const xhr = new XMLHttpRequest();
        xhr.open('POST', url, true);
        xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                callback(xhr.responseText);
            }
        };
        xhr.send(JSON.stringify(data));
    }
};

_.elements.dom = {
    addClass: function(element, className) {
        if (element.classList) {
            element.classList.add(className);
        } else {
            element.className += ' ' + className;
        }
    },

    removeClass: function(element, className) {
        if (element.classList) {
            element.classList.remove(className);
        } else {
            element.className = element.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
        }
    },

    toggleClass: function(element, className) {
        if (element.classList) {
            element.classList.toggle(className);
        } else {
            const classes = element.className.split(' ');
            const existingIndex = classes.indexOf(className);
            if (existingIndex >= 0) {
                classes.splice(existingIndex, 1);
            } else {
                classes.push(className);
            }
            element.className = classes.join(' ');
        }
    }
};

_.elements.event = {
    on: function(element, event, handler) {
        element.addEventListener(event, handler);
    },

    off: function(element, event, handler) {
        element.removeEventListener(event, handler);
    },

    trigger: function(element, event) {
        const evt = document.createEvent('HTMLEvents');
        evt.initEvent(event, true, false);
        element.dispatchEvent(evt);
    }
};

// _.elements.copy.html('.root-284');


name: fingerprint.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\fingerprint.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {} ; window._=_;
_.v = typeof _.v !== 'undefined' ? _.v : {} ;

_.fingerprint = {
    fingerprint: null,
    profile: {
        isMobile: null,
        userAgent: null,
        screenInfo: null,
        language: null,
        timeZone: null,
        plugins: null,
        mediaDevices: null,
        canvasFingerprint: null,
        webGLFingerprint: null,
        audioFingerprint: null,
        geolocation: null,
        ip: null
    },
    init: async function(test=false) {
        this.isMobile();
        this.getUserAgent();
        this.getScreenInfo();
        this.getLanguage();
        this.getTimeZone();
        this.getPlugins();
        await this.getMediaDevices();
        this.getCanvasFingerprint();
        this.getWebGLFingerprint();
        await this.getAudioFingerprint();
        await this.getGeolocation();
        this.getIP();
        this.monitorCompletion();
    },

    isMobile: function() {
        this.profile.isMobile = /Mobi|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
        return this.profile.isMobile;
    },
    getUserAgent: function() {
        try {
            this.profile.userAgent = navigator.userAgent;
        } catch (error) {
            this.profile.userAgent = false;
        }
    },
    getScreenInfo: function() {
        try {
            this.profile.screenInfo = {
                width: window.screen.width,
                height: window.screen.height,
                pixelRatio: window.devicePixelRatio
            };
        } catch (error) {
            this.profile.screenInfo = false;
        }
    },
    getLanguage: function() {
        try {
            this.profile.language = navigator.language || navigator.userLanguage;
        } catch (error) {
            this.profile.language = false;
        }
    },
    getTimeZone: function() {
        try {
            this.profile.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
        } catch (error) {
            this.profile.timeZone = false;
        }
    },
    getPlugins: function() {
        try {
            this.profile.plugins = Array.from(navigator.plugins).map(plugin => plugin.name);
        } catch (error) {
            this.profile.plugins = false;
        }
    },
    getMediaDevices: async function() {
        try {
            const devices = await navigator.mediaDevices.enumerateDevices();
            this.profile.mediaDevices = devices.map(device => ({
                kind: device.kind,
                label: device.label,
                deviceId: device.deviceId
            }));
        } catch (error) {
            this.profile.mediaDevices = false;
        }
    },
    getCanvasFingerprint: function() {
        try {
            var canvas = document.createElement('canvas');
            var ctx = canvas.getContext('2d');
            ctx.textBaseline = 'top';
            ctx.font = '14px Arial';
            ctx.textBaseline = 'alphabetic';
            ctx.fillStyle = '#f60';
            ctx.fillRect(125, 1, 62, 20);
            ctx.fillStyle = '#069';
            ctx.fillText('Hello, world!', 2, 15);
            ctx.fillStyle = 'rgba(102, 204, 0, 0.7)';
            ctx.fillText('Hello, world!', 4, 17);
            this.profile.canvasFingerprint = canvas.toDataURL();
        } catch (error) {
            this.profile.canvasFingerprint = false;
        }
    },
    getWebGLFingerprint: function() {
        try {
            var canvas = document.createElement('canvas');
            var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
            if (!gl) throw new Error('WebGL not supported');
            var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
            var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
            var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
            this.profile.webGLFingerprint = { vendor, renderer };
        } catch (error) {
            this.profile.webGLFingerprint = false;
        }
    },
    getAudioFingerprint: async function() {
        try {
            if (!window.AudioContext && !window.webkitAudioContext) throw new Error('AudioContext not supported');
            const AudioContext = window.AudioContext || window.webkitAudioContext;
            const context = new AudioContext();
        
            await context.audioWorklet.addModule(URL.createObjectURL(new Blob([`
                class AudioFingerprintProcessor extends AudioWorkletProcessor {
                    process(inputs, outputs, parameters) {
                        return true;
                    }
                }
                registerProcessor('audio-fingerprint-processor', AudioFingerprintProcessor);
            `], { type: 'application/javascript' })));
        
            const node = new AudioWorkletNode(context, 'audio-fingerprint-processor');
            const oscillator = context.createOscillator();
            const analyser = context.createAnalyser();
        
            oscillator.type = 'triangle';
            oscillator.connect(analyser);
            analyser.connect(node);
            node.connect(context.destination);
        
            oscillator.start();
            setTimeout(() => {
                oscillator.stop();
                analyser.disconnect();
                node.disconnect();
                context.close();
            }, 500);
        
            this.profile.audioFingerprint = await new Promise((resolve) => {
                analyser.fftSize = 2048;
                const dataArray = new Float32Array(analyser.frequencyBinCount);
                analyser.getFloatFrequencyData(dataArray);
                resolve(dataArray.join(''));
            });
        } catch (error) {
            this.profile.audioFingerprint = false;
        }
    },    
    getGeolocation: async function() {
        try {
            if (navigator.geolocation) {
                this.profile.geolocation = await new Promise((resolve, reject) => {
                    navigator.geolocation.getCurrentPosition(resolve, reject);
                });
            } else {
                throw new Error('Geolocation not supported');
            }
        } catch (error) {
            this.profile.geolocation = false;
        }
    },
    getIP: function() {
        try {
            this.profile.ip = this.srv.get('https://lib.tbox.cx/tools/ip.php');
        } catch (error) {
            this.profile.ip = false;
        }
    },
    param: (paramName) => {
        const urlParams = new URLSearchParams(window.location.search);
        return urlParams.get(paramName);
    },
    srv: {
        get: function(url, callback = null) {
            var asyncStatus = callback !== null;
            var request = new XMLHttpRequest();
            request.open('GET', url, asyncStatus);
            request.send(null);
    
            // Adding the onreadystatechange event listener
            request.onreadystatechange = function() {
                if (request.readyState == 4) {
                    // console.log('GET Response status:', request.status);
                    if (request.status === 200) {
                        if (typeof callback === 'function') {
                            callback(request.responseText);
                        }
                    } else {
                        console.error('GET Request failed with status ' + request.status);
                    }
                }
            };
        },
    
        post: function(url, data = {}, callback = null) {
            var asyncStatus = callback !== null;
            var request = new XMLHttpRequest();
            request.open('POST', url, asyncStatus);
            request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            request.send(this.formatData(data));
    
            // Adding the onreadystatechange event listener
            request.onreadystatechange = function() {
                if (request.readyState == 4) {
                    // console.log('POST Response status:', request.status);
                    if (request.status === 200) {
                        if (typeof callback === 'function') {
                            callback(request.responseText);
                        }
                    } else {
                        console.error('POST Request failed with status ' + request.status);
                    }
                }
            };
        },
    
        formatData: function(data) {
            return Object.keys(data).map(function(key) {
                return encodeURIComponent(key) + '=' + encodeURIComponent(data[key]);
            }).join('&');
        },
    },
    

    monitorCompletion: function() {
        const isDone = Object.values(this.profile).every(value => value !== null);
        if (isDone) {
            _.fingerprint.output = this.profile;

            // Send fingerprint to server
            this.sendFingerprintToServer();
        } else {
            setTimeout(() => this.monitorCompletion(), 100); // Check again after 100ms
        }
    },

    whenDone: function(callback) {
        this.monitorCompletion();
        if (typeof callback === 'function') {
            while (_.fingerprint.fingerprint === null) {}
            callback(_.fingerprint.fingerprint);
        }
    },

    sendFingerprintToServer: function() {
        const fingerprintData = JSON.stringify(this.profile);
        this.srv.post('https://local.sds.sh/UI/fingerprint/', { fingerprint: fingerprintData }, function(response) {
            var data = JSON.parse( response )
            

            if (data.status === 'success') {
                _.fingerprint.fingerprint = data.fingerprint;
                var fingerprintDelta = false;
                var cookieValue = document.cookie.split('; ').find(row => row.startsWith('Fingerprint='))?.split('=')[1] || null;
                // console.log('cookieValue',cookieValue);
                if (cookieValue) {
                    if (cookieValue !== data.fingerprint) {
                        fingerprintDelta = true;
                        console.log('fingerprintDelta:',cookieValue);
                    }
                }

                var domainParts = document.location.hostname.split('.');
                var rootDomain = domainParts.length > 2 ? domainParts.slice(-2).join('.') : document.location.hostname;
                document.cookie = "Fingerprint=" + data.fingerprint + "; expires=" + new Date(new Date().getTime() + (10 * 365 * 24 * 60 * 60 * 1000)).toUTCString() + "; path=/; domain=." + rootDomain + ";";
                
                console.log('Fingerprint:',data.fingerprint);
            } else {
                _.fingerprint.fingerprint = false;
                console.log('Fingerprint not sent');
            }


            if (_.fingerprint.param('fingerprint-test') == 'true') {
                if (data.status === 'success') {
                    alert(data.fingerprint);
                    if (fingerprintDelta) {
                        alert('Fingerprint delta');
                    }
                } else {
                    alert('Fingerprint not sent');
                }
            }

            // console.log('Server response:', response);
        });
    }
};

_.fingerprint.init();


name: fingerprint__backup.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\fingerprint__backup.js
mime: unavailable
content:
var _ = {};

_.fingerprint = {
    output: null,
    profile: {
        userAgent: null,
        screenInfo: null,
        language: null,
        timeZone: null,
        plugins: null,
        mediaDevices: null,
        canvasFingerprint: null,
        webGLFingerprint: null,
        audioFingerprint: null,
        geolocation: null,
        ip: null
    },

    // Initialize and process all fingerprinting methods
    init: async function() {
        this.getUserAgent();
        this.getScreenInfo();
        this.getLanguage();
        this.getTimeZone();
        this.getPlugins();
        await this.getMediaDevices();
        this.getCanvasFingerprint();
        this.getWebGLFingerprint();
        await this.getAudioFingerprint();
        await this.getGeolocation();
        this.getIP();
        this.monitorCompletion();
    },

    // Different approaches for fingerprinting
    getUserAgent: function() {
        try {
            this.profile.userAgent = navigator.userAgent;
        } catch (error) {
            this.profile.userAgent = false;
        }
    },
    getScreenInfo: function() {
        try {
            this.profile.screenInfo = {
                width: window.screen.width,
                height: window.screen.height,
                pixelRatio: window.devicePixelRatio
            };
        } catch (error) {
            this.profile.screenInfo = false;
        }
    },
    getLanguage: function() {
        try {
            this.profile.language = navigator.language || navigator.userLanguage;
        } catch (error) {
            this.profile.language = false;
        }
    },
    getTimeZone: function() {
        try {
            this.profile.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
        } catch (error) {
            this.profile.timeZone = false;
        }
    },
    getPlugins: function() {
        try {
            this.profile.plugins = Array.from(navigator.plugins).map(plugin => plugin.name);
        } catch (error) {
            this.profile.plugins = false;
        }
    },
    getMediaDevices: async function() {
        try {
            const devices = await navigator.mediaDevices.enumerateDevices();
            this.profile.mediaDevices = devices.map(device => ({
                kind: device.kind,
                label: device.label,
                deviceId: device.deviceId
            }));
        } catch (error) {
            this.profile.mediaDevices = false;
        }
    },
    getCanvasFingerprint: function() {
        try {
            var canvas = document.createElement('canvas');
            var ctx = canvas.getContext('2d');
            ctx.textBaseline = 'top';
            ctx.font = '14px Arial';
            ctx.textBaseline = 'alphabetic';
            ctx.fillStyle = '#f60';
            ctx.fillRect(125, 1, 62, 20);
            ctx.fillStyle = '#069';
            ctx.fillText('Hello, world!', 2, 15);
            ctx.fillStyle = 'rgba(102, 204, 0, 0.7)';
            ctx.fillText('Hello, world!', 4, 17);
            this.profile.canvasFingerprint = canvas.toDataURL();
        } catch (error) {
            this.profile.canvasFingerprint = false;
        }
    },
    getWebGLFingerprint: function() {
        try {
            var canvas = document.createElement('canvas');
            var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
            if (!gl) throw new Error('WebGL not supported');
            var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
            var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
            var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
            this.profile.webGLFingerprint = { vendor, renderer };
        } catch (error) {
            this.profile.webGLFingerprint = false;
        }
    },
    getAudioFingerprint: async function() {
        try {
            if (!window.AudioContext && !window.webkitAudioContext) throw new Error('AudioContext not supported');
            const AudioContext = window.AudioContext || window.webkitAudioContext;
            const context = new AudioContext();
        
            await context.audioWorklet.addModule(URL.createObjectURL(new Blob([`
                class AudioFingerprintProcessor extends AudioWorkletProcessor {
                    process(inputs, outputs, parameters) {
                        return true;
                    }
                }
                registerProcessor('audio-fingerprint-processor', AudioFingerprintProcessor);
            `], { type: 'application/javascript' })));
        
            const node = new AudioWorkletNode(context, 'audio-fingerprint-processor');
            const oscillator = context.createOscillator();
            const analyser = context.createAnalyser();
        
            oscillator.type = 'triangle';
            oscillator.connect(analyser);
            analyser.connect(node);
            node.connect(context.destination);
        
            oscillator.start();
            setTimeout(() => {
                oscillator.stop();
                analyser.disconnect();
                node.disconnect();
                context.close();
            }, 500);
        
            this.profile.audioFingerprint = await new Promise((resolve) => {
                analyser.fftSize = 2048;
                const dataArray = new Float32Array(analyser.frequencyBinCount);
                analyser.getFloatFrequencyData(dataArray);
                resolve(dataArray.join(''));
            });
        } catch (error) {
            this.profile.audioFingerprint = false;
        }
    },    
    getGeolocation: async function() {
        try {
            if (navigator.geolocation) {
                this.profile.geolocation = await new Promise((resolve, reject) => {
                    navigator.geolocation.getCurrentPosition(resolve, reject);
                });
            } else {
                throw new Error('Geolocation not supported');
            }
        } catch (error) {
            this.profile.geolocation = false;
        }
    },
    getIP: function() {
        try {
            this.profile.ip = this.srv.get('https://lib.tbox.cx/tools/ip.php');
        } catch (error) {
            this.profile.ip = false;
        }
    },

    // Server interaction functions
    srv: {
        get: function(url, callback = null) {
            var asyncStatus = callback !== null;
            var request = new XMLHttpRequest();
            request.open('GET', url, asyncStatus);
            request.send(null);
        
            if (request.status === 200) {
                if (typeof callback === 'function') {
                    callback(request.responseText);
                }
                return request.responseText;
            } else {
                throw new Error('Request failed with status ' + request.status);
            }
        },

        post: function(url, data = {}, callback = null) {
            var asyncStatus = callback !== null;
            var request = new XMLHttpRequest();
            request.open('POST', url, asyncStatus);
            request.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
            request.send(JSON.stringify(data));
    
            if (request.status === 200) {
                if (typeof callback === 'function') {
                    callback(request.responseText);
                }
                return request.responseText;
            } else {
                throw new Error('Request failed with status ' + request.status);
            }
        },

        script: function(url) {
            const xhr = new XMLHttpRequest();
            xhr.open('GET', url, false);
            xhr.send(null);
            if (xhr.status === 200) {
                eval(xhr.responseText);
            } else {
                throw new Error('Failed to load script.');
            }
        }
    },

    // Monitor completion of all fingerprinting methods
    monitorCompletion: function() {
        const isDone = Object.values(this.profile).every(value => value !== null);
        if (isDone) {
            _.fingerprint.output = this.profile;
            alert('Fingerprinting complete');
        } else {
            setTimeout(() => this.monitorCompletion(), 100); // Check again after 100ms
        }
    }
};

// Initialize fingerprinting process
_.fingerprint.init();

// copy(_.fingerprint.output)


name: framework.php
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\framework.php
mime: unavailable
content:
<?php



function listJsFiles($dir) {
    $baseDir = rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
    $baseDirLength = strlen($baseDir);
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));

    foreach ($iterator as $file) {
        if ($file->isDir()) continue;

        $filePath = $file->getPathname();
        if (strtolower(pathinfo($filePath, PATHINFO_EXTENSION)) == 'js') {
            // Print the relative file path
            echo 'https://a.sds.sh/?v=1.0&f=js/sds/'.substr($filePath, $baseDirLength) . PHP_EOL;
        }
    }
}

header('Content-Type: text/plain');

// Usage example
listJsFiles('/home/softwaredev/public_html/a.sds.sh/public_html/assets/js/sds/');


name: gps.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\gps.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {}; window._ = _;
_.geo = {
    lat: 0,
    lon: 0,
    location: function () {
        const self = this;
        try { navigator.geolocation.getCurrentPosition(self.showLocation); } catch (err) {}
        // _.geo.location()
    },
    showLocation: function (position) {
        _.geo.lat = position.coords.latitude;
        _.geo.lon = position.coords.longitude;
    },
};


name: code.htm
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\imgText\code.htm
mime: unavailable
content:
<div id="uploader">
    <form id="upload" enctype="multipart/form-data">
        <input type="file" name="fileToUpload" id="fileToUpload" accept="image/*">
    </form>
</div>
<div id="text"></div>


name: gpt.php
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\imgText\gpt.php
mime: unavailable
content:
<?php
include_once($_SERVER['DOCUMENT_ROOT'].'/.re/curlMe.php');

function uploadImageToChatGpt($imagePath, $apiKey) {
    // API endpoint for ChatGPT image processing (this is hypothetical)
    $url = 'https://api.openai.com/v1/chatgpt/process-image';

    // Initialize cURL session
    $curl = curl_init($url);

    // Read the image file content
    $imageData = file_get_contents($imagePath);
    if ($imageData === false) {
        return "Error reading image file";
    }

    // Encode the image data in base64
    $base64Image = base64_encode($imageData);

    // Prepare the POST data
    $postData = json_encode(array('image' => $base64Image));

    // Set cURL options for the POST request
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Authorization: Bearer ' . $apiKey
    ));
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);

    // Execute the cURL session
    $response = curl_exec($curl);
    if ($response === false) {
        return "cURL error: " . curl_error($curl);
    }

    // Close the cURL session
    curl_close($curl);

    // Return the response
    return $response;
}
    // Start or resume the session
    session_start();
    $sessionId = session_id();

    // Check if the form data is set
    if (!isset($_FILES["fileToUpload"])) {
        echo "No file uploaded.";
        exit;
    }

    // Define the target folder for uploaded images
    $folder = '/home/softwaredev/public_html/a.sds.sh/public_html/assets/js/sds/imgText/pictures/';

    // Create the folder if it doesn't exist
    if (!file_exists($folder)) {
        mkdir($folder, 0777, true);
    }

    // Get the file details and prepend the session ID to the filename
    $filenameWithSessionId = $sessionId . "_" . basename($_FILES["fileToUpload"]["name"]);
    $target_file = $folder . $filenameWithSessionId;
    $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

    // Check if image file is an actual image and is of a supported file type
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if ($check !== false && in_array($imageFileType, ['jpg', 'jpeg', 'png', 'gif'])) {
        // Attempt to move the uploaded file to its new location
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            // Prepare the file for OCR
            $imagePath2 = $target_file . "_processed." . $imageFileType;
            exec("convert -density 300 $target_file -units PixelsPerInch $imagePath2", $output1);

            // Upload the image to ChatGPT for processing (Pseudo-code, replace with actual API integration)
            $api_key = curlMe('https://keys.sds.sh/?id=gpt');
            $chatGptResponse = uploadImageToChatGpt($imagePath2, $api_key); // You need to implement this function
            echo $chatGptResponse;
        } else {
            echo "Sorry, there was an error uploading your file.";
        }
    } else {
        echo "File is not an image or has an unsupported file type.";
    }


?>


name: image.htm
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\imgText\image.htm
mime: unavailable
content:
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html lang="en">

<head>
    <title>Extract Text</title>
    <meta charset="utf-8">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://a.sds.sh/?f=/js/sds/ns.js"></script>
    <link rel="stylesheet" href="https://a.sds.sh/?f=css/dark.css">
    <script src="https://a.sds.sh/?f=/js/sds/imgText/script.js"></script>
</head>

<body>
</body>

</html>


name: script.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\imgText\script.js
mime: unavailable
content:
document.addEventListener('DOMContentLoaded', function () {
    _ = typeof _ !== 'undefined' ? _ : {};
    window._ = _;
    _.imgText = {
        initialize: () => {
            fetch("https://a.sds.sh/?f=js/sds/imgText/code.htm")
                .then((response) => {
                    if (response.ok) {
                        return response.text();
                    } else {
                        throw new Error("Network response was not ok");
                    }
                })
                .then((data) => {
                    const div = document.createElement("div");
                    div.innerHTML = data;
                    document.body.appendChild(div);
                    _.imgText.load();
                })
                .catch((error) => {});
        },
        load: () => {
            document.getElementById('fileToUpload').addEventListener('change', function () {
                const result = document.getElementById("text");
                result.innerHTML = 'processing...';
                
                const formData = new FormData(document.getElementById('upload'));
                // document.getElementById('uploader').style.display = 'none';

                const xhr = new XMLHttpRequest();
                xhr.open('POST', 'https://a.sds.sh/?f=js/sds/imgText/upload.php', true);
                xhr.onreadystatechange = function () {
                    if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
                        result.innerHTML = this.responseText;
                    }
                };
                xhr.onerror = function () {
                    alert('Error uploading image.');
                };
                xhr.send(formData);
            });
        },
    };

    _.imgText.initialize();
});


name: upload.php
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\imgText\upload.php
mime: unavailable
content:
<?php
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);

// https://chat.openai.com/c/96afcd57-e29c-4121-9935-54ab7081c046

// Start or resume the session
session_start();
$sessionId = session_id();

// Check if the form data is set
if (!isset($_FILES["fileToUpload"])) {
    echo "No file uploaded.";
    exit;
}

// Define the target folder for uploaded images
$folder = '/home/softwaredev/public_html/a.sds.sh/public_html/assets/js/sds/imgText/pictures/';

// Create the folder if it doesn't exist
if (!file_exists($folder)) {
    mkdir($folder, 0777, true);
}

// Get the file details and prepend the session ID to the filename
$filenameWithSessionId = $sessionId . "_" . basename($_FILES["fileToUpload"]["name"]);
$target_file = $folder . $filenameWithSessionId;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

// Check if image file is an actual image and is of a supported file type
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if ($check !== false && in_array($imageFileType, ['jpg', 'jpeg', 'png', 'gif'])) {
    // Attempt to move the uploaded file to its new location
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        // Prepare the file for OCR
        $imagePath2 = $target_file . "_processed." . $imageFileType;
        exec("convert -density 300 $target_file -units PixelsPerInch -colorspace Gray -type Grayscale -contrast-stretch 0 -sharpen 0x4 $imagePath2", $output1);


        // Perform OCR with Tesseract
        exec('tesseract ' . $imagePath2 . ' stdout', $output);
        echo implode("\n", $output);
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
} else {
    echo "File is not an image or has an unsupported file type.";
}
?>


name: upload2.php
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\imgText\upload2.php
mime: unavailable
content:
<?php

include_once($_SERVER['DOCUMENT_ROOT'].'/.re/curlMe.php');
$api_key = curlMe('https://keys.sds.sh/?id=gpt');

// Define the endpoint for the ChatGPT API.
$api_endpoint = 'https://api.openai.com/v1/engines/davinci/completions';

// Check if the fileToUpload field exists in the POST request
if (isset($_FILES["image"])) {
    // Define the folder where you want to store uploaded images
    $folder = '/path/to/your/image/folder/';

    // Create the folder if it doesn't exist
    if (!file_exists($folder)) {
        mkdir($folder, 0777, true);
    }

    $target_file = $folder . basename($_FILES["image"]["name"]);
    $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

    // Check if the uploaded file is an actual image and has a supported file type
    $check = getimagesize($_FILES["image"]["tmp_name"]);

    if ($check !== false && in_array($imageFileType, ['jpg', 'jpeg', 'png', 'gif'])) {
        if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
            // Prepare the image path to send to ChatGPT
            $image_path = $target_file;

            // Prepare the request data for ChatGPT
            $request_data = [
                'prompt' => 'Translate the text in the image:',
                'max_tokens' => 50, // Adjust the maximum number of tokens if needed.
                'temperature' => 0.7, // Adjust temperature for creativity.
                'stop' => '', // Stop generating text at specific tokens if needed.
                'images' => [$image_path], // Include the image path in the request.
            ];

            // Prepare the headers for the API request to ChatGPT
            $headers = [
                'Authorization: Bearer ' . $api_key,
                'Content-Type: application/json',
            ];

            // Initialize cURL session for ChatGPT
            $ch = curl_init($api_endpoint);

            // Set cURL options for ChatGPT
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($request_data));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

            // Execute the cURL request to ChatGPT
            $response = curl_exec($ch);

            // Check for cURL errors
            if (curl_errno($ch)) {
                echo 'cURL Error: ' . curl_error($ch);
            } else {
                // Decode the JSON response from ChatGPT
                $result = json_decode($response, true);

                // Extract the generated text from ChatGPT
                $generated_text = $result['choices'][0]['text'];

                // Output the generated text in a format that can be displayed in the HTML
                echo $generated_text;
            }

            // Close the cURL session for ChatGPT
            curl_close($ch);
        } else {
            echo "Sorry, there was an error uploading your file.";
        }
    } else {
        echo "File is not an image or has an unsupported file type.";
    }
} else {
    echo "No file was uploaded.";
}
?>


name: index.php
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\index.php
mime: unavailable
content:
<?php

if (isset($_REQUEST['f'])) {
	$fi = str_replace('/', '', $_REQUEST['f']);
	$converter = file_get_contents($fi);

	if (isset($_REQUEST['r'])) {
		// Split the replace string into an array
		$replace_pairs = explode(',', $_REQUEST['r']);

		// Check if the array has an even number of elements
		if (count($replace_pairs) % 2 !== 0) {
			throw new Exception("Invalid replace pairs");
		}

		// Perform the replacements
		for ($i = 0; $i < count($replace_pairs); $i += 2) {
			$search = $replace_pairs[$i];
			$replace = $replace_pairs[$i + 1];
			$converter = str_replace($search, $replace, $converter);
		}
	}
	if (isset($_GET['id'])) {
		$converter = str_replace("#inputArea", "#".$_GET['id'] , $converter);
		$converter = str_replace("'inputArea'", "'" . $_GET['id'] . "'", $converter);
		$converter = str_replace('"inputArea"', '"' . $_GET["id"] . '"', $converter);
	} elseif (isset($_GET['class'])) {
		$converter = str_replace("'#inputArea'", "'." . $_GET['class'] . "'", $converter);
		$converter = str_replace("getElementById('md_file')", "querySelectorAll('.".$_GET['class']."')[0]", $converter);
		$converter = str_replace('getElementById("md_file")', 'querySelectorAll(".'.$_GET["class"].'")[0]', $converter);
		$converter = str_replace("getElementById( 'md_file' )", "querySelectorAll('.".$_GET['class']."')[0]", $converter);
		$converter = str_replace('getElementById( "md_file" )', 'querySelectorAll(".'.$_GET["class"].'")[0]', $converter);
		$converter = str_replace("'inputArea'", "'" . $_GET['class'] . "'", $converter);
		$converter = str_replace('"inputArea"', '"' . $_GET["class"] . '"', $converter);

	}

	header('Content-Type: application/javascript');
	echo $converter;
}


name: jq-dd.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\jq-dd.js
mime: unavailable
content:
(($) => {
    $.fn.check = () => {
        this.each(() => {
            if (this.type === 'checkbox' || this.type === 'radio') {
                this.checked = true;
            }
        });
        return this;
    };

    $.fn.uncheck = () => {
        this.each(() => {
            if (this.type === 'checkbox' || this.type === 'radio') {
                this.checked = false;
            }
        });
        return this;
    };
})(jQuery);


name: jQuery-select.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\jQuery-select.js
mime: unavailable
content:
$.fn.selectRange = function(start, end) {
    if(end === undefined) { end = start; }
    return this.each(function() {
        if('selectionStart' in this) {
            this.selectionStart = start;
            this.selectionEnd = end;
        } else if(this.setSelectionRange) {
            this.setSelectionRange(start, end);
        } else if(this.createTextRange) {
            var range = this.createTextRange();
            range.collapse(true);
            range.moveEnd('character', end);
            range.moveStart('character', start);
            range.select();
        }
    });
};


name: listeners.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\listeners.js
mime: unavailable
content:
var ctrlD = {};
ctrlD.start=0;
ctrlD.end=0;
ctrlD.ran=Date.now();
ctrlD.script = function() {
    const textarea = document.getElementById('md_file');
    textarea.selectionStart = ctrlD.start;
    textarea.selectionEnd   = ctrlD.end;
};

document.addEventListener('keydown', function(event) {
    // Check if Ctrl, Shift, and D keys are pressed
    // if (event.ctrlKey) {
    //     let now = Date.now();
    //     if (now - ctrlD.ran < 3000) {
    //         ctrlD.script();
    //     }
    // }
    if (event.ctrlKey && event.shiftKey && event.key === 'D') {
        // Prevent default action to avoid any browser shortcuts
        event.preventDefault();
        ctrlD.ran=Date.now();

        // ID of the textarea
        const textarea = document.getElementById('md_file');

        // Get the current cursor position
        const end = textarea.selectionEnd;
        const cursorPos = textarea.selectionStart;
        ctrlD.start=cursorPos;
        ctrlD.end=end;

        // Split the text into lines
        const lines = textarea.value.split('\n');

        // Find the current line
        let currentLine = 0;
        let charCount = 0;
        for (let i = 0; i < lines.length; i++) {
            charCount += (lines[i].length + 1); // +1 for newline character
            if (charCount > cursorPos) {
                currentLine = i;
                break;
            }
        }

        // Duplicate the current line
        lines.splice(currentLine, 0, lines[currentLine]);

        // Update the textarea's content
        textarea.value = lines.join('\n');
        setTimeout(function() { ctrlD.script(); }, 600);
        // setTimeout(function() { ctrlD.script(); }, 3000);
    }
});

document.addEventListener('keydown', function(event) {
    // Check if Ctrl and Shift are pressed
    if (event.ctrlKey && event.shiftKey) {
        // ID of the textarea
        const textareaId = 'md_file';
        const textarea = document.getElementById(textareaId);

        // Get the current cursor position
        let cursorPos = textarea.selectionStart;

        // Split the text into lines
        let lines = textarea.value.split('\n');

        // Find the current line
        let currentLine = 0;
        let charCount = 0;
        for (let i = 0; i < lines.length; i++) {
            charCount += (lines[i].length + 1); // +1 for newline character
            if (charCount > cursorPos) {
                currentLine = i;
                break;
            }
        }

        // Check if Up Arrow or Down Arrow is pressed
        if ((event.key === 'ArrowUp' || event.key === 'ArrowDown') && lines.length > 1) {
            event.preventDefault(); // Prevent default action

            if (event.key === 'ArrowUp' && currentLine > 0) {
                // Move the current line up
                [lines[currentLine - 1], lines[currentLine]] = [lines[currentLine], lines[currentLine - 1]];
                // Adjust cursor position
                cursorPos -= lines[currentLine].length + 1;
            } else if (event.key === 'ArrowDown' && currentLine < lines.length - 1) {
                // Move the current line down
                [lines[currentLine], lines[currentLine + 1]] = [lines[currentLine + 1], lines[currentLine]];
                // Adjust cursor position
                cursorPos += lines[currentLine].length + 1;
            }

            // Update the textarea's content
            textarea.value = lines.join('\n');
            // Set the cursor back to the right position
            textarea.setSelectionRange(cursorPos, cursorPos);
        }
    }
});



let isSpecialLineCopied = false;


// document.addEventListener('keydown', function(event) {
//     if (event.ctrlKey && event.key.toLowerCase() === 'x') {
//         const textareaId = 'md_file';
//         const textarea = document.getElementById(textareaId);

//         const cursorPos = textarea.selectionStart;
//         const selectionEnd = textarea.selectionEnd;

//         if (cursorPos === selectionEnd) {
//             event.preventDefault(); 

//             let lines = textarea.value.split('\n');
//             let currentLine = 0;
//             let charCount = 0;
//             for (let i = 0; i < lines.length; i++) {
//                 if (charCount + lines[i].length >= cursorPos) {
//                     currentLine = i;
//                     break;
//                 }
//                 charCount += lines[i].length + 1;
//             }

//             const startOfLine = currentLine > 0 ? charCount - lines[currentLine].length - 1 : charCount - lines[currentLine].length;
//             const endOfLine = charCount + 1;

//             const lineToCut = currentLine > 0 ? '\n' + lines[currentLine] : lines[currentLine];
//             navigator.clipboard.writeText(lineToCut).then(() => {
//                 console.log('Text copied to clipboard');
//             }).catch(err => {
//                 console.error('Failed to copy text: ', err);
//             });

//             lines.splice(currentLine, 1);
//             textarea.value = lines.join('\n');
//             textarea.setSelectionRange(startOfLine, startOfLine);
//         }
//     }
// });


try {
    let isSpecialLineCopied = false;
} catch (error) {}

document.addEventListener('keydown', function(event) {
    if (event.ctrlKey && event.key.toLowerCase() === 'x') {
        const textareaId = 'md_file';
        const textarea = document.getElementById(textareaId);

        const cursorPos = textarea.selectionStart;
        const selectionEnd = textarea.selectionEnd;

        if (cursorPos === selectionEnd) {
            event.preventDefault(); 

            let lines = textarea.value.split('\n');
            let currentLine = 0;
            let charCount = 0;
            for (let i = 0; i < lines.length; i++) {
                if (charCount + lines[i].length >= cursorPos) {
                    currentLine = i;
                    break;
                }
                charCount += lines[i].length + 1;
            }

            const lineToCut = lines[currentLine];
            navigator.clipboard.writeText('\n' + lineToCut).then(() => {
                console.log('Text copied to clipboard');
                isSpecialLineCopied = true; // Set flag
            }).catch(err => {
                console.error('Failed to copy text: ', err);
            });

            lines.splice(currentLine, 1);
            _.yz.handleJavascriptManipulation(function() {
                textarea.value = lines.join('\n');
                textarea.setSelectionRange(charCount - lines[currentLine].length - 1, charCount - lines[currentLine].length - 1);
            });
        }
    }
});

document.addEventListener('paste', function(event) {
    const textareaId = 'md_file';
    const textarea = document.getElementById(textareaId);

    if (isSpecialLineCopied) {
        event.preventDefault(); // Prevent default paste behavior

        navigator.clipboard.readText().then(clipText => {
            const cursorPos = textarea.selectionStart;

            let lines = textarea.value.split('\n');
            let currentLine = 0;
            var charCount = 0;
            for (let i = 0; i < lines.length; i++) {
                if (charCount + lines[i].length >= cursorPos) {
                    currentLine = i;
                    break;
                }
                charCount += lines[i].length + 1;
            }

            const clippedLine = clipText.substring(1).trimStart(); // Remove the leading newline
            lines.splice(currentLine, 0, clippedLine);
            _.yz.handleJavascriptManipulation(function() {
                textarea.value = lines.join('\n');
                textarea.setSelectionRange(charCount, charCount);
            });

            isSpecialLineCopied = false; // Reset flag
        }).catch(err => {
            console.error('Failed to read from clipboard: ', err);
        });
    }
    // If isSpecialLineCopied is false, normal paste behavior will occur
});



document.addEventListener('keydown', function(event) {
    // Define the opening and closing character pairs
    const oc = {
        '{': '}',
        '[': ']',
        '(': ')',
        '"': '"',
        "'": "'"
    };
    // _.scroll.setScrollHeight();

    // Check if one of the opening characters is pressed
    if (oc.hasOwnProperty(event.key)) {
        const textareaId = 'md_file';
        const textarea = document.getElementById(textareaId);

        const cursorPos = textarea.selectionStart;
        const selectionEnd = textarea.selectionEnd;

        event.preventDefault(); // Prevent the default behavior
        // _.scroll.getScrollHeight();

        // Check if any text is selected
        if (cursorPos !== selectionEnd) {
            const fullText = textarea.value.substring(cursorPos, selectionEnd);
            const trimmedText = fullText.trim();
            const leadingWhitespace = fullText.substring(0, fullText.indexOf(trimmedText));
            const trailingWhitespace = fullText.substring(fullText.indexOf(trimmedText) + trimmedText.length);

            const newText = event.key + trimmedText + oc[event.key] + trailingWhitespace;
            textarea.value = textarea.value.substring(0, cursorPos) + leadingWhitespace + newText + textarea.value.substring(selectionEnd);
            
            // Reselect the original (trimmed) text
            textarea.setSelectionRange(cursorPos + leadingWhitespace.length + 1, cursorPos + leadingWhitespace.length + trimmedText.length + 1);
        } else {
            // If no text is selected, insert the pair and set the cursor in between
            _.yz.handleJavascriptManipulation(function() {
                textarea.value = textarea.value.substring(0, cursorPos) + event.key + oc[event.key] + textarea.value.substring(cursorPos);
                textarea.setSelectionRange(cursorPos + 1, cursorPos + 1);
                // setTimeout(function() { _.scroll.setScrollHeight(); }, 500);
                
            });
        }
    }
});


document.addEventListener('keydown', function(event) {
    const textareaId = 'md_file';
    const textarea = document.getElementById(textareaId);

    const cursorPos = textarea.selectionStart;
    const selectionEnd = textarea.selectionEnd;

    // Function to determine the smallest indent size
    function getSmallestIndentSize(text) {
        const lines = text.split('\n');
        let minIndentSize = 4; // Default to 4 spaces
        lines.forEach(line => {
            const indentMatch = line.match(/^(\s+)/);
            if (indentMatch) {
                const indentSize = indentMatch[0].length;
                if (indentSize < minIndentSize) {
                    minIndentSize = indentSize;
                }
            }
        });
        return minIndentSize;
    }

    // Check if Tab or Shift+Tab is pressed
    if (event.key === 'Tab') {
        event.preventDefault(); // Prevent the default Tab behavior

        const smallestIndentSize = getSmallestIndentSize(textarea.value);
        const indentString = ' '.repeat(smallestIndentSize);

        let lines = textarea.value.split('\n');
        let start = 0;
        let end = 0;
        let modified = false;
        let additionalLength = 0;

        for (let i = 0; i < lines.length; i++) {
            end = start + lines[i].length;

            // Check if line intersects with selection
            if ((start <= cursorPos && end >= cursorPos) || (start >= cursorPos && start < selectionEnd)) {
                if (!event.shiftKey) {
                    lines[i] = indentString + lines[i];
                    additionalLength += smallestIndentSize;
                    modified = true;
                } else if (event.shiftKey) {
                    if (lines[i].startsWith(indentString)) {
                        lines[i] = lines[i].substring(smallestIndentSize);
                        additionalLength -= smallestIndentSize;
                        modified = true;
                    }
                }
            }

            start = end + 1;
        }

        if (modified) {
            textarea.value = lines.join('\n');
            const newSelectionEnd = selectionEnd + additionalLength;
            textarea.setSelectionRange(cursorPos, newSelectionEnd);
            setTimeout(function() {
                textarea.selectionStart=cursorPos;
                textarea.selectionEnd=selectionEnd;
            }, 600);
        }
    }
});


name: load-micro.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\load-micro.js
mime: unavailable
content:
function _loadScript_(url, callback) {
    var script = document.createElement('script');
    script.src = url; script.type = 'text/javascript';
    script.onload = callback; document.head.appendChild(script);
}
// _loadScript_('https://a.sds.sh/?f=js/sds/framework.js', ()=>{});


name: load.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\load.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {};
window._ = _;

_.load = {
    queue: [],
    loadedResources: [],
    loadResource: function (url) {
        if (_.load.loadedResources.includes(url)) {
            return Promise.resolve();
        }

        // Use 'var' for compatibility with older JavaScript versions
        var isHtml = url.indexOf('<') === 0 || url.indexOf('<') !== -1;
        var isScript = url.slice(-3) === '.js' || url.indexOf('.js?') !== -1 || url.indexOf('am=js') !== -1;
        var isStyle = url.slice(-4) === '.css' || url.indexOf('.css?') !== -1 || url.indexOf('am=css') !== -1;

        return new Promise((resolve, reject) => {
            let element;

            if (isHtml) {
                element = document.createElement("div");
                element.classList.add("html-content");
                element.innerHTML = url;
            } else if (isScript) {
                element = document.createElement("script");
                element.type = "text/javascript";
                element.src = url;
            } else if (isStyle) {
                element = document.createElement("link");
                element.type = "text/css";
                element.rel = "stylesheet";
                element.href = url;
            }

            if (element) {
                element.onload = () => {
                    _.load.loadedResources.push(url);
                    resolve();
                };

                element.onerror = () => reject(new Error(`Failed to load resource: ${url}`));

                if (isHtml) {
                    const target = document.getElementById("_load_queue") || document.body;
                    target.appendChild(element);
                } else {
                    document.head.appendChild(element);
                }
            } else {
                reject(new Error(`Invalid resource type for URL: ${url}`));
            }
        });
    },

    loadResources: function (urls) {
        return Promise.all(urls.map(url => _.load.loadResource(url)));
    },

    ready: function (runThis) {
        const interval = setInterval(() => {
            if (document.readyState === 'complete') {
                clearInterval(interval);
                Promise.all(_.load.queue.map(urls => _.load.loadResources(urls)))
                    .then(() => {
                        if (typeof runThis === 'function') {
                            runThis();
                        }
                    })
                    .catch(error => {
                        console.error(error);
                    });
            }
        }, 50);
    },

    readyWait: function () {
        return new Promise((resolve, reject) => {
            if (document.readyState === 'complete') {
                Promise.all(_.load.queue.map(urls => _.load.loadResources(urls)))
                    .then(resolve)
                    .catch(reject);
            } else {
                const interval = setInterval(() => {
                    if (document.readyState === 'complete') {
                        clearInterval(interval);
                        Promise.all(_.load.queue.map(urls => _.load.loadResources(urls)))
                            .then(resolve)
                            .catch(reject);
                    }
                }, 50);
            }
        });
    }
};
///// _.load.queue.push(["_url_or_html_"]);
///// _.load.readyWait();
///(async () => {
///    _.load.queue.push(["_url_or_html_"]);
///    await _.load.readyWait();
/// _.load.ready(() => {//loaded});
///})();


name: load.js.bk
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\load.js.bk
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {};
window._ = _;

_.load = {
    queue: [],
    loadedResources: [],
    loadResource: function (url) {
        if (_.load.loadedResources.includes(url)) {
            return Promise.resolve();
        }

        // Use 'var' for compatibility with older JavaScript versions
        var isHtml = url.indexOf('<') === 0 || url.indexOf('<') !== -1;
        var isScript = url.slice(-3) === '.js' || url.indexOf('.js?') !== -1 || url.indexOf('am=js') !== -1;
        var isStyle = url.slice(-4) === '.css' || url.indexOf('.css?') !== -1 || url.indexOf('am=css') !== -1;


        return new Promise((resolve, reject) => {
            let element;

            if (isHtml) {
                element = document.createElement("div");
                // add class
                element.classList.add("html-content");
                element.innerHTML = url;
                
                
            } else if (isScript) {
                element = document.createElement("script");
                element.type = "text/javascript";
                element.src = url;
            } else if (isStyle) {
                element = document.createElement("link");
                element.type = "text/css";
                element.rel = "stylesheet";
                element.href = url;
            }

            element.onload = () => {
                _.load.loadedResources.push(url);
                resolve();
            };
            if (isHtml) {
                if (document.getElementsByid("_load_queue")) {
                    document.getElementsByid("_load_queue").appendChild(element);
                } else {
                    document.getElementsByTagName("body")[0].appendChild(element);
                }
                
            } else {
                element.onerror = () => reject(new Error(`Failed to load resource: ${url}`));
                document.getElementsByTagName("head")[0].appendChild(element);
            }

        });
    },

    loadResources: function (urls) {
        return Promise.all(urls.map(url => _.load.loadResource(url)));
    },

    ready: function (runThis) {
        const interval = setInterval(() => {
            if (document.readyState === 'complete') {
                clearInterval(interval);
                Promise.all(_.load.queue.map(urls => _.load.loadResources(urls)))
                    .then(() => {
                        if (typeof runThis === 'function') {
                            runThis();
                        }
                    })
                    .catch(error => {
                        console.error(error);
                    });
            }
        }, 50);
    },

    readyWait: function () {
        return new Promise((resolve, reject) => {
            if (document.readyState === 'complete') {
                Promise.all(_.load.queue.map(urls => _.load.loadResources(urls)))
                    .then(resolve)
                    .catch(reject);
            } else {
                const interval = setInterval(() => {
                    if (document.readyState === 'complete') {
                        clearInterval(interval);
                        Promise.all(_.load.queue.map(urls => _.load.loadResources(urls)))
                            .then(resolve)
                            .catch(reject);
                    }
                }, 50);
            }
        });
    }
};
//(async () => {
//    _.load.queue.push(["_url_or_html_"]);
//    await _.load.readyWait();
// _.load.ready(() => {//loaded});
//})();


name: md5.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\md5.js
mime: unavailable
content:
!function(t,e){"object"==typeof exports?module.exports=exports=e():"function"==typeof define&&define.amd?define([],e):t.CryptoJS=e()}(this,function(){var h,t,e,r,i,n,f,o,s,c,a,l,d,m,x,b,H,z,A,u,p,_,v,y,g,B,w,k,S,C,D,E,R,M,F,P,W,O,I,U,K,X,L,j,N,T,q,Z,V,G,J,$,Q,Y,tt,et,rt,it,nt,ot,st,ct,at,ht,lt,ft,dt,ut,pt,_t,vt,yt,gt,Bt,wt,kt,St,bt=bt||function(l){var t;if("undefined"!=typeof window&&window.crypto&&(t=window.crypto),!t&&"undefined"!=typeof window&&window.msCrypto&&(t=window.msCrypto),!t&&"undefined"!=typeof global&&global.crypto&&(t=global.crypto),!t&&"function"==typeof require)try{t=require("crypto")}catch(t){}function i(){if(t){if("function"==typeof t.getRandomValues)try{return t.getRandomValues(new Uint32Array(1))[0]}catch(t){}if("function"==typeof t.randomBytes)try{return t.randomBytes(4).readInt32LE()}catch(t){}}throw new Error("Native crypto module could not be used to get secure random number.")}var r=Object.create||function(t){var e;return n.prototype=t,e=new n,n.prototype=null,e};function n(){}var e={},o=e.lib={},s=o.Base={extend:function(t){var e=r(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),(e.init.prototype=e).$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},f=o.WordArray=s.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||a).stringify(this)},concat:function(t){var e=this.words,r=t.words,i=this.sigBytes,n=t.sigBytes;if(this.clamp(),i%4)for(var o=0;o<n;o++){var s=r[o>>>2]>>>24-o%4*8&255;e[i+o>>>2]|=s<<24-(i+o)%4*8}else for(o=0;o<n;o+=4)e[i+o>>>2]=r[o>>>2];return this.sigBytes+=n,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=l.ceil(e/4)},clone:function(){var t=s.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],r=0;r<t;r+=4)e.push(i());return new f.init(e,t)}}),c=e.enc={},a=c.Hex={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n++){var o=e[n>>>2]>>>24-n%4*8&255;i.push((o>>>4).toString(16)),i.push((15&o).toString(16))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i+=2)r[i>>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new f.init(r,e/2)}},h=c.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n++){var o=e[n>>>2]>>>24-n%4*8&255;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i++)r[i>>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new f.init(r,e)}},d=c.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},u=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new f.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=d.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var e,r=this._data,i=r.words,n=r.sigBytes,o=this.blockSize,s=n/(4*o),c=(s=t?l.ceil(s):l.max((0|s)-this._minBufferSize,0))*o,a=l.min(4*c,n);if(c){for(var h=0;h<c;h+=o)this._doProcessBlock(i,h);e=i.splice(0,c),r.sigBytes-=a}return new f.init(e,a)},clone:function(){var t=s.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),p=(o.Hasher=u.extend({cfg:s.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){u.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){return t&&this._append(t),this._doFinalize()},blockSize:16,_createHelper:function(r){return function(t,e){return new r.init(e).finalize(t)}},_createHmacHelper:function(r){return function(t,e){return new p.HMAC.init(r,e).finalize(t)}}}),e.algo={});return e}(Math);function mt(t,e,r){return t^e^r}function xt(t,e,r){return t&e|~t&r}function Ht(t,e,r){return(t|~e)^r}function zt(t,e,r){return t&r|e&~r}function At(t,e,r){return t^(e|~r)}function Ct(t,e){return t<<e|t>>>32-e}function Dt(t,e,r,i){var n,o=this._iv;o?(n=o.slice(0),this._iv=void 0):n=this._prevBlock,i.encryptBlock(n,0);for(var s=0;s<r;s++)t[e+s]^=n[s]}function Et(t){if(255==(t>>24&255)){var e=t>>16&255,r=t>>8&255,i=255&t;255===e?(e=0,255===r?(r=0,255===i?i=0:++i):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=i}else t+=1<<24;return t}function Rt(){for(var t=this._X,e=this._C,r=0;r<8;r++)ft[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0<ft[0]>>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0<ft[1]>>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0<ft[2]>>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0<ft[3]>>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0<ft[4]>>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0<ft[5]>>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0<ft[6]>>>0?1:0)|0,this._b=e[7]>>>0<ft[7]>>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,c=((4294901760&i)*i|0)+((65535&i)*i|0);dt[r]=s^c}t[0]=dt[0]+(dt[7]<<16|dt[7]>>>16)+(dt[6]<<16|dt[6]>>>16)|0,t[1]=dt[1]+(dt[0]<<8|dt[0]>>>24)+dt[7]|0,t[2]=dt[2]+(dt[1]<<16|dt[1]>>>16)+(dt[0]<<16|dt[0]>>>16)|0,t[3]=dt[3]+(dt[2]<<8|dt[2]>>>24)+dt[1]|0,t[4]=dt[4]+(dt[3]<<16|dt[3]>>>16)+(dt[2]<<16|dt[2]>>>16)|0,t[5]=dt[5]+(dt[4]<<8|dt[4]>>>24)+dt[3]|0,t[6]=dt[6]+(dt[5]<<16|dt[5]>>>16)+(dt[4]<<16|dt[4]>>>16)|0,t[7]=dt[7]+(dt[6]<<8|dt[6]>>>24)+dt[5]|0}function Mt(){for(var t=this._X,e=this._C,r=0;r<8;r++)wt[r]=e[r];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0<wt[0]>>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0<wt[1]>>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0<wt[2]>>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0<wt[3]>>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0<wt[4]>>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0<wt[5]>>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0<wt[6]>>>0?1:0)|0,this._b=e[7]>>>0<wt[7]>>>0?1:0;for(r=0;r<8;r++){var i=t[r]+e[r],n=65535&i,o=i>>>16,s=((n*n>>>17)+n*o>>>15)+o*o,c=((4294901760&i)*i|0)+((65535&i)*i|0);kt[r]=s^c}t[0]=kt[0]+(kt[7]<<16|kt[7]>>>16)+(kt[6]<<16|kt[6]>>>16)|0,t[1]=kt[1]+(kt[0]<<8|kt[0]>>>24)+kt[7]|0,t[2]=kt[2]+(kt[1]<<16|kt[1]>>>16)+(kt[0]<<16|kt[0]>>>16)|0,t[3]=kt[3]+(kt[2]<<8|kt[2]>>>24)+kt[1]|0,t[4]=kt[4]+(kt[3]<<16|kt[3]>>>16)+(kt[2]<<16|kt[2]>>>16)|0,t[5]=kt[5]+(kt[4]<<8|kt[4]>>>24)+kt[3]|0,t[6]=kt[6]+(kt[5]<<16|kt[5]>>>16)+(kt[4]<<16|kt[4]>>>16)|0,t[7]=kt[7]+(kt[6]<<8|kt[6]>>>24)+kt[5]|0}return h=bt.lib.WordArray,bt.enc.Base64={stringify:function(t){var e=t.words,r=t.sigBytes,i=this._map;t.clamp();for(var n=[],o=0;o<r;o+=3)for(var s=(e[o>>>2]>>>24-o%4*8&255)<<16|(e[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|e[o+2>>>2]>>>24-(o+2)%4*8&255,c=0;c<4&&o+.75*c<r;c++)n.push(i.charAt(s>>>6*(3-c)&63));var a=i.charAt(64);if(a)for(;n.length%4;)n.push(a);return n.join("")},parse:function(t){var e=t.length,r=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var n=0;n<r.length;n++)i[r.charCodeAt(n)]=n}var o=r.charAt(64);if(o){var s=t.indexOf(o);-1!==s&&(e=s)}return function(t,e,r){for(var i=[],n=0,o=0;o<e;o++)if(o%4){var s=r[t.charCodeAt(o-1)]<<o%4*2,c=r[t.charCodeAt(o)]>>>6-o%4*2,a=s|c;i[n>>>2]|=a<<24-n%4*8,n++}return h.create(i,n)}(t,e,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},function(l){var t=bt,e=t.lib,r=e.WordArray,i=e.Hasher,n=t.algo,H=[];!function(){for(var t=0;t<64;t++)H[t]=4294967296*l.abs(l.sin(t+1))|0}();var o=n.MD5=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o=this._hash.words,s=t[e+0],c=t[e+1],a=t[e+2],h=t[e+3],l=t[e+4],f=t[e+5],d=t[e+6],u=t[e+7],p=t[e+8],_=t[e+9],v=t[e+10],y=t[e+11],g=t[e+12],B=t[e+13],w=t[e+14],k=t[e+15],S=o[0],m=o[1],x=o[2],b=o[3];S=z(S,m,x,b,s,7,H[0]),b=z(b,S,m,x,c,12,H[1]),x=z(x,b,S,m,a,17,H[2]),m=z(m,x,b,S,h,22,H[3]),S=z(S,m,x,b,l,7,H[4]),b=z(b,S,m,x,f,12,H[5]),x=z(x,b,S,m,d,17,H[6]),m=z(m,x,b,S,u,22,H[7]),S=z(S,m,x,b,p,7,H[8]),b=z(b,S,m,x,_,12,H[9]),x=z(x,b,S,m,v,17,H[10]),m=z(m,x,b,S,y,22,H[11]),S=z(S,m,x,b,g,7,H[12]),b=z(b,S,m,x,B,12,H[13]),x=z(x,b,S,m,w,17,H[14]),S=A(S,m=z(m,x,b,S,k,22,H[15]),x,b,c,5,H[16]),b=A(b,S,m,x,d,9,H[17]),x=A(x,b,S,m,y,14,H[18]),m=A(m,x,b,S,s,20,H[19]),S=A(S,m,x,b,f,5,H[20]),b=A(b,S,m,x,v,9,H[21]),x=A(x,b,S,m,k,14,H[22]),m=A(m,x,b,S,l,20,H[23]),S=A(S,m,x,b,_,5,H[24]),b=A(b,S,m,x,w,9,H[25]),x=A(x,b,S,m,h,14,H[26]),m=A(m,x,b,S,p,20,H[27]),S=A(S,m,x,b,B,5,H[28]),b=A(b,S,m,x,a,9,H[29]),x=A(x,b,S,m,u,14,H[30]),S=C(S,m=A(m,x,b,S,g,20,H[31]),x,b,f,4,H[32]),b=C(b,S,m,x,p,11,H[33]),x=C(x,b,S,m,y,16,H[34]),m=C(m,x,b,S,w,23,H[35]),S=C(S,m,x,b,c,4,H[36]),b=C(b,S,m,x,l,11,H[37]),x=C(x,b,S,m,u,16,H[38]),m=C(m,x,b,S,v,23,H[39]),S=C(S,m,x,b,B,4,H[40]),b=C(b,S,m,x,s,11,H[41]),x=C(x,b,S,m,h,16,H[42]),m=C(m,x,b,S,d,23,H[43]),S=C(S,m,x,b,_,4,H[44]),b=C(b,S,m,x,g,11,H[45]),x=C(x,b,S,m,k,16,H[46]),S=D(S,m=C(m,x,b,S,a,23,H[47]),x,b,s,6,H[48]),b=D(b,S,m,x,u,10,H[49]),x=D(x,b,S,m,w,15,H[50]),m=D(m,x,b,S,f,21,H[51]),S=D(S,m,x,b,g,6,H[52]),b=D(b,S,m,x,h,10,H[53]),x=D(x,b,S,m,v,15,H[54]),m=D(m,x,b,S,c,21,H[55]),S=D(S,m,x,b,p,6,H[56]),b=D(b,S,m,x,k,10,H[57]),x=D(x,b,S,m,d,15,H[58]),m=D(m,x,b,S,B,21,H[59]),S=D(S,m,x,b,l,6,H[60]),b=D(b,S,m,x,y,10,H[61]),x=D(x,b,S,m,a,15,H[62]),m=D(m,x,b,S,_,21,H[63]),o[0]=o[0]+S|0,o[1]=o[1]+m|0,o[2]=o[2]+x|0,o[3]=o[3]+b|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32;var n=l.floor(r/4294967296),o=r;e[15+(64+i>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e[14+(64+i>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(e.length+1),this._process();for(var s=this._hash,c=s.words,a=0;a<4;a++){var h=c[a];c[a]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return s},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});function z(t,e,r,i,n,o,s){var c=t+(e&r|~e&i)+n+s;return(c<<o|c>>>32-o)+e}function A(t,e,r,i,n,o,s){var c=t+(e&i|r&~i)+n+s;return(c<<o|c>>>32-o)+e}function C(t,e,r,i,n,o,s){var c=t+(e^r^i)+n+s;return(c<<o|c>>>32-o)+e}function D(t,e,r,i,n,o,s){var c=t+(r^(e|~i))+n+s;return(c<<o|c>>>32-o)+e}t.MD5=i._createHelper(o),t.HmacMD5=i._createHmacHelper(o)}(Math),e=(t=bt).lib,r=e.WordArray,i=e.Hasher,n=t.algo,f=[],o=n.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=0;a<80;a++){if(a<16)f[a]=0|t[e+a];else{var h=f[a-3]^f[a-8]^f[a-14]^f[a-16];f[a]=h<<1|h>>>31}var l=(i<<5|i>>>27)+c+f[a];l+=a<20?1518500249+(n&o|~n&s):a<40?1859775393+(n^o^s):a<60?(n&o|n&s|o&s)-1894007588:(n^o^s)-899497514,c=s,s=o,o=n<<30|n>>>2,n=i,i=l}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=Math.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}}),t.SHA1=i._createHelper(o),t.HmacSHA1=i._createHmacHelper(o),function(n){var t=bt,e=t.lib,r=e.WordArray,i=e.Hasher,o=t.algo,s=[],B=[];!function(){function t(t){for(var e=n.sqrt(t),r=2;r<=e;r++)if(!(t%r))return;return 1}function e(t){return 4294967296*(t-(0|t))|0}for(var r=2,i=0;i<64;)t(r)&&(i<8&&(s[i]=e(n.pow(r,.5))),B[i]=e(n.pow(r,1/3)),i++),r++}();var w=[],c=o.SHA256=i.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=r[5],h=r[6],l=r[7],f=0;f<64;f++){if(f<16)w[f]=0|t[e+f];else{var d=w[f-15],u=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,p=w[f-2],_=(p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10;w[f]=u+w[f-7]+_+w[f-16]}var v=i&n^i&o^n&o,y=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),g=l+((c<<26|c>>>6)^(c<<21|c>>>11)^(c<<7|c>>>25))+(c&a^~c&h)+B[f]+w[f];l=h,h=a,a=c,c=s+g|0,s=o,o=n,n=i,i=g+(y+v)|0}r[0]=r[0]+i|0,r[1]=r[1]+n|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0,r[5]=r[5]+a|0,r[6]=r[6]+h|0,r[7]=r[7]+l|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=n.floor(r/4294967296),e[15+(64+i>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});t.SHA256=i._createHelper(c),t.HmacSHA256=i._createHmacHelper(c)}(Math),function(){var n=bt.lib.WordArray,t=bt.enc;t.Utf16=t.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n+=2){var o=e[n>>>2]>>>16-n%4*8&65535;i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i++)r[i>>>1]|=t.charCodeAt(i)<<16-i%2*16;return n.create(r,2*e)}};function s(t){return t<<8&4278255360|t>>>8&16711935}t.Utf16LE={stringify:function(t){for(var e=t.words,r=t.sigBytes,i=[],n=0;n<r;n+=2){var o=s(e[n>>>2]>>>16-n%4*8&65535);i.push(String.fromCharCode(o))}return i.join("")},parse:function(t){for(var e=t.length,r=[],i=0;i<e;i++)r[i>>>1]|=s(t.charCodeAt(i)<<16-i%2*16);return n.create(r,2*e)}}}(),function(){if("function"==typeof ArrayBuffer){var t=bt.lib.WordArray,n=t.init;(t.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var e=t.byteLength,r=[],i=0;i<e;i++)r[i>>>2]|=t[i]<<24-i%4*8;n.call(this,r,e)}else n.apply(this,arguments)}).prototype=t}}(),Math,c=(s=bt).lib,a=c.WordArray,l=c.Hasher,d=s.algo,m=a.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),x=a.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),b=a.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),H=a.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),z=a.create([0,1518500249,1859775393,2400959708,2840853838]),A=a.create([1352829926,1548603684,1836072691,2053994217,0]),u=d.RIPEMD160=l.extend({_doReset:function(){this._hash=a.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}var o,s,c,a,h,l,f,d,u,p,_,v=this._hash.words,y=z.words,g=A.words,B=m.words,w=x.words,k=b.words,S=H.words;l=o=v[0],f=s=v[1],d=c=v[2],u=a=v[3],p=h=v[4];for(r=0;r<80;r+=1)_=o+t[e+B[r]]|0,_+=r<16?mt(s,c,a)+y[0]:r<32?xt(s,c,a)+y[1]:r<48?Ht(s,c,a)+y[2]:r<64?zt(s,c,a)+y[3]:At(s,c,a)+y[4],_=(_=Ct(_|=0,k[r]))+h|0,o=h,h=a,a=Ct(c,10),c=s,s=_,_=l+t[e+w[r]]|0,_+=r<16?At(f,d,u)+g[0]:r<32?zt(f,d,u)+g[1]:r<48?Ht(f,d,u)+g[2]:r<64?xt(f,d,u)+g[3]:mt(f,d,u)+g[4],_=(_=Ct(_|=0,S[r]))+p|0,l=p,p=u,u=Ct(d,10),d=f,f=_;_=v[1]+c+u|0,v[1]=v[2]+a+p|0,v[2]=v[3]+h+l|0,v[3]=v[4]+o+f|0,v[4]=v[0]+s+d|0,v[0]=_},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var n=this._hash,o=n.words,s=0;s<5;s++){var c=o[s];o[s]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}return n},clone:function(){var t=l.clone.call(this);return t._hash=this._hash.clone(),t}}),s.RIPEMD160=l._createHelper(u),s.HmacRIPEMD160=l._createHmacHelper(u),p=bt.lib.Base,_=bt.enc.Utf8,bt.algo.HMAC=p.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=_.parse(e));var r=t.blockSize,i=4*r;e.sigBytes>i&&(e=t.finalize(e)),e.clamp();for(var n=this._oKey=e.clone(),o=this._iKey=e.clone(),s=n.words,c=o.words,a=0;a<r;a++)s[a]^=1549556828,c[a]^=909522486;n.sigBytes=o.sigBytes=i,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(t){var e=this._hasher,r=e.finalize(t);return e.reset(),e.finalize(this._oKey.clone().concat(r))}}),y=(v=bt).lib,g=y.Base,B=y.WordArray,w=v.algo,k=w.SHA1,S=w.HMAC,C=w.PBKDF2=g.extend({cfg:g.extend({keySize:4,hasher:k,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,i=S.create(r.hasher,t),n=B.create(),o=B.create([1]),s=n.words,c=o.words,a=r.keySize,h=r.iterations;s.length<a;){var l=i.update(e).finalize(o);i.reset();for(var f=l.words,d=f.length,u=l,p=1;p<h;p++){u=i.finalize(u),i.reset();for(var _=u.words,v=0;v<d;v++)f[v]^=_[v]}n.concat(l),c[0]++}return n.sigBytes=4*a,n}}),v.PBKDF2=function(t,e,r){return C.create(r).compute(t,e)},E=(D=bt).lib,R=E.Base,M=E.WordArray,F=D.algo,P=F.MD5,W=F.EvpKDF=R.extend({cfg:R.extend({keySize:4,hasher:P,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r,i=this.cfg,n=i.hasher.create(),o=M.create(),s=o.words,c=i.keySize,a=i.iterations;s.length<c;){r&&n.update(r),r=n.update(t).finalize(e),n.reset();for(var h=1;h<a;h++)r=n.finalize(r),n.reset();o.concat(r)}return o.sigBytes=4*c,o}}),D.EvpKDF=function(t,e,r){return W.create(r).compute(t,e)},I=(O=bt).lib.WordArray,U=O.algo,K=U.SHA256,X=U.SHA224=K.extend({_doReset:function(){this._hash=new I.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=K._doFinalize.call(this);return t.sigBytes-=4,t}}),O.SHA224=K._createHelper(X),O.HmacSHA224=K._createHmacHelper(X),L=bt.lib,j=L.Base,N=L.WordArray,(T=bt.x64={}).Word=j.extend({init:function(t,e){this.high=t,this.low=e}}),T.WordArray=j.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:8*t.length},toX32:function(){for(var t=this.words,e=t.length,r=[],i=0;i<e;i++){var n=t[i];r.push(n.high),r.push(n.low)}return N.create(r,this.sigBytes)},clone:function(){for(var t=j.clone.call(this),e=t.words=this.words.slice(0),r=e.length,i=0;i<r;i++)e[i]=e[i].clone();return t}}),function(d){var t=bt,e=t.lib,u=e.WordArray,i=e.Hasher,l=t.x64.Word,r=t.algo,C=[],D=[],E=[];!function(){for(var t=1,e=0,r=0;r<24;r++){C[t+5*e]=(r+1)*(r+2)/2%64;var i=(2*t+3*e)%5;t=e%5,e=i}for(t=0;t<5;t++)for(e=0;e<5;e++)D[t+5*e]=e+(2*t+3*e)%5*5;for(var n=1,o=0;o<24;o++){for(var s=0,c=0,a=0;a<7;a++){if(1&n){var h=(1<<a)-1;h<32?c^=1<<h:s^=1<<h-32}128&n?n=n<<1^113:n<<=1}E[o]=l.create(s,c)}}();var R=[];!function(){for(var t=0;t<25;t++)R[t]=l.create()}();var n=r.SHA3=i.extend({cfg:i.cfg.extend({outputLength:512}),_doReset:function(){for(var t=this._state=[],e=0;e<25;e++)t[e]=new l.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(t,e){for(var r=this._state,i=this.blockSize/2,n=0;n<i;n++){var o=t[e+2*n],s=t[e+2*n+1];o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(x=r[n]).high^=s,x.low^=o}for(var c=0;c<24;c++){for(var a=0;a<5;a++){for(var h=0,l=0,f=0;f<5;f++){h^=(x=r[a+5*f]).high,l^=x.low}var d=R[a];d.high=h,d.low=l}for(a=0;a<5;a++){var u=R[(a+4)%5],p=R[(a+1)%5],_=p.high,v=p.low;for(h=u.high^(_<<1|v>>>31),l=u.low^(v<<1|_>>>31),f=0;f<5;f++){(x=r[a+5*f]).high^=h,x.low^=l}}for(var y=1;y<25;y++){var g=(x=r[y]).high,B=x.low,w=C[y];l=w<32?(h=g<<w|B>>>32-w,B<<w|g>>>32-w):(h=B<<w-32|g>>>64-w,g<<w-32|B>>>64-w);var k=R[D[y]];k.high=h,k.low=l}var S=R[0],m=r[0];S.high=m.high,S.low=m.low;for(a=0;a<5;a++)for(f=0;f<5;f++){var x=r[y=a+5*f],b=R[y],H=R[(a+1)%5+5*f],z=R[(a+2)%5+5*f];x.high=b.high^~H.high&z.high,x.low=b.low^~H.low&z.low}x=r[0];var A=E[c];x.high^=A.high,x.low^=A.low}},_doFinalize:function(){var t=this._data,e=t.words,r=(this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;e[r>>>5]|=1<<24-r%32,e[(d.ceil((1+r)/i)*i>>>5)-1]|=128,t.sigBytes=4*e.length,this._process();for(var n=this._state,o=this.cfg.outputLength/8,s=o/8,c=[],a=0;a<s;a++){var h=n[a],l=h.high,f=h.low;l=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8),f=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8),c.push(f),c.push(l)}return new u.init(c,o)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});t.SHA3=i._createHelper(n),t.HmacSHA3=i._createHmacHelper(n)}(Math),function(){var t=bt,e=t.lib.Hasher,r=t.x64,i=r.Word,n=r.WordArray,o=t.algo;function s(){return i.create.apply(i,arguments)}var mt=[s(1116352408,3609767458),s(1899447441,602891725),s(3049323471,3964484399),s(3921009573,2173295548),s(961987163,4081628472),s(1508970993,3053834265),s(2453635748,2937671579),s(2870763221,3664609560),s(3624381080,2734883394),s(310598401,1164996542),s(607225278,1323610764),s(1426881987,3590304994),s(1925078388,4068182383),s(2162078206,991336113),s(2614888103,633803317),s(3248222580,3479774868),s(3835390401,2666613458),s(4022224774,944711139),s(264347078,2341262773),s(604807628,2007800933),s(770255983,1495990901),s(1249150122,1856431235),s(1555081692,3175218132),s(1996064986,2198950837),s(2554220882,3999719339),s(2821834349,766784016),s(2952996808,2566594879),s(3210313671,3203337956),s(3336571891,1034457026),s(3584528711,2466948901),s(113926993,3758326383),s(338241895,168717936),s(666307205,1188179964),s(773529912,1546045734),s(1294757372,1522805485),s(1396182291,2643833823),s(1695183700,2343527390),s(1986661051,1014477480),s(2177026350,1206759142),s(2456956037,344077627),s(2730485921,1290863460),s(2820302411,3158454273),s(3259730800,3505952657),s(3345764771,106217008),s(3516065817,3606008344),s(3600352804,1432725776),s(4094571909,1467031594),s(275423344,851169720),s(430227734,3100823752),s(506948616,1363258195),s(659060556,3750685593),s(883997877,3785050280),s(958139571,3318307427),s(1322822218,3812723403),s(1537002063,2003034995),s(1747873779,3602036899),s(1955562222,1575990012),s(2024104815,1125592928),s(2227730452,2716904306),s(2361852424,442776044),s(2428436474,593698344),s(2756734187,3733110249),s(3204031479,2999351573),s(3329325298,3815920427),s(3391569614,3928383900),s(3515267271,566280711),s(3940187606,3454069534),s(4118630271,4000239992),s(116418474,1914138554),s(174292421,2731055270),s(289380356,3203993006),s(460393269,320620315),s(685471733,587496836),s(852142971,1086792851),s(1017036298,365543100),s(1126000580,2618297676),s(1288033470,3409855158),s(1501505948,4234509866),s(1607167915,987167468),s(1816402316,1246189591)],xt=[];!function(){for(var t=0;t<80;t++)xt[t]=s()}();var c=o.SHA512=e.extend({_doReset:function(){this._hash=new n.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,i=r[0],n=r[1],o=r[2],s=r[3],c=r[4],a=r[5],h=r[6],l=r[7],f=i.high,d=i.low,u=n.high,p=n.low,_=o.high,v=o.low,y=s.high,g=s.low,B=c.high,w=c.low,k=a.high,S=a.low,m=h.high,x=h.low,b=l.high,H=l.low,z=f,A=d,C=u,D=p,E=_,R=v,M=y,F=g,P=B,W=w,O=k,I=S,U=m,K=x,X=b,L=H,j=0;j<80;j++){var N,T,q=xt[j];if(j<16)T=q.high=0|t[e+2*j],N=q.low=0|t[e+2*j+1];else{var Z=xt[j-15],V=Z.high,G=Z.low,J=(V>>>1|G<<31)^(V>>>8|G<<24)^V>>>7,$=(G>>>1|V<<31)^(G>>>8|V<<24)^(G>>>7|V<<25),Q=xt[j-2],Y=Q.high,tt=Q.low,et=(Y>>>19|tt<<13)^(Y<<3|tt>>>29)^Y>>>6,rt=(tt>>>19|Y<<13)^(tt<<3|Y>>>29)^(tt>>>6|Y<<26),it=xt[j-7],nt=it.high,ot=it.low,st=xt[j-16],ct=st.high,at=st.low;T=(T=(T=J+nt+((N=$+ot)>>>0<$>>>0?1:0))+et+((N+=rt)>>>0<rt>>>0?1:0))+ct+((N+=at)>>>0<at>>>0?1:0),q.high=T,q.low=N}var ht,lt=P&O^~P&U,ft=W&I^~W&K,dt=z&C^z&E^C&E,ut=A&D^A&R^D&R,pt=(z>>>28|A<<4)^(z<<30|A>>>2)^(z<<25|A>>>7),_t=(A>>>28|z<<4)^(A<<30|z>>>2)^(A<<25|z>>>7),vt=(P>>>14|W<<18)^(P>>>18|W<<14)^(P<<23|W>>>9),yt=(W>>>14|P<<18)^(W>>>18|P<<14)^(W<<23|P>>>9),gt=mt[j],Bt=gt.high,wt=gt.low,kt=X+vt+((ht=L+yt)>>>0<L>>>0?1:0),St=_t+ut;X=U,L=K,U=O,K=I,O=P,I=W,P=M+(kt=(kt=(kt=kt+lt+((ht=ht+ft)>>>0<ft>>>0?1:0))+Bt+((ht=ht+wt)>>>0<wt>>>0?1:0))+T+((ht=ht+N)>>>0<N>>>0?1:0))+((W=F+ht|0)>>>0<F>>>0?1:0)|0,M=E,F=R,E=C,R=D,C=z,D=A,z=kt+(pt+dt+(St>>>0<_t>>>0?1:0))+((A=ht+St|0)>>>0<ht>>>0?1:0)|0}d=i.low=d+A,i.high=f+z+(d>>>0<A>>>0?1:0),p=n.low=p+D,n.high=u+C+(p>>>0<D>>>0?1:0),v=o.low=v+R,o.high=_+E+(v>>>0<R>>>0?1:0),g=s.low=g+F,s.high=y+M+(g>>>0<F>>>0?1:0),w=c.low=w+W,c.high=B+P+(w>>>0<W>>>0?1:0),S=a.low=S+I,a.high=k+O+(S>>>0<I>>>0?1:0),x=h.low=x+K,h.high=m+U+(x>>>0<K>>>0?1:0),H=l.low=H+L,l.high=b+X+(H>>>0<L>>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(128+i>>>10<<5)]=Math.floor(r/4294967296),e[31+(128+i>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(c),t.HmacSHA512=e._createHmacHelper(c)}(),Z=(q=bt).x64,V=Z.Word,G=Z.WordArray,J=q.algo,$=J.SHA512,Q=J.SHA384=$.extend({_doReset:function(){this._hash=new G.init([new V.init(3418070365,3238371032),new V.init(1654270250,914150663),new V.init(2438529370,812702999),new V.init(355462360,4144912697),new V.init(1731405415,4290775857),new V.init(2394180231,1750603025),new V.init(3675008525,1694076839),new V.init(1203062813,3204075428)])},_doFinalize:function(){var t=$._doFinalize.call(this);return t.sigBytes-=16,t}}),q.SHA384=$._createHelper(Q),q.HmacSHA384=$._createHmacHelper(Q),bt.lib.Cipher||function(){var t=bt,e=t.lib,r=e.Base,a=e.WordArray,i=e.BufferedBlockAlgorithm,n=t.enc,o=(n.Utf8,n.Base64),s=t.algo.EvpKDF,c=e.Cipher=i.extend({cfg:r.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){i.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){return t&&this._append(t),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(i){return{encrypt:function(t,e,r){return h(e).encrypt(i,t,e,r)},decrypt:function(t,e,r){return h(e).decrypt(i,t,e,r)}}}});function h(t){return"string"==typeof t?w:g}e.StreamCipher=c.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var l,f=t.mode={},d=e.BlockCipherMode=r.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),u=f.CBC=((l=d.extend()).Encryptor=l.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;p.call(this,t,e,i),r.encryptBlock(t,e),this._prevBlock=t.slice(e,e+i)}}),l.Decryptor=l.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);r.decryptBlock(t,e),p.call(this,t,e,i),this._prevBlock=n}}),l);function p(t,e,r){var i,n=this._iv;n?(i=n,this._iv=void 0):i=this._prevBlock;for(var o=0;o<r;o++)t[e+o]^=i[o]}var _=(t.pad={}).Pkcs7={pad:function(t,e){for(var r=4*e,i=r-t.sigBytes%r,n=i<<24|i<<16|i<<8|i,o=[],s=0;s<i;s+=4)o.push(n);var c=a.create(o,i);t.concat(c)},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},v=(e.BlockCipher=c.extend({cfg:c.cfg.extend({mode:u,padding:_}),reset:function(){var t;c.reset.call(this);var e=this.cfg,r=e.iv,i=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=i.createEncryptor:(t=i.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(i,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),e.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=(t.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;return(r?a.create([1398893684,1701076831]).concat(r).concat(e):e).toString(o)},parse:function(t){var e,r=o.parse(t),i=r.words;return 1398893684==i[0]&&1701076831==i[1]&&(e=a.create(i.slice(2,4)),i.splice(0,4),r.sigBytes-=16),v.create({ciphertext:r,salt:e})}},g=e.SerializableCipher=r.extend({cfg:r.extend({format:y}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),o=n.finalize(e),s=n.cfg;return v.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),B=(t.kdf={}).OpenSSL={execute:function(t,e,r,i){i=i||a.random(8);var n=s.create({keySize:e+r}).compute(t,i),o=a.create(n.words.slice(e),4*r);return n.sigBytes=4*e,v.create({key:n,iv:o,salt:i})}},w=e.PasswordBasedCipher=g.extend({cfg:g.cfg.extend({kdf:B}),encrypt:function(t,e,r,i){var n=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize);i.iv=n.iv;var o=g.encrypt.call(this,t,e,n.key,i);return o.mixIn(n),o},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);var n=i.kdf.execute(r,t.keySize,t.ivSize,e.salt);return i.iv=n.iv,g.decrypt.call(this,t,e,n.key,i)}})}(),bt.mode.CFB=((Y=bt.lib.BlockCipherMode.extend()).Encryptor=Y.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;Dt.call(this,t,e,i,r),this._prevBlock=t.slice(e,e+i)}}),Y.Decryptor=Y.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);Dt.call(this,t,e,i,r),this._prevBlock=n}}),Y),bt.mode.ECB=((tt=bt.lib.BlockCipherMode.extend()).Encryptor=tt.extend({processBlock:function(t,e){this._cipher.encryptBlock(t,e)}}),tt.Decryptor=tt.extend({processBlock:function(t,e){this._cipher.decryptBlock(t,e)}}),tt),bt.pad.AnsiX923={pad:function(t,e){var r=t.sigBytes,i=4*e,n=i-r%i,o=r+n-1;t.clamp(),t.words[o>>>2]|=n<<24-o%4*8,t.sigBytes+=n},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},bt.pad.Iso10126={pad:function(t,e){var r=4*e,i=r-t.sigBytes%r;t.concat(bt.lib.WordArray.random(i-1)).concat(bt.lib.WordArray.create([i<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},bt.pad.Iso97971={pad:function(t,e){t.concat(bt.lib.WordArray.create([2147483648],1)),bt.pad.ZeroPadding.pad(t,e)},unpad:function(t){bt.pad.ZeroPadding.unpad(t),t.sigBytes--}},bt.mode.OFB=(et=bt.lib.BlockCipherMode.extend(),rt=et.Encryptor=et.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._keystream;n&&(o=this._keystream=n.slice(0),this._iv=void 0),r.encryptBlock(o,0);for(var s=0;s<i;s++)t[e+s]^=o[s]}}),et.Decryptor=rt,et),bt.pad.NoPadding={pad:function(){},unpad:function(){}},it=bt.lib.CipherParams,nt=bt.enc.Hex,bt.format.Hex={stringify:function(t){return t.ciphertext.toString(nt)},parse:function(t){var e=nt.parse(t);return it.create({ciphertext:e})}},function(){var t=bt,e=t.lib.BlockCipher,r=t.algo,h=[],l=[],f=[],d=[],u=[],p=[],_=[],v=[],y=[],g=[];!function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var r=0,i=0;for(e=0;e<256;e++){var n=i^i<<1^i<<2^i<<3^i<<4;n=n>>>8^255&n^99,h[r]=n;var o=t[l[n]=r],s=t[o],c=t[s],a=257*t[n]^16843008*n;f[r]=a<<24|a>>>8,d[r]=a<<16|a>>>16,u[r]=a<<8|a>>>24,p[r]=a;a=16843009*c^65537*s^257*o^16843008*r;_[n]=a<<24|a>>>8,v[n]=a<<16|a>>>16,y[n]=a<<8|a>>>24,g[n]=a,r?(r=o^t[t[t[c^o]]],i^=t[t[i]]):r=i=1}}();var B=[0,1,2,4,8,16,32,64,128,27,54],i=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,i=4*(1+(this._nRounds=6+r)),n=this._keySchedule=[],o=0;o<i;o++)o<r?n[o]=e[o]:(a=n[o-1],o%r?6<r&&o%r==4&&(a=h[a>>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a]):(a=h[(a=a<<8|a>>>24)>>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a],a^=B[o/r|0]<<24),n[o]=n[o-r]^a);for(var s=this._invKeySchedule=[],c=0;c<i;c++){o=i-c;if(c%4)var a=n[o];else a=n[o-4];s[c]=c<4||o<=4?a:_[h[a>>>24]]^v[h[a>>>16&255]]^y[h[a>>>8&255]]^g[h[255&a]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,f,d,u,p,h)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,_,v,y,g,l);r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,c){for(var a=this._nRounds,h=t[e]^r[0],l=t[e+1]^r[1],f=t[e+2]^r[2],d=t[e+3]^r[3],u=4,p=1;p<a;p++){var _=i[h>>>24]^n[l>>>16&255]^o[f>>>8&255]^s[255&d]^r[u++],v=i[l>>>24]^n[f>>>16&255]^o[d>>>8&255]^s[255&h]^r[u++],y=i[f>>>24]^n[d>>>16&255]^o[h>>>8&255]^s[255&l]^r[u++],g=i[d>>>24]^n[h>>>16&255]^o[l>>>8&255]^s[255&f]^r[u++];h=_,l=v,f=y,d=g}_=(c[h>>>24]<<24|c[l>>>16&255]<<16|c[f>>>8&255]<<8|c[255&d])^r[u++],v=(c[l>>>24]<<24|c[f>>>16&255]<<16|c[d>>>8&255]<<8|c[255&h])^r[u++],y=(c[f>>>24]<<24|c[d>>>16&255]<<16|c[h>>>8&255]<<8|c[255&l])^r[u++],g=(c[d>>>24]<<24|c[h>>>16&255]<<16|c[l>>>8&255]<<8|c[255&f])^r[u++];t[e]=_,t[e+1]=v,t[e+2]=y,t[e+3]=g},keySize:8});t.AES=e._createHelper(i)}(),function(){var t=bt,e=t.lib,n=e.WordArray,r=e.BlockCipher,i=t.algo,h=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],l=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],f=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],d=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],o=i.DES=r.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=h[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(var n=this._subKeys=[],o=0;o<16;o++){var s=n[o]=[],c=f[o];for(r=0;r<24;r++)s[r/6|0]|=e[(l[r]-1+c)%28]<<31-r%6,s[4+(r/6|0)]|=e[28+(l[r+24]-1+c)%28]<<31-r%6;s[0]=s[0]<<1|s[0]>>>31;for(r=1;r<7;r++)s[r]=s[r]>>>4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}var a=this._invSubKeys=[];for(r=0;r<16;r++)a[r]=n[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],p.call(this,4,252645135),p.call(this,16,65535),_.call(this,2,858993459),_.call(this,8,16711935),p.call(this,1,1431655765);for(var i=0;i<16;i++){for(var n=r[i],o=this._lBlock,s=this._rBlock,c=0,a=0;a<8;a++)c|=d[a][((s^n[a])&u[a])>>>0];this._lBlock=s,this._rBlock=o^c}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,p.call(this,1,1431655765),_.call(this,8,16711935),_.call(this,2,858993459),p.call(this,16,65535),p.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function p(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<<t}function _(t,e){var r=(this._rBlock>>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<<t}t.DES=r._createHelper(o);var s=i.TripleDES=r.extend({_doReset:function(){var t=this._key.words;if(2!==t.length&&4!==t.length&&t.length<6)throw new Error("Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.");var e=t.slice(0,2),r=t.length<4?t.slice(0,2):t.slice(2,4),i=t.length<6?t.slice(0,2):t.slice(4,6);this._des1=o.createEncryptor(n.create(e)),this._des2=o.createEncryptor(n.create(r)),this._des3=o.createEncryptor(n.create(i))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=r._createHelper(s)}(),function(){var t=bt,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;n=0;for(var o=0;n<256;n++){var s=n%r,c=e[s>>>2]>>>24-s%4*8&255;o=(o+i[n]+c)%256;var a=i[n];i[n]=i[o],i[o]=a}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=n.call(this)},keySize:8,ivSize:0});function n(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){r=(r+t[e=(e+1)%256])%256;var o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}t.RC4=e._createHelper(i);var o=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;0<t;t--)n.call(this)}});t.RC4Drop=e._createHelper(o)}(),bt.mode.CTRGladman=(ot=bt.lib.BlockCipherMode.extend(),st=ot.Encryptor=ot.extend({processBlock:function(t,e){var r,i=this._cipher,n=i.blockSize,o=this._iv,s=this._counter;o&&(s=this._counter=o.slice(0),this._iv=void 0),0===((r=s)[0]=Et(r[0]))&&(r[1]=Et(r[1]));var c=s.slice(0);i.encryptBlock(c,0);for(var a=0;a<n;a++)t[e+a]^=c[a]}}),ot.Decryptor=st,ot),at=(ct=bt).lib.StreamCipher,ht=ct.algo,lt=[],ft=[],dt=[],ut=ht.Rabbit=at.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,r=0;r<4;r++)t[r]=16711935&(t[r]<<8|t[r]>>>24)|4278255360&(t[r]<<24|t[r]>>>8);var i=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];for(r=this._b=0;r<4;r++)Rt.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var o=e.words,s=o[0],c=o[1],a=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=a>>>16|4294901760&h,f=h<<16|65535&a;n[0]^=a,n[1]^=l,n[2]^=h,n[3]^=f,n[4]^=a,n[5]^=l,n[6]^=h,n[7]^=f;for(r=0;r<4;r++)Rt.call(this)}},_doProcessBlock:function(t,e){var r=this._X;Rt.call(this),lt[0]=r[0]^r[5]>>>16^r[3]<<16,lt[1]=r[2]^r[7]>>>16^r[5]<<16,lt[2]=r[4]^r[1]>>>16^r[7]<<16,lt[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)lt[i]=16711935&(lt[i]<<8|lt[i]>>>24)|4278255360&(lt[i]<<24|lt[i]>>>8),t[e+i]^=lt[i]},blockSize:4,ivSize:2}),ct.Rabbit=at._createHelper(ut),bt.mode.CTR=(pt=bt.lib.BlockCipherMode.extend(),_t=pt.Encryptor=pt.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._counter;n&&(o=this._counter=n.slice(0),this._iv=void 0);var s=o.slice(0);r.encryptBlock(s,0),o[i-1]=o[i-1]+1|0;for(var c=0;c<i;c++)t[e+c]^=s[c]}}),pt.Decryptor=_t,pt),yt=(vt=bt).lib.StreamCipher,gt=vt.algo,Bt=[],wt=[],kt=[],St=gt.RabbitLegacy=yt.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,r=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]],n=this._b=0;n<4;n++)Mt.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(e){var o=e.words,s=o[0],c=o[1],a=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),h=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),l=a>>>16|4294901760&h,f=h<<16|65535&a;i[0]^=a,i[1]^=l,i[2]^=h,i[3]^=f,i[4]^=a,i[5]^=l,i[6]^=h,i[7]^=f;for(n=0;n<4;n++)Mt.call(this)}},_doProcessBlock:function(t,e){var r=this._X;Mt.call(this),Bt[0]=r[0]^r[5]>>>16^r[3]<<16,Bt[1]=r[2]^r[7]>>>16^r[5]<<16,Bt[2]=r[4]^r[1]>>>16^r[7]<<16,Bt[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)Bt[i]=16711935&(Bt[i]<<8|Bt[i]>>>24)|4278255360&(Bt[i]<<24|Bt[i]>>>8),t[e+i]^=Bt[i]},blockSize:4,ivSize:2}),vt.RabbitLegacy=yt._createHelper(St),bt.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){var e=t.words,r=t.sigBytes-1;for(r=t.sigBytes-1;0<=r;r--)if(e[r>>>2]>>>24-r%4*8&255){t.sigBytes=r+1;break}}},bt});

var _ = typeof _ !== 'undefined' ? _ : {};
window._ = _;
_.md5 = {
    gen: function(inputText) {
        return CryptoJS.MD5(inputText).toString();
    }
};


name: ns.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\ns.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {} ; window._=_;
_.v = typeof _.v !== 'undefined' ? _.v : {} ;
_.chat = typeof _.chat !== 'undefined' ? _.chat : {};


name: oc.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\oc.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {} ; window._=_;
_.oc = {
        record: 0,
        index: {},
        scan: function(data,i) {
            const self = this;
            if (typeof i == 'undefined') { i=0 }
            i--; var dic={}; var o={}; var oi={}; var rev={}; var ee=[];
            var rel={
                    '[':']',
                    '(':')',
                    '{':'}',
                    '"':'"',
                    "'":"'",
            };
            var scan = Object.keys(rel);
            for (var ii = 0; ii < scan.length; ii++) {
                o[ scan[ii] ] = {};
                oi[ scan[ii] ] = -1;
                rev[ rel[scan[ii]] ]=scan[ii];
                ee.push(rel[scan[ii]]);
            }
            var qs=[ '"',"'" ]; var qsa=''; var inq=false;
            var escape='\\'; var escaped=false;
            var is;
            while ( i < data.length ) {
                i++; var ch = data[i];
                if (escaped){ escaped=false; continue; }
                if (qs.indexOf(ch) > -1 ) {
                    if (inq) { inq=false; dic[  o[ch][oi[ch]]  ]=i+1; oi[ch]--; }
                    else { inq=true; oi[ch]++; o[ch][oi[ch]]=i; continue;}
                } else {
                    if (scan.indexOf(ch) > -1) { oi[ch]++; o[ch][oi[ch]]=i; }
                    else if (ee.indexOf(ch) > -1) { is=rev[ch]; dic[  o[is][oi[is]]  ]=i+1; oi[is]--; }
                }
            }
            self.index=dic;
            var Dic = Object.keys(dic);
            return self.index;
        },
        first: function(data,i) {
            const self = this;
            if (typeof i == 'undefined') { i=0 }
            self.scan(data,i);
            var ii=0;
            i--;
            while (true) {
                i++; ii++;
                if ( self.index.indexOf(i) > -1 ) { return self.index[i]; };
                if (ii==10000) { break; }
            }
            return null;
        },
        aline: function(val,ii) {
            const self = this;
            var index = self.lines(val);
            var keys = Object.keys(index);
            for (var i = 0; i < keys.length; i++) {
                if ( keys[i] <= ii && index[keys[i]] >=ii ) {
                    return [keys[i],index[keys[i]]];
                }
            }
        },
        up: function(val,ii) {
            const self = this;
            var one = self.aline(val,ii)
            if ( one[0] == 0 ) {
                return null;
            }
            var two = self.aline(val,one[0]-2);
            return [one,two];
        },
        lines: function(val) {
            const self = this;
            var lines=[];
            var index={};
            var last=0;
            for (var i = 0; i < val.length; i++) {
                if ( val[i] == '\n' ) {
                    if (last==0) {
                        index[last]=i;
                    } else {
                        index[last+1]=i;
                    }
                    last=i;
                    lines.push(i);
                }
            }
            index[last+1]=val.length;
            return index;
        }
};

// self.scan(  $('#code').val() ,0);


name: print.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\print.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {} ; window._=_;
_.onPrint = {
    changeCssAndRevert: (selector, property, newValue, delay) => {
        const elements = document.querySelectorAll(selector);

        // Store original values and apply new value
        const originalValues = [];
        elements.forEach((element, index) => {
            originalValues[index] = element.style[property];
            element.style[property] = newValue;
        });

        // Set a timeout to revert the changes
        setTimeout(() => {
            elements.forEach((element, index) => {
                element.style[property] = originalValues[index];
            });
        }, delay);
    }
};

// window.onbeforeprint = () => {
//     _.onPrint.changeCssAndRevert('#elementId', 'display', 'none', 5000);
//     _.onPrint.changeCssAndRevert('.className', 'display', 'none', 5000);
// };

// window.onafterprint = () => {
//     console.log("Done printing.");
// };


name: post.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\q\post.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {} ;
_.poster = {
    send: function() {
        $$.post(
                'url', {
                    '____a': ____b,
                },
                (data) => {
                    ____c
                }
        );
    },
};


name: shiftEnter.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\shiftEnter.js
mime: unavailable
content:
document.addEventListener("keydown", (e) => {
    if (e.shiftKey & e.key === "Enter") {
        ____a
    }
});


name: stems.php
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\stems.php
mime: unavailable
content:
<?php
	// include_once('_functions.php');
    // if(isset($_COOKIE['meta-token'])){$auth=file_get_contents("https://eyeformeta.com/apps/auth/app.php?app=bookmarks&token=".$_COOKIE['meta-token']);}if(trim($auth)==='pass') {}else{echo 'no access';setcookie('last', 'https://eyeformeta.com/apps/random/', time() + (86400 * 30), "/");echo '<META http-equiv="refresh" content="1;URL=/login.php?">';}
	$file=uniqid();
	if ( isset($_POST['words']) || isset($_GET['words']) ) {
		if ( isset($_POST['words']) ) { file_put_contents($file,$_POST['words']); }
		if ( isset($_GET['words']) ) { file_put_contents($file,$_GET['words']); }
	    exec(  "/bin/python3 /opt/rightthumb-widgets-v0/widgets/python/ws.py -f  ".$file  , $py_output, $py_status);
	    if (0 === $py_status) {
	        echo implode("\n", $py_output);
	    } else {
	        echo "a $py_status $status";
	        // echo '{}';
	    }
	    unlink($file);
	} else {
	    exec(  "/bin/python3 /opt/rightthumb-widgets-v0/widgets/python/ws.py -t test "  , $py_output, $py_status);
	    if (0 === $py_status) {
	        echo implode("\n", $py_output);
	    } else {
	        echo "b $py_status $status";
	        // echo '{}';
	    }
	}
    
?>


name: storage.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\storage.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {}; window._ = _;
_.v = typeof _.v !== 'undefined' ? _.v : {};
_.storage = typeof _.storage !== 'undefined' ? _.storage : {};

_.storage = {
    device: false,
    md5Status: false,
    space: {
        available: 0,
        used: 0,
        total: 0,
        status: 'unknown'
    },

    init: (test) => {
        _.s = _.storage;
        window._ = _;
        _.storage.device = _.storage.lS.getItem('device_id');
        if (!_.storage.device) {
            _.storage.lS.setItem('device_id', _.storage.crypt.uuid());
        }
        _.storage.device = _.storage.lS.getItem('device_id');

        if (!localStorage.getItem('--Storage_Expanded--')) {
            _.storage.initIndexedDB();
            localStorage.setItem('--Storage_Expanded--', 'true');
        }
        // Check available storage
        _.storage.updateSpace();
        // Call the onLoad function if it exists
        if (typeof _.storage.onLoad === 'function') {
            _.storage.onLoad();
        }
        _.storage.crypt.init();
        if (typeof test !== 'undefined') {
            _.storage.crypt.test();
        }
    },
    initIndexedDB: () => {
        const request = indexedDB.open("MyDatabase", 1);

        request.onupgradeneeded = (event) => {
            const db = event.target.result;
            db.createObjectStore("MyObjectStore", { keyPath: "id", autoIncrement: true });
        };

        request.onsuccess = (event) => {
            _.storage.db = event.target.result;
        };

        request.onerror = (event) => {
            console.error("IndexedDB error:", event.target.errorCode);
        };
    },

    updateSpace: () => {
        // Calculate used space
        let usedSpace = 0;
        for (let i = 0; i < localStorage.length; i++) {
            const key = localStorage.key(i);
            const value = localStorage.getItem(key);
            usedSpace += key.length + value.length;
        }

        // Estimate total and available space
        let totalSpace = 5 * 1024 * 1024; // Assume 5 MB as a typical localStorage limit
        let availableSpace = totalSpace - usedSpace;

        // Update _.storage.space
        _.storage.space = {
            available: availableSpace,
            used: usedSpace,
            total: totalSpace
        };
        _.storage.checkStorageAvailability();
    },

    checkStorageAvailability: () => {
        const testKey = 'testKey';
        try {
            const dbRequest = indexedDB.open('testDB', 1);

            dbRequest.onupgradeneeded = (event) => {
                const db = event.target.result;
                db.createObjectStore('testStore');
            };

            dbRequest.onsuccess = (event) => {
                const db = event.target.result;
                const transaction = db.transaction('testStore', 'readwrite');
                const store = transaction.objectStore('testStore');
                try {
                    store.add(new Uint8Array(1024 * 1024 * 50), testKey); // Attempt to store 50 MB
                    _.storage.space.status = 'sufficient';
                } catch (e) {
                    _.storage.space.status = 'insufficient';
                }
                transaction.oncomplete = () => {
                    db.close();
                    indexedDB.deleteDatabase('testDB'); // Clean up test database
                };
            };

            dbRequest.onerror = () => {
                _.storage.space.status = 'insufficient';
            };
        } catch (e) {
            _.storage.space.status = 'insufficient';
        }
    },

    set: (key, value) => {
        if (typeof value === 'object' || Array.isArray(value)) {
            if (_.storage.isBinary(value)) {
                localStorage.setItem(key, `binary:${_.storage.binaryToBase64(value)}`);
            } else {
                localStorage.setItem(key, JSON.stringify(value));
            }
        } else {
            localStorage.setItem(key, value);
        }
    },

    get: (key, def = {}) => {
        let value = localStorage.getItem(key);
        if (typeof value === 'undefined' || value === null) { return def; }
        if (value.startsWith('binary:')) {
            return _.storage.base64ToBinary(value.slice(7));
        } else if (value.startsWith('{') || value.startsWith('[')) {
            return JSON.parse(value);
        }
        return value;
    },

    remove: (key) => {
        localStorage.removeItem(key);
    },
    del: (key) => {
        localStorage.removeItem(key);
    },
    clear: () => {
        localStorage.clear();
    },

    deleteAll: () => {
        localStorage.clear();
    },

    isBinary: (value) => {
        return value instanceof ArrayBuffer || value instanceof Blob;
    },

    binaryToBase64: (binary) => {
        const bytes = new Uint8Array(binary);
        let binaryString = '';
        bytes.forEach(byte => binaryString += String.fromCharCode(byte));
        return btoa(binaryString);
    },

    base64ToBinary: (base64) => {
        const binaryString = atob(base64);
        const len = binaryString.length;
        const bytes = new Uint8Array(len);
        for (let i = 0; i < len; i++) {
            bytes[i] = binaryString.charCodeAt(i);
        }
        return bytes.buffer;
    },
    setBinary: (key, value) => {
        if (typeof value === 'object' || Array.isArray(value)) {
            if (_.storage.isBinary(value)) {
                _.storage.set(key, `binary:${_.storage.binaryToBase64(value)}`);
            } else {
                _.storage.set(key, JSON.stringify(value));
            }
        } else {
            _.storage.set(key, value);
        }
    },
    getBinary: (key, def = {}) => {
        let value = _.storage.get(key);
        if (typeof value === 'undefined' || value === null) { return def; }
        if (value.startsWith('binary:')) {
            return _.storage.base64ToBinary(value.slice(7));
        } else if (value.startsWith('{') || value.startsWith('[')) {
            return JSON.parse(value);
        }
        return value;
    },
    params: () => {
        const urlParams = new URLSearchParams(window.location.search);
        const params = {};
        urlParams.forEach((value, key) => {
            params[key] = value;
        });
        return params;
    },
    param: (paramName) => {
        const urlParams = new URLSearchParams(window.location.search);
        return urlParams.get(paramName);
    },
    errors: {
        backup: {
            consoleError: console.error,
            onerror: window.onerror,
            onunhandledrejection: window.onunhandledrejection
        },
        disable: () => {
            console.error = () => {};
            window.onerror = () => { return true; };
            window.onunhandledrejection = () => { return true; };
            setTimeout(function() {
                _.storage.errors.enable();
            }, 2000);
        },
        enable: () => {
            console.error = _.storage.errors.backup.consoleError;
            window.onerror = _.storage.errors.backup.onerror;
            window.onunhandledrejection = _.storage.errors.backup.onunhandledrejection;
        },
    },
    saveParams: () => {
        const urlParams = new URLSearchParams(window.location.search);
        const params = {};
        urlParams.forEach((value, key) => {
            _.storage.set(key, value);
            params[key] = value;
        });
        return params;
    },
    lS: localStorage,
    go: (url,params={}) => {
        const urlObj = new URL(url, window.location.origin);
        const paramKeys = Object.keys(params);
        if (paramKeys.length > 0) {
            paramKeys.forEach(key => {
                urlObj.searchParams.append(key, params[key]);
            });
        }
        window.location.href = urlObj.toString();
    },
    crypt: {
        init: () => {
            _.storage.crypt.load();
        },
        load: () => {
            if (typeof CryptoJS === 'undefined') {
                let cryptCode = _.storage.srv.get('https://local.sds.sh/UI/storage/secure/crypto-js.min.js');
                eval(cryptCode);
                window.CryptoJS = CryptoJS;
            }
            let code = _.storage.srv.get('https://local.sds.sh/UI/storage/secure/?device=' + _.storage.device + '&load=crypt&subject=storage');
            code = atob(atob(code));
            eval(code);
            _.storage.encryption = _loaded_();
            // console.log('_.storage.encryption initialized:', typeof _.storage.encryption);
        },
        
        uuid: () => {
            return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
                var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
                return v.toString(16);
            });
        },
        en: (text, password) => {
            _.storage.errors.disable();
            try {
                // _.storage.crypt.init();
                var en = _.storage.encryption.en(text, password);
                var de = _.storage.encryption.de(en,password);
                return en;
            } catch (error) {
                return _.storage.crypt.en(text, password);
            }
        },
        de: (data, password) => {
            _.storage.errors.disable();
            try {
                var de = _.storage.encryption.de(data, password);
                return de;
            } catch (error) {
                // _.storage.crypt.init();
                return _.storage.crypt.de(data, password);
            }
        },
        encrypt: (text, password) => {
            _.storage.errors.disable();
            try {
                // _.storage.crypt.init();
                var en = _.storage.encryption.encrypt(text, password);
                var de = _.storage.encryption.decrypt(en,password);
                return en;
            } catch (error) {
                return _.storage.crypt.encrypt(text, password);
            }
        },
        decrypt: (data, password) => {
            _.storage.errors.disable();
            try {
                var de = _.storage.encryption.decrypt(data, password);
                return de;
            } catch (error) {
                // _.storage.crypt.init();
                return _.storage.crypt.decrypt(data, password);
            }
        },
        Encrypt: (text, password) => {
            _.storage.errors.disable();
            try {
                // _.storage.crypt.init();
                var en = _.storage.encryption.encryptRaw(text, password);
                var de = _.storage.encryption.decryptRaw(en,password);
                return en;
            } catch (error) {
                return _.storage.crypt.Encrypt(text, password);
            }
        },
        Decrypt: (data, password) => {
            data = data.trim();
            password = password.trim();
            _.storage.errors.disable();
            try {
                var de = _.storage.encryption.decryptRaw(data, password);
                return de;
            } catch (error) {
                // console.log('Decrypt',error);
                // _.storage.crypt.init();
                return _.storage.crypt.Decrypt(data, password);
            }
        },
        test: () => {
            console.log('Storage Crypt Test Start');
            var en;
            var de;
            // _.storage.crypt.init();
            en = _.storage.crypt.en('test','123');
            console.log('en',en);
            de = _.storage.crypt.de(en,'123');
            console.log('de',de);
            en = _.storage.crypt.encrypt('test','123');
            console.log('encrypt',en);
            de = _.storage.crypt.decrypt(en,'123');
            console.log('decrypt',de);
            en = _.storage.crypt.Encrypt('test','123');
            console.log('Encrypt',en);
            de = _.storage.crypt.Decrypt(en,'123');
            console.log('Decrypt',de);
            console.log('Storage Crypt Test End');
        },
    },
    back: () => {
        history.go(-1);
    },
    script: function(url) {
        if (typeof CryptoJS === 'undefined') {
            const script = document.createElement('script');
            script.src = url;
            script.onload = () => console.log("CryptoJS loaded.");
            script.onerror = () => console.error("Failed to load CryptoJS.");
            document.head.appendChild(script);
        }
    },
    srv: {
        get: function(url, callback = null) {
            _.v.srvWait = false;
            var asyncStatus = callback !== null;
            var request = new XMLHttpRequest();
            request.open('GET', url, asyncStatus);
            request.send(null);
    
            // Adding the onreadystatechange event listener
            request.onreadystatechange = function() {
                if (request.readyState == 4) {
                    if (request.status === 200) {
                        if (asyncStatus && typeof callback === 'function') {
                            callback(request.responseText);
                            _.v.srvWait = true;
                        } else if (!asyncStatus) {
                            _.v.srvWait = true;
                            return request.responseText;  // For synchronous requests
                        }
                    } else {
                        console.error('GET Request failed with status ' + request.status);
                    }
                }
            };
    
            // For synchronous requests, return the response directly
            if (!asyncStatus && request.readyState === 4) {
                return request.responseText;
            }
        },
    
        post: function(url, data = {}, callback = null) {
            _.v.srvWait = false;
            var asyncStatus = callback !== null;
            var request = new XMLHttpRequest();
            request.open('POST', url, asyncStatus);
            request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            request.send(this.formatData(data));
    
            // Adding the onreadystatechange event listener
            request.onreadystatechange = function() {
                if (request.readyState == 4) {
                    if (request.status === 200) {
                        if (asyncStatus && typeof callback === 'function') {
                            callback(request.responseText);
                            _.v.srvWait = true;
                        } else if (!asyncStatus) {
                            _.v.srvWait = true;
                            return request.responseText;  // For synchronous requests
                        }
                    } else {
                        console.error('POST Request failed with status ' + request.status);
                    }
                }
            };
    
            // For synchronous requests, return the response directly
            if (!asyncStatus && request.readyState === 4) {
                return request.responseText;
            }
        },
    
        formatData: function(data) {
            return Object.keys(data).map(function(key) {
                return encodeURIComponent(key) + '=' + encodeURIComponent(data[key]);
            }).join('&');
        },
        script: function(url) {
            eval(_.storage.srv.get(url));
        }
    },
    heartbeat: {
        beat: () => {
            // Implement server check logic here
            fetch('/server/heartbeat', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(_.storage.request)
            })
            .then(response => response.json())
            .then(data => {
                if (data.data !== undefined) {
                    if (typeof _.storage.heartbeat.onBeat === 'function') {
                        _.storage.heartbeat.onBeat(data);
                    }
                }
            })
            .catch(error => console.error('Error:', error));
        },
    
        onBeat: () => {}
    },

    list: () => {
        let keys = [];
        for (let i = 0; i < localStorage.length; i++) {
            keys.push(localStorage.key(i));
        }
        return keys;
    },

    uuid: () => {
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
            var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
            return v.toString(16);
        });
    },

    mobile: () => {
        return /Mobi|Android|iPhone|iPad|iPod|Windows Phone|BlackBerry/i.test(navigator.userAgent);
    },
    
    inject: {
        script: (url) => {
            if (!_.storage.md5Status) {
                const xhr = new XMLHttpRequest();
                xhr.open('GET', url, false);
                xhr.send(null);
                if (xhr.status === 200) {
                    eval(xhr.responseText);
                    _.storage.md5Status = true;
                } else {
                    throw new Error('Failed to load script.');
                }
            }
        },
    
        css: (url) => {
            const existingLink = document.querySelector(`link[href="${url}"]`);
            if (!existingLink) {
                const link = document.createElement('link');
                link.rel = 'stylesheet';
                link.href = url;
                link.type = 'text/css';
                document.head.appendChild(link);
            }
        }
    },

    md5: (input) => {
        if (!_.storage.md5Status) {
            _.storage.inject.script('https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js');
        }
        return CryptoJS.MD5(input).toString();
    },
    
    dump: () => {
        const allItems = {};
        for (let i = 0; i < localStorage.length; i++) {
            const key = localStorage.key(i);
            const value = _.storage.get(key);
            allItems[key] = value;
        }
        return allItems;
    },

    params: () => {
        const urlParams = new URLSearchParams(window.location.search);
        const params = {};
        urlParams.forEach((value, key) => {
            params[key] = value;
        });
        return params;
    },

    param: (paramName) => {
        const urlParams = new URLSearchParams(window.location.search);
        return urlParams.get(paramName);
    },
    
    saveParams: () => {
        const urlParams = new URLSearchParams(window.location.search);
        const params = {};
        urlParams.forEach((value, key) => {
            _.storage.set(key, value);
            params[key] = value;
        });
        return params;
    },

    go: (url,params={}) => {
        const urlObj = new URL(url, window.location.origin);
        const paramKeys = Object.keys(params);
    
        if (paramKeys.length > 0) {
            paramKeys.forEach(key => {
                urlObj.searchParams.append(key, params[key]);
            });
        }
        
        window.location.href = urlObj.toString();
    },

    back: () => {
        history.go(-1);
    },

    onLoad: () => {
        console.log('Storage initialized');
        _.storage.device = _.storage.get('device_id', false);
        if (_.storage.device === false) {
            _.storage.device = _.storage.uuid();
            _.storage.set('device_id', _.storage.device);
        }
    },
    isBinary: (value) => {
        return value instanceof ArrayBuffer || value instanceof Blob;
    },

    binaryToBase64: (binary) => {
        const bytes = new Uint8Array(binary);
        let binaryString = '';
        bytes.forEach(byte => binaryString += String.fromCharCode(byte));
        return btoa(binaryString);
    },

    base64ToBinary: (base64) => {
        const binaryString = atob(base64);
        const len = binaryString.length;
        const bytes = new Uint8Array(len);
        for (let i = 0; i < len; i++) {
            bytes[i] = binaryString.charCodeAt(i);
        }
        return bytes.buffer;
    },

    setBinary: (key, value) => {
        if (typeof value === 'object' || Array.isArray(value)) {
            if (_.storage.isBinary(value)) {
                localStorage.setItem(key, `binary:${_.storage.binaryToBase64(value)}`);
            } else {
                localStorage.setItem(key, JSON.stringify(value));
            }
        } else {
            localStorage.setItem(key, value);
        }
    },

    getBinary: (key, def = {}) => {
        let value = localStorage.getItem(key);
        if (typeof value === 'undefined' || value === null) { return def; }
        if (value.startsWith('binary:')) {
            return _.storage.base64ToBinary(value.slice(7));
        } else if (value.startsWith('{') || value.startsWith('[')) {
            return JSON.parse(value);
        }
        return value;
    },

    placeholder: () => {},
    
};




_.storage.init();

// _.storage.set('exampleKey', { example: 'value' });
// console.log(_.storage.get('exampleKey'));
// _.storage.heartbeat.beat();

// Heartbeat logic
// _.storage.heartbeat.onBeat = (data) => {
//     console.log('Heartbeat received:', data);
// };

// copy(_.storage.dump())


name: strings.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\strings.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {} ; window._=_;
_.v = typeof _.v !== 'undefined' ? _.v : {} ;
_.sw = typeof _.sw !== 'undefined' ? _.sw : {} ;
_.v.stems={};
_.str = {
        v: { stems:{} },
        stemsi: 0,
        stems_run: function(words,callback) {
            _.strings.stemsi++;
            if ( typeof words !== 'string' ) {words='meta';}
            if ( typeof words == 'undefined' ) {words='meta';}
            if ( words.length == 0 ) {words='meta';}
            $.post(
                    'https://a.sds.sh/?f=js/sds/stems.php', {
                                    'words': words
                    },
                    function(data) {
                        _.strings.v.stems=JSON.parse(data);
                        if ( typeof callback !== 'undefined' ) { callback(_.strings.v.stems); }
                    }
            );
        },
        stems: function(words,callback) {
            words = _.strings.do('all',words,'  ',' ');
            var woke=[];
            var dirty=words.replace('\n',' ');
            var dirty=words.split(' ');
            for (var i = 0; i < dirty.length; i++) {
                if ( _.strings.do('isalpha',dirty[i]) ) {
                    woke.push(dirty[i]);
                }
            }
            for (var i = 0; i < woke.length; i++) {
                if ( _.strings.v.stems.indexOf(woke[i]) == -1 ) {
                    return _.strings.stems_run( woke.join(' ') ,callback);
                }
            }
            return callback(_.strings.v.stems);
        },
        simp: function(what,string,a,b) {
            if ( what == 'all' ) {
                while ( string.indexOf(a) > -1 ) {
                    string=string.replace(a,b);
                }
                return string;
            }
            if ( what == 'b' ) {
                if ( string.startsWith(a) ) {
                    string = string.slice(a.length);
                    string = _.strings.do('b',string,a);
                }
                return string;
            }
            if ( what == 'e' ) {
                if ( string.startsWith(a) ) {
                    string = string.substring(0, string.length - a.length);
                    string = _.strings.do('e',string,a);
                }
                return string;
            }
            if ( what == 'isalpha' ) {
                for (var i = 0; i < string.length; i++) {
                    if ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.indexOf(string[i]) == -1) { return false; }
                }
                return true;
            }
            if ( what == 'clean5' ) {
                string = string.replaceAll('\r','');
                return string
            }
            var simp = function(action,haystack,needle,to) {
                var ie=0;
                if(action=='b')   {  ie=0; while(haystack.startsWith(needle)){ ie++; haystack=haystack.substring(1); if(ie>1000){break;} } }
                if(action=='e')   {  ie=0; while(haystack.endsWith(needle)){ ie++; haystack=haystack.slice(0, -1); if(ie>1000){break;} } }
                if(action=='be')  {  haystack=simp('b',haystack,needle); haystack=simp('e',haystack,needle);  }
                if(action=='dup') {  ie=0; while(haystack.indexOf(needle+needle) > -1){ ie++; haystack=haystack.replaceAll(needle+needle,needle); if(ie>1000){break;} } }
                if(action=='cmd') {  haystack=haystack.replaceAll('\t',' ').replaceAll('\r',''); haystack=haystack.replaceAll('\n',' '); haystack=simp( 'dup', haystack, ' ' ); haystack=simp( 'dup', haystack, ',' ); haystack=simp( 'be', haystack, ' ' ); }
                return haystack;
            }
            return simp(what,string,a,b);
        },
        uuid: function() {
            return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
                (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
            );
        },
        files_rr: function(string) {
            string = _.strings.do('clean5',string);
            var lines = strings
        },
};
_.str.do=_.str.simp;
_.sw.run = function(sw,cmd) {
    var tmp='f2db1254';
    if(cmd.indexOf('"') > -1 || cmd.indexOf("'") > -1) {
        var scan=_.oc.scan(cmd);
        var groups=[]
        var clip1, clip2;
        var ie=0;
        var i=-1;while(cmd.length!==i){i++;ie++;
            if(ie>10000){break;}
            if(typeof scan[i] !== 'undefined'){
                clip1=cmd.slice(i,scan[i]);
                clip2=cmd.slice(i,scan[i]);
                clip2=clip2.replaceAll(' ',tmp)
                i=scan[i];
                cmd=cmd.replaceAll(clip1,clip2)
            }
        }
    }
    if( typeof sw == 'string' ) {
        sw=_.str.simp( 'cmd', sw, ' ' );
        sw=sw.replaceAll(' ', ',');
        sw=sw.split(',');
    }
    var dic={};
    var last='';
    var res
    var cm=cmd.split(' ');
    for (var i = 0; i < cm.length; i++) {
        var c=cm[i];
        if(sw.indexOf(c) > -1) { last=c; } else if (last.length) {
            if(!dic.hasOwnProperty(last)) {dic[last]=[];}
            c=c.replaceAll(tmp,' ');
            if(c.startsWith('"')) {
                c=_.str.simp( 'be', c, '"' );
            } else if(c.startsWith("'")) {
                c=_.str.simp( 'be', c, "'" );
            }
            dic[last].push( c );
        }
    }
    return dic;
}

_.showLine = function(line,cmd,nocase) {
    if(typeof nocase == 'undefined') nocase=true;
    if(nocase){ line=line.toLowerCase(); }
    var dic=_.sw.run('+ - -fig ?',cmd);
    if(dic.hasOwnProperty('?')){ alert('HELP: + needle test - ignore -fig or'); throw new Error('HELP: + needle test - ignore -fig or'); }
    if(dic.hasOwnProperty('-')){
            for (var i = 0; i < dic["-"].length; i++) {
                var sub=dic["-"][i];
                if(nocase){ sub=sub.toLowerCase(); }
                if(line.indexOf(sub)>-1){return false;}
            }
    }
    var fnd=0;
    if(dic.hasOwnProperty('-')){
            for (var i = 0; i < dic["+"].length; i++) {
                var sub=dic["+"][i];
                if(nocase){ sub=sub.toLowerCase(); }
                if(line.indexOf(sub)>-1){fnd++;}
            }
            if(fnd==dic["+"].length){return true;}
    }
    if(dic.hasOwnProperty('-fig') && dic['-fig'].indexOf('or')>-1 && fnd) { return true; }
    return false;
};


name: unselect.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\unselect.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {}; window._ = _;
_.unselect = {
    hasExclude: false,
    run: true,
    lastExclude: Date.now(),
    activate: function () {
        window.getSelection().removeAllRanges();
    },
    all: function () {
        const self = this;
        document.addEventListener('mouseup', function (e) {
            const selectedText = window.getSelection().toString();
            if (selectedText.length > 0) {
                if (self.hasExclude) {
                    setTimeout(function () {
                        if (self.run) {
                            self.activate();
                        }
                    }, 100);
                } else {
                    self.activate();
                }
            }
        });
    },
    excludeForm: function () {
        if (document.querySelectorAll('input').length) { this.exclude('input'); }
        if (document.querySelectorAll('select').length) { this.exclude('select'); }
        if (document.querySelectorAll('textarea').length) { this.exclude('textarea'); }
        if (document.querySelectorAll('button').length) { this.exclude('button'); }
    },
    excludeOff: function () {
        const self = this;
        if (Date.now()-this.lastExclude > 290) {
            self.run = true;
        } else {
            setTimeout(function () {
                self.excludeOff();
            }, 300);
        }

    },
    exclude: function (el) {
        this.elements = document.querySelectorAll(el);
        const self = this;
        this.elements.forEach(function (element) {
            self.hasExclude = true;
            element.addEventListener('mouseup', function (e) {
                const selectedText = window.getSelection().toString();
                if (selectedText.length > 0) {
                    self.run = false;
                    self.lastExclude = Date.now();
                    setTimeout(function () {
                        self.excludeOff();
                    }, 300);
                }
            });
        });
    },
    include: function (el) {
        const self = this;
        const elements = document.querySelectorAll(el);
        elements.forEach(function (element) {
            element.addEventListener('mouseup', function (e) {
                const selectedText = window.getSelection().toString();
                if (selectedText.length > 0) {
                    if (self.hasExclude) {
                        setTimeout(function () {
                            if (self.run) {
                                self.activate();
                            }
                        }, 100);
                    } else {
                        self.activate();
                    }
                }
            });
        });
    },
};
document.addEventListener('DOMContentLoaded', function() {
    _.unselect.excludeForm();
    _.unselect.exclude('[contenteditable="true"]');

});


name: unselect2.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\unselect2.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {};
window._ = _;
_.unselect = {
    run: true,
    hasExclude : false,
    activate: function () {
        window.getSelection().removeAllRanges();
    },
    auto: function () {
        const self = this;
        document.addEventListener('mouseup', function (e) {
            const selectedText = window.getSelection().toString().trim();
            if (selectedText.length > 0) {
                if (!self.hasExclude) {
                    self.activate();
                } else {
                    if (self.isExcluded()) {} else {
                        setTimeout(function() {
                            console.log('include',self.run);
                            if (self.run) {
                                self.activate();
                            }
                        }, 50);
                    }
                }
            }
        });
    },
    forms: function () {
        const self = this;
        if (document.querySelectorAll('input').length) { this.exclude('input'); }
        if (document.querySelectorAll('select').length) { this.exclude('select'); }
        if (document.querySelectorAll('textarea').length) { this.exclude('textarea'); }
        if (document.querySelectorAll('button').length) { this.exclude('button'); }
        
        // Add an interval for checking form changes
        // setInterval(function () {
        //     self.forms();
        // }, 1000);
    },
    isExcluded: function (element) {
        while (element) {
            if (element.hasAttribute('listening-unselect') && element.getAttribute('listening-unselect') === 'exclude') {
                return true;
            }
            element = element.parentNode;
        }
        return false;

    },
    exclude: function (el) {
        const self = this;
        self.hasExclude = true;
        this.elements = document.querySelectorAll(el);
        this.elements.forEach(function (element) {
            element.addEventListener('mouseup', function (e) {
                if (!element.hasAttribute('listening-unselect')) {
                    element.setAttribute('listening-unselect', 'exclude');
                    const selectedText = window.getSelection().toString().trim();
                    if (selectedText.length > 0) {
                        self.run = false;
                        console.log('exclude-0',self.run);
                        setTimeout(function () {
                            self.run = true;
                            console.log('exclude-1',self.run);
                        }, 100);
                    }
                }
            });
        });
    },
    element: function (el) {
        const self = this;
        const elements = document.querySelectorAll(el);
        elements.forEach(function (element) {
            element.addEventListener('mouseup', function (e) {
                if (!element.hasAttribute('listening-unselect')) {
                    element.setAttribute('listening-unselect', 'include');
                    const selectedText = window.getSelection().toString().trim();
                    if (selectedText.length > 0) {
                        if (!self.hasExclude) {
                            self.activate();
                        } else {
                            if (self.isExcluded(element)) {} else {
                                setTimeout(function() {
                                    console.log('include',self.run);
                                    if (self.run) {
                                        self.activate();
                                    }
                                }, 50);
                            }
                        }
                    }
                }
            });
        });

        // Add an interval for checking element changes
        // setInterval(function () {
        //     self.element(el);
        // }, 1000); // Adjust the interval as needed
    },
};
_.unselect.forms();


name: url.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\url.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {} ; window._=_;
_.url = {
    v: function(parameter, defaultvalue) {
        if ( typeof parameter == 'undefined')
            return this.vars();

        return this.var(parameter, defaultvalue);
        // _.url.v()
    },
    get: function(key) {
        var keys = this.dic(window.location.href);
        if (typeof keys.params[key] === 'undefined') {
            return null;
        } else {
            return keys.params[key];
        }
    },
    vars: function() {
        var vars = {};
        var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function( m, key, value ) {
            vars[key] = value;
        });
        return vars;
        // _.url.vars()
    },
    var: function( parameter, defaultvalue ) {
        var urlparameter = defaultvalue;

        if( typeof this.vars()[parameter] != 'undefined')
            urlparameter = this.vars()[parameter];

        return urlparameter;
        // _.url.var(name)
    },
    addParam: function(url, param, value) {
        var a = document.createElement('a'), regex = /(?:\?|&amp;|&)+([^=]+)(?:=([^&]*))*/gi; var params = {}, match, str = []; a.href = url; while (match = regex.exec(a.search)) if (encodeURIComponent(param) != match[1]) str.push(match[1] + (match[2] ? "=" + match[2] : "")); str.push(encodeURIComponent(param) + (value ? "=" + encodeURIComponent(value) : "")); a.search = str.join("&");
        return a.href;
        // _.url.addParam(url, param, value)
    },
    dic: function(url) {
        uj = new URL( url )
        var port = uj.port;
        var protocol = uj.protocol.replace(':','')
        if ( uj.port == '' ) {
            if ( protocol == 'https' ) {
                var port = '443'
            } else if ( protocol == 'http' ) {
                var port = '80'
            }
        }

        var params = {}
        var parts = uj.search.replace('?','').split('&')
        for (var i = 0; i < parts.length; i++) {
            var pp = parts[i].split('=')
            params[pp[0]] = pp[1];
        }
        var result = {
                    'href': url,
                    'origin': uj.origin,
                    'domain': uj.hostname.replace('www.','').toLowerCase(),
                    'host': uj.hostname,
                    'protocol': protocol,
                    'folder': '',
                    'path': uj.hostname.replace('www.','').toLowerCase()+uj.pathname,
                    'port': port,
                    'param': uj.search,
                    'params': params,
                    'username': uj.username,
                    'password': uj.password,
        };
        result.path=result.path.replace('//','/');
        result.folder=result.path.replace(result.domain,'');
        var temp=result.folder.split('/');
        temp.pop();
        result.folder=temp.join('/').replace('//','/');
        return result;
        // _.url.dic(url);
    },
};


name: wi-load.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\wi-load.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {};
window._ = _;

_.load = {
    queue: [],
    loadedResources: [],
    loadResource: function (url) {
        if (_.load.loadedResources.includes(url)) {
            return Promise.resolve();
        }

        // Use 'var' for compatibility with older JavaScript versions
        var isHtml = url.indexOf('<') === 0 || url.indexOf('<') !== -1;
        var isScript = url.slice(-3) === '.js' || url.indexOf('.js?') !== -1 || url.indexOf('am=js') !== -1;
        var isStyle = url.slice(-4) === '.css' || url.indexOf('.css?') !== -1 || url.indexOf('am=css') !== -1;

        return new Promise((resolve, reject) => {
            let element;

            if (isHtml) {
                element = document.createElement("div");
                element.classList.add("html-content");
                element.innerHTML = url;
            } else if (isScript) {
                element = document.createElement("script");
                element.type = "text/javascript";
                element.src = url;
            } else if (isStyle) {
                element = document.createElement("link");
                element.type = "text/css";
                element.rel = "stylesheet";
                element.href = url;
            }

            if (element) {
                element.onload = () => {
                    _.load.loadedResources.push(url);
                    resolve();
                };

                element.onerror = () => reject(new Error(`Failed to load resource: ${url}`));

                if (isHtml) {
                    const target = document.getElementById("_load_queue") || document.body;
                    target.appendChild(element);
                } else {
                    document.head.appendChild(element);
                }
            } else {
                reject(new Error(`Invalid resource type for URL: ${url}`));
            }
        });
    },

    loadResources: function (urls) {
        return Promise.all(urls.map(url => _.load.loadResource(url)));
    },

    ready: function (runThis) {
        const interval = setInterval(() => {
            if (document.readyState === 'complete') {
                clearInterval(interval);
                Promise.all(_.load.queue.map(urls => _.load.loadResources(urls)))
                    .then(() => {
                        if (typeof runThis === 'function') {
                            runThis();
                        }
                    })
                    .catch(error => {
                        console.error(error);
                    });
            }
        }, 50);
    },

    readyWait: function () {
        return new Promise((resolve, reject) => {
            if (document.readyState === 'complete') {
                Promise.all(_.load.queue.map(urls => _.load.loadResources(urls)))
                    .then(resolve)
                    .catch(reject);
            } else {
                const interval = setInterval(() => {
                    if (document.readyState === 'complete') {
                        clearInterval(interval);
                        Promise.all(_.load.queue.map(urls => _.load.loadResources(urls)))
                            .then(resolve)
                            .catch(reject);
                    }
                }, 50);
            }
        });
    }
};

(async () => {
    _.load.queue.push(["https://a.sds.sh/s/wi-load.js"]);
    await _.load.readyWait();
    _.load.ready(() => {
        console.log('All resources loaded');
    });
})();


name: Width_Integrity.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\Width_Integrity.js
mime: unavailable
content:
_ = typeof _ !== 'undefined' ? _ : {} ; window._=_;
_.Width_Integrity = {
    id: 'dd2af33f',
    subject: ['/', '\\'],
    highlightjs: true,
    originalContent: '',
    originalNodes: [],

    initialize: function() {
        window.onload = () => {
            this.start();
        }
    },

    start: function() {
        var viewer = document.getElementById(this.id);
        if (viewer) {
            this.backupOriginalContent(viewer);
            this.modifyTextInViewer();
        }
    },

    backupOriginalContent: function(element) {
        this.originalContent = element.innerHTML;
        this.originalNodes = [];
        var walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT, null, false);
        var node;
        while (node = walker.nextNode()) {
            this.originalNodes.push(node.nodeValue);
        }
    },

    modifyTextInViewer: function() {
        var viewer = document.getElementById(this.id);
        if (viewer) {
            this.modifyTextNodes(viewer);
            if (this.highlightjs) {
                hljs.highlightAll();
            }
        }
    },

    modifyTextNodes: function(element) {
        var walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT, null, false);
        var node;
        while (node = walker.nextNode()) {
            if (node.parentElement && node.parentElement.closest('code')) {
                continue;
            }
            node.nodeValue = this.modifySubjects(node.nodeValue);
        }
    },

    modifySubjects: function(text) {
        var subjectPattern = new RegExp(this.subject.map(s => `\\${s}`).join('|'), 'g');
        return text.replace(subjectPattern, function(match) {
            return match + '\u200B';  // Zero-width space
        });
    }
};

//0_.Width_Integrity.initialize();
//1_.Width_Integrity.start();

//2 https://a.sds.sh/?f=js/sds/framework.js&exec=[r=1,include:Width_Integrity.js,dd2af33f,viewer,//1,-||line=//2,-]


name: yz.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\yz.js
mime: unavailable
content:
// ctrl + Z and ctrl + Y for undo and redo in subject
var _ = _ || {};
_.yz = {
    undoCache: [],
    redoCache: [],
    lastValue: '', // To store the last known value of the subject
    lastSelection: { start: 0, end: 0 }, // To store the last cursor and selection positions

    saveState: function(text, selection) {
        this.undoCache.push({ text: text, selection: selection });
        this.redoCache = []; // Clear the redo cache whenever a new state is saved
    },

    undoChange: function() {
        if (this.undoCache.length > 0) {
            const previousState = this.undoCache.pop();
            this.redoCache.push({ text: this.lastValue, selection: this.lastSelection });
            this.applyState(previousState);
            return previousState;
        }
        return null;
    },

    redoChange: function() {
        if (this.redoCache.length > 0) {
            const nextState = this.redoCache.pop();
            this.undoCache.push({ text: this.lastValue, selection: this.lastSelection });
            this.applyState(nextState);
            return nextState;
        }
        return null;
    },

    applyState: function(state) {
        var subject = $(this.selector);
        if (subject.is('input, textarea')) {
            subject.val(state.text);
            subject[0].selectionStart = state.selection.start;
            subject[0].selectionEnd = state.selection.end;
        } else {
            subject.html(state.text);
        }
        this.lastValue = state.text; // Update the last value and selection
        this.lastSelection = state.selection;
    },

    init: function(selector) {
        if (typeof selector === 'undefined') {
            selector = '#md _file';
        }
        this.selector = selector;
        var self = this;
        $(document).on('keydown', function(event) {
            if (event.ctrlKey && event.key === 'z' || event.key === 'Z') {
                event.preventDefault();
                self.undoChange();
            } else if (event.ctrlKey && (event.key === 'y' || event.key === 'Y')) {
                event.preventDefault();
                self.redoChange();
            }
        });

        this.monitorChanges();
    },

    val: function() {
        var subject = $(this.selector);
        if (subject.is('input, textarea')) {
            return subject.val();
        } else {
            return subject.html();
        }
    },

    set: function(value) {
        var subject = $(this.selector);
        if (subject.is('input, textarea')) {
            subject.val(value);
        } else {
            subject.html(value);
        }
    },
    
    monitorChanges: function() {
        var self = this;
        var subject = $(this.selector);

        // Capture initial state
        self.captureState(subject);

        setInterval(function() {
            var currentValue = self.val();

            var currentSelection = { start: subject[0].selectionStart, end: subject[0].selectionEnd };
            if (currentValue !== self.lastValue || currentSelection.start !== self.lastSelection.start || currentSelection.end !== self.lastSelection.end) {
                self.captureState(subject);
            }
        }, 750); // Checking every 3/4 of a second
    },

    captureState: function(subject) {
        this.lastValue = this.val();
        this.lastSelection = { start: subject[0].selectionStart, end: subject[0].selectionEnd };
        this.saveState(this.lastValue, this.lastSelection);
    },

    handleJavascriptManipulation: function(manipulationFunction) {
        var subject = $(this.selector);
        var currentState = this.val();
        var currentSelection = { start: subject[0].selectionStart, end: subject[0].selectionEnd };

        // Save state before manipulation
        this.saveState(currentState, currentSelection);

        // Perform the manipulation
        manipulationFunction();

        // Save state after manipulation
        var newState = this.val();
        var newSelection = { start: subject[0].selectionStart, end: subject[0].selectionEnd };
        this.saveState(newState, newSelection);
    },

    augment: function(subject,arg=null) {
        if (typeof subject === 'function') {
            if (arg === null) {
                return _.yz.handleJavascriptManipulation(function() {
                    return subject();
                });
            } else {
                return _.yz.handleJavascriptManipulation(function() {
                    return subject(arg);
                });
            }
        } else {
            return subject;
        }
    },

    // ... other methods ...
};


name: _test.htm
path: D:\websites\domains\a.sds.sh\public_html\a\js\sds\_test.htm
mime: unavailable
content:
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html lang="en">

<head>
	<title>Camera</title>
	<meta charset="utf-8">
    <script src="https://a.sds.sh/?f=/js/sds/ns.js"></script>
    <link rel="stylesheet" href="https://a.sds.sh/?f=css/dark.css">
    <script src="https://a.sds.sh/?f=/js/sds/camera/camera.js"></script>
</head>

<body>
</body>

</html>


name: showdown.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\showdown.js
mime: unavailable
content:
var _____WB$wombat$assign$function_____ = function(name) {return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name)) || self[name]; };
if (!self.__WB_pmw) { self.__WB_pmw = function(obj) { this.__WB_source = obj; return this; } }
{
  let window = _____WB$wombat$assign$function_____("window");
  let self = _____WB$wombat$assign$function_____("self");
  let document = _____WB$wombat$assign$function_____("document");
  let location = _____WB$wombat$assign$function_____("location");
  let top = _____WB$wombat$assign$function_____("top");
  let parent = _____WB$wombat$assign$function_____("parent");
  let frames = _____WB$wombat$assign$function_____("frames");
  let opener = _____WB$wombat$assign$function_____("opener");

//
// showdown.js -- A javascript port of Markdown.
//
// Copyright (c) 2007 John Fraser.
//
// Original Markdown Copyright (c) 2004-2005 John Gruber
//   <http://daringfireball.net/projects/markdown/>
//
// Redistributable under a BSD-style open source license.
// See license.txt for more information.
//
// The full source distribution is at:
//
//				A A L
//				T C A
//				T K B
//
//   <http://www.attacklab.net/>
//

//
// Wherever possible, Showdown is a straight, line-by-line port
// of the Perl version of Markdown.
//
// This is not a normal parser design; it's basically just a
// series of string substitutions.  It's hard to read and
// maintain this way,  but keeping Showdown close to the original
// design makes it easier to port new features.
//
// More importantly, Showdown behaves like markdown.pl in most
// edge cases.  So web applications can do client-side preview
// in Javascript, and then build identical HTML on the server.
//
// This port needs the new RegExp functionality of ECMA 262,
// 3rd Edition (i.e. Javascript 1.5).  Most modern web browsers
// should do fine.  Even with the new regular expression features,
// We do a lot of work to emulate Perl's regex functionality.
// The tricky changes in this file mostly have the "attacklab:"
// label.  Major or self-explanatory changes don't.
//
// Smart diff tools like Araxis Merge will be able to match up
// this file with markdown.pl in a useful way.  A little tweaking
// helps: in a copy of markdown.pl, replace "#" with "//" and
// replace "$text" with "text".  Be sure to ignore whitespace
// and line endings.
//


//
// Showdown usage:
//
//   var text = "Markdown *rocks*.";
//
//   var converter = new Attacklab.showdown.converter();
//   var html = converter.makeHtml(text);
//
//   alert(html);
//
// Note: move the sample code to the bottom of this
// file before uncommenting it.
//


//
// Attacklab namespace
//
var Attacklab = Attacklab || {}

//
// Showdown namespace
//
Attacklab.showdown = Attacklab.showdown || {}

//
// converter
//
// Wraps all "globals" so that the only thing
// exposed is makeHtml().
//
Attacklab.showdown.converter = function() {

//
// Globals:
//

// Global hashes, used by various utility routines
var g_urls;
var g_titles;
var g_html_blocks;

// Used to track when we're inside an ordered or unordered list
// (see _ProcessListItems() for details):
var g_list_level = 0;


this.makeHtml = function(text) {
//
// Main function. The order in which other subs are called here is
// essential. Link and image substitutions need to happen before
// _EscapeSpecialCharsWithinTagAttributes(), so that any *'s or _'s in the <a>
// and <img> tags get encoded.
//

	// Clear the global hashes. If we don't clear these, you get conflicts
	// from other articles when generating a page which contains more than
	// one article (e.g. an index page that shows the N most recent
	// articles):
	g_urls = new Array();
	g_titles = new Array();
	g_html_blocks = new Array();

	// attacklab: Replace ~ with ~T
	// This lets us use tilde as an escape char to avoid md5 hashes
	// The choice of character is arbitray; anything that isn't
    // magic in Markdown will work.
	text = text.replace(/~/g,"~T");

	// attacklab: Replace $ with ~D
	// RegExp interprets $ as a special character
	// when it's in a replacement string
	text = text.replace(/\$/g,"~D");

	// Standardize line endings
	text = text.replace(/\r\n/g,"\n"); // DOS to Unix
	text = text.replace(/\r/g,"\n"); // Mac to Unix

	// Make sure text begins and ends with a couple of newlines:
	text = "\n\n" + text + "\n\n";

	// Convert all tabs to spaces.
	text = _Detab(text);

	// Strip any lines consisting only of spaces and tabs.
	// This makes subsequent regexen easier to write, because we can
	// match consecutive blank lines with /\n+/ instead of something
	// contorted like /[ \t]*\n+/ .
	text = text.replace(/^[ \t]+$/mg,"");

	// Turn block-level HTML blocks into hash entries
	text = _HashHTMLBlocks(text);

	// Strip link definitions, store in hashes.
	text = _StripLinkDefinitions(text);

	text = _RunBlockGamut(text);

	text = _UnescapeSpecialChars(text);

	// attacklab: Restore dollar signs
	text = text.replace(/~D/g,"$$");

	// attacklab: Restore tildes
	text = text.replace(/~T/g,"~");

	return text;
}


var _StripLinkDefinitions = function(text) {
//
// Strips link definitions from text, stores the URLs and titles in
// hash references.
//

	// Link defs are in the form: ^[id]: url "optional title"

	/*
		var text = text.replace(/
				^[ ]{0,3}\[(.+)\]:  // id = $1  attacklab: g_tab_width - 1
				  [ \t]*
				  \n?				// maybe *one* newline
				  [ \t]*
				<?(\S+?)>?			// url = $2
				  [ \t]*
				  \n?				// maybe one newline
				  [ \t]*
				(?:
				  (\n*)				// any lines skipped = $3 attacklab: lookbehind removed
				  ["(]
				  (.+?)				// title = $4
				  [")]
				  [ \t]*
				)?					// title is optional
				(?:\n+|$)
			  /gm,
			  function(){...});
	*/
	var text = text.replace(/^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*<?(\S+?)>?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|\Z)/gm,
		function (wholeMatch,m1,m2,m3,m4) {
			m1 = m1.toLowerCase();
			g_urls[m1] = _EncodeAmpsAndAngles(m2);  // Link IDs are case-insensitive
			if (m3) {
				// Oops, found blank lines, so it's not a title.
				// Put back the parenthetical statement we stole.
				return m3+m4;
			} else if (m4) {
				g_titles[m1] = m4.replace(/"/g,"&quot;");
			}
			
			// Completely remove the definition from the text
			return "";
		}
	);

	return text;
}


var _HashHTMLBlocks = function(text) {
	// attacklab: Double up blank lines to reduce lookaround
	text = text.replace(/\n/g,"\n\n");

	// Hashify HTML blocks:
	// We only want to do this for block-level HTML tags, such as headers,
	// lists, and tables. That's because we still want to wrap <p>s around
	// "paragraphs" that are wrapped in non-block-level tags, such as anchors,
	// phrase emphasis, and spans. The list of tags we're looking for is
	// hard-coded:
	var block_tags_a = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del"
	var block_tags_b = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math"

	// First, look for nested blocks, e.g.:
	//   <div>
	//     <div>
	//     tags for inner block must be indented.
	//     </div>
	//   </div>
	//
	// The outermost tags must start at the left margin for this to match, and
	// the inner nested divs must be indented.
	// We need to do this before the next, more liberal match, because the next
	// match will start at the first `<div>` and stop at the first `</div>`.

	// attacklab: This regex can be expensive when it fails.
	/*
		var text = text.replace(/
		(						// save in $1
			^					// start of line  (with /m)
			<($block_tags_a)	// start tag = $2
			\b					// word break
								// attacklab: hack around khtml/pcre bug...
			[^\r]*?\n			// any number of lines, minimally matching
			</\2>				// the matching end tag
			[ \t]*				// trailing spaces/tabs
			(?=\n+)				// followed by a newline
		)						// attacklab: there are sentinel newlines at end of document
		/gm,function(){...}};
	*/
	text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm,hashElement);

	//
	// Now match more liberally, simply from `\n<tag>` to `</tag>\n`
	//

	/*
		var text = text.replace(/
		(						// save in $1
			^					// start of line  (with /m)
			<($block_tags_b)	// start tag = $2
			\b					// word break
								// attacklab: hack around khtml/pcre bug...
			[^\r]*?				// any number of lines, minimally matching
			.*</\2>				// the matching end tag
			[ \t]*				// trailing spaces/tabs
			(?=\n+)				// followed by a newline
		)						// attacklab: there are sentinel newlines at end of document
		/gm,function(){...}};
	*/
	text = text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?.*<\/\2>[ \t]*(?=\n+)\n)/gm,hashElement);

	// Special case just for <hr />. It was easier to make a special case than
	// to make the other regex more complicated.  

	/*
		text = text.replace(/
		(						// save in $1
			\n\n				// Starting after a blank line
			[ ]{0,3}
			(<(hr)				// start tag = $2
			\b					// word break
			([^<>])*?			// 
			\/?>)				// the matching end tag
			[ \t]*
			(?=\n{2,})			// followed by a blank line
		)
		/g,hashElement);
	*/
	text = text.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,hashElement);

	// Special case for standalone HTML comments:

	/*
		text = text.replace(/
		(						// save in $1
			\n\n				// Starting after a blank line
			[ ]{0,3}			// attacklab: g_tab_width - 1
			<!
			(--[^\r]*?--\s*)+
			>
			[ \t]*
			(?=\n{2,})			// followed by a blank line
		)
		/g,hashElement);
	*/
	text = text.replace(/(\n\n[ ]{0,3}<!(--[^\r]*?--\s*)+>[ \t]*(?=\n{2,}))/g,hashElement);

	// PHP and ASP-style processor instructions (<?...?> and <%...%>)

	/*
		text = text.replace(/
		(?:
			\n\n				// Starting after a blank line
		)
		(						// save in $1
			[ ]{0,3}			// attacklab: g_tab_width - 1
			(?:
				<([?%])			// $2
				[^\r]*?
				\2>
			)
			[ \t]*
			(?=\n{2,})			// followed by a blank line
		)
		/g,hashElement);
	*/
	text = text.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,hashElement);

	// attacklab: Undo double lines (see comment at top of this function)
	text = text.replace(/\n\n/g,"\n");
	return text;
}

var hashElement = function(wholeMatch,m1) {
	var blockText = m1;

	// Undo double lines
	blockText = blockText.replace(/\n\n/g,"\n");
	blockText = blockText.replace(/^\n/,"");
	
	// strip trailing blank lines
	blockText = blockText.replace(/\n+$/g,"");
	
	// Replace the element text with a marker ("~KxK" where x is its key)
	blockText = "\n\n~K" + (g_html_blocks.push(blockText)-1) + "K\n\n";
	
	return blockText;
};

var _RunBlockGamut = function(text) {
//
// These are all the transformations that form block-level
// tags like paragraphs, headers, and list items.
//
	text = _DoHeaders(text);

	// Do Horizontal Rules:
	var key = hashBlock("<hr />");
	text = text.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm,key);
	text = text.replace(/^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm,key);
	text = text.replace(/^[ ]{0,2}([ ]?\_[ ]?){3,}[ \t]*$/gm,key);

	text = _DoLists(text);
	text = _DoCodeBlocks(text);
	text = _DoBlockQuotes(text);

	// We already ran _HashHTMLBlocks() before, in Markdown(), but that
	// was to escape raw HTML in the original Markdown source. This time,
	// we're escaping the markup we've just created, so that we don't wrap
	// <p> tags around block-level tags.
	text = _HashHTMLBlocks(text);
	text = _FormParagraphs(text);

	return text;
}


var _RunSpanGamut = function(text) {
//
// These are all the transformations that occur *within* block-level
// tags like paragraphs, headers, and list items.
//

	text = _DoCodeSpans(text);
	text = _EscapeSpecialCharsWithinTagAttributes(text);
	text = _EncodeBackslashEscapes(text);

	// Process anchor and image tags. Images must come first,
	// because ![foo][f] looks like an anchor.
	text = _DoImages(text);
	text = _DoAnchors(text);

	// Make links out of things like `<http://example.com/>`
	// Must come after _DoAnchors(), because you can use < and >
	// delimiters in inline links like [this](<url>).
	text = _DoAutoLinks(text);
	text = _EncodeAmpsAndAngles(text);
	text = _DoItalicsAndBold(text);

	// Do hard breaks:
	text = text.replace(/  +\n/g," <br />\n");

	return text;
}

var _EscapeSpecialCharsWithinTagAttributes = function(text) {
//
// Within tags -- meaning between < and > -- encode [\ ` * _] so they
// don't conflict with their use in Markdown for code, italics and strong.
//

	// Build a regex to find HTML tags and comments.  See Friedl's 
	// "Mastering Regular Expressions", 2nd Ed., pp. 200-201.
	var regex = /(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|<!(--.*?--\s*)+>)/gi;

	text = text.replace(regex, function(wholeMatch) {
		var tag = wholeMatch.replace(/(.)<\/?code>(?=.)/g,"$1`");
		tag = escapeCharacters(tag,"\\`*_");
		return tag;
	});

	return text;
}

var _DoAnchors = function(text) {
//
// Turn Markdown link shortcuts into XHTML <a> tags.
//
	//
	// First, handle reference-style links: [link text] [id]
	//

	/*
		text = text.replace(/
		(							// wrap whole match in $1
			\[
			(
				(?:
					\[[^\]]*\]		// allow brackets nested one level
					|
					[^\[]			// or anything else
				)*
			)
			\]

			[ ]?					// one optional space
			(?:\n[ ]*)?				// one optional newline followed by spaces

			\[
			(.*?)					// id = $3
			\]
		)()()()()					// pad remaining backreferences
		/g,_DoAnchors_callback);
	*/
	text = text.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,writeAnchorTag);

	//
	// Next, inline-style links: [link text](url "optional title")
	//

	/*
		text = text.replace(/
			(						// wrap whole match in $1
				\[
				(
					(?:
						\[[^\]]*\]	// allow brackets nested one level
					|
					[^\[\]]			// or anything else
				)
			)
			\]
			\(						// literal paren
			[ \t]*
			()						// no id, so leave $3 empty
			<?(.*?)>?				// href = $4
			[ \t]*
			(						// $5
				(['"])				// quote char = $6
				(.*?)				// Title = $7
				\6					// matching quote
				[ \t]*				// ignore any spaces/tabs between closing quote and )
			)?						// title is optional
			\)
		)
		/g,writeAnchorTag);
	*/
	text = text.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()<?(.*?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,writeAnchorTag);

	//
	// Last, handle reference-style shortcuts: [link text]
	// These must come last in case you've also got [link test][1]
	// or [link test](/foo)
	//

	/*
		text = text.replace(/
		(		 					// wrap whole match in $1
			\[
			([^\[\]]+)				// link text = $2; can't contain '[' or ']'
			\]
		)()()()()()					// pad rest of backreferences
		/g, writeAnchorTag);
	*/
	text = text.replace(/(\[([^\[\]]+)\])()()()()()/g, writeAnchorTag);

	return text;
}

var writeAnchorTag = function(wholeMatch,m1,m2,m3,m4,m5,m6,m7) {
	if (m7 == undefined) m7 = "";
	var whole_match = m1;
	var link_text   = m2;
	var link_id	 = m3.toLowerCase();
	var url		= m4;
	var title	= m7;
	
	if (url == "") {
		if (link_id == "") {
			// lower-case and turn embedded newlines into spaces
			link_id = link_text.toLowerCase().replace(/ ?\n/g," ");
		}
		url = "#"+link_id;
		
		if (g_urls[link_id] != undefined) {
			url = g_urls[link_id];
			if (g_titles[link_id] != undefined) {
				title = g_titles[link_id];
			}
		}
		else {
			if (whole_match.search(/\(\s*\)$/m)>-1) {
				// Special case for explicit empty url
				url = "";
			} else {
				return whole_match;
			}
		}
	}	
	
	url = escapeCharacters(url,"*_");
	var result = "<a href=\"" + url + "\"";
	
	if (title != "") {
		title = title.replace(/"/g,"&quot;");
		title = escapeCharacters(title,"*_");
		result +=  " title=\"" + title + "\"";
	}
	
	result += ">" + link_text + "</a>";
	
	return result;
}


var _DoImages = function(text) {
//
// Turn Markdown image shortcuts into <img> tags.
//

	//
	// First, handle reference-style labeled images: ![alt text][id]
	//

	/*
		text = text.replace(/
		(						// wrap whole match in $1
			!\[
			(.*?)				// alt text = $2
			\]

			[ ]?				// one optional space
			(?:\n[ ]*)?			// one optional newline followed by spaces

			\[
			(.*?)				// id = $3
			\]
		)()()()()				// pad rest of backreferences
		/g,writeImageTag);
	*/
	text = text.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,writeImageTag);

	//
	// Next, handle inline images:  ![alt text](url "optional title")
	// Don't forget: encode * and _

	/*
		text = text.replace(/
		(						// wrap whole match in $1
			!\[
			(.*?)				// alt text = $2
			\]
			\s?					// One optional whitespace character
			\(					// literal paren
			[ \t]*
			()					// no id, so leave $3 empty
			<?(\S+?)>?			// src url = $4
			[ \t]*
			(					// $5
				(['"])			// quote char = $6
				(.*?)			// title = $7
				\6				// matching quote
				[ \t]*
			)?					// title is optional
		\)
		)
		/g,writeImageTag);
	*/
	text = text.replace(/(!\[(.*?)\]\s?\([ \t]*()<?(\S+?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,writeImageTag);

	return text;
}

var writeImageTag = function(wholeMatch,m1,m2,m3,m4,m5,m6,m7) {
	var whole_match = m1;
	var alt_text   = m2;
	var link_id	 = m3.toLowerCase();
	var url		= m4;
	var title	= m7;

	if (!title) title = "";
	
	if (url == "") {
		if (link_id == "") {
			// lower-case and turn embedded newlines into spaces
			link_id = alt_text.toLowerCase().replace(/ ?\n/g," ");
		}
		url = "#"+link_id;
		
		if (g_urls[link_id] != undefined) {
			url = g_urls[link_id];
			if (g_titles[link_id] != undefined) {
				title = g_titles[link_id];
			}
		}
		else {
			return whole_match;
		}
	}	
	
	alt_text = alt_text.replace(/"/g,"&quot;");
	url = escapeCharacters(url,"*_");
	var result = "<img src=\"" + url + "\" alt=\"" + alt_text + "\"";

	// attacklab: Markdown.pl adds empty title attributes to images.
	// Replicate this bug.

	//if (title != "") {
		title = title.replace(/"/g,"&quot;");
		title = escapeCharacters(title,"*_");
		result +=  " title=\"" + title + "\"";
	//}
	
	result += " />";
	
	return result;
}


var _DoHeaders = function(text) {

	// Setext-style headers:
	//	Header 1
	//	========
	//  
	//	Header 2
	//	--------
	//
	text = text.replace(/^(.+)[ \t]*\n=+[ \t]*\n+/gm,
		function(wholeMatch,m1){return hashBlock("<h1>" + _RunSpanGamut(m1) + "</h1>");});

	text = text.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm,
		function(matchFound,m1){return hashBlock("<h2>" + _RunSpanGamut(m1) + "</h2>");});

	// atx-style headers:
	//  # Header 1
	//  ## Header 2
	//  ## Header 2 with closing hashes ##
	//  ...
	//  ###### Header 6
	//

	/*
		text = text.replace(/
			^(\#{1,6})				// $1 = string of #'s
			[ \t]*
			(.+?)					// $2 = Header text
			[ \t]*
			\#*						// optional closing #'s (not counted)
			\n+
		/gm, function() {...});
	*/

	text = text.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm,
		function(wholeMatch,m1,m2) {
			var h_level = m1.length;
			return hashBlock("<h" + h_level + ">" + _RunSpanGamut(m2) + "</h" + h_level + ">");
		});

	return text;
}

// This declaration keeps Dojo compressor from outputting garbage:
var _ProcessListItems;

var _DoLists = function(text) {
//
// Form HTML ordered (numbered) and unordered (bulleted) lists.
//

	// attacklab: add sentinel to hack around khtml/safari bug:
	// http://bugs.webkit.org/show_bug.cgi?id=11231
	text += "~0";

	// Re-usable pattern to match any entirel ul or ol list:

	/*
		var whole_list = /
		(									// $1 = whole list
			(								// $2
				[ ]{0,3}					// attacklab: g_tab_width - 1
				([*+-]|\d+[.])				// $3 = first list item marker
				[ \t]+
			)
			[^\r]+?
			(								// $4
				~0							// sentinel for workaround; should be $
			|
				\n{2,}
				(?=\S)
				(?!							// Negative lookahead for another list item marker
					[ \t]*
					(?:[*+-]|\d+[.])[ \t]+
				)
			)
		)/g
	*/
	var whole_list = /^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;

	if (g_list_level) {
		text = text.replace(whole_list,function(wholeMatch,m1,m2) {
			var list = m1;
			var list_type = (m2.search(/[*+-]/g)>-1) ? "ul" : "ol";

			// Turn double returns into triple returns, so that we can make a
			// paragraph for the last item in a list, if necessary:
			list = list.replace(/\n{2,}/g,"\n\n\n");;
			var result = _ProcessListItems(list);
	
			// Trim any trailing whitespace, to put the closing `</$list_type>`
			// up on the preceding line, to get it past the current stupid
			// HTML block parser. This is a hack to work around the terrible
			// hack that is the HTML block parser.
			result = result.replace(/\s+$/,"");
			result = "<"+list_type+">" + result + "</"+list_type+">\n";
			return result;
		});
	} else {
		whole_list = /(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g;
		text = text.replace(whole_list,function(wholeMatch,m1,m2,m3) {
			var runup = m1;
			var list = m2;

			var list_type = (m3.search(/[*+-]/g)>-1) ? "ul" : "ol";
			// Turn double returns into triple returns, so that we can make a
			// paragraph for the last item in a list, if necessary:
			var list = list.replace(/\n{2,}/g,"\n\n\n");;
			var result = _ProcessListItems(list);
			result = runup + "<"+list_type+">\n" + result + "</"+list_type+">\n";	
			return result;
		});
	}

	// attacklab: strip sentinel
	text = text.replace(/~0/,"");

	return text;
}

_ProcessListItems = function(list_str) {
//
//  Process the contents of a single ordered or unordered list, splitting it
//  into individual list items.
//
	// The $g_list_level global keeps track of when we're inside a list.
	// Each time we enter a list, we increment it; when we leave a list,
	// we decrement. If it's zero, we're not in a list anymore.
	//
	// We do this because when we're not inside a list, we want to treat
	// something like this:
	//
	//    I recommend upgrading to version
	//    8. Oops, now this line is treated
	//    as a sub-list.
	//
	// As a single paragraph, despite the fact that the second line starts
	// with a digit-period-space sequence.
	//
	// Whereas when we're inside a list (or sub-list), that line will be
	// treated as the start of a sub-list. What a kludge, huh? This is
	// an aspect of Markdown's syntax that's hard to parse perfectly
	// without resorting to mind-reading. Perhaps the solution is to
	// change the syntax rules such that sub-lists must start with a
	// starting cardinal number; e.g. "1." or "a.".

	g_list_level++;

	// trim trailing blank lines:
	list_str = list_str.replace(/\n{2,}$/,"\n");

	// attacklab: add sentinel to emulate \z
	list_str += "~0";

	/*
		list_str = list_str.replace(/
			(\n)?							// leading line = $1
			(^[ \t]*)						// leading whitespace = $2
			([*+-]|\d+[.]) [ \t]+			// list marker = $3
			([^\r]+?						// list item text   = $4
			(\n{1,2}))
			(?= \n* (~0 | \2 ([*+-]|\d+[.]) [ \t]+))
		/gm, function(){...});
	*/
	list_str = list_str.replace(/(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm,
		function(wholeMatch,m1,m2,m3,m4){
			var item = m4;
			var leading_line = m1;
			var leading_space = m2;

			if (leading_line || (item.search(/\n{2,}/)>-1)) {
				item = _RunBlockGamut(_Outdent(item));
			}
			else {
				// Recursion for sub-lists:
				item = _DoLists(_Outdent(item));
				item = item.replace(/\n$/,""); // chomp(item)
				item = _RunSpanGamut(item);
			}

			return  "<li>" + item + "</li>\n";
		}
	);

	// attacklab: strip sentinel
	list_str = list_str.replace(/~0/g,"");

	g_list_level--;
	return list_str;
}


var _DoCodeBlocks = function(text) {
//
//  Process Markdown `<pre><code>` blocks.
//  

	/*
		text = text.replace(text,
			/(?:\n\n|^)
			(								// $1 = the code block -- one or more lines, starting with a space/tab
				(?:
					(?:[ ]{4}|\t)			// Lines must start with a tab or a tab-width of spaces - attacklab: g_tab_width
					.*\n+
				)+
			)
			(\n*[ ]{0,3}[^ \t\n]|(?=~0))	// attacklab: g_tab_width
		/g,function(){...});
	*/

	// attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
	text += "~0";
	
	text = text.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,
		function(wholeMatch,m1,m2) {
			var codeblock = m1;
			var nextChar = m2;
		
			codeblock = _EncodeCode( _Outdent(codeblock));
			codeblock = _Detab(codeblock);
			codeblock = codeblock.replace(/^\n+/g,""); // trim leading newlines
			codeblock = codeblock.replace(/\n+$/g,""); // trim trailing whitespace

			codeblock = "<pre><code>" + codeblock + "\n</code></pre>";

			return hashBlock(codeblock) + nextChar;
		}
	);

	// attacklab: strip sentinel
	text = text.replace(/~0/,"");

	return text;
}

var hashBlock = function(text) {
	text = text.replace(/(^\n+|\n+$)/g,"");
	return "\n\n~K" + (g_html_blocks.push(text)-1) + "K\n\n";
}


var _DoCodeSpans = function(text) {
//
//   *  Backtick quotes are used for <code></code> spans.
// 
//   *  You can use multiple backticks as the delimiters if you want to
//	 include literal backticks in the code span. So, this input:
//	 
//		 Just type ``foo `bar` baz`` at the prompt.
//	 
//	   Will translate to:
//	 
//		 <p>Just type <code>foo `bar` baz</code> at the prompt.</p>
//	 
//	There's no arbitrary limit to the number of backticks you
//	can use as delimters. If you need three consecutive backticks
//	in your code, use four for delimiters, etc.
//
//  *  You can use spaces to get literal backticks at the edges:
//	 
//		 ... type `` `bar` `` ...
//	 
//	   Turns to:
//	 
//		 ... type <code>`bar`</code> ...
//

	/*
		text = text.replace(/
			(^|[^\\])					// Character before opening ` can't be a backslash
			(`+)						// $2 = Opening run of `
			(							// $3 = The code block
				[^\r]*?
				[^`]					// attacklab: work around lack of lookbehind
			)
			\2							// Matching closer
			(?!`)
		/gm, function(){...});
	*/

	text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,
		function(wholeMatch,m1,m2,m3,m4) {
			var c = m3;
			c = c.replace(/^([ \t]*)/g,"");	// leading whitespace
			c = c.replace(/[ \t]*$/g,"");	// trailing whitespace
			c = _EncodeCode(c);
			return m1+"<code>"+c+"</code>";
		});

	return text;
}


var _EncodeCode = function(text) {
//
// Encode/escape certain characters inside Markdown code runs.
// The point is that in code, these characters are literals,
// and lose their special Markdown meanings.
//
	// Encode all ampersands; HTML entities are not
	// entities within a Markdown code span.
	text = text.replace(/&/g,"&amp;");

	// Do the angle bracket song and dance:
	text = text.replace(/</g,"&lt;");
	text = text.replace(/>/g,"&gt;");

	// Now, escape characters that are magic in Markdown:
	text = escapeCharacters(text,"\*_{}[]\\",false);

// jj the line above breaks this:
//---

//* Item

//   1. Subitem

//            special char: *
//---

	return text;
}


var _DoItalicsAndBold = function(text) {

	// <strong> must go first:
	text = text.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g,
		"<strong>$2</strong>");

	text = text.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g,
		"<em>$2</em>");

	return text;
}


var _DoBlockQuotes = function(text) {

	/*
		text = text.replace(/
		(								// Wrap whole match in $1
			(
				^[ \t]*>[ \t]?			// '>' at the start of a line
				.+\n					// rest of the first line
				(.+\n)*					// subsequent consecutive lines
				\n*						// blanks
			)+
		)
		/gm, function(){...});
	*/

	text = text.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm,
		function(wholeMatch,m1) {
			var bq = m1;

			// attacklab: hack around Konqueror 3.5.4 bug:
			// "----------bug".replace(/^-/g,"") == "bug"

			bq = bq.replace(/^[ \t]*>[ \t]?/gm,"~0");	// trim one level of quoting

			// attacklab: clean up hack
			bq = bq.replace(/~0/g,"");

			bq = bq.replace(/^[ \t]+$/gm,"");		// trim whitespace-only lines
			bq = _RunBlockGamut(bq);				// recurse
			
			bq = bq.replace(/(^|\n)/g,"$1  ");
			// These leading spaces screw with <pre> content, so we need to fix that:
			bq = bq.replace(
					/(\s*<pre>[^\r]+?<\/pre>)/gm,
				function(wholeMatch,m1) {
					var pre = m1;
					// attacklab: hack around Konqueror 3.5.4 bug:
					pre = pre.replace(/^  /mg,"~0");
					pre = pre.replace(/~0/g,"");
					return pre;
				});
			
			return hashBlock("<blockquote>\n" + bq + "\n</blockquote>");
		});
	return text;
}


var _FormParagraphs = function(text) {
//
//  Params:
//    $text - string to process with html <p> tags
//

	// Strip leading and trailing lines:
	text = text.replace(/^\n+/g,"");
	text = text.replace(/\n+$/g,"");

	var grafs = text.split(/\n{2,}/g);
	var grafsOut = new Array();

	//
	// Wrap <p> tags.
	//
	var end = grafs.length;
	for (var i=0; i<end; i++) {
		var str = grafs[i];

		// if this is an HTML marker, copy it
		if (str.search(/~K(\d+)K/g) >= 0) {
			grafsOut.push(str);
		}
		else if (str.search(/\S/) >= 0) {
			str = _RunSpanGamut(str);
			str = str.replace(/^([ \t]*)/g,"<p>");
			str += "</p>"
			grafsOut.push(str);
		}

	}

	//
	// Unhashify HTML blocks
	//
	end = grafsOut.length;
	for (var i=0; i<end; i++) {
		// if this is a marker for an html block...
		while (grafsOut[i].search(/~K(\d+)K/) >= 0) {
			var blockText = g_html_blocks[RegExp.$1];
			blockText = blockText.replace(/\$/g,"$$$$"); // Escape any dollar signs
			grafsOut[i] = grafsOut[i].replace(/~K\d+K/,blockText);
		}
	}

	return grafsOut.join("\n\n");
}


var _EncodeAmpsAndAngles = function(text) {
// Smart processing for ampersands and angle brackets that need to be encoded.
	
	// Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:
	//   http://bumppo.net/projects/amputator/
	text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&amp;");
	
	// Encode naked <'s
	text = text.replace(/<(?![a-z\/?\$!])/gi,"&lt;");
	
	return text;
}


var _EncodeBackslashEscapes = function(text) {
//
//   Parameter:  String.
//   Returns:	The string, with after processing the following backslash
//			   escape sequences.
//

	// attacklab: The polite way to do this is with the new
	// escapeCharacters() function:
	//
	// 	text = escapeCharacters(text,"\\",true);
	// 	text = escapeCharacters(text,"`*_{}[]()>#+-.!",true);
	//
	// ...but we're sidestepping its use of the (slow) RegExp constructor
	// as an optimization for Firefox.  This function gets called a LOT.

	text = text.replace(/\\(\\)/g,escapeCharacters_callback);
	text = text.replace(/\\([`*_{}\[\]()>#+-.!])/g,escapeCharacters_callback);
	return text;
}


var _DoAutoLinks = function(text) {

	text = text.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,"<a href=\"$1\">$1</a>");

	// Email addresses: <address@domain.foo>

	/*
		text = text.replace(/
			<
			(?:mailto:)?
			(
				[-.\w]+
				\@
				[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+
			)
			>
		/gi, _DoAutoLinks_callback());
	*/
	text = text.replace(/<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,
		function(wholeMatch,m1) {
			return _EncodeEmailAddress( _UnescapeSpecialChars(m1) );
		}
	);

	return text;
}


var _EncodeEmailAddress = function(addr) {
//
//  Input: an email address, e.g. "foo@example.com"
//
//  Output: the email address as a mailto link, with each character
//	of the address encoded as either a decimal or hex entity, in
//	the hopes of foiling most address harvesting spam bots. E.g.:
//
//	<a href="&#x6D;&#97;&#105;&#108;&#x74;&#111;:&#102;&#111;&#111;&#64;&#101;
//	   x&#x61;&#109;&#x70;&#108;&#x65;&#x2E;&#99;&#111;&#109;">&#102;&#111;&#111;
//	   &#64;&#101;x&#x61;&#109;&#x70;&#108;&#x65;&#x2E;&#99;&#111;&#109;</a>
//
//  Based on a filter by Matthew Wickline, posted to the BBEdit-Talk
//  mailing list: <http://tinyurl.com/yu7ue>
//

	// attacklab: why can't javascript speak hex?
	function char2hex(ch) {
		var hexDigits = '0123456789ABCDEF';
		var dec = ch.charCodeAt(0);
		return(hexDigits.charAt(dec>>4) + hexDigits.charAt(dec&15));
	}

	var encode = [
		function(ch){return "&#"+ch.charCodeAt(0)+";";},
		function(ch){return "&#x"+char2hex(ch)+";";},
		function(ch){return ch;}
	];

	addr = "mailto:" + addr;

	addr = addr.replace(/./g, function(ch) {
		if (ch == "@") {
		   	// this *must* be encoded. I insist.
			ch = encode[Math.floor(Math.random()*2)](ch);
		} else if (ch !=":") {
			// leave ':' alone (to spot mailto: later)
			var r = Math.random();
			// roughly 10% raw, 45% hex, 45% dec
			ch =  (
					r > .9  ?	encode[2](ch)   :
					r > .45 ?	encode[1](ch)   :
								encode[0](ch)
				);
		}
		return ch;
	});

	addr = "<a href=\"" + addr + "\">" + addr + "</a>";
	addr = addr.replace(/">.+:/g,"\">"); // strip the mailto: from the visible part

	return addr;
}


var _UnescapeSpecialChars = function(text) {
//
// Swap back in all the special characters we've hidden.
//
	text = text.replace(/~E(\d+)E/g,
		function(wholeMatch,m1) {
			var charCodeToReplace = parseInt(m1);
			return String.fromCharCode(charCodeToReplace);
		}
	);
	return text;
}


var _Outdent = function(text) {
//
// Remove one level of line-leading tabs or spaces
//

	// attacklab: hack around Konqueror 3.5.4 bug:
	// "----------bug".replace(/^-/g,"") == "bug"

	text = text.replace(/^(\t|[ ]{1,4})/gm,"~0"); // attacklab: g_tab_width

	// attacklab: clean up hack
	text = text.replace(/~0/g,"")

	return text;
}

var _Detab = function(text) {
// attacklab: Detab's completely rewritten for speed.
// In perl we could fix it by anchoring the regexp with \G.
// In javascript we're less fortunate.

	// expand first n-1 tabs
	text = text.replace(/\t(?=\t)/g,"    "); // attacklab: g_tab_width

	// replace the nth with two sentinels
	text = text.replace(/\t/g,"~A~B");

	// use the sentinel to anchor our regex so it doesn't explode
	text = text.replace(/~B(.+?)~A/g,
		function(wholeMatch,m1,m2) {
			var leadingText = m1;
			var numSpaces = 4 - leadingText.length % 4;  // attacklab: g_tab_width

			// there *must* be a better way to do this:
			for (var i=0; i<numSpaces; i++) leadingText+=" ";

			return leadingText;
		}
	);

	// clean up sentinels
	text = text.replace(/~A/g,"    ");  // attacklab: g_tab_width
	text = text.replace(/~B/g,"");

	return text;
}


//
//  attacklab: Utility functions
//


var escapeCharacters = function(text, charsToEscape, afterBackslash) {
	// First we have to escape the escape characters so that
	// we can build a character class out of them
	var regexString = "([" + charsToEscape.replace(/([\[\]\\])/g,"\\$1") + "])";

	if (afterBackslash) {
		regexString = "\\\\" + regexString;
	}

	var regex = new RegExp(regexString,"g");
	text = text.replace(regex,escapeCharacters_callback);

	return text;
}


var escapeCharacters_callback = function(wholeMatch,m1) {
	var charCodeToEscape = m1.charCodeAt(0);
	return "~E"+charCodeToEscape+"E";
}

} // end of Attacklab.showdown.converter


// Version 0.9 used the Showdown namespace instead of Attacklab.showdown
// The old namespace is deprecated, but we'll support it for now:
var Showdown = Attacklab.showdown;

// If anyone's interested, tell the world that this file's been loaded
if (Attacklab.fileLoaded) {
	Attacklab.fileLoaded("showdown.js");
}

}
/*
     FILE ARCHIVED ON 16:31:21 Jun 12, 2010 AND RETRIEVED FROM THE
     INTERNET ARCHIVE ON 04:08:27 Jan 01, 2022.
     JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.

     ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
     SECTION 108(a)(3)).
*/
/*
playback timings (ms):
  captures_list: 263.349
  exclusion.robots: 0.207
  exclusion.robots.policy: 0.2
  RedisCDXSource: 1.199
  esindex: 0.006
  LoadShardBlock: 243.682 (3)
  PetaboxLoader3.datanode: 265.927 (4)
  CDXLines.iter: 15.744 (3)
  load_resource: 207.014
  PetaboxLoader3.resolve: 149.426
*/


name: showdown.min-0.3.1.js
path: D:\websites\domains\a.sds.sh\public_html\a\js\showdown.min-0.3.1.js
mime: unavailable
content:
//
// showdown.js -- A javascript port of Markdown.
//
// Copyright (c) 2007 John Fraser.
//
// Original Markdown Copyright (c) 2004-2005 John Gruber
//   <http://daringfireball.net/projects/markdown/>
//
// Redistributable under a BSD-style open source license.
// See license.txt for more information.
//
// The full source distribution is at:
//
//				A A L
//				T C A
//				T K B
//
//   <http://www.attacklab.net/>
//
//
// Wherever possible, Showdown is a straight, line-by-line port
// of the Perl version of Markdown.
//
// This is not a normal parser design; it's basically just a
// series of string substitutions.  It's hard to read and
// maintain this way,  but keeping Showdown close to the original
// design makes it easier to port new features.
//
// More importantly, Showdown behaves like markdown.pl in most
// edge cases.  So web applications can do client-side preview
// in Javascript, and then build identical HTML on the server.
//
// This port needs the new RegExp functionality of ECMA 262,
// 3rd Edition (i.e. Javascript 1.5).  Most modern web browsers
// should do fine.  Even with the new regular expression features,
// We do a lot of work to emulate Perl's regex functionality.
// The tricky changes in this file mostly have the "attacklab:"
// label.  Major or self-explanatory changes don't.
//
// Smart diff tools like Araxis Merge will be able to match up
// this file with markdown.pl in a useful way.  A little tweaking
// helps: in a copy of markdown.pl, replace "#" with "//" and
// replace "$text" with "text".  Be sure to ignore whitespace
// and line endings.
//
//
// Showdown usage:
//
//   var text = "Markdown *rocks*.";
//
//   var converter = new Showdown.converter();
//   var html = converter.makeHtml(text);
//
//   alert(html);
//
// Note: move the sample code to the bottom of this
// file before uncommenting it.
//
//
// Showdown namespace
//
var Showdown={extensions:{}},forEach=Showdown.forEach=function(a,b){if(typeof a.forEach=="function")a.forEach(b);else{var c,d=a.length;for(c=0;c<d;c++)b(a[c],c,a)}},stdExtName=function(a){return a.replace(/[_-]||\s/g,"").toLowerCase()};Showdown.converter=function(a){var b,c,d,e=0,f=[],g=[];if(typeof module!="undefind"&&typeof exports!="undefined"&&typeof require!="undefind"){var h=require("fs");if(h){var i=h.readdirSync((__dirname||".")+"/extensions").filter(function(a){return~a.indexOf(".js")}).map(function(a){return a.replace(/\.js$/,"")});Showdown.forEach(i,function(a){var b=stdExtName(a);Showdown.extensions[b]=require("./extensions/"+a)})}}this.makeHtml=function(a){return b={},c={},d=[],a=a.replace(/~/g,"~T"),a=a.replace(/\$/g,"~D"),a=a.replace(/\r\n/g,"\n"),a=a.replace(/\r/g,"\n"),a="\n\n"+a+"\n\n",a=M(a),a=a.replace(/^[ \t]+$/mg,""),Showdown.forEach(f,function(b){a=k(b,a)}),a=z(a),a=m(a),a=l(a),a=o(a),a=K(a),a=a.replace(/~D/g,"$$"),a=a.replace(/~T/g,"~"),Showdown.forEach(g,function(b){a=k(b,a)}),a};if(a&&a.extensions){var j=this;Showdown.forEach(a.extensions,function(a){typeof a=="string"&&(a=Showdown.extensions[stdExtName(a)]);if(typeof a!="function")throw"Extension '"+a+"' could not be loaded.  It was either not found or is not a valid extension.";Showdown.forEach(a(j),function(a){a.type?a.type==="language"||a.type==="lang"?f.push(a):(a.type==="output"||a.type==="html")&&g.push(a):g.push(a)})})}var k=function(a,b){if(a.regex){var c=new RegExp(a.regex,"g");return b.replace(c,a.replace)}if(a.filter)return a.filter(b)},l=function(a){return a+="~0",a=a.replace(/^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*<?(\S+?)>?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|(?=~0))/gm,function(a,d,e,f,g){return d=d.toLowerCase(),b[d]=G(e),f?f+g:(g&&(c[d]=g.replace(/"/g,"&quot;")),"")}),a=a.replace(/~0/,""),a},m=function(a){a=a.replace(/\n/g,"\n\n");var b="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del|style|section|header|footer|nav|article|aside",c="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside";return a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm,n),a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside)\b[^\r]*?<\/\2>[ \t]*(?=\n+)\n)/gm,n),a=a.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,n),a=a.replace(/(\n\n[ ]{0,3}<!(--[^\r]*?--\s*)+>[ \t]*(?=\n{2,}))/g,n),a=a.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,n),a=a.replace(/\n\n/g,"\n"),a},n=function(a,b){var c=b;return c=c.replace(/\n\n/g,"\n"),c=c.replace(/^\n/,""),c=c.replace(/\n+$/g,""),c="\n\n~K"+(d.push(c)-1)+"K\n\n",c},o=function(a){a=v(a);var b=A("<hr />");return a=a.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\_[ ]?){3,}[ \t]*$/gm,b),a=x(a),a=y(a),a=E(a),a=m(a),a=F(a),a},p=function(a){return a=B(a),a=q(a),a=H(a),a=t(a),a=r(a),a=I(a),a=G(a),a=D(a),a=a.replace(/  +\n/g," <br />\n"),a},q=function(a){var b=/(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|<!(--.*?--\s*)+>)/gi;return a=a.replace(b,function(a){var b=a.replace(/(.)<\/?code>(?=.)/g,"$1`");return b=N(b,"\\`*_"),b}),a},r=function(a){return a=a.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,s),a=a.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()<?(.*?(?:\(.*?\).*?)?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,s),a=a.replace(/(\[([^\[\]]+)\])()()()()()/g,s),a},s=function(a,d,e,f,g,h,i,j){j==undefined&&(j="");var k=d,l=e,m=f.toLowerCase(),n=g,o=j;if(n==""){m==""&&(m=l.toLowerCase().replace(/ ?\n/g," ")),n="#"+m;if(b[m]!=undefined)n=b[m],c[m]!=undefined&&(o=c[m]);else{if(!(k.search(/\(\s*\)$/m)>-1))return k;n=""}}n=N(n,"*_");var p='<a href="'+n+'"';return o!=""&&(o=o.replace(/"/g,"&quot;"),o=N(o,"*_"),p+=' title="'+o+'"'),p+=">"+l+"</a>",p},t=function(a){return a=a.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,u),a=a.replace(/(!\[(.*?)\]\s?\([ \t]*()<?(\S+?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,u),a},u=function(a,d,e,f,g,h,i,j){var k=d,l=e,m=f.toLowerCase(),n=g,o=j;o||(o="");if(n==""){m==""&&(m=l.toLowerCase().replace(/ ?\n/g," ")),n="#"+m;if(b[m]==undefined)return k;n=b[m],c[m]!=undefined&&(o=c[m])}l=l.replace(/"/g,"&quot;"),n=N(n,"*_");var p='<img src="'+n+'" alt="'+l+'"';return o=o.replace(/"/g,"&quot;"),o=N(o,"*_"),p+=' title="'+o+'"',p+=" />",p},v=function(a){function b(a){return a.replace(/[^\w]/g,"").toLowerCase()}return a=a.replace(/^(.+)[ \t]*\n=+[ \t]*\n+/gm,function(a,c){return A('<h1 id="'+b(c)+'">'+p(c)+"</h1>")}),a=a.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm,function(a,c){return A('<h2 id="'+b(c)+'">'+p(c)+"</h2>")}),a=a.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm,function(a,c,d){var e=c.length;return A("<h"+e+' id="'+b(d)+'">'+p(d)+"</h"+e+">")}),a},w,x=function(a){a+="~0";var b=/^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;return e?a=a.replace(b,function(a,b,c){var d=b,e=c.search(/[*+-]/g)>-1?"ul":"ol";d=d.replace(/\n{2,}/g,"\n\n\n");var f=w(d);return f=f.replace(/\s+$/,""),f="<"+e+">"+f+"</"+e+">\n",f}):(b=/(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g,a=a.replace(b,function(a,b,c,d){var e=b,f=c,g=d.search(/[*+-]/g)>-1?"ul":"ol",f=f.replace(/\n{2,}/g,"\n\n\n"),h=w(f);return h=e+"<"+g+">\n"+h+"</"+g+">\n",h})),a=a.replace(/~0/,""),a};w=function(a){return e++,a=a.replace(/\n{2,}$/,"\n"),a+="~0",a=a.replace(/(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm,function(a,b,c,d,e){var f=e,g=b,h=c;return g||f.search(/\n{2,}/)>-1?f=o(L(f)):(f=x(L(f)),f=f.replace(/\n$/,""),f=p(f)),"<li>"+f+"</li>\n"}),a=a.replace(/~0/g,""),e--,a};var y=function(a){return a+="~0",a=a.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,function(a,b,c){var d=b,e=c;return d=C(L(d)),d=M(d),d=d.replace(/^\n+/g,""),d=d.replace(/\n+$/g,""),d="<pre><code>"+d+"\n</code></pre>",A(d)+e}),a=a.replace(/~0/,""),a},z=function(a){return a+="~0",a=a.replace(/(?:^|\n)```(.*)\n([\s\S]*?)\n```/g,function(a,b,c){var d=b,e=c;return e=C(e),e=M(e),e=e.replace(/^\n+/g,""),e=e.replace(/\n+$/g,""),e="<pre><code"+(d?' class="'+d+'"':"")+">"+e+"\n</code></pre>",A(e)}),a=a.replace(/~0/,""),a},A=function(a){return a=a.replace(/(^\n+|\n+$)/g,""),"\n\n~K"+(d.push(a)-1)+"K\n\n"},B=function(a){return a=a.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(a,b,c,d,e){var f=d;return f=f.replace(/^([ \t]*)/g,""),f=f.replace(/[ \t]*$/g,""),f=C(f),b+"<code>"+f+"</code>"}),a},C=function(a){return a=a.replace(/&/g,"&amp;"),a=a.replace(/</g,"&lt;"),a=a.replace(/>/g,"&gt;"),a=N(a,"*_{}[]\\",!1),a},D=function(a){return a=a.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g,"<strong>$2</strong>"),a=a.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g,"<em>$2</em>"),a},E=function(a){return a=a.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm,function(a,b){var c=b;return c=c.replace(/^[ \t]*>[ \t]?/gm,"~0"),c=c.replace(/~0/g,""),c=c.replace(/^[ \t]+$/gm,""),c=o(c),c=c.replace(/(^|\n)/g,"$1  "),c=c.replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,function(a,b){var c=b;return c=c.replace(/^  /mg,"~0"),c=c.replace(/~0/g,""),c}),A("<blockquote>\n"+c+"\n</blockquote>")}),a},F=function(a){a=a.replace(/^\n+/g,""),a=a.replace(/\n+$/g,"");var b=a.split(/\n{2,}/g),c=[],e=b.length;for(var f=0;f<e;f++){var g=b[f];g.search(/~K(\d+)K/g)>=0?c.push(g):g.search(/\S/)>=0&&(g=p(g),g=g.replace(/^([ \t]*)/g,"<p>"),g+="</p>",c.push(g))}e=c.length;for(var f=0;f<e;f++)while(c[f].search(/~K(\d+)K/)>=0){var h=d[RegExp.$1];h=h.replace(/\$/g,"$$$$"),c[f]=c[f].replace(/~K\d+K/,h)}return c.join("\n\n")},G=function(a){return a=a.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&amp;"),a=a.replace(/<(?![a-z\/?\$!])/gi,"&lt;"),a},H=function(a){return a=a.replace(/\\(\\)/g,O),a=a.replace(/\\([`*_{}\[\]()>#+-.!])/g,O),a},I=function(a){return a=a.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,'<a href="$1">$1</a>'),a=a.replace(/<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,function(a,b){return J(K(b))}),a},J=function(a){var b=[function(a){return"&#"+a.charCodeAt(0)+";"},function(a){return"&#x"+a.charCodeAt(0).toString(16)+";"},function(a){return a}];return a="mailto:"+a,a=a.replace(/./g,function(a){if(a=="@")a=b[Math.floor(Math.random()*2)](a);else if(a!=":"){var c=Math.random();a=c>.9?b[2](a):c>.45?b[1](a):b[0](a)}return a}),a='<a href="'+a+'">'+a+"</a>",a=a.replace(/">.+:/g,'">'),a},K=function(a){return a=a.replace(/~E(\d+)E/g,function(a,b){var c=parseInt(b);return String.fromCharCode(c)}),a},L=function(a){return a=a.replace(/^(\t|[ ]{1,4})/gm,"~0"),a=a.replace(/~0/g,""),a},M=function(a){return a=a.replace(/\t(?=\t)/g,"    "),a=a.replace(/\t/g,"~A~B"),a=a.replace(/~B(.+?)~A/g,function(a,b,c){var d=b,e=4-d.length%4;for(var f=0;f<e;f++)d+=" ";return d}),a=a.replace(/~A/g,"    "),a=a.replace(/~B/g,""),a},N=function(a,b,c){var d="(["+b.replace(/([\[\]\\])/g,"\\$1")+"])";c&&(d="\\\\"+d);var e=new RegExp(d,"g");return a=a.replace(e,O),a},O=function(a,b){var c=b.charCodeAt(0);return"~E"+c+"E"}},typeof module!="undefined"&&(module.exports=Showdown),typeof define=="function"&&define.amd&&define("showdown",function(){return Showdown});


name: showdown.min.js.map
path: D:\websites\domains\a.sds.sh\public_html\a\js\showdown.min.js.map
mime: unavailable
content:
{"version":3,"sources":["showdown.js"],"names":["getDefaultOpts","simple","defaultOptions","omitExtraWLInCodeBlocks","defaultValue","describe","type","noHeaderId","prefixHeaderId","rawPrefixHeaderId","ghCompatibleHeaderId","rawHeaderId","headerLevelStart","parseImgDimensions","simplifiedAutoLink","literalMidWordUnderscores","literalMidWordAsterisks","strikethrough","tables","tablesHeaderId","ghCodeBlocks","tasklists","smoothLivePreview","smartIndentationFix","description","disableForced4SpacesIndentedSublists","simpleLineBreaks","requireSpaceBeforeHeadingText","ghMentions","ghMentionsLink","encodeEmails","openLinksInNewWindow","backslashEscapesHTMLTags","emoji","underline","ellipsis","completeHTMLDocument","metadata","splitAdjacentBlockquotes","JSON","parse","stringify","ret","opt","hasOwnProperty","showdown","parsers","extensions","globalOptions","setFlavor","flavor","github","original","ghost","vanilla","allOn","options","allOptionsOn","validate","extension","name","errMsg","valid","error","helper","isArray","i","length","baseMsg","ext","isString","toLowerCase","isUndefined","listeners","filter","regex","ln","RegExp","replace","setOption","key","value","this","getOption","getOptions","resetOptions","Error","preset","option","getFlavor","getFlavorOptions","getDefaultOptions","subParser","func","stdExtName","validExtension","getAllExtensions","removeExtension","resetExtensions","validateExtension","console","warn","document","window","jsdom","require","JSDOM","escapeCharactersCallback","wholeMatch","m1","charCodeAt","a","String","isFunction","toString","call","Array","forEach","obj","callback","prop","s","escapeCharacters","text","charsToEscape","afterBackslash","regexString","rgxFindMatchPos","str","left","right","flags","t","m","start","end","f","g","indexOf","x","l","pos","exec","test","lastIndex","index","match","push","matchRecursiveRegExp","matchPos","results","slice","replaceRecursiveRegExp","replacement","repStr","finalStr","lng","bits","join","regexIndexOf","fromIndex","substring","search","splitAtIndex","encodeEmailAddress","mail","encode","ch","Math","floor","random","r","padEnd","targetLength","padString","repeat","unescapeHTMLEntities","txt","_hashHTMLSpan","html","globals","gHtmlSpans","Event","params","regexp","matches","converter","getName","getEventName","_stopExecution","parsedText","getRegexp","getConverter","getGlobals","getCapturedText","getText","setText","newText","getMatches","setMatches","newMatches","preventDefault","bool","msg","alert","log","regexes","asteriskDashTildeAndColon","asteriskDashAndTilde","emojis","+1","-1","100","1234","1st_place_medal","2nd_place_medal","3rd_place_medal","8ball","ab","abc","abcd","accept","aerial_tramway","airplane","alarm_clock","alembic","alien","ambulance","amphora","anchor","angel","anger","angry","anguished","ant","apple","aquarius","aries","arrow_backward","arrow_double_down","arrow_double_up","arrow_down","arrow_down_small","arrow_forward","arrow_heading_down","arrow_heading_up","arrow_left","arrow_lower_left","arrow_lower_right","arrow_right","arrow_right_hook","arrow_up","arrow_up_down","arrow_up_small","arrow_upper_left","arrow_upper_right","arrows_clockwise","arrows_counterclockwise","art","articulated_lorry","artificial_satellite","astonished","athletic_shoe","atm","atom_symbol","avocado","b","baby","baby_bottle","baby_chick","baby_symbol","back","bacon","badminton","baggage_claim","baguette_bread","balance_scale","balloon","ballot_box","ballot_box_with_check","bamboo","banana","bangbang","bank","bar_chart","barber","baseball","basketball","basketball_man","basketball_woman","bat","bath","bathtub","battery","beach_umbrella","bear","bed","bee","beer","beers","beetle","beginner","bell","bellhop_bell","bento","biking_man","bike","biking_woman","bikini","biohazard","bird","birthday","black_circle","black_flag","black_heart","black_joker","black_large_square","black_medium_small_square","black_medium_square","black_nib","black_small_square","black_square_button","blonde_man","blonde_woman","blossom","blowfish","blue_book","blue_car","blue_heart","blush","boar","boat","bomb","book","bookmark","bookmark_tabs","books","boom","boot","bouquet","bowing_man","bow_and_arrow","bowing_woman","bowling","boxing_glove","boy","bread","bride_with_veil","bridge_at_night","briefcase","broken_heart","bug","building_construction","bulb","bullettrain_front","bullettrain_side","burrito","bus","business_suit_levitating","busstop","bust_in_silhouette","busts_in_silhouette","butterfly","cactus","cake","calendar","call_me_hand","calling","camel","camera","camera_flash","camping","cancer","candle","candy","canoe","capital_abcd","capricorn","car","card_file_box","card_index","card_index_dividers","carousel_horse","carrot","cat","cat2","cd","chains","champagne","chart","chart_with_downwards_trend","chart_with_upwards_trend","checkered_flag","cheese","cherries","cherry_blossom","chestnut","chicken","children_crossing","chipmunk","chocolate_bar","christmas_tree","church","cinema","circus_tent","city_sunrise","city_sunset","cityscape","cl","clamp","clap","clapper","classical_building","clinking_glasses","clipboard","clock1","clock10","clock1030","clock11","clock1130","clock12","clock1230","clock130","clock2","clock230","clock3","clock330","clock4","clock430","clock5","clock530","clock6","clock630","clock7","clock730","clock8","clock830","clock9","clock930","closed_book","closed_lock_with_key","closed_umbrella","cloud","cloud_with_lightning","cloud_with_lightning_and_rain","cloud_with_rain","cloud_with_snow","clown_face","clubs","cocktail","coffee","coffin","cold_sweat","comet","computer","computer_mouse","confetti_ball","confounded","confused","congratulations","construction","construction_worker_man","construction_worker_woman","control_knobs","convenience_store","cookie","cool","policeman","copyright","corn","couch_and_lamp","couple","couple_with_heart_woman_man","couple_with_heart_man_man","couple_with_heart_woman_woman","couplekiss_man_man","couplekiss_man_woman","couplekiss_woman_woman","cow","cow2","cowboy_hat_face","crab","crayon","credit_card","crescent_moon","cricket","crocodile","croissant","crossed_fingers","crossed_flags","crossed_swords","crown","cry","crying_cat_face","crystal_ball","cucumber","cupid","curly_loop","currency_exchange","curry","custard","customs","cyclone","dagger","dancer","dancing_women","dancing_men","dango","dark_sunglasses","dart","dash","date","deciduous_tree","deer","department_store","derelict_house","desert","desert_island","desktop_computer","male_detective","diamond_shape_with_a_dot_inside","diamonds","disappointed","disappointed_relieved","dizzy","dizzy_face","do_not_litter","dog","dog2","dollar","dolls","dolphin","door","doughnut","dove","dragon","dragon_face","dress","dromedary_camel","drooling_face","droplet","drum","duck","dvd","e-mail","eagle","ear","ear_of_rice","earth_africa","earth_americas","earth_asia","egg","eggplant","eight_pointed_black_star","eight_spoked_asterisk","electric_plug","elephant","email","envelope_with_arrow","euro","european_castle","european_post_office","evergreen_tree","exclamation","expressionless","eye","eye_speech_bubble","eyeglasses","eyes","face_with_head_bandage","face_with_thermometer","fist_oncoming","factory","fallen_leaf","family_man_woman_boy","family_man_boy","family_man_boy_boy","family_man_girl","family_man_girl_boy","family_man_girl_girl","family_man_man_boy","family_man_man_boy_boy","family_man_man_girl","family_man_man_girl_boy","family_man_man_girl_girl","family_man_woman_boy_boy","family_man_woman_girl","family_man_woman_girl_boy","family_man_woman_girl_girl","family_woman_boy","family_woman_boy_boy","family_woman_girl","family_woman_girl_boy","family_woman_girl_girl","family_woman_woman_boy","family_woman_woman_boy_boy","family_woman_woman_girl","family_woman_woman_girl_boy","family_woman_woman_girl_girl","fast_forward","fax","fearful","feet","female_detective","ferris_wheel","ferry","field_hockey","file_cabinet","file_folder","film_projector","film_strip","fire","fire_engine","fireworks","first_quarter_moon","first_quarter_moon_with_face","fish","fish_cake","fishing_pole_and_fish","fist_raised","fist_left","fist_right","flashlight","fleur_de_lis","flight_arrival","flight_departure","floppy_disk","flower_playing_cards","flushed","fog","foggy","football","footprints","fork_and_knife","fountain","fountain_pen","four_leaf_clover","fox_face","framed_picture","free","fried_egg","fried_shrimp","fries","frog","frowning","frowning_face","frowning_man","frowning_woman","middle_finger","fuelpump","full_moon","full_moon_with_face","funeral_urn","game_die","gear","gem","gemini","gift","gift_heart","girl","globe_with_meridians","goal_net","goat","golf","golfing_man","golfing_woman","gorilla","grapes","green_apple","green_book","green_heart","green_salad","grey_exclamation","grey_question","grimacing","grin","grinning","guardsman","guardswoman","guitar","gun","haircut_woman","haircut_man","hamburger","hammer","hammer_and_pick","hammer_and_wrench","hamster","hand","handbag","handshake","hankey","hatched_chick","hatching_chick","headphones","hear_no_evil","heart","heart_decoration","heart_eyes","heart_eyes_cat","heartbeat","heartpulse","hearts","heavy_check_mark","heavy_division_sign","heavy_dollar_sign","heavy_heart_exclamation","heavy_minus_sign","heavy_multiplication_x","heavy_plus_sign","helicopter","herb","hibiscus","high_brightness","high_heel","hocho","hole","honey_pot","horse","horse_racing","hospital","hot_pepper","hotdog","hotel","hotsprings","hourglass","hourglass_flowing_sand","house","house_with_garden","houses","hugs","hushed","ice_cream","ice_hockey","ice_skate","icecream","id","ideograph_advantage","imp","inbox_tray","incoming_envelope","tipping_hand_woman","information_source","innocent","interrobang","iphone","izakaya_lantern","jack_o_lantern","japan","japanese_castle","japanese_goblin","japanese_ogre","jeans","joy","joy_cat","joystick","kaaba","keyboard","keycap_ten","kick_scooter","kimono","kiss","kissing","kissing_cat","kissing_closed_eyes","kissing_heart","kissing_smiling_eyes","kiwi_fruit","koala","koko","label","large_blue_circle","large_blue_diamond","large_orange_diamond","last_quarter_moon","last_quarter_moon_with_face","latin_cross","laughing","leaves","ledger","left_luggage","left_right_arrow","leftwards_arrow_with_hook","lemon","leo","leopard","level_slider","libra","light_rail","link","lion","lips","lipstick","lizard","lock","lock_with_ink_pen","lollipop","loop","loud_sound","loudspeaker","love_hotel","love_letter","low_brightness","lying_face","mag","mag_right","mahjong","mailbox","mailbox_closed","mailbox_with_mail","mailbox_with_no_mail","man","man_artist","man_astronaut","man_cartwheeling","man_cook","man_dancing","man_facepalming","man_factory_worker","man_farmer","man_firefighter","man_health_worker","man_in_tuxedo","man_judge","man_juggling","man_mechanic","man_office_worker","man_pilot","man_playing_handball","man_playing_water_polo","man_scientist","man_shrugging","man_singer","man_student","man_teacher","man_technologist","man_with_gua_pi_mao","man_with_turban","tangerine","mans_shoe","mantelpiece_clock","maple_leaf","martial_arts_uniform","mask","massage_woman","massage_man","meat_on_bone","medal_military","medal_sports","mega","melon","memo","men_wrestling","menorah","mens","metal","metro","microphone","microscope","milk_glass","milky_way","minibus","minidisc","mobile_phone_off","money_mouth_face","money_with_wings","moneybag","monkey","monkey_face","monorail","moon","mortar_board","mosque","motor_boat","motor_scooter","motorcycle","motorway","mount_fuji","mountain","mountain_biking_man","mountain_biking_woman","mountain_cableway","mountain_railway","mountain_snow","mouse","mouse2","movie_camera","moyai","mrs_claus","muscle","mushroom","musical_keyboard","musical_note","musical_score","mute","nail_care","name_badge","national_park","nauseated_face","necktie","negative_squared_cross_mark","nerd_face","neutral_face","new","new_moon","new_moon_with_face","newspaper","newspaper_roll","next_track_button","ng","no_good_man","no_good_woman","night_with_stars","no_bell","no_bicycles","no_entry","no_entry_sign","no_mobile_phones","no_mouth","no_pedestrians","no_smoking","non-potable_water","nose","notebook","notebook_with_decorative_cover","notes","nut_and_bolt","o","o2","ocean","octopus","oden","office","oil_drum","ok","ok_hand","ok_man","ok_woman","old_key","older_man","older_woman","om","on","oncoming_automobile","oncoming_bus","oncoming_police_car","oncoming_taxi","open_file_folder","open_hands","open_mouth","open_umbrella","ophiuchus","orange_book","orthodox_cross","outbox_tray","owl","ox","package","page_facing_up","page_with_curl","pager","paintbrush","palm_tree","pancakes","panda_face","paperclip","paperclips","parasol_on_ground","parking","part_alternation_mark","partly_sunny","passenger_ship","passport_control","pause_button","peace_symbol","peach","peanuts","pear","pen","pencil2","penguin","pensive","performing_arts","persevere","person_fencing","pouting_woman","phone","pick","pig","pig2","pig_nose","pill","pineapple","ping_pong","pisces","pizza","place_of_worship","plate_with_cutlery","play_or_pause_button","point_down","point_left","point_right","point_up","point_up_2","police_car","policewoman","poodle","popcorn","post_office","postal_horn","postbox","potable_water","potato","pouch","poultry_leg","pound","rage","pouting_cat","pouting_man","pray","prayer_beads","pregnant_woman","previous_track_button","prince","princess","printer","purple_heart","purse","pushpin","put_litter_in_its_place","question","rabbit","rabbit2","racehorse","racing_car","radio","radio_button","radioactive","railway_car","railway_track","rainbow","rainbow_flag","raised_back_of_hand","raised_hand_with_fingers_splayed","raised_hands","raising_hand_woman","raising_hand_man","ram","ramen","rat","record_button","recycle","red_circle","registered","relaxed","relieved","reminder_ribbon","repeat_one","rescue_worker_helmet","restroom","revolving_hearts","rewind","rhinoceros","ribbon","rice","rice_ball","rice_cracker","rice_scene","right_anger_bubble","ring","robot","rocket","rofl","roll_eyes","roller_coaster","rooster","rose","rosette","rotating_light","round_pushpin","rowing_man","rowing_woman","rugby_football","running_man","running_shirt_with_sash","running_woman","sa","sagittarius","sake","sandal","santa","satellite","saxophone","school","school_satchel","scissors","scorpion","scorpius","scream","scream_cat","scroll","seat","secret","see_no_evil","seedling","selfie","shallow_pan_of_food","shamrock","shark","shaved_ice","sheep","shell","shield","shinto_shrine","ship","shirt","shopping","shopping_cart","shower","shrimp","signal_strength","six_pointed_star","ski","skier","skull","skull_and_crossbones","sleeping","sleeping_bed","sleepy","slightly_frowning_face","slightly_smiling_face","slot_machine","small_airplane","small_blue_diamond","small_orange_diamond","small_red_triangle","small_red_triangle_down","smile","smile_cat","smiley","smiley_cat","smiling_imp","smirk","smirk_cat","smoking","snail","snake","sneezing_face","snowboarder","snowflake","snowman","snowman_with_snow","sob","soccer","soon","sos","sound","space_invader","spades","spaghetti","sparkle","sparkler","sparkles","sparkling_heart","speak_no_evil","speaker","speaking_head","speech_balloon","speedboat","spider","spider_web","spiral_calendar","spiral_notepad","spoon","squid","stadium","star","star2","star_and_crescent","star_of_david","stars","station","statue_of_liberty","steam_locomotive","stew","stop_button","stop_sign","stopwatch","straight_ruler","strawberry","stuck_out_tongue","stuck_out_tongue_closed_eyes","stuck_out_tongue_winking_eye","studio_microphone","stuffed_flatbread","sun_behind_large_cloud","sun_behind_rain_cloud","sun_behind_small_cloud","sun_with_face","sunflower","sunglasses","sunny","sunrise","sunrise_over_mountains","surfing_man","surfing_woman","sushi","suspension_railway","sweat","sweat_drops","sweat_smile","sweet_potato","swimming_man","swimming_woman","symbols","synagogue","syringe","taco","tada","tanabata_tree","taurus","taxi","tea","telephone_receiver","telescope","tennis","tent","thermometer","thinking","thought_balloon","ticket","tickets","tiger","tiger2","timer_clock","tipping_hand_man","tired_face","tm","toilet","tokyo_tower","tomato","tongue","top","tophat","tornado","trackball","tractor","traffic_light","train","train2","tram","triangular_flag_on_post","triangular_ruler","trident","triumph","trolleybus","trophy","tropical_drink","tropical_fish","truck","trumpet","tulip","tumbler_glass","turkey","turtle","tv","twisted_rightwards_arrows","two_hearts","two_men_holding_hands","two_women_holding_hands","u5272","u5408","u55b6","u6307","u6708","u6709","u6e80","u7121","u7533","u7981","u7a7a","umbrella","unamused","underage","unicorn","unlock","up","upside_down_face","v","vertical_traffic_light","vhs","vibration_mode","video_camera","video_game","violin","virgo","volcano","volleyball","vs","vulcan_salute","walking_man","walking_woman","waning_crescent_moon","waning_gibbous_moon","warning","wastebasket","watch","water_buffalo","watermelon","wave","wavy_dash","waxing_crescent_moon","wc","weary","wedding","weight_lifting_man","weight_lifting_woman","whale","whale2","wheel_of_dharma","wheelchair","white_check_mark","white_circle","white_flag","white_flower","white_large_square","white_medium_small_square","white_medium_square","white_small_square","white_square_button","wilted_flower","wind_chime","wind_face","wine_glass","wink","wolf","woman","woman_artist","woman_astronaut","woman_cartwheeling","woman_cook","woman_facepalming","woman_factory_worker","woman_farmer","woman_firefighter","woman_health_worker","woman_judge","woman_juggling","woman_mechanic","woman_office_worker","woman_pilot","woman_playing_handball","woman_playing_water_polo","woman_scientist","woman_shrugging","woman_singer","woman_student","woman_teacher","woman_technologist","woman_with_turban","womans_clothes","womans_hat","women_wrestling","womens","world_map","worried","wrench","writing_hand","yellow_heart","yen","yin_yang","yum","zap","zipper_mouth_face","zzz","octocat","_dispatch","rgx","bq","pre","m2","codeblock","nextChar","m3","c","doctype","doctypeParsed","title","charset","lang","meta","parsed","trim","leadingText","numSpaces","wm","emojiCode","delim","language","gHtmlBlocks","blockText","blockTags","repFunc","makeHtml","inside","opTagPos","rgx1","patLeft","patRight","subTexts","newSubText1","concat","repText","limit","num","$1","isNaN","parseInt","setextRegexH1","setextRegexH2","spanGamut","hID","headerId","hashBlock","matchFound","hLevel","atxStyle","prefix","customizedHeaderId","hashLinkCounts","hText","span","header","writeImageTag","altText","linkId","url","width","height","m5","gUrls","gTitles","gDims","gDimensions","result","parseInside","replaceAnchorTag","evtRootName","emptyCase","m6","writeAnchorTag","createEvent","evtName","evt","target","rgxEmpty","rgxCrazy","rgx2","rgx3","st","escape","mentions","username","urlRgx","urlStart","mailRgx","leadingMDChars","urlPrefix","suffix","char","charAt","opPar","clPar","opPar2","clPar2","leadingChar","processListItems","listStr","trimTrailing","gListLevel","isParagraphed","m4","taskbtn","checked","item","bulletStyle","otp","wm2","styleStartNumber","list","listType","res","parseConsecutiveLists","olRgx","ulRgx","counterRxg","parseCL","style","parseMetadataContents","content","raw","wholematch","format","grafs","split","grafsOut","grafsOutIt","codeFlag","$2","re","replaceFunc","blankLines","parseTable","rawTable","tableLines","sLine","cell","rawHeaders","map","rawStyles","rawCells","headers","styles","cells","shift","tableHeaderId","row","ii","tb","tblLgn","buildTable","charCodeToReplace","fromCharCode","node","hasChildNodes","children","childNodes","childrenLength","innerTxt","getAttribute","preList","innerHTML","headerLevel","headerMark","hasAttribute","listItems","listItemsLenght","listNum","tagName","listItemTxt","childrenLenght","spansOnly","nodeType","data","outerHTML","tableArray","headings","querySelectorAll","rows","headContent","allign","cols","getElementsByTagName","cellContent","cellSpacesCount","strLen","nodeValue","Converter","converterOptions","langExtensions","outputModifiers","setConvFlavor","_parseExtension","legacyExtensionLoading","validExt","listen","gOpt","_constructor","pParams","event","ei","nText","rsp","gHtmlMdBlocks","makeMarkdown","src","doc","createElement","pres","presPH","childElementCount","firstChild","classes","className","setAttribute","substitutePreCodeTags","clean","n","child","removeChild","nodes","mdDoc","addExtension","useExtension","extensionName","splice","output","getMetadata","getMetadataFormat","_setMetadataPair","_setMetadataFormat","_setMetadataRaw","define","amd","module","exports"],"mappings":"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","file":"showdown.min.js"}


