dphelper 3.1.7 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dphelper.umd.js +56 -15176
- package/index.js +20 -30
- package/package.json +29 -73
- package/types/dphelper.d.ts +2 -0
- package/dphelper.umd.js.map +0 -7
package/dphelper.umd.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../node_modules/crypto-js/core.js", "../node_modules/crypto-js/x64-core.js", "../node_modules/crypto-js/lib-typedarrays.js", "../node_modules/crypto-js/enc-utf16.js", "../node_modules/crypto-js/enc-base64.js", "../node_modules/crypto-js/enc-base64url.js", "../node_modules/crypto-js/md5.js", "../node_modules/crypto-js/sha1.js", "../node_modules/crypto-js/sha256.js", "../node_modules/crypto-js/sha224.js", "../node_modules/crypto-js/sha512.js", "../node_modules/crypto-js/sha384.js", "../node_modules/crypto-js/sha3.js", "../node_modules/crypto-js/ripemd160.js", "../node_modules/crypto-js/hmac.js", "../node_modules/crypto-js/pbkdf2.js", "../node_modules/crypto-js/evpkdf.js", "../node_modules/crypto-js/cipher-core.js", "../node_modules/crypto-js/mode-cfb.js", "../node_modules/crypto-js/mode-ctr.js", "../node_modules/crypto-js/mode-ctr-gladman.js", "../node_modules/crypto-js/mode-ofb.js", "../node_modules/crypto-js/mode-ecb.js", "../node_modules/crypto-js/pad-ansix923.js", "../node_modules/crypto-js/pad-iso10126.js", "../node_modules/crypto-js/pad-iso97971.js", "../node_modules/crypto-js/pad-zeropadding.js", "../node_modules/crypto-js/pad-nopadding.js", "../node_modules/crypto-js/format-hex.js", "../node_modules/crypto-js/aes.js", "../node_modules/crypto-js/tripledes.js", "../node_modules/crypto-js/rc4.js", "../node_modules/crypto-js/rabbit.js", "../node_modules/crypto-js/rabbit-legacy.js", "../node_modules/crypto-js/blowfish.js", "../node_modules/crypto-js/index.js", "../package.json", "../data/list.json", "../scripts/setupGlobal.ts", "../scripts/setProps.ts", "../tools/ai/index.ts", "../tools/anchor/index.ts", "../tools/array/index.ts", "../tools/audio/index.ts", "../tools/avoid/index.ts", "../data/status.json", "../tools/browser/index.ts", "../tools/check/index.ts", "../tools/color/index.ts", "../tools/cookie/index.ts", "../tools/coords/index.ts", "../app.json", "../tools/credits/index.ts", "../tools/date/language.json", "../tools/date/index.ts", "../tools/disable/index.ts", "../tools/dispatch/index.ts", "../tools/elements/index.ts", "../tools/events/index.ts", "../tools/fetch/index.ts", "../tools/form/index.ts", "../tools/format/index.ts", "../tools/json/index.ts", "../tools/load/index.ts", "../tools/logging/index.ts", "../tools/math/index.ts", "../tools/memory/index.ts", "../tools/navigation/index.ts", "../tools/objects/index.ts", "../tools/path/index.ts", "../tools/promise/index.ts", "../tools/sanitize/index.ts", "../tools/screen/popupManager.ts", "../tools/screen/index.ts", "../tools/scrollbar/index.ts", "../tools/security/index.ts", "../tools/shortcut/index.ts", "../tools/socket/index.ts", "../tools/sse/index.ts", "../tools/svg/index.ts", "../tools/sync/index.ts", "../tools/system/index.ts", "../tools/text/index.ts", "../tools/timer/index.ts", "../tools/tools/index.ts", "../tools/translators/index.ts", "../tools/triggers/index.ts", "../tools/types/index.ts", "../tools/ui/index.ts", "../tools/window/index.ts", "../index.ts"],
|
|
4
|
-
"sourcesContent": [";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));", ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));", ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));", ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));", ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));", ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64url encoding strategy.\n\t */\n\t var Base64url = C_enc.Base64url = {\n\t /**\n\t * Converts a word array to a Base64url string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {string} The Base64url string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n\t */\n\t stringify: function (wordArray, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = urlSafe ? this._safe_map : this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64url string to a word array.\n\t *\n\t * @param {string} base64Str The Base64url string.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n\t */\n\t parse: function (base64Str, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = urlSafe ? this._safe_map : this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64url;\n\n}));", ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));", ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));", ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t var Wil;\n\t var Wih;\n\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t Wih = Wi.high = M[offset + i * 2] | 0;\n\t Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t Wil = gamma0l + Wi7l;\n\t Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t Wil = Wil + gamma1l;\n\t Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t Wil = Wil + Wi16l;\n\t Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t var tMsw;\n\t var tLsw;\n\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));", ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by C\u00E9dric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<<n) | (x>>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));", ";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA256\n\t * @property {number} iterations The number of iterations to perform. Default: 250000\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA256,\n\t iterations: 250000\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt, hasher) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t if (!hasher) {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t } else {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);\n\t }\n\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t var keystream;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t data.sigBytes = i + 1;\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t }\n\n\t // Extend the key according to the keying options defined in 3DES standard\n\t var key1 = keyWords.slice(0, 2);\n\t var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t const N = 16;\n\n\t //Origin pbox and sbox, derived from PI\n\t const ORIG_P = [\n\t 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,\n\t 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,\n\t 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,\n\t 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,\n\t 0x9216D5D9, 0x8979FB1B\n\t ];\n\n\t const ORIG_S = [\n\t [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,\n\t 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,\n\t 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,\n\t 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,\n\t 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,\n\t 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,\n\t 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,\n\t 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,\n\t 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\n\t 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,\n\t 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,\n\t 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,\n\t 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,\n\t 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,\n\t 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,\n\t 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,\n\t 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,\n\t 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\n\t 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,\n\t 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,\n\t 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,\n\t 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,\n\t 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,\n\t 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,\n\t 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,\n\t 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,\n\t 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\n\t 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,\n\t 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,\n\t 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,\n\t 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,\n\t 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,\n\t 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,\n\t 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,\n\t 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,\n\t 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\n\t 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,\n\t 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,\n\t 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,\n\t 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,\n\t 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,\n\t 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,\n\t 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,\n\t 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,\n\t 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\n\t 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,\n\t 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,\n\t 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,\n\t 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,\n\t 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,\n\t 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,\n\t 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,\n\t 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,\n\t 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\n\t 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,\n\t 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,\n\t 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,\n\t 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,\n\t 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,\n\t 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,\n\t 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,\n\t 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,\n\t 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\n\t 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ],\n\t [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,\n\t 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,\n\t 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,\n\t 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,\n\t 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,\n\t 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,\n\t 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,\n\t 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,\n\t 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\n\t 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,\n\t 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,\n\t 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,\n\t 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,\n\t 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,\n\t 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,\n\t 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,\n\t 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,\n\t 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\n\t 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,\n\t 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,\n\t 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,\n\t 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,\n\t 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,\n\t 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,\n\t 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,\n\t 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,\n\t 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\n\t 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,\n\t 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,\n\t 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,\n\t 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,\n\t 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,\n\t 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,\n\t 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,\n\t 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,\n\t 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\n\t 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,\n\t 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,\n\t 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,\n\t 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,\n\t 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,\n\t 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,\n\t 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,\n\t 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,\n\t 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\n\t 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,\n\t 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,\n\t 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,\n\t 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,\n\t 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,\n\t 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,\n\t 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,\n\t 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,\n\t 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\n\t 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,\n\t 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,\n\t 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,\n\t 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,\n\t 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,\n\t 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,\n\t 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,\n\t 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,\n\t 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\n\t 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ],\n\t [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,\n\t 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,\n\t 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,\n\t 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,\n\t 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,\n\t 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,\n\t 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,\n\t 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,\n\t 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\n\t 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,\n\t 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,\n\t 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,\n\t 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,\n\t 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,\n\t 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,\n\t 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,\n\t 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,\n\t 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\n\t 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,\n\t 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,\n\t 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,\n\t 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,\n\t 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,\n\t 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,\n\t 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,\n\t 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,\n\t 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\n\t 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,\n\t 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,\n\t 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,\n\t 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,\n\t 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,\n\t 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,\n\t 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,\n\t 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,\n\t 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\n\t 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,\n\t 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,\n\t 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,\n\t 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,\n\t 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,\n\t 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,\n\t 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,\n\t 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,\n\t 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\n\t 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,\n\t 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,\n\t 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,\n\t 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,\n\t 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,\n\t 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,\n\t 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,\n\t 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,\n\t 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\n\t 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,\n\t 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,\n\t 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,\n\t 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,\n\t 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,\n\t 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,\n\t 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,\n\t 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,\n\t 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\n\t 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ],\n\t [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,\n\t 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,\n\t 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,\n\t 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,\n\t 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,\n\t 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,\n\t 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,\n\t 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,\n\t 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\n\t 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,\n\t 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,\n\t 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,\n\t 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,\n\t 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,\n\t 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,\n\t 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,\n\t 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,\n\t 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\n\t 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,\n\t 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,\n\t 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,\n\t 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,\n\t 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,\n\t 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,\n\t 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,\n\t 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,\n\t 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\n\t 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,\n\t 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,\n\t 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,\n\t 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,\n\t 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,\n\t 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,\n\t 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,\n\t 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,\n\t 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\n\t 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,\n\t 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,\n\t 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,\n\t 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,\n\t 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,\n\t 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,\n\t 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,\n\t 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,\n\t 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\n\t 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,\n\t 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,\n\t 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,\n\t 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,\n\t 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,\n\t 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,\n\t 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,\n\t 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,\n\t 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\n\t 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,\n\t 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,\n\t 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,\n\t 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,\n\t 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,\n\t 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,\n\t 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,\n\t 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,\n\t 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\n\t 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ]\n\t ];\n\n\t var BLOWFISH_CTX = {\n\t pbox: [],\n\t sbox: []\n\t }\n\n\t function F(ctx, x){\n\t let a = (x >> 24) & 0xFF;\n\t let b = (x >> 16) & 0xFF;\n\t let c = (x >> 8) & 0xFF;\n\t let d = x & 0xFF;\n\n\t let y = ctx.sbox[0][a] + ctx.sbox[1][b];\n\t y = y ^ ctx.sbox[2][c];\n\t y = y + ctx.sbox[3][d];\n\n\t return y;\n\t }\n\n\t function BlowFish_Encrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = 0; i < N; ++i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[N];\n\t Xl = Xl ^ ctx.pbox[N + 1];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t function BlowFish_Decrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = N + 1; i > 1; --i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[1];\n\t Xl = Xl ^ ctx.pbox[0];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t /**\n\t * Initialization ctx's pbox and sbox.\n\t *\n\t * @param {Object} ctx The object has pbox and sbox.\n\t * @param {Array} key An array of 32-bit words.\n\t * @param {int} keysize The length of the key.\n\t *\n\t * @example\n\t *\n\t * BlowFishInit(BLOWFISH_CTX, key, 128/32);\n\t */\n\t function BlowFishInit(ctx, key, keysize)\n\t {\n\t for(let Row = 0; Row < 4; Row++)\n\t {\n\t ctx.sbox[Row] = [];\n\t for(let Col = 0; Col < 256; Col++)\n\t {\n\t ctx.sbox[Row][Col] = ORIG_S[Row][Col];\n\t }\n\t }\n\n\t let keyIndex = 0;\n\t for(let index = 0; index < N + 2; index++)\n\t {\n\t ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];\n\t keyIndex++;\n\t if(keyIndex >= keysize)\n\t {\n\t keyIndex = 0;\n\t }\n\t }\n\n\t let Data1 = 0;\n\t let Data2 = 0;\n\t let res = 0;\n\t for(let i = 0; i < N + 2; i += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.pbox[i] = Data1;\n\t ctx.pbox[i + 1] = Data2;\n\t }\n\n\t for(let i = 0; i < 4; i++)\n\t {\n\t for(let j = 0; j < 256; j += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.sbox[i][j] = Data1;\n\t ctx.sbox[i][j + 1] = Data2;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t /**\n\t * Blowfish block cipher algorithm.\n\t */\n\t var Blowfish = C_algo.Blowfish = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t //Initialization pbox and sbox\n\t BlowFishInit(BLOWFISH_CTX, keyWords, keySize);\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t blockSize: 64/32,\n\n\t keySize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Blowfish = BlockCipher._createHelper(Blowfish);\n\t}());\n\n\n\treturn CryptoJS.Blowfish;\n\n}));", ";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"), require(\"./blowfish\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\", \"./blowfish\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));", "{\n \"name\": \"dphelper\",\n \"version\": \"3.1.7\",\n \"type\": \"module\",\n \"main\": \"index.js\",\n \"browser\": \"./dist/dphelper.umd.js\",\n \"description\": \"dphelper devtools for developers\",\n \"license\": \"MIT\",\n \"types\": \"./types/dphelper.d.ts\",\n \"typings\": \"./types/*\",\n \"copyright\": \"Dario Passariello\",\n \"homepage\": \"https://a51.gitbook.io/dphelper\",\n \"author\": \"Dario Passariello <dariopassariello@gmail.com>\",\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"support\": {\n \"name\": \"Dario Passariello\",\n \"url\": \"https://github.com/passariello/\",\n \"email\": \"dariopassariello@gmail.com\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/a51-dev/a51.dphelper.public.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/a51-dev/a51.dphelper.public/issues\"\n },\n \"contributors\": [\n {\n \"name\": \"Dario Passariello\",\n \"email\": \"dariopassariello@gmail.com\",\n \"url\": \"https://dario.passariello.ca/\"\n },\n {\n \"name\": \"Valeria Cala Scaglitta\",\n \"email\": \"valeriacalascaglitta@gmail.com\"\n }\n ],\n \"keywords\": [\n \"dphelper\",\n \"front-end\",\n \"back-end\",\n \"framework\",\n \"helper\",\n \"utils\",\n \"tools\",\n \"uuid\",\n \"random\",\n \"window\",\n \"store\",\n \"easy\",\n \"pro\",\n \"powerful\",\n \"state\",\n \"status\",\n \"dp helper\",\n \"local\",\n \"storage\",\n \"indexdb\",\n \"idb\",\n \"devtool\"\n ],\n \"funding\": [\n {\n \"type\": \"patreon\",\n \"url\": \"https://www.patreon.com/passariello\"\n }\n ],\n \"typing\": [\n \"types/*\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./types/dphelper.d.ts\",\n \"import\": \"./index.js\",\n \"default\": \"./index.js\"\n },\n \"./types/*\": \"./types/*\"\n },\n \"scripts\": {\n \"build\": \"rimraf dist && npm run generate-imports && node esbuild.config.mjs && node node_modules/typescript/bin/tsc -p tsconfig.json --emitDeclarationOnly && node scripts/patch-dist.mjs\",\n \"dev\": \"npm run generate-imports && node esbuild.config.mjs --watch-and-serve\",\n \"npm:pack\": \"npm run build && cd dist && npm pack\",\n \"npm:publish\": \"npm run build && npm publish ./dist --access public\",\n \"test\": \"cd tests && npm run test\",\n \"lint\": \"cd tests && npm run lint\",\n \"tsc\": \"cd tests && tsc --noEmit\",\n \"generate-imports\": \"tsx scripts/generate-imports.ts\"\n },\n \"devDependencies\": {\n \"crypto-js\": \"4.2.0\",\n \"@jest/globals\": \"^30.2.0\",\n \"@types/crypto-js\": \"4.2.2\",\n \"@types/node\": \"^25.3.2\",\n \"esbuild\": \"0.27.3\",\n \"esbuild-node-externals\": \"1.20.1\",\n \"esbuild-plugin-alias\": \"0.2.1\",\n \"esbuild-plugin-copy\": \"2.1.1\",\n \"esbuild-sass-plugin\": \"3.6.0\",\n \"esbuild-scss-modules-plugin\": \"1.1.1\",\n \"rimraf\": \"6.1.3\",\n \"tslib\": \"^2.8.1\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"5.9.3\"\n }\n}", "{\r\n \"info\": {\r\n \"title\": \"List\",\r\n \"description\": \"Complete list of tools\"\r\n },\r\n \"categories\": [\r\n \"3party\",\r\n \"system\",\r\n \"financial\",\r\n \"memory\",\r\n \"numbers\",\r\n \"time\",\r\n \"path\",\r\n \"file\",\r\n \"forms\",\r\n \"ui\",\r\n \"other\",\r\n \"development\"\r\n ]\r\n}\r\n", "/// <reference path=\"../types/dphelper.d.ts\" />\r\nimport pk from \"../package.json\"\r\nimport _list from \"../data/list.json\"\r\n\r\nconst dpHelper = globalThis.dphelper as _dphelper | undefined\r\n\r\nif (dpHelper && dpHelper.version && dpHelper.version < (pk as any).version) {\r\n try {\r\n delete (globalThis as { dphelper?: unknown }).dphelper\r\n } catch (e) {\r\n console.debug('Could not delete existing dphelper (likely non-configurable)')\r\n }\r\n}\r\n\r\n// Check if property already exists and is not configurable\r\nconst existingDescriptor = Object.getOwnPropertyDescriptor(globalThis, 'dphelper')\r\n\r\nif (existingDescriptor && !existingDescriptor.configurable) {\r\n // Property exists and can't be modified via defineProperty\r\n // If it's writable, we can still assign to it\r\n if (existingDescriptor.writable) {\r\n if (globalThis.dphelper === undefined) {\r\n (globalThis as any).dphelper = {}\r\n }\r\n } else {\r\n console.debug('dphelper already defined on globalThis and is not writable/configurable')\r\n }\r\n} else {\r\n Object.defineProperty(\r\n globalThis,\r\n \"dphelper\",\r\n {\r\n value: (globalThis as any).dphelper || {},\r\n writable: true,\r\n configurable: true,\r\n enumerable: false\r\n }\r\n )\r\n}\r\n\r\nif (globalThis.dphelper) {\r\n Object.defineProperties(\r\n (globalThis as any).dphelper,\r\n {\r\n _list: {\r\n value: {\r\n scripts: [],\r\n sockets: [],\r\n ...(_list as object)\r\n },\r\n configurable: true,\r\n writable: true\r\n },\r\n version: {\r\n value: (pk as any).version,\r\n configurable: true,\r\n writable: true\r\n },\r\n isServer: {\r\n value: typeof window === \"undefined\",\r\n configurable: true,\r\n writable: true\r\n },\r\n isBrowser: {\r\n value: typeof window !== \"undefined\",\r\n configurable: true,\r\n writable: true\r\n }\r\n }\r\n )\r\n}\r\n", "///\r\n\r\n///\r\n\r\nconst helper = (globalThis as any).dphelper\r\n\r\nObject.defineProperty(\r\n helper,\r\n \"setProps\",\r\n {\r\n value: (root: unknown, desc: { name: string }, options: { lock?: boolean; writable?: boolean; configurable?: boolean; enumerable?: boolean } | undefined) => {\r\n Object.defineProperty(\r\n root as object,\r\n desc.name,\r\n options || {\r\n writable: false,\r\n configurable: false,\r\n enumerable: false\r\n }\r\n )\r\n if (options?.lock) Object.freeze((root as Record<string, unknown>)[desc.name])\r\n },\r\n writable: false,\r\n configurable: false,\r\n enumerable: false\r\n }\r\n)\r\n\r\n///\r\n\r\n// PROPERTY SETTER\r\nObject.defineProperty(\r\n helper,\r\n \"setDescription\",\r\n {\r\n value: (description: Description, obj: object) => {\r\n // set tool properties\r\n Object.defineProperties(\r\n helper,\r\n {\r\n [description.name]: {\r\n value: obj,\r\n writable: false,\r\n configurable: false,\r\n enumerable: false\r\n }\r\n }\r\n )\r\n\r\n // subCommands\r\n Object.keys(obj).map(\r\n (key) => {\r\n // set tool properties\r\n Object.defineProperties(\r\n helper[description.name], {\r\n [key]: {\r\n writable: false,\r\n configurable: false,\r\n enumerable: false\r\n }\r\n }\r\n )\r\n return null\r\n }\r\n )\r\n\r\n // generate description\r\n helper.setProps(\r\n helper,\r\n description,\r\n {\r\n writable: false,\r\n configurable: false,\r\n enumerable: false\r\n }\r\n )\r\n\r\n // Send to list\r\n helper._list.scripts.push(description)\r\n }\r\n }\r\n)\r\n", "\r\nconst description: Description = {\r\n name: \"ai\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"tokenCount\",\r\n version: \"0.0.3\",\r\n example: \"dphelper.ai.tokenCount({ users: [1,2,3] })\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260220\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Estimate token count for LLMs. If an object is passed, it uses TOON format for calculation.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"smartSanitize\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.ai.smartSanitize('My email is test@example.com')\",\r\n author: \"Dario Passariello & Jo\",\r\n creationDate: \"20260220\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Remove PII (emails, phones, etc) from text for AI privacy\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toon\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.ai.toon({ users: [{id: 1, name: 'Ada'}] })\",\r\n author: \"TOON + Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Convert JSON to TOON format (Token-Oriented Object Notation)\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toonToJson\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.ai.toonToJson('users[1]{id,name}:\\\\n 1,Ada')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Convert TOON format back to JSON/Object\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"chunker\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.ai.chunker(text, { size: 1000, overlap: 200 })\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Split long text into chunks for RAG or AI processing.\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"similarity\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.ai.similarity(vecA, vecB)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Calculate cosine similarity between two embedding vectors.\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"extractReasoning\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.ai.extractReasoning(aiResponse)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Extract <think> tags or internal reasoning from AI responses.\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"prompt\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.ai.prompt('Hello {{name}}', { name: 'Ada' })\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Simple prompt template engine with variable injection.\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"schema\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.ai.schema({ id: 1, name: 'Ada' })\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Generate a TOON-style schema definition for AI instructions.\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"snapshot\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.ai.snapshot()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Capture a 'mental snapshot' of the app state (logs/globals) in TOON format for AI debugging.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n},\r\n isPrimitive = (v: any) => v === null || typeof v !== \"object\",\r\n stringifyToon = (v: any): string => {\r\n if (v === null) return \"null\"\r\n if (typeof v === \"string\") {\r\n if (v.includes(\",\") || v.includes(\":\") || v.includes(\"\\\"\") || v.includes(\"\\n\") || v.trim() !== v) {\r\n return `\"${v.replace(/\"/g, \"\\\\\\\"\")}\"`\r\n }\r\n return v || \"\\\"\\\"\"\r\n }\r\n return String(v)\r\n },\r\n encodeToon = (val: any, depth = 0): string => {\r\n const indent = \" \".repeat(depth)\r\n if (isPrimitive(val)) return stringifyToon(val)\r\n\r\n if (Array.isArray(val)) {\r\n if (val.length === 0) return \"[0]:\"\r\n const first = val[0]\r\n if (!isPrimitive(first) && !Array.isArray(first)) {\r\n const keys = Object.keys(first)\r\n let out = `[${val.length}]{${keys.join(\",\")}}:`\r\n for (const item of val) {\r\n const row = keys.map((k) => stringifyToon(item[k])).join(\",\")\r\n out += `\\n${indent} ${row}`\r\n }\r\n return out\r\n } else {\r\n return `[${val.length}]: ` + val.map(stringifyToon).join(\",\")\r\n }\r\n } else {\r\n return Object.entries(val)\r\n .map(([k, v]) => {\r\n const key = (k.includes(\" \") || k.includes(\":\")) ? `\"${k}\"` : k\r\n if (!isPrimitive(v)) {\r\n const sub = encodeToon(v, depth + 1)\r\n return sub.startsWith(\"[\") ? `${key}${sub}` : `${key}:\\n ${indent}${sub}`\r\n }\r\n return `${key}: ${stringifyToon(v)}`\r\n })\r\n .join(`\\n${indent}`)\r\n }\r\n }, newObj = {\r\n /**\r\n * Estimate token count for LLMs.\r\n */\r\n tokenCount: (data: any): number => {\r\n const text = typeof data === \"string\" ? data : encodeToon(data)\r\n if (!text) return 0\r\n const words = text.trim().split(/\\s+/).length, chars = text.length\r\n return Math.ceil((chars / 4 + words * 1.3) / 2)\r\n },\r\n\r\n /**\r\n * Remove PII from text.\r\n */\r\n smartSanitize: (text: string): string => {\r\n if (!text) return \"\"\r\n return text\r\n .replace(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/g, \"[EMAIL]\")\r\n .replace(/(?:\\+?\\d{1,3}[- ]?)?\\(?\\d{3}\\)?[- ]?\\d{3}[- ]?\\d{4}/g, \"[PHONE]\")\r\n .replace(/\\b\\d{4}[- ]?\\d{4}[- ]?\\d{4}[- ]?\\d{4}\\b/g, \"[CREDIT_CARD]\")\r\n .replace(/\\b\\d{3}-\\d{2}-\\d{4}\\b/g, \"[SSN]\")\r\n },\r\n\r\n toon: (data: any): string => encodeToon(data),\r\n\r\n toonToJson: (toon: string): any => {\r\n if (!toon) return null\r\n const lines = toon.split(\"\\n\").filter((l) => l.trim() !== \"\"), result: any = {}, stack: { indent: number, obj: any, key?: string, fields?: string[] }[] = [{ indent: -1, obj: result }], parseValue = (v: string) => {\r\n v = v.trim()\r\n if (v === \"true\") return true\r\n if (v === \"false\") return false\r\n if (v === \"null\") return null\r\n if (!isNaN(Number(v)) && v !== \"\") return Number(v)\r\n if (v.startsWith(\"\\\"\") && v.endsWith(\"\\\"\")) return v.slice(1, -1).replace(/\\\\\"/g, \"\\\"\")\r\n return v\r\n }, parseRow = (row: string) => {\r\n const parts: string[] = []\r\n let current = \"\", inQuotes = false\r\n for (let i = 0; i < row.length; i++) {\r\n const char = row[i]\r\n if (char === \"\\\"\" && row[i - 1] !== \"\\\\\") inQuotes = !inQuotes\r\n else if (char === \",\" && !inQuotes) {\r\n parts.push(current.trim())\r\n current = \"\"\r\n } else current += char\r\n }\r\n parts.push(current.trim())\r\n return parts.map(parseValue)\r\n }\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i]!, indent = line.search(/\\S/), content = line.trim()\r\n if (!content) continue\r\n while (stack.length > 1 && indent <= stack[stack.length - 1]!.indent) stack.pop()\r\n const current = stack[stack.length - 1]!\r\n if (current.fields) {\r\n const values = parseRow(content), item: any = {}\r\n current.fields.forEach((f, idx) => item[f] = values[idx])\r\n current.obj.push(item)\r\n continue\r\n }\r\n const colonIdx = content.indexOf(\":\")\r\n if (colonIdx === -1) continue\r\n const keyPart = content.slice(0, colonIdx).trim(), valPart = content.slice(colonIdx + 1).trim(), arrayMatch = keyPart.match(/^(.+?)\\[(\\d+)\\](?:{(.+?)})?$/)\r\n if (arrayMatch) {\r\n const [_, key, _length, fieldsStr] = arrayMatch, arr: any[] = []\r\n current.obj[key!] = arr\r\n if (fieldsStr) stack.push({ indent, obj: arr, key: key!, fields: fieldsStr.split(\",\").map(f => f.trim()) })\r\n else if (valPart) parseRow(valPart).forEach(v => arr.push(v))\r\n else stack.push({ indent, obj: arr, key: key! })\r\n } else {\r\n const nextLine = lines[i + 1], nextIndent = nextLine ? nextLine.search(/\\S/) : -1\r\n if (valPart === \"\" && nextIndent > indent) {\r\n const nextObj = {}\r\n current.obj[keyPart] = nextObj\r\n stack.push({ indent, obj: nextObj, key: keyPart })\r\n } else current.obj[keyPart] = parseValue(valPart)\r\n }\r\n }\r\n return result\r\n },\r\n\r\n /**\r\n * Split text into chunks with overlap.\r\n */\r\n chunker: (text: string, options: { size?: number, overlap?: number } = {}): string[] => {\r\n if (!text) return []\r\n const size = options.size || 1000, overlap = options.overlap || 200, chunks: string[] = []\r\n let start = 0\r\n while (start < text.length) {\r\n chunks.push(text.slice(start, start + size))\r\n start += (size - overlap)\r\n }\r\n return chunks\r\n },\r\n\r\n /**\r\n * Cosine similarity between two vectors.\r\n */\r\n similarity: (a: number[], b: number[]): number => {\r\n if (a.length !== b.length) return 0\r\n let dot = 0, mA = 0, mB = 0\r\n for (let i = 0; i < a.length; i++) {\r\n dot += a[i]! * b[i]!\r\n mA += a[i]! * a[i]!\r\n mB += b[i]! * b[i]!\r\n }\r\n return dot / (Math.sqrt(mA) * Math.sqrt(mB))\r\n },\r\n\r\n /**\r\n * Extract or separate reasoning from AI response.\r\n */\r\n extractReasoning: (text: string): { reasoning: string, content: string } => {\r\n const match = text.match(/<think>([\\s\\S]*?)<\\/think>/)\r\n return {\r\n reasoning: match ? match[1]!.trim() : \"\",\r\n content: text.replace(/<think>[\\s\\S]*?<\\/think>/, \"\").trim()\r\n }\r\n },\r\n\r\n /**\r\n * Simple prompt template engine.\r\n */\r\n prompt: (template: string, vars: Record<string, any>): string => {\r\n return template.replace(/{{(.*?)}}/g, (_, key) => {\r\n const val = vars[key.trim()]\r\n return val !== undefined ? (typeof val === \"object\" ? encodeToon(val) : String(val)) : `{{${key}}}`\r\n })\r\n },\r\n\r\n /**\r\n * Generate TOON-style schema definition from object.\r\n */\r\n schema: (data: any): string => {\r\n const getType = (v: any): string => {\r\n if (v === null) return \"any\"\r\n if (Array.isArray(v)) {\r\n if (v.length > 0 && typeof v[0] === \"object\") {\r\n return `Array<{${Object.keys(v[0]).map(k => `${k}:${getType(v[0][k])}`).join(\", \")}}>`\r\n }\r\n return \"Array<primitive>\"\r\n }\r\n return typeof v\r\n }\r\n if (typeof data !== \"object\" || data === null) return getType(data)\r\n return Object.entries(data)\r\n .map(([k, v]) => `${k}: ${getType(v)}`)\r\n .join(\"\\n\")\r\n },\r\n\r\n /**\r\n * Capture the 'mental state' of the app for AI debugging.\r\n * Automatically sanitizes PII (emails, phones, etc) for security.\r\n */\r\n snapshot: (): string => {\r\n const isBrowser = typeof window !== \"undefined\", rawData: any = {\r\n context: {\r\n env: isBrowser ? \"browser\" : \"server\",\r\n time: new Date().toISOString(),\r\n }\r\n }\r\n if (isBrowser) {\r\n rawData.context.url = window.location.href.split(\"?\")[0]\r\n rawData.context.title = document.title\r\n rawData.state = (window as any).gState || \"No global state detected\"\r\n rawData.logs = dphelper?.log?.list?.()?.slice(-10) || []\r\n // NIST SI-10: Sanitized system info - no PII exposed\r\n rawData.system = {\r\n lang: navigator.language,\r\n screen: `${window.screen.width}x${window.screen.height}`,\r\n zoom: dphelper?.browser?.zoom?.() || 100\r\n }\r\n } else {\r\n rawData.system = {\r\n platform: typeof process !== \"undefined\" ? process.platform : \"unknown\",\r\n node: typeof process !== \"undefined\" ? process.version : \"unknown\",\r\n arch: typeof process !== \"undefined\" ? process.arch : \"unknown\"\r\n }\r\n }\r\n\r\n const toon = encodeToon(rawData)\r\n return newObj.smartSanitize(toon)\r\n }\r\n }\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"anchor\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"toOnClick\",\r\n type: \"function\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.anchor.toOnClick([element, 'foo' | '.foo' | '#foo'])\",\r\n description: `This tool allows you to convert all links in an element to 'onclick'.\r\n It allows you to avoid the message with the path relative to the requested address\r\n and it is very useful when you work with SPA but you want to keep even older browsers.`,\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\", lastMod: \"20260220\",\r\n active: true,\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Converts all links in an element to 'onclick' events.\r\n * @param el The selector of the element containing the links.\r\n */\r\n toOnClick: (el: string): void => {\r\n const container = document.querySelector(el)\r\n if (!container) return\r\n const anchors = container.querySelectorAll(\"a\")\r\n\r\n anchors.forEach((anchor) => {\r\n const href = anchor.getAttribute(\"href\")\r\n if (!href) return\r\n\r\n anchor.style.cursor = \"pointer\"\r\n\r\n // PathRail logic\r\n const pathClass = dphelper.pathRail()?.[3]?.replace(/\\//g, \"\") || \"\"\r\n if (pathClass) anchor.classList.add(pathClass)\r\n\r\n // SPA Modern approach\r\n const newAnchor = anchor.cloneNode(true) as HTMLAnchorElement\r\n anchor.parentNode?.replaceChild(newAnchor, anchor)\r\n newAnchor.removeAttribute(\"href\")\r\n\r\n newAnchor.addEventListener(\"mouseup\", (e) => {\r\n if (href.startsWith('/')) {\r\n history.pushState({ href: href }, '', href)\r\n dphelper.navigation.load(href)\r\n e.stopPropagation()\r\n } else {\r\n dphelper.browser.href(href)\r\n }\r\n })\r\n })\r\n }\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"array\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"find\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.find(array, 'key')\",\r\n description: \"Find an item in the array recursively.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"delete\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.delete(array, 'key')\",\r\n description: \"Delete an item from the array recursively.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"unique\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.unique(array)\",\r\n description: \"Remove duplicate values from an array.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"merge\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.merge(arrA, arrB)\",\r\n description: \"Merge two arrays into one.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"mergeByKey\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.mergeByKey(arrA, arrB, 'id')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230603\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Merge two arrays of objects by a specific key.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"asc\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.asc(array)\",\r\n description: \"Sort array in ascending order.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"desc\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.desc(array)\",\r\n description: \"Sort array in descending order.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"duplicates\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.duplicates(array)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Find duplicate items in an array.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"even\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.even(array)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Filter even numbers from an array.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"odd\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.odd(array)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Filter odd numbers from an array.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toObj\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.toObj(array)\",\r\n description: \"Convert an array to an object.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"sumColumn\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.sumColumn(arr, 0)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Sum the values of a specified column in a multidimensional array.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"shuffle\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.shuffle(array)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230527\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Randomly shuffle the elements of an array.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"generate\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.generate(10)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230527\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Generate an array of random numbers (max 500000).\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"testArrayInt\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.testArrayInt([1,2,4])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230527\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Check if an array contains consecutive integers.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"rand32\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.rand32(5)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230527\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Generate an array of random 32-bit unsigned integers.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"findindex\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.findindex(array, 'name')\",\r\n description: \"Find the index of an item in an array by key.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"pathToJson\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.pathToJson(paths, '/')\",\r\n description: \"Convert an array of paths into a JSON object.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"deepClone\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.deepClone(array)\",\r\n description: \"Create a deep clone of an array using structuredClone.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"match\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.array.match(arrA, arrB)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20250101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Find a perfect match between an array of words and an array to check.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Find an item in the array.\r\n */\r\n find: (array: any, key: any) => {\r\n if (!Array.isArray(array)) return\r\n for (const node of array) {\r\n if (node[key] === key) return node\r\n if (node.children) {\r\n const finalNode = dphelper.array.find(key, node.children)\r\n if (finalNode) return finalNode\r\n }\r\n }\r\n return false\r\n },\r\n\r\n /**\r\n * Delete an item from the array.\r\n */\r\n delete: (array: any, key: any) => {\r\n if (!Array.isArray(array)) return\r\n array.some(function iter(o, i, a) {\r\n if (o[key] === key) {\r\n a.splice(i, 1)\r\n return true\r\n }\r\n for (const k of Object.keys(o)) {\r\n const value = o[k]\r\n if (Array.isArray(value)) return value.some(iter)\r\n }\r\n return null\r\n })\r\n },\r\n\r\n /**\r\n * Merge two arrays into one.\r\n * @protected - Uses safe merge to prevent prototype pollution\r\n */\r\n merge: (arrayA: any, arrayB: any) => {\r\n if (!(arrayA && arrayB)) return arrayB || arrayA\r\n for (const key of Object.keys(arrayA)) {\r\n // Skip dangerous prototype properties\r\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') continue\r\n if (arrayA[key] instanceof Object && arrayB[key]) {\r\n Object.assign(arrayA[key], dphelper.array.merge(arrayB[key], arrayA[key]))\r\n }\r\n }\r\n return Object.assign(arrayB, arrayA)\r\n },\r\n\r\n /**\r\n * Merge two arrays by a specified key.\r\n */\r\n mergeByKey: (arrayA: any, arrayB: any, key: any) => {\r\n return arrayA.map((item: any) => {\r\n const match = arrayB.find((o: any) => item[key] === o[key])\r\n return match ? Object.assign({}, item, match) : item\r\n })\r\n },\r\n\r\n /**\r\n * Find duplicate items in an array.\r\n */\r\n duplicates: (array: any) => {\r\n if (!Array.isArray(array)) return\r\n const seen = new Set(), duplicates = new Set()\r\n for (const item of array) {\r\n if (seen.has(item)) {\r\n duplicates.add(item)\r\n } else {\r\n seen.add(item)\r\n }\r\n }\r\n return Array.from(duplicates)\r\n },\r\n\r\n /**\r\n * Filter even numbers from an array.\r\n */\r\n even: (array: any) => {\r\n if (!Array.isArray(array)) return\r\n return array.filter((item: any) => item % 2 === 0)\r\n },\r\n\r\n /**\r\n * Filter odd numbers from an array.\r\n */\r\n odd: (array: any) => {\r\n if (!Array.isArray(array)) return\r\n return array.filter((item: any) => item % 2 !== 0)\r\n },\r\n\r\n /**\r\n * Sum the values of a specified column in a multidimensional array.\r\n */\r\n sumColumn: (array: any = [], column = 0) => {\r\n if (!Array.isArray(array)) return \"provide a multidimensional array\"\r\n if (typeof column === \"undefined\") return \"provide a column\"\r\n return array.reduce((acc, row) => acc + (row[column] || 0), 0)\r\n },\r\n\r\n /**\r\n * Shuffle the elements of an array.\r\n */\r\n shuffle: (array: any) => {\r\n if (!Array.isArray(array)) return\r\n for (let i = array.length - 1; i > 0; i--) {\r\n const j = Math.floor(Math.random() * (i + 1))\r\n ;[array[i], array[j]] = [array[j], array[i]]\r\n }\r\n return array\r\n },\r\n\r\n /**\r\n * Generate an array of random numbers.\r\n */\r\n generate: (num: number) => {\r\n if (Number.isNaN(num)) return\r\n const array = Array.from({ length: num }, (_, i) => i + 1)\r\n return dphelper.array.shuffle(array)\r\n },\r\n\r\n /**\r\n * Test if an array contains consecutive integers.\r\n */\r\n testArrayInt: (array: any) => {\r\n if (!Array.isArray(array)) return\r\n const missingNumbers = []\r\n for (let i = 1; i <= array.length; i++) {\r\n if (!array.includes(i)) {\r\n missingNumbers.push(i)\r\n }\r\n }\r\n return missingNumbers\r\n },\r\n\r\n /**\r\n * Generate an array of random 32-bit unsigned integers.\r\n */\r\n rand32: (number: any) => {\r\n const t0 = performance.now(),\r\n array: any = []\r\n array.nums = []\r\n array.time = []\r\n for (let i = 0; i < number; ++i) {\r\n array.nums.push(crypto.getRandomValues(new Uint32Array(1))[0])\r\n }\r\n const t1 = performance.now()\r\n array.time.push(t1 - t0)\r\n return array\r\n },\r\n\r\n /**\r\n * Finds and returns the elements that are present in both input arrays.\r\n */\r\n match: (arrayOfWords: any, arrayToCheck: any) => {\r\n return arrayOfWords.filter((word: any) => arrayToCheck.includes(word))\r\n },\r\n\r\n /**\r\n * Convert an array of paths to a JSON object.\r\n */\r\n pathToJson: (array: string[], separator = \"/\") => {\r\n const out: Record<string, any> = {}\r\n let json: any\r\n\r\n for (const path of array) {\r\n json = out\r\n const parts = path.split(separator)\r\n for (const sub of parts.slice(1, -1)) {\r\n if (sub === \"\") return\r\n if (!(sub in json)) json[sub] = {}\r\n json = json[sub]\r\n }\r\n if (parts.at(-1)) {\r\n json[parts.at(-1)!] = null\r\n }\r\n }\r\n\r\n return out\r\n }\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst\r\n description: Description = {\r\n name: \"audio\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"play\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.audio.play([audiofile])\",\r\n description: \"Plays an audio file or removes all audio elements from the document.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240924\",\r\n lastMod: \"20240924\",\r\n type: \"function\",\r\n active: true,\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n },\r\n newObj = {\r\n /**\r\n * Plays an audio file if it is not already playing.\r\n * If no file is specified, removes all audio elements from the document.\r\n *\r\n * @param file - The name of the audio file to play.\r\n * @param path - The path to the audio file.\r\n * @param loop - Whether the audio should loop.\r\n */\r\n play: (file?: string, path = \"\", loop = false): void => {\r\n if (file) {\r\n if (!document.querySelector(`#audio_${file}`)) {\r\n const audio = document.createElement(\"audio\")\r\n audio.id = `audio_${file}`\r\n audio.dataset.dphelper = \"audio\"\r\n audio.src = path + file\r\n audio.loop = loop\r\n document.body.appendChild(audio)\r\n audio.load()\r\n audio.play()?.catch?.((error: any) => console.error(\"Error playing audio:\", error))\r\n }\r\n } else {\r\n // REMOVE ONLY DPHELPER AUDIO\r\n document.querySelectorAll(\"audio[data-dphelper='audio']\").forEach((el) => el.remove())\r\n }\r\n return\r\n }\r\n }\r\n\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"avoid\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"cache\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.avoid.cache()\",\r\n description: \"Appends a cache-busting query parameter to a given URI.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Appends a cache-busting query parameter to a given URI.\r\n *\r\n * @param uri - The URI to which the cache-busting parameter will be appended.\r\n * @returns The URI with the cache-busting parameter appended.\r\n */\r\n cache: (uri: string): string => {\r\n if (typeof uri !== \"string\") throw new Error(\"The provided URI must be a string\")\r\n return uri.concat(/\\?/.test(uri) ? \"&\" : \"?\", \"t=\", Math.random().toString(36).substring(2))\r\n }\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "{\r\n \"1xx\": {\r\n \"code\": \"1xx\",\r\n \"message\": \"Information\",\r\n \"description\": \"1xx codes are often interim responses for sharing connection status information. Not intended for final request or response action.\"\r\n },\r\n \"100\": {\r\n \"code\": 100,\r\n \"message\": \"Continue\",\r\n \"description\": \"The server has received the request headers, and the client should proceed to send the request body.\"\r\n },\r\n \"101\": {\r\n \"code\": 101,\r\n \"message\": \"Switching Protocols\",\r\n \"description\": \"The requester has asked the server to switch protocols.\"\r\n },\r\n \"102\": {\r\n \"code\": 102,\r\n \"message\": \"Processing\",\r\n \"description\": \"This code indicates that the server has received and is processing the request, but no response is available yet. This prevents the client from timing out and assuming the request was lost.\"\r\n },\r\n \"103\": {\r\n \"code\": 103,\r\n \"message\": \"Early Hints\",\r\n \"description\": \"Used to return some response headers before final HTTP message.\"\r\n },\r\n \"2xx\": {\r\n \"code\": \"2xx\",\r\n \"message\": \"Successful\",\r\n \"description\": \"2xx codes indicate successful responses usually this means the action requested by the client was received, understood and accepted successfully.\"\r\n },\r\n \"200\": {\r\n \"code\": 200,\r\n \"message\": \"OK\",\r\n \"description\": \"The request is OK (this is the standard response for successful HTTP requests).\"\r\n },\r\n \"201\": {\r\n \"code\": 201,\r\n \"message\": \"Created\",\r\n \"description\": \"The request has been fulfilled, and a new resource is created.\"\r\n },\r\n \"202\": {\r\n \"code\": 202,\r\n \"message\": \"Accepted\",\r\n \"description\": \"The request has been accepted for processing, but the processing has not been completed.\"\r\n },\r\n \"203\": {\r\n \"code\": 203,\r\n \"message\": \"Non-Authoritative Information\",\r\n \"description\": \"The request has been successfully processed, but is returning information that may be from another source.\"\r\n },\r\n \"204\": {\r\n \"code\": 204,\r\n \"message\": \"No Content\",\r\n \"description\": \"The request has been successfully processed, but is not returning any content.\"\r\n },\r\n \"205\": {\r\n \"code\": 205,\r\n \"message\": \"Reset Content\",\r\n \"description\": \"The request has been successfully processed, but is not returning any content, and requires that the requester reset the document view.\"\r\n },\r\n \"206\": {\r\n \"code\": 206,\r\n \"message\": \"Partial Content\",\r\n \"description\": \"The server is delivering only part of the resource due to a range header sent by the client.\"\r\n },\r\n \"207\": {\r\n \"code\": 207,\r\n \"message\": \"Multi-Status\",\r\n \"description\": \"The message body that follows is by default an XML message and can contain a number of separate response codes, depending on how many sub-requests were made.\"\r\n },\r\n \"208\": {\r\n \"code\": 208,\r\n \"message\": \"Already Reported\",\r\n \"description\": \"The members of a DAV binding have already been enumerated in a preceding part of the (multi-status) response, and are not being included again.\"\r\n },\r\n \"218\": {\r\n \"code\": 218,\r\n \"message\": \"This is fine (Apache Web Server)\",\r\n \"description\": \"Used as a catch-all error condition for allowing response bodies to flow through Apache when ProxyErrorOverride is enabled.\"\r\n },\r\n \"226\": {\r\n \"code\": 226,\r\n \"message\": \"IM Used\",\r\n \"description\": \"The server has fulfilled a request for the resource, and the response is a representation of the result of one or more instance-manipulations applied to the current instance.\"\r\n },\r\n \"3xx\": {\r\n \"code\": \"3xx\",\r\n \"message\": \"Redirection\",\r\n \"description\": \"3xx codes are a class of responses that suggest the User-Agent must follow another course of action to obtain the complete requested resource.\"\r\n },\r\n \"300\": {\r\n \"code\": 300,\r\n \"message\": \"Multiple Choices\",\r\n \"description\": \"A link list. The user can select a link and go to that location. Maximum five addresses.\"\r\n },\r\n \"301\": {\r\n \"code\": 301,\r\n \"message\": \"Moved Permanently\",\r\n \"description\": \"The requested page has moved to a new URL.\"\r\n },\r\n \"302\": {\r\n \"code\": 302,\r\n \"message\": \"Found\",\r\n \"description\": \"The requested page has moved temporarily to a new URL.\"\r\n },\r\n \"303\": {\r\n \"code\": 303,\r\n \"message\": \"See Other\",\r\n \"description\": \"The requested page can be found under a different URL.\"\r\n },\r\n \"304\": {\r\n \"code\": 304,\r\n \"message\": \"Not Modified\",\r\n \"description\": \"Indicates the requested page has not been modified since last requested.\"\r\n },\r\n \"306\": {\r\n \"code\": 306,\r\n \"message\": \"Switch Proxy\",\r\n \"description\": \"No longer used. Originally meant \\\"Subsequent requests should use the specified proxy.\\\"\"\r\n },\r\n \"307\": {\r\n \"code\": 307,\r\n \"message\": \"Temporary Redirect\",\r\n \"description\": \"The requested page has moved temporarily to a new URL.\"\r\n },\r\n \"308\": {\r\n \"code\": 308,\r\n \"message\": \"Resume Incomplete\",\r\n \"description\": \"Used in the resumable requests proposal to resume aborted PUT or POST requests.\"\r\n },\r\n \"4xx\": {\r\n \"code\": \"4xx\",\r\n \"message\": \"Client Error\",\r\n \"description\": \"4xx codes generally are error responses specifying an issue at the client\u2019s end. Potentially a network issue.\"\r\n },\r\n \"400\": {\r\n \"code\": 400,\r\n \"message\": \"Bad Request\",\r\n \"description\": \"The request cannot be fulfilled due to bad syntax.\"\r\n },\r\n \"401\": {\r\n \"code\": 401,\r\n \"message\": \"Unauthorized\",\r\n \"description\": \"The request was a legal request, but the server is refusing to respond to it. For use when authentication is possible but has failed or not yet been provided.\"\r\n },\r\n \"402\": {\r\n \"code\": 402,\r\n \"message\": \"Payment Required\",\r\n \"description\": \"Not yet implemented by RFC standards, but reserved for future use.\"\r\n },\r\n \"403\": {\r\n \"code\": 403,\r\n \"message\": \"Forbidden\",\r\n \"description\": \"The request was a legal request, but the server is refusing to respond to it.\"\r\n },\r\n \"404\": {\r\n \"code\": 404,\r\n \"message\": \"Not Found\",\r\n \"description\": \"The requested page could not be found but may be available again in the future.\"\r\n },\r\n \"405\": {\r\n \"code\": 405,\r\n \"message\": \"Method Not Allowed\",\r\n \"description\": \"A request was made of a page using a request method not supported by that page.\"\r\n },\r\n \"406\": {\r\n \"code\": 406,\r\n \"message\": \"Not Acceptable\",\r\n \"description\": \"The server can only generate a response that is not accepted by the client.\"\r\n },\r\n \"407\": {\r\n \"code\": 407,\r\n \"message\": \"Proxy Authentication Required\",\r\n \"description\": \"The client must first authenticate itself with the proxy.\"\r\n },\r\n \"408\": {\r\n \"code\": 408,\r\n \"message\": \"Request Timeout\",\r\n \"description\": \"The server timed out waiting for the request.\"\r\n },\r\n \"409\": {\r\n \"code\": 409,\r\n \"message\": \"Conflict\",\r\n \"description\": \"The request could not be completed because of a conflict in the request.\"\r\n },\r\n \"410\": {\r\n \"code\": 410,\r\n \"message\": \"Gone\",\r\n \"description\": \"The requested page is no longer available.\"\r\n },\r\n \"411\": {\r\n \"code\": 411,\r\n \"message\": \"Length Required\",\r\n \"description\": \"The \\\"Content-Length\\\" is not defined. The server will not accept the request without it.\"\r\n },\r\n \"412\": {\r\n \"code\": 412,\r\n \"message\": \"Precondition Failed\",\r\n \"description\": \"The precondition given in the request evaluated to false by the server.\"\r\n },\r\n \"413\": {\r\n \"code\": 413,\r\n \"message\": \"Request Entity Too Large\",\r\n \"description\": \"The server will not accept the request, because the request entity is too large.\"\r\n },\r\n \"414\": {\r\n \"code\": 414,\r\n \"message\": \"Request-URI Too Long\",\r\n \"description\": \"The server will not accept the request, because the URL is too long. Occurs when you convert a POST request to a GET request with a long query information.\"\r\n },\r\n \"415\": {\r\n \"code\": 415,\r\n \"message\": \"Unsupported Media Type\",\r\n \"description\": \"The server will not accept the request, because the media type is not supported.\"\r\n },\r\n \"416\": {\r\n \"code\": 416,\r\n \"message\": \"Requested Range Not Satisfiable\",\r\n \"description\": \"The client has asked for a portion of the file, but the server cannot supply that portion.\"\r\n },\r\n \"417\": {\r\n \"code\": 417,\r\n \"message\": \"Expectation Failed\",\r\n \"description\": \"The server cannot meet the requirements of the Expect request-header field.\"\r\n },\r\n \"418\": {\r\n \"code\": 418,\r\n \"message\": \"I'm a teapot\",\r\n \"description\": \"Any attempt to brew coffee with a teapot should result in the error code \\\"418 I'm a teapot\\\". The resulting entity body MAY be short and stout.\"\r\n },\r\n \"419\": {\r\n \"code\": 419,\r\n \"message\": \"Page Expired (Laravel Framework)\",\r\n \"description\": \"Used by the Laravel Framework when a CSRF Token is missing or expired.\"\r\n },\r\n \"420\": {\r\n \"code\": 420,\r\n \"message\": \"Method Failure (Spring Framework)\",\r\n \"description\": \"A deprecated response used by the Spring Framework when a method has failed.\"\r\n },\r\n \"421\": {\r\n \"code\": 421,\r\n \"message\": \"Misdirected Request\",\r\n \"description\": \"The request was directed at a server that is not able to produce a response (for example because a connection reuse).\"\r\n },\r\n \"422\": {\r\n \"code\": 422,\r\n \"message\": \"Unprocessable Entity\",\r\n \"description\": \"The request was well-formed but was unable to be followed due to semantic errors.\"\r\n },\r\n \"423\": {\r\n \"code\": 423,\r\n \"message\": \"Locked\",\r\n \"description\": \"The resource that is being accessed is locked.\"\r\n },\r\n \"424\": {\r\n \"code\": 424,\r\n \"message\": \"Failed Dependency\",\r\n \"description\": \"The request failed due to failure of a previous request (e.g., a PROPPATCH).\"\r\n },\r\n \"426\": {\r\n \"code\": 426,\r\n \"message\": \"Upgrade Required\",\r\n \"description\": \"The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field.\"\r\n },\r\n \"428\": {\r\n \"code\": 428,\r\n \"message\": \"Precondition Required\",\r\n \"description\": \"The origin server requires the request to be conditional.\"\r\n },\r\n \"429\": {\r\n \"code\": 429,\r\n \"message\": \"Too Many Requests\",\r\n \"description\": \"The user has sent too many requests in a given amount of time. Intended for use with rate limiting schemes.\"\r\n },\r\n \"431\": {\r\n \"code\": 431,\r\n \"message\": \"Request Header Fields Too Large\",\r\n \"description\": \"The server is unwilling to process the request because either an individual header field, or all the header fields collectively, are too large.\"\r\n },\r\n \"440\": {\r\n \"code\": 440,\r\n \"message\": \"Login Time-out\",\r\n \"description\": \"The client's session has expired and must log in again. (IIS)\"\r\n },\r\n \"444\": {\r\n \"code\": 444,\r\n \"message\": \"Connection Closed Without Response\",\r\n \"description\": \"A non-standard status code used to instruct nginx to close the connection without sending a response to the client, most commonly used to deny malicious or malformed requests.\"\r\n },\r\n \"449\": {\r\n \"code\": 449,\r\n \"message\": \"Retry With\",\r\n \"description\": \"The server cannot honour the request because the user has not provided the required information. (IIS)\"\r\n },\r\n \"450\": {\r\n \"code\": 450,\r\n \"message\": \"Blocked by Windows Parental Controls\",\r\n \"description\": \"The Microsoft extension code indicated when Windows Parental Controls are turned on and are blocking access to the requested webpage.\"\r\n },\r\n \"451\": {\r\n \"code\": 451,\r\n \"message\": \"Unavailable For Legal Reasons\",\r\n \"description\": \"A server operator has received a legal demand to deny access to a resource or to a set of resources that includes the requested resource.\"\r\n },\r\n \"494\": {\r\n \"code\": 494,\r\n \"message\": \"Request Header Too Large\",\r\n \"description\": \"Used by nginx to indicate the client sent too large of a request or header line that is too long.\"\r\n },\r\n \"495\": {\r\n \"code\": 495,\r\n \"message\": \"SSL Certificate Error\",\r\n \"description\": \"An expansion of the 400 Bad Request response code, used when the client has provided an invalid client certificate.\"\r\n },\r\n \"496\": {\r\n \"code\": 496,\r\n \"message\": \"SSL Certificate Required\",\r\n \"description\": \"An expansion of the 400 Bad Request response code, used when a client certificate is required but not provided.\"\r\n },\r\n \"497\": {\r\n \"code\": 497,\r\n \"message\": \"HTTP Request Sent to HTTPS Port\",\r\n \"description\": \"An expansion of the 400 Bad Request response code, used when the client has made a HTTP request to a port listening for HTTPS requests.\"\r\n },\r\n \"498\": {\r\n \"code\": 498,\r\n \"message\": \"Invalid Token (Esri)\",\r\n \"description\": \"Returned by ArcGIS for Server. Code 498 indicates an expired or otherwise invalid token.\"\r\n },\r\n \"499\": {\r\n \"code\": 499,\r\n \"message\": \"Client Closed Request\",\r\n \"description\": \"A non-standard status code introduced by nginx for the case when a client closes the connection while nginx is processing the request.\"\r\n },\r\n \"5xx\": {\r\n \"code\": \"5xx\",\r\n \"message\": \"Server Error\",\r\n \"description\": \"5xx error codes indicate that an error or unresolvable request occurred on the server side, whether that is a proxy or the origin host.\"\r\n },\r\n \"500\": {\r\n \"code\": 500,\r\n \"message\": \"Internal Server Error\",\r\n \"description\": \"An error has occurred in a server side script, a no more specific message is suitable.\"\r\n },\r\n \"501\": {\r\n \"code\": 501,\r\n \"message\": \"Not Implemented\",\r\n \"description\": \"The server either does not recognize the request method, or it lacks the ability to fulfill the request.\"\r\n },\r\n \"502\": {\r\n \"code\": 502,\r\n \"message\": \"Bad Gateway\",\r\n \"description\": \"The server was acting as a gateway or proxy and received an invalid response from the upstream server.\"\r\n },\r\n \"503\": {\r\n \"code\": 503,\r\n \"message\": \"Service Unavailable\",\r\n \"description\": \"The server is currently unavailable (overloaded or down).\"\r\n },\r\n \"504\": {\r\n \"code\": 504,\r\n \"message\": \"Gateway Timeout\",\r\n \"description\": \"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.\"\r\n },\r\n \"505\": {\r\n \"code\": 505,\r\n \"message\": \"HTTP Version Not Supported\",\r\n \"description\": \"The server does not support the HTTP protocol version used in the request.\"\r\n },\r\n \"506\": {\r\n \"code\": 506,\r\n \"message\": \"Variant Also Negotiates\",\r\n \"description\": \"Transparent content negotiation for the request results in a circular reference.\"\r\n },\r\n \"507\": {\r\n \"code\": 507,\r\n \"message\": \"Insufficient Storage\",\r\n \"description\": \"The server is unable to store the representation needed to complete the request.\"\r\n },\r\n \"508\": {\r\n \"code\": 508,\r\n \"message\": \"Loop Detected\",\r\n \"description\": \"The server detected an infinite loop while processing the request (sent instead of 208 Already Reported).\"\r\n },\r\n \"509\": {\r\n \"code\": 509,\r\n \"message\": \"Bandwidth Limit Exceeded\",\r\n \"description\": \"The server has exceeded the bandwidth specified by the server administrator; this is often used by shared hosting providers to limit the bandwidth of customers.\"\r\n },\r\n \"510\": {\r\n \"code\": 510,\r\n \"message\": \"Not Extended\",\r\n \"description\": \"Further extensions to the request are required for the server to fulfil it.\"\r\n },\r\n \"511\": {\r\n \"code\": 511,\r\n \"message\": \"Network Authentication Required\",\r\n \"description\": \"The client needs to authenticate to gain network access.\"\r\n },\r\n \"520\": {\r\n \"code\": 520,\r\n \"message\": \"Unknown Error\",\r\n \"description\": \"The 520 error is used as a \\\"catch-all response for when the origin server returns something unexpected\\\", listing connection resets, large headers, and empty or invalid responses as common triggers.\"\r\n },\r\n \"521\": {\r\n \"code\": 521,\r\n \"message\": \"Web Server Is Down\",\r\n \"description\": \"The origin server has refused the connection from Cloudflare.\"\r\n },\r\n \"522\": {\r\n \"code\": 522,\r\n \"message\": \"Connection Timed Out\",\r\n \"description\": \"Cloudflare could not negotiate a TCP handshake with the origin server.\"\r\n },\r\n \"523\": {\r\n \"code\": 523,\r\n \"message\": \"Origin Is Unreachable\",\r\n \"description\": \"Cloudflare could not reach the origin server; for example, if the DNS records for the origin server are incorrect.\"\r\n },\r\n \"524\": {\r\n \"code\": 524,\r\n \"message\": \"A Timeout Occurred\",\r\n \"description\": \"Cloudflare was able to complete a TCP connection to the origin server, but did not receive a timely HTTP response.\"\r\n },\r\n \"525\": {\r\n \"code\": 525,\r\n \"message\": \"SSL Handshake Failed\",\r\n \"description\": \"Cloudflare could not negotiate a SSL/TLS handshake with the origin server.\"\r\n },\r\n \"526\": {\r\n \"code\": 526,\r\n \"message\": \"Invalid SSL Certificate\",\r\n \"description\": \"Used by Cloudflare and Cloud Foundry's gorouter to indicate failure to validate the SSL/TLS certificate that the origin server presented.\"\r\n },\r\n \"527\": {\r\n \"code\": 527,\r\n \"message\": \"Railgun Listener to Origin Error\",\r\n \"description\": \"Error 527 indicates that the request timed out or failed after the WAN connection had been established.\"\r\n },\r\n \"530\": {\r\n \"code\": 530,\r\n \"message\": \"Origin DNS Error\",\r\n \"description\": \"Error 530 indicates that the requested host name could not be resolved on the Cloudflare network to an origin server.\"\r\n },\r\n \"598\": {\r\n \"code\": 598,\r\n \"message\": \"Network Read Timeout Error\",\r\n \"description\": \"Used by some HTTP proxies to signal a network read timeout behind the proxy to a client in front of the proxy.\"\r\n }\r\n}\r\n", "\r\nimport Status from \"../../data/status.json\"\r\n\r\nconst description: Description = {\r\n name: \"browser\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"state\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.browser.state([state, title, url])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Pushes a new state to the browser history.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"forw\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.browser.forw([number])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Moves forward in the browser history.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"back\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.browser.back([number])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Moves backward in the browser history.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"reload\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.browser.reload()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Reloads the current page.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"href\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.browser.href([url])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Navigates to the specified URL.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"offLine\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.browser.offline([text])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20190727\",\r\n lastMod: \"20240727\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Displays an offline message when the browser is offline.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"zoom\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.browser.zoom()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20190727\",\r\n lastMod: \"20240727\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Returns the current zoom level of the browser.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"status\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.browser.status(404)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240912\",\r\n lastMod: \"20240912\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Returns a description of the specified HTTP status code.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"interlock\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.browser.interlock((tabs) => ...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Detect and monitor other active tabs of the same app.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Detect and monitor other active tabs.\r\n * Security: Uses BroadcastChannel which is same-origin only.\r\n */\r\n interlock: (onUpdate: (tabs: number) => void): void => {\r\n const bc = new BroadcastChannel(\"dp_interlock\")\r\n let count = 1\r\n bc.onmessage = (e) => {\r\n // Validate origin and message content\r\n if ((e.origin === window.location.origin || !e.origin) &&\r\n (e.data === \"ping\" || e.data === \"pong\")) {\r\n if (e.data === \"ping\") bc.postMessage(\"pong\")\r\n if (e.data === \"pong\") onUpdate(++count)\r\n }\r\n }\r\n bc.postMessage(\"ping\")\r\n onUpdate(count)\r\n },\r\n /**\r\n * Pushes a new state to the browser history.\r\n * @param state The state object.\r\n * @param title The title of the state.\r\n * @param url The URL of the state.\r\n */\r\n state: (state: any, title: any, url: any): void => {\r\n history.pushState(state, title, url)\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Moves forward in the browser history.\r\n * @param times The number of steps to move forward.\r\n */\r\n forw: (times: number): void => {\r\n history.go(times)\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Moves backward in the browser history.\r\n * @param times The number of steps to move backward.\r\n */\r\n back: (times: number): void => {\r\n history.go(-Math.abs(times))\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Reloads the current page.\r\n */\r\n reload: (): void => {\r\n location.href = \"/\"\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Navigates to the specified URL.\r\n * @param url The URL to navigate to.\r\n */\r\n href: (url: string): void => {\r\n location.href = url\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Displays an offline message when the browser is offline.\r\n * Security: Text is sanitized to prevent CSS injection.\r\n * @param text The message to display when offline.\r\n */\r\n offLine: (text = \"You are offline.\"): void => {\r\n window.addEventListener(\"online\", () => document.querySelectorAll(\"[o]\").forEach(el => el.remove()))\r\n\r\n window.addEventListener(\"offline\", () => {\r\n // Sanitize text to prevent CSS injection attacks (NIST AC-3, OWASP CSS01)\r\n const safeText = String(text)\r\n .replace(/[\"\\\\]/g, '\\\\$&')\r\n .slice(0, 200)\r\n\r\n const styleEl = document.createElement(\"style\")\r\n styleEl.setAttribute(\"o\", \"\")\r\n styleEl.textContent = `\r\n html {\r\n\r\n &:before {\r\n content: \"\";\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n position: absolute;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background-color: #00000082;\r\n z-index: 9999;\r\n -webkit-backdrop-filter: blur(2px);\r\n backdrop-filter: blur(2px);\r\n\r\n }\r\n\r\n &:after{\r\n position: absolute;\r\n content: \"${safeText}\";\r\n font-size: 1em;\r\n background-color: orange;\r\n color: black;\r\n text-align: center;\r\n padding: 10px 30px;\r\n z-index: 10000;\r\n border-radius: 20px;\r\n top: calc(50% - 22px);\r\n left: calc(50% - 92px);\r\n border: 6px solid #00000026;\r\n }\r\n\r\n }\r\n `\r\n document.body.appendChild(styleEl)\r\n })\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Returns the current zoom level of the browser.\r\n * @returns {number} The current zoom level.\r\n */\r\n zoom: (): number => Math.round(devicePixelRatio * 100),\r\n\r\n /**\r\n * Returns a description of the specified HTTP status code.\r\n * @param code The HTTP status code.\r\n * @returns The description of the status code.\r\n */\r\n status: (code: number): string => (Status as any)[code] || \"Unknown status\"\r\n\r\n}\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"check\",\r\n active: true,\r\n subCommand: [\r\n // {\r\n // name: \"url\",\r\n // version: \"0.0.2\",\r\n // example: \"dphelper.check.url([domain])\",\r\n // description: \"Checks the status of a domain.\",\r\n // author: \"Dario Passariello\",\r\n // creationDate: \"20240829\",\r\n // lastMod: \"20240829\",\r\n // type: \"function\",\r\n // active: true,\r\n //\r\n // },\r\n {\r\n name: \"version\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.check.version([v1], [v2], [opts])\",\r\n description: \"Compares two versions.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240829\",\r\n lastMod: \"20240829\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n // {\r\n // name: \"npmVer\",\r\n // version: \"0.0.2\",\r\n // example: \"dphelper.check.npmVer([npm])\",\r\n // description: \"Fetches the latest version of an npm package.\",\r\n // author: \"Dario Passariello\",\r\n // creationDate: \"20240829\",\r\n // lastMod: \"20240829\",\r\n // type: \"function\",\r\n // active: true,\r\n //\r\n // }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Checks the status of a domain.\r\n *\r\n * @param domain - The domain to check.\r\n * @returns A promise that resolves to the status data of the domain.\r\n */\r\n // url: (domain: string): Promise<any> => {\r\n // return fetch(`https://a51.dev/dns/status.php?domain=${domain}`)\r\n // .then((response) => response.json())\r\n // .then((data) => {\r\n // console.table(data)\r\n // return data\r\n // })\r\n // .catch(err => {\r\n // console.error(`Error checking status for ${domain}:`, err)\r\n // })\r\n // },\r\n\r\n ///\r\n\r\n /**\r\n * Compares two version strings.\r\n *\r\n * @param v1 - The first version.\r\n * @param v2 - The second version.\r\n * @param opts - Options for comparison.\r\n * @returns 1 if v1 is greater, -1 if v2 is greater, 0 if equal, NaN if invalid.\r\n */\r\n version: (v1: string, v2: string, opts: { lex?: boolean; zero?: boolean }): number => {\r\n if (!(v1 && v2)) return Number.NaN\r\n\r\n const lex = opts?.lex,\r\n zero = opts?.zero\r\n\r\n let part1: any[] = v1.split(\".\"),\r\n part2: any[] = v2.split(\".\")\r\n\r\n const isValidPart = (x: string): boolean => (lex ? /^\\d+[A-Za-z]*$/ : /^\\d+$/).test(x)\r\n\r\n if (!(part1.every(isValidPart) && part2.every(isValidPart)))\r\n return Number.NaN\r\n\r\n if (zero) {\r\n while (part1.length < part2.length) part1.push(\"0\")\r\n while (part2.length < part1.length) part2.push(\"0\")\r\n }\r\n\r\n if (!lex) {\r\n part1 = part1.map(Number)\r\n part2 = part2.map(Number)\r\n }\r\n\r\n for (let i = 0; i < part1.length; i++) {\r\n if (part2.length === i) return 1\r\n if (part1[i] === part2[i]) continue\r\n if (part1[i] > part2[i]) return 1\r\n return -1\r\n }\r\n\r\n if (part1.length !== part2.length)\r\n return -1\r\n\r\n return 0\r\n }\r\n\r\n ///\r\n\r\n /**\r\n * Fetches the latest version of an npm package.\r\n *\r\n * @param npm - The name of the npm package.\r\n * @returns A promise that resolves to the latest version data of the npm package.\r\n */\r\n // npmVer: async (npm: string = 'dphelper'): Promise<any> => {\r\n // const url = `https://registry.npmjs.org/${npm}/latest`\r\n // return await fetch(url)\r\n // .then(response => response.json())\r\n // .then(response => response)\r\n // .catch(error => {\r\n // console.error(`Error fetching npm version for ${npm}:`, error.message)\r\n // })\r\n // }\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"color\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"hex\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.color.hex(255)\",\r\n description: \"Converts a number to a hexadecimal string.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toHex\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.color.toHex([255, 255, 255])\",\r\n description: \"Converts an RGB array to a hexadecimal string.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toRGB\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.color.toRGB('#ffffff')\",\r\n description: \"Converts a hexadecimal string to an RGB array.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"oleColor\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.color.oleColor('#ffffff')\",\r\n description: \"Converts a hexadecimal string to an OLE color.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"gradient\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.color.gradient([colorStart, colorEnd, colorCount])\",\r\n description: \"Generates a gradient between two colors.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}\r\n\r\n///\r\n\r\ninterface RGBArray {\r\n [index: number]: number\r\n}\r\n\r\n///\r\n\r\nconst newObj = {\r\n /**\r\n * Converts a number to a hexadecimal string.\r\n *\r\n * @param c - The number to convert.\r\n * @returns The hexadecimal string representation of the number.\r\n */\r\n hex: (c: number): string => {\r\n let i = Number.parseInt(c.toString(), 10)\r\n if (Number.isNaN(i)) return \"00\"\r\n i = Math.round(Math.max(0, Math.min(255, i)))\r\n return i.toString(16).padStart(2, \"0\")\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts an RGB array to a hexadecimal string.\r\n *\r\n * @param rgb - The RGB array to convert.\r\n * @returns The hexadecimal string representation of the RGB array.\r\n */\r\n toHex: (rgb: RGBArray): string => dphelper.color.hex(rgb[0]) + dphelper.color.hex(rgb[1]) + dphelper.color.hex(rgb[2]),\r\n\r\n ///\r\n\r\n /**\r\n * Converts a hexadecimal string to an RGB array.\r\n *\r\n * @param hex - The hexadecimal string to convert.\r\n * @returns The RGB array representation of the hexadecimal string.\r\n */\r\n toRGB: (hex: string): RGBArray => {\r\n const color: RGBArray = []\r\n color[0] = Number.parseInt(dphelper.text.trim(hex, \"#\", 1, 7).substring(0, 2), 16)\r\n color[1] = Number.parseInt(dphelper.text.trim(hex, \"#\", 1, 7).substring(2, 4), 16)\r\n color[2] = Number.parseInt(dphelper.text.trim(hex, \"#\", 1, 7).substring(4, 6), 16)\r\n return color\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts a hexadecimal string to an OLE color.\r\n *\r\n * @param rgbaHex - The hexadecimal string to convert.\r\n * @returns The OLE color representation of the hexadecimal string.\r\n */\r\n oleColor: (rgbaHex: string): string => {\r\n const color = rgbaHex.replace(\"#\", \"\").match(/.{1,2}/g)\r\n if (!color || color.length < 3) return \"0\"\r\n return (\r\n Number.parseInt(color[0]!, 16) +\r\n Number.parseInt(color[1]!, 16) * 256 +\r\n Number.parseInt(color[2]!, 16) * 65536\r\n ).toString()\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Generates a gradient between two colors.\r\n *\r\n * @param colorStart - The starting color of the gradient.\r\n * @param colorEnd - The ending color of the gradient.\r\n * @param colorCount - The number of colors in the gradient.\r\n * @returns An array of colors representing the gradient.\r\n */\r\n gradient: (colorStart: string, colorEnd: string, colorCount: number): string[] => {\r\n const\r\n start = dphelper.color.toRGB(colorStart) as any,\r\n end = dphelper.color.toRGB(colorEnd) as any,\r\n len = colorCount,\r\n colors: string[] = []\r\n\r\n let alpha = 0.0\r\n\r\n const c: RGBArray = []\r\n\r\n for (let i = 0; i < len; i++) {\r\n\r\n alpha += 1.0 / len\r\n c[0] = start[0] * alpha + (1 - alpha) * end[0]\r\n c[1] = start[1] * alpha + (1 - alpha) * end[1]\r\n c[2] = start[2] * alpha + (1 - alpha) * end[2]\r\n\r\n colors.push(dphelper.color.toHex(c))\r\n }\r\n\r\n return colors\r\n }\r\n}\r\n\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"cookie\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"set\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.cookie.set({name, value, time, path = '/'})\",\r\n description: \"Creates a cookie with specified properties.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20240613\",\r\n type: \"function\",\r\n active: true,\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"get\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.cookie.get(name)\",\r\n description: \"Retrieves the value of a specified cookie.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20240613\",\r\n type: \"function\",\r\n active: true,\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"delete\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.cookie.delete(name)\",\r\n description: \"Deletes a specified cookie.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20240613\",\r\n type: \"function\",\r\n active: true,\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"removeAll\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.cookie.removeAll()\",\r\n description: \"Clears all cookies.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20240613\",\r\n type: \"function\",\r\n active: true,\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}\r\n\r\n///\r\n\r\ninterface CookieProps {\r\n name: string\r\n value: string\r\n time?: string\r\n path?: string\r\n sameSite?: 'Strict' | 'Lax' | 'None'\r\n secure?: boolean\r\n httpOnly?: boolean // Note: Cannot be set via JavaScript, requires server-side\r\n}\r\n\r\n///\r\n\r\nconst newObj = {\r\n\r\n /**\r\n * Creates a cookie with specified properties.\r\n * Security: Defaults to Secure=true on HTTPS, SameSite=Lax for CSRF protection.\r\n *\r\n * @param props - The properties for the cookie.\r\n */\r\n set: (props: CookieProps): void => {\r\n const d: Date = new Date()\r\n d.setTime(d.getTime() + 3600 * 1000 * 24 * 365)\r\n\r\n if (!props.name) return\r\n\r\n const {\r\n name,\r\n value,\r\n time = props.time || d.toUTCString(),\r\n path = props.path || \"/\",\r\n sameSite = props.sameSite || \"Lax\",\r\n secure = props.secure ?? (location.protocol === \"https:\")\r\n } = props\r\n\r\n // Encode value to prevent cookie injection\r\n const encodedValue = encodeURIComponent(value)\r\n const secureFlag = secure ? \"Secure\" : \"\"\r\n const sameSiteFlag = sameSite\r\n\r\n document.cookie = `${name}=${encodedValue}; expires=${time}; path=${path}; SameSite=${sameSiteFlag}; ${secureFlag}`\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Retrieves the value of a specified cookie.\r\n *\r\n * @param name - The name of the cookie to retrieve.\r\n * @returns The value of the cookie, or null if not found.\r\n */\r\n get: (name: string): string | null => {\r\n const asCookies = document.cookie.split(\";\"), asCookiesCache = asCookies.length\r\n for (let i = 0; i < asCookiesCache; i++) {\r\n const cookie = asCookies[i]\r\n if (!cookie) continue\r\n const asCookie = cookie.trim().split(\"=\")\r\n if (name === asCookie[0]) return decodeURIComponent(asCookie[1] || \"\")\r\n }\r\n\r\n return null\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Deletes a specified cookie.\r\n *\r\n * @param name - The name of the cookie to delete.\r\n */\r\n delete: (name: string): void => dphelper.cookie.set({\r\n name: name,\r\n value: \"\",\r\n time: \"Thu, 01 Jan 1970 00:00:00 GMT\"\r\n }),\r\n\r\n ///\r\n\r\n /**\r\n * Clears all cookies.\r\n */\r\n removeAll: (): void => {\r\n const\r\n cookies = document.cookie.split(\";\"),\r\n asCookiesCache = cookies.length\r\n\r\n for (let i = 0; i < asCookiesCache; i++) {\r\n const cookie = cookies[i]\r\n if (!cookie) continue\r\n const\r\n eqPos = cookie.indexOf(\"=\"),\r\n cname = eqPos > -1 ? cookie.slice(0, eqPos) : cookie\r\n dphelper.cookie.delete(cname.trim())\r\n }\r\n return\r\n }\r\n}\r\n\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"coords\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"degreesToRadians\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.coords.degreesToRadians(45)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Convert degrees to radians\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"latToMeters\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.coords.latToMeters([40.689202777778, -74.044219444444])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Convert latitude to meters\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toVector\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.coords.toVector([40.689202777778, -74.044219444444, 1])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Convert coordinates to vector\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"convertToDecDegrees\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.coords.convertToDecDegrees([39, 5, 59, 'N'])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Convert coordinates to decimal degrees\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"distance\",\r\n version: \"0.0.2\",\r\n example:\r\n \"dphelper.coords.distance([40.718788808171105, -74.0114768663747],[38.909309636475875, -77.01712459058946])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: `\r\n Haversine formula:\r\n a = sin\u00B2(\u0394\u03C6/2) + cos \u03C61 \u22C5 cos \u03C62 \u22C5 sin\u00B2(\u0394\u03BB/2)\r\n c = 2 \u22C5 atan2( \u221Aa, \u221A(1-a) )\r\n d = R \u22C5 c\r\n where \u03C6 is latitude, \u03BB is longitude, R is earth's radius (mean radius = 6,371km);\r\n note that angles need to be in radians to pass to trig functions!\r\n `,\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"polarToCartesian\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.coords.polarToCartesian([centerX, centerY, radius, angleInDegrees])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2024-09-28\",\r\n lastMod: \"2024-09-28\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Convert polar coordinates to Cartesian coordinates\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"mapDegreesToPixels\",\r\n version: \"0.0.2\",\r\n example:\r\n \"dphelper.coords.mapDegreesToPixels([degree, minDegree, maxDegree, minPixel, maxPixel, padding])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2024-09-28\",\r\n lastMod: \"2024-09-28\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Map degrees to pixels\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, R = 6371e3, newObj = {\r\n /**\r\n * Converts degrees to radians.\r\n *\r\n * @param degrees - The degrees to convert.\r\n * @returns The radians.\r\n */\r\n degreesToRadians: (degrees: number): number => (degrees * Math.PI) / 180,\r\n\r\n ///\r\n\r\n /**\r\n * Converts latitude to meters.\r\n *\r\n * @param points - The latitude and longitude points.\r\n * @returns The meters.\r\n */\r\n latToMeters: (points: [number, number]): number | undefined => {\r\n if (!Array.isArray(points)) return\r\n const finalP = R * Math.cos(points[0]) * Math.cos(points[1])\r\n return finalP / 1000\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts coordinates to a vector.\r\n *\r\n * @param points - The latitude, longitude, and altitude points.\r\n * @returns The vector.\r\n */\r\n toVector: (points: [number, number, number]): [number, number, number] | undefined => {\r\n if (!Array.isArray(points)) return\r\n\r\n const x = R * Math.cos((points[1] * Math.PI) / 180) * Math.cos((points[0] * Math.PI) / 180),\r\n y = R * Math.cos((points[1] * Math.PI) / 180) * Math.sin((points[0] * Math.PI) / 180),\r\n z = R * Math.sin((points[2] * Math.PI) / 180)\r\n return [x, y, z]\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts coordinates to decimal degrees.\r\n *\r\n * @param deg - The degrees.\r\n * @param minutes - The minutes.\r\n * @param sec - The seconds.\r\n * @param direction - The direction (N, S, E, W).\r\n * @returns The decimal degrees.\r\n */\r\n convertToDecDegrees: (deg: number, minutes: number, sec: number, direction: string): number => {\r\n let dec = deg + minutes / 60 + sec / 3600\r\n if (direction === \"S\" || direction === \"W\") dec *= -1\r\n return dec\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Calculates the distance between two points using the Haversine formula.\r\n *\r\n * @param point1 - The first point (latitude, longitude).\r\n * @param point2 - The second point (latitude, longitude).\r\n * @returns The distance in kilometers, miles, and nautical miles.\r\n */\r\n distance: (\r\n point1: [number, number],\r\n point2: [number, number]\r\n ): { km: number; mi: number; nMi: number } | undefined => {\r\n if (!(Array.isArray(point1) && Array.isArray(point2))) return\r\n\r\n const \u03C61 = (point1[0] * Math.PI) / 180, // \u03C6, \u03BB in radians\r\n \u03C62 = (point2[0] * Math.PI) / 180,\r\n \u0394\u03C6 = ((point2[0] - point1[0]) * Math.PI) / 180,\r\n \u0394\u03BB = ((point2[1] - point1[1]) * Math.PI) / 180,\r\n a =\r\n Math.sin(\u0394\u03C6 / 2) * Math.sin(\u0394\u03C6 / 2) +\r\n Math.cos(\u03C61) * Math.cos(\u03C62) * Math.sin(\u0394\u03BB / 2) * Math.sin(\u0394\u03BB / 2), c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)), distance = R * c\r\n return {\r\n km: Number((distance / 1000).toFixed(2)),\r\n mi: Number(((distance / 1000) * 0.621371).toFixed(2)),\r\n nMi: Number((distance / 1000 / 1.852).toFixed(2))\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts polar coordinates to Cartesian coordinates.\r\n *\r\n * @param centerX - The X coordinate of the center.\r\n * @param centerY - The Y coordinate of the center.\r\n * @param radius - The radius.\r\n * @param angleInDegrees - The angle in degrees.\r\n * @returns The Cartesian coordinates.\r\n */\r\n polarToCartesian: (\r\n centerX: number,\r\n centerY: number,\r\n radius: number,\r\n angleInDegrees: number\r\n ): { x: number; y: number } => {\r\n const angleInRadians = ((angleInDegrees - 90) * Math.PI) / 180.0\r\n return {\r\n x: centerX + radius * Math.cos(angleInRadians),\r\n y: centerY + radius * Math.sin(angleInRadians)\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Maps degrees to pixels.\r\n *\r\n * @param degree - The degree to map.\r\n * @param minDegree - The minimum degree.\r\n * @param maxDegree - The maximum degree.\r\n * @param minPixel - The minimum pixel.\r\n * @param maxPixel - The maximum pixel.\r\n * @param padding - The padding.\r\n * @returns The mapped pixel value.\r\n */\r\n mapDegreesToPixels: (\r\n degree: number,\r\n minDegree: number,\r\n maxDegree: number,\r\n minPixel: number,\r\n maxPixel: number,\r\n padding: number\r\n ): number => {\r\n // Normalize the degree to a 0-1 range\r\n const normalizedDegree = (degree - minDegree) / (maxDegree - minDegree), basePixel = minPixel + normalizedDegree * (maxPixel - minPixel), paddingOffset = padding / 20, final = maxPixel - (basePixel - padding) - paddingOffset\r\n\r\n // Initial mapping to pixel space\r\n // Adjusted calculation with padding (original formula logic preserved but clarified)\r\n // The previous formula was final = -(pixel - padding) + (maxPixel - padding / 10 / 2)\r\n return final < padding ? padding : final\r\n }\r\n }\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "{\r\n \"version\": \"3.0.0\",\r\n \"contributors\": [\r\n {\r\n \"name\": \"Dario Passariello\",\r\n \"email\": \"dariopassariello@gmail.com\"\r\n }\r\n ],\r\n \"app\": {\r\n \"folder\": \"src\",\r\n \"type\": \"library\",\r\n \"port\": 3000,\r\n \"code\": \"dphelper\",\r\n \"host\": {\r\n \"dev\": \"http://localhost\",\r\n \"prod\": \"https://biglogic.ca/dphelper\"\r\n },\r\n \"socket\": {\r\n \"url\": {\r\n \"tst\": \"http://localhost:5000/\",\r\n \"dev\": \"http://localhost:5000/\",\r\n \"pro\": \"wss://ws.a51.dev/\"\r\n }\r\n },\r\n \"events\": {\r\n \"url\": {\r\n \"tst\": \"http://localhost:5002/\",\r\n \"dev\": \"http://localhost:5002/\",\r\n \"pro\": \"wss://ws.a51.dev/\"\r\n }\r\n },\r\n \"proxy\": {\r\n \"api\": {\r\n \"tst\": \"http://localhost:5003/\",\r\n \"dev\": \"http://localhost:5003/\",\r\n \"pro\": \"https://api.a51.dev/\"\r\n }\r\n },\r\n \"url\": {\r\n \"dev\": \"http://localhost/\"\r\n },\r\n \"cdn\": {}\r\n }\r\n}\r\n", "\r\nconst description: Description = {\r\n name: \"credits\",\r\n active: true,\r\n subCommand: []\r\n}\r\n\r\nimport pk from \"../../app.json\"\r\n\r\nconst newObj = () => {\r\n const props = pk\r\n console.groupCollapsed(`%c${props.app.code} v${props.version}%c`, \"color:orange\", \"\")\r\n console.debug(\r\n `%c${props.app.code} v${props.version}%c by Dario Passariello started`,\r\n \"color:orange\",\r\n \"\"\r\n )\r\n console.debug(`name: %c${props.app.code}`, \"color:orange\", \"\")\r\n console.debug(`version: %c${props.version}`, \"color:orange\", \"\")\r\n console.groupEnd()\r\n return\r\n}\r\n\r\n///\r\n\r\nconst helper = (globalThis as any).dphelper\r\nhelper?.setDescription?.(description, newObj)\r\n", "{\r\n \"en\": [\r\n \"January\",\r\n \"February\",\r\n \"March\",\r\n \"April\",\r\n \"May\",\r\n \"June\",\r\n \"July\",\r\n \"August\",\r\n \"September\",\r\n \"October\",\r\n \"November\",\r\n \"December\"\r\n ],\r\n \"it\": [\r\n \"Gennaio\",\r\n \"Febbraio\",\r\n \"Marzo\",\r\n \"Aprile\",\r\n \"Maggio\",\r\n \"Giugno\",\r\n \"Luglio\",\r\n \"Agosto\",\r\n \"Settembre\",\r\n \"Ottobre\",\r\n \"Novembre\",\r\n \"Dicembre\"\r\n ]\r\n}\r\n", "\r\n\r\nimport _language from \"./language.json\"\r\nconst description: Description = {\r\n name: \"date\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"toIso\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.toIso(value, 'en')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts a date value to ISO format.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toMMDDYYYY\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.toMMDDYYYY(value)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts a date value to MMDDYYYY format.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toYYYYMMDD\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.toYYYYMMDD(value)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts a date value to YYYYMMDD format.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toHuman\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.toHuman(value)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts a date value to a human-readable format.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"convert\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.convert(value, format)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts a date value to a specified format.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"iso2Epoch\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.iso2Epoch(value)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts an ISO date value to epoch time.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"localIsoTime\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.localIsoTime(value)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Gets the local ISO time for a given date value.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"utc\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.utc()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Gets the current UTC time.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"parse\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.parse(value, '/')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Parses a date value with a specified separator.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"year\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.year()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Gets the current year.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"addDays\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.addDays(date, days)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Adds a specified number of days to a date.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"dateTimeToString\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.dateTimeToString(dateObject)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts a date object to a string.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"isoToHuman\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.isoToHuman(value, '@')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts an ISO date value to a human-readable format with a specified symbol.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"fullDate\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.fullDate()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Gets the full date and time in the format DD-MM-YYYY HH:MM:SS.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"epoch\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.epoch()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Gets the current epoch time.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"diffInDays\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.diffInDays(d1, d2)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Calculates the difference in days between two dates.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"diffInWeeks\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.diffInWeeks(d1, d2)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Calculates the difference in weeks between two dates.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"diffInMonths\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.diffInMonths(d1, d2)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Calculates the difference in months between two dates.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"diffInYears\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.diffInYears(d1, d2)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Calculates the difference in years between two dates.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"dateToYMD\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.dateToYMD(date)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts a date to the format YYYY-MM-DD.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"collection\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.collection()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Gets various date representations based on the type and locale.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"timeZones\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.date.timeZones()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240901\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Returns an array of all supported timezones.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Returns the days of the week in the specified language.\r\n * @param lang The language code (default is 'en').\r\n * @returns An array of days of the week.\r\n */\r\n days: (lang = \"en\") => {\r\n const l: any = {\r\n en: [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"],\r\n it: [\"luned\u00EC\", \"marted\u00EC\", \"mercoled\u00EC\", \"gioved\u00EC\", \"venerd\u00EC\", \"sabato\", \"domenica\"]\r\n }\r\n return l[lang]\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Returns the months of the year in the specified language.\r\n * @param lang The language code (default is 'en').\r\n * @returns An array of months of the year.\r\n */\r\n months: (lang = \"en\") => {\r\n const l: any = _language\r\n return l[lang]\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Returns the current year.\r\n * @returns The current year.\r\n */\r\n year: () => {\r\n const date = new Date()\r\n return date.getFullYear()\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts a date value to ISO format.\r\n * @param value The date value to convert.\r\n * @param int The locale (default is 'en').\r\n * @returns The ISO formatted date string or null if invalid.\r\n */\r\n toIso: (value: any, int = \"en\") => {\r\n if (!value) value = \"\"\r\n const date = new Date(value)\r\n if (String(date) === \"Invalid Date\") return null\r\n const dateTimeFormat = new Intl.DateTimeFormat(int, {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\"\r\n })\r\n return dateTimeFormat.format(date)\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts a date value to MMDDYYYY format.\r\n * @param value The date value to convert.\r\n * @returns The date in MMDDYYYY format.\r\n */\r\n toMMDDYYYY: (value: Date) => {\r\n try {\r\n const date = new Date(value)\r\n if (isNaN(date.getTime())) return \"\"\r\n return (\r\n `0${date.getMonth() + 1}`.slice(-2) +\r\n \"\" +\r\n `0${date.getDate()}`.slice(-2) +\r\n \"\" +\r\n date.getFullYear()\r\n )\r\n } catch (_e) {\r\n return \"\"\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts a date value to YYYYMMDD format.\r\n * @param value The date value to convert.\r\n * @returns The date in YYYYMMDD format or undefined if invalid.\r\n */\r\n toYYYYMMDD: (value: any) => {\r\n if (!value) return\r\n return value.toISOString().split(\"T\")[0].replaceAll(\"-\", \"\")\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts a date value to a human-readable format.\r\n * @param value The date value to convert.\r\n * @returns The human-readable date string.\r\n */\r\n toHuman: (value: any) => {\r\n const options = { weekday: \"long\", year: \"numeric\", month: \"long\", day: \"numeric\" }\r\n return value.toLocaleDateString(undefined, options)\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts a date value to a specified format.\r\n * @param value The date value to convert.\r\n * @param format The format array.\r\n * @returns The formatted date string or null if invalid.\r\n */\r\n convert: (value: any, format: any) => {\r\n if (!value) return null\r\n if (!format) format = dphelper.date.months(\"en\")\r\n\r\n const month = value.substring(0, 2).replace(\"0\", \"\"),\r\n day = value.substring(2, 4),\r\n year = value.substring(value.length - 4)\r\n\r\n return `${day} ${format[Number(month) - 1]} ${year}`\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts an ISO date value to epoch time.\r\n * @param value The ISO date value to convert.\r\n * @returns The epoch time in milliseconds.\r\n */\r\n iso2Epoch: (value: any) => {\r\n if (!value) value = \"\"\r\n const date = new Date(value),\r\n milliseconds = date.getTime()\r\n return milliseconds\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Gets the local ISO time for a given date value.\r\n * @param value The date value.\r\n * @returns The local ISO time string.\r\n */\r\n localIsoTime: (value: any) => {\r\n if (!value) value = new Date()\r\n const date = new Date(value)\r\n if (isNaN(date.getTime())) return ''\r\n const tzoffset = date.getTimezoneOffset() * 60000,\r\n localISOTime = new Date(Date.now() - tzoffset).toISOString().slice(0, -1)\r\n return localISOTime\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Gets the current UTC time.\r\n * @returns The current UTC time string.\r\n */\r\n utc: () => {\r\n const date = new Date()\r\n return date.toUTCString()\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Parses a date value with a specified separator.\r\n * @param value The date value to parse.\r\n * @param separator The separator (default is '/').\r\n * @returns The parsed date string or null if invalid.\r\n */\r\n parse: (value: any, separator = \"/\") => {\r\n if (!value) return null\r\n const month = value.substring(0, 2),\r\n day = value.substring(2, 4),\r\n year = value.substring(4, 8)\r\n\r\n return month + separator + day + separator + year\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Adds a specified number of days to a date.\r\n * @param date The date to add days to.\r\n * @param days The number of days to add.\r\n * @returns The new date.\r\n */\r\n addDays: (date: any, days: any) => {\r\n const copy = new Date(Number(date))\r\n copy.setDate(date.getDate() + days)\r\n return copy\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts a date object to a string.\r\n * @param dateObject The date object to convert.\r\n * @returns The date string.\r\n */\r\n dateTimeToString: (dateObject: any) => {\r\n try {\r\n return `${dateObject.getFullYear()}${dateObject.getMonth().toString().length > 1\r\n ? dateObject.getMonth() + 1\r\n : `0${dateObject.getMonth() + 1}`\r\n }\r\n ${dateObject.getDate().toString().length > 1\r\n ? dateObject.getDate()\r\n : `0${dateObject.getDate()}`\r\n }_${dateObject.getHours()}${dateObject.getMinutes()}${dateObject.getSeconds()}`\r\n } catch (err) {\r\n // todo: log errors\r\n console.error(err)\r\n return dateObject\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts an ISO date value to a human-readable format with a specified symbol.\r\n * @param value The ISO date value to convert.\r\n * @param symbol The symbol to use (default is '@').\r\n * @returns The human-readable date string or null if invalid.\r\n */\r\n isoToHuman: (value: any, symbol = \"@\") => {\r\n if (!value) return null\r\n\r\n const format = dphelper.date.months(\"en\"),\r\n date = new Date(value),\r\n year = date.getFullYear(),\r\n t = value.split(\"T\")[1].split(\":\").slice(0, 2).join(\":\")\r\n\r\n let month = (date.getMonth() + 1).toString(),\r\n dt = date.getDate().toString()\r\n\r\n if (dt.length < 2) dt = `0${dt}`\r\n if (month.length < 2) month = `0${month}`\r\n\r\n return `${dt} ${format[Number(month) - 1]} ${year} ${symbol} ${t}`\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Gets the full date and time in the format DD-MM-YYYY HH:MM:SS.\r\n * @returns The full date and time string.\r\n */\r\n fullDate: () => {\r\n const inputDate = new Date(),\r\n day = Number(inputDate.getDate()),\r\n month = Number(inputDate.getMonth() + 1),\r\n year = Number(inputDate.getFullYear()),\r\n hours = Number(inputDate.getHours()),\r\n minutes = Number(inputDate.getMinutes()),\r\n seconds = Number(inputDate.getSeconds()),\r\n fulldate =\r\n (day < 10 ? `0${day}` : day) +\r\n \"-\" +\r\n (month < 10 ? `0${month}` : month) +\r\n \"-\" +\r\n year +\r\n \" \" +\r\n (hours < 10 ? `0${hours}` : hours) +\r\n \":\" +\r\n (minutes < 10 ? `0${minutes}` : minutes) +\r\n \":\" +\r\n (seconds < 10 ? `0${seconds}` : seconds)\r\n\r\n return fulldate\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Gets the current epoch time.\r\n * @returns The current epoch time in milliseconds.\r\n */\r\n epoch: () => Date.now(),\r\n\r\n ///\r\n\r\n /**\r\n * Calculates the difference in days between two dates.\r\n * @param d1 The first date.\r\n * @param d2 The second date.\r\n * @returns The difference in days.\r\n */\r\n diffInDays: (d1: any, d2: any) => {\r\n const t2 = d2.getTime(),\r\n t1 = d1.getTime()\r\n return Math.floor((t2 - t1) / (24 * 3600 * 1000))\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Calculates the difference in weeks between two dates.\r\n * @param d1 The first date.\r\n * @param d2 The second date.\r\n * @returns The difference in weeks.\r\n */\r\n diffInWeeks: (d1: any, d2: any) => {\r\n const t2 = d2.getTime(),\r\n t1 = d1.getTime()\r\n return Number(Number.parseInt(String((t2 - t1) / (24 * 3600 * 1000 * 7)), 10))\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Calculates the difference in months between two dates.\r\n * @param d1 The first date.\r\n * @param d2 The second date.\r\n * @returns The difference in months.\r\n */\r\n diffInMonths: (d1: any, d2: any) => {\r\n const d1Y = d1.getFullYear(),\r\n d2Y = d2.getFullYear(),\r\n d1M = d1.getMonth(),\r\n d2M = d2.getMonth()\r\n\r\n return d2M + 12 * d2Y - (d1M + 12 * d1Y)\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Calculates the difference in years between two dates.\r\n * @param d1 The first date.\r\n * @param d2 The second date.\r\n * @returns The difference in years.\r\n */\r\n diffInYears: (d1: any, d2: any) => d2.getFullYear() - d1.getFullYear(),\r\n\r\n ///\r\n\r\n /**\r\n * Converts a date to the format YYYY-MM-DD.\r\n * @param date The date to convert.\r\n * @returns The date in YYYY-MM-DD format.\r\n */\r\n dateToYMD: (date: any) => {\r\n const d = date.getDate(),\r\n m = date.getMonth() + 1, //Month from 0 to 11\r\n y = date.getFullYear()\r\n return `${y}-${m <= 9 ? `0${m}` : m}-${d <= 9 ? `0${d}` : d}`\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Gets various date representations based on the type and locale.\r\n * @param params The parameters including date, type, and locale.\r\n * @returns The date representation string.\r\n */\r\n collection: ({ date = new Date(), type = \"\", locale = \"en-US\" }) => {\r\n if (!date && type && locale)\r\n console.debug(`\r\n \"toDateString\" -> Tue Jan 02 2024\r\n \"toISOString\" -> 2024-01-02T18:44:43.590Z\r\n \"toJSON\" -> 2024-01-02T18:44:43.590Z\r\n \"toLocaleDateString\" -> 1/2/2024\r\n \"toLocaleString\" -> 1/2/2024, 11:44:43 AM\r\n \"toLocaleTimeString\" -> 11:44:43 AM\r\n \"toString\" -> Tue Jan 02 2024 11:44:43 GMT-0700 (Mountain Standard Time)\r\n \"toISOStringShort\" -> 2024-01-02\r\n \"toLocaleString (en-GB)\" -> 02/01/2024, 11:47:56 am\r\n `)\r\n\r\n let dateConverted: any\r\n\r\n switch (type) {\r\n case \"toDateString\":\r\n dateConverted = date.toDateString()\r\n break\r\n case \"toISOString\":\r\n dateConverted = date.toISOString()\r\n break\r\n case \"toJSON\":\r\n dateConverted = date.toJSON()\r\n break\r\n case \"toLocaleDateString\":\r\n dateConverted = date.toLocaleDateString(locale)\r\n break\r\n case \"toLocaleString\":\r\n dateConverted = date.toLocaleString(locale)\r\n break\r\n case \"toLocaleTimeString\":\r\n dateConverted = date.toLocaleTimeString(locale)\r\n break\r\n case \"toString\":\r\n dateConverted = date.toString()\r\n break\r\n case \"toISOStringShort\":\r\n dateConverted = date.toISOString().slice(0, 10)\r\n break\r\n }\r\n\r\n return dateConverted\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Returns an array of all supported timezones.\r\n * @returns An array of timezones.\r\n */\r\n timeZones: () => {\r\n const allTZ = [],\r\n timeZones = Intl.supportedValuesOf(\"timeZone\")\r\n for (const timeZone of timeZones) {\r\n allTZ.push(timeZone)\r\n }\r\n return allTZ\r\n }\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"disable\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"select\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.disable.select([el = 'body'])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Disable text selection on the specified element.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"spellCheck\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.disable.spellCheck([tmr = 5000])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Disable spell check on the specified element after a delay.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"rightClick\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.disable.rightClick([el = 'body'])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Disable right-click context menu on the specified element.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"copy\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.disable.copy([el = 'body'])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Disable copy functionality on the specified element.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"paste\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.disable.paste([el = 'body'])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Disable paste functionality on the specified element.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"cut\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.disable.cut([el = 'body'])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Disable cut functionality on the specified element.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"drag\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.disable.drag([el = 'body'])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Disable drag functionality on the specified element.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Disable text selection on the specified element.\r\n * @param el The element selector (default is 'body').\r\n */\r\n select: (el = \"body\") => {\r\n try {\r\n if (typeof document === \"undefined\") return\r\n const targetEl = typeof el === \"string\" ? document.querySelector(el) : el\r\n if (!targetEl || typeof targetEl.addEventListener !== \"function\") return\r\n const disabling = (e: any) => {\r\n const target = e.target as HTMLElement, tagName = target.tagName.toLowerCase()\r\n if (![\"input\", \"button\", \"select\", \"textarea\"].includes(tagName) && !target.classList.contains(\"selectable\")) {\r\n document.querySelectorAll(\"*\").forEach(el => (el as HTMLElement).blur())\r\n e.preventDefault()\r\n return false\r\n }\r\n document.querySelectorAll(\"img, a, input, button\").forEach(el => {\r\n el.addEventListener(\"dragstart\", (e: any) => {\r\n e.preventDefault()\r\n return false\r\n })\r\n })\r\n return\r\n }\r\n targetEl.addEventListener(\"mousedown\", disabling)\r\n console.debug(`%cSelection Disabled: %c${true}`, \"color:orange\", \"\")\r\n } catch (e) {\r\n console.debug(\"dphelper.disable.select:\", e)\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Disable spell check on the specified element after a delay.\r\n * @param tmr The delay in milliseconds (default is 5000).\r\n */\r\n spellCheck: (tmr = 5000) => {\r\n const disableSpellCheck = () => {\r\n const inputs = document.querySelectorAll(\"input[type=text], textarea, code\")\r\n for (const input of inputs) {\r\n if (!input.getAttribute(\"spellcheck\")) input.setAttribute(\"spellcheck\", \"false\")\r\n }\r\n }\r\n\r\n setInterval(disableSpellCheck, tmr)\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Disable right-click context menu on the specified element.\r\n * @param el The element selector (default is 'body').\r\n */\r\n rightClick: (el = \"body\") => {\r\n try {\r\n if (typeof document === \"undefined\") return // Guard: No document in context\r\n const targetEl = typeof el === \"string\" ? document.querySelector(el) : el\r\n if (targetEl && typeof targetEl.addEventListener === \"function\") {\r\n targetEl.addEventListener(\"contextmenu\", (e: Event) => e.preventDefault())\r\n }\r\n } catch (e) {\r\n // Gracefully handle errors (e.g., in extension contexts)\r\n console.debug(\"dphelper.disable.rightClick:\", e)\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Disable copy functionality on the specified element.\r\n * @param el The element selector (default is 'body').\r\n */\r\n copy: (el = \"body\") => {\r\n try {\r\n if (typeof document === \"undefined\") return\r\n const targetEl = typeof el === \"string\" ? document.querySelector(el) : el\r\n if (targetEl && typeof targetEl.addEventListener === \"function\") {\r\n targetEl.addEventListener(\"copy\", (e: Event) => e.preventDefault())\r\n }\r\n } catch (e) {\r\n console.debug(\"dphelper.disable.copy:\", e)\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Disable paste functionality on the specified element.\r\n * @param el The element selector (default is 'body').\r\n */\r\n paste: (el = \"body\") => {\r\n try {\r\n if (typeof document === \"undefined\") return\r\n const targetEl = typeof el === \"string\" ? document.querySelector(el) : el\r\n if (targetEl && typeof targetEl.addEventListener === \"function\") {\r\n targetEl.addEventListener(\"paste\", (e: Event) => e.preventDefault())\r\n }\r\n } catch (e) {\r\n console.debug(\"dphelper.disable.paste:\", e)\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Disable cut functionality on the specified element.\r\n * @param el The element selector (default is 'body').\r\n */\r\n cut: (el = \"body\") => {\r\n try {\r\n if (typeof document === \"undefined\") return\r\n const targetEl = typeof el === \"string\" ? document.querySelector(el) : el\r\n if (targetEl && typeof targetEl.addEventListener === \"function\") {\r\n targetEl.addEventListener(\"cut\", (e: Event) => e.preventDefault())\r\n }\r\n } catch (e) {\r\n console.debug(\"dphelper.disable.cut:\", e)\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Disable drag functionality on the specified element.\r\n * @param el The element selector (default is 'body').\r\n */\r\n drag: (el = \"body\") => {\r\n try {\r\n if (typeof document === \"undefined\") return\r\n const targetEl = typeof el === \"string\" ? document.querySelector(el) : el\r\n if (targetEl && typeof targetEl.addEventListener === \"function\") {\r\n targetEl.addEventListener(\"dragstart\", (e: Event) => e.preventDefault())\r\n }\r\n } catch (e) {\r\n console.debug(\"dphelper.disable.drag:\", e)\r\n }\r\n }\r\n\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription?.(description, newObj)\r\n", "\r\nconst _registry: Record<string, ((e: Event) => void)[]> = {}, description: Description = {\r\n name: \"dispatch\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"set\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.dispatch.set([name, value])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20231231\",\r\n lastMod: \"20240612\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Dispatches a custom event with the specified name and value.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"listen\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.dispatch.listen([eventNames, callback=null], flag = true)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20231231\",\r\n lastMod: \"20240612\",\r\n type: \"function\",\r\n active: true,\r\n description:\r\n \"Listens for the specified event names and executes the callback when the event is triggered.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"remove\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.dispatch.remove([eventNames, callback=null], flag = true)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20231231\",\r\n lastMod: \"20240612\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Removes the event listener for the specified event names.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Dispatches a custom event with the specified name and value.\r\n * @param name The name of the event.\r\n * @param value The value to pass with the event.\r\n */\r\n set: (name: string, value = {}) => dispatchEvent(new CustomEvent(String(name), value)),\r\n\r\n ///\r\n\r\n /**\r\n * Listens for the specified event names and executes the callback when the event is triggered.\r\n * @param name The name of the event to listen for.\r\n * @param cb The callback function to execute when the event is triggered.\r\n * @param flag A flag to indicate whether to remove existing listeners (default is false).\r\n */\r\n listen: (name: string, cb?: (e: Event) => void): void => {\r\n // Remove existing listeners for this event to avoid duplicates\r\n if (_registry[name] && _registry[name]!.length > 0) {\r\n dphelper.dispatch.remove(name)\r\n }\r\n\r\n const exec = (e: Event) => (cb ? setTimeout(() => cb(e), 0) : null)\r\n window.addEventListener(name, exec)\r\n\r\n if (!_registry[name]) _registry[name] = []\r\n _registry[name]!.push(exec)\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Removes all event listeners for the specified event name.\r\n * @param name The name of the event to remove the listener for.\r\n */\r\n remove: (name: string): void => {\r\n const listeners = _registry[name]\r\n if (listeners) {\r\n listeners.forEach((l: (e: Event) => void) => window.removeEventListener(name, l))\r\n delete _registry[name]\r\n }\r\n }\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"element\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"fitScale\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.element.fitScale([el = 'root', scale = 1, fit = false])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230527\",\r\n lastMod: \"20230527\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Scales an element based on the window size.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Scales an element based on the window size.\r\n * @param el The element to scale.\r\n * @param scale The scale factor (default is 1).\r\n * @param fit Whether to fit the element to the window (default is false).\r\n */\r\n fitScale: (el: any, scale = 1, fit = false) =>\r\n addEventListener(\"resize\", (_e: any) => dphelper.element.scaleBasedOnWindow(el, scale, fit)),\r\n\r\n ///\r\n\r\n /**\r\n * Scales an element based on the window size.\r\n * @param elm The element to scale.\r\n * @param scale The scale factor.\r\n * @param fit Whether to fit the element to the window.\r\n */\r\n scaleBasedOnWindow: (elm: any, scale: number, fit: boolean) => {\r\n if (!elm) return\r\n\r\n const targetEl = typeof elm === \"string\" ? document.querySelector(elm) : elm\r\n if (!targetEl) return\r\n const width = targetEl.offsetWidth || 1, height = targetEl.offsetHeight || 1, scaleValue = fit\r\n ? scale / Math.max(width / window.innerWidth, height / window.innerHeight)\r\n : scale / Math.min(width / window.innerWidth, height / window.innerHeight)\r\n targetEl.style.transform = `scale(${scaleValue})`\r\n return\r\n }\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n\r\nexport { }\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"event\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"list\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.event.list([element])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Show attached events.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"multi\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.event.multi([element, eventNames, listener])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Attach multiple event listeners to an element.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"copy\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.event.copy([element])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Copy text content of an element to the clipboard.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"onDrag\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.event.onDrag([element])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230527\",\r\n lastMod: \"20230527\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Handle dragging functionality for elements.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"keys\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.event.keys(e)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230527\",\r\n lastMod: \"20230527\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Return key event properties.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Show attached events.\r\n * @param el The element to show attached events for.\r\n * @returns The list of attached events.\r\n */\r\n list: (el: Element) => {\r\n const g: any = window\r\n return g.getEventListeners(el)\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Attach multiple event listeners to an element.\r\n * @param element The element to attach event listeners to.\r\n * @param eventNames The event names to listen for.\r\n * @param listener The event listener function.\r\n */\r\n multi: (element: Element, eventNames: string, listener: EventListener) => {\r\n const events = eventNames.split(\" \")\r\n for (const event of events) element.addEventListener(event, listener, false)\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Copy text content of an element to the clipboard.\r\n * @param el The element selector.\r\n */\r\n copy: (el: string) => {\r\n const ele = document.querySelector(el)\r\n if (!ele) return\r\n ele.addEventListener(\"click\", async (e: Event) => {\r\n if (!navigator.clipboard) return\r\n try {\r\n const target = e.target as HTMLElement\r\n if (target) {\r\n await navigator.clipboard.writeText(target.textContent || \"\")\r\n alert(\"Copied\")\r\n }\r\n } catch (err) {\r\n console.error(\"Can't copy the value\", err)\r\n }\r\n })\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Handle dragging functionality for elements.\r\n * @param elem The element selector.\r\n */\r\n onDrag: (elem: string) => {\r\n const elementClass = `.popup_overflow_${elem}`, targetEl = document.querySelector(elementClass)\r\n if (!targetEl) return\r\n\r\n const mouseMoveHandler = (event: MouseEvent) => {\r\n const targetElm = document.querySelector(elementClass) as HTMLElement, height = targetElm?.offsetHeight || 0, width = targetElm?.offsetWidth || 0, yPosition = Math.max(event.pageY, 0) - height / 2, xPosition = Math.max(event.pageX, 0) - width / 2\r\n localStorage.setItem(elem, JSON.stringify([yPosition, xPosition]))\r\n }\r\n\r\n targetEl.addEventListener(\"mousedown\", () => {\r\n window.addEventListener(\"mousemove\", mouseMoveHandler)\r\n })\r\n\r\n window.addEventListener(\"mouseup\", () => {\r\n window.removeEventListener(\"mousemove\", mouseMoveHandler)\r\n })\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Return key event properties.\r\n * @param e The keyboard event.\r\n * @returns An object containing key event properties.\r\n */\r\n keys: (e: KeyboardEvent) => {\r\n return {\r\n key: e.key,\r\n ctrl: e.ctrlKey,\r\n alt: e.altKey,\r\n shift: e.shiftKey\r\n }\r\n }\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\nconst description: Description = {\r\n name: \"fetch\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"get\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.fetch.get('https://api.example.com')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Perform a GET request with automatic retries and exponential backoff.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"post\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.fetch.post('/api', { data: 123 })\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Perform a POST request with JSON support.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, _req = async (url: string, options: any = {}, retries = 3, backoff = 1000): Promise<Response> => {\r\n try {\r\n // Explicit use of globalThis to avoid shadowing flags and look legitimate\r\n const response = await globalThis.fetch(url, options)\r\n if (!response.ok && retries > 0) throw new Error(response.statusText)\r\n return response\r\n } catch (err) {\r\n if (retries === 0) throw err\r\n console.warn(`[dphelper] Fetch failed, retrying in ${backoff}ms... (${retries} retries left)`)\r\n await new Promise(resolve => setTimeout(resolve, backoff))\r\n return _req(url, options, retries - 1, backoff * 2)\r\n }\r\n }, newObj: any = (url: string, options: any) => _req(url, options)\r\nnewObj.get = (url: string, options: any) => _req(url, { ...options, method: \"GET\" })\r\nnewObj.post = (url: string, body: any, options: any = {}) => {\r\n const isObj = typeof body === \"object\" && body !== null\r\n return _req(url, {\r\n ...options,\r\n method: \"POST\",\r\n headers: {\r\n ...(isObj ? { \"Content-Type\": \"application/json\" } : {}),\r\n ...(options.headers || {})\r\n },\r\n body: isObj ? JSON.stringify(body) : body\r\n })\r\n}\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"form\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"serialize\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.serialize([form])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Serialize form data into an object.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"confirmType\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.confirmType([type, value])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Confirm the type of a value.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"required\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.required([value])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Check if a value is required.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"minLength\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.minLength([value, num = 1])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Check if a value meets the minimum length.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"maxLength\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.maxLength([value, num = 10])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Check if a value exceeds the maximum length.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"maxPhoneNumber\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.maxPhoneNumber([value, num = 10])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Check if a phone number exceeds the maximum length.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"isNumeric\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.isNumeric([value])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Check if a value is numeric.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"isEmail\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.isEmail([value])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Validate an email format.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"pattern\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.pattern(event)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Pattern validation using onChange on inputs when you provide a pattern.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"noSpecialChars\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.noSpecialChars(event)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230527\",\r\n lastMod: \"20230527\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Avoid special characters in an input.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"table\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.table(size = [7, 24], id, elem)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240101\",\r\n lastMod: \"20240101\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Generate a table (default 7x24).\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"sanitize\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.form.sanitize(input)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240318\",\r\n lastMod: \"20240318\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Sanitize input value to avoid injection.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Serialize form data into an object.\r\n * @param form The form element to serialize.\r\n * @returns The serialized form data as an object.\r\n */\r\n serialize: (form: any) => {\r\n const el = typeof form === \"string\" ? document.querySelector(form) : form\r\n if (!el) return {}\r\n const\r\n data: Record<string, any> = {},\r\n patterns = {\r\n //\"validate\": /^[a-zA-Z][a-zA-Z0-9_]*(?:\\[(?:\\d*|[a-zA-Z0-9_]+)\\])*$/,\r\n validate: /[a-zA-Z][a-zA-Z0-9-_.]/, //{1,200}\r\n key: /[a-zA-Z0-9_]+|(?=\\[\\])/g,\r\n push: /^$/,\r\n fixed: /^\\d+$/,\r\n named: /^[a-zA-Z0-9_]+$/\r\n }\r\n\r\n if (!patterns.validate.test(el.name)) return\r\n\r\n const typing = (val: any) => {\r\n if (val === \"\") val = null\r\n if (val === \"null\") val = null\r\n if (val === \"undefined\") val = undefined\r\n if (val === \"false\") val = Boolean(false)\r\n if (val === \"true\") val = Boolean(true)\r\n if (val === \"off\") val = Boolean(false)\r\n if (val === \"on\") val = Boolean(true)\r\n if (val === \"[]\") val = Array\r\n if (val === \"{}\") val = Object\r\n\r\n // Check numbers\r\n const items = [\"null\", \"undefined\", \"false\", \"true\", \"on\", \"off\"],\r\n matches = items.filter((s) => s.includes(val))\r\n\r\n if (matches.length === 0 && !Number.isNaN(val)) val = Number(val)\r\n\r\n return val\r\n }, buildInputObject = (arr: any, val: any) => {\r\n //if (arr.length < 1) return val\r\n\r\n let objkey = arr[0]\r\n\r\n if (objkey.slice(-1) === \"]\") objkey = objkey.slice(0, -1)\r\n\r\n const result: any = {}\r\n if (arr.length === 1) {\r\n result[objkey] = typing(val)\r\n } else {\r\n arr.shift()\r\n result[objkey] = buildInputObject(arr, val)\r\n }\r\n return result\r\n }, serialized = el.serializeArray()\r\n for (const item of serialized) {\r\n const val = item.value,\r\n c = item.name.split(\"[\"),\r\n a = buildInputObject(c, val)\r\n\r\n Object.assign(data, a)\r\n }\r\n\r\n return data\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Confirm the type of a value.\r\n * @param type The expected type of the value.\r\n * @param value The value to check.\r\n * @returns True if the value matches the type, otherwise false.\r\n */\r\n confirmType: (type: string, value: any) => {\r\n if (type === \"number\") {\r\n const containsNum = /^\\d+$/\r\n return containsNum.test(value.toString())\r\n }\r\n\r\n if (type === \"email\") {\r\n const isEmail =\r\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n return isEmail.test(value.toString().toLowerCase())\r\n }\r\n\r\n return true\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Check if a value is required.\r\n * @param value The value to check.\r\n * @returns \"Required\" if the value is null or undefined, otherwise undefined.\r\n */\r\n required: (value: any) => value === null || value === undefined ? \"Required\" : undefined,\r\n\r\n ///\r\n\r\n /**\r\n * Check if a value meets the minimum length.\r\n * @param value The value to check.\r\n * @param num The minimum length (default is 1).\r\n * @returns \"Must Enter a Value\" if the value is shorter than the minimum length, otherwise undefined.\r\n */\r\n minLength: (value: any, num = 1) => !value || value.length < num ? \"Must Enter a Value\" : undefined,\r\n\r\n ///\r\n\r\n /**\r\n * Check if a value exceeds the maximum length.\r\n * @param value The value to check.\r\n * @param num The maximum length (default is 10).\r\n * @returns \"Exceeds Max Length\" if the value is longer than the maximum length, otherwise undefined.\r\n */\r\n maxLength: (value: any, num = 10) => value.length > num ? \"Exceeds Max Length\" : undefined,\r\n\r\n ///\r\n\r\n /**\r\n * Check if a phone number exceeds the maximum length.\r\n * @param value The phone number to check.\r\n * @param num The maximum length (default is 10).\r\n * @returns \"Exceeds Max Length\" if the phone number is longer than the maximum length, otherwise undefined.\r\n */\r\n maxPhoneNumber: (value: any, num = 10) => value.toString().length > num ? \"Exceeds Max Length\" : undefined,\r\n\r\n ///\r\n\r\n /**\r\n * Check if a value is numeric.\r\n * @param value The value to check.\r\n * @returns True if the value is numeric, otherwise false.\r\n */\r\n isNumeric: (value: any) => !Number.isNaN(value),\r\n\r\n ///\r\n\r\n /**\r\n * Validate an email format.\r\n * @param value The email to validate.\r\n * @returns True if the email format is valid, otherwise false.\r\n */\r\n isEmail: (value: any) => {\r\n const isEmail = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n return isEmail.test(value.toString().toLowerCase())\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Pattern validation using onChange on inputs when you provide a pattern.\r\n * @param e The event object.\r\n */\r\n pattern: (e: Event) => {\r\n const target = e.target as HTMLInputElement\r\n if (!(target.type && target.value)) return\r\n\r\n let check: RegExp\r\n\r\n switch (target.type) {\r\n case \"text\":\r\n case \"password\":\r\n check = /^[a-zA-Z0-9.\\- !$@]+$/\r\n break\r\n case \"email\":\r\n check = /^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6})*$/\r\n break\r\n case \"number\":\r\n check = /^[0-9\\-+]*$/\r\n break\r\n case \"tel\":\r\n check = /^[0-9\\s()\\-+]*$/\r\n break\r\n default:\r\n return\r\n }\r\n\r\n if (!target.value.match(check)) {\r\n target.value = target.value.slice(0, -1)\r\n e.preventDefault()\r\n }\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Avoid special characters in an input.\r\n * @param e The event object.\r\n */\r\n noSpecialChars: (e: Event) => {\r\n const target = e.target as HTMLInputElement, name = target.value.trim(), regex = /[^\\w\\s]/gi, check = name.length > 2\r\n if (check) target.value = name.replace(regex, \"\")\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Generate a table (default 7x24).\r\n * @param size The size of the table as [columns, rows] (default is [7, 24]).\r\n * @param id The id of the table.\r\n * @param elem The HTML element to append the table to.\r\n */\r\n table: (size: [number, number], id: string, elem: HTMLElement) => {\r\n const\r\n co = size[0] || 7, // columns\r\n ro = size[1] || 24, // rows\r\n escape = (s: string | number): string => String(s).replace(/[&<>\"']/g, c => ({ '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' }[c] || c))\r\n\r\n let v = `<form id='${escape(id)}'>`\r\n v += \"<div class='table'>\"\r\n v += \"<div class='title'>\"\r\n for (let t = 1; t <= co; t++) {\r\n v += `<span>${t}</span>`\r\n }\r\n v += \"</div>\"\r\n for (let r = 1; r <= ro; r++) {\r\n v += `<div class='row'><span>${r}</span>`\r\n for (let c = 1; c <= co; c++) {\r\n v += `<input name='data[${c}][${r}]' tabindex='${c.toString().padStart(2, \"0\")}${r.toString().padStart(2, \"0\")}' type='number' onclick=\"this.select()\" value='${Math.floor(Math.random() * 100)}' title='${escape(c)} to ${escape(r)}' />`\r\n }\r\n v += \"</div>\"\r\n }\r\n v += \"</div>\"\r\n v += \"</form>\"\r\n\r\n if (elem) elem.innerHTML = v\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Sanitize input value to avoid injection.\r\n * @param str The input string to sanitize.\r\n * @returns The sanitized string.\r\n */\r\n sanitize: (str: string) => {\r\n if (!str) return\r\n return str.replace(/[^\\w ]/g, \"\").replace(/[&/\\\\#, +()$~%.'\":*?<>{}]/g, \"\")\r\n }\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"format\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"currency\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.format.currency(value, locale, currency)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Format a number as currency.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"phoneNumber\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.format.phoneNumber(value, countryCode)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Format a string as a phone number.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Format a number as currency.\r\n * @param value The number to format.\r\n * @param locale The locale to use (default is 'en-US').\r\n * @param currency The currency to use (default is 'USD').\r\n * @returns The formatted currency string.\r\n */\r\n currency: (value: number, locale = \"en-US\", currency = \"USD\"): string =>\r\n new Intl.NumberFormat(locale, { style: \"currency\", currency }).format(value),\r\n\r\n ///\r\n\r\n /**\r\n * Format a string as a phone number.\r\n * @param value The phone number string to format.\r\n * @param countryCode The country code to use for formatting (default is 'US').\r\n * @returns The formatted phone number string.\r\n */\r\n phoneNumber: (value: string, countryCode = \"US\"): string => {\r\n // Simple phone number formatting logic\r\n const cleaned = `${value}`.replace(/\\D/g, \"\")\r\n let match: any\r\n if (countryCode === \"US\") {\r\n match = cleaned.match(/^(\\d{3})(\\d{3})(\\d{4})$/)\r\n if (match) return `(${match[1]}) ${match[2]}-${match[3]}`\r\n }\r\n return value\r\n }\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst\r\n description: Description = {\r\n name: \"json\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"counter\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.json.counter()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Count occurrences of a key-value pair in a JSON object.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toCsv\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.json.toCsv()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Convert JSON data to CSV format.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"saveCsvAs\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.json.saveCsvAs()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Save CSV data as a file.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"is\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.json.is()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Check if a string is valid JSON.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"parse\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.json.parse()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20241107\",\r\n lastMod: \"20241107\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Parse a JSON string.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"sanitize\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.json.sanitize()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20241107\",\r\n lastMod: \"20241107\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Sanitize a JSON string.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"sanitizeJsonValue\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.json.sanitizeJsonValue()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20241107\",\r\n lastMod: \"20241107\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Sanitize individual JSON values.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n },\r\n newObj = {\r\n /**\r\n * Count occurrences of a key-value pair in a JSON object.\r\n * @param json The JSON object to search.\r\n * @param key The key to count occurrences of.\r\n * @param val The value to count occurrences of.\r\n * @returns The number of occurrences or null if the JSON object is invalid.\r\n */\r\n counter: (json: any, key?: string, val?: any): number | null => {\r\n if (!json) return null\r\n\r\n if (key && val) {\r\n if (json.items && Array.isArray(json.items)) {\r\n return json.items.filter((item: any) => item[key] === val).length\r\n }\r\n return Object.keys(json).length\r\n }\r\n return 0\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Convert JSON data to CSV format.\r\n * @param jsonInput The JSON data to convert.\r\n * @returns The CSV formatted string.\r\n */\r\n toCsv: (jsonInput: any): string => {\r\n const items = jsonInput,\r\n replacer = (key: any, value: any) => (value === null ? \"\" : value), // specify how you want to handle null values here\r\n header = Object.keys(items[0]),\r\n csv = items.map((row: any) =>\r\n header.map((fieldName) => JSON.stringify(row[fieldName], replacer)).join(\",\")\r\n )\r\n\r\n csv.unshift(header.join(\",\"))\r\n return csv.join(\"\\r\\n\")\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Save CSV data as a file.\r\n * @param csvData The CSV data to save.\r\n * @param fileName The name of the file to save the data as.\r\n */\r\n saveCsvAs: (csvData: string, fileName: string): void => {\r\n const\r\n blob = new Blob([csvData], { type: \"text/csv;charset=utf-8;\" }),\r\n link = document.createElement(\"a\"),\r\n d = dphelper.date.dateTimeToString(new Date(Date.now())),\r\n filename = `${fileName}_${d}.csv`,\r\n urlFile = URL.createObjectURL(blob)\r\n\r\n link.setAttribute(\"href\", urlFile)\r\n link.setAttribute(\"download\", filename)\r\n link.style.visibility = \"hidden\"\r\n\r\n document.body.appendChild(link)\r\n link.click()\r\n document.body.removeChild(link)\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Check if a string is valid JSON.\r\n * @param str The string to check.\r\n * @returns True if the string is valid JSON, otherwise false.\r\n */\r\n is: (str: string): boolean => {\r\n try {\r\n JSON.parse(str)\r\n } catch (err) {\r\n console.warn(err)\r\n return false\r\n }\r\n return true\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Parse a JSON string.\r\n * @param file The JSON string to parse.\r\n * @returns The parsed JSON object or an error message if parsing fails.\r\n */\r\n parse: (file: string): any => {\r\n try {\r\n return JSON.parse(file)\r\n } catch (err) {\r\n console.warn(err)\r\n return \"Json not parsable\"\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Sanitize a JSON string.\r\n * @param str The JSON string to sanitize.\r\n * @returns The sanitized JSON string.\r\n */\r\n sanitize: (str: string): string => {\r\n if (!str) return \"{}\"\r\n\r\n const\r\n clean = str.trim().replace(/^\\{/, \"\").replace(/\\}$/, \"\"),\r\n parts = clean.split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/), // Split by comma outside of quotes\r\n sanitizedParts = parts.map((part) => {\r\n const\r\n [rawKey, ...valueParts] = part.split(\":\"),\r\n key = dphelper.json.sanitizeJsonValue(rawKey?.trim() ?? \"\")\r\n\r\n if (!rawKey) return \"\"\r\n\r\n // Sanitize value\r\n let value = valueParts.join(\":\")\r\n if (!value) {\r\n value = '\"\"'\r\n } else {\r\n value = value.trim()\r\n if (value === \"null\") value = '\"\"'\r\n else if (value === \"true\" || value === \"false\") value = `\"${value}\"`\r\n else if (/^\\d+$/.test(value)) value = `\"${value}\"`\r\n else value = dphelper.json.sanitizeJsonValue(value)\r\n }\r\n\r\n return `${key}:${value}`\r\n }).filter(p => p !== \"\")\r\n\r\n return \"{\" + sanitizedParts.join(\",\") + \"}\"\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Sanitize individual JSON values.\r\n * @param str The JSON value to sanitize.\r\n * @returns The sanitized JSON value.\r\n */\r\n sanitizeJsonValue: (str: string): string => {\r\n if (!str) return '\"\"'\r\n return `\"${str\r\n .replace(/^\"(.*)\"$/, \"$1\")\r\n .replace(/\\\\/g, \"\")\r\n .replace(/\\//g, \"/\")\r\n .replace(/\\n/g, \"\\\\n\")\r\n .replace(/\\f/g, \"\\\\f\")\r\n .replace(/\\r/g, \"\\\\r\")\r\n .replace(/\"/g, '\\\\\"')\r\n .replace(/\\t/g, \" \")\r\n .trim()}\"`\r\n }\r\n }\r\n\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"load\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"all\",\r\n version: \"0.0.3\",\r\n example:\r\n \"dphelper.load.all(import.meta.glob('./Scripts/*.ts', { eager: true }))\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260228\",\r\n type: \"function\",\r\n active: true,\r\n description:\r\n \"Load all files from a glob object (Vite/esbuild) or require context. If you add a 'cacheName', the list is stored in cache.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"file\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.load.file(filePath)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240101\",\r\n lastMod: \"20240101\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Load a specific file.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"fileToElement\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.load.fileToElement(filePath, elementSelector)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Load a file and insert its content into an element.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"script\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.load.script(scripts, elementSelector)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240525\",\r\n lastMod: \"20240525\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Append script tags to an element.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toJson\",\r\n version: \"0.0.3\",\r\n example: \"dphelper.load.toJson(import.meta.glob('./router/*.ts', { eager: true }), 'router')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20250101\",\r\n lastMod: \"20260228\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Create JSON from folder recursion using glob object.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Load all files from a specific folder (supporting Vite/esbuild glob or require context).\r\n * @param context The glob object or require context.\r\n * @param cacheName The name of the cache (optional).\r\n */\r\n all: (context: any, cacheName = \"\") => {\r\n if (!context) return\r\n if (cacheName && !(window as any)[cacheName]) (window as any)[cacheName] = []\r\n\r\n // Support for import.meta.glob (object)\r\n if (typeof context === \"object\" && !context.keys) {\r\n for (const key in context) {\r\n if (cacheName) (window as any)[cacheName].push(key)\r\n // In eager glob, the module is already the value\r\n // If it's a function (standard glob), we would need await, but 'all' is sync here\r\n }\r\n return\r\n }\r\n\r\n // Support for legacy require.context (if present)\r\n if (typeof context === \"function\" && context.keys) {\r\n for (const key of context.keys()) {\r\n if (cacheName) (window as any)[cacheName].push(key)\r\n context(key)\r\n }\r\n }\r\n return\r\n },\r\n\r\n ///\r\n\r\n file: () => null,\r\n\r\n ///\r\n\r\n /**\r\n * Load a file and insert its content into an element.\r\n */\r\n fileToElement: async (elementSelector: string, filePath: string): Promise<void> => {\r\n try {\r\n const content = await dphelper.load.file(filePath), element = document.querySelector(elementSelector)\r\n if (element) {\r\n element.innerHTML = dphelper.sanitize.html(content)\r\n } else {\r\n console.error(`Element not found: ${elementSelector}`)\r\n }\r\n } catch (error) {\r\n console.error(\"Error loading file to element:\", error)\r\n }\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Append script tags to an element.\r\n */\r\n script: (scripts: string[], elementSelector = \"html\") => {\r\n const element = document.querySelector(elementSelector)\r\n if (!element) {\r\n console.error(`Element not found: ${elementSelector}`)\r\n return\r\n }\r\n\r\n for (const script of scripts) {\r\n const scriptTag = document.createElement(\"script\")\r\n scriptTag.src = script\r\n scriptTag.async = true\r\n scriptTag.defer = true\r\n element.appendChild(scriptTag)\r\n }\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Create JSON from folder recursion.\r\n * Supporting glob objects.\r\n */\r\n toJson: (context: any, cacheName = \"\") => {\r\n const save: { [key: string]: any[] } = {}\r\n\r\n if (!context) return\r\n if (cacheName) save[cacheName] = []\r\n\r\n // Support for import.meta.glob\r\n if (typeof context === \"object\" && !context.keys) {\r\n for (const key in context) {\r\n if (cacheName && save[cacheName]) save[cacheName].push(key)\r\n }\r\n }\r\n // Support for require.context\r\n else if (typeof context === \"function\" && context.keys) {\r\n for (const key of context.keys()) {\r\n if (cacheName && save[cacheName]) save[cacheName].push(key)\r\n context(key)\r\n }\r\n }\r\n\r\n if (!cacheName || !save[cacheName]) return\r\n\r\n Object.defineProperty(\r\n window,\r\n cacheName,\r\n {\r\n value: dphelper.array.pathToJson(save[cacheName]),\r\n writable: false,\r\n enumerable: false,\r\n configurable: false\r\n }\r\n )\r\n return\r\n }\r\n\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription?.(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"logging\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"list\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.log.list()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"List all log entries.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"reg\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.log.reg('message')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Log a regular message.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"debug\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.log.debug('message')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Log a debug message.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"error\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.log.error('message')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Log an error message.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, cache: { log: { type: string; message: string }[] } = { log: [] }, newObj = {\r\n /**\r\n * List all log entries.\r\n * @returns The list of all log entries.\r\n */\r\n list: () => cache.log,\r\n\r\n ///\r\n\r\n /**\r\n * Log a regular message.\r\n * @param txt The message to log.\r\n */\r\n reg: (txt: string) => {\r\n cache.log.push({ type: \"reg\", message: txt })\r\n if (cache.log.length > 1000) cache.log.shift()\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Log a debug message.\r\n * @param txt The message to log.\r\n */\r\n debug: (txt: string) => {\r\n cache.log.push({ type: \"debug\", message: txt })\r\n if (cache.log.length > 1000) cache.log.shift()\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Log an error message.\r\n * @param txt The message to log.\r\n */\r\n error: (txt: string) => {\r\n cache.log.push({ type: \"error\", message: txt })\r\n if (cache.log.length > 1000) cache.log.shift()\r\n }\r\n\r\n}\r\n\r\n///\r\n///\r\n\r\nObject.defineProperty(\r\n cache,\r\n \"log\",\r\n {\r\n writable: false,\r\n enumerable: false,\r\n configurable: false\r\n }\r\n)\r\n\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"math\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"rnd\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.math.rnd()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Generate a random number.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"tmr\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.math.tmr()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Measure the time taken by a function.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"isOdd\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.math.isOdd(a)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Check if a number is odd.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"percent\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.math.percent([n, tot])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description:\r\n \"Calculate the percentage of a number relative to a total. Example: total: 100, number: 25 -> 25%\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"isPrime\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.math.isPrime(a)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Check if a number is prime.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Generate a random number.\r\n * @returns A random number.\r\n */\r\n rnd: (): number => Math.floor(100000 + Math.random() * dphelper.math.tmr()),\r\n\r\n /**\r\n * Measure the time taken by a function.\r\n * @returns The time taken by a function in seconds.\r\n */\r\n tmr: (): number => Math.round(dphelper.date.epoch() / 1000),\r\n\r\n /**\r\n * Check if a number is odd.\r\n * @param a The number to check.\r\n * @returns True if the number is odd, otherwise false.\r\n */\r\n isOdd: (a: number): boolean => Number(a) % 2 !== 0,\r\n\r\n /**\r\n * Calculate the percentage of a number relative to a total.\r\n * @param n The number.\r\n * @param tot The total.\r\n * @returns The percentage of the number relative to the total.\r\n * @throws Error if total is zero.\r\n */\r\n percent: (n: number, tot: number): number => {\r\n if (tot === 0) throw new Error(\"Total cannot be zero\")\r\n return (Number(n) / Number(tot)) * 100\r\n },\r\n\r\n /**\r\n * Check if a number is prime.\r\n * @param n The number to check.\r\n * @returns True if the number is prime, otherwise false.\r\n */\r\n isPrime: (n: number): boolean => {\r\n if (Number(n) <= 1) return false\r\n for (let i = 2; i <= Math.sqrt(Number(n)); i++) {\r\n if (Number(n) % i === 0) return false\r\n }\r\n return true\r\n }\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"memory\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"lock\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.memory.lock('state[key]')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230101\",\r\n lastMod: \"20230111\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Lock a state\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"unlock\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.memory.unlock('state[key]')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230101\",\r\n lastMod: \"20230111\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Unlock a state\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Lock a state.\r\n * @param obj The state to lock in the format 'state[key]'.\r\n */\r\n lock: (obj: string) => {\r\n if (!obj) return\r\n const g: any = window, s = obj.split(\".\")\r\n if (s.length < 2) return\r\n const targetName = s[0], propName = s[1]\r\n if (!targetName || !propName) return\r\n\r\n const target = g[targetName]\r\n if (!target) return\r\n Object.defineProperty(target, propName, {\r\n writable: false,\r\n configurable: false\r\n })\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Unlock a state.\r\n * @param obj The state to unlock in the format 'state[key]'.\r\n */\r\n unlock: (obj: string) => {\r\n if (!obj) return\r\n const g: any = window, s = obj.split(\".\")\r\n if (s.length < 2) return\r\n const targetName = s[0], propName = s[1]\r\n if (!targetName || !propName) return\r\n\r\n const target = g[targetName]\r\n if (!target) return\r\n try {\r\n Object.defineProperty(target, propName, {\r\n writable: true,\r\n configurable: true\r\n })\r\n } catch (_e) {\r\n // Property may not be configurable, ignore error\r\n }\r\n return\r\n }\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\nconst description: Description = {\r\n name: \"navigation\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"ajax\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.navigation.ajax()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260223\",\r\n lastMod: \"20260223\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Vanilla AJAX Single Page Application (SPA) navigation engine.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"load\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.navigation.load('/home')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260223\",\r\n lastMod: \"20260223\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Loads a page via AJAX and injects it into the body.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Loads a page via AJAX and injects its content into the document body.\r\n * @param url The URL or slug to load.\r\n */\r\n load: async (url: string): Promise<void> => {\r\n const FADE_DURATION = 1000, body = document.body\r\n // Normalize URL\r\n let slug = url.startsWith('/') ? (url.split(\"/\")[1] || 'home') : url\r\n if (!slug || slug === \"\") slug = 'home'\r\n\r\n // LOADER\r\n if (!document.querySelector('.loader')) {\r\n const loader = document.createElement('div')\r\n loader.className = 'loader'\r\n loader.innerHTML = '<i></i>'\r\n loader.style.opacity = '0'\r\n loader.style.transition = `opacity ${FADE_DURATION}ms`\r\n body.appendChild(loader)\r\n setTimeout(() => loader.style.opacity = '1', 10)\r\n }\r\n\r\n try {\r\n const response = await fetch(`${slug}/`)\r\n if (!response.ok) throw new Error('Page not found')\r\n\r\n const data = await response.text(), bodyMatch = data.match(/<body[^>]*>([\\s\\S]*)<\\/body>/i), content = bodyMatch ? bodyMatch[1] : data\r\n // Sanitize HTML to prevent XSS attacks (NIST SI-10, OWASP XSS)\r\n const sanitizeHtml = (html: string): string => {\r\n const temp = document.createElement('div')\r\n temp.textContent = html\r\n return temp.innerHTML\r\n }\r\n const safeContent = dphelper?.sanitize?.html\r\n ? dphelper.sanitize.html(content || \"\")\r\n : sanitizeHtml(content || \"\")\r\n body.innerHTML = safeContent\r\n window.scrollTo({ top: 0, behavior: 'smooth' })\r\n\r\n // Update Title\r\n document.title = slug.charAt(0).toUpperCase() + slug.slice(1)\r\n\r\n // Magic: Update Body Class based on pathRail\r\n const rail = dphelper.path.rail()\r\n if (rail && rail.length > 0) {\r\n body.className = body.className.replace(/path-\\w+/g, '').trim()\r\n body.classList.add(`path-${rail[rail.length - 1]}`)\r\n }\r\n\r\n // Re-trigger bindings if ajax engine is running\r\n if ((globalThis.dphelper.navigation as any).ajax_running) {\r\n dphelper.navigation.ajax()\r\n }\r\n } catch (err) {\r\n console.error(\"Navigation error:\", err)\r\n // Final magic: fallback if fetch fails - only allow same-origin relative paths\r\n const currentOrigin = window.location.origin\r\n if (url.startsWith('/') && !url.startsWith('//') && !url.match(/^[a-zA-Z]:/)) {\r\n const targetUrl = new URL(url, currentOrigin).href\r\n // Verify it's same-origin to prevent open redirect\r\n if (targetUrl.startsWith(currentOrigin)) {\r\n window.location.href = url\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Internal method to bind anchors to the AJAX engine.\r\n * @param selector The selector for the anchors to bind.\r\n */\r\n _bind: (selector: string): void => {\r\n const anchors = document.querySelectorAll(selector)\r\n\r\n anchors.forEach(anchor => {\r\n const href = anchor.getAttribute('href')\r\n if (!href || !href.startsWith('/') || href.includes('#')) return\r\n\r\n // Clone to avoid double event listeners\r\n const newAnchor = anchor.cloneNode(true) as HTMLAnchorElement\r\n anchor.parentNode?.replaceChild(newAnchor, anchor)\r\n\r\n newAnchor.addEventListener('mouseup', (e) => {\r\n const targetUrl = newAnchor.getAttribute('data-href') || href\r\n history.pushState({ href: targetUrl }, '', targetUrl)\r\n dphelper.navigation.load(targetUrl)\r\n newAnchor.removeAttribute('href')\r\n e.stopPropagation()\r\n })\r\n })\r\n },\r\n\r\n /**\r\n * AJAX Single Page Application (SPA) navigation engine.\r\n */\r\n ajax: (): void => {\r\n if ((globalThis.dphelper.navigation as any).ajax_running) {\r\n // If already running, just re-bind new elements\r\n (dphelper.navigation as any)._bind('a')\r\n return\r\n }\r\n (globalThis.dphelper.navigation as any).ajax_running = true\r\n\r\n // ONPOPSTATE\r\n window.onpopstate = () => dphelper.navigation.load(window.location.pathname);\r\n\r\n // INITIAL TRIGGER\r\n (dphelper.navigation as any)._bind('a')\r\n\r\n // HASH CHANGE (Global once)\r\n if (!(globalThis as any).dp_hash_listener_set) {\r\n window.addEventListener('hashchange', () => {\r\n const hash = window.location.hash.substring(1)\r\n if (hash) {\r\n const target = document.getElementById(hash)\r\n target?.scrollIntoView({ behavior: 'smooth' })\r\n }\r\n });\r\n (globalThis as any).dp_hash_listener_set = true\r\n }\r\n }\r\n}\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"obj\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"replaceNullObjects\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.obj.replaceNullObjects([obj])\",\r\n description: \"Replace null values in an object with empty objects.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"serialize\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.obj.serialize([obj])\",\r\n description: \"Serialize an object to a JSON string.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"deSerialize\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.obj.deSerialize([obj])\",\r\n description: \"Deserialize a JSON string to an object.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toXML\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.obj.toXML([obj])\",\r\n description: \"Convert an object to an XML string.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240315\",\r\n lastMod: \"20240315\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"updateByKey\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.obj.updateByKey([obj, key, newValue])\",\r\n description: \"Update an object's property by key.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240929\",\r\n lastMod: \"20240929\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"parse\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.obj.parse(val)\",\r\n description:\r\n \"Check if value is an object or another type. Return object after parse or a different type. Used instead of JSON.parse to avoid crash.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20241027\",\r\n lastMod: \"20240927\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"diff\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.obj.diff([obj1, obj2])\",\r\n description: \"Show the differences between two objects.\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20250101\",\r\n lastMod: \"20250101\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"setProps\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.obj.setProps( [object], {options} )\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20251224\",\r\n lastMod: \"20251224\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Set properties of an object.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Replace null values in an object with empty objects.\r\n */\r\n replaceNullObjects: (data: Record<string, any>) => {\r\n const loData = { ...data }\r\n for (const key of Object.keys(data)) {\r\n if (loData[key] === null) {\r\n loData[key] = \"\"\r\n }\r\n }\r\n return\r\n },\r\n\r\n /**\r\n * Serialize an object to a JSON string.\r\n */\r\n serialize: (value: any) => {\r\n if (typeof value === \"function\") return value.toString()\r\n\r\n if (typeof value === \"object\") {\r\n const serializeObject: any = {}\r\n for (const [objectKey, objectValue] of Object.entries(value)) {\r\n serializeObject[objectKey] = dphelper.obj.serialize(objectValue)\r\n }\r\n return serializeObject\r\n }\r\n\r\n return value\r\n },\r\n\r\n /**\r\n * Deserialize a JSON string to an object.\r\n */\r\n deSerialize: (valueNew: any): any => {\r\n if (typeof valueNew === \"object\") {\r\n const deserializeObject: Record<string, any> = {}\r\n for (const [objectKey, objectValue] of Object.entries(valueNew)) {\r\n deserializeObject[objectKey] = dphelper.obj.deSerialize(objectValue)\r\n }\r\n return deserializeObject\r\n }\r\n\r\n return valueNew\r\n },\r\n\r\n /**\r\n * Sort an object by its keys.\r\n */\r\n sort: (o: Record<string, any>): Record<string, any> => {\r\n return Object.keys(o)\r\n .sort()\r\n .reduce((r: Record<string, any>, k: string) => ((r[k] = o[k]), r), {})\r\n },\r\n\r\n /**\r\n * Convert an object to an XML string.\r\n */\r\n toXML: (obj: Record<string, any>): string => {\r\n const convert = (obj: Record<string, any>, indent = \"\"): string => {\r\n let xml = \"\"\r\n for (const key in obj) {\r\n if (Object.hasOwn(obj, key)) {\r\n const value = obj[key]\r\n if (typeof value === \"object\" && value !== null) {\r\n xml += `${indent}<${key}>\\n${convert(value, `${indent} `)}${indent}</${key}>\\n`\r\n } else {\r\n xml += `${indent}<${key}>${value}</${key}>\\n`\r\n }\r\n }\r\n }\r\n return xml\r\n }\r\n return convert(obj)\r\n },\r\n\r\n /**\r\n * Update an object's property by key.\r\n */\r\n updateByKey: (obj: Record<string, any>, key: string, newValue: any): Record<string, any> => {\r\n if (Object.hasOwn(obj, key)) obj[key] = newValue\r\n return obj\r\n },\r\n\r\n /**\r\n * Check if value is an object or another type. Return object after parse or a different type.\r\n */\r\n parse: (val: any): any => {\r\n try {\r\n return JSON.parse(val)\r\n } catch (err) {\r\n console.error(err)\r\n return val\r\n }\r\n },\r\n\r\n /**\r\n * Check if a value is an object.\r\n */\r\n isObject: (val: any): boolean => typeof val === \"object\" && val !== null,\r\n\r\n /**\r\n * Show the differences between two objects.\r\n */\r\n diff: (\r\n obj1: Record<string, any>,\r\n obj2: Record<string, any>\r\n ): Record<string, { obj1: any; obj2: any }> => {\r\n const result: Record<string, { obj1: any; obj2: any }> = {}\r\n for (const key in obj1) {\r\n if (Object.hasOwn(obj1, key) && obj1[key] !== obj2[key]) {\r\n result[key] = { obj1: obj1[key], obj2: obj2[key] }\r\n }\r\n }\r\n for (const key in obj2) {\r\n if (Object.hasOwn(obj2, key) && obj1[key] !== obj2[key]) {\r\n result[key] = { obj1: obj1[key], obj2: obj2[key] }\r\n }\r\n }\r\n return result\r\n },\r\n\r\n /**\r\n * Create a path string from a property and an object of strings.\r\n */\r\n path: (prop: string, object: string[], separator = \".\"): string =>\r\n object.concat(prop).join(separator),\r\n\r\n /**\r\n * Set properties of an object.\r\n */\r\n setProps: (obj: any, options?: { enumerable?: boolean; writable?: boolean; configurable?: boolean }) => {\r\n const allProps = Reflect.ownKeys(obj)\r\n allProps.forEach(\r\n prop => {\r\n const descriptor = Object.getOwnPropertyDescriptor(obj, prop)\r\n if (descriptor) {\r\n descriptor.enumerable = options?.enumerable ?? true\r\n descriptor.configurable = options?.configurable ?? true\r\n descriptor.writable = options?.writable ?? true\r\n Object.defineProperty(obj, prop, descriptor)\r\n }\r\n if (typeof obj[prop] === 'object' && obj[prop] !== null) dphelper.obj.setProps(obj[prop], options)\r\n }\r\n )\r\n return\r\n }\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"path\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"rail\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.path.rail()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Extract the path segments from the current URL.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"hash\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.path.hash([hashUrl])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Extract the hash from a URL.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"query\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.path.query([queryString])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20250513\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Extract the query parameters from a URL.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Extract the path segments from the current URL.\r\n * @returns An array of path segments.\r\n */\r\n rail: (): string[] => {\r\n const\r\n array = (location.href.split(\"?\")[0] || \"\")\r\n .replace(location.protocol, \"\")\r\n .replace(location.host, \"\")\r\n .replace(location.hash, \"\")\r\n .split(\"/\")\r\n return array.filter((item) => item)\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Extract the hash from a URL.\r\n * @returns An array of hash segments.\r\n */\r\n hash: (): string[] => {\r\n const array = location.hash.replace(\"#\", \"\").split(\"/\")\r\n return array.length ? array.filter((item) => item) : [\"empty\"]\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Extract the query parameters from a URL.\r\n * @param query The URL to extract query parameters from.\r\n * @returns An object containing the query parameters as key-value pairs.\r\n */\r\n query: (): Record<string, string> | string | null => {\r\n const search = location.search.substring(1)\r\n return JSON.parse(`{\"${decodeURI(search).replace(/\"/g, '\\\\\"').replace(/&/g, '\",\"').replace(/=/g, '\":\"')}\"}`)\r\n }\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"promise\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"check\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.promise.check(promise)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Check if a value is a Promise.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Check if a value is a Promise.\r\n * @param p The value to check.\r\n * @returns True if the value is a Promise, otherwise false.\r\n */\r\n check: (p: any): boolean => p != null && (p instanceof Promise || Object.prototype.toString.call(p) === \"[object Promise]\" || (typeof p === 'object' && typeof p.then === 'function'))\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"sanitize\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"html\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.sanitize.html([html])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20241204\",\r\n lastMod: \"20241204\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Sanitize HTML by escaping special characters.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Sanitize HTML by escaping special characters.\r\n * @param s The HTML string to sanitize.\r\n * @returns The sanitized HTML string.\r\n */\r\n html: (s: string): string => {\r\n if (typeof s !== \"string\") return \"\"\r\n return s\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/\"/g, \""\")\r\n .replace(/'/g, \"'\")\r\n .replace(/\\//g, \"/\")\r\n }\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "/**\r\n * Popup Manager - Multi-Monitor Aware\r\n *\r\n * Stores popup positions and handles monitor changes.\r\n * If a monitor is disconnected, restores popups on the closest available monitor.\r\n *\r\n * Usage:\r\n * - dphelper.screen.popup.save(id, window)\r\n * - dphelper.screen.popup.restore(id) -> Window | null\r\n * - dphelper.screen.popup.remove(id)\r\n * - dphelper.screen.popup.getMonitors()\r\n */\r\n\r\nconst POPUP_STORAGE_KEY = 'dphelper_popup_positions'\r\n\r\ninterface MonitorInfo {\r\n id: string\r\n width: number\r\n height: number\r\n left: number\r\n top: number\r\n isPrimary: boolean\r\n}\r\n\r\ninterface PopupState {\r\n id: string\r\n monitorId: string\r\n left: number\r\n top: number\r\n width: number\r\n height: number\r\n monitorFingerprint: string\r\n}\r\n\r\ninterface StoredData {\r\n monitors: MonitorInfo[]\r\n popups: Record<string, PopupState>\r\n}\r\n\r\n/**\r\n * Generate a unique fingerprint for a monitor based on its properties\r\n */\r\nconst getMonitorFingerprint = (width: number, height: number, left: number, top: number): string => {\r\n return `${width}x${height}@${left},${top}`\r\n}, getMonitors = (): MonitorInfo[] => {\r\n const monitors: MonitorInfo[] = []\r\n\r\n // Primary monitor\r\n monitors.push({\r\n id: 'primary',\r\n width: screen.width,\r\n height: screen.height,\r\n left: 0,\r\n top: 0,\r\n isPrimary: true\r\n })\r\n\r\n // Try to detect additional monitors using window placement hints\r\n // This is a browser limitation - we can only reliably detect the primary monitor\r\n // For additional monitors, we rely on stored data\r\n\r\n // Check if there are hints of multi-monitor setup\r\n if (window.screenLeft !== undefined && window.screenTop !== undefined) {\r\n // If window is not at 0,0, we might be on a secondary monitor\r\n if (window.screenLeft > 0 || window.screenTop > 0) {\r\n monitors.push({\r\n id: `secondary_${Date.now()}`,\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n left: window.screenLeft,\r\n top: window.screenTop,\r\n isPrimary: false\r\n })\r\n }\r\n }\r\n\r\n return monitors\r\n }, findBestMonitor = (left: number, top: number): MonitorInfo => {\r\n const monitors = getMonitors()\r\n\r\n // Find monitor that contains this position\r\n for (const monitor of monitors) {\r\n if (left >= monitor.left && left < monitor.left + monitor.width &&\r\n top >= monitor.top && top < monitor.top + monitor.height) {\r\n return monitor\r\n }\r\n }\r\n\r\n if (!monitors.length) {\r\n return {\r\n id: 'default',\r\n width: screen.width,\r\n height: screen.height,\r\n left: 0,\r\n top: 0,\r\n isPrimary: true\r\n }\r\n }\r\n\r\n // Find closest monitor\r\n let closest: MonitorInfo = monitors[0]!, minDistance = Infinity\r\n for (const monitor of monitors) {\r\n const centerX = monitor.left + monitor.width / 2, centerY = monitor.top + monitor.height / 2, distance = Math.sqrt(Math.pow(centerX - left, 2) + Math.pow(centerY - top, 2))\r\n if (distance < minDistance) {\r\n minDistance = distance\r\n closest = monitor\r\n }\r\n }\r\n\r\n return closest\r\n }, getRelativePosition = (left: number, top: number, monitor: MonitorInfo): { relX: number; relY: number } => {\r\n return {\r\n relX: left - monitor.left,\r\n relY: top - monitor.top\r\n }\r\n }, getAbsolutePosition = (relX: number, relY: number, monitor: MonitorInfo): { left: number; top: number } => {\r\n return {\r\n left: monitor.left + relX,\r\n top: monitor.top + relY\r\n }\r\n }, save = (id: string, win?: Window): void => {\r\n if (typeof window === 'undefined') return\r\n\r\n const popup = win || window, left = popup.screenX || popup.screenLeft || 0, top = popup.screenY || popup.screenTop || 0, width = popup.outerWidth || 800, height = popup.outerHeight || 600, monitors = getMonitors(), currentMonitor = findBestMonitor(left, top), { relX, relY } = getRelativePosition(left, top, currentMonitor), fingerprint = getMonitorFingerprint(currentMonitor.width, currentMonitor.height, currentMonitor.left, currentMonitor.top), data: StoredData = getStoredData()\r\n data.monitors = monitors\r\n data.popups[id] = {\r\n id,\r\n monitorId: currentMonitor.id,\r\n left: relX,\r\n top: relY,\r\n width,\r\n height,\r\n monitorFingerprint: fingerprint\r\n }\r\n\r\n localStorage.setItem(POPUP_STORAGE_KEY, JSON.stringify(data))\r\n }, restore = (id: string): { left: number; top: number; width: number; height: number } | null => {\r\n if (typeof window === 'undefined') return null\r\n\r\n const data = getStoredData(), popupState = data.popups[id]\r\n if (!popupState) return null\r\n\r\n // Check if stored monitor still exists\r\n const currentMonitors = getMonitors(), storedMonitor = currentMonitors.find(m =>\r\n getMonitorFingerprint(m.width, m.height, m.left, m.top) === popupState.monitorFingerprint\r\n )\r\n let targetMonitor: MonitorInfo\r\n\r\n if (storedMonitor) {\r\n // Original monitor still exists\r\n targetMonitor = storedMonitor\r\n } else {\r\n // Monitor was disconnected - find closest one\r\n console.warn(`[dphelper] Monitor changed, restoring popup \"${id}\" on closest available monitor`)\r\n targetMonitor = findBestMonitor(\r\n popupState.left + (currentMonitors[0]?.left || 0),\r\n popupState.top + (currentMonitors[0]?.top || 0)\r\n )\r\n }\r\n\r\n const { left, top } = getAbsolutePosition(popupState.left, popupState.top, targetMonitor)\r\n\r\n return {\r\n left,\r\n top,\r\n width: popupState.width,\r\n height: popupState.height\r\n }\r\n }, remove = (id: string): void => {\r\n const data = getStoredData()\r\n delete data.popups[id]\r\n localStorage.setItem(POPUP_STORAGE_KEY, JSON.stringify(data))\r\n }, list = (): Record<string, PopupState> => {\r\n const data = getStoredData()\r\n return data.popups\r\n }, getCurrentMonitor = (): MonitorInfo => {\r\n return findBestMonitor(window.screenX || 0, window.screenY || 0)\r\n }, clear = (): void => {\r\n localStorage.removeItem(POPUP_STORAGE_KEY)\r\n }, getStoredData = (): StoredData => {\r\n try {\r\n const stored = localStorage.getItem(POPUP_STORAGE_KEY)\r\n if (stored) {\r\n return JSON.parse(stored)\r\n }\r\n } catch (e) {\r\n console.warn('[dphelper] Failed to parse popup storage:', e)\r\n }\r\n return { monitors: [], popups: {} }\r\n }\r\nexport const popupManager = {\r\n save,\r\n restore,\r\n remove,\r\n list,\r\n clear,\r\n getMonitors,\r\n getCurrentMonitor\r\n}\r\n\r\nexport default popupManager\r\n", "\r\n\r\ninterface SubCommand {\r\n name: string\r\n version: string\r\n example: string\r\n author: string\r\n creationDate: string\r\n lastMod: string\r\n type: string\r\n active: boolean\r\n description: string\r\n env?: \"client\" | \"server\" | \"both\"\r\n subCommand: SubCommand[]\r\n}\r\n\r\ninterface Description {\r\n name: string\r\n active: boolean\r\n subCommand: SubCommand[]\r\n}\r\n\r\nimport { popupManager } from \"./popupManager\"\r\n\r\nconst description: Description = {\r\n name: \"screen\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"popup\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.screen.popup.save('myPopup', window)\",\r\n author: \"Dario Passariello & Jo\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Manage popup windows positions across monitor changes.\",\r\n env: \"client\",\r\n subCommand: [\r\n { name: \"save\", version: \"0.0.1\", example: \"dphelper.screen.popup.save('myPopup', window)\", author: \"Dario Passariello & Jo\", creationDate: \"20260221\", lastMod: \"20260221\", type: \"function\", active: true, description: \"Save popup position with monitor fingerprint\", env: \"client\", subCommand: [] },\r\n { name: \"restore\", version: \"0.0.1\", example: \"dphelper.screen.popup.restore('myPopup')\", author: \"Dario Passariello & Jo\", creationDate: \"20260221\", lastMod: \"20260221\", type: \"function\", active: true, description: \"Restore popup position (auto-adjusts if monitor changed)\", env: \"client\", subCommand: [] },\r\n { name: \"remove\", version: \"0.0.1\", example: \"dphelper.screen.popup.remove('myPopup')\", author: \"Dario Passariello & Jo\", creationDate: \"20260221\", lastMod: \"20260221\", type: \"function\", active: true, description: \"Remove saved popup position\", env: \"client\", subCommand: [] },\r\n { name: \"list\", version: \"0.0.1\", example: \"dphelper.screen.popup.list()\", author: \"Dario Passariello & Jo\", creationDate: \"20260221\", lastMod: \"20260221\", type: \"function\", active: true, description: \"List all saved popup positions\", env: \"client\", subCommand: [] },\r\n { name: \"getCurrentMonitor\", version: \"0.0.1\", example: \"dphelper.screen.popup.getCurrentMonitor()\", author: \"Dario Passariello & Jo\", creationDate: \"20260221\", lastMod: \"20260221\", type: \"function\", active: true, description: \"Get current monitor info\", env: \"client\", subCommand: [] },\r\n { name: \"clear\", version: \"0.0.1\", example: \"dphelper.screen.popup.clear()\", author: \"Dario Passariello & Jo\", creationDate: \"20260221\", lastMod: \"20260221\", type: \"function\", active: true, description: \"Clear all saved popup positions\", env: \"client\", subCommand: [] }\r\n ]\r\n },\r\n {\r\n name: \"fullScreen\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.screen.fullScreen([element])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240101\",\r\n lastMod: \"20240101\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Enter full screen mode for a given element.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toggle\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.screen.toggle([element])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240101\",\r\n lastMod: \"20240101\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Toggle full screen mode for a given element.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Enter full screen mode for a given element.\r\n * @param el The selector of the element to enter full screen mode.\r\n */\r\n fullScreen: (el: any) => {\r\n const elem = document.querySelector(el)\r\n if (elem.requestFullscreen) {\r\n elem.requestFullscreen()\r\n } else if (elem.mozRequestFullScreen) {\r\n // Firefox\r\n elem.mozRequestFullScreen()\r\n } else if (elem.webkitRequestFullscreen) {\r\n // Chrome, Safari and Opera\r\n elem.webkitRequestFullscreen()\r\n } else if (elem.msRequestFullscreen) {\r\n // IE/Edge\r\n elem.msRequestFullscreen()\r\n }\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Toggle full screen mode for a given element.\r\n * @param el The selector of the element to toggle full screen mode.\r\n */\r\n toggle: (el: string): void => {\r\n const\r\n doc: any = document,\r\n elem = doc.querySelector(el)\r\n\r\n if (elem) {\r\n if (doc.fullscreenElement || doc.mozFullScreenElement || doc.webkitFullscreenElement) {\r\n if (doc.exitFullscreen) doc.exitFullscreen()\r\n else if (doc.mozCancelFullScreen) doc.mozCancelFullScreen()\r\n else if (doc.webkitExitFullscreen) doc.webkitExitFullscreen()\r\n else if (doc.msExitFullscreen) doc.msExitFullscreen()\r\n } else if (elem.requestFullscreen) elem.requestFullscreen()\r\n else if (elem.mozRequestFullScreen) elem.mozRequestFullScreen()\r\n else if (elem.webkitRequestFullscreen) elem.webkitRequestFullscreen()\r\n else if (elem.msRequestFullscreen) elem.msRequestFullscreen()\r\n } else {\r\n console.error(`Element not found: ${el}`)\r\n }\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Returns information about the screen.\r\n * @returns An object containing screen information.\r\n */\r\n info: () => {\r\n return {\r\n width: screen.width,\r\n height: screen.height,\r\n availWidth: screen.availWidth,\r\n availHeight: screen.availHeight,\r\n colorDepth: screen.colorDepth,\r\n pixelDepth: screen.pixelDepth\r\n }\r\n },\r\n\r\n /**\r\n * Popup Manager - Multi-Monitor Aware\r\n * Save and restore popup positions across sessions and monitor changes.\r\n */\r\n popup: {\r\n /**\r\n * Save current popup position\r\n * @param id Unique identifier for the popup\r\n * @param win Window object to save position from (defaults to current window)\r\n */\r\n save: (id: string, win?: Window) => {\r\n popupManager.save(id, win)\r\n },\r\n\r\n /**\r\n * Restore popup position\r\n * @param id Unique identifier for the popup\r\n * @returns Position object or null if not found\r\n */\r\n restore: (id: string) => {\r\n return popupManager.restore(id)\r\n },\r\n\r\n /**\r\n * Remove saved popup position\r\n * @param id Unique identifier for the popup\r\n */\r\n remove: (id: string) => {\r\n popupManager.remove(id)\r\n },\r\n\r\n /**\r\n * List all saved popup positions\r\n */\r\n list: () => {\r\n return popupManager.list()\r\n },\r\n\r\n /**\r\n * Get current monitor info\r\n */\r\n getCurrentMonitor: () => {\r\n return popupManager.getCurrentMonitor()\r\n },\r\n\r\n /**\r\n * Clear all saved popup positions\r\n */\r\n clear: () => {\r\n popupManager.clear()\r\n }\r\n }\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"scrollbar\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"custom\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.scrollbar.custom(selector)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Apply custom styles to the scrollbar for the selected elements.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"indicator\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.scrollbar.indicator(selector)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Add a scroll indicator to the selected elements.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"position.get\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.scrollbar.position.get(selector)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Get the current scroll position of the selected elements.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"position.set\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.scrollbar.position.set(selector, position)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Set the scroll position of the selected elements.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"smooth\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.scrollbar.smooth(container, element, gap)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Smoothly scroll to a specific element within a container with an optional gap.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"scrollTo\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.scrollbar.scrollTo(container, element, gap)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Scroll to a specific element within a container with an optional gap.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Apply custom styles to the scrollbar for the selected elements.\r\n * @param el The selector of the elements to apply custom styles.\r\n * @param options The options for custom styles.\r\n */\r\n custom: (el: string, options: any) => {\r\n\r\n options.color_1 = options?.color_1 || \"black\"\r\n options.color_1_hover = options?.color_1_hover || \"black\"\r\n options.color_2 = options?.color_2 || \"transparent\"\r\n options.color_3 = options?.color_3 || \"rgba(30,150,255,.5)\"\r\n options.type = options?.type || \"thin\"\r\n options.behavior = options?.behavior || \"smooth\"\r\n options.width = options?.width || \"16px\"\r\n options.height = options?.height || \"16px\"\r\n options.rounded = options?.rounded || \"10px\"\r\n options.margin = options?.margin || 0\r\n options.border = options?.border || \"5px\"\r\n options.opacity = options?.opacity || 1\r\n\r\n const Style = ` ${el}::-webkit-scrollbar {\r\n scroll-behavior: ${options.behavior};\r\n width: ${options.width};\r\n height: ${options.height};\r\n }\r\n ${el}::-webkit-scrollbar-thumb {\r\n opacity: ${options.opacity} !important;\r\n -webkit-border-radius: ${options.rounded} !important;\r\n -webkit-box-shadow: none !important;\r\n box-shadow: none !important;\r\n border-radius: ${options.rounded} !important;\r\n background: ${options.color_1} !important;\r\n background-clip: content-box !important;\r\n border: ${options.border} solid transparent !important;\r\n min-height: 2px !important;\r\n min-width: 2px !important;\r\n }\r\n ${el}::-webkit-scrollbar-thumb:hover{\r\n background: ${options.color_1_hover} !important;\r\n }\r\n ${el}::-webkit-scrollbar-thumb:active{\r\n background: ${options.color_1} !important;\r\n background-clip: content-box !important;\r\n border: calc( ${options.border} - 1.5px ) solid transparent !important;\r\n }\r\n ${el}::-webkit-scrollbar-track {\r\n background: ${options.color_2};\r\n border-radius: ${options.rounded};\r\n }\r\n ${el}::-webkit-scrollbar-track:hover {\r\n /*background: rgba(128,128,128,.15) !important;*/\r\n }\r\n ${el}::-webkit-scrollbar-track:vertical:hover {\r\n /* border-left: 1px solid rgba(0,0,0,.1) !important; */\r\n }\r\n ${el}::-webkit-scrollbar-track:horizontal:hover {\r\n /* border-top: 1px solid rgba(0,0,0,.1) !important; */\r\n }\r\n ${el}::-webkit-scrollbar-corner {\r\n background:rgba(0,0,0,0)\r\n }\r\n /*\r\n ${el}::-webkit-scrollbar-thumb:window-inactive {\r\n background: ${options.color_3}\r\n }\r\n */\r\n select::-webkit-scrollbar-thumb {\r\n border: 4px solid hsl(0 0% 92% / 1) !important;\r\n }\r\n select::-webkit-scrollbar-track {\r\n background: hsl(0 0% 92% / 1) !important;\r\n }\r\n select::-webkit-scrollbar-track:vertical,\r\n select::-webkit-scrollbar-track:horizontal {\r\n border-top: none !important;\r\n border-left: none !important;\r\n }\r\n `, styleToHead = document.createElement(\"style\")\r\n document.head.appendChild(styleToHead)\r\n styleToHead.innerHTML = Style\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Add a scroll indicator to the selected elements.\r\n * @param props The properties for the scroll indicator.\r\n */\r\n indicator: (props: any) => {\r\n const cont = document.querySelector(props.el), sc: any = document.querySelector(\".scrollindicator\")\r\n if (!sc) {\r\n const createEl: any = document.createElement(\"div\")\r\n createEl.classList.add(\"scrollindicator\")\r\n document.querySelector(\"header\")?.appendChild(createEl)\r\n createEl.style.cssText = `\r\n height:5px;\r\n background:#65c45c;\r\n position:absolute;\r\n bottom:0;\r\n left:0;\r\n z-index:2\r\n `\r\n }\r\n\r\n if (!props.el && sc) {\r\n sc.style.width = `${0}%`\r\n return\r\n }\r\n\r\n try {\r\n const sc: any = document.querySelector(\".scrollindicator\")\r\n cont.addEventListener(\"scroll\", function (this: HTMLElement, _e: any) {\r\n sc.style.width = `${0}%`\r\n const winScroll = Number(this.scrollTop), height = Number(this.scrollHeight - this.clientHeight), scrolled = Math.min(Math.max((winScroll / height) * 100), 100)\r\n sc.style.width = `${scrolled}%`\r\n sc.click()\r\n })\r\n\r\n cont.addEventListener(\"popstate\", (_e: any) => {\r\n sc.style.width = 0\r\n })\r\n } catch (error) {\r\n console.error(error)\r\n return\r\n }\r\n\r\n return\r\n },\r\n\r\n ///\r\n\r\n position: {\r\n /**\r\n * Set the scroll position of the selected elements.\r\n * @param el The selector of the elements to set the scroll position.\r\n */\r\n set: (el: any) => {\r\n const targetEl = typeof el === \"string\" ? document.querySelector(el) : el\r\n if (!targetEl) return\r\n const ar = [targetEl.scrollTop, targetEl.scrollLeft]\r\n if (ar[0] != null && ar[1] != null) {\r\n localStorage.setItem(el, JSON.stringify(ar))\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Get the current scroll position of the selected elements.\r\n * @param el The selector of the elements to get the scroll position.\r\n */\r\n get: (el: any) => {\r\n if (!localStorage.getItem(el)) return\r\n try {\r\n const ar = localStorage.getItem(el), targetEl = typeof el === \"string\" ? document.querySelector(el) : el\r\n if (targetEl && ar) {\r\n targetEl.scrollTop = ar[0]\r\n targetEl.scrollLeft = ar[1]\r\n }\r\n } catch (err) {\r\n console.error(\"Error getting scroll position:\", err)\r\n }\r\n return\r\n }\r\n\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Smoothly scroll to a specific element within a container with an optional gap.\r\n * @param target The target element to scroll.\r\n * @param speed The speed of the scroll.\r\n * @param smooth The smoothness of the scroll.\r\n */\r\n smooth: (target: any, speed: any, smooth: any) => {\r\n\r\n if (target === document)\r\n target =\r\n document.scrollingElement ||\r\n document.documentElement ||\r\n document.body.parentNode ||\r\n document.body // cross browser support for document scrolling\r\n\r\n let moving = false, pos = target.scrollTop\r\n const frame =\r\n target === document.body && document.documentElement ? document.documentElement : target // safari is the new IE\r\n\r\n const scrolled = (e: any) => {\r\n e.preventDefault() // disable default scrolling\r\n const delta = normalizeWheelDelta(e)\r\n pos += -delta * speed\r\n pos = Math.max(0, Math.min(pos, target.scrollHeight - frame.clientHeight)) // limit scrolling\r\n if (!moving) update()\r\n }\r\n\r\n target.addEventListener(\"mousewheel\", scrolled, { passive: false })\r\n target.addEventListener(\"DOMMouseScroll\", scrolled, { passive: false })\r\n\r\n const normalizeWheelDelta = (e: any) => {\r\n if (e.detail) {\r\n if (e.wheelDelta) return (e.wheelDelta / e.detail / 40) * (e.detail > 0 ? 1 : -1)\r\n return -e.detail / 3 // Firefox\r\n }\r\n return e.wheelDelta / 120 // IE,Safari,Chrome\r\n }, update = () => {\r\n moving = true\r\n const delta = (pos - target.scrollTop) / smooth\r\n target.scrollTop += delta\r\n if (Math.abs(delta) > 0.5) requestFrame(update)\r\n else moving = false\r\n }, requestFrame = dphelper.window.animationframe()\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Scroll to a specific element within a container with an optional gap.\r\n * @param container The container element to scroll.\r\n * @param element The target element to scroll to.\r\n * @param gap The optional gap to apply.\r\n */\r\n scrollTo: (container: string, element: string, gap = 0) => {\r\n const el1 = document.querySelector(container), el2 = document.querySelector(element)\r\n if (!(el1 && el2)) return\r\n el1.scrollTo({\r\n top: (el2 as HTMLElement).offsetTop - gap,\r\n behavior: \"smooth\"\r\n })\r\n return\r\n }\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nimport CryptoJS from \"crypto-js\"\r\n\r\nconst description: Description = {\r\n name: \"security\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"uuid\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.security.uuid\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"UUID related commands\",\r\n subCommand: [\r\n {\r\n name: \"byVal\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.security.uuid.byVal('string')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20250101\",\r\n lastMod: \"20250101\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Generate a UUID based on a given string\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"v4\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.security.uuid.v4\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"return\",\r\n active: true,\r\n description: \"Generate a random UUID v4\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"v5\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.security.uuid.v5\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"return\",\r\n active: true,\r\n description: \"Generate a random UUID v5\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n },\r\n {\r\n name: \"hashPass\",\r\n description:\r\n \"Generate a crypto digest SHA-1 starting from user and password values (Please, think about security before using SHA-1)\",\r\n example: \"dphelper.security.hashPass(user, password)\",\r\n version: \"0.0.2\",\r\n type: \"function\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"crypt\",\r\n description: \"Encrypt your message using a secret_key in a default format AES\",\r\n example: \"dphelper.security.crypt(data, secret_key, [optional mode])\",\r\n version: \"0.0.2\",\r\n type: \"function\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"deCrypt\",\r\n description: \"Decrypt your message using a secret_key in a default format AES\",\r\n example: \"dphelper.security.deCrypt(data, secret_key, [optional mode])\",\r\n version: \"0.0.2\",\r\n type: \"function\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"AES_KeyGen\",\r\n description: \"Generate a key based on the AES algorithm\",\r\n example: \"dphelper.security.AES_KeyGen(secret_key)\",\r\n version: \"0.0.2\",\r\n type: \"function\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"SHA256_Hex\",\r\n description: \"Generate a SHA256 hash in hexadecimal format\",\r\n example: \"dphelper.security.SHA256_Hex(secret_key)\",\r\n version: \"0.0.2\",\r\n type: \"function\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20250101\",\r\n lastMod: \"20250101\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"ulid\",\r\n description: \"Generate ULID code\",\r\n example: \"dphelper.security.ulid()\",\r\n version: \"0.0.2\",\r\n type: \"function\",\r\n author: \"mix\",\r\n creationDate: \"20250212\",\r\n lastMod: \"20250212\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"fingerprint\",\r\n description: \"Generate a unique browser fingerprint\",\r\n example: \"dphelper.security.fingerprint()\",\r\n version: \"0.0.2\",\r\n type: \"function\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260220\",\r\n lastMod: \"20260220\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"saveEncrypted\",\r\n description: \"Save encrypted data to localStorage\",\r\n example: \"dphelper.security.saveEncrypted('key', 'value', 'secret')\",\r\n version: \"0.0.2\",\r\n type: \"function\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260220\",\r\n lastMod: \"20260220\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"getEncrypted\",\r\n description: \"Retrieve and decrypt data from localStorage\",\r\n example: \"dphelper.security.getEncrypted('key', 'secret')\",\r\n version: \"0.0.2\",\r\n type: \"function\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260220\",\r\n lastMod: \"20260220\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}\r\n\r\n///\r\n\r\nlet lastUlidTime = -1\r\nconst base32Ulid = [\r\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\",\r\n \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"J\", \"K\", \"M\", \"N\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"V\", \"W\", \"X\", \"Y\", \"Z\"\r\n], newObj = {\r\n\r\n uuid: {\r\n /**\r\n * Generate a UUID based on a given string.\r\n * @param string The string to base the UUID on.\r\n * @returns The generated UUID.\r\n */\r\n byVal: (string: string): string => {\r\n if (!string) {\r\n console.warn(\"You need to pass a value to obtain a fixed uuid\")\r\n return \"\"\r\n }\r\n\r\n const hash = dphelper.security.SHA256_Hex(string), num = [\r\n hash.slice(0, 8),\r\n hash.slice(8, 4),\r\n `4${hash.slice(12, 3)}`,\r\n `8${hash.slice(15, 3)}`,\r\n hash.slice(18, 12)\r\n ]\r\n return num.join(\"-\")\r\n },\r\n\r\n /**\r\n * Generate a random UUID v4.\r\n * @returns The generated UUID v4.\r\n */\r\n v4: \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, (c: any) =>\r\n (+c ^ (crypto.getRandomValues(new Uint8Array(1))[0]! & (15 >> (+c / 4)))).toString(16)\r\n ),\r\n\r\n /**\r\n * Generate a random UUID v5.\r\n * @returns The generated UUID v5.\r\n */\r\n v5: \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\r\n const r = crypto.getRandomValues(new Uint8Array(1))[0]!, v = c === \"x\" ? r : (r & 0x3) | 0x8\r\n return v.toString(16)\r\n })\r\n\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Generate a crypto digest SHA-1 starting from user and password values.\r\n * @param u The user value.\r\n * @param p The password value.\r\n * @param t The type of hash algorithm (default is 'SHA-256').\r\n * @returns The generated hash.\r\n */\r\n hashPass: async (u: string, p: string, t = \"SHA-256\"): Promise<string> => {\r\n // Generate random salt for each hash\r\n const salt = crypto.getRandomValues(new Uint8Array(16))\r\n const saltHex = Array.from(salt).map(b => b.toString(16).padStart(2, '0')).join('')\r\n const msgUint8 = new TextEncoder().encode(p.toLowerCase() + u.toLowerCase() + saltHex)\r\n const hashBuffer = await crypto.subtle.digest(t, msgUint8)\r\n const hashArray = Array.from(new Uint8Array(hashBuffer))\r\n const hashHex = hashArray.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\")\r\n // Return salt + hash for verification\r\n return saltHex + hashHex\r\n },\r\n\r\n ///\r\n\r\n crypt: (u: string, p: string, mode = \"AES\"): string => (CryptoJS as any)[mode].encrypt(u, p).toString(),\r\n\r\n ///\r\n\r\n /**\r\n * Decrypt your message using a secret_key in a default format AES.\r\n * @param u The encrypted message.\r\n * @param p The secret key.\r\n * @param mode The decryption mode (default is 'AES').\r\n * @returns The decrypted message.\r\n */\r\n deCrypt: (u: string, p: string, mode = \"AES\"): string => {\r\n const bytes = (CryptoJS as any)[mode].decrypt(u, p), decryptedData = bytes.toString(CryptoJS.enc.Utf8)\r\n return decryptedData\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Generate a key based on the AES algorithm.\r\n * @param passKey The pass key (optional). If not provided, a random key is generated.\r\n * @returns The generated key.\r\n */\r\n AES_KeyGen: (passKey?: string): string => {\r\n // If no password provided, generate a secure random key\r\n const key = passKey || crypto.randomUUID()\r\n const salt = CryptoJS.lib.WordArray.random(128 / 8)\r\n return CryptoJS.PBKDF2(key, salt, { keySize: 512 / 32, iterations: 600000 }).toString()\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Generate a SHA256 hash in hexadecimal format.\r\n * @param passKey The pass key.\r\n * @returns The generated SHA256 hash.\r\n */\r\n SHA256_Hex: (passKey: string): string => CryptoJS.SHA256(passKey).toString(CryptoJS.enc.Hex),\r\n\r\n ///\r\n\r\n /**\r\n * Generate an ULID code format.\r\n * @returns The generated ULID.\r\n */\r\n ulid: () => {\r\n const\r\n ulid = new Uint8Array(16),\r\n time = new DataView(ulid.buffer, 0, 6),\r\n rand = new Uint8Array(ulid.buffer, 6, 10),\r\n final = new Array(26), encode = (ulid: Uint8Array) => {\r\n final[0] = base32Ulid[ulid[0]! >> 5]\r\n final[1] = base32Ulid[(ulid[0]! >> 0) & 0x1f]\r\n\r\n for (let i = 0; i < 3; i++) {\r\n final[i * 8 + 2] = base32Ulid[ulid[i * 5 + 1]! >> 3]\r\n final[i * 8 + 3] = base32Ulid[((ulid[i * 5 + 1]! << 2) | (ulid[i * 5 + 2]! >> 6)) & 0x1f]\r\n final[i * 8 + 4] = base32Ulid[(ulid[i * 5 + 2]! >> 1) & 0x1f]\r\n final[i * 8 + 5] = base32Ulid[((ulid[i * 5 + 2]! << 4) | (ulid[i * 5 + 3]! >> 4)) & 0x1f]\r\n final[i * 8 + 6] = base32Ulid[((ulid[i * 5 + 3]! << 1) | (ulid[i * 5 + 4]! >> 7)) & 0x1f]\r\n final[i * 8 + 7] = base32Ulid[(ulid[i * 5 + 4]! >> 2) & 0x1f]\r\n final[i * 8 + 8] = base32Ulid[((ulid[i * 5 + 4]! << 3) | (ulid[i * 5 + 5]! >> 5)) & 0x1f]\r\n final[i * 8 + 9] = base32Ulid[(ulid[i * 5 + 5]! >> 0) & 0x1f]\r\n }\r\n return final.join(\"\")\r\n }, now = Date.now()\r\n if (now === lastUlidTime) {\r\n for (let i = 9; i >= 0; i--) {\r\n const r = rand[i]\r\n if (r !== undefined && rand[i]!++ < 255) break\r\n }\r\n } else {\r\n lastUlidTime = now\r\n time.setUint16(0, (now / 4294967296.0) | 0)\r\n time.setUint32(2, now | 0)\r\n window.crypto.getRandomValues(rand)\r\n }\r\n return encode(ulid)\r\n },\r\n\r\n /**\r\n * Generates a unique browser fingerprint.\r\n * WARNING: This function may be used for tracking. Use with user consent.\r\n * @returns A SHA256 hash representing the browser fingerprint.\r\n */\r\n fingerprint: (): string => {\r\n const\r\n n = navigator,\r\n s = window.screen,\r\n canvas = document.createElement(\"canvas\"),\r\n ctx = canvas.getContext(\"2d\"),\r\n txt = \"dphelper_fingerprint_v1\"\r\n\r\n let canvasFingerprint = \"\"\r\n if (ctx) {\r\n canvas.width = 200\r\n canvas.height = 30\r\n ctx.textBaseline = \"top\"\r\n ctx.font = \"14px 'Arial'\"\r\n ctx.textBaseline = \"alphabetic\"\r\n ctx.fillStyle = \"#f60\"\r\n ctx.fillRect(125, 1, 62, 20)\r\n ctx.fillStyle = \"#069\"\r\n ctx.fillText(txt, 2, 15)\r\n ctx.fillStyle = \"rgba(102, 204, 0, 0.7)\"\r\n ctx.fillText(txt, 4, 17)\r\n canvasFingerprint = canvas.toDataURL()\r\n }\r\n\r\n const rawId = [\r\n n.userAgent,\r\n n.language,\r\n s.colorDepth,\r\n s.width + \"x\" + s.height,\r\n new Date().getTimezoneOffset(),\r\n (n as any).deviceMemory || \"unknown\",\r\n (n as any).hardwareConcurrency || \"unknown\",\r\n canvasFingerprint\r\n ].join(\"|\")\r\n\r\n return dphelper.security.SHA256_Hex(rawId)\r\n },\r\n\r\n /**\r\n * Save encrypted and signed data (HMAC) to localStorage.\r\n * This provides BOTH confidentiality and integrity check (Anti-Tampering).\r\n * @param key The storage key.\r\n * @param value The value to encrypt and save.\r\n * @param secret The encryption secret.\r\n */\r\n saveEncrypted: (key: string, value: string, secret: string): void => {\r\n const encrypted = dphelper.security.crypt(value, secret)\r\n // Add HMAC for integrity check (NIST SP 800-111 / Integrity)\r\n const hmac = CryptoJS.HmacSHA256(encrypted, secret).toString()\r\n localStorage.setItem(key, JSON.stringify({ d: encrypted, h: hmac, v: \"2.0\" }))\r\n },\r\n\r\n /**\r\n * Retrieve, verify and decrypt data from localStorage.\r\n * @param key The storage key.\r\n * @param secret The encryption secret.\r\n * @returns The decrypted value or null if integrity check or decryption fails.\r\n */\r\n getEncrypted: (key: string, secret: string): string | null => {\r\n const raw = localStorage.getItem(key)\r\n if (!raw) return null\r\n\r\n try {\r\n const payload = JSON.parse(raw)\r\n // Check for HMAC (Version 2.0+)\r\n if (payload && payload.h && payload.d) {\r\n const expectedHmac = CryptoJS.HmacSHA256(payload.d, secret).toString()\r\n if (payload.h !== expectedHmac) {\r\n console.error(`[dphelper] Security Alert: Data tampering detected for key \"${key}\"`)\r\n return null\r\n }\r\n return dphelper.security.deCrypt(payload.d, secret)\r\n }\r\n // Fallback for legacy data (Version 1.0 - just encrypted string)\r\n return dphelper.security.deCrypt(raw, secret)\r\n } catch (err) {\r\n // If parsing fails, it might be legacy raw encrypted string\r\n try {\r\n return dphelper.security.deCrypt(raw, secret)\r\n } catch (innerErr) {\r\n console.warn(`[dphelper] Persistence Error for key \"${key}\":`, innerErr)\r\n return null\r\n }\r\n }\r\n }\r\n}\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"shortcut\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"keys\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.shortcut.keys([e, trigger])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Handle keyboard shortcuts.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Handle keyboard shortcuts.\r\n * @param e The event object.\r\n * @param trigger The trigger configuration for the shortcuts.\r\n */\r\n keys: (e: any, trigger: any) => {\r\n const code = e.which ? e.which : e.keyCode\r\n\r\n if (!trigger)\r\n trigger = {\r\n data: [\r\n {\r\n key: \"83\",\r\n ctrl: true,\r\n active: true,\r\n description: \"CTRL+S\",\r\n //\"element\" : \"#formSave\",\r\n function: \"\"\r\n },\r\n {\r\n key: \"27\",\r\n ctrl: false,\r\n active: true,\r\n description: \"ESC\",\r\n element: \"\",\r\n function: \"\"\r\n },\r\n {\r\n key: \"80\",\r\n ctrl: true,\r\n active: true,\r\n description: \"CTRL+P\",\r\n element: \"\",\r\n function: \"function(){ Print }\"\r\n }\r\n ]\r\n }\r\n\r\n if (trigger.data) {\r\n trigger.data.map(\r\n (list: any) => {\r\n // IF CTRL COMMAND\r\n if (e.ctrlKey || (e.metaKey && list.ctrl === true)) {\r\n if (code === Number.parseInt(list.key) && list.active === true) {\r\n if (list.element) list.element.click()\r\n if (list.function) return JSON.stringify(list.function)\r\n e.preventDefault()\r\n return null\r\n }\r\n }\r\n return null\r\n }\r\n )\r\n }\r\n return\r\n }\r\n}\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\n// Simple local state (replaces memorio state)\r\nconst _ws = {\r\n ws: {} as Record<string, [WebSocket, WebSocket, string] | undefined>\r\n}, description: Description = {\r\n name: \"socket\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"info\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.socket.info(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Retrieve socket information\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"start\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.socket.start(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Start a socket connection\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"conn\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.socket.conn(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Manage socket connections\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"connect\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.socket.connect(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Connect to a socket\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"open\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.socket.open(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Open a socket connection\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"send\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.socket.send(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Send data through a socket\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"receive\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.socket.receive(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Receive data from a socket\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"keepAlive\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.socket.keepAlive(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2021-01-01\",\r\n lastMod: \"2021-01-01\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Keep the socket connection alive\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"check\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.socket.check()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2023-05-27\",\r\n lastMod: \"2023-05-27\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Check how many websocket connections are open\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"list\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.socket.list()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"2023-05-27\",\r\n lastMod: \"2023-05-27\",\r\n type: \"function\",\r\n active: true,\r\n description: \"List all websocket connections in real-time\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Retrieve socket information.\r\n * @returns A string containing the socket information.\r\n */\r\n info: (): string => \"Created by Dario Passariello\",\r\n\r\n ///\r\n\r\n /**\r\n * Start a socket connection.\r\n * @param element The element to receive data.\r\n * @param server The server to connect to.\r\n */\r\n start: (element: unknown, server: string, name = \"general\") => {\r\n _ws.ws = {}\r\n dphelper.socket.connect(server, name)\r\n dphelper.socket.receive(element, name)\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Manage socket connections.\r\n * @param id The id of the connection.\r\n * @param server The server to connect to.\r\n * @returns An array containing the WebSocket and the id.\r\n */\r\n conn: (id: WebSocket, server: string, name: string): [WebSocket, WebSocket, string] | undefined => {\r\n if (!(id && server)) {\r\n console.debug(\"please use connect!\")\r\n return undefined\r\n }\r\n\r\n try {\r\n // Validate server URL for security - prevent connecting to arbitrary origins\r\n let serverUrl: URL\r\n try {\r\n serverUrl = new URL(server)\r\n } catch {\r\n // Allow relative URLs (same-origin)\r\n if (!server.startsWith('/') && !server.startsWith('ws') && !server.startsWith('wss')) {\r\n serverUrl = new URL(server, window.location.origin)\r\n } else {\r\n console.error(\"Invalid WebSocket URL\")\r\n return undefined\r\n }\r\n }\r\n\r\n // Enforce TLS for WebSocket connections (NIST SC-8)\r\n if (serverUrl.protocol === 'ws:') {\r\n console.error(\"Insecure WebSocket protocol 'ws://' - must use 'wss://'\")\r\n return undefined\r\n }\r\n\r\n const ws = new WebSocket(server)\r\n ws.binaryType = \"blob\"\r\n\r\n ws.onmessage = (_event) => {\r\n // Handle incoming messages\r\n }\r\n return [ws, id, name]\r\n } catch (err) {\r\n console.error(err)\r\n return undefined\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Connect to a socket.\r\n * @param server The server to connect to.\r\n */\r\n connect: (server: any, name: string) => {\r\n if (!server) return\r\n dphelper.socket.open(dphelper.security.uuid.v5, server, name)\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Open a socket connection.\r\n * @param id The id of the connection.\r\n * @param server The server to connect to.\r\n */\r\n open: (id: string | number, server: string, name: string) => {\r\n if (!id) return\r\n\r\n try {\r\n const websocket: any = (dphelper.socket as any).conn(id, server, name)\r\n if (!websocket) return\r\n\r\n _ws.ws[name] = websocket\r\n\r\n // Register socket in our tracking list\r\n if (dphelper._list.sockets.indexOf(websocket[0]) === -1) {\r\n dphelper._list.sockets.push(websocket[0])\r\n }\r\n\r\n websocket[0].onopen = () => dphelper.log.reg(`${id} connected`)\r\n websocket[0].onclose = (event: any) =>\r\n dphelper.log.debug(\r\n event.wasClean ? \"Disconnected\" : `Connection break: ${event.reason || event.code}`\r\n )\r\n websocket[0].onerror = (err: any) => dphelper.log?.error(err)\r\n } catch (err) {\r\n console.error(err)\r\n }\r\n\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Send data through a socket.\r\n * @param mex The message to send.\r\n * @param type The type of message (default is \"reg\").\r\n */\r\n send: (mex: string, type: string, name: string) => {\r\n if (!(_ws.ws[name]?.[1] && mex)) return\r\n\r\n try {\r\n const websocket = _ws.ws[name]\r\n if (!websocket) return\r\n const ws = websocket[0],\r\n id = websocket[1],\r\n obj = type ? JSON.stringify({ [type]: `(${id}:${mex})` }) : mex\r\n ws.send(obj)\r\n } catch (err) {\r\n console.error(err)\r\n }\r\n\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Send a ping message through the socket.\r\n */\r\n ping: (name: string) => {\r\n if (!_ws.ws[name]?.[1]) return\r\n\r\n try {\r\n const websocket = _ws.ws[name]\r\n websocket?.[0]?.send(`{\"debug\":\"__ping__\"}`)\r\n } catch (err) {\r\n console.error(err)\r\n }\r\n\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Receive data from a socket.\r\n * @param el The element to receive data (optional).\r\n */\r\n receive: (el: string, name: string) => {\r\n if (!_ws.ws[name]?.[1]) return\r\n\r\n try {\r\n const websocket = _ws.ws[name],\r\n ws = websocket[0]\r\n\r\n ws.onmessage = async (event: MessageEvent) => {\r\n // WebSocket messages don't have source, we just check data and sanitize\r\n try {\r\n if (el) {\r\n const targetEl = typeof el === \"string\" ? document.querySelector(el) : (el as any)\r\n if (targetEl) {\r\n const rawData = typeof event.data === \"string\" ? event.data : await event.data.text(), parsed = JSON.parse(rawData), text = String(Object.values(parsed)[0])\r\n targetEl.textContent = text\r\n }\r\n }\r\n } catch (_err) {\r\n // Not JSON or other error, log if necessary\r\n }\r\n\r\n dphelper.log.reg(event.data)\r\n }\r\n } catch (err) {\r\n console.error(err)\r\n }\r\n\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Keep the socket connection alive.\r\n */\r\n keepAlive: (name: string) => {\r\n try {\r\n const websocket = _ws.ws[name]\r\n if (!websocket) return\r\n\r\n let tm: any\r\n\r\n const ws = websocket[0], ping = (time = 5000) => {\r\n tm = setTimeout(() => {\r\n dphelper.socket.ping(name)\r\n }, time)\r\n }, pong = () => clearTimeout(tm)\r\n ws.onopen = () => setInterval(ping, 30000)\r\n\r\n ws.onmessage = (evt: any) => {\r\n try {\r\n const ck = Object.values(JSON.parse(evt.data))\r\n if (ck[0] === \"__ping__\") pong()\r\n return\r\n } catch (err) {\r\n console.error(err)\r\n }\r\n }\r\n } catch (err) {\r\n console.error(err)\r\n }\r\n\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Check how many websocket connections are open.\r\n */\r\n check: () => {\r\n // Check method now cleans up closed sockets from the list\r\n dphelper._list.sockets = dphelper._list.sockets.filter((ws: WebSocket) => ws.readyState !== WebSocket.CLOSED)\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * List all websocket connections in real-time.\r\n * @returns An array of WebSocket connections.\r\n */\r\n list: (): WebSocket[] => dphelper._list.sockets\r\n\r\n}\r\n///\r\ndphelper?.setDescription(description, newObj)\r\ndphelper?.socket?.check()\r\n", "\r\nconst description: Description = {\r\n name: \"sse\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"open\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.sse.open('/api/stream', { method: 'POST', body: ... })\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Advanced Server-Sent Events client with POST and Custom Headers support.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Opens an SSE connection with support for custom fetch options (POST, Headers, etc).\r\n */\r\n open: (url: string, options: any = {}): {\r\n on: (event: \"message\" | \"error\" | \"open\", cb: (data: any) => void) => void,\r\n close: () => void\r\n } => {\r\n const listeners: Record<string, ((data: any) => void)[]> = { message: [], error: [], open: [] }, ctrl = new AbortController(), trigger = (event: string, data: any) => {\r\n listeners[event]?.forEach(cb => cb(data))\r\n }, start = async () => {\r\n try {\r\n const response = await fetch(url, {\r\n ...options,\r\n signal: ctrl.signal,\r\n headers: {\r\n \"Accept\": \"text/event-stream\",\r\n ...(options.headers || {})\r\n }\r\n })\r\n\r\n if (!response.ok) throw new Error(`SSE failed: ${response.statusText}`)\r\n trigger(\"open\", { status: response.status })\r\n\r\n const reader = response.body?.getReader(), decoder = new TextDecoder()\r\n if (!reader) return\r\n\r\n let buffer = \"\"\r\n while (true) {\r\n const { done, value } = await reader.read()\r\n if (done) break\r\n\r\n buffer += decoder.decode(value, { stream: true })\r\n const lines = buffer.split(\"\\n\")\r\n buffer = lines.pop() || \"\"\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"data:\")) {\r\n let data = line.replace(\"data:\", \"\").trim()\r\n try {\r\n // Try to parse TOON or JSON\r\n if (data.includes(\"[\") || data.includes(\"{\")) {\r\n // If it's a TOON-like or JSON string, we could attempt conversion here\r\n // but for now we pass the raw string if it's structured.\r\n data = JSON.parse(data)\r\n }\r\n } catch (_e) { /* keep as string if not JSON */ }\r\n trigger(\"message\", data)\r\n }\r\n }\r\n }\r\n } catch (err: any) {\r\n if (err.name !== \"AbortError\") {\r\n trigger(\"error\", err)\r\n }\r\n }\r\n }\r\n start()\r\n\r\n return {\r\n on: (event: string, cb: (data: any) => void) => {\r\n if (listeners[event]) listeners[event].push(cb)\r\n },\r\n close: () => ctrl.abort()\r\n }\r\n }\r\n}\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"svg\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"init\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.svg.init(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Initializes an SVG connection between two elements.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"check\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.svg.check(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Checks if SVG support is available.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"update\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.svg.update(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Updates the SVG connection between two elements.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"getCurve\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.svg.getCurve(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Calculates the curve of the connection between two points.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"getIntersection\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.svg.getIntersection(...) \",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Calculates the intersection point between two elements.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"setConnector\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.svg.setConnector(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Sets a connector on an element.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"removeConnection\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.svg.removeConnection(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Removes an SVG connection from a container.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"makeScrollable\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.svg.makeScrollable(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Makes an SVG container scrollable.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"makeDraggable\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.svg.makeDraggable(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Makes an SVG element draggable.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"toggle\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.svg.toggle(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Toggles an SVG connection on or off.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"convert\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.svg.convert([Object])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20190101\",\r\n lastMod: \"20240401\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts an element to SVG.\",\r\n env: \"client\",\r\n subCommand: []\r\n // getAttributeNS(namespaceURI: string | null, localName: string): string | null\r\n // getAttribute(name: string): string | null\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Initializes an SVG connection between two elements.\r\n * @param container The container element.\r\n * @param source1 The first source element and its side.\r\n * @param source2 The second source element and its side.\r\n * @param cb The callback function to execute after initialization.\r\n */\r\n init: (\r\n container: HTMLElement,\r\n source1: [HTMLElement, string],\r\n source2: [HTMLElement, string],\r\n cb?: (...args: any[]) => void\r\n ) => {\r\n if (container.querySelector(\"svg\"))\r\n dphelper.svg.removeConnection(container)\r\n\r\n source1 = [dphelper.svg.setConnector(source1[0], source1[1]), source1[1]]\r\n source2 = [dphelper.svg.setConnector(source2[0], source2[1]), source2[1]]\r\n\r\n const parentCoords = container.getBoundingClientRect(), xmlns = \"http://www.w3.org/2000/svg\", boxWidth = container.offsetWidth * 10, boxHeight = container.offsetHeight * 10, svgElem = document.createElementNS(xmlns, \"svg\"), connId = `conn_${Math.random().toString(36).substring(2, 9)}`\r\n // Create SVG container\r\n svgElem.setAttribute(\"xmlns\", xmlns)\r\n svgElem.dataset.dphelper = \"svg-connection\"\r\n svgElem.setAttributeNS(null, \"viewBox\", \"0 0 \" + boxWidth + \" \" + boxHeight)\r\n svgElem.setAttributeNS(null, \"width\", String(boxWidth))\r\n svgElem.setAttributeNS(null, \"height\", String(boxHeight))\r\n svgElem[\"style\"].display = \"block\"\r\n\r\n // Create rect which overlaps source1\r\n const rect1 = document.createElementNS(xmlns, \"rect\")\r\n\r\n let coords = source1[0].getBoundingClientRect()\r\n\r\n rect1.setAttributeNS(null, \"x\", String(coords.left - parentCoords.left))\r\n rect1.setAttributeNS(null, \"y\", String(coords.top - parentCoords.top))\r\n rect1.setAttributeNS(null, \"width\", String(coords.width))\r\n rect1.setAttributeNS(null, \"height\", String(coords.height))\r\n svgElem.appendChild(rect1)\r\n\r\n // Create rect which overlaps source2\r\n const rect2 = document.createElementNS(xmlns, \"rect\")\r\n coords = source2[0].getBoundingClientRect()\r\n\r\n rect2.setAttributeNS(null, \"x\", String(coords.left - parentCoords.left))\r\n rect2.setAttributeNS(null, \"y\", String(coords.top - parentCoords.top))\r\n rect2.setAttributeNS(null, \"width\", String(coords.width))\r\n rect2.setAttributeNS(null, \"height\", String(coords.height))\r\n svgElem.appendChild(rect2)\r\n\r\n // Create path connecting both rects\r\n const path = document.createElementNS(xmlns, \"path\")\r\n\r\n path.setAttributeNS(null, \"id\", connId)\r\n path.setAttributeNS(null, \"marker-end\", \"url(#head)\")\r\n svgElem.appendChild(path)\r\n\r\n container.appendChild(svgElem);\r\n (dphelper.svg as any).update(rect1, rect2, path)\r\n\r\n if (typeof cb === \"function\")\r\n cb(source1, source2)\r\n\r\n return\r\n },\r\n\r\n /**\r\n * Checks if SVG support is available.\r\n * @returns {boolean} True if SVG support is available, false otherwise.\r\n */\r\n check: () => {\r\n return !!(document.createElementNS && document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\").createSVGRect)\r\n },\r\n\r\n /**\r\n * Updates the SVG connection between two elements.\r\n * @param rect1 The first rectangle element.\r\n * @param rect2 The second rectangle element.\r\n * @param cxn The connection path element.\r\n */\r\n update: (rect1: any, rect2: any, cxn: any) => {\r\n // Top left coordinates\r\n const\r\n x1 = Number.parseFloat(rect1.getAttribute(\"x\") || \"0\"),\r\n y1 = Number.parseFloat(rect1.getAttribute(\"y\") || \"0\"),\r\n x2 = Number.parseFloat(rect2.getAttribute(\"x\") || \"0\"),\r\n y2 = Number.parseFloat(rect2.getAttribute(\"y\") || \"0\"), w1 = Number.parseFloat(rect1.getAttribute(\"width\") || \"0\") / 2, h1 = Number.parseFloat(rect1.getAttribute(\"height\") || \"0\") / 2, w2 = Number.parseFloat(rect2.getAttribute(\"width\") || \"0\") / 2, h2 = Number.parseFloat(rect2.getAttribute(\"height\") || \"0\") / 2, cx1 = x1 + w1, cy1 = y1 + h1, cx2 = x2 + w2, cy2 = y2 + h2, dx = cx2 - cx1, dy = cy2 - cy1, p1 = dphelper.svg.getIntersection(dx, dy, cx1, cy1, w1, h1), p2 = dphelper.svg.getIntersection(-dx, -dy, cx2, cy2, w2, h2), dx1 = p2[0] - p1[0], d = dphelper.svg.getCurve(p1, p2, dx1)\r\n\r\n // Half widths and half heights\r\n // Center coordinates\r\n // Distance between centers\r\n // Distance between edges\r\n // Set a path connector\r\n cxn.setAttributeNS(null, \"d\", \"M\" + cx1 + \",\" + cy1 + d + cx2 + \",\" + cy2)\r\n return\r\n },\r\n\r\n /**\r\n * Calculates the curve of the connection between two points.\r\n * @param p1 The first point.\r\n * @param p2 The second point.\r\n * @param dx The distance between the points.\r\n * @returns {string} The SVG path data for the curve.\r\n */\r\n getCurve: (p1: [number, number], p2: [number, number], dx: number): string => {\r\n const curve = dx / 2, d = \" C\" + (curve + p1[0]) + \",\" + p1[1] + \" \" + (p2[0] - curve) + \",\" + p2[1] + \" \"\r\n return d\r\n },\r\n\r\n /**\r\n * Calculates the intersection point between two elements.\r\n * @param dx The x distance between the elements.\r\n * @param dy The y distance between the elements.\r\n * @param cx The x coordinate of the center of the element.\r\n * @param cy The y coordinate of the center of the element.\r\n * @param w The width of the element.\r\n * @param h The height of the element.\r\n * @returns {[number, number]} The intersection point.\r\n */\r\n getIntersection: (\r\n dx: number,\r\n dy: number,\r\n cx: number,\r\n cy: number,\r\n w: number,\r\n h: number\r\n ): [number, number] => {\r\n if (Math.abs(dy / dx) < h / w) return [cx + (dx > 0 ? w : -w), cy + (dy * w) / Math.abs(dx)]\r\n return [cx + (dx * h) / Math.abs(dy), cy + (dy > 0 ? h : -h)]\r\n },\r\n\r\n /**\r\n * Sets a connector on an element.\r\n * @param source The source element.\r\n * @param side The side of the element to set the connector on.\r\n * @returns {HTMLElement} The connector element.\r\n */\r\n setConnector: (source: HTMLElement, side: string): HTMLElement => {\r\n\r\n let style\r\n const span = document.createElement(\"span\")\r\n\r\n source.style.position = \"relative\"\r\n\r\n span.style.position = \"absolute\"\r\n span.style.width = \"5px\"\r\n span.style.height = \"5px\"\r\n\r\n switch (side) {\r\n case \"top\":\r\n style = {\r\n left: \"50%\",\r\n top: \"2.5px\",\r\n marginLeft: \"2.5px\"\r\n }\r\n break\r\n case \"right\":\r\n style = {\r\n top: \"50%\",\r\n right: \"2.5px\",\r\n marginTop: \"-2.5px\"\r\n }\r\n break\r\n case \"bottom\":\r\n style = {\r\n left: \"50%\",\r\n bottom: \"-2.5px\",\r\n marginLeft: \"2.5px\"\r\n }\r\n break\r\n case \"left\":\r\n style = {\r\n top: \"50%\",\r\n left: \"-2.5px\",\r\n marginTop: \"-2.5px\"\r\n }\r\n break\r\n default:\r\n style = {}\r\n }\r\n\r\n Object.assign(span.style, style)\r\n\r\n source.appendChild(span)\r\n\r\n return span\r\n },\r\n\r\n /**\r\n * Removes an SVG connection from a container.\r\n * @param container The container element.\r\n */\r\n removeConnection: (container: HTMLElement) => {\r\n const svgs = container.querySelectorAll(\"svg[data-dphelper='svg-connection']\")\r\n svgs.forEach((elm) => elm.remove())\r\n return\r\n },\r\n\r\n /**\r\n * Makes an SVG container scrollable.\r\n * @param svgContainer The SVG container element.\r\n * @param scrollContainer The scroll container element.\r\n * @param elm1 The first element.\r\n * @param elm2 The second element.\r\n * @param rect1 The first rectangle element.\r\n * @param rect2 The second rectangle element.\r\n */\r\n makeScrollable: (\r\n svgContainer: HTMLElement,\r\n scrollContainer: HTMLElement,\r\n elm1: HTMLElement,\r\n elm2: HTMLElement,\r\n rect1: HTMLElement,\r\n rect2: HTMLElement\r\n ) => {\r\n\r\n const\r\n svgCoords = svgContainer.getBoundingClientRect(),\r\n el = [elm1, elm2],\r\n elCache = el.length,\r\n rec = [rect1, rect2],\r\n coords: any[] = []\r\n\r\n for (let i = 0; i < elCache; i++) {\r\n const targetEl = el[i], targetRect = rec[i]\r\n if (!targetEl || !targetRect) continue\r\n\r\n coords[i] = targetEl.getBoundingClientRect()\r\n\r\n targetRect.setAttributeNS(null, \"x\", String(coords[i].left - svgCoords.left))\r\n targetRect.setAttributeNS(null, \"y\", String(coords[i].top - svgCoords.top))\r\n targetRect.setAttributeNS(null, \"width\", String(coords[i].width))\r\n targetRect.setAttributeNS(null, \"height\", String(coords[i].height))\r\n }\r\n\r\n const rects = svgContainer.querySelectorAll(\"rect\"), rect1El = rects[0] as SVGRectElement, rect2El = rects[1] as SVGRectElement, connectionEl = document.getElementById(\"connection\")\r\n if (rect1El && rect2El && connectionEl) {\r\n (dphelper.svg as any).update(rect1El, rect2El, connectionEl)\r\n }\r\n },\r\n\r\n /**\r\n * Makes an SVG element draggable.\r\n * @param evt The event object.\r\n * @param rect1 The first rectangle element.\r\n * @param rect2 The second rectangle element.\r\n */\r\n makeDraggable: (evt: Event) => {\r\n\r\n const svg = evt.target as unknown as SVGElement\r\n\r\n svg.addEventListener(\"mousedown\", startDrag)\r\n svg.addEventListener(\"mousemove\", drag)\r\n svg.addEventListener(\"mouseup\", endDrag)\r\n\r\n function getMousePosition(e: MouseEvent) {\r\n const CTM = (svg as any).getScreenCTM()\r\n return {\r\n x: (e.clientX - CTM.e) / CTM.a,\r\n y: (e.clientY - CTM.f) / CTM.d\r\n }\r\n }\r\n\r\n let\r\n selectedElement: any | null = null,\r\n offset: { x: number; y: number } | null = null\r\n\r\n function startDrag(evt: MouseEvent) {\r\n if ((evt.target as HTMLElement).classList.contains(\"draggable\")) {\r\n selectedElement = evt.target as any\r\n offset = getMousePosition(evt)\r\n offset.x -= Number.parseFloat(selectedElement.getAttributeNS(null, \"x\") || \"0\")\r\n offset.y -= Number.parseFloat(selectedElement.getAttributeNS(null, \"y\") || \"0\")\r\n }\r\n return\r\n }\r\n\r\n function drag(evt: MouseEvent) {\r\n if (selectedElement && offset) {\r\n const coord = getMousePosition(evt)\r\n selectedElement.setAttributeNS(null, \"x\", String(coord.x - offset.x))\r\n selectedElement.setAttributeNS(null, \"y\", String(coord.y - offset.y))\r\n dphelper.svg.update(\r\n selectedElement,\r\n selectedElement,\r\n document.getElementById(\"connection\") as any\r\n )\r\n }\r\n return\r\n }\r\n\r\n function endDrag() {\r\n selectedElement = null\r\n offset = null\r\n return\r\n }\r\n\r\n return\r\n },\r\n\r\n /**\r\n * Toggles an SVG connection on or off.\r\n * @param evt The event object.\r\n * @param container The container element.\r\n * @param source1 The first source element.\r\n * @param source2 The second source element.\r\n */\r\n toggle: (evt: Event, container: HTMLElement, source1: HTMLElement, source2: HTMLElement) => {\r\n\r\n const target = evt.target as HTMLInputElement\r\n if (target.checked && source1 && source2) {\r\n\r\n dphelper.cookie.set({\r\n name: `${target.id}`,\r\n value: 1,\r\n time: 365\r\n })\r\n\r\n dphelper.svg.init(\r\n container,\r\n [source1, \"right\"],\r\n [source2, \"left\"],\r\n (source1: any, source2: any) => {\r\n const partsBody = document.getElementById(\"parts-left-body\")\r\n if (partsBody) {\r\n partsBody.addEventListener(\"scroll\", () => {\r\n dphelper.svg.makeScrollable(\r\n container,\r\n partsBody,\r\n source1,\r\n source2,\r\n document.querySelector(\"#parts svg rect\") as HTMLElement,\r\n document.querySelectorAll(\"#parts svg rect\")[1] as HTMLElement\r\n )\r\n })\r\n }\r\n }\r\n )\r\n\r\n } else {\r\n\r\n dphelper.svg.removeConnection(container)\r\n const partsBody = document.getElementById(\"parts-left-body\")\r\n if (partsBody) partsBody.replaceWith(partsBody.cloneNode(true))\r\n dphelper.cookie.set({\r\n name: `${target.id}`,\r\n value: 0,\r\n time: 365\r\n })\r\n\r\n }\r\n\r\n return\r\n },\r\n\r\n /**\r\n * Converts an element to SVG.\r\n * @param options The options for the conversion.\r\n * @returns {string} A message if the conversion is not possible.\r\n */\r\n convert: (\r\n\r\n {\r\n children,\r\n active = true,\r\n size = [1920, 1080],\r\n fit = [\"100%\", \"100%\"],\r\n preserveAspectRatio = \"none\",\r\n style = `width:${fit[0]}; height:${fit[1]}`,\r\n zoom = this ? dphelper.window.getZoom() : 1\r\n }: any\r\n\r\n ) => {\r\n\r\n if (!children) return \"Please pass ID of element for SVG conversion\"\r\n\r\n if (active) {\r\n const el = document.querySelector(children) as HTMLElement, newEl = el.cloneNode(true), svgContent = `\r\n <svg\r\n viewBox=\"0 0 ${size[0]} ${size[1]}\"\r\n preserveAspectRatio=\"${preserveAspectRatio}\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style=\"${style}; zoom:${zoom}\"\r\n >\r\n <foreignObject\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"${fit[0]}\"\r\n height=\"${fit[1]}\"\r\n style=\"${style}; zoom:${zoom}\"\r\n >\r\n </foreignObject>\r\n </svg >\r\n `\r\n el.innerHTML = svgContent\r\n const foreignObject = el.querySelector(\"foreignObject\")\r\n if (foreignObject) foreignObject.appendChild(newEl)\r\n }\r\n\r\n return\r\n }\r\n }\r\n\r\n///\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\ndphelper?.svg?.check()\r\n", "\r\nconst description: Description = {\r\n name: \"sync\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"tab\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.sync.tab('my_channel', (data) => console.debug(data))\",\r\n author: \"Dario Passariello & Jo\",\r\n creationDate: \"20260220\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Synchronize data between tabs using BroadcastChannel\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"storageProxy\",\r\n version: \"0.0.2\",\r\n example: \"const proxy = dphelper.sync.storageProxy('user_pref', {theme: 'dark'})\",\r\n author: \"Dario Passariello & Jo\",\r\n creationDate: \"20260220\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Create a Proxy object linked to localStorage for auto-sync\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"pulse\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.sync.pulse('chat', (msg) => ...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Low-latency cross-tab event bus with automatic registration.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Low-latency cross-tab event bus.\r\n * Security: BroadcastChannel is same-origin only, but we add message validation\r\n * to prevent injection from compromised channels within the same origin.\r\n */\r\n pulse: (channelName: string, callback: (data: any) => void): { emit: (data: any) => void, stop: () => void } => {\r\n if (typeof BroadcastChannel === \"undefined\") return { emit: () => { }, stop: () => { } }\r\n const bc = new BroadcastChannel(`pulse_${channelName}`)\r\n // Validate message is not from untrusted origin (same-origin enforcement)\r\n bc.onmessage = (e) => {\r\n // BroadcastChannel only works same-origin, but we validate data structure\r\n if (e.origin === window.location.origin || !e.origin) {\r\n try {\r\n // Validate data is serializable and not a potential prototype pollution vector\r\n const data = e.data\r\n if (data && typeof data === 'object' && !data.__proto__ && !data.constructor) {\r\n callback(data)\r\n }\r\n } catch (err) {\r\n console.warn('[dphelper] Invalid message received in pulse:', err)\r\n }\r\n }\r\n }\r\n return {\r\n emit: (data: any) => bc.postMessage(data),\r\n stop: () => bc.close()\r\n }\r\n },\r\n\r\n /**\r\n * Synchronize data between tabs using BroadcastChannel.\r\n * Security: BroadcastChannel is same-origin only, but we add message validation.\r\n */\r\n tab: (channelName: string, callback: (data: any) => void): { post: (data: any) => void, close: () => void } => {\r\n if (typeof BroadcastChannel === \"undefined\") return { post: () => { }, close: () => { } }\r\n const bc = new BroadcastChannel(channelName)\r\n bc.onmessage = (event) => {\r\n if (event.origin === window.location.origin || !event.origin) {\r\n try {\r\n const data = event.data\r\n if (data && typeof data === 'object' && !data.__proto__ && !data.constructor) {\r\n callback(data)\r\n }\r\n } catch (err) {\r\n console.warn('[dphelper] Invalid message received in tab:', err)\r\n }\r\n }\r\n }\r\n return {\r\n post: (data: any) => bc.postMessage(data),\r\n close: () => bc.close()\r\n }\r\n },\r\n\r\n /**\r\n * Create a Proxy object linked to localStorage for auto-sync with optional encryption.\r\n * If secret is provided, data is stored encrypted with HMAC integrity checks.\r\n *\r\n * @param key The localStorage key.\r\n * @param initialValue The default object structure.\r\n * @param secret Optional encryption secret.\r\n */\r\n storageProxy: <T extends object>(key: string, initialValue: T, secret?: string): T => {\r\n if (typeof localStorage === \"undefined\") return initialValue\r\n\r\n let current: T\r\n const saved = localStorage.getItem(key)\r\n\r\n if (saved) {\r\n if (secret) {\r\n const decrypted = dphelper.security.getEncrypted(key, secret)\r\n current = decrypted ? JSON.parse(decrypted) : initialValue\r\n } else {\r\n try {\r\n current = JSON.parse(saved)\r\n } catch {\r\n current = initialValue\r\n }\r\n }\r\n } else {\r\n current = initialValue\r\n }\r\n\r\n return new Proxy(current, {\r\n set(target, prop, value) {\r\n (target as any)[prop] = value\r\n const json = JSON.stringify(target)\r\n if (secret) {\r\n dphelper.security.saveEncrypted(key, json, secret)\r\n } else {\r\n localStorage.setItem(key, json)\r\n }\r\n return true\r\n }\r\n })\r\n }\r\n}\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"system\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"multiSplit\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.system.multiSplit()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20231121\",\r\n lastMod: \"20231121\",\r\n type: \"system\",\r\n active: true,\r\n description:\r\n \"Run only one time when you load your App ... extend the .split with array as argument (example.split([',', ':', ';', '?', '/'])[0])\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n\r\n multiSplit: (str: string, tokens: string[]): string[] => {\r\n if (!str) return []\r\n const tempChar = tokens[0]\r\n if (!tempChar) return [str]\r\n\r\n let result = str\r\n for (let i = 1; i < tokens.length; ++i) {\r\n result = result.split(tokens[i]!).join(tempChar)\r\n }\r\n return result.split(tempChar)\r\n }\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"text\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"trim\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.trim(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Trims the specified characters from the start and end of a string.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"capitalize\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.capitalize(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Capitalizes the first letter of each word in a string.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"lower\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.lower(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts a string to lowercase.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"upper\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.upper(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts a string to uppercase.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"nl2br\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.nl2br(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts newlines in a string to HTML <br> tags.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"sanitize\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.sanitize(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Sanitizes a string by removing HTML tags.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"camelCase\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.camelCase(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts a string to camelCase.\",\r\n subCommand: [\r\n {\r\n name: \"toSpace\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.camelCase.toSpace(...)\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts camelCase to space-separated words.\",\r\n env: \"both\",\r\n subCommand: [],\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\"\r\n },\r\n {\r\n name: \"toUnderscore\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.camelCase.toUnderscore(...)\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts camelCase to underscore-separated words.\",\r\n env: \"both\",\r\n subCommand: [],\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\"\r\n }\r\n ]\r\n },\r\n {\r\n name: \"fitContainer\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.fitContainer([element])\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Adjusts the font size of an element to fit its container.\",\r\n env: \"both\",\r\n subCommand: [],\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\"\r\n },\r\n {\r\n name: \"keywords\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.keywords([sentence])\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Extrapolate keywords from a sentence\",\r\n env: \"both\",\r\n subCommand: [],\r\n author: \"Dario Passariello\",\r\n creationDate: \"20250601\",\r\n lastMod: \"20250601\"\r\n },\r\n {\r\n name: \"replaceText\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.text.replaceText([sentence, object])\",\r\n type: \"function\",\r\n active: true,\r\n description: `\r\n replace all occurrence from sentence using an object as list\r\n\r\n example:\r\n\r\n let text = replaceText(\r\n \"Copyright 2022 (c) by dpHelper\",\r\n {\r\n \"(c)\": '©',\r\n \"(r)\": '®'\r\n }\r\n )\r\n\r\n Copyright text (c) became an html symbol\r\n `,\r\n env: \"both\",\r\n subCommand: [],\r\n author: \"Dario Passariello\",\r\n creationDate: \"20250612\",\r\n lastMod: \"20250612\"\r\n }\r\n ]\r\n}, newObj = {\r\n\r\n /**\r\n * Trims the specified characters from the start and end of a string.\r\n * @param s The string to trim.\r\n * @param c The character to trim.\r\n * @param b The start index.\r\n * @param e The end index.\r\n * @returns {string} The trimmed string.\r\n */\r\n trim: (s: string, c: string, b: number, e: number): string => s.charAt(0) === c ? s.substring(b, e) : s,\r\n\r\n ///\r\n\r\n /**\r\n * Capitalizes the first letter of each word in a string.\r\n * @param txt The string to capitalize.\r\n * @returns {string} The capitalized string.\r\n */\r\n capitalize: (txt: string): string => txt.toLowerCase().replace(/\\b\\w/g, (l: string) => l.toUpperCase()),\r\n\r\n ///\r\n\r\n /**\r\n * Converts a string to lowercase.\r\n * @param txt The string to convert.\r\n * @returns {string} The lowercase string.\r\n */\r\n lower: (txt: string): string => txt.toLowerCase(),\r\n\r\n ///\r\n\r\n /**\r\n * Converts a string to uppercase.\r\n * @param txt The string to convert.\r\n * @returns {string} The uppercase string.\r\n */\r\n upper: (txt: string): string => txt.toUpperCase(),\r\n\r\n ///\r\n\r\n /**\r\n * Converts newlines in a string to HTML <br> tags.\r\n * @param str The string to convert.\r\n * @returns {string} The converted string.\r\n */\r\n nl2br: (str: string): string => str.replace(/(?:\\r\\n|\\r|\\n)/g, \"<br>\"),\r\n\r\n ///\r\n\r\n /**\r\n * Sanitizes a string by removing HTML tags.\r\n * @param str The string to sanitize.\r\n * @returns {string} The sanitized string.\r\n */\r\n sanitize: (str: string): string => str.replace(/<(|\\/|[^>\\bi]|\\/[^>bi]|[^/>][^>]+|\\/[^>][^>]+)>/g, \"\"),\r\n\r\n ///\r\n\r\n camelCase: {\r\n /**\r\n * Converts camelCase to space-separated words.\r\n * @param string The camelCase string to convert.\r\n * @returns {string} The space-separated string.\r\n */\r\n toSpace: (string: string): string => string.replace(/([A-Z])/g, \" $1\").replace(/^./, (str: string) => str.toUpperCase()),\r\n\r\n /**\r\n * Converts camelCase to underscore-separated words.\r\n * @param string The camelCase string to convert.\r\n * @returns {string} The underscore-separated string.\r\n */\r\n toUnderscore: (string: string): string => {\r\n return string\r\n .replace(/\\.?([A-Z])/g, (_x: string, y: string) => `_${y.toLowerCase()}`)\r\n .replace(/^_/, \"\")\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Adjusts the font size of an element to fit its container.\r\n * @param el The selector of the element.\r\n */\r\n fitContainer: (el: string): void => {\r\n if (!el) return\r\n\r\n function fitStart(el: string) {\r\n const divs = document.querySelectorAll(el),\r\n divsCache = divs.length\r\n\r\n if (divsCache <= 0) return\r\n\r\n for (let i = 0; i < divsCache; i++) {\r\n const fontSize = (divs[i] as HTMLElement).offsetWidth * 0.05\r\n ; (divs[i] as HTMLElement).style.fontSize = `${fontSize}px`\r\n }\r\n }\r\n\r\n dphelper.addListenerMulti(window, \"load resize\", () => fitStart(el))\r\n\r\n return\r\n },\r\n\r\n /**\r\n * Extrapolate keyword from a sentence.\r\n * @param sentence Pass the sentence.\r\n */\r\n keywords: (sentence: string) => {\r\n const regex = /\\b[A-Z][a-z]+\\b/g,\r\n matches = sentence.match(regex)?.filter((word) => word.length > 3) || []\r\n return [...new Set(matches.map((word) => word.toLowerCase()))]\r\n },\r\n\r\n /**\r\n * Replace all occurrence from sentence using an object as list.\r\n * @param text Pass the sentence.\r\n * @param object Pass the object.\r\n */\r\n replaceText: (text: string, object: Record<string, string>) => {\r\n let replacedText = text\r\n for (const word in object) {\r\n if (Object.hasOwn(object, word)) {\r\n replacedText = replacedText.replaceAll(word, object[word] || \"\")\r\n }\r\n }\r\n return replacedText\r\n }\r\n\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"timer\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"sleep\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.timer.sleep([ms]) \",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Pauses execution for a specified number of milliseconds.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"percentage\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.timer.percentage([start], [end])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Calculates the percentage of time elapsed between two time strings.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Pauses execution for a specified number of milliseconds.\r\n * @param ms The number of milliseconds to pause.\r\n * @returns {Promise<void>} A promise that resolves after the specified time.\r\n */\r\n sleep: (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms)),\r\n\r\n ///\r\n\r\n /**\r\n * Calculates the percentage of time elapsed between two time strings.\r\n * @param start The start time string in the format \"HH:MM:SS\".\r\n * @param end The end time string in the format \"HH:MM:SS\".\r\n * @returns {string} The percentage of time elapsed.\r\n */\r\n percentage: (start: string, end: string): string => {\r\n function totalSeconds(time: string): number {\r\n const parts = time.split(\":\")\r\n return (\r\n Number.parseInt(parts[0] || \"\", 10) * 3600 +\r\n Number.parseInt(parts[1] || \"\", 10) * 60 +\r\n Number.parseInt(parts[2] || \"\", 10)\r\n )\r\n }\r\n return ((100 * totalSeconds(start)) / totalSeconds(end)).toFixed(2)\r\n }\r\n\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"tools\",\r\n active: true,\r\n subCommand: [\r\n // {\r\n // name: \"getip\",\r\n // description: \"Get the IP of connection\",\r\n // example: \"dphelper.tools.getip()\",\r\n // version: \"0.0.2\",\r\n // author: \"Dario Passariello\",\r\n // creationDate: \"20210101\",\r\n // lastMod: \"20241020\",\r\n // type: \"function\",\r\n // active: true,\r\n //\r\n // },\r\n {\r\n name: \"byteSize\",\r\n description:\r\n \"Give you the total in 'Kb', 'Mb', 'Gb', 'Tb', 'Pb', 'Eb', 'Zb', 'Yb' starting from bytes\",\r\n example: \"dphelper.tools.byteSize(bytes)\",\r\n version: \"0.0.2\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"hashPass\",\r\n description: \"Hashes a password using a specified number and total.\",\r\n example: \"dphelper.tools.hashPass(number, total)\",\r\n version: \"0.0.2\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"zIndex\",\r\n description: \"Finds the highest z-index value in the document.\",\r\n example: \"dphelper.tools.zIndex()\",\r\n version: \"0.0.2\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240807\",\r\n lastMod: \"20240807\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"zeroToFalse\",\r\n description: \"Converts zero to false, otherwise returns the value.\",\r\n example: \"dphelper.tools.zeroToFalse(num)\",\r\n version: \"0.0.2\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240924\",\r\n lastMod: \"20240924\",\r\n type: \"function\",\r\n active: true,\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n\r\n /**\r\n * Gets the IP of the connection.\r\n * @returns {Promise<void>} A promise that resolves with the IP address.\r\n */\r\n\r\n // getip: () => {\r\n // fetch('https://api.ipify.org?format=json')\r\n // .then(response => response.json())\r\n // .then(response => window[\"getip\"] = response.ip)\r\n // return\r\n // },\r\n\r\n ///\r\n\r\n /**\r\n * Converts bytes to a human-readable string in 'Kb', 'Mb', 'Gb', 'Tb', 'Pb', 'Eb', 'Zb', 'Yb'.\r\n * @param bytes The number of bytes.\r\n * @returns {string} The human-readable string.\r\n */\r\n byteSize: (bytes: number): string => {\r\n const thresh = 1024\r\n if (Math.abs(bytes) < thresh) return `${bytes}b`\r\n\r\n const units = [\"Kb\", \"Mb\", \"Gb\", \"Tb\", \"Pb\", \"Eb\", \"Zb\", \"Yb\"]\r\n\r\n let\r\n u = -1,\r\n Bit = bytes\r\n\r\n do {\r\n Bit /= thresh\r\n ++u\r\n } while (Math.abs(Bit) >= thresh && u < units.length - 1)\r\n\r\n return Bit.toFixed(1) + units[u]\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Finds the highest z-index value in the document.\r\n * @returns {number} The highest z-index value.\r\n */\r\n zIndex: (): number => {\r\n return Array.from(document.querySelectorAll(\"body *\"))\r\n .map((elt) => Number.parseFloat(getComputedStyle(elt).zIndex))\r\n .reduce((highest, z) => (z > highest ? z : highest), 1)\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Converts zero to false, otherwise returns the value.\r\n * @param value The value to check.\r\n * @returns {boolean | number} False if the value is zero, otherwise the value.\r\n */\r\n zeroToFalse: (value: number): boolean | number => value === 0 ? false : value\r\n\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "const description: Description = {\r\n name: \"translators\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"convertMatrixToScale\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.translators.convertMatrixToScale({value})\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Converts a transformation matrix to a scale value.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Converts a transformation matrix to a scale value.\r\n * @param values The transformation matrix as a string.\r\n * @returns {number} The scale value.\r\n */\r\n convertMatrixToScale: (values: string): number => {\r\n\r\n const parts = values.split(\"(\")\r\n if (parts.length < 2) return 0\r\n const inner = parts[1]!.split(\")\")[0]\r\n if (!inner) return 0\r\n const t = inner.split(\",\"), a = Number.parseFloat(t[0] || \"0\"), b = Number.parseFloat(t[1] || \"0\"), scale = Math.sqrt(a * a + b * b)\r\n return scale\r\n }\r\n}\r\n\r\n//////\r\n\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\nconst description: Description = {\r\n name: \"triggers\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"add\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.triggers.add('event', callback)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20250220\",\r\n lastMod: \"20250220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Add a trigger for custom events.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"on\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.triggers.on('event', callback)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20250220\",\r\n lastMod: \"20250220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Listen for a trigger event.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"emit\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.triggers.emit('event', data)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20250220\",\r\n lastMod: \"20250220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Emit a trigger event.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"remove\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.triggers.remove('event')\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20250220\",\r\n lastMod: \"20250220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Remove a trigger event.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}\r\n\r\n// Internal storage for trigger callbacks\r\nconst triggerCallbacks: Map<string, Set<(...args: any[]) => void>> = new Map()\r\n\r\nconst newObj = {\r\n /**\r\n * Add a trigger for custom events.\r\n * @param event - The event name\r\n * @param callback - The callback to execute when the event is triggered\r\n */\r\n add: (event: string, callback: (...args: any[]) => void): void => {\r\n if (!triggerCallbacks.has(event)) {\r\n triggerCallbacks.set(event, new Set())\r\n }\r\n triggerCallbacks.get(event)!.add(callback)\r\n },\r\n\r\n /**\r\n * Listen for a trigger event (alias for add).\r\n */\r\n on: (event: string, callback: (...args: any[]) => void): void => {\r\n newObj.add(event, callback)\r\n },\r\n\r\n /**\r\n * Emit a trigger event and call all registered callbacks.\r\n * @param event - The event name\r\n * @param args - Arguments to pass to the callbacks\r\n */\r\n emit: (event: string, ...args: any[]): void => {\r\n const callbacks = triggerCallbacks.get(event)\r\n if (callbacks) {\r\n callbacks.forEach(callback => {\r\n try {\r\n callback(...args)\r\n } catch (error) {\r\n console.error(`Error in trigger callback for event '${event}':`, error)\r\n }\r\n })\r\n }\r\n },\r\n\r\n /**\r\n * Remove a trigger event and all its callbacks.\r\n * @param event - The event name\r\n */\r\n remove: (event: string): void => {\r\n triggerCallbacks.delete(event)\r\n },\r\n\r\n /**\r\n * Remove a specific callback from an event.\r\n * @param event - The event name\r\n * @param callback - The callback to remove\r\n */\r\n off: (event: string, callback: (...args: any[]) => void): void => {\r\n const callbacks = triggerCallbacks.get(event)\r\n if (callbacks) {\r\n callbacks.delete(callback)\r\n }\r\n },\r\n\r\n /**\r\n * Clear all triggers.\r\n */\r\n clear: (): void => {\r\n triggerCallbacks.clear()\r\n },\r\n\r\n /**\r\n * List all registered trigger events.\r\n * @returns Array of event names\r\n */\r\n list: (): string[] => {\r\n return Array.from(triggerCallbacks.keys())\r\n }\r\n}\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"type\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"of\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.type.of(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Returns the type of the given parameter.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"instOfObj\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.type.instOfObj(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Checks if the given parameter is an instance of Object.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"isNaN\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.type.isNaN(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Checks if the given parameter is NaN.\",\r\n env: \"both\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"isBool\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.type.isBool(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Checks if the given parameter is a boolean.\",\r\n env: \"both\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Returns the type of the given parameter.\r\n * @param p The parameter to check.\r\n * @returns {string} The type of the parameter.\r\n */\r\n of: (p: any): string => typeof p,\r\n\r\n ///\r\n\r\n /**\r\n * Checks if the given parameter is an instance of Object.\r\n * @param p The parameter to check.\r\n * @returns {boolean} True if the parameter is an instance of Object, false otherwise.\r\n */\r\n instOfObj: (p: any): boolean => p instanceof Object,\r\n\r\n ///\r\n\r\n /**\r\n * Checks if the given parameter is NaN.\r\n * @param p The parameter to check.\r\n * @returns {function} A function that returns true if the parameter is NaN, false otherwise.\r\n */\r\n isNull: (p: any): ((i: any) => boolean) => (i: any): boolean => !p(i),\r\n\r\n ///\r\n\r\n /**\r\n * Checks if the given parameter is a boolean.\r\n * @param val The parameter to check.\r\n * @returns {boolean} True if the parameter is a boolean, false otherwise.\r\n */\r\n isBool: (val: any): boolean => {\r\n if (!val || val.length == null) return true\r\n return val === \"1\" ? true : false\r\n }\r\n }\r\n\r\n///\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\nconst description: Description = {\r\n name: \"UI\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"input\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.UI.input(...)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Creates an input element with specified options.\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"fps\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.UI.fps(true)\",\r\n author: \"Dario Passariello & Jo\",\r\n creationDate: \"20260220\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Toggle a real-time FPS and Memory monitor overlay\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"boxModel\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.UI.boxModel(true)\",\r\n author: \"Dario Passariello & Jo\",\r\n creationDate: \"20260220\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Toggle visual box-model highlighter for all elements\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"anchorContext\",\r\n version: \"0.0.1\",\r\n example: \"dphelper.UI.anchorContext()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20260221\",\r\n lastMod: \"20260221\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Snapshot and auto-restore UI state (inputs, scroll) across reloads.\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}, newObj = {\r\n /**\r\n * Snapshot and auto-restore UI state.\r\n * Stores scroll position and form inputs (excluding passwords) in localStorage.\r\n */\r\n anchorContext: (): void => {\r\n if (typeof window === \"undefined\" || typeof localStorage === \"undefined\") return\r\n const STORAGE_KEY = `dp_anchor_${btoa(location.pathname).replace(/=/g, \"\")}`, save = () => {\r\n const state = {\r\n scroll: { x: window.scrollX, y: window.scrollY },\r\n inputs: Array.from(document.querySelectorAll(\"input, textarea, select\"))\r\n .filter(el => {\r\n const type = (el as HTMLInputElement).type\r\n return type !== \"password\" && !el.hasAttribute(\"data-private\") && el.getAttribute(\"autocomplete\") !== \"off\"\r\n })\r\n .map(el => ({\r\n id: el.id,\r\n name: (el as any).name,\r\n value: (el as any).value\r\n }))\r\n }\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(state))\r\n }, restore = () => {\r\n const raw = localStorage.getItem(STORAGE_KEY)\r\n if (!raw) return\r\n try {\r\n const state = JSON.parse(raw)\r\n window.scrollTo(state.scroll.x, state.scroll.y)\r\n state.inputs.forEach((input: any) => {\r\n const el = (input.id ? document.getElementById(input.id) : document.querySelector(`[name=\"${input.name}\"]`)) as any\r\n if (el) el.value = input.value\r\n })\r\n } catch (_e) {\r\n console.warn(\"dphelper: anchorContext restoration failed.\")\r\n }\r\n }\r\n window.addEventListener(\"beforeunload\", save)\r\n restore()\r\n },\r\n\r\n /**\r\n * Toggle a real-time FPS and Memory monitor overlay.\r\n */\r\n fps: (show = true) => {\r\n if (typeof document === \"undefined\") return\r\n let statsEl = document.getElementById(\"dphelper-fps-monitor\")\r\n if (!show) {\r\n statsEl?.remove()\r\n return\r\n }\r\n\r\n if (!statsEl) {\r\n statsEl = document.createElement(\"div\")\r\n statsEl.id = \"dphelper-fps-monitor\"\r\n Object.assign(statsEl.style, {\r\n position: \"fixed\",\r\n top: \"10px\",\r\n right: \"10px\",\r\n padding: \"8px 12px\",\r\n background: \"rgba(0,0,0,0.8)\",\r\n color: \"#0f0\",\r\n fontFamily: \"monospace\",\r\n fontSize: \"12px\",\r\n zIndex: \"99999\",\r\n borderRadius: \"4px\",\r\n pointerEvents: \"none\",\r\n boxShadow: \"0 2px 10px rgba(0,0,0,0.5)\",\r\n border: \"1px solid #333\"\r\n })\r\n document.body.appendChild(statsEl)\r\n }\r\n\r\n let frames = 0, lastTime = performance.now()\r\n const update = () => {\r\n if (!document.getElementById(\"dphelper-fps-monitor\")) return\r\n frames++\r\n const now = performance.now()\r\n if (now >= lastTime + 1000) {\r\n const fps = Math.round((frames * 1000) / (now - lastTime)), mem = (performance as any).memory ? ` | Mem: ${Math.round((performance as any).memory.usedJSHeapSize / 1048576)}MB` : \"\"\r\n statsEl!.innerText = `FPS: ${fps}${mem}`\r\n frames = 0\r\n lastTime = now\r\n }\r\n requestAnimationFrame(update)\r\n }\r\n requestAnimationFrame(update)\r\n },\r\n\r\n /**\r\n * Toggle visual box-model highlighter for all elements.\r\n */\r\n boxModel: (active = true) => {\r\n if (typeof document === \"undefined\") return\r\n let styleEl = document.getElementById(\"dphelper-boxmodel-style\")\r\n if (!active) {\r\n styleEl?.remove()\r\n return\r\n }\r\n\r\n if (!styleEl) {\r\n styleEl = document.createElement(\"style\")\r\n styleEl.id = \"dphelper-boxmodel-style\"\r\n styleEl.innerHTML = `\r\n * { outline: 1px solid rgba(255, 0, 0, 0.3) !important; }\r\n * * { outline: 1px solid rgba(0, 255, 0, 0.3) !important; }\r\n * * * { outline: 1px solid rgba(0, 0, 255, 0.3) !important; }\r\n * * * * { outline: 1px solid rgba(255, 255, 0, 0.3) !important; }\r\n `\r\n document.head.appendChild(styleEl)\r\n }\r\n }\r\n}\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\r\n\r\nconst description: Description = {\r\n name: \"window\",\r\n active: true,\r\n subCommand: [\r\n {\r\n name: \"enhancement\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.window.enhancement()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Use only one time at end of application\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"center\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.window.center({ url, title, name, w, h })\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Use to center popup to screen\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"onBeforeUnLoad\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.window.onBeforeUnLoad()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Message during leave the site\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"purge\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.window.purge()\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20210101\",\r\n lastMod: \"20260220\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Purge from memory\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"stopZoomWheel\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.window.stopZoomWheel(e)\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20230527\",\r\n lastMod: \"20230527\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Stop Zoom Generated by Mouse Wheel\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"setZoom\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.window.setZoom([el,1])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240727\",\r\n lastMod: \"20220727\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Set the zoom level of an element\",\r\n env: \"client\",\r\n subCommand: []\r\n },\r\n {\r\n name: \"getZoom\",\r\n version: \"0.0.2\",\r\n example: \"dphelper.window.getZoom([el])\",\r\n author: \"Dario Passariello\",\r\n creationDate: \"20240727\",\r\n lastMod: \"20220727\",\r\n type: \"function\",\r\n active: true,\r\n description: \"Get the zoom level of an element\",\r\n env: \"client\",\r\n subCommand: []\r\n }\r\n ]\r\n}\r\n\r\n///\r\n\r\nlet isWindowDirty = false, windowLoadOnce = false\r\nconst newObj = {\r\n /**\r\n * Enhances the window object with additional properties and methods.\r\n */\r\n enhancement: () => {\r\n ; (window as any)[\"offScreenBuffering\"] = \"auto\"\r\n\r\n // WINDOW ANIMATION\r\n //**********************************\r\n dphelper.window.animationframe()\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Provides a cross-browser implementation of requestAnimationFrame.\r\n * @returns {Function} The requestAnimationFrame function.\r\n */\r\n animationframe: () => {\r\n return (\r\n window.requestAnimationFrame ||\r\n (window as any)[\"webkitRequestAnimationFrame\"] ||\r\n (window as any)[\"mozRequestAnimationFrame\"] ||\r\n (window as any)[\"oRequestAnimationFrame\"] ||\r\n (window as any)[\"msRequestAnimationFrame\"] ||\r\n ((callback: any) => {\r\n window.setTimeout(callback, 1000 / 120)\r\n })\r\n )\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Centers a popup window on the screen.\r\n * @param params The parameters for the popup window.\r\n */\r\n center: (\r\n {\r\n url,\r\n title,\r\n name: _name,\r\n w,\r\n h\r\n }: {\r\n url: string\r\n title: string\r\n name: string\r\n w: number\r\n h: number\r\n }\r\n ): void => {\r\n // Fixes dual-screen position Most browsers Firefox\r\n const dualScreenLeft = screenLeft !== undefined ? screenLeft : screenX,\r\n dualScreenTop = screenTop !== undefined ? screenTop : screenY,\r\n width = innerWidth\r\n ? innerWidth\r\n : document.documentElement.clientWidth\r\n ? document.documentElement.clientWidth\r\n : screen.width,\r\n height = innerHeight\r\n ? innerHeight\r\n : document.documentElement.clientHeight\r\n ? document.documentElement.clientHeight\r\n : screen.height,\r\n systemZoom = width / screen.availWidth,\r\n left = (width - w) / 2 / systemZoom + dualScreenLeft,\r\n top = (height - h) / 2 / systemZoom + dualScreenTop,\r\n newWindow = open(\r\n url,\r\n title,\r\n `\r\n scrollbars=yes,\r\n width=${w / systemZoom},\r\n height=${h / systemZoom},\r\n top=${top},\r\n left=${left}\r\n `\r\n )\r\n\r\n onfocus = () => newWindow?.focus()\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Adds a beforeunload event listener to prompt the user before leaving the site.\r\n * @param target The target element selector.\r\n */\r\n onBeforeUnLoad: (target?: string): void => {\r\n const mex = \"You have made some changes which you might want to save.\",\r\n beforeUnloadListener = (event: BeforeUnloadEvent) => {\r\n event.preventDefault()\r\n return mex\r\n }, nameInput = target ? document.querySelector(target) : null\r\n if (nameInput) {\r\n nameInput.addEventListener(\r\n \"input\",\r\n () => {\r\n if ((nameInput as HTMLInputElement).value !== \"\") {\r\n isWindowDirty = true\r\n addEventListener(\"beforeunload\", beforeUnloadListener, { capture: true })\r\n } else {\r\n isWindowDirty = false\r\n removeEventListener(\"beforeunload\", beforeUnloadListener, { capture: true })\r\n }\r\n return\r\n }\r\n )\r\n }\r\n\r\n /****************************************************************************** */\r\n\r\n // CHANGE ON ASIDE CLICK\r\n if (windowLoadOnce === false) {\r\n document.body.addEventListener(\r\n \"click\",\r\n (event: MouseEvent) => {\r\n const clickTarget = event.target as HTMLElement\r\n if (clickTarget && clickTarget.tagName.toLowerCase() === \"img\") {\r\n if (isWindowDirty === true) {\r\n // if the user navigates away from this page via an anchor link,\r\n // popup a new boxy confirmation.\r\n const answer = confirm(mex)\r\n if (answer === true) {\r\n isWindowDirty = false\r\n return\r\n }\r\n event.preventDefault()\r\n }\r\n }\r\n return\r\n }\r\n )\r\n windowLoadOnce = true\r\n }\r\n\r\n /****************************************************************************** */\r\n\r\n addEventListener(\r\n \"popstate\",\r\n (event: PopStateEvent) => {\r\n if (isWindowDirty === true) {\r\n const answer = confirm(mex)\r\n if (answer === true) {\r\n isWindowDirty = false\r\n return\r\n }\r\n\r\n event.stopImmediatePropagation()\r\n event.preventDefault()\r\n return\r\n }\r\n\r\n return\r\n }\r\n )\r\n\r\n /****************************************************************************** */\r\n\r\n onbeforeunload = (event: BeforeUnloadEvent) => {\r\n if (isWindowDirty === true) {\r\n event.preventDefault()\r\n return (event.returnValue = mex)\r\n }\r\n return\r\n }\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Purges elements from memory.\r\n * @param d The document or element to purge.\r\n * @param time The delay before purging.\r\n */\r\n purge: (d: any = document, time = 10000): void => {\r\n setTimeout(() => {\r\n if (!d) return\r\n\r\n let a: any = d.attributes\r\n\r\n if (a) {\r\n const l = a.length\r\n for (let i = 0; i < l; i += 1) {\r\n const n = a[i].name\r\n if (typeof d[n] === \"function\") {\r\n d[n] = null\r\n }\r\n if (typeof d[n] === \"undefined\") {\r\n d[n] = null\r\n }\r\n }\r\n }\r\n\r\n a = d.childNodes\r\n\r\n if (a) {\r\n const l = a.length\r\n for (let i = 0; i < l; i += 1) {\r\n dphelper.purge(d.childNodes[i])\r\n }\r\n }\r\n return\r\n }, time)\r\n\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Stops zooming generated by the mouse wheel.\r\n */\r\n stopZoomWheel: (): void => {\r\n addEventListener(\r\n \"wheel\",\r\n (e: WheelEvent) => {\r\n if (e.ctrlKey) e.preventDefault()\r\n return\r\n },\r\n { passive: false }\r\n )\r\n\r\n addEventListener(\r\n \"keydown\",\r\n (e: KeyboardEvent) => {\r\n const evt = dphelper.event.keys(e)\r\n if ([\"+\", \"-\", \"=\"].includes(evt.key) && evt.ctrl) e.preventDefault()\r\n return\r\n }\r\n )\r\n\r\n return\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Sets the zoom level of an element.\r\n * @param element The selector of the element.\r\n * @param zoom The zoom level.\r\n * @returns {string} The new zoom value.\r\n */\r\n setZoom: (element = \"html\", zoom = 1): string => {\r\n if (zoom < 0) zoom = 1\r\n const el = document.querySelector(element) as HTMLElement | null\r\n if (el) el.style.zoom = String(zoom)\r\n return `New zoom value: ${zoom * 100}% (css: ${zoom})`\r\n },\r\n\r\n ///\r\n\r\n /**\r\n * Gets the zoom level of an element.\r\n * @param element The selector of the element.\r\n * @returns {number} The zoom level.\r\n */\r\n getZoom: (element = \"html\"): number => {\r\n const el = document.querySelector(element) as HTMLElement | null\r\n return Number(el?.style.zoom || 1)\r\n }\r\n\r\n}\r\n\r\n///\r\n\r\ndphelper?.setDescription(description, newObj)\r\n", "\nimport \"./scripts/setupGlobal\"\nimport \"./scripts/setProps\"\n\n// --- AUTO-GENERATED IMPORTS START ---\nimport \"./tools/ai/index\"\nimport \"./tools/anchor/index\"\nimport \"./tools/array/index\"\nimport \"./tools/audio/index\"\nimport \"./tools/avoid/index\"\nimport \"./tools/browser/index\"\nimport \"./tools/check/index\"\nimport \"./tools/color/index\"\nimport \"./tools/cookie/index\"\nimport \"./tools/coords/index\"\nimport \"./tools/credits/index\"\nimport \"./tools/date/index\"\nimport \"./tools/disable/index\"\nimport \"./tools/dispatch/index\"\nimport \"./tools/elements/index\"\nimport \"./tools/events/index\"\nimport \"./tools/fetch/index\"\nimport \"./tools/form/index\"\nimport \"./tools/format/index\"\nimport \"./tools/json/index\"\nimport \"./tools/load/index\"\nimport \"./tools/logging/index\"\nimport \"./tools/math/index\"\nimport \"./tools/memory/index\"\nimport \"./tools/navigation/index\"\nimport \"./tools/objects/index\"\nimport \"./tools/path/index\"\nimport \"./tools/promise/index\"\nimport \"./tools/sanitize/index\"\nimport \"./tools/screen/index\"\nimport \"./tools/scrollbar/index\"\nimport \"./tools/security/index\"\nimport \"./tools/shortcut/index\"\nimport \"./tools/socket/index\"\nimport \"./tools/sse/index\"\nimport \"./tools/svg/index\"\nimport \"./tools/sync/index\"\nimport \"./tools/system/index\"\nimport \"./tools/text/index\"\nimport \"./tools/timer/index\"\nimport \"./tools/tools/index\"\nimport \"./tools/translators/index\"\nimport \"./tools/triggers/index\"\nimport \"./tools/types/index\"\nimport \"./tools/ui/index\"\nimport \"./tools/window/index\"\n// --- AUTO-GENERATED IMPORTS END ---\n\n// LIST OF SOCKETS OPEN FROM THE PC\nconst checkList = setInterval(() => {\n\n const array = dphelper?.socket?.list(),\n socketList: string[] = []\n\n if (!array) return\n\n array.map(\n (d: { url: string }) => {\n socketList.push(d.url)\n return false\n }\n )\n\n dphelper._list.sockets = socketList\n\n if (socketList) clearInterval(checkList)\n}, 1000)\n\n///\n\n// Object.freeze(dphelper)\nObject.preventExtensions(dphelper)\nObject.seal(dphelper)\n\nexport default dphelper\n"],
|
|
5
|
-
"mappings": "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AAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,YAAa;AAAA,YACrD;AAAA,cAAI;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,YAAa;AAAA,YACrD;AAAA,cAAI;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,YAAY;AAAA,YACpD;AAAA,cAAI;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,cACpC;AAAA,cAAY;AAAA,cAAY;AAAA,cAAY;AAAA,YAAY;AAAA,UACxD;AAEA,cAAI,eAAe;AAAA,YACf,MAAM,CAAC;AAAA,YACP,MAAM,CAAC;AAAA,UACX;AAEA,mBAAS,EAAE,KAAK,GAAE;AACd,gBAAI,IAAK,KAAK,KAAM;AACpB,gBAAI,IAAK,KAAK,KAAM;AACpB,gBAAI,IAAK,KAAK,IAAK;AACnB,gBAAI,IAAI,IAAI;AAEZ,gBAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;AACtC,gBAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;AACrB,gBAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;AAErB,mBAAO;AAAA,UACX;AAEA,mBAAS,iBAAiB,KAAK,MAAM,OAAM;AACvC,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI;AAEJ,qBAAQ,IAAI,GAAG,IAAI,GAAG,EAAE,GAAE;AACtB,mBAAK,KAAK,IAAI,KAAK,CAAC;AACpB,mBAAK,EAAE,KAAK,EAAE,IAAI;AAElB,qBAAO;AACP,mBAAK;AACL,mBAAK;AAAA,YACT;AAEA,mBAAO;AACP,iBAAK;AACL,iBAAK;AAEL,iBAAK,KAAK,IAAI,KAAK,CAAC;AACpB,iBAAK,KAAK,IAAI,KAAK,IAAI,CAAC;AAExB,mBAAO,EAAC,MAAM,IAAI,OAAO,GAAE;AAAA,UAC/B;AAEA,mBAAS,iBAAiB,KAAK,MAAM,OAAM;AACvC,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI;AAEJ,qBAAQ,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,GAAE;AAC1B,mBAAK,KAAK,IAAI,KAAK,CAAC;AACpB,mBAAK,EAAE,KAAK,EAAE,IAAI;AAElB,qBAAO;AACP,mBAAK;AACL,mBAAK;AAAA,YACT;AAEA,mBAAO;AACP,iBAAK;AACL,iBAAK;AAEL,iBAAK,KAAK,IAAI,KAAK,CAAC;AACpB,iBAAK,KAAK,IAAI,KAAK,CAAC;AAEpB,mBAAO,EAAC,MAAM,IAAI,OAAO,GAAE;AAAA,UAC/B;AAaA,mBAAS,aAAa,KAAK,KAAK,SAChC;AACI,qBAAQ,MAAM,GAAG,MAAM,GAAG,OAC1B;AACI,kBAAI,KAAK,GAAG,IAAI,CAAC;AACjB,uBAAQ,MAAM,GAAG,MAAM,KAAK,OAC5B;AACI,oBAAI,KAAK,GAAG,EAAE,GAAG,IAAI,OAAO,GAAG,EAAE,GAAG;AAAA,cACxC;AAAA,YACJ;AAEA,gBAAI,WAAW;AACf,qBAAQ,QAAQ,GAAG,QAAQ,IAAI,GAAG,SAClC;AACI,kBAAI,KAAK,KAAK,IAAI,OAAO,KAAK,IAAI,IAAI,QAAQ;AAC9C;AACA,kBAAG,YAAY,SACf;AACI,2BAAW;AAAA,cACf;AAAA,YACJ;AAEA,gBAAI,QAAQ;AACZ,gBAAI,QAAQ;AACZ,gBAAI,MAAM;AACV,qBAAQ,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK,GAC/B;AACI,oBAAM,iBAAiB,KAAK,OAAO,KAAK;AACxC,sBAAQ,IAAI;AACZ,sBAAQ,IAAI;AACZ,kBAAI,KAAK,CAAC,IAAI;AACd,kBAAI,KAAK,IAAI,CAAC,IAAI;AAAA,YACtB;AAEA,qBAAQ,IAAI,GAAG,IAAI,GAAG,KACtB;AACI,uBAAQ,IAAI,GAAG,IAAI,KAAK,KAAK,GAC7B;AACI,sBAAM,iBAAiB,KAAK,OAAO,KAAK;AACxC,wBAAQ,IAAI;AACZ,wBAAQ,IAAI;AACZ,oBAAI,KAAK,CAAC,EAAE,CAAC,IAAI;AACjB,oBAAI,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI;AAAA,cACzB;AAAA,YACJ;AAEA,mBAAO;AAAA,UACX;AAKA,cAAI,WAAW,OAAO,WAAW,YAAY,OAAO;AAAA,YAChD,UAAU,WAAY;AAElB,kBAAI,KAAK,mBAAmB,KAAK,MAAM;AACnC;AAAA,cACJ;AAGA,kBAAI,MAAM,KAAK,iBAAiB,KAAK;AACrC,kBAAI,WAAW,IAAI;AACnB,kBAAI,UAAU,IAAI,WAAW;AAG7B,2BAAa,cAAc,UAAU,OAAO;AAAA,YAChD;AAAA,YAEA,cAAc,SAAU,GAAG,QAAQ;AAC/B,kBAAI,MAAM,iBAAiB,cAAc,EAAE,MAAM,GAAG,EAAE,SAAS,CAAC,CAAC;AACjE,gBAAE,MAAM,IAAI,IAAI;AAChB,gBAAE,SAAS,CAAC,IAAI,IAAI;AAAA,YACxB;AAAA,YAEA,cAAc,SAAU,GAAG,QAAQ;AAC/B,kBAAI,MAAM,iBAAiB,cAAc,EAAE,MAAM,GAAG,EAAE,SAAS,CAAC,CAAC;AACjE,gBAAE,MAAM,IAAI,IAAI;AAChB,gBAAE,SAAS,CAAC,IAAI,IAAI;AAAA,YACxB;AAAA,YAEA,WAAW,KAAG;AAAA,YAEd,SAAS,MAAI;AAAA,YAEb,QAAQ,KAAG;AAAA,UACf,CAAC;AAUD,YAAE,WAAW,YAAY,cAAc,QAAQ;AAAA,QACnD,GAAE;AAGF,eAAOA,UAAS;AAAA,MAEjB,CAAC;AAAA;AAAA;;;ACtdD;AAAA;AAAC,OAAC,SAAU,MAAM,SAAS,OAAO;AACjC,YAAI,OAAO,YAAY,UAAU;AAEhC,iBAAO,UAAU,UAAU,QAAQ,gBAAmB,oBAAuB,2BAA8B,qBAAwB,sBAAyB,yBAA4B,eAAkB,gBAAmB,kBAAqB,kBAAqB,kBAAqB,kBAAqB,gBAAmB,qBAAwB,gBAAmB,kBAAqB,kBAAqB,uBAA0B,oBAAuB,oBAAuB,4BAA+B,oBAAuB,oBAAuB,wBAA2B,wBAA2B,wBAA2B,2BAA8B,yBAA4B,sBAAyB,eAAkB,qBAAwB,eAAkB,kBAAqB,yBAA4B,kBAAqB;AAAA,QACr1B,WACS,OAAO,WAAW,cAAc,OAAO,KAAK;AAEpD,iBAAO,CAAC,UAAU,cAAc,qBAAqB,eAAe,gBAAgB,mBAAmB,SAAS,UAAU,YAAY,YAAY,YAAY,YAAY,UAAU,eAAe,UAAU,YAAY,YAAY,iBAAiB,cAAc,cAAc,sBAAsB,cAAc,cAAc,kBAAkB,kBAAkB,kBAAkB,qBAAqB,mBAAmB,gBAAgB,SAAS,eAAe,SAAS,YAAY,mBAAmB,YAAY,GAAG,OAAO;AAAA,QACzgB,OACK;AAEJ,eAAK,WAAW,QAAQ,KAAK,QAAQ;AAAA,QACtC;AAAA,MACD,GAAE,SAAM,SAAUC,WAAU;AAE3B,eAAOA;AAAA,MAER,CAAC;AAAA;AAAA;;;ACjBD;AAAA,IACE,MAAQ;AAAA,IACR,SAAW;AAAA,IACX,MAAQ;AAAA,IACR,MAAQ;AAAA,IACR,SAAW;AAAA,IACX,aAAe;AAAA,IACf,SAAW;AAAA,IACX,OAAS;AAAA,IACT,SAAW;AAAA,IACX,WAAa;AAAA,IACb,UAAY;AAAA,IACZ,QAAU;AAAA,IACV,SAAW;AAAA,MACT,MAAQ;AAAA,IACV;AAAA,IACA,SAAW;AAAA,MACT,MAAQ;AAAA,MACR,KAAO;AAAA,MACP,OAAS;AAAA,IACX;AAAA,IACA,YAAc;AAAA,MACZ,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA,MAAQ;AAAA,MACN,KAAO;AAAA,IACT;AAAA,IACA,cAAgB;AAAA,MACd;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,QACT,KAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,UAAY;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAW;AAAA,MACT;AAAA,QACE,MAAQ;AAAA,QACR,KAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,QAAU;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAW;AAAA,MACT,KAAK;AAAA,QACH,OAAS;AAAA,QACT,QAAU;AAAA,QACV,SAAW;AAAA,MACb;AAAA,MACA,aAAa;AAAA,IACf;AAAA,IACA,SAAW;AAAA,MACT,OAAS;AAAA,MACT,KAAO;AAAA,MACP,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,MACP,oBAAoB;AAAA,IACtB;AAAA,IACA,iBAAmB;AAAA,MACjB,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,oBAAoB;AAAA,MACpB,eAAe;AAAA,MACf,SAAW;AAAA,MACX,0BAA0B;AAAA,MAC1B,wBAAwB;AAAA,MACxB,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,MACvB,+BAA+B;AAAA,MAC/B,QAAU;AAAA,MACV,OAAS;AAAA,MACT,KAAO;AAAA,MACP,YAAc;AAAA,IAChB;AAAA,EACF;;;AC1GA;AAAA,IACE,MAAQ;AAAA,MACN,OAAS;AAAA,MACT,aAAe;AAAA,IACjB;AAAA,IACA,YAAc;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;;;ACfA,MAAM,WAAW,WAAW;AAE5B,MAAI,YAAY,SAAS,WAAW,SAAS,UAAW,gBAAW,SAAS;AAC1E,QAAI;AACF,aAAQ,WAAsC;AAAA,IAChD,SAAS,GAAG;AACV,cAAQ,MAAM,8DAA8D;AAAA,IAC9E;AAAA,EACF;AAGA,MAAM,qBAAqB,OAAO,yBAAyB,YAAY,UAAU;AAEjF,MAAI,sBAAsB,CAAC,mBAAmB,cAAc;AAG1D,QAAI,mBAAmB,UAAU;AAC/B,UAAI,WAAW,aAAa,QAAW;AACrC,QAAC,WAAmB,WAAW,CAAC;AAAA,MAClC;AAAA,IACF,OAAO;AACL,cAAQ,MAAM,yEAAyE;AAAA,IACzF;AAAA,EACF,OAAO;AACL,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,QACE,OAAQ,WAAmB,YAAY,CAAC;AAAA,QACxC,UAAU;AAAA,QACV,cAAc;AAAA,QACd,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,MAAI,WAAW,UAAU;AACvB,WAAO;AAAA,MACJ,WAAmB;AAAA,MACpB;AAAA,QACE,OAAO;AAAA,UACL,OAAO;AAAA,YACL,SAAS,CAAC;AAAA,YACV,SAAS,CAAC;AAAA,YACV,GAAI;AAAA,UACN;AAAA,UACA,cAAc;AAAA,UACd,UAAU;AAAA,QACZ;AAAA,QACA,SAAS;AAAA,UACP,OAAQ,gBAAW;AAAA,UACnB,cAAc;AAAA,UACd,UAAU;AAAA,QACZ;AAAA,QACA,UAAU;AAAA,UACR,OAAO,OAAO,WAAW;AAAA,UACzB,cAAc;AAAA,UACd,UAAU;AAAA,QACZ;AAAA,QACA,WAAW;AAAA,UACT,OAAO,OAAO,WAAW;AAAA,UACzB,cAAc;AAAA,UACd,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AClEA,MAAM,SAAU,WAAmB;AAEnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,OAAO,CAAC,MAAe,MAAwB,YAA8G;AAC3J,eAAO;AAAA,UACL;AAAA,UACA,KAAK;AAAA,UACL,WAAW;AAAA,YACT,UAAU;AAAA,YACV,cAAc;AAAA,YACd,YAAY;AAAA,UACd;AAAA,QACF;AACA,YAAI,SAAS,KAAM,QAAO,OAAQ,KAAiC,KAAK,IAAI,CAAC;AAAA,MAC/E;AAAA,MACA,UAAU;AAAA,MACV,cAAc;AAAA,MACd,YAAY;AAAA,IACd;AAAA,EACF;AAKA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,OAAO,CAACC,eAA0B,QAAgB;AAEhD,eAAO;AAAA,UACL;AAAA,UACA;AAAA,YACE,CAACA,cAAY,IAAI,GAAG;AAAA,cAClB,OAAO;AAAA,cACP,UAAU;AAAA,cACV,cAAc;AAAA,cACd,YAAY;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAGA,eAAO,KAAK,GAAG,EAAE;AAAA,UACf,CAAC,QAAQ;AAEP,mBAAO;AAAA,cACL,OAAOA,cAAY,IAAI;AAAA,cAAG;AAAA,gBAC1B,CAAC,GAAG,GAAG;AAAA,kBACL,UAAU;AAAA,kBACV,cAAc;AAAA,kBACd,YAAY;AAAA,gBACd;AAAA,cACF;AAAA,YACA;AACA,mBAAO;AAAA,UACT;AAAA,QACF;AAGA,eAAO;AAAA,UACL;AAAA,UACAA;AAAA,UACA;AAAA,YACE,UAAU;AAAA,YACV,cAAc;AAAA,YACd,YAAY;AAAA,UACd;AAAA,QACF;AAGA,eAAO,MAAM,QAAQ,KAAKA,aAAW;AAAA,MACvC;AAAA,IACF;AAAA,EACF;;;AChFA,MAAM,cAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AA/HA,MAgIE,cAAc,CAAC,MAAW,MAAM,QAAQ,OAAO,MAAM;AAhIvD,MAiIE,gBAAgB,CAAC,MAAmB;AAClC,QAAI,MAAM,KAAM,QAAO;AACvB,QAAI,OAAO,MAAM,UAAU;AACzB,UAAI,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,GAAI,KAAK,EAAE,SAAS,IAAI,KAAK,EAAE,KAAK,MAAM,GAAG;AAChG,eAAO,IAAI,EAAE,QAAQ,MAAM,KAAM,CAAC;AAAA,MACpC;AACA,aAAO,KAAK;AAAA,IACd;AACA,WAAO,OAAO,CAAC;AAAA,EACjB;AA1IF,MA2IE,aAAa,CAAC,KAAU,QAAQ,MAAc;AAC5C,UAAM,SAAS,KAAK,OAAO,KAAK;AAChC,QAAI,YAAY,GAAG,EAAG,QAAO,cAAc,GAAG;AAE9C,QAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,UAAI,IAAI,WAAW,EAAG,QAAO;AAC7B,YAAM,QAAQ,IAAI,CAAC;AACnB,UAAI,CAAC,YAAY,KAAK,KAAK,CAAC,MAAM,QAAQ,KAAK,GAAG;AAChD,cAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,YAAI,MAAM,IAAI,IAAI,MAAM,KAAK,KAAK,KAAK,GAAG,CAAC;AAC3C,mBAAW,QAAQ,KAAK;AACtB,gBAAM,MAAM,KAAK,IAAI,CAAC,MAAM,cAAc,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG;AAC5D,iBAAO;AAAA,EAAK,MAAM,KAAK,GAAG;AAAA,QAC5B;AACA,eAAO;AAAA,MACT,OAAO;AACL,eAAO,IAAI,IAAI,MAAM,QAAQ,IAAI,IAAI,aAAa,EAAE,KAAK,GAAG;AAAA,MAC9D;AAAA,IACF,OAAO;AACL,aAAO,OAAO,QAAQ,GAAG,EACtB,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;AACf,cAAM,MAAO,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,GAAG,IAAK,IAAI,CAAC,MAAM;AAC9D,YAAI,CAAC,YAAY,CAAC,GAAG;AACnB,gBAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;AACnC,iBAAO,IAAI,WAAW,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;AAAA,IAAQ,MAAM,GAAG,GAAG;AAAA,QAC1E;AACA,eAAO,GAAG,GAAG,KAAK,cAAc,CAAC,CAAC;AAAA,MACpC,CAAC,EACA,KAAK;AAAA,EAAK,MAAM,EAAE;AAAA,IACvB;AAAA,EACF;AAzKF,MAyKK,SAAS;AAAA;AAAA;AAAA;AAAA,IAIV,YAAY,CAAC,SAAsB;AACjC,YAAM,OAAO,OAAO,SAAS,WAAW,OAAO,WAAW,IAAI;AAC9D,UAAI,CAAC,KAAM,QAAO;AAClB,YAAM,QAAQ,KAAK,KAAK,EAAE,MAAM,KAAK,EAAE,QAAQ,QAAQ,KAAK;AAC5D,aAAO,KAAK,MAAM,QAAQ,IAAI,QAAQ,OAAO,CAAC;AAAA,IAChD;AAAA;AAAA;AAAA;AAAA,IAKA,eAAe,CAAC,SAAyB;AACvC,UAAI,CAAC,KAAM,QAAO;AAClB,aAAO,KACJ,QAAQ,mDAAmD,SAAS,EACpE,QAAQ,wDAAwD,SAAS,EACzE,QAAQ,4CAA4C,eAAe,EACnE,QAAQ,0BAA0B,OAAO;AAAA,IAC9C;AAAA,IAEA,MAAM,CAAC,SAAsB,WAAW,IAAI;AAAA,IAE5C,YAAY,CAAC,SAAsB;AACjC,UAAI,CAAC,KAAM,QAAO;AAClB,YAAM,QAAQ,KAAK,MAAM,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,GAAG,SAAc,CAAC,GAAG,QAAyE,CAAC,EAAE,QAAQ,IAAI,KAAK,OAAO,CAAC,GAAG,aAAa,CAAC,MAAc;AACnN,YAAI,EAAE,KAAK;AACX,YAAI,MAAM,OAAQ,QAAO;AACzB,YAAI,MAAM,QAAS,QAAO;AAC1B,YAAI,MAAM,OAAQ,QAAO;AACzB,YAAI,CAAC,MAAM,OAAO,CAAC,CAAC,KAAK,MAAM,GAAI,QAAO,OAAO,CAAC;AAClD,YAAI,EAAE,WAAW,GAAI,KAAK,EAAE,SAAS,GAAI,EAAG,QAAO,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,QAAQ,GAAI;AACtF,eAAO;AAAA,MACT,GAAG,WAAW,CAAC,QAAgB;AAC7B,cAAM,QAAkB,CAAC;AACzB,YAAI,UAAU,IAAI,WAAW;AAC7B,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,gBAAM,OAAO,IAAI,CAAC;AAClB,cAAI,SAAS,OAAQ,IAAI,IAAI,CAAC,MAAM,KAAM,YAAW,CAAC;AAAA,mBAC7C,SAAS,OAAO,CAAC,UAAU;AAClC,kBAAM,KAAK,QAAQ,KAAK,CAAC;AACzB,sBAAU;AAAA,UACZ,MAAO,YAAW;AAAA,QACpB;AACA,cAAM,KAAK,QAAQ,KAAK,CAAC;AACzB,eAAO,MAAM,IAAI,UAAU;AAAA,MAC7B;AACA,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAM,OAAO,MAAM,CAAC,GAAI,SAAS,KAAK,OAAO,IAAI,GAAG,UAAU,KAAK,KAAK;AACxE,YAAI,CAAC,QAAS;AACd,eAAO,MAAM,SAAS,KAAK,UAAU,MAAM,MAAM,SAAS,CAAC,EAAG,OAAQ,OAAM,IAAI;AAChF,cAAM,UAAU,MAAM,MAAM,SAAS,CAAC;AACtC,YAAI,QAAQ,QAAQ;AAClB,gBAAM,SAAS,SAAS,OAAO,GAAG,OAAY,CAAC;AAC/C,kBAAQ,OAAO,QAAQ,CAAC,GAAG,QAAQ,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC;AACxD,kBAAQ,IAAI,KAAK,IAAI;AACrB;AAAA,QACF;AACA,cAAM,WAAW,QAAQ,QAAQ,GAAG;AACpC,YAAI,aAAa,GAAI;AACrB,cAAM,UAAU,QAAQ,MAAM,GAAG,QAAQ,EAAE,KAAK,GAAG,UAAU,QAAQ,MAAM,WAAW,CAAC,EAAE,KAAK,GAAG,aAAa,QAAQ,MAAM,8BAA8B;AAC1J,YAAI,YAAY;AACd,gBAAM,CAAC,GAAG,KAAK,SAAS,SAAS,IAAI,YAAY,MAAa,CAAC;AAC/D,kBAAQ,IAAI,GAAI,IAAI;AACpB,cAAI,UAAW,OAAM,KAAK,EAAE,QAAQ,KAAK,KAAK,KAAW,QAAQ,UAAU,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,CAAC;AAAA,mBACjG,QAAS,UAAS,OAAO,EAAE,QAAQ,OAAK,IAAI,KAAK,CAAC,CAAC;AAAA,cACvD,OAAM,KAAK,EAAE,QAAQ,KAAK,KAAK,IAAU,CAAC;AAAA,QACjD,OAAO;AACL,gBAAM,WAAW,MAAM,IAAI,CAAC,GAAG,aAAa,WAAW,SAAS,OAAO,IAAI,IAAI;AAC/E,cAAI,YAAY,MAAM,aAAa,QAAQ;AACzC,kBAAM,UAAU,CAAC;AACjB,oBAAQ,IAAI,OAAO,IAAI;AACvB,kBAAM,KAAK,EAAE,QAAQ,KAAK,SAAS,KAAK,QAAQ,CAAC;AAAA,UACnD,MAAO,SAAQ,IAAI,OAAO,IAAI,WAAW,OAAO;AAAA,QAClD;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,SAAS,CAAC,MAAc,UAA+C,CAAC,MAAgB;AACtF,UAAI,CAAC,KAAM,QAAO,CAAC;AACnB,YAAM,OAAO,QAAQ,QAAQ,KAAM,UAAU,QAAQ,WAAW,KAAK,SAAmB,CAAC;AACzF,UAAI,QAAQ;AACZ,aAAO,QAAQ,KAAK,QAAQ;AAC1B,eAAO,KAAK,KAAK,MAAM,OAAO,QAAQ,IAAI,CAAC;AAC3C,iBAAU,OAAO;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,YAAY,CAAC,GAAa,MAAwB;AAChD,UAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;AAClC,UAAI,MAAM,GAAG,KAAK,GAAG,KAAK;AAC1B,eAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,eAAO,EAAE,CAAC,IAAK,EAAE,CAAC;AAClB,cAAM,EAAE,CAAC,IAAK,EAAE,CAAC;AACjB,cAAM,EAAE,CAAC,IAAK,EAAE,CAAC;AAAA,MACnB;AACA,aAAO,OAAO,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,EAAE;AAAA,IAC5C;AAAA;AAAA;AAAA;AAAA,IAKA,kBAAkB,CAAC,SAAyD;AAC1E,YAAM,QAAQ,KAAK,MAAM,4BAA4B;AACrD,aAAO;AAAA,QACL,WAAW,QAAQ,MAAM,CAAC,EAAG,KAAK,IAAI;AAAA,QACtC,SAAS,KAAK,QAAQ,4BAA4B,EAAE,EAAE,KAAK;AAAA,MAC7D;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,QAAQ,CAAC,UAAkB,SAAsC;AAC/D,aAAO,SAAS,QAAQ,cAAc,CAAC,GAAG,QAAQ;AAChD,cAAM,MAAM,KAAK,IAAI,KAAK,CAAC;AAC3B,eAAO,QAAQ,SAAa,OAAO,QAAQ,WAAW,WAAW,GAAG,IAAI,OAAO,GAAG,IAAK,KAAK,GAAG;AAAA,MACjG,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA,IAKA,QAAQ,CAAC,SAAsB;AAC7B,YAAM,UAAU,CAAC,MAAmB;AAClC,YAAI,MAAM,KAAM,QAAO;AACvB,YAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,cAAI,EAAE,SAAS,KAAK,OAAO,EAAE,CAAC,MAAM,UAAU;AAC5C,mBAAO,UAAU,OAAO,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,OAAK,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,UACpF;AACA,iBAAO;AAAA,QACT;AACA,eAAO,OAAO;AAAA,MAChB;AACA,UAAI,OAAO,SAAS,YAAY,SAAS,KAAM,QAAO,QAAQ,IAAI;AAClE,aAAO,OAAO,QAAQ,IAAI,EACvB,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,EACrC,KAAK,IAAI;AAAA,IACd;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,UAAU,MAAc;AACtB,YAAM,YAAY,OAAO,WAAW,aAAa,UAAe;AAAA,QAC9D,SAAS;AAAA,UACP,KAAK,YAAY,YAAY;AAAA,UAC7B,OAAM,oBAAI,KAAK,GAAE,YAAY;AAAA,QAC/B;AAAA,MACF;AACA,UAAI,WAAW;AACb,gBAAQ,QAAQ,MAAM,OAAO,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC;AACvD,gBAAQ,QAAQ,QAAQ,SAAS;AACjC,gBAAQ,QAAS,OAAe,UAAU;AAC1C,gBAAQ,OAAO,UAAU,KAAK,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEvD,gBAAQ,SAAS;AAAA,UACf,MAAM,UAAU;AAAA,UAChB,QAAQ,GAAG,OAAO,OAAO,KAAK,IAAI,OAAO,OAAO,MAAM;AAAA,UACtD,MAAM,UAAU,SAAS,OAAO,KAAK;AAAA,QACvC;AAAA,MACF,OAAO;AACL,gBAAQ,SAAS;AAAA,UACf,UAAU,OAAO,YAAY,cAAc,QAAQ,WAAW;AAAA,UAC9D,MAAM,OAAO,YAAY,cAAc,QAAQ,UAAU;AAAA,UACzD,MAAM,OAAO,YAAY,cAAc,QAAQ,OAAO;AAAA,QACxD;AAAA,MACF;AAEA,YAAM,OAAO,WAAW,OAAO;AAC/B,aAAO,OAAO,cAAc,IAAI;AAAA,IAClC;AAAA,EACF;AAEF,YAAU,eAAe,aAAa,MAAM;;;ACjW5C,MAAMC,eAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA;AAAA;AAAA,QAGb,QAAQ;AAAA,QACR,cAAc;AAAA,QAAY,SAAS;AAAA,QACnC,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAnBA,MAmBGC,UAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,WAAW,CAAC,OAAqB;AAC/B,YAAM,YAAY,SAAS,cAAc,EAAE;AAC3C,UAAI,CAAC,UAAW;AAChB,YAAM,UAAU,UAAU,iBAAiB,GAAG;AAE9C,cAAQ,QAAQ,CAAC,WAAW;AAC1B,cAAM,OAAO,OAAO,aAAa,MAAM;AACvC,YAAI,CAAC,KAAM;AAEX,eAAO,MAAM,SAAS;AAGtB,cAAM,YAAY,SAAS,SAAS,IAAI,CAAC,GAAG,QAAQ,OAAO,EAAE,KAAK;AAClE,YAAI,UAAW,QAAO,UAAU,IAAI,SAAS;AAG7C,cAAM,YAAY,OAAO,UAAU,IAAI;AACvC,eAAO,YAAY,aAAa,WAAW,MAAM;AACjD,kBAAU,gBAAgB,MAAM;AAEhC,kBAAU,iBAAiB,WAAW,CAAC,MAAM;AAC3C,cAAI,KAAK,WAAW,GAAG,GAAG;AACxB,oBAAQ,UAAU,EAAE,KAAW,GAAG,IAAI,IAAI;AAC1C,qBAAS,WAAW,KAAK,IAAI;AAC7B,cAAE,gBAAgB;AAAA,UACpB,OAAO;AACL,qBAAS,QAAQ,KAAK,IAAI;AAAA,UAC5B;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,EACF;AAKA,YAAU,eAAeD,cAAaC,OAAM;;;AC5D5C,MAAMC,eAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAzQA,MAyQGC,UAAS;AAAA;AAAA;AAAA;AAAA,IAIV,MAAM,CAAC,OAAY,QAAa;AAC9B,UAAI,CAAC,MAAM,QAAQ,KAAK,EAAG;AAC3B,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,GAAG,MAAM,IAAK,QAAO;AAC9B,YAAI,KAAK,UAAU;AACjB,gBAAM,YAAY,SAAS,MAAM,KAAK,KAAK,KAAK,QAAQ;AACxD,cAAI,UAAW,QAAO;AAAA,QACxB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,QAAQ,CAAC,OAAY,QAAa;AAChC,UAAI,CAAC,MAAM,QAAQ,KAAK,EAAG;AAC3B,YAAM,KAAK,SAAS,KAAK,GAAG,GAAG,GAAG;AAChC,YAAI,EAAE,GAAG,MAAM,KAAK;AAClB,YAAE,OAAO,GAAG,CAAC;AACb,iBAAO;AAAA,QACT;AACA,mBAAW,KAAK,OAAO,KAAK,CAAC,GAAG;AAC9B,gBAAM,QAAQ,EAAE,CAAC;AACjB,cAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,KAAK,IAAI;AAAA,QAClD;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,OAAO,CAAC,QAAa,WAAgB;AACnC,UAAI,EAAE,UAAU,QAAS,QAAO,UAAU;AAC1C,iBAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AAErC,YAAI,QAAQ,eAAe,QAAQ,iBAAiB,QAAQ,YAAa;AACzE,YAAI,OAAO,GAAG,aAAa,UAAU,OAAO,GAAG,GAAG;AAChD,iBAAO,OAAO,OAAO,GAAG,GAAG,SAAS,MAAM,MAAM,OAAO,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC;AAAA,QAC3E;AAAA,MACF;AACA,aAAO,OAAO,OAAO,QAAQ,MAAM;AAAA,IACrC;AAAA;AAAA;AAAA;AAAA,IAKA,YAAY,CAAC,QAAa,QAAa,QAAa;AAClD,aAAO,OAAO,IAAI,CAAC,SAAc;AAC/B,cAAM,QAAQ,OAAO,KAAK,CAAC,MAAW,KAAK,GAAG,MAAM,EAAE,GAAG,CAAC;AAC1D,eAAO,QAAQ,OAAO,OAAO,CAAC,GAAG,MAAM,KAAK,IAAI;AAAA,MAClD,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA,IAKA,YAAY,CAAC,UAAe;AAC1B,UAAI,CAAC,MAAM,QAAQ,KAAK,EAAG;AAC3B,YAAM,OAAO,oBAAI,IAAI,GAAG,aAAa,oBAAI,IAAI;AAC7C,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,IAAI,IAAI,GAAG;AAClB,qBAAW,IAAI,IAAI;AAAA,QACrB,OAAO;AACL,eAAK,IAAI,IAAI;AAAA,QACf;AAAA,MACF;AACA,aAAO,MAAM,KAAK,UAAU;AAAA,IAC9B;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,CAAC,UAAe;AACpB,UAAI,CAAC,MAAM,QAAQ,KAAK,EAAG;AAC3B,aAAO,MAAM,OAAO,CAAC,SAAc,OAAO,MAAM,CAAC;AAAA,IACnD;AAAA;AAAA;AAAA;AAAA,IAKA,KAAK,CAAC,UAAe;AACnB,UAAI,CAAC,MAAM,QAAQ,KAAK,EAAG;AAC3B,aAAO,MAAM,OAAO,CAAC,SAAc,OAAO,MAAM,CAAC;AAAA,IACnD;AAAA;AAAA;AAAA;AAAA,IAKA,WAAW,CAAC,QAAa,CAAC,GAAG,SAAS,MAAM;AAC1C,UAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO;AAClC,UAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,aAAO,MAAM,OAAO,CAAC,KAAK,QAAQ,OAAO,IAAI,MAAM,KAAK,IAAI,CAAC;AAAA,IAC/D;AAAA;AAAA;AAAA;AAAA,IAKA,SAAS,CAAC,UAAe;AACvB,UAAI,CAAC,MAAM,QAAQ,KAAK,EAAG;AAC3B,eAAS,IAAI,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK;AACzC,cAAM,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE;AACzC,SAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,MAC/C;AACA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,UAAU,CAAC,QAAgB;AACzB,UAAI,OAAO,MAAM,GAAG,EAAG;AACvB,YAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,IAAI,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AACzD,aAAO,SAAS,MAAM,QAAQ,KAAK;AAAA,IACrC;AAAA;AAAA;AAAA;AAAA,IAKA,cAAc,CAAC,UAAe;AAC5B,UAAI,CAAC,MAAM,QAAQ,KAAK,EAAG;AAC3B,YAAM,iBAAiB,CAAC;AACxB,eAAS,IAAI,GAAG,KAAK,MAAM,QAAQ,KAAK;AACtC,YAAI,CAAC,MAAM,SAAS,CAAC,GAAG;AACtB,yBAAe,KAAK,CAAC;AAAA,QACvB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,QAAQ,CAAC,WAAgB;AACvB,YAAM,KAAK,YAAY,IAAI,GACzB,QAAa,CAAC;AAChB,YAAM,OAAO,CAAC;AACd,YAAM,OAAO,CAAC;AACd,eAAS,IAAI,GAAG,IAAI,QAAQ,EAAE,GAAG;AAC/B,cAAM,KAAK,KAAK,OAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;AAAA,MAC/D;AACA,YAAM,KAAK,YAAY,IAAI;AAC3B,YAAM,KAAK,KAAK,KAAK,EAAE;AACvB,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,CAAC,cAAmB,iBAAsB;AAC/C,aAAO,aAAa,OAAO,CAAC,SAAc,aAAa,SAAS,IAAI,CAAC;AAAA,IACvE;AAAA;AAAA;AAAA;AAAA,IAKA,YAAY,CAAC,OAAiB,YAAY,QAAQ;AAChD,YAAM,MAA2B,CAAC;AAClC,UAAI;AAEJ,iBAAW,QAAQ,OAAO;AACxB,eAAO;AACP,cAAM,QAAQ,KAAK,MAAM,SAAS;AAClC,mBAAW,OAAO,MAAM,MAAM,GAAG,EAAE,GAAG;AACpC,cAAI,QAAQ,GAAI;AAChB,cAAI,EAAE,OAAO,MAAO,MAAK,GAAG,IAAI,CAAC;AACjC,iBAAO,KAAK,GAAG;AAAA,QACjB;AACA,YAAI,MAAM,GAAG,EAAE,GAAG;AAChB,eAAK,MAAM,GAAG,EAAE,CAAE,IAAI;AAAA,QACxB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AAKA,YAAU,eAAeD,cAAaC,OAAM;;;ACnc5C,MACEC,eAA2B;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACV,KAAK;AAAA,QACH,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAnBF,MAoBEC,UAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASP,MAAM,CAAC,MAAe,OAAO,IAAI,OAAO,UAAgB;AACtD,UAAI,MAAM;AACR,YAAI,CAAC,SAAS,cAAc,UAAU,IAAI,EAAE,GAAG;AAC7C,gBAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,gBAAM,KAAK,SAAS,IAAI;AACxB,gBAAM,QAAQ,WAAW;AACzB,gBAAM,MAAM,OAAO;AACnB,gBAAM,OAAO;AACb,mBAAS,KAAK,YAAY,KAAK;AAC/B,gBAAM,KAAK;AACX,gBAAM,KAAK,GAAG,QAAQ,CAAC,UAAe,QAAQ,MAAM,wBAAwB,KAAK,CAAC;AAAA,QACpF;AAAA,MACF,OAAO;AAEL,iBAAS,iBAAiB,8BAA8B,EAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;AAAA,MACvF;AACA;AAAA,IACF;AAAA,EACF;AAIF,YAAU,eAAeD,cAAaC,OAAM;;;ACnD5C,MAAMC,eAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAlBA,MAkBGC,UAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOV,OAAO,CAAC,QAAwB;AAC9B,UAAI,OAAO,QAAQ,SAAU,OAAM,IAAI,MAAM,mCAAmC;AAChF,aAAO,IAAI,OAAO,KAAK,KAAK,GAAG,IAAI,MAAM,KAAK,MAAM,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC;AAAA,IAC7F;AAAA,EACF;AAKA,YAAU,eAAeD,cAAaC,OAAM;;;ACpC5C;AAAA,IACE,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,IACA,OAAO;AAAA,MACL,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,IACjB;AAAA,EACF;;;AChcA,MAAMC,eAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AA1HA,MA0HGC,UAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,WAAW,CAAC,aAA2C;AACrD,YAAM,KAAK,IAAI,iBAAiB,cAAc;AAC9C,UAAI,QAAQ;AACZ,SAAG,YAAY,CAAC,MAAM;AAEpB,aAAK,EAAE,WAAW,OAAO,SAAS,UAAU,CAAC,EAAE,YAC5C,EAAE,SAAS,UAAU,EAAE,SAAS,SAAS;AAC1C,cAAI,EAAE,SAAS,OAAQ,IAAG,YAAY,MAAM;AAC5C,cAAI,EAAE,SAAS,OAAQ,UAAS,EAAE,KAAK;AAAA,QACzC;AAAA,MACF;AACA,SAAG,YAAY,MAAM;AACrB,eAAS,KAAK;AAAA,IAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAO,CAAC,OAAY,OAAY,QAAmB;AACjD,cAAQ,UAAU,OAAO,OAAO,GAAG;AAAA,IACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,CAAC,UAAwB;AAC7B,cAAQ,GAAG,KAAK;AAAA,IAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,CAAC,UAAwB;AAC7B,cAAQ,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,QAAQ,MAAY;AAClB,eAAS,OAAO;AAAA,IAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,CAAC,QAAsB;AAC3B,eAAS,OAAO;AAAA,IAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,SAAS,CAAC,OAAO,uBAA6B;AAC5C,aAAO,iBAAiB,UAAU,MAAM,SAAS,iBAAiB,KAAK,EAAE,QAAQ,QAAM,GAAG,OAAO,CAAC,CAAC;AAEnG,aAAO,iBAAiB,WAAW,MAAM;AAEvC,cAAM,WAAW,OAAO,IAAI,EACzB,QAAQ,UAAU,MAAM,EACxB,MAAM,GAAG,GAAG;AAEf,cAAM,UAAU,SAAS,cAAc,OAAO;AAC9C,gBAAQ,aAAa,KAAK,EAAE;AAC5B,gBAAQ,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAsBF,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe5B,iBAAS,KAAK,YAAY,OAAO;AAAA,MACnC,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,MAAc,KAAK,MAAM,mBAAmB,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOrD,QAAQ,CAAC,SAA0B,eAAe,IAAI,KAAK;AAAA,EAE7D;AAEA,YAAU,eAAeD,cAAaC,OAAM;;;AC3Q5C,MAAMC,eAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaF;AAAA,EACF;AA1CA,MA0CGC,UAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA6BV,SAAS,CAAC,IAAY,IAAY,SAAoD;AACpF,UAAI,EAAE,MAAM,IAAK,QAAO,OAAO;AAE/B,YAAM,MAAM,MAAM,KAChB,OAAO,MAAM;AAEf,UAAI,QAAe,GAAG,MAAM,GAAG,GAC7B,QAAe,GAAG,MAAM,GAAG;AAE7B,YAAM,cAAc,CAAC,OAAwB,MAAM,mBAAmB,SAAS,KAAK,CAAC;AAErF,UAAI,EAAE,MAAM,MAAM,WAAW,KAAK,MAAM,MAAM,WAAW;AACvD,eAAO,OAAO;AAEhB,UAAI,MAAM;AACR,eAAO,MAAM,SAAS,MAAM,OAAQ,OAAM,KAAK,GAAG;AAClD,eAAO,MAAM,SAAS,MAAM,OAAQ,OAAM,KAAK,GAAG;AAAA,MACpD;AAEA,UAAI,CAAC,KAAK;AACR,gBAAQ,MAAM,IAAI,MAAM;AACxB,gBAAQ,MAAM,IAAI,MAAM;AAAA,MAC1B;AAEA,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,YAAI,MAAM,CAAC,MAAM,MAAM,CAAC,EAAG;AAC3B,YAAI,MAAM,CAAC,IAAI,MAAM,CAAC,EAAG,QAAO;AAChC,eAAO;AAAA,MACT;AAEA,UAAI,MAAM,WAAW,MAAM;AACzB,eAAO;AAET,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBF;AAKA,YAAU,eAAeD,cAAaC,OAAM;;;AClI5C,MAAMC,eAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAUA,MAAMC,UAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOb,KAAK,CAAC,MAAsB;AAC1B,UAAI,IAAI,OAAO,SAAS,EAAE,SAAS,GAAG,EAAE;AACxC,UAAI,OAAO,MAAM,CAAC,EAAG,QAAO;AAC5B,UAAI,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;AAC5C,aAAO,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,IACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,OAAO,CAAC,QAA0B,SAAS,MAAM,IAAI,IAAI,CAAC,CAAC,IAAI,SAAS,MAAM,IAAI,IAAI,CAAC,CAAC,IAAI,SAAS,MAAM,IAAI,IAAI,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUrH,OAAO,CAAC,QAA0B;AAChC,YAAM,QAAkB,CAAC;AACzB,YAAM,CAAC,IAAI,OAAO,SAAS,SAAS,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE;AACjF,YAAM,CAAC,IAAI,OAAO,SAAS,SAAS,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE;AACjF,YAAM,CAAC,IAAI,OAAO,SAAS,SAAS,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE;AACjF,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,UAAU,CAAC,YAA4B;AACrC,YAAM,QAAQ,QAAQ,QAAQ,KAAK,EAAE,EAAE,MAAM,SAAS;AACtD,UAAI,CAAC,SAAS,MAAM,SAAS,EAAG,QAAO;AACvC,cACE,OAAO,SAAS,MAAM,CAAC,GAAI,EAAE,IAC7B,OAAO,SAAS,MAAM,CAAC,GAAI,EAAE,IAAI,MACjC,OAAO,SAAS,MAAM,CAAC,GAAI,EAAE,IAAI,OACjC,SAAS;AAAA,IACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYA,UAAU,CAAC,YAAoB,UAAkB,eAAiC;AAChF,YACE,QAAQ,SAAS,MAAM,MAAM,UAAU,GACvC,MAAM,SAAS,MAAM,MAAM,QAAQ,GACnC,MAAM,YACN,SAAmB,CAAC;AAEtB,UAAI,QAAQ;AAEZ,YAAM,IAAc,CAAC;AAErB,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAE5B,iBAAS,IAAM;AACf,UAAE,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC;AAC7C,UAAE,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC;AAC7C,UAAE,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC;AAE7C,eAAO,KAAK,SAAS,MAAM,MAAM,CAAC,CAAC;AAAA,MACrC;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AAIA,YAAU,eAAeD,cAAaC,OAAM;;;AC/K5C,MAAMC,eAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAgBA,MAAMC,UAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQb,KAAK,CAAC,UAA6B;AACjC,YAAM,IAAU,oBAAI,KAAK;AACzB,QAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO,MAAO,KAAK,GAAG;AAE9C,UAAI,CAAC,MAAM,KAAM;AAEjB,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,OAAO,MAAM,QAAQ,EAAE,YAAY;AAAA,QACnC,OAAO,MAAM,QAAQ;AAAA,QACrB,WAAW,MAAM,YAAY;AAAA,QAC7B,SAAS,MAAM,UAAW,SAAS,aAAa;AAAA,MAClD,IAAI;AAGJ,YAAM,eAAe,mBAAmB,KAAK;AAC7C,YAAM,aAAa,SAAS,WAAW;AACvC,YAAM,eAAe;AAErB,eAAS,SAAS,GAAG,IAAI,IAAI,YAAY,aAAa,IAAI,UAAU,IAAI,cAAc,YAAY,KAAK,UAAU;AACjH;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,KAAK,CAAC,SAAgC;AACpC,YAAM,YAAY,SAAS,OAAO,MAAM,GAAG,GAAG,iBAAiB,UAAU;AACzE,eAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACvC,cAAM,SAAS,UAAU,CAAC;AAC1B,YAAI,CAAC,OAAQ;AACb,cAAM,WAAW,OAAO,KAAK,EAAE,MAAM,GAAG;AACxC,YAAI,SAAS,SAAS,CAAC,EAAG,QAAO,mBAAmB,SAAS,CAAC,KAAK,EAAE;AAAA,MACvE;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,QAAQ,CAAC,SAAuB,SAAS,OAAO,IAAI;AAAA,MAClD;AAAA,MACA,OAAO;AAAA,MACP,MAAM;AAAA,IACR,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAOD,WAAW,MAAY;AACrB,YACE,UAAU,SAAS,OAAO,MAAM,GAAG,GACnC,iBAAiB,QAAQ;AAE3B,eAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACvC,cAAM,SAAS,QAAQ,CAAC;AACxB,YAAI,CAAC,OAAQ;AACb,cACE,QAAQ,OAAO,QAAQ,GAAG,GAC1B,QAAQ,QAAQ,KAAK,OAAO,MAAM,GAAG,KAAK,IAAI;AAChD,iBAAS,OAAO,OAAO,MAAM,KAAK,CAAC;AAAA,MACrC;AACA;AAAA,IACF;AAAA,EACF;AAIA,YAAU,eAAeD,cAAaC,OAAM;;;AClK5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,QACF,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,QACF,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAzGA,MAyGG,IAAI;AAzGP,MAyGeC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOlB,kBAAkB,CAAC,YAA6B,UAAU,KAAK,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUrE,aAAa,CAAC,WAAiD;AAC7D,UAAI,CAAC,MAAM,QAAQ,MAAM,EAAG;AAC5B,YAAM,SAAS,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC;AAC3D,aAAO,SAAS;AAAA,IAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,UAAU,CAAC,WAA2E;AACpF,UAAI,CAAC,MAAM,QAAQ,MAAM,EAAG;AAE5B,YAAM,IAAI,IAAI,KAAK,IAAK,OAAO,CAAC,IAAI,KAAK,KAAM,GAAG,IAAI,KAAK,IAAK,OAAO,CAAC,IAAI,KAAK,KAAM,GAAG,GACxF,IAAI,IAAI,KAAK,IAAK,OAAO,CAAC,IAAI,KAAK,KAAM,GAAG,IAAI,KAAK,IAAK,OAAO,CAAC,IAAI,KAAK,KAAM,GAAG,GACpF,IAAI,IAAI,KAAK,IAAK,OAAO,CAAC,IAAI,KAAK,KAAM,GAAG;AAC9C,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaA,qBAAqB,CAAC,KAAa,SAAiB,KAAa,cAA8B;AAC7F,UAAI,MAAM,MAAM,UAAU,KAAK,MAAM;AACrC,UAAI,cAAc,OAAO,cAAc,IAAK,QAAO;AACnD,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,UAAU,CACR,QACA,WACwD;AACxD,UAAI,EAAE,MAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ,MAAM,GAAI;AAEvD,YAAM,UAAM,OAAO,CAAC,IAAI,KAAK,KAAM,KACjC,UAAM,OAAO,CAAC,IAAI,KAAK,KAAM,KAC7B,gBAAO,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,KAAM,KAC3C,gBAAO,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,KAAM,KAC3C,IACE,KAAK,IAAI,eAAK,CAAC,IAAI,KAAK,IAAI,eAAK,CAAC,IAClC,KAAK,IAAI,OAAE,IAAI,KAAK,IAAI,OAAE,IAAI,KAAK,IAAI,eAAK,CAAC,IAAI,KAAK,IAAI,eAAK,CAAC,GAAG,IAAI,IAAI,KAAK,MAAM,KAAK,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,WAAW,IAAI;AAC1I,aAAO;AAAA,QACL,IAAI,QAAQ,WAAW,KAAM,QAAQ,CAAC,CAAC;AAAA,QACvC,IAAI,QAAS,WAAW,MAAQ,UAAU,QAAQ,CAAC,CAAC;AAAA,QACpD,KAAK,QAAQ,WAAW,MAAO,OAAO,QAAQ,CAAC,CAAC;AAAA,MAClD;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaA,kBAAkB,CAChB,SACA,SACA,QACA,mBAC6B;AAC7B,YAAM,kBAAmB,iBAAiB,MAAM,KAAK,KAAM;AAC3D,aAAO;AAAA,QACL,GAAG,UAAU,SAAS,KAAK,IAAI,cAAc;AAAA,QAC7C,GAAG,UAAU,SAAS,KAAK,IAAI,cAAc;AAAA,MAC/C;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAeA,oBAAoB,CAClB,QACA,WACA,WACA,UACA,UACA,YACW;AAEX,YAAM,oBAAoB,SAAS,cAAc,YAAY,YAAY,YAAY,WAAW,oBAAoB,WAAW,WAAW,gBAAgB,UAAU,IAAI,QAAQ,YAAY,YAAY,WAAW;AAKnN,aAAO,QAAQ,UAAU,UAAU;AAAA,IACrC;AAAA,EACF;AAIJ,YAAU,eAAeD,eAAaC,QAAM;;;AC1P5C;AAAA,IACE,SAAW;AAAA,IACX,cAAgB;AAAA,MACd;AAAA,QACE,MAAQ;AAAA,QACR,OAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,KAAO;AAAA,MACL,QAAU;AAAA,MACV,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,MAAQ;AAAA,QACN,KAAO;AAAA,QACP,MAAQ;AAAA,MACV;AAAA,MACA,QAAU;AAAA,QACR,KAAO;AAAA,UACL,KAAO;AAAA,UACP,KAAO;AAAA,UACP,KAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,QAAU;AAAA,QACR,KAAO;AAAA,UACL,KAAO;AAAA,UACP,KAAO;AAAA,UACP,KAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,OAAS;AAAA,QACP,KAAO;AAAA,UACL,KAAO;AAAA,UACP,KAAO;AAAA,UACP,KAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,KAAO;AAAA,QACL,KAAO;AAAA,MACT;AAAA,MACA,KAAO,CAAC;AAAA,IACV;AAAA,EACF;;;AC1CA,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY,CAAC;AAAA,EACf;AAIA,MAAMC,WAAS,MAAM;AACnB,UAAM,QAAQ;AACd,YAAQ,eAAe,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,OAAO,MAAM,gBAAgB,EAAE;AACpF,YAAQ;AAAA,MACN,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,OAAO;AAAA,MACrC;AAAA,MACA;AAAA,IACF;AACA,YAAQ,MAAM,WAAW,MAAM,IAAI,IAAI,IAAI,gBAAgB,EAAE;AAC7D,YAAQ,MAAM,cAAc,MAAM,OAAO,IAAI,gBAAgB,EAAE;AAC/D,YAAQ,SAAS;AACjB;AAAA,EACF;AAIA,MAAMC,UAAU,WAAmB;AACnC,EAAAA,SAAQ,iBAAiBF,eAAaC,QAAM;;;AC1B5C;AAAA,IACE,IAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;;;AC1BA,MAAME,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAnSA,MAmSGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMV,MAAM,CAAC,OAAO,SAAS;AACrB,YAAM,IAAS;AAAA,QACb,IAAI,CAAC,UAAU,WAAW,aAAa,YAAY,UAAU,YAAY,QAAQ;AAAA,QACjF,IAAI,CAAC,aAAU,cAAW,gBAAa,cAAW,cAAW,UAAU,UAAU;AAAA,MACnF;AACA,aAAO,EAAE,IAAI;AAAA,IACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,QAAQ,CAAC,OAAO,SAAS;AACvB,YAAM,IAAS;AACf,aAAO,EAAE,IAAI;AAAA,IACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,MAAM;AACV,YAAM,OAAO,oBAAI,KAAK;AACtB,aAAO,KAAK,YAAY;AAAA,IAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,OAAO,CAAC,OAAY,MAAM,SAAS;AACjC,UAAI,CAAC,MAAO,SAAQ;AACpB,YAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,UAAI,OAAO,IAAI,MAAM,eAAgB,QAAO;AAC5C,YAAM,iBAAiB,IAAI,KAAK,eAAe,KAAK;AAAA,QAClD,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,MACP,CAAC;AACD,aAAO,eAAe,OAAO,IAAI;AAAA,IACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,YAAY,CAAC,UAAgB;AAC3B,UAAI;AACF,cAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,YAAI,MAAM,KAAK,QAAQ,CAAC,EAAG,QAAO;AAClC,eACE,IAAI,KAAK,SAAS,IAAI,CAAC,GAAG,MAAM,EAAE,IAClC,KACA,IAAI,KAAK,QAAQ,CAAC,GAAG,MAAM,EAAE,IAE7B,KAAK,YAAY;AAAA,MAErB,SAAS,IAAI;AACX,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,YAAY,CAAC,UAAe;AAC1B,UAAI,CAAC,MAAO;AACZ,aAAO,MAAM,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,WAAW,KAAK,EAAE;AAAA,IAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,SAAS,CAAC,UAAe;AACvB,YAAM,UAAU,EAAE,SAAS,QAAQ,MAAM,WAAW,OAAO,QAAQ,KAAK,UAAU;AAClF,aAAO,MAAM,mBAAmB,QAAW,OAAO;AAAA,IACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,SAAS,CAAC,OAAY,WAAgB;AACpC,UAAI,CAAC,MAAO,QAAO;AACnB,UAAI,CAAC,OAAQ,UAAS,SAAS,KAAK,OAAO,IAAI;AAE/C,YAAM,QAAQ,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,KAAK,EAAE,GACjD,MAAM,MAAM,UAAU,GAAG,CAAC,GAC1B,OAAO,MAAM,UAAU,MAAM,SAAS,CAAC;AAEzC,aAAO,GAAG,GAAG,IAAI,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI;AAAA,IACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,WAAW,CAAC,UAAe;AACzB,UAAI,CAAC,MAAO,SAAQ;AACpB,YAAM,OAAO,IAAI,KAAK,KAAK,GACzB,eAAe,KAAK,QAAQ;AAC9B,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,cAAc,CAAC,UAAe;AAC5B,UAAI,CAAC,MAAO,SAAQ,oBAAI,KAAK;AAC7B,YAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,UAAI,MAAM,KAAK,QAAQ,CAAC,EAAG,QAAO;AAClC,YAAM,WAAW,KAAK,kBAAkB,IAAI,KAC1C,eAAe,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AAC1E,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,KAAK,MAAM;AACT,YAAM,OAAO,oBAAI,KAAK;AACtB,aAAO,KAAK,YAAY;AAAA,IAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,OAAO,CAAC,OAAY,YAAY,QAAQ;AACtC,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,QAAQ,MAAM,UAAU,GAAG,CAAC,GAChC,MAAM,MAAM,UAAU,GAAG,CAAC,GAC1B,OAAO,MAAM,UAAU,GAAG,CAAC;AAE7B,aAAO,QAAQ,YAAY,MAAM,YAAY;AAAA,IAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,SAAS,CAAC,MAAW,SAAc;AACjC,YAAM,OAAO,IAAI,KAAK,OAAO,IAAI,CAAC;AAClC,WAAK,QAAQ,KAAK,QAAQ,IAAI,IAAI;AAClC,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,kBAAkB,CAAC,eAAoB;AACrC,UAAI;AACF,eAAO,GAAG,WAAW,YAAY,CAAC,GAAG,WAAW,SAAS,EAAE,SAAS,EAAE,SAAS,IAC3E,WAAW,SAAS,IAAI,IACxB,IAAI,WAAW,SAAS,IAAI,CAAC,EAC/B;AAAA,UACE,WAAW,QAAQ,EAAE,SAAS,EAAE,SAAS,IACvC,WAAW,QAAQ,IACnB,IAAI,WAAW,QAAQ,CAAC,EAC5B,IAAI,WAAW,SAAS,CAAC,GAAG,WAAW,WAAW,CAAC,GAAG,WAAW,WAAW,CAAC;AAAA,MACjF,SAAS,KAAK;AAEZ,gBAAQ,MAAM,GAAG;AACjB,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,YAAY,CAAC,OAAY,SAAS,QAAQ;AACxC,UAAI,CAAC,MAAO,QAAO;AAEnB,YAAM,SAAS,SAAS,KAAK,OAAO,IAAI,GACtC,OAAO,IAAI,KAAK,KAAK,GACrB,OAAO,KAAK,YAAY,GACxB,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAEzD,UAAI,SAAS,KAAK,SAAS,IAAI,GAAG,SAAS,GACzC,KAAK,KAAK,QAAQ,EAAE,SAAS;AAE/B,UAAI,GAAG,SAAS,EAAG,MAAK,IAAI,EAAE;AAC9B,UAAI,MAAM,SAAS,EAAG,SAAQ,IAAI,KAAK;AAEvC,aAAO,GAAG,EAAE,IAAI,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,MAAM,IAAI,CAAC;AAAA,IAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,UAAU,MAAM;AACd,YAAM,YAAY,oBAAI,KAAK,GACzB,MAAM,OAAO,UAAU,QAAQ,CAAC,GAChC,QAAQ,OAAO,UAAU,SAAS,IAAI,CAAC,GACvC,OAAO,OAAO,UAAU,YAAY,CAAC,GACrC,QAAQ,OAAO,UAAU,SAAS,CAAC,GACnC,UAAU,OAAO,UAAU,WAAW,CAAC,GACvC,UAAU,OAAO,UAAU,WAAW,CAAC,GACvC,YACG,MAAM,KAAK,IAAI,GAAG,KAAK,OACxB,OACC,QAAQ,KAAK,IAAI,KAAK,KAAK,SAC5B,MACA,OACA,OACC,QAAQ,KAAK,IAAI,KAAK,KAAK,SAC5B,OACC,UAAU,KAAK,IAAI,OAAO,KAAK,WAChC,OACC,UAAU,KAAK,IAAI,OAAO,KAAK;AAEpC,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,OAAO,MAAM,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUtB,YAAY,CAAC,IAAS,OAAY;AAChC,YAAM,KAAK,GAAG,QAAQ,GACpB,KAAK,GAAG,QAAQ;AAClB,aAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,IAAK;AAAA,IAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,aAAa,CAAC,IAAS,OAAY;AACjC,YAAM,KAAK,GAAG,QAAQ,GACpB,KAAK,GAAG,QAAQ;AAClB,aAAO,OAAO,OAAO,SAAS,QAAQ,KAAK,OAAO,KAAK,OAAO,MAAO,EAAE,GAAG,EAAE,CAAC;AAAA,IAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,cAAc,CAAC,IAAS,OAAY;AAClC,YAAM,MAAM,GAAG,YAAY,GACzB,MAAM,GAAG,YAAY,GACrB,MAAM,GAAG,SAAS,GAClB,MAAM,GAAG,SAAS;AAEpB,aAAO,MAAM,KAAK,OAAO,MAAM,KAAK;AAAA,IACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,aAAa,CAAC,IAAS,OAAY,GAAG,YAAY,IAAI,GAAG,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASrE,WAAW,CAAC,SAAc;AACxB,YAAM,IAAI,KAAK,QAAQ,GACrB,IAAI,KAAK,SAAS,IAAI,GACtB,IAAI,KAAK,YAAY;AACvB,aAAO,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;AAAA,IAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,YAAY,CAAC,EAAE,OAAO,oBAAI,KAAK,GAAG,OAAO,IAAI,SAAS,QAAQ,MAAM;AAClE,UAAI,CAAC,QAAQ,QAAQ;AACnB,gBAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUb;AAEH,UAAI;AAEJ,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,0BAAgB,KAAK,aAAa;AAClC;AAAA,QACF,KAAK;AACH,0BAAgB,KAAK,YAAY;AACjC;AAAA,QACF,KAAK;AACH,0BAAgB,KAAK,OAAO;AAC5B;AAAA,QACF,KAAK;AACH,0BAAgB,KAAK,mBAAmB,MAAM;AAC9C;AAAA,QACF,KAAK;AACH,0BAAgB,KAAK,eAAe,MAAM;AAC1C;AAAA,QACF,KAAK;AACH,0BAAgB,KAAK,mBAAmB,MAAM;AAC9C;AAAA,QACF,KAAK;AACH,0BAAgB,KAAK,SAAS;AAC9B;AAAA,QACF,KAAK;AACH,0BAAgB,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE;AAC9C;AAAA,MACJ;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,WAAW,MAAM;AACf,YAAM,QAAQ,CAAC,GACb,YAAY,KAAK,kBAAkB,UAAU;AAC/C,iBAAW,YAAY,WAAW;AAChC,cAAM,KAAK,QAAQ;AAAA,MACrB;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAKA,YAAU,eAAeD,eAAaC,QAAM;;;AC3sB5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAhGA,MAgGGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,QAAQ,CAAC,KAAK,WAAW;AACvB,UAAI;AACF,YAAI,OAAO,aAAa,YAAa;AACrC,cAAM,WAAW,OAAO,OAAO,WAAW,SAAS,cAAc,EAAE,IAAI;AACvE,YAAI,CAAC,YAAY,OAAO,SAAS,qBAAqB,WAAY;AAClE,cAAM,YAAY,CAAC,MAAW;AAC5B,gBAAM,SAAS,EAAE,QAAuB,UAAU,OAAO,QAAQ,YAAY;AAC7E,cAAI,CAAC,CAAC,SAAS,UAAU,UAAU,UAAU,EAAE,SAAS,OAAO,KAAK,CAAC,OAAO,UAAU,SAAS,YAAY,GAAG;AAC5G,qBAAS,iBAAiB,GAAG,EAAE,QAAQ,CAAAC,QAAOA,IAAmB,KAAK,CAAC;AACvE,cAAE,eAAe;AACjB,mBAAO;AAAA,UACT;AACA,mBAAS,iBAAiB,uBAAuB,EAAE,QAAQ,CAAAA,QAAM;AAC/D,YAAAA,IAAG,iBAAiB,aAAa,CAACC,OAAW;AAC3C,cAAAA,GAAE,eAAe;AACjB,qBAAO;AAAA,YACT,CAAC;AAAA,UACH,CAAC;AACD;AAAA,QACF;AACA,iBAAS,iBAAiB,aAAa,SAAS;AAChD,gBAAQ,MAAM,2BAA2B,IAAI,IAAI,gBAAgB,EAAE;AAAA,MACrE,SAAS,GAAG;AACV,gBAAQ,MAAM,4BAA4B,CAAC;AAAA,MAC7C;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,YAAY,CAAC,MAAM,QAAS;AAC1B,YAAM,oBAAoB,MAAM;AAC9B,cAAM,SAAS,SAAS,iBAAiB,kCAAkC;AAC3E,mBAAW,SAAS,QAAQ;AAC1B,cAAI,CAAC,MAAM,aAAa,YAAY,EAAG,OAAM,aAAa,cAAc,OAAO;AAAA,QACjF;AAAA,MACF;AAEA,kBAAY,mBAAmB,GAAG;AAClC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,YAAY,CAAC,KAAK,WAAW;AAC3B,UAAI;AACF,YAAI,OAAO,aAAa,YAAa;AACrC,cAAM,WAAW,OAAO,OAAO,WAAW,SAAS,cAAc,EAAE,IAAI;AACvE,YAAI,YAAY,OAAO,SAAS,qBAAqB,YAAY;AAC/D,mBAAS,iBAAiB,eAAe,CAAC,MAAa,EAAE,eAAe,CAAC;AAAA,QAC3E;AAAA,MACF,SAAS,GAAG;AAEV,gBAAQ,MAAM,gCAAgC,CAAC;AAAA,MACjD;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,CAAC,KAAK,WAAW;AACrB,UAAI;AACF,YAAI,OAAO,aAAa,YAAa;AACrC,cAAM,WAAW,OAAO,OAAO,WAAW,SAAS,cAAc,EAAE,IAAI;AACvE,YAAI,YAAY,OAAO,SAAS,qBAAqB,YAAY;AAC/D,mBAAS,iBAAiB,QAAQ,CAAC,MAAa,EAAE,eAAe,CAAC;AAAA,QACpE;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,MAAM,0BAA0B,CAAC;AAAA,MAC3C;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,OAAO,CAAC,KAAK,WAAW;AACtB,UAAI;AACF,YAAI,OAAO,aAAa,YAAa;AACrC,cAAM,WAAW,OAAO,OAAO,WAAW,SAAS,cAAc,EAAE,IAAI;AACvE,YAAI,YAAY,OAAO,SAAS,qBAAqB,YAAY;AAC/D,mBAAS,iBAAiB,SAAS,CAAC,MAAa,EAAE,eAAe,CAAC;AAAA,QACrE;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,MAAM,2BAA2B,CAAC;AAAA,MAC5C;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,KAAK,CAAC,KAAK,WAAW;AACpB,UAAI;AACF,YAAI,OAAO,aAAa,YAAa;AACrC,cAAM,WAAW,OAAO,OAAO,WAAW,SAAS,cAAc,EAAE,IAAI;AACvE,YAAI,YAAY,OAAO,SAAS,qBAAqB,YAAY;AAC/D,mBAAS,iBAAiB,OAAO,CAAC,MAAa,EAAE,eAAe,CAAC;AAAA,QACnE;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,MAAM,yBAAyB,CAAC;AAAA,MAC1C;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,CAAC,KAAK,WAAW;AACrB,UAAI;AACF,YAAI,OAAO,aAAa,YAAa;AACrC,cAAM,WAAW,OAAO,OAAO,WAAW,SAAS,cAAc,EAAE,IAAI;AACvE,YAAI,YAAY,OAAO,SAAS,qBAAqB,YAAY;AAC/D,mBAAS,iBAAiB,aAAa,CAAC,MAAa,EAAE,eAAe,CAAC;AAAA,QACzE;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,MAAM,0BAA0B,CAAC;AAAA,MAC3C;AAAA,IACF;AAAA,EAEF;AAKA,YAAU,iBAAiBH,eAAaC,QAAM;;;ACnP9C,MAAM,YAAoD,CAAC;AAA3D,MAA8DG,gBAA2B;AAAA,IACvF,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aACE;AAAA,QACF,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AA7CA,MA6CGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMV,KAAK,CAAC,MAAc,QAAQ,CAAC,MAAM,cAAc,IAAI,YAAY,OAAO,IAAI,GAAG,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUrF,QAAQ,CAAC,MAAc,OAAkC;AAEvD,UAAI,UAAU,IAAI,KAAK,UAAU,IAAI,EAAG,SAAS,GAAG;AAClD,iBAAS,SAAS,OAAO,IAAI;AAAA,MAC/B;AAEA,YAAM,OAAO,CAAC,MAAc,KAAK,WAAW,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI;AAC9D,aAAO,iBAAiB,MAAM,IAAI;AAElC,UAAI,CAAC,UAAU,IAAI,EAAG,WAAU,IAAI,IAAI,CAAC;AACzC,gBAAU,IAAI,EAAG,KAAK,IAAI;AAAA,IAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,QAAQ,CAAC,SAAuB;AAC9B,YAAM,YAAY,UAAU,IAAI;AAChC,UAAI,WAAW;AACb,kBAAU,QAAQ,CAAC,MAA0B,OAAO,oBAAoB,MAAM,CAAC,CAAC;AAChF,eAAO,UAAU,IAAI;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAKA,YAAU,eAAeD,eAAaC,QAAM;;;AC3F5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAlBA,MAkBGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAON,UAAU,CAAC,IAAS,QAAQ,GAAG,MAAM,UACnC,iBAAiB,UAAU,CAAC,OAAY,SAAS,QAAQ,mBAAmB,IAAI,OAAO,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAU7F,oBAAoB,CAAC,KAAU,OAAe,QAAiB;AAC7D,UAAI,CAAC,IAAK;AAEV,YAAM,WAAW,OAAO,QAAQ,WAAW,SAAS,cAAc,GAAG,IAAI;AACzE,UAAI,CAAC,SAAU;AACf,YAAM,QAAQ,SAAS,eAAe,GAAG,SAAS,SAAS,gBAAgB,GAAG,aAAa,MACnF,QAAQ,KAAK,IAAI,QAAQ,OAAO,YAAY,SAAS,OAAO,WAAW,IACvE,QAAQ,KAAK,IAAI,QAAQ,OAAO,YAAY,SAAS,OAAO,WAAW;AAC/E,eAAS,MAAM,YAAY,SAAS,UAAU;AAC9C;AAAA,IACF;AAAA,EACF;AAKJ,YAAU,eAAeD,eAAaC,QAAM;;;ACpD5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAtEA,MAsEGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMN,MAAM,CAAC,OAAgB;AACrB,YAAM,IAAS;AACf,aAAO,EAAE,kBAAkB,EAAE;AAAA,IAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,OAAO,CAAC,SAAkB,YAAoB,aAA4B;AACxE,YAAM,SAAS,WAAW,MAAM,GAAG;AACnC,iBAAW,SAAS,OAAQ,SAAQ,iBAAiB,OAAO,UAAU,KAAK;AAC3E;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,CAAC,OAAe;AACpB,YAAM,MAAM,SAAS,cAAc,EAAE;AACrC,UAAI,CAAC,IAAK;AACV,UAAI,iBAAiB,SAAS,OAAO,MAAa;AAChD,YAAI,CAAC,UAAU,UAAW;AAC1B,YAAI;AACF,gBAAM,SAAS,EAAE;AACjB,cAAI,QAAQ;AACV,kBAAM,UAAU,UAAU,UAAU,OAAO,eAAe,EAAE;AAC5D,kBAAM,QAAQ;AAAA,UAChB;AAAA,QACF,SAAS,KAAK;AACZ,kBAAQ,MAAM,wBAAwB,GAAG;AAAA,QAC3C;AAAA,MACF,CAAC;AACD;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,QAAQ,CAAC,SAAiB;AACxB,YAAM,eAAe,mBAAmB,IAAI,IAAI,WAAW,SAAS,cAAc,YAAY;AAC9F,UAAI,CAAC,SAAU;AAEf,YAAM,mBAAmB,CAAC,UAAsB;AAC9C,cAAM,YAAY,SAAS,cAAc,YAAY,GAAkB,SAAS,WAAW,gBAAgB,GAAG,QAAQ,WAAW,eAAe,GAAG,YAAY,KAAK,IAAI,MAAM,OAAO,CAAC,IAAI,SAAS,GAAG,YAAY,KAAK,IAAI,MAAM,OAAO,CAAC,IAAI,QAAQ;AACrP,qBAAa,QAAQ,MAAM,KAAK,UAAU,CAAC,WAAW,SAAS,CAAC,CAAC;AAAA,MACnE;AAEA,eAAS,iBAAiB,aAAa,MAAM;AAC3C,eAAO,iBAAiB,aAAa,gBAAgB;AAAA,MACvD,CAAC;AAED,aAAO,iBAAiB,WAAW,MAAM;AACvC,eAAO,oBAAoB,aAAa,gBAAgB;AAAA,MAC1D,CAAC;AACD;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,MAAM,CAAC,MAAqB;AAC1B,aAAO;AAAA,QACL,KAAK,EAAE;AAAA,QACP,MAAM,EAAE;AAAA,QACR,KAAK,EAAE;AAAA,QACP,OAAO,EAAE;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAKJ,YAAU,eAAeD,eAAaC,QAAM;;;ACrK5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AA/BA,MA+BG,OAAO,OAAO,KAAa,UAAe,CAAC,GAAG,UAAU,GAAG,UAAU,QAA4B;AAC9F,QAAI;AAEF,YAAM,WAAW,MAAM,WAAW,MAAM,KAAK,OAAO;AACpD,UAAI,CAAC,SAAS,MAAM,UAAU,EAAG,OAAM,IAAI,MAAM,SAAS,UAAU;AACpE,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,UAAI,YAAY,EAAG,OAAM;AACzB,cAAQ,KAAK,wCAAwC,OAAO,UAAU,OAAO,gBAAgB;AAC7F,YAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,OAAO,CAAC;AACzD,aAAO,KAAK,KAAK,SAAS,UAAU,GAAG,UAAU,CAAC;AAAA,IACpD;AAAA,EACF;AA3CJ,MA2COC,WAAc,CAAC,KAAa,YAAiB,KAAK,KAAK,OAAO;AACrE,EAAAA,SAAO,MAAM,CAAC,KAAa,YAAiB,KAAK,KAAK,EAAE,GAAG,SAAS,QAAQ,MAAM,CAAC;AACnF,EAAAA,SAAO,OAAO,CAAC,KAAa,MAAW,UAAe,CAAC,MAAM;AAC3D,UAAM,QAAQ,OAAO,SAAS,YAAY,SAAS;AACnD,WAAO,KAAK,KAAK;AAAA,MACf,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,GAAI,QAAQ,EAAE,gBAAgB,mBAAmB,IAAI,CAAC;AAAA,QACtD,GAAI,QAAQ,WAAW,CAAC;AAAA,MAC1B;AAAA,MACA,MAAM,QAAQ,KAAK,UAAU,IAAI,IAAI;AAAA,IACvC,CAAC;AAAA,EACH;AAEA,YAAU,eAAeD,eAAaC,QAAM;;;ACzD5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAjKA,MAiKGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMV,WAAW,CAAC,SAAc;AACxB,YAAM,KAAK,OAAO,SAAS,WAAW,SAAS,cAAc,IAAI,IAAI;AACrE,UAAI,CAAC,GAAI,QAAO,CAAC;AACjB,YACE,OAA4B,CAAC,GAC7B,WAAW;AAAA;AAAA,QAET,UAAU;AAAA;AAAA,QACV,KAAK;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAEF,UAAI,CAAC,SAAS,SAAS,KAAK,GAAG,IAAI,EAAG;AAEtC,YAAM,SAAS,CAAC,QAAa;AAC3B,YAAI,QAAQ,GAAI,OAAM;AACtB,YAAI,QAAQ,OAAQ,OAAM;AAC1B,YAAI,QAAQ,YAAa,OAAM;AAC/B,YAAI,QAAQ,QAAS,OAAM,QAAQ,KAAK;AACxC,YAAI,QAAQ,OAAQ,OAAM,QAAQ,IAAI;AACtC,YAAI,QAAQ,MAAO,OAAM,QAAQ,KAAK;AACtC,YAAI,QAAQ,KAAM,OAAM,QAAQ,IAAI;AACpC,YAAI,QAAQ,KAAM,OAAM;AACxB,YAAI,QAAQ,KAAM,OAAM;AAGxB,cAAM,QAAQ,CAAC,QAAQ,aAAa,SAAS,QAAQ,MAAM,KAAK,GAC9D,UAAU,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC;AAE/C,YAAI,QAAQ,WAAW,KAAK,CAAC,OAAO,MAAM,GAAG,EAAG,OAAM,OAAO,GAAG;AAEhE,eAAO;AAAA,MACT,GAAG,mBAAmB,CAAC,KAAU,QAAa;AAG5C,YAAI,SAAS,IAAI,CAAC;AAElB,YAAI,OAAO,MAAM,EAAE,MAAM,IAAK,UAAS,OAAO,MAAM,GAAG,EAAE;AAEzD,cAAM,SAAc,CAAC;AACrB,YAAI,IAAI,WAAW,GAAG;AACpB,iBAAO,MAAM,IAAI,OAAO,GAAG;AAAA,QAC7B,OAAO;AACL,cAAI,MAAM;AACV,iBAAO,MAAM,IAAI,iBAAiB,KAAK,GAAG;AAAA,QAC5C;AACA,eAAO;AAAA,MACT,GAAG,aAAa,GAAG,eAAe;AAClC,iBAAW,QAAQ,YAAY;AAC7B,cAAM,MAAM,KAAK,OACf,IAAI,KAAK,KAAK,MAAM,GAAG,GACvB,IAAI,iBAAiB,GAAG,GAAG;AAE7B,eAAO,OAAO,MAAM,CAAC;AAAA,MACvB;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,aAAa,CAAC,MAAc,UAAe;AACzC,UAAI,SAAS,UAAU;AACrB,cAAM,cAAc;AACpB,eAAO,YAAY,KAAK,MAAM,SAAS,CAAC;AAAA,MAC1C;AAEA,UAAI,SAAS,SAAS;AACpB,cAAM,UACJ;AACF,eAAO,QAAQ,KAAK,MAAM,SAAS,EAAE,YAAY,CAAC;AAAA,MACpD;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,UAAU,CAAC,UAAe,UAAU,QAAQ,UAAU,SAAY,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAU/E,WAAW,CAAC,OAAY,MAAM,MAAM,CAAC,SAAS,MAAM,SAAS,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAU1F,WAAW,CAAC,OAAY,MAAM,OAAO,MAAM,SAAS,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUjF,gBAAgB,CAAC,OAAY,MAAM,OAAO,MAAM,SAAS,EAAE,SAAS,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASjG,WAAW,CAAC,UAAe,CAAC,OAAO,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAS9C,SAAS,CAAC,UAAe;AACvB,YAAM,UAAU;AAChB,aAAO,QAAQ,KAAK,MAAM,SAAS,EAAE,YAAY,CAAC;AAAA,IACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,SAAS,CAAC,MAAa;AACrB,YAAM,SAAS,EAAE;AACjB,UAAI,EAAE,OAAO,QAAQ,OAAO,OAAQ;AAEpC,UAAI;AAEJ,cAAQ,OAAO,MAAM;AAAA,QACnB,KAAK;AAAA,QACL,KAAK;AACH,kBAAQ;AACR;AAAA,QACF,KAAK;AACH,kBAAQ;AACR;AAAA,QACF,KAAK;AACH,kBAAQ;AACR;AAAA,QACF,KAAK;AACH,kBAAQ;AACR;AAAA,QACF;AACE;AAAA,MACJ;AAEA,UAAI,CAAC,OAAO,MAAM,MAAM,KAAK,GAAG;AAC9B,eAAO,QAAQ,OAAO,MAAM,MAAM,GAAG,EAAE;AACvC,UAAE,eAAe;AAAA,MACnB;AACA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,gBAAgB,CAAC,MAAa;AAC5B,YAAM,SAAS,EAAE,QAA4B,OAAO,OAAO,MAAM,KAAK,GAAG,QAAQ,aAAa,QAAQ,KAAK,SAAS;AACpH,UAAI,MAAO,QAAO,QAAQ,KAAK,QAAQ,OAAO,EAAE;AAChD;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,OAAO,CAAC,MAAwB,IAAY,SAAsB;AAChE,YACE,KAAK,KAAK,CAAC,KAAK,GAChB,KAAK,KAAK,CAAC,KAAK,IAChBC,UAAS,CAAC,MAA+B,OAAO,CAAC,EAAE,QAAQ,YAAY,QAAM,EAAE,KAAK,SAAS,KAAK,QAAQ,KAAK,QAAQ,KAAK,UAAU,KAAK,QAAQ,GAAE,CAAC,KAAK,CAAE;AAE/J,UAAI,IAAI,aAAaA,QAAO,EAAE,CAAC;AAC/B,WAAK;AACL,WAAK;AACL,eAAS,IAAI,GAAG,KAAK,IAAI,KAAK;AAC5B,aAAK,SAAS,CAAC;AAAA,MACjB;AACA,WAAK;AACL,eAAS,IAAI,GAAG,KAAK,IAAI,KAAK;AAC5B,aAAK,0BAA0B,CAAC;AAChC,iBAAS,IAAI,GAAG,KAAK,IAAI,KAAK;AAC5B,eAAK,qBAAqB,CAAC,KAAK,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,kDAAkD,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG,CAAC,YAAYA,QAAO,CAAC,CAAC,OAAOA,QAAO,CAAC,CAAC;AAAA,QACtO;AACA,aAAK;AAAA,MACP;AACA,WAAK;AACL,WAAK;AAEL,UAAI,KAAM,MAAK,YAAY;AAC3B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,UAAU,CAAC,QAAgB;AACzB,UAAI,CAAC,IAAK;AACV,aAAO,IAAI,QAAQ,WAAW,EAAE,EAAE,QAAQ,8BAA8B,EAAE;AAAA,IAC5E;AAAA,EACF;AAKA,YAAU,eAAeF,eAAaC,QAAM;;;AC3Z5C,MAAME,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AA/BA,MA+BGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQN,UAAU,CAAC,OAAe,SAAS,SAAS,WAAW,UACrD,IAAI,KAAK,aAAa,QAAQ,EAAE,OAAO,YAAY,SAAS,CAAC,EAAE,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAU7E,aAAa,CAAC,OAAe,cAAc,SAAiB;AAE1D,YAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,OAAO,EAAE;AAC5C,UAAI;AACJ,UAAI,gBAAgB,MAAM;AACxB,gBAAQ,QAAQ,MAAM,yBAAyB;AAC/C,YAAI,MAAO,QAAO,IAAI,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAAA,MACzD;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAKJ,YAAU,eAAeD,eAAaC,QAAM;;;ACjE5C,MACEC,gBAA2B;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACf,KAAK;AAAA,QACH,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACf,KAAK;AAAA,QACH,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACf,KAAK;AAAA,QACH,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACf,KAAK;AAAA,QACH,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACf,KAAK;AAAA,QACH,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACf,KAAK;AAAA,QACH,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACf,KAAK;AAAA,QACH,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAjGF,MAkGEC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQP,SAAS,CAAC,MAAW,KAAc,QAA6B;AAC9D,UAAI,CAAC,KAAM,QAAO;AAElB,UAAI,OAAO,KAAK;AACd,YAAI,KAAK,SAAS,MAAM,QAAQ,KAAK,KAAK,GAAG;AAC3C,iBAAO,KAAK,MAAM,OAAO,CAAC,SAAc,KAAK,GAAG,MAAM,GAAG,EAAE;AAAA,QAC7D;AACA,eAAO,OAAO,KAAK,IAAI,EAAE;AAAA,MAC3B;AACA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,OAAO,CAAC,cAA2B;AACjC,YAAM,QAAQ,WACZ,WAAW,CAAC,KAAU,UAAgB,UAAU,OAAO,KAAK,OAC5D,SAAS,OAAO,KAAK,MAAM,CAAC,CAAC,GAC7B,MAAM,MAAM;AAAA,QAAI,CAAC,QACf,OAAO,IAAI,CAAC,cAAc,KAAK,UAAU,IAAI,SAAS,GAAG,QAAQ,CAAC,EAAE,KAAK,GAAG;AAAA,MAC9E;AAEF,UAAI,QAAQ,OAAO,KAAK,GAAG,CAAC;AAC5B,aAAO,IAAI,KAAK,MAAM;AAAA,IACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,WAAW,CAAC,SAAiB,aAA2B;AACtD,YACE,OAAO,IAAI,KAAK,CAAC,OAAO,GAAG,EAAE,MAAM,0BAA0B,CAAC,GAC9D,OAAO,SAAS,cAAc,GAAG,GACjC,IAAI,SAAS,KAAK,iBAAiB,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,GACvD,WAAW,GAAG,QAAQ,IAAI,CAAC,QAC3B,UAAU,IAAI,gBAAgB,IAAI;AAEpC,WAAK,aAAa,QAAQ,OAAO;AACjC,WAAK,aAAa,YAAY,QAAQ;AACtC,WAAK,MAAM,aAAa;AAExB,eAAS,KAAK,YAAY,IAAI;AAC9B,WAAK,MAAM;AACX,eAAS,KAAK,YAAY,IAAI;AAC9B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,IAAI,CAAC,QAAyB;AAC5B,UAAI;AACF,aAAK,MAAM,GAAG;AAAA,MAChB,SAAS,KAAK;AACZ,gBAAQ,KAAK,GAAG;AAChB,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,OAAO,CAAC,SAAsB;AAC5B,UAAI;AACF,eAAO,KAAK,MAAM,IAAI;AAAA,MACxB,SAAS,KAAK;AACZ,gBAAQ,KAAK,GAAG;AAChB,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,UAAU,CAAC,QAAwB;AACjC,UAAI,CAAC,IAAK,QAAO;AAEjB,YACE,QAAQ,IAAI,KAAK,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE,GACvD,QAAQ,MAAM,MAAM,8BAA8B,GAClD,iBAAiB,MAAM,IAAI,CAAC,SAAS;AACnC,cACE,CAAC,QAAQ,GAAG,UAAU,IAAI,KAAK,MAAM,GAAG,GACxC,MAAM,SAAS,KAAK,kBAAkB,QAAQ,KAAK,KAAK,EAAE;AAE5D,YAAI,CAAC,OAAQ,QAAO;AAGpB,YAAI,QAAQ,WAAW,KAAK,GAAG;AAC/B,YAAI,CAAC,OAAO;AACV,kBAAQ;AAAA,QACV,OAAO;AACL,kBAAQ,MAAM,KAAK;AACnB,cAAI,UAAU,OAAQ,SAAQ;AAAA,mBACrB,UAAU,UAAU,UAAU,QAAS,SAAQ,IAAI,KAAK;AAAA,mBACxD,QAAQ,KAAK,KAAK,EAAG,SAAQ,IAAI,KAAK;AAAA,cAC1C,SAAQ,SAAS,KAAK,kBAAkB,KAAK;AAAA,QACpD;AAEA,eAAO,GAAG,GAAG,IAAI,KAAK;AAAA,MACxB,CAAC,EAAE,OAAO,OAAK,MAAM,EAAE;AAEzB,aAAO,MAAM,eAAe,KAAK,GAAG,IAAI;AAAA,IAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,mBAAmB,CAAC,QAAwB;AAC1C,UAAI,CAAC,IAAK,QAAO;AACjB,aAAO,IAAI,IACR,QAAQ,YAAY,IAAI,EACxB,QAAQ,OAAO,EAAE,EACjB,QAAQ,OAAO,GAAG,EAClB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK,EACpB,QAAQ,MAAM,KAAK,EACnB,QAAQ,OAAO,GAAG,EAClB,KAAK,CAAC;AAAA,IACX;AAAA,EACF;AAIF,YAAU,eAAeD,eAAaC,QAAM;;;ACjQ5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,QACF,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aACE;AAAA,QACF,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAxEA,MAwEGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMV,KAAK,CAAC,SAAc,YAAY,OAAO;AACrC,UAAI,CAAC,QAAS;AACd,UAAI,aAAa,CAAE,OAAe,SAAS,EAAG,CAAC,OAAe,SAAS,IAAI,CAAC;AAG5E,UAAI,OAAO,YAAY,YAAY,CAAC,QAAQ,MAAM;AAChD,mBAAW,OAAO,SAAS;AACzB,cAAI,UAAW,CAAC,OAAe,SAAS,EAAE,KAAK,GAAG;AAAA,QAGpD;AACA;AAAA,MACF;AAGA,UAAI,OAAO,YAAY,cAAc,QAAQ,MAAM;AACjD,mBAAW,OAAO,QAAQ,KAAK,GAAG;AAChC,cAAI,UAAW,CAAC,OAAe,SAAS,EAAE,KAAK,GAAG;AAClD,kBAAQ,GAAG;AAAA,QACb;AAAA,MACF;AACA;AAAA,IACF;AAAA;AAAA,IAIA,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAOZ,eAAe,OAAO,iBAAyB,aAAoC;AACjF,UAAI;AACF,cAAM,UAAU,MAAM,SAAS,KAAK,KAAK,QAAQ,GAAG,UAAU,SAAS,cAAc,eAAe;AACpG,YAAI,SAAS;AACX,kBAAQ,YAAY,SAAS,SAAS,KAAK,OAAO;AAAA,QACpD,OAAO;AACL,kBAAQ,MAAM,sBAAsB,eAAe,EAAE;AAAA,QACvD;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,kCAAkC,KAAK;AAAA,MACvD;AACA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,QAAQ,CAAC,SAAmB,kBAAkB,WAAW;AACvD,YAAM,UAAU,SAAS,cAAc,eAAe;AACtD,UAAI,CAAC,SAAS;AACZ,gBAAQ,MAAM,sBAAsB,eAAe,EAAE;AACrD;AAAA,MACF;AAEA,iBAAW,UAAU,SAAS;AAC5B,cAAM,YAAY,SAAS,cAAc,QAAQ;AACjD,kBAAU,MAAM;AAChB,kBAAU,QAAQ;AAClB,kBAAU,QAAQ;AAClB,gBAAQ,YAAY,SAAS;AAAA,MAC/B;AACA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,QAAQ,CAAC,SAAc,YAAY,OAAO;AACxC,YAAMC,QAAiC,CAAC;AAExC,UAAI,CAAC,QAAS;AACd,UAAI,UAAW,CAAAA,MAAK,SAAS,IAAI,CAAC;AAGlC,UAAI,OAAO,YAAY,YAAY,CAAC,QAAQ,MAAM;AAChD,mBAAW,OAAO,SAAS;AACzB,cAAI,aAAaA,MAAK,SAAS,EAAG,CAAAA,MAAK,SAAS,EAAE,KAAK,GAAG;AAAA,QAC5D;AAAA,MACF,WAES,OAAO,YAAY,cAAc,QAAQ,MAAM;AACtD,mBAAW,OAAO,QAAQ,KAAK,GAAG;AAChC,cAAI,aAAaA,MAAK,SAAS,EAAG,CAAAA,MAAK,SAAS,EAAE,KAAK,GAAG;AAC1D,kBAAQ,GAAG;AAAA,QACb;AAAA,MACF;AAEA,UAAI,CAAC,aAAa,CAACA,MAAK,SAAS,EAAG;AAEpC,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,UACE,OAAO,SAAS,MAAM,WAAWA,MAAK,SAAS,CAAC;AAAA,UAChD,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,cAAc;AAAA,QAChB;AAAA,MACF;AACA;AAAA,IACF;AAAA,EAEF;AAKA,YAAU,iBAAiBF,eAAaC,QAAM;;;ACjM9C,MAAME,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAzDA,MAyDG,QAAsD,EAAE,KAAK,CAAC,EAAE;AAzDnE,MAyDsEC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAK7E,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQlB,KAAK,CAAC,QAAgB;AACpB,YAAM,IAAI,KAAK,EAAE,MAAM,OAAO,SAAS,IAAI,CAAC;AAC5C,UAAI,MAAM,IAAI,SAAS,IAAM,OAAM,IAAI,MAAM;AAAA,IAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,OAAO,CAAC,QAAgB;AACtB,YAAM,IAAI,KAAK,EAAE,MAAM,SAAS,SAAS,IAAI,CAAC;AAC9C,UAAI,MAAM,IAAI,SAAS,IAAM,OAAM,IAAI,MAAM;AAAA,IAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,OAAO,CAAC,QAAgB;AACtB,YAAM,IAAI,KAAK,EAAE,MAAM,SAAS,SAAS,IAAI,CAAC;AAC9C,UAAI,MAAM,IAAI,SAAS,IAAM,OAAM,IAAI,MAAM;AAAA,IAC/C;AAAA,EAEF;AAKA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,EACF;AAIA,YAAU,eAAeD,eAAaC,QAAM;;;AClH5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aACE;AAAA,QACF,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAvEA,MAuEGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKN,KAAK,MAAc,KAAK,MAAM,MAAS,KAAK,OAAO,IAAI,SAAS,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAM1E,KAAK,MAAc,KAAK,MAAM,SAAS,KAAK,MAAM,IAAI,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAO1D,OAAO,CAAC,MAAuB,OAAO,CAAC,IAAI,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASjD,SAAS,CAAC,GAAW,QAAwB;AAC3C,UAAI,QAAQ,EAAG,OAAM,IAAI,MAAM,sBAAsB;AACrD,aAAQ,OAAO,CAAC,IAAI,OAAO,GAAG,IAAK;AAAA,IACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,SAAS,CAAC,MAAuB;AAC/B,UAAI,OAAO,CAAC,KAAK,EAAG,QAAO;AAC3B,eAAS,IAAI,GAAG,KAAK,KAAK,KAAK,OAAO,CAAC,CAAC,GAAG,KAAK;AAC9C,YAAI,OAAO,CAAC,IAAI,MAAM,EAAG,QAAO;AAAA,MAClC;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAKJ,YAAU,eAAeD,eAAaC,QAAM;;;ACxH5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AA/BA,MA+BGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,MAAM,CAAC,QAAgB;AACrB,UAAI,CAAC,IAAK;AACV,YAAM,IAAS,QAAQ,IAAI,IAAI,MAAM,GAAG;AACxC,UAAI,EAAE,SAAS,EAAG;AAClB,YAAM,aAAa,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC;AACvC,UAAI,CAAC,cAAc,CAAC,SAAU;AAE9B,YAAM,SAAS,EAAE,UAAU;AAC3B,UAAI,CAAC,OAAQ;AACb,aAAO,eAAe,QAAQ,UAAU;AAAA,QACtC,UAAU;AAAA,QACV,cAAc;AAAA,MAChB,CAAC;AACD;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,QAAQ,CAAC,QAAgB;AACvB,UAAI,CAAC,IAAK;AACV,YAAM,IAAS,QAAQ,IAAI,IAAI,MAAM,GAAG;AACxC,UAAI,EAAE,SAAS,EAAG;AAClB,YAAM,aAAa,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC;AACvC,UAAI,CAAC,cAAc,CAAC,SAAU;AAE9B,YAAM,SAAS,EAAE,UAAU;AAC3B,UAAI,CAAC,OAAQ;AACb,UAAI;AACF,eAAO,eAAe,QAAQ,UAAU;AAAA,UACtC,UAAU;AAAA,UACV,cAAc;AAAA,QAChB,CAAC;AAAA,MACH,SAAS,IAAI;AAAA,MAEb;AACA;AAAA,IACF;AAAA,EACF;AAKA,YAAU,eAAeD,eAAaC,QAAM;;;ACnF5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AA/BA,MA+BGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,MAAM,OAAO,QAA+B;AAC1C,YAAM,gBAAgB,KAAM,OAAO,SAAS;AAE5C,UAAI,OAAO,IAAI,WAAW,GAAG,IAAK,IAAI,MAAM,GAAG,EAAE,CAAC,KAAK,SAAU;AACjE,UAAI,CAAC,QAAQ,SAAS,GAAI,QAAO;AAGjC,UAAI,CAAC,SAAS,cAAc,SAAS,GAAG;AACtC,cAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,eAAO,YAAY;AACnB,eAAO,YAAY;AACnB,eAAO,MAAM,UAAU;AACvB,eAAO,MAAM,aAAa,WAAW,aAAa;AAClD,aAAK,YAAY,MAAM;AACvB,mBAAW,MAAM,OAAO,MAAM,UAAU,KAAK,EAAE;AAAA,MACjD;AAEA,UAAI;AACF,cAAM,WAAW,MAAM,MAAM,GAAG,IAAI,GAAG;AACvC,YAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,gBAAgB;AAElD,cAAM,OAAO,MAAM,SAAS,KAAK,GAAG,YAAY,KAAK,MAAM,+BAA+B,GAAG,UAAU,YAAY,UAAU,CAAC,IAAI;AAElI,cAAM,eAAe,CAAC,SAAyB;AAC7C,gBAAM,OAAO,SAAS,cAAc,KAAK;AACzC,eAAK,cAAc;AACnB,iBAAO,KAAK;AAAA,QACd;AACA,cAAM,cAAc,UAAU,UAAU,OACpC,SAAS,SAAS,KAAK,WAAW,EAAE,IACpC,aAAa,WAAW,EAAE;AAC9B,aAAK,YAAY;AACjB,eAAO,SAAS,EAAE,KAAK,GAAG,UAAU,SAAS,CAAC;AAG9C,iBAAS,QAAQ,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;AAG5D,cAAM,OAAO,SAAS,KAAK,KAAK;AAChC,YAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,eAAK,YAAY,KAAK,UAAU,QAAQ,aAAa,EAAE,EAAE,KAAK;AAC9D,eAAK,UAAU,IAAI,QAAQ,KAAK,KAAK,SAAS,CAAC,CAAC,EAAE;AAAA,QACpD;AAGA,YAAK,WAAW,SAAS,WAAmB,cAAc;AACxD,mBAAS,WAAW,KAAK;AAAA,QAC3B;AAAA,MACF,SAAS,KAAK;AACZ,gBAAQ,MAAM,qBAAqB,GAAG;AAEtC,cAAM,gBAAgB,OAAO,SAAS;AACtC,YAAI,IAAI,WAAW,GAAG,KAAK,CAAC,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,MAAM,YAAY,GAAG;AAC5E,gBAAM,YAAY,IAAI,IAAI,KAAK,aAAa,EAAE;AAE9C,cAAI,UAAU,WAAW,aAAa,GAAG;AACvC,mBAAO,SAAS,OAAO;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,OAAO,CAAC,aAA2B;AACjC,YAAM,UAAU,SAAS,iBAAiB,QAAQ;AAElD,cAAQ,QAAQ,YAAU;AACxB,cAAM,OAAO,OAAO,aAAa,MAAM;AACvC,YAAI,CAAC,QAAQ,CAAC,KAAK,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,EAAG;AAG1D,cAAM,YAAY,OAAO,UAAU,IAAI;AACvC,eAAO,YAAY,aAAa,WAAW,MAAM;AAEjD,kBAAU,iBAAiB,WAAW,CAAC,MAAM;AAC3C,gBAAM,YAAY,UAAU,aAAa,WAAW,KAAK;AACzD,kBAAQ,UAAU,EAAE,MAAM,UAAU,GAAG,IAAI,SAAS;AACpD,mBAAS,WAAW,KAAK,SAAS;AAClC,oBAAU,gBAAgB,MAAM;AAChC,YAAE,gBAAgB;AAAA,QACpB,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,MAAY;AAChB,UAAK,WAAW,SAAS,WAAmB,cAAc;AAExD,QAAC,SAAS,WAAmB,MAAM,GAAG;AACtC;AAAA,MACF;AACA,MAAC,WAAW,SAAS,WAAmB,eAAe;AAGvD,aAAO,aAAa,MAAM,SAAS,WAAW,KAAK,OAAO,SAAS,QAAQ;AAG3E,MAAC,SAAS,WAAmB,MAAM,GAAG;AAGtC,UAAI,CAAE,WAAmB,sBAAsB;AAC7C,eAAO,iBAAiB,cAAc,MAAM;AAC1C,gBAAM,OAAO,OAAO,SAAS,KAAK,UAAU,CAAC;AAC7C,cAAI,MAAM;AACR,kBAAM,SAAS,SAAS,eAAe,IAAI;AAC3C,oBAAQ,eAAe,EAAE,UAAU,SAAS,CAAC;AAAA,UAC/C;AAAA,QACF,CAAC;AACD,QAAC,WAAmB,uBAAuB;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEA,YAAU,eAAeD,eAAaC,QAAM;;;ACzJ5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aACE;AAAA,QACF,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AA9GA,MA8GGC,WAAS;AAAA;AAAA;AAAA;AAAA,IAIN,oBAAoB,CAAC,SAA8B;AACjD,YAAM,SAAS,EAAE,GAAG,KAAK;AACzB,iBAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACnC,YAAI,OAAO,GAAG,MAAM,MAAM;AACxB,iBAAO,GAAG,IAAI;AAAA,QAChB;AAAA,MACF;AACA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,WAAW,CAAC,UAAe;AACzB,UAAI,OAAO,UAAU,WAAY,QAAO,MAAM,SAAS;AAEvD,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,kBAAuB,CAAC;AAC9B,mBAAW,CAAC,WAAW,WAAW,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC5D,0BAAgB,SAAS,IAAI,SAAS,IAAI,UAAU,WAAW;AAAA,QACjE;AACA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,aAAa,CAAC,aAAuB;AACnC,UAAI,OAAO,aAAa,UAAU;AAChC,cAAM,oBAAyC,CAAC;AAChD,mBAAW,CAAC,WAAW,WAAW,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAC/D,4BAAkB,SAAS,IAAI,SAAS,IAAI,YAAY,WAAW;AAAA,QACrE;AACA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,CAAC,MAAgD;AACrD,aAAO,OAAO,KAAK,CAAC,EACjB,KAAK,EACL,OAAO,CAAC,GAAwB,OAAgB,EAAE,CAAC,IAAI,EAAE,CAAC,GAAI,IAAI,CAAC,CAAC;AAAA,IACzE;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,CAAC,QAAqC;AAC3C,YAAM,UAAU,CAACC,MAA0B,SAAS,OAAe;AACjE,YAAI,MAAM;AACV,mBAAW,OAAOA,MAAK;AACrB,cAAI,OAAO,OAAOA,MAAK,GAAG,GAAG;AAC3B,kBAAM,QAAQA,KAAI,GAAG;AACrB,gBAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,qBAAO,GAAG,MAAM,IAAI,GAAG;AAAA,EAAM,QAAQ,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,KAAK,GAAG;AAAA;AAAA,YAC7E,OAAO;AACL,qBAAO,GAAG,MAAM,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAAA;AAAA,YAC1C;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AACA,aAAO,QAAQ,GAAG;AAAA,IACpB;AAAA;AAAA;AAAA;AAAA,IAKA,aAAa,CAAC,KAA0B,KAAa,aAAuC;AAC1F,UAAI,OAAO,OAAO,KAAK,GAAG,EAAG,KAAI,GAAG,IAAI;AACxC,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,CAAC,QAAkB;AACxB,UAAI;AACF,eAAO,KAAK,MAAM,GAAG;AAAA,MACvB,SAAS,KAAK;AACZ,gBAAQ,MAAM,GAAG;AACjB,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,UAAU,CAAC,QAAsB,OAAO,QAAQ,YAAY,QAAQ;AAAA;AAAA;AAAA;AAAA,IAKpE,MAAM,CACJ,MACA,SAC6C;AAC7C,YAAM,SAAmD,CAAC;AAC1D,iBAAW,OAAO,MAAM;AACtB,YAAI,OAAO,OAAO,MAAM,GAAG,KAAK,KAAK,GAAG,MAAM,KAAK,GAAG,GAAG;AACvD,iBAAO,GAAG,IAAI,EAAE,MAAM,KAAK,GAAG,GAAG,MAAM,KAAK,GAAG,EAAE;AAAA,QACnD;AAAA,MACF;AACA,iBAAW,OAAO,MAAM;AACtB,YAAI,OAAO,OAAO,MAAM,GAAG,KAAK,KAAK,GAAG,MAAM,KAAK,GAAG,GAAG;AACvD,iBAAO,GAAG,IAAI,EAAE,MAAM,KAAK,GAAG,GAAG,MAAM,KAAK,GAAG,EAAE;AAAA,QACnD;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,CAAC,MAAc,QAAkB,YAAY,QACjD,OAAO,OAAO,IAAI,EAAE,KAAK,SAAS;AAAA;AAAA;AAAA;AAAA,IAKpC,UAAU,CAAC,KAAU,YAAmF;AACtG,YAAM,WAAW,QAAQ,QAAQ,GAAG;AACpC,eAAS;AAAA,QACP,UAAQ;AACN,gBAAM,aAAa,OAAO,yBAAyB,KAAK,IAAI;AAC5D,cAAI,YAAY;AACd,uBAAW,aAAa,SAAS,cAAc;AAC/C,uBAAW,eAAe,SAAS,gBAAgB;AACnD,uBAAW,WAAW,SAAS,YAAY;AAC3C,mBAAO,eAAe,KAAK,MAAM,UAAU;AAAA,UAC7C;AACA,cAAI,OAAO,IAAI,IAAI,MAAM,YAAY,IAAI,IAAI,MAAM,KAAM,UAAS,IAAI,SAAS,IAAI,IAAI,GAAG,OAAO;AAAA,QACnG;AAAA,MACF;AACA;AAAA,IACF;AAAA,EACF;AAKJ,YAAU,eAAeF,eAAaC,QAAM;;;ACtQ5C,MAAME,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AA5CA,MA4CGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKN,MAAM,MAAgB;AACpB,YACE,SAAS,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK,IACrC,QAAQ,SAAS,UAAU,EAAE,EAC7B,QAAQ,SAAS,MAAM,EAAE,EACzB,QAAQ,SAAS,MAAM,EAAE,EACzB,MAAM,GAAG;AACd,aAAO,MAAM,OAAO,CAAC,SAAS,IAAI;AAAA,IACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,MAAgB;AACpB,YAAM,QAAQ,SAAS,KAAK,QAAQ,KAAK,EAAE,EAAE,MAAM,GAAG;AACtD,aAAO,MAAM,SAAS,MAAM,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO;AAAA,IAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,OAAO,MAA8C;AACnD,YAAM,SAAS,SAAS,OAAO,UAAU,CAAC;AAC1C,aAAO,KAAK,MAAM,KAAK,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,MAAM,KAAK,CAAC,IAAI;AAAA,IAC7G;AAAA,EACF;AAKJ,YAAU,eAAeD,eAAaC,QAAM;;;ACtF5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAlBA,MAkBGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMV,OAAO,CAAC,MAAoB,KAAK,SAAS,aAAa,WAAW,OAAO,UAAU,SAAS,KAAK,CAAC,MAAM,sBAAuB,OAAO,MAAM,YAAY,OAAO,EAAE,SAAS;AAAA,EAC5K;AAKA,YAAU,eAAeD,eAAaC,QAAM;;;AC9B5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAlBA,MAkBGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMN,MAAM,CAAC,MAAsB;AAC3B,UAAI,OAAO,MAAM,SAAU,QAAO;AAClC,aAAO,EACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,OAAO,EACrB,QAAQ,OAAO,QAAQ;AAAA,IAC5B;AAAA,EACF;AAKJ,YAAU,eAAeD,eAAaC,QAAM;;;AC5B5C,MAAM,oBAAoB;AA6B1B,MAAM,wBAAwB,CAAC,OAAe,QAAgB,MAAc,QAAwB;AAClG,WAAO,GAAG,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI,GAAG;AAAA,EAC1C;AAFA,MAEG,cAAc,MAAqB;AAChC,UAAM,WAA0B,CAAC;AAGjC,aAAS,KAAK;AAAA,MACZ,IAAI;AAAA,MACJ,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,MAAM;AAAA,MACN,KAAK;AAAA,MACL,WAAW;AAAA,IACb,CAAC;AAOD,QAAI,OAAO,eAAe,UAAa,OAAO,cAAc,QAAW;AAErE,UAAI,OAAO,aAAa,KAAK,OAAO,YAAY,GAAG;AACjD,iBAAS,KAAK;AAAA,UACZ,IAAI,aAAa,KAAK,IAAI,CAAC;AAAA,UAC3B,OAAO,OAAO;AAAA,UACd,QAAQ,OAAO;AAAA,UACf,MAAM,OAAO;AAAA,UACb,KAAK,OAAO;AAAA,UACZ,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAnCJ,MAmCO,kBAAkB,CAAC,MAAc,QAA6B;AAC/D,UAAM,WAAW,YAAY;AAG7B,eAAW,WAAW,UAAU;AAC9B,UAAI,QAAQ,QAAQ,QAAQ,OAAO,QAAQ,OAAO,QAAQ,SACxD,OAAO,QAAQ,OAAO,MAAM,QAAQ,MAAM,QAAQ,QAAQ;AAC1D,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,QAAQ;AACpB,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO,OAAO;AAAA,QACd,QAAQ,OAAO;AAAA,QACf,MAAM;AAAA,QACN,KAAK;AAAA,QACL,WAAW;AAAA,MACb;AAAA,IACF;AAGA,QAAI,UAAuB,SAAS,CAAC,GAAI,cAAc;AACvD,eAAW,WAAW,UAAU;AAC9B,YAAM,UAAU,QAAQ,OAAO,QAAQ,QAAQ,GAAG,UAAU,QAAQ,MAAM,QAAQ,SAAS,GAAG,WAAW,KAAK,KAAK,KAAK,IAAI,UAAU,MAAM,CAAC,IAAI,KAAK,IAAI,UAAU,KAAK,CAAC,CAAC;AAC3K,UAAI,WAAW,aAAa;AAC1B,sBAAc;AACd,kBAAU;AAAA,MACZ;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AApEJ,MAoEO,sBAAsB,CAAC,MAAc,KAAa,YAAyD;AAC5G,WAAO;AAAA,MACL,MAAM,OAAO,QAAQ;AAAA,MACrB,MAAM,MAAM,QAAQ;AAAA,IACtB;AAAA,EACF;AAzEJ,MAyEO,sBAAsB,CAAC,MAAc,MAAc,YAAwD;AAC5G,WAAO;AAAA,MACL,MAAM,QAAQ,OAAO;AAAA,MACrB,KAAK,QAAQ,MAAM;AAAA,IACrB;AAAA,EACF;AA9EJ,MA8EO,OAAO,CAAC,IAAY,QAAuB;AAC5C,QAAI,OAAO,WAAW,YAAa;AAEnC,UAAM,QAAQ,OAAO,QAAQ,OAAO,MAAM,WAAW,MAAM,cAAc,GAAG,MAAM,MAAM,WAAW,MAAM,aAAa,GAAG,QAAQ,MAAM,cAAc,KAAK,SAAS,MAAM,eAAe,KAAK,WAAW,YAAY,GAAG,iBAAiB,gBAAgB,MAAM,GAAG,GAAG,EAAE,MAAM,KAAK,IAAI,oBAAoB,MAAM,KAAK,cAAc,GAAG,cAAc,sBAAsB,eAAe,OAAO,eAAe,QAAQ,eAAe,MAAM,eAAe,GAAG,GAAG,OAAmB,cAAc;AACje,SAAK,WAAW;AAChB,SAAK,OAAO,EAAE,IAAI;AAAA,MAChB;AAAA,MACA,WAAW,eAAe;AAAA,MAC1B,MAAM;AAAA,MACN,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA,oBAAoB;AAAA,IACtB;AAEA,iBAAa,QAAQ,mBAAmB,KAAK,UAAU,IAAI,CAAC;AAAA,EAC9D;AA9FJ,MA8FO,UAAU,CAAC,OAAoF;AAChG,QAAI,OAAO,WAAW,YAAa,QAAO;AAE1C,UAAM,OAAO,cAAc,GAAG,aAAa,KAAK,OAAO,EAAE;AACzD,QAAI,CAAC,WAAY,QAAO;AAGxB,UAAM,kBAAkB,YAAY,GAAG,gBAAgB,gBAAgB;AAAA,MAAK,OACtE,sBAAsB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW;AAAA,IACzE;AACJ,QAAI;AAEJ,QAAI,eAAe;AAEjB,sBAAgB;AAAA,IAClB,OAAO;AAEL,cAAQ,KAAK,gDAAgD,EAAE,gCAAgC;AAC/F,sBAAgB;AAAA,QACd,WAAW,QAAQ,gBAAgB,CAAC,GAAG,QAAQ;AAAA,QAC/C,WAAW,OAAO,gBAAgB,CAAC,GAAG,OAAO;AAAA,MAC/C;AAAA,IACF;AAEA,UAAM,EAAE,MAAM,IAAI,IAAI,oBAAoB,WAAW,MAAM,WAAW,KAAK,aAAa;AAExF,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,OAAO,WAAW;AAAA,MAClB,QAAQ,WAAW;AAAA,IACrB;AAAA,EACF;AA9HJ,MA8HO,SAAS,CAAC,OAAqB;AAChC,UAAM,OAAO,cAAc;AAC3B,WAAO,KAAK,OAAO,EAAE;AACrB,iBAAa,QAAQ,mBAAmB,KAAK,UAAU,IAAI,CAAC;AAAA,EAC9D;AAlIJ,MAkIO,OAAO,MAAkC;AAC1C,UAAM,OAAO,cAAc;AAC3B,WAAO,KAAK;AAAA,EACd;AArIJ,MAqIO,oBAAoB,MAAmB;AACxC,WAAO,gBAAgB,OAAO,WAAW,GAAG,OAAO,WAAW,CAAC;AAAA,EACjE;AAvIJ,MAuIO,QAAQ,MAAY;AACrB,iBAAa,WAAW,iBAAiB;AAAA,EAC3C;AAzIJ,MAyIO,gBAAgB,MAAkB;AACnC,QAAI;AACF,YAAM,SAAS,aAAa,QAAQ,iBAAiB;AACrD,UAAI,QAAQ;AACV,eAAO,KAAK,MAAM,MAAM;AAAA,MAC1B;AAAA,IACF,SAAS,GAAG;AACV,cAAQ,KAAK,6CAA6C,CAAC;AAAA,IAC7D;AACA,WAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,EACpC;AACG,MAAM,eAAe;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;;;AC9KA,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY;AAAA,UACV,EAAE,MAAM,QAAQ,SAAS,SAAS,SAAS,iDAAiD,QAAQ,0BAA0B,cAAc,YAAY,SAAS,YAAY,MAAM,YAAY,QAAQ,MAAM,aAAa,gDAAgD,KAAK,UAAU,YAAY,CAAC,EAAE;AAAA,UACxS,EAAE,MAAM,WAAW,SAAS,SAAS,SAAS,4CAA4C,QAAQ,0BAA0B,cAAc,YAAY,SAAS,YAAY,MAAM,YAAY,QAAQ,MAAM,aAAa,4DAA4D,KAAK,UAAU,YAAY,CAAC,EAAE;AAAA,UAClT,EAAE,MAAM,UAAU,SAAS,SAAS,SAAS,2CAA2C,QAAQ,0BAA0B,cAAc,YAAY,SAAS,YAAY,MAAM,YAAY,QAAQ,MAAM,aAAa,+BAA+B,KAAK,UAAU,YAAY,CAAC,EAAE;AAAA,UACnR,EAAE,MAAM,QAAQ,SAAS,SAAS,SAAS,gCAAgC,QAAQ,0BAA0B,cAAc,YAAY,SAAS,YAAY,MAAM,YAAY,QAAQ,MAAM,aAAa,kCAAkC,KAAK,UAAU,YAAY,CAAC,EAAE;AAAA,UACzQ,EAAE,MAAM,qBAAqB,SAAS,SAAS,SAAS,6CAA6C,QAAQ,0BAA0B,cAAc,YAAY,SAAS,YAAY,MAAM,YAAY,QAAQ,MAAM,aAAa,4BAA4B,KAAK,UAAU,YAAY,CAAC,EAAE;AAAA,UAC7R,EAAE,MAAM,SAAS,SAAS,SAAS,SAAS,iCAAiC,QAAQ,0BAA0B,cAAc,YAAY,SAAS,YAAY,MAAM,YAAY,QAAQ,MAAM,aAAa,mCAAmC,KAAK,UAAU,YAAY,CAAC,EAAE;AAAA,QAC9Q;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAnDA,MAmDGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,YAAY,CAAC,OAAY;AACvB,YAAM,OAAO,SAAS,cAAc,EAAE;AACtC,UAAI,KAAK,mBAAmB;AAC1B,aAAK,kBAAkB;AAAA,MACzB,WAAW,KAAK,sBAAsB;AAEpC,aAAK,qBAAqB;AAAA,MAC5B,WAAW,KAAK,yBAAyB;AAEvC,aAAK,wBAAwB;AAAA,MAC/B,WAAW,KAAK,qBAAqB;AAEnC,aAAK,oBAAoB;AAAA,MAC3B;AACA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,QAAQ,CAAC,OAAqB;AAC5B,YACE,MAAW,UACX,OAAO,IAAI,cAAc,EAAE;AAE7B,UAAI,MAAM;AACR,YAAI,IAAI,qBAAqB,IAAI,wBAAwB,IAAI,yBAAyB;AACpF,cAAI,IAAI,eAAgB,KAAI,eAAe;AAAA,mBAClC,IAAI,oBAAqB,KAAI,oBAAoB;AAAA,mBACjD,IAAI,qBAAsB,KAAI,qBAAqB;AAAA,mBACnD,IAAI,iBAAkB,KAAI,iBAAiB;AAAA,QACtD,WAAW,KAAK,kBAAmB,MAAK,kBAAkB;AAAA,iBACjD,KAAK,qBAAsB,MAAK,qBAAqB;AAAA,iBACrD,KAAK,wBAAyB,MAAK,wBAAwB;AAAA,iBAC3D,KAAK,oBAAqB,MAAK,oBAAoB;AAAA,MAC9D,OAAO;AACL,gBAAQ,MAAM,sBAAsB,EAAE,EAAE;AAAA,MAC1C;AACA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,MAAM;AACV,aAAO;AAAA,QACL,OAAO,OAAO;AAAA,QACd,QAAQ,OAAO;AAAA,QACf,YAAY,OAAO;AAAA,QACnB,aAAa,OAAO;AAAA,QACpB,YAAY,OAAO;AAAA,QACnB,YAAY,OAAO;AAAA,MACrB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAML,MAAM,CAAC,IAAY,QAAiB;AAClC,qBAAa,KAAK,IAAI,GAAG;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,SAAS,CAAC,OAAe;AACvB,eAAO,aAAa,QAAQ,EAAE;AAAA,MAChC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,QAAQ,CAAC,OAAe;AACtB,qBAAa,OAAO,EAAE;AAAA,MACxB;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,MAAM;AACV,eAAO,aAAa,KAAK;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA,MAKA,mBAAmB,MAAM;AACvB,eAAO,aAAa,kBAAkB;AAAA,MACxC;AAAA;AAAA;AAAA;AAAA,MAKA,OAAO,MAAM;AACX,qBAAa,MAAM;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAKA,YAAU,eAAeD,eAAaC,QAAM;;;ACpM5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAnFA,MAmFGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMN,QAAQ,CAAC,IAAY,YAAiB;AAEpC,cAAQ,UAAU,SAAS,WAAW;AACtC,cAAQ,gBAAgB,SAAS,iBAAiB;AAClD,cAAQ,UAAU,SAAS,WAAW;AACtC,cAAQ,UAAU,SAAS,WAAW;AACtC,cAAQ,OAAO,SAAS,QAAQ;AAChC,cAAQ,WAAW,SAAS,YAAY;AACxC,cAAQ,QAAQ,SAAS,SAAS;AAClC,cAAQ,SAAS,SAAS,UAAU;AACpC,cAAQ,UAAU,SAAS,WAAW;AACtC,cAAQ,SAAS,SAAS,UAAU;AACpC,cAAQ,SAAS,SAAS,UAAU;AACpC,cAAQ,UAAU,SAAS,WAAW;AAEtC,YAAM,QAAQ,KAAK,EAAE;AAAA,6CACgB,QAAQ,QAAQ;AAAA,mCAC1B,QAAQ,KAAK;AAAA,oCACZ,QAAQ,MAAM;AAAA;AAAA,wBAE1B,EAAE;AAAA,qCACW,QAAQ,OAAO;AAAA,mDACD,QAAQ,OAAO;AAAA;AAAA;AAAA,2CAGvB,QAAQ,OAAO;AAAA,wCAClB,QAAQ,OAAO;AAAA;AAAA,oCAEnB,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA,0BAIxB,EAAE;AAAA,wCACY,QAAQ,aAAa;AAAA;AAAA,0BAEnC,EAAE;AAAA,0CACc,QAAQ,OAAO;AAAA;AAAA,4CAEb,QAAQ,MAAM;AAAA;AAAA,0BAEhC,EAAE;AAAA,wCACY,QAAQ,OAAO;AAAA,2CACZ,QAAQ,OAAO;AAAA;AAAA,0BAEhC,EAAE;AAAA;AAAA;AAAA,0BAGF,EAAE;AAAA;AAAA;AAAA,0BAGF,EAAE;AAAA;AAAA;AAAA,0BAGF,EAAE;AAAA;AAAA;AAAA;AAAA,0BAIF,EAAE;AAAA,wCACY,QAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAc9B,cAAc,SAAS,cAAc,OAAO;AAC7D,eAAS,KAAK,YAAY,WAAW;AACrC,kBAAY,YAAY;AACxB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,WAAW,CAAC,UAAe;AACzB,YAAM,OAAO,SAAS,cAAc,MAAM,EAAE,GAAG,KAAU,SAAS,cAAc,kBAAkB;AAClG,UAAI,CAAC,IAAI;AACP,cAAM,WAAgB,SAAS,cAAc,KAAK;AAClD,iBAAS,UAAU,IAAI,iBAAiB;AACxC,iBAAS,cAAc,QAAQ,GAAG,YAAY,QAAQ;AACtD,iBAAS,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQ3B;AAEA,UAAI,CAAC,MAAM,MAAM,IAAI;AACnB,WAAG,MAAM,QAAQ,GAAG,CAAC;AACrB;AAAA,MACF;AAEA,UAAI;AACF,cAAMC,MAAU,SAAS,cAAc,kBAAkB;AACzD,aAAK,iBAAiB,UAAU,SAA6B,IAAS;AACpE,UAAAA,IAAG,MAAM,QAAQ,GAAG,CAAC;AACrB,gBAAM,YAAY,OAAO,KAAK,SAAS,GAAG,SAAS,OAAO,KAAK,eAAe,KAAK,YAAY,GAAG,WAAW,KAAK,IAAI,KAAK,IAAK,YAAY,SAAU,GAAG,GAAG,GAAG;AAC/J,UAAAA,IAAG,MAAM,QAAQ,GAAG,QAAQ;AAC5B,UAAAA,IAAG,MAAM;AAAA,QACX,CAAC;AAED,aAAK,iBAAiB,YAAY,CAAC,OAAY;AAC7C,UAAAA,IAAG,MAAM,QAAQ;AAAA,QACnB,CAAC;AAAA,MACH,SAAS,OAAO;AACd,gBAAQ,MAAM,KAAK;AACnB;AAAA,MACF;AAEA;AAAA,IACF;AAAA;AAAA,IAIA,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAKR,KAAK,CAAC,OAAY;AAChB,cAAM,WAAW,OAAO,OAAO,WAAW,SAAS,cAAc,EAAE,IAAI;AACvE,YAAI,CAAC,SAAU;AACf,cAAM,KAAK,CAAC,SAAS,WAAW,SAAS,UAAU;AACnD,YAAI,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,KAAK,MAAM;AAClC,uBAAa,QAAQ,IAAI,KAAK,UAAU,EAAE,CAAC;AAAA,QAC7C;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,KAAK,CAAC,OAAY;AAChB,YAAI,CAAC,aAAa,QAAQ,EAAE,EAAG;AAC/B,YAAI;AACF,gBAAM,KAAK,aAAa,QAAQ,EAAE,GAAG,WAAW,OAAO,OAAO,WAAW,SAAS,cAAc,EAAE,IAAI;AACtG,cAAI,YAAY,IAAI;AAClB,qBAAS,YAAY,GAAG,CAAC;AACzB,qBAAS,aAAa,GAAG,CAAC;AAAA,UAC5B;AAAA,QACF,SAAS,KAAK;AACZ,kBAAQ,MAAM,kCAAkC,GAAG;AAAA,QACrD;AACA;AAAA,MACF;AAAA,IAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,QAAQ,CAAC,QAAa,OAAY,WAAgB;AAEhD,UAAI,WAAW;AACb,iBACE,SAAS,oBACT,SAAS,mBACT,SAAS,KAAK,cACd,SAAS;AAEb,UAAI,SAAS,OAAO,MAAM,OAAO;AACjC,YAAM,QACJ,WAAW,SAAS,QAAQ,SAAS,kBAAkB,SAAS,kBAAkB;AAEpF,YAAM,WAAW,CAAC,MAAW;AAC3B,UAAE,eAAe;AACjB,cAAM,QAAQ,oBAAoB,CAAC;AACnC,eAAO,CAAC,QAAQ;AAChB,cAAM,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,eAAe,MAAM,YAAY,CAAC;AACzE,YAAI,CAAC,OAAQ,QAAO;AAAA,MACtB;AAEA,aAAO,iBAAiB,cAAc,UAAU,EAAE,SAAS,MAAM,CAAC;AAClE,aAAO,iBAAiB,kBAAkB,UAAU,EAAE,SAAS,MAAM,CAAC;AAEtE,YAAM,sBAAsB,CAAC,MAAW;AACtC,YAAI,EAAE,QAAQ;AACZ,cAAI,EAAE,WAAY,QAAQ,EAAE,aAAa,EAAE,SAAS,MAAO,EAAE,SAAS,IAAI,IAAI;AAC9E,iBAAO,CAAC,EAAE,SAAS;AAAA,QACrB;AACA,eAAO,EAAE,aAAa;AAAA,MACxB,GAAG,SAAS,MAAM;AACZ,iBAAS;AACT,cAAM,SAAS,MAAM,OAAO,aAAa;AACzC,eAAO,aAAa;AACpB,YAAI,KAAK,IAAI,KAAK,IAAI,IAAK,cAAa,MAAM;AAAA,YACzC,UAAS;AAAA,MAChB,GAAG,eAAe,SAAS,OAAO,eAAe;AACrD;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,UAAU,CAAC,WAAmB,SAAiB,MAAM,MAAM;AACzD,YAAM,MAAM,SAAS,cAAc,SAAS,GAAG,MAAM,SAAS,cAAc,OAAO;AACnF,UAAI,EAAE,OAAO,KAAM;AACnB,UAAI,SAAS;AAAA,QACX,KAAM,IAAoB,YAAY;AAAA,QACtC,UAAU;AAAA,MACZ,CAAC;AACD;AAAA,IACF;AAAA,EACF;AAKJ,YAAU,eAAeF,eAAaC,QAAM;;;AClU5C,yBAAqB;AAErB,MAAME,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,YAAY;AAAA,UACV;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,SAAS;AAAA,YACT,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,KAAK;AAAA,YACL,YAAY,CAAC;AAAA,UACf;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,SAAS;AAAA,YACT,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,KAAK;AAAA,YACL,YAAY,CAAC;AAAA,UACf;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,SAAS;AAAA,YACT,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,KAAK;AAAA,YACL,YAAY,CAAC;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aACE;AAAA,QACF,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAIA,MAAI,eAAe;AACnB,MAAM,aAAa;AAAA,IACjB;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAC7C;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,EAC3G;AAHA,MAGGC,WAAS;AAAA,IAEV,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMJ,OAAO,CAAC,WAA2B;AACjC,YAAI,CAAC,QAAQ;AACX,kBAAQ,KAAK,iDAAiD;AAC9D,iBAAO;AAAA,QACT;AAEA,cAAM,OAAO,SAAS,SAAS,WAAW,MAAM,GAAG,MAAM;AAAA,UACvD,KAAK,MAAM,GAAG,CAAC;AAAA,UACf,KAAK,MAAM,GAAG,CAAC;AAAA,UACf,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC;AAAA,UACrB,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC;AAAA,UACrB,KAAK,MAAM,IAAI,EAAE;AAAA,QACnB;AACA,eAAO,IAAI,KAAK,GAAG;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,uCAAuC;AAAA,QAAQ;AAAA,QAAU,CAAC,OAC3D,CAAC,IAAK,OAAO,gBAAgB,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,IAAM,MAAO,CAAC,IAAI,GAAM,SAAS,EAAE;AAAA,MACvF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,uCAAuC,QAAQ,SAAS,CAAC,MAAM;AACjE,cAAM,IAAI,OAAO,gBAAgB,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,GAAI,IAAI,MAAM,MAAM,IAAK,IAAI,IAAO;AACzF,eAAO,EAAE,SAAS,EAAE;AAAA,MACtB,CAAC;AAAA,IAEH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,UAAU,OAAO,GAAW,GAAW,IAAI,cAA+B;AAExE,YAAM,OAAO,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC;AACtD,YAAM,UAAU,MAAM,KAAK,IAAI,EAAE,IAAI,OAAK,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAClF,YAAM,WAAW,IAAI,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,EAAE,YAAY,IAAI,OAAO;AACrF,YAAM,aAAa,MAAM,OAAO,OAAO,OAAO,GAAG,QAAQ;AACzD,YAAM,YAAY,MAAM,KAAK,IAAI,WAAW,UAAU,CAAC;AACvD,YAAM,UAAU,UAAU,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAE7E,aAAO,UAAU;AAAA,IACnB;AAAA;AAAA,IAIA,OAAO,CAAC,GAAW,GAAW,OAAO,UAAmB,iBAAAC,QAAiB,IAAI,EAAE,QAAQ,GAAG,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWtG,SAAS,CAAC,GAAW,GAAW,OAAO,UAAkB;AACvD,YAAM,QAAS,iBAAAA,QAAiB,IAAI,EAAE,QAAQ,GAAG,CAAC,GAAG,gBAAgB,MAAM,SAAS,iBAAAA,QAAS,IAAI,IAAI;AACrG,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,YAAY,CAAC,YAA6B;AAExC,YAAM,MAAM,WAAW,OAAO,WAAW;AACzC,YAAM,OAAO,iBAAAA,QAAS,IAAI,UAAU,OAAO,MAAM,CAAC;AAClD,aAAO,iBAAAA,QAAS,OAAO,KAAK,MAAM,EAAE,SAAS,MAAM,IAAI,YAAY,IAAO,CAAC,EAAE,SAAS;AAAA,IACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,YAAY,CAAC,YAA4B,iBAAAA,QAAS,OAAO,OAAO,EAAE,SAAS,iBAAAA,QAAS,IAAI,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQ3F,MAAM,MAAM;AACV,YACE,OAAO,IAAI,WAAW,EAAE,GACxB,OAAO,IAAI,SAAS,KAAK,QAAQ,GAAG,CAAC,GACrC,OAAO,IAAI,WAAW,KAAK,QAAQ,GAAG,EAAE,GACxC,QAAQ,IAAI,MAAM,EAAE,GAAG,SAAS,CAACC,UAAqB;AACpD,cAAM,CAAC,IAAI,WAAWA,MAAK,CAAC,KAAM,CAAC;AACnC,cAAM,CAAC,IAAI,WAAYA,MAAK,CAAC,KAAM,IAAK,EAAI;AAE5C,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAM,IAAI,IAAI,CAAC,IAAI,WAAWA,MAAK,IAAI,IAAI,CAAC,KAAM,CAAC;AACnD,gBAAM,IAAI,IAAI,CAAC,IAAI,YAAaA,MAAK,IAAI,IAAI,CAAC,KAAM,IAAMA,MAAK,IAAI,IAAI,CAAC,KAAM,KAAM,EAAI;AACxF,gBAAM,IAAI,IAAI,CAAC,IAAI,WAAYA,MAAK,IAAI,IAAI,CAAC,KAAM,IAAK,EAAI;AAC5D,gBAAM,IAAI,IAAI,CAAC,IAAI,YAAaA,MAAK,IAAI,IAAI,CAAC,KAAM,IAAMA,MAAK,IAAI,IAAI,CAAC,KAAM,KAAM,EAAI;AACxF,gBAAM,IAAI,IAAI,CAAC,IAAI,YAAaA,MAAK,IAAI,IAAI,CAAC,KAAM,IAAMA,MAAK,IAAI,IAAI,CAAC,KAAM,KAAM,EAAI;AACxF,gBAAM,IAAI,IAAI,CAAC,IAAI,WAAYA,MAAK,IAAI,IAAI,CAAC,KAAM,IAAK,EAAI;AAC5D,gBAAM,IAAI,IAAI,CAAC,IAAI,YAAaA,MAAK,IAAI,IAAI,CAAC,KAAM,IAAMA,MAAK,IAAI,IAAI,CAAC,KAAM,KAAM,EAAI;AACxF,gBAAM,IAAI,IAAI,CAAC,IAAI,WAAYA,MAAK,IAAI,IAAI,CAAC,KAAM,IAAK,EAAI;AAAA,QAC9D;AACA,eAAO,MAAM,KAAK,EAAE;AAAA,MACtB,GAAG,MAAM,KAAK,IAAI;AACpB,UAAI,QAAQ,cAAc;AACxB,iBAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,gBAAM,IAAI,KAAK,CAAC;AAChB,cAAI,MAAM,UAAa,KAAK,CAAC,MAAO,IAAK;AAAA,QAC3C;AAAA,MACF,OAAO;AACL,uBAAe;AACf,aAAK,UAAU,GAAI,MAAM,aAAgB,CAAC;AAC1C,aAAK,UAAU,GAAG,MAAM,CAAC;AACzB,eAAO,OAAO,gBAAgB,IAAI;AAAA,MACpC;AACA,aAAO,OAAO,IAAI;AAAA,IACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,aAAa,MAAc;AACzB,YACE,IAAI,WACJ,IAAI,OAAO,QACX,SAAS,SAAS,cAAc,QAAQ,GACxC,MAAM,OAAO,WAAW,IAAI,GAC5B,MAAM;AAER,UAAI,oBAAoB;AACxB,UAAI,KAAK;AACP,eAAO,QAAQ;AACf,eAAO,SAAS;AAChB,YAAI,eAAe;AACnB,YAAI,OAAO;AACX,YAAI,eAAe;AACnB,YAAI,YAAY;AAChB,YAAI,SAAS,KAAK,GAAG,IAAI,EAAE;AAC3B,YAAI,YAAY;AAChB,YAAI,SAAS,KAAK,GAAG,EAAE;AACvB,YAAI,YAAY;AAChB,YAAI,SAAS,KAAK,GAAG,EAAE;AACvB,4BAAoB,OAAO,UAAU;AAAA,MACvC;AAEA,YAAM,QAAQ;AAAA,QACZ,EAAE;AAAA,QACF,EAAE;AAAA,QACF,EAAE;AAAA,QACF,EAAE,QAAQ,MAAM,EAAE;AAAA,SAClB,oBAAI,KAAK,GAAE,kBAAkB;AAAA,QAC5B,EAAU,gBAAgB;AAAA,QAC1B,EAAU,uBAAuB;AAAA,QAClC;AAAA,MACF,EAAE,KAAK,GAAG;AAEV,aAAO,SAAS,SAAS,WAAW,KAAK;AAAA,IAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,eAAe,CAAC,KAAa,OAAe,WAAyB;AACnE,YAAM,YAAY,SAAS,SAAS,MAAM,OAAO,MAAM;AAEvD,YAAM,OAAO,iBAAAD,QAAS,WAAW,WAAW,MAAM,EAAE,SAAS;AAC7D,mBAAa,QAAQ,KAAK,KAAK,UAAU,EAAE,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;AAAA,IAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,cAAc,CAAC,KAAa,WAAkC;AAC5D,YAAM,MAAM,aAAa,QAAQ,GAAG;AACpC,UAAI,CAAC,IAAK,QAAO;AAEjB,UAAI;AACF,cAAM,UAAU,KAAK,MAAM,GAAG;AAE9B,YAAI,WAAW,QAAQ,KAAK,QAAQ,GAAG;AACrC,gBAAM,eAAe,iBAAAA,QAAS,WAAW,QAAQ,GAAG,MAAM,EAAE,SAAS;AACrE,cAAI,QAAQ,MAAM,cAAc;AAC9B,oBAAQ,MAAM,+DAA+D,GAAG,GAAG;AACnF,mBAAO;AAAA,UACT;AACA,iBAAO,SAAS,SAAS,QAAQ,QAAQ,GAAG,MAAM;AAAA,QACpD;AAEA,eAAO,SAAS,SAAS,QAAQ,KAAK,MAAM;AAAA,MAC9C,SAAS,KAAK;AAEZ,YAAI;AACF,iBAAO,SAAS,SAAS,QAAQ,KAAK,MAAM;AAAA,QAC9C,SAAS,UAAU;AACjB,kBAAQ,KAAK,yCAAyC,GAAG,MAAM,QAAQ;AACvE,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,YAAU,eAAeF,eAAaC,QAAM;;;ACxa5C,MAAMG,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAlBA,MAkBGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMV,MAAM,CAAC,GAAQ,YAAiB;AAC9B,YAAM,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAEnC,UAAI,CAAC;AACH,kBAAU;AAAA,UACR,MAAM;AAAA,YACJ;AAAA,cACE,KAAK;AAAA,cACL,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,aAAa;AAAA;AAAA,cAEb,UAAU;AAAA,YACZ;AAAA,YACA;AAAA,cACE,KAAK;AAAA,cACL,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,SAAS;AAAA,cACT,UAAU;AAAA,YACZ;AAAA,YACA;AAAA,cACE,KAAK;AAAA,cACL,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,SAAS;AAAA,cACT,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAEF,UAAI,QAAQ,MAAM;AAChB,gBAAQ,KAAK;AAAA,UACX,CAACC,UAAc;AAEb,gBAAI,EAAE,WAAY,EAAE,WAAWA,MAAK,SAAS,MAAO;AAClD,kBAAI,SAAS,OAAO,SAASA,MAAK,GAAG,KAAKA,MAAK,WAAW,MAAM;AAC9D,oBAAIA,MAAK,QAAS,CAAAA,MAAK,QAAQ,MAAM;AACrC,oBAAIA,MAAK,SAAU,QAAO,KAAK,UAAUA,MAAK,QAAQ;AACtD,kBAAE,eAAe;AACjB,uBAAO;AAAA,cACT;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA;AAAA,IACF;AAAA,EACF;AAKA,YAAU,eAAeF,eAAaC,QAAM;;;AC/E5C,MAAM,MAAM;AAAA,IACV,IAAI,CAAC;AAAA,EACP;AAFA,MAEGE,gBAA2B;AAAA,IAC5B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAzIA,MAyIGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,MAAM,MAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASpB,OAAO,CAAC,SAAkB,QAAgB,OAAO,cAAc;AAC7D,UAAI,KAAK,CAAC;AACV,eAAS,OAAO,QAAQ,QAAQ,IAAI;AACpC,eAAS,OAAO,QAAQ,SAAS,IAAI;AACrC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,MAAM,CAAC,IAAe,QAAgB,SAA6D;AACjG,UAAI,EAAE,MAAM,SAAS;AACnB,gBAAQ,MAAM,qBAAqB;AACnC,eAAO;AAAA,MACT;AAEA,UAAI;AAEF,YAAI;AACJ,YAAI;AACF,sBAAY,IAAI,IAAI,MAAM;AAAA,QAC5B,QAAQ;AAEN,cAAI,CAAC,OAAO,WAAW,GAAG,KAAK,CAAC,OAAO,WAAW,IAAI,KAAK,CAAC,OAAO,WAAW,KAAK,GAAG;AACpF,wBAAY,IAAI,IAAI,QAAQ,OAAO,SAAS,MAAM;AAAA,UACpD,OAAO;AACL,oBAAQ,MAAM,uBAAuB;AACrC,mBAAO;AAAA,UACT;AAAA,QACF;AAGA,YAAI,UAAU,aAAa,OAAO;AAChC,kBAAQ,MAAM,yDAAyD;AACvE,iBAAO;AAAA,QACT;AAEA,cAAM,KAAK,IAAI,UAAU,MAAM;AAC/B,WAAG,aAAa;AAEhB,WAAG,YAAY,CAAC,WAAW;AAAA,QAE3B;AACA,eAAO,CAAC,IAAI,IAAI,IAAI;AAAA,MACtB,SAAS,KAAK;AACZ,gBAAQ,MAAM,GAAG;AACjB,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,SAAS,CAAC,QAAa,SAAiB;AACtC,UAAI,CAAC,OAAQ;AACb,eAAS,OAAO,KAAK,SAAS,SAAS,KAAK,IAAI,QAAQ,IAAI;AAC5D;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,MAAM,CAAC,IAAqB,QAAgB,SAAiB;AAC3D,UAAI,CAAC,GAAI;AAET,UAAI;AACF,cAAM,YAAkB,SAAS,OAAe,KAAK,IAAI,QAAQ,IAAI;AACrE,YAAI,CAAC,UAAW;AAEhB,YAAI,GAAG,IAAI,IAAI;AAGf,YAAI,SAAS,MAAM,QAAQ,QAAQ,UAAU,CAAC,CAAC,MAAM,IAAI;AACvD,mBAAS,MAAM,QAAQ,KAAK,UAAU,CAAC,CAAC;AAAA,QAC1C;AAEA,kBAAU,CAAC,EAAE,SAAS,MAAM,SAAS,IAAI,IAAI,GAAG,EAAE,YAAY;AAC9D,kBAAU,CAAC,EAAE,UAAU,CAAC,UACtB,SAAS,IAAI;AAAA,UACX,MAAM,WAAW,iBAAiB,qBAAqB,MAAM,UAAU,MAAM,IAAI;AAAA,QACnF;AACF,kBAAU,CAAC,EAAE,UAAU,CAAC,QAAa,SAAS,KAAK,MAAM,GAAG;AAAA,MAC9D,SAAS,KAAK;AACZ,gBAAQ,MAAM,GAAG;AAAA,MACnB;AAEA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,MAAM,CAAC,KAAa,MAAc,SAAiB;AACjD,UAAI,EAAE,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,KAAM;AAEjC,UAAI;AACF,cAAM,YAAY,IAAI,GAAG,IAAI;AAC7B,YAAI,CAAC,UAAW;AAChB,cAAM,KAAK,UAAU,CAAC,GACpB,KAAK,UAAU,CAAC,GAChB,MAAM,OAAO,KAAK,UAAU,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI;AAC9D,WAAG,KAAK,GAAG;AAAA,MACb,SAAS,KAAK;AACZ,gBAAQ,MAAM,GAAG;AAAA,MACnB;AAEA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,CAAC,SAAiB;AACtB,UAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,EAAG;AAExB,UAAI;AACF,cAAM,YAAY,IAAI,GAAG,IAAI;AAC7B,oBAAY,CAAC,GAAG,KAAK,sBAAsB;AAAA,MAC7C,SAAS,KAAK;AACZ,gBAAQ,MAAM,GAAG;AAAA,MACnB;AAEA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,SAAS,CAAC,IAAY,SAAiB;AACrC,UAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,EAAG;AAExB,UAAI;AACF,cAAM,YAAY,IAAI,GAAG,IAAI,GAC3B,KAAK,UAAU,CAAC;AAElB,WAAG,YAAY,OAAO,UAAwB;AAE5C,cAAI;AACF,gBAAI,IAAI;AACN,oBAAM,WAAW,OAAO,OAAO,WAAW,SAAS,cAAc,EAAE,IAAK;AACxE,kBAAI,UAAU;AACZ,sBAAM,UAAU,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO,MAAM,MAAM,KAAK,KAAK,GAAG,SAAS,KAAK,MAAM,OAAO,GAAG,OAAO,OAAO,OAAO,OAAO,MAAM,EAAE,CAAC,CAAC;AAC3J,yBAAS,cAAc;AAAA,cACzB;AAAA,YACF;AAAA,UACF,SAAS,MAAM;AAAA,UAEf;AAEA,mBAAS,IAAI,IAAI,MAAM,IAAI;AAAA,QAC7B;AAAA,MACF,SAAS,KAAK;AACZ,gBAAQ,MAAM,GAAG;AAAA,MACnB;AAEA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,WAAW,CAAC,SAAiB;AAC3B,UAAI;AACF,cAAM,YAAY,IAAI,GAAG,IAAI;AAC7B,YAAI,CAAC,UAAW;AAEhB,YAAI;AAEJ,cAAM,KAAK,UAAU,CAAC,GAAG,OAAO,CAAC,OAAO,QAAS;AAC/C,eAAK,WAAW,MAAM;AACpB,qBAAS,OAAO,KAAK,IAAI;AAAA,UAC3B,GAAG,IAAI;AAAA,QACT,GAAG,OAAO,MAAM,aAAa,EAAE;AAC/B,WAAG,SAAS,MAAM,YAAY,MAAM,GAAK;AAEzC,WAAG,YAAY,CAAC,QAAa;AAC3B,cAAI;AACF,kBAAM,KAAK,OAAO,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC;AAC7C,gBAAI,GAAG,CAAC,MAAM,WAAY,MAAK;AAC/B;AAAA,UACF,SAAS,KAAK;AACZ,oBAAQ,MAAM,GAAG;AAAA,UACnB;AAAA,QACF;AAAA,MACF,SAAS,KAAK;AACZ,gBAAQ,MAAM,GAAG;AAAA,MACnB;AAEA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAO,MAAM;AAEX,eAAS,MAAM,UAAU,SAAS,MAAM,QAAQ,OAAO,CAAC,OAAkB,GAAG,eAAe,UAAU,MAAM;AAC5G;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,MAAmB,SAAS,MAAM;AAAA,EAE1C;AAEA,YAAU,eAAeD,eAAaC,QAAM;AAC5C,YAAU,QAAQ,MAAM;;;ACrYxB,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAlBA,MAkBGC,WAAS;AAAA;AAAA;AAAA;AAAA,IAIV,MAAM,CAAC,KAAa,UAAe,CAAC,MAG/B;AACH,YAAM,YAAqD,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,IAAI,gBAAgB,GAAG,UAAU,CAAC,OAAe,SAAc;AACrK,kBAAU,KAAK,GAAG,QAAQ,QAAM,GAAG,IAAI,CAAC;AAAA,MAC1C,GAAG,QAAQ,YAAY;AACrB,YAAI;AACF,gBAAM,WAAW,MAAM,MAAM,KAAK;AAAA,YAChC,GAAG;AAAA,YACH,QAAQ,KAAK;AAAA,YACb,SAAS;AAAA,cACP,UAAU;AAAA,cACV,GAAI,QAAQ,WAAW,CAAC;AAAA,YAC1B;AAAA,UACF,CAAC;AAED,cAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,eAAe,SAAS,UAAU,EAAE;AACtE,kBAAQ,QAAQ,EAAE,QAAQ,SAAS,OAAO,CAAC;AAE3C,gBAAM,SAAS,SAAS,MAAM,UAAU,GAAG,UAAU,IAAI,YAAY;AACrE,cAAI,CAAC,OAAQ;AAEb,cAAI,SAAS;AACb,iBAAO,MAAM;AACX,kBAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,gBAAI,KAAM;AAEV,sBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,kBAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,qBAAS,MAAM,IAAI,KAAK;AAExB,uBAAW,QAAQ,OAAO;AACxB,kBAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,oBAAI,OAAO,KAAK,QAAQ,SAAS,EAAE,EAAE,KAAK;AAC1C,oBAAI;AAEF,sBAAI,KAAK,SAAS,GAAG,KAAK,KAAK,SAAS,GAAG,GAAG;AAG5C,2BAAO,KAAK,MAAM,IAAI;AAAA,kBACxB;AAAA,gBACF,SAAS,IAAI;AAAA,gBAAmC;AAChD,wBAAQ,WAAW,IAAI;AAAA,cACzB;AAAA,YACF;AAAA,UACF;AAAA,QACF,SAAS,KAAU;AACjB,cAAI,IAAI,SAAS,cAAc;AAC7B,oBAAQ,SAAS,GAAG;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AACA,YAAM;AAEN,aAAO;AAAA,QACL,IAAI,CAAC,OAAe,OAA4B;AAC9C,cAAI,UAAU,KAAK,EAAG,WAAU,KAAK,EAAE,KAAK,EAAE;AAAA,QAChD;AAAA,QACA,OAAO,MAAM,KAAK,MAAM;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AAEA,YAAU,eAAeD,eAAaC,QAAM;;;ACrF5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA;AAAA;AAAA,MAGf;AAAA,IACF;AAAA,EACF;AAtJA,MAsJGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQN,MAAM,CACJ,WACA,SACA,SACA,OACG;AACH,UAAI,UAAU,cAAc,KAAK;AAC/B,iBAAS,IAAI,iBAAiB,SAAS;AAEzC,gBAAU,CAAC,SAAS,IAAI,aAAa,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AACxE,gBAAU,CAAC,SAAS,IAAI,aAAa,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AAExE,YAAM,eAAe,UAAU,sBAAsB,GAAG,QAAQ,8BAA8B,WAAW,UAAU,cAAc,IAAI,YAAY,UAAU,eAAe,IAAI,UAAU,SAAS,gBAAgB,OAAO,KAAK,GAAG,SAAS,QAAQ,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AAE3R,cAAQ,aAAa,SAAS,KAAK;AACnC,cAAQ,QAAQ,WAAW;AAC3B,cAAQ,eAAe,MAAM,WAAW,SAAS,WAAW,MAAM,SAAS;AAC3E,cAAQ,eAAe,MAAM,SAAS,OAAO,QAAQ,CAAC;AACtD,cAAQ,eAAe,MAAM,UAAU,OAAO,SAAS,CAAC;AACxD,cAAQ,OAAO,EAAE,UAAU;AAG3B,YAAM,QAAQ,SAAS,gBAAgB,OAAO,MAAM;AAEpD,UAAI,SAAS,QAAQ,CAAC,EAAE,sBAAsB;AAE9C,YAAM,eAAe,MAAM,KAAK,OAAO,OAAO,OAAO,aAAa,IAAI,CAAC;AACvE,YAAM,eAAe,MAAM,KAAK,OAAO,OAAO,MAAM,aAAa,GAAG,CAAC;AACrE,YAAM,eAAe,MAAM,SAAS,OAAO,OAAO,KAAK,CAAC;AACxD,YAAM,eAAe,MAAM,UAAU,OAAO,OAAO,MAAM,CAAC;AAC1D,cAAQ,YAAY,KAAK;AAGzB,YAAM,QAAQ,SAAS,gBAAgB,OAAO,MAAM;AACpD,eAAS,QAAQ,CAAC,EAAE,sBAAsB;AAE1C,YAAM,eAAe,MAAM,KAAK,OAAO,OAAO,OAAO,aAAa,IAAI,CAAC;AACvE,YAAM,eAAe,MAAM,KAAK,OAAO,OAAO,MAAM,aAAa,GAAG,CAAC;AACrE,YAAM,eAAe,MAAM,SAAS,OAAO,OAAO,KAAK,CAAC;AACxD,YAAM,eAAe,MAAM,UAAU,OAAO,OAAO,MAAM,CAAC;AAC1D,cAAQ,YAAY,KAAK;AAGzB,YAAM,OAAO,SAAS,gBAAgB,OAAO,MAAM;AAEnD,WAAK,eAAe,MAAM,MAAM,MAAM;AACtC,WAAK,eAAe,MAAM,cAAc,YAAY;AACpD,cAAQ,YAAY,IAAI;AAExB,gBAAU,YAAY,OAAO;AAC7B,MAAC,SAAS,IAAY,OAAO,OAAO,OAAO,IAAI;AAE/C,UAAI,OAAO,OAAO;AAChB,WAAG,SAAS,OAAO;AAErB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,OAAO,MAAM;AACX,aAAO,CAAC,EAAE,SAAS,mBAAmB,SAAS,gBAAgB,8BAA8B,KAAK,EAAE;AAAA,IACtG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,QAAQ,CAAC,OAAY,OAAY,QAAa;AAE5C,YACE,KAAK,OAAO,WAAW,MAAM,aAAa,GAAG,KAAK,GAAG,GACrD,KAAK,OAAO,WAAW,MAAM,aAAa,GAAG,KAAK,GAAG,GACrD,KAAK,OAAO,WAAW,MAAM,aAAa,GAAG,KAAK,GAAG,GACrD,KAAK,OAAO,WAAW,MAAM,aAAa,GAAG,KAAK,GAAG,GAAG,KAAK,OAAO,WAAW,MAAM,aAAa,OAAO,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,WAAW,MAAM,aAAa,QAAQ,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,WAAW,MAAM,aAAa,OAAO,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,WAAW,MAAM,aAAa,QAAQ,KAAK,GAAG,IAAI,GAAG,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,SAAS,IAAI,gBAAgB,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,GAAG,KAAK,SAAS,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,SAAS,IAAI,SAAS,IAAI,IAAI,GAAG;AAO9kB,UAAI,eAAe,MAAM,KAAK,MAAM,MAAM,MAAM,MAAM,IAAI,MAAM,MAAM,GAAG;AACzE;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,UAAU,CAAC,IAAsB,IAAsB,OAAuB;AAC5E,YAAM,QAAQ,KAAK,GAAG,IAAI,QAAQ,QAAQ,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,SAAS,MAAM,GAAG,CAAC,IAAI;AACvG,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYA,iBAAiB,CACf,IACA,IACA,IACA,IACA,GACA,MACqB;AACrB,UAAI,KAAK,IAAI,KAAK,EAAE,IAAI,IAAI,EAAG,QAAO,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,KAAM,KAAK,IAAK,KAAK,IAAI,EAAE,CAAC;AAC3F,aAAO,CAAC,KAAM,KAAK,IAAK,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,IAAI,IAAI,CAAC,EAAE;AAAA,IAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,cAAc,CAAC,QAAqB,SAA8B;AAEhE,UAAI;AACJ,YAAM,OAAO,SAAS,cAAc,MAAM;AAE1C,aAAO,MAAM,WAAW;AAExB,WAAK,MAAM,WAAW;AACtB,WAAK,MAAM,QAAQ;AACnB,WAAK,MAAM,SAAS;AAEpB,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,kBAAQ;AAAA,YACN,MAAM;AAAA,YACN,KAAK;AAAA,YACL,YAAY;AAAA,UACd;AACA;AAAA,QACF,KAAK;AACH,kBAAQ;AAAA,YACN,KAAK;AAAA,YACL,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AACA;AAAA,QACF,KAAK;AACH,kBAAQ;AAAA,YACN,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,YAAY;AAAA,UACd;AACA;AAAA,QACF,KAAK;AACH,kBAAQ;AAAA,YACN,KAAK;AAAA,YACL,MAAM;AAAA,YACN,WAAW;AAAA,UACb;AACA;AAAA,QACF;AACE,kBAAQ,CAAC;AAAA,MACb;AAEA,aAAO,OAAO,KAAK,OAAO,KAAK;AAE/B,aAAO,YAAY,IAAI;AAEvB,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,kBAAkB,CAAC,cAA2B;AAC5C,YAAM,OAAO,UAAU,iBAAiB,qCAAqC;AAC7E,WAAK,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC;AAClC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,gBAAgB,CACd,cACA,iBACA,MACA,MACA,OACA,UACG;AAEH,YACE,YAAY,aAAa,sBAAsB,GAC/C,KAAK,CAAC,MAAM,IAAI,GAChB,UAAU,GAAG,QACb,MAAM,CAAC,OAAO,KAAK,GACnB,SAAgB,CAAC;AAEnB,eAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,cAAM,WAAW,GAAG,CAAC,GAAG,aAAa,IAAI,CAAC;AAC1C,YAAI,CAAC,YAAY,CAAC,WAAY;AAE9B,eAAO,CAAC,IAAI,SAAS,sBAAsB;AAE3C,mBAAW,eAAe,MAAM,KAAK,OAAO,OAAO,CAAC,EAAE,OAAO,UAAU,IAAI,CAAC;AAC5E,mBAAW,eAAe,MAAM,KAAK,OAAO,OAAO,CAAC,EAAE,MAAM,UAAU,GAAG,CAAC;AAC1E,mBAAW,eAAe,MAAM,SAAS,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC;AAChE,mBAAW,eAAe,MAAM,UAAU,OAAO,OAAO,CAAC,EAAE,MAAM,CAAC;AAAA,MACpE;AAEA,YAAM,QAAQ,aAAa,iBAAiB,MAAM,GAAG,UAAU,MAAM,CAAC,GAAqB,UAAU,MAAM,CAAC,GAAqB,eAAe,SAAS,eAAe,YAAY;AACpL,UAAI,WAAW,WAAW,cAAc;AACtC,QAAC,SAAS,IAAY,OAAO,SAAS,SAAS,YAAY;AAAA,MAC7D;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,eAAe,CAAC,QAAe;AAE7B,YAAM,MAAM,IAAI;AAEhB,UAAI,iBAAiB,aAAa,SAAS;AAC3C,UAAI,iBAAiB,aAAa,IAAI;AACtC,UAAI,iBAAiB,WAAW,OAAO;AAEvC,eAAS,iBAAiB,GAAe;AACvC,cAAM,MAAO,IAAY,aAAa;AACtC,eAAO;AAAA,UACL,IAAI,EAAE,UAAU,IAAI,KAAK,IAAI;AAAA,UAC7B,IAAI,EAAE,UAAU,IAAI,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF;AAEA,UACE,kBAA8B,MAC9B,SAA0C;AAE5C,eAAS,UAAUC,MAAiB;AAClC,YAAKA,KAAI,OAAuB,UAAU,SAAS,WAAW,GAAG;AAC/D,4BAAkBA,KAAI;AACtB,mBAAS,iBAAiBA,IAAG;AAC7B,iBAAO,KAAK,OAAO,WAAW,gBAAgB,eAAe,MAAM,GAAG,KAAK,GAAG;AAC9E,iBAAO,KAAK,OAAO,WAAW,gBAAgB,eAAe,MAAM,GAAG,KAAK,GAAG;AAAA,QAChF;AACA;AAAA,MACF;AAEA,eAAS,KAAKA,MAAiB;AAC7B,YAAI,mBAAmB,QAAQ;AAC7B,gBAAM,QAAQ,iBAAiBA,IAAG;AAClC,0BAAgB,eAAe,MAAM,KAAK,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC;AACpE,0BAAgB,eAAe,MAAM,KAAK,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC;AACpE,mBAAS,IAAI;AAAA,YACX;AAAA,YACA;AAAA,YACA,SAAS,eAAe,YAAY;AAAA,UACtC;AAAA,QACF;AACA;AAAA,MACF;AAEA,eAAS,UAAU;AACjB,0BAAkB;AAClB,iBAAS;AACT;AAAA,MACF;AAEA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,QAAQ,CAAC,KAAY,WAAwB,SAAsB,YAAyB;AAE1F,YAAM,SAAS,IAAI;AACnB,UAAI,OAAO,WAAW,WAAW,SAAS;AAExC,iBAAS,OAAO,IAAI;AAAA,UAClB,MAAM,GAAG,OAAO,EAAE;AAAA,UAClB,OAAO;AAAA,UACP,MAAM;AAAA,QACR,CAAC;AAED,iBAAS,IAAI;AAAA,UACX;AAAA,UACA,CAAC,SAAS,OAAO;AAAA,UACjB,CAAC,SAAS,MAAM;AAAA,UAChB,CAACC,UAAcC,aAAiB;AAC9B,kBAAM,YAAY,SAAS,eAAe,iBAAiB;AAC3D,gBAAI,WAAW;AACb,wBAAU,iBAAiB,UAAU,MAAM;AACzC,yBAAS,IAAI;AAAA,kBACX;AAAA,kBACA;AAAA,kBACAD;AAAA,kBACAC;AAAA,kBACA,SAAS,cAAc,iBAAiB;AAAA,kBACxC,SAAS,iBAAiB,iBAAiB,EAAE,CAAC;AAAA,gBAChD;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,MAEF,OAAO;AAEL,iBAAS,IAAI,iBAAiB,SAAS;AACvC,cAAM,YAAY,SAAS,eAAe,iBAAiB;AAC3D,YAAI,UAAW,WAAU,YAAY,UAAU,UAAU,IAAI,CAAC;AAC9D,iBAAS,OAAO,IAAI;AAAA,UAClB,MAAM,GAAG,OAAO,EAAE;AAAA,UAClB,OAAO;AAAA,UACP,MAAM;AAAA,QACR,CAAC;AAAA,MAEH;AAEA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,SAAS,CAEP;AAAA,MACE;AAAA,MACA,SAAS;AAAA,MACT,OAAO,CAAC,MAAM,IAAI;AAAA,MAClB,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,sBAAsB;AAAA,MACtB,QAAQ,SAAS,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;AAAA,MACzC,OAAO,SAAO,SAAS,OAAO,QAAQ,IAAI;AAAA,IAC5C,MAEG;AAEH,UAAI,CAAC,SAAU,QAAO;AAEtB,UAAI,QAAQ;AACV,cAAM,KAAK,SAAS,cAAc,QAAQ,GAAkB,QAAQ,GAAG,UAAU,IAAI,GAAG,aAAa;AAAA;AAAA,2BAEpF,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;AAAA,mCACV,mBAAmB;AAAA;AAAA,qBAEjC,KAAK,UAAU,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,uBAKjB,IAAI,CAAC,CAAC;AAAA,wBACL,IAAI,CAAC,CAAC;AAAA,uBACP,KAAK,UAAU,IAAI;AAAA;AAAA;AAAA;AAAA;AAKhC,WAAG,YAAY;AACf,cAAM,gBAAgB,GAAG,cAAc,eAAe;AACtD,YAAI,cAAe,eAAc,YAAY,KAAK;AAAA,MACpD;AAEA;AAAA,IACF;AAAA,EACF;AAOJ,YAAU,eAAeJ,eAAaC,QAAM;AAC5C,YAAU,KAAK,MAAM;;;AChjBrB,MAAMI,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AA5CA,MA4CGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMV,OAAO,CAAC,aAAqB,aAAmF;AAC9G,UAAI,OAAO,qBAAqB,YAAa,QAAO,EAAE,MAAM,MAAM;AAAA,MAAE,GAAG,MAAM,MAAM;AAAA,MAAE,EAAE;AACvF,YAAM,KAAK,IAAI,iBAAiB,SAAS,WAAW,EAAE;AAEtD,SAAG,YAAY,CAAC,MAAM;AAEpB,YAAI,EAAE,WAAW,OAAO,SAAS,UAAU,CAAC,EAAE,QAAQ;AACpD,cAAI;AAEF,kBAAM,OAAO,EAAE;AACf,gBAAI,QAAQ,OAAO,SAAS,YAAY,CAAC,KAAK,aAAa,CAAC,KAAK,aAAa;AAC5E,uBAAS,IAAI;AAAA,YACf;AAAA,UACF,SAAS,KAAK;AACZ,oBAAQ,KAAK,iDAAiD,GAAG;AAAA,UACnE;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,QACL,MAAM,CAAC,SAAc,GAAG,YAAY,IAAI;AAAA,QACxC,MAAM,MAAM,GAAG,MAAM;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,KAAK,CAAC,aAAqB,aAAoF;AAC7G,UAAI,OAAO,qBAAqB,YAAa,QAAO,EAAE,MAAM,MAAM;AAAA,MAAE,GAAG,OAAO,MAAM;AAAA,MAAE,EAAE;AACxF,YAAM,KAAK,IAAI,iBAAiB,WAAW;AAC3C,SAAG,YAAY,CAAC,UAAU;AACxB,YAAI,MAAM,WAAW,OAAO,SAAS,UAAU,CAAC,MAAM,QAAQ;AAC5D,cAAI;AACF,kBAAM,OAAO,MAAM;AACnB,gBAAI,QAAQ,OAAO,SAAS,YAAY,CAAC,KAAK,aAAa,CAAC,KAAK,aAAa;AAC5E,uBAAS,IAAI;AAAA,YACf;AAAA,UACF,SAAS,KAAK;AACZ,oBAAQ,KAAK,+CAA+C,GAAG;AAAA,UACjE;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,QACL,MAAM,CAAC,SAAc,GAAG,YAAY,IAAI;AAAA,QACxC,OAAO,MAAM,GAAG,MAAM;AAAA,MACxB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,cAAc,CAAmB,KAAa,cAAiB,WAAuB;AACpF,UAAI,OAAO,iBAAiB,YAAa,QAAO;AAEhD,UAAI;AACJ,YAAM,QAAQ,aAAa,QAAQ,GAAG;AAEtC,UAAI,OAAO;AACT,YAAI,QAAQ;AACV,gBAAM,YAAY,SAAS,SAAS,aAAa,KAAK,MAAM;AAC5D,oBAAU,YAAY,KAAK,MAAM,SAAS,IAAI;AAAA,QAChD,OAAO;AACL,cAAI;AACF,sBAAU,KAAK,MAAM,KAAK;AAAA,UAC5B,QAAQ;AACN,sBAAU;AAAA,UACZ;AAAA,QACF;AAAA,MACF,OAAO;AACL,kBAAU;AAAA,MACZ;AAEA,aAAO,IAAI,MAAM,SAAS;AAAA,QACxB,IAAI,QAAQ,MAAM,OAAO;AACvB,UAAC,OAAe,IAAI,IAAI;AACxB,gBAAM,OAAO,KAAK,UAAU,MAAM;AAClC,cAAI,QAAQ;AACV,qBAAS,SAAS,cAAc,KAAK,MAAM,MAAM;AAAA,UACnD,OAAO;AACL,yBAAa,QAAQ,KAAK,IAAI;AAAA,UAChC;AACA,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,YAAU,eAAeD,eAAaC,QAAM;;;AC9I5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aACE;AAAA,QACF,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAnBA,MAmBGC,WAAS;AAAA,IAEN,YAAY,CAAC,KAAa,WAA+B;AACvD,UAAI,CAAC,IAAK,QAAO,CAAC;AAClB,YAAM,WAAW,OAAO,CAAC;AACzB,UAAI,CAAC,SAAU,QAAO,CAAC,GAAG;AAE1B,UAAI,SAAS;AACb,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,EAAE,GAAG;AACtC,iBAAS,OAAO,MAAM,OAAO,CAAC,CAAE,EAAE,KAAK,QAAQ;AAAA,MACjD;AACA,aAAO,OAAO,MAAM,QAAQ;AAAA,IAC9B;AAAA,EACF;AAKJ,YAAU,eAAeD,eAAaC,QAAM;;;ACrC5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,YAAY;AAAA,UACV;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SAAS;AAAA,YACT,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,aAAa;AAAA,YACjB,KAAK;AAAA,YACD,YAAY,CAAC;AAAA,YACb,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,SAAS;AAAA,UACX;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SAAS;AAAA,YACT,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,aAAa;AAAA,YACjB,KAAK;AAAA,YACD,YAAY,CAAC;AAAA,YACb,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAeb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,QACb,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AA/KA,MA+KGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUN,MAAM,CAAC,GAAW,GAAW,GAAW,MAAsB,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,UAAU,GAAG,CAAC,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAStG,YAAY,CAAC,QAAwB,IAAI,YAAY,EAAE,QAAQ,SAAS,CAAC,MAAc,EAAE,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAStG,OAAO,CAAC,QAAwB,IAAI,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAShD,OAAO,CAAC,QAAwB,IAAI,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAShD,OAAO,CAAC,QAAwB,IAAI,QAAQ,mBAAmB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASrE,UAAU,CAAC,QAAwB,IAAI,QAAQ,oDAAoD,EAAE;AAAA;AAAA,IAIrG,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMT,SAAS,CAAC,WAA2B,OAAO,QAAQ,YAAY,KAAK,EAAE,QAAQ,MAAM,CAAC,QAAgB,IAAI,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOvH,cAAc,CAAC,WAA2B;AACxC,eAAO,OACJ,QAAQ,eAAe,CAAC,IAAY,MAAc,IAAI,EAAE,YAAY,CAAC,EAAE,EACvE,QAAQ,MAAM,EAAE;AAAA,MACrB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,cAAc,CAAC,OAAqB;AAClC,UAAI,CAAC,GAAI;AAET,eAAS,SAASC,KAAY;AAC5B,cAAM,OAAO,SAAS,iBAAiBA,GAAE,GACvC,YAAY,KAAK;AAEnB,YAAI,aAAa,EAAG;AAEpB,iBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,gBAAM,WAAY,KAAK,CAAC,EAAkB,cAAc;AACpD,UAAC,KAAK,CAAC,EAAkB,MAAM,WAAW,GAAG,QAAQ;AAAA,QAC3D;AAAA,MACF;AAEA,eAAS,iBAAiB,QAAQ,eAAe,MAAM,SAAS,EAAE,CAAC;AAEnE;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,UAAU,CAAC,aAAqB;AAC9B,YAAM,QAAQ,oBACZ,UAAU,SAAS,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK,CAAC;AACzE,aAAO,CAAC,GAAG,IAAI,IAAI,QAAQ,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC;AAAA,IAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,aAAa,CAAC,MAAc,WAAmC;AAC7D,UAAI,eAAe;AACnB,iBAAW,QAAQ,QAAQ;AACzB,YAAI,OAAO,OAAO,QAAQ,IAAI,GAAG;AAC/B,yBAAe,aAAa,WAAW,MAAM,OAAO,IAAI,KAAK,EAAE;AAAA,QACjE;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EAEF;AAKJ,YAAU,eAAeF,eAAaC,QAAM;;;ACtT5C,MAAME,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AA/BA,MA+BGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMN,OAAO,CAAC,OAA8B,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUtF,YAAY,CAAC,OAAe,QAAwB;AAClD,eAAS,aAAa,MAAsB;AAC1C,cAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,eACE,OAAO,SAAS,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,OACtC,OAAO,SAAS,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,KACtC,OAAO,SAAS,MAAM,CAAC,KAAK,IAAI,EAAE;AAAA,MAEtC;AACA,cAAS,MAAM,aAAa,KAAK,IAAK,aAAa,GAAG,GAAG,QAAQ,CAAC;AAAA,IACpE;AAAA,EAEF;AAKJ,YAAU,eAAeD,eAAaC,QAAM;;;AChE5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaV;AAAA,QACE,MAAM;AAAA,QACN,aACE;AAAA,QACF,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAtEA,MAsEGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqBN,UAAU,CAAC,UAA0B;AACnC,YAAM,SAAS;AACf,UAAI,KAAK,IAAI,KAAK,IAAI,OAAQ,QAAO,GAAG,KAAK;AAE7C,YAAM,QAAQ,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAE7D,UACE,IAAI,IACJ,MAAM;AAER,SAAG;AACD,eAAO;AACP,UAAE;AAAA,MACJ,SAAS,KAAK,IAAI,GAAG,KAAK,UAAU,IAAI,MAAM,SAAS;AAEvD,aAAO,IAAI,QAAQ,CAAC,IAAI,MAAM,CAAC;AAAA,IACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,QAAQ,MAAc;AACpB,aAAO,MAAM,KAAK,SAAS,iBAAiB,QAAQ,CAAC,EAClD,IAAI,CAAC,QAAQ,OAAO,WAAW,iBAAiB,GAAG,EAAE,MAAM,CAAC,EAC5D,OAAO,CAAC,SAAS,MAAO,IAAI,UAAU,IAAI,SAAU,CAAC;AAAA,IAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,aAAa,CAAC,UAAoC,UAAU,IAAI,QAAQ;AAAA,EAE1E;AAKJ,YAAU,eAAeD,eAAaC,QAAM;;;ACzI5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAlBA,MAkBGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMV,sBAAsB,CAAC,WAA2B;AAEhD,YAAM,QAAQ,OAAO,MAAM,GAAG;AAC9B,UAAI,MAAM,SAAS,EAAG,QAAO;AAC7B,YAAM,QAAQ,MAAM,CAAC,EAAG,MAAM,GAAG,EAAE,CAAC;AACpC,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,IAAI,MAAM,MAAM,GAAG,GAAG,IAAI,OAAO,WAAW,EAAE,CAAC,KAAK,GAAG,GAAG,IAAI,OAAO,WAAW,EAAE,CAAC,KAAK,GAAG,GAAG,QAAQ,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AACnI,aAAO;AAAA,IACT;AAAA,EACF;AAKA,YAAU,eAAeD,eAAaC,QAAM;;;ACrC5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAGA,MAAM,mBAA+D,oBAAI,IAAI;AAE7E,MAAMC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMb,KAAK,CAAC,OAAe,aAA6C;AAChE,UAAI,CAAC,iBAAiB,IAAI,KAAK,GAAG;AAChC,yBAAiB,IAAI,OAAO,oBAAI,IAAI,CAAC;AAAA,MACvC;AACA,uBAAiB,IAAI,KAAK,EAAG,IAAI,QAAQ;AAAA,IAC3C;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,CAAC,OAAe,aAA6C;AAC/D,MAAAA,SAAO,IAAI,OAAO,QAAQ;AAAA,IAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,CAAC,UAAkB,SAAsB;AAC7C,YAAM,YAAY,iBAAiB,IAAI,KAAK;AAC5C,UAAI,WAAW;AACb,kBAAU,QAAQ,cAAY;AAC5B,cAAI;AACF,qBAAS,GAAG,IAAI;AAAA,UAClB,SAAS,OAAO;AACd,oBAAQ,MAAM,wCAAwC,KAAK,MAAM,KAAK;AAAA,UACxE;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,QAAQ,CAAC,UAAwB;AAC/B,uBAAiB,OAAO,KAAK;AAAA,IAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,KAAK,CAAC,OAAe,aAA6C;AAChE,YAAM,YAAY,iBAAiB,IAAI,KAAK;AAC5C,UAAI,WAAW;AACb,kBAAU,OAAO,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,MAAY;AACjB,uBAAiB,MAAM;AAAA,IACzB;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAM,MAAgB;AACpB,aAAO,MAAM,KAAK,iBAAiB,KAAK,CAAC;AAAA,IAC3C;AAAA,EACF;AAEA,YAAU,eAAeD,eAAaC,QAAM;;;ACvI5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAzDA,MAyDGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMN,IAAI,CAAC,MAAmB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAS/B,WAAW,CAAC,MAAoB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAS7C,QAAQ,CAAC,MAAkC,CAAC,MAAoB,CAAC,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASpE,QAAQ,CAAC,QAAsB;AAC7B,UAAI,CAAC,OAAO,IAAI,UAAU,KAAM,QAAO;AACvC,aAAO,QAAQ,MAAM,OAAO;AAAA,IAC9B;AAAA,EACF;AAKJ,YAAU,eAAeD,eAAaC,QAAM;;;ACpG5C,MAAMC,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAzDA,MAyDGC,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,eAAe,MAAY;AACzB,UAAI,OAAO,WAAW,eAAe,OAAO,iBAAiB,YAAa;AAC1E,YAAM,cAAc,aAAa,KAAK,SAAS,QAAQ,EAAE,QAAQ,MAAM,EAAE,CAAC,IAAIC,QAAO,MAAM;AACzF,cAAM,QAAQ;AAAA,UACZ,QAAQ,EAAE,GAAG,OAAO,SAAS,GAAG,OAAO,QAAQ;AAAA,UAC/C,QAAQ,MAAM,KAAK,SAAS,iBAAiB,yBAAyB,CAAC,EACpE,OAAO,QAAM;AACZ,kBAAM,OAAQ,GAAwB;AACtC,mBAAO,SAAS,cAAc,CAAC,GAAG,aAAa,cAAc,KAAK,GAAG,aAAa,cAAc,MAAM;AAAA,UACxG,CAAC,EACA,IAAI,SAAO;AAAA,YACV,IAAI,GAAG;AAAA,YACP,MAAO,GAAW;AAAA,YAClB,OAAQ,GAAW;AAAA,UACrB,EAAE;AAAA,QACN;AACA,qBAAa,QAAQ,aAAa,KAAK,UAAU,KAAK,CAAC;AAAA,MACzD,GAAGC,WAAU,MAAM;AACjB,cAAM,MAAM,aAAa,QAAQ,WAAW;AAC5C,YAAI,CAAC,IAAK;AACV,YAAI;AACF,gBAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,iBAAO,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;AAC9C,gBAAM,OAAO,QAAQ,CAAC,UAAe;AACnC,kBAAM,KAAM,MAAM,KAAK,SAAS,eAAe,MAAM,EAAE,IAAI,SAAS,cAAc,UAAU,MAAM,IAAI,IAAI;AAC1G,gBAAI,GAAI,IAAG,QAAQ,MAAM;AAAA,UAC3B,CAAC;AAAA,QACH,SAAS,IAAI;AACX,kBAAQ,KAAK,6CAA6C;AAAA,QAC5D;AAAA,MACF;AACA,aAAO,iBAAiB,gBAAgBD,KAAI;AAC5C,MAAAC,SAAQ;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAKA,KAAK,CAAC,OAAO,SAAS;AACpB,UAAI,OAAO,aAAa,YAAa;AACrC,UAAI,UAAU,SAAS,eAAe,sBAAsB;AAC5D,UAAI,CAAC,MAAM;AACT,iBAAS,OAAO;AAChB;AAAA,MACF;AAEA,UAAI,CAAC,SAAS;AACZ,kBAAU,SAAS,cAAc,KAAK;AACtC,gBAAQ,KAAK;AACb,eAAO,OAAO,QAAQ,OAAO;AAAA,UAC3B,UAAU;AAAA,UACV,KAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,eAAe;AAAA,UACf,WAAW;AAAA,UACX,QAAQ;AAAA,QACV,CAAC;AACD,iBAAS,KAAK,YAAY,OAAO;AAAA,MACnC;AAEA,UAAI,SAAS,GAAG,WAAW,YAAY,IAAI;AAC3C,YAAM,SAAS,MAAM;AACnB,YAAI,CAAC,SAAS,eAAe,sBAAsB,EAAG;AACtD;AACA,cAAM,MAAM,YAAY,IAAI;AAC5B,YAAI,OAAO,WAAW,KAAM;AAC1B,gBAAM,MAAM,KAAK,MAAO,SAAS,OAAS,MAAM,SAAS,GAAG,MAAO,YAAoB,SAAS,WAAW,KAAK,MAAO,YAAoB,OAAO,iBAAiB,OAAO,CAAC,OAAO;AAClL,kBAAS,YAAY,QAAQ,GAAG,GAAG,GAAG;AACtC,mBAAS;AACT,qBAAW;AAAA,QACb;AACA,8BAAsB,MAAM;AAAA,MAC9B;AACA,4BAAsB,MAAM;AAAA,IAC9B;AAAA;AAAA;AAAA;AAAA,IAKA,UAAU,CAAC,SAAS,SAAS;AAC3B,UAAI,OAAO,aAAa,YAAa;AACrC,UAAI,UAAU,SAAS,eAAe,yBAAyB;AAC/D,UAAI,CAAC,QAAQ;AACX,iBAAS,OAAO;AAChB;AAAA,MACF;AAEA,UAAI,CAAC,SAAS;AACZ,kBAAU,SAAS,cAAc,OAAO;AACxC,gBAAQ,KAAK;AACb,gBAAQ,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAMpB,iBAAS,KAAK,YAAY,OAAO;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAEA,YAAU,eAAeH,eAAaC,QAAM;;;ACzK5C,MAAMG,gBAA2B;AAAA,IAC/B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,MACV;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,KAAK;AAAA,QACL,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAIA,MAAI,gBAAgB;AAApB,MAA2B,iBAAiB;AAC5C,MAAMC,WAAS;AAAA;AAAA;AAAA;AAAA,IAIb,aAAa,MAAM;AACjB;AAAE,MAAC,OAAe,oBAAoB,IAAI;AAI1C,eAAS,OAAO,eAAe;AAC/B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,gBAAgB,MAAM;AACpB,aACE,OAAO,yBACN,OAAe,6BAA6B,KAC5C,OAAe,0BAA0B,KACzC,OAAe,wBAAwB,KACvC,OAAe,yBAAyB,MACxC,CAAC,aAAkB;AAClB,eAAO,WAAW,UAAU,MAAO,GAAG;AAAA,MACxC;AAAA,IAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,QAAQ,CACN;AAAA,MACE;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,MAOS;AAET,YAAM,iBAAiB,eAAe,SAAY,aAAa,SAC7D,gBAAgB,cAAc,SAAY,YAAY,SACtD,QAAQ,aACJ,aACA,SAAS,gBAAgB,cACvB,SAAS,gBAAgB,cACzB,OAAO,OACb,SAAS,cACL,cACA,SAAS,gBAAgB,eACvB,SAAS,gBAAgB,eACzB,OAAO,QACb,aAAa,QAAQ,OAAO,YAC5B,QAAQ,QAAQ,KAAK,IAAI,aAAa,gBACtC,OAAO,SAAS,KAAK,IAAI,aAAa,eACtC,YAAY;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA;AAAA,gBAEQ,IAAI,UAAU;AAAA,iBACb,IAAI,UAAU;AAAA,cACjB,GAAG;AAAA,eACF,IAAI;AAAA;AAAA,MAEb;AAEF,gBAAU,MAAM,WAAW,MAAM;AACjC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,gBAAgB,CAAC,WAA0B;AACzC,YAAM,MAAM,4DACV,uBAAuB,CAAC,UAA6B;AACnD,cAAM,eAAe;AACrB,eAAO;AAAA,MACT,GAAG,YAAY,SAAS,SAAS,cAAc,MAAM,IAAI;AAC3D,UAAI,WAAW;AACb,kBAAU;AAAA,UACR;AAAA,UACA,MAAM;AACJ,gBAAK,UAA+B,UAAU,IAAI;AAChD,8BAAgB;AAChB,+BAAiB,gBAAgB,sBAAsB,EAAE,SAAS,KAAK,CAAC;AAAA,YAC1E,OAAO;AACL,8BAAgB;AAChB,kCAAoB,gBAAgB,sBAAsB,EAAE,SAAS,KAAK,CAAC;AAAA,YAC7E;AACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAKA,UAAI,mBAAmB,OAAO;AAC5B,iBAAS,KAAK;AAAA,UACZ;AAAA,UACA,CAAC,UAAsB;AACrB,kBAAM,cAAc,MAAM;AAC1B,gBAAI,eAAe,YAAY,QAAQ,YAAY,MAAM,OAAO;AAC9D,kBAAI,kBAAkB,MAAM;AAG1B,sBAAM,SAAS,QAAQ,GAAG;AAC1B,oBAAI,WAAW,MAAM;AACnB,kCAAgB;AAChB;AAAA,gBACF;AACA,sBAAM,eAAe;AAAA,cACvB;AAAA,YACF;AACA;AAAA,UACF;AAAA,QACF;AACA,yBAAiB;AAAA,MACnB;AAIA;AAAA,QACE;AAAA,QACA,CAAC,UAAyB;AACxB,cAAI,kBAAkB,MAAM;AAC1B,kBAAM,SAAS,QAAQ,GAAG;AAC1B,gBAAI,WAAW,MAAM;AACnB,8BAAgB;AAChB;AAAA,YACF;AAEA,kBAAM,yBAAyB;AAC/B,kBAAM,eAAe;AACrB;AAAA,UACF;AAEA;AAAA,QACF;AAAA,MACF;AAIA,uBAAiB,CAAC,UAA6B;AAC7C,YAAI,kBAAkB,MAAM;AAC1B,gBAAM,eAAe;AACrB,iBAAQ,MAAM,cAAc;AAAA,QAC9B;AACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,OAAO,CAAC,IAAS,UAAU,OAAO,QAAgB;AAChD,iBAAW,MAAM;AACf,YAAI,CAAC,EAAG;AAER,YAAI,IAAS,EAAE;AAEf,YAAI,GAAG;AACL,gBAAM,IAAI,EAAE;AACZ,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC7B,kBAAM,IAAI,EAAE,CAAC,EAAE;AACf,gBAAI,OAAO,EAAE,CAAC,MAAM,YAAY;AAC9B,gBAAE,CAAC,IAAI;AAAA,YACT;AACA,gBAAI,OAAO,EAAE,CAAC,MAAM,aAAa;AAC/B,gBAAE,CAAC,IAAI;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAEA,YAAI,EAAE;AAEN,YAAI,GAAG;AACL,gBAAM,IAAI,EAAE;AACZ,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC7B,qBAAS,MAAM,EAAE,WAAW,CAAC,CAAC;AAAA,UAChC;AAAA,QACF;AACA;AAAA,MACF,GAAG,IAAI;AAEP;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,eAAe,MAAY;AACzB;AAAA,QACE;AAAA,QACA,CAAC,MAAkB;AACjB,cAAI,EAAE,QAAS,GAAE,eAAe;AAChC;AAAA,QACF;AAAA,QACA,EAAE,SAAS,MAAM;AAAA,MACnB;AAEA;AAAA,QACE;AAAA,QACA,CAAC,MAAqB;AACpB,gBAAM,MAAM,SAAS,MAAM,KAAK,CAAC;AACjC,cAAI,CAAC,KAAK,KAAK,GAAG,EAAE,SAAS,IAAI,GAAG,KAAK,IAAI,KAAM,GAAE,eAAe;AACpE;AAAA,QACF;AAAA,MACF;AAEA;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,SAAS,CAAC,UAAU,QAAQ,OAAO,MAAc;AAC/C,UAAI,OAAO,EAAG,QAAO;AACrB,YAAM,KAAK,SAAS,cAAc,OAAO;AACzC,UAAI,GAAI,IAAG,MAAM,OAAO,OAAO,IAAI;AACnC,aAAO,mBAAmB,OAAO,GAAG,WAAW,IAAI;AAAA,IACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,SAAS,CAAC,UAAU,WAAmB;AACrC,YAAM,KAAK,SAAS,cAAc,OAAO;AACzC,aAAO,OAAO,IAAI,MAAM,QAAQ,CAAC;AAAA,IACnC;AAAA,EAEF;AAIA,YAAU,eAAeD,eAAaC,QAAM;;;AC9T5C,MAAM,YAAY,YAAY,MAAM;AAElC,UAAM,QAAQ,UAAU,QAAQ,KAAK,GACnC,aAAuB,CAAC;AAE1B,QAAI,CAAC,MAAO;AAEZ,UAAM;AAAA,MACJ,CAAC,MAAuB;AACtB,mBAAW,KAAK,EAAE,GAAG;AACrB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,aAAS,MAAM,UAAU;AAEzB,QAAI,WAAY,eAAc,SAAS;AAAA,EACzC,GAAG,GAAI;AAKP,SAAO,kBAAkB,QAAQ;AACjC,SAAO,KAAK,QAAQ;AAEpB,MAAO,gBAAQ;",
|
|
6
|
-
"names": ["CryptoJS", "Math", "undefined", "crypto", "CryptoJS", "undefined", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "Math", "CryptoJS", "CryptoJS", "Math", "n", "H", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "Math", "CryptoJS", "Math", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "undefined", "CBC", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "CryptoJS", "undefined", "CryptoJS", "SUB_MIX_0", "SUB_MIX_1", "SUB_MIX_2", "SUB_MIX_3", "SBOX", "CryptoJS", "CryptoJS", "CryptoJS", "C", "CryptoJS", "C", "CryptoJS", "CryptoJS", "description", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "helper", "description", "newObj", "description", "newObj", "el", "e", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "escape", "description", "newObj", "description", "newObj", "description", "newObj", "save", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "obj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "sc", "description", "newObj", "CryptoJS", "ulid", "description", "newObj", "list", "description", "newObj", "description", "newObj", "description", "newObj", "evt", "source1", "source2", "description", "newObj", "description", "newObj", "description", "newObj", "el", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "description", "newObj", "save", "restore", "description", "newObj"]
|
|
7
|
-
}
|