{
  "version": 3,
  "sources": ["../../../node_modules/ace-builds/src-noconflict/ace.js", "../../../node_modules/ace-builds/src-noconflict/mode-html.js", "../javascripts/main.js", "../javascripts/events.ts", "../javascripts/upload_size.js"],
  "sourcesContent": ["/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n    return;\n\n\nvar define = function(module, deps, payload) {\n    if (typeof module !== \"string\") {\n        if (define.original)\n            define.original.apply(this, arguments);\n        else {\n            console.error(\"dropping module because define wasn\\'t a string.\");\n            console.trace();\n        }\n        return;\n    }\n    if (arguments.length == 2)\n        payload = deps;\n    if (!define.modules[module]) {\n        define.payloads[module] = payload;\n        define.modules[module] = null;\n    }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n    if (typeof module === \"string\") {\n        var payload = lookup(parentId, module);\n        if (payload != undefined) {\n            callback && callback();\n            return payload;\n        }\n    } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n        var params = [];\n        for (var i = 0, l = module.length; i < l; ++i) {\n            var dep = lookup(parentId, module[i]);\n            if (dep == undefined && require.original)\n                return;\n            params.push(dep);\n        }\n        return callback && callback.apply(null, params) || true;\n    }\n};\n\nvar require = function(module, callback) {\n    var packagedModule = _require(\"\", module, callback);\n    if (packagedModule == undefined && require.original)\n        return require.original.apply(this, arguments);\n    return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = base + \"/\" + moduleName;\n\n        while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n    moduleName = normalizeModule(parentId, moduleName);\n\n    var module = define.modules[moduleName];\n    if (!module) {\n        module = define.payloads[moduleName];\n        if (typeof module === 'function') {\n            var exports = {};\n            var mod = {\n                id: moduleName,\n                uri: '',\n                exports: exports,\n                packaged: true\n            };\n\n            var req = function(module, callback) {\n                return _require(moduleName, module, callback);\n            };\n\n            var returnValue = module(req, exports, mod);\n            exports = returnValue || mod.exports;\n            define.modules[moduleName] = exports;\n            delete define.payloads[moduleName];\n        }\n        module = define.modules[moduleName] = exports || module;\n    }\n    return module;\n};\n\nfunction exportAce(ns) {\n    var root = global;\n    if (ns) {\n        if (!global[ns])\n            global[ns] = {};\n        root = global[ns];\n    }\n\n    if (!root.define || !root.define.packaged) {\n        define.original = root.define;\n        root.define = define;\n        root.define.packaged = true;\n    }\n\n    if (!root.require || !root.require.packaged) {\n        require.original = root.require;\n        root.require = require;\n        root.require.packaged = true;\n    }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n    Object.defineProperty(obj, name, {\n        value: val,\n        enumerable: false,\n        writable: true,\n        configurable: true\n    });\n}\nif (!String.prototype.startsWith) {\n    defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n        position = position || 0;\n        return this.lastIndexOf(searchString, position) === position;\n    });\n}\nif (!String.prototype.endsWith) {\n    defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n        var subjectString = this;\n        if (position === undefined || position > subjectString.length) {\n            position = subjectString.length;\n        }\n        position -= searchString.length;\n        var lastIndex = subjectString.indexOf(searchString, position);\n        return lastIndex !== -1 && lastIndex === position;\n    });\n}\nif (!String.prototype.repeat) {\n    defineProp(String.prototype, \"repeat\", function (count) {\n        var result = \"\";\n        var string = this;\n        while (count > 0) {\n            if (count & 1)\n                result += string;\n            if ((count >>= 1))\n                string += string;\n        }\n        return result;\n    });\n}\nif (!String.prototype.includes) {\n    defineProp(String.prototype, \"includes\", function (str, position) {\n        return this.indexOf(str, position) != -1;\n    });\n}\nif (!Object.assign) {\n    Object.assign = function (target) {\n        if (target === undefined || target === null) {\n            throw new TypeError(\"Cannot convert undefined or null to object\");\n        }\n        var output = Object(target);\n        for (var index = 1; index < arguments.length; index++) {\n            var source = arguments[index];\n            if (source !== undefined && source !== null) {\n                Object.keys(source).forEach(function (key) {\n                    output[key] = source[key];\n                });\n            }\n        }\n        return output;\n    };\n}\nif (!Object.values) {\n    Object.values = function (o) {\n        return Object.keys(o).map(function (k) {\n            return o[k];\n        });\n    };\n}\nif (!Array.prototype.find) {\n    defineProp(Array.prototype, \"find\", function (predicate) {\n        var len = this.length;\n        var thisArg = arguments[1];\n        for (var k = 0; k < len; k++) {\n            var kValue = this[k];\n            if (predicate.call(thisArg, kValue, k, this)) {\n                return kValue;\n            }\n        }\n    });\n}\nif (!Array.prototype.findIndex) {\n    defineProp(Array.prototype, \"findIndex\", function (predicate) {\n        var len = this.length;\n        var thisArg = arguments[1];\n        for (var k = 0; k < len; k++) {\n            var kValue = this[k];\n            if (predicate.call(thisArg, kValue, k, this)) {\n                return k;\n            }\n        }\n    });\n}\nif (!Array.prototype.includes) {\n    defineProp(Array.prototype, \"includes\", function (item, position) {\n        return this.indexOf(item, position) != -1;\n    });\n}\nif (!Array.prototype.fill) {\n    defineProp(Array.prototype, \"fill\", function (value) {\n        var O = this;\n        var len = O.length >>> 0;\n        var start = arguments[1];\n        var relativeStart = start >> 0;\n        var k = relativeStart < 0\n            ? Math.max(len + relativeStart, 0)\n            : Math.min(relativeStart, len);\n        var end = arguments[2];\n        var relativeEnd = end === undefined ? len : end >> 0;\n        var final = relativeEnd < 0\n            ? Math.max(len + relativeEnd, 0)\n            : Math.min(relativeEnd, len);\n        while (k < final) {\n            O[k] = value;\n            k++;\n        }\n        return O;\n    });\n}\nif (!Array.of) {\n    defineProp(Array, \"of\", function () {\n        return Array.prototype.slice.call(arguments);\n    });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/deep_copy\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = require(\"./deep_copy\").deepCopy;\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\nexports.sleep = function (ms) {\n    return new Promise(function (resolve) {\n        setTimeout(resolve, ms);\n    });\n};\nexports.supportsLookbehind = function () {\n    try {\n        new RegExp('(?<=.)');\n    }\n    catch (e) {\n        return false;\n    }\n    return true;\n};\nexports.skipEmptyMatch = function (line, last, supportsUnicodeFlag) {\n    return supportsUnicodeFlag && line.codePointAt(last) > 0xffff ? 2 : 1;\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.OS = {\n    LINUX: \"LINUX\",\n    MAC: \"MAC\",\n    WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function () {\n    if (exports.isMac) {\n        return exports.OS.MAC;\n    }\n    else if (exports.isLinux) {\n        return exports.OS.LINUX;\n    }\n    else {\n        return exports.OS.WINDOWS;\n    }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE =\n    (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n        ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n        : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window[\"opera\"]) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isSafari = parseFloat(ua.split(\" Safari/\")[1]) && !exports.isChrome || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window[\"MSStream\"];\nif (exports.isIOS)\n    exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n    if (typeof arr == \"string\" && arr) {\n        var txt = document.createTextNode(arr);\n        if (parent)\n            parent.appendChild(txt);\n        return txt;\n    }\n    if (!Array.isArray(arr)) {\n        if (arr && arr.appendChild && parent)\n            parent.appendChild(arr);\n        return arr;\n    }\n    if (typeof arr[0] != \"string\" || !arr[0]) {\n        var els = [];\n        for (var i = 0; i < arr.length; i++) {\n            var ch = buildDom(arr[i], parent, refs);\n            ch && els.push(ch);\n        }\n        return els;\n    }\n    var el = document.createElement(arr[0]);\n    var options = arr[1];\n    var childIndex = 1;\n    if (options && typeof options == \"object\" && !Array.isArray(options))\n        childIndex = 2;\n    for (var i = childIndex; i < arr.length; i++)\n        buildDom(arr[i], el, refs);\n    if (childIndex == 2) {\n        Object.keys(options).forEach(function (n) {\n            var val = options[n];\n            if (n === \"class\") {\n                el.className = Array.isArray(val) ? val.join(\" \") : val;\n            }\n            else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n                el[n] = val;\n            }\n            else if (n === \"ref\") {\n                if (refs)\n                    refs[val] = el;\n            }\n            else if (n === \"style\") {\n                if (typeof val == \"string\")\n                    el.style.cssText = val;\n            }\n            else if (val != null) {\n                el.setAttribute(n, val);\n            }\n        });\n    }\n    if (parent)\n        parent.appendChild(el);\n    return el;\n};\nexports.getDocumentHead = function (doc) {\n    if (!doc)\n        doc = document;\n    return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n    return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n    element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n    var classes = (el.className + \"\").split(/\\s+/g);\n    return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n    if (!exports.hasCssClass(el, name)) {\n        el.className += \" \" + name;\n    }\n};\nexports.removeCssClass = function (el, name) {\n    var classes = el.className.split(/\\s+/g);\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        classes.splice(index, 1);\n    }\n    el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n    var classes = el.className.split(/\\s+/g), add = true;\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        add = false;\n        classes.splice(index, 1);\n    }\n    if (add)\n        classes.push(name);\n    el.className = classes.join(\" \");\n    return add;\n};\nexports.setCssClass = function (node, className, include) {\n    if (include) {\n        exports.addCssClass(node, className);\n    }\n    else {\n        exports.removeCssClass(node, className);\n    }\n};\nexports.hasCssString = function (id, doc) {\n    var index = 0, sheets;\n    doc = doc || document;\n    if ((sheets = doc.querySelectorAll(\"style\"))) {\n        while (index < sheets.length) {\n            if (sheets[index++].id === id) {\n                return true;\n            }\n        }\n    }\n};\nexports.removeElementById = function (id, doc) {\n    doc = doc || document;\n    if (doc.getElementById(id)) {\n        doc.getElementById(id).remove();\n    }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n    strictCSP = value;\n    if (value == false)\n        insertPendingStyles();\n    else if (!cssCache)\n        cssCache = [];\n};\nfunction insertPendingStyles() {\n    var cache = cssCache;\n    cssCache = null;\n    cache && cache.forEach(function (item) {\n        importCssString(item[0], item[1]);\n    });\n}\nfunction importCssString(cssText, id, target) {\n    if (typeof document == \"undefined\")\n        return;\n    if (cssCache) {\n        if (target) {\n            insertPendingStyles();\n        }\n        else if (target === false) {\n            return cssCache.push([cssText, id]);\n        }\n    }\n    if (strictCSP)\n        return;\n    var container = target;\n    if (!target || !target.getRootNode) {\n        container = document;\n    }\n    else {\n        container = target.getRootNode();\n        if (!container || container == target)\n            container = document;\n    }\n    var doc = container.ownerDocument || container;\n    if (id && exports.hasCssString(id, container))\n        return null;\n    if (id)\n        cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n    var style = exports.createElement(\"style\");\n    style.appendChild(doc.createTextNode(cssText));\n    if (id)\n        style.id = id;\n    if (container == doc)\n        container = exports.getDocumentHead(doc);\n    container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n    exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.$fixPositionBug = function (el) {\n    var rect = el.getBoundingClientRect();\n    if (el.style.left) {\n        var target = parseFloat(el.style.left);\n        var result = +rect.left;\n        if (Math.abs(target - result) > 1) {\n            el.style.left = 2 * target - result + \"px\";\n        }\n    }\n    if (el.style.right) {\n        var target = parseFloat(el.style.right);\n        var result = window.innerWidth - rect.right;\n        if (Math.abs(target - result) > 1) {\n            el.style.right = 2 * target - result + \"px\";\n        }\n    }\n    if (el.style.top) {\n        var target = parseFloat(el.style.top);\n        var result = +rect.top;\n        if (Math.abs(target - result) > 1) {\n            el.style.top = 2 * target - result + \"px\";\n        }\n    }\n    if (el.style.bottom) {\n        var target = parseFloat(el.style.bottom);\n        var result = window.innerHeight - rect.bottom;\n        if (Math.abs(target - result) > 1) {\n            el.style.bottom = 2 * target - result + \"px\";\n        }\n    }\n};\nexports.scrollbarWidth = function (doc) {\n    var inner = exports.createElement(\"ace_inner\");\n    inner.style.width = \"100%\";\n    inner.style.minWidth = \"0px\";\n    inner.style.height = \"200px\";\n    inner.style.display = \"block\";\n    var outer = exports.createElement(\"ace_outer\");\n    var style = outer.style;\n    style.position = \"absolute\";\n    style.left = \"-10000px\";\n    style.overflow = \"hidden\";\n    style.width = \"200px\";\n    style.minWidth = \"0px\";\n    style.height = \"150px\";\n    style.display = \"block\";\n    outer.appendChild(inner);\n    var body = (doc && doc.documentElement) || (document && document.documentElement);\n    if (!body)\n        return 0;\n    body.appendChild(outer);\n    var noScrollbar = inner.offsetWidth;\n    style.overflow = \"scroll\";\n    var withScrollbar = inner.offsetWidth;\n    if (noScrollbar === withScrollbar) {\n        withScrollbar = outer.clientWidth;\n    }\n    body.removeChild(outer);\n    return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n    return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n    if (styles[property] !== value) {\n        styles[property] = value;\n    }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n    ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n    : true;\nif (useragent.isChromeOS)\n    exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n    var div = document.createElement(\"div\");\n    if (exports.HI_DPI && div.style.transform !== undefined)\n        exports.HAS_CSS_TRANSFORMS = true;\n    if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n        exports.HAS_CSS_ANIMATION = true;\n    div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n    exports.translate = function (element, tx, ty) {\n        element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n    };\n}\nelse {\n    exports.translate = function (element, tx, ty) {\n        element.style.top = Math.round(ty) + \"px\";\n        element.style.left = Math.round(tx) + \"px\";\n    };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n            callback(xhr.responseText);\n        }\n    };\n    xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n    var head = dom.getDocumentHead();\n    var s = document.createElement('script');\n    s.src = path;\n    head.appendChild(s);\n    s.onload = s.onreadystatechange = function (_, isAbort) {\n        if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n            s = s.onload = s.onreadystatechange = null;\n            if (!isAbort)\n                callback();\n        }\n    };\n};\nexports.qualifyURL = function (url) {\n    var a = document.createElement('a');\n    a.href = url;\n    return a.href;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/report_error\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.reportError = function reportError(msg, data) {\n    var e = new Error(msg);\n    e[\"data\"] = data;\n    if (typeof console == \"object\" && console.error)\n        console.error(e);\n    setTimeout(function () { throw e; });\n};\n\n});\n\nace.define(\"ace/lib/default_english_messages\",[\"require\",\"exports\",\"module\"], function(require, exports, module){var defaultEnglishMessages = {\n    \"autocomplete.popup.aria-roledescription\": \"Autocomplete suggestions\",\n    \"autocomplete.popup.aria-label\": \"Autocomplete suggestions\",\n    \"autocomplete.popup.item.aria-roledescription\": \"item\",\n    \"autocomplete.loading\": \"Loading...\",\n    \"editor.scroller.aria-roledescription\": \"editor\",\n    \"editor.scroller.aria-label\": \"Editor content, press Enter to start editing, press Escape to exit\",\n    \"editor.gutter.aria-roledescription\": \"editor gutter\",\n    \"editor.gutter.aria-label\": \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\",\n    \"error-marker.good-state\": \"Looks good!\",\n    \"prompt.recently-used\": \"Recently used\",\n    \"prompt.other-commands\": \"Other commands\",\n    \"prompt.no-matching-commands\": \"No matching commands\",\n    \"search-box.find.placeholder\": \"Search for\",\n    \"search-box.find-all.text\": \"All\",\n    \"search-box.replace.placeholder\": \"Replace with\",\n    \"search-box.replace-next.text\": \"Replace\",\n    \"search-box.replace-all.text\": \"All\",\n    \"search-box.toggle-replace.title\": \"Toggle Replace mode\",\n    \"search-box.toggle-regexp.title\": \"RegExp Search\",\n    \"search-box.toggle-case.title\": \"CaseSensitive Search\",\n    \"search-box.toggle-whole-word.title\": \"Whole Word Search\",\n    \"search-box.toggle-in-selection.title\": \"Search In Selection\",\n    \"search-box.search-counter\": \"$0 of $1\",\n    \"text-input.aria-roledescription\": \"editor\",\n    \"text-input.aria-label\": \"Cursor at row $0\",\n    \"gutter.code-folding.range.aria-label\": \"Toggle code folding, rows $0 through $1\",\n    \"gutter.code-folding.closed.aria-label\": \"Toggle code folding, rows $0 through $1\",\n    \"gutter.code-folding.open.aria-label\": \"Toggle code folding, row $0\",\n    \"gutter.code-folding.closed.title\": \"Unfold code\",\n    \"gutter.code-folding.open.title\": \"Fold code\",\n    \"gutter.annotation.aria-label.error\": \"Error, read annotations row $0\",\n    \"gutter.annotation.aria-label.warning\": \"Warning, read annotations row $0\",\n    \"gutter.annotation.aria-label.info\": \"Info, read annotations row $0\",\n    \"inline-fold.closed.title\": \"Unfold code\",\n    \"gutter-tooltip.aria-label.error.singular\": \"error\",\n    \"gutter-tooltip.aria-label.error.plural\": \"errors\",\n    \"gutter-tooltip.aria-label.warning.singular\": \"warning\",\n    \"gutter-tooltip.aria-label.warning.plural\": \"warnings\",\n    \"gutter-tooltip.aria-label.info.singular\": \"information message\",\n    \"gutter-tooltip.aria-label.info.plural\": \"information messages\",\n    \"gutter.annotation.aria-label.security\": \"Security finding, read annotations row $0\",\n    \"gutter.annotation.aria-label.hint\": \"Suggestion, read annotations row $0\",\n    \"gutter-tooltip.aria-label.security.singular\": \"security finding\",\n    \"gutter-tooltip.aria-label.security.plural\": \"security findings\",\n    \"gutter-tooltip.aria-label.hint.singular\": \"suggestion\",\n    \"gutter-tooltip.aria-label.hint.plural\": \"suggestions\",\n    \"editor.tooltip.disable-editing\": \"Editing is disabled\"\n};\nexports.defaultEnglishMessages = defaultEnglishMessages;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\",\"ace/lib/default_english_messages\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\nvar defaultEnglishMessages = require(\"./default_english_messages\").defaultEnglishMessages;\nvar optionsProvider = {\n    setOptions: function (optList) {\n        Object.keys(optList).forEach(function (key) {\n            this.setOption(key, optList[key]);\n        }, this);\n    },\n    getOptions: function (optionNames) {\n        var result = {};\n        if (!optionNames) {\n            var options = this.$options;\n            optionNames = Object.keys(options).filter(function (key) {\n                return !options[key].hidden;\n            });\n        }\n        else if (!Array.isArray(optionNames)) {\n            optionNames = Object.keys(optionNames);\n        }\n        optionNames.forEach(function (key) {\n            result[key] = this.getOption(key);\n        }, this);\n        return result;\n    },\n    setOption: function (name, value) {\n        if (this[\"$\" + name] === value)\n            return;\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n        if (!opt.handlesSet)\n            this[\"$\" + name] = value;\n        if (opt && opt.set)\n            opt.set.call(this, value);\n    },\n    getOption: function (name) {\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n        return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n    }\n};\nfunction warn(message) {\n    if (typeof console != \"undefined\" && console.warn)\n        console.warn.apply(console, arguments);\n}\nvar messages;\nvar nlsPlaceholders;\nvar AppConfig = /** @class */ (function () {\n    function AppConfig() {\n        this.$defaultOptions = {};\n        messages = defaultEnglishMessages;\n        nlsPlaceholders = \"dollarSigns\";\n    }\n    AppConfig.prototype.defineOptions = function (obj, path, options) {\n        if (!obj.$options)\n            this.$defaultOptions[path] = obj.$options = {};\n        Object.keys(options).forEach(function (key) {\n            var opt = options[key];\n            if (typeof opt == \"string\")\n                opt = { forwardTo: opt };\n            opt.name || (opt.name = key);\n            obj.$options[opt.name] = opt;\n            if (\"initialValue\" in opt)\n                obj[\"$\" + opt.name] = opt.initialValue;\n        });\n        oop.implement(obj, optionsProvider);\n        return this;\n    };\n    AppConfig.prototype.resetOptions = function (obj) {\n        Object.keys(obj.$options).forEach(function (key) {\n            var opt = obj.$options[key];\n            if (\"value\" in opt)\n                obj.setOption(key, opt.value);\n        });\n    };\n    AppConfig.prototype.setDefaultValue = function (path, name, value) {\n        if (!path) {\n            for (path in this.$defaultOptions)\n                if (this.$defaultOptions[path][name])\n                    break;\n            if (!this.$defaultOptions[path][name])\n                return false;\n        }\n        var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n        if (opts[name]) {\n            if (opts.forwardTo)\n                this.setDefaultValue(opts.forwardTo, name, value);\n            else\n                opts[name].value = value;\n        }\n    };\n    AppConfig.prototype.setDefaultValues = function (path, optionHash) {\n        Object.keys(optionHash).forEach(function (key) {\n            this.setDefaultValue(path, key, optionHash[key]);\n        }, this);\n    };\n    AppConfig.prototype.setMessages = function (value, options) {\n        messages = value;\n        if (options && options.placeholders) {\n            nlsPlaceholders = options.placeholders;\n        }\n    };\n    AppConfig.prototype.nls = function (key, defaultString, params) {\n        if (!messages[key]) {\n            warn(\"No message found for the key '\" + key + \"' in messages with id \" + messages.$id + \", trying to find a translation for the default string '\" + defaultString + \"'.\");\n            if (!messages[defaultString]) {\n                warn(\"No message found for the default string '\" + defaultString + \"' in the provided messages. Falling back to the default English message.\");\n            }\n        }\n        var translated = messages[key] || messages[defaultString] || defaultString;\n        if (params) {\n            if (nlsPlaceholders === \"dollarSigns\") {\n                translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, dollarMatch) {\n                    if (dollarMatch == \"$\")\n                        return \"$\";\n                    return params[dollarMatch];\n                });\n            }\n            if (nlsPlaceholders === \"curlyBrackets\") {\n                translated = translated.replace(/\\{([^\\}]+)\\}/g, function (_, curlyBracketMatch) {\n                    return params[curlyBracketMatch];\n                });\n            }\n        }\n        return translated;\n    };\n    return AppConfig;\n}());\nAppConfig.prototype.warn = warn;\nAppConfig.prototype.reportError = reportError;\noop.implement(AppConfig.prototype, EventEmitter);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n  background: #f0f0f0;\\n  color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n    background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n  background-color: #FFFFFF;\\n  color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n  color: black;\\n}\\n        \\n.ace-tm .ace_invisible {\\n  color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n  color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n  color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n  color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n  color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n  background-color: rgba(255, 0, 0, 0.1);\\n  color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n  color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n  color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n  color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n  color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n  color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n  color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n  color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n  color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n  color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n  color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n  color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n  color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n  color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n  color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n  color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n  background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n  background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n  background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n  background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n    background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n  background: rgb(250, 250, 255);\\n  border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n    packaged: false,\n    workerPath: null,\n    modePath: null,\n    themePath: null,\n    basePath: \"\",\n    suffix: \".js\",\n    $moduleUrls: {},\n    loadWorkerFromBlob: true,\n    sharedPopups: false,\n    useStrictCSP: null\n};\nexports.get = function (key) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n    return options[key];\n};\nexports.set = function (key, value) {\n    if (options.hasOwnProperty(key))\n        options[key] = value;\n    else if (this.setDefaultValue(\"\", key, value) == false)\n        throw new Error(\"Unknown config key: \" + key);\n    if (key == \"useStrictCSP\")\n        dom.useStrictCSP(value);\n};\nexports.all = function () {\n    return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n    if (options.$moduleUrls[name])\n        return options.$moduleUrls[name];\n    var parts = name.split(\"/\");\n    component = component || parts[parts.length - 2] || \"\";\n    var sep = component == \"snippets\" ? \"/\" : \"-\";\n    var base = parts[parts.length - 1];\n    if (component == \"worker\" && sep == \"-\") {\n        var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n        base = base.replace(re, \"\");\n    }\n    if ((!base || base == component) && parts.length > 1)\n        base = parts[parts.length - 2];\n    var path = options[component + \"Path\"];\n    if (path == null) {\n        path = options.basePath;\n    }\n    else if (sep == \"/\") {\n        component = sep = \"\";\n    }\n    if (path && path.slice(-1) != \"/\")\n        path += \"/\";\n    return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n    return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n    if (moduleName === \"ace/theme/textmate\" || moduleName === \"./theme/textmate\")\n        return cb(null, require(\"./theme/textmate\"));\n    if (customLoader)\n        return customLoader(moduleName, cb);\n    console.error(\"loader is not configured\");\n};\nvar customLoader;\nexports.setLoader = function (cb) {\n    customLoader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.$loaded = {};\nexports.loadModule = function (moduleId, onLoad) {\n    var loadedModule;\n    if (Array.isArray(moduleId)) {\n        var moduleType = moduleId[0];\n        var moduleName = moduleId[1];\n    }\n    else if (typeof moduleId == \"string\") {\n        var moduleName = moduleId;\n    }\n    var load = function (module) {\n        if (module && !exports.$loading[moduleName])\n            return onLoad && onLoad(module);\n        if (!exports.$loading[moduleName])\n            exports.$loading[moduleName] = [];\n        exports.$loading[moduleName].push(onLoad);\n        if (exports.$loading[moduleName].length > 1)\n            return;\n        var afterLoad = function () {\n            loader(moduleName, function (err, module) {\n                if (module)\n                    exports.$loaded[moduleName] = module;\n                exports._emit(\"load.module\", { name: moduleName, module: module });\n                var listeners = exports.$loading[moduleName];\n                exports.$loading[moduleName] = null;\n                listeners.forEach(function (onLoad) {\n                    onLoad && onLoad(module);\n                });\n            });\n        };\n        if (!exports.get(\"packaged\"))\n            return afterLoad();\n        net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n        reportErrorIfPathIsNotConfigured();\n    };\n    if (exports.dynamicModules[moduleName]) {\n        exports.dynamicModules[moduleName]().then(function (module) {\n            if (module.default) {\n                load(module.default);\n            }\n            else {\n                load(module);\n            }\n        });\n    }\n    else {\n        try {\n            loadedModule = this.$require(moduleName);\n        }\n        catch (e) { }\n        load(loadedModule || exports.$loaded[moduleName]);\n    }\n};\nexports.$require = function (moduleName) {\n    if (typeof module[\"require\"] == \"function\") {\n        var req = \"require\";\n        return module[req](moduleName);\n    }\n};\nexports.setModuleLoader = function (moduleName, onLoad) {\n    exports.dynamicModules[moduleName] = onLoad;\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n    if (!options.basePath && !options.workerPath\n        && !options.modePath && !options.themePath\n        && !Object.keys(options.$moduleUrls).length) {\n        console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n        reportErrorIfPathIsNotConfigured = function () { };\n    }\n};\nexports.version = \"1.44.0\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n    require([moduleName], function(module) {\n        cb(null, module);\n    });\n});\n\nvar global = (function() {\n    return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n    config.init = init;\n    config.$require = require;\n    ace.require = require;\n\n    if (typeof define === \"function\")\n        ace.define = define;\n};\ninit(true);function init(packaged) {\n\n    if (!global || !global.document)\n        return;\n    \n    config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n    var scriptOptions = {};\n    var scriptUrl = \"\";\n    var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n    var currentDocument = currentScript && currentScript.ownerDocument || document;\n    \n    if (currentScript && currentScript.src) {\n        scriptUrl = currentScript.src.split(/[?#]/)[0].split(\"/\").slice(0, -1).join(\"/\") || \"\";\n    }\n    \n    var scripts = currentDocument.getElementsByTagName(\"script\");\n    for (var i=0; i<scripts.length; i++) {\n        var script = scripts[i];\n\n        var src = script.src || script.getAttribute(\"src\");\n        if (!src)\n            continue;\n\n        var attributes = script.attributes;\n        for (var j=0, l=attributes.length; j < l; j++) {\n            var attr = attributes[j];\n            if (attr.name.indexOf(\"data-ace-\") === 0) {\n                scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n            }\n        }\n\n        var m = src.match(/^(.*)\\/ace([\\-.]\\w+)?\\.js(\\?|$)/);\n        if (m)\n            scriptUrl = m[1];\n    }\n\n    if (scriptUrl) {\n        scriptOptions.base = scriptOptions.base || scriptUrl;\n        scriptOptions.packaged = true;\n    }\n\n    scriptOptions.basePath = scriptOptions.base;\n    scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n    scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n    scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n    delete scriptOptions.base;\n\n    for (var key in scriptOptions)\n        if (typeof scriptOptions[key] !== \"undefined\")\n            config.set(key, scriptOptions[key]);\n}\n\nfunction deHyphenate(str) {\n    return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Range = /** @class */ (function () {\n    function Range(startRow, startColumn, endRow, endColumn) {\n        this.start = {\n            row: startRow,\n            column: startColumn\n        };\n        this.end = {\n            row: endRow,\n            column: endColumn\n        };\n    }\n    Range.prototype.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    Range.prototype.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    Range.prototype.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    Range.prototype.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    Range.prototype.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    Range.prototype.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    Range.prototype.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    Range.prototype.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    Range.prototype.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    Range.prototype.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    Range.prototype.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    Range.prototype.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    Range.prototype.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    Range.prototype.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    Range.prototype.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    Range.prototype.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    Range.prototype.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    Range.prototype.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    Range.prototype.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    Range.prototype.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    Range.prototype.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    Range.prototype.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    Range.prototype.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    Range.prototype.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    Range.prototype.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    Range.prototype.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n    return Range;\n}());\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = {\n    MODIFIER_KEYS: {\n        16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n        91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n    },\n    KEY_MODS: {\n        \"ctrl\": 1, \"alt\": 2, \"option\": 2, \"shift\": 4,\n        \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8,\n        \"control\": 1\n    },\n    FUNCTION_KEYS: {\n        8: \"Backspace\",\n        9: \"Tab\",\n        13: \"Return\",\n        19: \"Pause\",\n        27: \"Esc\",\n        32: \"Space\",\n        33: \"PageUp\",\n        34: \"PageDown\",\n        35: \"End\",\n        36: \"Home\",\n        37: \"Left\",\n        38: \"Up\",\n        39: \"Right\",\n        40: \"Down\",\n        44: \"Print\",\n        45: \"Insert\",\n        46: \"Delete\",\n        '-13': \"NumpadEnter\",\n        144: \"Numlock\",\n        145: \"Scrolllock\"\n    },\n    PRINTABLE_KEYS: {\n        32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.',\n        186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n        219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n    }\n};\nvar codeToKeyCode = {\n    Command: 224,\n    Backspace: 8,\n    Tab: 9,\n    Return: 13,\n    Enter: 13,\n    Pause: 19,\n    Escape: 27,\n    PageUp: 33,\n    PageDown: 34,\n    End: 35,\n    Home: 36,\n    Insert: 45,\n    Delete: 46,\n    ArrowLeft: 37,\n    ArrowUp: 38,\n    ArrowRight: 39,\n    ArrowDown: 40,\n    Backquote: 192,\n    Minus: 189,\n    Equal: 187,\n    BracketLeft: 219,\n    Backslash: 220,\n    BracketRight: 221,\n    Semicolon: 186,\n    Quote: 222,\n    Comma: 188,\n    Period: 190,\n    Slash: 191,\n    Space: 32,\n    NumpadAdd: 107,\n    NumpadDecimal: 110,\n    NumpadSubtract: 109,\n    NumpadDivide: 111,\n    NumpadMultiply: 106\n};\nfor (var i = 0; i < 10; i++) {\n    codeToKeyCode[\"Digit\" + i] = 48 + i;\n    codeToKeyCode[\"Numpad\" + i] = 96 + i;\n    Keys.PRINTABLE_KEYS[48 + i] = \"\" + i;\n    Keys.FUNCTION_KEYS[96 + i] = \"Numpad\" + i;\n}\nfor (var i = 65; i < 91; i++) {\n    var chr = String.fromCharCode(i + 32);\n    codeToKeyCode[\"Key\" + chr.toUpperCase()] = i;\n    Keys.PRINTABLE_KEYS[i] = chr;\n}\nfor (var i = 1; i < 13; i++) {\n    codeToKeyCode[\"F\" + i] = 111 + i;\n    Keys.FUNCTION_KEYS[111 + i] = \"F\" + i;\n}\nvar modifiers = {\n    Shift: 16,\n    Control: 17,\n    Alt: 18,\n    Meta: 224\n};\nfor (var mod in modifiers) {\n    codeToKeyCode[mod] = codeToKeyCode[mod + \"Left\"]\n        = codeToKeyCode[mod + \"Right\"] = modifiers[mod];\n}\nexports.$codeToKeyCode = codeToKeyCode;\nKeys.PRINTABLE_KEYS[173] = '-';\nfor (var j in Keys.FUNCTION_KEYS) {\n    var name = Keys.FUNCTION_KEYS[j].toLowerCase();\n    Keys[name] = parseInt(j, 10);\n}\nfor (var j in Keys.PRINTABLE_KEYS) {\n    var name = Keys.PRINTABLE_KEYS[j].toLowerCase();\n    Keys[name] = parseInt(j, 10);\n}\noop.mixin(Keys, Keys.MODIFIER_KEYS);\noop.mixin(Keys, Keys.PRINTABLE_KEYS);\noop.mixin(Keys, Keys.FUNCTION_KEYS);\nKeys.enter = Keys[\"return\"];\nKeys.escape = Keys.esc;\nKeys.del = Keys[\"delete\"];\n(function () {\n    var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n    for (var i = Math.pow(2, mods.length); i--;) {\n        Keys.KEY_MODS[i] = mods.filter(function (x) {\n            return i & Keys.KEY_MODS[x];\n        }).join(\"-\") + \"-\";\n    }\n})();\nKeys.KEY_MODS[0] = \"\";\nKeys.KEY_MODS[-1] = \"input-\";\noop.mixin(exports, Keys);\nexports.default = exports;\nexports.keyCodeToString = function (keyCode) {\n    var keyString = Keys[keyCode];\n    if (typeof keyString != \"string\")\n        keyString = String.fromCharCode(keyCode);\n    return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\"; var keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\nvar pressedKeys = null;\nvar ts = 0;\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n    activeListenerOptions = false;\n    try {\n        document.createComment(\"\").addEventListener(\"test\", function () { }, {\n            get passive() {\n                activeListenerOptions = { passive: false };\n                return true;\n            }\n        });\n    }\n    catch (e) { }\n}\nfunction getListenerOptions() {\n    if (activeListenerOptions == undefined)\n        detectListenerOptionsSupport();\n    return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n    this.elem = elem;\n    this.type = type;\n    this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n    removeListener(this.elem, this.type, this.callback);\n    this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, destroyer) {\n    elem.addEventListener(type, callback, getListenerOptions());\n    if (destroyer)\n        destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n    elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n    exports.stopPropagation(e);\n    exports.preventDefault(e);\n    return false;\n};\nexports.stopPropagation = function (e) {\n    if (e.stopPropagation)\n        e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n    if (e.preventDefault)\n        e.preventDefault();\n};\nexports.getButton = function (e) {\n    if (e.type == \"dblclick\")\n        return 0;\n    if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n        return 2;\n    return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n    var ownerDocument = el && el.ownerDocument || document;\n    function onMouseUp(e) {\n        eventHandler && eventHandler(e);\n        releaseCaptureHandler && releaseCaptureHandler(e);\n        removeListener(ownerDocument, \"mousemove\", eventHandler);\n        removeListener(ownerDocument, \"mouseup\", onMouseUp);\n        removeListener(ownerDocument, \"dragstart\", onMouseUp);\n    }\n    addListener(ownerDocument, \"mousemove\", eventHandler);\n    addListener(ownerDocument, \"mouseup\", onMouseUp);\n    addListener(ownerDocument, \"dragstart\", onMouseUp);\n    return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n    addListener(el, \"wheel\", function (e) {\n        var factor = 0.15;\n        var deltaX = e.deltaX || 0;\n        var deltaY = e.deltaY || 0;\n        switch (e.deltaMode) {\n            case e.DOM_DELTA_PIXEL:\n                e.wheelX = deltaX * factor;\n                e.wheelY = deltaY * factor;\n                break;\n            case e.DOM_DELTA_LINE:\n                var linePixels = 15;\n                e.wheelX = deltaX * linePixels;\n                e.wheelY = deltaY * linePixels;\n                break;\n            case e.DOM_DELTA_PAGE:\n                var pagePixels = 150;\n                e.wheelX = deltaX * pagePixels;\n                e.wheelY = deltaY * pagePixels;\n                break;\n        }\n        callback(e);\n    }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n    var clicks = 0;\n    var startX, startY, timer;\n    var eventNames = {\n        2: \"dblclick\",\n        3: \"tripleclick\",\n        4: \"quadclick\"\n    };\n    function onMousedown(e) {\n        if (exports.getButton(e) !== 0) {\n            clicks = 0;\n        }\n        else if (e.detail > 1) {\n            clicks++;\n            if (clicks > 4)\n                clicks = 1;\n        }\n        else {\n            clicks = 1;\n        }\n        if (useragent.isIE) {\n            var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n            if (!timer || isNewClick)\n                clicks = 1;\n            if (timer)\n                clearTimeout(timer);\n            timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n            if (clicks == 1) {\n                startX = e.clientX;\n                startY = e.clientY;\n            }\n        }\n        e._clicks = clicks;\n        eventHandler[callbackName](\"mousedown\", e);\n        if (clicks > 4)\n            clicks = 0;\n        else if (clicks > 1)\n            return eventHandler[callbackName](eventNames[clicks], e);\n    }\n    if (!Array.isArray(elements))\n        elements = [elements];\n    elements.forEach(function (el) {\n        addListener(el, \"mousedown\", onMousedown, destroyer);\n    });\n};\nfunction getModifierHash(e) {\n    return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n}\nexports.getModifierString = function (e) {\n    return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n    var hashId = getModifierHash(e);\n    if (!keyCode && e.code) {\n        keyCode = keys.$codeToKeyCode[e.code] || keyCode;\n    }\n    if (!useragent.isMac && pressedKeys) {\n        if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n            hashId |= 8;\n        if (pressedKeys.altGr) {\n            if ((3 & hashId) != 3)\n                pressedKeys.altGr = 0;\n            else\n                return;\n        }\n        if (keyCode === 18 || keyCode === 17) {\n            var location = e.location;\n            if (keyCode === 17 && location === 1) {\n                if (pressedKeys[keyCode] == 1)\n                    ts = e.timeStamp;\n            }\n            else if (keyCode === 18 && hashId === 3 && location === 2) {\n                var dt = e.timeStamp - ts;\n                if (dt < 50)\n                    pressedKeys.altGr = true;\n            }\n        }\n    }\n    if (keyCode in keys.MODIFIER_KEYS) {\n        keyCode = -1;\n    }\n    if (!hashId && keyCode === 13) {\n        if (e.location === 3) {\n            callback(e, hashId, -keyCode);\n            if (e.defaultPrevented)\n                return;\n        }\n    }\n    if (useragent.isChromeOS && hashId & 8) {\n        callback(e, hashId, keyCode);\n        if (e.defaultPrevented)\n            return;\n        else\n            hashId &= ~8;\n    }\n    if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n        return false;\n    }\n    return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n    var lastDefaultPrevented = null;\n    addListener(el, \"keydown\", function (e) {\n        pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n        var result = normalizeCommandKeys(callback, e, e.keyCode);\n        lastDefaultPrevented = e.defaultPrevented;\n        return result;\n    }, destroyer);\n    addListener(el, \"keypress\", function (e) {\n        if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n            exports.stopEvent(e);\n            lastDefaultPrevented = null;\n        }\n    }, destroyer);\n    addListener(el, \"keyup\", function (e) {\n        pressedKeys[e.keyCode] = null;\n    }, destroyer);\n    if (!pressedKeys) {\n        resetPressedKeys();\n        addListener(window, \"focus\", resetPressedKeys);\n    }\n};\nfunction resetPressedKeys() {\n    pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n    var postMessageId = 1;\n    exports.nextTick = function (callback, win) {\n        win = win || window;\n        var messageName = \"zero-timeout-message-\" + (postMessageId++);\n        var listener = function (e) {\n            if (e.data == messageName) {\n                exports.stopPropagation(e);\n                removeListener(win, \"message\", listener);\n                callback();\n            }\n        };\n        addListener(win, \"message\", listener);\n        win.postMessage(messageName, \"*\");\n    };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n    return setTimeout(function handler() {\n        if (!exports.$idleBlocked) {\n            cb();\n        }\n        else {\n            setTimeout(handler, 100);\n        }\n    }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n    if (exports.$idleBlockId)\n        clearTimeout(exports.$idleBlockId);\n    exports.$idleBlocked = true;\n    exports.$idleBlockId = setTimeout(function () {\n        exports.$idleBlocked = false;\n    }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n    || window[\"mozRequestAnimationFrame\"]\n    || window[\"webkitRequestAnimationFrame\"]\n    || window[\"msRequestAnimationFrame\"]\n    || window[\"oRequestAnimationFrame\"]);\nif (exports.nextFrame)\n    exports.nextFrame = exports.nextFrame.bind(window);\nelse\n    exports.nextFrame = function (callback) {\n        setTimeout(callback, 17);\n    };\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n    lineMode: false,\n    pasteCancelled: function () {\n        if ($cancelT && $cancelT > Date.now() - 50)\n            return true;\n        return $cancelT = false;\n    },\n    cancel: function () {\n        $cancelT = Date.now();\n    }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/config\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar nls = require(\"../config\").nls;\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput = /** @class */ (function () {\n    function TextInput(parentNode, host) {\n        var _this = this;\n        this.host = host;\n        this.text = dom.createElement(\"textarea\");\n        this.text.className = \"ace_text-input\";\n        this.text.setAttribute(\"wrap\", \"off\");\n        this.text.setAttribute(\"autocomplete\", \"off\");\n        this.text.setAttribute(\"autocorrect\", \"off\");\n        this.text.setAttribute(\"autocapitalize\", \"off\");\n        this.text.setAttribute(\"spellcheck\", \"false\");\n        this.text.style.opacity = \"0\";\n        parentNode.insertBefore(this.text, parentNode.firstChild); this.copied = false;\n        this.pasted = false;\n        this.inComposition = false;\n        this.sendingText = false;\n        this.tempStyle = '';\n        if (!isMobile)\n            this.text.style.fontSize = \"1px\";\n        this.commandMode = false;\n        this.ignoreFocusEvents = false;\n        this.lastValue = \"\";\n        this.lastSelectionStart = 0;\n        this.lastSelectionEnd = 0;\n        this.lastRestoreEnd = 0;\n        this.rowStart = Number.MAX_SAFE_INTEGER;\n        this.rowEnd = Number.MIN_SAFE_INTEGER;\n        this.numberOfExtraLines = 0;\n        try {\n            this.$isFocused = document.activeElement === this.text;\n        }\n        catch (e) {\n        }\n        this.cancelComposition = this.cancelComposition.bind(this);\n        this.setAriaOptions({ role: \"textbox\" });\n        event.addListener(this.text, \"blur\", function (e) {\n            if (_this.ignoreFocusEvents)\n                return;\n            host.onBlur(e);\n            _this.$isFocused = false;\n        }, host);\n        event.addListener(this.text, \"focus\", function (e) {\n            if (_this.ignoreFocusEvents)\n                return;\n            _this.$isFocused = true;\n            if (useragent.isEdge) {\n                try {\n                    if (!document.hasFocus())\n                        return;\n                }\n                catch (e) {\n                }\n            }\n            host.onFocus(e);\n            if (useragent.isEdge)\n                setTimeout(_this.resetSelection.bind(_this));\n            else\n                _this.resetSelection();\n        }, host); this.$focusScroll = false;\n        host.on(\"beforeEndOperation\", function () {\n            var curOp = host.curOp;\n            var commandName = curOp && curOp.command && curOp.command.name;\n            if (commandName == \"insertstring\")\n                return;\n            var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n            if (_this.inComposition && isUserAction) {\n                _this.lastValue = _this.text.value = \"\";\n                _this.onCompositionEnd();\n            }\n            _this.resetSelection();\n        });\n        host.on(\"changeSelection\", this.setAriaLabel.bind(this));\n        this.resetSelection = isIOS ? this.$resetSelectionIOS : this.$resetSelection;\n        if (this.$isFocused)\n            host.onFocus();\n        this.inputHandler = null;\n        this.afterContextMenu = false;\n        event.addCommandKeyListener(this.text, function (e, hashId, keyCode) {\n            if (_this.inComposition)\n                return;\n            return host.onCommandKey(e, hashId, keyCode);\n        }, host);\n        event.addListener(this.text, \"select\", this.onSelect.bind(this), host);\n        event.addListener(this.text, \"input\", this.onInput.bind(this), host);\n        event.addListener(this.text, \"cut\", this.onCut.bind(this), host);\n        event.addListener(this.text, \"copy\", this.onCopy.bind(this), host);\n        event.addListener(this.text, \"paste\", this.onPaste.bind(this), host);\n        if (!('oncut' in this.text) || !('oncopy' in this.text) || !('onpaste' in this.text)) {\n            event.addListener(parentNode, \"keydown\", function (e) {\n                if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n                    return;\n                switch (e.keyCode) {\n                    case 67:\n                        _this.onCopy(e);\n                        break;\n                    case 86:\n                        _this.onPaste(e);\n                        break;\n                    case 88:\n                        _this.onCut(e);\n                        break;\n                }\n            }, host);\n        }\n        this.syncComposition = lang.delayedCall(this.onCompositionUpdate.bind(this), 50).schedule.bind(null, null); //TODO: check this\n        event.addListener(this.text, \"compositionstart\", this.onCompositionStart.bind(this), host);\n        event.addListener(this.text, \"compositionupdate\", this.onCompositionUpdate.bind(this), host);\n        event.addListener(this.text, \"keyup\", this.onKeyup.bind(this), host);\n        event.addListener(this.text, \"keydown\", this.syncComposition.bind(this), host);\n        event.addListener(this.text, \"compositionend\", this.onCompositionEnd.bind(this), host);\n        this.closeTimeout;\n        event.addListener(this.text, \"mouseup\", this.$onContextMenu.bind(this), host);\n        event.addListener(this.text, \"mousedown\", function (e) {\n            e.preventDefault();\n            _this.onContextMenuClose();\n        }, host);\n        event.addListener(host.renderer.scroller, \"contextmenu\", this.$onContextMenu.bind(this), host);\n        event.addListener(this.text, \"contextmenu\", this.$onContextMenu.bind(this), host);\n        if (isIOS)\n            this.addIosSelectionHandler(parentNode, host, this.text);\n    }\n    TextInput.prototype.addIosSelectionHandler = function (parentNode, host, text) {\n        var _this = this;\n        var typingResetTimeout = null;\n        var typing = false;\n        text.addEventListener(\"keydown\", function (e) {\n            if (typingResetTimeout)\n                clearTimeout(typingResetTimeout);\n            typing = true;\n        }, true);\n        text.addEventListener(\"keyup\", function (e) {\n            typingResetTimeout = setTimeout(function () {\n                typing = false;\n            }, 100);\n        }, true);\n        var detectArrowKeys = function (e) {\n            if (document.activeElement !== text)\n                return;\n            if (typing || _this.inComposition || host.$mouseHandler.isMousePressed)\n                return;\n            if (_this.copied) {\n                return;\n            }\n            var selectionStart = text.selectionStart;\n            var selectionEnd = text.selectionEnd;\n            var key = null;\n            var modifier = 0;\n            if (selectionStart == 0) {\n                key = KEYS.up;\n            }\n            else if (selectionStart == 1) {\n                key = KEYS.home;\n            }\n            else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd] == \"\\n\") {\n                key = KEYS.end;\n            }\n            else if (selectionStart < _this.lastSelectionStart && _this.lastValue[selectionStart - 1] == \" \") {\n                key = KEYS.left;\n                modifier = MODS.option;\n            }\n            else if (selectionStart < _this.lastSelectionStart || (selectionStart == _this.lastSelectionStart\n                && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n                key = KEYS.left;\n            }\n            else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n                key = KEYS.down;\n            }\n            else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd - 1] == \" \") {\n                key = KEYS.right;\n                modifier = MODS.option;\n            }\n            else if (selectionEnd > _this.lastSelectionEnd || (selectionEnd == _this.lastSelectionEnd\n                && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n                key = KEYS.right;\n            }\n            if (selectionStart !== selectionEnd)\n                modifier |= MODS.shift;\n            if (key) {\n                var result = host.onCommandKey({}, modifier, key);\n                if (!result && host.commands) {\n                    key = KEYS.keyCodeToString(key);\n                    var command = host.commands.findKeyCommand(modifier, key);\n                    if (command)\n                        host.execCommand(command);\n                }\n                _this.lastSelectionStart = selectionStart;\n                _this.lastSelectionEnd = selectionEnd;\n                _this.resetSelection(\"\");\n            }\n        };\n        document.addEventListener(\"selectionchange\", detectArrowKeys);\n        host.on(\"destroy\", function () {\n            document.removeEventListener(\"selectionchange\", detectArrowKeys);\n        });\n    };\n    TextInput.prototype.onContextMenuClose = function () {\n        var _this = this;\n        clearTimeout(this.closeTimeout);\n        this.closeTimeout = setTimeout(function () {\n            if (_this.tempStyle) {\n                _this.text.style.cssText = _this.tempStyle;\n                _this.tempStyle = '';\n            }\n            _this.host.renderer.$isMousePressed = false;\n            if (_this.host.renderer.$keepTextAreaAtCursor)\n                _this.host.renderer.$moveTextAreaToCursor();\n        }, 0);\n    };\n    TextInput.prototype.$onContextMenu = function (e) {\n        this.host.textInput.onContextMenu(e);\n        this.onContextMenuClose();\n    };\n    TextInput.prototype.onKeyup = function (e) {\n        if (e.keyCode == 27 && this.text.value.length < this.text.selectionStart) {\n            if (!this.inComposition)\n                this.lastValue = this.text.value;\n            this.lastSelectionStart = this.lastSelectionEnd = -1;\n            this.resetSelection();\n        }\n        this.syncComposition();\n    };\n    TextInput.prototype.cancelComposition = function () {\n        this.ignoreFocusEvents = true;\n        this.text.blur();\n        this.text.focus();\n        this.ignoreFocusEvents = false;\n    };\n    TextInput.prototype.onCompositionStart = function (e) {\n        if (this.inComposition || !this.host.onCompositionStart || this.host.$readOnly)\n            return;\n        this.inComposition = {};\n        if (this.commandMode)\n            return;\n        if (e.data)\n            this.inComposition.useTextareaForIME = false;\n        setTimeout(this.onCompositionUpdate.bind(this), 0);\n        this.host._signal(\"compositionStart\");\n        this.host.on(\"mousedown\", this.cancelComposition); //TODO:\n        var range = this.host.getSelectionRange();\n        range.end.row = range.start.row;\n        range.end.column = range.start.column;\n        this.inComposition.markerRange = range;\n        this.inComposition.selectionStart = this.lastSelectionStart;\n        this.host.onCompositionStart(this.inComposition);\n        if (this.inComposition.useTextareaForIME) {\n            this.lastValue = this.text.value = \"\";\n            this.lastSelectionStart = 0;\n            this.lastSelectionEnd = 0;\n        }\n        else {\n            if (this.text.msGetInputContext)\n                this.inComposition.context = this.text.msGetInputContext();\n            if (this.text.getInputContext)\n                this.inComposition.context = this.text.getInputContext();\n        }\n    };\n    TextInput.prototype.onCompositionUpdate = function () {\n        if (!this.inComposition || !this.host.onCompositionUpdate || this.host.$readOnly)\n            return;\n        if (this.commandMode)\n            return this.cancelComposition();\n        if (this.inComposition.useTextareaForIME) {\n            this.host.onCompositionUpdate(this.text.value);\n        }\n        else {\n            var data = this.text.value;\n            this.sendText(data);\n            if (this.inComposition.markerRange) {\n                if (this.inComposition.context) {\n                    this.inComposition.markerRange.start.column = this.inComposition.selectionStart = this.inComposition.context.compositionStartOffset;\n                }\n                this.inComposition.markerRange.end.column = this.inComposition.markerRange.start.column\n                    + this.lastSelectionEnd - this.inComposition.selectionStart + this.lastRestoreEnd;\n            }\n        }\n    };\n    TextInput.prototype.onCompositionEnd = function (e) {\n        if (!this.host.onCompositionEnd || this.host.$readOnly)\n            return;\n        this.inComposition = false;\n        this.host.onCompositionEnd();\n        this.host.off(\"mousedown\", this.cancelComposition);\n        if (e)\n            this.onInput();\n    };\n    TextInput.prototype.onCut = function (e) {\n        this.doCopy(e, true);\n    };\n    TextInput.prototype.onCopy = function (e) {\n        this.doCopy(e, false);\n    };\n    TextInput.prototype.onPaste = function (e) {\n        var data = this.handleClipboardData(e);\n        if (clipboard.pasteCancelled())\n            return;\n        if (typeof data == \"string\") {\n            if (data)\n                this.host.onPaste(data, e);\n            if (useragent.isIE)\n                setTimeout(this.resetSelection);\n            event.preventDefault(e);\n        }\n        else {\n            this.text.value = \"\";\n            this.pasted = true;\n        }\n    };\n    TextInput.prototype.doCopy = function (e, isCut) {\n        var _this = this;\n        var data = this.host.getCopyText();\n        if (!data)\n            return event.preventDefault(e);\n        if (this.handleClipboardData(e, data)) {\n            if (isIOS) {\n                this.resetSelection(data);\n                this.copied = data;\n                setTimeout(function () {\n                    _this.copied = false;\n                }, 10);\n            }\n            isCut ? this.host.onCut() : this.host.onCopy();\n            event.preventDefault(e);\n        }\n        else {\n            this.copied = true;\n            this.text.value = data;\n            this.text.select();\n            setTimeout(function () {\n                _this.copied = false;\n                _this.resetSelection();\n                isCut ? _this.host.onCut() : _this.host.onCopy();\n            });\n        }\n    };\n    TextInput.prototype.handleClipboardData = function (e, data, forceIEMime) {\n        var clipboardData = e.clipboardData || window[\"clipboardData\"];\n        if (!clipboardData || BROKEN_SETDATA)\n            return;\n        var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n        try {\n            if (data) {\n                return clipboardData.setData(mime, data) !== false;\n            }\n            else {\n                return clipboardData.getData(mime);\n            }\n        }\n        catch (e) {\n            if (!forceIEMime)\n                return this.handleClipboardData(e, data, true);\n        }\n    };\n    TextInput.prototype.onInput = function (e) {\n        if (this.inComposition)\n            return this.onCompositionUpdate();\n        if (e && e.inputType) {\n            if (e.inputType == \"historyUndo\")\n                return this.host.execCommand(\"undo\");\n            if (e.inputType == \"historyRedo\")\n                return this.host.execCommand(\"redo\");\n        }\n        var data = this.text.value;\n        var inserted = this.sendText(data, true);\n        if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted) || isMobile && this.lastSelectionStart\n            < 1 && this.lastSelectionStart == this.lastSelectionEnd) {\n            this.resetSelection();\n        }\n    };\n    TextInput.prototype.sendText = function (value, fromInput) {\n        if (this.afterContextMenu)\n            this.afterContextMenu = false;\n        if (this.pasted) {\n            this.resetSelection();\n            if (value)\n                this.host.onPaste(value);\n            this.pasted = false;\n            return \"\";\n        }\n        else {\n            var selectionStart = this.text.selectionStart;\n            var selectionEnd = this.text.selectionEnd;\n            var extendLeft = this.lastSelectionStart;\n            var extendRight = this.lastValue.length - this.lastSelectionEnd;\n            var inserted = value;\n            var restoreStart = value.length - selectionStart;\n            var restoreEnd = value.length - selectionEnd;\n            var i = 0;\n            while (extendLeft > 0 && this.lastValue[i] == value[i]) {\n                i++;\n                extendLeft--;\n            }\n            inserted = inserted.slice(i);\n            i = 1;\n            while (extendRight > 0 && this.lastValue.length - i > this.lastSelectionStart - 1\n                && this.lastValue[this.lastValue.length - i] == value[value.length - i]) {\n                i++;\n                extendRight--;\n            }\n            restoreStart -= i - 1;\n            restoreEnd -= i - 1;\n            var endIndex = inserted.length - i + 1;\n            if (endIndex < 0) {\n                extendLeft = -endIndex;\n                endIndex = 0;\n            }\n            inserted = inserted.slice(0, endIndex);\n            if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n                return \"\";\n            this.sendingText = true;\n            var shouldReset = false;\n            if (useragent.isAndroid && inserted == \". \") {\n                inserted = \"  \";\n                shouldReset = true;\n            }\n            if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || this.commandMode) {\n                this.host.onTextInput(inserted);\n            }\n            else {\n                this.host.onTextInput(inserted, {\n                    extendLeft: extendLeft,\n                    extendRight: extendRight,\n                    restoreStart: restoreStart,\n                    restoreEnd: restoreEnd\n                });\n            }\n            this.sendingText = false;\n            this.lastValue = value;\n            this.lastSelectionStart = selectionStart;\n            this.lastSelectionEnd = selectionEnd;\n            this.lastRestoreEnd = restoreEnd;\n            return shouldReset ? \"\\n\" : inserted;\n        }\n    };\n    TextInput.prototype.onSelect = function (e) {\n        var _this = this;\n        if (this.inComposition)\n            return;\n        var isAllSelected = function (text) {\n            return text.selectionStart === 0 && text.selectionEnd >= _this.lastValue.length && text.value\n                === _this.lastValue && _this.lastValue && text.selectionEnd !== _this.lastSelectionEnd;\n        };\n        if (this.copied) {\n            this.copied = false;\n        }\n        else if (isAllSelected(this.text)) {\n            this.host.selectAll();\n            this.resetSelection();\n        }\n        else if (isMobile && this.text.selectionStart != this.lastSelectionStart) {\n            this.resetSelection();\n        }\n    };\n    TextInput.prototype.$resetSelectionIOS = function (value) {\n        if (!this.$isFocused || (this.copied && !value) || this.sendingText)\n            return;\n        if (!value)\n            value = \"\";\n        var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n        if (newValue != this.text.value)\n            this.text.value = this.lastValue = newValue;\n        var selectionStart = 4;\n        var selectionEnd = 4 + (value.length || (this.host.selection.isEmpty() ? 0 : 1));\n        if (this.lastSelectionStart != selectionStart || this.lastSelectionEnd != selectionEnd) {\n            this.text.setSelectionRange(selectionStart, selectionEnd);\n        }\n        this.lastSelectionStart = selectionStart;\n        this.lastSelectionEnd = selectionEnd;\n    };\n    TextInput.prototype.$resetSelection = function () {\n        var _this = this;\n        if (this.inComposition || this.sendingText)\n            return;\n        if (!this.$isFocused && !this.afterContextMenu)\n            return;\n        this.inComposition = true;\n        var selectionStart = 0;\n        var selectionEnd = 0;\n        var line = \"\";\n        var positionToSelection = function (row, column) {\n            var selection = column;\n            for (var i = 1; i <= row - _this.rowStart && i < 2 * _this.numberOfExtraLines + 1; i++) {\n                selection += _this.host.session.getLine(row - i).length + 1;\n            }\n            return selection;\n        };\n        if (this.host.session) {\n            var selection = this.host.selection;\n            var range = selection.getRange();\n            var row = selection.cursor.row;\n            if (row === this.rowEnd + 1) {\n                this.rowStart = this.rowEnd + 1;\n                this.rowEnd = this.rowStart + 2 * this.numberOfExtraLines;\n            }\n            else if (row === this.rowStart - 1) {\n                this.rowEnd = this.rowStart - 1;\n                this.rowStart = this.rowEnd - 2 * this.numberOfExtraLines;\n            }\n            else if (row < this.rowStart - 1 || row > this.rowEnd + 1) {\n                this.rowStart = row > this.numberOfExtraLines ? row - this.numberOfExtraLines : 0;\n                this.rowEnd = row > this.numberOfExtraLines ? row + this.numberOfExtraLines : 2\n                    * this.numberOfExtraLines;\n            }\n            var lines = [];\n            for (var i = this.rowStart; i <= this.rowEnd; i++) {\n                lines.push(this.host.session.getLine(i));\n            }\n            line = lines.join('\\n');\n            selectionStart = positionToSelection(range.start.row, range.start.column);\n            selectionEnd = positionToSelection(range.end.row, range.end.column);\n            if (range.start.row < this.rowStart) {\n                var prevLine = this.host.session.getLine(this.rowStart - 1);\n                selectionStart = range.start.row < this.rowStart - 1 ? 0 : selectionStart;\n                selectionEnd += prevLine.length + 1;\n                line = prevLine + \"\\n\" + line;\n            }\n            else if (range.end.row > this.rowEnd) {\n                var nextLine = this.host.session.getLine(this.rowEnd + 1);\n                selectionEnd = range.end.row > this.rowEnd + 1 ? nextLine.length : range.end.column;\n                selectionEnd += line.length + 1;\n                line = line + \"\\n\" + nextLine;\n            }\n            else if (isMobile && row > 0) {\n                line = \"\\n\" + line;\n                selectionEnd += 1;\n                selectionStart += 1;\n            }\n            if (line.length > MAX_LINE_LENGTH) {\n                if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n                    line = line.slice(0, MAX_LINE_LENGTH);\n                }\n                else {\n                    line = \"\\n\";\n                    if (selectionStart == selectionEnd) {\n                        selectionStart = selectionEnd = 0;\n                    }\n                    else {\n                        selectionStart = 0;\n                        selectionEnd = 1;\n                    }\n                }\n            }\n            var newValue = line + \"\\n\\n\";\n            if (newValue != this.lastValue) {\n                this.text.value = this.lastValue = newValue;\n                this.lastSelectionStart = this.lastSelectionEnd = newValue.length;\n            }\n        }\n        if (this.afterContextMenu) {\n            this.lastSelectionStart = this.text.selectionStart;\n            this.lastSelectionEnd = this.text.selectionEnd;\n        }\n        if (this.lastSelectionEnd != selectionEnd || this.lastSelectionStart != selectionStart || this.text.selectionEnd\n            != this.lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n        ) {\n            try {\n                this.text.setSelectionRange(selectionStart, selectionEnd);\n                this.lastSelectionStart = selectionStart;\n                this.lastSelectionEnd = selectionEnd;\n            }\n            catch (e) {\n            }\n        }\n        this.inComposition = false;\n    };\n    TextInput.prototype.setHost = function (newHost) {\n        this.host = newHost;\n    };\n    TextInput.prototype.setNumberOfExtraLines = function (number) {\n        this.rowStart = Number.MAX_SAFE_INTEGER;\n        this.rowEnd = Number.MIN_SAFE_INTEGER;\n        if (number < 0) {\n            this.numberOfExtraLines = 0;\n            return;\n        }\n        this.numberOfExtraLines = number;\n    };\n    TextInput.prototype.setAriaLabel = function () {\n        var ariaLabel = \"\";\n        if (this.host.$textInputAriaLabel) {\n            ariaLabel += \"\".concat(this.host.$textInputAriaLabel, \", \");\n        }\n        if (this.host.session) {\n            var row = this.host.session.selection.cursor.row;\n            ariaLabel += nls(\"text-input.aria-label\", \"Cursor at row $0\", [row + 1]);\n        }\n        this.text.setAttribute(\"aria-label\", ariaLabel);\n    };\n    TextInput.prototype.setAriaOptions = function (options) {\n        if (options.activeDescendant) {\n            this.text.setAttribute(\"aria-haspopup\", \"true\");\n            this.text.setAttribute(\"aria-autocomplete\", options.inline ? \"both\" : \"list\");\n            this.text.setAttribute(\"aria-activedescendant\", options.activeDescendant);\n        }\n        else {\n            this.text.setAttribute(\"aria-haspopup\", \"false\");\n            this.text.setAttribute(\"aria-autocomplete\", \"both\");\n            this.text.removeAttribute(\"aria-activedescendant\");\n        }\n        if (options.role) {\n            this.text.setAttribute(\"role\", options.role);\n        }\n        if (options.setLabel) {\n            this.text.setAttribute(\"aria-roledescription\", nls(\"text-input.aria-roledescription\", \"editor\"));\n            this.setAriaLabel();\n        }\n    };\n    TextInput.prototype.focus = function () {\n        var _this = this;\n        this.setAriaOptions({\n            setLabel: this.host.renderer.enableKeyboardAccessibility\n        });\n        if (this.tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n            return this.text.focus({ preventScroll: true });\n        var top = this.text.style.top;\n        this.text.style.position = \"fixed\";\n        this.text.style.top = \"0px\";\n        try {\n            var isTransformed = this.text.getBoundingClientRect().top != 0;\n        }\n        catch (e) {\n            return;\n        }\n        var ancestors = [];\n        if (isTransformed) {\n            var t = this.text.parentElement;\n            while (t && t.nodeType == 1) {\n                ancestors.push(t);\n                t.setAttribute(\"ace_nocontext\", \"true\");\n                if (!t.parentElement && t.getRootNode)\n                    t = t.getRootNode()[\"host\"];\n                else\n                    t = t.parentElement;\n            }\n        }\n        this.text.focus({ preventScroll: true });\n        if (isTransformed) {\n            ancestors.forEach(function (p) {\n                p.removeAttribute(\"ace_nocontext\");\n            });\n        }\n        setTimeout(function () {\n            _this.text.style.position = \"\";\n            if (_this.text.style.top == \"0px\")\n                _this.text.style.top = top;\n        }, 0);\n    };\n    TextInput.prototype.blur = function () {\n        this.text.blur();\n    };\n    TextInput.prototype.isFocused = function () {\n        return this.$isFocused;\n    };\n    TextInput.prototype.setInputHandler = function (cb) {\n        this.inputHandler = cb;\n    };\n    TextInput.prototype.getInputHandler = function () {\n        return this.inputHandler;\n    };\n    TextInput.prototype.getElement = function () {\n        return this.text;\n    };\n    TextInput.prototype.setCommandMode = function (value) {\n        this.commandMode = value;\n        this.text.readOnly = false;\n    };\n    TextInput.prototype.setReadOnly = function (readOnly) {\n        if (!this.commandMode)\n            this.text.readOnly = readOnly;\n    };\n    TextInput.prototype.setCopyWithEmptySelection = function (value) {\n    };\n    TextInput.prototype.onContextMenu = function (e) {\n        this.afterContextMenu = true;\n        this.resetSelection();\n        this.host._emit(\"nativecontextmenu\", {\n            target: this.host,\n            domEvent: e\n        });\n        this.moveToMouse(e, true);\n    };\n    TextInput.prototype.moveToMouse = function (e, bringToFront) {\n        var _this = this;\n        if (!this.tempStyle)\n            this.tempStyle = this.text.style.cssText;\n        this.text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n            + \"text-indent: -\" + (this.lastSelectionStart + this.lastSelectionEnd) * this.host.renderer.characterWidth\n            * 0.5 + \"px;\";\n        var rect = this.host.container.getBoundingClientRect();\n        var style = dom.computedStyle(this.host.container);\n        var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n        var left = rect.left + (parseInt(style.borderLeftWidth) || 0);\n        var maxTop = rect.bottom - top - this.text.clientHeight - 2;\n        var move = function (e) {\n            dom.translate(_this.text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n        };\n        move(e);\n        if (e.type != \"mousedown\")\n            return;\n        this.host.renderer.$isMousePressed = true;\n        clearTimeout(this.closeTimeout);\n        if (useragent.isWin)\n            event.capture(this.host.container, move, this.onContextMenuClose.bind(this));\n    };\n    TextInput.prototype.destroy = function () {\n        if (this.text.parentElement)\n            this.text.parentElement.removeChild(this.text);\n    };\n    return TextInput;\n}());\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n    isMobile = _isMobile;\n    isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nvar DefaultHandlers = /** @class */ (function () {\n    function DefaultHandlers(mouseHandler) {\n        mouseHandler.$clickSelection = null;\n        var editor = mouseHandler.editor;\n        editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n        editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n        editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n        editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n        editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n        var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n            \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n        exports.forEach(function (x) {\n            mouseHandler[x] = this[x];\n        }, this);\n        mouseHandler[\"selectByLines\"] = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n        mouseHandler[\"selectByWords\"] = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n    }\n    DefaultHandlers.prototype.onMouseDown = function (ev) {\n        var inSelection = ev.inSelection();\n        var pos = ev.getDocumentPosition();\n        this.mousedownEvent = ev;\n        var editor = this.editor;\n        var button = ev.getButton();\n        if (button !== 0) {\n            var selectionRange = editor.getSelectionRange();\n            var selectionEmpty = selectionRange.isEmpty();\n            if (selectionEmpty || button == 1)\n                editor.selection.moveToPosition(pos);\n            if (button == 2) {\n                editor.textInput.onContextMenu(ev.domEvent);\n                if (!useragent.isMozilla)\n                    ev.preventDefault();\n            }\n            return;\n        }\n        this.mousedownEvent.time = Date.now();\n        if (inSelection && !editor.isFocused()) {\n            editor.focus();\n            if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n                this.setState(\"focusWait\");\n                this.captureMouse(ev);\n                return;\n            }\n        }\n        this.captureMouse(ev);\n        this.startSelect(pos, ev.domEvent._clicks > 1);\n        return ev.preventDefault();\n    };\n    DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) {\n        pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var editor = this.editor;\n        if (!this.mousedownEvent)\n            return;\n        if (this.mousedownEvent.getShiftKey())\n            editor.selection.selectToPosition(pos);\n        else if (!waitForClickSelection)\n            editor.selection.moveToPosition(pos);\n        if (!waitForClickSelection)\n            this.select();\n        editor.setStyle(\"ace_selecting\");\n        this.setState(\"select\");\n    };\n    DefaultHandlers.prototype.select = function () {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        if (this.$clickSelection) {\n            var cmp = this.$clickSelection.comparePoint(cursor);\n            if (cmp == -1) {\n                anchor = this.$clickSelection.end;\n            }\n            else if (cmp == 1) {\n                anchor = this.$clickSelection.start;\n            }\n            else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor, editor.session);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n    DefaultHandlers.prototype.extendSelectionBy = function (unitName) {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var range = editor.selection[unitName](cursor.row, cursor.column);\n        if (this.$clickSelection) {\n            var cmpStart = this.$clickSelection.comparePoint(range.start);\n            var cmpEnd = this.$clickSelection.comparePoint(range.end);\n            if (cmpStart == -1 && cmpEnd <= 0) {\n                anchor = this.$clickSelection.end;\n                if (range.end.row != cursor.row || range.end.column != cursor.column)\n                    cursor = range.start;\n            }\n            else if (cmpEnd == 1 && cmpStart >= 0) {\n                anchor = this.$clickSelection.start;\n                if (range.start.row != cursor.row || range.start.column != cursor.column)\n                    cursor = range.end;\n            }\n            else if (cmpStart == -1 && cmpEnd == 1) {\n                cursor = range.end;\n                anchor = range.start;\n            }\n            else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor, editor.session);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n    DefaultHandlers.prototype.selectByLinesEnd = function () {\n        this.$clickSelection = null;\n        this.editor.unsetStyle(\"ace_selecting\");\n    };\n    DefaultHandlers.prototype.focusWait = function () {\n        var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n        var time = Date.now();\n        if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n            this.startSelect(this.mousedownEvent.getDocumentPosition());\n    };\n    DefaultHandlers.prototype.onDoubleClick = function (ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        var session = editor.session;\n        var range = session.getBracketRange(pos);\n        if (range) {\n            if (range.isEmpty()) {\n                range.start.column--;\n                range.end.column++;\n            }\n            this.setState(\"select\");\n        }\n        else {\n            range = editor.selection.getWordRange(pos.row, pos.column);\n            this.setState(\"selectByWords\");\n        }\n        this.$clickSelection = range;\n        this.select();\n    };\n    DefaultHandlers.prototype.onTripleClick = function (ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        this.setState(\"selectByLines\");\n        var range = editor.getSelectionRange();\n        if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n            this.$clickSelection = editor.selection.getLineRange(range.start.row);\n            this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n        }\n        else {\n            this.$clickSelection = editor.selection.getLineRange(pos.row);\n        }\n        this.select();\n    };\n    DefaultHandlers.prototype.onQuadClick = function (ev) {\n        var editor = this.editor;\n        editor.selectAll();\n        this.$clickSelection = editor.getSelectionRange();\n        this.setState(\"selectAll\");\n    };\n    DefaultHandlers.prototype.onMouseWheel = function (ev) {\n        if (ev.getAccelKey())\n            return;\n        if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n            ev.wheelX = ev.wheelY;\n            ev.wheelY = 0;\n        }\n        var editor = this.editor;\n        if (!this.$lastScroll)\n            this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n        var prevScroll = this.$lastScroll;\n        var t = ev.domEvent.timeStamp;\n        var dt = t - prevScroll.t;\n        var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n        var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n        if (dt < SCROLL_COOLDOWN_T) {\n            vx = (vx + prevScroll.vx) / 2;\n            vy = (vy + prevScroll.vy) / 2;\n        }\n        var direction = Math.abs(vx / vy);\n        var canScroll = false;\n        if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n            canScroll = true;\n        if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n            canScroll = true;\n        if (canScroll) {\n            prevScroll.allowed = t;\n        }\n        else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n            var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n                && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n            if (isSlower) {\n                canScroll = true;\n                prevScroll.allowed = t;\n            }\n            else {\n                prevScroll.allowed = 0;\n            }\n        }\n        prevScroll.t = t;\n        prevScroll.vx = vx;\n        prevScroll.vy = vy;\n        if (canScroll) {\n            editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n            return ev.stop();\n        }\n    };\n    return DefaultHandlers;\n}());\nDefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd;\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor, session) {\n    if (range.start.row == range.end.row)\n        var cmp = 2 * cursor.column - range.start.column - range.end.column;\n    else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n        var cmp = 3 * cursor.column - 2 * session.getLine(range.start.row).length;\n    else\n        var cmp = 2 * cursor.row - range.start.row - range.end.row;\n    if (cmp < 0)\n        return { cursor: range.start, anchor: range.end };\n    else\n        return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = /** @class */ (function () {\n    function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY;\n        this.domEvent = domEvent;\n        this.editor = editor;\n        this.x = this.clientX = domEvent.clientX;\n        this.y = this.clientY = domEvent.clientY;\n        this.$pos = null;\n        this.$inSelection = null;\n        this.propagationStopped = false;\n        this.defaultPrevented = false;\n    }\n    MouseEvent.prototype.stopPropagation = function () {\n        event.stopPropagation(this.domEvent);\n        this.propagationStopped = true;\n    };\n    MouseEvent.prototype.preventDefault = function () {\n        event.preventDefault(this.domEvent);\n        this.defaultPrevented = true;\n    };\n    MouseEvent.prototype.stop = function () {\n        this.stopPropagation();\n        this.preventDefault();\n    };\n    MouseEvent.prototype.getDocumentPosition = function () {\n        if (this.$pos)\n            return this.$pos;\n        this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n        return this.$pos;\n    };\n    MouseEvent.prototype.getGutterRow = function () {\n        var documentRow = this.getDocumentPosition().row;\n        var screenRow = this.editor.session.documentToScreenRow(documentRow, 0);\n        var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n        return screenRow - screenTopRow;\n    };\n    MouseEvent.prototype.inSelection = function () {\n        if (this.$inSelection !== null)\n            return this.$inSelection;\n        var editor = this.editor;\n        var selectionRange = editor.getSelectionRange();\n        if (selectionRange.isEmpty())\n            this.$inSelection = false;\n        else {\n            var pos = this.getDocumentPosition();\n            this.$inSelection = selectionRange.contains(pos.row, pos.column);\n        }\n        return this.$inSelection;\n    };\n    MouseEvent.prototype.getButton = function () {\n        return event.getButton(this.domEvent);\n    };\n    MouseEvent.prototype.getShiftKey = function () {\n        return this.domEvent.shiftKey;\n    };\n    MouseEvent.prototype.getAccelKey = function () {\n        return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n    };\n    return MouseEvent;\n}());\nexports.MouseEvent = MouseEvent;\n\n});\n\nace.define(\"ace/lib/scroll\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) {\n    event.stopPropagation();\n    var target = event.currentTarget;\n    var contentOverflows = target.scrollHeight > target.clientHeight;\n    if (!contentOverflows) {\n        event.preventDefault();\n    }\n};\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar CLASSNAME = \"ace_tooltip\";\nvar Tooltip = /** @class */ (function () {\n    function Tooltip(parentNode) {\n        this.isOpen = false;\n        this.$element = null;\n        this.$parentNode = parentNode;\n    }\n    Tooltip.prototype.$init = function () {\n        this.$element = dom.createElement(\"div\");\n        this.$element.className = CLASSNAME;\n        this.$element.style.display = \"none\";\n        this.$parentNode.appendChild(this.$element);\n        return this.$element;\n    };\n    Tooltip.prototype.getElement = function () {\n        return this.$element || this.$init();\n    };\n    Tooltip.prototype.setText = function (text) {\n        this.getElement().textContent = text;\n    };\n    Tooltip.prototype.setHtml = function (html) {\n        this.getElement().innerHTML = html;\n    };\n    Tooltip.prototype.setPosition = function (x, y) {\n        this.getElement().style.left = x + \"px\";\n        this.getElement().style.top = y + \"px\";\n    };\n    Tooltip.prototype.setClassName = function (className) {\n        dom.addCssClass(this.getElement(), className);\n    };\n    Tooltip.prototype.setTheme = function (theme) {\n        if (this.theme) {\n            this.theme.isDark && dom.removeCssClass(this.getElement(), \"ace_dark\");\n            this.theme.cssClass && dom.removeCssClass(this.getElement(), this.theme.cssClass);\n        }\n        if (theme.isDark) {\n            dom.addCssClass(this.getElement(), \"ace_dark\");\n        }\n        if (theme.cssClass) {\n            dom.addCssClass(this.getElement(), theme.cssClass);\n        }\n        this.theme = {\n            isDark: theme.isDark,\n            cssClass: theme.cssClass\n        };\n    };\n    Tooltip.prototype.show = function (text, x, y) {\n        if (text != null)\n            this.setText(text);\n        if (x != null && y != null)\n            this.setPosition(x, y);\n        if (!this.isOpen) {\n            this.getElement().style.display = \"block\";\n            this.isOpen = true;\n        }\n    };\n    Tooltip.prototype.hide = function (e) {\n        if (this.isOpen) {\n            this.getElement().style.display = \"none\";\n            this.getElement().className = CLASSNAME;\n            this.isOpen = false;\n        }\n    };\n    Tooltip.prototype.getHeight = function () {\n        return this.getElement().offsetHeight;\n    };\n    Tooltip.prototype.getWidth = function () {\n        return this.getElement().offsetWidth;\n    };\n    Tooltip.prototype.destroy = function () {\n        this.isOpen = false;\n        if (this.$element && this.$element.parentNode) {\n            this.$element.parentNode.removeChild(this.$element);\n        }\n    };\n    return Tooltip;\n}());\nvar PopupManager = /** @class */ (function () {\n    function PopupManager() {\n        this.popups = [];\n    }\n    PopupManager.prototype.addPopup = function (popup) {\n        this.popups.push(popup);\n        this.updatePopups();\n    };\n    PopupManager.prototype.removePopup = function (popup) {\n        var index = this.popups.indexOf(popup);\n        if (index !== -1) {\n            this.popups.splice(index, 1);\n            this.updatePopups();\n        }\n    };\n    PopupManager.prototype.updatePopups = function () {\n        var e_1, _a, e_2, _b;\n        this.popups.sort(function (a, b) { return b.priority - a.priority; });\n        var visiblepopups = [];\n        try {\n            for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var popup = _d.value;\n                var shouldDisplay = true;\n                try {\n                    for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) {\n                        var visiblePopup = visiblepopups_1_1.value;\n                        if (this.doPopupsOverlap(visiblePopup, popup)) {\n                            shouldDisplay = false;\n                            break;\n                        }\n                    }\n                }\n                catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                finally {\n                    try {\n                        if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1);\n                    }\n                    finally { if (e_2) throw e_2.error; }\n                }\n                if (shouldDisplay) {\n                    visiblepopups.push(popup);\n                }\n                else {\n                    popup.hide();\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) {\n        var rectA = popupA.getElement().getBoundingClientRect();\n        var rectB = popupB.getElement().getBoundingClientRect();\n        return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom\n            > rectB.top);\n    };\n    return PopupManager;\n}());\nvar popupManager = new PopupManager();\nexports.popupManager = popupManager;\nexports.Tooltip = Tooltip;\nvar HoverTooltip = /** @class */ (function (_super) {\n    __extends(HoverTooltip, _super);\n    function HoverTooltip(parentNode) {\n        if (parentNode === void 0) { parentNode = document.body; }\n        var _this = _super.call(this, parentNode) || this;\n        _this.timeout = undefined;\n        _this.lastT = 0;\n        _this.idleTime = 350;\n        _this.lastEvent = undefined;\n        _this.onMouseOut = _this.onMouseOut.bind(_this);\n        _this.onMouseMove = _this.onMouseMove.bind(_this);\n        _this.waitForHover = _this.waitForHover.bind(_this);\n        _this.hide = _this.hide.bind(_this);\n        var el = _this.getElement();\n        el.style.whiteSpace = \"pre-wrap\";\n        el.style.pointerEvents = \"auto\";\n        el.addEventListener(\"mouseout\", _this.onMouseOut);\n        el.tabIndex = -1;\n        el.addEventListener(\"blur\", function () {\n            if (!el.contains(document.activeElement))\n                this.hide();\n        }.bind(_this));\n        el.addEventListener(\"wheel\", preventParentScroll);\n        return _this;\n    }\n    HoverTooltip.prototype.addToEditor = function (editor) {\n        editor.on(\"mousemove\", this.onMouseMove);\n        editor.on(\"mousedown\", this.hide);\n        var target = editor.renderer.getMouseEventTarget();\n        if (target && typeof target.removeEventListener === \"function\") {\n            target.addEventListener(\"mouseout\", this.onMouseOut, true);\n        }\n    };\n    HoverTooltip.prototype.removeFromEditor = function (editor) {\n        editor.off(\"mousemove\", this.onMouseMove);\n        editor.off(\"mousedown\", this.hide);\n        var target = editor.renderer.getMouseEventTarget();\n        if (target && typeof target.removeEventListener === \"function\") {\n            target.removeEventListener(\"mouseout\", this.onMouseOut, true);\n        }\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n            this.timeout = null;\n        }\n    };\n    HoverTooltip.prototype.onMouseMove = function (e, editor) {\n        this.lastEvent = e;\n        this.lastT = Date.now();\n        var isMousePressed = editor.$mouseHandler.isMousePressed;\n        if (this.isOpen) {\n            var pos = this.lastEvent && this.lastEvent.getDocumentPosition();\n            if (!this.range\n                || !this.range.contains(pos.row, pos.column)\n                || isMousePressed\n                || this.isOutsideOfText(this.lastEvent)) {\n                this.hide();\n            }\n        }\n        if (this.timeout || isMousePressed)\n            return;\n        this.lastEvent = e;\n        this.timeout = setTimeout(this.waitForHover, this.idleTime);\n    };\n    HoverTooltip.prototype.waitForHover = function () {\n        if (this.timeout)\n            clearTimeout(this.timeout);\n        var dt = Date.now() - this.lastT;\n        if (this.idleTime - dt > 10) {\n            this.timeout = setTimeout(this.waitForHover, this.idleTime - dt);\n            return;\n        }\n        this.timeout = null;\n        if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) {\n            this.$gatherData(this.lastEvent, this.lastEvent.editor);\n        }\n    };\n    HoverTooltip.prototype.isOutsideOfText = function (e) {\n        var editor = e.editor;\n        var docPos = e.getDocumentPosition();\n        var line = editor.session.getLine(docPos.row);\n        if (docPos.column == line.length) {\n            var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY);\n            var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column);\n            if (clippedPos.column != screenPos.column\n                || clippedPos.row != screenPos.row) {\n                return true;\n            }\n        }\n        return false;\n    };\n    HoverTooltip.prototype.setDataProvider = function (value) {\n        this.$gatherData = value;\n    };\n    HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) {\n        if (startingEvent && startingEvent != this.lastEvent)\n            return;\n        if (this.isOpen && document.activeElement == this.getElement())\n            return;\n        var renderer = editor.renderer;\n        if (!this.isOpen) {\n            popupManager.addPopup(this);\n            this.$registerCloseEvents();\n            this.setTheme(renderer.theme);\n        }\n        this.isOpen = true;\n        this.range = Range.fromPoints(range.start, range.end);\n        var position = renderer.textToScreenCoordinates(range.start.row, range.start.column);\n        var rect = renderer.scroller.getBoundingClientRect();\n        if (position.pageX < rect.left)\n            position.pageX = rect.left;\n        var element = this.getElement();\n        element.innerHTML = \"\";\n        element.appendChild(domNode);\n        element.style.maxHeight = \"\";\n        element.style.display = \"block\";\n        this.$setPosition(editor, position, true, range);\n        dom.$fixPositionBug(element);\n    };\n    HoverTooltip.prototype.$setPosition = function (editor, position, withMarker, range) {\n        var MARGIN = 10;\n        withMarker && this.addMarker(range, editor.session);\n        var renderer = editor.renderer;\n        var element = this.getElement();\n        var labelHeight = element.offsetHeight;\n        var labelWidth = element.offsetWidth;\n        var anchorTop = position.pageY;\n        var anchorLeft = position.pageX;\n        var spaceBelow = window.innerHeight - anchorTop - renderer.lineHeight;\n        var isAbove = this.$shouldPlaceAbove(labelHeight, anchorTop, spaceBelow - MARGIN);\n        element.style.maxHeight = (isAbove ? anchorTop : spaceBelow) - MARGIN + \"px\";\n        element.style.top = isAbove ? \"\" : anchorTop + renderer.lineHeight + \"px\";\n        element.style.bottom = isAbove ? window.innerHeight - anchorTop + \"px\" : \"\";\n        element.style.left = Math.min(anchorLeft, window.innerWidth - labelWidth - MARGIN) + \"px\";\n    };\n    HoverTooltip.prototype.$shouldPlaceAbove = function (labelHeight, anchorTop, spaceBelow) {\n        return !(anchorTop - labelHeight < 0 && anchorTop < spaceBelow);\n    };\n    HoverTooltip.prototype.addMarker = function (range, session) {\n        if (this.marker) {\n            this.$markerSession.removeMarker(this.marker);\n        }\n        this.$markerSession = session;\n        this.marker = session && session.addMarker(range, \"ace_highlight-marker\", \"text\");\n    };\n    HoverTooltip.prototype.hide = function (e) {\n        if (e && this.$fromKeyboard && e.type == \"keydown\") {\n            if (e.code == \"Escape\") {\n                return;\n            }\n        }\n        if (!e && document.activeElement == this.getElement())\n            return;\n        if (e && e.target && (e.type != \"keydown\" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target))\n            return;\n        this.lastEvent = null;\n        if (this.timeout)\n            clearTimeout(this.timeout);\n        this.timeout = null;\n        this.addMarker(null);\n        if (this.isOpen) {\n            this.$fromKeyboard = false;\n            this.$removeCloseEvents();\n            this.getElement().style.display = \"none\";\n            this.isOpen = false;\n            popupManager.removePopup(this);\n        }\n    };\n    HoverTooltip.prototype.$registerCloseEvents = function () {\n        window.addEventListener(\"keydown\", this.hide, true);\n        window.addEventListener(\"wheel\", this.hide, true);\n        window.addEventListener(\"mousedown\", this.hide, true);\n    };\n    HoverTooltip.prototype.$removeCloseEvents = function () {\n        window.removeEventListener(\"keydown\", this.hide, true);\n        window.removeEventListener(\"wheel\", this.hide, true);\n        window.removeEventListener(\"mousedown\", this.hide, true);\n    };\n    HoverTooltip.prototype.onMouseOut = function (e) {\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n            this.timeout = null;\n        }\n        this.lastEvent = null;\n        if (!this.isOpen)\n            return;\n        if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n            return;\n        if (e && e.currentTarget.contains(e.relatedTarget))\n            return;\n        if (!e.relatedTarget.classList.contains(\"ace_content\"))\n            this.hide();\n    };\n    return HoverTooltip;\n}(Tooltip));\nexports.HoverTooltip = HoverTooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/mouse/mouse_event\",\"ace/tooltip\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"../lib/dom\");\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar HoverTooltip = require(\"../tooltip\").HoverTooltip;\nvar nls = require(\"../config\").nls;\nvar Range = require(\"../range\").Range;\nfunction GutterHandler(mouseHandler) {\n    var editor = mouseHandler.editor;\n    var gutter = editor.renderer.$gutterLayer;\n    mouseHandler.$tooltip = new GutterTooltip(editor);\n    mouseHandler.$tooltip.addToEditor(editor);\n    mouseHandler.$tooltip.setDataProvider(function (e, editor) {\n        var row = e.getDocumentPosition().row;\n        mouseHandler.$tooltip.showTooltip(row);\n    });\n    mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n        if (!editor.isFocused() || e.getButton() != 0)\n            return;\n        var gutterRegion = gutter.getRegion(e);\n        if (gutterRegion == \"foldWidgets\")\n            return;\n        var row = e.getDocumentPosition().row;\n        var selection = editor.session.selection;\n        if (e.getShiftKey())\n            selection.selectTo(row, 0);\n        else {\n            if (e.domEvent.detail == 2) {\n                editor.selectAll();\n                return e.preventDefault();\n            }\n            mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n        }\n        mouseHandler.setState(\"selectByLines\");\n        mouseHandler.captureMouse(e);\n        return e.preventDefault();\n    });\n}\nexports.GutterHandler = GutterHandler;\nvar GutterTooltip = /** @class */ (function (_super) {\n    __extends(GutterTooltip, _super);\n    function GutterTooltip(editor) {\n        var _this = _super.call(this, editor.container) || this;\n        _this.id = \"gt\" + (++GutterTooltip.$uid);\n        _this.editor = editor;\n        _this.visibleTooltipRow;\n        var el = _this.getElement();\n        el.setAttribute(\"role\", \"tooltip\");\n        el.setAttribute(\"id\", _this.id);\n        el.style.pointerEvents = \"auto\";\n        _this.idleTime = 50;\n        _this.onDomMouseMove = _this.onDomMouseMove.bind(_this);\n        _this.onDomMouseOut = _this.onDomMouseOut.bind(_this);\n        _this.setClassName(\"ace_gutter-tooltip\");\n        return _this;\n    }\n    GutterTooltip.prototype.onDomMouseMove = function (domEvent) {\n        var aceEvent = new MouseEvent(domEvent, this.editor);\n        this.onMouseMove(aceEvent, this.editor);\n    };\n    GutterTooltip.prototype.onDomMouseOut = function (domEvent) {\n        var aceEvent = new MouseEvent(domEvent, this.editor);\n        this.onMouseOut(aceEvent);\n    };\n    GutterTooltip.prototype.addToEditor = function (editor) {\n        var gutter = editor.renderer.$gutter;\n        gutter.addEventListener(\"mousemove\", this.onDomMouseMove);\n        gutter.addEventListener(\"mouseout\", this.onDomMouseOut);\n        _super.prototype.addToEditor.call(this, editor);\n    };\n    GutterTooltip.prototype.removeFromEditor = function (editor) {\n        var gutter = editor.renderer.$gutter;\n        gutter.removeEventListener(\"mousemove\", this.onDomMouseMove);\n        gutter.removeEventListener(\"mouseout\", this.onDomMouseOut);\n        _super.prototype.removeFromEditor.call(this, editor);\n    };\n    GutterTooltip.prototype.destroy = function () {\n        if (this.editor) {\n            this.removeFromEditor(this.editor);\n        }\n        _super.prototype.destroy.call(this);\n    };\n    Object.defineProperty(GutterTooltip, \"annotationLabels\", {\n        get: function () {\n            return {\n                error: {\n                    singular: nls(\"gutter-tooltip.aria-label.error.singular\", \"error\"),\n                    plural: nls(\"gutter-tooltip.aria-label.error.plural\", \"errors\")\n                },\n                security: {\n                    singular: nls(\"gutter-tooltip.aria-label.security.singular\", \"security finding\"),\n                    plural: nls(\"gutter-tooltip.aria-label.security.plural\", \"security findings\")\n                },\n                warning: {\n                    singular: nls(\"gutter-tooltip.aria-label.warning.singular\", \"warning\"),\n                    plural: nls(\"gutter-tooltip.aria-label.warning.plural\", \"warnings\")\n                },\n                info: {\n                    singular: nls(\"gutter-tooltip.aria-label.info.singular\", \"information message\"),\n                    plural: nls(\"gutter-tooltip.aria-label.info.plural\", \"information messages\")\n                },\n                hint: {\n                    singular: nls(\"gutter-tooltip.aria-label.hint.singular\", \"suggestion\"),\n                    plural: nls(\"gutter-tooltip.aria-label.hint.plural\", \"suggestions\")\n                }\n            };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    GutterTooltip.prototype.showTooltip = function (row) {\n        var _a;\n        var gutter = this.editor.renderer.$gutterLayer;\n        var annotationsInRow = gutter.$annotations[row];\n        var annotation;\n        if (annotationsInRow)\n            annotation = {\n                displayText: Array.from(annotationsInRow.displayText),\n                type: Array.from(annotationsInRow.type)\n            };\n        else\n            annotation = { displayText: [], type: [] };\n        var fold = gutter.session.getFoldLine(row);\n        if (fold && gutter.$showFoldedAnnotations) {\n            var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] };\n            var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 };\n            var mostSevereAnnotationTypeInFold;\n            for (var i = row + 1; i <= fold.end.row; i++) {\n                if (!gutter.$annotations[i])\n                    continue;\n                for (var j = 0; j < gutter.$annotations[i].text.length; j++) {\n                    var annotationType = gutter.$annotations[i].type[j];\n                    annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]);\n                    if (!mostSevereAnnotationTypeInFold ||\n                        severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) {\n                        mostSevereAnnotationTypeInFold = annotationType;\n                    }\n                }\n            }\n            if ([\"error\", \"security\", \"warning\"].includes(mostSevereAnnotationTypeInFold)) {\n                var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n                annotation.displayText.push(summaryFoldedAnnotations);\n                annotation.type.push(mostSevereAnnotationTypeInFold + \"_fold\");\n            }\n        }\n        if (annotation.displayText.length === 0)\n            return this.hide();\n        var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] };\n        var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n        for (var i = 0; i < annotation.displayText.length; i++) {\n            var lineElement = dom.createElement(\"span\");\n            var iconElement = dom.createElement(\"span\");\n            (_a = iconElement.classList).add.apply(_a, [\"ace_\".concat(annotation.type[i]), iconClassName]);\n            iconElement.setAttribute(\"aria-label\", \"\".concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular));\n            iconElement.setAttribute(\"role\", \"img\");\n            iconElement.appendChild(dom.createTextNode(\" \"));\n            lineElement.appendChild(iconElement);\n            lineElement.appendChild(dom.createTextNode(annotation.displayText[i]));\n            lineElement.appendChild(dom.createElement(\"br\"));\n            annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(lineElement);\n        }\n        var tooltipElement = dom.createElement(\"span\");\n        annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); });\n        annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); });\n        annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); });\n        annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); });\n        annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); });\n        tooltipElement.setAttribute(\"aria-live\", \"polite\");\n        var annotationNode = this.$findLinkedAnnotationNode(row);\n        if (annotationNode) {\n            annotationNode.setAttribute(\"aria-describedby\", this.id);\n        }\n        var range = Range.fromPoints({ row: row, column: 0 }, { row: row, column: 0 });\n        this.showForRange(this.editor, range, tooltipElement);\n        this.visibleTooltipRow = row;\n        this.editor._signal(\"showGutterTooltip\", this);\n    };\n    GutterTooltip.prototype.$setPosition = function (editor, _ignoredPosition, _withMarker, range) {\n        var gutterCell = this.$findCellByRow(range.start.row);\n        if (!gutterCell)\n            return;\n        var el = gutterCell && gutterCell.element;\n        var anchorEl = el && (el.querySelector(\".ace_gutter_annotation\"));\n        if (!anchorEl)\n            return;\n        var r = anchorEl.getBoundingClientRect();\n        if (!r)\n            return;\n        var position = {\n            pageX: r.right,\n            pageY: r.top\n        };\n        return _super.prototype.$setPosition.call(this, editor, position, false, range);\n    };\n    GutterTooltip.prototype.$shouldPlaceAbove = function (labelHeight, anchorTop, spaceBelow) {\n        return spaceBelow < labelHeight;\n    };\n    GutterTooltip.prototype.$findLinkedAnnotationNode = function (row) {\n        var cell = this.$findCellByRow(row);\n        if (cell) {\n            var element = cell.element;\n            if (element.childNodes.length > 2) {\n                return element.childNodes[2];\n            }\n        }\n    };\n    GutterTooltip.prototype.$findCellByRow = function (row) {\n        return this.editor.renderer.$gutterLayer.$lines.cells.find(function (el) { return el.row === row; });\n    };\n    GutterTooltip.prototype.hide = function (e) {\n        if (!this.isOpen) {\n            return;\n        }\n        this.$element.removeAttribute(\"aria-live\");\n        if (this.visibleTooltipRow != undefined) {\n            var annotationNode = this.$findLinkedAnnotationNode(this.visibleTooltipRow);\n            if (annotationNode) {\n                annotationNode.removeAttribute(\"aria-describedby\");\n            }\n        }\n        this.visibleTooltipRow = undefined;\n        this.editor._signal(\"hideGutterTooltip\", this);\n        _super.prototype.hide.call(this, e);\n    };\n    GutterTooltip.annotationsToSummaryString = function (annotations) {\n        var e_1, _a;\n        var summary = [];\n        var annotationTypes = [\"error\", \"security\", \"warning\", \"info\", \"hint\"];\n        try {\n            for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) {\n                var annotationType = annotationTypes_1_1.value;\n                if (!annotations[annotationType].length)\n                    continue;\n                var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural;\n                summary.push(\"\".concat(annotations[annotationType].length, \" \").concat(label));\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return summary.join(\", \");\n    };\n    GutterTooltip.prototype.isOutsideOfText = function (e) {\n        var editor = e.editor;\n        var rect = editor.renderer.$gutter.getBoundingClientRect();\n        return !(e.clientX >= rect.left && e.clientX <= rect.right &&\n            e.clientY >= rect.top && e.clientY <= rect.bottom);\n    };\n    return GutterTooltip;\n}(HoverTooltip));\nGutterTooltip.$uid = 0;\nexports.GutterTooltip = GutterTooltip;\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n    var editor = mouseHandler.editor;\n    var dragImage = dom.createElement(\"div\");\n    dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n    dragImage.textContent = \"\\xa0\";\n    var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n    exports.forEach(function (x) {\n        mouseHandler[x] = this[x];\n    }, this);\n    editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n    var mouseTarget = editor.container;\n    var dragSelectionMarker, x, y;\n    var timerId, range;\n    var dragCursor, counter = 0;\n    var dragOperation;\n    var isInternal;\n    var autoScrollStartTime;\n    var cursorMovedTime;\n    var cursorPointOnCaretMoved;\n    this.onDragStart = function (e) {\n        if (this.cancelDrag || !mouseTarget.draggable) {\n            var self = this;\n            setTimeout(function () {\n                self.startSelect();\n                self.captureMouse(e);\n            }, 0);\n            return e.preventDefault();\n        }\n        range = editor.getSelectionRange();\n        var dataTransfer = e.dataTransfer;\n        dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n        editor.container.appendChild(dragImage);\n        dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n        setTimeout(function () {\n            editor.container.removeChild(dragImage);\n        });\n        dataTransfer.clearData();\n        dataTransfer.setData(\"Text\", editor.session.getTextRange());\n        isInternal = true;\n        this.setState(\"drag\");\n    };\n    this.onDragEnd = function (e) {\n        mouseTarget.draggable = false;\n        isInternal = false;\n        this.setState(null);\n        if (!editor.getReadOnly()) {\n            var dropEffect = e.dataTransfer.dropEffect;\n            if (!dragOperation && dropEffect == \"move\")\n                editor.session.remove(editor.getSelectionRange());\n            editor.$resetCursorStyle();\n        }\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n    };\n    this.onDragEnter = function (e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker)\n            addDragMarker();\n        counter++;\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n    this.onDragOver = function (e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker) {\n            addDragMarker();\n            counter++;\n        }\n        if (onMouseMoveTimer !== null)\n            onMouseMoveTimer = null;\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n    this.onDragLeave = function (e) {\n        counter--;\n        if (counter <= 0 && dragSelectionMarker) {\n            clearDragMarker();\n            dragOperation = null;\n            return event.preventDefault(e);\n        }\n    };\n    this.onDrop = function (e) {\n        if (!dragCursor)\n            return;\n        var dataTransfer = e.dataTransfer;\n        if (isInternal) {\n            switch (dragOperation) {\n                case \"move\":\n                    if (range.contains(dragCursor.row, dragCursor.column)) {\n                        range = {\n                            start: dragCursor,\n                            end: dragCursor\n                        };\n                    }\n                    else {\n                        range = editor.moveText(range, dragCursor);\n                    }\n                    break;\n                case \"copy\":\n                    range = editor.moveText(range, dragCursor, true);\n                    break;\n            }\n        }\n        else {\n            var dropData = dataTransfer.getData('Text');\n            range = {\n                start: dragCursor,\n                end: editor.session.insert(dragCursor, dropData)\n            };\n            editor.focus();\n            dragOperation = null;\n        }\n        clearDragMarker();\n        return event.preventDefault(e);\n    };\n    event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n    function scrollCursorIntoView(cursor, prevCursor) {\n        var now = Date.now();\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        var hMovement = !prevCursor || cursor.column != prevCursor.column;\n        if (!cursorMovedTime || vMovement || hMovement) {\n            editor.moveCursorToPosition(cursor);\n            cursorMovedTime = now;\n            cursorPointOnCaretMoved = { x: x, y: y };\n        }\n        else {\n            var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n            if (distance > SCROLL_CURSOR_HYSTERESIS) {\n                cursorMovedTime = null;\n            }\n            else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n                editor.renderer.scrollCursorIntoView();\n                cursorMovedTime = null;\n            }\n        }\n    }\n    function autoScroll(cursor, prevCursor) {\n        var now = Date.now();\n        var lineHeight = editor.renderer.layerConfig.lineHeight;\n        var characterWidth = editor.renderer.layerConfig.characterWidth;\n        var editorRect = editor.renderer.scroller.getBoundingClientRect();\n        var offsets = {\n            x: {\n                left: x - editorRect.left,\n                right: editorRect.right - x\n            },\n            y: {\n                top: y - editorRect.top,\n                bottom: editorRect.bottom - y\n            }\n        };\n        var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n        var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n        var scrollCursor = { row: cursor.row, column: cursor.column };\n        if (nearestXOffset / characterWidth <= 2) {\n            scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n        }\n        if (nearestYOffset / lineHeight <= 1) {\n            scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n        }\n        var vScroll = cursor.row != scrollCursor.row;\n        var hScroll = cursor.column != scrollCursor.column;\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        if (vScroll || (hScroll && !vMovement)) {\n            if (!autoScrollStartTime)\n                autoScrollStartTime = now;\n            else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n                editor.renderer.scrollCursorIntoView(scrollCursor);\n        }\n        else {\n            autoScrollStartTime = null;\n        }\n    }\n    function onDragInterval() {\n        var prevCursor = dragCursor;\n        dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n        scrollCursorIntoView(dragCursor, prevCursor);\n        autoScroll(dragCursor, prevCursor);\n    }\n    function addDragMarker() {\n        range = editor.selection.toOrientedRange();\n        dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n        editor.clearSelection();\n        if (editor.isFocused())\n            editor.renderer.$cursorLayer.setBlinking(false);\n        clearInterval(timerId);\n        onDragInterval();\n        timerId = setInterval(onDragInterval, 20);\n        counter = 0;\n        event.addListener(document, \"mousemove\", onMouseMove);\n    }\n    function clearDragMarker() {\n        clearInterval(timerId);\n        editor.session.removeMarker(dragSelectionMarker);\n        dragSelectionMarker = null;\n        editor.selection.fromOrientedRange(range);\n        if (editor.isFocused() && !isInternal)\n            editor.$resetCursorStyle();\n        range = null;\n        dragCursor = null;\n        counter = 0;\n        autoScrollStartTime = null;\n        cursorMovedTime = null;\n        event.removeListener(document, \"mousemove\", onMouseMove);\n    }\n    var onMouseMoveTimer = null;\n    function onMouseMove() {\n        if (onMouseMoveTimer == null) {\n            onMouseMoveTimer = setTimeout(function () {\n                if (onMouseMoveTimer != null && dragSelectionMarker)\n                    clearDragMarker();\n            }, 20);\n        }\n    }\n    function canAccept(dataTransfer) {\n        var types = dataTransfer.types;\n        return !types || Array.prototype.some.call(types, function (type) {\n            return type == 'text/plain' || type == 'Text';\n        });\n    }\n    function getDropEffect(e) {\n        var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n        var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n        var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n        var effectAllowed = \"uninitialized\";\n        try {\n            effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n        }\n        catch (e) { }\n        var dropEffect = \"none\";\n        if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n        else if (moveAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"move\";\n        else if (copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n        return dropEffect;\n    }\n}\n(function () {\n    this.dragWait = function () {\n        var interval = Date.now() - this.mousedownEvent.time;\n        if (interval > this.editor.getDragDelay())\n            this.startDrag();\n    };\n    this.dragWaitEnd = function () {\n        var target = this.editor.container;\n        target.draggable = false;\n        this.startSelect(this.mousedownEvent.getDocumentPosition());\n        this.selectEnd();\n    };\n    this.dragReadyEnd = function (e) {\n        this.editor.$resetCursorStyle();\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n        this.dragWaitEnd();\n    };\n    this.startDrag = function () {\n        this.cancelDrag = false;\n        var editor = this.editor;\n        var target = editor.container;\n        target.draggable = true;\n        editor.renderer.$cursorLayer.setBlinking(false);\n        editor.setStyle(\"ace_dragging\");\n        var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n        editor.renderer.setCursorStyle(cursorStyle);\n        this.setState(\"dragReady\");\n    };\n    this.onMouseDrag = function (e) {\n        var target = this.editor.container;\n        if (useragent.isIE && this.state == \"dragReady\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 3)\n                target.dragDrop();\n        }\n        if (this.state === \"dragWait\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 0) {\n                target.draggable = false;\n                this.startSelect(this.mousedownEvent.getDocumentPosition());\n            }\n        }\n    };\n    this.onMouseDown = function (e) {\n        if (!this.$dragEnabled)\n            return;\n        this.mousedownEvent = e;\n        var editor = this.editor;\n        var inSelection = e.inSelection();\n        var button = e.getButton();\n        var clickCount = e.domEvent.detail || 1;\n        if (clickCount === 1 && button === 0 && inSelection) {\n            if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n                return;\n            this.mousedownEvent.time = Date.now();\n            var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n            if (\"unselectable\" in eventTarget)\n                eventTarget.unselectable = \"on\";\n            if (editor.getDragDelay()) {\n                if (useragent.isWebKit) {\n                    this.cancelDrag = true;\n                    var mouseTarget = editor.container;\n                    mouseTarget.draggable = true;\n                }\n                this.setState(\"dragWait\");\n            }\n            else {\n                this.startDrag();\n            }\n            this.captureMouse(e, this.onMouseDrag.bind(this));\n            e.defaultPrevented = true;\n        }\n    };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n    var mode = \"scroll\";\n    var startX;\n    var startY;\n    var touchStartT;\n    var lastT;\n    var longTouchTimer;\n    var animationTimer;\n    var animationSteps = 0;\n    var pos;\n    var clickCount = 0;\n    var vX = 0;\n    var vY = 0;\n    var pressed;\n    var contextMenu;\n    function createContextMenu() {\n        var clipboard = window.navigator && window.navigator.clipboard;\n        var isOpen = false;\n        var updateMenu = function () {\n            var selected = editor.getCopyText();\n            var hasUndo = editor.session.getUndoManager().hasUndo();\n            contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n                !selected && canExecuteCommand(\"selectall\") && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n                selected && canExecuteCommand(\"copy\") && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n                selected && canExecuteCommand(\"cut\") && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n                clipboard && canExecuteCommand(\"paste\") && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n                hasUndo && canExecuteCommand(\"undo\") && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n                canExecuteCommand(\"find\") && [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n                canExecuteCommand(\"openCommandPalette\") && [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n            ] : [\"span\"]), contextMenu.firstChild);\n        };\n        var canExecuteCommand = function (/** @type {string} */ cmd) {\n            return editor.commands.canExecute(cmd, editor);\n        };\n        var handleClick = function (e) {\n            var action = e.target.getAttribute(\"action\");\n            if (action == \"more\" || !isOpen) {\n                isOpen = !isOpen;\n                return updateMenu();\n            }\n            if (action == \"paste\") {\n                clipboard.readText().then(function (text) {\n                    editor.execCommand(action, text);\n                });\n            }\n            else if (action) {\n                if (action == \"cut\" || action == \"copy\") {\n                    if (clipboard)\n                        clipboard.writeText(editor.getCopyText());\n                    else\n                        document.execCommand(\"copy\");\n                }\n                editor.execCommand(action);\n            }\n            contextMenu.firstChild.style.display = \"none\";\n            isOpen = false;\n            if (action != \"openCommandPalette\")\n                editor.focus();\n        };\n        contextMenu = dom.buildDom([\"div\",\n            {\n                class: \"ace_mobile-menu\",\n                onclick: handleClick\n            },\n            [\"span\"],\n            [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n        ], editor.container);\n        contextMenu.addEventListener(\"touchstart\", function (e) {\n            mode = \"menu\";\n            e.stopPropagation();\n            e.preventDefault();\n            editor.textInput.focus();\n        });\n        contextMenu.addEventListener(\"touchend\", function (e) {\n            e.stopPropagation();\n            e.preventDefault();\n            handleClick(e);\n        });\n    }\n    function showContextMenu() {\n        if (!editor.getOption(\"enableMobileMenu\")) {\n            if (contextMenu) {\n                hideContextMenu();\n            }\n            return;\n        }\n        if (!contextMenu)\n            createContextMenu();\n        var cursor = editor.selection.cursor;\n        var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n        var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n        var scrollLeft = editor.renderer.scrollLeft;\n        var rect = editor.container.getBoundingClientRect();\n        contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n        if (pagePos.pageX - rect.left < rect.width - 70) {\n            contextMenu.style.left = \"\";\n            contextMenu.style.right = \"10px\";\n        }\n        else {\n            contextMenu.style.right = \"\";\n            contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n        }\n        contextMenu.style.display = \"\";\n        contextMenu.firstChild.style.display = \"none\";\n        editor.on(\"input\", hideContextMenu);\n    }\n    function hideContextMenu(e) {\n        if (contextMenu)\n            contextMenu.style.display = \"none\";\n        editor.off(\"input\", hideContextMenu);\n    }\n    function handleLongTap() {\n        longTouchTimer = null;\n        clearTimeout(longTouchTimer);\n        var range = editor.selection.getRange();\n        var inSelection = range.contains(pos.row, pos.column);\n        if (range.isEmpty() || !inSelection) {\n            editor.selection.moveToPosition(pos);\n            editor.selection.selectWord();\n        }\n        mode = \"wait\";\n        showContextMenu();\n    }\n    function switchToSelectionMode() {\n        longTouchTimer = null;\n        clearTimeout(longTouchTimer);\n        editor.selection.moveToPosition(pos);\n        var range = clickCount >= 2\n            ? editor.selection.getLineRange(pos.row)\n            : editor.session.getBracketRange(pos);\n        if (range && !range.isEmpty()) {\n            editor.selection.setRange(range);\n        }\n        else {\n            editor.selection.selectWord();\n        }\n        mode = \"wait\";\n    }\n    event.addListener(el, \"contextmenu\", function (e) {\n        if (!pressed)\n            return;\n        var textarea = editor.textInput.getElement();\n        textarea.focus();\n    }, editor);\n    event.addListener(el, \"touchstart\", function (e) {\n        var touches = e.touches;\n        if (longTouchTimer || touches.length > 1) {\n            clearTimeout(longTouchTimer);\n            longTouchTimer = null;\n            touchStartT = -1;\n            mode = \"zoom\";\n            return;\n        }\n        pressed = editor.$mouseHandler.isMousePressed = true;\n        var h = editor.renderer.layerConfig.lineHeight;\n        var w = editor.renderer.layerConfig.lineHeight;\n        var t = e.timeStamp;\n        lastT = t;\n        var touchObj = touches[0];\n        var x = touchObj.clientX;\n        var y = touchObj.clientY;\n        if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n            touchStartT = -1;\n        startX = e.clientX = x;\n        startY = e.clientY = y;\n        vX = vY = 0;\n        var ev = new MouseEvent(e, editor);\n        pos = ev.getDocumentPosition();\n        if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n            clickCount++;\n            e.preventDefault();\n            e.button = 0;\n            switchToSelectionMode();\n        }\n        else {\n            clickCount = 0;\n            var cursor = editor.selection.cursor;\n            var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n            var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n            var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n            var rect = editor.renderer.scroller.getBoundingClientRect();\n            var offsetTop = editor.renderer.layerConfig.offset;\n            var offsetLeft = editor.renderer.scrollLeft;\n            var weightedDistance = function (x, y) {\n                x = x / w;\n                y = y / h - 0.75;\n                return x * x + y * y;\n            };\n            if (e.clientX < rect.left) {\n                mode = \"zoom\";\n                return;\n            }\n            var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n            var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n            if (diff1 < 3.5 && diff2 < 3.5)\n                mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n            if (diff2 < 3.5)\n                mode = \"anchor\";\n            else if (diff1 < 3.5)\n                mode = \"cursor\";\n            else\n                mode = \"scroll\";\n            longTouchTimer = setTimeout(handleLongTap, 450);\n        }\n        touchStartT = t;\n    }, editor);\n    event.addListener(el, \"touchend\", function (e) {\n        pressed = editor.$mouseHandler.isMousePressed = false;\n        if (animationTimer)\n            clearInterval(animationTimer);\n        if (mode == \"zoom\") {\n            mode = \"\";\n            animationSteps = 0;\n        }\n        else if (longTouchTimer) {\n            editor.selection.moveToPosition(pos);\n            animationSteps = 0;\n            showContextMenu();\n        }\n        else if (mode == \"scroll\") {\n            animate();\n            hideContextMenu();\n        }\n        else {\n            showContextMenu();\n        }\n        clearTimeout(longTouchTimer);\n        longTouchTimer = null;\n    }, editor);\n    event.addListener(el, \"touchmove\", function (e) {\n        if (longTouchTimer) {\n            clearTimeout(longTouchTimer);\n            longTouchTimer = null;\n        }\n        var touches = e.touches;\n        if (touches.length > 1 || mode == \"zoom\")\n            return;\n        var touchObj = touches[0];\n        var wheelX = startX - touchObj.clientX;\n        var wheelY = startY - touchObj.clientY;\n        if (mode == \"wait\") {\n            if (wheelX * wheelX + wheelY * wheelY > 4)\n                mode = \"cursor\";\n            else\n                return e.preventDefault();\n        }\n        startX = touchObj.clientX;\n        startY = touchObj.clientY;\n        e.clientX = touchObj.clientX;\n        e.clientY = touchObj.clientY;\n        var t = e.timeStamp;\n        var dt = t - lastT;\n        lastT = t;\n        if (mode == \"scroll\") {\n            var mouseEvent = new MouseEvent(e, editor);\n            mouseEvent.speed = 1;\n            mouseEvent.wheelX = wheelX;\n            mouseEvent.wheelY = wheelY;\n            if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n                wheelX = 0;\n            if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n                wheelY = 0;\n            if (dt != 0) {\n                vX = wheelX / dt;\n                vY = wheelY / dt;\n            }\n            editor._emit(\"mousewheel\", mouseEvent);\n            if (!mouseEvent.propagationStopped) {\n                vX = vY = 0;\n            }\n        }\n        else {\n            var ev = new MouseEvent(e, editor);\n            var pos = ev.getDocumentPosition();\n            if (mode == \"cursor\")\n                editor.selection.moveCursorToPosition(pos);\n            else if (mode == \"anchor\")\n                editor.selection.setSelectionAnchor(pos.row, pos.column);\n            editor.renderer.scrollCursorIntoView(pos);\n            e.preventDefault();\n        }\n    }, editor);\n    function animate() {\n        animationSteps += 60;\n        animationTimer = setInterval(function () {\n            if (animationSteps-- <= 0) {\n                clearInterval(animationTimer);\n                animationTimer = null;\n            }\n            if (Math.abs(vX) < 0.01)\n                vX = 0;\n            if (Math.abs(vY) < 0.01)\n                vY = 0;\n            if (animationSteps < 20)\n                vX = 0.9 * vX;\n            if (animationSteps < 20)\n                vY = 0.9 * vY;\n            var oldScrollTop = editor.session.getScrollTop();\n            editor.renderer.scrollBy(10 * vX, 10 * vY);\n            if (oldScrollTop == editor.session.getScrollTop())\n                animationSteps = 0;\n        }, 10);\n    }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = /** @class */ (function () {\n    function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout;\n        var _self = this;\n        this.editor = editor;\n        new DefaultHandlers(this);\n        new DefaultGutterHandler(this);\n        new DragdropHandler(this);\n        var focusEditor = function (e) {\n            var windowBlurred = !document.hasFocus || !document.hasFocus()\n                || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n            if (windowBlurred)\n                window.focus();\n            editor.focus();\n            setTimeout(function () {\n                if (!editor.isFocused())\n                    editor.focus();\n            });\n        };\n        var mouseTarget = editor.renderer.getMouseEventTarget();\n        event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n        event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n        event.addMultiMouseDownListener([\n            mouseTarget,\n            editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n            editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n            editor.textInput && editor.textInput.getElement()\n        ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n        event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n        addTouchListeners(editor.container, editor);\n        var gutterEl = editor.renderer.$gutter;\n        event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n        event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n        event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n        event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n        event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n        event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n        if (useragent.isIE && editor.renderer.scrollBarV) {\n            event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n            event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n        }\n        editor.on(\"mousemove\", function (e) {\n            if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n                return;\n            var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n            var range = editor.session.selection.getRange();\n            var renderer = editor.renderer;\n            if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n                renderer.setCursorStyle(\"default\");\n            }\n            else {\n                renderer.setCursorStyle(\"\");\n            }\n        }, //@ts-expect-error TODO: seems mistyping - should be boolean\n        editor);\n    }\n    MouseHandler.prototype.onMouseEvent = function (name, e) {\n        if (!this.editor.session)\n            return;\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n    MouseHandler.prototype.onMouseMove = function (name, e) {\n        var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n        if (!listeners || !listeners.length)\n            return;\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n    MouseHandler.prototype.onMouseWheel = function (name, e) {\n        var mouseEvent = new MouseEvent(e, this.editor);\n        mouseEvent.speed = this.$scrollSpeed * 2;\n        mouseEvent.wheelX = e.wheelX;\n        mouseEvent.wheelY = e.wheelY;\n        this.editor._emit(name, mouseEvent);\n    };\n    MouseHandler.prototype.setState = function (state) {\n        this.state = state;\n    };\n    MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) {\n        this.x = ev.x;\n        this.y = ev.y;\n        this.isMousePressed = true;\n        var editor = this.editor;\n        var renderer = this.editor.renderer;\n        renderer.$isMousePressed = true;\n        var self = this;\n        var continueCapture = true;\n        var onMouseMove = function (e) {\n            if (!e)\n                return;\n            if (useragent.isWebKit && !e.which && self.releaseMouse)\n                return self.releaseMouse();\n            self.x = e.clientX;\n            self.y = e.clientY;\n            mouseMoveHandler && mouseMoveHandler(e);\n            self.mouseEvent = new MouseEvent(e, self.editor);\n            self.$mouseMoved = true;\n        };\n        var onCaptureEnd = function (e) {\n            editor.off(\"beforeEndOperation\", onOperationEnd);\n            continueCapture = false;\n            if (editor.session)\n                onCaptureUpdate();\n            self[self.state + \"End\"] && self[self.state + \"End\"](e);\n            self.state = \"\";\n            self.isMousePressed = renderer.$isMousePressed = false;\n            if (renderer.$keepTextAreaAtCursor)\n                renderer.$moveTextAreaToCursor();\n            self.$onCaptureMouseMove = self.releaseMouse = null;\n            e && self.onMouseEvent(\"mouseup\", e);\n            editor.endOperation();\n        };\n        var onCaptureUpdate = function () {\n            self[self.state] && self[self.state]();\n            self.$mouseMoved = false;\n        };\n        var onCaptureInterval = function () {\n            if (continueCapture) {\n                onCaptureUpdate();\n                event.nextFrame(onCaptureInterval);\n            }\n        };\n        if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n            return setTimeout(function () { onCaptureEnd(ev); });\n        }\n        var onOperationEnd = function (e) {\n            if (!self.releaseMouse)\n                return;\n            if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n                self[self.state + \"End\"] && self[self.state + \"End\"]();\n                self.state = \"\";\n                self.releaseMouse();\n            }\n        };\n        editor.on(\"beforeEndOperation\", onOperationEnd);\n        editor.startOperation({ command: { name: \"mouse\" } });\n        self.$onCaptureMouseMove = onMouseMove;\n        self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n        onCaptureInterval();\n    };\n    MouseHandler.prototype.cancelContextMenu = function () {\n        var stop = function (e) {\n            if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n                return;\n            this.editor.off(\"nativecontextmenu\", stop);\n            if (e && e.domEvent)\n                event.stopEvent(e.domEvent);\n        }.bind(this);\n        setTimeout(stop, 10);\n        this.editor.on(\"nativecontextmenu\", stop);\n    };\n    MouseHandler.prototype.destroy = function () {\n        if (this.releaseMouse)\n            this.releaseMouse();\n        if (this.$tooltip)\n            this.$tooltip.destroy();\n    };\n    return MouseHandler;\n}());\nMouseHandler.prototype.releaseMouse = null;\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n    scrollSpeed: { initialValue: 2 },\n    dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n    dragEnabled: { initialValue: true },\n    focusTimeout: { initialValue: 0 },\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar FoldHandler = /** @class */ (function () {\n    function FoldHandler(editor) {\n        editor.on(\"click\", function (e) {\n            var position = e.getDocumentPosition();\n            var session = editor.session;\n            var fold = session.getFoldAt(position.row, position.column, 1);\n            if (fold) {\n                if (e.getAccelKey())\n                    session.removeFold(fold);\n                else\n                    session.expandFold(fold);\n                e.stop();\n            }\n            var target = e.domEvent && e.domEvent.target;\n            if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n                if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n                    session.setOption(\"wrap\", !session.getUseWrapMode());\n                    editor.renderer.scrollCursorIntoView();\n                }\n            }\n        });\n        editor.on(\"gutterclick\", function (e) {\n            var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n            if (gutterRegion == \"foldWidgets\") {\n                var row = e.getDocumentPosition().row;\n                var session = editor.session;\n                if (session.foldWidgets && session.foldWidgets[row])\n                    editor.session.onFoldWidgetClick(row, e);\n                if (!editor.isFocused())\n                    editor.focus();\n                e.stop();\n            }\n        });\n        editor.on(\"gutterdblclick\", function (e) {\n            var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n            if (gutterRegion == \"foldWidgets\") {\n                var row = e.getDocumentPosition().row;\n                var session = editor.session;\n                var data = session.getParentFoldRangeData(row, true);\n                var range = data.range || data.firstRange;\n                if (range) {\n                    row = range.start.row;\n                    var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n                    if (fold) {\n                        session.removeFold(fold);\n                    }\n                    else {\n                        session.addFold(\"...\", range);\n                        editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n                    }\n                }\n                e.stop();\n            }\n        });\n    }\n    return FoldHandler;\n}());\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = /** @class */ (function () {\n    function KeyBinding(editor) {\n        this.$editor = editor;\n        this.$data = { editor: editor };\n        this.$handlers = [];\n        this.setDefaultHandler(editor.commands);\n    }\n    KeyBinding.prototype.setDefaultHandler = function (kb) {\n        this.removeKeyboardHandler(this.$defaultHandler);\n        this.$defaultHandler = kb;\n        this.addKeyboardHandler(kb, 0);\n    };\n    KeyBinding.prototype.setKeyboardHandler = function (kb) {\n        var h = this.$handlers;\n        if (h[h.length - 1] == kb)\n            return;\n        while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n            this.removeKeyboardHandler(h[h.length - 1]);\n        this.addKeyboardHandler(kb, 1);\n    };\n    KeyBinding.prototype.addKeyboardHandler = function (kb, pos) {\n        if (!kb)\n            return;\n        if (typeof kb == \"function\" && !kb.handleKeyboard)\n            kb.handleKeyboard = kb;\n        var i = this.$handlers.indexOf(kb);\n        if (i != -1)\n            this.$handlers.splice(i, 1);\n        if (pos == undefined)\n            this.$handlers.push(kb);\n        else\n            this.$handlers.splice(pos, 0, kb);\n        if (i == -1 && kb.attach)\n            kb.attach(this.$editor);\n    };\n    KeyBinding.prototype.removeKeyboardHandler = function (kb) {\n        var i = this.$handlers.indexOf(kb);\n        if (i == -1)\n            return false;\n        this.$handlers.splice(i, 1);\n        kb.detach && kb.detach(this.$editor);\n        return true;\n    };\n    KeyBinding.prototype.getKeyboardHandler = function () {\n        return this.$handlers[this.$handlers.length - 1];\n    };\n    KeyBinding.prototype.getStatusText = function () {\n        var data = this.$data;\n        var editor = data.editor;\n        return this.$handlers.map(function (h) {\n            return h.getStatusText && h.getStatusText(editor, data) || \"\";\n        }).filter(Boolean).join(\" \");\n    };\n    KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n        var toExecute;\n        var success = false;\n        var commands = this.$editor.commands;\n        for (var i = this.$handlers.length; i--;) {\n            toExecute = this.$handlers[i].handleKeyboard(\n            this.$data, hashId, keyString, keyCode, e);\n            if (!toExecute || !toExecute.command)\n                continue;\n            if (toExecute.command == \"null\") {\n                success = true;\n            }\n            else {\n                success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n            }\n            if (success && e && hashId != -1 &&\n                toExecute[\"passEvent\"] != true && toExecute.command[\"passEvent\"] != true) {\n                event.stopEvent(e);\n            }\n            if (success)\n                break;\n        }\n        if (!success && hashId == -1) {\n            toExecute = { command: \"insertstring\" };\n            success = commands.exec(\"insertstring\", this.$editor, keyString);\n        }\n        if (success && this.$editor._signal)\n            this.$editor._signal(\"keyboardActivity\", toExecute);\n        return success;\n    };\n    KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) {\n        var keyString = keyUtil.keyCodeToString(keyCode);\n        return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n    };\n    KeyBinding.prototype.onTextInput = function (text) {\n        return this.$callKeyboardHandlers(-1, text);\n    };\n    return KeyBinding;\n}());\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n    BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n    BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n    WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n    EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n    ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n    L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n    ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n    L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n    BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n    BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n    CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n    ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n    WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n    ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n    ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n    ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n    ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n    ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n    var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n    if (!charTypes) {\n        for (i = 0, charTypes = []; i < len; i++) {\n            charTypes[i] = _getCharacterType(chars[i]);\n        }\n    }\n    hiLevel = dir;\n    lastArabic = false;\n    hasUBAT_AL = false;\n    hasUBAT_B = false;\n    hasUBAT_S = false;\n    for (ix = 0; ix < len; ix++) {\n        prevState = newState;\n        classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n        newState = impTab[prevState][newClass];\n        action = newState & 0xF0;\n        newState &= 0x0F;\n        levels[ix] = newLevel = impTab[newState][5];\n        if (action > 0) {\n            if (action == 0x10) {\n                for (i = condPos; i < ix; i++) {\n                    levels[i] = 1;\n                }\n                condPos = -1;\n            }\n            else {\n                condPos = -1;\n            }\n        }\n        cond = impTab[newState][6];\n        if (cond) {\n            if (condPos == -1) {\n                condPos = ix;\n            }\n        }\n        else {\n            if (condPos > -1) {\n                for (i = condPos; i < ix; i++) {\n                    levels[i] = newLevel;\n                }\n                condPos = -1;\n            }\n        }\n        if (charTypes[ix] == B) {\n            levels[ix] = 0;\n        }\n        hiLevel |= newLevel;\n    }\n    if (hasUBAT_S) {\n        for (i = 0; i < len; i++) {\n            if (charTypes[i] == S) {\n                levels[i] = dir;\n                for (var j = i - 1; j >= 0; j--) {\n                    if (charTypes[j] == WS) {\n                        levels[j] = dir;\n                    }\n                    else {\n                        break;\n                    }\n                }\n            }\n        }\n    }\n}\nfunction _invertLevel(lev, levels, _array) {\n    if (hiLevel < lev) {\n        return;\n    }\n    if (lev == 1 && dir == RTL && !hasUBAT_B) {\n        _array.reverse();\n        return;\n    }\n    var len = _array.length, start = 0, end, lo, hi, tmp;\n    while (start < len) {\n        if (levels[start] >= lev) {\n            end = start + 1;\n            while (end < len && levels[end] >= lev) {\n                end++;\n            }\n            for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n                tmp = _array[lo];\n                _array[lo] = _array[hi];\n                _array[hi] = tmp;\n            }\n            start = end;\n        }\n        start++;\n    }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n    var cType = types[ix], wType, nType, len, i;\n    switch (cType) {\n        case L:\n        case R:\n            lastArabic = false;\n        case ON:\n        case AN:\n            return cType;\n        case EN:\n            return lastArabic ? AN : EN;\n        case AL:\n            lastArabic = true;\n            hasUBAT_AL = true;\n            return R;\n        case WS:\n            return ON;\n        case CS:\n            if (ix < 1 || (ix + 1) >= types.length ||\n                ((wType = classes[ix - 1]) != EN && wType != AN) ||\n                ((nType = types[ix + 1]) != EN && nType != AN)) {\n                return ON;\n            }\n            if (lastArabic) {\n                nType = AN;\n            }\n            return nType == wType ? nType : ON;\n        case ES:\n            wType = ix > 0 ? classes[ix - 1] : B;\n            if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n                return EN;\n            }\n            return ON;\n        case ET:\n            if (ix > 0 && classes[ix - 1] == EN) {\n                return EN;\n            }\n            if (lastArabic) {\n                return ON;\n            }\n            i = ix + 1;\n            len = types.length;\n            while (i < len && types[i] == ET) {\n                i++;\n            }\n            if (i < len && types[i] == EN) {\n                return EN;\n            }\n            return ON;\n        case NSM:\n            len = types.length;\n            i = ix + 1;\n            while (i < len && types[i] == NSM) {\n                i++;\n            }\n            if (i < len) {\n                var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n                wType = types[i];\n                if (rtlCandidate && (wType == R || wType == AL)) {\n                    return R;\n                }\n            }\n            if (ix < 1 || (wType = types[ix - 1]) == B) {\n                return ON;\n            }\n            return classes[ix - 1];\n        case B:\n            lastArabic = false;\n            hasUBAT_B = true;\n            return dir;\n        case S:\n            hasUBAT_S = true;\n            return ON;\n        case LRE:\n        case RLE:\n        case LRO:\n        case RLO:\n        case PDF:\n            lastArabic = false;\n        case BN:\n            return ON;\n    }\n}\nfunction _getCharacterType(ch) {\n    var uc = ch.charCodeAt(0), hi = uc >> 8;\n    if (hi == 0) {\n        return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n    }\n    else if (hi == 5) {\n        return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n    }\n    else if (hi == 6) {\n        if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n            return NSM;\n        else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n            return AN;\n        else if (uc == 0x066A)\n            return ET;\n        else if (/[\\u06f0-\\u06f9]/.test(ch))\n            return EN;\n        else\n            return AL;\n    }\n    else if (hi == 0x20 && uc <= 0x205F) {\n        return UnicodeTBL20[uc & 0xFF];\n    }\n    else if (hi == 0xFE) {\n        return (uc >= 0xFE70 ? AL : ON);\n    }\n    return ON;\n}\nfunction _isArabicDiacritics(ch) {\n    return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n    if (text.length < 2)\n        return {};\n    var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n    dir = isRtl ? RTL : LTR;\n    _computeLevels(chars, levels, chars.length, textCharTypes);\n    for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n        ;\n    _invertLevel(2, levels, logicalFromVisual);\n    _invertLevel(1, levels, logicalFromVisual);\n    for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n        if (textCharTypes[i] === AN) {\n            levels[i] = exports.AN;\n        }\n        else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n            || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n            levels[i] = exports.ON_R;\n        }\n        else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n            levels[i - 1] = levels[i] = exports.R_H;\n            i++;\n        }\n    }\n    if (chars[chars.length - 1] === exports.DOT)\n        levels[chars.length - 1] = exports.B;\n    if (chars[0] === '\\u202B')\n        levels[0] = exports.RLE;\n    for (var i = 0; i < logicalFromVisual.length; i++) {\n        bidiLevels[i] = levels[logicalFromVisual[i]];\n    }\n    return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n    var ret = false;\n    for (var i = 0; i < text.length; i++) {\n        textCharTypes[i] = _getCharacterType(text.charAt(i));\n        if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n            ret = true;\n    }\n    return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n    for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n        if (rowMap.logicalFromVisual[i] == logIdx)\n            return i;\n    }\n    return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = /** @class */ (function () {\n    function BidiHandler(session) {\n        this.session = session;\n        this.bidiMap = {};\n        this.currentRow = null;\n        this.bidiUtil = bidiUtil;\n        this.charWidths = [];\n        this.EOL = \"\\xAC\";\n        this.showInvisibles = true;\n        this.isRtlDir = false;\n        this.$isRtl = false;\n        this.line = \"\";\n        this.wrapIndent = 0;\n        this.EOF = \"\\xB6\";\n        this.RLE = \"\\u202B\";\n        this.contentWidth = 0;\n        this.fontMetrics = null;\n        this.rtlLineOffset = 0;\n        this.wrapOffset = 0;\n        this.isMoveLeftOperation = false;\n        this.seenBidi = bidiRE.test(session.getValue());\n    }\n    BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) {\n        if (!this.seenBidi)\n            return false;\n        if (screenRow !== this.currentRow) {\n            this.currentRow = screenRow;\n            this.updateRowLine(docRow, splitIndex);\n            this.updateBidiMap();\n        }\n        return this.bidiMap.bidiLevels;\n    };\n    BidiHandler.prototype.onChange = function (delta) {\n        if (!this.seenBidi) {\n            if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n                this.seenBidi = true;\n                this.currentRow = null;\n            }\n        }\n        else {\n            this.currentRow = null;\n        }\n    };\n    BidiHandler.prototype.getDocumentRow = function () {\n        var docRow = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            if (index >= 0)\n                docRow = this.session.$docRowCache[index];\n        }\n        return docRow;\n    };\n    BidiHandler.prototype.getSplitIndex = function () {\n        var splitIndex = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            while (this.currentRow - splitIndex > 0) {\n                currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n                if (currentIndex !== prevIndex)\n                    break;\n                prevIndex = currentIndex;\n                splitIndex++;\n            }\n        }\n        else {\n            splitIndex = this.currentRow;\n        }\n        return splitIndex;\n    };\n    BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) {\n        if (docRow === undefined)\n            docRow = this.getDocumentRow();\n        var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n        this.wrapIndent = 0;\n        this.line = this.session.getLine(docRow);\n        this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n        if (this.session.$useWrapMode) {\n            var splits = this.session.$wrapData[docRow];\n            if (splits) {\n                if (splitIndex === undefined)\n                    splitIndex = this.getSplitIndex();\n                if (splitIndex > 0 && splits.length) {\n                    this.wrapIndent = splits.indent;\n                    this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n                    this.line = (splitIndex < splits.length) ?\n                        this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n                        this.line.substring(splits[splits.length - 1]);\n                }\n                else {\n                    this.line = this.line.substring(0, splits[splitIndex]);\n                }\n                if (splitIndex == splits.length) {\n                    this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n                }\n            }\n        }\n        else {\n            this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n        }\n        var session = this.session, shift = 0, size;\n        this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n            if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n                size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n                shift += size - 1;\n                return lang.stringRepeat(bidiUtil.DOT, size);\n            }\n            return ch;\n        });\n        if (this.isRtlDir) {\n            this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n            this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n        }\n    };\n    BidiHandler.prototype.updateBidiMap = function () {\n        var textCharTypes = [];\n        if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n            this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n        }\n        else {\n            this.bidiMap = {};\n        }\n    };\n    BidiHandler.prototype.markAsDirty = function () {\n        this.currentRow = null;\n    };\n    BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) {\n        if (this.characterWidth === fontMetrics.$characterSize.width)\n            return;\n        this.fontMetrics = fontMetrics;\n        var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n        var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n        this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n        this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n        this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n        this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n        this.currentRow = null;\n    };\n    BidiHandler.prototype.setShowInvisibles = function (showInvisibles) {\n        this.showInvisibles = showInvisibles;\n        this.currentRow = null;\n    };\n    BidiHandler.prototype.setEolChar = function (eolChar) {\n        this.EOL = eolChar;\n    };\n    BidiHandler.prototype.setContentWidth = function (width) {\n        this.contentWidth = width;\n    };\n    BidiHandler.prototype.isRtlLine = function (row) {\n        if (this.$isRtl)\n            return true;\n        if (row != undefined)\n            return (this.session.getLine(row).charAt(0) == this.RLE);\n        else\n            return this.isRtlDir;\n    };\n    BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) {\n        var cursor = editor.getCursorPosition();\n        for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n            if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n                editor.session.doc.removeInLine(row, 0, 1);\n            else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n                editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n        }\n    };\n    BidiHandler.prototype.getPosLeft = function (col) {\n        col -= this.wrapIndent;\n        var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n        var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n        var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n        if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n            visualIdx++;\n        for (var i = 0; i < visualIdx; i++) {\n            left += this.charWidths[levels[i]];\n        }\n        if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n            left += this.charWidths[levels[visualIdx]];\n        if (this.wrapIndent)\n            left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n        if (this.isRtlDir)\n            left += this.rtlLineOffset;\n        return left;\n    };\n    BidiHandler.prototype.getSelections = function (startCol, endCol) {\n        var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n        if (this.wrapIndent)\n            offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n        for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n            logIdx = map.logicalFromVisual[visIdx];\n            level = levels[visIdx];\n            isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n            if (isSelected && !isSelectedPrev) {\n                selectionStart = offset;\n            }\n            else if (!isSelected && isSelectedPrev) {\n                selections.push({ left: selectionStart, width: offset - selectionStart });\n            }\n            offset += this.charWidths[level];\n            isSelectedPrev = isSelected;\n        }\n        if (isSelected && (visIdx === levels.length)) {\n            selections.push({ left: selectionStart, width: offset - selectionStart });\n        }\n        if (this.isRtlDir) {\n            for (var i = 0; i < selections.length; i++) {\n                selections[i].left += this.rtlLineOffset;\n            }\n        }\n        return selections;\n    };\n    BidiHandler.prototype.offsetToCol = function (posX) {\n        if (this.isRtlDir)\n            posX -= this.rtlLineOffset;\n        var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n        if (this.wrapIndent)\n            posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n        while (posX > offset + charWidth / 2) {\n            offset += charWidth;\n            if (visualIdx === levels.length - 1) {\n                charWidth = 0;\n                break;\n            }\n            charWidth = this.charWidths[levels[++visualIdx]];\n        }\n        if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n            if (posX < offset)\n                visualIdx--;\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n        }\n        else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n            logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n                : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n        }\n        else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n            || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n            logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n        }\n        else {\n            if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n                visualIdx--;\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n        }\n        if (logicalIdx === 0 && this.isRtlDir)\n            logicalIdx++;\n        return (logicalIdx + this.wrapIndent);\n    };\n    return BidiHandler;\n}());\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = /** @class */ (function () {\n    function Selection(session) {\n        this.session = session;\n        this.doc = session.getDocument();\n        this.clearSelection();\n        this.cursor = this.lead = this.doc.createAnchor(0, 0);\n        this.anchor = this.doc.createAnchor(0, 0);\n        this.$silent = false;\n        var self = this;\n        this.cursor.on(\"change\", function (e) {\n            self.$cursorChanged = true;\n            if (!self.$silent)\n                self._emit(\"changeCursor\");\n            if (!self.$isEmpty && !self.$silent)\n                self._emit(\"changeSelection\");\n            if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n                self.$desiredColumn = null;\n        });\n        this.anchor.on(\"change\", function () {\n            self.$anchorChanged = true;\n            if (!self.$isEmpty && !self.$silent)\n                self._emit(\"changeSelection\");\n        });\n    }\n    Selection.prototype.isEmpty = function () {\n        return this.$isEmpty || (this.anchor.row == this.lead.row &&\n            this.anchor.column == this.lead.column);\n    };\n    Selection.prototype.isMultiLine = function () {\n        return !this.$isEmpty && this.anchor.row != this.cursor.row;\n    };\n    Selection.prototype.getCursor = function () {\n        return this.lead.getPosition();\n    };\n    Selection.prototype.setAnchor = function (row, column) {\n        this.$isEmpty = false;\n        this.anchor.setPosition(row, column);\n    };\n    Selection.prototype.getAnchor = function () {\n        if (this.$isEmpty)\n            return this.getSelectionLead();\n        return this.anchor.getPosition();\n    };\n    Selection.prototype.getSelectionLead = function () {\n        return this.lead.getPosition();\n    };\n    Selection.prototype.isBackwards = function () {\n        var anchor = this.anchor;\n        var lead = this.lead;\n        return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n    };\n    Selection.prototype.getRange = function () {\n        var anchor = this.anchor;\n        var lead = this.lead;\n        if (this.$isEmpty)\n            return Range.fromPoints(lead, lead);\n        return this.isBackwards()\n            ? Range.fromPoints(lead, anchor)\n            : Range.fromPoints(anchor, lead);\n    };\n    Selection.prototype.clearSelection = function () {\n        if (!this.$isEmpty) {\n            this.$isEmpty = true;\n            this._emit(\"changeSelection\");\n        }\n    };\n    Selection.prototype.selectAll = function () {\n        this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n    };\n    Selection.prototype.setRange = function (range, reverse) {\n        var start = reverse ? range.end : range.start;\n        var end = reverse ? range.start : range.end;\n        this.$setSelection(start.row, start.column, end.row, end.column);\n    };\n    Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n        if (this.$silent)\n            return;\n        var wasEmpty = this.$isEmpty;\n        var wasMultiselect = this.inMultiSelectMode;\n        this.$silent = true;\n        this.$cursorChanged = this.$anchorChanged = false;\n        this.anchor.setPosition(anchorRow, anchorColumn);\n        this.cursor.setPosition(cursorRow, cursorColumn);\n        this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n        this.$silent = false;\n        if (this.$cursorChanged)\n            this._emit(\"changeCursor\");\n        if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n            this._emit(\"changeSelection\");\n    };\n    Selection.prototype.$moveSelection = function (mover) {\n        var lead = this.lead;\n        if (this.$isEmpty)\n            this.setSelectionAnchor(lead.row, lead.column);\n        mover.call(this);\n    };\n    Selection.prototype.selectTo = function (row, column) {\n        this.$moveSelection(function () {\n            this.moveCursorTo(row, column);\n        });\n    };\n    Selection.prototype.selectToPosition = function (pos) {\n        this.$moveSelection(function () {\n            this.moveCursorToPosition(pos);\n        });\n    };\n    Selection.prototype.moveTo = function (row, column) {\n        this.clearSelection();\n        this.moveCursorTo(row, column);\n    };\n    Selection.prototype.moveToPosition = function (pos) {\n        this.clearSelection();\n        this.moveCursorToPosition(pos);\n    };\n    Selection.prototype.selectUp = function () {\n        this.$moveSelection(this.moveCursorUp);\n    };\n    Selection.prototype.selectDown = function () {\n        this.$moveSelection(this.moveCursorDown);\n    };\n    Selection.prototype.selectRight = function () {\n        this.$moveSelection(this.moveCursorRight);\n    };\n    Selection.prototype.selectLeft = function () {\n        this.$moveSelection(this.moveCursorLeft);\n    };\n    Selection.prototype.selectLineStart = function () {\n        this.$moveSelection(this.moveCursorLineStart);\n    };\n    Selection.prototype.selectLineEnd = function () {\n        this.$moveSelection(this.moveCursorLineEnd);\n    };\n    Selection.prototype.selectFileEnd = function () {\n        this.$moveSelection(this.moveCursorFileEnd);\n    };\n    Selection.prototype.selectFileStart = function () {\n        this.$moveSelection(this.moveCursorFileStart);\n    };\n    Selection.prototype.selectWordRight = function () {\n        this.$moveSelection(this.moveCursorWordRight);\n    };\n    Selection.prototype.selectWordLeft = function () {\n        this.$moveSelection(this.moveCursorWordLeft);\n    };\n    Selection.prototype.getWordRange = function (row, column) {\n        if (typeof column == \"undefined\") {\n            var cursor = row || this.lead;\n            row = cursor.row;\n            column = cursor.column;\n        }\n        return this.session.getWordRange(row, column);\n    };\n    Selection.prototype.selectWord = function () {\n        this.setSelectionRange(this.getWordRange());\n    };\n    Selection.prototype.selectAWord = function () {\n        var cursor = this.getCursor();\n        var range = this.session.getAWordRange(cursor.row, cursor.column);\n        this.setSelectionRange(range);\n    };\n    Selection.prototype.getLineRange = function (row, excludeLastChar) {\n        var rowStart = typeof row == \"number\" ? row : this.lead.row;\n        var rowEnd;\n        var foldLine = this.session.getFoldLine(rowStart);\n        if (foldLine) {\n            rowStart = foldLine.start.row;\n            rowEnd = foldLine.end.row;\n        }\n        else {\n            rowEnd = rowStart;\n        }\n        if (excludeLastChar === true)\n            return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n        else\n            return new Range(rowStart, 0, rowEnd + 1, 0);\n    };\n    Selection.prototype.selectLine = function () {\n        this.setSelectionRange(this.getLineRange());\n    };\n    Selection.prototype.moveCursorUp = function () {\n        this.moveCursorBy(-1, 0);\n    };\n    Selection.prototype.moveCursorDown = function () {\n        this.moveCursorBy(1, 0);\n    };\n    Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n        var start = cursor.column;\n        var end = cursor.column + tabSize;\n        if (direction < 0) {\n            start = cursor.column - tabSize;\n            end = cursor.column;\n        }\n        return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n    };\n    Selection.prototype.moveCursorLeft = function () {\n        var cursor = this.lead.getPosition(), fold;\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n        }\n        else if (cursor.column === 0) {\n            if (cursor.row > 0) {\n                this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, -tabSize);\n            }\n            else {\n                this.moveCursorBy(0, -1);\n            }\n        }\n    };\n    Selection.prototype.moveCursorRight = function () {\n        var cursor = this.lead.getPosition(), fold;\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n        }\n        else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n            if (this.lead.row < this.doc.getLength() - 1) {\n                this.moveCursorTo(this.lead.row + 1, 0);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            var cursor = this.lead;\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, tabSize);\n            }\n            else {\n                this.moveCursorBy(0, 1);\n            }\n        }\n    };\n    Selection.prototype.moveCursorLineStart = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var screenRow = this.session.documentToScreenRow(row, column);\n        var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n        var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n        var leadingSpace = beforeCursor.match(/^\\s*/);\n        if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n            firstColumnPosition.column += leadingSpace[0].length;\n        this.moveCursorToPosition(firstColumnPosition);\n    };\n    Selection.prototype.moveCursorLineEnd = function () {\n        var lead = this.lead;\n        var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n        if (this.lead.column == lineEnd.column) {\n            var line = this.session.getLine(lineEnd.row);\n            if (lineEnd.column == line.length) {\n                var textEnd = line.search(/\\s+$/);\n                if (textEnd > 0)\n                    lineEnd.column = textEnd;\n            }\n        }\n        this.moveCursorTo(lineEnd.row, lineEnd.column);\n    };\n    Selection.prototype.moveCursorFileEnd = function () {\n        var row = this.doc.getLength() - 1;\n        var column = this.doc.getLine(row).length;\n        this.moveCursorTo(row, column);\n    };\n    Selection.prototype.moveCursorFileStart = function () {\n        this.moveCursorTo(0, 0);\n    };\n    Selection.prototype.moveCursorLongWordRight = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n            return;\n        }\n        if (this.session.nonTokenRe.exec(rightOfCursor)) {\n            column += this.session.nonTokenRe.lastIndex;\n            this.session.nonTokenRe.lastIndex = 0;\n            rightOfCursor = line.substring(column);\n        }\n        if (column >= line.length) {\n            this.moveCursorTo(row, line.length);\n            this.moveCursorRight();\n            if (row < this.doc.getLength() - 1)\n                this.moveCursorWordRight();\n            return;\n        }\n        if (this.session.tokenRe.exec(rightOfCursor)) {\n            column += this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n        this.moveCursorTo(row, column);\n    };\n    Selection.prototype.moveCursorLongWordLeft = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n            return;\n        }\n        var str = this.session.getFoldStringAt(row, column, -1);\n        if (str == null) {\n            str = this.doc.getLine(row).substring(0, column);\n        }\n        var leftOfCursor = lang.stringReverse(str);\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        if (this.session.nonTokenRe.exec(leftOfCursor)) {\n            column -= this.session.nonTokenRe.lastIndex;\n            leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n            this.session.nonTokenRe.lastIndex = 0;\n        }\n        if (column <= 0) {\n            this.moveCursorTo(row, 0);\n            this.moveCursorLeft();\n            if (row > 0)\n                this.moveCursorWordLeft();\n            return;\n        }\n        if (this.session.tokenRe.exec(leftOfCursor)) {\n            column -= this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n        this.moveCursorTo(row, column);\n    };\n    Selection.prototype.$shortWordEndIndex = function (rightOfCursor) {\n        var index = 0, ch;\n        var whitespaceRe = /\\s/;\n        var tokenRe = this.session.tokenRe;\n        tokenRe.lastIndex = 0;\n        if (this.session.tokenRe.exec(rightOfCursor)) {\n            index = this.session.tokenRe.lastIndex;\n        }\n        else {\n            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                index++;\n            if (index < 1) {\n                tokenRe.lastIndex = 0;\n                while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n                    tokenRe.lastIndex = 0;\n                    index++;\n                    if (whitespaceRe.test(ch)) {\n                        if (index > 2) {\n                            index--;\n                            break;\n                        }\n                        else {\n                            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                                index++;\n                            if (index > 2)\n                                break;\n                        }\n                    }\n                }\n            }\n        }\n        tokenRe.lastIndex = 0;\n        return index;\n    };\n    Selection.prototype.moveCursorShortWordRight = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold)\n            return this.moveCursorTo(fold.end.row, fold.end.column);\n        if (column == line.length) {\n            var l = this.doc.getLength();\n            do {\n                row++;\n                rightOfCursor = this.doc.getLine(row);\n            } while (row < l && /^\\s*$/.test(rightOfCursor));\n            if (!/^\\s+/.test(rightOfCursor))\n                rightOfCursor = \"\";\n            column = 0;\n        }\n        var index = this.$shortWordEndIndex(rightOfCursor);\n        this.moveCursorTo(row, column + index);\n    };\n    Selection.prototype.moveCursorShortWordLeft = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1))\n            return this.moveCursorTo(fold.start.row, fold.start.column);\n        var line = this.session.getLine(row).substring(0, column);\n        if (column === 0) {\n            do {\n                row--;\n                line = this.doc.getLine(row);\n            } while (row > 0 && /^\\s*$/.test(line));\n            column = line.length;\n            if (!/\\s+$/.test(line))\n                line = \"\";\n        }\n        var leftOfCursor = lang.stringReverse(line);\n        var index = this.$shortWordEndIndex(leftOfCursor);\n        return this.moveCursorTo(row, column - index);\n    };\n    Selection.prototype.moveCursorWordRight = function () {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordRight();\n        else\n            this.moveCursorShortWordRight();\n    };\n    Selection.prototype.moveCursorWordLeft = function () {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordLeft();\n        else\n            this.moveCursorShortWordLeft();\n    };\n    Selection.prototype.moveCursorBy = function (rows, chars) {\n        var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n        var offsetX;\n        if (chars === 0) {\n            if (rows !== 0) {\n                if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n                    offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n                    screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n                }\n                else {\n                    offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n                }\n            }\n            if (this.$desiredColumn)\n                screenPos.column = this.$desiredColumn;\n            else\n                this.$desiredColumn = screenPos.column;\n        }\n        if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n            var widget = this.session.lineWidgets[this.lead.row];\n            if (rows < 0)\n                rows -= widget.rowsAbove || 0;\n            else if (rows > 0)\n                rows += widget.rowCount - (widget.rowsAbove || 0);\n        }\n        var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n        if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n        }\n        this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n    };\n    Selection.prototype.moveCursorToPosition = function (position) {\n        this.moveCursorTo(position.row, position.column);\n    };\n    Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) {\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            row = fold.start.row;\n            column = fold.start.column;\n        }\n        this.$keepDesiredColumnOnChange = true;\n        var line = this.session.getLine(row);\n        if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n            if (this.lead.row == row && this.lead.column == column + 1)\n                column = column - 1;\n            else\n                column = column + 1;\n        }\n        this.lead.setPosition(row, column);\n        this.$keepDesiredColumnOnChange = false;\n        if (!keepDesiredColumn)\n            this.$desiredColumn = null;\n    };\n    Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n        var pos = this.session.screenToDocumentPosition(row, column);\n        this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n    };\n    Selection.prototype.detach = function () {\n        this.lead.detach();\n        this.anchor.detach();\n    };\n    Selection.prototype.fromOrientedRange = function (range) {\n        this.setSelectionRange(range, range.cursor == range.start);\n        this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n    };\n    Selection.prototype.toOrientedRange = function (range) {\n        var r = this.getRange();\n        if (range) {\n            range.start.column = r.start.column;\n            range.start.row = r.start.row;\n            range.end.column = r.end.column;\n            range.end.row = r.end.row;\n        }\n        else {\n            range = r;\n        }\n        range.cursor = this.isBackwards() ? range.start : range.end;\n        range.desiredColumn = this.$desiredColumn;\n        return range;\n    };\n    Selection.prototype.getRangeOfMovements = function (func) {\n        var start = this.getCursor();\n        try {\n            func(this);\n            var end = this.getCursor();\n            return Range.fromPoints(start, end);\n        }\n        catch (e) {\n            return Range.fromPoints(start, start);\n        }\n        finally {\n            this.moveCursorToPosition(start);\n        }\n    };\n    Selection.prototype.toJSON = function () {\n        if (this.rangeCount) { var data = this.ranges.map(function (r) {\n                var r1 = r.clone();\n                r1.isBackwards = r.cursor == r.start;\n                return r1;\n            });\n        }\n        else { var data = this.getRange();\n            data.isBackwards = this.isBackwards();\n        }\n        return data;\n    };\n    Selection.prototype.fromJSON = function (data) {\n        if (data.start == undefined) {\n            if (this.rangeList && data.length > 1) {\n                this.toSingleRange(data[0]);\n                for (var i = data.length; i--;) {\n                    var r = Range.fromPoints(data[i].start, data[i].end);\n                    if (data[i].isBackwards)\n                        r.cursor = r.start;\n                    this.addRange(r, true);\n                }\n                return;\n            }\n            else {\n                data = data[0];\n            }\n        }\n        if (this.rangeList)\n            this.toSingleRange(data);\n        this.setSelectionRange(data, data.isBackwards);\n    };\n    Selection.prototype.isEqual = function (data) {\n        if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n            return false;\n        if (!data.length || !this.ranges)\n            return this.getRange().isEqual(data);\n        for (var i = this.ranges.length; i--;) {\n            if (!this.ranges[i].isEqual(data[i]))\n                return false;\n        }\n        return true;\n    };\n    return Selection;\n}());\nSelection.prototype.setSelectionAnchor = Selection.prototype.setAnchor;\nSelection.prototype.getSelectionAnchor = Selection.prototype.getAnchor;\nSelection.prototype.setSelectionRange = Selection.prototype.setRange;\noop.implement(Selection.prototype, EventEmitter);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/report_error\"], function(require, exports, module){\"use strict\";\nvar reportError = require(\"./lib/report_error\").reportError;\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n    function Tokenizer(rules) {\n        this.splitRegex;\n        this.states = rules;\n        this.regExps = {};\n        this.matchMappings = {};\n        for (var key in this.states) {\n            var state = this.states[key];\n            var ruleRegExps = [];\n            var matchTotal = 0;\n            var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n            var flag = \"g\";\n            var splitterRurles = [];\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                if (rule.defaultToken)\n                    mapping.defaultToken = rule.defaultToken;\n                if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n                    flag += \"i\";\n                if (rule.unicode && flag.indexOf(\"u\") === -1)\n                    flag += \"u\";\n                if (rule.regex == null)\n                    continue;\n                if (rule.regex instanceof RegExp)\n                    rule.regex = rule.regex.toString().slice(1, -1);\n                var adjustedregex = rule.regex;\n                var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n                if (Array.isArray(rule.token)) {\n                    if (rule.token.length == 1 || matchcount == 1) {\n                        rule.token = rule.token[0];\n                    }\n                    else if (matchcount - 1 != rule.token.length) {\n                        this.reportError(\"number of classes and regexp groups doesn't match\", {\n                            rule: rule,\n                            groupCount: matchcount - 1\n                        });\n                        rule.token = rule.token[0];\n                    }\n                    else {\n                        rule.tokenArray = rule.token;\n                        rule.token = null;\n                        rule.onMatch = this.$arrayTokens;\n                    }\n                }\n                else if (typeof rule.token == \"function\" && !rule.onMatch) {\n                    if (matchcount > 1)\n                        rule.onMatch = this.$applyToken;\n                    else\n                        rule.onMatch = rule.token;\n                }\n                if (matchcount > 1) {\n                    if (/\\\\\\d/.test(rule.regex)) {\n                        adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n                            return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n                        });\n                    }\n                    else {\n                        matchcount = 1;\n                        adjustedregex = this.removeCapturingGroups(rule.regex);\n                    }\n                    if (!rule.splitRegex && typeof rule.token != \"string\")\n                        splitterRurles.push(rule); // flag will be known only at the very end\n                }\n                mapping[matchTotal] = i;\n                matchTotal += matchcount;\n                ruleRegExps.push(adjustedregex);\n                if (!rule.onMatch)\n                    rule.onMatch = null;\n            }\n            if (!ruleRegExps.length) {\n                mapping[0] = 0;\n                ruleRegExps.push(\"$\");\n            }\n            splitterRurles.forEach(function (rule) {\n                rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n            }, this);\n            this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n        }\n    }\n    Tokenizer.prototype.$setMaxTokenCount = function (m) {\n        MAX_TOKEN_COUNT = m | 0;\n    };\n    Tokenizer.prototype.$applyToken = function (str) {\n        var values = this.splitRegex.exec(str).slice(1);\n        var types = this.token.apply(this, values);\n        if (typeof types === \"string\")\n            return [{ type: types, value: str }];\n        var tokens = [];\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i]\n                };\n        }\n        return tokens;\n    };\n    Tokenizer.prototype.$arrayTokens = function (str) {\n        if (!str)\n            return [];\n        var values = this.splitRegex.exec(str);\n        if (!values)\n            return \"text\";\n        var tokens = [];\n        var types = this.tokenArray;\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i + 1])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i + 1]\n                };\n        }\n        return tokens;\n    };\n    Tokenizer.prototype.removeCapturingGroups = function (src) {\n        var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n        return r;\n    };\n    Tokenizer.prototype.createSplitterRegexp = function (src, flag) {\n        if (src.indexOf(\"(?=\") != -1) {\n            var stack = 0;\n            var inChClass = false;\n            var lastCapture = {};\n            src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n                if (inChClass) {\n                    inChClass = square != \"]\";\n                }\n                else if (square) {\n                    inChClass = true;\n                }\n                else if (parenClose) {\n                    if (stack == lastCapture.stack) {\n                        lastCapture.end = index + 1;\n                        lastCapture.stack = -1;\n                    }\n                    stack--;\n                }\n                else if (parenOpen) {\n                    stack++;\n                    if (parenOpen.length != 1) {\n                        lastCapture.stack = stack;\n                        lastCapture.start = index;\n                    }\n                }\n                return m;\n            });\n            if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n                src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n        }\n        if (src.charAt(0) != \"^\")\n            src = \"^\" + src;\n        if (src.charAt(src.length - 1) != \"$\")\n            src += \"$\";\n        return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n    };\n    Tokenizer.prototype.getLineTokens = function (line, startState) {\n        if (startState && typeof startState != \"string\") {\n            var stack = startState.slice(0);\n            startState = stack[0];\n            if (startState === \"#tmp\") {\n                stack.shift();\n                startState = stack.shift();\n            }\n        }\n        else\n            var stack = [];\n        var currentState = /**@type{string}*/ (startState) || \"start\";\n        var state = this.states[currentState];\n        if (!state) {\n            currentState = \"start\";\n            state = this.states[currentState];\n        }\n        var mapping = this.matchMappings[currentState];\n        var re = this.regExps[currentState];\n        re.lastIndex = 0;\n        var match, tokens = [];\n        var lastIndex = 0;\n        var matchAttempts = 0;\n        var token = { type: null, value: \"\" };\n        while (match = re.exec(line)) {\n            var type = mapping.defaultToken;\n            var rule = null;\n            var value = match[0];\n            var index = re.lastIndex;\n            if (index - value.length > lastIndex) {\n                var skipped = line.substring(lastIndex, index - value.length);\n                if (token.type == type) {\n                    token.value += skipped;\n                }\n                else {\n                    if (token.type)\n                        tokens.push(token);\n                    token = { type: type, value: skipped };\n                }\n            }\n            for (var i = 0; i < match.length - 2; i++) {\n                if (match[i + 1] === undefined)\n                    continue;\n                rule = state[mapping[i]];\n                if (rule.onMatch)\n                    type = rule.onMatch(value, currentState, stack, line);\n                else\n                    type = rule.token;\n                if (rule.next) {\n                    if (typeof rule.next == \"string\") {\n                        currentState = rule.next;\n                    }\n                    else {\n                        currentState = rule.next(currentState, stack);\n                    }\n                    state = this.states[currentState];\n                    if (!state) {\n                        this.reportError(\"state doesn't exist\", currentState);\n                        currentState = \"start\";\n                        state = this.states[currentState];\n                    }\n                    mapping = this.matchMappings[currentState];\n                    lastIndex = index;\n                    re = this.regExps[currentState];\n                    re.lastIndex = index;\n                }\n                if (rule.consumeLineEnd)\n                    lastIndex = index;\n                break;\n            }\n            if (value) {\n                if (typeof type === \"string\") {\n                    if ((!rule || rule.merge !== false) && token.type === type) {\n                        token.value += value;\n                    }\n                    else {\n                        if (token.type)\n                            tokens.push(token);\n                        token = { type: type, value: value };\n                    }\n                }\n                else if (type) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = { type: null, value: \"\" };\n                    for (var i = 0; i < type.length; i++)\n                        tokens.push(type[i]);\n                }\n            }\n            if (lastIndex == line.length)\n                break;\n            lastIndex = index;\n            if (matchAttempts++ > MAX_TOKEN_COUNT) {\n                if (matchAttempts > 2 * line.length) {\n                    this.reportError(\"infinite loop with in ace tokenizer\", {\n                        startState: startState,\n                        line: line\n                    });\n                }\n                while (lastIndex < line.length) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {\n                        value: line.substring(lastIndex, lastIndex += 500),\n                        type: \"overflow\"\n                    };\n                }\n                currentState = \"start\";\n                stack = [];\n                break;\n            }\n        }\n        if (token.type)\n            tokens.push(token);\n        if (stack.length > 1) {\n            if (stack[0] !== currentState)\n                stack.unshift(\"#tmp\", currentState);\n        }\n        return {\n            tokens: tokens,\n            state: stack.length ? stack : currentState\n        };\n    };\n    return Tokenizer;\n}());\nTokenizer.prototype.reportError = reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nvar deepCopy = require(\"../lib/deep_copy\").deepCopy;\nvar TextHighlightRules;\nTextHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"empty_line\",\n                regex: '^$'\n            }, {\n                defaultToken: \"text\"\n            }]\n    };\n};\n(function () {\n    this.addRules = function (rules, prefix) {\n        if (!prefix) {\n            for (var key in rules)\n                this.$rules[key] = rules[key];\n            return;\n        }\n        for (var key in rules) {\n            var state = rules[key];\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                if (rule.next || rule.onMatch) {\n                    if (typeof rule.next == \"string\") {\n                        if (rule.next.indexOf(prefix) !== 0)\n                            rule.next = prefix + rule.next;\n                    }\n                    if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n                        rule.nextState = prefix + rule.nextState;\n                }\n            }\n            this.$rules[prefix + key] = state;\n        }\n    };\n    this.getRules = function () {\n        return this.$rules;\n    };\n    this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n        var embedRules = typeof HighlightRules == \"function\"\n            ? new HighlightRules().getRules()\n            : HighlightRules;\n        if (states) {\n            for (var i = 0; i < states.length; i++)\n                states[i] = prefix + states[i];\n        }\n        else {\n            states = [];\n            for (var key in embedRules)\n                states.push(prefix + key);\n        }\n        this.addRules(embedRules, prefix);\n        if (escapeRules) {\n            var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n            for (var i = 0; i < states.length; i++)\n                addRules.apply(this.$rules[states[i]], deepCopy(escapeRules));\n        }\n        if (!this.$embeds)\n            this.$embeds = [];\n        this.$embeds.push(prefix);\n    };\n    this.getEmbeds = function () {\n        return this.$embeds;\n    };\n    var pushState = function (currentState, stack) {\n        if (currentState != \"start\" || stack.length)\n            stack.unshift(this.nextState, currentState);\n        return this.nextState;\n    };\n    var popState = function (currentState, stack) {\n        stack.shift();\n        return stack.shift() || \"start\";\n    };\n    this.normalizeRules = function () {\n        var id = 0;\n        var rules = this.$rules;\n        function processState(key) {\n            var state = rules[key];\n            state[\"processed\"] = true;\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                var toInsert = null;\n                if (Array.isArray(rule)) {\n                    toInsert = rule;\n                    rule = {};\n                }\n                if (!rule.regex && rule.start) {\n                    rule.regex = rule.start;\n                    if (!rule.next)\n                        rule.next = [];\n                    rule.next.push({\n                        defaultToken: rule.token\n                    }, {\n                        token: rule.token + \".end\",\n                        regex: rule.end || rule.start,\n                        next: \"pop\"\n                    });\n                    rule.token = rule.token + \".start\";\n                    rule.push = true;\n                }\n                var next = rule.next || rule.push;\n                if (next && Array.isArray(next)) {\n                    var stateName = rule.stateName;\n                    if (!stateName) {\n                        stateName = rule.token;\n                        if (typeof stateName != \"string\")\n                            stateName = stateName[0] || \"\";\n                        if (rules[stateName])\n                            stateName += id++;\n                    }\n                    rules[stateName] = next;\n                    rule.next = stateName;\n                    processState(stateName);\n                }\n                else if (next == \"pop\") {\n                    rule.next = popState;\n                }\n                if (rule.push) {\n                    rule.nextState = rule.next || rule.push;\n                    rule.next = pushState;\n                    delete rule.push;\n                }\n                if (rule.rules) {\n                    for (var r in rule.rules) {\n                        if (rules[r]) {\n                            if (rules[r].push)\n                                rules[r].push.apply(rules[r], rule.rules[r]);\n                        }\n                        else {\n                            rules[r] = rule.rules[r];\n                        }\n                    }\n                }\n                var includeName = typeof rule == \"string\" ? rule : rule.include;\n                if (includeName) {\n                    if (includeName === \"$self\")\n                        includeName = \"start\";\n                    if (Array.isArray(includeName))\n                        toInsert = includeName.map(function (x) { return rules[x]; });\n                    else\n                        toInsert = rules[includeName];\n                }\n                if (toInsert) {\n                    var args = [i, 1].concat(toInsert);\n                    if (rule.noEscape)\n                        args = args.filter(function (x) { return !x.next; });\n                    state.splice.apply(state, args);\n                    i--;\n                }\n                if (rule.keywordMap) {\n                    rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n                    delete rule.defaultToken;\n                }\n            }\n        }\n        Object.keys(rules).forEach(processState, this);\n    };\n    this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n        var keywords = Object.create(null);\n        this.$keywordList = [];\n        Object.keys(map).forEach(function (className) {\n            var a = map[className];\n            var list = a.split(splitChar || \"|\");\n            for (var i = list.length; i--;) {\n                var word = list[i];\n                this.$keywordList.push(word);\n                if (ignoreCase)\n                    word = word.toLowerCase();\n                keywords[word] = className;\n            }\n        }, this);\n        map = null;\n        return ignoreCase\n            ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n            : function (value) { return keywords[value] || defaultToken; };\n    };\n    this.getKeywords = function () {\n        return this.$keywords;\n    };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour;\nBehaviour = function () {\n    this.$behaviours = {};\n};\n(function () {\n    this.add = function (name, action, callback) {\n        switch (undefined) {\n            case this.$behaviours:\n                this.$behaviours = {};\n            case this.$behaviours[name]:\n                this.$behaviours[name] = {};\n        }\n        this.$behaviours[name][action] = callback;\n    };\n    this.addBehaviours = function (behaviours) {\n        for (var key in behaviours) {\n            for (var action in behaviours[key]) {\n                this.add(key, action, behaviours[key][action]);\n            }\n        }\n    };\n    this.remove = function (name) {\n        if (this.$behaviours && this.$behaviours[name]) {\n            delete this.$behaviours[name];\n        }\n    };\n    this.inherit = function (mode, filter) {\n        if (typeof mode === \"function\") {\n            var behaviours = new mode().getBehaviours(filter);\n        }\n        else {\n            var behaviours = mode.getBehaviours(filter);\n        }\n        this.addBehaviours(behaviours);\n    };\n    this.getBehaviours = function (filter) {\n        if (!filter) {\n            return this.$behaviours;\n        }\n        else {\n            var ret = {};\n            for (var i = 0; i < filter.length; i++) {\n                if (this.$behaviours[filter[i]]) {\n                    ret[filter[i]] = this.$behaviours[filter[i]];\n                }\n            }\n            return ret;\n        }\n    };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = /** @class */ (function () {\n    function TokenIterator(session, initialRow, initialColumn) {\n        this.$session = session;\n        this.$row = initialRow;\n        this.$rowTokens = session.getTokens(initialRow);\n        var token = session.getTokenAt(initialRow, initialColumn);\n        this.$tokenIndex = token ? token.index : -1;\n    }\n    TokenIterator.prototype.stepBackward = function () {\n        this.$tokenIndex -= 1;\n        while (this.$tokenIndex < 0) {\n            this.$row -= 1;\n            if (this.$row < 0) {\n                this.$row = 0;\n                return null;\n            }\n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = this.$rowTokens.length - 1;\n        }\n        return this.$rowTokens[this.$tokenIndex];\n    };\n    TokenIterator.prototype.stepForward = function () {\n        this.$tokenIndex += 1;\n        var rowCount;\n        while (this.$tokenIndex >= this.$rowTokens.length) {\n            this.$row += 1;\n            if (!rowCount)\n                rowCount = this.$session.getLength();\n            if (this.$row >= rowCount) {\n                this.$row = rowCount - 1;\n                return null;\n            }\n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = 0;\n        }\n        return this.$rowTokens[this.$tokenIndex];\n    };\n    TokenIterator.prototype.getCurrentToken = function () {\n        return this.$rowTokens[this.$tokenIndex];\n    };\n    TokenIterator.prototype.getCurrentTokenRow = function () {\n        return this.$row;\n    };\n    TokenIterator.prototype.getCurrentTokenColumn = function () {\n        var rowTokens = this.$rowTokens;\n        var tokenIndex = this.$tokenIndex;\n        var column = rowTokens[tokenIndex].start;\n        if (column !== undefined)\n            return column;\n        column = 0;\n        while (tokenIndex > 0) {\n            tokenIndex -= 1;\n            column += rowTokens[tokenIndex].value.length;\n        }\n        return column;\n    };\n    TokenIterator.prototype.getCurrentTokenPosition = function () {\n        return { row: this.$row, column: this.getCurrentTokenColumn() };\n    };\n    TokenIterator.prototype.getCurrentTokenRange = function () {\n        var token = this.$rowTokens[this.$tokenIndex];\n        var column = this.getCurrentTokenColumn();\n        return new Range(this.$row, column, this.$row, column + token.value.length);\n    };\n    return TokenIterator;\n}());\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n    var id = -1;\n    if (editor.multiSelect) {\n        id = editor.selection.index;\n        if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n            contextCache = { rangeCount: editor.multiSelect.rangeCount };\n    }\n    if (contextCache[id])\n        return context = contextCache[id];\n    context = contextCache[id] = {\n        autoInsertedBrackets: 0,\n        autoInsertedRow: -1,\n        autoInsertedLineEnd: \"\",\n        maybeInsertedBrackets: 0,\n        maybeInsertedRow: -1,\n        maybeInsertedLineStart: \"\",\n        maybeInsertedLineEnd: \"\"\n    };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n    var rowDiff = selection.end.row - selection.start.row;\n    return {\n        text: opening + selected + closing,\n        selection: [\n            0,\n            selection.start.column + 1,\n            rowDiff,\n            selection.end.column + (rowDiff ? 0 : 1)\n        ]\n    };\n};\nvar CstyleBehaviour;\nCstyleBehaviour = function (options) {\n    options = options || {};\n    this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n        var cursor = editor.getCursorPosition();\n        var line = session.doc.getLine(cursor.row);\n        if (text == '{') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            var token = session.getTokenAt(cursor.row, cursor.column);\n            if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '{', '}');\n            }\n            else if (token && /(?:string)\\.quasi|\\.xml/.test(token.type)) {\n                var excludeTokens = [\n                    /tag\\-(?:open|name)/, /attribute\\-name/\n                ];\n                if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\\.quasi/.test(token.type)\n                    && token.value[cursor.column - token.start - 1] !== '$')\n                    return;\n                CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                return {\n                    text: '{}',\n                    selection: [1, 1]\n                };\n            }\n            else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) {\n                    CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                    return {\n                        text: '{}',\n                        selection: [1, 1]\n                    };\n                }\n                else {\n                    CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n                    return {\n                        text: '{',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n        else if (text == '}') {\n            initContext(editor);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == '}') {\n                var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n        else if (text == \"\\n\" || text == \"\\r\\n\") {\n            initContext(editor);\n            var closing = \"\";\n            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n                closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n                CstyleBehaviour.clearMaybeInsertedClosing();\n            }\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === '}') {\n                var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n                if (!openBracePos)\n                    return null;\n                var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n            }\n            else if (closing) {\n                var next_indent = this.$getIndent(line);\n            }\n            else {\n                CstyleBehaviour.clearMaybeInsertedClosing();\n                return;\n            }\n            var indent = next_indent + session.getTabString();\n            return {\n                text: '\\n' + indent + '\\n' + next_indent + closing,\n                selection: [1, indent.length, 1, indent.length]\n            };\n        }\n        else {\n            CstyleBehaviour.clearMaybeInsertedClosing();\n        }\n    });\n    this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '{') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.end.column, range.end.column + 1);\n            if (rightChar == '}') {\n                range.end.column++;\n                return range;\n            }\n            else {\n                context.maybeInsertedBrackets--;\n            }\n        }\n    });\n    this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '(') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '(', ')');\n            }\n            else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n                return {\n                    text: '()',\n                    selection: [1, 1]\n                };\n            }\n        }\n        else if (text == ')') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ')') {\n                var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '(') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ')') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '[') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '[', ']');\n            }\n            else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n                return {\n                    text: '[]',\n                    selection: [1, 1]\n                };\n            }\n        }\n        else if (text == ']') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ']') {\n                var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '[') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ']') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        var quotes = session.$mode.$quotes || defaultQuotes;\n        if (text.length == 1 && quotes[text]) {\n            if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n                return;\n            initContext(editor);\n            var quote = text;\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, quote, quote);\n            }\n            else if (!selected) {\n                var cursor = editor.getCursorPosition();\n                var line = session.doc.getLine(cursor.row);\n                var leftChar = line.substring(cursor.column - 1, cursor.column);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                var token = session.getTokenAt(cursor.row, cursor.column);\n                var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n                    return null;\n                var stringBefore = token && /string|escape/.test(token.type);\n                var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n                var pair;\n                if (rightChar == quote) {\n                    pair = stringBefore !== stringAfter;\n                    if (pair && /string\\.end/.test(rightToken.type))\n                        pair = false;\n                }\n                else {\n                    if (stringBefore && !stringAfter)\n                        return null; // wrap string with different quote\n                    if (stringBefore && stringAfter)\n                        return null; // do not pair quotes inside strings\n                    var wordRe = session.$mode.tokenRe;\n                    wordRe.lastIndex = 0;\n                    var isWordBefore = wordRe.test(leftChar);\n                    wordRe.lastIndex = 0;\n                    var isWordAfter = wordRe.test(rightChar);\n                    var pairQuotesAfter = session.$mode.$pairQuotesAfter;\n                    var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar);\n                    if ((!shouldPairQuotes && isWordBefore) || isWordAfter)\n                        return null; // before or after alphanumeric\n                    if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n                        return null; // there is rightChar and it isn't closing\n                    var charBefore = line[cursor.column - 2];\n                    if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n                        return null;\n                    pair = true;\n                }\n                return {\n                    text: pair ? quote + quote : \"\",\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var quotes = session.$mode.$quotes || defaultQuotes;\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    if (options.closeDocComment !== false) {\n        this.add(\"doc comment end\", \"insertion\", function (state, action, editor, session, text) {\n            if (state === \"doc-start\" && (text === \"\\n\" || text === \"\\r\\n\") && editor.selection.isEmpty()) {\n                var cursor = editor.getCursorPosition();\n                if (cursor.column === 0) {\n                    return;\n                }\n                var line = session.doc.getLine(cursor.row);\n                var nextLine = session.doc.getLine(cursor.row + 1);\n                var tokens = session.getTokens(cursor.row);\n                var index = 0;\n                for (var i = 0; i < tokens.length; i++) {\n                    index += tokens[i].value.length;\n                    var currentToken = tokens[i];\n                    if (index >= cursor.column) {\n                        if (index === cursor.column) {\n                            if (!/\\.doc/.test(currentToken.type)) {\n                                return;\n                            }\n                            if (/\\*\\//.test(currentToken.value)) {\n                                var nextToken = tokens[i + 1];\n                                if (!nextToken || !/\\.doc/.test(nextToken.type)) {\n                                    return;\n                                }\n                            }\n                        }\n                        var cursorPosInToken = cursor.column - (index - currentToken.value.length);\n                        var closeDocPos = currentToken.value.indexOf(\"*/\");\n                        var openDocPos = currentToken.value.indexOf(\"/**\", closeDocPos > -1 ? closeDocPos + 2 : 0);\n                        if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) {\n                            return;\n                        }\n                        if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos\n                            && cursorPosInToken <= openDocPos || !/\\.doc/.test(currentToken.type)) {\n                            return;\n                        }\n                        break;\n                    }\n                }\n                var indent = this.$getIndent(line);\n                if (/\\s*\\*/.test(nextLine)) {\n                    if (/^\\s*\\*/.test(line)) {\n                        return {\n                            text: text + indent + \"* \",\n                            selection: [1, 2 + indent.length, 1, 2 + indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: text + indent + \" * \",\n                            selection: [1, 3 + indent.length, 1, 3 + indent.length]\n                        };\n                    }\n                }\n                if (/\\/\\*\\*/.test(line.substring(0, cursor.column))) {\n                    return {\n                        text: text + indent + \" * \" + text + \" \" + indent + \"*/\",\n                        selection: [1, 4 + indent.length, 1, 4 + indent.length]\n                    };\n                }\n            }\n        });\n    }\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n    var cursor = editor.getCursorPosition();\n    var iterator = new TokenIterator(session, cursor.row, cursor.column);\n    if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n        if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n            return true;\n        var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n        if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n            return false;\n    }\n    iterator.stepForward();\n    return iterator.getCurrentTokenRow() !== cursor.row ||\n        this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour[\"$matchTokenType\"] = function (token, types) {\n    return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour[\"recordAutoInsert\"] = function (editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this[\"isAutoInsertedClosing\"](cursor, line, context.autoInsertedLineEnd[0]))\n        context.autoInsertedBrackets = 0;\n    context.autoInsertedRow = cursor.row;\n    context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n    context.autoInsertedBrackets++;\n};\nCstyleBehaviour[\"recordMaybeInsert\"] = function (editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this[\"isMaybeInsertedClosing\"](cursor, line))\n        context.maybeInsertedBrackets = 0;\n    context.maybeInsertedRow = cursor.row;\n    context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n    context.maybeInsertedLineEnd = line.substr(cursor.column);\n    context.maybeInsertedBrackets++;\n};\nCstyleBehaviour[\"isAutoInsertedClosing\"] = function (cursor, line, bracket) {\n    return context.autoInsertedBrackets > 0 &&\n        cursor.row === context.autoInsertedRow &&\n        bracket === context.autoInsertedLineEnd[0] &&\n        line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour[\"isMaybeInsertedClosing\"] = function (cursor, line) {\n    return context.maybeInsertedBrackets > 0 &&\n        cursor.row === context.maybeInsertedRow &&\n        line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n        line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour[\"popAutoInsertedClosing\"] = function () {\n    context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n    context.autoInsertedBrackets--;\n};\nCstyleBehaviour[\"clearMaybeInsertedClosing\"] = function () {\n    if (context) {\n        context.maybeInsertedBrackets = 0;\n        context.maybeInsertedRow = -1;\n    }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n    str.push(code += wordChars[i]);\n    if (wordChars[i + 1])\n        str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode;\nMode = function () {\n    this.HighlightRules = TextHighlightRules;\n};\n(function () {\n    this.$defaultBehaviour = new CstyleBehaviour();\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n    this.getTokenizer = function () {\n        if (!this.$tokenizer) {\n            this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n            this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n        }\n        return this.$tokenizer;\n    };\n    this.lineCommentStart = \"\";\n    this.blockComment = \"\";\n    this.toggleCommentLines = function (state, session, startRow, endRow) {\n        var doc = session.doc;\n        var ignoreBlankLines = true;\n        var shouldRemove = true;\n        var minIndent = Infinity;\n        var tabSize = session.getTabSize();\n        var insertAtTabStop = false;\n        if (!this.lineCommentStart) {\n            if (!this.blockComment)\n                return false;\n            var lineCommentStart = this.blockComment.start;\n            var lineCommentEnd = this.blockComment.end;\n            var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n            var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n            var comment = function (line, i) {\n                if (testRemove(line, i))\n                    return;\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n                    doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n                }\n            };\n            var uncomment = function (line, i) {\n                var m;\n                if (m = line.match(regexpEnd))\n                    doc.removeInLine(i, line.length - m[0].length, line.length);\n                if (m = line.match(regexpStart))\n                    doc.removeInLine(i, m[1].length, m[0].length);\n            };\n            var testRemove = function (line, row) {\n                if (regexpStart.test(line))\n                    return true;\n                var tokens = session.getTokens(row);\n                for (var i = 0; i < tokens.length; i++) {\n                    if (tokens[i].type === \"comment\")\n                        return true;\n                }\n            };\n        }\n        else {\n            if (Array.isArray(this.lineCommentStart)) {\n                var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n                var lineCommentStart = this.lineCommentStart[0];\n            }\n            else {\n                var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n                var lineCommentStart = this.lineCommentStart;\n            }\n            regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n            insertAtTabStop = session.getUseSoftTabs();\n            var uncomment = function (line, i) {\n                var m = line.match(regexpStart);\n                if (!m)\n                    return;\n                var start = m[1].length, end = m[0].length;\n                if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n                    end--;\n                doc.removeInLine(i, start, end);\n            };\n            var commentWithSpace = lineCommentStart + \" \";\n            var comment = function (line, i) {\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    if (shouldInsertSpace(line, minIndent, minIndent))\n                        doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n                    else\n                        doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n                }\n            };\n            var testRemove = function (line, i) {\n                return regexpStart.test(line);\n            };\n            var shouldInsertSpace = function (line, before, after) {\n                var spaces = 0;\n                while (before-- && line.charAt(before) == \" \")\n                    spaces++;\n                if (spaces % tabSize != 0)\n                    return false;\n                var spaces = 0;\n                while (line.charAt(after++) == \" \")\n                    spaces++;\n                if (tabSize > 2)\n                    return spaces % tabSize != tabSize - 1;\n                else\n                    return spaces % tabSize == 0;\n            };\n        }\n        function iter(fun) {\n            for (var i = startRow; i <= endRow; i++)\n                fun(doc.getLine(i), i);\n        }\n        var minEmptyLength = Infinity;\n        iter(function (line, i) {\n            var indent = line.search(/\\S/);\n            if (indent !== -1) {\n                if (indent < minIndent)\n                    minIndent = indent;\n                if (shouldRemove && !testRemove(line, i))\n                    shouldRemove = false;\n            }\n            else if (minEmptyLength > line.length) {\n                minEmptyLength = line.length;\n            }\n        });\n        if (minIndent == Infinity) {\n            minIndent = minEmptyLength;\n            ignoreBlankLines = false;\n            shouldRemove = false;\n        }\n        if (insertAtTabStop && minIndent % tabSize != 0)\n            minIndent = Math.floor(minIndent / tabSize) * tabSize;\n        iter(shouldRemove ? uncomment : comment);\n    };\n    this.toggleBlockComment = function (state, session, range, cursor) {\n        var comment = this.blockComment;\n        if (!comment)\n            return;\n        if (!comment.start && comment[0])\n            comment = comment[0];\n        var iterator = new TokenIterator(session, cursor.row, cursor.column);\n        var token = iterator.getCurrentToken();\n        var sel = session.selection;\n        var initialRange = session.selection.toOrientedRange();\n        var startRow, colDiff;\n        if (token && /comment/.test(token.type)) {\n            var startRange, endRange;\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.start);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    startRange = new Range(row, column, row, column + comment.start.length);\n                    break;\n                }\n                token = iterator.stepBackward();\n            }\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.end);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    endRange = new Range(row, column, row, column + comment.end.length);\n                    break;\n                }\n                token = iterator.stepForward();\n            }\n            if (endRange)\n                session.remove(endRange);\n            if (startRange) {\n                session.remove(startRange);\n                startRow = startRange.start.row;\n                colDiff = -comment.start.length;\n            }\n        }\n        else {\n            colDiff = comment.start.length;\n            startRow = range.start.row;\n            session.insert(range.end, comment.end);\n            session.insert(range.start, comment.start);\n        }\n        if (initialRange.start.row == startRow)\n            initialRange.start.column += colDiff;\n        if (initialRange.end.row == startRow)\n            initialRange.end.column += colDiff;\n        session.selection.fromOrientedRange(initialRange);\n    };\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.autoOutdent = function (state, doc, row) {\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.createModeDelegates = function (mapping) {\n        this.$embeds = [];\n        this.$modes = {};\n        for (var i in mapping) {\n            if (mapping[i]) {\n                var Mode = mapping[i];\n                var id = Mode.prototype.$id;\n                var mode = config.$modes[id];\n                if (!mode)\n                    config.$modes[id] = mode = new Mode();\n                if (!config.$modes[i])\n                    config.$modes[i] = mode;\n                this.$embeds.push(i);\n                this.$modes[i] = mode;\n            }\n        }\n        var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n            \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n        var _loop_1 = function (i) {\n            (function (scope) {\n                var functionName = delegations[i];\n                var defaultHandler = scope[functionName];\n                scope[delegations[i]] =\n                    function () {\n                        return this.$delegator(functionName, arguments, defaultHandler);\n                    };\n            }(this_1));\n        };\n        var this_1 = this;\n        for (var i = 0; i < delegations.length; i++) {\n            _loop_1(i);\n        }\n    };\n    this.$delegator = function (method, args, defaultHandler) {\n        var state = args[0] || \"start\";\n        if (typeof state != \"string\") {\n            if (Array.isArray(state[2])) {\n                var language = state[2][state[2].length - 1];\n                var mode = this.$modes[language];\n                if (mode)\n                    return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n            }\n            state = state[0] || \"start\";\n        }\n        for (var i = 0; i < this.$embeds.length; i++) {\n            if (!this.$modes[this.$embeds[i]])\n                continue;\n            var split = state.split(this.$embeds[i]);\n            if (!split[0] && split[1]) {\n                args[0] = split[1];\n                var mode = this.$modes[this.$embeds[i]];\n                return mode[method].apply(mode, args);\n            }\n        }\n        var ret = defaultHandler.apply(this, args);\n        return defaultHandler ? ret : undefined;\n    };\n    this.transformAction = function (state, action, editor, session, param) {\n        if (this.$behaviour) {\n            var behaviours = this.$behaviour.getBehaviours();\n            for (var key in behaviours) {\n                if (behaviours[key][action]) {\n                    var ret = behaviours[key][action].apply(this, arguments);\n                    if (ret) {\n                        return ret;\n                    }\n                }\n            }\n        }\n    };\n    this.getKeywords = function (append) {\n        if (!this.completionKeywords) {\n            var rules = this.$tokenizer[\"rules\"];\n            var completionKeywords = [];\n            for (var rule in rules) {\n                var ruleItr = rules[rule];\n                for (var r = 0, l = ruleItr.length; r < l; r++) {\n                    if (typeof ruleItr[r].token === \"string\") {\n                        if (/keyword|support|storage/.test(ruleItr[r].token))\n                            completionKeywords.push(ruleItr[r].regex);\n                    }\n                    else if (typeof ruleItr[r].token === \"object\") {\n                        for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n                            if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n                                var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n                                completionKeywords.push(rule.substr(1, rule.length - 2));\n                            }\n                        }\n                    }\n                }\n            }\n            this.completionKeywords = completionKeywords;\n        }\n        if (!append)\n            return this.$keywordList;\n        return completionKeywords.concat(this.$keywordList || []);\n    };\n    this.$createKeywordList = function () {\n        if (!this.$highlightRules)\n            this.getTokenizer();\n        return this.$keywordList = this.$highlightRules.$keywordList || [];\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        var keywords = this.$keywordList || this.$createKeywordList();\n        return keywords.map(function (word) {\n            return {\n                name: word,\n                value: word,\n                score: 0,\n                meta: \"keyword\"\n            };\n        });\n    };\n    this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar LineWidgets = /** @class */ (function () {\n    function LineWidgets(session) {\n        this.session = session;\n        this.session.widgetManager = this;\n        this.session.getRowLength = this.getRowLength;\n        this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n        this.updateOnChange = this.updateOnChange.bind(this);\n        this.renderWidgets = this.renderWidgets.bind(this);\n        this.measureWidgets = this.measureWidgets.bind(this);\n        this.session._changedWidgets = [];\n        this.$onChangeEditor = this.$onChangeEditor.bind(this);\n        this.session.on(\"change\", this.updateOnChange);\n        this.session.on(\"changeFold\", this.updateOnFold);\n        this.session.on(\"changeEditor\", this.$onChangeEditor);\n    }\n    LineWidgets.prototype.getRowLength = function (row) {\n        var h;\n        if (this.lineWidgets)\n            h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        else\n            h = 0;\n        if (!this[\"$useWrapMode\"] || !this[\"$wrapData\"][row]) {\n            return 1 + h;\n        }\n        else {\n            return this[\"$wrapData\"][row].length + 1 + h;\n        }\n    };\n    LineWidgets.prototype.$getWidgetScreenLength = function () {\n        var screenRows = 0;\n        this.lineWidgets.forEach(function (w) {\n            if (w && w.rowCount && !w.hidden)\n                screenRows += w.rowCount;\n        });\n        return screenRows;\n    };\n    LineWidgets.prototype.$onChangeEditor = function (e) {\n        this.attach(e.editor);\n    };\n    LineWidgets.prototype.attach = function (editor) {\n        if (editor && editor.widgetManager && editor.widgetManager != this)\n            editor.widgetManager.detach();\n        if (this.editor == editor)\n            return;\n        this.detach();\n        this.editor = editor;\n        if (editor) {\n            editor.widgetManager = this;\n            editor.renderer.on(\"beforeRender\", this.measureWidgets);\n            editor.renderer.on(\"afterRender\", this.renderWidgets);\n        }\n    };\n    LineWidgets.prototype.detach = function (e) {\n        var editor = this.editor;\n        if (!editor)\n            return;\n        this.editor = null;\n        editor.widgetManager = null;\n        editor.renderer.off(\"beforeRender\", this.measureWidgets);\n        editor.renderer.off(\"afterRender\", this.renderWidgets);\n        var lineWidgets = this.session.lineWidgets;\n        lineWidgets && lineWidgets.forEach(function (w) {\n            if (w && w.el && w.el.parentNode) {\n                w._inDocument = false;\n                w.el.parentNode.removeChild(w.el);\n            }\n        });\n    };\n    LineWidgets.prototype.updateOnFold = function (e, session) {\n        var lineWidgets = session.lineWidgets;\n        if (!lineWidgets || !e.action)\n            return;\n        var fold = e.data;\n        var start = fold.start.row;\n        var end = fold.end.row;\n        var hide = e.action == \"add\";\n        for (var i = start + 1; i < end; i++) {\n            if (lineWidgets[i])\n                lineWidgets[i].hidden = hide;\n        }\n        if (lineWidgets[end]) {\n            if (hide) {\n                if (!lineWidgets[start])\n                    lineWidgets[start] = lineWidgets[end];\n                else\n                    lineWidgets[end].hidden = hide;\n            }\n            else {\n                if (lineWidgets[start] == lineWidgets[end])\n                    lineWidgets[start] = undefined;\n                lineWidgets[end].hidden = hide;\n            }\n        }\n    };\n    LineWidgets.prototype.updateOnChange = function (delta) {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n        if (len === 0) {\n        }\n        else if (delta.action == \"remove\") {\n            var removed = lineWidgets.splice(startRow + 1, len);\n            if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n                lineWidgets[startRow] = removed.pop();\n            }\n            removed.forEach(function (w) {\n                w && this.removeLineWidget(w);\n            }, this);\n            this.$updateRows();\n        }\n        else {\n            var args = new Array(len);\n            if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n                if (delta.start.column > lineWidgets[startRow].column)\n                    startRow++;\n            }\n            args.unshift(startRow, 0);\n            lineWidgets.splice.apply(lineWidgets, args);\n            this.$updateRows();\n        }\n    };\n    LineWidgets.prototype.$updateRows = function () {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var noWidgets = true;\n        lineWidgets.forEach(function (w, i) {\n            if (w) {\n                noWidgets = false;\n                w.row = i;\n                while (w.$oldWidget) {\n                    w.$oldWidget.row = i;\n                    w = w.$oldWidget;\n                }\n            }\n        });\n        if (noWidgets)\n            this.session.lineWidgets = null;\n    };\n    LineWidgets.prototype.$registerLineWidget = function (w) {\n        if (!this.session.lineWidgets)\n            this.session.lineWidgets = new Array(this.session.getLength());\n        var old = this.session.lineWidgets[w.row];\n        if (old) {\n            w.$oldWidget = old;\n            if (old.el && old.el.parentNode) {\n                old.el.parentNode.removeChild(old.el);\n                old._inDocument = false;\n            }\n        }\n        this.session.lineWidgets[w.row] = w;\n        return w;\n    };\n    LineWidgets.prototype.addLineWidget = function (w) {\n        this.$registerLineWidget(w);\n        w.session = this.session;\n        if (!this.editor)\n            return w;\n        var renderer = this.editor.renderer;\n        if (w.html && !w.el) {\n            w.el = dom.createElement(\"div\");\n            w.el.innerHTML = w.html;\n        }\n        if (w.text && !w.el) {\n            w.el = dom.createElement(\"div\");\n            w.el.textContent = w.text;\n        }\n        if (w.el) {\n            dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n            if (w.className) {\n                dom.addCssClass(w.el, w.className);\n            }\n            w.el.style.position = \"absolute\";\n            w.el.style.zIndex = \"5\";\n            renderer.container.appendChild(w.el);\n            w._inDocument = true;\n            if (!w.coverGutter) {\n                w.el.style.zIndex = \"3\";\n            }\n            if (w.pixelHeight == null) {\n                w.pixelHeight = w.el.offsetHeight;\n            }\n        }\n        if (w.rowCount == null) {\n            w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n        }\n        var fold = this.session.getFoldAt(w.row, 0);\n        w.$fold = fold;\n        if (fold) {\n            var lineWidgets = this.session.lineWidgets;\n            if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n                lineWidgets[fold.start.row] = w;\n            else\n                w.hidden = true;\n        }\n        this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n        this.$updateRows();\n        this.renderWidgets(null, renderer);\n        this.onWidgetChanged(w);\n        return w;\n    };\n    LineWidgets.prototype.removeLineWidget = function (w) {\n        w._inDocument = false;\n        w.session = null;\n        if (w.el && w.el.parentNode)\n            w.el.parentNode.removeChild(w.el);\n        if (w.editor && w.editor.destroy)\n            try {\n                w.editor.destroy();\n            }\n            catch (e) { }\n        if (this.session.lineWidgets) {\n            var w1 = this.session.lineWidgets[w.row];\n            if (w1 == w) {\n                this.session.lineWidgets[w.row] = w.$oldWidget;\n                if (w.$oldWidget)\n                    this.onWidgetChanged(w.$oldWidget);\n            }\n            else {\n                while (w1) {\n                    if (w1.$oldWidget == w) {\n                        w1.$oldWidget = w.$oldWidget;\n                        break;\n                    }\n                    w1 = w1.$oldWidget;\n                }\n            }\n        }\n        this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n        this.$updateRows();\n    };\n    LineWidgets.prototype.getWidgetsAtRow = function (row) {\n        var lineWidgets = this.session.lineWidgets;\n        var w = lineWidgets && lineWidgets[row];\n        var list = [];\n        while (w) {\n            list.push(w);\n            w = w.$oldWidget;\n        }\n        return list;\n    };\n    LineWidgets.prototype.onWidgetChanged = function (w) {\n        this.session._changedWidgets.push(w);\n        this.editor && this.editor.renderer.updateFull();\n    };\n    LineWidgets.prototype.measureWidgets = function (e, renderer) {\n        var changedWidgets = this.session._changedWidgets;\n        var config = renderer.layerConfig;\n        if (!changedWidgets || !changedWidgets.length)\n            return;\n        var min = Infinity;\n        for (var i = 0; i < changedWidgets.length; i++) {\n            var w = changedWidgets[i];\n            if (!w || !w.el)\n                continue;\n            if (w.session != this.session)\n                continue;\n            if (!w._inDocument) {\n                if (this.session.lineWidgets[w.row] != w)\n                    continue;\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            w.h = w.el.offsetHeight;\n            if (!w.fixedWidth) {\n                w.w = w.el.offsetWidth;\n                w.screenWidth = Math.ceil(w.w / config.characterWidth);\n            }\n            var rowCount = w.h / config.lineHeight;\n            if (w.coverLine) {\n                rowCount -= this.session.getRowLineCount(w.row);\n                if (rowCount < 0)\n                    rowCount = 0;\n            }\n            if (w.rowCount != rowCount) {\n                w.rowCount = rowCount;\n                if (w.row < min)\n                    min = w.row;\n            }\n        }\n        if (min != Infinity) {\n            this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n            this.session.lineWidgetWidth = null;\n        }\n        this.session._changedWidgets = [];\n    };\n    LineWidgets.prototype.renderWidgets = function (e, renderer) {\n        var config = renderer.layerConfig;\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var first = Math.min(this.firstRow, config.firstRow);\n        var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n        while (first > 0 && !lineWidgets[first])\n            first--;\n        this.firstRow = config.firstRow;\n        this.lastRow = config.lastRow;\n        renderer.$cursorLayer.config = config;\n        for (var i = first; i <= last; i++) {\n            var w = lineWidgets[i];\n            if (!w || !w.el)\n                continue;\n            if (w.hidden) {\n                w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n                continue;\n            }\n            if (!w._inDocument) {\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n            if (!w.coverLine)\n                top += config.lineHeight * this.session.getRowLineCount(w.row);\n            w.el.style.top = top - config.offset + \"px\";\n            var left = w.coverGutter ? 0 : renderer.gutterWidth;\n            if (!w.fixedWidth)\n                left -= renderer.scrollLeft;\n            w.el.style.left = left + \"px\";\n            if (w.fullWidth && w.screenWidth) {\n                w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n            }\n            if (w.fixedWidth) {\n                w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n            }\n            else {\n                w.el.style.right = \"\";\n            }\n        }\n    };\n    return LineWidgets;\n}());\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n    function Anchor(doc, row, column) {\n        this.$onChange = this.onChange.bind(this);\n        this.attach(doc);\n        if (typeof row != \"number\")\n            this.setPosition(row.row, row.column);\n        else\n            this.setPosition(row, column);\n    }\n    Anchor.prototype.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    Anchor.prototype.getDocument = function () {\n        return this.document;\n    };\n    Anchor.prototype.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    Anchor.prototype.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    Anchor.prototype.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    Anchor.prototype.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    Anchor.prototype.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n    return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n    var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n    return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n    var deltaIsInsert = delta.action == \"insert\";\n    var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n    var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n    var deltaStart = delta.start;\n    var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n    if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n        return {\n            row: point.row,\n            column: point.column\n        };\n    }\n    if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n        return {\n            row: point.row + deltaRowShift,\n            column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n        };\n    }\n    return {\n        row: deltaStart.row,\n        column: deltaStart.column\n    };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n    function Document(textOrLines) {\n        this.$lines = [\"\"];\n        if (textOrLines.length === 0) {\n            this.$lines = [\"\"];\n        }\n        else if (Array.isArray(textOrLines)) {\n            this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n        }\n        else {\n            this.insert({ row: 0, column: 0 }, textOrLines);\n        }\n    }\n    Document.prototype.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    Document.prototype.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    Document.prototype.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    Document.prototype.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    Document.prototype.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    Document.prototype.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    Document.prototype.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    Document.prototype.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    Document.prototype.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    Document.prototype.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    Document.prototype.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    Document.prototype.getLength = function () {\n        return this.$lines.length;\n    };\n    Document.prototype.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    Document.prototype.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    Document.prototype.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    Document.prototype.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    Document.prototype.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    Document.prototype.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    Document.prototype.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    Document.prototype.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    Document.prototype.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    Document.prototype.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    Document.prototype.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    Document.prototype.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    Document.prototype.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    Document.prototype.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    Document.prototype.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    Document.prototype.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    Document.prototype.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    Document.prototype.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    Document.prototype.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    Document.prototype.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    Document.prototype.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    Document.prototype.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    Document.prototype.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    Document.prototype.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n    Document.prototype.$split = function (text) {\n        return text.split(/\\r\\n|\\r|\\n/);\n    };\n    return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = /** @class */ (function () {\n    function BackgroundTokenizer(tokenizer, session) {\n        this.running = false;\n        this.lines = [];\n        this.states = [];\n        this.currentLine = 0;\n        this.tokenizer = tokenizer;\n        var self = this;\n        this.$worker = function () {\n            if (!self.running) {\n                return;\n            }\n            var workerStart = new Date();\n            var currentLine = self.currentLine;\n            var endLine = -1;\n            var doc = self.doc;\n            var startLine = currentLine;\n            while (self.lines[currentLine])\n                currentLine++;\n            var len = doc.getLength();\n            var processedLines = 0;\n            self.running = false;\n            while (currentLine < len) {\n                self.$tokenizeRow(currentLine);\n                endLine = currentLine;\n                do {\n                    currentLine++;\n                } while (self.lines[currentLine]);\n                processedLines++;\n                if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n                    self.running = setTimeout(self.$worker, 20);\n                    break;\n                }\n            }\n            self.currentLine = currentLine;\n            if (endLine == -1)\n                endLine = currentLine;\n            if (startLine <= endLine)\n                self.fireUpdateEvent(startLine, endLine);\n        };\n    }\n    BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) {\n        this.tokenizer = tokenizer;\n        this.lines = [];\n        this.states = [];\n        this.start(0);\n    };\n    BackgroundTokenizer.prototype.setDocument = function (doc) {\n        this.doc = doc;\n        this.lines = [];\n        this.states = [];\n        this.stop();\n    };\n    BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) {\n        var data = {\n            first: firstRow,\n            last: lastRow\n        };\n        this._signal(\"update\", { data: data });\n    };\n    BackgroundTokenizer.prototype.start = function (startRow) {\n        this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n        this.lines.splice(this.currentLine, this.lines.length);\n        this.states.splice(this.currentLine, this.states.length);\n        this.stop();\n        this.running = setTimeout(this.$worker, 700);\n    };\n    BackgroundTokenizer.prototype.scheduleStart = function () {\n        if (!this.running)\n            this.running = setTimeout(this.$worker, 700);\n    };\n    BackgroundTokenizer.prototype.$updateOnChange = function (delta) {\n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n        if (len === 0) {\n            this.lines[startRow] = null;\n        }\n        else if (delta.action == \"remove\") {\n            this.lines.splice(startRow, len + 1, null);\n            this.states.splice(startRow, len + 1, null);\n        }\n        else {\n            var args = Array(len + 1);\n            args.unshift(startRow, 1);\n            this.lines.splice.apply(this.lines, args);\n            this.states.splice.apply(this.states, args);\n        }\n        this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n        this.stop();\n    };\n    BackgroundTokenizer.prototype.stop = function () {\n        if (this.running)\n            clearTimeout(this.running);\n        this.running = false;\n    };\n    BackgroundTokenizer.prototype.getTokens = function (row) {\n        return this.lines[row] || this.$tokenizeRow(row);\n    };\n    BackgroundTokenizer.prototype.getState = function (row) {\n        if (this.currentLine == row)\n            this.$tokenizeRow(row);\n        return this.states[row] || \"start\";\n    };\n    BackgroundTokenizer.prototype.$tokenizeRow = function (row) {\n        var line = this.doc.getLine(row);\n        var state = this.states[row - 1];\n        var data = this.tokenizer.getLineTokens(line, state, row);\n        if (this.states[row] + \"\" !== data.state + \"\") {\n            this.states[row] = data.state;\n            this.lines[row + 1] = null;\n            if (this.currentLine > row + 1)\n                this.currentLine = row + 1;\n        }\n        else if (this.currentLine == row) {\n            this.currentLine = row + 1;\n        }\n        return this.lines[row] = data.tokens;\n    };\n    BackgroundTokenizer.prototype.cleanup = function () {\n        this.running = false;\n        this.lines = [];\n        this.states = [];\n        this.currentLine = 0;\n        this.removeAllListeners();\n    };\n    return BackgroundTokenizer;\n}());\noop.implement(BackgroundTokenizer.prototype, EventEmitter);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = /** @class */ (function () {\n    function SearchHighlight(regExp, clazz, type) {\n        if (type === void 0) { type = \"text\"; }\n        this.setRegexp(regExp);\n        this.clazz = clazz;\n        this.type = type;\n        this.docLen = 0;\n    }\n    SearchHighlight.prototype.setRegexp = function (regExp) {\n        if (this.regExp + \"\" == regExp + \"\")\n            return;\n        this.regExp = regExp;\n        this.cache = [];\n    };\n    SearchHighlight.prototype.update = function (html, markerLayer, session, config) {\n        if (!this.regExp)\n            return;\n        var start = config.firstRow;\n        var end = config.lastRow;\n        var renderedMarkerRanges = {};\n        var _search = session.$editor && session.$editor.$search;\n        var mtSearch = _search && _search.$isMultilineSearch(session.$editor.getLastSearchOptions());\n        for (var i = start; i <= end; i++) {\n            var ranges = this.cache[i];\n            if (ranges == null || session.getValue().length != this.docLen) {\n                if (mtSearch) {\n                    ranges = [];\n                    var match = _search.$multiLineForward(session, this.regExp, i, end);\n                    if (match) {\n                        var end_row = match.endRow <= end ? match.endRow - 1 : end;\n                        if (end_row > i)\n                            i = end_row;\n                        ranges.push(new Range(match.startRow, match.startCol, match.endRow, match.endCol));\n                    }\n                    if (ranges.length > this.MAX_RANGES)\n                        ranges = ranges.slice(0, this.MAX_RANGES);\n                }\n                else {\n                    ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n                    if (ranges.length > this.MAX_RANGES)\n                        ranges = ranges.slice(0, this.MAX_RANGES);\n                    ranges = ranges.map(function (match) {\n                        return new Range(i, match.offset, i, match.offset + match.length);\n                    });\n                }\n                this.cache[i] = ranges.length ? ranges : \"\";\n            }\n            if (ranges.length === 0)\n                continue;\n            for (var j = ranges.length; j--;) {\n                var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n                var rangeAsString = rangeToAddMarkerTo.toString();\n                if (renderedMarkerRanges[rangeAsString])\n                    continue;\n                renderedMarkerRanges[rangeAsString] = true;\n                markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n            }\n        }\n        this.docLen = session.getValue().length;\n    };\n    return SearchHighlight;\n}());\nSearchHighlight.prototype.MAX_RANGES = 500;\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n    function UndoManager() {\n        this.$keepRedoStack;\n        this.$maxRev = 0;\n        this.$fromUndo = false;\n        this.$undoDepth = Infinity;\n        this.reset();\n    }\n    UndoManager.prototype.addSession = function (session) {\n        this.$session = session;\n    };\n    UndoManager.prototype.add = function (delta, allowMerge, session) {\n        if (this.$fromUndo)\n            return;\n        if (delta == this.$lastDelta)\n            return;\n        if (!this.$keepRedoStack)\n            this.$redoStack.length = 0;\n        if (allowMerge === false || !this.lastDeltas) {\n            this.lastDeltas = [];\n            var undoStackLength = this.$undoStack.length;\n            if (undoStackLength > this.$undoDepth - 1) {\n                this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n            }\n            this.$undoStack.push(this.lastDeltas);\n            delta.id = this.$rev = ++this.$maxRev;\n        }\n        if (delta.action == \"remove\" || delta.action == \"insert\")\n            this.$lastDelta = delta;\n        this.lastDeltas.push(delta);\n    };\n    UndoManager.prototype.addSelection = function (selection, rev) {\n        this.selections.push({\n            value: selection,\n            rev: rev || this.$rev\n        });\n    };\n    UndoManager.prototype.startNewGroup = function () {\n        this.lastDeltas = null;\n        return this.$rev;\n    };\n    UndoManager.prototype.markIgnored = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n        var stack = this.$undoStack;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id <= from)\n                break;\n            if (delta.id < to)\n                delta.ignore = true;\n        }\n        this.lastDeltas = null;\n    };\n    UndoManager.prototype.getSelection = function (rev, after) {\n        var stack = this.selections;\n        for (var i = stack.length; i--;) {\n            var selection = stack[i];\n            if (selection.rev < rev) {\n                if (after)\n                    selection = stack[i + 1];\n                return selection;\n            }\n        }\n    };\n    UndoManager.prototype.getRevision = function () {\n        return this.$rev;\n    };\n    UndoManager.prototype.getDeltas = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n        var stack = this.$undoStack;\n        var end = null, start = 0;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id < to && !end)\n                end = i + 1;\n            if (delta.id <= from) {\n                start = i + 1;\n                break;\n            }\n        }\n        return stack.slice(start, end);\n    };\n    UndoManager.prototype.getChangedRanges = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n    };\n    UndoManager.prototype.getChangedLines = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n    };\n    UndoManager.prototype.undo = function (session, dontSelect) {\n        this.lastDeltas = null;\n        var stack = this.$undoStack;\n        if (!rearrangeUndoStack(stack, stack.length))\n            return;\n        if (!session)\n            session = this.$session;\n        if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n            this.$redoStack = [];\n        this.$fromUndo = true;\n        var deltaSet = stack.pop();\n        var undoSelectionRange = null;\n        if (deltaSet) {\n            undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n            this.$redoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        this.$fromUndo = false;\n        return undoSelectionRange;\n    };\n    UndoManager.prototype.redo = function (session, dontSelect) {\n        this.lastDeltas = null;\n        if (!session)\n            session = this.$session;\n        this.$fromUndo = true;\n        if (this.$redoStackBaseRev != this.$rev) {\n            var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n            rebaseRedoStack(this.$redoStack, diff);\n            this.$redoStackBaseRev = this.$rev;\n            this.$redoStack.forEach(function (x) {\n                x[0].id = ++this.$maxRev;\n            }, this);\n        }\n        var deltaSet = this.$redoStack.pop();\n        var redoSelectionRange = null;\n        if (deltaSet) {\n            redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n            this.$undoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        this.$fromUndo = false;\n        return redoSelectionRange;\n    };\n    UndoManager.prototype.$syncRev = function () {\n        var stack = this.$undoStack;\n        var nextDelta = stack[stack.length - 1];\n        var id = nextDelta && nextDelta[0].id || 0;\n        this.$redoStackBaseRev = id;\n        this.$rev = id;\n    };\n    UndoManager.prototype.reset = function () {\n        this.lastDeltas = null;\n        this.$lastDelta = null;\n        this.$undoStack = [];\n        this.$redoStack = [];\n        this.$rev = 0;\n        this.mark = 0;\n        this.$redoStackBaseRev = this.$rev;\n        this.selections = [];\n    };\n    UndoManager.prototype.canUndo = function () {\n        return this.$undoStack.length > 0;\n    };\n    UndoManager.prototype.canRedo = function () {\n        return this.$redoStack.length > 0;\n    };\n    UndoManager.prototype.bookmark = function (rev) {\n        if (rev == undefined)\n            rev = this.$rev;\n        this.mark = rev;\n    };\n    UndoManager.prototype.isAtBookmark = function () {\n        return this.$rev === this.mark;\n    };\n    UndoManager.prototype.toJSON = function () {\n        return {\n            $redoStack: this.$redoStack,\n            $undoStack: this.$undoStack\n        };\n    };\n    UndoManager.prototype.fromJSON = function (json) {\n        this.reset();\n        this.$undoStack = json.$undoStack;\n        this.$redoStack = json.$redoStack;\n    };\n    UndoManager.prototype.$prettyPrint = function (delta) {\n        if (delta)\n            return stringifyDelta(delta);\n        return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n    };\n    return UndoManager;\n}());\nUndoManager.prototype.hasUndo = UndoManager.prototype.canUndo;\nUndoManager.prototype.hasRedo = UndoManager.prototype.canRedo;\nUndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark;\nUndoManager.prototype.markClean = UndoManager.prototype.bookmark;\nfunction rearrangeUndoStack(stack, pos) {\n    for (var i = pos; i--;) {\n        var deltaSet = stack[i];\n        if (deltaSet && !deltaSet[0].ignore) {\n            while (i < pos - 1) {\n                var swapped = swapGroups(stack[i], stack[i + 1]);\n                stack[i] = swapped[0];\n                stack[i + 1] = swapped[1];\n                i++;\n            }\n            return true;\n        }\n    }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n    var isInsert = delta.action == \"insert\";\n    var start = delta.start;\n    var end = delta.end;\n    var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n    var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n    if (isInsert)\n        end = start;\n    for (var i in this.marks) {\n        var point = this.marks[i];\n        var cmp = comparePoints(point, start);\n        if (cmp < 0) {\n            continue; // delta starts after the range\n        }\n        if (cmp === 0) {\n            if (isInsert) {\n                if (point.bias == 1) {\n                    cmp = 1;\n                }\n                else {\n                    point.bias == -1;\n                    continue;\n                }\n            }\n        }\n        var cmp2 = isInsert ? cmp : comparePoints(point, end);\n        if (cmp2 > 0) {\n            point.row += rowShift;\n            point.column += point.row == end.row ? colShift : 0;\n            continue;\n        }\n        if (!isInsert && cmp2 <= 0) {\n            point.row = start.row;\n            point.column = start.column;\n            if (cmp2 === 0)\n                point.bias = 1;\n        }\n    }\n}\nfunction clonePos(pos) {\n    return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n    return {\n        start: clonePos(d.start),\n        end: clonePos(d.end),\n        action: d.action,\n        lines: d.lines.slice()\n    };\n}\nfunction stringifyDelta(d) {\n    d = d || this;\n    if (Array.isArray(d)) {\n        return d.map(stringifyDelta).join(\"\\n\");\n    }\n    var type = \"\";\n    if (d.action) {\n        type = d.action == \"insert\" ? \"+\" : \"-\";\n        type += \"[\" + d.lines + \"]\";\n    }\n    else if (d.value) {\n        if (Array.isArray(d.value)) {\n            type = d.value.map(stringifyRange).join(\"\\n\");\n        }\n        else {\n            type = stringifyRange(d.value);\n        }\n    }\n    if (d.start) {\n        type += stringifyRange(d);\n    }\n    if (d.id || d.rev) {\n        type += \"\\t(\" + (d.id || d.rev) + \")\";\n    }\n    return type;\n}\nfunction stringifyRange(r) {\n    return r.start.row + \":\" + r.start.column\n        + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n    var i1 = d1.action == \"insert\";\n    var i2 = d2.action == \"insert\";\n    if (i1 && i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        }\n        else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        }\n        else {\n            return null;\n        }\n    }\n    else if (i1 && !i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        }\n        else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        }\n        else {\n            return null;\n        }\n    }\n    else if (!i1 && i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        }\n        else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        }\n        else {\n            return null;\n        }\n    }\n    else if (!i1 && !i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        }\n        else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        }\n        else {\n            return null;\n        }\n    }\n    return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n    for (var i = ds1.length; i--;) {\n        for (var j = 0; j < ds2.length; j++) {\n            if (!swap(ds1[i], ds2[j])) {\n                while (i < ds1.length) {\n                    while (j--) {\n                        swap(ds2[j], ds1[i]);\n                    }\n                    j = ds2.length;\n                    i++;\n                }\n                return [ds1, ds2];\n            }\n        }\n    }\n    ds1.selectionBefore = ds2.selectionBefore =\n        ds1.selectionAfter = ds2.selectionAfter = null;\n    return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n    var i1 = d1.action == \"insert\";\n    var i2 = c1.action == \"insert\";\n    if (i1 && i2) {\n        if (cmp(d1.start, c1.start) < 0) {\n            shift(c1, d1, 1);\n        }\n        else {\n            shift(d1, c1, 1);\n        }\n    }\n    else if (i1 && !i2) {\n        if (cmp(d1.start, c1.end) >= 0) {\n            shift(d1, c1, -1);\n        }\n        else if (cmp(d1.start, c1.start) <= 0) {\n            shift(c1, d1, +1);\n        }\n        else {\n            shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n            shift(c1, d1, +1);\n        }\n    }\n    else if (!i1 && i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        }\n        else if (cmp(c1.start, d1.start) <= 0) {\n            shift(d1, c1, +1);\n        }\n        else {\n            shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n            shift(d1, c1, +1);\n        }\n    }\n    else if (!i1 && !i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        }\n        else if (cmp(c1.end, d1.start) <= 0) {\n            shift(d1, c1, -1);\n        }\n        else {\n            var before, after;\n            if (cmp(d1.start, c1.start) < 0) {\n                before = d1;\n                d1 = splitDelta(d1, c1.start);\n            }\n            if (cmp(d1.end, c1.end) > 0) {\n                after = splitDelta(d1, c1.end);\n            }\n            shiftPos(c1.end, d1.start, d1.end, -1);\n            if (after && !before) {\n                d1.lines = after.lines;\n                d1.start = after.start;\n                d1.end = after.end;\n                after = d1;\n            }\n            return [c1, before, after].filter(Boolean);\n        }\n    }\n    return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n    shiftPos(d1.start, d2.start, d2.end, dir);\n    shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n    if (pos.row == (dir == 1 ? start : end).row) {\n        pos.column += dir * (end.column - start.column);\n    }\n    pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n    var lines = c.lines;\n    var end = c.end;\n    c.end = clonePos(pos);\n    var rowsBefore = c.end.row - c.start.row;\n    var otherLines = lines.splice(rowsBefore, lines.length);\n    var col = rowsBefore ? pos.column : pos.column - c.start.column;\n    lines.push(otherLines[0].substring(0, col));\n    otherLines[0] = otherLines[0].substr(col);\n    var rest = {\n        start: clonePos(pos),\n        end: end,\n        lines: otherLines,\n        action: c.action\n    };\n    return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n    d = cloneDelta(d);\n    for (var j = redoStack.length; j--;) {\n        var deltaSet = redoStack[j];\n        for (var i = 0; i < deltaSet.length; i++) {\n            var x = deltaSet[i];\n            var xformed = xform(x, d);\n            d = xformed[0];\n            if (xformed.length != 2) {\n                if (xformed[2]) {\n                    deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n                    i++;\n                }\n                else if (!xformed[1]) {\n                    deltaSet.splice(i, 1);\n                    i--;\n                }\n            }\n        }\n        if (!deltaSet.length) {\n            redoStack.splice(j, 1);\n        }\n    }\n    return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n    for (var i = 0; i < deltaSets.length; i++) {\n        var deltas = deltaSets[i];\n        for (var j = 0; j < deltas.length; j++) {\n            moveDeltasByOne(redoStack, deltas[j]);\n        }\n    }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = /** @class */ (function () {\n    function FoldLine(foldData, folds) {\n        this.foldData = foldData;\n        if (Array.isArray(folds)) {\n            this.folds = folds;\n        }\n        else {\n            folds = this.folds = [folds];\n        }\n        var last = folds[folds.length - 1];\n        this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n        this.start = this.range.start;\n        this.end = this.range.end;\n        this.folds.forEach(function (fold) {\n            fold.setFoldLine(this);\n        }, this);\n    }\n    FoldLine.prototype.shiftRow = function (shift) {\n        this.start.row += shift;\n        this.end.row += shift;\n        this.folds.forEach(function (fold) {\n            fold.start.row += shift;\n            fold.end.row += shift;\n        });\n    };\n    FoldLine.prototype.addFold = function (fold) {\n        if (fold.sameRow) {\n            if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n                throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n            }\n            this.folds.push(fold);\n            this.folds.sort(function (a, b) {\n                return -a.range.compareEnd(b.start.row, b.start.column);\n            });\n            if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n                this.end.row = fold.end.row;\n                this.end.column = fold.end.column;\n            }\n            else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n                this.start.row = fold.start.row;\n                this.start.column = fold.start.column;\n            }\n        }\n        else if (fold.start.row == this.end.row) {\n            this.folds.push(fold);\n            this.end.row = fold.end.row;\n            this.end.column = fold.end.column;\n        }\n        else if (fold.end.row == this.start.row) {\n            this.folds.unshift(fold);\n            this.start.row = fold.start.row;\n            this.start.column = fold.start.column;\n        }\n        else {\n            throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n        }\n        fold.foldLine = this;\n    };\n    FoldLine.prototype.containsRow = function (row) {\n        return row >= this.start.row && row <= this.end.row;\n    };\n    FoldLine.prototype.walk = function (callback, endRow, endColumn) {\n        var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n        if (endRow == null) {\n            endRow = this.end.row;\n            endColumn = this.end.column;\n        }\n        for (var i = 0; i < folds.length; i++) {\n            fold = folds[i];\n            cmp = fold.range.compareStart(endRow, endColumn);\n            if (cmp == -1) {\n                callback(null, endRow, endColumn, lastEnd, isNewRow);\n                return;\n            }\n            stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n            stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n            if (stop || cmp === 0) {\n                return;\n            }\n            isNewRow = !fold.sameRow;\n            lastEnd = fold.end.column;\n        }\n        callback(null, endRow, endColumn, lastEnd, isNewRow);\n    };\n    FoldLine.prototype.getNextFoldTo = function (row, column) {\n        var fold, cmp;\n        for (var i = 0; i < this.folds.length; i++) {\n            fold = this.folds[i];\n            cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                return {\n                    fold: fold,\n                    kind: \"after\"\n                };\n            }\n            else if (cmp === 0) {\n                return {\n                    fold: fold,\n                    kind: \"inside\"\n                };\n            }\n        }\n        return null;\n    };\n    FoldLine.prototype.addRemoveChars = function (row, column, len) {\n        var ret = this.getNextFoldTo(row, column), fold, folds;\n        if (ret) {\n            fold = ret.fold;\n            if (ret.kind == \"inside\"\n                && fold.start.column != column\n                && fold.start.row != row) {\n                window.console && window.console.log(row, column, fold);\n            }\n            else if (fold.start.row == row) {\n                folds = this.folds;\n                var i = folds.indexOf(fold);\n                if (i === 0) {\n                    this.start.column += len;\n                }\n                for (i; i < folds.length; i++) {\n                    fold = folds[i];\n                    fold.start.column += len;\n                    if (!fold.sameRow) {\n                        return;\n                    }\n                    fold.end.column += len;\n                }\n                this.end.column += len;\n            }\n        }\n    };\n    FoldLine.prototype.split = function (row, column) {\n        var pos = this.getNextFoldTo(row, column);\n        if (!pos || pos.kind == \"inside\")\n            return null;\n        var fold = pos.fold;\n        var folds = this.folds;\n        var foldData = this.foldData;\n        var i = folds.indexOf(fold);\n        var foldBefore = folds[i - 1];\n        this.end.row = foldBefore.end.row;\n        this.end.column = foldBefore.end.column;\n        folds = folds.splice(i, folds.length - i);\n        var newFoldLine = new FoldLine(foldData, folds);\n        foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n        return newFoldLine;\n    };\n    FoldLine.prototype.merge = function (foldLineNext) {\n        var folds = foldLineNext.folds;\n        for (var i = 0; i < folds.length; i++) {\n            this.addFold(folds[i]);\n        }\n        var foldData = this.foldData;\n        foldData.splice(foldData.indexOf(foldLineNext), 1);\n    };\n    FoldLine.prototype.toString = function () {\n        var ret = [this.range.toString() + \": [\"];\n        this.folds.forEach(function (fold) {\n            ret.push(\"  \" + fold.toString());\n        });\n        ret.push(\"]\");\n        return ret.join(\"\\n\");\n    };\n    FoldLine.prototype.idxToPosition = function (idx) {\n        var lastFoldEndColumn = 0;\n        for (var i = 0; i < this.folds.length; i++) {\n            var fold = this.folds[i];\n            idx -= fold.start.column - lastFoldEndColumn;\n            if (idx < 0) {\n                return {\n                    row: fold.start.row,\n                    column: fold.start.column + idx\n                };\n            }\n            idx -= fold.placeholder.length;\n            if (idx < 0) {\n                return fold.start;\n            }\n            lastFoldEndColumn = fold.end.column;\n        }\n        return {\n            row: this.end.row,\n            column: this.end.column + idx\n        };\n    };\n    return FoldLine;\n}());\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = /** @class */ (function () {\n    function RangeList() {\n        this.ranges = [];\n        this.$bias = 1;\n    }\n    RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) {\n        var list = this.ranges;\n        for (var i = startIndex || 0; i < list.length; i++) {\n            var range = list[i];\n            var cmpEnd = comparePoints(pos, range.end);\n            if (cmpEnd > 0)\n                continue;\n            var cmpStart = comparePoints(pos, range.start);\n            if (cmpEnd === 0)\n                return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n            if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n                return i;\n            return -i - 1;\n        }\n        return -i - 1;\n    };\n    RangeList.prototype.add = function (range) {\n        var excludeEdges = !range.isEmpty();\n        var startIndex = this.pointIndex(range.start, excludeEdges);\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n        var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n        else\n            endIndex++;\n        return this.ranges.splice(startIndex, endIndex - startIndex, range);\n    };\n    RangeList.prototype.addList = function (list) {\n        var removed = [];\n        for (var i = list.length; i--;) {\n            removed.push.apply(removed, this.add(list[i]));\n        }\n        return removed;\n    };\n    RangeList.prototype.substractPoint = function (pos) {\n        var i = this.pointIndex(pos);\n        if (i >= 0)\n            return this.ranges.splice(i, 1);\n    };\n    RangeList.prototype.merge = function () {\n        var removed = [];\n        var list = this.ranges;\n        list = list.sort(function (a, b) {\n            return comparePoints(a.start, b.start);\n        });\n        var next = list[0], range;\n        for (var i = 1; i < list.length; i++) {\n            range = next;\n            next = list[i];\n            var cmp = comparePoints(range.end, next.start);\n            if (cmp < 0)\n                continue;\n            if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n                continue;\n            if (comparePoints(range.end, next.end) < 0) {\n                range.end.row = next.end.row;\n                range.end.column = next.end.column;\n            }\n            list.splice(i, 1);\n            removed.push(next);\n            next = range;\n            i--;\n        }\n        this.ranges = list;\n        return removed;\n    };\n    RangeList.prototype.contains = function (row, column) {\n        return this.pointIndex({ row: row, column: column }) >= 0;\n    };\n    RangeList.prototype.containsPoint = function (pos) {\n        return this.pointIndex(pos) >= 0;\n    };\n    RangeList.prototype.rangeAtPoint = function (pos) {\n        var i = this.pointIndex(pos);\n        if (i >= 0)\n            return this.ranges[i];\n    };\n    RangeList.prototype.clipRows = function (startRow, endRow) {\n        var list = this.ranges;\n        if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n            return [];\n        var startIndex = this.pointIndex({ row: startRow, column: 0 });\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n        var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n        var clipped = [];\n        for (var i = startIndex; i < endIndex; i++) {\n            clipped.push(list[i]);\n        }\n        return clipped;\n    };\n    RangeList.prototype.removeAll = function () {\n        return this.ranges.splice(0, this.ranges.length);\n    };\n    RangeList.prototype.attach = function (session) {\n        if (this.session)\n            this.detach();\n        this.session = session;\n        this.onChange = this.$onChange.bind(this);\n        this.session.on('change', this.onChange);\n    };\n    RangeList.prototype.detach = function () {\n        if (!this.session)\n            return;\n        this.session.removeListener('change', this.onChange);\n        this.session = null;\n    };\n    RangeList.prototype.$onChange = function (delta) {\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var ranges = this.ranges;\n        for (var i = 0, n = ranges.length; i < n; i++) {\n            var r = ranges[i];\n            if (r.end.row >= startRow)\n                break;\n        }\n        if (delta.action == \"insert\") {\n            var lineDif = endRow - startRow;\n            var colDiff = -start.column + end.column;\n            for (; i < n; i++) {\n                var r = ranges[i];\n                if (r.start.row > startRow)\n                    break;\n                if (r.start.row == startRow && r.start.column >= start.column) {\n                    if (r.start.column == start.column && this.$bias <= 0) {\n                    }\n                    else {\n                        r.start.column += colDiff;\n                        r.start.row += lineDif;\n                    }\n                }\n                if (r.end.row == startRow && r.end.column >= start.column) {\n                    if (r.end.column == start.column && this.$bias < 0) {\n                        continue;\n                    }\n                    if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n                        if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n                            r.end.column -= colDiff;\n                    }\n                    r.end.column += colDiff;\n                    r.end.row += lineDif;\n                }\n            }\n        }\n        else {\n            var lineDif = startRow - endRow;\n            var colDiff = start.column - end.column;\n            for (; i < n; i++) {\n                var r = ranges[i];\n                if (r.start.row > endRow)\n                    break;\n                if (r.end.row < endRow\n                    && (startRow < r.end.row\n                        || startRow == r.end.row && start.column < r.end.column)) {\n                    r.end.row = startRow;\n                    r.end.column = start.column;\n                }\n                else if (r.end.row == endRow) {\n                    if (r.end.column <= end.column) {\n                        if (lineDif || r.end.column > start.column) {\n                            r.end.column = start.column;\n                            r.end.row = start.row;\n                        }\n                    }\n                    else {\n                        r.end.column += colDiff;\n                        r.end.row += lineDif;\n                    }\n                }\n                else if (r.end.row > endRow) {\n                    r.end.row += lineDif;\n                }\n                if (r.start.row < endRow\n                    && (startRow < r.start.row\n                        || startRow == r.start.row && start.column < r.start.column)) {\n                    r.start.row = startRow;\n                    r.start.column = start.column;\n                }\n                else if (r.start.row == endRow) {\n                    if (r.start.column <= end.column) {\n                        if (lineDif || r.start.column > start.column) {\n                            r.start.column = start.column;\n                            r.start.row = start.row;\n                        }\n                    }\n                    else {\n                        r.start.column += colDiff;\n                        r.start.row += lineDif;\n                    }\n                }\n                else if (r.start.row > endRow) {\n                    r.start.row += lineDif;\n                }\n            }\n        }\n        if (lineDif != 0 && i < n) {\n            for (; i < n; i++) {\n                var r = ranges[i];\n                r.start.row += lineDif;\n                r.end.row += lineDif;\n            }\n        }\n    };\n    return RangeList;\n}());\nRangeList.prototype.comparePoints = comparePoints;\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar RangeList = require(\"../range_list\").RangeList;\nvar Fold = /** @class */ (function (_super) {\n    __extends(Fold, _super);\n    function Fold(range, placeholder) {\n        var _this = _super.call(this) || this;\n        _this.foldLine = null;\n        _this.placeholder = placeholder;\n        _this.range = range;\n        _this.start = range.start;\n        _this.end = range.end;\n        _this.sameRow = range.start.row == range.end.row;\n        _this.subFolds = _this.ranges = [];\n        return _this;\n    }\n    Fold.prototype.toString = function () {\n        return '\"' + this.placeholder + '\" ' + this.range.toString();\n    };\n    Fold.prototype.setFoldLine = function (foldLine) {\n        this.foldLine = foldLine;\n        this.subFolds.forEach(function (fold) {\n            fold.setFoldLine(foldLine);\n        });\n    };\n    Fold.prototype.clone = function () {\n        var range = this.range.clone();\n        var fold = new Fold(range, this.placeholder);\n        this.subFolds.forEach(function (subFold) {\n            fold.subFolds.push(subFold.clone());\n        });\n        fold.collapseChildren = this.collapseChildren;\n        return fold;\n    };\n    Fold.prototype.addSubFold = function (fold) {\n        if (this.range.isEqual(fold))\n            return;\n        consumeRange(fold, this.start);\n        var row = fold.start.row, column = fold.start.column;\n        for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n            cmp = this.subFolds[i].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        var afterStart = this.subFolds[i];\n        var firstConsumed = 0;\n        if (cmp == 0) {\n            if (afterStart.range.containsRange(fold))\n                return afterStart.addSubFold(fold);\n            else\n                firstConsumed = 1;\n        }\n        var row = fold.range.end.row, column = fold.range.end.column;\n        for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n            cmp = this.subFolds[j].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        if (cmp == 0)\n            j++;\n        var consumedFolds = this.subFolds.splice(i, j - i, fold);\n        var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n        for (var k = firstConsumed; k < last; k++) {\n            fold.addSubFold(consumedFolds[k]);\n        }\n        fold.setFoldLine(this.foldLine);\n        return fold;\n    };\n    Fold.prototype.restoreRange = function (range) {\n        return restoreRange(range, this.start);\n    };\n    return Fold;\n}(RangeList));\nfunction consumePoint(point, anchor) {\n    point.row -= anchor.row;\n    if (point.row == 0)\n        point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n    consumePoint(range.start, anchor);\n    consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n    if (point.row == 0)\n        point.column += anchor.column;\n    point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n    restorePoint(range.start, anchor);\n    restorePoint(range.end, anchor);\n}\nexports.Fold = Fold;\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\",\"ace/mouse/mouse_event\"], function(require, exports, module){// @ts-nocheck\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar MouseEvent = require(\"../mouse/mouse_event\").MouseEvent;\nfunction Folding() {\n    this.getFoldAt = function (row, column, side) {\n        var foldLine = this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n        var folds = foldLine.folds;\n        for (var i = 0; i < folds.length; i++) {\n            var range = folds[i].range;\n            if (range.contains(row, column)) {\n                if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n                    continue;\n                }\n                else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n                    continue;\n                }\n                return folds[i];\n            }\n        }\n    };\n    this.getFoldsInRange = function (range) {\n        var start = range.start;\n        var end = range.end;\n        var foldLines = this.$foldData;\n        var foundFolds = [];\n        start.column += 1;\n        end.column -= 1;\n        for (var i = 0; i < foldLines.length; i++) {\n            var cmp = foldLines[i].range.compareRange(range);\n            if (cmp == 2) {\n                continue;\n            }\n            else if (cmp == -2) {\n                break;\n            }\n            var folds = foldLines[i].folds;\n            for (var j = 0; j < folds.length; j++) {\n                var fold = folds[j];\n                cmp = fold.range.compareRange(range);\n                if (cmp == -2) {\n                    break;\n                }\n                else if (cmp == 2) {\n                    continue;\n                }\n                else \n                if (cmp == 42) {\n                    break;\n                }\n                foundFolds.push(fold);\n            }\n        }\n        start.column -= 1;\n        end.column += 1;\n        return foundFolds;\n    };\n    this.getFoldsInRangeList = function (ranges) {\n        if (Array.isArray(ranges)) {\n            var folds = [];\n            ranges.forEach(function (range) {\n                folds = folds.concat(this.getFoldsInRange(range));\n            }, this);\n        }\n        else {\n            var folds = this.getFoldsInRange(ranges);\n        }\n        return folds;\n    };\n    this.getAllFolds = function () {\n        var folds = [];\n        var foldLines = this.$foldData;\n        for (var i = 0; i < foldLines.length; i++)\n            for (var j = 0; j < foldLines[i].folds.length; j++)\n                folds.push(foldLines[i].folds[j]);\n        return folds;\n    };\n    this.getFoldStringAt = function (row, column, trim, foldLine) {\n        foldLine = foldLine || this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n        var lastFold = {\n            end: { column: 0 }\n        };\n        var str, fold;\n        for (var i = 0; i < foldLine.folds.length; i++) {\n            fold = foldLine.folds[i];\n            var cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                str = this\n                    .getLine(fold.start.row)\n                    .substring(lastFold.end.column, fold.start.column);\n                break;\n            }\n            else if (cmp === 0) {\n                return null;\n            }\n            lastFold = fold;\n        }\n        if (!str)\n            str = this.getLine(fold.start.row).substring(lastFold.end.column);\n        if (trim == -1)\n            return str.substring(0, column - lastFold.end.column);\n        else if (trim == 1)\n            return str.substring(column - lastFold.end.column);\n        else\n            return str;\n    };\n    this.getFoldLine = function (docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n                return foldLine;\n            }\n            else if (foldLine.end.row > docRow) {\n                return null;\n            }\n        }\n        return null;\n    };\n    this.getNextFoldLine = function (docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.end.row >= docRow) {\n                return foldLine;\n            }\n        }\n        return null;\n    };\n    this.getFoldedRowCount = function (first, last) {\n        var foldData = this.$foldData, rowCount = last - first + 1;\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n            if (end >= last) {\n                if (start < last) {\n                    if (start >= first)\n                        rowCount -= last - start;\n                    else\n                        rowCount = 0; // in one fold\n                }\n                break;\n            }\n            else if (end >= first) {\n                if (start >= first) // fold inside range\n                    rowCount -= end - start;\n                else\n                    rowCount -= end - first + 1;\n            }\n        }\n        return rowCount;\n    };\n    this.$addFoldLine = function (foldLine) {\n        this.$foldData.push(foldLine);\n        this.$foldData.sort(function (a, b) {\n            return a.start.row - b.start.row;\n        });\n        return foldLine;\n    };\n    this.addFold = function (placeholder, range) {\n        var foldData = this.$foldData;\n        var added = false;\n        var fold;\n        if (placeholder instanceof Fold)\n            fold = placeholder;\n        else {\n            fold = new Fold(range, placeholder);\n            fold.collapseChildren = range.collapseChildren;\n        }\n        this.$clipRangeToDocument(fold.range);\n        var startRow = fold.start.row;\n        var startColumn = fold.start.column;\n        var endRow = fold.end.row;\n        var endColumn = fold.end.column;\n        var startFold = this.getFoldAt(startRow, startColumn, 1);\n        var endFold = this.getFoldAt(endRow, endColumn, -1);\n        if (startFold && endFold == startFold)\n            return startFold.addSubFold(fold);\n        if (startFold && !startFold.range.isStart(startRow, startColumn))\n            this.removeFold(startFold);\n        if (endFold && !endFold.range.isEnd(endRow, endColumn))\n            this.removeFold(endFold);\n        var folds = this.getFoldsInRange(fold.range);\n        if (folds.length > 0) {\n            this.removeFolds(folds);\n            if (!fold.collapseChildren) {\n                folds.forEach(function (subFold) {\n                    fold.addSubFold(subFold);\n                });\n            }\n        }\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (endRow == foldLine.start.row) {\n                foldLine.addFold(fold);\n                added = true;\n                break;\n            }\n            else if (startRow == foldLine.end.row) {\n                foldLine.addFold(fold);\n                added = true;\n                if (!fold.sameRow) {\n                    var foldLineNext = foldData[i + 1];\n                    if (foldLineNext && foldLineNext.start.row == endRow) {\n                        foldLine.merge(foldLineNext);\n                        break;\n                    }\n                }\n                break;\n            }\n            else if (endRow <= foldLine.start.row) {\n                break;\n            }\n        }\n        if (!added)\n            foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n        if (this.$useWrapMode)\n            this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n        else\n            this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"add\" });\n        return fold;\n    };\n    this.addFolds = function (folds) {\n        folds.forEach(function (fold) {\n            this.addFold(fold);\n        }, this);\n    };\n    this.removeFold = function (fold) {\n        var foldLine = fold.foldLine;\n        var startRow = foldLine.start.row;\n        var endRow = foldLine.end.row;\n        var foldLines = this.$foldData;\n        var folds = foldLine.folds;\n        if (folds.length == 1) {\n            foldLines.splice(foldLines.indexOf(foldLine), 1);\n        }\n        else \n        if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n            folds.pop();\n            foldLine.end.row = folds[folds.length - 1].end.row;\n            foldLine.end.column = folds[folds.length - 1].end.column;\n        }\n        else \n        if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n            folds.shift();\n            foldLine.start.row = folds[0].start.row;\n            foldLine.start.column = folds[0].start.column;\n        }\n        else \n        if (fold.sameRow) {\n            folds.splice(folds.indexOf(fold), 1);\n        }\n        else \n        {\n            var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n            folds = newFoldLine.folds;\n            folds.shift();\n            newFoldLine.start.row = folds[0].start.row;\n            newFoldLine.start.column = folds[0].start.column;\n        }\n        if (!this.$updating) {\n            if (this.$useWrapMode)\n                this.$updateWrapData(startRow, endRow);\n            else\n                this.$updateRowLengthCache(startRow, endRow);\n        }\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n    };\n    this.removeFolds = function (folds) {\n        var cloneFolds = [];\n        for (var i = 0; i < folds.length; i++) {\n            cloneFolds.push(folds[i]);\n        }\n        cloneFolds.forEach(function (fold) {\n            this.removeFold(fold);\n        }, this);\n        this.$modified = true;\n    };\n    this.expandFold = function (fold) {\n        this.removeFold(fold);\n        fold.subFolds.forEach(function (subFold) {\n            fold.restoreRange(subFold);\n            this.addFold(subFold);\n        }, this);\n        if (fold.collapseChildren > 0) {\n            this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n        }\n        fold.subFolds = [];\n    };\n    this.expandFolds = function (folds) {\n        folds.forEach(function (fold) {\n            this.expandFold(fold);\n        }, this);\n    };\n    this.unfold = function (location, expandInner) {\n        var range, folds;\n        if (location == null) {\n            range = new Range(0, 0, this.getLength(), 0);\n            if (expandInner == null)\n                expandInner = true;\n        }\n        else if (typeof location == \"number\") {\n            range = new Range(location, 0, location, this.getLine(location).length);\n        }\n        else if (\"row\" in location) {\n            range = Range.fromPoints(location, location);\n        }\n        else if (Array.isArray(location)) {\n            folds = [];\n            location.forEach(function (range) {\n                folds = folds.concat(this.unfold(range));\n            }, this);\n            return folds;\n        }\n        else {\n            range = location;\n        }\n        folds = this.getFoldsInRangeList(range);\n        var outermostFolds = folds;\n        while (folds.length == 1\n            && Range.comparePoints(folds[0].start, range.start) < 0\n            && Range.comparePoints(folds[0].end, range.end) > 0) {\n            this.expandFolds(folds);\n            folds = this.getFoldsInRangeList(range);\n        }\n        if (expandInner != false) {\n            this.removeFolds(folds);\n        }\n        else {\n            this.expandFolds(folds);\n        }\n        if (outermostFolds.length)\n            return outermostFolds;\n    };\n    this.isRowFolded = function (docRow, startFoldRow) {\n        return !!this.getFoldLine(docRow, startFoldRow);\n    };\n    this.getRowFoldEnd = function (docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.end.row : docRow;\n    };\n    this.getRowFoldStart = function (docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.start.row : docRow;\n    };\n    this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n        if (startRow == null)\n            startRow = foldLine.start.row;\n        if (startColumn == null)\n            startColumn = 0;\n        if (endRow == null)\n            endRow = foldLine.end.row;\n        if (endColumn == null)\n            endColumn = this.getLine(endRow).length;\n        var doc = this.doc;\n        var textLine = \"\";\n        foldLine.walk(function (placeholder, row, column, lastColumn) {\n            if (row < startRow)\n                return;\n            if (row == startRow) {\n                if (column < startColumn)\n                    return;\n                lastColumn = Math.max(startColumn, lastColumn);\n            }\n            if (placeholder != null) {\n                textLine += placeholder;\n            }\n            else {\n                textLine += doc.getLine(row).substring(lastColumn, column);\n            }\n        }, endRow, endColumn);\n        return textLine;\n    };\n    this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n        var foldLine = this.getFoldLine(row);\n        if (!foldLine) {\n            var line;\n            line = this.doc.getLine(row);\n            return line.substring(startColumn || 0, endColumn || line.length);\n        }\n        else {\n            return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n        }\n    };\n    this.$cloneFoldData = function () {\n        var fd = [];\n        fd = this.$foldData.map(function (foldLine) {\n            var folds = foldLine.folds.map(function (fold) {\n                return fold.clone();\n            });\n            return new FoldLine(fd, folds);\n        });\n        return fd;\n    };\n    this.toggleFold = function (tryToUnfold) {\n        var selection = this.selection;\n        var range = selection.getRange();\n        var fold;\n        var bracketPos;\n        if (range.isEmpty()) {\n            var cursor = range.start;\n            fold = this.getFoldAt(cursor.row, cursor.column);\n            if (fold) {\n                this.expandFold(fold);\n                return;\n            }\n            else if (tryToUnfold) {\n                var foldLine = this.getFoldLine(cursor.row);\n                if (foldLine)\n                    this.expandFolds(foldLine.folds);\n                return;\n            }\n            else if (bracketPos = this.findMatchingBracket(cursor)) {\n                if (range.comparePoint(bracketPos) == 1) {\n                    range.end = bracketPos;\n                }\n                else {\n                    range.start = bracketPos;\n                    range.start.column++;\n                    range.end.column--;\n                }\n            }\n            else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n                if (range.comparePoint(bracketPos) == 1)\n                    range.end = bracketPos;\n                else\n                    range.start = bracketPos;\n                range.start.column++;\n            }\n            else {\n                range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n            }\n        }\n        else {\n            var folds = this.getFoldsInRange(range);\n            if (tryToUnfold && folds.length) {\n                this.expandFolds(folds);\n                return;\n            }\n            else if (folds.length == 1) {\n                fold = folds[0];\n            }\n        }\n        if (!fold)\n            fold = this.getFoldAt(range.start.row, range.start.column);\n        if (fold && fold.range.toString() == range.toString()) {\n            this.expandFold(fold);\n            return;\n        }\n        var placeholder = \"...\";\n        if (!range.isMultiLine()) {\n            placeholder = this.getTextRange(range);\n            if (placeholder.length < 4)\n                return;\n            placeholder = placeholder.trim().substring(0, 2) + \"..\";\n        }\n        this.addFold(placeholder, range);\n    };\n    this.getCommentFoldRange = function (row, column, dir) {\n        var iterator = new TokenIterator(this, row, column);\n        var token = iterator.getCurrentToken();\n        var type = token && token.type;\n        if (token && /^comment|string/.test(type)) {\n            type = type.match(/comment|string/)[0];\n            if (type == \"comment\")\n                type += \"|doc-start|\\\\.doc\";\n            var re = new RegExp(type);\n            var range = new Range();\n            if (dir != 1) {\n                do {\n                    token = iterator.stepBackward();\n                } while (token && re.test(token.type));\n                token = iterator.stepForward();\n            }\n            range.start.row = iterator.getCurrentTokenRow();\n            range.start.column = iterator.getCurrentTokenColumn() + token.value.length;\n            iterator = new TokenIterator(this, row, column);\n            var initState = this.getState(iterator.$row);\n            if (dir != -1) {\n                var lastRow = -1;\n                do {\n                    token = iterator.stepForward();\n                    if (lastRow == -1) {\n                        var state = this.getState(iterator.$row);\n                        if (initState.toString() !== state.toString())\n                            lastRow = iterator.$row;\n                    }\n                    else if (iterator.$row > lastRow) {\n                        break;\n                    }\n                } while (token && re.test(token.type));\n                token = iterator.stepBackward();\n            }\n            else\n                token = iterator.getCurrentToken();\n            range.end.row = iterator.getCurrentTokenRow();\n            range.end.column = iterator.getCurrentTokenColumn();\n            if (range.start.row == range.end.row && range.start.column > range.end.column)\n                return;\n            return range;\n        }\n    };\n    this.foldAll = function (startRow, endRow, depth, test) {\n        if (depth == undefined)\n            depth = 100000; // JSON.stringify doesn't hanle Infinity\n        var foldWidgets = this.foldWidgets;\n        if (!foldWidgets)\n            return; // mode doesn't support folding\n        endRow = endRow || this.getLength();\n        startRow = startRow || 0;\n        for (var row = startRow; row < endRow; row++) {\n            if (foldWidgets[row] == null)\n                foldWidgets[row] = this.getFoldWidget(row);\n            if (foldWidgets[row] != \"start\")\n                continue;\n            if (test && !test(row))\n                continue;\n            var range = this.getFoldWidgetRange(row);\n            if (range && range.isMultiLine()\n                && range.end.row <= endRow\n                && range.start.row >= startRow) {\n                row = range.end.row;\n                range.collapseChildren = depth;\n                this.addFold(\"...\", range);\n            }\n        }\n    };\n    this.foldToLevel = function (level) {\n        this.foldAll();\n        while (level-- > 0)\n            this.unfold(null, false);\n    };\n    this.foldAllComments = function () {\n        var session = this;\n        this.foldAll(null, null, null, function (row) {\n            var tokens = session.getTokens(row);\n            for (var i = 0; i < tokens.length; i++) {\n                var token = tokens[i];\n                if (token.type == \"text\" && /^\\s+$/.test(token.value))\n                    continue;\n                if (/comment/.test(token.type))\n                    return true;\n                return false;\n            }\n        });\n    };\n    this.$foldStyles = {\n        \"manual\": 1,\n        \"markbegin\": 1,\n        \"markbeginend\": 1\n    };\n    this.$foldStyle = \"markbegin\";\n    this.setFoldStyle = function (style) {\n        if (!this.$foldStyles[style])\n            throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n        if (this.$foldStyle == style)\n            return;\n        this.$foldStyle = style;\n        if (style == \"manual\")\n            this.unfold();\n        var mode = this.$foldMode;\n        this.$setFolding(null);\n        this.$setFolding(mode);\n    };\n    this.$setFolding = function (foldMode) {\n        if (this.$foldMode == foldMode)\n            return;\n        this.$foldMode = foldMode;\n        this.off('change', this.$updateFoldWidgets);\n        this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n        this._signal(\"changeAnnotation\");\n        if (!foldMode || this.$foldStyle == \"manual\") {\n            this.foldWidgets = null;\n            return;\n        }\n        this.foldWidgets = [];\n        this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n        this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n        this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n        this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n        this.on('change', this.$updateFoldWidgets);\n        this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n    };\n    this.getParentFoldRangeData = function (row, ignoreCurrent) {\n        var fw = this.foldWidgets;\n        if (!fw || (ignoreCurrent && fw[row]))\n            return {};\n        var i = row - 1, firstRange;\n        while (i >= 0) {\n            var c = fw[i];\n            if (c == null)\n                c = fw[i] = this.getFoldWidget(i);\n            if (c == \"start\") {\n                var range = this.getFoldWidgetRange(i);\n                if (!firstRange)\n                    firstRange = range;\n                if (range && range.end.row >= row)\n                    break;\n            }\n            i--;\n        }\n        return {\n            range: i !== -1 && range,\n            firstRange: firstRange\n        };\n    };\n    this.onFoldWidgetClick = function (row, e) {\n        if (e instanceof MouseEvent)\n            e = e.domEvent;\n        var options = {\n            children: e.shiftKey,\n            all: e.ctrlKey || e.metaKey,\n            siblings: e.altKey\n        };\n        var range = this.$toggleFoldWidget(row, options);\n        if (!range) {\n            var el = (e.target || e.srcElement);\n            if (el && /ace_fold-widget/.test(el.className))\n                el.className += \" ace_invalid\";\n        }\n    };\n    this.$toggleFoldWidget = function (row, options) {\n        if (!this.getFoldWidget)\n            return;\n        var type = this.getFoldWidget(row);\n        var line = this.getLine(row);\n        var dir = type === \"end\" ? -1 : 1;\n        var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n        if (fold) {\n            if (options.children || options.all)\n                this.removeFold(fold);\n            else\n                this.expandFold(fold);\n            return fold;\n        }\n        var range = this.getFoldWidgetRange(row, true);\n        if (range && !range.isMultiLine()) {\n            fold = this.getFoldAt(range.start.row, range.start.column, 1);\n            if (fold && range.isEqual(fold.range)) {\n                this.removeFold(fold);\n                return fold;\n            }\n        }\n        if (options.siblings) {\n            var data = this.getParentFoldRangeData(row);\n            if (data.range) {\n                var startRow = data.range.start.row + 1;\n                var endRow = data.range.end.row;\n            }\n            this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n        }\n        else if (options.children) {\n            endRow = range ? range.end.row : this.getLength();\n            this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n        }\n        else if (range) {\n            if (options.all)\n                range.collapseChildren = 10000;\n            this.addFold(\"...\", range);\n        }\n        return range;\n    };\n    this.toggleFoldWidget = function (toggleParent) {\n        var row = this.selection.getCursor().row;\n        row = this.getRowFoldStart(row);\n        var range = this.$toggleFoldWidget(row, {});\n        if (range)\n            return;\n        var data = this.getParentFoldRangeData(row, true);\n        range = data.range || data.firstRange;\n        if (range) {\n            row = range.start.row;\n            var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n            if (fold) {\n                this.removeFold(fold);\n            }\n            else {\n                this.addFold(\"...\", range);\n            }\n        }\n    };\n    this.updateFoldWidgets = function (delta) {\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n        if (len === 0) {\n            this.foldWidgets[firstRow] = null;\n        }\n        else if (delta.action == 'remove') {\n            this.foldWidgets.splice(firstRow, len + 1, null);\n        }\n        else {\n            var args = Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.foldWidgets.splice.apply(this.foldWidgets, args);\n        }\n    };\n    this.tokenizerUpdateFoldWidgets = function (e) {\n        var rows = e.data;\n        if (rows.first != rows.last) {\n            if (this.foldWidgets.length > rows.first)\n                this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n        }\n    };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n    this.findMatchingBracket = function (position, chr) {\n        if (position.column == 0)\n            return null;\n        var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n        if (charBeforeCursor == \"\")\n            return null;\n        var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match)\n            return null;\n        if (match[1])\n            return this.$findClosingBracket(match[1], position);\n        else\n            return this.$findOpeningBracket(match[2], position);\n    };\n    this.getBracketRange = function (pos) {\n        var line = this.getLine(pos.row);\n        var before = true, range;\n        var chr = line.charAt(pos.column - 1);\n        var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match) {\n            chr = line.charAt(pos.column);\n            pos = { row: pos.row, column: pos.column + 1 };\n            match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n            before = false;\n        }\n        if (!match)\n            return null;\n        if (match[1]) {\n            var bracketPos = this.$findClosingBracket(match[1], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(pos, bracketPos);\n            if (!before) {\n                range.end.column++;\n                range.start.column--;\n            }\n            range.cursor = range.end;\n        }\n        else {\n            var bracketPos = this.$findOpeningBracket(match[2], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(bracketPos, pos);\n            if (!before) {\n                range.start.column++;\n                range.end.column--;\n            }\n            range.cursor = range.start;\n        }\n        return range;\n    };\n    this.getMatchingBracketRanges = function (pos, isBackwards) {\n        var line = this.getLine(pos.row);\n        var bracketsRegExp = /([\\(\\[\\{])|([\\)\\]\\}])/;\n        var chr = !isBackwards && line.charAt(pos.column - 1);\n        var match = chr && chr.match(bracketsRegExp);\n        if (!match) {\n            chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column);\n            pos = {\n                row: pos.row,\n                column: pos.column + 1\n            };\n            match = chr && chr.match(bracketsRegExp);\n        }\n        if (!match)\n            return null;\n        var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n        var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n            : this.$findOpeningBracket(match[2], pos);\n        if (!bracketPos)\n            return [startRange];\n        var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n        return [startRange, endRange];\n    };\n    this.$brackets = {\n        \")\": \"(\",\n        \"(\": \")\",\n        \"]\": \"[\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"}\": \"{\",\n        \"<\": \">\",\n        \">\": \"<\"\n    };\n    this.$findOpeningBracket = function (bracket, position, typeRe) {\n        var openBracket = this.$brackets[bracket];\n        var depth = 1;\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n        if (!typeRe) {\n            typeRe = new RegExp(\"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n                    .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n                    .replace(/-close\\b/, \"-(close|open)\")\n                + \")+\");\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n        var value = token.value;\n        while (true) {\n            while (valueIndex >= 0) {\n                var chr = value.charAt(valueIndex);\n                if (chr == openBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return { row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn() };\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex -= 1;\n            }\n            do {\n                token = iterator.stepBackward();\n            } while (token && !typeRe.test(token.type));\n            if (token == null)\n                break;\n            value = token.value;\n            valueIndex = value.length - 1;\n        }\n        return null;\n    };\n    this.$findClosingBracket = function (bracket, position, typeRe) {\n        var closingBracket = this.$brackets[bracket];\n        var depth = 1;\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n        if (!typeRe) {\n            typeRe = new RegExp(\"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n                    .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n                    .replace(/-open\\b/, \"-(close|open)\")\n                + \")+\");\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn();\n        while (true) {\n            var value = token.value;\n            var valueLength = value.length;\n            while (valueIndex < valueLength) {\n                var chr = value.charAt(valueIndex);\n                if (chr == closingBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return { row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn() };\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex += 1;\n            }\n            do {\n                token = iterator.stepForward();\n            } while (token && !typeRe.test(token.type));\n            if (token == null)\n                break;\n            valueIndex = 0;\n        }\n        return null;\n    };\n    this.getMatchingTags = function (pos) {\n        var iterator = new TokenIterator(this, pos.row, pos.column);\n        var token = this.$findTagName(iterator);\n        if (!token)\n            return;\n        var prevToken = iterator.stepBackward();\n        if (prevToken.value === '<') {\n            return this.$findClosingTag(iterator, token);\n        }\n        else {\n            return this.$findOpeningTag(iterator, token);\n        }\n    };\n    this.$findTagName = function (iterator) {\n        var token = iterator.getCurrentToken();\n        var found = false;\n        var backward = false;\n        if (token && token.type.indexOf('tag-name') === -1) {\n            do {\n                if (backward)\n                    token = iterator.stepBackward();\n                else\n                    token = iterator.stepForward();\n                if (token) {\n                    if (token.value === \"/>\") {\n                        backward = true;\n                    }\n                    else if (token.type.indexOf('tag-name') !== -1) {\n                        found = true;\n                    }\n                }\n            } while (token && !found);\n        }\n        return token;\n    };\n    this.$findClosingTag = function (iterator, token) {\n        var prevToken;\n        var currentTag = token.value;\n        var tag = token.value;\n        var depth = 0;\n        var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n        token = iterator.stepForward();\n        var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n        var foundOpenTagEnd = false;\n        do {\n            prevToken = token;\n            if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) {\n                var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n                foundOpenTagEnd = true;\n            }\n            token = iterator.stepForward();\n            if (token) {\n                if (token.value === '>' && !foundOpenTagEnd) {\n                    var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n                    foundOpenTagEnd = true;\n                }\n                if (token.type.indexOf('tag-name') !== -1) {\n                    currentTag = token.value;\n                    if (tag === currentTag) {\n                        if (prevToken.value === '<') {\n                            depth++;\n                        }\n                        else if (prevToken.value === '</') {\n                            depth--;\n                            if (depth < 0) { //found closing tag\n                                iterator.stepBackward();\n                                var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); //Range for </\n                                token = iterator.stepForward();\n                                var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n                                if (token.type.indexOf('tag-close') === -1) {\n                                    token = iterator.stepForward();\n                                }\n                                if (token && token.value === '>') {\n                                    var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n                                }\n                                else {\n                                    return;\n                                }\n                            }\n                        }\n                    }\n                }\n                else if (tag === currentTag && token.value === '/>') { // self-closing tag\n                    depth--;\n                    if (depth < 0) { //found self-closing tag end\n                        var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n                        var closeTagName = closeTagStart;\n                        var closeTagEnd = closeTagName;\n                        var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n                    }\n                }\n            }\n        } while (token && depth >= 0);\n        if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n            return {\n                openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n                closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n                openTagName: openTagName,\n                closeTagName: closeTagName\n            };\n        }\n    };\n    this.$findOpeningTag = function (iterator, token) {\n        var prevToken = iterator.getCurrentToken();\n        var tag = token.value;\n        var depth = 0;\n        var startRow = iterator.getCurrentTokenRow();\n        var startColumn = iterator.getCurrentTokenColumn();\n        var endColumn = startColumn + 2;\n        var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for </\n        iterator.stepForward();\n        var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n        if (token.type.indexOf('tag-close') === -1) {\n            token = iterator.stepForward();\n        }\n        if (!token || token.value !== \">\")\n            return;\n        var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n        iterator.stepBackward();\n        iterator.stepBackward();\n        do {\n            token = prevToken;\n            startRow = iterator.getCurrentTokenRow();\n            startColumn = iterator.getCurrentTokenColumn();\n            endColumn = startColumn + token.value.length;\n            prevToken = iterator.stepBackward();\n            if (token) {\n                if (token.type.indexOf('tag-name') !== -1) {\n                    if (tag === token.value) {\n                        if (prevToken.value === '<') {\n                            depth++;\n                            if (depth > 0) { //found opening tag\n                                var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n                                var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n                                do {\n                                    token = iterator.stepForward();\n                                } while (token && token.value !== '>');\n                                var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n                            }\n                        }\n                        else if (prevToken.value === '</') {\n                            depth--;\n                        }\n                    }\n                }\n                else if (token.value === '/>') { // self-closing tag\n                    var stepCount = 0;\n                    var tmpToken = prevToken;\n                    while (tmpToken) {\n                        if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n                            depth--;\n                            break;\n                        }\n                        else if (tmpToken.value === '<') {\n                            break;\n                        }\n                        tmpToken = iterator.stepBackward();\n                        stepCount++;\n                    }\n                    for (var i = 0; i < stepCount; i++) {\n                        iterator.stepForward();\n                    }\n                }\n            }\n        } while (prevToken && depth <= 0);\n        if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n            return {\n                openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n                closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n                openTagName: openTagName,\n                closeTagName: closeTagName\n            };\n        }\n    };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/line_widgets\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/undomanager\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar LineWidgets = require(\"./line_widgets\").LineWidgets;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar EditSession = /** @class */ (function () {\n    function EditSession(text, mode) { this.doc;\n        this.$breakpoints = [];\n        this.$decorations = [];\n        this.$frontMarkers = {};\n        this.$backMarkers = {};\n        this.$markerId = 1;\n        this.$undoSelect = true;\n        this.$editor = null;\n        this.prevOp = {};\n        this.$foldData = [];\n        this.id = \"session\" + (++EditSession.$uid);\n        this.$foldData.toString = function () {\n            return this.join(\"\\n\");\n        };\n        this.$gutterCustomWidgets = {};\n        this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n        var _self = this;\n        this.bgTokenizer.on(\"update\", function (e) {\n            _self._signal(\"tokenizerUpdate\", e);\n        });\n        this.on(\"changeFold\", this.onChangeFold.bind(this));\n        this.$onChange = this.onChange.bind(this);\n        if (typeof text != \"object\" || !text.getLine)\n            text = new Document(/**@type{string}*/ (text));\n        this.setDocument(text);\n        this.selection = new Selection(this);\n        this.$onSelectionChange = this.onSelectionChange.bind(this);\n        this.selection.on(\"changeSelection\", this.$onSelectionChange);\n        this.selection.on(\"changeCursor\", this.$onSelectionChange);\n        this.$bidiHandler = new BidiHandler(this);\n        config.resetOptions(this);\n        this.setMode(mode);\n        config._signal(\"session\", this);\n        this.destroyed = false;\n        this.$initOperationListeners();\n    }\n    EditSession.prototype.$initOperationListeners = function () {\n        var _this = this;\n        this.curOp = null;\n        this.on(\"change\", function () {\n            if (!_this.curOp) {\n                _this.startOperation();\n                _this.curOp.selectionBefore = _this.$lastSel;\n            }\n            _this.curOp.docChanged = true;\n        }, true);\n        this.on(\"changeSelection\", function () {\n            if (!_this.curOp) {\n                _this.startOperation();\n                _this.curOp.selectionBefore = _this.$lastSel;\n            }\n            _this.curOp.selectionChanged = true;\n        }, true);\n        this.$operationResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n    };\n    EditSession.prototype.startOperation = function (commandEvent) {\n        if (this.curOp) {\n            if (!commandEvent || this.curOp.command) {\n                return;\n            }\n            this.prevOp = this.curOp;\n        }\n        if (!commandEvent) {\n            commandEvent = {};\n        }\n        this.$operationResetTimer.schedule();\n        this.curOp = {\n            command: commandEvent.command || {},\n            args: commandEvent.args\n        };\n        this.curOp.selectionBefore = this.selection.toJSON();\n        this._signal(\"startOperation\", commandEvent);\n    };\n    EditSession.prototype.endOperation = function (e) {\n        if (this.curOp) {\n            if (e && e.returnValue === false) {\n                this.curOp = null;\n                this._signal(\"endOperation\", e);\n                return;\n            }\n            if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\") {\n                return;\n            }\n            var currentSelection = this.selection.toJSON();\n            this.curOp.selectionAfter = currentSelection;\n            this.$lastSel = this.selection.toJSON();\n            this.getUndoManager().addSelection(currentSelection);\n            this._signal(\"beforeEndOperation\");\n            this.prevOp = this.curOp;\n            this.curOp = null;\n            this._signal(\"endOperation\", e);\n        }\n    };\n    EditSession.prototype.setDocument = function (doc) {\n        if (this.doc)\n            this.doc.off(\"change\", this.$onChange);\n        this.doc = doc;\n        doc.on(\"change\", this.$onChange, true);\n        this.bgTokenizer.setDocument(this.getDocument());\n        this.resetCaches();\n    };\n    EditSession.prototype.getDocument = function () {\n        return this.doc;\n    };\n    Object.defineProperty(EditSession.prototype, \"widgetManager\", {\n        get: function () {\n            var widgetManager = new LineWidgets(this);\n            this.widgetManager = widgetManager;\n            if (this.$editor)\n                widgetManager.attach(this.$editor);\n            return widgetManager;\n        },\n        set: function (value) {\n            Object.defineProperty(this, \"widgetManager\", {\n                writable: true,\n                enumerable: true,\n                configurable: true,\n                value: value,\n            });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    EditSession.prototype.$resetRowCache = function (docRow) {\n        if (!docRow) {\n            this.$docRowCache = [];\n            this.$screenRowCache = [];\n            return;\n        }\n        var l = this.$docRowCache.length;\n        var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n        if (l > i) {\n            this.$docRowCache.splice(i, l);\n            this.$screenRowCache.splice(i, l);\n        }\n    };\n    EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) {\n        var low = 0;\n        var hi = cacheArray.length - 1;\n        while (low <= hi) {\n            var mid = (low + hi) >> 1;\n            var c = cacheArray[mid];\n            if (val > c)\n                low = mid + 1;\n            else if (val < c)\n                hi = mid - 1;\n            else\n                return mid;\n        }\n        return low - 1;\n    };\n    EditSession.prototype.resetCaches = function () {\n        this.$modified = true;\n        this.$wrapData = [];\n        this.$rowLengthCache = [];\n        this.$resetRowCache(0);\n        if (!this.destroyed)\n            this.bgTokenizer.start(0);\n    };\n    EditSession.prototype.onChangeFold = function (e) {\n        var fold = e.data;\n        this.$resetRowCache(fold.start.row);\n    };\n    EditSession.prototype.onChange = function (delta) {\n        this.$modified = true;\n        this.$bidiHandler.onChange(delta);\n        this.$resetRowCache(delta.start.row);\n        var removedFolds = this.$updateInternalDataOnChange(delta);\n        if (!this.$fromUndo && this.$undoManager) {\n            if (removedFolds && removedFolds.length) {\n                this.$undoManager.add({\n                    action: \"removeFolds\",\n                    folds: removedFolds\n                }, this.mergeUndoDeltas);\n                this.mergeUndoDeltas = true;\n            }\n            this.$undoManager.add(delta, this.mergeUndoDeltas);\n            this.mergeUndoDeltas = true;\n            this.$informUndoManager.schedule();\n        }\n        this.bgTokenizer.$updateOnChange(delta);\n        this._signal(\"change\", delta);\n    };\n    EditSession.prototype.onSelectionChange = function () {\n        this._signal(\"changeSelection\");\n    };\n    EditSession.prototype.setValue = function (text) {\n        this.doc.setValue(text);\n        this.selection.moveTo(0, 0);\n        this.$resetRowCache(0);\n        this.setUndoManager(this.$undoManager);\n        this.getUndoManager().reset();\n    };\n    EditSession.fromJSON = function (session) {\n        if (typeof session == \"string\")\n            session = JSON.parse(session);\n        var undoManager = new UndoManager();\n        undoManager.$undoStack = session.history.$undoStack;\n        undoManager.$redoStack = session.history.$redoStack;\n        undoManager.mark = session.history.mark;\n        undoManager.$rev = session.history.rev;\n        var editSession = new EditSession(session.value);\n        session.folds.forEach(function (fold) {\n            editSession.addFold(\"...\", Range.fromPoints(fold.start, fold.end));\n        });\n        editSession.setAnnotations(session.annotations);\n        editSession.setBreakpoints(session.breakpoints);\n        editSession.setMode(session.mode);\n        editSession.setScrollLeft(session.scrollLeft);\n        editSession.setScrollTop(session.scrollTop);\n        editSession.setUndoManager(undoManager);\n        editSession.selection.fromJSON(session.selection);\n        return editSession;\n    };\n    EditSession.prototype.toJSON = function () {\n        return {\n            annotations: this.$annotations,\n            breakpoints: this.$breakpoints,\n            folds: this.getAllFolds().map(function (fold) {\n                return fold.range;\n            }),\n            history: this.getUndoManager(),\n            mode: this.$mode.$id,\n            scrollLeft: this.$scrollLeft,\n            scrollTop: this.$scrollTop,\n            selection: this.selection.toJSON(),\n            value: this.doc.getValue()\n        };\n    };\n    EditSession.prototype.toString = function () {\n        return this.doc.getValue();\n    };\n    EditSession.prototype.getSelection = function () {\n        return this.selection;\n    };\n    EditSession.prototype.getState = function (row) {\n        return this.bgTokenizer.getState(row);\n    };\n    EditSession.prototype.getTokens = function (row) {\n        return this.bgTokenizer.getTokens(row);\n    };\n    EditSession.prototype.getTokenAt = function (row, column) {\n        var tokens = this.bgTokenizer.getTokens(row);\n        var token, c = 0;\n        if (column == null) {\n            var i = tokens.length - 1;\n            c = this.getLine(row).length;\n        }\n        else {\n            for (var i = 0; i < tokens.length; i++) {\n                c += tokens[i].value.length;\n                if (c >= column)\n                    break;\n            }\n        }\n        token = tokens[i];\n        if (!token)\n            return null;\n        token.index = i;\n        token.start = c - token.value.length;\n        return token;\n    };\n    EditSession.prototype.setUndoManager = function (undoManager) {\n        this.$undoManager = undoManager;\n        if (this.$informUndoManager)\n            this.$informUndoManager.cancel();\n        if (undoManager) {\n            var self = this;\n            undoManager.addSession(this);\n            this.$syncInformUndoManager = function () {\n                self.$informUndoManager.cancel();\n                self.mergeUndoDeltas = false;\n            };\n            this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n        }\n        else {\n            this.$syncInformUndoManager = function () { };\n        }\n    };\n    EditSession.prototype.markUndoGroup = function () {\n        if (this.$syncInformUndoManager)\n            this.$syncInformUndoManager();\n    };\n    EditSession.prototype.getUndoManager = function () {\n        return this.$undoManager || this.$defaultUndoManager;\n    };\n    EditSession.prototype.getTabString = function () {\n        if (this.getUseSoftTabs()) {\n            return lang.stringRepeat(\" \", this.getTabSize());\n        }\n        else {\n            return \"\\t\";\n        }\n    };\n    EditSession.prototype.setUseSoftTabs = function (val) {\n        this.setOption(\"useSoftTabs\", val);\n    };\n    EditSession.prototype.getUseSoftTabs = function () {\n        return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n    };\n    EditSession.prototype.setTabSize = function (tabSize) {\n        this.setOption(\"tabSize\", tabSize);\n    };\n    EditSession.prototype.getTabSize = function () {\n        return this.$tabSize;\n    };\n    EditSession.prototype.isTabStop = function (position) {\n        return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n    };\n    EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n        this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n    };\n    EditSession.prototype.getNavigateWithinSoftTabs = function () {\n        return this.$navigateWithinSoftTabs;\n    };\n    EditSession.prototype.setOverwrite = function (overwrite) {\n        this.setOption(\"overwrite\", overwrite);\n    };\n    EditSession.prototype.getOverwrite = function () {\n        return this.$overwrite;\n    };\n    EditSession.prototype.toggleOverwrite = function () {\n        this.setOverwrite(!this.$overwrite);\n    };\n    EditSession.prototype.addGutterDecoration = function (row, className) {\n        if (!this.$decorations[row])\n            this.$decorations[row] = \"\";\n        this.$decorations[row] += \" \" + className;\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.removeGutterCustomWidget = function (row) {\n        if (this.$editor) {\n            this.$editor.renderer.$gutterLayer.$removeCustomWidget(row);\n        }\n    };\n    EditSession.prototype.addGutterCustomWidget = function (row, attributes) {\n        if (this.$editor) {\n            this.$editor.renderer.$gutterLayer.$addCustomWidget(row, attributes);\n        }\n    };\n    EditSession.prototype.removeGutterDecoration = function (row, className) {\n        this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.getBreakpoints = function () {\n        return this.$breakpoints;\n    };\n    EditSession.prototype.setBreakpoints = function (rows) {\n        this.$breakpoints = [];\n        for (var i = 0; i < rows.length; i++) {\n            this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n        }\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.clearBreakpoints = function () {\n        this.$breakpoints = [];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.setBreakpoint = function (row, className) {\n        if (className === undefined)\n            className = \"ace_breakpoint\";\n        if (className)\n            this.$breakpoints[row] = className;\n        else\n            delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.clearBreakpoint = function (row) {\n        delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    EditSession.prototype.addMarker = function (range, clazz, type, inFront) {\n        var id = this.$markerId++;\n        var marker = {\n            range: range,\n            type: type || \"line\",\n            renderer: typeof type == \"function\" ? type : null,\n            clazz: clazz,\n            inFront: !!inFront,\n            id: id\n        };\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        }\n        else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n        return id;\n    };\n    EditSession.prototype.addDynamicMarker = function (marker, inFront) {\n        if (!marker.update)\n            return;\n        var id = this.$markerId++;\n        marker.id = id;\n        marker.inFront = !!inFront;\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        }\n        else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n        return marker;\n    };\n    EditSession.prototype.removeMarker = function (markerId) {\n        var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n        if (!marker)\n            return;\n        var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n        delete (markers[markerId]);\n        this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n    };\n    EditSession.prototype.getMarkers = function (inFront) {\n        return inFront ? this.$frontMarkers : this.$backMarkers;\n    };\n    EditSession.prototype.highlight = function (re) {\n        if (!this.$searchHighlight) {\n            var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n            this.$searchHighlight = this.addDynamicMarker(highlight);\n        }\n        this.$searchHighlight.setRegexp(re);\n    };\n    EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) {\n        if (typeof endRow != \"number\") {\n            clazz = endRow;\n            endRow = startRow;\n        }\n        if (!clazz)\n            clazz = \"ace_step\";\n        var range = new Range(startRow, 0, endRow, Infinity);\n        range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n        return range;\n    };\n    EditSession.prototype.setAnnotations = function (annotations) {\n        this.$annotations = annotations;\n        this._signal(\"changeAnnotation\", {});\n    };\n    EditSession.prototype.getAnnotations = function () {\n        return this.$annotations || [];\n    };\n    EditSession.prototype.clearAnnotations = function () {\n        this.setAnnotations([]);\n    };\n    EditSession.prototype.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r?\\n)/m);\n        if (match) {\n            this.$autoNewLine = match[1];\n        }\n        else {\n            this.$autoNewLine = \"\\n\";\n        }\n    };\n    EditSession.prototype.getWordRange = function (row, column) {\n        var line = this.getLine(row);\n        var inToken = false;\n        if (column > 0)\n            inToken = !!line.charAt(column - 1).match(this.tokenRe);\n        if (!inToken)\n            inToken = !!line.charAt(column).match(this.tokenRe);\n        if (inToken)\n            var re = this.tokenRe;\n        else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n            var re = /\\s/;\n        else\n            var re = this.nonTokenRe;\n        var start = column;\n        if (start > 0) {\n            do {\n                start--;\n            } while (start >= 0 && line.charAt(start).match(re));\n            start++;\n        }\n        var end = column;\n        while (end < line.length && line.charAt(end).match(re)) {\n            end++;\n        }\n        return new Range(row, start, row, end);\n    };\n    EditSession.prototype.getAWordRange = function (row, column) {\n        var wordRange = this.getWordRange(row, column);\n        var line = this.getLine(wordRange.end.row);\n        while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n            wordRange.end.column += 1;\n        }\n        return wordRange;\n    };\n    EditSession.prototype.setNewLineMode = function (newLineMode) {\n        this.doc.setNewLineMode(newLineMode);\n    };\n    EditSession.prototype.getNewLineMode = function () {\n        return this.doc.getNewLineMode();\n    };\n    EditSession.prototype.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n    EditSession.prototype.getUseWorker = function () { return this.$useWorker; };\n    EditSession.prototype.onReloadTokenizer = function (e) {\n        var rows = e.data;\n        this.bgTokenizer.start(rows.first);\n        this._signal(\"tokenizerUpdate\", e);\n    };\n    EditSession.prototype.setMode = function (mode, cb) {\n        if (mode && typeof mode === \"object\") {\n            if (mode.getTokenizer)\n                return this.$onChangeMode(mode);\n            var options = mode;\n            var path = options.path;\n        }\n        else {\n            path = /**@type{string}*/ (mode) || \"ace/mode/text\";\n        }\n        if (!this.$modes[\"ace/mode/text\"])\n            this.$modes[\"ace/mode/text\"] = new TextMode();\n        if (this.$modes[path] && !options) {\n            this.$onChangeMode(this.$modes[path]);\n            cb && cb();\n            return;\n        }\n        this.$modeId = path;\n        config.loadModule([\"mode\", path], function (m) {\n            if (this.destroyed) {\n                return;\n            }\n            if (this.$modeId !== path)\n                return cb && cb();\n            if (this.$modes[path] && !options) {\n                this.$onChangeMode(this.$modes[path]);\n            }\n            else if (m && m.Mode) {\n                m = new m.Mode(options);\n                if (!options) {\n                    this.$modes[path] = m;\n                    m.$id = path;\n                }\n                this.$onChangeMode(m);\n            }\n            cb && cb();\n        }.bind(this));\n        if (!this.$mode)\n            this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n    };\n    EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) {\n        if (!$isPlaceholder)\n            this.$modeId = mode.$id;\n        if (this.$mode === mode)\n            return;\n        var oldMode = this.$mode;\n        this.$mode = mode;\n        this.$stopWorker();\n        if (this.$useWorker)\n            this.$startWorker();\n        var tokenizer = mode.getTokenizer();\n        if (tokenizer.on !== undefined) {\n            var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n            tokenizer.on(\"update\", onReloadTokenizer);\n        }\n        this.bgTokenizer.setTokenizer(tokenizer);\n        this.bgTokenizer.setDocument(this.getDocument());\n        this.tokenRe = mode.tokenRe;\n        this.nonTokenRe = mode.nonTokenRe;\n        if (!$isPlaceholder) {\n            if (mode.attachToSession)\n                mode.attachToSession(this);\n            this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n            this.$setFolding(mode.foldingRules);\n            this.bgTokenizer.start(0);\n            this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n        }\n    };\n    EditSession.prototype.$stopWorker = function () {\n        if (this.$worker) {\n            this.$worker.terminate();\n            this.$worker = null;\n        }\n    };\n    EditSession.prototype.$startWorker = function () {\n        try {\n            this.$worker = this.$mode.createWorker(this);\n        }\n        catch (e) {\n            config.warn(\"Could not load worker\", e);\n            this.$worker = null;\n        }\n    };\n    EditSession.prototype.getMode = function () {\n        return this.$mode;\n    };\n    EditSession.prototype.setScrollTop = function (scrollTop) {\n        if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n            return;\n        this.$scrollTop = scrollTop;\n        this._signal(\"changeScrollTop\", scrollTop);\n    };\n    EditSession.prototype.getScrollTop = function () {\n        return this.$scrollTop;\n    };\n    EditSession.prototype.setScrollLeft = function (scrollLeft) {\n        if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n            return;\n        this.$scrollLeft = scrollLeft;\n        this._signal(\"changeScrollLeft\", scrollLeft);\n    };\n    EditSession.prototype.getScrollLeft = function () {\n        return this.$scrollLeft;\n    };\n    EditSession.prototype.getScreenWidth = function () {\n        this.$computeWidth();\n        if (this.lineWidgets)\n            return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n        return this.screenWidth;\n    };\n    EditSession.prototype.getLineWidgetMaxWidth = function () {\n        if (this.lineWidgetsWidth != null)\n            return this.lineWidgetsWidth;\n        var width = 0;\n        this.lineWidgets.forEach(function (w) {\n            if (w && w.screenWidth > width)\n                width = w.screenWidth;\n        });\n        return this.lineWidgetWidth = width;\n    };\n    EditSession.prototype.$computeWidth = function (force) {\n        if (this.$modified || force) {\n            this.$modified = false;\n            if (this.$useWrapMode)\n                return this.screenWidth = this.$wrapLimit;\n            var lines = this.doc.getAllLines();\n            var cache = this.$rowLengthCache;\n            var longestScreenLine = 0;\n            var foldIndex = 0;\n            var foldLine = this.$foldData[foldIndex];\n            var foldStart = foldLine ? foldLine.start.row : Infinity;\n            var len = lines.length;\n            for (var i = 0; i < len; i++) {\n                if (i > foldStart) {\n                    i = foldLine.end.row + 1;\n                    if (i >= len)\n                        break;\n                    foldLine = this.$foldData[foldIndex++];\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n                if (cache[i] == null)\n                    cache[i] = this.$getStringScreenWidth(lines[i])[0];\n                if (cache[i] > longestScreenLine)\n                    longestScreenLine = cache[i];\n            }\n            this.screenWidth = longestScreenLine;\n        }\n    };\n    EditSession.prototype.getLine = function (row) {\n        return this.doc.getLine(row);\n    };\n    EditSession.prototype.getLines = function (firstRow, lastRow) {\n        return this.doc.getLines(firstRow, lastRow);\n    };\n    EditSession.prototype.getLength = function () {\n        return this.doc.getLength();\n    };\n    EditSession.prototype.getTextRange = function (range) {\n        return this.doc.getTextRange(range || this.selection.getRange());\n    };\n    EditSession.prototype.insert = function (position, text) {\n        return this.doc.insert(position, text);\n    };\n    EditSession.prototype.remove = function (range) {\n        return this.doc.remove(range);\n    };\n    EditSession.prototype.removeFullLines = function (firstRow, lastRow) {\n        return this.doc.removeFullLines(firstRow, lastRow);\n    };\n    EditSession.prototype.undoChanges = function (deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n        this.$fromUndo = true;\n        for (var i = deltas.length - 1; i != -1; i--) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.revertDelta(delta);\n            }\n            else if (delta.folds) {\n                this.addFolds(delta.folds);\n            }\n        }\n        if (!dontSelect && this.$undoSelect) {\n            if (deltas.selectionBefore)\n                this.selection.fromJSON(deltas.selectionBefore);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, true));\n        }\n        this.$fromUndo = false;\n    };\n    EditSession.prototype.redoChanges = function (deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n        this.$fromUndo = true;\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.$safeApplyDelta(delta);\n            }\n        }\n        if (!dontSelect && this.$undoSelect) {\n            if (deltas.selectionAfter)\n                this.selection.fromJSON(deltas.selectionAfter);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, false));\n        }\n        this.$fromUndo = false;\n    };\n    EditSession.prototype.setUndoSelect = function (enable) {\n        this.$undoSelect = enable;\n    };\n    EditSession.prototype.$getUndoSelection = function (deltas, isUndo) {\n        function isInsert(delta) {\n            return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n        }\n        var range, point;\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (!delta.start)\n                continue; // skip folds\n            if (!range) {\n                if (isInsert(delta)) {\n                    range = Range.fromPoints(delta.start, delta.end);\n                }\n                else {\n                    range = Range.fromPoints(delta.start, delta.start);\n                }\n                continue;\n            }\n            if (isInsert(delta)) {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range.setStart(point);\n                }\n                point = delta.end;\n                if (range.compare(point.row, point.column) == 1) {\n                    range.setEnd(point);\n                }\n            }\n            else {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range = Range.fromPoints(delta.start, delta.start);\n                }\n            }\n        }\n        return range;\n    };\n    EditSession.prototype.replace = function (range, text) {\n        return this.doc.replace(range, text);\n    };\n    EditSession.prototype.moveText = function (fromRange, toPosition, copy) {\n        var text = this.getTextRange(fromRange);\n        var folds = this.getFoldsInRange(fromRange);\n        var toRange = Range.fromPoints(toPosition, toPosition);\n        if (!copy) {\n            this.remove(fromRange);\n            var rowDiff = fromRange.start.row - fromRange.end.row;\n            var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n            if (collDiff) {\n                if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n                    toRange.start.column += collDiff;\n                if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n                    toRange.end.column += collDiff;\n            }\n            if (rowDiff && toRange.start.row >= fromRange.end.row) {\n                toRange.start.row += rowDiff;\n                toRange.end.row += rowDiff;\n            }\n        }\n        toRange.end = this.insert(toRange.start, text);\n        if (folds.length) {\n            var oldStart = fromRange.start;\n            var newStart = toRange.start;\n            var rowDiff = newStart.row - oldStart.row;\n            var collDiff = newStart.column - oldStart.column;\n            this.addFolds(folds.map(function (x) {\n                x = x.clone();\n                if (x.start.row == oldStart.row)\n                    x.start.column += collDiff;\n                if (x.end.row == oldStart.row)\n                    x.end.column += collDiff;\n                x.start.row += rowDiff;\n                x.end.row += rowDiff;\n                return x;\n            }));\n        }\n        return toRange;\n    };\n    EditSession.prototype.indentRows = function (startRow, endRow, indentString) {\n        indentString = indentString.replace(/\\t/g, this.getTabString());\n        for (var row = startRow; row <= endRow; row++)\n            this.doc.insertInLine({ row: row, column: 0 }, indentString);\n    };\n    EditSession.prototype.outdentRows = function (range) {\n        var rowRange = range.collapseRows();\n        var deleteRange = new Range(0, 0, 0, 0);\n        var size = this.getTabSize();\n        for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n            var line = this.getLine(i);\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            for (var j = 0; j < size; ++j)\n                if (line.charAt(j) != ' ')\n                    break;\n            if (j < size && line.charAt(j) == '\\t') {\n                deleteRange.start.column = j;\n                deleteRange.end.column = j + 1;\n            }\n            else {\n                deleteRange.start.column = 0;\n                deleteRange.end.column = j;\n            }\n            this.remove(deleteRange);\n        }\n    };\n    EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) {\n        firstRow = this.getRowFoldStart(firstRow);\n        lastRow = this.getRowFoldEnd(lastRow);\n        if (dir < 0) {\n            var row = this.getRowFoldStart(firstRow + dir);\n            if (row < 0)\n                return 0;\n            var diff = row - firstRow;\n        }\n        else if (dir > 0) {\n            var row = this.getRowFoldEnd(lastRow + dir);\n            if (row > this.doc.getLength() - 1)\n                return 0;\n            var diff = row - lastRow;\n        }\n        else {\n            firstRow = this.$clipRowToDocument(firstRow);\n            lastRow = this.$clipRowToDocument(lastRow);\n            var diff = lastRow - firstRow + 1;\n        }\n        var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n        var folds = this.getFoldsInRange(range).map(function (x) {\n            x = x.clone();\n            x.start.row += diff;\n            x.end.row += diff;\n            return x;\n        });\n        var lines = dir == 0\n            ? this.doc.getLines(firstRow, lastRow)\n            : this.doc.removeFullLines(firstRow, lastRow);\n        this.doc.insertFullLines(firstRow + diff, lines);\n        folds.length && this.addFolds(folds);\n        return diff;\n    };\n    EditSession.prototype.moveLinesUp = function (firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, -1);\n    };\n    EditSession.prototype.moveLinesDown = function (firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 1);\n    };\n    EditSession.prototype.duplicateLines = function (firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 0);\n    };\n    EditSession.prototype.$clipRowToDocument = function (row) {\n        return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n    };\n    EditSession.prototype.$clipColumnToRow = function (row, column) {\n        if (column < 0)\n            return 0;\n        return Math.min(this.doc.getLine(row).length, column);\n    };\n    EditSession.prototype.$clipPositionToDocument = function (row, column) {\n        column = Math.max(0, column);\n        if (row < 0) {\n            row = 0;\n            column = 0;\n        }\n        else {\n            var len = this.doc.getLength();\n            if (row >= len) {\n                row = len - 1;\n                column = this.doc.getLine(len - 1).length;\n            }\n            else {\n                column = Math.min(this.doc.getLine(row).length, column);\n            }\n        }\n        return {\n            row: row,\n            column: column\n        };\n    };\n    EditSession.prototype.$clipRangeToDocument = function (range) {\n        if (range.start.row < 0) {\n            range.start.row = 0;\n            range.start.column = 0;\n        }\n        else {\n            range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n        }\n        var len = this.doc.getLength() - 1;\n        if (range.end.row > len) {\n            range.end.row = len;\n            range.end.column = this.doc.getLine(len).length;\n        }\n        else {\n            range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n        }\n        return range;\n    };\n    EditSession.prototype.setUseWrapMode = function (useWrapMode) {\n        if (useWrapMode != this.$useWrapMode) {\n            this.$useWrapMode = useWrapMode;\n            this.$modified = true;\n            this.$resetRowCache(0);\n            if (useWrapMode) {\n                var len = this.getLength();\n                this.$wrapData = Array(len);\n                this.$updateWrapData(0, len - 1);\n            }\n            this._signal(\"changeWrapMode\");\n        }\n    };\n    EditSession.prototype.getUseWrapMode = function () {\n        return this.$useWrapMode;\n    };\n    EditSession.prototype.setWrapLimitRange = function (min, max) {\n        if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n            this.$wrapLimitRange = { min: min, max: max };\n            this.$modified = true;\n            this.$bidiHandler.markAsDirty();\n            if (this.$useWrapMode)\n                this._signal(\"changeWrapMode\");\n        }\n    };\n    EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) {\n        var limits = this.$wrapLimitRange;\n        if (limits.max < 0)\n            limits = { min: $printMargin, max: $printMargin };\n        var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n        if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n            this.$wrapLimit = wrapLimit;\n            this.$modified = true;\n            if (this.$useWrapMode) {\n                this.$updateWrapData(0, this.getLength() - 1);\n                this.$resetRowCache(0);\n                this._signal(\"changeWrapLimit\");\n            }\n            return true;\n        }\n        return false;\n    };\n    EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) {\n        if (min)\n            wrapLimit = Math.max(min, wrapLimit);\n        if (max)\n            wrapLimit = Math.min(max, wrapLimit);\n        return wrapLimit;\n    };\n    EditSession.prototype.getWrapLimit = function () {\n        return this.$wrapLimit;\n    };\n    EditSession.prototype.setWrapLimit = function (limit) {\n        this.setWrapLimitRange(limit, limit);\n    };\n    EditSession.prototype.getWrapLimitRange = function () {\n        return {\n            min: this.$wrapLimitRange.min,\n            max: this.$wrapLimitRange.max\n        };\n    };\n    EditSession.prototype.$updateInternalDataOnChange = function (delta) {\n        var useWrapMode = this.$useWrapMode;\n        var action = delta.action;\n        var start = delta.start;\n        var end = delta.end;\n        var firstRow = start.row;\n        var lastRow = end.row;\n        var len = lastRow - firstRow;\n        var removedFolds = null;\n        this.$updating = true;\n        if (len != 0) {\n            if (action === \"remove\") {\n                this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n                var foldLines = this.$foldData;\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n                var foldLine = this.getFoldLine(end.row);\n                var idx = 0;\n                if (foldLine) {\n                    foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n                    foldLine.shiftRow(-len);\n                    var foldLineBefore = this.getFoldLine(firstRow);\n                    if (foldLineBefore && foldLineBefore !== foldLine) {\n                        foldLineBefore.merge(foldLine);\n                        foldLine = foldLineBefore;\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= end.row) {\n                        foldLine.shiftRow(-len);\n                    }\n                }\n                lastRow = firstRow;\n            }\n            else {\n                var args = Array(len);\n                args.unshift(firstRow, 0);\n                var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n                arr.splice.apply(arr, args);\n                var foldLines = this.$foldData;\n                var foldLine = this.getFoldLine(firstRow);\n                var idx = 0;\n                if (foldLine) {\n                    var cmp = foldLine.range.compareInside(start.row, start.column);\n                    if (cmp == 0) {\n                        foldLine = foldLine.split(start.row, start.column);\n                        if (foldLine) {\n                            foldLine.shiftRow(len);\n                            foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n                        }\n                    }\n                    else \n                    if (cmp == -1) {\n                        foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n                        foldLine.shiftRow(len);\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= firstRow) {\n                        foldLine.shiftRow(len);\n                    }\n                }\n            }\n        }\n        else {\n            len = Math.abs(delta.start.column - delta.end.column);\n            if (action === \"remove\") {\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n                len = -len;\n            }\n            var foldLine = this.getFoldLine(firstRow);\n            if (foldLine) {\n                foldLine.addRemoveChars(firstRow, start.column, len);\n            }\n        }\n        if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n            console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n        }\n        this.$updating = false;\n        if (useWrapMode)\n            this.$updateWrapData(firstRow, lastRow);\n        else\n            this.$updateRowLengthCache(firstRow, lastRow);\n        return removedFolds;\n    };\n    EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) {\n        this.$rowLengthCache[firstRow] = null;\n        this.$rowLengthCache[lastRow] = null;\n    };\n    EditSession.prototype.$updateWrapData = function (firstRow, lastRow) {\n        var lines = this.doc.getAllLines();\n        var tabSize = this.getTabSize();\n        var wrapData = this.$wrapData;\n        var wrapLimit = this.$wrapLimit;\n        var tokens;\n        var foldLine;\n        var row = firstRow;\n        lastRow = Math.min(lastRow, lines.length - 1);\n        while (row <= lastRow) {\n            foldLine = this.getFoldLine(row, foldLine);\n            if (!foldLine) {\n                tokens = this.$getDisplayTokens(lines[row]);\n                wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row++;\n            }\n            else {\n                tokens = [];\n                foldLine.walk(function (placeholder, row, column, lastColumn) {\n                    var walkTokens;\n                    if (placeholder != null) {\n                        walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n                        walkTokens[0] = PLACEHOLDER_START;\n                        for (var i = 1; i < walkTokens.length; i++) {\n                            walkTokens[i] = PLACEHOLDER_BODY;\n                        }\n                    }\n                    else {\n                        walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n                    }\n                    tokens = tokens.concat(walkTokens);\n                }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n                wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row = foldLine.end.row + 1;\n            }\n        }\n    };\n    EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n        if (tokens.length == 0) {\n            return [];\n        }\n        var splits = [];\n        var displayLength = tokens.length;\n        var lastSplit = 0, lastDocSplit = 0;\n        var isCode = this.$wrapAsCode;\n        var indentedSoftWrap = this.$indentedSoftWrap;\n        var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n            || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n        function getWrapIndent() {\n            var indentation = 0;\n            if (maxIndent === 0)\n                return indentation;\n            if (indentedSoftWrap) {\n                for (var i = 0; i < tokens.length; i++) {\n                    var token = tokens[i];\n                    if (token == SPACE)\n                        indentation += 1;\n                    else if (token == TAB)\n                        indentation += tabSize;\n                    else if (token == TAB_SPACE)\n                        continue;\n                    else\n                        break;\n                }\n            }\n            if (isCode && indentedSoftWrap !== false)\n                indentation += tabSize;\n            return Math.min(indentation, maxIndent);\n        }\n        function addSplit(screenPos) {\n            var len = screenPos - lastSplit;\n            for (var i = lastSplit; i < screenPos; i++) {\n                var ch = tokens[i];\n                if (ch === 12 || ch === 2)\n                    len -= 1;\n            }\n            if (!splits.length) {\n                indent = getWrapIndent();\n                splits.indent = indent;\n            }\n            lastDocSplit += len;\n            splits.push(lastDocSplit);\n            lastSplit = screenPos;\n        }\n        var indent = 0;\n        while (displayLength - lastSplit > wrapLimit - indent) {\n            var split = lastSplit + wrapLimit - indent;\n            if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n                addSplit(split);\n                continue;\n            }\n            if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n                for (split; split != lastSplit - 1; split--) {\n                    if (tokens[split] == PLACEHOLDER_START) {\n                        break;\n                    }\n                }\n                if (split > lastSplit) {\n                    addSplit(split);\n                    continue;\n                }\n                split = lastSplit + wrapLimit;\n                for (split; split < tokens.length; split++) {\n                    if (tokens[split] != PLACEHOLDER_BODY) {\n                        break;\n                    }\n                }\n                if (split == tokens.length) {\n                    break; // Breaks the while-loop.\n                }\n                addSplit(split);\n                continue;\n            }\n            var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n            while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                split--;\n            }\n            if (isCode) {\n                while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                    split--;\n                }\n                while (split > minSplit && tokens[split] == PUNCTUATION) {\n                    split--;\n                }\n            }\n            else {\n                while (split > minSplit && tokens[split] < SPACE) {\n                    split--;\n                }\n            }\n            if (split > minSplit) {\n                addSplit(++split);\n                continue;\n            }\n            split = lastSplit + wrapLimit;\n            if (tokens[split] == CHAR_EXT)\n                split--;\n            addSplit(split - indent);\n        }\n        return splits;\n    };\n    EditSession.prototype.$getDisplayTokens = function (str, offset) {\n        var arr = [];\n        var tabSize;\n        offset = offset || 0;\n        for (var i = 0; i < str.length; i++) {\n            var c = str.charCodeAt(i);\n            if (c == 9) {\n                tabSize = this.getScreenTabSize(arr.length + offset);\n                arr.push(TAB);\n                for (var n = 1; n < tabSize; n++) {\n                    arr.push(TAB_SPACE);\n                }\n            }\n            else if (c == 32) {\n                arr.push(SPACE);\n            }\n            else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n                arr.push(PUNCTUATION);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                arr.push(CHAR, CHAR_EXT);\n            }\n            else {\n                arr.push(CHAR);\n            }\n        }\n        return arr;\n    };\n    EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n        if (maxScreenColumn == 0)\n            return [0, 0];\n        if (maxScreenColumn == null)\n            maxScreenColumn = Infinity;\n        screenColumn = screenColumn || 0;\n        var c, column;\n        for (column = 0; column < str.length; column++) {\n            c = str.charCodeAt(column);\n            if (c == 9) {\n                screenColumn += this.getScreenTabSize(screenColumn);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                screenColumn += 2;\n            }\n            else {\n                screenColumn += 1;\n            }\n            if (screenColumn > maxScreenColumn) {\n                break;\n            }\n        }\n        return [screenColumn, column];\n    };\n    EditSession.prototype.getRowLength = function (row) {\n        var h = 1;\n        if (this.lineWidgets)\n            h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        if (!this.$useWrapMode || !this.$wrapData[row])\n            return h;\n        else\n            return this.$wrapData[row].length + h;\n    };\n    EditSession.prototype.getRowLineCount = function (row) {\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1;\n        }\n        else {\n            return this.$wrapData[row].length + 1;\n        }\n    };\n    EditSession.prototype.getRowWrapIndent = function (screenRow) {\n        if (this.$useWrapMode) {\n            var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n            var splits = this.$wrapData[pos.row];\n            return splits.length && splits[0] < pos.column ? splits.indent : 0;\n        }\n        else {\n            return 0;\n        }\n    };\n    EditSession.prototype.getScreenLastRowColumn = function (screenRow) {\n        var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n        return this.documentToScreenColumn(pos.row, pos.column);\n    };\n    EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.getScreenLastRowColumn(screenRow);\n    };\n    EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n    };\n    EditSession.prototype.getRowSplitData = function (row) {\n        if (!this.$useWrapMode) {\n            return undefined;\n        }\n        else {\n            return this.$wrapData[row];\n        }\n    };\n    EditSession.prototype.getScreenTabSize = function (screenColumn) {\n        return this.$tabSize - (screenColumn % this.$tabSize | 0);\n    };\n    EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).row;\n    };\n    EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).column;\n    };\n    EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n        if (screenRow < 0)\n            return { row: 0, column: 0 };\n        var line;\n        var docRow = 0;\n        var docColumn = 0;\n        var column;\n        var row = 0;\n        var rowLength = 0;\n        var rowCache = this.$screenRowCache;\n        var i = this.$getRowCacheIndex(rowCache, screenRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var docRow = this.$docRowCache[i];\n            var doCache = screenRow > rowCache[l - 1];\n        }\n        else {\n            var doCache = !l;\n        }\n        var maxRow = this.getLength() - 1;\n        var foldLine = this.getNextFoldLine(docRow);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (row <= screenRow) {\n            rowLength = this.getRowLength(docRow);\n            if (row + rowLength > screenRow || docRow >= maxRow) {\n                break;\n            }\n            else {\n                row += rowLength;\n                docRow++;\n                if (docRow > foldStart) {\n                    docRow = foldLine.end.row + 1;\n                    foldLine = this.getNextFoldLine(docRow, foldLine);\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n            }\n            if (doCache) {\n                this.$docRowCache.push(docRow);\n                this.$screenRowCache.push(row);\n            }\n        }\n        if (foldLine && foldLine.start.row <= docRow) {\n            line = this.getFoldDisplayLine(foldLine);\n            docRow = foldLine.start.row;\n        }\n        else if (row + rowLength <= screenRow || docRow > maxRow) {\n            return {\n                row: maxRow,\n                column: this.getLine(maxRow).length\n            };\n        }\n        else {\n            line = this.getLine(docRow);\n            foldLine = null;\n        }\n        var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n        if (this.$useWrapMode) {\n            var splits = this.$wrapData[docRow];\n            if (splits) {\n                column = splits[splitIndex];\n                if (splitIndex > 0 && splits.length) {\n                    wrapIndent = splits.indent;\n                    docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n                    line = line.substring(docColumn);\n                }\n            }\n        }\n        if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n            screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n        docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n        if (this.$useWrapMode && docColumn >= column)\n            docColumn = column - 1;\n        if (foldLine)\n            return foldLine.idxToPosition(docColumn);\n        return { row: docRow, column: docColumn };\n    };\n    EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) {\n        if (typeof docColumn === \"undefined\")\n            var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column);\n        else\n            pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn);\n        docRow = pos.row;\n        docColumn = pos.column;\n        var screenRow = 0;\n        var foldStartRow = null;\n        var fold = null;\n        fold = this.getFoldAt(docRow, docColumn, 1);\n        if (fold) {\n            docRow = fold.start.row;\n            docColumn = fold.start.column;\n        }\n        var rowEnd, row = 0;\n        var rowCache = this.$docRowCache;\n        var i = this.$getRowCacheIndex(rowCache, docRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var screenRow = this.$screenRowCache[i];\n            var doCache = docRow > rowCache[l - 1];\n        }\n        else {\n            var doCache = !l;\n        }\n        var foldLine = this.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (row < docRow) {\n            if (row >= foldStart) {\n                rowEnd = foldLine.end.row + 1;\n                if (rowEnd > docRow)\n                    break;\n                foldLine = this.getNextFoldLine(rowEnd, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            else {\n                rowEnd = row + 1;\n            }\n            screenRow += this.getRowLength(row);\n            row = rowEnd;\n            if (doCache) {\n                this.$docRowCache.push(row);\n                this.$screenRowCache.push(screenRow);\n            }\n        }\n        var textLine = \"\";\n        if (foldLine && row >= foldStart) {\n            textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n            foldStartRow = foldLine.start.row;\n        }\n        else {\n            textLine = this.getLine(docRow).substring(0, docColumn);\n            foldStartRow = docRow;\n        }\n        var wrapIndent = 0;\n        if (this.$useWrapMode) {\n            var wrapRow = this.$wrapData[foldStartRow];\n            if (wrapRow) {\n                var screenRowOffset = 0;\n                while (textLine.length >= wrapRow[screenRowOffset]) {\n                    screenRow++;\n                    screenRowOffset++;\n                }\n                textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n                wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n            }\n        }\n        if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n            screenRow += this.lineWidgets[row].rowsAbove;\n        return {\n            row: screenRow,\n            column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n        };\n    };\n    EditSession.prototype.documentToScreenColumn = function (row, docColumn) {\n        return this.documentToScreenPosition(row, docColumn).column;\n    };\n    EditSession.prototype.documentToScreenRow = function (docRow, docColumn) {\n        return this.documentToScreenPosition(docRow, docColumn).row;\n    };\n    EditSession.prototype.getScreenLength = function () {\n        var screenRows = 0;\n        var fold = null;\n        if (!this.$useWrapMode) {\n            screenRows = this.getLength();\n            var foldData = this.$foldData;\n            for (var i = 0; i < foldData.length; i++) {\n                fold = foldData[i];\n                screenRows -= fold.end.row - fold.start.row;\n            }\n        }\n        else {\n            var lastRow = this.$wrapData.length;\n            var row = 0, i = 0;\n            var fold = this.$foldData[i++];\n            var foldStart = fold ? fold.start.row : Infinity;\n            while (row < lastRow) {\n                var splits = this.$wrapData[row];\n                screenRows += splits ? splits.length + 1 : 1;\n                row++;\n                if (row > foldStart) {\n                    row = fold.end.row + 1;\n                    fold = this.$foldData[i++];\n                    foldStart = fold ? fold.start.row : Infinity;\n                }\n            }\n        }\n        if (this.lineWidgets)\n            screenRows += this.$getWidgetScreenLength();\n        return screenRows;\n    };\n    EditSession.prototype.$setFontMetrics = function (fm) {\n        if (!this.$enableVarChar)\n            return;\n        this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n            if (maxScreenColumn === 0)\n                return [0, 0];\n            if (!maxScreenColumn)\n                maxScreenColumn = Infinity;\n            screenColumn = screenColumn || 0;\n            var c, column;\n            for (column = 0; column < str.length; column++) {\n                c = str.charAt(column);\n                if (c === \"\\t\") {\n                    screenColumn += this.getScreenTabSize(screenColumn);\n                }\n                else {\n                    screenColumn += fm.getCharacterWidth(c);\n                }\n                if (screenColumn > maxScreenColumn) {\n                    break;\n                }\n            }\n            return [screenColumn, column];\n        };\n    };\n    EditSession.prototype.getPrecedingCharacter = function () {\n        var pos = this.selection.getCursor();\n        if (pos.column === 0) {\n            return pos.row === 0 ? \"\" : this.doc.getNewLineCharacter();\n        }\n        var currentLine = this.getLine(pos.row);\n        return currentLine[pos.column - 1];\n    };\n    EditSession.prototype.destroy = function () {\n        if (!this.destroyed) {\n            this.bgTokenizer.setDocument(null);\n            this.bgTokenizer.cleanup();\n            this.destroyed = true;\n        }\n        this.endOperation();\n        this.$stopWorker();\n        this.removeAllListeners();\n        if (this.doc) {\n            this.doc.off(\"change\", this.$onChange);\n        }\n        if (this.selection) {\n            this.selection.off(\"changeCursor\", this.$onSelectionChange);\n            this.selection.off(\"changeSelection\", this.$onSelectionChange);\n        }\n        this.selection.detach();\n    };\n    return EditSession;\n}());\nEditSession.$uid = 0;\nEditSession.prototype.$modes = config.$modes;\nEditSession.prototype.getValue = EditSession.prototype.toString;\nEditSession.prototype.$defaultUndoManager = {\n    undo: function () { },\n    redo: function () { },\n    hasUndo: function () { },\n    hasRedo: function () { },\n    reset: function () { },\n    add: function () { },\n    addSelection: function () { },\n    startNewGroup: function () { },\n    addSession: function () { }\n};\nEditSession.prototype.$overwrite = false;\nEditSession.prototype.$mode = null;\nEditSession.prototype.$modeId = null;\nEditSession.prototype.$scrollTop = 0;\nEditSession.prototype.$scrollLeft = 0;\nEditSession.prototype.$wrapLimit = 80;\nEditSession.prototype.$useWrapMode = false;\nEditSession.prototype.$wrapLimitRange = {\n    min: null,\n    max: null\n};\nEditSession.prototype.lineWidgets = null;\nEditSession.prototype.isFullWidth = isFullWidth;\noop.implement(EditSession.prototype, EventEmitter);\nvar CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\nfunction isFullWidth(c) {\n    if (c < 0x1100)\n        return false;\n    return c >= 0x1100 && c <= 0x115F ||\n        c >= 0x11A3 && c <= 0x11A7 ||\n        c >= 0x11FA && c <= 0x11FF ||\n        c >= 0x2329 && c <= 0x232A ||\n        c >= 0x2E80 && c <= 0x2E99 ||\n        c >= 0x2E9B && c <= 0x2EF3 ||\n        c >= 0x2F00 && c <= 0x2FD5 ||\n        c >= 0x2FF0 && c <= 0x2FFB ||\n        c >= 0x3000 && c <= 0x303E ||\n        c >= 0x3041 && c <= 0x3096 ||\n        c >= 0x3099 && c <= 0x30FF ||\n        c >= 0x3105 && c <= 0x312D ||\n        c >= 0x3131 && c <= 0x318E ||\n        c >= 0x3190 && c <= 0x31BA ||\n        c >= 0x31C0 && c <= 0x31E3 ||\n        c >= 0x31F0 && c <= 0x321E ||\n        c >= 0x3220 && c <= 0x3247 ||\n        c >= 0x3250 && c <= 0x32FE ||\n        c >= 0x3300 && c <= 0x4DBF ||\n        c >= 0x4E00 && c <= 0xA48C ||\n        c >= 0xA490 && c <= 0xA4C6 ||\n        c >= 0xA960 && c <= 0xA97C ||\n        c >= 0xAC00 && c <= 0xD7A3 ||\n        c >= 0xD7B0 && c <= 0xD7C6 ||\n        c >= 0xD7CB && c <= 0xD7FB ||\n        c >= 0xF900 && c <= 0xFAFF ||\n        c >= 0xFE10 && c <= 0xFE19 ||\n        c >= 0xFE30 && c <= 0xFE52 ||\n        c >= 0xFE54 && c <= 0xFE66 ||\n        c >= 0xFE68 && c <= 0xFE6B ||\n        c >= 0xFF01 && c <= 0xFF60 ||\n        c >= 0xFFE0 && c <= 0xFFE6;\n}\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n    wrap: {\n        set: function (value) {\n            if (!value || value == \"off\")\n                value = false;\n            else if (value == \"free\")\n                value = true;\n            else if (value == \"printMargin\")\n                value = -1;\n            else if (typeof value == \"string\")\n                value = parseInt(value, 10) || false;\n            if (this.$wrap == value)\n                return;\n            this.$wrap = value;\n            if (!value) {\n                this.setUseWrapMode(false);\n            }\n            else {\n                var col = typeof value == \"number\" ? value : null;\n                this.setWrapLimitRange(col, col);\n                this.setUseWrapMode(true);\n            }\n        },\n        get: function () {\n            if (this.getUseWrapMode()) {\n                if (this.$wrap == -1)\n                    return \"printMargin\";\n                if (!this.getWrapLimitRange().min)\n                    return \"free\";\n                return this.$wrap;\n            }\n            return \"off\";\n        },\n        handlesSet: true\n    },\n    wrapMethod: {\n        set: function (val) {\n            val = val == \"auto\"\n                ? this.$mode.type != \"text\"\n                : val != \"text\";\n            if (val != this.$wrapAsCode) {\n                this.$wrapAsCode = val;\n                if (this.$useWrapMode) {\n                    this.$useWrapMode = false;\n                    this.setUseWrapMode(true);\n                }\n            }\n        },\n        initialValue: \"auto\"\n    },\n    indentedSoftWrap: {\n        set: function () {\n            if (this.$useWrapMode) {\n                this.$useWrapMode = false;\n                this.setUseWrapMode(true);\n            }\n        },\n        initialValue: true\n    },\n    firstLineNumber: {\n        set: function () { this._signal(\"changeBreakpoint\"); },\n        initialValue: 1\n    },\n    useWorker: {\n        set: function (useWorker) {\n            this.$useWorker = useWorker;\n            this.$stopWorker();\n            if (useWorker)\n                this.$startWorker();\n        },\n        initialValue: true\n    },\n    useSoftTabs: { initialValue: true },\n    tabSize: {\n        set: function (tabSize) {\n            tabSize = parseInt(tabSize);\n            if (tabSize > 0 && this.$tabSize !== tabSize) {\n                this.$modified = true;\n                this.$rowLengthCache = [];\n                this.$tabSize = tabSize;\n                this._signal(\"changeTabSize\");\n            }\n        },\n        initialValue: 4,\n        handlesSet: true\n    },\n    navigateWithinSoftTabs: { initialValue: false },\n    foldStyle: {\n        set: function (val) { this.setFoldStyle(val); },\n        handlesSet: true\n    },\n    overwrite: {\n        set: function (val) { this._signal(\"changeOverwrite\"); },\n        initialValue: false\n    },\n    newLineMode: {\n        set: function (val) { this.doc.setNewLineMode(val); },\n        get: function () { return this.doc.getNewLineMode(); },\n        handlesSet: true\n    },\n    mode: {\n        set: function (val) { this.setMode(val); },\n        get: function () { return this.$modeId; },\n        handlesSet: true\n    }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = /** @class */ (function () {\n    function Search() {\n        this.$options = {};\n    }\n    Search.prototype.set = function (options) {\n        oop.mixin(this.$options, options);\n        return this;\n    };\n    Search.prototype.getOptions = function () {\n        return lang.copyObject(this.$options);\n    };\n    Search.prototype.setOptions = function (options) {\n        this.$options = options;\n    };\n    Search.prototype.find = function (session) {\n        var options = this.$options;\n        var iterator = this.$matchIterator(session, options);\n        if (!iterator)\n            return false;\n        var firstRange = null;\n        iterator.forEach(function (sr, sc, er, ec) {\n            firstRange = new Range(sr, sc, er, ec);\n            if (sc == ec && options.start && /**@type{Range}*/ (options.start).start\n                && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) {\n                firstRange = null;\n                return false;\n            }\n            return true;\n        });\n        return firstRange;\n    };\n    Search.prototype.findAll = function (session) {\n        var options = this.$options;\n        if (!options.needle)\n            return [];\n        this.$assembleRegExp(options);\n        var range = options.range;\n        var lines = range\n            ? session.getLines(range.start.row, range.end.row)\n            : session.doc.getAllLines();\n        var ranges = [];\n        var re = options.re;\n        if (options.$isMultiLine) {\n            var len = re.length;\n            var maxRow = lines.length - len;\n            var prevRange;\n            outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n                for (var j = 0; j < len; j++)\n                    if (lines[row + j].search(re[j]) == -1)\n                        continue outer;\n                var startLine = lines[row];\n                var line = lines[row + len - 1];\n                var startIndex = startLine.length - startLine.match(re[0])[0].length;\n                var endIndex = line.match(re[len - 1])[0].length;\n                if (prevRange && prevRange.end.row === row &&\n                    prevRange.end.column > startIndex) {\n                    continue;\n                }\n                ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n                if (len > 2)\n                    row = row + len - 2;\n            }\n        }\n        else {\n            for (var matches, i = 0; i < lines.length; i++) {\n                if (this.$isMultilineSearch(options)) {\n                    var lng = lines.length - 1;\n                    matches = this.$multiLineForward(session, re, i, lng);\n                    if (matches) {\n                        var end_row = matches.endRow <= lng ? matches.endRow - 1 : lng;\n                        if (end_row > i)\n                            i = end_row;\n                        ranges.push(new Range(matches.startRow, matches.startCol, matches.endRow, matches.endCol));\n                    }\n                }\n                else {\n                    matches = lang.getMatchOffsets(lines[i], re);\n                    for (var j = 0; j < matches.length; j++) {\n                        var match = matches[j];\n                        ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n                    }\n                }\n            }\n        }\n        if (range) {\n            var startColumn = range.start.column;\n            var endColumn = range.end.column;\n            var i = 0, j = ranges.length - 1;\n            while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n                i++;\n            var endRow = range.end.row - range.start.row;\n            while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n                j--;\n            ranges = ranges.slice(i, j + 1);\n            for (i = 0, j = ranges.length; i < j; i++) {\n                ranges[i].start.row += range.start.row;\n                ranges[i].end.row += range.start.row;\n            }\n        }\n        return ranges;\n    };\n    Search.prototype.parseReplaceString = function (replaceString) {\n        var CharCode = {\n            DollarSign: 36,\n            Ampersand: 38,\n            Digit0: 48,\n            Digit1: 49,\n            Digit9: 57,\n            Backslash: 92,\n            n: 110,\n            t: 116\n        };\n        var replacement = '';\n        for (var i = 0, len = replaceString.length; i < len; i++) {\n            var chCode = replaceString.charCodeAt(i);\n            if (chCode === CharCode.Backslash) {\n                i++;\n                if (i >= len) {\n                    replacement += \"\\\\\";\n                    break;\n                }\n                var nextChCode = replaceString.charCodeAt(i);\n                switch (nextChCode) {\n                    case CharCode.Backslash:\n                        replacement += \"\\\\\";\n                        break;\n                    case CharCode.n:\n                        replacement += \"\\n\";\n                        break;\n                    case CharCode.t:\n                        replacement += \"\\t\";\n                        break;\n                }\n                continue;\n            }\n            if (chCode === CharCode.DollarSign) {\n                i++;\n                if (i >= len) {\n                    replacement += \"$\";\n                    break;\n                }\n                var nextChCode_1 = replaceString.charCodeAt(i);\n                if (nextChCode_1 === CharCode.DollarSign) {\n                    replacement += \"$$\";\n                    continue;\n                }\n                if (nextChCode_1 === CharCode.Digit0 || nextChCode_1 === CharCode.Ampersand) {\n                    replacement += \"$&\";\n                    continue;\n                }\n                if (CharCode.Digit1 <= nextChCode_1 && nextChCode_1 <= CharCode.Digit9) {\n                    replacement += \"$\" + replaceString[i];\n                    continue;\n                }\n            }\n            replacement += replaceString[i];\n        }\n        return replacement || replaceString;\n    };\n    Search.prototype.replace = function (input, replacement) {\n        var options = this.$options;\n        var re = this.$assembleRegExp(options);\n        if (options.$isMultiLine)\n            return replacement;\n        if (!re)\n            return;\n        var mtSearch = this.$isMultilineSearch(options);\n        if (mtSearch)\n            input = input.replace(/\\r\\n|\\r|\\n/g, \"\\n\");\n        var match = re.exec(input);\n        if (!match || (!mtSearch && match[0].length != input.length))\n            return null;\n        replacement = options.regExp\n            ? this.parseReplaceString(replacement)\n            : replacement.replace(/\\$/g, \"$$$$\");\n        replacement = input.replace(re, replacement);\n        if (options.preserveCase) {\n            replacement = replacement.split(\"\");\n            for (var i = Math.min(input.length, input.length); i--;) {\n                var ch = input[i];\n                if (ch && ch.toLowerCase() != ch)\n                    replacement[i] = replacement[i].toUpperCase();\n                else\n                    replacement[i] = replacement[i].toLowerCase();\n            }\n            replacement = replacement.join(\"\");\n        }\n        return replacement;\n    };\n    Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) {\n        if (options.needle instanceof RegExp)\n            return options.re = options.needle;\n        var needle = options.needle;\n        if (!options.needle)\n            return options.re = false;\n        if (!options.regExp)\n            needle = lang.escapeRegExp(needle);\n        var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n        try {\n            new RegExp(needle, \"u\");\n            options.$supportsUnicodeFlag = true;\n            modifier += \"u\";\n        }\n        catch (e) {\n            options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\\{2}/gu\n        }\n        if (options.wholeWord)\n            needle = addWordBoundary(needle, options);\n        options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n        if (options.$isMultiLine)\n            return options.re = this.$assembleMultilineRegExp(needle, modifier);\n        try {\n            var re = new RegExp(needle, modifier);\n        }\n        catch (e) {\n            re = false;\n        }\n        return options.re = re;\n    };\n    Search.prototype.$assembleMultilineRegExp = function (needle, modifier) {\n        var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n        var re = [];\n        for (var i = 0; i < parts.length; i++)\n            try {\n                re.push(new RegExp(parts[i], modifier));\n            }\n            catch (e) {\n                return false;\n            }\n        return re;\n    };\n    Search.prototype.$isMultilineSearch = function (options) {\n        return options.re && /\\\\r\\\\n|\\\\r|\\\\n/.test(options.re.source) && options.regExp && !options.$isMultiLine;\n    };\n    Search.prototype.$multiLineForward = function (session, re, start, last) {\n        var line, chunk = chunkEnd(session, start);\n        for (var row = start; row <= last;) {\n            for (var i = 0; i < chunk; i++) {\n                if (row > last)\n                    break;\n                var next = session.getLine(row++);\n                line = line == null ? next : line + \"\\n\" + next;\n            }\n            var match = re.exec(line);\n            re.lastIndex = 0;\n            if (match) {\n                var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n                var matchedText = match[0].split(\"\\n\");\n                var startRow = start + beforeMatch.length - 1;\n                var startCol = beforeMatch[beforeMatch.length - 1].length;\n                var endRow = startRow + matchedText.length - 1;\n                var endCol = matchedText.length == 1\n                    ? startCol + matchedText[0].length\n                    : matchedText[matchedText.length - 1].length;\n                return {\n                    startRow: startRow,\n                    startCol: startCol,\n                    endRow: endRow,\n                    endCol: endCol\n                };\n            }\n        }\n        return null;\n    };\n    Search.prototype.$multiLineBackward = function (session, re, endIndex, start, first) {\n        var line, chunk = chunkEnd(session, start), endMargin = session.getLine(start).length - endIndex;\n        for (var row = start; row >= first;) {\n            for (var i = 0; i < chunk && row >= first; i++) {\n                var next = session.getLine(row--);\n                line = line == null ? next : next + \"\\n\" + line;\n            }\n            var match = multiLineBackwardMatch(line, re, endMargin);\n            if (match) {\n                var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n                var matchedText = match[0].split(\"\\n\");\n                var startRow = row + beforeMatch.length;\n                var startCol = beforeMatch[beforeMatch.length - 1].length;\n                var endRow = startRow + matchedText.length - 1;\n                var endCol = matchedText.length == 1\n                    ? startCol + matchedText[0].length\n                    : matchedText[matchedText.length - 1].length;\n                return {\n                    startRow: startRow,\n                    startCol: startCol,\n                    endRow: endRow,\n                    endCol: endCol\n                };\n            }\n        }\n        return null;\n    };\n    Search.prototype.$matchIterator = function (session, options) {\n        var re = this.$assembleRegExp(options);\n        if (!re)\n            return false;\n        var mtSearch = this.$isMultilineSearch(options);\n        var mtForward = this.$multiLineForward;\n        var mtBackward = this.$multiLineBackward;\n        var backwards = options.backwards == true;\n        var skipCurrent = options.skipCurrent != false;\n        var supportsUnicodeFlag = re.unicode;\n        var range = options.range;\n        var start = options.start;\n        if (!start)\n            start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n        if (start.start)\n            start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n        var firstRow = range ? range.start.row : 0;\n        var lastRow = range ? range.end.row : session.getLength() - 1;\n        if (backwards) {\n            var forEach = function (callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row--; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n            };\n        }\n        else {\n            var forEach = function (callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row = row + 1; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n            };\n        }\n        if (options.$isMultiLine) {\n            var len = re.length;\n            var forEachInLine = function (row, offset, callback) {\n                var startRow = backwards ? row - len + 1 : row;\n                if (startRow < 0 || startRow + len > session.getLength())\n                    return;\n                var line = session.getLine(startRow);\n                var startIndex = line.search(re[0]);\n                if (!backwards && startIndex < offset || startIndex === -1)\n                    return;\n                for (var i = 1; i < len; i++) {\n                    line = session.getLine(startRow + i);\n                    if (line.search(re[i]) == -1)\n                        return;\n                }\n                var endIndex = line.match(re[len - 1])[0].length;\n                if (backwards && endIndex > offset)\n                    return;\n                if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n                    return true;\n            };\n        }\n        else if (backwards) {\n            var forEachInLine = function (row, endIndex, callback) {\n                if (mtSearch) {\n                    var pos = mtBackward(session, re, endIndex, row, firstRow);\n                    if (!pos)\n                        return false;\n                    if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n                        return true;\n                }\n                else {\n                    var line = session.getLine(row);\n                    var matches = [];\n                    var m, last = 0;\n                    re.lastIndex = 0;\n                    while ((m = re.exec(line))) {\n                        var length = m[0].length;\n                        last = m.index;\n                        if (!length) {\n                            if (last >= line.length)\n                                break;\n                            re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n                        }\n                        if (m.index + length > endIndex)\n                            break;\n                        matches.push(m.index, length);\n                    }\n                    for (var i = matches.length - 1; i >= 0; i -= 2) {\n                        var column = matches[i - 1];\n                        var length = matches[i];\n                        if (callback(row, column, row, column + length))\n                            return true;\n                    }\n                }\n            };\n        }\n        else {\n            var forEachInLine = function (row, startIndex, callback) {\n                re.lastIndex = startIndex;\n                if (mtSearch) {\n                    var pos = mtForward(session, re, row, lastRow);\n                    if (pos) {\n                        var end_row = pos.endRow <= lastRow ? pos.endRow - 1 : lastRow;\n                        if (end_row > row)\n                            row = end_row;\n                    }\n                    if (!pos)\n                        return false;\n                    if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n                        return true;\n                }\n                else {\n                    var line = session.getLine(row);\n                    var last;\n                    var m;\n                    while ((m = re.exec(line))) {\n                        var length = m[0].length;\n                        last = m.index;\n                        if (callback(row, last, row, last + length))\n                            return true;\n                        if (!length) {\n                            re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n                            if (last >= line.length)\n                                return false;\n                        }\n                    }\n                }\n            };\n        }\n        return { forEach: forEach };\n    };\n    return Search;\n}());\nfunction addWordBoundary(needle, options) {\n    var supportsLookbehind = lang.supportsLookbehind();\n    function wordBoundary(c, firstChar) {\n        if (firstChar === void 0) { firstChar = true; }\n        var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\");\n        if (wordRegExp.test(c) || options.regExp) {\n            if (supportsLookbehind && options.$supportsUnicodeFlag) {\n                if (firstChar)\n                    return \"(?<=^|[^\\\\p{L}\\\\p{N}_])\";\n                return \"(?=[^\\\\p{L}\\\\p{N}_]|$)\";\n            }\n            return \"\\\\b\";\n        }\n        return \"\";\n    }\n    var needleArray = Array.from(needle);\n    var firstChar = needleArray[0];\n    var lastChar = needleArray[needleArray.length - 1];\n    return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false);\n}\nfunction multiLineBackwardMatch(line, re, endMargin) {\n    var match = null;\n    var from = 0;\n    while (from <= line.length) {\n        re.lastIndex = from;\n        var newMatch = re.exec(line);\n        if (!newMatch)\n            break;\n        var end = newMatch.index + newMatch[0].length;\n        if (end > line.length - endMargin)\n            break;\n        if (!match || end > match.index + match[0].length)\n            match = newMatch;\n        from = newMatch.index + 1;\n    }\n    return match;\n}\nfunction chunkEnd(session, start) {\n    var base = 5000, startPosition = { row: start, column: 0 }, startIndex = session.doc.positionToIndex(startPosition), targetIndex = startIndex + base, targetPosition = session.doc.indexToPosition(targetIndex), targetLine = targetPosition.row;\n    return targetLine + 1;\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})(); var keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nvar MultiHashHandler = /** @class */ (function () {\n    function MultiHashHandler(config, platform) {\n        this.$init(config, platform, false);\n    }\n    MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) {\n        this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n        this.commands = {};\n        this.commandKeyBinding = {};\n        this.addCommands(config);\n        this.$singleCommand = $singleCommand;\n    };\n    MultiHashHandler.prototype.addCommand = function (command) {\n        if (this.commands[command.name])\n            this.removeCommand(command);\n        this.commands[command.name] = command;\n        if (command.bindKey)\n            this._buildKeyHash(command);\n    };\n    MultiHashHandler.prototype.removeCommand = function (command, keepCommand) {\n        var name = command && (typeof command === 'string' ? command : command.name);\n        command = this.commands[name];\n        if (!keepCommand)\n            delete this.commands[name];\n        var ckb = this.commandKeyBinding;\n        for (var keyId in ckb) {\n            var cmdGroup = ckb[keyId];\n            if (cmdGroup == command) {\n                delete ckb[keyId];\n            }\n            else if (Array.isArray(cmdGroup)) {\n                var i = cmdGroup.indexOf(command);\n                if (i != -1) {\n                    cmdGroup.splice(i, 1);\n                    if (cmdGroup.length == 1)\n                        ckb[keyId] = cmdGroup[0];\n                }\n            }\n        }\n    };\n    MultiHashHandler.prototype.bindKey = function (key, command, position) {\n        if (typeof key == \"object\" && key) {\n            if (position == undefined)\n                position = key.position;\n            key = key[this.platform];\n        }\n        if (!key)\n            return;\n        if (typeof command == \"function\")\n            return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split(\"|\").forEach(function (keyPart) {\n            var chain = \"\";\n            if (keyPart.indexOf(\" \") != -1) {\n                var parts = keyPart.split(/\\s+/);\n                keyPart = parts.pop();\n                parts.forEach(function (keyPart) {\n                    var binding = this.parseKeys(keyPart);\n                    var id = KEY_MODS[binding.hashId] + binding.key;\n                    chain += (chain ? \" \" : \"\") + id;\n                    this._addCommandToBinding(chain, \"chainKeys\");\n                }, this);\n                chain += \" \";\n            }\n            var binding = this.parseKeys(keyPart);\n            var id = KEY_MODS[binding.hashId] + binding.key;\n            this._addCommandToBinding(chain + id, command, position);\n        }, this);\n    };\n    MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) {\n        var ckb = this.commandKeyBinding, i;\n        if (!command) {\n            delete ckb[keyId];\n        }\n        else if (!ckb[keyId] || this.$singleCommand) {\n            ckb[keyId] = command;\n        }\n        else {\n            if (!Array.isArray(ckb[keyId])) {\n                ckb[keyId] = [ckb[keyId]];\n            }\n            else if ((i = ckb[keyId].indexOf(command)) != -1) {\n                ckb[keyId].splice(i, 1);\n            }\n            if (typeof position != \"number\") {\n                position = getPosition(command);\n            }\n            var commands = ckb[keyId];\n            for (i = 0; i < commands.length; i++) {\n                var other = commands[i];\n                var otherPos = getPosition(other);\n                if (otherPos > position)\n                    break;\n            }\n            commands.splice(i, 0, command);\n        }\n    };\n    MultiHashHandler.prototype.addCommands = function (commands) {\n        commands && Object.keys(commands).forEach(function (name) {\n            var command = commands[name];\n            if (!command)\n                return;\n            if (typeof command === \"string\")\n                return this.bindKey(command, name);\n            if (typeof command === \"function\")\n                command = { exec: command };\n            if (typeof command !== \"object\")\n                return;\n            if (!command.name)\n                command.name = name;\n            this.addCommand(command);\n        }, this);\n    };\n    MultiHashHandler.prototype.removeCommands = function (commands) {\n        Object.keys(commands).forEach(function (name) {\n            this.removeCommand(commands[name]);\n        }, this);\n    };\n    MultiHashHandler.prototype.bindKeys = function (keyList) {\n        Object.keys(keyList).forEach(function (key) {\n            this.bindKey(key, keyList[key]);\n        }, this);\n    };\n    MultiHashHandler.prototype._buildKeyHash = function (command) {\n        this.bindKey(command.bindKey, command);\n    };\n    MultiHashHandler.prototype.parseKeys = function (keys) {\n        var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n        var key = parts.pop();\n        var keyCode = keyUtil[key];\n        if (keyUtil.FUNCTION_KEYS[keyCode])\n            key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n        else if (!parts.length)\n            return { key: key, hashId: -1 };\n        else if (parts.length == 1 && parts[0] == \"shift\")\n            return { key: key.toUpperCase(), hashId: -1 };\n        var hashId = 0;\n        for (var i = parts.length; i--;) {\n            var modifier = keyUtil.KEY_MODS[parts[i]];\n            if (modifier == null) {\n                if (typeof console != \"undefined\")\n                    console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n                return false;\n            }\n            hashId |= modifier;\n        }\n        return { key: key, hashId: hashId };\n    };\n    MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) {\n        var key = KEY_MODS[hashId] + keyString;\n        return this.commandKeyBinding[key];\n    };\n    MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) {\n        if (keyCode < 0)\n            return;\n        var key = KEY_MODS[hashId] + keyString;\n        var command = this.commandKeyBinding[key];\n        if (data.$keyChain) {\n            data.$keyChain += \" \" + key;\n            command = this.commandKeyBinding[data.$keyChain] || command;\n        }\n        if (command) {\n            if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n                data.$keyChain = data.$keyChain || key;\n                return { command: \"null\" };\n            }\n        }\n        if (data.$keyChain) {\n            if ((!hashId || hashId == 4) && keyString.length == 1)\n                data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n            else if (hashId == -1 || keyCode > 0)\n                data.$keyChain = \"\"; // reset keyChain\n        }\n        return { command: command };\n    };\n    MultiHashHandler.prototype.getStatusText = function (editor, data) {\n        return data.$keyChain || \"\";\n    };\n    return MultiHashHandler;\n}());\nfunction getPosition(command) {\n    return typeof command == \"object\" && command.bindKey\n        && command.bindKey.position\n        || (command.isDefault ? -100 : 0);\n}\nvar HashHandler = /** @class */ (function (_super) {\n    __extends(HashHandler, _super);\n    function HashHandler(config, platform) {\n        var _this = _super.call(this, config, platform) || this;\n        _this.$singleCommand = true;\n        return _this;\n    }\n    return HashHandler;\n}(MultiHashHandler));\nHashHandler.call = function (thisArg, config, platform) {\n    MultiHashHandler.prototype.$init.call(thisArg, config, platform, true);\n};\nMultiHashHandler.call = function (thisArg, config, platform) {\n    MultiHashHandler.prototype.$init.call(thisArg, config, platform, false);\n};\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = /** @class */ (function (_super) {\n    __extends(CommandManager, _super);\n    function CommandManager(platform, commands) {\n        var _this = _super.call(this, commands, platform) || this;\n        _this.byName = _this.commands;\n        _this.setDefaultHandler(\"exec\", function (e) {\n            if (!e.args) {\n                return e.command.exec(e.editor, {}, e.event, true);\n            }\n            return e.command.exec(e.editor, e.args, e.event, false);\n        });\n        return _this;\n    }\n    CommandManager.prototype.exec = function (command, editor, args) {\n        if (Array.isArray(command)) {\n            for (var i = command.length; i--;) {\n                if (this.exec(command[i], editor, args))\n                    return true;\n            }\n            return false;\n        }\n        if (typeof command === \"string\")\n            command = this.commands[command];\n        var e = { editor: editor, command: command, args: args };\n        if (!this.canExecute(command, editor)) {\n            this._signal(\"commandUnavailable\", e);\n            return false;\n        }\n        e.returnValue = this._emit(\"exec\", e);\n        this._signal(\"afterExec\", e);\n        return e.returnValue === false ? false : true;\n    };\n    CommandManager.prototype.canExecute = function (command, editor) {\n        if (typeof command === \"string\")\n            command = this.commands[command];\n        if (!command)\n            return false;\n        if (editor && editor.$readOnly && !command.readOnly)\n            return false;\n        if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n            return false;\n        return true;\n    };\n    CommandManager.prototype.toggleRecording = function (editor) {\n        if (this.$inReplay)\n            return;\n        editor && editor._emit(\"changeStatus\");\n        if (this.recording) {\n            this.macro.pop();\n            this.off(\"exec\", this.$addCommandToMacro);\n            if (!this.macro.length)\n                this.macro = this.oldMacro;\n            return this.recording = false;\n        }\n        if (!this.$addCommandToMacro) {\n            this.$addCommandToMacro = function (e) {\n                this.macro.push([e.command, e.args]);\n            }.bind(this);\n        }\n        this.oldMacro = this.macro;\n        this.macro = [];\n        this.on(\"exec\", this.$addCommandToMacro);\n        return this.recording = true;\n    };\n    CommandManager.prototype.replay = function (editor) {\n        if (this.$inReplay || !this.macro)\n            return;\n        if (this.recording)\n            return this.toggleRecording(editor);\n        try {\n            this.$inReplay = true;\n            this.macro.forEach(function (x) {\n                if (typeof x == \"string\")\n                    this.exec(x, editor);\n                else\n                    this.exec(x[0], editor, x[1]);\n            }, this);\n        }\n        finally {\n            this.$inReplay = false;\n        }\n    };\n    CommandManager.prototype.trimMacro = function (m) {\n        return m.map(function (x) {\n            if (typeof x[0] != \"string\")\n                x[0] = x[0].name;\n            if (!x[1])\n                x = x[0];\n            return x;\n        });\n    };\n    return CommandManager;\n}(MultiHashHandler));\noop.implement(CommandManager.prototype, EventEmitter);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n    return { win: win, mac: mac };\n}\nexports.commands = [{\n        name: \"showSettingsMenu\",\n        description: \"Show settings menu\",\n        bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/settings_menu\", function (module) {\n                module.init(editor);\n                editor.showSettingsMenu();\n            });\n        },\n        readOnly: true\n    }, {\n        name: \"goToNextError\",\n        description: \"Go to next error\",\n        bindKey: bindKey(\"Alt-E\", \"F4\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/error_marker\", function (module) {\n                module.showErrorMarker(editor, 1);\n            });\n        },\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"goToPreviousError\",\n        description: \"Go to previous error\",\n        bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/error_marker\", function (module) {\n                module.showErrorMarker(editor, -1);\n            });\n        },\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"selectall\",\n        description: \"Select all\",\n        bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n        exec: function (editor) { editor.selectAll(); },\n        readOnly: true\n    }, {\n        name: \"centerselection\",\n        description: \"Center selection\",\n        bindKey: bindKey(null, \"Ctrl-L\"),\n        exec: function (editor) { editor.centerSelection(); },\n        readOnly: true\n    }, {\n        name: \"gotoline\",\n        description: \"Go to line...\",\n        bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n        exec: function (editor, line) {\n            if (typeof line === \"number\" && !isNaN(line))\n                editor.gotoLine(line);\n            editor.prompt({ $type: \"gotoLine\" });\n        },\n        readOnly: true\n    }, {\n        name: \"fold\",\n        bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n        exec: function (editor) { editor.session.toggleFold(false); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"unfold\",\n        bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n        exec: function (editor) { editor.session.toggleFold(true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"toggleFoldWidget\",\n        description: \"Toggle fold widget\",\n        bindKey: bindKey(\"F2\", \"F2\"),\n        exec: function (editor) { editor.session.toggleFoldWidget(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"toggleParentFoldWidget\",\n        description: \"Toggle parent fold widget\",\n        bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n        exec: function (editor) { editor.session.toggleFoldWidget(true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"foldall\",\n        description: \"Fold all\",\n        bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n        exec: function (editor) { editor.session.foldAll(); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"foldAllComments\",\n        description: \"Fold all comments\",\n        bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n        exec: function (editor) { editor.session.foldAllComments(); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"foldOther\",\n        description: \"Fold other\",\n        bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n        exec: function (editor) {\n            editor.session.foldAll();\n            editor.session.unfold(editor.selection.getAllRanges());\n        },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"unfoldall\",\n        description: \"Unfold all\",\n        bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n        exec: function (editor) { editor.session.unfold(); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"findnext\",\n        description: \"Find next\",\n        bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n        exec: function (editor) { editor.findNext(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"findprevious\",\n        description: \"Find previous\",\n        bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n        exec: function (editor) { editor.findPrevious(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"selectOrFindNext\",\n        description: \"Select or find next\",\n        bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n        exec: function (editor) {\n            if (editor.selection.isEmpty())\n                editor.selection.selectWord();\n            else\n                editor.findNext();\n        },\n        readOnly: true\n    }, {\n        name: \"selectOrFindPrevious\",\n        description: \"Select or find previous\",\n        bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n        exec: function (editor) {\n            if (editor.selection.isEmpty())\n                editor.selection.selectWord();\n            else\n                editor.findPrevious();\n        },\n        readOnly: true\n    }, {\n        name: \"find\",\n        description: \"Find\",\n        bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n        },\n        readOnly: true\n    }, {\n        name: \"overwrite\",\n        description: \"Overwrite\",\n        bindKey: \"Insert\",\n        exec: function (editor) { editor.toggleOverwrite(); },\n        readOnly: true\n    }, {\n        name: \"selecttostart\",\n        description: \"Select to start\",\n        bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n        exec: function (editor) { editor.getSelection().selectFileStart(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"gotostart\",\n        description: \"Go to start\",\n        bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n        exec: function (editor) { editor.navigateFileStart(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"selectup\",\n        description: \"Select up\",\n        bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n        exec: function (editor) { editor.getSelection().selectUp(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"golineup\",\n        description: \"Go line up\",\n        bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n        exec: function (editor, args) { editor.navigateUp(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selecttoend\",\n        description: \"Select to end\",\n        bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n        exec: function (editor) { editor.getSelection().selectFileEnd(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"gotoend\",\n        description: \"Go to end\",\n        bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n        exec: function (editor) { editor.navigateFileEnd(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"selectdown\",\n        description: \"Select down\",\n        bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n        exec: function (editor) { editor.getSelection().selectDown(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"golinedown\",\n        description: \"Go line down\",\n        bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n        exec: function (editor, args) { editor.navigateDown(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectwordleft\",\n        description: \"Select word left\",\n        bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n        exec: function (editor) { editor.getSelection().selectWordLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotowordleft\",\n        description: \"Go to word left\",\n        bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n        exec: function (editor) { editor.navigateWordLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selecttolinestart\",\n        description: \"Select to line start\",\n        bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n        exec: function (editor) { editor.getSelection().selectLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotolinestart\",\n        description: \"Go to line start\",\n        bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n        exec: function (editor) { editor.navigateLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectleft\",\n        description: \"Select left\",\n        bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n        exec: function (editor) { editor.getSelection().selectLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotoleft\",\n        description: \"Go to left\",\n        bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n        exec: function (editor, args) { editor.navigateLeft(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectwordright\",\n        description: \"Select word right\",\n        bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n        exec: function (editor) { editor.getSelection().selectWordRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotowordright\",\n        description: \"Go to word right\",\n        bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n        exec: function (editor) { editor.navigateWordRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selecttolineend\",\n        description: \"Select to line end\",\n        bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n        exec: function (editor) { editor.getSelection().selectLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotolineend\",\n        description: \"Go to line end\",\n        bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n        exec: function (editor) { editor.navigateLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectright\",\n        description: \"Select right\",\n        bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n        exec: function (editor) { editor.getSelection().selectRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotoright\",\n        description: \"Go to right\",\n        bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n        exec: function (editor, args) { editor.navigateRight(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectpagedown\",\n        description: \"Select page down\",\n        bindKey: \"Shift-PageDown\",\n        exec: function (editor) { editor.selectPageDown(); },\n        readOnly: true\n    }, {\n        name: \"pagedown\",\n        description: \"Page down\",\n        bindKey: bindKey(null, \"Option-PageDown\"),\n        exec: function (editor) { editor.scrollPageDown(); },\n        readOnly: true\n    }, {\n        name: \"gotopagedown\",\n        description: \"Go to page down\",\n        bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n        exec: function (editor) { editor.gotoPageDown(); },\n        readOnly: true\n    }, {\n        name: \"selectpageup\",\n        description: \"Select page up\",\n        bindKey: \"Shift-PageUp\",\n        exec: function (editor) { editor.selectPageUp(); },\n        readOnly: true\n    }, {\n        name: \"pageup\",\n        description: \"Page up\",\n        bindKey: bindKey(null, \"Option-PageUp\"),\n        exec: function (editor) { editor.scrollPageUp(); },\n        readOnly: true\n    }, {\n        name: \"gotopageup\",\n        description: \"Go to page up\",\n        bindKey: \"PageUp\",\n        exec: function (editor) { editor.gotoPageUp(); },\n        readOnly: true\n    }, {\n        name: \"scrollup\",\n        description: \"Scroll up\",\n        bindKey: bindKey(\"Ctrl-Up\", null),\n        exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n        readOnly: true\n    }, {\n        name: \"scrolldown\",\n        description: \"Scroll down\",\n        bindKey: bindKey(\"Ctrl-Down\", null),\n        exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n        readOnly: true\n    }, {\n        name: \"selectlinestart\",\n        description: \"Select line start\",\n        bindKey: \"Shift-Home\",\n        exec: function (editor) { editor.getSelection().selectLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectlineend\",\n        description: \"Select line end\",\n        bindKey: \"Shift-End\",\n        exec: function (editor) { editor.getSelection().selectLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"togglerecording\",\n        description: \"Toggle recording\",\n        bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n        exec: function (editor) { editor.commands.toggleRecording(editor); },\n        readOnly: true\n    }, {\n        name: \"replaymacro\",\n        description: \"Replay macro\",\n        bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n        exec: function (editor) { editor.commands.replay(editor); },\n        readOnly: true\n    }, {\n        name: \"jumptomatching\",\n        description: \"Jump to matching\",\n        bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n        exec: function (editor) { editor.jumpToMatching(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"selecttomatching\",\n        description: \"Select to matching\",\n        bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n        exec: function (editor) { editor.jumpToMatching(true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"expandToMatching\",\n        description: \"Expand to matching\",\n        bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n        exec: function (editor) { editor.jumpToMatching(true, true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"passKeysToBrowser\",\n        description: \"Pass keys to browser\",\n        bindKey: bindKey(null, null),\n        exec: function () { },\n        passEvent: true,\n        readOnly: true\n    }, {\n        name: \"copy\",\n        description: \"Copy\",\n        exec: function (editor) {\n        },\n        readOnly: true\n    },\n    {\n        name: \"cut\",\n        description: \"Cut\",\n        exec: function (editor) {\n            var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n            var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n            editor._emit(\"cut\", range);\n            if (!range.isEmpty())\n                editor.session.remove(range);\n            editor.clearSelection();\n        },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"paste\",\n        description: \"Paste\",\n        exec: function (editor, args) {\n            editor.$handlePaste(args);\n        },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removeline\",\n        description: \"Remove line\",\n        bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n        exec: function (editor) { editor.removeLines(); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEachLine\"\n    }, {\n        name: \"duplicateSelection\",\n        description: \"Duplicate selection\",\n        bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n        exec: function (editor) { editor.duplicateSelection(); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"sortlines\",\n        description: \"Sort lines\",\n        bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n        exec: function (editor) { editor.sortLines(); },\n        scrollIntoView: \"selection\",\n        multiSelectAction: \"forEachLine\"\n    }, {\n        name: \"togglecomment\",\n        description: \"Toggle comment\",\n        bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n        exec: function (editor) { editor.toggleCommentLines(); },\n        multiSelectAction: \"forEachLine\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"toggleBlockComment\",\n        description: \"Toggle block comment\",\n        bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n        exec: function (editor) { editor.toggleBlockComment(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"modifyNumberUp\",\n        description: \"Modify number up\",\n        bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n        exec: function (editor) { editor.modifyNumber(1); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"modifyNumberDown\",\n        description: \"Modify number down\",\n        bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n        exec: function (editor) { editor.modifyNumber(-1); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"replace\",\n        description: \"Replace\",\n        bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n        }\n    }, {\n        name: \"undo\",\n        description: \"Undo\",\n        bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n        exec: function (editor) { editor.undo(); }\n    }, {\n        name: \"redo\",\n        description: \"Redo\",\n        bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n        exec: function (editor) { editor.redo(); }\n    }, {\n        name: \"copylinesup\",\n        description: \"Copy lines up\",\n        bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n        exec: function (editor) { editor.copyLinesUp(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"movelinesup\",\n        description: \"Move lines up\",\n        bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n        exec: function (editor) { editor.moveLinesUp(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"copylinesdown\",\n        description: \"Copy lines down\",\n        bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n        exec: function (editor) { editor.copyLinesDown(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"movelinesdown\",\n        description: \"Move lines down\",\n        bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n        exec: function (editor) { editor.moveLinesDown(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"del\",\n        description: \"Delete\",\n        bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n        exec: function (editor) { editor.remove(\"right\"); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"backspace\",\n        description: \"Backspace\",\n        bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n        exec: function (editor) { editor.remove(\"left\"); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"cut_or_delete\",\n        description: \"Cut or delete\",\n        bindKey: bindKey(\"Shift-Delete\", null),\n        exec: function (editor) {\n            if (editor.selection.isEmpty()) {\n                editor.remove(\"left\");\n            }\n            else {\n                return false;\n            }\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolinestart\",\n        description: \"Remove to line start\",\n        bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n        exec: function (editor) { editor.removeToLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolineend\",\n        description: \"Remove to line end\",\n        bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n        exec: function (editor) { editor.removeToLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolinestarthard\",\n        description: \"Remove to line start hard\",\n        bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n        exec: function (editor) {\n            var range = editor.selection.getRange();\n            range.start.column = 0;\n            editor.session.remove(range);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolineendhard\",\n        description: \"Remove to line end hard\",\n        bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n        exec: function (editor) {\n            var range = editor.selection.getRange();\n            range.end.column = Number.MAX_VALUE;\n            editor.session.remove(range);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removewordleft\",\n        description: \"Remove word left\",\n        bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n        exec: function (editor) { editor.removeWordLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removewordright\",\n        description: \"Remove word right\",\n        bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n        exec: function (editor) { editor.removeWordRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"outdent\",\n        description: \"Outdent\",\n        bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n        exec: function (editor) { editor.blockOutdent(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"indent\",\n        description: \"Indent\",\n        bindKey: bindKey(\"Tab\", \"Tab\"),\n        exec: function (editor) { editor.indent(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"blockoutdent\",\n        description: \"Block outdent\",\n        bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n        exec: function (editor) { editor.blockOutdent(); },\n        multiSelectAction: \"forEachLine\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"blockindent\",\n        description: \"Block indent\",\n        bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n        exec: function (editor) { editor.blockIndent(); },\n        multiSelectAction: \"forEachLine\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"insertstring\",\n        description: \"Insert string\",\n        exec: function (editor, str) { editor.insert(str); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"inserttext\",\n        description: \"Insert text\",\n        exec: function (editor, args) {\n            editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"splitline\",\n        description: \"Split line\",\n        bindKey: bindKey(null, \"Ctrl-O\"),\n        exec: function (editor) { editor.splitLine(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"transposeletters\",\n        description: \"Transpose letters\",\n        bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n        exec: function (editor) { editor.transposeLetters(); },\n        multiSelectAction: function (editor) { editor.transposeSelections(1); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"touppercase\",\n        description: \"To uppercase\",\n        bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n        exec: function (editor) { editor.toUpperCase(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"tolowercase\",\n        description: \"To lowercase\",\n        bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n        exec: function (editor) { editor.toLowerCase(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"autoindent\",\n        description: \"Auto Indent\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) { editor.autoIndent(); },\n        scrollIntoView: \"animate\"\n    }, {\n        name: \"expandtoline\",\n        description: \"Expand to line\",\n        bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n        exec: function (editor) {\n            var range = editor.selection.getRange();\n            range.start.column = range.end.column = 0;\n            range.end.row++;\n            editor.selection.setRange(range, false);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"openlink\",\n        bindKey: bindKey(\"Ctrl+F3\", \"F3\"),\n        exec: function (editor) { editor.openLink(); }\n    }, {\n        name: \"joinlines\",\n        description: \"Join lines\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) {\n            var isBackwards = editor.selection.isBackwards();\n            var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n            var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n            var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n            var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n            var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n            var insertLine = editor.session.doc.getLine(selectionStart.row);\n            for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n                var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n                if (curLine.length !== 0) {\n                    curLine = \" \" + curLine;\n                }\n                insertLine += curLine;\n            }\n            if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n                insertLine += editor.session.doc.getNewLineCharacter();\n            }\n            editor.clearSelection();\n            editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n            if (selectedCount > 0) {\n                editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n                editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n            }\n            else {\n                firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n                editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n            }\n        },\n        multiSelectAction: \"forEach\",\n        readOnly: true\n    }, {\n        name: \"invertSelection\",\n        description: \"Invert selection\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) {\n            var endRow = editor.session.doc.getLength() - 1;\n            var endCol = editor.session.doc.getLine(endRow).length;\n            var ranges = editor.selection.rangeList.ranges;\n            var newRanges = [];\n            if (ranges.length < 1) {\n                ranges = [editor.selection.getRange()];\n            }\n            for (var i = 0; i < ranges.length; i++) {\n                if (i == (ranges.length - 1)) {\n                    if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n                        newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n                    }\n                }\n                if (i === 0) {\n                    if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n                        newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n                    }\n                }\n                else {\n                    newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n                }\n            }\n            editor.exitMultiSelectMode();\n            editor.clearSelection();\n            for (var i = 0; i < newRanges.length; i++) {\n                editor.selection.addRange(newRanges[i], false);\n            }\n        },\n        readOnly: true,\n        scrollIntoView: \"none\"\n    }, {\n        name: \"addLineAfter\",\n        description: \"Add new line after the current line\",\n        exec: function (editor) {\n            editor.selection.clearSelection();\n            editor.navigateLineEnd();\n            editor.insert(\"\\n\");\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"addLineBefore\",\n        description: \"Add new line before the current line\",\n        exec: function (editor) {\n            editor.selection.clearSelection();\n            var cursor = editor.getCursorPosition();\n            editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n            editor.insert(\"\\n\");\n            if (cursor.row === 0)\n                editor.navigateUp();\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"openCommandPallete\",\n        exec: function (editor) {\n            console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\");\n            editor.prompt({ $type: \"commands\" });\n        },\n        readOnly: true\n    }, {\n        name: \"openCommandPalette\",\n        description: \"Open command palette\",\n        bindKey: bindKey(\"F1\", \"F1\"),\n        exec: function (editor) {\n            editor.prompt({ $type: \"commands\" });\n        },\n        readOnly: true\n    }, {\n        name: \"modeSelect\",\n        description: \"Change language mode...\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) {\n            editor.prompt({ $type: \"modes\" });\n        },\n        readOnly: true\n    }];\nfor (var i = 1; i < 9; i++) {\n    exports.commands.push({\n        name: \"foldToLevel\" + i,\n        description: \"Fold To Level \" + i,\n        level: i,\n        exec: function (editor) { editor.session.foldToLevel(this.level); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    });\n}\n\n});\n\nace.define(\"ace/keyboard/gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterKeyboardHandler = /** @class */ (function () {\n    function GutterKeyboardHandler(editor) {\n        this.editor = editor;\n        this.gutterLayer = editor.renderer.$gutterLayer;\n        this.element = editor.renderer.$gutter;\n        this.lines = editor.renderer.$gutterLayer.$lines;\n        this.activeRowIndex = null;\n        this.activeLane = null;\n        this.annotationTooltip = this.editor.$mouseHandler.$tooltip;\n    }\n    GutterKeyboardHandler.prototype.addListener = function () {\n        this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n        this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this));\n        this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n    };\n    GutterKeyboardHandler.prototype.removeListener = function () {\n        this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n        this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this));\n        this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n    };\n    GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) {\n        if (this.annotationTooltip.isOpen) {\n            e.preventDefault();\n            if (e.keyCode === keys[\"escape\"])\n                this.annotationTooltip.hide();\n            return;\n        }\n        if (e.target === this.element) {\n            if (e.keyCode != keys[\"enter\"]) {\n                return;\n            }\n            e.preventDefault();\n            var row = this.editor.getCursorPosition().row;\n            if (!this.editor.isRowVisible(row))\n                this.editor.scrollToLine(row, true, true);\n            setTimeout(\n            function () {\n                var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row);\n                var nearestFoldLaneWidgetIndex = this.$findNearestFoldLaneWidget(index);\n                var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n                if (nearestFoldLaneWidgetIndex === null && nearestAnnotationIndex === null)\n                    return;\n                var futureActiveRowIndex = this.$findClosestNumber(nearestFoldLaneWidgetIndex, nearestAnnotationIndex, index);\n                if (futureActiveRowIndex === nearestFoldLaneWidgetIndex) {\n                    this.activeLane = \"fold\";\n                    this.activeRowIndex = nearestFoldLaneWidgetIndex;\n                    if (this.$isCustomWidgetVisible(nearestFoldLaneWidgetIndex)) {\n                        this.$focusCustomWidget(this.activeRowIndex);\n                        return;\n                    }\n                    else {\n                        this.$focusFoldWidget(this.activeRowIndex);\n                        return;\n                    }\n                }\n                else {\n                    this.activeRowIndex = nearestAnnotationIndex;\n                    this.activeLane = \"annotation\";\n                    this.$focusAnnotation(this.activeRowIndex);\n                    return;\n                }\n            }.bind(this), 10);\n            return;\n        }\n        this.$handleGutterKeyboardInteraction(e);\n        setTimeout(function () {\n            this.editor._signal(\"gutterkeydown\", new GutterKeyboardEvent(e, this));\n        }.bind(this), 10);\n    };\n    GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) {\n        if (e.keyCode === keys[\"tab\"]) {\n            e.preventDefault();\n            return;\n        }\n        if (e.keyCode === keys[\"escape\"]) {\n            e.preventDefault();\n            this.$blurGutter();\n            this.element.focus();\n            this.lane = null;\n            return;\n        }\n        if (e.keyCode === keys[\"up\"]) {\n            e.preventDefault();\n            switch (this.activeLane) {\n                case \"fold\":\n                    this.$moveFoldWidgetUp();\n                    break;\n                case \"annotation\":\n                    this.$moveAnnotationUp();\n                    break;\n            }\n            return;\n        }\n        if (e.keyCode === keys[\"down\"]) {\n            e.preventDefault();\n            switch (this.activeLane) {\n                case \"fold\":\n                    this.$moveFoldWidgetDown();\n                    break;\n                case \"annotation\":\n                    this.$moveAnnotationDown();\n                    break;\n            }\n            return;\n        }\n        if (e.keyCode === keys[\"left\"]) {\n            e.preventDefault();\n            this.$switchLane(\"annotation\");\n            return;\n        }\n        if (e.keyCode === keys[\"right\"]) {\n            e.preventDefault();\n            this.$switchLane(\"fold\");\n            return;\n        }\n        if (e.keyCode === keys[\"enter\"] || e.keyCode === keys[\"space\"]) {\n            e.preventDefault();\n            switch (this.activeLane) {\n                case \"fold\":\n                    var row = this.$rowIndexToRow(this.activeRowIndex);\n                    var customWidget = this.editor.session.$gutterCustomWidgets[row];\n                    if (customWidget) {\n                        if (customWidget.callbacks && customWidget.callbacks.onClick) {\n                            customWidget.callbacks.onClick(e, row);\n                        }\n                    }\n                    else if (this.gutterLayer.session.foldWidgets[row] === 'start') {\n                        this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n                        setTimeout(\n                        function () {\n                            if (this.$rowIndexToRow(this.activeRowIndex) !== row) {\n                                this.$blurFoldWidget(this.activeRowIndex);\n                                this.activeRowIndex = this.$rowToRowIndex(row);\n                                this.$focusFoldWidget(this.activeRowIndex);\n                            }\n                        }.bind(this), 10);\n                        break;\n                    }\n                    else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') {\n                        break;\n                    }\n                    return;\n                case \"annotation\":\n                    this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n                    this.annotationTooltip.$fromKeyboard = true;\n                    break;\n            }\n            return;\n        }\n    };\n    GutterKeyboardHandler.prototype.$blurGutter = function () {\n        if (this.activeRowIndex !== null) {\n            switch (this.activeLane) {\n                case \"fold\":\n                    this.$blurFoldWidget(this.activeRowIndex);\n                    this.$blurCustomWidget(this.activeRowIndex);\n                    break;\n                case \"annotation\":\n                    this.$blurAnnotation(this.activeRowIndex);\n                    break;\n            }\n        }\n        if (this.annotationTooltip.isOpen)\n            this.annotationTooltip.hide();\n        return;\n    };\n    GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) {\n        var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n        var isIconVisible = this.$getFoldWidget(index).style.display !== \"none\";\n        return isRowFullyVisible && isIconVisible;\n    };\n    GutterKeyboardHandler.prototype.$isCustomWidgetVisible = function (index) {\n        var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n        var isIconVisible = !!this.$getCustomWidget(index);\n        return isRowFullyVisible && isIconVisible;\n    };\n    GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) {\n        var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n        var isIconVisible = this.$getAnnotation(index).style.display !== \"none\";\n        return isRowFullyVisible && isIconVisible;\n    };\n    GutterKeyboardHandler.prototype.$getFoldWidget = function (index) {\n        var cell = this.lines.get(index);\n        var element = cell.element;\n        return element.childNodes[1];\n    };\n    GutterKeyboardHandler.prototype.$getCustomWidget = function (index) {\n        var cell = this.lines.get(index);\n        var element = cell.element;\n        return element.childNodes[3];\n    };\n    GutterKeyboardHandler.prototype.$getAnnotation = function (index) {\n        var cell = this.lines.get(index);\n        var element = cell.element;\n        return element.childNodes[2];\n    };\n    GutterKeyboardHandler.prototype.$findNearestFoldLaneWidget = function (index) {\n        if (this.$isCustomWidgetVisible(index))\n            return index;\n        if (this.$isFoldWidgetVisible(index))\n            return index;\n        var i = 0;\n        while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n            i++;\n            if (index - i >= 0 && this.$isCustomWidgetVisible(index - i))\n                return index - i;\n            if (index + i <= this.lines.getLength() - 1 && this.$isCustomWidgetVisible(index + i))\n                return index + i;\n            if (index - i >= 0 && this.$isFoldWidgetVisible(index - i))\n                return index - i;\n            if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i))\n                return index + i;\n        }\n        return null;\n    };\n    GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) {\n        if (this.$isAnnotationVisible(index))\n            return index;\n        var i = 0;\n        while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n            i++;\n            if (index - i >= 0 && this.$isAnnotationVisible(index - i))\n                return index - i;\n            if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i))\n                return index + i;\n        }\n        return null;\n    };\n    GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) {\n        if (index == null)\n            return;\n        var foldWidget = this.$getFoldWidget(index);\n        foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n        foldWidget.focus();\n    };\n    GutterKeyboardHandler.prototype.$focusCustomWidget = function (index) {\n        if (index == null)\n            return;\n        var customWidget = this.$getCustomWidget(index);\n        if (customWidget) {\n            customWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n            customWidget.focus();\n        }\n    };\n    GutterKeyboardHandler.prototype.$focusAnnotation = function (index) {\n        if (index == null)\n            return;\n        var annotation = this.$getAnnotation(index);\n        annotation.classList.add(this.editor.renderer.keyboardFocusClassName);\n        annotation.focus();\n    };\n    GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) {\n        var foldWidget = this.$getFoldWidget(index);\n        foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n        foldWidget.blur();\n    };\n    GutterKeyboardHandler.prototype.$blurCustomWidget = function (index) {\n        var customWidget = this.$getCustomWidget(index);\n        if (customWidget) {\n            customWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n            customWidget.blur();\n        }\n    };\n    GutterKeyboardHandler.prototype.$blurAnnotation = function (index) {\n        var annotation = this.$getAnnotation(index);\n        annotation.classList.remove(this.editor.renderer.keyboardFocusClassName);\n        annotation.blur();\n    };\n    GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () {\n        var index = this.activeRowIndex;\n        while (index > 0) {\n            index--;\n            if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n                this.$blurFoldWidget(this.activeRowIndex);\n                this.$blurCustomWidget(this.activeRowIndex);\n                this.activeRowIndex = index;\n                if (this.$isFoldWidgetVisible(index)) {\n                    this.$focusFoldWidget(this.activeRowIndex);\n                }\n                else {\n                    this.$focusCustomWidget(this.activeRowIndex);\n                }\n                return;\n            }\n        }\n        return;\n    };\n    GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () {\n        var index = this.activeRowIndex;\n        while (index < this.lines.getLength() - 1) {\n            index++;\n            if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n                this.$blurFoldWidget(this.activeRowIndex);\n                this.$blurCustomWidget(this.activeRowIndex);\n                this.activeRowIndex = index;\n                if (this.$isFoldWidgetVisible(index)) {\n                    this.$focusFoldWidget(this.activeRowIndex);\n                }\n                else {\n                    this.$focusCustomWidget(this.activeRowIndex);\n                }\n                return;\n            }\n        }\n        return;\n    };\n    GutterKeyboardHandler.prototype.$moveAnnotationUp = function () {\n        var index = this.activeRowIndex;\n        while (index > 0) {\n            index--;\n            if (this.$isAnnotationVisible(index)) {\n                this.$blurAnnotation(this.activeRowIndex);\n                this.activeRowIndex = index;\n                this.$focusAnnotation(this.activeRowIndex);\n                return;\n            }\n        }\n        return;\n    };\n    GutterKeyboardHandler.prototype.$moveAnnotationDown = function () {\n        var index = this.activeRowIndex;\n        while (index < this.lines.getLength() - 1) {\n            index++;\n            if (this.$isAnnotationVisible(index)) {\n                this.$blurAnnotation(this.activeRowIndex);\n                this.activeRowIndex = index;\n                this.$focusAnnotation(this.activeRowIndex);\n                return;\n            }\n        }\n        return;\n    };\n    GutterKeyboardHandler.prototype.$findClosestNumber = function (num1, num2, target) {\n        if (num1 === null)\n            return num2;\n        if (num2 === null)\n            return num1;\n        return (Math.abs(target - num1) <= Math.abs(target - num2)) ? num1 : num2;\n    };\n    GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) {\n        switch (desinationLane) {\n            case \"annotation\":\n                if (this.activeLane === \"annotation\") {\n                    break;\n                }\n                var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex);\n                if (annotationIndex == null) {\n                    break;\n                }\n                this.activeLane = \"annotation\";\n                this.$blurFoldWidget(this.activeRowIndex);\n                this.$blurCustomWidget(this.activeRowIndex);\n                this.activeRowIndex = annotationIndex;\n                this.$focusAnnotation(this.activeRowIndex);\n                break;\n            case \"fold\":\n                if (this.activeLane === \"fold\") {\n                    break;\n                }\n                var foldLaneWidgetIndex = this.$findNearestFoldLaneWidget(this.activeRowIndex);\n                if (foldLaneWidgetIndex === null) {\n                    break;\n                }\n                this.activeLane = \"fold\";\n                this.$blurAnnotation(this.activeRowIndex);\n                this.activeRowIndex = foldLaneWidgetIndex;\n                if (this.$isCustomWidgetVisible(foldLaneWidgetIndex)) {\n                    this.$focusCustomWidget(this.activeRowIndex);\n                }\n                else {\n                    this.$focusFoldWidget(this.activeRowIndex);\n                }\n                break;\n        }\n        return;\n    };\n    GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) {\n        var cell = this.lines.get(index);\n        if (cell)\n            return cell.row;\n        return null;\n    };\n    GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) {\n        for (var i = 0; i < this.lines.getLength(); i++) {\n            var cell = this.lines.get(i);\n            if (cell.row == row)\n                return i;\n        }\n        return null;\n    };\n    return GutterKeyboardHandler;\n}());\nexports.GutterKeyboardHandler = GutterKeyboardHandler;\nvar GutterKeyboardEvent = /** @class */ (function () {\n    function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) {\n        this.gutterKeyboardHandler = gutterKeyboardHandler;\n        this.domEvent = domEvent;\n    }\n    GutterKeyboardEvent.prototype.getKey = function () {\n        return keys.keyCodeToString(this.domEvent.keyCode);\n    };\n    GutterKeyboardEvent.prototype.getRow = function () {\n        return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n    };\n    GutterKeyboardEvent.prototype.isInAnnotationLane = function () {\n        return this.gutterKeyboardHandler.activeLane === \"annotation\";\n    };\n    GutterKeyboardEvent.prototype.isInFoldLane = function () {\n        return this.gutterKeyboardHandler.activeLane === \"fold\";\n    };\n    return GutterKeyboardEvent;\n}());\nexports.GutterKeyboardEvent = GutterKeyboardEvent;\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/keyboard/gutter_handler\",\"ace/config\",\"ace/clipboard\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module){\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar GutterKeyboardHandler = require(\"./keyboard/gutter_handler\").GutterKeyboardHandler;\nvar nls = require(\"./config\").nls;\nvar clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar event = require(\"./lib/event\");\nvar HoverTooltip = require(\"./tooltip\").HoverTooltip;\nvar Editor = /** @class */ (function () {\n    function Editor(renderer, session, options) {\n        this.id = \"editor\" + (++Editor.$uid); this.session;\n        this.$toDestroy = [];\n        var container = renderer.getContainerElement();\n        this.container = container;\n        this.renderer = renderer;\n        this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n        if (typeof document == \"object\") {\n            this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n            this.renderer.textarea = this.textInput.getElement();\n            this.$mouseHandler = new MouseHandler(this);\n            new FoldHandler(this);\n        }\n        this.keyBinding = new KeyBinding(this);\n        this.$search = new Search().set({\n            wrap: true\n        });\n        this.$historyTracker = this.$historyTracker.bind(this);\n        this.commands.on(\"exec\", this.$historyTracker);\n        this.$initOperationListeners();\n        this._$emitInputEvent = lang.delayedCall(function () {\n            this._signal(\"input\", {});\n            if (this.session && !this.session.destroyed)\n                this.session.bgTokenizer.scheduleStart();\n        }.bind(this));\n        this.on(\"change\", function (_, _self) {\n            _self._$emitInputEvent.schedule(31);\n        });\n        this.setSession(session || options && options.session || new EditSession(\"\"));\n        config.resetOptions(this);\n        if (options)\n            this.setOptions(options);\n        config._signal(\"editor\", this);\n    }\n    Editor.prototype.$initOperationListeners = function () {\n        this.commands.on(\"exec\", this.startOperation.bind(this), true);\n        this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n    };\n    Editor.prototype.startOperation = function (commandEvent) {\n        this.session.startOperation(commandEvent);\n    };\n    Editor.prototype.endOperation = function (e) {\n        this.session.endOperation(e);\n    };\n    Editor.prototype.onStartOperation = function (commandEvent) {\n        this.curOp = this.session.curOp;\n        this.curOp.scrollTop = this.renderer.scrollTop;\n        this.prevOp = this.session.prevOp;\n        if (!commandEvent) {\n            this.previousCommand = null;\n        }\n    };\n    Editor.prototype.onEndOperation = function (e) {\n        if (this.curOp && this.session) {\n            if (e && e.returnValue === false) {\n                this.curOp = null;\n                return;\n            }\n            this._signal(\"beforeEndOperation\");\n            if (!this.curOp)\n                return;\n            var command = this.curOp.command;\n            var scrollIntoView = command && command.scrollIntoView;\n            if (scrollIntoView) {\n                switch (scrollIntoView) {\n                    case \"center-animate\":\n                        scrollIntoView = \"animate\";\n                    case \"center\":\n                        this.renderer.scrollCursorIntoView(null, 0.5);\n                        break;\n                    case \"animate\":\n                    case \"cursor\":\n                        this.renderer.scrollCursorIntoView();\n                        break;\n                    case \"selectionPart\":\n                        var range = this.selection.getRange();\n                        var config = this.renderer.layerConfig;\n                        if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n                            this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n                        }\n                        break;\n                    default:\n                        break;\n                }\n                if (scrollIntoView == \"animate\")\n                    this.renderer.animateScrolling(this.curOp.scrollTop);\n            }\n            this.$lastSel = this.session.selection.toJSON();\n            this.prevOp = this.curOp;\n            this.curOp = null;\n        }\n    };\n    Editor.prototype.$historyTracker = function (e) {\n        if (!this.$mergeUndoDeltas)\n            return;\n        var prev = this.prevOp;\n        var mergeableCommands = this.$mergeableCommands;\n        var shouldMerge = prev.command && (e.command.name == prev.command.name);\n        if (e.command.name == \"insertstring\") {\n            var text = e.args;\n            if (this.mergeNextCommand === undefined)\n                this.mergeNextCommand = true;\n            shouldMerge = shouldMerge\n                && this.mergeNextCommand // previous command allows to coalesce with\n                && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n            this.mergeNextCommand = true;\n        }\n        else {\n            shouldMerge = shouldMerge\n                && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n        }\n        if (this.$mergeUndoDeltas != \"always\"\n            && Date.now() - this.sequenceStartTime > 2000) {\n            shouldMerge = false; // the sequence is too long\n        }\n        if (shouldMerge)\n            this.session.mergeUndoDeltas = true;\n        else if (mergeableCommands.indexOf(e.command.name) !== -1)\n            this.sequenceStartTime = Date.now();\n    };\n    Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) {\n        if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n            this.$keybindingId = keyboardHandler;\n            var _self = this;\n            config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n                if (_self.$keybindingId == keyboardHandler)\n                    _self.keyBinding.setKeyboardHandler(module && module.handler);\n                cb && cb();\n            });\n        }\n        else {\n            this.$keybindingId = null;\n            this.keyBinding.setKeyboardHandler(keyboardHandler);\n            cb && cb();\n        }\n    };\n    Editor.prototype.getKeyboardHandler = function () {\n        return this.keyBinding.getKeyboardHandler();\n    };\n    Editor.prototype.setSession = function (session) {\n        if (this.session == session)\n            return;\n        if (this.curOp)\n            this.endOperation();\n        this.curOp = {};\n        var oldSession = this.session;\n        if (oldSession) {\n            this.session.off(\"change\", this.$onDocumentChange);\n            this.session.off(\"changeMode\", this.$onChangeMode);\n            this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n            this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n            this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n            this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n            this.session.off(\"changeFold\", this.$onChangeFold);\n            this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n            this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n            this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n            this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n            this.session.off(\"changeOverwrite\", this.$onCursorChange);\n            this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n            this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n            this.session.off(\"startOperation\", this.$onStartOperation);\n            this.session.off(\"endOperation\", this.$onEndOperation);\n            var selection = this.session.getSelection();\n            selection.off(\"changeCursor\", this.$onCursorChange);\n            selection.off(\"changeSelection\", this.$onSelectionChange);\n        }\n        this.session = session;\n        if (session) {\n            this.$onDocumentChange = this.onDocumentChange.bind(this);\n            session.on(\"change\", this.$onDocumentChange);\n            this.renderer.setSession(session);\n            this.$onChangeMode = this.onChangeMode.bind(this);\n            session.on(\"changeMode\", this.$onChangeMode);\n            this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n            session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n            this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n            session.on(\"changeTabSize\", this.$onChangeTabSize);\n            this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n            session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n            this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n            session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n            this.$onChangeFold = this.onChangeFold.bind(this);\n            session.on(\"changeFold\", this.$onChangeFold);\n            this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n            this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n            this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n            this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n            this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n            this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n            this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n            this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n            this.$onCursorChange = this.onCursorChange.bind(this);\n            this.session.on(\"changeOverwrite\", this.$onCursorChange);\n            this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n            this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n            this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n            this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n            this.selection = session.getSelection();\n            this.selection.on(\"changeCursor\", this.$onCursorChange);\n            this.$onSelectionChange = this.onSelectionChange.bind(this);\n            this.selection.on(\"changeSelection\", this.$onSelectionChange);\n            this.$onStartOperation = this.onStartOperation.bind(this);\n            this.session.on(\"startOperation\", this.$onStartOperation);\n            this.$onEndOperation = this.onEndOperation.bind(this);\n            this.session.on(\"endOperation\", this.$onEndOperation);\n            this.onChangeMode();\n            this.onCursorChange();\n            this.onScrollTopChange();\n            this.onScrollLeftChange();\n            this.onSelectionChange();\n            this.onChangeFrontMarker();\n            this.onChangeBackMarker();\n            this.onChangeBreakpoint();\n            this.onChangeAnnotation();\n            this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n            this.renderer.updateFull();\n        }\n        else {\n            this.selection = null;\n            this.renderer.setSession(session);\n        }\n        this._signal(\"changeSession\", {\n            session: session,\n            oldSession: oldSession\n        });\n        this.curOp = null;\n        oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n        if (oldSession)\n            oldSession.$editor = null;\n        session && session._signal(\"changeEditor\", { editor: this });\n        if (session)\n            session.$editor = this;\n        if (session && !session.destroyed)\n            session.bgTokenizer.scheduleStart();\n    };\n    Editor.prototype.getSession = function () {\n        return this.session;\n    };\n    Editor.prototype.setValue = function (val, cursorPos) {\n        this.session.doc.setValue(val);\n        if (!cursorPos)\n            this.selectAll();\n        else if (cursorPos == 1)\n            this.navigateFileEnd();\n        else if (cursorPos == -1)\n            this.navigateFileStart();\n        return val;\n    };\n    Editor.prototype.getValue = function () {\n        return this.session.getValue();\n    };\n    Editor.prototype.getSelection = function () {\n        return this.selection;\n    };\n    Editor.prototype.resize = function (force) {\n        this.renderer.onResize(force);\n    };\n    Editor.prototype.setTheme = function (theme, cb) {\n        this.renderer.setTheme(theme, cb);\n    };\n    Editor.prototype.getTheme = function () {\n        return this.renderer.getTheme();\n    };\n    Editor.prototype.setStyle = function (style, incluude) {\n        this.renderer.setStyle(style, incluude);\n    };\n    Editor.prototype.unsetStyle = function (style) {\n        this.renderer.unsetStyle(style);\n    };\n    Editor.prototype.getFontSize = function () {\n        return this.getOption(\"fontSize\") ||\n            dom.computedStyle(this.container).fontSize;\n    };\n    Editor.prototype.setFontSize = function (size) {\n        this.setOption(\"fontSize\", size);\n    };\n    Editor.prototype.$highlightBrackets = function () {\n        if (this.$highlightPending) {\n            return;\n        }\n        var self = this;\n        this.$highlightPending = true;\n        setTimeout(function () {\n            self.$highlightPending = false;\n            var session = self.session;\n            if (!session || session.destroyed)\n                return;\n            if (session.$bracketHighlight) {\n                session.$bracketHighlight.markerIds.forEach(function (id) {\n                    session.removeMarker(id);\n                });\n                session.$bracketHighlight = null;\n            }\n            var pos = self.getCursorPosition();\n            var handler = self.getKeyboardHandler();\n            var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self);\n            var ranges = session.getMatchingBracketRanges(pos, isBackwards);\n            if (!ranges) {\n                var iterator = new TokenIterator(session, pos.row, pos.column);\n                var token = iterator.getCurrentToken();\n                if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n                    var tagNamesRanges = session.getMatchingTags(pos);\n                    if (tagNamesRanges) {\n                        ranges = [\n                            tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName,\n                            tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName\n                        ];\n                    }\n                }\n            }\n            if (!ranges && session.$mode.getMatching)\n                ranges = session.$mode.getMatching(self.session);\n            if (!ranges) {\n                if (self.getHighlightIndentGuides())\n                    self.renderer.$textLayer.$highlightIndentGuide();\n                return;\n            }\n            var markerType = \"ace_bracket\";\n            if (!Array.isArray(ranges)) {\n                ranges = [ranges];\n            }\n            else if (ranges.length == 1) {\n                markerType = \"ace_error_bracket\";\n            }\n            if (ranges.length == 2) {\n                if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n                    ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n                else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n                    ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n            }\n            session.$bracketHighlight = {\n                ranges: ranges,\n                markerIds: ranges.map(function (range) {\n                    return session.addMarker(range, markerType, \"text\");\n                })\n            };\n            if (self.getHighlightIndentGuides())\n                self.renderer.$textLayer.$highlightIndentGuide();\n        }, 50);\n    };\n    Editor.prototype.focus = function () {\n        this.textInput.focus();\n    };\n    Editor.prototype.isFocused = function () {\n        return this.textInput.isFocused();\n    };\n    Editor.prototype.blur = function () {\n        this.textInput.blur();\n    };\n    Editor.prototype.onFocus = function (e) {\n        if (this.$isFocused)\n            return;\n        this.$isFocused = true;\n        this.renderer.showCursor();\n        this.renderer.visualizeFocus();\n        this._emit(\"focus\", e);\n    };\n    Editor.prototype.onBlur = function (e) {\n        if (!this.$isFocused)\n            return;\n        this.$isFocused = false;\n        this.renderer.hideCursor();\n        this.renderer.visualizeBlur();\n        this._emit(\"blur\", e);\n    };\n    Editor.prototype.$cursorChange = function () {\n        this.renderer.updateCursor();\n        this.$highlightBrackets();\n        this.$updateHighlightActiveLine();\n    };\n    Editor.prototype.onDocumentChange = function (delta) {\n        var wrap = this.session.$useWrapMode;\n        var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n        this.renderer.updateLines(delta.start.row, lastRow, wrap);\n        this._signal(\"change\", delta);\n        this.$cursorChange();\n    };\n    Editor.prototype.onTokenizerUpdate = function (e) {\n        var rows = e.data;\n        this.renderer.updateLines(rows.first, rows.last);\n    };\n    Editor.prototype.onScrollTopChange = function () {\n        this.renderer.scrollToY(this.session.getScrollTop());\n    };\n    Editor.prototype.onScrollLeftChange = function () {\n        this.renderer.scrollToX(this.session.getScrollLeft());\n    };\n    Editor.prototype.onCursorChange = function () {\n        this.$cursorChange();\n        this._signal(\"changeSelection\");\n    };\n    Editor.prototype.$updateHighlightActiveLine = function () {\n        var session = this.getSession();\n        var highlight;\n        if (this.$highlightActiveLine) {\n            if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n                highlight = this.getCursorPosition();\n            if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n                highlight = false;\n            if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n                highlight = false;\n        }\n        if (session.$highlightLineMarker && !highlight) {\n            session.removeMarker(session.$highlightLineMarker.id);\n            session.$highlightLineMarker = null;\n        }\n        else if (!session.$highlightLineMarker && highlight) {\n            var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n            range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n            session.$highlightLineMarker = range;\n        }\n        else if (highlight) {\n            session.$highlightLineMarker.start.row = highlight.row;\n            session.$highlightLineMarker.end.row = highlight.row;\n            session.$highlightLineMarker.start.column = highlight.column;\n            session._signal(\"changeBackMarker\");\n        }\n    };\n    Editor.prototype.onSelectionChange = function (e) {\n        var session = this.session;\n        if (session.$selectionMarker) {\n            session.removeMarker(session.$selectionMarker);\n        }\n        session.$selectionMarker = null;\n        if (!this.selection.isEmpty()) {\n            var range = this.selection.getRange();\n            var style = this.getSelectionStyle();\n            session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n        }\n        else {\n            this.$updateHighlightActiveLine();\n        }\n        var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n        this.session.highlight(re);\n        this._signal(\"changeSelection\");\n    };\n    Editor.prototype.$getSelectionHighLightRegexp = function () {\n        var session = this.session;\n        var selection = this.getSelectionRange();\n        if (selection.isEmpty() || selection.isMultiLine())\n            return;\n        var startColumn = selection.start.column;\n        var endColumn = selection.end.column;\n        var line = session.getLine(selection.start.row);\n        var needle = line.substring(startColumn, endColumn);\n        if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n            return;\n        var re = this.$search.$assembleRegExp({\n            wholeWord: true,\n            caseSensitive: true,\n            needle: needle\n        });\n        var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n        if (!re.test(wordWithBoundary))\n            return;\n        return re;\n    };\n    Editor.prototype.onChangeFrontMarker = function () {\n        this.renderer.updateFrontMarkers();\n    };\n    Editor.prototype.onChangeBackMarker = function () {\n        this.renderer.updateBackMarkers();\n    };\n    Editor.prototype.onChangeBreakpoint = function () {\n        this.renderer.updateBreakpoints();\n    };\n    Editor.prototype.onChangeAnnotation = function () {\n        this.renderer.setAnnotations(this.session.getAnnotations());\n    };\n    Editor.prototype.onChangeMode = function (e) {\n        this.renderer.updateText();\n        this._emit(\"changeMode\", e);\n    };\n    Editor.prototype.onChangeWrapLimit = function () {\n        this.renderer.updateFull();\n    };\n    Editor.prototype.onChangeWrapMode = function () {\n        this.renderer.onResize(true);\n    };\n    Editor.prototype.onChangeFold = function () {\n        this.$updateHighlightActiveLine();\n        this.renderer.updateFull();\n    };\n    Editor.prototype.getSelectedText = function () {\n        return this.session.getTextRange(this.getSelectionRange());\n    };\n    Editor.prototype.getCopyText = function () {\n        var text = this.getSelectedText();\n        var nl = this.session.doc.getNewLineCharacter();\n        var copyLine = false;\n        if (!text && this.$copyWithEmptySelection) {\n            copyLine = true;\n            var ranges = this.selection.getAllRanges();\n            for (var i = 0; i < ranges.length; i++) {\n                var range = ranges[i];\n                if (i && ranges[i - 1].start.row == range.start.row)\n                    continue;\n                text += this.session.getLine(range.start.row) + nl;\n            }\n        }\n        var e = { text: text };\n        this._signal(\"copy\", e);\n        clipboard.lineMode = copyLine ? e.text : false;\n        return e.text;\n    };\n    Editor.prototype.onCopy = function () {\n        this.commands.exec(\"copy\", this);\n    };\n    Editor.prototype.onCut = function () {\n        this.commands.exec(\"cut\", this);\n    };\n    Editor.prototype.onPaste = function (text, event) {\n        var e = { text: text, event: event };\n        this.commands.exec(\"paste\", this, e);\n    };\n    Editor.prototype.$handlePaste = function (e) {\n        if (typeof e == \"string\")\n            e = { text: e };\n        this._signal(\"paste\", e);\n        var text = e.text;\n        var lineMode = text === clipboard.lineMode;\n        var session = this.session;\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n            if (lineMode)\n                session.insert({ row: this.selection.lead.row, column: 0 }, text);\n            else\n                this.insert(text);\n        }\n        else if (lineMode) {\n            this.selection.rangeList.ranges.forEach(function (range) {\n                session.insert({ row: range.start.row, column: 0 }, text);\n            });\n        }\n        else {\n            var lines = text.split(/\\r\\n|\\r|\\n/);\n            var ranges = this.selection.rangeList.ranges;\n            var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n            if (lines.length != ranges.length || isFullLine)\n                return this.commands.exec(\"insertstring\", this, text);\n            for (var i = ranges.length; i--;) {\n                var range = ranges[i];\n                if (!range.isEmpty())\n                    session.remove(range);\n                session.insert(range.start, lines[i]);\n            }\n        }\n    };\n    Editor.prototype.execCommand = function (command, args) {\n        return this.commands.exec(command, this, args);\n    };\n    Editor.prototype.insert = function (text, pasted) {\n        var session = this.session;\n        var mode = session.getMode();\n        var cursor = this.getCursorPosition();\n        if (this.getBehavioursEnabled() && !pasted) {\n            var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n            if (transform) {\n                if (text !== transform.text) {\n                    if (!this.inVirtualSelectionMode) {\n                        this.session.mergeUndoDeltas = false;\n                        this.mergeNextCommand = false;\n                    }\n                }\n                text = transform.text;\n            }\n        }\n        if (text == \"\\t\")\n            text = this.session.getTabString();\n        if (!this.selection.isEmpty()) {\n            var range = this.getSelectionRange();\n            cursor = this.session.remove(range);\n            this.clearSelection();\n        }\n        else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n            var range = Range.fromPoints(cursor, cursor);\n            range.end.column += text.length;\n            this.session.remove(range);\n        }\n        if (text == \"\\n\" || text == \"\\r\\n\") {\n            var line = session.getLine(cursor.row);\n            if (cursor.column > line.search(/\\S|$/)) {\n                var d = line.substr(cursor.column).search(/\\S|$/);\n                session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n            }\n        }\n        this.clearSelection();\n        var start = cursor.column;\n        var lineState = session.getState(cursor.row);\n        var line = session.getLine(cursor.row);\n        var shouldOutdent = mode.checkOutdent(lineState, line, text);\n        session.insert(cursor, text);\n        if (transform && transform.selection) {\n            if (transform.selection.length == 2) { // Transform relative to the current column\n                this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n            }\n            else { // Transform relative to the current row.\n                this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n            }\n        }\n        if (this.$enableAutoIndent) {\n            if (session.getDocument().isNewLine(text)) {\n                var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n                session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n            }\n            if (shouldOutdent)\n                mode.autoOutdent(lineState, session, cursor.row);\n        }\n    };\n    Editor.prototype.autoIndent = function () {\n        var session = this.session;\n        var mode = session.getMode();\n        var ranges = this.selection.isEmpty()\n            ? [new Range(0, 0, session.doc.getLength() - 1, 0)]\n            : this.selection.getAllRanges();\n        var prevLineState = \"\";\n        var prevLine = \"\";\n        var lineIndent = \"\";\n        var tab = session.getTabString();\n        for (var i = 0; i < ranges.length; i++) {\n            var startRow = ranges[i].start.row;\n            var endRow = ranges[i].end.row;\n            for (var row = startRow; row <= endRow; row++) {\n                if (row > 0) {\n                    prevLineState = session.getState(row - 1);\n                    prevLine = session.getLine(row - 1);\n                    lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n                }\n                var line = session.getLine(row);\n                var currIndent = mode.$getIndent(line);\n                if (lineIndent !== currIndent) {\n                    if (currIndent.length > 0) {\n                        var range = new Range(row, 0, row, currIndent.length);\n                        session.remove(range);\n                    }\n                    if (lineIndent.length > 0) {\n                        session.insert({ row: row, column: 0 }, lineIndent);\n                    }\n                }\n                mode.autoOutdent(prevLineState, session, row);\n            }\n        }\n    };\n    Editor.prototype.onTextInput = function (text, composition) {\n        if (!composition)\n            return this.keyBinding.onTextInput(text);\n        this.startOperation({ command: { name: \"insertstring\" } });\n        var applyComposition = this.applyComposition.bind(this, text, composition);\n        if (this.selection.rangeCount)\n            this.forEachSelection(applyComposition);\n        else\n            applyComposition();\n        this.endOperation();\n    };\n    Editor.prototype.applyComposition = function (text, composition) {\n        if (composition.extendLeft || composition.extendRight) {\n            var r = this.selection.getRange();\n            r.start.column -= composition.extendLeft;\n            r.end.column += composition.extendRight;\n            if (r.start.column < 0) {\n                r.start.row--;\n                r.start.column += this.session.getLine(r.start.row).length + 1;\n            }\n            this.selection.setRange(r);\n            if (!text && !r.isEmpty())\n                this.remove();\n        }\n        if (text || !this.selection.isEmpty())\n            this.insert(text, true);\n        if (composition.restoreStart || composition.restoreEnd) {\n            var r = this.selection.getRange();\n            r.start.column -= composition.restoreStart;\n            r.end.column -= composition.restoreEnd;\n            this.selection.setRange(r);\n        }\n    };\n    Editor.prototype.onCommandKey = function (e, hashId, keyCode) {\n        return this.keyBinding.onCommandKey(e, hashId, keyCode);\n    };\n    Editor.prototype.setOverwrite = function (overwrite) {\n        this.session.setOverwrite(overwrite);\n    };\n    Editor.prototype.getOverwrite = function () {\n        return this.session.getOverwrite();\n    };\n    Editor.prototype.toggleOverwrite = function () {\n        this.session.toggleOverwrite();\n    };\n    Editor.prototype.setScrollSpeed = function (speed) {\n        this.setOption(\"scrollSpeed\", speed);\n    };\n    Editor.prototype.getScrollSpeed = function () {\n        return this.getOption(\"scrollSpeed\");\n    };\n    Editor.prototype.setDragDelay = function (dragDelay) {\n        this.setOption(\"dragDelay\", dragDelay);\n    };\n    Editor.prototype.getDragDelay = function () {\n        return this.getOption(\"dragDelay\");\n    };\n    Editor.prototype.setSelectionStyle = function (val) {\n        this.setOption(\"selectionStyle\", val);\n    };\n    Editor.prototype.getSelectionStyle = function () {\n        return this.getOption(\"selectionStyle\");\n    };\n    Editor.prototype.setHighlightActiveLine = function (shouldHighlight) {\n        this.setOption(\"highlightActiveLine\", shouldHighlight);\n    };\n    Editor.prototype.getHighlightActiveLine = function () {\n        return this.getOption(\"highlightActiveLine\");\n    };\n    Editor.prototype.setHighlightGutterLine = function (shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n    Editor.prototype.getHighlightGutterLine = function () {\n        return this.getOption(\"highlightGutterLine\");\n    };\n    Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) {\n        this.setOption(\"highlightSelectedWord\", shouldHighlight);\n    };\n    Editor.prototype.getHighlightSelectedWord = function () {\n        return this.$highlightSelectedWord;\n    };\n    Editor.prototype.setAnimatedScroll = function (shouldAnimate) {\n        this.renderer.setAnimatedScroll(shouldAnimate);\n    };\n    Editor.prototype.getAnimatedScroll = function () {\n        return this.renderer.getAnimatedScroll();\n    };\n    Editor.prototype.setShowInvisibles = function (showInvisibles) {\n        this.renderer.setShowInvisibles(showInvisibles);\n    };\n    Editor.prototype.getShowInvisibles = function () {\n        return this.renderer.getShowInvisibles();\n    };\n    Editor.prototype.setDisplayIndentGuides = function (display) {\n        this.renderer.setDisplayIndentGuides(display);\n    };\n    Editor.prototype.getDisplayIndentGuides = function () {\n        return this.renderer.getDisplayIndentGuides();\n    };\n    Editor.prototype.setHighlightIndentGuides = function (highlight) {\n        this.renderer.setHighlightIndentGuides(highlight);\n    };\n    Editor.prototype.getHighlightIndentGuides = function () {\n        return this.renderer.getHighlightIndentGuides();\n    };\n    Editor.prototype.setShowPrintMargin = function (showPrintMargin) {\n        this.renderer.setShowPrintMargin(showPrintMargin);\n    };\n    Editor.prototype.getShowPrintMargin = function () {\n        return this.renderer.getShowPrintMargin();\n    };\n    Editor.prototype.setPrintMarginColumn = function (showPrintMargin) {\n        this.renderer.setPrintMarginColumn(showPrintMargin);\n    };\n    Editor.prototype.getPrintMarginColumn = function () {\n        return this.renderer.getPrintMarginColumn();\n    };\n    Editor.prototype.setReadOnly = function (readOnly) {\n        this.setOption(\"readOnly\", readOnly);\n    };\n    Editor.prototype.getReadOnly = function () {\n        return this.getOption(\"readOnly\");\n    };\n    Editor.prototype.setBehavioursEnabled = function (enabled) {\n        this.setOption(\"behavioursEnabled\", enabled);\n    };\n    Editor.prototype.getBehavioursEnabled = function () {\n        return this.getOption(\"behavioursEnabled\");\n    };\n    Editor.prototype.setWrapBehavioursEnabled = function (enabled) {\n        this.setOption(\"wrapBehavioursEnabled\", enabled);\n    };\n    Editor.prototype.getWrapBehavioursEnabled = function () {\n        return this.getOption(\"wrapBehavioursEnabled\");\n    };\n    Editor.prototype.setShowFoldWidgets = function (show) {\n        this.setOption(\"showFoldWidgets\", show);\n    };\n    Editor.prototype.getShowFoldWidgets = function () {\n        return this.getOption(\"showFoldWidgets\");\n    };\n    Editor.prototype.setFadeFoldWidgets = function (fade) {\n        this.setOption(\"fadeFoldWidgets\", fade);\n    };\n    Editor.prototype.getFadeFoldWidgets = function () {\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n    Editor.prototype.remove = function (dir) {\n        if (this.selection.isEmpty()) {\n            if (dir == \"left\")\n                this.selection.selectLeft();\n            else\n                this.selection.selectRight();\n        }\n        var range = this.getSelectionRange();\n        if (this.getBehavioursEnabled()) {\n            var session = this.session;\n            var state = session.getState(range.start.row);\n            var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n            if (range.end.column === 0) {\n                var text = session.getTextRange(range);\n                if (text[text.length - 1] == \"\\n\") {\n                    var line = session.getLine(range.end.row);\n                    if (/^\\s+$/.test(line)) {\n                        range.end.column = line.length;\n                    }\n                }\n            }\n            if (new_range)\n                range = new_range;\n        }\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    Editor.prototype.removeWordRight = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectWordRight();\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    Editor.prototype.removeWordLeft = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectWordLeft();\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    Editor.prototype.removeToLineStart = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectLineStart();\n        if (this.selection.isEmpty())\n            this.selection.selectLeft();\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    Editor.prototype.removeToLineEnd = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectLineEnd();\n        var range = this.getSelectionRange();\n        if (range.start.column == range.end.column && range.start.row == range.end.row) {\n            range.end.column = 0;\n            range.end.row++;\n        }\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    Editor.prototype.splitLine = function () {\n        if (!this.selection.isEmpty()) {\n            this.session.remove(this.getSelectionRange());\n            this.clearSelection();\n        }\n        var cursor = this.getCursorPosition();\n        this.insert(\"\\n\");\n        this.moveCursorToPosition(cursor);\n    };\n    Editor.prototype.setGhostText = function (text, position) {\n        this.renderer.setGhostText(text, position);\n    };\n    Editor.prototype.removeGhostText = function () {\n        this.renderer.removeGhostText();\n    };\n    Editor.prototype.transposeLetters = function () {\n        if (!this.selection.isEmpty()) {\n            return;\n        }\n        var cursor = this.getCursorPosition();\n        var column = cursor.column;\n        if (column === 0)\n            return;\n        var line = this.session.getLine(cursor.row);\n        var swap, range;\n        if (column < line.length) {\n            swap = line.charAt(column) + line.charAt(column - 1);\n            range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n        }\n        else {\n            swap = line.charAt(column - 1) + line.charAt(column - 2);\n            range = new Range(cursor.row, column - 2, cursor.row, column);\n        }\n        this.session.replace(range, swap);\n        this.session.selection.moveToPosition(range.end);\n    };\n    Editor.prototype.toLowerCase = function () {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toLowerCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    Editor.prototype.toUpperCase = function () {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toUpperCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    Editor.prototype.indent = function () {\n        var session = this.session;\n        var range = this.getSelectionRange();\n        if (range.start.row < range.end.row) {\n            var rows = this.$getSelectedRows();\n            session.indentRows(rows.first, rows.last, \"\\t\");\n            return;\n        }\n        else if (range.start.column < range.end.column) {\n            var text = session.getTextRange(range);\n            if (!/^\\s+$/.test(text)) {\n                var rows = this.$getSelectedRows();\n                session.indentRows(rows.first, rows.last, \"\\t\");\n                return;\n            }\n        }\n        var line = session.getLine(range.start.row);\n        var position = range.start;\n        var size = session.getTabSize();\n        var column = session.documentToScreenColumn(position.row, position.column);\n        if (this.session.getUseSoftTabs()) {\n            var count = (size - column % size);\n            var indentString = lang.stringRepeat(\" \", count);\n        }\n        else {\n            var count = column % size;\n            while (line[range.start.column - 1] == \" \" && count) {\n                range.start.column--;\n                count--;\n            }\n            this.selection.setSelectionRange(range);\n            indentString = \"\\t\";\n        }\n        return this.insert(indentString);\n    };\n    Editor.prototype.blockIndent = function () {\n        var rows = this.$getSelectedRows();\n        this.session.indentRows(rows.first, rows.last, \"\\t\");\n    };\n    Editor.prototype.blockOutdent = function () {\n        var selection = this.session.getSelection();\n        this.session.outdentRows(selection.getRange());\n    };\n    Editor.prototype.sortLines = function () {\n        var rows = this.$getSelectedRows();\n        var session = this.session;\n        var lines = [];\n        for (var i = rows.first; i <= rows.last; i++)\n            lines.push(session.getLine(i));\n        lines.sort(function (a, b) {\n            if (a.toLowerCase() < b.toLowerCase())\n                return -1;\n            if (a.toLowerCase() > b.toLowerCase())\n                return 1;\n            return 0;\n        });\n        var deleteRange = new Range(0, 0, 0, 0);\n        for (var i = rows.first; i <= rows.last; i++) {\n            var line = session.getLine(i);\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            deleteRange.end.column = line.length;\n            session.replace(deleteRange, lines[i - rows.first]);\n        }\n    };\n    Editor.prototype.toggleCommentLines = function () {\n        var state = this.session.getState(this.getCursorPosition().row);\n        var rows = this.$getSelectedRows();\n        this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n    };\n    Editor.prototype.toggleBlockComment = function () {\n        var cursor = this.getCursorPosition();\n        var state = this.session.getState(cursor.row);\n        var range = this.getSelectionRange();\n        this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n    };\n    Editor.prototype.getNumberAt = function (row, column) {\n        var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n        _numberRx.lastIndex = 0;\n        var s = this.session.getLine(row);\n        while (_numberRx.lastIndex < column) {\n            var m = _numberRx.exec(s);\n            if (m.index <= column && m.index + m[0].length >= column) {\n                var number = {\n                    value: m[0],\n                    start: m.index,\n                    end: m.index + m[0].length\n                };\n                return number;\n            }\n        }\n        return null;\n    };\n    Editor.prototype.modifyNumber = function (amount) {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n        var charRange = new Range(row, column - 1, row, column);\n        var c = this.session.getTextRange(charRange);\n        if (!isNaN(parseFloat(c)) && isFinite(c)) {\n            var nr = this.getNumberAt(row, column);\n            if (nr) {\n                var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n                var decimals = nr.start + nr.value.length - fp;\n                var t = parseFloat(nr.value);\n                t *= Math.pow(10, decimals);\n                if (fp !== nr.end && column < fp) {\n                    amount *= Math.pow(10, nr.end - column - 1);\n                }\n                else {\n                    amount *= Math.pow(10, nr.end - column);\n                }\n                t += amount;\n                t /= Math.pow(10, decimals);\n                var nnr = t.toFixed(decimals);\n                var replaceRange = new Range(row, nr.start, row, nr.end);\n                this.session.replace(replaceRange, nnr);\n                this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n            }\n        }\n        else {\n            this.toggleWord();\n        }\n    };\n    Editor.prototype.toggleWord = function () {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n        this.selection.selectWord();\n        var currentState = this.getSelectedText();\n        var currWordStart = this.selection.getWordRange().start.column;\n        var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n        var delta = column - currWordStart - 1;\n        if (delta < 0)\n            delta = 0;\n        var curLength = 0, itLength = 0;\n        var that = this;\n        if (currentState.match(/[A-Za-z0-9_]+/)) {\n            wordParts.forEach(function (item, i) {\n                itLength = curLength + item.length;\n                if (delta >= curLength && delta <= itLength) {\n                    currentState = item;\n                    that.selection.clearSelection();\n                    that.moveCursorTo(row, curLength + currWordStart);\n                    that.selection.selectTo(row, itLength + currWordStart);\n                }\n                curLength = itLength;\n            });\n        }\n        var wordPairs = this.$toggleWordPairs;\n        var reg;\n        for (var i = 0; i < wordPairs.length; i++) {\n            var item = wordPairs[i];\n            for (var j = 0; j <= 1; j++) {\n                var negate = +!j;\n                var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n                if (firstCondition) {\n                    var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n                    if (secondCondition) {\n                        reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n                            var res = item[negate];\n                            if (result.toUpperCase() == result) {\n                                res = res.toUpperCase();\n                            }\n                            else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n                                res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n                            }\n                            return res;\n                        });\n                        this.insert(reg);\n                        reg = \"\";\n                    }\n                }\n            }\n        }\n    };\n    Editor.prototype.findLinkAt = function (row, column) {\n        var e_1, _a;\n        var line = this.session.getLine(row);\n        var wordParts = line.split(/((?:https?|ftp):\\/\\/[\\S]+)/);\n        var columnPosition = column;\n        if (columnPosition < 0)\n            columnPosition = 0;\n        var previousPosition = 0, currentPosition = 0, match;\n        try {\n            for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) {\n                var item = wordParts_1_1.value;\n                currentPosition = previousPosition + item.length;\n                if (columnPosition >= previousPosition && columnPosition <= currentPosition) {\n                    if (item.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n                        match = item.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n                        break;\n                    }\n                }\n                previousPosition = currentPosition;\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return match;\n    };\n    Editor.prototype.openLink = function () {\n        var cursor = this.selection.getCursor();\n        var url = this.findLinkAt(cursor.row, cursor.column);\n        if (url)\n            window.open(url, '_blank');\n        return url != null;\n    };\n    Editor.prototype.removeLines = function () {\n        var rows = this.$getSelectedRows();\n        this.session.removeFullLines(rows.first, rows.last);\n        this.clearSelection();\n    };\n    Editor.prototype.duplicateSelection = function () {\n        var sel = this.selection;\n        var doc = this.session;\n        var range = sel.getRange();\n        var reverse = sel.isBackwards();\n        if (range.isEmpty()) {\n            var row = range.start.row;\n            doc.duplicateLines(row, row);\n        }\n        else {\n            var point = reverse ? range.start : range.end;\n            var endPoint = doc.insert(point, doc.getTextRange(range));\n            range.start = point;\n            range.end = endPoint;\n            sel.setSelectionRange(range, reverse);\n        }\n    };\n    Editor.prototype.moveLinesDown = function () {\n        this.$moveLines(1, false);\n    };\n    Editor.prototype.moveLinesUp = function () {\n        this.$moveLines(-1, false);\n    };\n    Editor.prototype.moveText = function (range, toPosition, copy) {\n        return this.session.moveText(range, toPosition, copy);\n    };\n    Editor.prototype.copyLinesUp = function () {\n        this.$moveLines(-1, true);\n    };\n    Editor.prototype.copyLinesDown = function () {\n        this.$moveLines(1, true);\n    };\n    Editor.prototype.$moveLines = function (dir, copy) {\n        var rows, moved;\n        var selection = this.selection;\n        if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n            var range = selection.toOrientedRange();\n            rows = this.$getSelectedRows(range);\n            moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n            if (copy && dir == -1)\n                moved = 0;\n            range.moveBy(moved, 0);\n            selection.fromOrientedRange(range);\n        }\n        else {\n            var ranges = selection.rangeList.ranges;\n            selection.rangeList.detach(this.session);\n            this.inVirtualSelectionMode = true;\n            var diff = 0;\n            var totalDiff = 0;\n            var l = ranges.length;\n            for (var i = 0; i < l; i++) {\n                var rangeIndex = i;\n                ranges[i].moveBy(diff, 0);\n                rows = this.$getSelectedRows(ranges[i]);\n                var first = rows.first;\n                var last = rows.last;\n                while (++i < l) {\n                    if (totalDiff)\n                        ranges[i].moveBy(totalDiff, 0);\n                    var subRows = this.$getSelectedRows(ranges[i]);\n                    if (copy && subRows.first != last)\n                        break;\n                    else if (!copy && subRows.first > last + 1)\n                        break;\n                    last = subRows.last;\n                }\n                i--;\n                diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n                if (copy && dir == -1)\n                    rangeIndex = i + 1;\n                while (rangeIndex <= i) {\n                    ranges[rangeIndex].moveBy(diff, 0);\n                    rangeIndex++;\n                }\n                if (!copy)\n                    diff = 0;\n                totalDiff += diff;\n            }\n            selection.fromOrientedRange(selection.ranges[0]);\n            selection.rangeList.attach(this.session);\n            this.inVirtualSelectionMode = false;\n        }\n    };\n    Editor.prototype.$getSelectedRows = function (range) {\n        range = (range || this.getSelectionRange()).collapseRows();\n        return {\n            first: this.session.getRowFoldStart(range.start.row),\n            last: this.session.getRowFoldEnd(range.end.row)\n        };\n    };\n    Editor.prototype.onCompositionStart = function (compositionState) {\n        this.renderer.showComposition(compositionState);\n    };\n    Editor.prototype.onCompositionUpdate = function (text) {\n        this.renderer.setCompositionText(text);\n    };\n    Editor.prototype.onCompositionEnd = function () {\n        this.renderer.hideComposition();\n    };\n    Editor.prototype.getFirstVisibleRow = function () {\n        return this.renderer.getFirstVisibleRow();\n    };\n    Editor.prototype.getLastVisibleRow = function () {\n        return this.renderer.getLastVisibleRow();\n    };\n    Editor.prototype.isRowVisible = function (row) {\n        return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n    };\n    Editor.prototype.isRowFullyVisible = function (row) {\n        return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n    };\n    Editor.prototype.$getVisibleRowCount = function () {\n        return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n    };\n    Editor.prototype.$moveByPage = function (dir, select) {\n        var renderer = this.renderer;\n        var config = this.renderer.layerConfig;\n        var rows = dir * Math.floor(config.height / config.lineHeight);\n        if (select === true) {\n            this.selection.$moveSelection(function () {\n                this.moveCursorBy(rows, 0);\n            });\n        }\n        else if (select === false) {\n            this.selection.moveCursorBy(rows, 0);\n            this.selection.clearSelection();\n        }\n        var scrollTop = renderer.scrollTop;\n        renderer.scrollBy(0, rows * config.lineHeight);\n        if (select != null)\n            renderer.scrollCursorIntoView(null, 0.5);\n        renderer.animateScrolling(scrollTop);\n    };\n    Editor.prototype.selectPageDown = function () {\n        this.$moveByPage(1, true);\n    };\n    Editor.prototype.selectPageUp = function () {\n        this.$moveByPage(-1, true);\n    };\n    Editor.prototype.gotoPageDown = function () {\n        this.$moveByPage(1, false);\n    };\n    Editor.prototype.gotoPageUp = function () {\n        this.$moveByPage(-1, false);\n    };\n    Editor.prototype.scrollPageDown = function () {\n        this.$moveByPage(1);\n    };\n    Editor.prototype.scrollPageUp = function () {\n        this.$moveByPage(-1);\n    };\n    Editor.prototype.scrollToRow = function (row) {\n        this.renderer.scrollToRow(row);\n    };\n    Editor.prototype.scrollToLine = function (line, center, animate, callback) {\n        this.renderer.scrollToLine(line, center, animate, callback);\n    };\n    Editor.prototype.centerSelection = function () {\n        var range = this.getSelectionRange();\n        var pos = {\n            row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n            column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n        };\n        this.renderer.alignCursor(pos, 0.5);\n    };\n    Editor.prototype.getCursorPosition = function () {\n        return this.selection.getCursor();\n    };\n    Editor.prototype.getCursorPositionScreen = function () {\n        return this.session.documentToScreenPosition(this.getCursorPosition());\n    };\n    Editor.prototype.getSelectionRange = function () {\n        return this.selection.getRange();\n    };\n    Editor.prototype.selectAll = function () {\n        this.selection.selectAll();\n    };\n    Editor.prototype.clearSelection = function () {\n        this.selection.clearSelection();\n    };\n    Editor.prototype.moveCursorTo = function (row, column) {\n        this.selection.moveCursorTo(row, column);\n    };\n    Editor.prototype.moveCursorToPosition = function (pos) {\n        this.selection.moveCursorToPosition(pos);\n    };\n    Editor.prototype.jumpToMatching = function (select, expand) {\n        var cursor = this.getCursorPosition();\n        var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n        var prevToken = iterator.getCurrentToken();\n        var tokenCount = 0;\n        if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n            prevToken = iterator.stepBackward();\n        }\n        var token = prevToken || iterator.stepForward();\n        if (!token)\n            return;\n        var matchType;\n        var found = false;\n        var depth = {};\n        var i = cursor.column - token.start;\n        var bracketType;\n        var brackets = {\n            \")\": \"(\",\n            \"(\": \"(\",\n            \"]\": \"[\",\n            \"[\": \"[\",\n            \"{\": \"{\",\n            \"}\": \"{\"\n        };\n        do {\n            if (token.value.match(/[{}()\\[\\]]/g)) {\n                for (; i < token.value.length && !found; i++) {\n                    if (!brackets[token.value[i]]) {\n                        continue;\n                    }\n                    bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n                    if (isNaN(depth[bracketType])) {\n                        depth[bracketType] = 0;\n                    }\n                    switch (token.value[i]) {\n                        case '(':\n                        case '[':\n                        case '{':\n                            depth[bracketType]++;\n                            break;\n                        case ')':\n                        case ']':\n                        case '}':\n                            depth[bracketType]--;\n                            if (depth[bracketType] === -1) {\n                                matchType = 'bracket';\n                                found = true;\n                            }\n                            break;\n                    }\n                }\n            }\n            else if (token.type.indexOf('tag-name') !== -1) {\n                if (isNaN(depth[token.value])) {\n                    depth[token.value] = 0;\n                }\n                if (prevToken.value === '<' && tokenCount > 1) {\n                    depth[token.value]++;\n                }\n                else if (prevToken.value === '</') {\n                    depth[token.value]--;\n                }\n                if (depth[token.value] === -1) {\n                    matchType = 'tag';\n                    found = true;\n                }\n            }\n            if (!found) {\n                prevToken = token;\n                tokenCount++;\n                token = iterator.stepForward();\n                i = 0;\n            }\n        } while (token && !found);\n        if (!matchType)\n            return;\n        var range, pos;\n        if (matchType === 'bracket') {\n            range = this.session.getBracketRange(cursor);\n            if (!range) {\n                range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n                pos = range.start;\n                if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column)\n                    < 2)\n                    range = this.session.getBracketRange(pos);\n            }\n        }\n        else if (matchType === 'tag') {\n            if (!token || token.type.indexOf('tag-name') === -1)\n                return;\n            range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n            if (range.compare(cursor.row, cursor.column) === 0) {\n                var tagsRanges = this.session.getMatchingTags(cursor);\n                if (tagsRanges) {\n                    if (tagsRanges.openTag.contains(cursor.row, cursor.column)) {\n                        range = tagsRanges.closeTag;\n                        pos = range.start;\n                    }\n                    else {\n                        range = tagsRanges.openTag;\n                        if (tagsRanges.closeTag.start.row === cursor.row && tagsRanges.closeTag.start.column\n                            === cursor.column)\n                            pos = range.end;\n                        else\n                            pos = range.start;\n                    }\n                }\n            }\n            pos = pos || range.start;\n        }\n        pos = range && range.cursor || pos;\n        if (pos) {\n            if (select) {\n                if (range && expand) {\n                    this.selection.setRange(range);\n                }\n                else if (range && range.isEqual(this.getSelectionRange())) {\n                    this.clearSelection();\n                }\n                else {\n                    this.selection.selectTo(pos.row, pos.column);\n                }\n            }\n            else {\n                this.selection.moveTo(pos.row, pos.column);\n            }\n        }\n    };\n    Editor.prototype.gotoLine = function (lineNumber, column, animate) {\n        this.selection.clearSelection();\n        this.session.unfold({ row: lineNumber - 1, column: column || 0 });\n        this.exitMultiSelectMode && this.exitMultiSelectMode();\n        this.moveCursorTo(lineNumber - 1, column || 0);\n        if (!this.isRowFullyVisible(lineNumber - 1))\n            this.scrollToLine(lineNumber - 1, true, animate);\n    };\n    Editor.prototype.navigateTo = function (row, column) {\n        this.selection.moveTo(row, column);\n    };\n    Editor.prototype.navigateUp = function (times) {\n        if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n            var selectionStart = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionStart);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(-times || -1, 0);\n    };\n    Editor.prototype.navigateDown = function (times) {\n        if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n            var selectionEnd = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionEnd);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(times || 1, 0);\n    };\n    Editor.prototype.navigateLeft = function (times) {\n        if (!this.selection.isEmpty()) {\n            var selectionStart = this.getSelectionRange().start;\n            this.moveCursorToPosition(selectionStart);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorLeft();\n            }\n        }\n        this.clearSelection();\n    };\n    Editor.prototype.navigateRight = function (times) {\n        if (!this.selection.isEmpty()) {\n            var selectionEnd = this.getSelectionRange().end;\n            this.moveCursorToPosition(selectionEnd);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorRight();\n            }\n        }\n        this.clearSelection();\n    };\n    Editor.prototype.navigateLineStart = function () {\n        this.selection.moveCursorLineStart();\n        this.clearSelection();\n    };\n    Editor.prototype.navigateLineEnd = function () {\n        this.selection.moveCursorLineEnd();\n        this.clearSelection();\n    };\n    Editor.prototype.navigateFileEnd = function () {\n        this.selection.moveCursorFileEnd();\n        this.clearSelection();\n    };\n    Editor.prototype.navigateFileStart = function () {\n        this.selection.moveCursorFileStart();\n        this.clearSelection();\n    };\n    Editor.prototype.navigateWordRight = function () {\n        this.selection.moveCursorWordRight();\n        this.clearSelection();\n    };\n    Editor.prototype.navigateWordLeft = function () {\n        this.selection.moveCursorWordLeft();\n        this.clearSelection();\n    };\n    Editor.prototype.replace = function (replacement, options) {\n        if (options)\n            this.$search.set(options);\n        var range = this.$search.find(this.session);\n        var replaced = 0;\n        if (!range)\n            return replaced;\n        if (this.$tryReplace(range, replacement)) {\n            replaced = 1;\n        }\n        this.selection.setSelectionRange(range);\n        this.renderer.scrollSelectionIntoView(range.start, range.end);\n        return replaced;\n    };\n    Editor.prototype.replaceAll = function (replacement, options) {\n        if (options) {\n            this.$search.set(options);\n        }\n        var ranges = this.$search.findAll(this.session);\n        var replaced = 0;\n        if (!ranges.length)\n            return replaced;\n        var selection = this.getSelectionRange();\n        this.selection.moveTo(0, 0);\n        for (var i = ranges.length - 1; i >= 0; --i) {\n            if (this.$tryReplace(ranges[i], replacement)) {\n                replaced++;\n            }\n        }\n        this.selection.setSelectionRange(selection);\n        return replaced;\n    };\n    Editor.prototype.$tryReplace = function (range, replacement) {\n        var input = this.session.getTextRange(range);\n        replacement = this.$search.replace(input, replacement);\n        if (replacement !== null) {\n            range.end = this.session.replace(range, replacement);\n            return range;\n        }\n        else {\n            return null;\n        }\n    };\n    Editor.prototype.getLastSearchOptions = function () {\n        return this.$search.getOptions();\n    };\n    Editor.prototype.find = function (needle, options, animate) {\n        if (!options)\n            options = {};\n        if (typeof needle == \"string\" || needle instanceof RegExp)\n            options.needle = needle;\n        else if (typeof needle == \"object\")\n            oop.mixin(options, needle);\n        var range = this.selection.getRange();\n        if (options.needle == null) {\n            needle = this.session.getTextRange(range)\n                || this.$search.$options.needle;\n            if (!needle) {\n                range = this.session.getWordRange(range.start.row, range.start.column);\n                needle = this.session.getTextRange(range);\n            }\n            this.$search.set({ needle: needle });\n        }\n        this.$search.set(options);\n        if (!options.start)\n            this.$search.set({ start: range });\n        var newRange = this.$search.find(this.session);\n        if (options.preventScroll)\n            return newRange;\n        if (newRange) {\n            this.revealRange(newRange, animate);\n            return newRange;\n        }\n        if (options.backwards)\n            range.start = range.end;\n        else\n            range.end = range.start;\n        this.selection.setRange(range);\n    };\n    Editor.prototype.findNext = function (options, animate) {\n        this.find({ skipCurrent: true, backwards: false }, options, animate);\n    };\n    Editor.prototype.findPrevious = function (options, animate) {\n        this.find(options, { skipCurrent: true, backwards: true }, animate);\n    };\n    Editor.prototype.revealRange = function (range, animate) {\n        this.session.unfold(range);\n        this.selection.setSelectionRange(range);\n        var scrollTop = this.renderer.scrollTop;\n        this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n        if (animate !== false)\n            this.renderer.animateScrolling(scrollTop);\n    };\n    Editor.prototype.undo = function () {\n        this.session.getUndoManager().undo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    Editor.prototype.redo = function () {\n        this.session.getUndoManager().redo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    Editor.prototype.destroy = function () {\n        this.destroyed = true;\n        if (this.$toDestroy) {\n            this.$toDestroy.forEach(function (el) {\n                el.destroy();\n            });\n            this.$toDestroy = [];\n        }\n        if (this.$mouseHandler)\n            this.$mouseHandler.destroy();\n        this.renderer.destroy();\n        this._signal(\"destroy\", this);\n        if (this.session)\n            this.session.destroy();\n        if (this._$emitInputEvent)\n            this._$emitInputEvent.cancel();\n        this.removeAllListeners();\n    };\n    Editor.prototype.setAutoScrollEditorIntoView = function (enable) {\n        if (!enable)\n            return;\n        var rect;\n        var self = this;\n        var shouldScroll = false;\n        if (!this.$scrollAnchor)\n            this.$scrollAnchor = document.createElement(\"div\");\n        var scrollAnchor = this.$scrollAnchor;\n        scrollAnchor.style.cssText = \"position:absolute\";\n        this.container.insertBefore(scrollAnchor, this.container.firstChild);\n        var onChangeSelection = this.on(\"changeSelection\", function () {\n            shouldScroll = true;\n        });\n        var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n            if (shouldScroll)\n                rect = self.renderer.container.getBoundingClientRect();\n        });\n        var onAfterRender = this.renderer.on(\"afterRender\", function () {\n            if (shouldScroll && rect && (self.isFocused()\n                || self.searchBox && self.searchBox.isFocused())) {\n                var renderer = self.renderer;\n                var pos = renderer.$cursorLayer.$pixelPos;\n                var config = renderer.layerConfig;\n                var top = pos.top - config.offset;\n                if (pos.top >= 0 && top + rect.top < 0) {\n                    shouldScroll = true;\n                }\n                else if (pos.top < config.height &&\n                    pos.top + rect.top + config.lineHeight > window.innerHeight) {\n                    shouldScroll = false;\n                }\n                else {\n                    shouldScroll = null;\n                }\n                if (shouldScroll != null) {\n                    scrollAnchor.style.top = top + \"px\";\n                    scrollAnchor.style.left = pos.left + \"px\";\n                    scrollAnchor.style.height = config.lineHeight + \"px\";\n                    scrollAnchor.scrollIntoView(shouldScroll);\n                }\n                shouldScroll = rect = null;\n            }\n        });\n        this.setAutoScrollEditorIntoView = function (enable) {\n            if (enable)\n                return;\n            delete this.setAutoScrollEditorIntoView;\n            this.off(\"changeSelection\", onChangeSelection);\n            this.renderer.off(\"afterRender\", onAfterRender);\n            this.renderer.off(\"beforeRender\", onBeforeRender);\n        };\n    };\n    Editor.prototype.$resetCursorStyle = function () {\n        var style = this.$cursorStyle || \"ace\";\n        var cursorLayer = this.renderer.$cursorLayer;\n        if (!cursorLayer)\n            return;\n        cursorLayer.setSmoothBlinking(/smooth/.test(style));\n        cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n        dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n    };\n    Editor.prototype.prompt = function (message, options, callback) {\n        var editor = this;\n        config.loadModule(\"ace/ext/prompt\", function (module) {\n            module.prompt(editor, message, options, callback);\n        });\n    };\n    Object.defineProperty(Editor.prototype, \"hoverTooltip\", {\n        get: function () {\n            return this.$hoverTooltip || (this.$hoverTooltip = new HoverTooltip(this.container));\n        },\n        set: function (value) {\n            if (this.$hoverTooltip)\n                this.$hoverTooltip.destroy();\n            this.$hoverTooltip = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Editor;\n}());\nEditor.$uid = 0;\nEditor.prototype.curOp = null;\nEditor.prototype.prevOp = {};\nEditor.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\nEditor.prototype.$toggleWordPairs = [\n    [\"first\", \"last\"],\n    [\"true\", \"false\"],\n    [\"yes\", \"no\"],\n    [\"width\", \"height\"],\n    [\"top\", \"bottom\"],\n    [\"right\", \"left\"],\n    [\"on\", \"off\"],\n    [\"x\", \"y\"],\n    [\"get\", \"set\"],\n    [\"max\", \"min\"],\n    [\"horizontal\", \"vertical\"],\n    [\"show\", \"hide\"],\n    [\"add\", \"remove\"],\n    [\"up\", \"down\"],\n    [\"before\", \"after\"],\n    [\"even\", \"odd\"],\n    [\"in\", \"out\"],\n    [\"inside\", \"outside\"],\n    [\"next\", \"previous\"],\n    [\"increase\", \"decrease\"],\n    [\"attach\", \"detach\"],\n    [\"&&\", \"||\"],\n    [\"==\", \"!=\"]\n];\noop.implement(Editor.prototype, EventEmitter);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n    selectionStyle: {\n        set: function (style) {\n            this.onSelectionChange();\n            this._signal(\"changeSelectionStyle\", { data: style });\n        },\n        initialValue: \"line\"\n    },\n    highlightActiveLine: {\n        set: function () { this.$updateHighlightActiveLine(); },\n        initialValue: true\n    },\n    highlightSelectedWord: {\n        set: function (shouldHighlight) { this.$onSelectionChange(); },\n        initialValue: true\n    },\n    readOnly: {\n        set: function (/**@type{boolean}*/ readOnly) {\n            var _this = this;\n            this.textInput.setReadOnly(readOnly);\n            if (this.destroyed)\n                return;\n            this.$resetCursorStyle();\n            if (!this.$readOnlyCallback) {\n                this.$readOnlyCallback = function (e) {\n                    var shouldShow = false;\n                    if (e && e.type == \"keydown\") {\n                        if (e && e.key && !e.ctrlKey && !e.metaKey) {\n                            if (e.key == \" \")\n                                e.preventDefault();\n                            shouldShow = e.key.length == 1;\n                        }\n                        if (!shouldShow)\n                            return;\n                    }\n                    else if (e && e.type !== \"exec\") {\n                        shouldShow = true;\n                    }\n                    if (shouldShow) {\n                        var domNode = dom.createElement(\"div\");\n                        domNode.textContent = nls(\"editor.tooltip.disable-editing\", \"Editing is disabled\");\n                        if (!_this.hoverTooltip.isOpen) {\n                            _this.hoverTooltip.showForRange(_this, _this.getSelectionRange(), domNode);\n                        }\n                    }\n                    else if (_this.hoverTooltip && _this.hoverTooltip.isOpen) {\n                        _this.hoverTooltip.hide();\n                    }\n                };\n            }\n            var textArea = this.textInput.getElement();\n            if (readOnly) {\n                event.addListener(textArea, \"keydown\", this.$readOnlyCallback, this);\n                this.commands.on(\"exec\", this.$readOnlyCallback);\n                this.commands.on(\"commandUnavailable\", this.$readOnlyCallback);\n            }\n            else {\n                event.removeListener(textArea, \"keydown\", this.$readOnlyCallback);\n                this.commands.off(\"exec\", this.$readOnlyCallback);\n                this.commands.off(\"commandUnavailable\", this.$readOnlyCallback);\n            }\n        },\n        initialValue: false\n    },\n    copyWithEmptySelection: {\n        set: function (value) {\n            this.textInput.setCopyWithEmptySelection(value);\n        },\n        initialValue: false\n    },\n    cursorStyle: {\n        set: function (val) { this.$resetCursorStyle(); },\n        values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n        initialValue: \"ace\"\n    },\n    mergeUndoDeltas: {\n        values: [false, true, \"always\"],\n        initialValue: true\n    },\n    behavioursEnabled: { initialValue: true },\n    wrapBehavioursEnabled: { initialValue: true },\n    enableAutoIndent: { initialValue: true },\n    autoScrollEditorIntoView: {\n        set: function (val) { this.setAutoScrollEditorIntoView(val); }\n    },\n    keyboardHandler: {\n        set: function (val) { this.setKeyboardHandler(val); },\n        get: function () { return this.$keybindingId; },\n        handlesSet: true\n    },\n    value: {\n        set: function (val) { this.session.setValue(val); },\n        get: function () { return this.getValue(); },\n        handlesSet: true,\n        hidden: true\n    },\n    session: {\n        set: function (val) { this.setSession(val); },\n        get: function () { return this.session; },\n        handlesSet: true,\n        hidden: true\n    },\n    showLineNumbers: {\n        set: function (show) {\n            this.renderer.$gutterLayer.setShowLineNumbers(show);\n            this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n            if (show && this.$relativeLineNumbers)\n                relativeNumberRenderer.attach(this);\n            else\n                relativeNumberRenderer.detach(this);\n        },\n        initialValue: true\n    },\n    relativeLineNumbers: {\n        set: function (value) {\n            if (this.$showLineNumbers && value)\n                relativeNumberRenderer.attach(this);\n            else\n                relativeNumberRenderer.detach(this);\n        }\n    },\n    placeholder: {\n        set: function (message) {\n            if (!this.$updatePlaceholder) {\n                this.$updatePlaceholder = function () {\n                    var hasValue = this.session && (this.renderer.$composition ||\n                        this.session.getLength() > 1 || this.session.getLine(0).length > 0);\n                    if (hasValue && this.renderer.placeholderNode) {\n                        this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n                        dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n                        this.renderer.placeholderNode.remove();\n                        this.renderer.placeholderNode = null;\n                    }\n                    else if (!hasValue && !this.renderer.placeholderNode) {\n                        this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n                        dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n                        var el = dom.createElement(\"div\");\n                        el.className = \"ace_placeholder\";\n                        el.textContent = this.$placeholder || \"\";\n                        this.renderer.placeholderNode = el;\n                        this.renderer.content.appendChild(this.renderer.placeholderNode);\n                    }\n                    else if (!hasValue && this.renderer.placeholderNode) {\n                        this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n                    }\n                }.bind(this);\n                this.on(\"input\", this.$updatePlaceholder);\n            }\n            this.$updatePlaceholder();\n        }\n    },\n    enableKeyboardAccessibility: {\n        set: function (value) {\n            var blurCommand = {\n                name: \"blurTextInput\",\n                description: \"Set focus to the editor content div to allow tabbing through the page\",\n                bindKey: \"Esc\",\n                exec: function (editor) {\n                    editor.blur();\n                    editor.renderer.scroller.focus();\n                },\n                readOnly: true\n            };\n            var focusOnEnterKeyup = function (e) {\n                if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) {\n                    e.preventDefault();\n                    var row = this.getCursorPosition().row;\n                    if (!this.isRowVisible(row))\n                        this.scrollToLine(row, true, true);\n                    this.focus();\n                }\n            };\n            var gutterKeyboardHandler;\n            if (value) {\n                this.renderer.enableKeyboardAccessibility = true;\n                this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\";\n                this.textInput.getElement().setAttribute(\"tabindex\", -1);\n                this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0);\n                this.renderer.scroller.setAttribute(\"tabindex\", 0);\n                this.renderer.scroller.setAttribute(\"role\", \"group\");\n                this.renderer.scroller.setAttribute(\"aria-roledescription\", nls(\"editor.scroller.aria-roledescription\", \"editor\"));\n                this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n                this.renderer.scroller.setAttribute(\"aria-label\", nls(\"editor.scroller.aria-label\", \"Editor content, press Enter to start editing, press Escape to exit\"));\n                this.renderer.scroller.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n                this.commands.addCommand(blurCommand);\n                this.renderer.$gutter.setAttribute(\"tabindex\", 0);\n                this.renderer.$gutter.setAttribute(\"aria-hidden\", false);\n                this.renderer.$gutter.setAttribute(\"role\", \"group\");\n                this.renderer.$gutter.setAttribute(\"aria-roledescription\", nls(\"editor.gutter.aria-roledescription\", \"editor gutter\"));\n                this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"editor.gutter.aria-label\", \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\"));\n                this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName);\n                this.renderer.content.setAttribute(\"aria-hidden\", true);\n                if (!gutterKeyboardHandler)\n                    gutterKeyboardHandler = new GutterKeyboardHandler(this);\n                gutterKeyboardHandler.addListener();\n                this.textInput.setAriaOptions({\n                    setLabel: true\n                });\n            }\n            else {\n                this.renderer.enableKeyboardAccessibility = false;\n                this.textInput.getElement().setAttribute(\"tabindex\", 0);\n                this.textInput.setNumberOfExtraLines(0);\n                this.renderer.scroller.setAttribute(\"tabindex\", -1);\n                this.renderer.scroller.removeAttribute(\"role\");\n                this.renderer.scroller.removeAttribute(\"aria-roledescription\");\n                this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName);\n                this.renderer.scroller.removeAttribute(\"aria-label\");\n                this.renderer.scroller.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n                this.commands.removeCommand(blurCommand);\n                this.renderer.content.removeAttribute(\"aria-hidden\");\n                this.renderer.$gutter.setAttribute(\"tabindex\", -1);\n                this.renderer.$gutter.setAttribute(\"aria-hidden\", true);\n                this.renderer.$gutter.removeAttribute(\"role\");\n                this.renderer.$gutter.removeAttribute(\"aria-roledescription\");\n                this.renderer.$gutter.removeAttribute(\"aria-label\");\n                this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName);\n                if (gutterKeyboardHandler)\n                    gutterKeyboardHandler.removeListener();\n            }\n        },\n        initialValue: false\n    },\n    textInputAriaLabel: {\n        set: function (val) { this.$textInputAriaLabel = val; },\n        initialValue: \"\"\n    },\n    enableMobileMenu: {\n        set: function (val) { this.$enableMobileMenu = val; },\n        initialValue: true\n    },\n    customScrollbar: \"renderer\",\n    hScrollBarAlwaysVisible: \"renderer\",\n    vScrollBarAlwaysVisible: \"renderer\",\n    highlightGutterLine: \"renderer\",\n    animatedScroll: \"renderer\",\n    showInvisibles: \"renderer\",\n    showPrintMargin: \"renderer\",\n    printMarginColumn: \"renderer\",\n    printMargin: \"renderer\",\n    fadeFoldWidgets: \"renderer\",\n    showFoldWidgets: \"renderer\",\n    displayIndentGuides: \"renderer\",\n    highlightIndentGuides: \"renderer\",\n    showGutter: \"renderer\",\n    fontSize: \"renderer\",\n    fontFamily: \"renderer\",\n    maxLines: \"renderer\",\n    minLines: \"renderer\",\n    scrollPastEnd: \"renderer\",\n    fixedWidthGutter: \"renderer\",\n    theme: \"renderer\",\n    hasCssTransforms: \"renderer\",\n    maxPixelHeight: \"renderer\",\n    useTextareaForIME: \"renderer\",\n    useResizeObserver: \"renderer\",\n    useSvgGutterIcons: \"renderer\",\n    showFoldedAnnotations: \"renderer\",\n    scrollSpeed: \"$mouseHandler\",\n    dragDelay: \"$mouseHandler\",\n    dragEnabled: \"$mouseHandler\",\n    focusTimeout: \"$mouseHandler\",\n    firstLineNumber: \"session\",\n    overwrite: \"session\",\n    newLineMode: \"session\",\n    useWorker: \"session\",\n    useSoftTabs: \"session\",\n    navigateWithinSoftTabs: \"session\",\n    tabSize: \"session\",\n    wrap: \"session\",\n    indentedSoftWrap: \"session\",\n    foldStyle: \"session\",\n    mode: \"session\"\n});\nvar relativeNumberRenderer = {\n    getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) {\n        return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n    },\n    getWidth: function (session, /**@type{number}*/ lastLineNumber, config) {\n        return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n    },\n    update: function (e, /**@type{Editor}*/ editor) {\n        editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n    },\n    attach: function (/**@type{Editor}*/ editor) {\n        editor.renderer.$gutterLayer.$renderer = this;\n        editor.on(\"changeSelection\", this.update);\n        this.update(null, editor);\n    },\n    detach: function (/**@type{Editor}*/ editor) {\n        if (editor.renderer.$gutterLayer.$renderer == this)\n            editor.renderer.$gutterLayer.$renderer = null;\n        editor.off(\"changeSelection\", this.update);\n        this.update(null, editor);\n    }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = /** @class */ (function () {\n    function Lines(element, canvasHeight) {\n        this.element = element;\n        this.canvasHeight = canvasHeight || 500000;\n        this.element.style.height = (this.canvasHeight * 2) + \"px\";\n        this.cells = [];\n        this.cellCache = [];\n        this.$offsetCoefficient = 0;\n    }\n    Lines.prototype.moveContainer = function (config) {\n        dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n    };\n    Lines.prototype.pageChanged = function (oldConfig, newConfig) {\n        return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n            Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n    };\n    Lines.prototype.computeLineTop = function (row, config, session) {\n        var screenTop = config.firstRowScreen * config.lineHeight;\n        var screenPage = Math.floor(screenTop / this.canvasHeight);\n        var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n        return lineTop - (screenPage * this.canvasHeight);\n    };\n    Lines.prototype.computeLineHeight = function (row, config, session) {\n        return config.lineHeight * session.getRowLineCount(row);\n    };\n    Lines.prototype.getLength = function () {\n        return this.cells.length;\n    };\n    Lines.prototype.get = function (index) {\n        return this.cells[index];\n    };\n    Lines.prototype.shift = function () {\n        this.$cacheCell(this.cells.shift());\n    };\n    Lines.prototype.pop = function () {\n        this.$cacheCell(this.cells.pop());\n    };\n    Lines.prototype.push = function (cell) {\n        if (Array.isArray(cell)) {\n            this.cells.push.apply(this.cells, cell);\n            var fragment = dom.createFragment(this.element);\n            for (var i = 0; i < cell.length; i++) {\n                fragment.appendChild(cell[i].element);\n            }\n            this.element.appendChild(fragment);\n        }\n        else {\n            this.cells.push(cell);\n            this.element.appendChild(cell.element);\n        }\n    };\n    Lines.prototype.unshift = function (cell) {\n        if (Array.isArray(cell)) {\n            this.cells.unshift.apply(this.cells, cell);\n            var fragment = dom.createFragment(this.element);\n            for (var i = 0; i < cell.length; i++) {\n                fragment.appendChild(cell[i].element);\n            }\n            if (this.element.firstChild)\n                this.element.insertBefore(fragment, this.element.firstChild);\n            else\n                this.element.appendChild(fragment);\n        }\n        else {\n            this.cells.unshift(cell);\n            this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n        }\n    };\n    Lines.prototype.last = function () {\n        if (this.cells.length)\n            return this.cells[this.cells.length - 1];\n        else\n            return null;\n    };\n    Lines.prototype.$cacheCell = function (cell) {\n        if (!cell)\n            return;\n        cell.element.remove();\n        this.cellCache.push(cell);\n    };\n    Lines.prototype.createCell = function (row, config, session, initElement) {\n        var cell = this.cellCache.pop();\n        if (!cell) {\n            var element = dom.createElement(\"div\");\n            if (initElement)\n                initElement(element);\n            this.element.appendChild(element);\n            cell = {\n                element: element,\n                text: \"\",\n                row: row\n            };\n        }\n        cell.row = row;\n        return cell;\n    };\n    return Lines;\n}());\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar nls = require(\"../config\").nls;\nvar Gutter = /** @class */ (function () {\n    function Gutter(parentEl) {\n        this.$showCursorMarker = null;\n        this.element = dom.createElement(\"div\");\n        this.element.className = \"ace_layer ace_gutter-layer\";\n        parentEl.appendChild(this.element);\n        this.setShowFoldWidgets(this.$showFoldWidgets);\n        this.gutterWidth = 0;\n        this.$annotations = [];\n        this.$updateAnnotations = this.$updateAnnotations.bind(this);\n        this.$lines = new Lines(this.element);\n        this.$lines.$offsetCoefficient = 1;\n    }\n    Gutter.prototype.setSession = function (session) {\n        if (this.session)\n            this.session.off(\"change\", this.$updateAnnotations);\n        this.session = session;\n        if (session)\n            session.on(\"change\", this.$updateAnnotations);\n    };\n    Gutter.prototype.addGutterDecoration = function (row, className) {\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n        this.session.addGutterDecoration(row, className);\n    };\n    Gutter.prototype.removeGutterDecoration = function (row, className) {\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n        this.session.removeGutterDecoration(row, className);\n    };\n    Gutter.prototype.setAnnotations = function (annotations) {\n        this.$annotations = [];\n        for (var i = 0; i < annotations.length; i++) {\n            var annotation = annotations[i];\n            var row = annotation.row;\n            var rowInfo = this.$annotations[row];\n            if (!rowInfo)\n                rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] };\n            var annoText = annotation.text;\n            var displayAnnoText = annotation.text;\n            var annoType = annotation.type;\n            annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n            displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || \"\";\n            if (rowInfo.text.indexOf(annoText) === -1) {\n                rowInfo.text.push(annoText);\n                rowInfo.type.push(annoType);\n                rowInfo.displayText.push(displayAnnoText);\n            }\n            var className = annotation.className;\n            if (className) {\n                rowInfo.className = className;\n            }\n            else if (annoType === \"error\") {\n                rowInfo.className = \" ace_error\";\n            }\n            else if (annoType === \"security\" && !/\\bace_error\\b/.test(rowInfo.className)) {\n                rowInfo.className = \" ace_security\";\n            }\n            else if (annoType === \"warning\" && !/\\bace_(error|security)\\b/.test(rowInfo.className)) {\n                rowInfo.className = \" ace_warning\";\n            }\n            else if (annoType === \"info\" && !rowInfo.className) {\n                rowInfo.className = \" ace_info\";\n            }\n            else if (annoType === \"hint\" && !rowInfo.className) {\n                rowInfo.className = \" ace_hint\";\n            }\n        }\n    };\n    Gutter.prototype.$updateAnnotations = function (delta) {\n        if (!this.$annotations.length)\n            return;\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n        if (len === 0) {\n        }\n        else if (delta.action == 'remove') {\n            this.$annotations.splice(firstRow, len + 1, null);\n        }\n        else {\n            var args = new Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.$annotations.splice.apply(this.$annotations, args);\n        }\n    };\n    Gutter.prototype.update = function (config) {\n        this.config = config;\n        var session = this.session;\n        var firstRow = config.firstRow;\n        var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n        session.getLength() - 1);\n        this.oldLastRow = lastRow;\n        this.config = config;\n        this.$lines.moveContainer(config);\n        this.$updateCursorRow();\n        var fold = session.getNextFoldLine(firstRow);\n        var foldStart = fold ? fold.start.row : Infinity;\n        var cell = null;\n        var index = -1;\n        var row = firstRow;\n        while (true) {\n            if (row > foldStart) {\n                row = fold.end.row + 1;\n                fold = session.getNextFoldLine(row, fold);\n                foldStart = fold ? fold.start.row : Infinity;\n            }\n            if (row > lastRow) {\n                while (this.$lines.getLength() > index + 1)\n                    this.$lines.pop();\n                break;\n            }\n            cell = this.$lines.get(++index);\n            if (cell) {\n                cell.row = row;\n            }\n            else {\n                cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n                this.$lines.push(cell);\n            }\n            this.$renderCell(cell, config, fold, row);\n            row++;\n        }\n        this._signal(\"afterRender\");\n        this.$updateGutterWidth(config);\n        if (this.$showCursorMarker && this.$highlightGutterLine)\n            this.$updateCursorMarker();\n    };\n    Gutter.prototype.$updateGutterWidth = function (config) {\n        var session = this.session;\n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n        var firstLineNumber = session.$firstLineNumber;\n        var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n        if (this.$fixedWidth || session.$useWrapMode)\n            lastLineText = session.getLength() + firstLineNumber - 1;\n        var gutterWidth = gutterRenderer\n            ? gutterRenderer.getWidth(session, lastLineText, config)\n            : lastLineText.toString().length * config.characterWidth;\n        var padding = this.$padding || this.$computePadding();\n        gutterWidth += padding.left + padding.right;\n        if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n            this.gutterWidth = gutterWidth; (this.element.parentNode).style.width =\n                this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n            this._signal(\"changeGutterWidth\", gutterWidth);\n        }\n    };\n    Gutter.prototype.$updateCursorRow = function () {\n        if (!this.$highlightGutterLine)\n            return;\n        var position = this.session.selection.getCursor();\n        if (this.$cursorRow === position.row)\n            return;\n        this.$cursorRow = position.row;\n    };\n    Gutter.prototype.updateLineHighlight = function () {\n        if (this.$showCursorMarker)\n            this.$updateCursorMarker();\n        if (!this.$highlightGutterLine)\n            return;\n        var row = this.session.selection.cursor.row;\n        this.$cursorRow = row;\n        if (this.$cursorCell && this.$cursorCell.row == row)\n            return;\n        if (this.$cursorCell)\n            this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n        var cells = this.$lines.cells;\n        this.$cursorCell = null;\n        for (var i = 0; i < cells.length; i++) {\n            var cell = cells[i];\n            if (cell.row >= this.$cursorRow) {\n                if (cell.row > this.$cursorRow) {\n                    var fold = this.session.getFoldLine(this.$cursorRow);\n                    if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n                        cell = cells[i - 1];\n                    else\n                        break;\n                }\n                cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n                this.$cursorCell = cell;\n                break;\n            }\n        }\n    };\n    Gutter.prototype.$updateCursorMarker = function () {\n        if (!this.session)\n            return;\n        var session = this.session;\n        if (!this.$highlightElement) {\n            this.$highlightElement = dom.createElement(\"div\");\n            this.$highlightElement.className = \"ace_gutter-cursor\";\n            this.$highlightElement.style.pointerEvents = \"none\";\n            this.element.appendChild(this.$highlightElement);\n        }\n        var pos = session.selection.cursor;\n        var config = this.config;\n        var lines = this.$lines;\n        var screenTop = config.firstRowScreen * config.lineHeight;\n        var screenPage = Math.floor(screenTop / lines.canvasHeight);\n        var lineTop = session.documentToScreenRow(pos) * config.lineHeight;\n        var top = lineTop - (screenPage * lines.canvasHeight);\n        dom.setStyle(this.$highlightElement.style, \"height\", config.lineHeight + \"px\");\n        dom.setStyle(this.$highlightElement.style, \"top\", top + \"px\");\n    };\n    Gutter.prototype.scrollLines = function (config) {\n        var oldConfig = this.config;\n        this.config = config;\n        this.$updateCursorRow();\n        if (this.$lines.pageChanged(oldConfig, config))\n            return this.update(config);\n        this.$lines.moveContainer(config);\n        var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n        this.session.getLength() - 1);\n        var oldLastRow = this.oldLastRow;\n        this.oldLastRow = lastRow;\n        if (!oldConfig || oldLastRow < config.firstRow)\n            return this.update(config);\n        if (lastRow < oldConfig.firstRow)\n            return this.update(config);\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n                this.$lines.shift();\n        if (oldLastRow > lastRow)\n            for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n                this.$lines.pop();\n        if (config.firstRow < oldConfig.firstRow) {\n            this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n        }\n        if (lastRow > oldLastRow) {\n            this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n        }\n        this.updateLineHighlight();\n        this._signal(\"afterRender\");\n        this.$updateGutterWidth(config);\n    };\n    Gutter.prototype.$renderLines = function (config, firstRow, lastRow) {\n        var fragment = [];\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row + 1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n            var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n            this.$renderCell(cell, config, foldLine, row);\n            fragment.push(cell);\n            row++;\n        }\n        return fragment;\n    };\n    Gutter.prototype.$renderCell = function (cell, config, fold, row) {\n        var element = cell.element;\n        var session = this.session;\n        var textNode = element.childNodes[0];\n        var foldWidget = element.childNodes[1];\n        var annotationNode = element.childNodes[2];\n        var customWidget = element.childNodes[3];\n        var annotationIconNode = annotationNode.firstChild;\n        var firstLineNumber = session.$firstLineNumber;\n        var breakpoints = session.$breakpoints;\n        var decorations = session.$decorations;\n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n        var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n        var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n        var lineHeight = config.lineHeight + \"px\";\n        var className = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \";\n        var iconClassName = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n        var rowText = (gutterRenderer\n            ? gutterRenderer.getText(session, row)\n            : row + firstLineNumber).toString();\n        if (this.$highlightGutterLine) {\n            if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n                className += \"ace_gutter-active-line \";\n                if (this.$cursorCell != cell) {\n                    if (this.$cursorCell)\n                        this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n                    this.$cursorCell = cell;\n                }\n            }\n        }\n        if (breakpoints[row])\n            className += breakpoints[row];\n        if (decorations[row])\n            className += decorations[row];\n        if (this.$annotations[row] && row !== foldStart)\n            className += this.$annotations[row].className;\n        if (foldWidgets) {\n            var c = foldWidgets[row];\n            if (c == null)\n                c = foldWidgets[row] = session.getFoldWidget(row);\n        }\n        if (c) {\n            var foldClass = \"ace_fold-widget ace_\" + c;\n            var isClosedFold = c == \"start\" && row == foldStart && row < fold.end.row;\n            if (isClosedFold) {\n                foldClass += \" ace_closed\";\n                var foldAnnotationClass = \"\";\n                var annotationInFold = false;\n                for (var i = row + 1; i <= fold.end.row; i++) {\n                    if (!this.$annotations[i])\n                        continue;\n                    if (this.$annotations[i].className === \" ace_error\") {\n                        annotationInFold = true;\n                        foldAnnotationClass = \" ace_error_fold\";\n                        break;\n                    }\n                    if (this.$annotations[i].className === \" ace_security\") {\n                        annotationInFold = true;\n                        foldAnnotationClass = \" ace_security_fold\";\n                    }\n                    else if (this.$annotations[i].className === \" ace_warning\" &&\n                        foldAnnotationClass !== \" ace_security_fold\") {\n                        annotationInFold = true;\n                        foldAnnotationClass = \" ace_warning_fold\";\n                    }\n                }\n                className += foldAnnotationClass;\n            }\n            else\n                foldClass += \" ace_open\";\n            if (foldWidget.className != foldClass)\n                foldWidget.className = foldClass;\n            dom.setStyle(foldWidget.style, \"height\", lineHeight);\n            dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n            foldWidget.setAttribute(\"role\", \"button\");\n            foldWidget.setAttribute(\"tabindex\", \"-1\");\n            var foldRange = session.getFoldWidgetRange(row);\n            if (foldRange)\n                foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.range.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n                    foldRange.start.row + 1,\n                    foldRange.end.row + 1\n                ]));\n            else {\n                if (fold)\n                    foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.closed.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n                        fold.start.row + 1,\n                        fold.end.row + 1\n                    ]));\n                else\n                    foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.open.aria-label\", \"Toggle code folding, row $0\", [row + 1]));\n            }\n            if (isClosedFold) {\n                foldWidget.setAttribute(\"aria-expanded\", \"false\");\n                foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.closed.title\", \"Unfold code\"));\n            }\n            else {\n                foldWidget.setAttribute(\"aria-expanded\", \"true\");\n                foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.open.title\", \"Fold code\"));\n            }\n        }\n        else {\n            if (foldWidget) {\n                dom.setStyle(foldWidget.style, \"display\", \"none\");\n                foldWidget.setAttribute(\"tabindex\", \"0\");\n                foldWidget.removeAttribute(\"role\");\n                foldWidget.removeAttribute(\"aria-label\");\n            }\n        }\n        var customWidgetAttributes = this.session.$gutterCustomWidgets[row];\n        if (customWidgetAttributes) {\n            this.$addCustomWidget(row, customWidgetAttributes, cell);\n        }\n        else if (customWidget) {\n            this.$removeCustomWidget(row, cell);\n        }\n        if (annotationInFold && this.$showFoldedAnnotations) {\n            annotationNode.className = \"ace_gutter_annotation\";\n            annotationIconNode.className = iconClassName;\n            annotationIconNode.className += foldAnnotationClass;\n            dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n            dom.setStyle(annotationNode.style, \"display\", \"block\");\n            dom.setStyle(annotationNode.style, \"height\", lineHeight);\n            var ariaLabel;\n            switch (foldAnnotationClass) {\n                case \" ace_error_fold\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_security_fold\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_warning_fold\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n                    break;\n            }\n            annotationNode.setAttribute(\"aria-label\", ariaLabel);\n            annotationNode.setAttribute(\"tabindex\", \"-1\");\n            annotationNode.setAttribute(\"role\", \"button\");\n        }\n        else if (this.$annotations[row]) {\n            annotationNode.className = \"ace_gutter_annotation\";\n            annotationIconNode.className = iconClassName;\n            if (this.$useSvgGutterIcons)\n                annotationIconNode.className += this.$annotations[row].className;\n            else\n                element.classList.add(this.$annotations[row].className.replace(\" \", \"\"));\n            dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n            dom.setStyle(annotationNode.style, \"display\", \"block\");\n            dom.setStyle(annotationNode.style, \"height\", lineHeight);\n            var ariaLabel;\n            switch (this.$annotations[row].className) {\n                case \" ace_error\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_security\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_warning\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_info\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.info\", \"Info, read annotations row $0\", [rowText]);\n                    break;\n                case \" ace_hint\":\n                    ariaLabel = nls(\"gutter.annotation.aria-label.hint\", \"Suggestion, read annotations row $0\", [rowText]);\n                    break;\n            }\n            annotationNode.setAttribute(\"aria-label\", ariaLabel);\n            annotationNode.setAttribute(\"tabindex\", \"-1\");\n            annotationNode.setAttribute(\"role\", \"button\");\n        }\n        else {\n            dom.setStyle(annotationNode.style, \"display\", \"none\");\n            annotationNode.removeAttribute(\"aria-label\");\n            annotationNode.removeAttribute(\"role\");\n            annotationNode.setAttribute(\"tabindex\", \"0\");\n        }\n        if (rowText !== textNode.data) {\n            textNode.data = rowText;\n        }\n        if (element.className != className)\n            element.className = className;\n        dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n        dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n        cell.text = rowText;\n        if (annotationNode.style.display === \"none\" && foldWidget.style.display === \"none\" && !customWidgetAttributes)\n            cell.element.setAttribute(\"aria-hidden\", true);\n        else\n            cell.element.setAttribute(\"aria-hidden\", false);\n        return cell;\n    };\n    Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) {\n        this.$highlightGutterLine = highlightGutterLine;\n        if (!highlightGutterLine && this.$highlightElement) {\n            this.$highlightElement.remove();\n            this.$highlightElement = null;\n        }\n    };\n    Gutter.prototype.setShowLineNumbers = function (show) {\n        this.$renderer = !show && {\n            getWidth: function () { return 0; },\n            getText: function () { return \"\"; }\n        };\n    };\n    Gutter.prototype.getShowLineNumbers = function () {\n        return this.$showLineNumbers;\n    };\n    Gutter.prototype.setShowFoldWidgets = function (show) {\n        if (show)\n            dom.addCssClass(this.element, \"ace_folding-enabled\");\n        else\n            dom.removeCssClass(this.element, \"ace_folding-enabled\");\n        this.$showFoldWidgets = show;\n        this.$padding = null;\n    };\n    Gutter.prototype.getShowFoldWidgets = function () {\n        return this.$showFoldWidgets;\n    };\n    Gutter.prototype.$hideFoldWidget = function (row, cell) {\n        var rowCell = cell || this.$getGutterCell(row);\n        if (rowCell && rowCell.element) {\n            var foldWidget = rowCell.element.childNodes[1];\n            if (foldWidget) {\n                dom.setStyle(foldWidget.style, \"display\", \"none\");\n            }\n        }\n    };\n    Gutter.prototype.$showFoldWidget = function (row, cell) {\n        var rowCell = cell || this.$getGutterCell(row);\n        if (rowCell && rowCell.element) {\n            var foldWidget = rowCell.element.childNodes[1];\n            if (foldWidget && this.session.foldWidgets && this.session.foldWidgets[rowCell.row]) {\n                dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n            }\n        }\n    };\n    Gutter.prototype.$getGutterCell = function (row) {\n        var cells = this.$lines.cells;\n        var min = 0;\n        var max = cells.length - 1;\n        if (row < cells[0].row || row > cells[max].row)\n            return;\n        while (min <= max) {\n            var mid = Math.floor((min + max) / 2);\n            var cell = cells[mid];\n            if (cell.row > row) {\n                max = mid - 1;\n            }\n            else if (cell.row < row) {\n                min = mid + 1;\n            }\n            else {\n                return cell;\n            }\n        }\n        return cell;\n    };\n    Gutter.prototype.$addCustomWidget = function (row, _a, cell) {\n        var className = _a.className, label = _a.label, title = _a.title, callbacks = _a.callbacks;\n        this.session.$gutterCustomWidgets[row] = { className: className, label: label, title: title, callbacks: callbacks };\n        this.$hideFoldWidget(row, cell);\n        var rowCell = cell || this.$getGutterCell(row);\n        if (rowCell && rowCell.element) {\n            var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n            if (customWidget) {\n                customWidget.remove();\n            }\n            customWidget = dom.createElement(\"span\");\n            customWidget.className = \"ace_custom-widget \".concat(className);\n            customWidget.setAttribute(\"tabindex\", \"-1\");\n            customWidget.setAttribute(\"role\", 'button');\n            customWidget.setAttribute(\"aria-label\", label);\n            customWidget.setAttribute(\"title\", title);\n            dom.setStyle(customWidget.style, \"display\", \"inline-block\");\n            dom.setStyle(customWidget.style, \"height\", \"inherit\");\n            if (callbacks && callbacks.onClick) {\n                customWidget.addEventListener(\"click\", function (e) {\n                    callbacks.onClick(e, row);\n                    e.stopPropagation();\n                });\n            }\n            rowCell.element.appendChild(customWidget);\n        }\n    };\n    Gutter.prototype.$removeCustomWidget = function (row, cell) {\n        delete this.session.$gutterCustomWidgets[row];\n        this.$showFoldWidget(row, cell);\n        var rowCell = cell || this.$getGutterCell(row);\n        if (rowCell && rowCell.element) {\n            var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n            if (customWidget) {\n                rowCell.element.removeChild(customWidget);\n            }\n        }\n    };\n    Gutter.prototype.$computePadding = function () {\n        if (!this.element.firstChild)\n            return { left: 0, right: 0 };\n        var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild));\n        this.$padding = {};\n        this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n            + (parseInt(style.paddingLeft) || 0) + 1;\n        this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n            + (parseInt(style.paddingRight) || 0);\n        return this.$padding;\n    };\n    Gutter.prototype.getRegion = function (point) {\n        var padding = this.$padding || this.$computePadding();\n        var rect = this.element.getBoundingClientRect();\n        if (point.x < padding.left + rect.left)\n            return \"markers\";\n        if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n            return \"foldWidgets\";\n    };\n    return Gutter;\n}());\nGutter.prototype.$fixedWidth = false;\nGutter.prototype.$highlightGutterLine = true;\nGutter.prototype.$renderer = undefined;\nGutter.prototype.$showLineNumbers = true;\nGutter.prototype.$showFoldWidgets = true;\noop.implement(Gutter.prototype, EventEmitter);\nfunction onCreateCell(element) {\n    var textNode = document.createTextNode('');\n    element.appendChild(textNode);\n    var foldWidget = dom.createElement(\"span\");\n    element.appendChild(foldWidget);\n    var annotationNode = dom.createElement(\"span\");\n    element.appendChild(annotationNode);\n    var annotationIconNode = dom.createElement(\"span\");\n    annotationNode.appendChild(annotationIconNode);\n    return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = /** @class */ (function () {\n    function Marker(parentEl) {\n        this.element = dom.createElement(\"div\");\n        this.element.className = \"ace_layer ace_marker-layer\";\n        parentEl.appendChild(this.element);\n    }\n    Marker.prototype.setPadding = function (padding) {\n        this.$padding = padding;\n    };\n    Marker.prototype.setSession = function (session) {\n        this.session = session;\n    };\n    Marker.prototype.setMarkers = function (markers) {\n        this.markers = markers;\n    };\n    Marker.prototype.elt = function (className, css) {\n        var x = this.i != -1 && this.element.childNodes[this.i];\n        if (!x) {\n            x = document.createElement(\"div\");\n            this.element.appendChild(x);\n            this.i = -1;\n        }\n        else {\n            this.i++;\n        }\n        x.style.cssText = css;\n        x.className = className;\n    };\n    Marker.prototype.update = function (config) {\n        if (!config)\n            return;\n        this.config = config;\n        this.i = 0;\n        var html;\n        for (var key in this.markers) {\n            var marker = this.markers[key];\n            if (!marker.range) {\n                marker.update(html, this, this.session, config);\n                continue;\n            }\n            var range = marker.range.clipRows(config.firstRow, config.lastRow);\n            if (range.isEmpty())\n                continue;\n            range = range.toScreenRange(this.session);\n            if (marker.renderer) {\n                var top = this.$getTop(range.start.row, config);\n                var left = this.$padding + range.start.column * config.characterWidth;\n                marker.renderer(html, range, left, top, config);\n            }\n            else if (marker.type == \"fullLine\") {\n                this.drawFullLineMarker(html, range, marker.clazz, config);\n            }\n            else if (marker.type == \"screenLine\") {\n                this.drawScreenLineMarker(html, range, marker.clazz, config);\n            }\n            else if (range.isMultiLine()) {\n                if (marker.type == \"text\")\n                    this.drawTextMarker(html, range, marker.clazz, config);\n                else\n                    this.drawMultiLineMarker(html, range, marker.clazz, config);\n            }\n            else {\n                this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n            }\n        }\n        if (this.i != -1) {\n            while (this.i < this.element.childElementCount)\n                this.element.removeChild(this.element.lastChild);\n        }\n    };\n    Marker.prototype.$getTop = function (row, layerConfig) {\n        return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n    };\n    Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n        var session = this.session;\n        var start = range.start.row;\n        var end = range.end.row;\n        var row = start;\n        var prev = 0;\n        var curr = 0;\n        var next = session.getScreenLastRowColumn(row);\n        var lineRange = new Range(row, range.start.column, row, curr);\n        for (; row <= end; row++) {\n            lineRange.start.row = lineRange.end.row = row;\n            lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n            lineRange.end.column = next;\n            prev = curr;\n            curr = next;\n            next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n            this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n                + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n        }\n    };\n    Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n        var padding = this.$padding;\n        var height = config.lineHeight;\n        var top = this.$getTop(range.start.row, config);\n        var left = padding + range.start.column * config.characterWidth;\n        extraStyle = extraStyle || \"\";\n        if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n            var range1 = range.clone();\n            range1.end.row = range1.start.row;\n            range1.end.column = this.session.getLine(range1.start.row).length;\n            this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n        }\n        else {\n            this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:\" + padding + \"px;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n        }\n        if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n            var range1 = range.clone();\n            range1.start.row = range1.end.row;\n            range1.start.column = 0;\n            this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n        }\n        else {\n            top = this.$getTop(range.end.row, config);\n            var width = range.end.column * config.characterWidth;\n            this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n                \"width:\" + width + \"px;\" +\n                \"top:\" + top + \"px;\" +\n                \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n        }\n        height = (range.end.row - range.start.row - 1) * config.lineHeight;\n        if (height <= 0)\n            return;\n        top = this.$getTop(range.start.row + 1, config);\n        var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n        this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n            \"right:\" + padding + \"px;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n    };\n    Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        if (this.session.$bidiHandler.isBidiRow(range.start.row))\n            return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n        var height = config.lineHeight;\n        var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n        var top = this.$getTop(range.start.row, config);\n        var left = this.$padding + range.start.column * config.characterWidth;\n        this.elt(clazz, \"height:\" + height + \"px;\" +\n            \"width:\" + width + \"px;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n    };\n    Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n        var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n        selections.forEach(function (selection) {\n            this.elt(clazz, \"height:\" + height + \"px;\" +\n                \"width:\" + (selection.width + (extraLength || 0)) + \"px;\" +\n                \"top:\" + top + \"px;\" +\n                \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n        }, this);\n    };\n    Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n        if (range.start.row != range.end.row)\n            height += this.$getTop(range.end.row, config) - top;\n        this.elt(clazz, \"height:\" + height + \"px;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:0;right:0;\" + (extraStyle || \"\"));\n    };\n    Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n        this.elt(clazz, \"height:\" + height + \"px;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:0;right:0;\" + (extraStyle || \"\"));\n    };\n    return Marker;\n}());\nMarker.prototype.$padding = 0;\nfunction getBorderClass(tl, tr, br, bl) {\n    return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n}\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text_util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className.\nvar textTokens = new Set([\"text\", \"rparen\", \"lparen\"]);\nexports.isTextToken = function (tokenType) {\n    return textTokens.has(tokenType);\n};\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar nls = require(\"../config\").nls;\nvar isTextToken = require(\"./text_util\").isTextToken;\nvar Text = /** @class */ (function () {\n    function Text(parentEl) {\n        this.dom = dom;\n        this.element = this.dom.createElement(\"div\");\n        this.element.className = \"ace_layer ace_text-layer\";\n        parentEl.appendChild(this.element);\n        this.$updateEolChar = this.$updateEolChar.bind(this);\n        this.$lines = new Lines(this.element);\n    }\n    Text.prototype.$updateEolChar = function () {\n        var doc = this.session.doc;\n        var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n        var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n        if (this.EOL_CHAR != EOL_CHAR) {\n            this.EOL_CHAR = EOL_CHAR;\n            return true;\n        }\n    };\n    Text.prototype.setPadding = function (padding) {\n        this.$padding = padding;\n        this.element.style.margin = \"0 \" + padding + \"px\";\n    };\n    Text.prototype.getLineHeight = function () {\n        return this.$fontMetrics.$characterSize.height || 0;\n    };\n    Text.prototype.getCharacterWidth = function () {\n        return this.$fontMetrics.$characterSize.width || 0;\n    };\n    Text.prototype.$setFontMetrics = function (measure) {\n        this.$fontMetrics = measure;\n        this.$fontMetrics.on(\"changeCharacterSize\", \n        function (e) {\n            this._signal(\"changeCharacterSize\", e);\n        }.bind(this));\n        this.$pollSizeChanges();\n    };\n    Text.prototype.checkForSizeChanges = function () {\n        this.$fontMetrics.checkForSizeChanges();\n    };\n    Text.prototype.$pollSizeChanges = function () {\n        return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n    };\n    Text.prototype.setSession = function (session) {\n        this.session = session;\n        if (session)\n            this.$computeTabString();\n    };\n    Text.prototype.setShowInvisibles = function (showInvisibles) {\n        if (this.showInvisibles == showInvisibles)\n            return false;\n        this.showInvisibles = showInvisibles;\n        if (typeof showInvisibles == \"string\") {\n            this.showSpaces = /tab/i.test(showInvisibles);\n            this.showTabs = /space/i.test(showInvisibles);\n            this.showEOL = /eol/i.test(showInvisibles);\n        }\n        else {\n            this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n        }\n        this.$computeTabString();\n        return true;\n    };\n    Text.prototype.setDisplayIndentGuides = function (display) {\n        if (this.displayIndentGuides == display)\n            return false;\n        this.displayIndentGuides = display;\n        this.$computeTabString();\n        return true;\n    };\n    Text.prototype.setHighlightIndentGuides = function (highlight) {\n        if (this.$highlightIndentGuides === highlight)\n            return false;\n        this.$highlightIndentGuides = highlight;\n        return highlight;\n    };\n    Text.prototype.$computeTabString = function () {\n        var tabSize = this.session.getTabSize();\n        this.tabSize = tabSize; var tabStr = this.$tabStrings = [0];\n        for (var i = 1; i < tabSize + 1; i++) {\n            if (this.showTabs) {\n                var span = this.dom.createElement(\"span\");\n                span.className = \"ace_invisible ace_invisible_tab\";\n                span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n                tabStr.push(span);\n            }\n            else {\n                tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n            }\n        }\n        if (this.displayIndentGuides) {\n            this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n            var className = \"ace_indent-guide\";\n            var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n            var spaceContent = this.showSpaces\n                ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n                : lang.stringRepeat(\" \", this.tabSize);\n            var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n            var tabContent = this.showTabs\n                ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n                : spaceContent;\n            var span = this.dom.createElement(\"span\");\n            span.className = className + spaceClass;\n            span.textContent = spaceContent;\n            this.$tabStrings[\" \"] = span;\n            var span = this.dom.createElement(\"span\");\n            span.className = className + tabClass;\n            span.textContent = tabContent;\n            this.$tabStrings[\"\\t\"] = span;\n        }\n    };\n    Text.prototype.updateLines = function (config, firstRow, lastRow) {\n        if (this.config.lastRow != config.lastRow ||\n            this.config.firstRow != config.firstRow) {\n            return this.update(config);\n        }\n        this.config = config;\n        var first = Math.max(firstRow, config.firstRow);\n        var last = Math.min(lastRow, config.lastRow);\n        var lineElements = this.element.childNodes;\n        var lineElementsIdx = 0;\n        for (var row = config.firstRow; row < first; row++) {\n            var foldLine = this.session.getFoldLine(row);\n            if (foldLine) {\n                if (foldLine.containsRow(first)) {\n                    first = foldLine.start.row;\n                    break;\n                }\n                else {\n                    row = foldLine.end.row;\n                }\n            }\n            lineElementsIdx++;\n        }\n        var heightChanged = false;\n        var row = first;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row + 1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > last)\n                break; var lineElement = lineElements[lineElementsIdx++];\n            if (lineElement) {\n                this.dom.removeChildren(lineElement);\n                this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n                if (heightChanged)\n                    lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n                var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n                if (lineElement.style.height != height) {\n                    heightChanged = true;\n                    lineElement.style.height = height;\n                }\n            }\n            row++;\n        }\n        if (heightChanged) {\n            while (lineElementsIdx < this.$lines.cells.length) {\n                var cell = this.$lines.cells[lineElementsIdx++];\n                cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n            }\n        }\n    };\n    Text.prototype.scrollLines = function (config) {\n        var oldConfig = this.config;\n        this.config = config;\n        if (this.$lines.pageChanged(oldConfig, config))\n            return this.update(config);\n        this.$lines.moveContainer(config);\n        var lastRow = config.lastRow;\n        var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n        if (!oldConfig || oldLastRow < config.firstRow)\n            return this.update(config);\n        if (lastRow < oldConfig.firstRow)\n            return this.update(config);\n        if (!oldConfig || oldConfig.lastRow < config.firstRow)\n            return this.update(config);\n        if (config.lastRow < oldConfig.firstRow)\n            return this.update(config);\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n                this.$lines.shift();\n        if (oldConfig.lastRow > config.lastRow)\n            for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n                this.$lines.pop();\n        if (config.firstRow < oldConfig.firstRow) {\n            this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n        }\n        if (config.lastRow > oldConfig.lastRow) {\n            this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n        }\n        this.$highlightIndentGuide();\n    };\n    Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) {\n        var fragment = [];\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row + 1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n            var line = this.$lines.createCell(row, config, this.session);\n            var lineEl = line.element;\n            this.dom.removeChildren(lineEl);\n            dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n            dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n            this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n            if (this.$useLineGroups()) {\n                lineEl.className = \"ace_line_group\";\n            }\n            else {\n                lineEl.className = \"ace_line\";\n            }\n            fragment.push(line);\n            row++;\n        }\n        return fragment;\n    };\n    Text.prototype.update = function (config) {\n        this.$lines.moveContainer(config);\n        this.config = config;\n        var firstRow = config.firstRow;\n        var lastRow = config.lastRow;\n        var lines = this.$lines;\n        while (lines.getLength())\n            lines.pop();\n        lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n    };\n    Text.prototype.$renderToken = function (parent, screenColumn, token, value) {\n        var self = this;\n        var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069\\u2060\\u2061\\u2062\\u2063\\u2064\\u206A\\u206B\\u206B\\u206C\\u206D\\u206E\\u206F]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n        var valueFragment = this.dom.createFragment(this.element);\n        var m;\n        var i = 0;\n        while (m = re.exec(value)) {\n            var tab = m[1];\n            var simpleSpace = m[2];\n            var controlCharacter = m[3];\n            var cjkSpace = m[4];\n            var cjk = m[5];\n            if (!self.showSpaces && simpleSpace)\n                continue;\n            var before = i != m.index ? value.slice(i, m.index) : \"\";\n            i = m.index + m[0].length;\n            if (before) {\n                valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n            }\n            if (tab) {\n                var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n                var text = self.$tabStrings[tabSize].cloneNode(true);\n                text[\"charCount\"] = 1;\n                valueFragment.appendChild(text);\n                screenColumn += tabSize - 1;\n            }\n            else if (simpleSpace) {\n                if (self.showSpaces) {\n                    var span = this.dom.createElement(\"span\");\n                    span.className = \"ace_invisible ace_invisible_space\";\n                    span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n                    valueFragment.appendChild(span);\n                }\n                else {\n                    valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element));\n                }\n            }\n            else if (controlCharacter) {\n                var span = this.dom.createElement(\"span\");\n                span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n                span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n                valueFragment.appendChild(span);\n            }\n            else if (cjkSpace) {\n                screenColumn += 1;\n                var span = this.dom.createElement(\"span\");\n                span.style.width = (self.config.characterWidth * 2) + \"px\";\n                span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n                span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n                valueFragment.appendChild(span);\n            }\n            else if (cjk) {\n                screenColumn += 1;\n                var span = this.dom.createElement(\"span\");\n                span.style.width = (self.config.characterWidth * 2) + \"px\";\n                span.className = \"ace_cjk\";\n                span.textContent = cjk;\n                valueFragment.appendChild(span);\n            }\n        }\n        valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n        if (!isTextToken(token.type)) {\n            var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n            var span = this.dom.createElement(\"span\");\n            if (token.type == \"fold\") {\n                span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n                span.setAttribute(\"title\", nls(\"inline-fold.closed.title\", \"Unfold code\"));\n            }\n            span.className = classes;\n            span.appendChild(valueFragment);\n            parent.appendChild(span);\n        }\n        else {\n            parent.appendChild(valueFragment);\n        }\n        return screenColumn + value.length;\n    };\n    Text.prototype.renderIndentGuide = function (parent, value, max) {\n        var cols = value.search(this.$indentGuideRe);\n        if (cols <= 0 || cols >= max)\n            return value;\n        if (value[0] == \" \") {\n            cols -= cols % this.tabSize;\n            var count = cols / this.tabSize;\n            for (var i = 0; i < count; i++) {\n                parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n            }\n            this.$highlightIndentGuide();\n            return value.substr(cols);\n        }\n        else if (value[0] == \"\\t\") {\n            for (var i = 0; i < cols; i++) {\n                var tabSpan = this.$tabStrings[\"\\t\"].cloneNode(true);\n                tabSpan[\"charCount\"] = 1;\n                parent.appendChild(tabSpan);\n            }\n            this.$highlightIndentGuide();\n            return value.substr(cols);\n        }\n        this.$highlightIndentGuide();\n        return value;\n    };\n    Text.prototype.$highlightIndentGuide = function () {\n        if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n            return;\n        this.$highlightIndentGuideMarker = {\n            indentLevel: undefined,\n            start: undefined,\n            end: undefined,\n            dir: undefined\n        };\n        var lines = this.session.doc.$lines;\n        if (!lines)\n            return;\n        var cursor = this.session.selection.getCursor();\n        var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n        var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n        this.$highlightIndentGuideMarker = {\n            indentLevel: elementIndentLevel,\n            start: cursor.row\n        };\n        var bracketHighlight = this.session.$bracketHighlight;\n        if (bracketHighlight) {\n            var ranges = this.session.$bracketHighlight.ranges;\n            for (var i = 0; i < ranges.length; i++) {\n                if (cursor.row !== ranges[i].start.row) {\n                    this.$highlightIndentGuideMarker.end = ranges[i].start.row + 1;\n                    if (cursor.row > ranges[i].start.row) {\n                        this.$highlightIndentGuideMarker.dir = -1;\n                    }\n                    else {\n                        this.$highlightIndentGuideMarker.dir = 1;\n                    }\n                    break;\n                }\n            }\n        }\n        if (!this.$highlightIndentGuideMarker.end) {\n            if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n                this.$highlightIndentGuideMarker.dir = 1;\n                for (var i = cursor.row + 1; i < lines.length; i++) {\n                    var line = lines[i];\n                    var currentIndent = /^\\s*/.exec(line)[0].length;\n                    if (line !== '') {\n                        this.$highlightIndentGuideMarker.end = i;\n                        if (currentIndent <= initialIndent)\n                            break;\n                    }\n                }\n            }\n        }\n        this.$renderHighlightIndentGuide();\n    };\n    Text.prototype.$clearActiveIndentGuide = function () {\n        var activeIndentGuides = this.element.querySelectorAll(\".ace_indent-guide-active\");\n        for (var i = 0; i < activeIndentGuides.length; i++) {\n            activeIndentGuides[i].classList.remove(\"ace_indent-guide-active\");\n        }\n    };\n    Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n        var line = this.session.doc.getLine(cell.row);\n        if (line !== \"\") {\n            var element = cell.element;\n            if (cell.element.classList && cell.element.classList.contains(\"ace_line_group\")) {\n                if (cell.element.childNodes.length > 0) {\n                    element = cell.element.childNodes[0];\n                }\n                else {\n                    return;\n                }\n            }\n            var childNodes = element.childNodes;\n            if (childNodes) {\n                var node = childNodes[indentLevel - 1];\n                if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n                    node.classList.add(\"ace_indent-guide-active\");\n            }\n        }\n    };\n    Text.prototype.$renderHighlightIndentGuide = function () {\n        if (!this.$lines)\n            return;\n        var cells = this.$lines.cells;\n        this.$clearActiveIndentGuide();\n        var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n        if (indentLevel !== 0) {\n            if (this.$highlightIndentGuideMarker.dir === 1) {\n                for (var i = 0; i < cells.length; i++) {\n                    var cell = cells[i];\n                    if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n                        + 1) {\n                        if (cell.row >= this.$highlightIndentGuideMarker.end)\n                            break;\n                        this.$setIndentGuideActive(cell, indentLevel);\n                    }\n                }\n            }\n            else {\n                for (var i = cells.length - 1; i >= 0; i--) {\n                    var cell = cells[i];\n                    if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n                        if (cell.row < this.$highlightIndentGuideMarker.end)\n                            break;\n                        this.$setIndentGuideActive(cell, indentLevel);\n                    }\n                }\n            }\n        }\n    };\n    Text.prototype.$createLineElement = function (parent) {\n        var lineEl = this.dom.createElement(\"div\");\n        lineEl.className = \"ace_line\";\n        lineEl.style.height = this.config.lineHeight + \"px\";\n        return lineEl;\n    };\n    Text.prototype.$renderWrappedLine = function (parent, tokens, splits) {\n        var chars = 0;\n        var split = 0;\n        var splitChars = splits[0];\n        var screenColumn = 0;\n        var lineEl = this.$createLineElement();\n        parent.appendChild(lineEl);\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            var value = token.value;\n            if (i == 0 && this.displayIndentGuides) {\n                chars = value.length;\n                value = this.renderIndentGuide(lineEl, value, splitChars);\n                if (!value)\n                    continue;\n                chars -= value.length;\n            }\n            if (chars + value.length < splitChars) {\n                screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n                chars += value.length;\n            }\n            else {\n                while (chars + value.length >= splitChars) {\n                    screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n                    value = value.substring(splitChars - chars);\n                    chars = splitChars;\n                    lineEl = this.$createLineElement();\n                    parent.appendChild(lineEl);\n                    var text = this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element);\n                    text[\"charCount\"] = 0; // not to take into account when we are counting columns\n                    lineEl.appendChild(text);\n                    split++;\n                    screenColumn = 0;\n                    splitChars = splits[split] || Number.MAX_VALUE;\n                }\n                if (value.length != 0) {\n                    chars += value.length;\n                    screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n                }\n            }\n        }\n        if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n            this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n    };\n    Text.prototype.$renderSimpleLine = function (parent, tokens) {\n        var screenColumn = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            var value = token.value;\n            if (i == 0 && this.displayIndentGuides) {\n                value = this.renderIndentGuide(parent, value);\n                if (!value)\n                    continue;\n            }\n            if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n                return this.$renderOverflowMessage(parent, screenColumn, token, value);\n            screenColumn = this.$renderToken(parent, screenColumn, token, value);\n        }\n    };\n    Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n        token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n        var overflowEl = this.dom.createElement(\"span\");\n        overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n        overflowEl.textContent = hide ? \"<hide>\" : \"<click to see more...>\";\n        parent.appendChild(overflowEl);\n    };\n    Text.prototype.$renderLine = function (parent, row, foldLine) {\n        if (!foldLine && foldLine != false)\n            foldLine = this.session.getFoldLine(row);\n        if (foldLine)\n            var tokens = this.$getFoldLineTokens(row, foldLine);\n        else\n            var tokens = this.session.getTokens(row);\n        var lastLineEl = parent;\n        if (tokens.length) {\n            var splits = this.session.getRowSplitData(row);\n            if (splits && splits.length) {\n                this.$renderWrappedLine(parent, tokens, splits);\n                var lastLineEl = parent.lastChild;\n            }\n            else {\n                var lastLineEl = parent;\n                if (this.$useLineGroups()) {\n                    lastLineEl = this.$createLineElement();\n                    parent.appendChild(lastLineEl);\n                }\n                this.$renderSimpleLine(lastLineEl, tokens);\n            }\n        }\n        else if (this.$useLineGroups()) {\n            lastLineEl = this.$createLineElement();\n            parent.appendChild(lastLineEl);\n        }\n        if (this.showEOL && lastLineEl) {\n            if (foldLine)\n                row = foldLine.end.row;\n            var invisibleEl = this.dom.createElement(\"span\");\n            invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n            invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n            lastLineEl.appendChild(invisibleEl);\n        }\n    };\n    Text.prototype.$getFoldLineTokens = function (row, foldLine) {\n        var session = this.session;\n        var renderTokens = [];\n        function addTokens(tokens, from, to) {\n            var idx = 0, col = 0;\n            while ((col + tokens[idx].value.length) < from) {\n                col += tokens[idx].value.length;\n                idx++;\n                if (idx == tokens.length)\n                    return;\n            }\n            if (col != from) {\n                var value = tokens[idx].value.substring(from - col);\n                if (value.length > (to - from))\n                    value = value.substring(0, to - from);\n                renderTokens.push({\n                    type: tokens[idx].type,\n                    value: value\n                });\n                col = from + value.length;\n                idx += 1;\n            }\n            while (col < to && idx < tokens.length) {\n                var value = tokens[idx].value;\n                if (value.length + col > to) {\n                    renderTokens.push({\n                        type: tokens[idx].type,\n                        value: value.substring(0, to - col)\n                    });\n                }\n                else\n                    renderTokens.push(tokens[idx]);\n                col += value.length;\n                idx += 1;\n            }\n        }\n        var tokens = session.getTokens(row);\n        foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n            if (placeholder != null) {\n                renderTokens.push({\n                    type: \"fold\",\n                    value: placeholder\n                });\n            }\n            else {\n                if (isNewRow)\n                    tokens = session.getTokens(row);\n                if (tokens.length)\n                    addTokens(tokens, lastColumn, column);\n            }\n        }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n        return renderTokens;\n    };\n    Text.prototype.$useLineGroups = function () {\n        return this.session.getUseWrapMode();\n    };\n    return Text;\n}());\nText.prototype.EOF_CHAR = \"\\xB6\";\nText.prototype.EOL_CHAR_LF = \"\\xAC\";\nText.prototype.EOL_CHAR_CRLF = \"\\xa4\";\nText.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF;\nText.prototype.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\nText.prototype.SPACE_CHAR = \"\\xB7\";\nText.prototype.$padding = 0;\nText.prototype.MAX_LINE_LENGTH = 10000;\nText.prototype.showInvisibles = false;\nText.prototype.showSpaces = false;\nText.prototype.showTabs = false;\nText.prototype.showEOL = false;\nText.prototype.displayIndentGuides = true;\nText.prototype.$highlightIndentGuides = true;\nText.prototype.$tabStrings = [];\nText.prototype.destroy = {};\nText.prototype.onChangeTabSize = Text.prototype.$computeTabString;\noop.implement(Text.prototype, EventEmitter);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = /** @class */ (function () {\n    function Cursor(parentEl) {\n        this.element = dom.createElement(\"div\");\n        this.element.className = \"ace_layer ace_cursor-layer\";\n        parentEl.appendChild(this.element);\n        this.isVisible = false;\n        this.isBlinking = true;\n        this.blinkInterval = 1000;\n        this.smoothBlinking = false;\n        this.cursors = [];\n        this.cursor = this.addCursor();\n        dom.addCssClass(this.element, \"ace_hidden-cursors\");\n        this.$updateCursors = this.$updateOpacity.bind(this);\n    }\n    Cursor.prototype.$updateOpacity = function (val) {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--;)\n            dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n    };\n    Cursor.prototype.$startCssAnimation = function () {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--;)\n            cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n        this.$isAnimating = true;\n        setTimeout(function () {\n            if (this.$isAnimating) {\n                dom.addCssClass(this.element, \"ace_animate-blinking\");\n            }\n        }.bind(this));\n    };\n    Cursor.prototype.$stopCssAnimation = function () {\n        this.$isAnimating = false;\n        dom.removeCssClass(this.element, \"ace_animate-blinking\");\n    };\n    Cursor.prototype.setPadding = function (padding) {\n        this.$padding = padding;\n    };\n    Cursor.prototype.setSession = function (session) {\n        this.session = session;\n    };\n    Cursor.prototype.setBlinking = function (blinking) {\n        if (blinking != this.isBlinking) {\n            this.isBlinking = blinking;\n            this.restartTimer();\n        }\n    };\n    Cursor.prototype.setBlinkInterval = function (blinkInterval) {\n        if (blinkInterval != this.blinkInterval) {\n            this.blinkInterval = blinkInterval;\n            this.restartTimer();\n        }\n    };\n    Cursor.prototype.setSmoothBlinking = function (smoothBlinking) {\n        if (smoothBlinking != this.smoothBlinking) {\n            this.smoothBlinking = smoothBlinking;\n            dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n            this.$updateCursors(true);\n            this.restartTimer();\n        }\n    };\n    Cursor.prototype.addCursor = function () {\n        var el = dom.createElement(\"div\");\n        el.className = \"ace_cursor\";\n        this.element.appendChild(el);\n        this.cursors.push(el);\n        return el;\n    };\n    Cursor.prototype.removeCursor = function () {\n        if (this.cursors.length > 1) {\n            var el = this.cursors.pop();\n            el.parentNode.removeChild(el);\n            return el;\n        }\n    };\n    Cursor.prototype.hideCursor = function () {\n        this.isVisible = false;\n        dom.addCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n    Cursor.prototype.showCursor = function () {\n        this.isVisible = true;\n        dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n    Cursor.prototype.restartTimer = function () {\n        var update = this.$updateCursors;\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n        this.$stopCssAnimation();\n        if (this.smoothBlinking) {\n            this.$isSmoothBlinking = false;\n            dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n        }\n        update(true);\n        if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n            this.$stopCssAnimation();\n            return;\n        }\n        if (this.smoothBlinking) {\n            this.$isSmoothBlinking = true;\n            setTimeout(function () {\n                if (this.$isSmoothBlinking) {\n                    dom.addCssClass(this.element, \"ace_smooth-blinking\");\n                }\n            }.bind(this));\n        }\n        if (dom.HAS_CSS_ANIMATION) {\n            this.$startCssAnimation();\n        }\n        else {\n            var blink = /**@this{Cursor}*/ function () {\n                this.timeoutId = setTimeout(function () {\n                    update(false);\n                }, 0.6 * this.blinkInterval);\n            }.bind(this);\n            this.intervalId = setInterval(function () {\n                update(true);\n                blink();\n            }, this.blinkInterval);\n            blink();\n        }\n    };\n    Cursor.prototype.getPixelPosition = function (position, onScreen) {\n        if (!this.config || !this.session)\n            return { left: 0, top: 0 };\n        if (!position)\n            position = this.session.selection.getCursor();\n        var pos = this.session.documentToScreenPosition(position);\n        var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n            ? this.session.$bidiHandler.getPosLeft(pos.column)\n            : pos.column * this.config.characterWidth);\n        var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n            this.config.lineHeight;\n        return { left: cursorLeft, top: cursorTop };\n    };\n    Cursor.prototype.isCursorInView = function (pixelPos, config) {\n        return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n    };\n    Cursor.prototype.update = function (config) {\n        this.config = config;\n        var selections = this.session.$selectionMarkers;\n        var i = 0, cursorIndex = 0;\n        if (selections === undefined || selections.length === 0) {\n            selections = [{ cursor: null }];\n        }\n        for (var i = 0, n = selections.length; i < n; i++) {\n            var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n            if ((pixelPos.top > config.height + config.offset ||\n                pixelPos.top < 0) && i > 1) {\n                continue;\n            }\n            var element = this.cursors[cursorIndex++] || this.addCursor();\n            var style = element.style;\n            if (!this.drawCursor) {\n                if (!this.isCursorInView(pixelPos, config)) {\n                    dom.setStyle(style, \"display\", \"none\");\n                }\n                else {\n                    dom.setStyle(style, \"display\", \"block\");\n                    dom.translate(element, pixelPos.left, pixelPos.top);\n                    dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n                    dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n                }\n            }\n            else {\n                this.drawCursor(element, pixelPos, config, selections[i], this.session);\n            }\n        }\n        while (this.cursors.length > cursorIndex)\n            this.removeCursor();\n        var overwrite = this.session.getOverwrite();\n        this.$setOverwrite(overwrite);\n        this.$pixelPos = pixelPos;\n        this.restartTimer();\n    };\n    Cursor.prototype.$setOverwrite = function (overwrite) {\n        if (overwrite != this.overwrite) {\n            this.overwrite = overwrite;\n            if (overwrite)\n                dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n            else\n                dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n        }\n    };\n    Cursor.prototype.destroy = function () {\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n    };\n    return Cursor;\n}());\nCursor.prototype.$padding = 0;\nCursor.prototype.drawCursor = null;\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar Scrollbar = /** @class */ (function () {\n    function Scrollbar(parent, classSuffix) {\n        this.element = dom.createElement(\"div\");\n        this.element.className = \"ace_scrollbar ace_scrollbar\" + classSuffix;\n        this.element.tabIndex = -1;\n        this.inner = dom.createElement(\"div\");\n        this.inner.className = \"ace_scrollbar-inner\";\n        this.inner.textContent = \"\\xa0\";\n        this.element.appendChild(this.inner);\n        parent.appendChild(this.element);\n        this.setVisible(false);\n        this.skipEvent = false;\n        event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n        event.addListener(this.element, \"mousedown\", event.preventDefault);\n    }\n    Scrollbar.prototype.setVisible = function (isVisible) {\n        this.element.style.display = isVisible ? \"\" : \"none\";\n        this.isVisible = isVisible;\n        this.coeff = 1;\n    };\n    return Scrollbar;\n}());\noop.implement(Scrollbar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n    __extends(VScrollBar, _super);\n    function VScrollBar(parent, renderer) {\n        var _this = _super.call(this, parent, '-v') || this;\n        _this.scrollTop = 0;\n        _this.scrollHeight = 0;\n        renderer.$scrollbarWidth =\n            _this.width = dom.scrollbarWidth(parent.ownerDocument);\n        _this.inner.style.width =\n            _this.element.style.width = (_this.width || 15) + 5 + \"px\";\n        _this.$minWidth = 0;\n        return _this;\n    }\n    VScrollBar.prototype.onScroll = function () {\n        if (!this.skipEvent) {\n            this.scrollTop = this.element.scrollTop;\n            if (this.coeff != 1) {\n                var h = this.element.clientHeight / this.scrollHeight;\n                this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n            }\n            this._emit(\"scroll\", { data: this.scrollTop });\n        }\n        this.skipEvent = false;\n    };\n    VScrollBar.prototype.getWidth = function () {\n        return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n    };\n    VScrollBar.prototype.setHeight = function (height) {\n        this.element.style.height = height + \"px\";\n    };\n    VScrollBar.prototype.setScrollHeight = function (height) {\n        this.scrollHeight = height;\n        if (height > MAX_SCROLL_H) {\n            this.coeff = MAX_SCROLL_H / height;\n            height = MAX_SCROLL_H;\n        }\n        else if (this.coeff != 1) {\n            this.coeff = 1;\n        }\n        this.inner.style.height = height + \"px\";\n    };\n    VScrollBar.prototype.setScrollTop = function (scrollTop) {\n        if (this.scrollTop != scrollTop) {\n            this.skipEvent = true;\n            this.scrollTop = scrollTop;\n            this.element.scrollTop = scrollTop * this.coeff;\n        }\n    };\n    return VScrollBar;\n}(Scrollbar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n    __extends(HScrollBar, _super);\n    function HScrollBar(parent, renderer) {\n        var _this = _super.call(this, parent, '-h') || this;\n        _this.scrollLeft = 0;\n        _this.height = renderer.$scrollbarWidth;\n        _this.inner.style.height =\n            _this.element.style.height = (_this.height || 15) + 5 + \"px\";\n        return _this;\n    }\n    HScrollBar.prototype.onScroll = function () {\n        if (!this.skipEvent) {\n            this.scrollLeft = this.element.scrollLeft;\n            this._emit(\"scroll\", { data: this.scrollLeft });\n        }\n        this.skipEvent = false;\n    };\n    HScrollBar.prototype.getHeight = function () {\n        return this.isVisible ? this.height : 0;\n    };\n    HScrollBar.prototype.setWidth = function (width) {\n        this.element.style.width = width + \"px\";\n    };\n    HScrollBar.prototype.setInnerWidth = function (width) {\n        this.inner.style.width = width + \"px\";\n    };\n    HScrollBar.prototype.setScrollWidth = function (width) {\n        this.inner.style.width = width + \"px\";\n    };\n    HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n        if (this.scrollLeft != scrollLeft) {\n            this.skipEvent = true;\n            this.scrollLeft = this.element.scrollLeft = scrollLeft;\n        }\n    };\n    return HScrollBar;\n}(Scrollbar));\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n  position: absolute;\\n  background: rgba(128, 128, 128, 0.6);\\n  -moz-box-sizing: border-box;\\n  box-sizing: border-box;\\n  border: 1px solid #bbb;\\n  border-radius: 2px;\\n  z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n  position: absolute;\\n  z-index: 6;\\n  background: none;\\n  overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n  z-index: 6;\\n  right: 0;\\n  top: 0;\\n  width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n  z-index: 8;\\n  right: 0;\\n  width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n  bottom: 0;\\n  left: 0;\\n  height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n  bottom: 0;\\n  height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n  z-index: 8;\\n  background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = /** @class */ (function () {\n    function ScrollBar(parent, classSuffix) {\n        this.element = dom.createElement(\"div\");\n        this.element.className = \"ace_sb\" + classSuffix;\n        this.inner = dom.createElement(\"div\");\n        this.inner.className = \"\";\n        this.element.appendChild(this.inner);\n        this.VScrollWidth = 12;\n        this.HScrollHeight = 12;\n        parent.appendChild(this.element);\n        this.setVisible(false);\n        this.skipEvent = false;\n        event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n    }\n    ScrollBar.prototype.setVisible = function (isVisible) {\n        this.element.style.display = isVisible ? \"\" : \"none\";\n        this.isVisible = isVisible;\n        this.coeff = 1;\n    };\n    return ScrollBar;\n}());\noop.implement(ScrollBar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n    __extends(VScrollBar, _super);\n    function VScrollBar(parent, renderer) {\n        var _this = _super.call(this, parent, '-v') || this;\n        _this.scrollTop = 0;\n        _this.scrollHeight = 0;\n        _this.parent = parent;\n        _this.width = _this.VScrollWidth;\n        _this.renderer = renderer;\n        _this.inner.style.width = _this.element.style.width = (_this.width || 15) + \"px\";\n        _this.$minWidth = 0;\n        return _this;\n    }\n    VScrollBar.prototype.onMouseDown = function (eType, e) {\n        if (eType !== \"mousedown\")\n            return;\n        if (event.getButton(e) !== 0 || e.detail === 2) {\n            return;\n        }\n        if (e.target === this.inner) {\n            var self = this;\n            var mousePageY = e.clientY;\n            var onMouseMove = function (e) {\n                mousePageY = e.clientY;\n            };\n            var onMouseUp = function () {\n                clearInterval(timerId);\n            };\n            var startY = e.clientY;\n            var startTop = this.thumbTop;\n            var onScrollInterval = function () {\n                if (mousePageY === undefined)\n                    return;\n                var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n                if (scrollTop === self.scrollTop)\n                    return;\n                self._emit(\"scroll\", { data: scrollTop });\n            };\n            event.capture(this.inner, onMouseMove, onMouseUp);\n            var timerId = setInterval(onScrollInterval, 20);\n            return event.preventDefault(e);\n        }\n        var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n        this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n        return event.preventDefault(e);\n    };\n    VScrollBar.prototype.getHeight = function () {\n        return this.height;\n    };\n    VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) {\n        var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n        scrollTop = scrollTop >> 0;\n        if (scrollTop < 0) {\n            scrollTop = 0;\n        }\n        else if (scrollTop > this.pageHeight - this.viewHeight) {\n            scrollTop = this.pageHeight - this.viewHeight;\n        }\n        return scrollTop;\n    };\n    VScrollBar.prototype.getWidth = function () {\n        return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n    };\n    VScrollBar.prototype.setHeight = function (height) {\n        this.height = Math.max(0, height);\n        this.slideHeight = this.height;\n        this.viewHeight = this.height;\n        this.setScrollHeight(this.pageHeight, true);\n    };\n    VScrollBar.prototype.setScrollHeight = function (height, force) {\n        if (this.pageHeight === height && !force)\n            return;\n        this.pageHeight = height;\n        this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n        if (this.thumbHeight > this.slideHeight)\n            this.thumbHeight = this.slideHeight;\n        if (this.thumbHeight < 15)\n            this.thumbHeight = 15;\n        this.inner.style.height = this.thumbHeight + \"px\";\n        if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n            this.scrollTop = (this.pageHeight - this.viewHeight);\n            if (this.scrollTop < 0)\n                this.scrollTop = 0;\n            this._emit(\"scroll\", { data: this.scrollTop });\n        }\n    };\n    VScrollBar.prototype.setScrollTop = function (scrollTop) {\n        this.scrollTop = scrollTop;\n        if (scrollTop < 0)\n            scrollTop = 0;\n        this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n        this.inner.style.top = this.thumbTop + \"px\";\n    };\n    return VScrollBar;\n}(ScrollBar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n    __extends(HScrollBar, _super);\n    function HScrollBar(parent, renderer) {\n        var _this = _super.call(this, parent, '-h') || this;\n        _this.scrollLeft = 0;\n        _this.scrollWidth = 0;\n        _this.height = _this.HScrollHeight;\n        _this.inner.style.height = _this.element.style.height = (_this.height || 12) + \"px\";\n        _this.renderer = renderer;\n        return _this;\n    }\n    HScrollBar.prototype.onMouseDown = function (eType, e) {\n        if (eType !== \"mousedown\")\n            return;\n        if (event.getButton(e) !== 0 || e.detail === 2) {\n            return;\n        }\n        if (e.target === this.inner) {\n            var self = this;\n            var mousePageX = e.clientX;\n            var onMouseMove = function (e) {\n                mousePageX = e.clientX;\n            };\n            var onMouseUp = function () {\n                clearInterval(timerId);\n            };\n            var startX = e.clientX;\n            var startLeft = this.thumbLeft;\n            var onScrollInterval = function () {\n                if (mousePageX === undefined)\n                    return;\n                var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n                if (scrollLeft === self.scrollLeft)\n                    return;\n                self._emit(\"scroll\", { data: scrollLeft });\n            };\n            event.capture(this.inner, onMouseMove, onMouseUp);\n            var timerId = setInterval(onScrollInterval, 20);\n            return event.preventDefault(e);\n        }\n        var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n        this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n        return event.preventDefault(e);\n    };\n    HScrollBar.prototype.getHeight = function () {\n        return this.isVisible ? this.height : 0;\n    };\n    HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) {\n        var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n        scrollLeft = scrollLeft >> 0;\n        if (scrollLeft < 0) {\n            scrollLeft = 0;\n        }\n        else if (scrollLeft > this.pageWidth - this.viewWidth) {\n            scrollLeft = this.pageWidth - this.viewWidth;\n        }\n        return scrollLeft;\n    };\n    HScrollBar.prototype.setWidth = function (width) {\n        this.width = Math.max(0, width);\n        this.element.style.width = this.width + \"px\";\n        this.slideWidth = this.width;\n        this.viewWidth = this.width;\n        this.setScrollWidth(this.pageWidth, true);\n    };\n    HScrollBar.prototype.setScrollWidth = function (width, force) {\n        if (this.pageWidth === width && !force)\n            return;\n        this.pageWidth = width;\n        this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n        if (this.thumbWidth > this.slideWidth)\n            this.thumbWidth = this.slideWidth;\n        if (this.thumbWidth < 15)\n            this.thumbWidth = 15;\n        this.inner.style.width = this.thumbWidth + \"px\";\n        if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n            this.scrollLeft = (this.pageWidth - this.viewWidth);\n            if (this.scrollLeft < 0)\n                this.scrollLeft = 0;\n            this._emit(\"scroll\", { data: this.scrollLeft });\n        }\n    };\n    HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n        this.scrollLeft = scrollLeft;\n        if (scrollLeft < 0)\n            scrollLeft = 0;\n        this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n        this.inner.style.left = (this.thumbLeft) + \"px\";\n    };\n    return HScrollBar;\n}(ScrollBar));\nHScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth;\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = /** @class */ (function () {\n    function RenderLoop(onRender, win) {\n        this.onRender = onRender;\n        this.pending = false;\n        this.changes = 0;\n        this.$recursionLimit = 2;\n        this.window = win || window;\n        var _self = this;\n        this._flush = function (ts) {\n            _self.pending = false;\n            var changes = _self.changes;\n            if (changes) {\n                event.blockIdle(100);\n                _self.changes = 0;\n                _self.onRender(changes);\n            }\n            if (_self.changes) {\n                if (_self.$recursionLimit-- < 0)\n                    return;\n                _self.schedule();\n            }\n            else {\n                _self.$recursionLimit = 2;\n            }\n        };\n    }\n    RenderLoop.prototype.schedule = function (change) {\n        this.changes = this.changes | change;\n        if (this.changes && !this.pending) {\n            event.nextFrame(this._flush);\n            this.pending = true;\n        }\n    };\n    RenderLoop.prototype.clear = function (change) {\n        var changes = this.changes;\n        this.changes = 0;\n        return changes;\n    };\n    return RenderLoop;\n}());\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 512;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = /** @class */ (function () {\n    function FontMetrics(parentEl) {\n        this.el = dom.createElement(\"div\");\n        this.$setMeasureNodeStyles(this.el.style, true);\n        this.$main = dom.createElement(\"div\");\n        this.$setMeasureNodeStyles(this.$main.style);\n        this.$measureNode = dom.createElement(\"div\");\n        this.$setMeasureNodeStyles(this.$measureNode.style);\n        this.el.appendChild(this.$main);\n        this.el.appendChild(this.$measureNode);\n        parentEl.appendChild(this.el);\n        this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n        this.$characterSize = { width: 0, height: 0 };\n        if (USE_OBSERVER)\n            this.$addObserver();\n        else\n            this.checkForSizeChanges();\n    }\n    FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) {\n        style.width = style.height = \"auto\";\n        style.left = style.top = \"0px\";\n        style.visibility = \"hidden\";\n        style.position = \"absolute\";\n        style.whiteSpace = \"pre\";\n        if (useragent.isIE < 8) {\n            style[\"font-family\"] = \"inherit\";\n        }\n        else {\n            style.font = \"inherit\";\n        }\n        style.overflow = isRoot ? \"hidden\" : \"visible\";\n    };\n    FontMetrics.prototype.checkForSizeChanges = function (size) {\n        if (size === undefined)\n            size = this.$measureSizes();\n        if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n            this.$measureNode.style.fontWeight = \"bold\";\n            var boldSize = this.$measureSizes();\n            this.$measureNode.style.fontWeight = \"\";\n            this.$characterSize = size;\n            this.charSizes = Object.create(null);\n            this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n            this._emit(\"changeCharacterSize\", { data: size });\n        }\n    };\n    FontMetrics.prototype.$addObserver = function () {\n        var self = this;\n        this.$observer = new window.ResizeObserver(function (e) {\n            self.checkForSizeChanges();\n        });\n        this.$observer.observe(this.$measureNode);\n    };\n    FontMetrics.prototype.$pollSizeChanges = function () {\n        if (this.$pollSizeChangesTimer || this.$observer)\n            return this.$pollSizeChangesTimer;\n        var self = this;\n        return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n            self.checkForSizeChanges();\n            event.onIdle(cb, 500);\n        }, 500);\n    };\n    FontMetrics.prototype.setPolling = function (val) {\n        if (val) {\n            this.$pollSizeChanges();\n        }\n        else if (this.$pollSizeChangesTimer) {\n            clearInterval(this.$pollSizeChangesTimer);\n            this.$pollSizeChangesTimer = 0;\n        }\n    };\n    FontMetrics.prototype.$measureSizes = function (node) {\n        var size = {\n            height: (node || this.$measureNode).clientHeight,\n            width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n        };\n        if (size.width === 0 || size.height === 0)\n            return null;\n        return size;\n    };\n    FontMetrics.prototype.$measureCharWidth = function (ch) {\n        this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n        var rect = this.$main.getBoundingClientRect();\n        return rect.width / CHAR_COUNT;\n    };\n    FontMetrics.prototype.getCharacterWidth = function (ch) {\n        var w = this.charSizes[ch];\n        if (w === undefined) {\n            w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n        }\n        return w;\n    };\n    FontMetrics.prototype.destroy = function () {\n        clearInterval(this.$pollSizeChangesTimer);\n        if (this.$observer)\n            this.$observer.disconnect();\n        if (this.el && this.el.parentNode)\n            this.el.parentNode.removeChild(this.el);\n    };\n    FontMetrics.prototype.$getZoom = function (element) {\n        if (!element || !element.parentElement)\n            return 1;\n        return (Number(window.getComputedStyle(element)[\"zoom\"]) || 1) * this.$getZoom(element.parentElement);\n    };\n    FontMetrics.prototype.$initTransformMeasureNodes = function () {\n        var t = function (t, l) {\n            return [\"div\", {\n                    style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n                }];\n        };\n        this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n    };\n    FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) {\n        if (clientPos) {\n            var zoom = this.$getZoom(this.el);\n            clientPos = mul(1 / zoom, clientPos);\n        }\n        function solve(l1, l2, r) {\n            var det = l1[1] * l2[0] - l1[0] * l2[1];\n            return [\n                (-l2[1] * r[0] + l2[0] * r[1]) / det,\n                (+l1[1] * r[0] - l1[0] * r[1]) / det\n            ];\n        }\n        function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n        function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n        function mul(a, b) { return [a * b[0], a * b[1]]; }\n        if (!this.els)\n            this.$initTransformMeasureNodes();\n        function p(el) {\n            var r = el.getBoundingClientRect();\n            return [r.left, r.top];\n        }\n        var a = p(this.els[0]);\n        var b = p(this.els[1]);\n        var c = p(this.els[2]);\n        var d = p(this.els[3]);\n        var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n        var m1 = mul(1 + h[0], sub(b, a));\n        var m2 = mul(1 + h[1], sub(c, a));\n        if (elPos) {\n            var x = elPos;\n            var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n            var ut = add(mul(x[0], m1), mul(x[1], m2));\n            return add(mul(1 / k / L, ut), a);\n        }\n        var u = sub(clientPos, a);\n        var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n        return mul(L, f);\n    };\n    return FontMetrics;\n}());\nFontMetrics.prototype.$characterSize = { width: 0, height: 0 };\noop.implement(FontMetrics.prototype, EventEmitter);\nexports.FontMetrics = FontMetrics;\n\n});\n\nace.define(\"ace/css/editor-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n    styles.push(\".ace_br\" + i + \"{\" + (\n        [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n    ).map(function(x, j) {\n        return i & (1<<j) ? \"border-\" + x + \"-radius: 3px;\" : \"\"\n    }).filter(Boolean).join(\" \") + \"}\")\n}\nstyles.join(\"\\\\n\")\n*/\nmodule.exports = \"\\n.ace_br1 {border-top-left-radius    : 3px;}\\n.ace_br2 {border-top-right-radius   : 3px;}\\n.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}\\n.ace_br4 {border-bottom-right-radius: 3px;}\\n.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}\\n.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}\\n.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}\\n.ace_br8 {border-bottom-left-radius : 3px;}\\n.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}\\n.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}\\n.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\n.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\n.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\n.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n\\n\\n.ace_editor {\\n    position: relative;\\n    overflow: hidden;\\n    padding: 0;\\n    font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'Source Code Pro', 'source-code-pro', monospace;\\n    direction: ltr;\\n    text-align: left;\\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n    forced-color-adjust: none;\\n}\\n\\n.ace_scroller {\\n    position: absolute;\\n    overflow: hidden;\\n    top: 0;\\n    bottom: 0;\\n    background-color: inherit;\\n    -ms-user-select: none;\\n    -moz-user-select: none;\\n    -webkit-user-select: none;\\n    user-select: none;\\n    cursor: text;\\n}\\n\\n.ace_content {\\n    position: absolute;\\n    box-sizing: border-box;\\n    min-width: 100%;\\n    contain: style size layout;\\n    font-variant-ligatures: no-common-ligatures;\\n}\\n.ace_invisible {\\n    font-variant-ligatures: none;\\n}\\n\\n.ace_keyboard-focus:focus {\\n    box-shadow: inset 0 0 0 2px #5E9ED6;\\n    outline: none;\\n}\\n\\n.ace_dragging .ace_scroller:before{\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n    bottom: 0;\\n    content: '';\\n    background: rgba(250, 250, 250, 0.01);\\n    z-index: 1000;\\n}\\n.ace_dragging.ace_dark .ace_scroller:before{\\n    background: rgba(0, 0, 0, 0.01);\\n}\\n\\n.ace_gutter {\\n    position: absolute;\\n    overflow : hidden;\\n    width: auto;\\n    top: 0;\\n    bottom: 0;\\n    left: 0;\\n    cursor: default;\\n    z-index: 4;\\n    -ms-user-select: none;\\n    -moz-user-select: none;\\n    -webkit-user-select: none;\\n    user-select: none;\\n    contain: style size layout;\\n}\\n\\n.ace_gutter-active-line {\\n    position: absolute;\\n    left: 0;\\n    right: 0;\\n}\\n\\n.ace_scroller.ace_scroll-left:after {\\n    content: \\\"\\\";\\n    position: absolute;\\n    top: 0;\\n    right: 0;\\n    bottom: 0;\\n    left: 0;\\n    box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\n    pointer-events: none;\\n}\\n\\n.ace_gutter-cell, .ace_gutter-cell_svg-icons {\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n    padding-left: 19px;\\n    padding-right: 6px;\\n    background-repeat: no-repeat;\\n}\\n\\n.ace_gutter-cell_svg-icons .ace_gutter_annotation {\\n    margin-left: -14px;\\n    float: left;\\n}\\n\\n.ace_gutter-cell .ace_gutter_annotation {\\n    margin-left: -19px;\\n    float: left;\\n}\\n\\n.ace_gutter-cell.ace_error, .ace_icon.ace_error, .ace_icon.ace_error_fold, .ace_gutter-cell.ace_security, .ace_icon.ace_security, .ace_icon.ace_security_fold {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\n    background-repeat: no-repeat;\\n    background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_warning, .ace_icon.ace_warning, .ace_icon.ace_warning_fold {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\n    background-repeat: no-repeat;\\n    background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_info, .ace_icon.ace_info, .ace_gutter-cell.ace_hint, .ace_icon.ace_hint {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\n    background-repeat: no-repeat;\\n    background-position: 2px center;\\n}\\n\\n.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info, .ace_dark .ace_gutter-cell.ace_hint, .ace_dark .ace_icon.ace_hint {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_icon_svg.ace_error {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+\\\");\\n    background-color: crimson;\\n}\\n.ace_icon_svg.ace_security {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iZGFya29yYW5nZSIgZmlsbD0ibm9uZSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgogICAgICAgIDxwYXRoIGNsYXNzPSJzdHJva2UtbGluZWpvaW4tcm91bmQiIGQ9Ik04IDE0LjgzMDdDOCAxNC44MzA3IDIgMTIuOTA0NyAyIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOEM3Ljk4OTk5IDEuMzQ5MTggMTAuNjkgMy4yNjU0OCAxNCAzLjI2NTQ4VjguMDg5OTJDMTQgMTIuOTA0NyA4IDE0LjgzMDcgOCAxNC44MzA3WiIvPgogICAgICAgIDxwYXRoIGQ9Ik0yIDguMDg5OTJWMy4yNjU0OEM1LjMxIDMuMjY1NDggNy45ODk5OSAxLjM0OTE4IDcuOTg5OTkgMS4zNDkxOCIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMy45OSA4LjA4OTkyVjMuMjY1NDhDMTAuNjggMy4yNjU0OCA4IDEuMzQ5MTggOCAxLjM0OTE4Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggNFY5Ii8+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTggMTBWMTIiLz4KICAgIDwvZz4KPC9zdmc+\\\");\\n    background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n    background-color: darkorange;\\n}\\n.ace_icon_svg.ace_info {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJibHVlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjgiIGN5PSI4IiByPSI3IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjxwb2x5bGluZSBwb2ludHM9IjggMTEgOCA4Ii8+Cjxwb2x5bGluZSBwb2ludHM9IjkgOCA2IDgiLz4KPGxpbmUgeDE9IjEwIiB5MT0iMTEiIHgyPSI2IiB5Mj0iMTEiLz4KPHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjAuMDEiIGhlaWdodD0iMC4wMSIvPgo8L2c+Cjwvc3ZnPg==\\\");\\n    background-color: royalblue;\\n}\\n.ace_icon_svg.ace_hint {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0ic2lsdmVyIiBmaWxsPSJub25lIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICAgICAgPHBhdGggY2xhc3M9InN0cm9rZS1saW5lam9pbi1yb3VuZCIgZD0iTTYgMTRIMTAiLz4KICAgICAgICA8cGF0aCBkPSJNOCAxMUg5QzkgOS40NzAwMiAxMiA4LjU0MDAyIDEyIDUuNzYwMDJDMTIuMDIgNC40MDAwMiAxMS4zOSAzLjM2MDAyIDEwLjQzIDIuNjcwMDJDOSAxLjY0MDAyIDcuMDAwMDEgMS42NDAwMiA1LjU3MDAxIDIuNjcwMDJDNC42MTAwMSAzLjM2MDAyIDMuOTggNC40MDAwMiA0IDUuNzYwMDJDNCA4LjU0MDAyIDcuMDAwMDEgOS40NzAwMiA3LjAwMDAxIDExSDhaIi8+CiAgICA8L2c+Cjwvc3ZnPg==\\\");\\n    background-color: silver;\\n}\\n\\n.ace_icon_svg.ace_error_fold {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSI+CiAgPHBhdGggZD0ibSAxOC45Mjk4NTEsNy44Mjk4MDc2IGMgMC4xNDYzNTMsNi4zMzc0NjA0IC02LjMyMzE0Nyw3Ljc3Nzg0NDQgLTcuNDc3OTEyLDcuNzc3ODQ0NCAtMi4xMDcyNzI2LC0wLjEyODc1IDUuMTE3Njc4LDAuMzU2MjQ5IDUuMDUxNjk4LC03Ljg3MDA2MTggLTAuNjA0NjcyLC04LjAwMzk3MzQ5IC03LjA3NzI3MDYsLTcuNTYzMTE4OSAtNC44NTczLC03LjQzMDM5NTU2IDEuNjA2LC0wLjExNTE0MjI1IDYuODk3NDg1LDEuMjYyNTQ1OTYgNy4yODM1MTQsNy41MjI2MTI5NiB6IiBmaWxsPSJjcmltc29uIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0ibSA4LjExNDc1NjIsMi4wNTI5ODI4IGMgMy4zNDkxNjk4LDAgNi4wNjQxMzI4LDIuNjc2ODYyNyA2LjA2NDEzMjgsNS45Nzg5NTMgMCwzLjMwMjExMjIgLTIuNzE0OTYzLDUuOTc4OTIwMiAtNi4wNjQxMzI4LDUuOTc4OTIwMiAtMy4zNDkxNDczLDAgLTYuMDY0MTc3MiwtMi42NzY4MDggLTYuMDY0MTc3MiwtNS45Nzg5MjAyIDAuMDA1MzksLTMuMjk5ODg2MSAyLjcxNzI2NTYsLTUuOTczNjQwOCA2LjA2NDE3NzIsLTUuOTc4OTUzIHogbSAwLC0xLjczNTgyNzE5IGMgLTQuMzIxNDgzNiwwIC03LjgyNDc0MDM4LDMuNDU0MDE4NDkgLTcuODI0NzQwMzgsNy43MTQ3ODAxOSAwLDQuMjYwNzI4MiAzLjUwMzI1Njc4LDcuNzE0NzQ1MiA3LjgyNDc0MDM4LDcuNzE0NzQ1MiA0LjMyMTQ0OTgsMCA3LjgyNDY5OTgsLTMuNDU0MDE3IDcuODI0Njk5OCwtNy43MTQ3NDUyIDAsLTIuMDQ2MDkxNCAtMC44MjQzOTIsLTQuMDA4MzY3MiAtMi4yOTE3NTYsLTUuNDU1MTc0NiBDIDEyLjE4MDIyNSwxLjEyOTk2NDggMTAuMTkwMDEzLDAuMzE3MTU1NjEgOC4xMTQ3NTYyLDAuMzE3MTU1NjEgWiBNIDYuOTM3NDU2Myw4LjI0MDU5ODUgNC42NzE4Njg1LDEwLjQ4NTg1MiA2LjAwODY4MTQsMTEuODc2NzI4IDguMzE3MDAzNSw5LjYwMDc5MTEgMTAuNjI1MzM3LDExLjg3NjcyOCAxMS45NjIxMzgsMTAuNDg1ODUyIDkuNjk2NTUwOCw4LjI0MDU5ODUgMTEuOTYyMTM4LDYuMDA2ODA2NiAxMC41NzMyNDYsNC42Mzc0MzM1IDguMzE3MDAzNSw2Ljg3MzQyOTcgNi4wNjA3NjA3LDQuNjM3NDMzNSA0LjY3MTg2ODUsNi4wMDY4MDY2IFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\\\");\\n    background-color: crimson;\\n}\\n.ace_icon_svg.ace_security_fold {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTcgMTQiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTEwLjAwMDEgMTMuNjk5MkMxMC4wMDAxIDEzLjY5OTIgMTEuOTI0MSAxMy40NzYzIDEzIDEyLjY5OTJDMTQuNDEzOSAxMS42NzgxIDE2IDEwLjUgMTYuMTI1MSA2LjgxMTI2VjIuNTg5ODdDMTYuMTI1MSAyLjU0NzY4IDE2LjEyMjEgMi41MDYxOSAxNi4xMTY0IDIuNDY1NTlWMS43MTQ4NUgxNS4yNDE0TDE1LjIzMDcgMS43MTQ4NEwxNC42MjUxIDEuNjk5MjJWNi44MTEyM0MxNC42MjUxIDguNTEwNjEgMTQuNjI1MSA5LjQ2NDYxIDEyLjc4MjQgMTEuNzIxQzEyLjE1ODYgMTIuNDg0OCAxMC4wMDAxIDEzLjY5OTIgMTAuMDAwMSAxMy42OTkyWiIgZmlsbD0iY3JpbXNvbiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuMzM2MDkgMC4zNjc0NzVDNy4wMzIxNCAwLjE1MjY1MiA2LjYyNTQ4IDAuMTUzNjE0IDYuMzIyNTMgMC4zNjk5OTdMNi4zMDg2OSAwLjM3OTU1NEM2LjI5NTUzIDAuMzg4NTg4IDYuMjczODggMC40MDMyNjYgNi4yNDQxNyAwLjQyMjc4OUM2LjE4NDcxIDAuNDYxODYgNi4wOTMyMSAwLjUyMDE3MSA1Ljk3MzEzIDAuNTkxMzczQzUuNzMyNTEgMC43MzQwNTkgNS4zNzk5IDAuOTI2ODY0IDQuOTQyNzkgMS4xMjAwOUM0LjA2MTQ0IDEuNTA5NyAyLjg3NTQxIDEuODgzNzcgMS41ODk4NCAxLjg4Mzc3SDAuNzE0ODQ0VjIuNzU4NzdWNi45ODAxNUMwLjcxNDg0NCA5LjQ5Mzc0IDIuMjg4NjYgMTEuMTk3MyAzLjcwMjU0IDEyLjIxODVDNC40MTg0NSAxMi43MzU1IDUuMTI4NzQgMTMuMTA1MyA1LjY1NzMzIDEzLjM0NTdDNS45MjI4NCAxMy40NjY0IDYuMTQ1NjYgMTMuNTU1OSA2LjMwNDY1IDEzLjYxNjFDNi4zODQyMyAxMy42NDYyIDYuNDQ4MDUgMTMuNjY5IDYuNDkzNDkgMTMuNjg0OEM2LjUxNjIyIDEzLjY5MjcgNi41MzQzOCAxMy42OTg5IDYuNTQ3NjQgMTMuNzAzM0w2LjU2MzgyIDEzLjcwODdMNi41NjkwOCAxMy43MTA0TDYuNTcwOTkgMTMuNzExTDYuODM5ODQgMTMuNzUzM0w2LjU3MjQyIDEzLjcxMTVDNi43NDYzMyAxMy43NjczIDYuOTMzMzUgMTMuNzY3MyA3LjEwNzI3IDEzLjcxMTVMNy4xMDg3IDEzLjcxMUw3LjExMDYxIDEzLjcxMDRMNy4xMTU4NyAxMy43MDg3TDcuMTMyMDUgMTMuNzAzM0M3LjE0NTMxIDEzLjY5ODkgNy4xNjM0NiAxMy42OTI3IDcuMTg2MTkgMTMuNjg0OEM3LjIzMTY0IDEzLjY2OSA3LjI5NTQ2IDEzLjY0NjIgNy4zNzUwMyAxMy42MTYxQzcuNTM0MDMgMTMuNTU1OSA3Ljc1Njg1IDEzLjQ2NjQgOC4wMjIzNiAxMy4zNDU3QzguNTUwOTUgMTMuMTA1MyA5LjI2MTIzIDEyLjczNTUgOS45NzcxNSAxMi4yMTg1QzExLjM5MSAxMS4xOTczIDEyLjk2NDggOS40OTM3NyAxMi45NjQ4IDYuOTgwMThWMi43NTg4QzEyLjk2NDggMi43MTY2IDEyLjk2MTkgMi42NzUxMSAxMi45NTYxIDIuNjM0NTFWMS44ODM3N0gxMi4wODExQzEyLjA3NzUgMS44ODM3NyAxMi4wNzQgMS44ODM3NyAxMi4wNzA0IDEuODgzNzdDMTAuNzk3OSAxLjg4MDA0IDkuNjE5NjIgMS41MTEwMiA4LjczODk0IDEuMTI0ODZDOC43MzUzNCAxLjEyMzI3IDguNzMxNzQgMS4xMjE2OCA4LjcyODE0IDEuMTIwMDlDOC4yOTEwMyAwLjkyNjg2NCA3LjkzODQyIDAuNzM0MDU5IDcuNjk3NzkgMC41OTEzNzNDNy41Nzc3MiAwLjUyMDE3MSA3LjQ4NjIyIDAuNDYxODYgNy40MjY3NiAwLjQyMjc4OUM3LjM5NzA1IDAuNDAzMjY2IDcuMzc1MzkgMC4zODg1ODggNy4zNjIyNCAwLjM3OTU1NEw3LjM0ODk2IDAuMzcwMzVDNy4zNDg5NiAwLjM3MDM1IDcuMzQ4NDcgMC4zNzAwMiA3LjM0NTYzIDAuMzc0MDU0TDcuMzM3NzkgMC4zNjg2NTlMNy4zMzYwOSAwLjM2NzQ3NVpNOC4wMzQ3MSAyLjcyNjkxQzguODYwNCAzLjA5MDYzIDkuOTYwNjYgMy40NjMwOSAxMS4yMDYxIDMuNTg5MDdWNi45ODAxNUgxMS4yMTQ4QzExLjIxNDggOC42Nzk1MyAxMC4xNjM3IDkuOTI1MDcgOC45NTI1NCAxMC43OTk4QzguMzU1OTUgMTEuMjMwNiA3Ljc1Mzc0IDExLjU0NTQgNy4yOTc5NiAxMS43NTI3QzcuMTE2NzEgMTEuODM1MSA2Ljk2MDYyIDExLjg5OTYgNi44Mzk4NCAxMS45NDY5QzYuNzE5MDYgMTEuODk5NiA2LjU2Mjk3IDExLjgzNTEgNi4zODE3MyAxMS43NTI3QzUuOTI1OTUgMTEuNTQ1NCA1LjMyMzczIDExLjIzMDYgNC43MjcxNSAxMC43OTk4QzMuNTE2MDMgOS45MjUwNyAyLjQ2NDg0IDguNjc5NTUgMi40NjQ4NCA2Ljk4MDE4VjMuNTg5MDlDMy43MTczOCAzLjQ2MjM5IDQuODIzMDggMy4wODYzOSA1LjY1MDMzIDIuNzIwNzFDNi4xNDIyOCAyLjUwMzI0IDYuNTQ0ODUgMi4yODUzNyA2LjgzMjU0IDIuMTE2MjRDNy4xMjE4MSAyLjI4NTM1IDcuNTI3IDIuNTAzNTIgOC4wMjE5NiAyLjcyMTMxQzguMDI2MiAyLjcyMzE3IDguMDMwNDUgMi43MjUwNCA4LjAzNDcxIDIuNzI2OTFaTTUuOTY0ODQgMy40MDE0N1Y3Ljc3NjQ3SDcuNzE0ODRWMy40MDE0N0g1Ljk2NDg0Wk01Ljk2NDg0IDEwLjQwMTVWOC42NTE0N0g3LjcxNDg0VjEwLjQwMTVINS45NjQ4NFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\\\");\\n    background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning_fold {\\n    -webkit-mask-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC43NzY5IDE0LjczMzdMOC42NTE5MiAyLjQ4MzY5QzguMzI5NDYgMS44Mzg3NyA3LjQwOTEzIDEuODM4NzcgNy4wODY2NyAyLjQ4MzY5TDAuOTYxNjY5IDE0LjczMzdDMC42NzA3NzUgMTUuMzE1NSAxLjA5MzgzIDE2IDEuNzQ0MjkgMTZIMTMuOTk0M0MxNC42NDQ4IDE2IDE1LjA2NzggMTUuMzE1NSAxNC43NzY5IDE0LjczMzdaTTMuMTYwMDcgMTQuMjVMNy44NjkyOSA0LjgzMTU2TDEyLjU3ODUgMTQuMjVIMy4xNjAwN1pNOC43NDQyOSAxMS42MjVWMTMuMzc1SDYuOTk0MjlWMTEuNjI1SDguNzQ0MjlaTTYuOTk0MjkgMTAuNzVWNy4yNUg4Ljc0NDI5VjEwLjc1SDYuOTk0MjlaIiBmaWxsPSIjRUM3MjExIi8+CjxwYXRoIGQ9Ik0xMS4xOTkxIDIuOTUyMzhDMTAuODgwOSAyLjMxNDY3IDEwLjM1MzcgMS44MDUyNiA5LjcwNTUgMS41MDlMMTEuMDQxIDEuMDY5NzhDMTEuNjg4MyAwLjk0OTgxNCAxMi4zMzcgMS4yNzI2MyAxMi42MzE3IDEuODYxNDFMMTcuNjEzNiAxMS44MTYxQzE4LjM1MjcgMTMuMjkyOSAxNy41OTM4IDE1LjA4MDQgMTYuMDE4IDE1LjU3NDVDMTYuNDA0NCAxNC40NTA3IDE2LjMyMzEgMTMuMjE4OCAxNS43OTI0IDEyLjE1NTVMMTEuMTk5MSAyLjk1MjM4WiIgZmlsbD0iI0VDNzIxMSIvPgo8L3N2Zz4=\\\");\\n    background-color: darkorange;\\n}\\n\\n.ace_scrollbar {\\n    contain: strict;\\n    position: absolute;\\n    right: 0;\\n    bottom: 0;\\n    z-index: 6;\\n}\\n\\n.ace_scrollbar-inner {\\n    position: absolute;\\n    cursor: text;\\n    left: 0;\\n    top: 0;\\n}\\n\\n.ace_scrollbar-v{\\n    overflow-x: hidden;\\n    overflow-y: scroll;\\n    top: 0;\\n}\\n\\n.ace_scrollbar-h {\\n    overflow-x: scroll;\\n    overflow-y: hidden;\\n    left: 0;\\n}\\n\\n.ace_print-margin {\\n    position: absolute;\\n    height: 100%;\\n}\\n\\n.ace_text-input {\\n    position: absolute;\\n    z-index: 0;\\n    width: 0.5em;\\n    height: 1em;\\n    opacity: 0;\\n    background: transparent;\\n    -moz-appearance: none;\\n    appearance: none;\\n    border: none;\\n    resize: none;\\n    outline: none;\\n    overflow: hidden;\\n    font: inherit;\\n    padding: 0 1px;\\n    margin: 0 -1px;\\n    contain: strict;\\n    -ms-user-select: text;\\n    -moz-user-select: text;\\n    -webkit-user-select: text;\\n    user-select: text;\\n    /*with `pre-line` chrome inserts &nbsp; instead of space*/\\n    white-space: pre!important;\\n}\\n.ace_text-input.ace_composition {\\n    background: transparent;\\n    color: inherit;\\n    z-index: 1000;\\n    opacity: 1;\\n}\\n.ace_composition_placeholder { color: transparent }\\n.ace_composition_marker { \\n    border-bottom: 1px solid;\\n    position: absolute;\\n    border-radius: 0;\\n    margin-top: 1px;\\n}\\n\\n[ace_nocontext=true] {\\n    transform: none!important;\\n    filter: none!important;\\n    clip-path: none!important;\\n    mask : none!important;\\n    contain: none!important;\\n    perspective: none!important;\\n    mix-blend-mode: initial!important;\\n    z-index: auto;\\n}\\n\\n.ace_layer {\\n    z-index: 1;\\n    position: absolute;\\n    overflow: hidden;\\n    /* workaround for chrome bug https://github.com/ajaxorg/ace/issues/2312*/\\n    word-wrap: normal;\\n    white-space: pre;\\n    height: 100%;\\n    width: 100%;\\n    box-sizing: border-box;\\n    /* setting pointer-events: auto; on node under the mouse, which changes\\n        during scroll, will break mouse wheel scrolling in Safari */\\n    pointer-events: none;\\n}\\n\\n.ace_gutter-layer {\\n    position: relative;\\n    width: auto;\\n    text-align: right;\\n    pointer-events: auto;\\n    height: 1000000px;\\n    contain: style size layout;\\n}\\n\\n.ace_text-layer {\\n    font: inherit !important;\\n    position: absolute;\\n    height: 1000000px;\\n    width: 1000000px;\\n    contain: style size layout;\\n}\\n\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\n    contain: style size layout;\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n    contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n    contain: strict;\\n}\\n\\n.ace_cjk {\\n    display: inline-block;\\n    text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n    z-index: 4;\\n}\\n\\n.ace_cursor {\\n    z-index: 4;\\n    position: absolute;\\n    box-sizing: border-box;\\n    border-left: 2px solid;\\n    /* workaround for smooth cursor repaintng whole screen in chrome */\\n    transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n    border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n    border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n    border-left-width: 0;\\n    border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n    opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n    opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n    transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n    animation-duration: 1000ms;\\n    animation-timing-function: step-end;\\n    animation-name: blink-ace-animate;\\n    animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n    animation-duration: 1000ms;\\n    animation-timing-function: ease-in-out;\\n    animation-name: blink-ace-animate-smooth;\\n}\\n    \\n@keyframes blink-ace-animate {\\n    from, to { opacity: 1; }\\n    60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n    from, to { opacity: 1; }\\n    45% { opacity: 1; }\\n    60% { opacity: 0; }\\n    85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n    position: absolute;\\n    z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n    position: absolute;\\n    z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n    position: absolute;\\n    z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n    position: absolute;\\n    border-bottom: 1px solid #DE5555;\\n    border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n    position: absolute;\\n    z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n    position: absolute;\\n    z-index: 4;\\n    box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n    box-sizing: border-box;\\n\\n    display: inline-block;\\n    height: 11px;\\n    margin-top: -2px;\\n    vertical-align: middle;\\n\\n    background-image:\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n    background-repeat: no-repeat, repeat-x;\\n    background-position: center center, top left;\\n    color: transparent;\\n\\n    border: 1px solid black;\\n    border-radius: 2px;\\n\\n    cursor: pointer;\\n    pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n    background-image:\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n    background-color: #f5f5f5;\\n    border: 1px solid gray;\\n    border-radius: 1px;\\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n    color: black;\\n    padding: 3px 4px;\\n    position: fixed;\\n    z-index: 999999;\\n    box-sizing: border-box;\\n    cursor: default;\\n    white-space: pre-wrap;\\n    word-wrap: break-word;\\n    line-height: normal;\\n    font-style: normal;\\n    font-weight: normal;\\n    letter-spacing: normal;\\n    pointer-events: none;\\n    overflow: auto;\\n    max-width: min(33em, 66vw);\\n    overscroll-behavior: contain;\\n}\\n.ace_tooltip pre {\\n    white-space: pre-wrap;\\n}\\n\\n.ace_tooltip.ace_dark {\\n    background-color: #636363;\\n    color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n    outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n    display: inline-block;\\n    width: 18px;\\n    vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n    display: inline-block;\\n    width: 12px;\\n    vertical-align: top;\\n    -webkit-mask-repeat: no-repeat;\\n    -webkit-mask-size: 12px;\\n    -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n    padding-right: 13px;\\n}\\n\\n.ace_fold-widget, .ace_custom-widget {\\n    box-sizing: border-box;\\n\\n    margin: 0 -12px 0 1px;\\n    display: none;\\n    width: 11px;\\n    vertical-align: top;\\n\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n    background-repeat: no-repeat;\\n    background-position: center;\\n\\n    border-radius: 3px;\\n    \\n    border: 1px solid transparent;\\n    cursor: pointer;\\n    pointer-events: auto;\\n}\\n\\n.ace_custom-widget {\\n    background: none;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n    display: inline-block;   \\n}\\n\\n.ace_fold-widget.ace_end {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n    border: 1px solid rgba(0, 0, 0, 0.3);\\n    background-color: rgba(255, 255, 255, 0.2);\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n    border: 1px solid rgba(0, 0, 0, 0.4);\\n    background-color: rgba(0, 0, 0, 0.05);\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n    background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n    border: 1px solid lightgray;\\n    display: inline-block;\\n    margin: -1px 8px;\\n    padding: 0 5px;\\n    pointer-events: auto;\\n    cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n    border-color: gray;\\n    background: rgba(200,200,200,0.2);\\n    display: inline-block;\\n    pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n    background-color: #FFB4B4;\\n    border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n    transition: opacity 0.4s ease 0.05s;\\n    opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n    transition: opacity 0.05s ease 0.05s;\\n    opacity:1;\\n}\\n\\n.ace_underline {\\n    text-decoration: underline;\\n}\\n\\n.ace_bold {\\n    font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n    font-weight: normal;\\n}\\n\\n.ace_italic {\\n    font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n    background-color: rgba(255, 0, 0,0.2);\\n    position: absolute;\\n    z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n    background-color: rgba(255, 255, 0,0.2);\\n    position: absolute;\\n    z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n    position: absolute;\\n    line-height: 1.5;\\n    border-radius: 4px;\\n    -ms-user-select: none;\\n    -moz-user-select: none;\\n    -webkit-user-select: none;\\n    user-select: none;\\n    background: white;\\n    box-shadow: 1px 3px 2px grey;\\n    border: 1px solid #dcdcdc;\\n    color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n    background: #333;\\n    color: #ccc;\\n    box-shadow: 1px 3px 2px grey;\\n    border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n    padding: 2px;\\n    cursor: pointer;\\n    overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n    background-color: #eee;\\n    opacity:1;\\n}\\n.ace_mobile-button:active {\\n    background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n    position: relative;\\n    font-family: arial;\\n    transform: scale(0.9);\\n    transform-origin: left;\\n    white-space: pre;\\n    opacity: 0.7;\\n    margin: 0 10px;\\n    z-index: 1;\\n}\\n\\n.ace_ghost_text {\\n    opacity: 0.5;\\n    font-style: italic;\\n}\\n\\n.ace_ghost_text_container > div {\\n    white-space: pre;\\n}\\n\\n.ghost_text_line_wrapped::after {\\n    content: \\\"\\u21A9\\\";\\n    position: absolute;\\n}\\n\\n.ace_lineWidgetContainer.ace_ghost_text {\\n    margin: 0px 4px\\n}\\n\\n.ace_screenreader-only {\\n    position:absolute;\\n    left:-10000px;\\n    top:auto;\\n    width:1px;\\n    height:1px;\\n    overflow:hidden;\\n}\\n\\n.ace_hidden_token {\\n    display: none;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = /** @class */ (function () {\n    function Decorator(scrollbarV, renderer) {\n        this.renderer = renderer;\n        this.pixelRatio = 1;\n        this.maxHeight = renderer.layerConfig.maxHeight;\n        this.lineHeight = renderer.layerConfig.lineHeight;\n        this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n        this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n        this.colors = {};\n        this.colors.dark = {\n            \"error\": \"rgba(255, 18, 18, 1)\",\n            \"warning\": \"rgba(18, 136, 18, 1)\",\n            \"info\": \"rgba(18, 18, 136, 1)\",\n        };\n        this.colors.light = {\n            \"error\": \"rgb(255,51,51)\",\n            \"warning\": \"rgb(32,133,72)\",\n            \"info\": \"rgb(35,68,138)\",\n        };\n        this.setScrollBarV(scrollbarV);\n    }\n    Decorator.prototype.$createCanvas = function () {\n        this.canvas = dom.createElement(\"canvas\");\n        this.canvas.style.top = 0 + \"px\";\n        this.canvas.style.right = 0 + \"px\";\n        this.canvas.style.zIndex = \"7\";\n        this.canvas.style.position = \"absolute\";\n    };\n    Decorator.prototype.setScrollBarV = function (scrollbarV) {\n        this.$createCanvas();\n        this.scrollbarV = scrollbarV;\n        scrollbarV.element.appendChild(this.canvas);\n        this.setDimensions();\n    };\n    Decorator.prototype.$updateDecorators = function (config) {\n        if (typeof this.canvas.getContext !== \"function\") {\n            return;\n        }\n        var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n        this.setDimensions(config);\n        var ctx = this.canvas.getContext(\"2d\");\n        function compare(a, b) {\n            if (a.priority < b.priority)\n                return -1;\n            if (a.priority > b.priority)\n                return 1;\n            return 0;\n        }\n        var annotations = this.renderer.session.$annotations;\n        ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n        if (annotations) {\n            var priorities = {\n                \"info\": 1,\n                \"warning\": 2,\n                \"error\": 3\n            };\n            annotations.forEach(function (item) {\n                item[\"priority\"] = priorities[item.type] || null;\n            });\n            annotations = annotations.sort(compare);\n            for (var i = 0; i < annotations.length; i++) {\n                var row = annotations[i].row;\n                var offset1 = this.getVerticalOffsetForRow(row);\n                var offset2 = offset1 + this.lineHeight;\n                var y1 = Math.round(this.heightRatio * offset1);\n                var y2 = Math.round(this.heightRatio * offset2);\n                var ycenter = Math.round((y1 + y2) / 2);\n                var halfHeight = (y2 - ycenter);\n                if (halfHeight < this.halfMinDecorationHeight) {\n                    halfHeight = this.halfMinDecorationHeight;\n                }\n                if (ycenter - halfHeight < 0) {\n                    ycenter = halfHeight;\n                }\n                if (ycenter + halfHeight > this.canvasHeight) {\n                    ycenter = this.canvasHeight - halfHeight;\n                }\n                var from = ycenter - halfHeight;\n                var to = ycenter + halfHeight;\n                var zoneHeight = to - from;\n                ctx.fillStyle = colors[annotations[i].type] || null;\n                ctx.fillRect(0, from, Math.round(this.oneZoneWidth - 1), zoneHeight);\n            }\n        }\n        var cursor = this.renderer.session.selection.getCursor();\n        if (cursor) {\n            var currentY = Math.round(this.getVerticalOffsetForRow(cursor.row) * this.heightRatio);\n            ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n            ctx.fillRect(0, currentY, this.canvasWidth, 2);\n        }\n    };\n    Decorator.prototype.getVerticalOffsetForRow = function (row) {\n        row = row | 0;\n        var offset = this.renderer.session.documentToScreenRow(row, 0) * this.lineHeight;\n        return offset;\n    };\n    Decorator.prototype.setDimensions = function (config) {\n        config = config || this.renderer.layerConfig;\n        this.maxHeight = config.maxHeight;\n        this.lineHeight = config.lineHeight;\n        this.canvasHeight = config.height;\n        this.canvasWidth = this.scrollbarV.width || this.canvasWidth;\n        this.setZoneWidth();\n        this.canvas.width = this.canvasWidth;\n        this.canvas.height = this.canvasHeight;\n        if (this.maxHeight < this.canvasHeight) {\n            this.heightRatio = 1;\n        }\n        else {\n            this.heightRatio = this.canvasHeight / this.maxHeight;\n        }\n    };\n    Decorator.prototype.setZoneWidth = function () {\n        this.oneZoneWidth = this.canvasWidth;\n    };\n    Decorator.prototype.destroy = function () {\n        this.canvas.parentNode.removeChild(this.canvas);\n    };\n    return Decorator;\n}());\noop.implement(Decorator.prototype, EventEmitter);\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor-css\",\"ace/layer/decorators\",\"ace/lib/useragent\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor-css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar isTextToken = require(\"./layer/text_util\").isTextToken;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = /** @class */ (function () {\n    function VirtualRenderer(container, theme) {\n        var _self = this;\n        this.container = container || dom.createElement(\"div\");\n        dom.addCssClass(this.container, \"ace_editor\");\n        if (dom.HI_DPI)\n            dom.addCssClass(this.container, \"ace_hidpi\");\n        this.setTheme(theme);\n        if (config.get(\"useStrictCSP\") == null)\n            config.set(\"useStrictCSP\", false);\n        this.$gutter = dom.createElement(\"div\");\n        this.$gutter.className = \"ace_gutter\";\n        this.container.appendChild(this.$gutter);\n        this.$gutter.setAttribute(\"aria-hidden\", \"true\");\n        this.scroller = dom.createElement(\"div\");\n        this.scroller.className = \"ace_scroller\";\n        this.container.appendChild(this.scroller);\n        this.content = dom.createElement(\"div\");\n        this.content.className = \"ace_content\";\n        this.scroller.appendChild(this.content);\n        this.$gutterLayer = new GutterLayer(this.$gutter);\n        this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n        this.$markerBack = new MarkerLayer(this.content);\n        var textLayer = this.$textLayer = new TextLayer(this.content);\n        this.canvas = textLayer.element;\n        this.$markerFront = new MarkerLayer(this.content);\n        this.$cursorLayer = new CursorLayer(this.content);\n        this.$horizScroll = false;\n        this.$vScroll = false;\n        this.scrollBar =\n            this.scrollBarV = new VScrollBar(this.container, this);\n        this.scrollBarH = new HScrollBar(this.container, this);\n        this.scrollBarV.on(\"scroll\", function (e) {\n            if (!_self.$scrollAnimation)\n                _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n        });\n        this.scrollBarH.on(\"scroll\", function (e) {\n            if (!_self.$scrollAnimation)\n                _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n        });\n        this.scrollTop = 0;\n        this.scrollLeft = 0;\n        this.cursorPos = {\n            row: 0,\n            column: 0\n        };\n        this.$fontMetrics = new FontMetrics(this.container);\n        this.$textLayer.$setFontMetrics(this.$fontMetrics);\n        this.$textLayer.on(\"changeCharacterSize\", function (e) {\n            _self.updateCharacterSize();\n            _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n            _self._signal(\"changeCharacterSize\", e);\n        });\n        this.$size = {\n            width: 0,\n            height: 0,\n            scrollerHeight: 0,\n            scrollerWidth: 0,\n            $dirty: true\n        };\n        this.layerConfig = {\n            width: 1,\n            padding: 0,\n            firstRow: 0,\n            firstRowScreen: 0,\n            lastRow: 0,\n            lineHeight: 0,\n            characterWidth: 0,\n            minHeight: 1,\n            maxHeight: 1,\n            offset: 0,\n            height: 1,\n            gutterOffset: 1\n        };\n        this.scrollMargin = {\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0,\n            v: 0,\n            h: 0\n        };\n        this.margin = {\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0,\n            v: 0,\n            h: 0\n        };\n        this.$keepTextAreaAtCursor = !useragent.isIOS;\n        this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.updateCharacterSize();\n        this.setPadding(4);\n        this.$addResizeObserver();\n        config.resetOptions(this);\n        config._signal(\"renderer\", this);\n    }\n    VirtualRenderer.prototype.updateCharacterSize = function () {\n        if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n            this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n            this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n        }\n        this.layerConfig.characterWidth =\n            this.characterWidth = this.$textLayer.getCharacterWidth();\n        this.layerConfig.lineHeight =\n            this.lineHeight = this.$textLayer.getLineHeight();\n        this.$updatePrintMargin();\n        dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n    };\n    VirtualRenderer.prototype.setSession = function (session) {\n        if (this.session)\n            this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n        this.session = session;\n        if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n            session.setScrollTop(-this.scrollMargin.top);\n        this.$cursorLayer.setSession(session);\n        this.$markerBack.setSession(session);\n        this.$markerFront.setSession(session);\n        this.$gutterLayer.setSession(session);\n        this.$textLayer.setSession(session);\n        if (!session)\n            return;\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.session.$setFontMetrics(this.$fontMetrics);\n        this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n        this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n        this.onChangeNewLineMode();\n        this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n    };\n    VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) {\n        if (lastRow === undefined)\n            lastRow = Infinity;\n        if (!this.$changedLines) {\n            this.$changedLines = {\n                firstRow: firstRow,\n                lastRow: lastRow\n            };\n        }\n        else {\n            if (this.$changedLines.firstRow > firstRow)\n                this.$changedLines.firstRow = firstRow;\n            if (this.$changedLines.lastRow < lastRow)\n                this.$changedLines.lastRow = lastRow;\n        }\n        if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n            if (force)\n                this.$changedLines.lastRow = this.layerConfig.lastRow;\n            else\n                return;\n        }\n        if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n            return;\n        this.$loop.schedule(this.CHANGE_LINES);\n    };\n    VirtualRenderer.prototype.onChangeNewLineMode = function () {\n        this.$loop.schedule(this.CHANGE_TEXT);\n        this.$textLayer.$updateEolChar();\n        this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n    };\n    VirtualRenderer.prototype.onChangeTabSize = function () {\n        this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n        this.$textLayer.onChangeTabSize();\n    };\n    VirtualRenderer.prototype.updateText = function () {\n        this.$loop.schedule(this.CHANGE_TEXT);\n    };\n    VirtualRenderer.prototype.updateFull = function (force) {\n        if (force)\n            this.$renderChanges(this.CHANGE_FULL, true);\n        else\n            this.$loop.schedule(this.CHANGE_FULL);\n    };\n    VirtualRenderer.prototype.updateFontSize = function () {\n        this.$textLayer.checkForSizeChanges();\n    };\n    VirtualRenderer.prototype.$updateSizeAsync = function () {\n        if (this.$loop.pending)\n            this.$size.$dirty = true;\n        else\n            this.onResize();\n    };\n    VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) {\n        if (this.resizing > 2)\n            return;\n        else if (this.resizing > 0)\n            this.resizing++;\n        else\n            this.resizing = force ? 1 : 0;\n        var el = this.container;\n        if (!height)\n            height = el.clientHeight || el.scrollHeight;\n        if (!height && this.$maxLines && this.lineHeight > 1) {\n            if (!el.style.height || el.style.height == \"0px\") {\n                el.style.height = \"1px\";\n                height = el.clientHeight || el.scrollHeight;\n            }\n        }\n        if (!width)\n            width = el.clientWidth || el.scrollWidth;\n        var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n        if (this.$resizeTimer)\n            this.$resizeTimer.cancel();\n        if (!this.$size.scrollerHeight || (!width && !height))\n            return this.resizing = 0;\n        if (force)\n            this.$gutterLayer.$padding = null;\n        if (force)\n            this.$renderChanges(changes | this.$changes, true);\n        else\n            this.$loop.schedule(changes | this.$changes);\n        if (this.resizing)\n            this.resizing = 0;\n        this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n        if (this.$customScrollbar) {\n            this.$updateCustomScrollbar(true);\n        }\n    };\n    VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) {\n        height -= (this.$extraHeight || 0);\n        var changes = 0;\n        var size = this.$size;\n        var oldSize = {\n            width: size.width,\n            height: size.height,\n            scrollerHeight: size.scrollerHeight,\n            scrollerWidth: size.scrollerWidth\n        };\n        if (height && (force || size.height != height)) {\n            size.height = height;\n            changes |= this.CHANGE_SIZE;\n            size.scrollerHeight = size.height;\n            if (this.$horizScroll)\n                size.scrollerHeight -= this.scrollBarH.getHeight();\n            this.scrollBarV.setHeight(size.scrollerHeight);\n            this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n            changes = changes | this.CHANGE_SCROLL;\n        }\n        if (width && (force || size.width != width)) {\n            changes |= this.CHANGE_SIZE;\n            size.width = width;\n            if (gutterWidth == null)\n                gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n            this.gutterWidth = gutterWidth;\n            dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n            dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n            size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n            dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n            var right = this.scrollBarV.getWidth() + \"px\";\n            dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n            dom.setStyle(this.scroller.style, \"right\", right);\n            dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n            this.scrollBarH.setWidth(size.scrollerWidth);\n            if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n                changes |= this.CHANGE_FULL;\n            }\n        }\n        size.$dirty = !width || !height;\n        if (changes)\n            this._signal(\"resize\", oldSize);\n        return changes;\n    };\n    VirtualRenderer.prototype.onGutterResize = function (width) {\n        var gutterWidth = this.$showGutter ? width : 0;\n        if (gutterWidth != this.gutterWidth)\n            this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n        if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        }\n        else if (this.$size.$dirty) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        }\n        else {\n            this.$computeLayerConfig();\n        }\n    };\n    VirtualRenderer.prototype.adjustWrapLimit = function () {\n        var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n        var limit = Math.floor(availableWidth / this.characterWidth);\n        return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n    };\n    VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) {\n        this.setOption(\"animatedScroll\", shouldAnimate);\n    };\n    VirtualRenderer.prototype.getAnimatedScroll = function () {\n        return this.$animatedScroll;\n    };\n    VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) {\n        this.setOption(\"showInvisibles\", showInvisibles);\n        this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n    };\n    VirtualRenderer.prototype.getShowInvisibles = function () {\n        return this.getOption(\"showInvisibles\");\n    };\n    VirtualRenderer.prototype.getDisplayIndentGuides = function () {\n        return this.getOption(\"displayIndentGuides\");\n    };\n    VirtualRenderer.prototype.setDisplayIndentGuides = function (display) {\n        this.setOption(\"displayIndentGuides\", display);\n    };\n    VirtualRenderer.prototype.getHighlightIndentGuides = function () {\n        return this.getOption(\"highlightIndentGuides\");\n    };\n    VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) {\n        this.setOption(\"highlightIndentGuides\", highlight);\n    };\n    VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) {\n        this.setOption(\"showPrintMargin\", showPrintMargin);\n    };\n    VirtualRenderer.prototype.getShowPrintMargin = function () {\n        return this.getOption(\"showPrintMargin\");\n    };\n    VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) {\n        this.setOption(\"printMarginColumn\", printMarginColumn);\n    };\n    VirtualRenderer.prototype.getPrintMarginColumn = function () {\n        return this.getOption(\"printMarginColumn\");\n    };\n    VirtualRenderer.prototype.getShowGutter = function () {\n        return this.getOption(\"showGutter\");\n    };\n    VirtualRenderer.prototype.setShowGutter = function (show) {\n        return this.setOption(\"showGutter\", show);\n    };\n    VirtualRenderer.prototype.getFadeFoldWidgets = function () {\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n    VirtualRenderer.prototype.setFadeFoldWidgets = function (show) {\n        this.setOption(\"fadeFoldWidgets\", show);\n    };\n    VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n    VirtualRenderer.prototype.getHighlightGutterLine = function () {\n        return this.getOption(\"highlightGutterLine\");\n    };\n    VirtualRenderer.prototype.$updatePrintMargin = function () {\n        if (!this.$showPrintMargin && !this.$printMarginEl)\n            return;\n        if (!this.$printMarginEl) {\n            var containerEl = dom.createElement(\"div\");\n            containerEl.className = \"ace_layer ace_print-margin-layer\";\n            this.$printMarginEl = dom.createElement(\"div\");\n            this.$printMarginEl.className = \"ace_print-margin\";\n            containerEl.appendChild(this.$printMarginEl);\n            this.content.insertBefore(containerEl, this.content.firstChild);\n        }\n        var style = this.$printMarginEl.style;\n        style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n        style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n        if (this.session && this.session.$wrap == -1)\n            this.adjustWrapLimit();\n    };\n    VirtualRenderer.prototype.getContainerElement = function () {\n        return this.container;\n    };\n    VirtualRenderer.prototype.getMouseEventTarget = function () {\n        return this.scroller;\n    };\n    VirtualRenderer.prototype.getTextAreaContainer = function () {\n        return this.container;\n    };\n    VirtualRenderer.prototype.$moveTextAreaToCursor = function () {\n        if (this.$isMousePressed)\n            return;\n        var style = this.textarea.style;\n        var composition = this.$composition;\n        if (!this.$keepTextAreaAtCursor && !composition) {\n            dom.translate(this.textarea, -100, 0);\n            return;\n        }\n        var pixelPos = this.$cursorLayer.$pixelPos;\n        if (!pixelPos)\n            return;\n        if (composition && composition.markerRange)\n            pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n        var config = this.layerConfig;\n        var posTop = pixelPos.top;\n        var posLeft = pixelPos.left;\n        posTop -= config.offset;\n        var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1;\n        if (posTop < 0 || posTop > config.height - h) {\n            dom.translate(this.textarea, 0, 0);\n            return;\n        }\n        var w = 1;\n        var maxTop = this.$size.height - h;\n        if (!composition) {\n            posTop += this.lineHeight;\n        }\n        else {\n            if (composition.useTextareaForIME) {\n                var val = this.textarea.value;\n                w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n            }\n            else {\n                posTop += this.lineHeight + 2;\n            }\n        }\n        posLeft -= this.scrollLeft;\n        if (posLeft > this.$size.scrollerWidth - w)\n            posLeft = this.$size.scrollerWidth - w;\n        posLeft += this.gutterWidth + this.margin.left;\n        dom.setStyle(style, \"height\", h + \"px\");\n        dom.setStyle(style, \"width\", w + \"px\");\n        dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n    };\n    VirtualRenderer.prototype.getFirstVisibleRow = function () {\n        return this.layerConfig.firstRow;\n    };\n    VirtualRenderer.prototype.getFirstFullyVisibleRow = function () {\n        return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n    };\n    VirtualRenderer.prototype.getLastFullyVisibleRow = function () {\n        var config = this.layerConfig;\n        var lastRow = config.lastRow;\n        var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n        if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n            return lastRow - 1;\n        return lastRow;\n    };\n    VirtualRenderer.prototype.getLastVisibleRow = function () {\n        return this.layerConfig.lastRow;\n    };\n    VirtualRenderer.prototype.setPadding = function (padding) {\n        this.$padding = padding;\n        this.$textLayer.setPadding(padding);\n        this.$cursorLayer.setPadding(padding);\n        this.$markerFront.setPadding(padding);\n        this.$markerBack.setPadding(padding);\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.$updatePrintMargin();\n    };\n    VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) {\n        var sm = this.scrollMargin;\n        sm.top = top | 0;\n        sm.bottom = bottom | 0;\n        sm.right = right | 0;\n        sm.left = left | 0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        if (sm.top && this.scrollTop <= 0 && this.session)\n            this.session.setScrollTop(-sm.top);\n        this.updateFull();\n    };\n    VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) {\n        var sm = this.margin;\n        sm.top = top | 0;\n        sm.bottom = bottom | 0;\n        sm.right = right | 0;\n        sm.left = left | 0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n        this.updateFull();\n    };\n    VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () {\n        return this.$hScrollBarAlwaysVisible;\n    };\n    VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n        this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n    };\n    VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () {\n        return this.$vScrollBarAlwaysVisible;\n    };\n    VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n        this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n    };\n    VirtualRenderer.prototype.$updateScrollBarV = function () {\n        var scrollHeight = this.layerConfig.maxHeight;\n        var scrollerHeight = this.$size.scrollerHeight;\n        if (!this.$maxLines && this.$scrollPastEnd) {\n            scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n            if (this.scrollTop > scrollHeight - scrollerHeight) {\n                scrollHeight = this.scrollTop + scrollerHeight;\n                this.scrollBarV.scrollTop = null;\n            }\n        }\n        this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n        this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n    };\n    VirtualRenderer.prototype.$updateScrollBarH = function () {\n        this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n        this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n    };\n    VirtualRenderer.prototype.freeze = function () {\n        this.$frozen = true;\n    };\n    VirtualRenderer.prototype.unfreeze = function () {\n        this.$frozen = false;\n    };\n    VirtualRenderer.prototype.$renderChanges = function (changes, force) {\n        if (this.$changes) {\n            changes |= this.$changes;\n            this.$changes = 0;\n        }\n        if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n            this.$changes |= changes;\n            return;\n        }\n        if (this.$size.$dirty) {\n            this.$changes |= changes;\n            return this.onResize(true);\n        }\n        if (!this.lineHeight) {\n            this.$textLayer.checkForSizeChanges();\n        }\n        this._signal(\"beforeRender\", changes);\n        if (this.session && this.session.$bidiHandler)\n            this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n        var config = this.layerConfig;\n        if (changes & this.CHANGE_FULL ||\n            changes & this.CHANGE_SIZE ||\n            changes & this.CHANGE_TEXT ||\n            changes & this.CHANGE_LINES ||\n            changes & this.CHANGE_SCROLL ||\n            changes & this.CHANGE_H_SCROLL) {\n            changes |= this.$computeLayerConfig() | this.$loop.clear();\n            if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n                var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight;\n                if (st > 0) {\n                    this.scrollTop = st;\n                    changes = changes | this.CHANGE_SCROLL;\n                    changes |= this.$computeLayerConfig() | this.$loop.clear();\n                }\n            }\n            config = this.layerConfig;\n            this.$updateScrollBarV();\n            if (changes & this.CHANGE_H_SCROLL)\n                this.$updateScrollBarH();\n            dom.translate(this.content, -this.scrollLeft, -config.offset);\n            var width = config.width + 2 * this.$padding + \"px\";\n            var height = config.minHeight + \"px\";\n            dom.setStyle(this.content.style, \"width\", width);\n            dom.setStyle(this.content.style, \"height\", height);\n        }\n        if (changes & this.CHANGE_H_SCROLL) {\n            dom.translate(this.content, -this.scrollLeft, -config.offset);\n            this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \";\n            if (this.enableKeyboardAccessibility)\n                this.scroller.className += this.keyboardFocusClassName;\n        }\n        if (changes & this.CHANGE_FULL) {\n            this.$changedLines = null;\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\", changes);\n            return;\n        }\n        if (changes & this.CHANGE_SCROLL) {\n            this.$changedLines = null;\n            if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n                this.$textLayer.update(config);\n            else\n                this.$textLayer.scrollLines(config);\n            if (this.$showGutter) {\n                if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n                    this.$gutterLayer.update(config);\n                else\n                    this.$gutterLayer.scrollLines(config);\n            }\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\", changes);\n            return;\n        }\n        if (changes & this.CHANGE_TEXT) {\n            this.$changedLines = null;\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        else if (changes & this.CHANGE_LINES) {\n            if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        else if (changes & this.CHANGE_CURSOR) {\n            if (this.$highlightGutterLine)\n                this.$gutterLayer.updateLineHighlight(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        if (changes & this.CHANGE_CURSOR) {\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n        }\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n            this.$markerFront.update(config);\n        }\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n            this.$markerBack.update(config);\n        }\n        this._signal(\"afterRender\", changes);\n    };\n    VirtualRenderer.prototype.$autosize = function () {\n        var height = this.session.getScreenLength() * this.lineHeight;\n        var maxHeight = this.$maxLines * this.lineHeight;\n        var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n        if (this.$horizScroll)\n            desiredHeight += this.scrollBarH.getHeight();\n        if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n            desiredHeight = this.$maxPixelHeight;\n        var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n        var vScroll = !hideScrollbars && height > maxHeight;\n        if (desiredHeight != this.desiredHeight ||\n            this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n            if (vScroll != this.$vScroll) {\n                this.$vScroll = vScroll;\n                this.scrollBarV.setVisible(vScroll);\n            }\n            var w = this.container.clientWidth;\n            this.container.style.height = desiredHeight + \"px\";\n            this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n            this.desiredHeight = desiredHeight;\n            this._signal(\"autosize\");\n        }\n    };\n    VirtualRenderer.prototype.$computeLayerConfig = function () {\n        var session = this.session;\n        var size = this.$size;\n        var hideScrollbars = size.height <= 2 * this.lineHeight;\n        var screenLines = this.session.getScreenLength();\n        var maxHeight = screenLines * this.lineHeight;\n        var longestLine = this.$getLongestLine();\n        var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n            size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n        var hScrollChanged = this.$horizScroll !== horizScroll;\n        if (hScrollChanged) {\n            this.$horizScroll = horizScroll;\n            this.scrollBarH.setVisible(horizScroll);\n        }\n        var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n        if (this.$maxLines && this.lineHeight > 1) {\n            this.$autosize();\n            hideScrollbars = size.height <= 2 * this.lineHeight;\n        }\n        var minHeight = size.scrollerHeight + this.lineHeight;\n        var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n            ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n            : 0;\n        maxHeight += scrollPastEnd;\n        var sm = this.scrollMargin;\n        this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n        this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n        var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n            size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n        var vScrollChanged = vScrollBefore !== vScroll;\n        if (vScrollChanged) {\n            this.$vScroll = vScroll;\n            this.scrollBarV.setVisible(vScroll);\n        }\n        var offset = this.scrollTop % this.lineHeight;\n        var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n        var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n        var lastRow = firstRow + lineCount;\n        var firstRowScreen, firstRowHeight;\n        var lineHeight = this.lineHeight;\n        firstRow = session.screenToDocumentRow(firstRow, 0);\n        var foldLine = session.getFoldLine(firstRow);\n        if (foldLine) {\n            firstRow = foldLine.start.row;\n        }\n        firstRowScreen = session.documentToScreenRow(firstRow, 0);\n        firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n        lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n        minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n            firstRowHeight;\n        offset = this.scrollTop - firstRowScreen * lineHeight;\n        if (offset < 0 && firstRowScreen > 0) {\n            firstRowScreen = Math.max(0, firstRowScreen + Math.floor(offset / lineHeight));\n            offset = this.scrollTop - firstRowScreen * lineHeight;\n        }\n        var changes = 0;\n        if (this.layerConfig.width != longestLine || hScrollChanged)\n            changes = this.CHANGE_H_SCROLL;\n        if (hScrollChanged || vScrollChanged) {\n            changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n            this._signal(\"scrollbarVisibilityChanged\");\n            if (vScrollChanged)\n                longestLine = this.$getLongestLine();\n        }\n        this.layerConfig = {\n            width: longestLine,\n            padding: this.$padding,\n            firstRow: firstRow,\n            firstRowScreen: firstRowScreen,\n            lastRow: lastRow,\n            lineHeight: lineHeight,\n            characterWidth: this.characterWidth,\n            minHeight: minHeight,\n            maxHeight: maxHeight,\n            offset: offset,\n            gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n            height: this.$size.scrollerHeight\n        };\n        if (this.session.$bidiHandler)\n            this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n        return changes;\n    };\n    VirtualRenderer.prototype.$updateLines = function () {\n        if (!this.$changedLines)\n            return;\n        var firstRow = this.$changedLines.firstRow;\n        var lastRow = this.$changedLines.lastRow;\n        this.$changedLines = null;\n        var layerConfig = this.layerConfig;\n        if (firstRow > layerConfig.lastRow + 1) {\n            return;\n        }\n        if (lastRow < layerConfig.firstRow) {\n            return;\n        }\n        if (lastRow === Infinity) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(layerConfig);\n            this.$textLayer.update(layerConfig);\n            return;\n        }\n        this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n        return true;\n    };\n    VirtualRenderer.prototype.$getLongestLine = function () {\n        var charCount = this.session.getScreenWidth();\n        if (this.showInvisibles && !this.session.$useWrapMode)\n            charCount += 1;\n        if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n            charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n        return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n    };\n    VirtualRenderer.prototype.updateFrontMarkers = function () {\n        this.$markerFront.setMarkers(this.session.getMarkers(true));\n        this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n    };\n    VirtualRenderer.prototype.updateBackMarkers = function () {\n        this.$markerBack.setMarkers(this.session.getMarkers());\n        this.$loop.schedule(this.CHANGE_MARKER_BACK);\n    };\n    VirtualRenderer.prototype.addGutterDecoration = function (row, className) {\n        this.$gutterLayer.addGutterDecoration(row, className);\n    };\n    VirtualRenderer.prototype.removeGutterDecoration = function (row, className) {\n        this.$gutterLayer.removeGutterDecoration(row, className);\n    };\n    VirtualRenderer.prototype.updateBreakpoints = function (rows) {\n        this._rows = rows;\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    VirtualRenderer.prototype.setAnnotations = function (annotations) {\n        this.$gutterLayer.setAnnotations(annotations);\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    VirtualRenderer.prototype.updateCursor = function () {\n        this.$loop.schedule(this.CHANGE_CURSOR);\n    };\n    VirtualRenderer.prototype.hideCursor = function () {\n        this.$cursorLayer.hideCursor();\n    };\n    VirtualRenderer.prototype.showCursor = function () {\n        this.$cursorLayer.showCursor();\n    };\n    VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) {\n        this.scrollCursorIntoView(anchor, offset);\n        this.scrollCursorIntoView(lead, offset);\n    };\n    VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n        if (this.$size.scrollerHeight === 0)\n            return;\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n        var newLeft = pos.left;\n        var newTop = pos.top;\n        var topMargin = $viewMargin && $viewMargin.top || 0;\n        var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n        if (this.$scrollAnimation) {\n            this.$stopAnimation = true;\n        }\n        var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n        if (currentTop + topMargin > newTop) {\n            if (offset && currentTop + topMargin > newTop + this.lineHeight)\n                newTop -= offset * this.$size.scrollerHeight;\n            if (newTop === 0)\n                newTop = -this.scrollMargin.top;\n            this.session.setScrollTop(newTop);\n        }\n        else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) {\n            if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight)\n                newTop += offset * this.$size.scrollerHeight;\n            this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n        }\n        var currentLeft = this.scrollLeft;\n        var twoCharsWidth = 2 * this.layerConfig.characterWidth;\n        if (newLeft - twoCharsWidth < currentLeft) {\n            newLeft -= twoCharsWidth;\n            if (newLeft < this.$padding + twoCharsWidth) {\n                newLeft = -this.scrollMargin.left;\n            }\n            this.session.setScrollLeft(newLeft);\n        }\n        else {\n            newLeft += twoCharsWidth;\n            if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) {\n                this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth));\n            }\n            else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) {\n                this.session.setScrollLeft(0);\n            }\n        }\n    };\n    VirtualRenderer.prototype.getScrollTop = function () {\n        return this.session.getScrollTop();\n    };\n    VirtualRenderer.prototype.getScrollLeft = function () {\n        return this.session.getScrollLeft();\n    };\n    VirtualRenderer.prototype.getScrollTopRow = function () {\n        return this.scrollTop / this.lineHeight;\n    };\n    VirtualRenderer.prototype.getScrollBottomRow = function () {\n        return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n    };\n    VirtualRenderer.prototype.scrollToRow = function (row) {\n        this.session.setScrollTop(row * this.lineHeight);\n    };\n    VirtualRenderer.prototype.alignCursor = function (cursor, alignment) {\n        if (typeof cursor == \"number\")\n            cursor = { row: cursor, column: 0 };\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n        var h = this.$size.scrollerHeight - this.lineHeight;\n        var offset = pos.top - h * (alignment || 0);\n        this.session.setScrollTop(offset);\n        return offset;\n    };\n    VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) {\n        var i = 0;\n        var l = this.STEPS;\n        var steps = [];\n        var func = function (t, x_min, dx) {\n            return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n        };\n        for (i = 0; i < l; ++i)\n            steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n        return steps;\n    };\n    VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) {\n        var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n        var offset = pos.top;\n        if (center)\n            offset -= this.$size.scrollerHeight / 2;\n        var initialScroll = this.scrollTop;\n        this.session.setScrollTop(offset);\n        if (animate !== false)\n            this.animateScrolling(initialScroll, callback);\n    };\n    VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) {\n        var toValue = this.scrollTop;\n        if (!this.$animatedScroll)\n            return;\n        var _self = this;\n        if (fromValue == toValue)\n            return;\n        if (this.$scrollAnimation) {\n            var oldSteps = this.$scrollAnimation.steps;\n            if (oldSteps.length) {\n                fromValue = oldSteps[0];\n                if (fromValue == toValue)\n                    return;\n            }\n        }\n        var steps = _self.$calcSteps(fromValue, toValue);\n        this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n        clearInterval(this.$timer);\n        _self.session.setScrollTop(steps.shift());\n        _self.session.$scrollTop = toValue;\n        function endAnimation() {\n            _self.$timer = clearInterval(_self.$timer);\n            _self.$scrollAnimation = null;\n            _self.$stopAnimation = false;\n            callback && callback();\n        }\n        this.$timer = setInterval(function () {\n            if (_self.$stopAnimation) {\n                endAnimation();\n                return;\n            }\n            if (!_self.session)\n                return clearInterval(_self.$timer);\n            if (steps.length) {\n                _self.session.setScrollTop(steps.shift());\n                _self.session.$scrollTop = toValue;\n            }\n            else if (toValue != null) {\n                _self.session.$scrollTop = -1;\n                _self.session.setScrollTop(toValue);\n                toValue = null;\n            }\n            else {\n                endAnimation();\n            }\n        }, 10);\n    };\n    VirtualRenderer.prototype.scrollToY = function (scrollTop) {\n        if (this.scrollTop !== scrollTop) {\n            this.$loop.schedule(this.CHANGE_SCROLL);\n            this.scrollTop = scrollTop;\n        }\n    };\n    VirtualRenderer.prototype.scrollToX = function (scrollLeft) {\n        if (this.scrollLeft !== scrollLeft)\n            this.scrollLeft = scrollLeft;\n        this.$loop.schedule(this.CHANGE_H_SCROLL);\n    };\n    VirtualRenderer.prototype.scrollTo = function (x, y) {\n        this.session.setScrollTop(y);\n        this.session.setScrollLeft(x);\n    };\n    VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) {\n        deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n        deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n    };\n    VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) {\n        if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n            return true;\n        if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n            - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n            return true;\n        if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n            return true;\n        if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n            - this.layerConfig.width < -1 + this.scrollMargin.right)\n            return true;\n    };\n    VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) {\n        var canvasPos;\n        if (this.$hasCssTransforms) {\n            canvasPos = { top: 0, left: 0 };\n            var p = this.$fontMetrics.transformCoordinates([x, y]);\n            x = p[1] - this.gutterWidth - this.margin.left;\n            y = p[0];\n        }\n        else {\n            canvasPos = this.scroller.getBoundingClientRect();\n        }\n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        var offset = offsetX / this.characterWidth;\n        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n        var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n        return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n    };\n    VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) {\n        var canvasPos;\n        if (this.$hasCssTransforms) {\n            canvasPos = { top: 0, left: 0 };\n            var p = this.$fontMetrics.transformCoordinates([x, y]);\n            x = p[1] - this.gutterWidth - this.margin.left;\n            y = p[0];\n        }\n        else {\n            canvasPos = this.scroller.getBoundingClientRect();\n        }\n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        var offset = offsetX / this.characterWidth;\n        var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n        var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\n        return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n    };\n    VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) {\n        var canvasPos = this.scroller.getBoundingClientRect();\n        var pos = this.session.documentToScreenPosition(row, column);\n        var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n            ? this.session.$bidiHandler.getPosLeft(pos.column)\n            : Math.round(pos.column * this.characterWidth));\n        var y = pos.row * this.lineHeight;\n        return {\n            pageX: canvasPos.left + x - this.scrollLeft,\n            pageY: canvasPos.top + y - this.scrollTop\n        };\n    };\n    VirtualRenderer.prototype.visualizeFocus = function () {\n        dom.addCssClass(this.container, \"ace_focus\");\n    };\n    VirtualRenderer.prototype.visualizeBlur = function () {\n        dom.removeCssClass(this.container, \"ace_focus\");\n    };\n    VirtualRenderer.prototype.showComposition = function (composition) {\n        this.$composition = composition;\n        if (!composition.cssText) {\n            composition.cssText = this.textarea.style.cssText;\n        }\n        if (composition.useTextareaForIME == undefined)\n            composition.useTextareaForIME = this.$useTextareaForIME;\n        if (this.$useTextareaForIME) {\n            dom.addCssClass(this.textarea, \"ace_composition\");\n            this.textarea.style.cssText = \"\";\n            this.$moveTextAreaToCursor();\n            this.$cursorLayer.element.style.display = \"none\";\n        }\n        else {\n            composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n        }\n    };\n    VirtualRenderer.prototype.setCompositionText = function (text) {\n        var cursor = this.session.selection.cursor;\n        this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n        this.$moveTextAreaToCursor();\n    };\n    VirtualRenderer.prototype.hideComposition = function () {\n        if (!this.$composition)\n            return;\n        if (this.$composition.markerId)\n            this.session.removeMarker(this.$composition.markerId);\n        dom.removeCssClass(this.textarea, \"ace_composition\");\n        this.textarea.style.cssText = this.$composition.cssText;\n        var cursor = this.session.selection.cursor;\n        this.removeExtraToken(cursor.row, cursor.column);\n        this.$composition = null;\n        this.$cursorLayer.element.style.display = \"\";\n    };\n    VirtualRenderer.prototype.setGhostText = function (text, position) {\n        var cursor = this.session.selection.cursor;\n        var insertPosition = position || { row: cursor.row, column: cursor.column };\n        this.removeGhostText();\n        var textChunks = this.$calculateWrappedTextChunks(text, insertPosition);\n        this.addToken(textChunks[0].text, \"ghost_text\", insertPosition.row, insertPosition.column);\n        this.$ghostText = {\n            text: text,\n            position: {\n                row: insertPosition.row,\n                column: insertPosition.column\n            }\n        };\n        var widgetDiv = dom.createElement(\"div\");\n        if (textChunks.length > 1) {\n            var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column);\n            var lastLineDiv;\n            textChunks.slice(1).forEach(function (el) {\n                var chunkDiv = dom.createElement(\"div\");\n                var chunkSpan = dom.createElement(\"span\");\n                chunkSpan.className = \"ace_ghost_text\";\n                if (el.wrapped)\n                    chunkDiv.className = \"ghost_text_line_wrapped\";\n                if (el.text.length === 0)\n                    el.text = \" \";\n                chunkSpan.appendChild(dom.createTextNode(el.text));\n                chunkDiv.appendChild(chunkSpan);\n                widgetDiv.appendChild(chunkDiv);\n                lastLineDiv = chunkDiv;\n            });\n            hiddenTokens.forEach(function (token) {\n                var element = dom.createElement(\"span\");\n                if (!isTextToken(token.type))\n                    element.className = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n                element.appendChild(dom.createTextNode(token.value));\n                lastLineDiv.appendChild(element);\n            });\n            this.$ghostTextWidget = {\n                el: widgetDiv,\n                row: insertPosition.row,\n                column: insertPosition.column,\n                className: \"ace_ghost_text_container\"\n            };\n            this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n            var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true);\n            var el = this.container;\n            var height = el.getBoundingClientRect().height;\n            var ghostTextHeight = textChunks.length * this.lineHeight;\n            var fitsY = ghostTextHeight < (height - pixelPosition.top);\n            if (fitsY)\n                return;\n            if (ghostTextHeight < height) {\n                this.scrollBy(0, (textChunks.length - 1) * this.lineHeight);\n            }\n            else {\n                this.scrollToRow(insertPosition.row);\n            }\n        }\n    };\n    VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) {\n        var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n        var limit = Math.floor(availableWidth / this.characterWidth) - 2;\n        limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small\n        var textLines = text.split(/\\r?\\n/);\n        var textChunks = [];\n        for (var i = 0; i < textLines.length; i++) {\n            var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column);\n            var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize);\n            if (wrapSplits.length > 0) {\n                var start = 0;\n                wrapSplits.push(textLines[i].length);\n                for (var j = 0; j < wrapSplits.length; j++) {\n                    var textSlice = textLines[i].slice(start, wrapSplits[j]);\n                    textChunks.push({ text: textSlice, wrapped: true });\n                    start = wrapSplits[j];\n                }\n            }\n            else {\n                textChunks.push({ text: textLines[i], wrapped: false });\n            }\n        }\n        return textChunks;\n    };\n    VirtualRenderer.prototype.removeGhostText = function () {\n        if (!this.$ghostText)\n            return;\n        var position = this.$ghostText.position;\n        this.removeExtraToken(position.row, position.column);\n        if (this.$ghostTextWidget) {\n            this.session.widgetManager.removeLineWidget(this.$ghostTextWidget);\n            this.$ghostTextWidget = null;\n        }\n        this.$ghostText = null;\n    };\n    VirtualRenderer.prototype.addToken = function (text, type, row, column) {\n        var session = this.session;\n        session.bgTokenizer.lines[row] = null;\n        var newToken = { type: type, value: text };\n        var tokens = session.getTokens(row);\n        if (column == null || !tokens.length) {\n            tokens.push(newToken);\n        }\n        else {\n            var l = 0;\n            for (var i = 0; i < tokens.length; i++) {\n                var token = tokens[i];\n                l += token.value.length;\n                if (column <= l) {\n                    var diff = token.value.length - (l - column);\n                    var before = token.value.slice(0, diff);\n                    var after = token.value.slice(diff);\n                    tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n                    break;\n                }\n            }\n        }\n        this.updateLines(row, row);\n    };\n    VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) {\n        var tokens = this.session.getTokens(row);\n        var l = 0;\n        var hasPassedCursor = false;\n        var hiddenTokens = [];\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            l += token.value.length;\n            if (token.type === \"ghost_text\")\n                continue;\n            if (hasPassedCursor) {\n                hiddenTokens.push({ type: token.type, value: token.value });\n                token.type = \"hidden_token\";\n                continue;\n            }\n            if (l === column) {\n                hasPassedCursor = true;\n            }\n        }\n        this.updateLines(row, row);\n        return hiddenTokens;\n    };\n    VirtualRenderer.prototype.removeExtraToken = function (row, column) {\n        this.session.bgTokenizer.lines[row] = null;\n        this.updateLines(row, row);\n    };\n    VirtualRenderer.prototype.setTheme = function (theme, cb) {\n        var _self = this;\n        this.$themeId = theme;\n        _self._dispatchEvent('themeChange', { theme: theme });\n        if (!theme || typeof theme == \"string\") {\n            var moduleName = theme || this.$options.theme.initialValue;\n            config.loadModule([\"theme\", moduleName], afterLoad);\n        }\n        else {\n            afterLoad(theme);\n        }\n        function afterLoad(module) {\n            if (_self.$themeId != theme)\n                return cb && cb();\n            if (!module || !module.cssClass)\n                throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n            if (module.$id)\n                _self.$themeId = module.$id;\n            dom.importCssString(module.cssText, module.cssClass, _self.container);\n            if (_self.theme)\n                dom.removeCssClass(_self.container, _self.theme.cssClass);\n            var padding = \"padding\" in module ? module.padding\n                : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n            if (_self.$padding && padding != _self.$padding)\n                _self.setPadding(padding);\n            if (_self.$gutterLayer) {\n                var showGutterCursor = module[\"$showGutterCursorMarker\"];\n                if (showGutterCursor && !_self.$gutterLayer.$showCursorMarker) {\n                    _self.$gutterLayer.$showCursorMarker = \"theme\";\n                }\n                else if (!showGutterCursor && _self.$gutterLayer.$showCursorMarker == \"theme\") {\n                    _self.$gutterLayer.$showCursorMarker = null;\n                }\n            }\n            _self.$theme = module.cssClass;\n            _self.theme = module;\n            dom.addCssClass(_self.container, module.cssClass);\n            dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n            if (_self.$size) {\n                _self.$size.width = 0;\n                _self.$updateSizeAsync();\n            }\n            _self._dispatchEvent('themeLoaded', { theme: module });\n            cb && cb();\n            if (useragent.isSafari && _self.scroller) {\n                _self.scroller.style.background = \"red\";\n                _self.scroller.style.background = \"\";\n            }\n        }\n    };\n    VirtualRenderer.prototype.getTheme = function () {\n        return this.$themeId;\n    };\n    VirtualRenderer.prototype.setStyle = function (style, include) {\n        dom.setCssClass(this.container, style, include !== false);\n    };\n    VirtualRenderer.prototype.unsetStyle = function (style) {\n        dom.removeCssClass(this.container, style);\n    };\n    VirtualRenderer.prototype.setCursorStyle = function (style) {\n        dom.setStyle(this.scroller.style, \"cursor\", style);\n    };\n    VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) {\n        dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n    };\n    VirtualRenderer.prototype.attachToShadowRoot = function () {\n        dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n    };\n    VirtualRenderer.prototype.destroy = function () {\n        this.freeze();\n        this.$fontMetrics.destroy();\n        this.$cursorLayer.destroy();\n        this.removeAllListeners();\n        this.container.textContent = \"\";\n        this.setOption(\"useResizeObserver\", false);\n    };\n    VirtualRenderer.prototype.$updateCustomScrollbar = function (val) {\n        var _self = this;\n        this.$horizScroll = this.$vScroll = null;\n        this.scrollBarV.element.remove();\n        this.scrollBarH.element.remove();\n        if (val === true) {\n            this.scrollBarV = new VScrollBarCustom(this.container, this);\n            this.scrollBarH = new HScrollBarCustom(this.container, this);\n            this.scrollBarV.setHeight(this.$size.scrollerHeight);\n            this.scrollBarH.setWidth(this.$size.scrollerWidth);\n            this.scrollBarV.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n            });\n            this.scrollBarH.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n            });\n            if (!this.$scrollDecorator) {\n                this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n                this.$scrollDecorator.$updateDecorators();\n            }\n            else {\n                this.$scrollDecorator.setScrollBarV(this.scrollBarV);\n                this.$scrollDecorator.$updateDecorators();\n            }\n        }\n        else {\n            this.scrollBarV = new VScrollBar(this.container, this);\n            this.scrollBarH = new HScrollBar(this.container, this);\n            this.scrollBarV.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n            });\n            this.scrollBarH.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n            });\n        }\n    };\n    VirtualRenderer.prototype.$addResizeObserver = function () {\n        if (!window.ResizeObserver || this.$resizeObserver)\n            return;\n        var self = this;\n        this.$resizeTimer = lang.delayedCall(function () {\n            if (!self.destroyed)\n                self.onResize();\n        }, 50);\n        this.$resizeObserver = new window.ResizeObserver(function (e) {\n            var w = e[0].contentRect.width;\n            var h = e[0].contentRect.height;\n            if (Math.abs(self.$size.width - w) > 1\n                || Math.abs(self.$size.height - h) > 1) {\n                self.$resizeTimer.delay();\n            }\n            else {\n                self.$resizeTimer.cancel();\n            }\n        });\n        this.$resizeObserver.observe(this.container);\n    };\n    return VirtualRenderer;\n}());\nVirtualRenderer.prototype.CHANGE_CURSOR = 1;\nVirtualRenderer.prototype.CHANGE_MARKER = 2;\nVirtualRenderer.prototype.CHANGE_GUTTER = 4;\nVirtualRenderer.prototype.CHANGE_SCROLL = 8;\nVirtualRenderer.prototype.CHANGE_LINES = 16;\nVirtualRenderer.prototype.CHANGE_TEXT = 32;\nVirtualRenderer.prototype.CHANGE_SIZE = 64;\nVirtualRenderer.prototype.CHANGE_MARKER_BACK = 128;\nVirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256;\nVirtualRenderer.prototype.CHANGE_FULL = 512;\nVirtualRenderer.prototype.CHANGE_H_SCROLL = 1024;\nVirtualRenderer.prototype.$changes = 0;\nVirtualRenderer.prototype.$padding = null;\nVirtualRenderer.prototype.$frozen = false;\nVirtualRenderer.prototype.STEPS = 8;\noop.implement(VirtualRenderer.prototype, EventEmitter);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n    useResizeObserver: {\n        set: function (value) {\n            if (!value && this.$resizeObserver) {\n                this.$resizeObserver.disconnect();\n                this.$resizeTimer.cancel();\n                this.$resizeTimer = this.$resizeObserver = null;\n            }\n            else if (value && !this.$resizeObserver) {\n                this.$addResizeObserver();\n            }\n        }\n    },\n    animatedScroll: { initialValue: false },\n    showInvisibles: {\n        set: function (value) {\n            if (this.$textLayer.setShowInvisibles(value))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: false\n    },\n    showPrintMargin: {\n        set: function () { this.$updatePrintMargin(); },\n        initialValue: true\n    },\n    printMarginColumn: {\n        set: function () { this.$updatePrintMargin(); },\n        initialValue: 80\n    },\n    printMargin: {\n        set: function (val) {\n            if (typeof val == \"number\")\n                this.$printMarginColumn = val;\n            this.$showPrintMargin = !!val;\n            this.$updatePrintMargin();\n        },\n        get: function () {\n            return this.$showPrintMargin && this.$printMarginColumn;\n        }\n    },\n    showGutter: {\n        set: function (show) {\n            this.$gutter.style.display = show ? \"block\" : \"none\";\n            this.$loop.schedule(this.CHANGE_FULL);\n            this.onGutterResize();\n        },\n        initialValue: true\n    },\n    useSvgGutterIcons: {\n        set: function (value) {\n            this.$gutterLayer.$useSvgGutterIcons = value;\n        },\n        initialValue: false\n    },\n    showFoldedAnnotations: {\n        set: function (value) {\n            this.$gutterLayer.$showFoldedAnnotations = value;\n        },\n        initialValue: false\n    },\n    fadeFoldWidgets: {\n        set: function (show) {\n            dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n        },\n        initialValue: false\n    },\n    showFoldWidgets: {\n        set: function (show) {\n            this.$gutterLayer.setShowFoldWidgets(show);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    displayIndentGuides: {\n        set: function (show) {\n            if (this.$textLayer.setDisplayIndentGuides(show))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: true\n    },\n    highlightIndentGuides: {\n        set: function (show) {\n            if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n                this.$textLayer.$highlightIndentGuide();\n            }\n            else {\n                this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n            }\n        },\n        initialValue: true\n    },\n    highlightGutterLine: {\n        set: function (shouldHighlight) {\n            this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    hScrollBarAlwaysVisible: {\n        set: function (val) {\n            if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    vScrollBarAlwaysVisible: {\n        set: function (val) {\n            if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    fontSize: {\n        set: function (size) {\n            if (typeof size == \"number\")\n                size = size + \"px\";\n            this.container.style.fontSize = size;\n            this.updateFontSize();\n        },\n        initialValue: 12\n    },\n    fontFamily: {\n        set: function (name) {\n            this.container.style.fontFamily = name;\n            this.updateFontSize();\n        }\n    },\n    maxLines: {\n        set: function (val) {\n            this.updateFull();\n        }\n    },\n    minLines: {\n        set: function (val) {\n            if (!(this.$minLines < 0x1ffffffffffff))\n                this.$minLines = 0;\n            this.updateFull();\n        }\n    },\n    maxPixelHeight: {\n        set: function (val) {\n            this.updateFull();\n        },\n        initialValue: 0\n    },\n    scrollPastEnd: {\n        set: function (val) {\n            val = +val || 0;\n            if (this.$scrollPastEnd == val)\n                return;\n            this.$scrollPastEnd = val;\n            this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: 0,\n        handlesSet: true\n    },\n    fixedWidthGutter: {\n        set: function (val) {\n            this.$gutterLayer.$fixedWidth = !!val;\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        }\n    },\n    customScrollbar: {\n        set: function (val) {\n            this.$updateCustomScrollbar(val);\n        },\n        initialValue: false\n    },\n    theme: {\n        set: function (val) { this.setTheme(val); },\n        get: function () { return this.$themeId || this.theme; },\n        initialValue: \"./theme/textmate\",\n        handlesSet: true\n    },\n    hasCssTransforms: {},\n    useTextareaForIME: {\n        initialValue: !useragent.isMobile && !useragent.isIE\n    }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n    var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n    try {\n        return new Blob([script], {\"type\": \"application/javascript\"});\n    } catch (e) { // Backwards-compatibility\n        var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n        var blobBuilder = new BlobBuilder();\n        blobBuilder.append(script);\n        return blobBuilder.getBlob(\"application/javascript\");\n    }\n}\n\nfunction createWorker(workerUrl) {\n    if (typeof Worker == \"undefined\")\n        return { postMessage: function() {}, terminate: function() {} };\n    if (config.get(\"loadWorkerFromBlob\")) {\n        var blob = $workerBlob(workerUrl);\n        var URL = window.URL || window.webkitURL;\n        var blobURL = URL.createObjectURL(blob);\n        return new Worker(blobURL);\n    }\n    return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n    if (!worker.postMessage)\n        worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n    this.$worker = worker;\n    this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.onMessage = this.onMessage.bind(this);\n\n    this.callbackId = 1;\n    this.callbacks = {};\n\n    this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n        if (require.nameToUrl && !require.toUrl)\n            require.toUrl = require.nameToUrl;\n\n        if (config.get(\"packaged\") || !require.toUrl) {\n            workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n        } else {\n            var normalizePath = this.$normalizePath;\n            workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n            var tlns = {};\n            topLevelNamespaces.forEach(function(ns) {\n                tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n            });\n        }\n\n        this.$worker = createWorker(workerUrl);\n        if (importScripts) {\n            this.send(\"importScripts\", importScripts);\n        }\n        this.$worker.postMessage({\n            init : true,\n            tlns : tlns,\n            module : mod,\n            classname : classname\n        });\n        return this.$worker;\n    };\n\n    this.onMessage = function(e) {\n        var msg = e.data;\n        switch (msg.type) {\n            case \"event\":\n                this._signal(msg.name, {data: msg.data});\n                break;\n            case \"call\":\n                var callback = this.callbacks[msg.id];\n                if (callback) {\n                    callback(msg.data);\n                    delete this.callbacks[msg.id];\n                }\n                break;\n            case \"error\":\n                this.reportError(msg.data);\n                break;\n            case \"log\":\n                window.console && console.log && console.log.apply(console, msg.data);\n                break;\n        }\n    };\n    \n    this.reportError = function(err) {\n        window.console && console.error && console.error(err);\n    };\n\n    this.$normalizePath = function(path) {\n        return net.qualifyURL(path);\n    };\n\n    this.terminate = function() {\n        this._signal(\"terminate\", {});\n        this.deltaQueue = null;\n        this.$worker.terminate();\n        this.$worker.onerror = function(e) {\n            e.preventDefault();\n        };\n        this.$worker = null;\n        if (this.$doc)\n            this.$doc.off(\"change\", this.changeListener);\n        this.$doc = null;\n    };\n\n    this.send = function(cmd, args) {\n        this.$worker.postMessage({command: cmd, args: args});\n    };\n\n    this.call = function(cmd, args, callback) {\n        if (callback) {\n            var id = this.callbackId++;\n            this.callbacks[id] = callback;\n            args.push(id);\n        }\n        this.send(cmd, args);\n    };\n\n    this.emit = function(event, data) {\n        try {\n            if (data.data && data.data.err)\n                data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n                this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n        }\n        catch(ex) {\n            console.error(ex.stack);\n        }\n    };\n\n    this.attachToDocument = function(doc) {\n        if (this.$doc)\n            this.terminate();\n\n        this.$doc = doc;\n        this.call(\"setValue\", [doc.getValue()]);\n        doc.on(\"change\", this.changeListener, true);\n    };\n\n    this.changeListener = function(delta) {\n        if (!this.deltaQueue) {\n            this.deltaQueue = [];\n            setTimeout(this.$sendDeltaQueue, 0);\n        }\n        if (delta.action == \"insert\")\n            this.deltaQueue.push(delta.start, delta.lines);\n        else\n            this.deltaQueue.push(delta.start, delta.end);\n    };\n\n    this.$sendDeltaQueue = function() {\n        var q = this.deltaQueue;\n        if (!q) return;\n        this.deltaQueue = null;\n        if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n            this.call(\"setValue\", [this.$doc.getValue()]);\n        } else\n            this.emit(\"change\", {data: q});\n    };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n    var main = null;\n    var emitSync = false;\n    var sender = Object.create(EventEmitter);\n\n    var messageBuffer = [];\n    var workerClient = new WorkerClient({\n        messageBuffer: messageBuffer,\n        terminate: function() {},\n        postMessage: function(e) {\n            messageBuffer.push(e);\n            if (!main) return;\n            if (emitSync)\n                setTimeout(processNext);\n            else\n                processNext();\n        }\n    });\n\n    workerClient.setEmitSync = function(val) { emitSync = val; };\n\n    var processNext = function() {\n        var msg = messageBuffer.shift();\n        if (msg.command)\n            main[msg.command].apply(main, msg.args);\n        else if (msg.event)\n            sender._signal(msg.event, msg.data);\n    };\n\n    sender.postMessage = function(msg) {\n        workerClient.onMessage({data: msg});\n    };\n    sender.callback = function(data, callbackId) {\n        this.postMessage({type: \"call\", id: callbackId, data: data});\n    };\n    sender.emit = function(name, data) {\n        this.postMessage({type: \"event\", name: name, data: data});\n    };\n\n    config.loadModule([\"worker\", mod], function(Main) {\n        main = new Main[classname](sender);\n        while (messageBuffer.length)\n            processNext();\n    });\n\n    return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = /** @class */ (function () {\n    function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n        var _self = this;\n        this.length = length;\n        this.session = session;\n        this.doc = session.getDocument();\n        this.mainClass = mainClass;\n        this.othersClass = othersClass;\n        this.$onUpdate = this.onUpdate.bind(this);\n        this.doc.on(\"change\", this.$onUpdate, true);\n        this.$others = others;\n        this.$onCursorChange = function () {\n            setTimeout(function () {\n                _self.onCursorChange();\n            });\n        };\n        this.$pos = pos;\n        var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()[\"$undostack\"] || { length: -1 };\n        this.$undoStackDepth = undoStack.length;\n        this.setup();\n        session.selection.on(\"changeCursor\", this.$onCursorChange);\n    }\n    PlaceHolder.prototype.setup = function () {\n        var _self = this;\n        var doc = this.doc;\n        var session = this.session;\n        this.selectionBefore = session.selection.toJSON();\n        if (session.selection.inMultiSelectMode)\n            session.selection.toSingleRange();\n        this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n        var pos = this.pos;\n        pos.$insertRight = true;\n        pos.detach();\n        pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n        this.others = [];\n        this.$others.forEach(function (other) {\n            var anchor = doc.createAnchor(other.row, other.column);\n            anchor.$insertRight = true;\n            anchor.detach();\n            _self.others.push(anchor);\n        });\n        session.setUndoSelect(false);\n    };\n    PlaceHolder.prototype.showOtherMarkers = function () {\n        if (this.othersActive)\n            return;\n        var session = this.session;\n        var _self = this;\n        this.othersActive = true;\n        this.others.forEach(function (anchor) {\n            anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n        });\n    };\n    PlaceHolder.prototype.hideOtherMarkers = function () {\n        if (!this.othersActive)\n            return;\n        this.othersActive = false;\n        for (var i = 0; i < this.others.length; i++) {\n            this.session.removeMarker(this.others[i].markerId);\n        }\n    };\n    PlaceHolder.prototype.onUpdate = function (delta) {\n        if (this.$updating)\n            return this.updateAnchors(delta);\n        var range = delta;\n        if (range.start.row !== range.end.row)\n            return;\n        if (range.start.row !== this.pos.row)\n            return;\n        this.$updating = true;\n        var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n        var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n        var distanceFromStart = range.start.column - this.pos.column;\n        this.updateAnchors(delta);\n        if (inMainRange)\n            this.length += lengthDiff;\n        if (inMainRange && !this.session.$fromUndo) {\n            if (delta.action === 'insert') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n                    this.doc.insertMergedLines(newPos, delta.lines);\n                }\n            }\n            else if (delta.action === 'remove') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n                    this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n                }\n            }\n        }\n        this.$updating = false;\n        this.updateMarkers();\n    };\n    PlaceHolder.prototype.updateAnchors = function (delta) {\n        this.pos.onChange(delta);\n        for (var i = this.others.length; i--;)\n            this.others[i].onChange(delta);\n        this.updateMarkers();\n    };\n    PlaceHolder.prototype.updateMarkers = function () {\n        if (this.$updating)\n            return;\n        var _self = this;\n        var session = this.session;\n        var updateMarker = function (pos, className) {\n            session.removeMarker(pos.markerId);\n            pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n        };\n        updateMarker(this.pos, this.mainClass);\n        for (var i = this.others.length; i--;)\n            updateMarker(this.others[i], this.othersClass);\n    };\n    PlaceHolder.prototype.onCursorChange = function (event) {\n        if (this.$updating || !this.session)\n            return;\n        var pos = this.session.selection.getCursor();\n        if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n            this.showOtherMarkers();\n            this._emit(\"cursorEnter\", event);\n        }\n        else {\n            this.hideOtherMarkers();\n            this._emit(\"cursorLeave\", event);\n        }\n    };\n    PlaceHolder.prototype.detach = function () {\n        this.session.removeMarker(this.pos && this.pos.markerId);\n        this.hideOtherMarkers();\n        this.doc.off(\"change\", this.$onUpdate);\n        this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n        this.session.setUndoSelect(true);\n        this.session = null;\n    };\n    PlaceHolder.prototype.cancel = function () {\n        if (this.$undoStackDepth === -1)\n            return;\n        var undoManager = this.session.getUndoManager();\n        var undosRequired = (undoManager.$undoStack || undoManager[\"$undostack\"]).length - this.$undoStackDepth;\n        for (var i = 0; i < undosRequired; i++) {\n            undoManager.undo(this.session, true);\n        }\n        if (this.selectionBefore)\n            this.session.selection.fromJSON(this.selectionBefore);\n    };\n    return PlaceHolder;\n}());\noop.implement(PlaceHolder.prototype, EventEmitter);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n    var ev = e.domEvent;\n    var alt = ev.altKey;\n    var shift = ev.shiftKey;\n    var ctrl = ev.ctrlKey;\n    var accel = e.getAccelKey();\n    var button = e.getButton();\n    if (ctrl && useragent.isMac)\n        button = ev.button;\n    if (e.editor.inMultiSelectMode && button == 2) {\n        e.editor.textInput.onContextMenu(e.domEvent);\n        return;\n    }\n    if (!ctrl && !alt && !accel) {\n        if (button === 0 && e.editor.inMultiSelectMode)\n            e.editor.exitMultiSelectMode();\n        return;\n    }\n    if (button !== 0)\n        return;\n    var editor = e.editor;\n    var selection = editor.selection;\n    var isMultiSelect = editor.inMultiSelectMode;\n    var pos = e.getDocumentPosition();\n    var cursor = selection.getCursor();\n    var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n    var mouseX = e.x, mouseY = e.y;\n    var onMouseSelection = function (e) {\n        mouseX = e.clientX;\n        mouseY = e.clientY;\n    };\n    var session = editor.session;\n    var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n    var screenCursor = screenAnchor;\n    var selectionMode;\n    if (editor.$mouseHandler.$enableJumpToDef) {\n        if (ctrl && alt || accel && alt)\n            selectionMode = shift ? \"block\" : \"add\";\n        else if (alt && editor.$blockSelectEnabled)\n            selectionMode = \"block\";\n    }\n    else {\n        if (accel && !alt) {\n            selectionMode = \"add\";\n            if (!isMultiSelect && shift)\n                return;\n        }\n        else if (alt && editor.$blockSelectEnabled) {\n            selectionMode = \"block\";\n        }\n    }\n    if (selectionMode && useragent.isMac && ev.ctrlKey) {\n        editor.$mouseHandler.cancelContextMenu();\n    }\n    if (selectionMode == \"add\") {\n        if (!isMultiSelect && inSelection)\n            return; // dragging\n        if (!isMultiSelect) {\n            var range = selection.toOrientedRange();\n            editor.addSelectionMarker(range);\n        }\n        var oldRange = selection.rangeList.rangeAtPoint(pos);\n        editor.inVirtualSelectionMode = true;\n        if (shift) {\n            oldRange = null;\n            range = selection.ranges[0] || range;\n            editor.removeSelectionMarker(range);\n        }\n        editor.once(\"mouseup\", function () {\n            var tmpSel = selection.toOrientedRange();\n            if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n                selection.substractPoint(tmpSel.cursor);\n            else {\n                if (shift) {\n                    selection.substractPoint(range.cursor);\n                }\n                else if (range) {\n                    editor.removeSelectionMarker(range);\n                    selection.addRange(range);\n                }\n                selection.addRange(tmpSel);\n            }\n            editor.inVirtualSelectionMode = false;\n        });\n    }\n    else if (selectionMode == \"block\") {\n        e.stop();\n        editor.inVirtualSelectionMode = true;\n        var initialRange;\n        var rectSel = [];\n        var blockSelect = function () {\n            var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n            var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n            if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n                return;\n            screenCursor = newCursor;\n            editor.selection.moveToPosition(cursor);\n            editor.renderer.scrollCursorIntoView();\n            editor.removeSelectionMarkers(rectSel);\n            rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n            if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n                rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n            rectSel.forEach(editor.addSelectionMarker, editor);\n            editor.updateSelectionMarkers();\n        };\n        if (isMultiSelect && !accel) {\n            selection.toSingleRange();\n        }\n        else if (!isMultiSelect && accel) {\n            initialRange = selection.toOrientedRange();\n            editor.addSelectionMarker(initialRange);\n        }\n        if (shift)\n            screenAnchor = session.documentToScreenPosition(selection.lead);\n        else\n            selection.moveToPosition(pos);\n        screenCursor = { row: -1, column: -1 };\n        var onMouseSelectionEnd = function (e) {\n            blockSelect();\n            clearInterval(timerId);\n            editor.removeSelectionMarkers(rectSel);\n            if (!rectSel.length)\n                rectSel = [selection.toOrientedRange()];\n            if (initialRange) {\n                editor.removeSelectionMarker(initialRange);\n                selection.toSingleRange(initialRange);\n            }\n            for (var i = 0; i < rectSel.length; i++)\n                selection.addRange(rectSel[i]);\n            editor.inVirtualSelectionMode = false;\n            editor.$mouseHandler.$clickSelection = null;\n        };\n        var onSelectionInterval = blockSelect;\n        event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n        var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n        return e.preventDefault();\n    }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){/**\n * commands to enter multiselect mode\n * @type {import(\"../../ace-internal\").Ace.Command[]}\n */\nexports.defaultCommands = [{\n        name: \"addCursorAbove\",\n        description: \"Add cursor above\",\n        exec: function (editor) { editor.selectMoreLines(-1); },\n        bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"addCursorBelow\",\n        description: \"Add cursor below\",\n        exec: function (editor) { editor.selectMoreLines(1); },\n        bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"addCursorAboveSkipCurrent\",\n        description: \"Add cursor above (skip current)\",\n        exec: function (editor) { editor.selectMoreLines(-1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"addCursorBelowSkipCurrent\",\n        description: \"Add cursor below (skip current)\",\n        exec: function (editor) { editor.selectMoreLines(1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectMoreBefore\",\n        description: \"Select more before\",\n        exec: function (editor) { editor.selectMore(-1); },\n        bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectMoreAfter\",\n        description: \"Select more after\",\n        exec: function (editor) { editor.selectMore(1); },\n        bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectNextBefore\",\n        description: \"Select next before\",\n        exec: function (editor) { editor.selectMore(-1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectNextAfter\",\n        description: \"Select next after\",\n        exec: function (editor) { editor.selectMore(1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"toggleSplitSelectionIntoLines\",\n        description: \"Split selection into lines\",\n        exec: function (editor) {\n            if (editor.multiSelect.rangeCount > 1)\n                editor.multiSelect.joinSelections();\n            else\n                editor.multiSelect.splitIntoLines();\n        },\n        bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n        readOnly: true\n    }, {\n        name: \"splitSelectionIntoLines\",\n        description: \"Split into lines\",\n        exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n        readOnly: true\n    }, {\n        name: \"alignCursors\",\n        description: \"Align cursors\",\n        exec: function (editor) { editor.alignCursors(); },\n        bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"findAll\",\n        description: \"Find all\",\n        exec: function (editor) { editor.findAll(); },\n        bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }];\nexports.multiSelectCommands = [{\n        name: \"singleSelection\",\n        description: \"Single selection\",\n        bindKey: \"esc\",\n        exec: function (editor) { editor.exitMultiSelectMode(); },\n        scrollIntoView: \"cursor\",\n        readOnly: true,\n        isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n    }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * @typedef {import(\"./anchor\").Anchor} Anchor\n * @typedef {import(\"../ace-internal\").Ace.Point} Point\n * @typedef {import(\"../ace-internal\").Ace.ScreenCoordinates} ScreenCoordinates\n */\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n    search.$options.wrap = true;\n    search.$options.needle = needle;\n    search.$options.backwards = dir == -1;\n    return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n    this.getSelectionMarkers = function () {\n        return this.$selectionMarkers;\n    };\n}).call(EditSession.prototype);\n(function () {\n    this.ranges = null;\n    this.rangeList = null;\n    this.addRange = function (range, $blockChangeEvents) {\n        if (!range)\n            return;\n        if (!this.inMultiSelectMode && this.rangeCount === 0) {\n            var oldRange = this.toOrientedRange();\n            this.rangeList.add(oldRange);\n            this.rangeList.add(range);\n            if (this.rangeList.ranges.length != 2) {\n                this.rangeList.removeAll();\n                return $blockChangeEvents || this.fromOrientedRange(range);\n            }\n            this.rangeList.removeAll();\n            this.rangeList.add(oldRange);\n            this.$onAddRange(oldRange);\n        }\n        if (!range.cursor)\n            range.cursor = range.end;\n        var removed = this.rangeList.add(range);\n        this.$onAddRange(range);\n        if (removed.length)\n            this.$onRemoveRange(removed);\n        if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n            this._signal(\"multiSelect\");\n            this.inMultiSelectMode = true;\n            this.session.$undoSelect = false;\n            this.rangeList.attach(this.session);\n        }\n        return $blockChangeEvents || this.fromOrientedRange(range);\n    };\n    this.toSingleRange = function (range) {\n        range = range || this.ranges[0];\n        var removed = this.rangeList.removeAll();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n        range && this.fromOrientedRange(range);\n    };\n    this.substractPoint = function (pos) {\n        var removed = this.rangeList.substractPoint(pos);\n        if (removed) {\n            this.$onRemoveRange(removed);\n            return removed[0];\n        }\n    };\n    this.mergeOverlappingRanges = function () {\n        var removed = this.rangeList.merge();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n    };\n    this.$onAddRange = function (range) {\n        this.rangeCount = this.rangeList.ranges.length;\n        this.ranges.unshift(range);\n        this._signal(\"addRange\", { range: range });\n    };\n    this.$onRemoveRange = function (removed) {\n        this.rangeCount = this.rangeList.ranges.length;\n        if (this.rangeCount == 1 && this.inMultiSelectMode) {\n            var lastRange = this.rangeList.ranges.pop();\n            removed.push(lastRange);\n            this.rangeCount = 0;\n        }\n        for (var i = removed.length; i--;) {\n            var index = this.ranges.indexOf(removed[i]);\n            this.ranges.splice(index, 1);\n        }\n        this._signal(\"removeRange\", { ranges: removed });\n        if (this.rangeCount === 0 && this.inMultiSelectMode) {\n            this.inMultiSelectMode = false;\n            this._signal(\"singleSelect\");\n            this.session.$undoSelect = true;\n            this.rangeList.detach(this.session);\n        }\n        lastRange = lastRange || this.ranges[0];\n        if (lastRange && !lastRange.isEqual(this.getRange()))\n            this.fromOrientedRange(lastRange);\n    };\n    this.$initRangeList = function () {\n        if (this.rangeList)\n            return;\n        this.rangeList = new RangeList();\n        this.ranges = [];\n        this.rangeCount = 0;\n    };\n    this.getAllRanges = function () {\n        return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n    };\n    this.splitIntoLines = function () {\n        var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n        var newRanges = [];\n        for (var i = 0; i < ranges.length; i++) {\n            var range = ranges[i];\n            var row = range.start.row;\n            var endRow = range.end.row;\n            if (row === endRow) {\n                newRanges.push(range.clone());\n            }\n            else {\n                newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n                while (++row < endRow)\n                    newRanges.push(this.getLineRange(row, true));\n                newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n            }\n            if (i == 0 && !this.isBackwards())\n                newRanges = newRanges.reverse();\n        }\n        this.toSingleRange();\n        for (var i = newRanges.length; i--;)\n            this.addRange(newRanges[i]);\n    };\n    this.joinSelections = function () {\n        var ranges = this.rangeList.ranges;\n        var lastRange = ranges[ranges.length - 1];\n        var range = Range.fromPoints(ranges[0].start, lastRange.end);\n        this.toSingleRange();\n        this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n    };\n    this.toggleBlockSelection = function () {\n        if (this.rangeCount > 1) {\n            var ranges = this.rangeList.ranges;\n            var lastRange = ranges[ranges.length - 1];\n            var range = Range.fromPoints(ranges[0].start, lastRange.end);\n            this.toSingleRange();\n            this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n        }\n        else {\n            var cursor = this.session.documentToScreenPosition(this.cursor);\n            var anchor = this.session.documentToScreenPosition(this.anchor);\n            var rectSel = this.rectangularRangeBlock(cursor, anchor);\n            rectSel.forEach(this.addRange, this);\n        }\n    };\n    this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n        var rectSel = [];\n        var xBackwards = screenCursor.column < screenAnchor.column;\n        if (xBackwards) {\n            var startColumn = screenCursor.column;\n            var endColumn = screenAnchor.column;\n            var startOffsetX = screenCursor.offsetX;\n            var endOffsetX = screenAnchor.offsetX;\n        }\n        else {\n            var startColumn = screenAnchor.column;\n            var endColumn = screenCursor.column;\n            var startOffsetX = screenAnchor.offsetX;\n            var endOffsetX = screenCursor.offsetX;\n        }\n        var yBackwards = screenCursor.row < screenAnchor.row;\n        if (yBackwards) {\n            var startRow = screenCursor.row;\n            var endRow = screenAnchor.row;\n        }\n        else {\n            var startRow = screenAnchor.row;\n            var endRow = screenCursor.row;\n        }\n        if (startColumn < 0)\n            startColumn = 0;\n        if (startRow < 0)\n            startRow = 0;\n        if (startRow == endRow)\n            includeEmptyLines = true;\n        var docEnd;\n        for (var row = startRow; row <= endRow; row++) {\n            var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n            if (range.isEmpty()) {\n                if (docEnd && isSamePoint(range.end, docEnd))\n                    break;\n                docEnd = range.end;\n            }\n            range.cursor = xBackwards ? range.start : range.end;\n            rectSel.push(range);\n        }\n        if (yBackwards)\n            rectSel.reverse();\n        if (!includeEmptyLines) {\n            var end = rectSel.length - 1;\n            while (rectSel[end].isEmpty() && end > 0)\n                end--;\n            if (end > 0) {\n                var start = 0;\n                while (rectSel[start].isEmpty())\n                    start++;\n            }\n            for (var i = end; i >= start; i--) {\n                if (rectSel[i].isEmpty())\n                    rectSel.splice(i, 1);\n            }\n        }\n        return rectSel;\n    };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n    this.updateSelectionMarkers = function () {\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.addSelectionMarker = function (orientedRange) {\n        if (!orientedRange.cursor)\n            orientedRange.cursor = orientedRange.end;\n        var style = this.getSelectionStyle();\n        orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n        this.session.$selectionMarkers.push(orientedRange);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n        return orientedRange;\n    };\n    this.removeSelectionMarker = function (range) {\n        if (!range.marker)\n            return;\n        this.session.removeMarker(range.marker);\n        var index = this.session.$selectionMarkers.indexOf(range);\n        if (index != -1)\n            this.session.$selectionMarkers.splice(index, 1);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n    };\n    this.removeSelectionMarkers = function (ranges) {\n        var markerList = this.session.$selectionMarkers;\n        for (var i = ranges.length; i--;) {\n            var range = ranges[i];\n            if (!range.marker)\n                continue;\n            this.session.removeMarker(range.marker);\n            var index = markerList.indexOf(range);\n            if (index != -1)\n                markerList.splice(index, 1);\n        }\n        this.session.selectionMarkerCount = markerList.length;\n    };\n    this.$onAddRange = function (e) {\n        this.addSelectionMarker(e.range);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.$onRemoveRange = function (e) {\n        this.removeSelectionMarkers(e.ranges);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.$onMultiSelect = function (e) {\n        if (this.inMultiSelectMode)\n            return;\n        this.inMultiSelectMode = true;\n        this.setStyle(\"ace_multiselect\");\n        this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n        this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.$onSingleSelect = function (e) {\n        if (this.session.multiSelect.inVirtualMode)\n            return;\n        this.inMultiSelectMode = false;\n        this.unsetStyle(\"ace_multiselect\");\n        this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n        this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n        this._emit(\"changeSelection\");\n    };\n    this.$onMultiSelectExec = function (e) {\n        var command = e.command;\n        var editor = e.editor;\n        if (!editor.multiSelect)\n            return;\n        if (!command.multiSelectAction) {\n            var result = command.exec(editor, e.args || {});\n            editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n            editor.multiSelect.mergeOverlappingRanges();\n        }\n        else if (command.multiSelectAction == \"forEach\") {\n            result = editor.forEachSelection(command, e.args);\n        }\n        else if (command.multiSelectAction == \"forEachLine\") {\n            result = editor.forEachSelection(command, e.args, true);\n        }\n        else if (command.multiSelectAction == \"single\") {\n            editor.exitMultiSelectMode();\n            result = command.exec(editor, e.args || {});\n        }\n        else {\n            result = command.multiSelectAction(editor, e.args || {});\n        }\n        return result;\n    };\n    this.forEachSelection = function (cmd, args, options) {\n        if (this.inVirtualSelectionMode)\n            return;\n        var keepOrder = options && options.keepOrder;\n        var $byLines = options == true || options && options.$byLines;\n        var session = this.session;\n        var selection = this.selection;\n        var rangeList = selection.rangeList;\n        var ranges = (keepOrder ? selection : rangeList).ranges;\n        var result;\n        if (!ranges.length)\n            return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n        var reg = selection._eventRegistry;\n        selection._eventRegistry = {};\n        var tmpSel = new Selection(session);\n        this.inVirtualSelectionMode = true;\n        for (var i = ranges.length; i--;) {\n            if ($byLines) {\n                while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n                    i--;\n            }\n            tmpSel.fromOrientedRange(ranges[i]);\n            tmpSel.index = i;\n            this.selection = session.selection = tmpSel;\n            var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n            if (!result && cmdResult !== undefined)\n                result = cmdResult;\n            tmpSel.toOrientedRange(ranges[i]);\n        }\n        tmpSel.detach();\n        this.selection = session.selection = selection;\n        this.inVirtualSelectionMode = false;\n        selection._eventRegistry = reg;\n        selection.mergeOverlappingRanges();\n        if (selection.ranges[0])\n            selection.fromOrientedRange(selection.ranges[0]);\n        var anim = this.renderer.$scrollAnimation;\n        this.onCursorChange();\n        this.onSelectionChange();\n        if (anim && anim.from == anim.to)\n            this.renderer.animateScrolling(anim.from);\n        return result;\n    };\n    this.exitMultiSelectMode = function () {\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n            return;\n        this.multiSelect.toSingleRange();\n    };\n    this.getSelectedText = function () {\n        var text = \"\";\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var ranges = this.multiSelect.rangeList.ranges;\n            var buf = [];\n            for (var i = 0; i < ranges.length; i++) {\n                buf.push(this.session.getTextRange(ranges[i]));\n            }\n            var nl = this.session.getDocument().getNewLineCharacter();\n            text = buf.join(nl);\n            if (text.length == (buf.length - 1) * nl.length)\n                text = \"\";\n        }\n        else if (!this.selection.isEmpty()) {\n            text = this.session.getTextRange(this.getSelectionRange());\n        }\n        return text;\n    };\n    this.$checkMultiselectChange = function (e, anchor) {\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var range = this.multiSelect.ranges[0];\n            if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n                return;\n            var pos = anchor == this.multiSelect.anchor\n                ? range.cursor == range.start ? range.end : range.start\n                : range.cursor;\n            if (pos.row != anchor.row\n                || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n                this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n            else\n                this.multiSelect.mergeOverlappingRanges();\n        }\n    };\n    this.findAll = function (needle, options, additive) {\n        options = options || {};\n        options.needle = needle || options.needle;\n        if (options.needle == undefined) {\n            var range = this.selection.isEmpty()\n                ? this.selection.getWordRange()\n                : this.selection.getRange();\n            options.needle = this.session.getTextRange(range);\n        }\n        this.$search.set(options);\n        var ranges = this.$search.findAll(this.session);\n        if (!ranges.length)\n            return 0;\n        var selection = this.multiSelect;\n        if (!additive)\n            selection.toSingleRange(ranges[0]);\n        for (var i = ranges.length; i--;)\n            selection.addRange(ranges[i], true);\n        if (range && selection.rangeList.rangeAtPoint(range.start))\n            selection.addRange(range, true);\n        return ranges.length;\n    };\n    this.selectMoreLines = function (dir, skip) {\n        var range = this.selection.toOrientedRange();\n        var isBackwards = range.cursor == range.end;\n        var screenLead = this.session.documentToScreenPosition(range.cursor);\n        if (this.selection.$desiredColumn)\n            screenLead.column = this.selection.$desiredColumn;\n        var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n        if (!range.isEmpty()) {\n            var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n            var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n        }\n        else {\n            var anchor = lead;\n        }\n        if (isBackwards) {\n            var newRange = Range.fromPoints(lead, anchor);\n            newRange.cursor = newRange.start;\n        }\n        else {\n            var newRange = Range.fromPoints(anchor, lead);\n            newRange.cursor = newRange.end;\n        }\n        newRange.desiredColumn = screenLead.column;\n        if (!this.selection.inMultiSelectMode) {\n            this.selection.addRange(range);\n        }\n        else {\n            if (skip)\n                var toRemove = range.cursor;\n        }\n        this.selection.addRange(newRange);\n        if (toRemove)\n            this.selection.substractPoint(toRemove);\n    };\n    this.transposeSelections = function (dir) {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var all = sel.ranges;\n        for (var i = all.length; i--;) {\n            var range = all[i];\n            if (range.isEmpty()) {\n                var tmp_1 = session.getWordRange(range.start.row, range.start.column);\n                range.start.row = tmp_1.start.row;\n                range.start.column = tmp_1.start.column;\n                range.end.row = tmp_1.end.row;\n                range.end.column = tmp_1.end.column;\n            }\n        }\n        sel.mergeOverlappingRanges();\n        var words = [];\n        for (var i = all.length; i--;) {\n            var range = all[i];\n            words.unshift(session.getTextRange(range));\n        }\n        if (dir < 0)\n            words.unshift(words.pop());\n        else\n            words.push(words.shift());\n        for (var i = all.length; i--;) {\n            var range = all[i];\n            var tmp = range.clone();\n            session.replace(range, words[i]);\n            range.start.row = tmp.start.row;\n            range.start.column = tmp.start.column;\n        }\n        sel.fromOrientedRange(sel.ranges[0]);\n    };\n    this.selectMore = function (dir, skip, stopAtFirst) {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var range = sel.toOrientedRange();\n        if (range.isEmpty()) {\n            range = session.getWordRange(range.start.row, range.start.column);\n            range.cursor = dir == -1 ? range.start : range.end;\n            this.multiSelect.addRange(range);\n            if (stopAtFirst)\n                return;\n        }\n        var needle = session.getTextRange(range);\n        var newRange = find(session, needle, dir);\n        if (newRange) {\n            newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n            this.session.unfold(newRange);\n            this.multiSelect.addRange(newRange);\n            this.renderer.scrollCursorIntoView(null, 0.5);\n        }\n        if (skip)\n            this.multiSelect.substractPoint(range.cursor);\n    };\n    this.alignCursors = function () {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var ranges = sel.ranges;\n        var row = -1;\n        var sameRowRanges = ranges.filter(function (r) {\n            if (r.cursor.row == row)\n                return true;\n            row = r.cursor.row;\n        });\n        if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n            var range = this.selection.getRange();\n            var fr = range.start.row, lr = range.end.row;\n            var guessRange = fr == lr;\n            if (guessRange) {\n                var max = this.session.getLength();\n                var line;\n                do {\n                    line = this.session.getLine(lr);\n                } while (/[=:]/.test(line) && ++lr < max);\n                do {\n                    line = this.session.getLine(fr);\n                } while (/[=:]/.test(line) && --fr > 0);\n                if (fr < 0)\n                    fr = 0;\n                if (lr >= max)\n                    lr = max - 1;\n            }\n            var lines = this.session.removeFullLines(fr, lr);\n            lines = this.$reAlignText(lines, guessRange);\n            this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n            if (!guessRange) {\n                range.start.column = 0;\n                range.end.column = lines[lines.length - 1].length;\n            }\n            this.selection.setRange(range);\n        }\n        else {\n            sameRowRanges.forEach(function (r) {\n                sel.substractPoint(r.cursor);\n            });\n            var maxCol = 0;\n            var minSpace = Infinity;\n            var spaceOffsets = ranges.map(function (r) {\n                var p = r.cursor;\n                var line = session.getLine(p.row);\n                var spaceOffset = line.substr(p.column).search(/\\S/g);\n                if (spaceOffset == -1)\n                    spaceOffset = 0;\n                if (p.column > maxCol)\n                    maxCol = p.column;\n                if (spaceOffset < minSpace)\n                    minSpace = spaceOffset;\n                return spaceOffset;\n            });\n            ranges.forEach(function (r, i) {\n                var p = r.cursor;\n                var l = maxCol - p.column;\n                var d = spaceOffsets[i] - minSpace;\n                if (l > d)\n                    session.insert(p, lang.stringRepeat(\" \", l - d));\n                else\n                    session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n                r.start.column = r.end.column = maxCol;\n                r.start.row = r.end.row = p.row;\n                r.cursor = r.end;\n            });\n            sel.fromOrientedRange(ranges[0]);\n            this.renderer.updateCursor();\n            this.renderer.updateBackMarkers();\n        }\n    };\n    this.$reAlignText = function (lines, forceLeft) {\n        var isLeftAligned = true, isRightAligned = true;\n        var startW, textW, endW;\n        return lines.map(function (line) {\n            var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n            if (!m)\n                return [line];\n            if (startW == null) {\n                startW = m[1].length;\n                textW = m[2].length;\n                endW = m[3].length;\n                return m;\n            }\n            if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n                isRightAligned = false;\n            if (startW != m[1].length)\n                isLeftAligned = false;\n            if (startW > m[1].length)\n                startW = m[1].length;\n            if (textW < m[2].length)\n                textW = m[2].length;\n            if (endW > m[3].length)\n                endW = m[3].length;\n            return m;\n        }).map(forceLeft ? alignLeft :\n            isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n        function spaces(n) {\n            return lang.stringRepeat(\" \", n);\n        }\n        function alignLeft(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(textW - m[2].length + endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function alignRight(m) {\n            return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function unAlign(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n    };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n    var session = e.session;\n    if (session && !session.multiSelect) {\n        session.$selectionMarkers = [];\n        session.selection.$initRangeList();\n        session.multiSelect = session.selection;\n    }\n    this.multiSelect = session && session.multiSelect;\n    var oldSession = e.oldSession;\n    if (oldSession) {\n        oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n        oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n        oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n        oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n        oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n        oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n    }\n    if (session) {\n        session.multiSelect.on(\"addRange\", this.$onAddRange);\n        session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n        session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n        session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n        session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n        session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n    }\n    if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n        if (session.selection.inMultiSelectMode)\n            this.$onMultiSelect();\n        else\n            this.$onSingleSelect();\n    }\n};\nfunction MultiSelect(editor) {\n    if (editor.$multiselectOnSessionChange)\n        return;\n    editor.$onAddRange = editor.$onAddRange.bind(editor);\n    editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n    editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n    editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n    editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n    editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n    editor.$multiselectOnSessionChange(editor);\n    editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n    editor.on(\"mousedown\", onMouseDown);\n    editor.commands.addCommands(commands.defaultCommands);\n    addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n    if (!editor.textInput)\n        return;\n    var el = editor.textInput.getElement();\n    var altCursor = false;\n    event.addListener(el, \"keydown\", function (e) {\n        var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n        if (editor.$blockSelectEnabled && altDown) {\n            if (!altCursor) {\n                editor.renderer.setMouseCursor(\"crosshair\");\n                altCursor = true;\n            }\n        }\n        else if (altCursor) {\n            reset();\n        }\n    }, editor);\n    event.addListener(el, \"keyup\", reset, editor);\n    event.addListener(el, \"blur\", reset, editor);\n    function reset(e) {\n        if (altCursor) {\n            editor.renderer.setMouseCursor(\"\");\n            altCursor = false;\n        }\n    }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    enableMultiselect: {\n        set: function (val) {\n            MultiSelect(this);\n            if (val) {\n                this.on(\"mousedown\", onMouseDown);\n            }\n            else {\n                this.off(\"mousedown\", onMouseDown);\n            }\n        },\n        value: true\n    },\n    enableBlockSelect: {\n        set: function (val) {\n            this.$blockSelectEnabled = val;\n        },\n        value: true\n    }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n    this.foldingStartMarker = null;\n    this.foldingStopMarker = null;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.foldingStartMarker.test(line))\n            return \"start\";\n        if (foldStyle == \"markbeginend\"\n            && this.foldingStopMarker\n            && this.foldingStopMarker.test(line))\n            return \"end\";\n        return \"\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        return null;\n    };\n    this.indentationBlock = function (session, row, column) {\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1)\n            return;\n        var startColumn = column || line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            var level = session.getLine(row).search(re);\n            if (level == -1)\n                continue;\n            if (level <= startLevel) {\n                var token = session.getTokenAt(row, 0);\n                if (!token || token.type !== \"string\")\n                    break;\n            }\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n        var start = { row: row, column: column + 1 };\n        var end = session.$findClosingBracket(bracket, start, typeRe);\n        if (!end)\n            return;\n        var fw = session.foldWidgets[end.row];\n        if (fw == null)\n            fw = session.getFoldWidget(end.row);\n        if (fw == \"start\" && end.row > start.row) {\n            end.row--;\n            end.column = session.getLine(end.row).length;\n        }\n        return Range.fromPoints(start, end);\n    };\n    this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n        var end = { row: row, column: column };\n        var start = session.$findOpeningBracket(bracket, end);\n        if (!start)\n            return;\n        start.column++;\n        end.column--;\n        return Range.fromPoints(start, end);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){/**\n * ## Error Marker extension\n *\n * Provides inline error display functionality for Ace editor. Creates visual error markers that appear as tooltips\n * below editor lines containing annotations (errors, warnings, info). Enables navigation between error locations with\n * keyboard shortcuts and displays context-sensitive messages with proper styling based on annotation severity.\n *\n * @module\n */\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nvar nls = require(\"../config\").nls;\nfunction binarySearch(array, needle, comparator) {\n    var first = 0;\n    var last = array.length - 1;\n    while (first <= last) {\n        var mid = (first + last) >> 1;\n        var c = comparator(needle, array[mid]);\n        if (c > 0)\n            first = mid + 1;\n        else if (c < 0)\n            last = mid - 1;\n        else\n            return mid;\n    }\n    return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n    var annotations = session.getAnnotations().sort(Range.comparePoints);\n    if (!annotations.length)\n        return;\n    var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n    if (i < 0)\n        i = -i - 1;\n    if (i >= annotations.length)\n        i = dir > 0 ? 0 : annotations.length - 1;\n    else if (i === 0 && dir < 0)\n        i = annotations.length - 1;\n    var annotation = annotations[i];\n    if (!annotation || !dir)\n        return;\n    if (annotation.row === row) {\n        do {\n            annotation = annotations[i += dir];\n        } while (annotation && annotation.row === row);\n        if (!annotation)\n            return annotations.slice();\n    }\n    var matched = [];\n    row = annotation.row;\n    do {\n        matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n        annotation = annotations[i += dir];\n    } while (annotation && annotation.row == row);\n    return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n    var session = editor.session;\n    var pos = editor.getCursorPosition();\n    var row = pos.row;\n    var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n        return w.type == \"errorMarker\";\n    })[0];\n    if (oldWidget) {\n        oldWidget.destroy();\n    }\n    else {\n        row -= dir;\n    }\n    var annotations = findAnnotations(session, row, dir);\n    var gutterAnno;\n    if (annotations) {\n        var annotation = annotations[0];\n        pos.column = (annotation.pos && typeof annotation.column != \"number\"\n            ? annotation.pos.sc\n            : annotation.column) || 0;\n        pos.row = annotation.row;\n        gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n    }\n    else if (oldWidget) {\n        return;\n    }\n    else {\n        gutterAnno = {\n            displayText: [nls(\"error-marker.good-state\", \"Looks good!\")],\n            className: \"ace_ok\"\n        };\n    }\n    editor.session.unfold(pos.row);\n    editor.selection.moveToPosition(pos);\n    var w = {\n        row: pos.row,\n        fixedWidth: true,\n        coverGutter: true,\n        el: dom.createElement(\"div\"),\n        type: \"errorMarker\"\n    };\n    var el = w.el.appendChild(dom.createElement(\"div\"));\n    var arrow = w.el.appendChild(dom.createElement(\"div\"));\n    arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n    var left = editor.renderer.$cursorLayer\n        .getPixelPosition(pos).left;\n    arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n    w.el.className = \"error_widget_wrapper\";\n    el.className = \"error_widget \" + gutterAnno.className;\n    gutterAnno.displayText.forEach(function (annoTextLine, i) {\n        el.appendChild(dom.createTextNode(annoTextLine));\n        if (i < gutterAnno.displayText.length - 1) {\n            el.appendChild(dom.createElement(\"br\"));\n        }\n    });\n    el.appendChild(dom.createElement(\"div\"));\n    var kb = function (_, hashId, keyString) {\n        if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n            w.destroy();\n            return { command: \"null\" };\n        }\n    };\n    w.destroy = function () {\n        if (editor.$mouseHandler.isMousePressed)\n            return;\n        editor.keyBinding.removeKeyboardHandler(kb);\n        session.widgetManager.removeLineWidget(w);\n        editor.off(\"changeSelection\", w.destroy);\n        editor.off(\"changeSession\", w.destroy);\n        editor.off(\"mouseup\", w.destroy);\n        editor.off(\"change\", w.destroy);\n    };\n    editor.keyBinding.addKeyboardHandler(kb);\n    editor.on(\"changeSelection\", w.destroy);\n    editor.on(\"changeSession\", w.destroy);\n    editor.on(\"mouseup\", w.destroy);\n    editor.on(\"change\", w.destroy);\n    editor.session.widgetManager.addLineWidget(w);\n    w.el.onmousedown = editor.focus.bind(editor);\n    editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n    .error_widget_wrapper {\\n        background: inherit;\\n        color: inherit;\\n        border:none\\n    }\\n    .error_widget {\\n        border-top: solid 2px;\\n        border-bottom: solid 2px;\\n        margin: 5px 0;\\n        padding: 10px 40px;\\n        white-space: pre-wrap;\\n    }\\n    .error_widget.ace_error, .error_widget_arrow.ace_error{\\n        border-color: #ff5a5a\\n    }\\n    .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n        border-color: #F1D817\\n    }\\n    .error_widget.ace_info, .error_widget_arrow.ace_info{\\n        border-color: #5a5a5a\\n    }\\n    .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n        border-color: #5aaa5a\\n    }\\n    .error_widget_arrow {\\n        position: absolute;\\n        border: solid 5px;\\n        border-top-color: transparent!important;\\n        border-right-color: transparent!important;\\n        border-left-color: transparent!important;\\n        top: -5px;\\n    }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @namespace Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n    if (typeof el == \"string\") {\n        var _id = el;\n        el = document.getElementById(_id);\n        if (!el)\n            throw new Error(\"ace.edit can't find div #\" + _id);\n    }\n    if (el && el.env && el.env.editor instanceof Editor)\n        return el.env.editor;\n    var value = \"\";\n    if (el && /input|textarea/i.test(el.tagName)) {\n        var oldNode = el;\n        value = oldNode.value;\n        el = dom.createElement(\"pre\");\n        oldNode.parentNode.replaceChild(el, oldNode);\n    }\n    else if (el) {\n        value = el.textContent;\n        el.innerHTML = \"\";\n    }\n    var doc = exports.createEditSession(value);\n    var editor = new Editor(new Renderer(el), doc, options);\n    var env = {\n        document: doc,\n        editor: editor,\n        onResize: editor.resize.bind(editor, null)\n    };\n    if (oldNode)\n        env.textarea = oldNode;\n    editor.on(\"destroy\", function () {\n        env.editor.container.env = null; // prevent memory leak on old ie\n    });\n    editor.container.env = editor.env = env;\n    return editor;\n};\nexports.createEditSession = function (text, mode) {\n    var doc = new EditSession(text, mode);\n    doc.setUndoManager(new UndoManager());\n    return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nvar version = exports.config.version;\nexports.version = version;\n\n});            (function() {\n                ace.require([\"ace/ace\"], function(a) {\n                    if (a) {\n                        a.config.init(true);\n                        a.define = ace.define;\n                    }\n                    var global = (function () {\n                        return this;\n                    })();\n                    if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n                    if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n                    \n                    if (!global.ace)\n                        global.ace = a;\n                    for (var key in a) if (a.hasOwnProperty(key))\n                        global.ace[key] = a[key];\n                    global.ace[\"default\"] = global.ace;\n                    if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                        module.exports = global.ace;\n                    }\n                });\n            })();\n        ", "ace.define(\"ace/mode/jsdoc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsDocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: [\"comment.doc.tag\", \"comment.doc.text\", \"lparen.doc\"],\n                regex: \"(@(?:param|member|typedef|property|namespace|var|const|callback))(\\\\s*)({)\",\n                push: [\n                    {\n                        token: \"lparen.doc\",\n                        regex: \"{\",\n                        push: [\n                            {\n                                include: \"doc-syntax\"\n                            }, {\n                                token: \"rparen.doc\",\n                                regex: \"}|(?=$)\",\n                                next: \"pop\"\n                            }\n                        ]\n                    }, {\n                        token: [\"rparen.doc\", \"text.doc\", \"variable.parameter.doc\", \"lparen.doc\", \"variable.parameter.doc\", \"rparen.doc\"],\n                        regex: /(})(\\s*)(?:([\\w=:\\/\\.]+)|(?:(\\[)([\\w=:\\/\\.\\-\\'\\\" ]+)(\\])))/,\n                        next: \"pop\"\n                    }, {\n                        token: \"rparen.doc\",\n                        regex: \"}|(?=$)\",\n                        next: \"pop\"\n                    }, {\n                        include: \"doc-syntax\"\n                    }, {\n                        defaultToken: \"text.doc\"\n                    }\n                ]\n            }, {\n                token: [\"comment.doc.tag\", \"text.doc\", \"lparen.doc\"],\n                regex: \"(@(?:returns?|yields|type|this|suppress|public|protected|private|package|modifies|\"\n                    + \"implements|external|exception|throws|enum|define|extends))(\\\\s*)({)\",\n                push: [\n                    {\n                        token: \"lparen.doc\",\n                        regex: \"{\",\n                        push: [\n                            {\n                                include: \"doc-syntax\"\n                            }, {\n                                token: \"rparen.doc\",\n                                regex: \"}|(?=$)\",\n                                next: \"pop\"\n                            }\n                        ]\n                    }, {\n                        token: \"rparen.doc\",\n                        regex: \"}|(?=$)\",\n                        next: \"pop\"\n                    }, {\n                        include: \"doc-syntax\"\n                    }, {\n                        defaultToken: \"text.doc\"\n                    }\n                ]\n            }, {\n                token: [\"comment.doc.tag\", \"text.doc\", \"variable.parameter.doc\"],\n                regex: \"(@(?:alias|memberof|instance|module|name|lends|namespace|external|this|template|\"\n                    + \"requires|param|implements|function|extends|typedef|mixes|constructor|var|\"\n                    + \"memberof\\\\!|event|listens|exports|class|constructs|interface|emits|fires|\"\n                    + \"throws|const|callback|borrows|augments))(\\\\s+)(\\\\w[\\\\w#\\.:\\/~\\\"\\\\-]*)?\"\n            }, {\n                token: [\"comment.doc.tag\", \"text.doc\", \"variable.parameter.doc\"],\n                regex: \"(@method)(\\\\s+)(\\\\w[\\\\w\\.\\\\(\\\\)]*)\"\n            }, {\n                token: \"comment.doc.tag\",\n                regex: \"@access\\\\s+(?:private|public|protected)\"\n            }, {\n                token: \"comment.doc.tag\",\n                regex: \"@kind\\\\s+(?:class|constant|event|external|file|function|member|mixin|module|namespace|typedef)\"\n            }, {\n                token: \"comment.doc.tag\",\n                regex: \"@\\\\w+(?=\\\\s|$)\"\n            },\n            JsDocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc.body\",\n                caseInsensitive: true\n            }\n        ],\n        \"doc-syntax\": [{\n                token: \"operator.doc\",\n                regex: /[|:]/\n            }, {\n                token: \"paren.doc\",\n                regex: /[\\[\\]]/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(JsDocCommentHighlightRules, TextHighlightRules);\nJsDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nJsDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\", // doc comment\n        regex: /\\/\\*\\*(?!\\/)/,\n        next: start\n    };\n};\nJsDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\", // closing comment\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.JsDocCommentHighlightRules = JsDocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/jsdoc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./jsdoc_comment_highlight_rules\").JsDocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywords = {\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Symbol|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\", // Pseudo\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static|constructor\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    };\n    var keywordMapper = this.createKeywordMapper(keywords, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    var anonymousFunctionRe = \"(function)(\\\\s*)(\\\\*?)\";\n    var functionCallStartRule = {\n        token: [\"identifier\", \"text\", \"paren.lparen\"],\n        regex: \"(\\\\b(?!\" + Object.values(keywords).join(\"|\") + \"\\\\b)\" + identifierRe + \")(\\\\s*)(\\\\()\"\n    };\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            functionCallStartRule,\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                include: \"numeric_constants\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)\" + anonymousFunctionRe + \"(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"storage.type\", \"text\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(?:(?:(\\\\s*)(\\\\*)(\\\\s*))|(\\\\s+))(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)\" + anonymousFunctionRe + \"(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)\" + anonymousFunctionRe + \"(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: \"support.constant\",\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|debug|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /=/\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: anonymousFunctionRe + \"(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"storage.type\", \"text\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(?:(?:(\\\\s*)(\\\\*)(\\\\s*))|(\\\\s+))(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: \"prototype\"\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|lter|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward|rEach)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"default_parameter\": [\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                push: [\n                    {\n                        token: \"string\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"qstring\"\n                    }\n                ]\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                push: [\n                    {\n                        token: \"string\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"qqstring\"\n                    }\n                ]\n            }, {\n                token: \"constant.language\",\n                regex: \"null|Infinity|NaN|undefined\"\n            }, {\n                include: \"numeric_constants\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \",\",\n                next: \"function_arguments\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"function_arguments\": [\n            comments(\"function_arguments\"),\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \",\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"numeric_constants\": [\n            {\n                token: \"constant.numeric\", // hexadecimal, octal and binary\n                regex: /0(?:[xX][0-9a-fA-F_]+|[oO][0-7_]+|[bB][01_]+)\\b/\n            }, {\n                token: \"constant.numeric\", // decimal integers and floats\n                regex: /(?:\\d[\\d_]*(?:\\.[\\d_]*)?|\\.\\d[\\d_]*)(?:[eE][+-]?\\d+\\b)?/\n            },\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        }, {\n            token: [\"variable.parameter\", \"text\"],\n            regex: \"(\" + identifierRe + \")(\\\\s*)(?=\\\\=>)\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"(\\\\()(?=[^\\\\(]+\\\\s*=>)\",\n            next: \"function_arguments\"\n        }, {\n            token: \"variable.language\",\n            regex: \"(?:(?:(?:Weak)?(?:Set|Map))|Promise)\\\\b\"\n        });\n        this.$rules[\"function_arguments\"].unshift({\n            token: \"keyword.operator\",\n            regex: \"=\",\n            next: \"default_parameter\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"\\\\.{3}\"\n        });\n        this.$rules[\"property\"].unshift({\n            token: \"support.function\",\n            regex: \"(findIndex|repeat|startsWith|endsWith|includes|isSafeInteger|trunc|cbrt|log2|log10|sign|then|catch|\"\n                + \"finally|resolve|reject|race|any|all|allSettled|keys|entries|isInteger)\\\\b(?=\\\\()\"\n        }, {\n            token: \"constant.language\",\n            regex: \"(?:MAX_SAFE_INTEGER|MIN_SAFE_INTEGER|EPSILON)\\\\b\"\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?(?:\" + tagRegex + \"|(?=>))\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" }, { defaultToken: \"string.xml\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\", // multi line comment\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements && this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (is(token, \"\") && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag] || !this.voidElements) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/behaviour/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/token_iterator\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CstyleBehaviour = require(\"../behaviour/cstyle\").CstyleBehaviour;\nvar XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\nvar JavaScriptBehaviour = function () {\n    var xmlBehaviours = new XmlBehaviour({ closeCurlyBraces: true }).getBehaviours();\n    this.addBehaviours(xmlBehaviours);\n    this.inherit(CstyleBehaviour);\n    this.add(\"autoclosing-fragment\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token)\n                return;\n            if (token.value == '<') {\n                return {\n                    text: \"></>\",\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n};\noop.inherits(JavaScriptBehaviour, CstyleBehaviour);\nexports.JavaScriptBehaviour = JavaScriptBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token && token.type && token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                if (token.value === \"\") { //skip empty tag name token for fragment\n                    token = tokens[++i];\n                    if (!token)\n                        return null;\n                    tag.tagName = token.value;\n                }\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn - 1)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (is(token, \"tag-name\") && token.value === \"\") {\n                    token = tokens[i + 2];\n                }\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row) && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n    this.xmlFoldMode = new XmlFoldMode();\n};\noop.inherits(FoldMode, CFoldMode);\n(function () {\n    this.getFoldWidgetRangeBase = this.getFoldWidgetRange;\n    this.getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var fw = this.getFoldWidgetBase(session, foldStyle, row);\n        if (!fw) {\n            return this.xmlFoldMode.getFoldWidget(session, foldStyle, row);\n        }\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var range = this.getFoldWidgetRangeBase(session, foldStyle, row, forceMultiline);\n        if (range)\n            return range;\n        return this.xmlFoldMode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/javascript\",\"ace/mode/folding/javascript\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar JavaScriptBehaviour = require(\"./behaviour/javascript\").JavaScriptBehaviour;\nvar JavaScriptFoldMode = require(\"./folding/javascript\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new JavaScriptBehaviour();\n    this.foldingRules = new JavaScriptFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.$pairQuotesAfter = {\n        \"`\": /\\w/\n    };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\", // multi line comment\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\", // hex6 color\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\", // hex3 color\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/html\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            ", "import ace from 'ace-builds/src-noconflict/ace';\nimport 'ace-builds/src-noconflict/mode-html';\n\n//always include the CSRF token\n$(() => {\n  $.ajaxSetup({\n    headers: {\n      'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content'),\n    },\n    //crossDomain: false,\n  });\n\n  $(document).foundation();\n\n  document.querySelectorAll('textarea[data-html-editor]').forEach((textarea) => {\n    const editor_element = document.createElement('div');\n    textarea.after(editor_element);\n    textarea.hidden = true;\n\n    const editor = ace.edit(editor_element);\n    editor.session.setUseWorker(false);\n    editor.session.setMode('ace/mode/html');\n    editor.setValue(textarea.value, -1);\n    editor.setOptions({\n      minLines: 20,\n      maxLines: 40,\n      showPrintMargin: false,\n    });\n    editor.session.on('change', () => textarea.value = editor.getValue());\n  });\n\n  $(document).on('change', '[data-action=\"change-results-count\"]', (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    $.post($(e.currentTarget).attr('data-url'), $('.results-count-form').serialize(), (data) => {\n      $($(e.currentTarget).attr('data-target')).replaceWith(data.html);\n    });\n  });\n});\n", "export const add_event_listener = (type: string, selector: string, callback: ((e: Event, target: Element) => void) | null = null) => {\n  document.addEventListener(type, (e: Event) => {\n    const target = (e.target as Element).closest(selector);\n    if (!target) return;\n\n    if (typeof callback === typeof Function) {\n      callback(e, target);\n    }\n  });\n};\n\nexport const add_event_listener_click = (selector: string, callback: ((e: Event, target: Element) => void) | null = null) => {\n  add_event_listener('click', selector, callback);\n};\n\nexport const add_event_listener_change = (selector: string, callback: ((e: Event, target: Element) => void) | null = null) => {\n  add_event_listener('change', selector, callback);\n};\n", "import {add_event_listener_change} from \"./events\";\n\nadd_event_listener_change('[data-max-upload-size]', (e, target) => {\n  const max = parseInt(target.getAttribute('data-max-upload-size'), 10);\n  if (!max) return;\n\n  const too_big = Array.from(target.files || []).filter((file) => file.size > max);\n  if (too_big.length === 0) return;\n\n  target.value = '';\n});\n"],
  "mappings": "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,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,KAAM,GAAI,MAAO,GAAI,KAAM,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,MAAO,GAAI,GAAI,EAAG,GAAI,KAAM,IAAK,EAAG,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC9xFC,EAAO,EACP3vB,EAAM,CAAC,EACF0B,EAAI,EAAGA,EAAIguB,EAAU,OAAQhuB,GAAK,EACvC1B,EAAI,KAAK2vB,GAAQD,EAAUhuB,CAAC,CAAC,EACzBguB,EAAUhuB,EAAI,CAAC,GACf1B,EAAI,KAAK,GAAI2vB,GAAQD,EAAUhuB,EAAI,CAAC,CAAC,EAE7ChE,EAAQ,UAAY,OAAO,aAAa,MAAM,KAAMsC,CAAG,CAEvD,CAAC,EAED,IAAI,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,aAAa,gBAAgB,gCAAgC,4BAA4B,cAAc,eAAe,qBAAqB,WAAW,EAAG,SAASxB,EAASd,EAASC,EAAO,CAAC,aACrP,IAAI6L,EAAShL,EAAQ,WAAW,EAC5BmrB,EAAYnrB,EAAQ,cAAc,EAAE,UACpC6sB,EAAqB7sB,EAAQ,wBAAwB,EAAE,mBACvDsvB,EAAkBtvB,EAAQ,oBAAoB,EAAE,gBAChDoxB,EAAUpxB,EAAQ,YAAY,EAC9B8J,EAAO9J,EAAQ,aAAa,EAC5BsuB,EAAgBtuB,EAAQ,mBAAmB,EAAE,cAC7CiM,EAAQjM,EAAQ,UAAU,EAAE,MAC5BqxB,EACJA,EAAO,UAAY,CACf,KAAK,eAAiBxE,CAC1B,EACC,UAAY,CACT,KAAK,kBAAoB,IAAIyC,EAC7B,KAAK,QAAU,IAAI,OAAO,KAAO8B,EAAQ,UAAY,SAAU,GAAG,EAClE,KAAK,WAAa,IAAI,OAAO,SAAWA,EAAQ,UAAY,eAAgB,GAAG,EAC/E,KAAK,aAAe,UAAY,CAC5B,OAAK,KAAK,aACN,KAAK,gBAAkB,KAAK,iBAAmB,IAAI,KAAK,eAAe,KAAK,oBAAoB,EAChG,KAAK,WAAa,IAAIjG,EAAU,KAAK,gBAAgB,SAAS,CAAC,GAE5D,KAAK,UAChB,EACA,KAAK,iBAAmB,GACxB,KAAK,aAAe,GACpB,KAAK,mBAAqB,SAAUvJ,EAAO/U,EAASX,EAAUE,EAAQ,CAClE,IAAIjH,EAAM0H,EAAQ,IACdykB,EAAmB,GACnBC,EAAe,GACfC,EAAY,IACZtH,EAAUrd,EAAQ,WAAW,EAC7B4kB,EAAkB,GACtB,GAAK,KAAK,iBAgCL,CACD,GAAI,MAAM,QAAQ,KAAK,gBAAgB,EACnC,IAAIC,EAAc,KAAK,iBAAiB,IAAI5nB,EAAK,YAAY,EAAE,KAAK,GAAG,EACnE6nB,EAAmB,KAAK,iBAAiB,CAAC,MAG9C,KAAID,EAAc5nB,EAAK,aAAa,KAAK,gBAAgB,EACrD6nB,EAAmB,KAAK,iBAEhCD,EAAc,IAAI,OAAO,aAAeA,EAAc,KAAK,EAC3DD,EAAkB5kB,EAAQ,eAAe,EACzC,IAAI+kB,EAAY,SAAU5tB,EAAMd,EAAG,CAC/B,IAAI6I,EAAI/H,EAAK,MAAM0tB,CAAW,EAC9B,GAAK3lB,EAEL,KAAIxJ,EAAQwJ,EAAE,CAAC,EAAE,OAAQtJ,EAAMsJ,EAAE,CAAC,EAAE,OAChC,CAAC8lB,EAAkB7tB,EAAMzB,EAAOE,CAAG,GAAKsJ,EAAE,CAAC,EAAEtJ,EAAM,CAAC,GAAK,KACzDA,IACJ0C,EAAI,aAAajC,EAAGX,EAAOE,CAAG,EAClC,EACIqvB,EAAmBH,EAAmB,IACtCI,EAAU,SAAU/tB,EAAMd,EAAG,EACzB,CAACouB,GAAoB,KAAK,KAAKttB,CAAI,KAC/B6tB,EAAkB7tB,EAAMwtB,EAAWA,CAAS,EAC5CrsB,EAAI,aAAa,CAAE,IAAKjC,EAAG,OAAQsuB,CAAU,EAAGM,CAAgB,EAEhE3sB,EAAI,aAAa,CAAE,IAAKjC,EAAG,OAAQsuB,CAAU,EAAGG,CAAgB,EAE5E,EACIK,EAAa,SAAUhuB,EAAMd,EAAG,CAChC,OAAOwuB,EAAY,KAAK1tB,CAAI,CAChC,EACI6tB,EAAoB,SAAU7tB,EAAMiuB,EAAQC,EAAO,CAEnD,QADIC,EAAS,EACNF,KAAYjuB,EAAK,OAAOiuB,CAAM,GAAK,KACtCE,IACJ,GAAIA,EAASjI,GAAW,EACpB,MAAO,GAEX,QADIiI,EAAS,EACNnuB,EAAK,OAAOkuB,GAAO,GAAK,KAC3BC,IACJ,OAAIjI,EAAU,EACHiI,EAASjI,GAAWA,EAAU,EAE9BiI,EAASjI,GAAW,CACnC,CACJ,KA9E4B,CACxB,GAAI,CAAC,KAAK,aACN,MAAO,GACX,IAAIyH,EAAmB,KAAK,aAAa,MACrCS,EAAiB,KAAK,aAAa,IACnCV,EAAc,IAAI,OAAO,aAAe5nB,EAAK,aAAa6nB,CAAgB,EAAI,GAAG,EACjFU,EAAY,IAAI,OAAO,MAAQvoB,EAAK,aAAasoB,CAAc,EAAI,QAAQ,EAC3EL,EAAU,SAAU/tB,EAAMd,EAAG,CACzB8uB,EAAWhuB,EAAMd,CAAC,IAElB,CAACouB,GAAoB,KAAK,KAAKttB,CAAI,KACnCmB,EAAI,aAAa,CAAE,IAAKjC,EAAG,OAAQc,EAAK,MAAO,EAAGouB,CAAc,EAChEjtB,EAAI,aAAa,CAAE,IAAKjC,EAAG,OAAQsuB,CAAU,EAAGG,CAAgB,EAExE,EACIC,EAAY,SAAU5tB,EAAMd,EAAG,CAC/B,IAAI6I,GACAA,EAAI/H,EAAK,MAAMquB,CAAS,IACxBltB,EAAI,aAAajC,EAAGc,EAAK,OAAS+H,EAAE,CAAC,EAAE,OAAQ/H,EAAK,MAAM,GAC1D+H,EAAI/H,EAAK,MAAM0tB,CAAW,IAC1BvsB,EAAI,aAAajC,EAAG6I,EAAE,CAAC,EAAE,OAAQA,EAAE,CAAC,EAAE,MAAM,CACpD,EACIimB,EAAa,SAAUhuB,EAAMuI,EAAK,CAClC,GAAImlB,EAAY,KAAK1tB,CAAI,EACrB,MAAO,GAEX,QADIgoB,EAASnf,EAAQ,UAAUN,CAAG,EACzBrJ,EAAI,EAAGA,EAAI8oB,EAAO,OAAQ9oB,IAC/B,GAAI8oB,EAAO9oB,CAAC,EAAE,OAAS,UACnB,MAAO,EAEnB,CACJ,CAgDA,SAASovB,EAAKC,EAAK,CACf,QAASrvB,EAAIgJ,EAAUhJ,GAAKkJ,EAAQlJ,IAChCqvB,EAAIptB,EAAI,QAAQjC,CAAC,EAAGA,CAAC,CAC7B,CACA,IAAIsvB,EAAiB,IACrBF,EAAK,SAAUtuB,EAAMd,EAAG,CACpB,IAAI0sB,EAAS5rB,EAAK,OAAO,IAAI,EACzB4rB,IAAW,IACPA,EAAS4B,IACTA,EAAY5B,GACZ2B,GAAgB,CAACS,EAAWhuB,EAAMd,CAAC,IACnCquB,EAAe,KAEdiB,EAAiBxuB,EAAK,SAC3BwuB,EAAiBxuB,EAAK,OAE9B,CAAC,EACGwtB,GAAa,MACbA,EAAYgB,EACZlB,EAAmB,GACnBC,EAAe,IAEfE,GAAmBD,EAAYtH,GAAW,IAC1CsH,EAAY,KAAK,MAAMA,EAAYtH,CAAO,EAAIA,GAClDoI,EAAKf,EAAeK,EAAYG,CAAO,CAC3C,EACA,KAAK,mBAAqB,SAAUnQ,EAAO/U,EAASP,EAAOyI,EAAQ,CAC/D,IAAIgd,EAAU,KAAK,aACnB,GAAKA,EAEL,CAAI,CAACA,EAAQ,OAASA,EAAQ,CAAC,IAC3BA,EAAUA,EAAQ,CAAC,GACvB,IAAIhB,EAAW,IAAIzC,EAAczhB,EAASkI,EAAO,IAAKA,EAAO,MAAM,EAC/D4X,EAAQoE,EAAS,gBAAgB,EACjC0B,EAAM5lB,EAAQ,UACd6lB,EAAe7lB,EAAQ,UAAU,gBAAgB,EACjDX,EAAUymB,EACd,GAAIhG,GAAS,UAAU,KAAKA,EAAM,IAAI,EAAG,CAErC,QADIiG,EAAYC,EACTlG,GAAS,UAAU,KAAKA,EAAM,IAAI,GAAG,CACxC,IAAIzpB,EAAIypB,EAAM,MAAM,QAAQoF,EAAQ,KAAK,EACzC,GAAI7uB,GAAK,GAAI,CACT,IAAIqJ,EAAMwkB,EAAS,mBAAmB,EAClCvkB,EAASukB,EAAS,sBAAsB,EAAI7tB,EAChD0vB,EAAa,IAAI3mB,EAAMM,EAAKC,EAAQD,EAAKC,EAASulB,EAAQ,MAAM,MAAM,EACtE,KACJ,CACApF,EAAQoE,EAAS,aAAa,CAClC,CAGA,QAFIA,EAAW,IAAIzC,EAAczhB,EAASkI,EAAO,IAAKA,EAAO,MAAM,EAC/D4X,EAAQoE,EAAS,gBAAgB,EAC9BpE,GAAS,UAAU,KAAKA,EAAM,IAAI,GAAG,CACxC,IAAIzpB,EAAIypB,EAAM,MAAM,QAAQoF,EAAQ,GAAG,EACvC,GAAI7uB,GAAK,GAAI,CACT,IAAIqJ,EAAMwkB,EAAS,mBAAmB,EAClCvkB,EAASukB,EAAS,sBAAsB,EAAI7tB,EAChD2vB,EAAW,IAAI5mB,EAAMM,EAAKC,EAAQD,EAAKC,EAASulB,EAAQ,IAAI,MAAM,EAClE,KACJ,CACApF,EAAQoE,EAAS,YAAY,CACjC,CACI8B,GACAhmB,EAAQ,OAAOgmB,CAAQ,EACvBD,IACA/lB,EAAQ,OAAO+lB,CAAU,EACzB1mB,EAAW0mB,EAAW,MAAM,IAC5BD,EAAU,CAACZ,EAAQ,MAAM,OAEjC,MAEIY,EAAUZ,EAAQ,MAAM,OACxB7lB,EAAWI,EAAM,MAAM,IACvBO,EAAQ,OAAOP,EAAM,IAAKylB,EAAQ,GAAG,EACrCllB,EAAQ,OAAOP,EAAM,MAAOylB,EAAQ,KAAK,EAEzCW,EAAa,MAAM,KAAOxmB,IAC1BwmB,EAAa,MAAM,QAAUC,GAC7BD,EAAa,IAAI,KAAOxmB,IACxBwmB,EAAa,IAAI,QAAUC,GAC/B9lB,EAAQ,UAAU,kBAAkB6lB,CAAY,EACpD,EACA,KAAK,kBAAoB,SAAU9Q,EAAO5d,EAAM8uB,EAAK,CACjD,OAAO,KAAK,WAAW9uB,CAAI,CAC/B,EACA,KAAK,aAAe,SAAU4d,EAAO5d,EAAM+uB,EAAO,CAC9C,MAAO,EACX,EACA,KAAK,YAAc,SAAUnR,EAAOzc,EAAKoH,EAAK,CAC9C,EACA,KAAK,WAAa,SAAUvI,EAAM,CAC9B,OAAOA,EAAK,MAAM,MAAM,EAAE,CAAC,CAC/B,EACA,KAAK,aAAe,SAAU6I,EAAS,CACnC,OAAO,IACX,EACA,KAAK,oBAAsB,SAAU0e,EAAS,CAC1C,KAAK,QAAU,CAAC,EAChB,KAAK,OAAS,CAAC,EACf,QAAS,KAAKA,EACV,GAAIA,EAAQ,CAAC,EAAG,CACZ,IAAI8F,EAAO9F,EAAQ,CAAC,EAChB3lB,EAAKyrB,EAAK,UAAU,IACpB3S,EAAO1T,EAAO,OAAOpF,CAAE,EACtB8Y,IACD1T,EAAO,OAAOpF,CAAE,EAAI8Y,EAAO,IAAI2S,GAC9BrmB,EAAO,OAAO,CAAC,IAChBA,EAAO,OAAO,CAAC,EAAI0T,GACvB,KAAK,QAAQ,KAAK,CAAC,EACnB,KAAK,OAAO,CAAC,EAAIA,CACrB,CAeJ,QAbIsU,EAAc,CAAC,qBAAsB,qBAAsB,oBAC3D,eAAgB,cAAe,kBAAmB,gBAAgB,EAClEC,EAAU,SAAU/vB,EAAG,EACtB,SAAUgwB,EAAO,CACd,IAAIC,EAAeH,EAAY9vB,CAAC,EAC5BkF,EAAiB8qB,EAAMC,CAAY,EACvCD,EAAMF,EAAY9vB,CAAC,CAAC,EAChB,UAAY,CACR,OAAO,KAAK,WAAWiwB,EAAc,UAAW/qB,CAAc,CAClE,CACR,GAAEgrB,CAAM,CACZ,EACIA,EAAS,KACJ,EAAI,EAAG,EAAIJ,EAAY,OAAQ,IACpCC,EAAQ,CAAC,CAEjB,EACA,KAAK,WAAa,SAAUI,EAAQzF,EAAMxlB,EAAgB,CACtD,IAAIwZ,EAAQgM,EAAK,CAAC,GAAK,QACvB,GAAI,OAAOhM,GAAS,SAAU,CAC1B,GAAI,MAAM,QAAQA,EAAM,CAAC,CAAC,EAAG,CACzB,IAAI0R,EAAW1R,EAAM,CAAC,EAAEA,EAAM,CAAC,EAAE,OAAS,CAAC,EACvClD,EAAO,KAAK,OAAO4U,CAAQ,EAC/B,GAAI5U,EACA,OAAOA,EAAK2U,CAAM,EAAE,MAAM3U,EAAM,CAACkD,EAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAKgM,EAAM,CAAC,CAAC,CAAC,CACjF,CACAhM,EAAQA,EAAM,CAAC,GAAK,OACxB,CACA,QAAS1e,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQA,IACrC,GAAK,KAAK,OAAO,KAAK,QAAQA,CAAC,CAAC,EAEhC,KAAIqwB,EAAQ3R,EAAM,MAAM,KAAK,QAAQ1e,CAAC,CAAC,EACvC,GAAI,CAACqwB,EAAM,CAAC,GAAKA,EAAM,CAAC,EAAG,CACvB3F,EAAK,CAAC,EAAI2F,EAAM,CAAC,EACjB,IAAI7U,EAAO,KAAK,OAAO,KAAK,QAAQxb,CAAC,CAAC,EACtC,OAAOwb,EAAK2U,CAAM,EAAE,MAAM3U,EAAMkP,CAAI,CACxC,EAEJ,IAAI/G,EAAMze,EAAe,MAAM,KAAMwlB,CAAI,EACzC,OAAOxlB,EAAiBye,EAAM,MAClC,EACA,KAAK,gBAAkB,SAAUjF,EAAOhC,EAAQtL,EAAQzH,EAAS2mB,EAAO,CACpE,GAAI,KAAK,WAAY,CACjB,IAAIpF,EAAa,KAAK,WAAW,cAAc,EAC/C,QAASvsB,KAAOusB,EACZ,GAAIA,EAAWvsB,CAAG,EAAE+d,CAAM,EAAG,CACzB,IAAIiH,EAAMuH,EAAWvsB,CAAG,EAAE+d,CAAM,EAAE,MAAM,KAAM,SAAS,EACvD,GAAIiH,EACA,OAAOA,CAEf,CAER,CACJ,EACA,KAAK,YAAc,SAAUqG,EAAQ,CACjC,GAAI,CAAC,KAAK,mBAAoB,CAC1B,IAAI9B,EAAQ,KAAK,WAAW,MACxBqI,EAAqB,CAAC,EAC1B,QAAS/H,KAAQN,EAEb,QADIsI,EAAUtI,EAAMM,CAAI,EACf1Q,EAAI,EAAGlb,EAAI4zB,EAAQ,OAAQ1Y,EAAIlb,EAAGkb,IACvC,GAAI,OAAO0Y,EAAQ1Y,CAAC,EAAE,OAAU,SACxB,0BAA0B,KAAK0Y,EAAQ1Y,CAAC,EAAE,KAAK,GAC/CyY,EAAmB,KAAKC,EAAQ1Y,CAAC,EAAE,KAAK,UAEvC,OAAO0Y,EAAQ1Y,CAAC,EAAE,OAAU,UACjC,QAASlY,EAAI,EAAG6wB,EAAUD,EAAQ1Y,CAAC,EAAE,MAAM,OAAQlY,EAAI6wB,EAAS7wB,IAC5D,GAAI,0BAA0B,KAAK4wB,EAAQ1Y,CAAC,EAAE,MAAMlY,CAAC,CAAC,EAAG,CACrD,IAAI4oB,EAAOgI,EAAQ1Y,CAAC,EAAE,MAAM,MAAM,UAAU,EAAElY,CAAC,EAC/C2wB,EAAmB,KAAK/H,EAAK,OAAO,EAAGA,EAAK,OAAS,CAAC,CAAC,CAC3D,EAKhB,KAAK,mBAAqB+H,CAC9B,CACA,OAAKvG,EAEEuG,EAAmB,OAAO,KAAK,cAAgB,CAAC,CAAC,EAD7C,KAAK,YAEpB,EACA,KAAK,mBAAqB,UAAY,CAClC,OAAK,KAAK,iBACN,KAAK,aAAa,EACf,KAAK,aAAe,KAAK,gBAAgB,cAAgB,CAAC,CACrE,EACA,KAAK,eAAiB,SAAU7R,EAAO/U,EAAS4H,EAAKqY,EAAQ,CACzD,IAAIkB,EAAW,KAAK,cAAgB,KAAK,mBAAmB,EAC5D,OAAOA,EAAS,IAAI,SAAUE,EAAM,CAChC,MAAO,CACH,KAAMA,EACN,MAAOA,EACP,MAAO,EACP,KAAM,SACV,CACJ,CAAC,CACL,EACA,KAAK,IAAM,eACf,EAAG,KAAKmD,EAAK,SAAS,EACtBnyB,EAAQ,KAAOmyB,CAEf,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,aAAa,EAAG,SAASrxB,EAASd,EAASC,EAAO,CAAC,aAC/G,IAAI+H,EAAMlH,EAAQ,WAAW,EACzB4zB,EAA6B,UAAY,CACzC,SAASA,EAAY/mB,EAAS,CAC1B,KAAK,QAAUA,EACf,KAAK,QAAQ,cAAgB,KAC7B,KAAK,QAAQ,aAAe,KAAK,aACjC,KAAK,QAAQ,uBAAyB,KAAK,uBAC3C,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,QAAQ,gBAAkB,CAAC,EAChC,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,QAAQ,GAAG,SAAU,KAAK,cAAc,EAC7C,KAAK,QAAQ,GAAG,aAAc,KAAK,YAAY,EAC/C,KAAK,QAAQ,GAAG,eAAgB,KAAK,eAAe,CACxD,CACA,OAAA+mB,EAAY,UAAU,aAAe,SAAUrnB,EAAK,CAChD,IAAI+T,EAKJ,OAJI,KAAK,YACLA,EAAI,KAAK,YAAY/T,CAAG,GAAK,KAAK,YAAYA,CAAG,EAAE,UAAY,EAE/D+T,EAAI,EACJ,CAAC,KAAK,cAAmB,CAAC,KAAK,UAAa/T,CAAG,EACxC,EAAI+T,EAGJ,KAAK,UAAa/T,CAAG,EAAE,OAAS,EAAI+T,CAEnD,EACAsT,EAAY,UAAU,uBAAyB,UAAY,CACvD,IAAIC,EAAa,EACjB,YAAK,YAAY,QAAQ,SAAUtT,EAAG,CAC9BA,GAAKA,EAAE,UAAY,CAACA,EAAE,SACtBsT,GAActT,EAAE,SACxB,CAAC,EACMsT,CACX,EACAD,EAAY,UAAU,gBAAkB,SAAU1rB,EAAG,CACjD,KAAK,OAAOA,EAAE,MAAM,CACxB,EACA0rB,EAAY,UAAU,OAAS,SAAUtf,EAAQ,CACzCA,GAAUA,EAAO,eAAiBA,EAAO,eAAiB,MAC1DA,EAAO,cAAc,OAAO,EAC5B,KAAK,QAAUA,IAEnB,KAAK,OAAO,EACZ,KAAK,OAASA,EACVA,IACAA,EAAO,cAAgB,KACvBA,EAAO,SAAS,GAAG,eAAgB,KAAK,cAAc,EACtDA,EAAO,SAAS,GAAG,cAAe,KAAK,aAAa,GAE5D,EACAsf,EAAY,UAAU,OAAS,SAAU1rB,EAAG,CACxC,IAAIoM,EAAS,KAAK,OAClB,GAAKA,EAEL,MAAK,OAAS,KACdA,EAAO,cAAgB,KACvBA,EAAO,SAAS,IAAI,eAAgB,KAAK,cAAc,EACvDA,EAAO,SAAS,IAAI,cAAe,KAAK,aAAa,EACrD,IAAIwf,EAAc,KAAK,QAAQ,YAC/BA,GAAeA,EAAY,QAAQ,SAAUvT,EAAG,CACxCA,GAAKA,EAAE,IAAMA,EAAE,GAAG,aAClBA,EAAE,YAAc,GAChBA,EAAE,GAAG,WAAW,YAAYA,EAAE,EAAE,EAExC,CAAC,EACL,EACAqT,EAAY,UAAU,aAAe,SAAU1rB,EAAG2E,EAAS,CACvD,IAAIinB,EAAcjnB,EAAQ,YAC1B,GAAI,GAACinB,GAAe,CAAC5rB,EAAE,QAMvB,SAJI8R,EAAO9R,EAAE,KACT3F,EAAQyX,EAAK,MAAM,IACnBvX,EAAMuX,EAAK,IAAI,IACf+Z,EAAO7rB,EAAE,QAAU,MACd,EAAI3F,EAAQ,EAAG,EAAIE,EAAK,IACzBqxB,EAAY,CAAC,IACbA,EAAY,CAAC,EAAE,OAASC,GAE5BD,EAAYrxB,CAAG,IACXsxB,EACKD,EAAYvxB,CAAK,EAGlBuxB,EAAYrxB,CAAG,EAAE,OAASsxB,EAF1BD,EAAYvxB,CAAK,EAAIuxB,EAAYrxB,CAAG,GAKpCqxB,EAAYvxB,CAAK,GAAKuxB,EAAYrxB,CAAG,IACrCqxB,EAAYvxB,CAAK,EAAI,QACzBuxB,EAAYrxB,CAAG,EAAE,OAASsxB,IAGtC,EACAH,EAAY,UAAU,eAAiB,SAAUvM,EAAO,CACpD,IAAIyM,EAAc,KAAK,QAAQ,YAC/B,GAAKA,EAEL,KAAI5nB,EAAWmb,EAAM,MAAM,IACvBplB,EAAMolB,EAAM,IAAI,IAAMnb,EAC1B,GAAIjK,IAAQ,EAEP,GAAIolB,EAAM,QAAU,SAAU,CAC/B,IAAI2M,EAAUF,EAAY,OAAO5nB,EAAW,EAAGjK,CAAG,EAC9C,CAAC6xB,EAAY5nB,CAAQ,GAAK8nB,EAAQA,EAAQ,OAAS,CAAC,IACpDF,EAAY5nB,CAAQ,EAAI8nB,EAAQ,IAAI,GAExCA,EAAQ,QAAQ,SAAUzT,EAAG,CACzBA,GAAK,KAAK,iBAAiBA,CAAC,CAChC,EAAG,IAAI,EACP,KAAK,YAAY,CACrB,KACK,CACD,IAAIqN,EAAO,IAAI,MAAM3rB,CAAG,EACpB6xB,EAAY5nB,CAAQ,GAAK4nB,EAAY5nB,CAAQ,EAAE,QAAU,MACrDmb,EAAM,MAAM,OAASyM,EAAY5nB,CAAQ,EAAE,QAC3CA,IAER0hB,EAAK,QAAQ1hB,EAAU,CAAC,EACxB4nB,EAAY,OAAO,MAAMA,EAAalG,CAAI,EAC1C,KAAK,YAAY,CACrB,EACJ,EACAgG,EAAY,UAAU,YAAc,UAAY,CAC5C,IAAIE,EAAc,KAAK,QAAQ,YAC/B,GAAKA,EAEL,KAAIG,EAAY,GAChBH,EAAY,QAAQ,SAAUvT,EAAGrd,EAAG,CAChC,GAAIqd,EAGA,IAFA0T,EAAY,GACZ1T,EAAE,IAAMrd,EACDqd,EAAE,YACLA,EAAE,WAAW,IAAMrd,EACnBqd,EAAIA,EAAE,UAGlB,CAAC,EACG0T,IACA,KAAK,QAAQ,YAAc,MACnC,EACAL,EAAY,UAAU,oBAAsB,SAAUrT,EAAG,CAChD,KAAK,QAAQ,cACd,KAAK,QAAQ,YAAc,IAAI,MAAM,KAAK,QAAQ,UAAU,CAAC,GACjE,IAAIhY,EAAM,KAAK,QAAQ,YAAYgY,EAAE,GAAG,EACxC,OAAIhY,IACAgY,EAAE,WAAahY,EACXA,EAAI,IAAMA,EAAI,GAAG,aACjBA,EAAI,GAAG,WAAW,YAAYA,EAAI,EAAE,EACpCA,EAAI,YAAc,KAG1B,KAAK,QAAQ,YAAYgY,EAAE,GAAG,EAAIA,EAC3BA,CACX,EACAqT,EAAY,UAAU,cAAgB,SAAUrT,EAAG,CAG/C,GAFA,KAAK,oBAAoBA,CAAC,EAC1BA,EAAE,QAAU,KAAK,QACb,CAAC,KAAK,OACN,OAAOA,EACX,IAAIvH,EAAW,KAAK,OAAO,SACvBuH,EAAE,MAAQ,CAACA,EAAE,KACbA,EAAE,GAAKrZ,EAAI,cAAc,KAAK,EAC9BqZ,EAAE,GAAG,UAAYA,EAAE,MAEnBA,EAAE,MAAQ,CAACA,EAAE,KACbA,EAAE,GAAKrZ,EAAI,cAAc,KAAK,EAC9BqZ,EAAE,GAAG,YAAcA,EAAE,MAErBA,EAAE,KACFrZ,EAAI,YAAYqZ,EAAE,GAAI,yBAAyB,EAC3CA,EAAE,WACFrZ,EAAI,YAAYqZ,EAAE,GAAIA,EAAE,SAAS,EAErCA,EAAE,GAAG,MAAM,SAAW,WACtBA,EAAE,GAAG,MAAM,OAAS,IACpBvH,EAAS,UAAU,YAAYuH,EAAE,EAAE,EACnCA,EAAE,YAAc,GACXA,EAAE,cACHA,EAAE,GAAG,MAAM,OAAS,KAEpBA,EAAE,aAAe,OACjBA,EAAE,YAAcA,EAAE,GAAG,eAGzBA,EAAE,UAAY,OACdA,EAAE,SAAWA,EAAE,YAAcvH,EAAS,YAAY,YAEtD,IAAIgB,EAAO,KAAK,QAAQ,UAAUuG,EAAE,IAAK,CAAC,EAE1C,GADAA,EAAE,MAAQvG,EACNA,EAAM,CACN,IAAI8Z,EAAc,KAAK,QAAQ,YAC3BvT,EAAE,KAAOvG,EAAK,IAAI,KAAO,CAAC8Z,EAAY9Z,EAAK,MAAM,GAAG,EACpD8Z,EAAY9Z,EAAK,MAAM,GAAG,EAAIuG,EAE9BA,EAAE,OAAS,EACnB,CACA,YAAK,QAAQ,MAAM,aAAc,CAAE,KAAM,CAAE,MAAO,CAAE,IAAKA,EAAE,GAAI,CAAE,CAAE,CAAC,EACpE,KAAK,YAAY,EACjB,KAAK,cAAc,KAAMvH,CAAQ,EACjC,KAAK,gBAAgBuH,CAAC,EACfA,CACX,EACAqT,EAAY,UAAU,iBAAmB,SAAUrT,EAAG,CAKlD,GAJAA,EAAE,YAAc,GAChBA,EAAE,QAAU,KACRA,EAAE,IAAMA,EAAE,GAAG,YACbA,EAAE,GAAG,WAAW,YAAYA,EAAE,EAAE,EAChCA,EAAE,QAAUA,EAAE,OAAO,QACrB,GAAI,CACAA,EAAE,OAAO,QAAQ,CACrB,MACU,CAAE,CAChB,GAAI,KAAK,QAAQ,YAAa,CAC1B,IAAI2T,EAAK,KAAK,QAAQ,YAAY3T,EAAE,GAAG,EACvC,GAAI2T,GAAM3T,EACN,KAAK,QAAQ,YAAYA,EAAE,GAAG,EAAIA,EAAE,WAChCA,EAAE,YACF,KAAK,gBAAgBA,EAAE,UAAU,MAGrC,MAAO2T,GAAI,CACP,GAAIA,EAAG,YAAc3T,EAAG,CACpB2T,EAAG,WAAa3T,EAAE,WAClB,KACJ,CACA2T,EAAKA,EAAG,UACZ,CAER,CACA,KAAK,QAAQ,MAAM,aAAc,CAAE,KAAM,CAAE,MAAO,CAAE,IAAK3T,EAAE,GAAI,CAAE,CAAE,CAAC,EACpE,KAAK,YAAY,CACrB,EACAqT,EAAY,UAAU,gBAAkB,SAAUrnB,EAAK,CAInD,QAHIunB,EAAc,KAAK,QAAQ,YAC3BvT,EAAIuT,GAAeA,EAAYvnB,CAAG,EAClC0hB,EAAO,CAAC,EACL1N,GACH0N,EAAK,KAAK1N,CAAC,EACXA,EAAIA,EAAE,WAEV,OAAO0N,CACX,EACA2F,EAAY,UAAU,gBAAkB,SAAUrT,EAAG,CACjD,KAAK,QAAQ,gBAAgB,KAAKA,CAAC,EACnC,KAAK,QAAU,KAAK,OAAO,SAAS,WAAW,CACnD,EACAqT,EAAY,UAAU,eAAiB,SAAU1rB,EAAG8Q,EAAU,CAC1D,IAAImb,EAAiB,KAAK,QAAQ,gBAC9BnpB,EAASgO,EAAS,YACtB,GAAI,GAACmb,GAAkB,CAACA,EAAe,QAGvC,SADIC,EAAM,IACDlxB,EAAI,EAAGA,EAAIixB,EAAe,OAAQjxB,IAAK,CAC5C,IAAIqd,EAAI4T,EAAejxB,CAAC,EACxB,GAAI,GAACqd,GAAK,CAACA,EAAE,KAETA,EAAE,SAAW,KAAK,QAEtB,IAAI,CAACA,EAAE,YAAa,CAChB,GAAI,KAAK,QAAQ,YAAYA,EAAE,GAAG,GAAKA,EACnC,SACJA,EAAE,YAAc,GAChBvH,EAAS,UAAU,YAAYuH,EAAE,EAAE,CACvC,CACAA,EAAE,EAAIA,EAAE,GAAG,aACNA,EAAE,aACHA,EAAE,EAAIA,EAAE,GAAG,YACXA,EAAE,YAAc,KAAK,KAAKA,EAAE,EAAIvV,EAAO,cAAc,GAEzD,IAAIyjB,EAAWlO,EAAE,EAAIvV,EAAO,WACxBuV,EAAE,YACFkO,GAAY,KAAK,QAAQ,gBAAgBlO,EAAE,GAAG,EAC1CkO,EAAW,IACXA,EAAW,IAEflO,EAAE,UAAYkO,IACdlO,EAAE,SAAWkO,EACTlO,EAAE,IAAM6T,IACRA,EAAM7T,EAAE,MAEpB,CACI6T,GAAO,MACP,KAAK,QAAQ,MAAM,aAAc,CAAE,KAAM,CAAE,MAAO,CAAE,IAAKA,CAAI,CAAE,CAAE,CAAC,EAClE,KAAK,QAAQ,gBAAkB,MAEnC,KAAK,QAAQ,gBAAkB,CAAC,EACpC,EACAR,EAAY,UAAU,cAAgB,SAAU1rB,EAAG8Q,EAAU,CACzD,IAAIhO,EAASgO,EAAS,YAClB8a,EAAc,KAAK,QAAQ,YAC/B,GAAKA,EAIL,SAFIO,EAAQ,KAAK,IAAI,KAAK,SAAUrpB,EAAO,QAAQ,EAC/C/G,EAAO,KAAK,IAAI,KAAK,QAAS+G,EAAO,QAAS8oB,EAAY,MAAM,EAC7DO,EAAQ,GAAK,CAACP,EAAYO,CAAK,GAClCA,IACJ,KAAK,SAAWrpB,EAAO,SACvB,KAAK,QAAUA,EAAO,QACtBgO,EAAS,aAAa,OAAShO,EAC/B,QAAS9H,EAAImxB,EAAOnxB,GAAKe,EAAMf,IAAK,CAChC,IAAIqd,EAAIuT,EAAY5wB,CAAC,EACrB,GAAI,GAACqd,GAAK,CAACA,EAAE,IAEb,IAAIA,EAAE,OAAQ,CACVA,EAAE,GAAG,MAAM,IAAM,MAAQA,EAAE,aAAe,GAAK,KAC/C,QACJ,CACKA,EAAE,cACHA,EAAE,YAAc,GAChBvH,EAAS,UAAU,YAAYuH,EAAE,EAAE,GAEvC,IAAIhN,EAAMyF,EAAS,aAAa,iBAAiB,CAAE,IAAK9V,EAAG,OAAQ,CAAE,EAAG,EAAI,EAAE,IACzEqd,EAAE,YACHhN,GAAOvI,EAAO,WAAa,KAAK,QAAQ,gBAAgBuV,EAAE,GAAG,GACjEA,EAAE,GAAG,MAAM,IAAMhN,EAAMvI,EAAO,OAAS,KACvC,IAAI6I,EAAO0M,EAAE,YAAc,EAAIvH,EAAS,YACnCuH,EAAE,aACH1M,GAAQmF,EAAS,YACrBuH,EAAE,GAAG,MAAM,KAAO1M,EAAO,KACrB0M,EAAE,WAAaA,EAAE,cACjBA,EAAE,GAAG,MAAM,SAAWvV,EAAO,MAAQ,EAAIA,EAAO,QAAU,MAE1DuV,EAAE,WACFA,EAAE,GAAG,MAAM,MAAQvH,EAAS,UAAU,SAAS,EAAI,KAGnDuH,EAAE,GAAG,MAAM,MAAQ,GAE3B,EACJ,EACOqT,CACX,EAAE,EACF10B,EAAQ,YAAc00B,CAEtB,CAAC,EAED,IAAI,OAAO,kBAAkB,CAAC,UAAU,UAAU,QAAQ,EAAG,SAAS5zB,EAASd,EAASC,EAAO,CAAC,aAChG,SAASm1B,EAAgBjN,EAAOkN,EAAW,CACvC,cAAQ,IAAI,iBAAkBlN,CAAK,EAC7B,kBAAoBkN,CAC9B,CACA,SAASC,EAAmBC,EAAUvzB,EAAU,CAC5C,OAAOA,EAAS,KAAO,GAAKA,EAAS,IAAMuzB,EAAS,QAChDvzB,EAAS,QAAU,GAAKA,EAAS,QAAUuzB,EAASvzB,EAAS,GAAG,EAAE,MAC1E,CACA,SAASwzB,EAAcD,EAAUpN,EAAO,CAChCA,EAAM,QAAU,UAAYA,EAAM,QAAU,UAC5CiN,EAAgBjN,EAAO,2CAA2C,EAChEA,EAAM,iBAAiB,OACzBiN,EAAgBjN,EAAO,8BAA8B,GACrD,CAACA,EAAM,OAAS,CAACA,EAAM,MACvBiN,EAAgBjN,EAAO,oCAAoC,EAC/D,IAAI9kB,EAAQ8kB,EAAM,MACbmN,EAAmBC,EAAUpN,EAAM,KAAK,GACzCiN,EAAgBjN,EAAO,2CAA2C,EACtE,IAAI5kB,EAAM4kB,EAAM,IACZA,EAAM,QAAU,UAAY,CAACmN,EAAmBC,EAAUhyB,CAAG,GAC7D6xB,EAAgBjN,EAAO,2DAA2D,EACtF,IAAIsN,EAAelyB,EAAI,IAAMF,EAAM,IAC/BqyB,EAAyBnyB,EAAI,QAAUkyB,GAAgB,EAAIpyB,EAAM,OAAS,IAC1EoyB,GAAgBtN,EAAM,MAAM,OAAS,GAAKA,EAAM,MAAMsN,CAAY,EAAE,QAAUC,IAC9EN,EAAgBjN,EAAO,oCAAoC,CACnE,CACAnoB,EAAQ,WAAa,SAAUu1B,EAAUpN,EAAOwN,EAAe,CAC3D,IAAItoB,EAAM8a,EAAM,MAAM,IAClBlb,EAAckb,EAAM,MAAM,OAC1BrjB,EAAOywB,EAASloB,CAAG,GAAK,GAC5B,OAAQ8a,EAAM,OAAQ,CAClB,IAAK,SACD,IAAIpU,EAAQoU,EAAM,MAClB,GAAIpU,EAAM,SAAW,EACjBwhB,EAASloB,CAAG,EAAIvI,EAAK,UAAU,EAAGmI,CAAW,EAAIkb,EAAM,MAAM,CAAC,EAAIrjB,EAAK,UAAUmI,CAAW,MAE3F,CACD,IAAIyhB,EAAO,CAACrhB,EAAK,CAAC,EAAE,OAAO8a,EAAM,KAAK,EACtCoN,EAAS,OAAO,MAAMA,EAAU7G,CAAI,EACpC6G,EAASloB,CAAG,EAAIvI,EAAK,UAAU,EAAGmI,CAAW,EAAIsoB,EAASloB,CAAG,EAC7DkoB,EAASloB,EAAM8a,EAAM,MAAM,OAAS,CAAC,GAAKrjB,EAAK,UAAUmI,CAAW,CACxE,CACA,MACJ,IAAK,SACD,IAAIE,EAAYgb,EAAM,IAAI,OACtBjb,EAASib,EAAM,IAAI,IACnB9a,IAAQH,EACRqoB,EAASloB,CAAG,EAAIvI,EAAK,UAAU,EAAGmI,CAAW,EAAInI,EAAK,UAAUqI,CAAS,EAGzEooB,EAAS,OAAOloB,EAAKH,EAASG,EAAM,EAAGvI,EAAK,UAAU,EAAGmI,CAAW,EAAIsoB,EAASroB,CAAM,EAAE,UAAUC,CAAS,CAAC,EAEjH,KACR,CACJ,CAEA,CAAC,EAED,IAAI,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,cAAc,uBAAuB,EAAG,SAASrM,EAASd,EAASC,EAAO,CAAC,aACjI,IAAI0J,EAAM7I,EAAQ,WAAW,EACzB8H,EAAe9H,EAAQ,qBAAqB,EAAE,aAC9C80B,EAAwB,UAAY,CACpC,SAASA,EAAO3vB,EAAKoH,EAAKC,EAAQ,CAC9B,KAAK,UAAY,KAAK,SAAS,KAAK,IAAI,EACxC,KAAK,OAAOrH,CAAG,EACX,OAAOoH,GAAO,SACd,KAAK,YAAYA,EAAI,IAAKA,EAAI,MAAM,EAEpC,KAAK,YAAYA,EAAKC,CAAM,CACpC,CACA,OAAAsoB,EAAO,UAAU,YAAc,UAAY,CACvC,OAAO,KAAK,wBAAwB,KAAK,IAAK,KAAK,MAAM,CAC7D,EACAA,EAAO,UAAU,YAAc,UAAY,CACvC,OAAO,KAAK,QAChB,EACAA,EAAO,UAAU,SAAW,SAAUzN,EAAO,CACzC,GAAI,EAAAA,EAAM,MAAM,KAAOA,EAAM,IAAI,KAAOA,EAAM,MAAM,KAAO,KAAK,MAE5D,EAAAA,EAAM,MAAM,IAAM,KAAK,KAE3B,KAAI0N,EAAQC,EAAqB3N,EAAO,CAAE,IAAK,KAAK,IAAK,OAAQ,KAAK,MAAO,EAAG,KAAK,YAAY,EACjG,KAAK,YAAY0N,EAAM,IAAKA,EAAM,OAAQ,EAAI,EAClD,EACAD,EAAO,UAAU,YAAc,SAAUvoB,EAAKC,EAAQyoB,EAAQ,CAC1D,IAAIxgB,EAUJ,GATIwgB,EACAxgB,EAAM,CACF,IAAKlI,EACL,OAAQC,CACZ,EAGAiI,EAAM,KAAK,wBAAwBlI,EAAKC,CAAM,EAE9C,OAAK,KAAOiI,EAAI,KAAO,KAAK,QAAUA,EAAI,QAE9C,KAAIlM,EAAM,CACN,IAAK,KAAK,IACV,OAAQ,KAAK,MACjB,EACA,KAAK,IAAMkM,EAAI,IACf,KAAK,OAASA,EAAI,OAClB,KAAK,QAAQ,SAAU,CACnB,IAAKlM,EACL,MAAOkM,CACX,CAAC,EACL,EACAqgB,EAAO,UAAU,OAAS,UAAY,CAClC,KAAK,SAAS,IAAI,SAAU,KAAK,SAAS,CAC9C,EACAA,EAAO,UAAU,OAAS,SAAU3vB,EAAK,CACrC,KAAK,SAAWA,GAAO,KAAK,SAC5B,KAAK,SAAS,GAAG,SAAU,KAAK,SAAS,CAC7C,EACA2vB,EAAO,UAAU,wBAA0B,SAAUvoB,EAAKC,EAAQ,CAC9D,IAAIiI,EAAM,CAAC,EACX,OAAIlI,GAAO,KAAK,SAAS,UAAU,GAC/BkI,EAAI,IAAM,KAAK,IAAI,EAAG,KAAK,SAAS,UAAU,EAAI,CAAC,EACnDA,EAAI,OAAS,KAAK,SAAS,QAAQA,EAAI,GAAG,EAAE,QAEvClI,EAAM,GACXkI,EAAI,IAAM,EACVA,EAAI,OAAS,IAGbA,EAAI,IAAMlI,EACVkI,EAAI,OAAS,KAAK,IAAI,KAAK,SAAS,QAAQA,EAAI,GAAG,EAAE,OAAQ,KAAK,IAAI,EAAGjI,CAAM,CAAC,GAEhFA,EAAS,IACTiI,EAAI,OAAS,GACVA,CACX,EACOqgB,CACX,EAAE,EACFA,EAAO,UAAU,aAAe,GAChCjsB,EAAI,UAAUisB,EAAO,UAAWhtB,CAAY,EAC5C,SAASotB,EAAeC,EAAQC,EAAQC,EAAoB,CACxD,IAAIC,EAAcD,EAAqBF,EAAO,QAAUC,EAAO,OAASD,EAAO,OAASC,EAAO,OAC/F,OAAQD,EAAO,IAAMC,EAAO,KAASD,EAAO,KAAOC,EAAO,KAAOE,CACrE,CACA,SAASN,EAAqB3N,EAAO0N,EAAOQ,EAAa,CACrD,IAAIC,EAAgBnO,EAAM,QAAU,SAChCoO,GAAiBD,EAAgB,EAAI,KAAOnO,EAAM,IAAI,IAAMA,EAAM,MAAM,KACxEqO,GAAiBF,EAAgB,EAAI,KAAOnO,EAAM,IAAI,OAASA,EAAM,MAAM,QAC3EsO,EAAatO,EAAM,MACnBuO,EAAWJ,EAAgBG,EAAatO,EAAM,IAClD,OAAI6N,EAAeH,EAAOY,EAAYJ,CAAW,EACtC,CACH,IAAKR,EAAM,IACX,OAAQA,EAAM,MAClB,EAEAG,EAAeU,EAAUb,EAAO,CAACQ,CAAW,EACrC,CACH,IAAKR,EAAM,IAAMU,EACjB,OAAQV,EAAM,QAAUA,EAAM,KAAOa,EAAS,IAAMF,EAAgB,EACxE,EAEG,CACH,IAAKC,EAAW,IAChB,OAAQA,EAAW,MACvB,CACJ,CACAz2B,EAAQ,OAAS41B,CAEjB,CAAC,EAED,IAAI,OAAO,eAAe,CAAC,UAAU,UAAU,SAAS,cAAc,kBAAkB,wBAAwB,YAAY,YAAY,EAAG,SAAS90B,EAASd,EAASC,EAAO,CAAC,aAC9K,IAAI0J,EAAM7I,EAAQ,WAAW,EACzB61B,EAAa71B,EAAQ,eAAe,EAAE,WACtC8H,EAAe9H,EAAQ,qBAAqB,EAAE,aAC9CiM,EAAQjM,EAAQ,SAAS,EAAE,MAC3B80B,EAAS90B,EAAQ,UAAU,EAAE,OAC7B81B,EAA0B,UAAY,CACtC,SAASA,EAASC,EAAa,CAC3B,KAAK,OAAS,CAAC,EAAE,EACbA,EAAY,SAAW,EACvB,KAAK,OAAS,CAAC,EAAE,EAEZ,MAAM,QAAQA,CAAW,EAC9B,KAAK,kBAAkB,CAAE,IAAK,EAAG,OAAQ,CAAE,EAAGA,CAAW,EAGzD,KAAK,OAAO,CAAE,IAAK,EAAG,OAAQ,CAAE,EAAGA,CAAW,CAEtD,CACA,OAAAD,EAAS,UAAU,SAAW,SAAUrkB,EAAM,CAC1C,IAAIxP,EAAM,KAAK,UAAU,EAAI,EAC7B,KAAK,OAAO,IAAIgK,EAAM,EAAG,EAAGhK,EAAK,KAAK,QAAQA,CAAG,EAAE,MAAM,CAAC,EAC1D,KAAK,OAAO,CAAE,IAAK,EAAG,OAAQ,CAAE,EAAGwP,GAAQ,EAAE,CACjD,EACAqkB,EAAS,UAAU,SAAW,UAAY,CACtC,OAAO,KAAK,YAAY,EAAE,KAAK,KAAK,oBAAoB,CAAC,CAC7D,EACAA,EAAS,UAAU,aAAe,SAAUvpB,EAAKC,EAAQ,CACrD,OAAO,IAAIsoB,EAAO,KAAMvoB,EAAKC,CAAM,CACvC,EACAspB,EAAS,UAAU,eAAiB,SAAUrkB,EAAM,CAChD,IAAIoa,EAAQpa,EAAK,MAAM,mBAAmB,EAC1C,KAAK,aAAeoa,EAAQA,EAAM,CAAC,EAAI;AAAA,EACvC,KAAK,QAAQ,mBAAmB,CACpC,EACAiK,EAAS,UAAU,oBAAsB,UAAY,CACjD,OAAQ,KAAK,aAAc,CACvB,IAAK,UACD,MAAO;AAAA,EACX,IAAK,OACD,MAAO;AAAA,EACX,QACI,OAAO,KAAK,cAAgB;AAAA,CACpC,CACJ,EACAA,EAAS,UAAU,eAAiB,SAAUE,EAAa,CACnD,KAAK,eAAiBA,IAE1B,KAAK,aAAeA,EACpB,KAAK,QAAQ,mBAAmB,EACpC,EACAF,EAAS,UAAU,eAAiB,UAAY,CAC5C,OAAO,KAAK,YAChB,EACAA,EAAS,UAAU,UAAY,SAAUrkB,EAAM,CAC3C,OAAQA,GAAQ;AAAA,GAAUA,GAAQ,MAAQA,GAAQ;AAAA,CACtD,EACAqkB,EAAS,UAAU,QAAU,SAAUvpB,EAAK,CACxC,OAAO,KAAK,OAAOA,CAAG,GAAK,EAC/B,EACAupB,EAAS,UAAU,SAAW,SAAUnpB,EAAUC,EAAS,CACvD,OAAO,KAAK,OAAO,MAAMD,EAAUC,EAAU,CAAC,CAClD,EACAkpB,EAAS,UAAU,YAAc,UAAY,CACzC,OAAO,KAAK,SAAS,EAAG,KAAK,UAAU,CAAC,CAC5C,EACAA,EAAS,UAAU,UAAY,UAAY,CACvC,OAAO,KAAK,OAAO,MACvB,EACAA,EAAS,UAAU,aAAe,SAAUxpB,EAAO,CAC/C,OAAO,KAAK,iBAAiBA,CAAK,EAAE,KAAK,KAAK,oBAAoB,CAAC,CACvE,EACAwpB,EAAS,UAAU,iBAAmB,SAAUxpB,EAAO,CACnD,IAAI2G,EACJ,GAAI3G,EAAM,MAAM,MAAQA,EAAM,IAAI,IAC9B2G,EAAQ,CAAC,KAAK,QAAQ3G,EAAM,MAAM,GAAG,EAAE,UAAUA,EAAM,MAAM,OAAQA,EAAM,IAAI,MAAM,CAAC,MAErF,CACD2G,EAAQ,KAAK,SAAS3G,EAAM,MAAM,IAAKA,EAAM,IAAI,GAAG,EACpD2G,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAK,IAAI,UAAU3G,EAAM,MAAM,MAAM,EACxD,IAAIxM,EAAImT,EAAM,OAAS,EACnB3G,EAAM,IAAI,IAAMA,EAAM,MAAM,KAAOxM,IACnCmT,EAAMnT,CAAC,EAAImT,EAAMnT,CAAC,EAAE,UAAU,EAAGwM,EAAM,IAAI,MAAM,EACzD,CACA,OAAO2G,CACX,EACA6iB,EAAS,UAAU,YAAc,SAAUvpB,EAAK0G,EAAO,CACnD,eAAQ,KAAK,oFAAoF,EAC1F,KAAK,gBAAgB1G,EAAK0G,CAAK,CAC1C,EACA6iB,EAAS,UAAU,YAAc,SAAUnpB,EAAUC,EAAS,CAC1D,eAAQ,KAAK,oFAAoF,EAC1F,KAAK,gBAAgBD,EAAUC,CAAO,CACjD,EACAkpB,EAAS,UAAU,cAAgB,SAAU50B,EAAU,CACnD,eAAQ,KAAK,iGAAiG,EACvG,KAAK,kBAAkBA,EAAU,CAAC,GAAI,EAAE,CAAC,CACpD,EACA40B,EAAS,UAAU,OAAS,SAAU50B,EAAUuQ,EAAM,CAClD,OAAI,KAAK,UAAU,GAAK,GACpB,KAAK,eAAeA,CAAI,EACrB,KAAK,kBAAkBvQ,EAAU,KAAK,OAAOuQ,CAAI,CAAC,CAC7D,EACAqkB,EAAS,UAAU,aAAe,SAAU50B,EAAUuQ,EAAM,CACxD,IAAIlP,EAAQ,KAAK,WAAWrB,EAAS,IAAKA,EAAS,MAAM,EACrDuB,EAAM,KAAK,IAAIvB,EAAS,IAAKA,EAAS,OAASuQ,EAAK,MAAM,EAC9D,YAAK,WAAW,CACZ,MAAOlP,EACP,IAAKE,EACL,OAAQ,SACR,MAAO,CAACgP,CAAI,CAChB,EAAG,EAAI,EACA,KAAK,SAAShP,CAAG,CAC5B,EACAqzB,EAAS,UAAU,WAAa,SAAUvpB,EAAKC,EAAQ,CACnD,IAAIypB,EAAS,KAAK,UAAU,EACxB1pB,IAAQ,OACRA,EAAM0pB,EAED1pB,EAAM,EACXA,EAAM,EAEDA,GAAO0pB,IACZ1pB,EAAM0pB,EAAS,EACfzpB,EAAS,QAEb,IAAIxI,EAAO,KAAK,QAAQuI,CAAG,EAC3B,OAAIC,GAAU,OACVA,EAASxI,EAAK,QAClBwI,EAAS,KAAK,IAAI,KAAK,IAAIA,EAAQ,CAAC,EAAGxI,EAAK,MAAM,EAC3C,CAAE,IAAKuI,EAAK,OAAQC,CAAO,CACtC,EACAspB,EAAS,UAAU,SAAW,SAAUrhB,EAAK,CACzC,MAAO,CAAE,IAAKA,EAAI,IAAK,OAAQA,EAAI,MAAO,CAC9C,EACAqhB,EAAS,UAAU,IAAM,SAAUvpB,EAAKC,EAAQ,CAC5C,MAAO,CAAE,IAAKD,EAAK,OAAQC,CAAO,CACtC,EACAspB,EAAS,UAAU,cAAgB,SAAU50B,EAAU,CACnD,IAAI+0B,EAAS,KAAK,UAAU,EAC5B,OAAI/0B,EAAS,KAAO+0B,GAChB/0B,EAAS,IAAM,KAAK,IAAI,EAAG+0B,EAAS,CAAC,EACrC/0B,EAAS,OAAS,KAAK,QAAQ+0B,EAAS,CAAC,EAAE,SAG3C/0B,EAAS,IAAM,KAAK,IAAI,EAAGA,EAAS,GAAG,EACvCA,EAAS,OAAS,KAAK,IAAI,KAAK,IAAIA,EAAS,OAAQ,CAAC,EAAG,KAAK,QAAQA,EAAS,GAAG,EAAE,MAAM,GAEvFA,CACX,EACA40B,EAAS,UAAU,gBAAkB,SAAUvpB,EAAK0G,EAAO,CACvD1G,EAAM,KAAK,IAAI,KAAK,IAAIA,EAAK,CAAC,EAAG,KAAK,UAAU,CAAC,EACjD,IAAIC,EAAS,EACTD,EAAM,KAAK,UAAU,GACrB0G,EAAQA,EAAM,OAAO,CAAC,EAAE,CAAC,EACzBzG,EAAS,IAGTyG,EAAQ,CAAC,EAAE,EAAE,OAAOA,CAAK,EACzB1G,IACAC,EAAS,KAAK,OAAOD,CAAG,EAAE,QAE9B,KAAK,kBAAkB,CAAE,IAAKA,EAAK,OAAQC,CAAO,EAAGyG,CAAK,CAC9D,EACA6iB,EAAS,UAAU,kBAAoB,SAAU50B,EAAU+R,EAAO,CAC9D,IAAI1Q,EAAQ,KAAK,WAAWrB,EAAS,IAAKA,EAAS,MAAM,EACrDuB,EAAM,CACN,IAAKF,EAAM,IAAM0Q,EAAM,OAAS,EAChC,QAASA,EAAM,QAAU,EAAI1Q,EAAM,OAAS,GAAK0Q,EAAMA,EAAM,OAAS,CAAC,EAAE,MAC7E,EACA,YAAK,WAAW,CACZ,MAAO1Q,EACP,IAAKE,EACL,OAAQ,SACR,MAAOwQ,CACX,CAAC,EACM,KAAK,SAASxQ,CAAG,CAC5B,EACAqzB,EAAS,UAAU,OAAS,SAAUxpB,EAAO,CACzC,IAAI/J,EAAQ,KAAK,WAAW+J,EAAM,MAAM,IAAKA,EAAM,MAAM,MAAM,EAC3D7J,EAAM,KAAK,WAAW6J,EAAM,IAAI,IAAKA,EAAM,IAAI,MAAM,EACzD,YAAK,WAAW,CACZ,MAAO/J,EACP,IAAKE,EACL,OAAQ,SACR,MAAO,KAAK,iBAAiB,CAAE,MAAOF,EAAO,IAAKE,CAAI,CAAC,CAC3D,CAAC,EACM,KAAK,SAASF,CAAK,CAC9B,EACAuzB,EAAS,UAAU,aAAe,SAAUvpB,EAAKJ,EAAaE,EAAW,CACrE,IAAI9J,EAAQ,KAAK,WAAWgK,EAAKJ,CAAW,EACxC1J,EAAM,KAAK,WAAW8J,EAAKF,CAAS,EACxC,YAAK,WAAW,CACZ,MAAO9J,EACP,IAAKE,EACL,OAAQ,SACR,MAAO,KAAK,iBAAiB,CAAE,MAAOF,EAAO,IAAKE,CAAI,CAAC,CAC3D,EAAG,EAAI,EACA,KAAK,SAASF,CAAK,CAC9B,EACAuzB,EAAS,UAAU,gBAAkB,SAAUnpB,EAAUC,EAAS,CAC9DD,EAAW,KAAK,IAAI,KAAK,IAAI,EAAGA,CAAQ,EAAG,KAAK,UAAU,EAAI,CAAC,EAC/DC,EAAU,KAAK,IAAI,KAAK,IAAI,EAAGA,CAAO,EAAG,KAAK,UAAU,EAAI,CAAC,EAC7D,IAAIspB,EAAqBtpB,GAAW,KAAK,UAAU,EAAI,GAAKD,EAAW,EACnEwpB,EAAoBvpB,EAAU,KAAK,UAAU,EAAI,EACjDV,EAAYgqB,EAAqBvpB,EAAW,EAAIA,EAChD6b,EAAY0N,EAAqB,KAAK,QAAQhqB,CAAQ,EAAE,OAAS,EACjEE,EAAU+pB,EAAoBvpB,EAAU,EAAIA,EAC5C6b,EAAU0N,EAAoB,EAAI,KAAK,QAAQ/pB,CAAM,EAAE,OACvDE,EAAQ,IAAIL,EAAMC,EAAUsc,EAAUpc,EAAQqc,CAAM,EACpD2N,EAAe,KAAK,OAAO,MAAMzpB,EAAUC,EAAU,CAAC,EAC1D,YAAK,WAAW,CACZ,MAAON,EAAM,MACb,IAAKA,EAAM,IACX,OAAQ,SACR,MAAO,KAAK,iBAAiBA,CAAK,CACtC,CAAC,EACM8pB,CACX,EACAN,EAAS,UAAU,cAAgB,SAAUvpB,EAAK,CAC1CA,EAAM,KAAK,UAAU,EAAI,GAAKA,GAAO,GACrC,KAAK,WAAW,CACZ,MAAO,KAAK,IAAIA,EAAK,KAAK,QAAQA,CAAG,EAAE,MAAM,EAC7C,IAAK,KAAK,IAAIA,EAAM,EAAG,CAAC,EACxB,OAAQ,SACR,MAAO,CAAC,GAAI,EAAE,CAClB,CAAC,CAET,EACAupB,EAAS,UAAU,QAAU,SAAUxpB,EAAOmF,EAAM,CAGhD,GAFMnF,aAAiBL,IACnBK,EAAQL,EAAM,WAAWK,EAAM,MAAOA,EAAM,GAAG,GAC/CmF,EAAK,SAAW,GAAKnF,EAAM,QAAQ,EACnC,OAAOA,EAAM,MACjB,GAAImF,GAAQ,KAAK,aAAanF,CAAK,EAC/B,OAAOA,EAAM,IACjB,KAAK,OAAOA,CAAK,EACjB,IAAI7J,EACJ,OAAIgP,EACAhP,EAAM,KAAK,OAAO6J,EAAM,MAAOmF,CAAI,EAGnChP,EAAM6J,EAAM,MAET7J,CACX,EACAqzB,EAAS,UAAU,YAAc,SAAUO,EAAQ,CAC/C,QAASnzB,EAAI,EAAGA,EAAImzB,EAAO,OAAQnzB,IAC/B,KAAK,WAAWmzB,EAAOnzB,CAAC,CAAC,CAEjC,EACA4yB,EAAS,UAAU,aAAe,SAAUO,EAAQ,CAChD,QAASnzB,EAAImzB,EAAO,OAAS,EAAGnzB,GAAK,EAAGA,IACpC,KAAK,YAAYmzB,EAAOnzB,CAAC,CAAC,CAElC,EACA4yB,EAAS,UAAU,WAAa,SAAUzO,EAAOwN,EAAe,CAC5D,IAAIyB,EAAWjP,EAAM,QAAU,UAC3BiP,EAAWjP,EAAM,MAAM,QAAU,GAAK,CAACA,EAAM,MAAM,CAAC,EAClD,CAACpb,EAAM,cAAcob,EAAM,MAAOA,EAAM,GAAG,KAG7CiP,GAAYjP,EAAM,MAAM,OAAS,IACjC,KAAK,yBAAyBA,EAAO,GAAK,GAG1CwO,EAAW,KAAK,OAAQxO,EAAOwN,CAAa,EAC5C,KAAK,QAAQ,SAAUxN,CAAK,GAEpC,EACAyO,EAAS,UAAU,gBAAkB,SAAUzO,EAAO,CAClD,IAAIkP,EAAY,KAAK,OAAO,QACxBlP,EAAM,QAAU,UAAYA,EAAM,MAAM,IAAMkP,GAAalP,EAAM,IAAI,IAAMkP,GACxElP,EAAM,QAAU,UAAYA,EAAM,MAAM,KAAOkP,IAClD,KAAK,WAAWlP,CAAK,CAE7B,EACAyO,EAAS,UAAU,yBAA2B,SAAUzO,EAAOmP,EAAK,CAKhE,QAJIvjB,EAAQoU,EAAM,MACdvnB,EAAImT,EAAM,OAASujB,EAAM,EACzBjqB,EAAM8a,EAAM,MAAM,IAClB7a,EAAS6a,EAAM,MAAM,OAChBoP,EAAO,EAAGC,EAAK,EAAGD,EAAO32B,EAAG22B,EAAOC,EAAI,CAC5CA,GAAMF,EAAM,EACZ,IAAIG,EAAQ1jB,EAAM,MAAMwjB,EAAMC,CAAE,EAChCC,EAAM,KAAK,EAAE,EACb,KAAK,WAAW,CACZ,MAAO,KAAK,IAAIpqB,EAAMkqB,EAAMjqB,CAAM,EAClC,IAAK,KAAK,IAAID,EAAMmqB,EAAIlqB,EAAS,CAAC,EAClC,OAAQ6a,EAAM,OACd,MAAOsP,CACX,EAAG,EAAI,CACX,CACAtP,EAAM,MAAQpU,EAAM,MAAMwjB,CAAI,EAC9BpP,EAAM,MAAM,IAAM9a,EAAMkqB,EACxBpP,EAAM,MAAM,OAAS7a,EACrB,KAAK,WAAW6a,EAAO,EAAI,CAC/B,EACAyO,EAAS,UAAU,YAAc,SAAUzO,EAAO,CAC9C,KAAK,gBAAgB,CACjB,MAAO,KAAK,SAASA,EAAM,KAAK,EAChC,IAAK,KAAK,SAASA,EAAM,GAAG,EAC5B,OAASA,EAAM,QAAU,SAAW,SAAW,SAC/C,MAAOA,EAAM,MAAM,MAAM,CAC7B,CAAC,CACL,EACAyO,EAAS,UAAU,gBAAkB,SAAUn0B,EAAOuK,EAAU,CAG5D,QAFI+G,EAAQ,KAAK,QAAU,KAAK,YAAY,EACxC2jB,EAAgB,KAAK,oBAAoB,EAAE,OACtC1zB,EAAIgJ,GAAY,EAAGpM,EAAImT,EAAM,OAAQ/P,EAAIpD,EAAGoD,IAEjD,GADAvB,GAASsR,EAAM/P,CAAC,EAAE,OAAS0zB,EACvBj1B,EAAQ,EACR,MAAO,CAAE,IAAKuB,EAAG,OAAQvB,EAAQsR,EAAM/P,CAAC,EAAE,OAAS0zB,CAAc,EAEzE,MAAO,CAAE,IAAK92B,EAAI,EAAG,OAAQ6B,EAAQsR,EAAMnT,EAAI,CAAC,EAAE,OAAS82B,CAAc,CAC7E,EACAd,EAAS,UAAU,gBAAkB,SAAUrhB,EAAKvI,EAAU,CAK1D,QAJI+G,EAAQ,KAAK,QAAU,KAAK,YAAY,EACxC2jB,EAAgB,KAAK,oBAAoB,EAAE,OAC3Cj1B,EAAQ,EACR4K,EAAM,KAAK,IAAIkI,EAAI,IAAKxB,EAAM,MAAM,EAC/B/P,EAAIgJ,GAAY,EAAGhJ,EAAIqJ,EAAK,EAAErJ,EACnCvB,GAASsR,EAAM/P,CAAC,EAAE,OAAS0zB,EAC/B,OAAOj1B,EAAQ8S,EAAI,MACvB,EACAqhB,EAAS,UAAU,OAAS,SAAUrkB,EAAM,CACxC,OAAOA,EAAK,MAAM,YAAY,CAClC,EACOqkB,CACX,EAAE,EACFA,EAAS,UAAU,aAAe,GAClCA,EAAS,UAAU,aAAe,OAClCjtB,EAAI,UAAUitB,EAAS,UAAWhuB,CAAY,EAC9C5I,EAAQ,SAAW42B,CAEnB,CAAC,EAED,IAAI,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,cAAc,uBAAuB,EAAG,SAAS91B,EAASd,EAASC,EAAO,CAAC,aAC/I,IAAI0J,EAAM7I,EAAQ,WAAW,EACzB8H,EAAe9H,EAAQ,qBAAqB,EAAE,aAC9C62B,EAAqC,UAAY,CACjD,SAASA,EAAoBC,EAAWjqB,EAAS,CAC7C,KAAK,QAAU,GACf,KAAK,MAAQ,CAAC,EACd,KAAK,OAAS,CAAC,EACf,KAAK,YAAc,EACnB,KAAK,UAAYiqB,EACjB,IAAIva,EAAO,KACX,KAAK,QAAU,UAAY,CACvB,GAAKA,EAAK,QAQV,SALIwa,EAAc,IAAI,KAClBC,EAAcza,EAAK,YACnB0a,EAAU,GACV9xB,EAAMoX,EAAK,IACX2a,EAAYF,EACTza,EAAK,MAAMya,CAAW,GACzBA,IACJ,IAAI/0B,EAAMkD,EAAI,UAAU,EACpBgyB,EAAiB,EAErB,IADA5a,EAAK,QAAU,GACRya,EAAc/0B,GAAK,CACtBsa,EAAK,aAAaya,CAAW,EAC7BC,EAAUD,EACV,GACIA,UACKza,EAAK,MAAMya,CAAW,GAE/B,GADAG,IACKA,EAAiB,IAAM,GAAO,IAAI,KAASJ,EAAe,GAAI,CAC/Dxa,EAAK,QAAU,WAAWA,EAAK,QAAS,EAAE,EAC1C,KACJ,CACJ,CACAA,EAAK,YAAcya,EACfC,GAAW,KACXA,EAAUD,GACVE,GAAaD,GACb1a,EAAK,gBAAgB2a,EAAWD,CAAO,EAC/C,CACJ,CACA,OAAAJ,EAAoB,UAAU,aAAe,SAAUC,EAAW,CAC9D,KAAK,UAAYA,EACjB,KAAK,MAAQ,CAAC,EACd,KAAK,OAAS,CAAC,EACf,KAAK,MAAM,CAAC,CAChB,EACAD,EAAoB,UAAU,YAAc,SAAU1xB,EAAK,CACvD,KAAK,IAAMA,EACX,KAAK,MAAQ,CAAC,EACd,KAAK,OAAS,CAAC,EACf,KAAK,KAAK,CACd,EACA0xB,EAAoB,UAAU,gBAAkB,SAAUlqB,EAAUC,EAAS,CACzE,IAAIjE,EAAO,CACP,MAAOgE,EACP,KAAMC,CACV,EACA,KAAK,QAAQ,SAAU,CAAE,KAAMjE,CAAK,CAAC,CACzC,EACAkuB,EAAoB,UAAU,MAAQ,SAAU3qB,EAAU,CACtD,KAAK,YAAc,KAAK,IAAIA,GAAY,EAAG,KAAK,YAAa,KAAK,IAAI,UAAU,CAAC,EACjF,KAAK,MAAM,OAAO,KAAK,YAAa,KAAK,MAAM,MAAM,EACrD,KAAK,OAAO,OAAO,KAAK,YAAa,KAAK,OAAO,MAAM,EACvD,KAAK,KAAK,EACV,KAAK,QAAU,WAAW,KAAK,QAAS,GAAG,CAC/C,EACA2qB,EAAoB,UAAU,cAAgB,UAAY,CACjD,KAAK,UACN,KAAK,QAAU,WAAW,KAAK,QAAS,GAAG,EACnD,EACAA,EAAoB,UAAU,gBAAkB,SAAUxP,EAAO,CAC7D,IAAInb,EAAWmb,EAAM,MAAM,IACvBplB,EAAMolB,EAAM,IAAI,IAAMnb,EAC1B,GAAIjK,IAAQ,EACR,KAAK,MAAMiK,CAAQ,EAAI,aAElBmb,EAAM,QAAU,SACrB,KAAK,MAAM,OAAOnb,EAAUjK,EAAM,EAAG,IAAI,EACzC,KAAK,OAAO,OAAOiK,EAAUjK,EAAM,EAAG,IAAI,MAEzC,CACD,IAAI2rB,EAAO,MAAM3rB,EAAM,CAAC,EACxB2rB,EAAK,QAAQ1hB,EAAU,CAAC,EACxB,KAAK,MAAM,OAAO,MAAM,KAAK,MAAO0hB,CAAI,EACxC,KAAK,OAAO,OAAO,MAAM,KAAK,OAAQA,CAAI,CAC9C,CACA,KAAK,YAAc,KAAK,IAAI1hB,EAAU,KAAK,YAAa,KAAK,IAAI,UAAU,CAAC,EAC5E,KAAK,KAAK,CACd,EACA2qB,EAAoB,UAAU,KAAO,UAAY,CACzC,KAAK,SACL,aAAa,KAAK,OAAO,EAC7B,KAAK,QAAU,EACnB,EACAA,EAAoB,UAAU,UAAY,SAAUtqB,EAAK,CACrD,OAAO,KAAK,MAAMA,CAAG,GAAK,KAAK,aAAaA,CAAG,CACnD,EACAsqB,EAAoB,UAAU,SAAW,SAAUtqB,EAAK,CACpD,OAAI,KAAK,aAAeA,GACpB,KAAK,aAAaA,CAAG,EAClB,KAAK,OAAOA,CAAG,GAAK,OAC/B,EACAsqB,EAAoB,UAAU,aAAe,SAAUtqB,EAAK,CACxD,IAAIvI,EAAO,KAAK,IAAI,QAAQuI,CAAG,EAC3BqV,EAAQ,KAAK,OAAOrV,EAAM,CAAC,EAC3B5D,EAAO,KAAK,UAAU,cAAc3E,EAAM4d,EAAOrV,CAAG,EACxD,OAAI,KAAK,OAAOA,CAAG,EAAI,IAAO5D,EAAK,MAAQ,IACvC,KAAK,OAAO4D,CAAG,EAAI5D,EAAK,MACxB,KAAK,MAAM4D,EAAM,CAAC,EAAI,KAClB,KAAK,YAAcA,EAAM,IACzB,KAAK,YAAcA,EAAM,IAExB,KAAK,aAAeA,IACzB,KAAK,YAAcA,EAAM,GAEtB,KAAK,MAAMA,CAAG,EAAI5D,EAAK,MAClC,EACAkuB,EAAoB,UAAU,QAAU,UAAY,CAChD,KAAK,QAAU,GACf,KAAK,MAAQ,CAAC,EACd,KAAK,OAAS,CAAC,EACf,KAAK,YAAc,EACnB,KAAK,mBAAmB,CAC5B,EACOA,CACX,EAAE,EACFhuB,EAAI,UAAUguB,EAAoB,UAAW/uB,CAAY,EACzD5I,EAAQ,oBAAsB23B,CAE9B,CAAC,EAED,IAAI,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,eAAe,WAAW,EAAG,SAAS72B,EAASd,EAASC,EAAO,CAAC,aAChI,IAAI2K,EAAO9J,EAAQ,YAAY,EAC3BiM,EAAQjM,EAAQ,SAAS,EAAE,MAC3Bo3B,EAAiC,UAAY,CAC7C,SAASA,EAAgB9zB,EAAQ+zB,EAAOnpB,EAAM,CACtCA,IAAS,SAAUA,EAAO,QAC9B,KAAK,UAAU5K,CAAM,EACrB,KAAK,MAAQ+zB,EACb,KAAK,KAAOnpB,EACZ,KAAK,OAAS,CAClB,CACA,OAAAkpB,EAAgB,UAAU,UAAY,SAAU9zB,EAAQ,CAChD,KAAK,OAAS,IAAMA,EAAS,KAEjC,KAAK,OAASA,EACd,KAAK,MAAQ,CAAC,EAClB,EACA8zB,EAAgB,UAAU,OAAS,SAAUngB,EAAMqgB,EAAazqB,EAAS7B,EAAQ,CAC7E,GAAK,KAAK,OAOV,SALIzI,EAAQyI,EAAO,SACfvI,EAAMuI,EAAO,QACbusB,EAAuB,CAAC,EACxBC,EAAU3qB,EAAQ,SAAWA,EAAQ,QAAQ,QAC7C4qB,EAAWD,GAAWA,EAAQ,mBAAmB3qB,EAAQ,QAAQ,qBAAqB,CAAC,EAClF3J,EAAIX,EAAOW,GAAKT,EAAKS,IAAK,CAC/B,IAAIw0B,EAAS,KAAK,MAAMx0B,CAAC,EACzB,GAAIw0B,GAAU,MAAQ7qB,EAAQ,SAAS,EAAE,QAAU,KAAK,OAAQ,CAC5D,GAAI4qB,EAAU,CACVC,EAAS,CAAC,EACV,IAAI7L,EAAQ2L,EAAQ,kBAAkB3qB,EAAS,KAAK,OAAQ3J,EAAGT,CAAG,EAClE,GAAIopB,EAAO,CACP,IAAI8L,EAAU9L,EAAM,QAAUppB,EAAMopB,EAAM,OAAS,EAAIppB,EACnDk1B,EAAUz0B,IACVA,EAAIy0B,GACRD,EAAO,KAAK,IAAIzrB,EAAM4f,EAAM,SAAUA,EAAM,SAAUA,EAAM,OAAQA,EAAM,MAAM,CAAC,CACrF,CACI6L,EAAO,OAAS,KAAK,aACrBA,EAASA,EAAO,MAAM,EAAG,KAAK,UAAU,EAChD,MAEIA,EAAS5tB,EAAK,gBAAgB+C,EAAQ,QAAQ3J,CAAC,EAAG,KAAK,MAAM,EACzDw0B,EAAO,OAAS,KAAK,aACrBA,EAASA,EAAO,MAAM,EAAG,KAAK,UAAU,GAC5CA,EAASA,EAAO,IAAI,SAAU7L,EAAO,CACjC,OAAO,IAAI5f,EAAM/I,EAAG2oB,EAAM,OAAQ3oB,EAAG2oB,EAAM,OAASA,EAAM,MAAM,CACpE,CAAC,EAEL,KAAK,MAAM3oB,CAAC,EAAIw0B,EAAO,OAASA,EAAS,EAC7C,CACA,GAAIA,EAAO,SAAW,EAEtB,QAAS9rB,EAAI8rB,EAAO,OAAQ9rB,KAAM,CAC9B,IAAIgsB,EAAqBF,EAAO9rB,CAAC,EAAE,cAAciB,CAAO,EACpDgrB,EAAgBD,EAAmB,SAAS,EAC5CL,EAAqBM,CAAa,IAEtCN,EAAqBM,CAAa,EAAI,GACtCP,EAAY,qBAAqBrgB,EAAM2gB,EAAoB,KAAK,MAAO5sB,CAAM,EACjF,CACJ,CACA,KAAK,OAAS6B,EAAQ,SAAS,EAAE,OACrC,EACOuqB,CACX,EAAE,EACFA,EAAgB,UAAU,WAAa,IACvCl4B,EAAQ,gBAAkBk4B,CAE1B,CAAC,EAED,IAAI,OAAO,kBAAkB,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAASp3B,EAASd,EAASC,EAAO,CAAC,aAC5G,IAAI24B,EAA6B,UAAY,CACzC,SAASA,GAAc,CACnB,KAAK,eACL,KAAK,QAAU,EACf,KAAK,UAAY,GACjB,KAAK,WAAa,IAClB,KAAK,MAAM,CACf,CACA,OAAAA,EAAY,UAAU,WAAa,SAAUjrB,EAAS,CAClD,KAAK,SAAWA,CACpB,EACAirB,EAAY,UAAU,IAAM,SAAUzQ,EAAO0Q,EAAYlrB,EAAS,CAC9D,GAAI,MAAK,WAELwa,GAAS,KAAK,WAIlB,IAFK,KAAK,iBACN,KAAK,WAAW,OAAS,GACzB0Q,IAAe,IAAS,CAAC,KAAK,WAAY,CAC1C,KAAK,WAAa,CAAC,EACnB,IAAIC,EAAkB,KAAK,WAAW,OAClCA,EAAkB,KAAK,WAAa,GACpC,KAAK,WAAW,OAAO,EAAGA,EAAkB,KAAK,WAAa,CAAC,EAEnE,KAAK,WAAW,KAAK,KAAK,UAAU,EACpC3Q,EAAM,GAAK,KAAK,KAAO,EAAE,KAAK,OAClC,EACIA,EAAM,QAAU,UAAYA,EAAM,QAAU,YAC5C,KAAK,WAAaA,GACtB,KAAK,WAAW,KAAKA,CAAK,EAC9B,EACAyQ,EAAY,UAAU,aAAe,SAAU9kB,EAAWilB,EAAK,CAC3D,KAAK,WAAW,KAAK,CACjB,MAAOjlB,EACP,IAAKilB,GAAO,KAAK,IACrB,CAAC,CACL,EACAH,EAAY,UAAU,cAAgB,UAAY,CAC9C,YAAK,WAAa,KACX,KAAK,IAChB,EACAA,EAAY,UAAU,YAAc,SAAUrB,EAAMC,EAAI,CAChDA,GAAM,OACNA,EAAK,KAAK,KAAO,GAErB,QADIzK,EAAQ,KAAK,WACR/oB,EAAI+oB,EAAM,OAAQ/oB,KAAM,CAC7B,IAAImkB,EAAQ4E,EAAM/oB,CAAC,EAAE,CAAC,EACtB,GAAImkB,EAAM,IAAMoP,EACZ,MACApP,EAAM,GAAKqP,IACXrP,EAAM,OAAS,GACvB,CACA,KAAK,WAAa,IACtB,EACAyQ,EAAY,UAAU,aAAe,SAAUG,EAAK/F,EAAO,CAEvD,QADIjG,EAAQ,KAAK,WACR/oB,EAAI+oB,EAAM,OAAQ/oB,KAAM,CAC7B,IAAI8P,EAAYiZ,EAAM/oB,CAAC,EACvB,GAAI8P,EAAU,IAAMilB,EAChB,OAAI/F,IACAlf,EAAYiZ,EAAM/oB,EAAI,CAAC,GACpB8P,CAEf,CACJ,EACA8kB,EAAY,UAAU,YAAc,UAAY,CAC5C,OAAO,KAAK,IAChB,EACAA,EAAY,UAAU,UAAY,SAAUrB,EAAMC,EAAI,CAC9CA,GAAM,OACNA,EAAK,KAAK,KAAO,GAGrB,QAFIzK,EAAQ,KAAK,WACbxpB,EAAM,KAAMF,EAAQ,EACfW,EAAI+oB,EAAM,OAAQ/oB,KAAM,CAC7B,IAAImkB,EAAQ4E,EAAM/oB,CAAC,EAAE,CAAC,EAGtB,GAFImkB,EAAM,GAAKqP,GAAM,CAACj0B,IAClBA,EAAMS,EAAI,GACVmkB,EAAM,IAAMoP,EAAM,CAClBl0B,EAAQW,EAAI,EACZ,KACJ,CACJ,CACA,OAAO+oB,EAAM,MAAM1pB,EAAOE,CAAG,CACjC,EACAq1B,EAAY,UAAU,iBAAmB,SAAUrB,EAAMC,EAAI,CACrDA,GAAM,OACNA,EAAK,KAAK,KAAO,EACzB,EACAoB,EAAY,UAAU,gBAAkB,SAAUrB,EAAMC,EAAI,CACpDA,GAAM,OACNA,EAAK,KAAK,KAAO,EACzB,EACAoB,EAAY,UAAU,KAAO,SAAUjrB,EAASqrB,EAAY,CACxD,KAAK,WAAa,KAClB,IAAIjM,EAAQ,KAAK,WACjB,GAAKkM,EAAmBlM,EAAOA,EAAM,MAAM,EAE3C,CAAKpf,IACDA,EAAU,KAAK,UACf,KAAK,oBAAsB,KAAK,MAAQ,KAAK,WAAW,SACxD,KAAK,WAAa,CAAC,GACvB,KAAK,UAAY,GACjB,IAAIurB,EAAWnM,EAAM,IAAI,EACrBoM,EAAqB,KACzB,OAAID,IACAC,EAAqBxrB,EAAQ,YAAYurB,EAAUF,CAAU,EAC7D,KAAK,WAAW,KAAKE,CAAQ,EAC7B,KAAK,SAAS,GAElB,KAAK,UAAY,GACVC,EACX,EACAP,EAAY,UAAU,KAAO,SAAUjrB,EAASqrB,EAAY,CAKxD,GAJA,KAAK,WAAa,KACbrrB,IACDA,EAAU,KAAK,UACnB,KAAK,UAAY,GACb,KAAK,mBAAqB,KAAK,KAAM,CACrC,IAAIyrB,EAAO,KAAK,UAAU,KAAK,kBAAmB,KAAK,KAAO,CAAC,EAC/DC,EAAgB,KAAK,WAAYD,CAAI,EACrC,KAAK,kBAAoB,KAAK,KAC9B,KAAK,WAAW,QAAQ,SAAU/qB,EAAG,CACjCA,EAAE,CAAC,EAAE,GAAK,EAAE,KAAK,OACrB,EAAG,IAAI,CACX,CACA,IAAI6qB,EAAW,KAAK,WAAW,IAAI,EAC/BI,EAAqB,KACzB,OAAIJ,IACAI,EAAqB3rB,EAAQ,YAAYurB,EAAUF,CAAU,EAC7D,KAAK,WAAW,KAAKE,CAAQ,EAC7B,KAAK,SAAS,GAElB,KAAK,UAAY,GACVI,CACX,EACAV,EAAY,UAAU,SAAW,UAAY,CACzC,IAAI7L,EAAQ,KAAK,WACbwM,EAAYxM,EAAMA,EAAM,OAAS,CAAC,EAClCrmB,EAAK6yB,GAAaA,EAAU,CAAC,EAAE,IAAM,EACzC,KAAK,kBAAoB7yB,EACzB,KAAK,KAAOA,CAChB,EACAkyB,EAAY,UAAU,MAAQ,UAAY,CACtC,KAAK,WAAa,KAClB,KAAK,WAAa,KAClB,KAAK,WAAa,CAAC,EACnB,KAAK,WAAa,CAAC,EACnB,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,kBAAoB,KAAK,KAC9B,KAAK,WAAa,CAAC,CACvB,EACAA,EAAY,UAAU,QAAU,UAAY,CACxC,OAAO,KAAK,WAAW,OAAS,CACpC,EACAA,EAAY,UAAU,QAAU,UAAY,CACxC,OAAO,KAAK,WAAW,OAAS,CACpC,EACAA,EAAY,UAAU,SAAW,SAAUG,EAAK,CACxCA,GAAO,OACPA,EAAM,KAAK,MACf,KAAK,KAAOA,CAChB,EACAH,EAAY,UAAU,aAAe,UAAY,CAC7C,OAAO,KAAK,OAAS,KAAK,IAC9B,EACAA,EAAY,UAAU,OAAS,UAAY,CACvC,MAAO,CACH,WAAY,KAAK,WACjB,WAAY,KAAK,UACrB,CACJ,EACAA,EAAY,UAAU,SAAW,SAAUY,EAAM,CAC7C,KAAK,MAAM,EACX,KAAK,WAAaA,EAAK,WACvB,KAAK,WAAaA,EAAK,UAC3B,EACAZ,EAAY,UAAU,aAAe,SAAUzQ,EAAO,CAClD,OAAIA,EACOsR,EAAetR,CAAK,EACxBsR,EAAe,KAAK,UAAU,EAAI;AAAA;AAAA,EAAYA,EAAe,KAAK,UAAU,CACvF,EACOb,CACX,EAAE,EACFA,EAAY,UAAU,QAAUA,EAAY,UAAU,QACtDA,EAAY,UAAU,QAAUA,EAAY,UAAU,QACtDA,EAAY,UAAU,QAAUA,EAAY,UAAU,aACtDA,EAAY,UAAU,UAAYA,EAAY,UAAU,SACxD,SAASK,EAAmBlM,EAAOxX,EAAK,CACpC,QAASvR,EAAIuR,EAAKvR,KAAM,CACpB,IAAIk1B,EAAWnM,EAAM/oB,CAAC,EACtB,GAAIk1B,GAAY,CAACA,EAAS,CAAC,EAAE,OAAQ,CACjC,KAAOl1B,EAAIuR,EAAM,GAAG,CAChB,IAAImkB,EAAUC,EAAW5M,EAAM/oB,CAAC,EAAG+oB,EAAM/oB,EAAI,CAAC,CAAC,EAC/C+oB,EAAM/oB,CAAC,EAAI01B,EAAQ,CAAC,EACpB3M,EAAM/oB,EAAI,CAAC,EAAI01B,EAAQ,CAAC,EACxB11B,GACJ,CACA,MAAO,EACX,CACJ,CACJ,CACA,IAAI+I,EAAQjM,EAAQ,SAAS,EAAE,MAC3ByM,EAAMR,EAAM,cACZ6sB,EAAgB7sB,EAAM,cAC1B,SAAS8sB,EAAe1R,EAAO,CAC3B,IAAIiP,EAAWjP,EAAM,QAAU,SAC3B9kB,EAAQ8kB,EAAM,MACd5kB,EAAM4kB,EAAM,IACZ2R,GAAYv2B,EAAI,IAAMF,EAAM,MAAQ+zB,EAAW,EAAI,IACnD2C,GAAYx2B,EAAI,OAASF,EAAM,SAAW+zB,EAAW,EAAI,IACzDA,IACA7zB,EAAMF,GACV,QAASW,KAAK,KAAK,MAAO,CACtB,IAAI6xB,EAAQ,KAAK,MAAM7xB,CAAC,EACpBuJ,EAAMqsB,EAAc/D,EAAOxyB,CAAK,EACpC,GAAI,EAAAkK,EAAM,GAGV,IAAIA,IAAQ,GACJ6pB,EACA,GAAIvB,EAAM,MAAQ,EACdtoB,EAAM,MAEL,CACDsoB,EAAM,MAAQ,GACd,QACJ,CAGR,IAAImE,EAAO5C,EAAW7pB,EAAMqsB,EAAc/D,EAAOtyB,CAAG,EACpD,GAAIy2B,EAAO,EAAG,CACVnE,EAAM,KAAOiE,EACbjE,EAAM,QAAUA,EAAM,KAAOtyB,EAAI,IAAMw2B,EAAW,EAClD,QACJ,CACI,CAAC3C,GAAY4C,GAAQ,IACrBnE,EAAM,IAAMxyB,EAAM,IAClBwyB,EAAM,OAASxyB,EAAM,OACjB22B,IAAS,IACTnE,EAAM,KAAO,IAEzB,CACJ,CACA,SAASoE,EAAS1kB,EAAK,CACnB,MAAO,CAAE,IAAKA,EAAI,IAAK,OAAQA,EAAI,MAAO,CAC9C,CACA,SAAS2kB,EAAW1iB,EAAG,CACnB,MAAO,CACH,MAAOyiB,EAASziB,EAAE,KAAK,EACvB,IAAKyiB,EAASziB,EAAE,GAAG,EACnB,OAAQA,EAAE,OACV,MAAOA,EAAE,MAAM,MAAM,CACzB,CACJ,CACA,SAASiiB,EAAejiB,EAAG,CAEvB,GADAA,EAAIA,GAAK,KACL,MAAM,QAAQA,CAAC,EACf,OAAOA,EAAE,IAAIiiB,CAAc,EAAE,KAAK;AAAA,CAAI,EAE1C,IAAIzqB,EAAO,GACX,OAAIwI,EAAE,QACFxI,EAAOwI,EAAE,QAAU,SAAW,IAAM,IACpCxI,GAAQ,IAAMwI,EAAE,MAAQ,KAEnBA,EAAE,QACH,MAAM,QAAQA,EAAE,KAAK,EACrBxI,EAAOwI,EAAE,MAAM,IAAI2iB,CAAc,EAAE,KAAK;AAAA,CAAI,EAG5CnrB,EAAOmrB,EAAe3iB,EAAE,KAAK,GAGjCA,EAAE,QACFxI,GAAQmrB,EAAe3iB,CAAC,IAExBA,EAAE,IAAMA,EAAE,OACVxI,GAAQ,MAASwI,EAAE,IAAMA,EAAE,KAAO,KAE/BxI,CACX,CACA,SAASmrB,EAAere,EAAG,CACvB,OAAOA,EAAE,MAAM,IAAM,IAAMA,EAAE,MAAM,OAC7B,KAAOA,EAAE,IAAI,IAAM,IAAMA,EAAE,IAAI,MACzC,CACA,SAASse,EAAKC,EAAIC,EAAI,CAClB,IAAIC,EAAKF,EAAG,QAAU,SAClBG,EAAKF,EAAG,QAAU,SACtB,GAAIC,GAAMC,EACN,GAAIjtB,EAAI+sB,EAAG,MAAOD,EAAG,GAAG,GAAK,EACzB3R,EAAM4R,EAAID,EAAI,EAAE,UAEX9sB,EAAI+sB,EAAG,MAAOD,EAAG,KAAK,GAAK,EAChC3R,EAAM2R,EAAIC,EAAI,CAAE,MAGhB,QAAO,aAGNC,GAAM,CAACC,EACZ,GAAIjtB,EAAI+sB,EAAG,MAAOD,EAAG,GAAG,GAAK,EACzB3R,EAAM4R,EAAID,EAAI,EAAE,UAEX9sB,EAAI+sB,EAAG,IAAKD,EAAG,KAAK,GAAK,EAC9B3R,EAAM2R,EAAIC,EAAI,EAAE,MAGhB,QAAO,aAGN,CAACC,GAAMC,EACZ,GAAIjtB,EAAI+sB,EAAG,MAAOD,EAAG,KAAK,GAAK,EAC3B3R,EAAM4R,EAAID,EAAI,CAAE,UAEX9sB,EAAI+sB,EAAG,MAAOD,EAAG,KAAK,GAAK,EAChC3R,EAAM2R,EAAIC,EAAI,CAAE,MAGhB,QAAO,aAGN,CAACC,GAAM,CAACC,EACb,GAAIjtB,EAAI+sB,EAAG,MAAOD,EAAG,KAAK,GAAK,EAC3B3R,EAAM4R,EAAID,EAAI,CAAE,UAEX9sB,EAAI+sB,EAAG,IAAKD,EAAG,KAAK,GAAK,EAC9B3R,EAAM2R,EAAIC,EAAI,EAAE,MAGhB,QAAO,KAGf,MAAO,CAACA,EAAID,CAAE,CAClB,CACA,SAASV,EAAWc,EAAKC,EAAK,CAC1B,QAAS12B,EAAIy2B,EAAI,OAAQz2B,KACrB,QAAS0I,EAAI,EAAGA,EAAIguB,EAAI,OAAQhuB,IAC5B,GAAI,CAAC0tB,EAAKK,EAAIz2B,CAAC,EAAG02B,EAAIhuB,CAAC,CAAC,EAAG,CACvB,KAAO1I,EAAIy2B,EAAI,QAAQ,CACnB,KAAO/tB,KACH0tB,EAAKM,EAAIhuB,CAAC,EAAG+tB,EAAIz2B,CAAC,CAAC,EAEvB0I,EAAIguB,EAAI,OACR12B,GACJ,CACA,MAAO,CAACy2B,EAAKC,CAAG,CACpB,CAGR,OAAAD,EAAI,gBAAkBC,EAAI,gBACtBD,EAAI,eAAiBC,EAAI,eAAiB,KACvC,CAACA,EAAKD,CAAG,CACpB,CACA,SAASE,EAAMN,EAAIO,EAAI,CACnB,IAAIL,EAAKF,EAAG,QAAU,SAClBG,EAAKI,EAAG,QAAU,SACtB,GAAIL,GAAMC,EACFjtB,EAAI8sB,EAAG,MAAOO,EAAG,KAAK,EAAI,EAC1BlS,EAAMkS,EAAIP,EAAI,CAAC,EAGf3R,EAAM2R,EAAIO,EAAI,CAAC,UAGdL,GAAM,CAACC,EACRjtB,EAAI8sB,EAAG,MAAOO,EAAG,GAAG,GAAK,EACzBlS,EAAM2R,EAAIO,EAAI,EAAE,GAEXrtB,EAAI8sB,EAAG,MAAOO,EAAG,KAAK,GAAK,GAIhClS,EAAM2R,EAAIttB,EAAM,WAAW6tB,EAAG,MAAOP,EAAG,KAAK,EAAG,EAAE,EAClD3R,EAAMkS,EAAIP,EAAI,CAAE,WAGf,CAACE,GAAMC,EACRjtB,EAAIqtB,EAAG,MAAOP,EAAG,GAAG,GAAK,EACzB3R,EAAMkS,EAAIP,EAAI,EAAE,GAEX9sB,EAAIqtB,EAAG,MAAOP,EAAG,KAAK,GAAK,GAIhC3R,EAAMkS,EAAI7tB,EAAM,WAAWstB,EAAG,MAAOO,EAAG,KAAK,EAAG,EAAE,EAClDlS,EAAM2R,EAAIO,EAAI,CAAE,WAGf,CAACL,GAAM,CAACC,EACb,GAAIjtB,EAAIqtB,EAAG,MAAOP,EAAG,GAAG,GAAK,EACzB3R,EAAMkS,EAAIP,EAAI,EAAE,UAEX9sB,EAAIqtB,EAAG,IAAKP,EAAG,KAAK,GAAK,EAC9B3R,EAAM2R,EAAIO,EAAI,EAAE,MAEf,CACD,IAAI7H,EAAQC,EACZ,OAAIzlB,EAAI8sB,EAAG,MAAOO,EAAG,KAAK,EAAI,IAC1B7H,EAASsH,EACTA,EAAKQ,EAAWR,EAAIO,EAAG,KAAK,GAE5BrtB,EAAI8sB,EAAG,IAAKO,EAAG,GAAG,EAAI,IACtB5H,EAAQ6H,EAAWR,EAAIO,EAAG,GAAG,GAEjCE,EAASF,EAAG,IAAKP,EAAG,MAAOA,EAAG,IAAK,EAAE,EACjCrH,GAAS,CAACD,IACVsH,EAAG,MAAQrH,EAAM,MACjBqH,EAAG,MAAQrH,EAAM,MACjBqH,EAAG,IAAMrH,EAAM,IACfA,EAAQqH,GAEL,CAACO,EAAI7H,EAAQC,CAAK,EAAE,OAAO,OAAO,CAC7C,CAEJ,MAAO,CAAC4H,EAAIP,CAAE,CAClB,CACA,SAAS3R,EAAM2R,EAAIC,EAAI3W,EAAK,CACxBmX,EAAST,EAAG,MAAOC,EAAG,MAAOA,EAAG,IAAK3W,CAAG,EACxCmX,EAAST,EAAG,IAAKC,EAAG,MAAOA,EAAG,IAAK3W,CAAG,CAC1C,CACA,SAASmX,EAASvlB,EAAKlS,EAAOE,EAAKogB,EAAK,CAChCpO,EAAI,MAAQoO,GAAO,EAAItgB,EAAQE,GAAK,MACpCgS,EAAI,QAAUoO,GAAOpgB,EAAI,OAASF,EAAM,SAE5CkS,EAAI,KAAOoO,GAAOpgB,EAAI,IAAMF,EAAM,IACtC,CACA,SAASw3B,EAAW1T,EAAG5R,EAAK,CACxB,IAAIxB,EAAQoT,EAAE,MACV5jB,EAAM4jB,EAAE,IACZA,EAAE,IAAM8S,EAAS1kB,CAAG,EACpB,IAAIwlB,EAAa5T,EAAE,IAAI,IAAMA,EAAE,MAAM,IACjC6T,EAAajnB,EAAM,OAAOgnB,EAAYhnB,EAAM,MAAM,EAClDmV,EAAM6R,EAAaxlB,EAAI,OAASA,EAAI,OAAS4R,EAAE,MAAM,OACzDpT,EAAM,KAAKinB,EAAW,CAAC,EAAE,UAAU,EAAG9R,CAAG,CAAC,EAC1C8R,EAAW,CAAC,EAAIA,EAAW,CAAC,EAAE,OAAO9R,CAAG,EACxC,IAAI+R,EAAO,CACP,MAAOhB,EAAS1kB,CAAG,EACnB,IAAKhS,EACL,MAAOy3B,EACP,OAAQ7T,EAAE,MACd,EACA,OAAO8T,CACX,CACA,SAASC,EAAgBC,EAAW3jB,EAAG,CACnCA,EAAI0iB,EAAW1iB,CAAC,EAChB,QAAS9K,EAAIyuB,EAAU,OAAQzuB,KAAM,CAEjC,QADIwsB,EAAWiC,EAAUzuB,CAAC,EACjB1I,EAAI,EAAGA,EAAIk1B,EAAS,OAAQl1B,IAAK,CACtC,IAAIqK,EAAI6qB,EAASl1B,CAAC,EACdo3B,EAAUT,EAAMtsB,EAAGmJ,CAAC,EACxBA,EAAI4jB,EAAQ,CAAC,EACTA,EAAQ,QAAU,IACdA,EAAQ,CAAC,GACTlC,EAAS,OAAOl1B,EAAI,EAAG,EAAGo3B,EAAQ,CAAC,EAAGA,EAAQ,CAAC,CAAC,EAChDp3B,KAEMo3B,EAAQ,CAAC,IACflC,EAAS,OAAOl1B,EAAG,CAAC,EACpBA,KAGZ,CACKk1B,EAAS,QACViC,EAAU,OAAOzuB,EAAG,CAAC,CAE7B,CACA,OAAOyuB,CACX,CACA,SAAS9B,EAAgB8B,EAAWE,EAAW,CAC3C,QAASr3B,EAAI,EAAGA,EAAIq3B,EAAU,OAAQr3B,IAElC,QADImzB,EAASkE,EAAUr3B,CAAC,EACf0I,EAAI,EAAGA,EAAIyqB,EAAO,OAAQzqB,IAC/BwuB,EAAgBC,EAAWhE,EAAOzqB,CAAC,CAAC,CAGhD,CACA1M,EAAQ,YAAc44B,CAEtB,CAAC,EAED,IAAI,OAAO,6BAA6B,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAAS93B,EAASd,EAASC,EAAO,CAAC,aACvH,IAAI8M,EAAQjM,EAAQ,UAAU,EAAE,MAC5Bw6B,EAA0B,UAAY,CACtC,SAASA,EAASC,EAAUC,EAAO,CAC/B,KAAK,SAAWD,EACZ,MAAM,QAAQC,CAAK,EACnB,KAAK,MAAQA,EAGbA,EAAQ,KAAK,MAAQ,CAACA,CAAK,EAE/B,IAAIz2B,EAAOy2B,EAAMA,EAAM,OAAS,CAAC,EACjC,KAAK,MAAQ,IAAIzuB,EAAMyuB,EAAM,CAAC,EAAE,MAAM,IAAKA,EAAM,CAAC,EAAE,MAAM,OAAQz2B,EAAK,IAAI,IAAKA,EAAK,IAAI,MAAM,EAC/F,KAAK,MAAQ,KAAK,MAAM,MACxB,KAAK,IAAM,KAAK,MAAM,IACtB,KAAK,MAAM,QAAQ,SAAU+V,EAAM,CAC/BA,EAAK,YAAY,IAAI,CACzB,EAAG,IAAI,CACX,CACA,OAAAwgB,EAAS,UAAU,SAAW,SAAU5S,EAAO,CAC3C,KAAK,MAAM,KAAOA,EAClB,KAAK,IAAI,KAAOA,EAChB,KAAK,MAAM,QAAQ,SAAU5N,EAAM,CAC/BA,EAAK,MAAM,KAAO4N,EAClB5N,EAAK,IAAI,KAAO4N,CACpB,CAAC,CACL,EACA4S,EAAS,UAAU,QAAU,SAAUxgB,EAAM,CACzC,GAAIA,EAAK,QAAS,CACd,GAAIA,EAAK,MAAM,IAAM,KAAK,UAAYA,EAAK,OAAS,KAAK,OACrD,MAAM,IAAI,MAAM,2DAA2D,EAE/E,KAAK,MAAM,KAAKA,CAAI,EACpB,KAAK,MAAM,KAAK,SAAUlX,EAAG6T,EAAG,CAC5B,MAAO,CAAC7T,EAAE,MAAM,WAAW6T,EAAE,MAAM,IAAKA,EAAE,MAAM,MAAM,CAC1D,CAAC,EACG,KAAK,MAAM,WAAWqD,EAAK,MAAM,IAAKA,EAAK,MAAM,MAAM,EAAI,GAC3D,KAAK,IAAI,IAAMA,EAAK,IAAI,IACxB,KAAK,IAAI,OAASA,EAAK,IAAI,QAEtB,KAAK,MAAM,aAAaA,EAAK,IAAI,IAAKA,EAAK,IAAI,MAAM,EAAI,IAC9D,KAAK,MAAM,IAAMA,EAAK,MAAM,IAC5B,KAAK,MAAM,OAASA,EAAK,MAAM,OAEvC,SACSA,EAAK,MAAM,KAAO,KAAK,IAAI,IAChC,KAAK,MAAM,KAAKA,CAAI,EACpB,KAAK,IAAI,IAAMA,EAAK,IAAI,IACxB,KAAK,IAAI,OAASA,EAAK,IAAI,eAEtBA,EAAK,IAAI,KAAO,KAAK,MAAM,IAChC,KAAK,MAAM,QAAQA,CAAI,EACvB,KAAK,MAAM,IAAMA,EAAK,MAAM,IAC5B,KAAK,MAAM,OAASA,EAAK,MAAM,WAG/B,OAAM,IAAI,MAAM,gEAAgE,EAEpFA,EAAK,SAAW,IACpB,EACAwgB,EAAS,UAAU,YAAc,SAAUjuB,EAAK,CAC5C,OAAOA,GAAO,KAAK,MAAM,KAAOA,GAAO,KAAK,IAAI,GACpD,EACAiuB,EAAS,UAAU,KAAO,SAAU76B,EAAUyM,EAAQC,EAAW,CAC7D,IAAIsuB,EAAU,EAAGD,EAAQ,KAAK,MAAO1gB,EAAMvN,EAAK0V,EAAMyY,EAAW,GAC7DxuB,GAAU,OACVA,EAAS,KAAK,IAAI,IAClBC,EAAY,KAAK,IAAI,QAEzB,QAASnJ,EAAI,EAAGA,EAAIw3B,EAAM,OAAQx3B,IAAK,CAGnC,GAFA8W,EAAO0gB,EAAMx3B,CAAC,EACduJ,EAAMuN,EAAK,MAAM,aAAa5N,EAAQC,CAAS,EAC3CI,GAAO,GAAI,CACX9M,EAAS,KAAMyM,EAAQC,EAAWsuB,EAASC,CAAQ,EACnD,MACJ,CAGA,GAFAzY,EAAOxiB,EAAS,KAAMqa,EAAK,MAAM,IAAKA,EAAK,MAAM,OAAQ2gB,EAASC,CAAQ,EAC1EzY,EAAO,CAACA,GAAQxiB,EAASqa,EAAK,YAAaA,EAAK,MAAM,IAAKA,EAAK,MAAM,OAAQ2gB,CAAO,EACjFxY,GAAQ1V,IAAQ,EAChB,OAEJmuB,EAAW,CAAC5gB,EAAK,QACjB2gB,EAAU3gB,EAAK,IAAI,MACvB,CACAra,EAAS,KAAMyM,EAAQC,EAAWsuB,EAASC,CAAQ,CACvD,EACAJ,EAAS,UAAU,cAAgB,SAAUjuB,EAAKC,EAAQ,CAEtD,QADIwN,EAAMvN,EACDvJ,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,IAAK,CAGxC,GAFA8W,EAAO,KAAK,MAAM9W,CAAC,EACnBuJ,EAAMuN,EAAK,MAAM,WAAWzN,EAAKC,CAAM,EACnCC,GAAO,GACP,MAAO,CACH,KAAMuN,EACN,KAAM,OACV,EAEC,GAAIvN,IAAQ,EACb,MAAO,CACH,KAAMuN,EACN,KAAM,QACV,CAER,CACA,OAAO,IACX,EACAwgB,EAAS,UAAU,eAAiB,SAAUjuB,EAAKC,EAAQvK,EAAK,CAC5D,IAAI4kB,EAAM,KAAK,cAActa,EAAKC,CAAM,EAAGwN,EAAM0gB,EACjD,GAAI7T,GAEA,GADA7M,EAAO6M,EAAI,KACPA,EAAI,MAAQ,UACT7M,EAAK,MAAM,QAAUxN,GACrBwN,EAAK,MAAM,KAAOzN,EACrB,OAAO,SAAW,OAAO,QAAQ,IAAIA,EAAKC,EAAQwN,CAAI,UAEjDA,EAAK,MAAM,KAAOzN,EAAK,CAC5BmuB,EAAQ,KAAK,MACb,IAAIx3B,EAAIw3B,EAAM,QAAQ1gB,CAAI,EAI1B,IAHI9W,IAAM,IACN,KAAK,MAAM,QAAUjB,GAEpBiB,EAAGA,EAAIw3B,EAAM,OAAQx3B,IAAK,CAG3B,GAFA8W,EAAO0gB,EAAMx3B,CAAC,EACd8W,EAAK,MAAM,QAAU/X,EACjB,CAAC+X,EAAK,QACN,OAEJA,EAAK,IAAI,QAAU/X,CACvB,CACA,KAAK,IAAI,QAAUA,CACvB,EAER,EACAu4B,EAAS,UAAU,MAAQ,SAAUjuB,EAAKC,EAAQ,CAC9C,IAAIiI,EAAM,KAAK,cAAclI,EAAKC,CAAM,EACxC,GAAI,CAACiI,GAAOA,EAAI,MAAQ,SACpB,OAAO,KACX,IAAIuF,EAAOvF,EAAI,KACXimB,EAAQ,KAAK,MACbD,EAAW,KAAK,SAChBv3B,EAAIw3B,EAAM,QAAQ1gB,CAAI,EACtB6gB,EAAaH,EAAMx3B,EAAI,CAAC,EAC5B,KAAK,IAAI,IAAM23B,EAAW,IAAI,IAC9B,KAAK,IAAI,OAASA,EAAW,IAAI,OACjCH,EAAQA,EAAM,OAAOx3B,EAAGw3B,EAAM,OAASx3B,CAAC,EACxC,IAAI43B,EAAc,IAAIN,EAASC,EAAUC,CAAK,EAC9C,OAAAD,EAAS,OAAOA,EAAS,QAAQ,IAAI,EAAI,EAAG,EAAGK,CAAW,EACnDA,CACX,EACAN,EAAS,UAAU,MAAQ,SAAUO,EAAc,CAE/C,QADIL,EAAQK,EAAa,MAChB73B,EAAI,EAAGA,EAAIw3B,EAAM,OAAQx3B,IAC9B,KAAK,QAAQw3B,EAAMx3B,CAAC,CAAC,EAEzB,IAAIu3B,EAAW,KAAK,SACpBA,EAAS,OAAOA,EAAS,QAAQM,CAAY,EAAG,CAAC,CACrD,EACAP,EAAS,UAAU,SAAW,UAAY,CACtC,IAAI3T,EAAM,CAAC,KAAK,MAAM,SAAS,EAAI,KAAK,EACxC,YAAK,MAAM,QAAQ,SAAU7M,EAAM,CAC/B6M,EAAI,KAAK,KAAO7M,EAAK,SAAS,CAAC,CACnC,CAAC,EACD6M,EAAI,KAAK,GAAG,EACLA,EAAI,KAAK;AAAA,CAAI,CACxB,EACA2T,EAAS,UAAU,cAAgB,SAAUQ,EAAK,CAE9C,QADIC,EAAoB,EACf/3B,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,IAAK,CACxC,IAAI8W,EAAO,KAAK,MAAM9W,CAAC,EAEvB,GADA83B,GAAOhhB,EAAK,MAAM,OAASihB,EACvBD,EAAM,EACN,MAAO,CACH,IAAKhhB,EAAK,MAAM,IAChB,OAAQA,EAAK,MAAM,OAASghB,CAChC,EAGJ,GADAA,GAAOhhB,EAAK,YAAY,OACpBghB,EAAM,EACN,OAAOhhB,EAAK,MAEhBihB,EAAoBjhB,EAAK,IAAI,MACjC,CACA,MAAO,CACH,IAAK,KAAK,IAAI,IACd,OAAQ,KAAK,IAAI,OAASghB,CAC9B,CACJ,EACOR,CACX,EAAE,EACFt7B,EAAQ,SAAWs7B,CAEnB,CAAC,EAED,IAAI,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAASx6B,EAASd,EAASC,EAAO,CAAC,aAC3G,IAAI8M,EAAQjM,EAAQ,SAAS,EAAE,MAC3B84B,EAAgB7sB,EAAM,cACtBivB,EAA2B,UAAY,CACvC,SAASA,GAAY,CACjB,KAAK,OAAS,CAAC,EACf,KAAK,MAAQ,CACjB,CACA,OAAAA,EAAU,UAAU,WAAa,SAAUzmB,EAAK0mB,EAAcC,EAAY,CAEtE,QADInN,EAAO,KAAK,OACP/qB,EAAIk4B,GAAc,EAAGl4B,EAAI+qB,EAAK,OAAQ/qB,IAAK,CAChD,IAAIoJ,EAAQ2hB,EAAK/qB,CAAC,EACdkS,EAAS0jB,EAAcrkB,EAAKnI,EAAM,GAAG,EACzC,GAAI,EAAA8I,EAAS,GAEb,KAAID,EAAW2jB,EAAcrkB,EAAKnI,EAAM,KAAK,EAC7C,OAAI8I,IAAW,EACJ+lB,GAAgBhmB,IAAa,EAAI,CAACjS,EAAI,EAAIA,EACjDiS,EAAW,GAAMA,IAAa,GAAK,CAACgmB,EAC7Bj4B,EACJ,CAACA,EAAI,EAChB,CACA,MAAO,CAACA,EAAI,CAChB,EACAg4B,EAAU,UAAU,IAAM,SAAU5uB,EAAO,CACvC,IAAI6uB,EAAe,CAAC7uB,EAAM,QAAQ,EAC9B8uB,EAAa,KAAK,WAAW9uB,EAAM,MAAO6uB,CAAY,EACtDC,EAAa,IACbA,EAAa,CAACA,EAAa,GAC/B,IAAIzoB,EAAW,KAAK,WAAWrG,EAAM,IAAK6uB,EAAcC,CAAU,EAClE,OAAIzoB,EAAW,EACXA,EAAW,CAACA,EAAW,EAEvBA,IACG,KAAK,OAAO,OAAOyoB,EAAYzoB,EAAWyoB,EAAY9uB,CAAK,CACtE,EACA4uB,EAAU,UAAU,QAAU,SAAUjN,EAAM,CAE1C,QADI+F,EAAU,CAAC,EACN9wB,EAAI+qB,EAAK,OAAQ/qB,KACtB8wB,EAAQ,KAAK,MAAMA,EAAS,KAAK,IAAI/F,EAAK/qB,CAAC,CAAC,CAAC,EAEjD,OAAO8wB,CACX,EACAkH,EAAU,UAAU,eAAiB,SAAUzmB,EAAK,CAChD,IAAIvR,EAAI,KAAK,WAAWuR,CAAG,EAC3B,GAAIvR,GAAK,EACL,OAAO,KAAK,OAAO,OAAOA,EAAG,CAAC,CACtC,EACAg4B,EAAU,UAAU,MAAQ,UAAY,CACpC,IAAIlH,EAAU,CAAC,EACX/F,EAAO,KAAK,OAChBA,EAAOA,EAAK,KAAK,SAAUnrB,EAAG6T,EAAG,CAC7B,OAAOmiB,EAAch2B,EAAE,MAAO6T,EAAE,KAAK,CACzC,CAAC,EAED,QADI8W,EAAOQ,EAAK,CAAC,EAAG3hB,EACXpJ,EAAI,EAAGA,EAAI+qB,EAAK,OAAQ/qB,IAAK,CAClCoJ,EAAQmhB,EACRA,EAAOQ,EAAK/qB,CAAC,EACb,IAAIuJ,EAAMqsB,EAAcxsB,EAAM,IAAKmhB,EAAK,KAAK,EACzChhB,EAAM,GAENA,GAAO,GAAK,CAACH,EAAM,QAAQ,GAAK,CAACmhB,EAAK,QAAQ,IAE9CqL,EAAcxsB,EAAM,IAAKmhB,EAAK,GAAG,EAAI,IACrCnhB,EAAM,IAAI,IAAMmhB,EAAK,IAAI,IACzBnhB,EAAM,IAAI,OAASmhB,EAAK,IAAI,QAEhCQ,EAAK,OAAO/qB,EAAG,CAAC,EAChB8wB,EAAQ,KAAKvG,CAAI,EACjBA,EAAOnhB,EACPpJ,IACJ,CACA,YAAK,OAAS+qB,EACP+F,CACX,EACAkH,EAAU,UAAU,SAAW,SAAU3uB,EAAKC,EAAQ,CAClD,OAAO,KAAK,WAAW,CAAE,IAAKD,EAAK,OAAQC,CAAO,CAAC,GAAK,CAC5D,EACA0uB,EAAU,UAAU,cAAgB,SAAUzmB,EAAK,CAC/C,OAAO,KAAK,WAAWA,CAAG,GAAK,CACnC,EACAymB,EAAU,UAAU,aAAe,SAAUzmB,EAAK,CAC9C,IAAIvR,EAAI,KAAK,WAAWuR,CAAG,EAC3B,GAAIvR,GAAK,EACL,OAAO,KAAK,OAAOA,CAAC,CAC5B,EACAg4B,EAAU,UAAU,SAAW,SAAUhvB,EAAUE,EAAQ,CACvD,IAAI6hB,EAAO,KAAK,OAChB,GAAIA,EAAK,CAAC,EAAE,MAAM,IAAM7hB,GAAU6hB,EAAKA,EAAK,OAAS,CAAC,EAAE,MAAM,IAAM/hB,EAChE,MAAO,CAAC,EACZ,IAAIkvB,EAAa,KAAK,WAAW,CAAE,IAAKlvB,EAAU,OAAQ,CAAE,CAAC,EACzDkvB,EAAa,IACbA,EAAa,CAACA,EAAa,GAC/B,IAAIzoB,EAAW,KAAK,WAAW,CAAE,IAAKvG,EAAQ,OAAQ,CAAE,EAAGgvB,CAAU,EACjEzoB,EAAW,IACXA,EAAW,CAACA,EAAW,GAE3B,QADI0oB,EAAU,CAAC,EACN,EAAID,EAAY,EAAIzoB,EAAU,IACnC0oB,EAAQ,KAAKpN,EAAK,CAAC,CAAC,EAExB,OAAOoN,CACX,EACAH,EAAU,UAAU,UAAY,UAAY,CACxC,OAAO,KAAK,OAAO,OAAO,EAAG,KAAK,OAAO,MAAM,CACnD,EACAA,EAAU,UAAU,OAAS,SAAUruB,EAAS,CACxC,KAAK,SACL,KAAK,OAAO,EAChB,KAAK,QAAUA,EACf,KAAK,SAAW,KAAK,UAAU,KAAK,IAAI,EACxC,KAAK,QAAQ,GAAG,SAAU,KAAK,QAAQ,CAC3C,EACAquB,EAAU,UAAU,OAAS,UAAY,CAChC,KAAK,UAEV,KAAK,QAAQ,eAAe,SAAU,KAAK,QAAQ,EACnD,KAAK,QAAU,KACnB,EACAA,EAAU,UAAU,UAAY,SAAU7T,EAAO,CAM7C,QALI9kB,EAAQ8kB,EAAM,MACd5kB,EAAM4kB,EAAM,IACZnb,EAAW3J,EAAM,IACjB6J,EAAS3J,EAAI,IACbi1B,EAAS,KAAK,OACT,EAAI,EAAGxyB,EAAIwyB,EAAO,OAAQ,EAAIxyB,EAAG,IAAK,CAC3C,IAAI8V,EAAI0c,EAAO,CAAC,EAChB,GAAI1c,EAAE,IAAI,KAAO9O,EACb,KACR,CACA,GAAImb,EAAM,QAAU,SAGhB,QAFIiU,EAAUlvB,EAASF,EACnBymB,EAAU,CAACpwB,EAAM,OAASE,EAAI,OAC3B,EAAIyC,EAAG,IAAK,CACf,IAAI8V,EAAI0c,EAAO,CAAC,EAChB,GAAI1c,EAAE,MAAM,IAAM9O,EACd,MASJ,GARI8O,EAAE,MAAM,KAAO9O,GAAY8O,EAAE,MAAM,QAAUzY,EAAM,SAC/CyY,EAAE,MAAM,QAAUzY,EAAM,QAAU,KAAK,OAAS,IAGhDyY,EAAE,MAAM,QAAU2X,EAClB3X,EAAE,MAAM,KAAOsgB,IAGnBtgB,EAAE,IAAI,KAAO9O,GAAY8O,EAAE,IAAI,QAAUzY,EAAM,OAAQ,CACvD,GAAIyY,EAAE,IAAI,QAAUzY,EAAM,QAAU,KAAK,MAAQ,EAC7C,SAEAyY,EAAE,IAAI,QAAUzY,EAAM,QAAUowB,EAAU,GAAK,EAAIztB,EAAI,GACnD8V,EAAE,IAAI,OAASA,EAAE,MAAM,QAAUA,EAAE,IAAI,QAAU0c,EAAO,EAAI,CAAC,EAAE,MAAM,SACrE1c,EAAE,IAAI,QAAU2X,GAExB3X,EAAE,IAAI,QAAU2X,EAChB3X,EAAE,IAAI,KAAOsgB,CACjB,CACJ,KAKA,SAFIA,EAAUpvB,EAAWE,EACrBumB,EAAUpwB,EAAM,OAASE,EAAI,OAC1B,EAAIyC,EAAG,IAAK,CACf,IAAI8V,EAAI0c,EAAO,CAAC,EAChB,GAAI1c,EAAE,MAAM,IAAM5O,EACd,MACA4O,EAAE,IAAI,IAAM5O,IACRF,EAAW8O,EAAE,IAAI,KACd9O,GAAY8O,EAAE,IAAI,KAAOzY,EAAM,OAASyY,EAAE,IAAI,SACrDA,EAAE,IAAI,IAAM9O,EACZ8O,EAAE,IAAI,OAASzY,EAAM,QAEhByY,EAAE,IAAI,KAAO5O,EACd4O,EAAE,IAAI,QAAUvY,EAAI,QAChB64B,GAAWtgB,EAAE,IAAI,OAASzY,EAAM,UAChCyY,EAAE,IAAI,OAASzY,EAAM,OACrByY,EAAE,IAAI,IAAMzY,EAAM,MAItByY,EAAE,IAAI,QAAU2X,EAChB3X,EAAE,IAAI,KAAOsgB,GAGZtgB,EAAE,IAAI,IAAM5O,IACjB4O,EAAE,IAAI,KAAOsgB,GAEbtgB,EAAE,MAAM,IAAM5O,IACVF,EAAW8O,EAAE,MAAM,KAChB9O,GAAY8O,EAAE,MAAM,KAAOzY,EAAM,OAASyY,EAAE,MAAM,SACzDA,EAAE,MAAM,IAAM9O,EACd8O,EAAE,MAAM,OAASzY,EAAM,QAElByY,EAAE,MAAM,KAAO5O,EAChB4O,EAAE,MAAM,QAAUvY,EAAI,QAClB64B,GAAWtgB,EAAE,MAAM,OAASzY,EAAM,UAClCyY,EAAE,MAAM,OAASzY,EAAM,OACvByY,EAAE,MAAM,IAAMzY,EAAM,MAIxByY,EAAE,MAAM,QAAU2X,EAClB3X,EAAE,MAAM,KAAOsgB,GAGdtgB,EAAE,MAAM,IAAM5O,IACnB4O,EAAE,MAAM,KAAOsgB,EAEvB,CAEJ,GAAIA,GAAW,GAAK,EAAIp2B,EACpB,KAAO,EAAIA,EAAG,IAAK,CACf,IAAI8V,EAAI0c,EAAO,CAAC,EAChB1c,EAAE,MAAM,KAAOsgB,EACftgB,EAAE,IAAI,KAAOsgB,CACjB,CAER,EACOJ,CACX,EAAE,EACFA,EAAU,UAAU,cAAgBpC,EACpC55B,EAAQ,UAAYg8B,CAEpB,CAAC,EAED,IAAI,OAAO,wBAAwB,CAAC,UAAU,UAAU,SAAS,gBAAgB,EAAG,SAASl7B,EAASd,EAASC,EAAO,CAAC,aACvH,IAAIqX,EAAa,MAAQ,KAAK,WAAe,UAAY,CACrD,IAAIC,EAAgB,SAAUC,EAAGC,EAAG,CAChC,OAAAF,EAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUC,EAAGC,EAAG,CAAED,EAAE,UAAYC,CAAG,GAC1E,SAAUD,EAAGC,EAAG,CAAE,QAASjK,KAAKiK,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGjK,CAAC,IAAGgK,EAAEhK,CAAC,EAAIiK,EAAEjK,CAAC,EAAG,EAC7F+J,EAAcC,EAAGC,CAAC,CAC7B,EACA,OAAO,SAAUD,EAAGC,EAAG,CACnB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5FF,EAAcC,EAAGC,CAAC,EAClB,SAASC,GAAK,CAAE,KAAK,YAAcF,CAAG,CACtCA,EAAE,UAAYC,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKC,EAAG,UAAYD,EAAE,UAAW,IAAIC,EACnF,CACJ,EAAG,EACCskB,EAAYl7B,EAAQ,eAAe,EAAE,UACrCu7B,EAAsB,SAAU9iB,EAAQ,CACxCjC,EAAU+kB,EAAM9iB,CAAM,EACtB,SAAS8iB,EAAKjvB,EAAOkvB,EAAa,CAC9B,IAAInqB,EAAQoH,EAAO,KAAK,IAAI,GAAK,KACjC,OAAApH,EAAM,SAAW,KACjBA,EAAM,YAAcmqB,EACpBnqB,EAAM,MAAQ/E,EACd+E,EAAM,MAAQ/E,EAAM,MACpB+E,EAAM,IAAM/E,EAAM,IAClB+E,EAAM,QAAU/E,EAAM,MAAM,KAAOA,EAAM,IAAI,IAC7C+E,EAAM,SAAWA,EAAM,OAAS,CAAC,EAC1BA,CACX,CACA,OAAAkqB,EAAK,UAAU,SAAW,UAAY,CAClC,MAAO,IAAM,KAAK,YAAc,KAAO,KAAK,MAAM,SAAS,CAC/D,EACAA,EAAK,UAAU,YAAc,SAAUtR,EAAU,CAC7C,KAAK,SAAWA,EAChB,KAAK,SAAS,QAAQ,SAAUjQ,EAAM,CAClCA,EAAK,YAAYiQ,CAAQ,CAC7B,CAAC,CACL,EACAsR,EAAK,UAAU,MAAQ,UAAY,CAC/B,IAAIjvB,EAAQ,KAAK,MAAM,MAAM,EACzB0N,EAAO,IAAIuhB,EAAKjvB,EAAO,KAAK,WAAW,EAC3C,YAAK,SAAS,QAAQ,SAAUmvB,EAAS,CACrCzhB,EAAK,SAAS,KAAKyhB,EAAQ,MAAM,CAAC,CACtC,CAAC,EACDzhB,EAAK,iBAAmB,KAAK,iBACtBA,CACX,EACAuhB,EAAK,UAAU,WAAa,SAAUvhB,EAAM,CACxC,GAAI,MAAK,MAAM,QAAQA,CAAI,EAE3B,CAAA0hB,EAAa1hB,EAAM,KAAK,KAAK,EAE7B,QADIzN,EAAMyN,EAAK,MAAM,IAAKxN,EAASwN,EAAK,MAAM,OACrC,EAAI,EAAGvN,EAAM,GAAI,EAAI,KAAK,SAAS,SACxCA,EAAM,KAAK,SAAS,CAAC,EAAE,MAAM,QAAQF,EAAKC,CAAM,EAC5CC,GAAO,GAFqC,IAEhD,CAGJ,IAAIkvB,EAAa,KAAK,SAAS,CAAC,EAC5BC,EAAgB,EACpB,GAAInvB,GAAO,EAAG,CACV,GAAIkvB,EAAW,MAAM,cAAc3hB,CAAI,EACnC,OAAO2hB,EAAW,WAAW3hB,CAAI,EAEjC4hB,EAAgB,CACxB,CAEA,QADIrvB,EAAMyN,EAAK,MAAM,IAAI,IAAKxN,EAASwN,EAAK,MAAM,IAAI,OAC7CpO,EAAI,EAAGa,EAAM,GAAIb,EAAI,KAAK,SAAS,SACxCa,EAAM,KAAK,SAASb,CAAC,EAAE,MAAM,QAAQW,EAAKC,CAAM,EAC5CC,GAAO,GAFqCb,IAEhD,CAGAa,GAAO,GACPb,IAGJ,QAFIiwB,EAAgB,KAAK,SAAS,OAAO,EAAGjwB,EAAI,EAAGoO,CAAI,EACnD/V,EAAOwI,GAAO,EAAIovB,EAAc,OAAS,EAAIA,EAAc,OACtD95B,EAAI65B,EAAe75B,EAAIkC,EAAMlC,IAClCiY,EAAK,WAAW6hB,EAAc95B,CAAC,CAAC,EAEpC,OAAAiY,EAAK,YAAY,KAAK,QAAQ,EACvBA,EACX,EACAuhB,EAAK,UAAU,aAAe,SAAUjvB,EAAO,CAC3C,OAAOwvB,EAAaxvB,EAAO,KAAK,KAAK,CACzC,EACOivB,CACX,EAAEL,CAAS,EACX,SAASa,EAAahH,EAAOjgB,EAAQ,CACjCigB,EAAM,KAAOjgB,EAAO,IAChBigB,EAAM,KAAO,IACbA,EAAM,QAAUjgB,EAAO,OAC/B,CACA,SAAS4mB,EAAapvB,EAAOwI,EAAQ,CACjCinB,EAAazvB,EAAM,MAAOwI,CAAM,EAChCinB,EAAazvB,EAAM,IAAKwI,CAAM,CAClC,CACA,SAASknB,EAAajH,EAAOjgB,EAAQ,CAC7BigB,EAAM,KAAO,IACbA,EAAM,QAAUjgB,EAAO,QAC3BigB,EAAM,KAAOjgB,EAAO,GACxB,CACA,SAASgnB,EAAaxvB,EAAOwI,EAAQ,CACjCknB,EAAa1vB,EAAM,MAAOwI,CAAM,EAChCknB,EAAa1vB,EAAM,IAAKwI,CAAM,CAClC,CACA5V,EAAQ,KAAOq8B,CAEf,CAAC,EAED,IAAI,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,YAAY,6BAA6B,wBAAwB,qBAAqB,uBAAuB,EAAG,SAASv7B,EAASd,EAASC,EAAO,CACtN,aACA,IAAI8M,EAAQjM,EAAQ,UAAU,EAAE,MAC5Bw6B,EAAWx6B,EAAQ,aAAa,EAAE,SAClCu7B,EAAOv7B,EAAQ,QAAQ,EAAE,KACzBsuB,EAAgBtuB,EAAQ,mBAAmB,EAAE,cAC7CkW,EAAalW,EAAQ,sBAAsB,EAAE,WACjD,SAASi8B,GAAU,CACf,KAAK,UAAY,SAAU1vB,EAAKC,EAAQ0vB,EAAM,CAC1C,IAAIjS,EAAW,KAAK,YAAY1d,CAAG,EACnC,GAAI,CAAC0d,EACD,OAAO,KAEX,QADIyQ,EAAQzQ,EAAS,MACZ/mB,EAAI,EAAGA,EAAIw3B,EAAM,OAAQx3B,IAAK,CACnC,IAAIoJ,EAAQouB,EAAMx3B,CAAC,EAAE,MACrB,GAAIoJ,EAAM,SAASC,EAAKC,CAAM,EAAG,CAC7B,GAAI0vB,GAAQ,GAAK5vB,EAAM,MAAMC,EAAKC,CAAM,GAAK,CAACF,EAAM,QAAQ,EACxD,SAEC,GAAI4vB,GAAQ,IAAM5vB,EAAM,QAAQC,EAAKC,CAAM,GAAK,CAACF,EAAM,QAAQ,EAChE,SAEJ,OAAOouB,EAAMx3B,CAAC,CAClB,CACJ,CACJ,EACA,KAAK,gBAAkB,SAAUoJ,EAAO,CACpC,IAAI/J,EAAQ+J,EAAM,MACd7J,EAAM6J,EAAM,IACZ6vB,EAAY,KAAK,UACjBC,EAAa,CAAC,EAClB75B,EAAM,QAAU,EAChBE,EAAI,QAAU,EACd,QAASS,EAAI,EAAGA,EAAIi5B,EAAU,OAAQj5B,IAAK,CACvC,IAAIuJ,EAAM0vB,EAAUj5B,CAAC,EAAE,MAAM,aAAaoJ,CAAK,EAC/C,GAAIG,GAAO,EAGN,IAAIA,GAAO,GACZ,MAGJ,QADIiuB,EAAQyB,EAAUj5B,CAAC,EAAE,MAChB0I,EAAI,EAAGA,EAAI8uB,EAAM,OAAQ9uB,IAAK,CACnC,IAAIoO,EAAO0gB,EAAM9uB,CAAC,EAElB,GADAa,EAAMuN,EAAK,MAAM,aAAa1N,CAAK,EAC/BG,GAAO,GACP,MAEC,GAAIA,GAAO,EACZ,SAGJ,GAAIA,GAAO,GACP,MAEJ2vB,EAAW,KAAKpiB,CAAI,CACxB,EACJ,CACA,OAAAzX,EAAM,QAAU,EAChBE,EAAI,QAAU,EACP25B,CACX,EACA,KAAK,oBAAsB,SAAU1E,EAAQ,CACzC,GAAI,MAAM,QAAQA,CAAM,EAAG,CACvB,IAAIgD,EAAQ,CAAC,EACbhD,EAAO,QAAQ,SAAUprB,EAAO,CAC5BouB,EAAQA,EAAM,OAAO,KAAK,gBAAgBpuB,CAAK,CAAC,CACpD,EAAG,IAAI,CACX,KAEI,KAAIouB,EAAQ,KAAK,gBAAgBhD,CAAM,EAE3C,OAAOgD,CACX,EACA,KAAK,YAAc,UAAY,CAG3B,QAFIA,EAAQ,CAAC,EACTyB,EAAY,KAAK,UACZj5B,EAAI,EAAGA,EAAIi5B,EAAU,OAAQj5B,IAClC,QAAS0I,EAAI,EAAGA,EAAIuwB,EAAUj5B,CAAC,EAAE,MAAM,OAAQ0I,IAC3C8uB,EAAM,KAAKyB,EAAUj5B,CAAC,EAAE,MAAM0I,CAAC,CAAC,EACxC,OAAO8uB,CACX,EACA,KAAK,gBAAkB,SAAUnuB,EAAKC,EAAQ6vB,EAAMpS,EAAU,CAE1D,GADAA,EAAWA,GAAY,KAAK,YAAY1d,CAAG,EACvC,CAAC0d,EACD,OAAO,KAKX,QAJIqS,EAAW,CACX,IAAK,CAAE,OAAQ,CAAE,CACrB,EACI96B,EAAKwY,EACA9W,EAAI,EAAGA,EAAI+mB,EAAS,MAAM,OAAQ/mB,IAAK,CAC5C8W,EAAOiQ,EAAS,MAAM/mB,CAAC,EACvB,IAAIuJ,EAAMuN,EAAK,MAAM,WAAWzN,EAAKC,CAAM,EAC3C,GAAIC,GAAO,GAAI,CACXjL,EAAM,KACD,QAAQwY,EAAK,MAAM,GAAG,EACtB,UAAUsiB,EAAS,IAAI,OAAQtiB,EAAK,MAAM,MAAM,EACrD,KACJ,SACSvN,IAAQ,EACb,OAAO,KAEX6vB,EAAWtiB,CACf,CAGA,OAFKxY,IACDA,EAAM,KAAK,QAAQwY,EAAK,MAAM,GAAG,EAAE,UAAUsiB,EAAS,IAAI,MAAM,GAChED,GAAQ,GACD76B,EAAI,UAAU,EAAGgL,EAAS8vB,EAAS,IAAI,MAAM,EAC/CD,GAAQ,EACN76B,EAAI,UAAUgL,EAAS8vB,EAAS,IAAI,MAAM,EAE1C96B,CACf,EACA,KAAK,YAAc,SAAU2lB,EAAQoV,EAAe,CAChD,IAAI9B,EAAW,KAAK,UAChBv3B,EAAI,EAKR,IAJIq5B,IACAr5B,EAAIu3B,EAAS,QAAQ8B,CAAa,GAClCr5B,GAAK,KACLA,EAAI,GACHA,EAAGA,EAAIu3B,EAAS,OAAQv3B,IAAK,CAC9B,IAAI+mB,EAAWwQ,EAASv3B,CAAC,EACzB,GAAI+mB,EAAS,MAAM,KAAO9C,GAAU8C,EAAS,IAAI,KAAO9C,EACpD,OAAO8C,EAEN,GAAIA,EAAS,IAAI,IAAM9C,EACxB,OAAO,IAEf,CACA,OAAO,IACX,EACA,KAAK,gBAAkB,SAAUA,EAAQoV,EAAe,CACpD,IAAI9B,EAAW,KAAK,UAChBv3B,EAAI,EAKR,IAJIq5B,IACAr5B,EAAIu3B,EAAS,QAAQ8B,CAAa,GAClCr5B,GAAK,KACLA,EAAI,GACHA,EAAGA,EAAIu3B,EAAS,OAAQv3B,IAAK,CAC9B,IAAI+mB,EAAWwQ,EAASv3B,CAAC,EACzB,GAAI+mB,EAAS,IAAI,KAAO9C,EACpB,OAAO8C,CAEf,CACA,OAAO,IACX,EACA,KAAK,kBAAoB,SAAUoK,EAAOpwB,EAAM,CAE5C,QADIw2B,EAAW,KAAK,UAAWhM,EAAWxqB,EAAOowB,EAAQ,EAChD,EAAI,EAAG,EAAIoG,EAAS,OAAQ,IAAK,CACtC,IAAIxQ,EAAWwQ,EAAS,CAAC,EAAGh4B,EAAMwnB,EAAS,IAAI,IAAK1nB,EAAQ0nB,EAAS,MAAM,IAC3E,GAAIxnB,GAAOwB,EAAM,CACT1B,EAAQ0B,IACJ1B,GAAS8xB,EACT5F,GAAYxqB,EAAO1B,EAEnBksB,EAAW,GAEnB,KACJ,MACShsB,GAAO4xB,IACR9xB,GAAS8xB,EACT5F,GAAYhsB,EAAMF,EAElBksB,GAAYhsB,EAAM4xB,EAAQ,EAEtC,CACA,OAAO5F,CACX,EACA,KAAK,aAAe,SAAUxE,EAAU,CACpC,YAAK,UAAU,KAAKA,CAAQ,EAC5B,KAAK,UAAU,KAAK,SAAUnnB,EAAG6T,EAAG,CAChC,OAAO7T,EAAE,MAAM,IAAM6T,EAAE,MAAM,GACjC,CAAC,EACMsT,CACX,EACA,KAAK,QAAU,SAAUuR,EAAalvB,EAAO,CACzC,IAAImuB,EAAW,KAAK,UAChB+B,EAAQ,GACRxiB,EACAwhB,aAAuBD,EACvBvhB,EAAOwhB,GAEPxhB,EAAO,IAAIuhB,EAAKjvB,EAAOkvB,CAAW,EAClCxhB,EAAK,iBAAmB1N,EAAM,kBAElC,KAAK,qBAAqB0N,EAAK,KAAK,EACpC,IAAI9N,EAAW8N,EAAK,MAAM,IACtB7N,EAAc6N,EAAK,MAAM,OACzB5N,EAAS4N,EAAK,IAAI,IAClB3N,EAAY2N,EAAK,IAAI,OACrByiB,EAAY,KAAK,UAAUvwB,EAAUC,EAAa,CAAC,EACnDuwB,EAAU,KAAK,UAAUtwB,EAAQC,EAAW,EAAE,EAClD,GAAIowB,GAAaC,GAAWD,EACxB,OAAOA,EAAU,WAAWziB,CAAI,EAChCyiB,GAAa,CAACA,EAAU,MAAM,QAAQvwB,EAAUC,CAAW,GAC3D,KAAK,WAAWswB,CAAS,EACzBC,GAAW,CAACA,EAAQ,MAAM,MAAMtwB,EAAQC,CAAS,GACjD,KAAK,WAAWqwB,CAAO,EAC3B,IAAIhC,EAAQ,KAAK,gBAAgB1gB,EAAK,KAAK,EACvC0gB,EAAM,OAAS,IACf,KAAK,YAAYA,CAAK,EACjB1gB,EAAK,kBACN0gB,EAAM,QAAQ,SAAUe,EAAS,CAC7BzhB,EAAK,WAAWyhB,CAAO,CAC3B,CAAC,GAGT,QAASv4B,EAAI,EAAGA,EAAIu3B,EAAS,OAAQv3B,IAAK,CACtC,IAAI+mB,EAAWwQ,EAASv3B,CAAC,EACzB,GAAIkJ,GAAU6d,EAAS,MAAM,IAAK,CAC9BA,EAAS,QAAQjQ,CAAI,EACrBwiB,EAAQ,GACR,KACJ,SACStwB,GAAY+d,EAAS,IAAI,IAAK,CAGnC,GAFAA,EAAS,QAAQjQ,CAAI,EACrBwiB,EAAQ,GACJ,CAACxiB,EAAK,QAAS,CACf,IAAI+gB,EAAeN,EAASv3B,EAAI,CAAC,EACjC,GAAI63B,GAAgBA,EAAa,MAAM,KAAO3uB,EAAQ,CAClD6d,EAAS,MAAM8Q,CAAY,EAC3B,KACJ,CACJ,CACA,KACJ,SACS3uB,GAAU6d,EAAS,MAAM,IAC9B,KAER,CACA,OAAKuS,IACDvS,EAAW,KAAK,aAAa,IAAIuQ,EAAS,KAAK,UAAWxgB,CAAI,CAAC,GAC/D,KAAK,aACL,KAAK,gBAAgBiQ,EAAS,MAAM,IAAKA,EAAS,MAAM,GAAG,EAE3D,KAAK,sBAAsBA,EAAS,MAAM,IAAKA,EAAS,MAAM,GAAG,EACrE,KAAK,UAAY,GACjB,KAAK,QAAQ,aAAc,CAAE,KAAMjQ,EAAM,OAAQ,KAAM,CAAC,EACjDA,CACX,EACA,KAAK,SAAW,SAAU0gB,EAAO,CAC7BA,EAAM,QAAQ,SAAU1gB,EAAM,CAC1B,KAAK,QAAQA,CAAI,CACrB,EAAG,IAAI,CACX,EACA,KAAK,WAAa,SAAUA,EAAM,CAC9B,IAAIiQ,EAAWjQ,EAAK,SAChB9N,EAAW+d,EAAS,MAAM,IAC1B7d,EAAS6d,EAAS,IAAI,IACtBkS,EAAY,KAAK,UACjBzB,EAAQzQ,EAAS,MACrB,GAAIyQ,EAAM,QAAU,EAChByB,EAAU,OAAOA,EAAU,QAAQlS,CAAQ,EAAG,CAAC,UAG/CA,EAAS,MAAM,MAAMjQ,EAAK,IAAI,IAAKA,EAAK,IAAI,MAAM,EAClD0gB,EAAM,IAAI,EACVzQ,EAAS,IAAI,IAAMyQ,EAAMA,EAAM,OAAS,CAAC,EAAE,IAAI,IAC/CzQ,EAAS,IAAI,OAASyQ,EAAMA,EAAM,OAAS,CAAC,EAAE,IAAI,eAGlDzQ,EAAS,MAAM,QAAQjQ,EAAK,MAAM,IAAKA,EAAK,MAAM,MAAM,EACxD0gB,EAAM,MAAM,EACZzQ,EAAS,MAAM,IAAMyQ,EAAM,CAAC,EAAE,MAAM,IACpCzQ,EAAS,MAAM,OAASyQ,EAAM,CAAC,EAAE,MAAM,eAGvC1gB,EAAK,QACL0gB,EAAM,OAAOA,EAAM,QAAQ1gB,CAAI,EAAG,CAAC,MAGvC,CACI,IAAI8gB,EAAc7Q,EAAS,MAAMjQ,EAAK,MAAM,IAAKA,EAAK,MAAM,MAAM,EAClE0gB,EAAQI,EAAY,MACpBJ,EAAM,MAAM,EACZI,EAAY,MAAM,IAAMJ,EAAM,CAAC,EAAE,MAAM,IACvCI,EAAY,MAAM,OAASJ,EAAM,CAAC,EAAE,MAAM,MAC9C,CACK,KAAK,YACF,KAAK,aACL,KAAK,gBAAgBxuB,EAAUE,CAAM,EAErC,KAAK,sBAAsBF,EAAUE,CAAM,GAEnD,KAAK,UAAY,GACjB,KAAK,QAAQ,aAAc,CAAE,KAAM4N,EAAM,OAAQ,QAAS,CAAC,CAC/D,EACA,KAAK,YAAc,SAAU0gB,EAAO,CAEhC,QADIiC,EAAa,CAAC,EACTz5B,EAAI,EAAGA,EAAIw3B,EAAM,OAAQx3B,IAC9By5B,EAAW,KAAKjC,EAAMx3B,CAAC,CAAC,EAE5By5B,EAAW,QAAQ,SAAU3iB,EAAM,CAC/B,KAAK,WAAWA,CAAI,CACxB,EAAG,IAAI,EACP,KAAK,UAAY,EACrB,EACA,KAAK,WAAa,SAAUA,EAAM,CAC9B,KAAK,WAAWA,CAAI,EACpBA,EAAK,SAAS,QAAQ,SAAUyhB,EAAS,CACrCzhB,EAAK,aAAayhB,CAAO,EACzB,KAAK,QAAQA,CAAO,CACxB,EAAG,IAAI,EACHzhB,EAAK,iBAAmB,GACxB,KAAK,QAAQA,EAAK,MAAM,IAAM,EAAGA,EAAK,IAAI,IAAKA,EAAK,iBAAmB,CAAC,EAE5EA,EAAK,SAAW,CAAC,CACrB,EACA,KAAK,YAAc,SAAU0gB,EAAO,CAChCA,EAAM,QAAQ,SAAU1gB,EAAM,CAC1B,KAAK,WAAWA,CAAI,CACxB,EAAG,IAAI,CACX,EACA,KAAK,OAAS,SAAUrK,EAAUitB,EAAa,CAC3C,IAAItwB,EAAOouB,EACX,GAAI/qB,GAAY,KACZrD,EAAQ,IAAIL,EAAM,EAAG,EAAG,KAAK,UAAU,EAAG,CAAC,EACvC2wB,GAAe,OACfA,EAAc,YAEb,OAAOjtB,GAAY,SACxBrD,EAAQ,IAAIL,EAAM0D,EAAU,EAAGA,EAAU,KAAK,QAAQA,CAAQ,EAAE,MAAM,UAEjE,QAASA,EACdrD,EAAQL,EAAM,WAAW0D,EAAUA,CAAQ,MAE1C,IAAI,MAAM,QAAQA,CAAQ,EAC3B,OAAA+qB,EAAQ,CAAC,EACT/qB,EAAS,QAAQ,SAAUrD,EAAO,CAC9BouB,EAAQA,EAAM,OAAO,KAAK,OAAOpuB,CAAK,CAAC,CAC3C,EAAG,IAAI,EACAouB,EAGPpuB,EAAQqD,EAEZ+qB,EAAQ,KAAK,oBAAoBpuB,CAAK,EAEtC,QADIuwB,EAAiBnC,EACdA,EAAM,QAAU,GAChBzuB,EAAM,cAAcyuB,EAAM,CAAC,EAAE,MAAOpuB,EAAM,KAAK,EAAI,GACnDL,EAAM,cAAcyuB,EAAM,CAAC,EAAE,IAAKpuB,EAAM,GAAG,EAAI,GAClD,KAAK,YAAYouB,CAAK,EACtBA,EAAQ,KAAK,oBAAoBpuB,CAAK,EAQ1C,GANIswB,GAAe,GACf,KAAK,YAAYlC,CAAK,EAGtB,KAAK,YAAYA,CAAK,EAEtBmC,EAAe,OACf,OAAOA,CACf,EACA,KAAK,YAAc,SAAU1V,EAAQ2V,EAAc,CAC/C,MAAO,CAAC,CAAC,KAAK,YAAY3V,EAAQ2V,CAAY,CAClD,EACA,KAAK,cAAgB,SAAU3V,EAAQ2V,EAAc,CACjD,IAAI7S,EAAW,KAAK,YAAY9C,EAAQ2V,CAAY,EACpD,OAAO7S,EAAWA,EAAS,IAAI,IAAM9C,CACzC,EACA,KAAK,gBAAkB,SAAUA,EAAQ2V,EAAc,CACnD,IAAI7S,EAAW,KAAK,YAAY9C,EAAQ2V,CAAY,EACpD,OAAO7S,EAAWA,EAAS,MAAM,IAAM9C,CAC3C,EACA,KAAK,mBAAqB,SAAU8C,EAAU7d,EAAQC,EAAWH,EAAUC,EAAa,CAChFD,GAAY,OACZA,EAAW+d,EAAS,MAAM,KAC1B9d,GAAe,OACfA,EAAc,GACdC,GAAU,OACVA,EAAS6d,EAAS,IAAI,KACtB5d,GAAa,OACbA,EAAY,KAAK,QAAQD,CAAM,EAAE,QACrC,IAAIjH,EAAM,KAAK,IACX43B,EAAW,GACf,OAAA9S,EAAS,KAAK,SAAUuR,EAAajvB,EAAKC,EAAQwwB,EAAY,CAC1D,GAAI,EAAAzwB,EAAML,GAEV,IAAIK,GAAOL,EAAU,CACjB,GAAIM,EAASL,EACT,OACJ6wB,EAAa,KAAK,IAAI7wB,EAAa6wB,CAAU,CACjD,CACIxB,GAAe,KACfuB,GAAYvB,EAGZuB,GAAY53B,EAAI,QAAQoH,CAAG,EAAE,UAAUywB,EAAYxwB,CAAM,EAEjE,EAAGJ,EAAQC,CAAS,EACb0wB,CACX,EACA,KAAK,eAAiB,SAAUxwB,EAAKF,EAAWH,EAAUC,EAAa,CACnE,IAAI8d,EAAW,KAAK,YAAY1d,CAAG,EACnC,GAAK0d,EAMD,OAAO,KAAK,mBAAmBA,EAAU1d,EAAKF,EAAWH,EAAUC,CAAW,EAL9E,IAAInI,EACJ,OAAAA,EAAO,KAAK,IAAI,QAAQuI,CAAG,EACpBvI,EAAK,UAAUmI,GAAe,EAAGE,GAAarI,EAAK,MAAM,CAKxE,EACA,KAAK,eAAiB,UAAY,CAC9B,IAAIi5B,EAAK,CAAC,EACV,OAAAA,EAAK,KAAK,UAAU,IAAI,SAAUhT,EAAU,CACxC,IAAIyQ,EAAQzQ,EAAS,MAAM,IAAI,SAAUjQ,EAAM,CAC3C,OAAOA,EAAK,MAAM,CACtB,CAAC,EACD,OAAO,IAAIwgB,EAASyC,EAAIvC,CAAK,CACjC,CAAC,EACMuC,CACX,EACA,KAAK,WAAa,SAAUC,EAAa,CACrC,IAAIlqB,EAAY,KAAK,UACjB1G,EAAQ0G,EAAU,SAAS,EAC3BgH,EACAmjB,EACJ,GAAI7wB,EAAM,QAAQ,EAAG,CACjB,IAAIyI,EAASzI,EAAM,MAEnB,GADA0N,EAAO,KAAK,UAAUjF,EAAO,IAAKA,EAAO,MAAM,EAC3CiF,EAAM,CACN,KAAK,WAAWA,CAAI,EACpB,MACJ,SACSkjB,EAAa,CAClB,IAAIjT,EAAW,KAAK,YAAYlV,EAAO,GAAG,EACtCkV,GACA,KAAK,YAAYA,EAAS,KAAK,EACnC,MACJ,MACSkT,EAAa,KAAK,oBAAoBpoB,CAAM,GAC7CzI,EAAM,aAAa6wB,CAAU,GAAK,EAClC7wB,EAAM,IAAM6wB,GAGZ7wB,EAAM,MAAQ6wB,EACd7wB,EAAM,MAAM,SACZA,EAAM,IAAI,WAGT6wB,EAAa,KAAK,oBAAoB,CAAE,IAAKpoB,EAAO,IAAK,OAAQA,EAAO,OAAS,CAAE,CAAC,IACrFzI,EAAM,aAAa6wB,CAAU,GAAK,EAClC7wB,EAAM,IAAM6wB,EAEZ7wB,EAAM,MAAQ6wB,EAClB7wB,EAAM,MAAM,UAGZA,EAAQ,KAAK,oBAAoByI,EAAO,IAAKA,EAAO,MAAM,GAAKzI,CAEvE,KACK,CACD,IAAIouB,EAAQ,KAAK,gBAAgBpuB,CAAK,EACtC,GAAI4wB,GAAexC,EAAM,OAAQ,CAC7B,KAAK,YAAYA,CAAK,EACtB,MACJ,MACSA,EAAM,QAAU,IACrB1gB,EAAO0gB,EAAM,CAAC,EAEtB,CAGA,GAFK1gB,IACDA,EAAO,KAAK,UAAU1N,EAAM,MAAM,IAAKA,EAAM,MAAM,MAAM,GACzD0N,GAAQA,EAAK,MAAM,SAAS,GAAK1N,EAAM,SAAS,EAAG,CACnD,KAAK,WAAW0N,CAAI,EACpB,MACJ,CACA,IAAIwhB,EAAc,MAClB,GAAI,CAAClvB,EAAM,YAAY,EAAG,CAEtB,GADAkvB,EAAc,KAAK,aAAalvB,CAAK,EACjCkvB,EAAY,OAAS,EACrB,OACJA,EAAcA,EAAY,KAAK,EAAE,UAAU,EAAG,CAAC,EAAI,IACvD,CACA,KAAK,QAAQA,EAAalvB,CAAK,CACnC,EACA,KAAK,oBAAsB,SAAUC,EAAKC,EAAQqW,EAAK,CACnD,IAAIkO,EAAW,IAAIzC,EAAc,KAAM/hB,EAAKC,CAAM,EAC9CmgB,EAAQoE,EAAS,gBAAgB,EACjC7iB,EAAOye,GAASA,EAAM,KAC1B,GAAIA,GAAS,kBAAkB,KAAKze,CAAI,EAAG,CACvCA,EAAOA,EAAK,MAAM,gBAAgB,EAAE,CAAC,EACjCA,GAAQ,YACRA,GAAQ,qBACZ,IAAI/D,EAAK,IAAI,OAAO+D,CAAI,EACpB5B,EAAQ,IAAIL,EAChB,GAAI4W,GAAO,EAAG,CACV,GACI8J,EAAQoE,EAAS,aAAa,QACzBpE,GAASxiB,EAAG,KAAKwiB,EAAM,IAAI,GACpCA,EAAQoE,EAAS,YAAY,CACjC,CACAzkB,EAAM,MAAM,IAAMykB,EAAS,mBAAmB,EAC9CzkB,EAAM,MAAM,OAASykB,EAAS,sBAAsB,EAAIpE,EAAM,MAAM,OACpEoE,EAAW,IAAIzC,EAAc,KAAM/hB,EAAKC,CAAM,EAC9C,IAAI4wB,EAAY,KAAK,SAASrM,EAAS,IAAI,EAC3C,GAAIlO,GAAO,GAAI,CACX,IAAIjW,EAAU,GACd,EAEI,IADA+f,EAAQoE,EAAS,YAAY,EACzBnkB,GAAW,GAAI,CACf,IAAIgV,EAAQ,KAAK,SAASmP,EAAS,IAAI,EACnCqM,EAAU,SAAS,IAAMxb,EAAM,SAAS,IACxChV,EAAUmkB,EAAS,KAC3B,SACSA,EAAS,KAAOnkB,EACrB,YAEC+f,GAASxiB,EAAG,KAAKwiB,EAAM,IAAI,GACpCA,EAAQoE,EAAS,aAAa,CAClC,MAEIpE,EAAQoE,EAAS,gBAAgB,EAGrC,OAFAzkB,EAAM,IAAI,IAAMykB,EAAS,mBAAmB,EAC5CzkB,EAAM,IAAI,OAASykB,EAAS,sBAAsB,EAC9CzkB,EAAM,MAAM,KAAOA,EAAM,IAAI,KAAOA,EAAM,MAAM,OAASA,EAAM,IAAI,OACnE,OACGA,CACX,CACJ,EACA,KAAK,QAAU,SAAUJ,EAAUE,EAAQixB,EAAOC,EAAM,CAChDD,GAAS,OACTA,EAAQ,KACZ,IAAIE,EAAc,KAAK,YACvB,GAAKA,EAEL,CAAAnxB,EAASA,GAAU,KAAK,UAAU,EAClCF,EAAWA,GAAY,EACvB,QAASK,EAAML,EAAUK,EAAMH,EAAQG,IAGnC,GAFIgxB,EAAYhxB,CAAG,GAAK,OACpBgxB,EAAYhxB,CAAG,EAAI,KAAK,cAAcA,CAAG,GACzCgxB,EAAYhxB,CAAG,GAAK,SAEpB,EAAA+wB,GAAQ,CAACA,EAAK/wB,CAAG,GAErB,KAAID,EAAQ,KAAK,mBAAmBC,CAAG,EACnCD,GAASA,EAAM,YAAY,GACxBA,EAAM,IAAI,KAAOF,GACjBE,EAAM,MAAM,KAAOJ,IACtBK,EAAMD,EAAM,IAAI,IAChBA,EAAM,iBAAmB+wB,EACzB,KAAK,QAAQ,MAAO/wB,CAAK,IAGrC,EACA,KAAK,YAAc,SAAUoc,EAAO,CAEhC,IADA,KAAK,QAAQ,EACNA,KAAU,GACb,KAAK,OAAO,KAAM,EAAK,CAC/B,EACA,KAAK,gBAAkB,UAAY,CAC/B,IAAI7b,EAAU,KACd,KAAK,QAAQ,KAAM,KAAM,KAAM,SAAUN,EAAK,CAE1C,QADIyf,EAASnf,EAAQ,UAAUN,CAAG,EACzBrJ,EAAI,EAAGA,EAAI8oB,EAAO,OAAQ9oB,IAAK,CACpC,IAAIypB,EAAQX,EAAO9oB,CAAC,EACpB,GAAI,EAAAypB,EAAM,MAAQ,QAAU,QAAQ,KAAKA,EAAM,KAAK,GAEpD,MAAI,YAAU,KAAKA,EAAM,IAAI,CAGjC,CACJ,CAAC,CACL,EACA,KAAK,YAAc,CACf,OAAU,EACV,UAAa,EACb,aAAgB,CACpB,EACA,KAAK,WAAa,YAClB,KAAK,aAAe,SAAUtmB,EAAO,CACjC,GAAI,CAAC,KAAK,YAAYA,CAAK,EACvB,MAAM,IAAI,MAAM,uBAAyBA,EAAQ,IAAM,OAAO,KAAK,KAAK,WAAW,EAAE,KAAK,IAAI,EAAI,GAAG,EACzG,GAAI,KAAK,YAAcA,EAEvB,MAAK,WAAaA,EACdA,GAAS,UACT,KAAK,OAAO,EAChB,IAAIqY,EAAO,KAAK,UAChB,KAAK,YAAY,IAAI,EACrB,KAAK,YAAYA,CAAI,EACzB,EACA,KAAK,YAAc,SAAU8e,EAAU,CACnC,GAAI,KAAK,WAAaA,EAMtB,IAJA,KAAK,UAAYA,EACjB,KAAK,IAAI,SAAU,KAAK,kBAAkB,EAC1C,KAAK,IAAI,kBAAmB,KAAK,2BAA2B,EAC5D,KAAK,QAAQ,kBAAkB,EAC3B,CAACA,GAAY,KAAK,YAAc,SAAU,CAC1C,KAAK,YAAc,KACnB,MACJ,CACA,KAAK,YAAc,CAAC,EACpB,KAAK,cAAgBA,EAAS,cAAc,KAAKA,EAAU,KAAM,KAAK,UAAU,EAChF,KAAK,mBAAqBA,EAAS,mBAAmB,KAAKA,EAAU,KAAM,KAAK,UAAU,EAC1F,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1D,KAAK,4BAA8B,KAAK,2BAA2B,KAAK,IAAI,EAC5E,KAAK,GAAG,SAAU,KAAK,kBAAkB,EACzC,KAAK,GAAG,kBAAmB,KAAK,2BAA2B,EAC/D,EACA,KAAK,uBAAyB,SAAUjxB,EAAKkxB,EAAe,CACxD,IAAIC,EAAK,KAAK,YACd,GAAI,CAACA,GAAOD,GAAiBC,EAAGnxB,CAAG,EAC/B,MAAO,CAAC,EAEZ,QADIrJ,EAAIqJ,EAAM,EAAGoxB,EACVz6B,GAAK,GAAG,CACX,IAAImjB,EAAIqX,EAAGx6B,CAAC,EAGZ,GAFImjB,GAAK,OACLA,EAAIqX,EAAGx6B,CAAC,EAAI,KAAK,cAAcA,CAAC,GAChCmjB,GAAK,QAAS,CACd,IAAI/Z,EAAQ,KAAK,mBAAmBpJ,CAAC,EAGrC,GAFKy6B,IACDA,EAAarxB,GACbA,GAASA,EAAM,IAAI,KAAOC,EAC1B,KACR,CACArJ,GACJ,CACA,MAAO,CACH,MAAOA,IAAM,IAAMoJ,EACnB,WAAYqxB,CAChB,CACJ,EACA,KAAK,kBAAoB,SAAUpxB,EAAKrE,EAAG,CACnCA,aAAagO,IACbhO,EAAIA,EAAE,UACV,IAAIlD,EAAU,CACV,SAAUkD,EAAE,SACZ,IAAKA,EAAE,SAAWA,EAAE,QACpB,SAAUA,EAAE,MAChB,EACIoE,EAAQ,KAAK,kBAAkBC,EAAKvH,CAAO,EAC/C,GAAI,CAACsH,EAAO,CACR,IAAIvH,EAAMmD,EAAE,QAAUA,EAAE,WACpBnD,GAAM,kBAAkB,KAAKA,EAAG,SAAS,IACzCA,EAAG,WAAa,eACxB,CACJ,EACA,KAAK,kBAAoB,SAAUwH,EAAKvH,EAAS,CAC7C,GAAK,KAAK,cAEV,KAAIkJ,EAAO,KAAK,cAAc3B,CAAG,EAC7BvI,EAAO,KAAK,QAAQuI,CAAG,EACvBsW,EAAM3U,IAAS,MAAQ,GAAK,EAC5B8L,EAAO,KAAK,UAAUzN,EAAKsW,IAAQ,GAAK,EAAI7e,EAAK,OAAQ6e,CAAG,EAChE,GAAI7I,EACA,OAAIhV,EAAQ,UAAYA,EAAQ,IAC5B,KAAK,WAAWgV,CAAI,EAEpB,KAAK,WAAWA,CAAI,EACjBA,EAEX,IAAI1N,EAAQ,KAAK,mBAAmBC,EAAK,EAAI,EAC7C,GAAID,GAAS,CAACA,EAAM,YAAY,IAC5B0N,EAAO,KAAK,UAAU1N,EAAM,MAAM,IAAKA,EAAM,MAAM,OAAQ,CAAC,EACxD0N,GAAQ1N,EAAM,QAAQ0N,EAAK,KAAK,GAChC,YAAK,WAAWA,CAAI,EACbA,EAGf,GAAIhV,EAAQ,SAAU,CAClB,IAAI2D,EAAO,KAAK,uBAAuB4D,CAAG,EAC1C,GAAI5D,EAAK,MACL,IAAIuD,EAAWvD,EAAK,MAAM,MAAM,IAAM,EAClCyD,EAASzD,EAAK,MAAM,IAAI,IAEhC,KAAK,QAAQuD,EAAUE,EAAQpH,EAAQ,IAAM,IAAQ,CAAC,CAC1D,MACSA,EAAQ,UACboH,EAASE,EAAQA,EAAM,IAAI,IAAM,KAAK,UAAU,EAChD,KAAK,QAAQC,EAAM,EAAGH,EAAQpH,EAAQ,IAAM,IAAQ,CAAC,GAEhDsH,IACDtH,EAAQ,MACRsH,EAAM,iBAAmB,KAC7B,KAAK,QAAQ,MAAOA,CAAK,GAE7B,OAAOA,EACX,EACA,KAAK,iBAAmB,SAAUsxB,EAAc,CAC5C,IAAIrxB,EAAM,KAAK,UAAU,UAAU,EAAE,IACrCA,EAAM,KAAK,gBAAgBA,CAAG,EAC9B,IAAID,EAAQ,KAAK,kBAAkBC,EAAK,CAAC,CAAC,EAC1C,GAAI,CAAAD,EAEJ,KAAI3D,EAAO,KAAK,uBAAuB4D,EAAK,EAAI,EAEhD,GADAD,EAAQ3D,EAAK,OAASA,EAAK,WACvB2D,EAAO,CACPC,EAAMD,EAAM,MAAM,IAClB,IAAI0N,EAAO,KAAK,UAAUzN,EAAK,KAAK,QAAQA,CAAG,EAAE,OAAQ,CAAC,EACtDyN,EACA,KAAK,WAAWA,CAAI,EAGpB,KAAK,QAAQ,MAAO1N,CAAK,CAEjC,EACJ,EACA,KAAK,kBAAoB,SAAU+a,EAAO,CACtC,IAAI1a,EAAW0a,EAAM,MAAM,IACvBplB,EAAMolB,EAAM,IAAI,IAAM1a,EAC1B,GAAI1K,IAAQ,EACR,KAAK,YAAY0K,CAAQ,EAAI,aAExB0a,EAAM,QAAU,SACrB,KAAK,YAAY,OAAO1a,EAAU1K,EAAM,EAAG,IAAI,MAE9C,CACD,IAAI2rB,EAAO,MAAM3rB,EAAM,CAAC,EACxB2rB,EAAK,QAAQjhB,EAAU,CAAC,EACxB,KAAK,YAAY,OAAO,MAAM,KAAK,YAAaihB,CAAI,CACxD,CACJ,EACA,KAAK,2BAA6B,SAAU1lB,EAAG,CAC3C,IAAI0iB,EAAO1iB,EAAE,KACT0iB,EAAK,OAASA,EAAK,MACf,KAAK,YAAY,OAASA,EAAK,OAC/B,KAAK,YAAY,OAAOA,EAAK,MAAO,KAAK,YAAY,MAAM,CAEvE,CACJ,CACA1rB,EAAQ,QAAU+8B,CAElB,CAAC,EAED,IAAI,OAAO,iCAAiC,CAAC,UAAU,UAAU,SAAS,qBAAqB,WAAW,EAAG,SAASj8B,EAASd,EAASC,EAAO,CAAC,aAChJ,IAAImvB,EAAgBtuB,EAAQ,mBAAmB,EAAE,cAC7CiM,EAAQjM,EAAQ,UAAU,EAAE,MAChC,SAAS69B,GAAe,CACpB,KAAK,oBAAsB,SAAU38B,EAAUkM,EAAK,CAChD,GAAIlM,EAAS,QAAU,EACnB,OAAO,KACX,IAAI48B,EAAmB1wB,GAAO,KAAK,QAAQlM,EAAS,GAAG,EAAE,OAAOA,EAAS,OAAS,CAAC,EACnF,GAAI48B,GAAoB,GACpB,OAAO,KACX,IAAIjS,EAAQiS,EAAiB,MAAM,uBAAuB,EAC1D,OAAKjS,EAEDA,EAAM,CAAC,EACA,KAAK,oBAAoBA,EAAM,CAAC,EAAG3qB,CAAQ,EAE3C,KAAK,oBAAoB2qB,EAAM,CAAC,EAAG3qB,CAAQ,EAJ3C,IAKf,EACA,KAAK,gBAAkB,SAAUuT,EAAK,CAClC,IAAIzQ,EAAO,KAAK,QAAQyQ,EAAI,GAAG,EAC3Bwd,EAAS,GAAM3lB,EACfc,EAAMpJ,EAAK,OAAOyQ,EAAI,OAAS,CAAC,EAChCoX,EAAQze,GAAOA,EAAI,MAAM,uBAAuB,EAOpD,GANKye,IACDze,EAAMpJ,EAAK,OAAOyQ,EAAI,MAAM,EAC5BA,EAAM,CAAE,IAAKA,EAAI,IAAK,OAAQA,EAAI,OAAS,CAAE,EAC7CoX,EAAQze,GAAOA,EAAI,MAAM,uBAAuB,EAChD6kB,EAAS,IAET,CAACpG,EACD,OAAO,KACX,GAAIA,EAAM,CAAC,EAAG,CACV,IAAIsR,EAAa,KAAK,oBAAoBtR,EAAM,CAAC,EAAGpX,CAAG,EACvD,GAAI,CAAC0oB,EACD,OAAO,KACX7wB,EAAQL,EAAM,WAAWwI,EAAK0oB,CAAU,EACnClL,IACD3lB,EAAM,IAAI,SACVA,EAAM,MAAM,UAEhBA,EAAM,OAASA,EAAM,GACzB,KACK,CACD,IAAI6wB,EAAa,KAAK,oBAAoBtR,EAAM,CAAC,EAAGpX,CAAG,EACvD,GAAI,CAAC0oB,EACD,OAAO,KACX7wB,EAAQL,EAAM,WAAWkxB,EAAY1oB,CAAG,EACnCwd,IACD3lB,EAAM,MAAM,SACZA,EAAM,IAAI,UAEdA,EAAM,OAASA,EAAM,KACzB,CACA,OAAOA,CACX,EACA,KAAK,yBAA2B,SAAUmI,EAAKspB,EAAa,CACxD,IAAI/5B,EAAO,KAAK,QAAQyQ,EAAI,GAAG,EAC3BupB,EAAiB,wBACjB5wB,EAAM,CAAC2wB,GAAe/5B,EAAK,OAAOyQ,EAAI,OAAS,CAAC,EAChDoX,EAAQze,GAAOA,EAAI,MAAM4wB,CAAc,EAS3C,GARKnS,IACDze,GAAO2wB,IAAgB,QAAaA,IAAgB/5B,EAAK,OAAOyQ,EAAI,MAAM,EAC1EA,EAAM,CACF,IAAKA,EAAI,IACT,OAAQA,EAAI,OAAS,CACzB,EACAoX,EAAQze,GAAOA,EAAI,MAAM4wB,CAAc,GAEvC,CAACnS,EACD,OAAO,KACX,IAAI+G,EAAa,IAAI3mB,EAAMwI,EAAI,IAAKA,EAAI,OAAS,EAAGA,EAAI,IAAKA,EAAI,MAAM,EACnE0oB,EAAatR,EAAM,CAAC,EAAI,KAAK,oBAAoBA,EAAM,CAAC,EAAGpX,CAAG,EAC5D,KAAK,oBAAoBoX,EAAM,CAAC,EAAGpX,CAAG,EAC5C,GAAI,CAAC0oB,EACD,MAAO,CAACvK,CAAU,EACtB,IAAIC,EAAW,IAAI5mB,EAAMkxB,EAAW,IAAKA,EAAW,OAAQA,EAAW,IAAKA,EAAW,OAAS,CAAC,EACjG,MAAO,CAACvK,EAAYC,CAAQ,CAChC,EACA,KAAK,UAAY,CACb,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,GACT,EACA,KAAK,oBAAsB,SAAU5B,EAAS/vB,EAAU+8B,EAAQ,CAC5D,IAAIC,EAAc,KAAK,UAAUjN,CAAO,EACpCoM,EAAQ,EACRtM,EAAW,IAAIzC,EAAc,KAAMptB,EAAS,IAAKA,EAAS,MAAM,EAChEyrB,EAAQoE,EAAS,gBAAgB,EAGrC,GAFKpE,IACDA,EAAQoE,EAAS,YAAY,GAC7B,EAACpE,EAEL,CAAKsR,IACDA,EAAS,IAAI,OAAO,QAChBtR,EAAM,KAAK,QAAQ,IAAK,KAAK,EAAE,QAAQ,SAAU,QAAQ,EACpD,QAAQ,cAAe,qBAAqB,EAC5C,QAAQ,WAAY,eAAe,EACtC,IAAI,GAId,QAFIwR,EAAaj9B,EAAS,OAAS6vB,EAAS,sBAAsB,EAAI,EAClE1uB,EAAQsqB,EAAM,QACL,CACT,KAAOwR,GAAc,GAAG,CACpB,IAAI/wB,EAAM/K,EAAM,OAAO87B,CAAU,EACjC,GAAI/wB,GAAO8wB,GAEP,GADAb,GAAS,EACLA,GAAS,EACT,MAAO,CAAE,IAAKtM,EAAS,mBAAmB,EACtC,OAAQoN,EAAapN,EAAS,sBAAsB,CAAE,OAGzD3jB,GAAO6jB,IACZoM,GAAS,GAEbc,GAAc,CAClB,CACA,GACIxR,EAAQoE,EAAS,aAAa,QACzBpE,GAAS,CAACsR,EAAO,KAAKtR,EAAM,IAAI,GACzC,GAAIA,GAAS,KACT,MACJtqB,EAAQsqB,EAAM,MACdwR,EAAa97B,EAAM,OAAS,CAChC,CACA,OAAO,KACX,EACA,KAAK,oBAAsB,SAAU4uB,EAAS/vB,EAAU+8B,EAAQ,CAC5D,IAAIG,EAAiB,KAAK,UAAUnN,CAAO,EACvCoM,EAAQ,EACRtM,EAAW,IAAIzC,EAAc,KAAMptB,EAAS,IAAKA,EAAS,MAAM,EAChEyrB,EAAQoE,EAAS,gBAAgB,EAGrC,GAFKpE,IACDA,EAAQoE,EAAS,YAAY,GAC7B,EAACpE,EAEL,CAAKsR,IACDA,EAAS,IAAI,OAAO,QAChBtR,EAAM,KAAK,QAAQ,IAAK,KAAK,EAAE,QAAQ,SAAU,QAAQ,EACpD,QAAQ,sBAAuB,qBAAqB,EACpD,QAAQ,UAAW,eAAe,EACrC,IAAI,GAGd,QADIwR,EAAaj9B,EAAS,OAAS6vB,EAAS,sBAAsB,IACrD,CAGT,QAFI1uB,EAAQsqB,EAAM,MACd0R,EAAch8B,EAAM,OACjB87B,EAAaE,GAAa,CAC7B,IAAIjxB,EAAM/K,EAAM,OAAO87B,CAAU,EACjC,GAAI/wB,GAAOgxB,GAEP,GADAf,GAAS,EACLA,GAAS,EACT,MAAO,CAAE,IAAKtM,EAAS,mBAAmB,EACtC,OAAQoN,EAAapN,EAAS,sBAAsB,CAAE,OAGzD3jB,GAAO6jB,IACZoM,GAAS,GAEbc,GAAc,CAClB,CACA,GACIxR,EAAQoE,EAAS,YAAY,QACxBpE,GAAS,CAACsR,EAAO,KAAKtR,EAAM,IAAI,GACzC,GAAIA,GAAS,KACT,MACJwR,EAAa,CACjB,CACA,OAAO,KACX,EACA,KAAK,gBAAkB,SAAU1pB,EAAK,CAClC,IAAIsc,EAAW,IAAIzC,EAAc,KAAM7Z,EAAI,IAAKA,EAAI,MAAM,EACtDkY,EAAQ,KAAK,aAAaoE,CAAQ,EACtC,GAAKpE,EAEL,KAAI2R,EAAYvN,EAAS,aAAa,EACtC,OAAIuN,EAAU,QAAU,IACb,KAAK,gBAAgBvN,EAAUpE,CAAK,EAGpC,KAAK,gBAAgBoE,EAAUpE,CAAK,EAEnD,EACA,KAAK,aAAe,SAAUoE,EAAU,CACpC,IAAIpE,EAAQoE,EAAS,gBAAgB,EACjCwN,EAAQ,GACRC,EAAW,GACf,GAAI7R,GAASA,EAAM,KAAK,QAAQ,UAAU,IAAM,GAC5C,GACQ6R,EACA7R,EAAQoE,EAAS,aAAa,EAE9BpE,EAAQoE,EAAS,YAAY,EAC7BpE,IACIA,EAAM,QAAU,KAChB6R,EAAW,GAEN7R,EAAM,KAAK,QAAQ,UAAU,IAAM,KACxC4R,EAAQ,WAGX5R,GAAS,CAAC4R,GAEvB,OAAO5R,CACX,EACA,KAAK,gBAAkB,SAAUoE,EAAUpE,EAAO,CAC9C,IAAI2R,EACAG,EAAa9R,EAAM,MACnBvnB,EAAMunB,EAAM,MACZ0Q,EAAQ,EACRqB,EAAe,IAAIzyB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI,CAAC,EACjKpE,EAAQoE,EAAS,YAAY,EAC7B,IAAI4N,EAAc,IAAI1yB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAIpE,EAAM,MAAM,MAAM,EAC7KiS,EAAkB,GACtB,EAAG,CAEC,GADAN,EAAY3R,EACR2R,EAAU,KAAK,QAAQ,WAAW,IAAM,IAAM,CAACM,EAAiB,CAChE,IAAIC,EAAa,IAAI5yB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI,CAAC,EAC/J6N,EAAkB,EACtB,CAEA,GADAjS,EAAQoE,EAAS,YAAY,EACzBpE,EAAO,CACP,GAAIA,EAAM,QAAU,KAAO,CAACiS,EAAiB,CACzC,IAAIC,EAAa,IAAI5yB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI,CAAC,EAC/J6N,EAAkB,EACtB,CACA,GAAIjS,EAAM,KAAK,QAAQ,UAAU,IAAM,IAEnC,GADA8R,EAAa9R,EAAM,MACfvnB,IAAQq5B,GACR,GAAIH,EAAU,QAAU,IACpBjB,YAEKiB,EAAU,QAAU,OACzBjB,IACIA,EAAQ,GAAG,CACXtM,EAAS,aAAa,EACtB,IAAI+N,EAAgB,IAAI7yB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI,CAAC,EAClKpE,EAAQoE,EAAS,YAAY,EAC7B,IAAIgO,EAAe,IAAI9yB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAIpE,EAAM,MAAM,MAAM,EAIlL,GAHIA,EAAM,KAAK,QAAQ,WAAW,IAAM,KACpCA,EAAQoE,EAAS,YAAY,GAE7BpE,GAASA,EAAM,QAAU,IACzB,IAAIqS,EAAc,IAAI/yB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI,CAAC,MAGhK,OAER,WAIH3rB,IAAQq5B,GAAc9R,EAAM,QAAU,OAC3C0Q,IACIA,EAAQ,GACR,IAAIyB,EAAgB,IAAI7yB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI,CAAC,EAC9JgO,EAAeD,EACfE,EAAcD,EACdF,EAAa,IAAI5yB,EAAM0yB,EAAY,IAAI,IAAKA,EAAY,IAAI,OAAQA,EAAY,IAAI,IAAKA,EAAY,IAAI,OAAS,CAAC,CAGnI,CACJ,OAAShS,GAAS0Q,GAAS,GAC3B,GAAIqB,GAAgBG,GAAcC,GAAiBE,GAAeL,GAAeI,EAC7E,MAAO,CACH,QAAS,IAAI9yB,EAAMyyB,EAAa,MAAM,IAAKA,EAAa,MAAM,OAAQG,EAAW,IAAI,IAAKA,EAAW,IAAI,MAAM,EAC/G,SAAU,IAAI5yB,EAAM6yB,EAAc,MAAM,IAAKA,EAAc,MAAM,OAAQE,EAAY,IAAI,IAAKA,EAAY,IAAI,MAAM,EACpH,YAAaL,EACb,aAAcI,CAClB,CAER,EACA,KAAK,gBAAkB,SAAUhO,EAAUpE,EAAO,CAC9C,IAAI2R,EAAYvN,EAAS,gBAAgB,EACrC3rB,EAAMunB,EAAM,MACZ0Q,EAAQ,EACRnxB,EAAW6kB,EAAS,mBAAmB,EACvC5kB,EAAc4kB,EAAS,sBAAsB,EAC7C1kB,EAAYF,EAAc,EAC1B2yB,EAAgB,IAAI7yB,EAAMC,EAAUC,EAAaD,EAAUG,CAAS,EACxE0kB,EAAS,YAAY,EACrB,IAAIgO,EAAe,IAAI9yB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAIpE,EAAM,MAAM,MAAM,EAIlL,GAHIA,EAAM,KAAK,QAAQ,WAAW,IAAM,KACpCA,EAAQoE,EAAS,YAAY,GAE7B,GAACpE,GAASA,EAAM,QAAU,KAE9B,KAAIqS,EAAc,IAAI/yB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI,CAAC,EAChKA,EAAS,aAAa,EACtBA,EAAS,aAAa,EACtB,EAMI,IALApE,EAAQ2R,EACRpyB,EAAW6kB,EAAS,mBAAmB,EACvC5kB,EAAc4kB,EAAS,sBAAsB,EAC7C1kB,EAAYF,EAAcwgB,EAAM,MAAM,OACtC2R,EAAYvN,EAAS,aAAa,EAC9BpE,GACA,GAAIA,EAAM,KAAK,QAAQ,UAAU,IAAM,IACnC,GAAIvnB,IAAQunB,EAAM,MACd,GAAI2R,EAAU,QAAU,KAEpB,GADAjB,IACIA,EAAQ,EAAG,CACX,IAAIsB,EAAc,IAAI1yB,EAAMC,EAAUC,EAAaD,EAAUG,CAAS,EAClEqyB,EAAe,IAAIzyB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI,CAAC,EACjK,GACIpE,EAAQoE,EAAS,YAAY,QACxBpE,GAASA,EAAM,QAAU,KAClC,IAAIkS,EAAa,IAAI5yB,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI,CAAC,CACnK,OAEKuN,EAAU,QAAU,MACzBjB,YAIH1Q,EAAM,QAAU,KAAM,CAG3B,QAFIsS,EAAY,EACZC,EAAWZ,EACRY,GAAU,CACb,GAAIA,EAAS,KAAK,QAAQ,UAAU,IAAM,IAAMA,EAAS,QAAU95B,EAAK,CACpEi4B,IACA,KACJ,SACS6B,EAAS,QAAU,IACxB,MAEJA,EAAWnO,EAAS,aAAa,EACjCkO,GACJ,CACA,QAAS/7B,EAAI,EAAGA,EAAI+7B,EAAW/7B,IAC3B6tB,EAAS,YAAY,CAE7B,QAECuN,GAAajB,GAAS,GAC/B,GAAIqB,GAAgBG,GAAcC,GAAiBE,GAAeL,GAAeI,EAC7E,MAAO,CACH,QAAS,IAAI9yB,EAAMyyB,EAAa,MAAM,IAAKA,EAAa,MAAM,OAAQG,EAAW,IAAI,IAAKA,EAAW,IAAI,MAAM,EAC/G,SAAU,IAAI5yB,EAAM6yB,EAAc,MAAM,IAAKA,EAAc,MAAM,OAAQE,EAAY,IAAI,IAAKA,EAAY,IAAI,MAAM,EACpH,YAAaL,EACb,aAAcI,CAClB,EAER,CACJ,CACA7/B,EAAQ,aAAe2+B,CAEvB,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,cAAc,eAAe,kBAAkB,aAAa,wBAAwB,gBAAgB,gBAAgB,YAAY,mBAAmB,eAAe,2BAA2B,uBAAuB,kBAAkB,2BAA2B,gCAAgC,EAAG,SAAS79B,EAASd,EAASC,EAAO,CAAC,aACnY,IAAI0J,EAAM7I,EAAQ,WAAW,EACzB8J,EAAO9J,EAAQ,YAAY,EAC3BknB,EAAclnB,EAAQ,eAAe,EAAE,YACvCgL,EAAShL,EAAQ,UAAU,EAC3B8H,EAAe9H,EAAQ,qBAAqB,EAAE,aAC9CopB,EAAYppB,EAAQ,aAAa,EAAE,UACnCm/B,EAAWn/B,EAAQ,aAAa,EAAE,KAClCiM,EAAQjM,EAAQ,SAAS,EAAE,MAC3B4zB,EAAc5zB,EAAQ,gBAAgB,EAAE,YACxC81B,EAAW91B,EAAQ,YAAY,EAAE,SACjC62B,EAAsB72B,EAAQ,wBAAwB,EAAE,oBACxDo3B,EAAkBp3B,EAAQ,oBAAoB,EAAE,gBAChD83B,EAAc93B,EAAQ,eAAe,EAAE,YACvCo/B,EAA6B,UAAY,CACzC,SAASA,EAAY3tB,EAAMiN,EAAM,CAAE,KAAK,IACpC,KAAK,aAAe,CAAC,EACrB,KAAK,aAAe,CAAC,EACrB,KAAK,cAAgB,CAAC,EACtB,KAAK,aAAe,CAAC,EACrB,KAAK,UAAY,EACjB,KAAK,YAAc,GACnB,KAAK,QAAU,KACf,KAAK,OAAS,CAAC,EACf,KAAK,UAAY,CAAC,EAClB,KAAK,GAAK,WAAa,EAAE0gB,EAAY,KACrC,KAAK,UAAU,SAAW,UAAY,CAClC,OAAO,KAAK,KAAK;AAAA,CAAI,CACzB,EACA,KAAK,qBAAuB,CAAC,EAC7B,KAAK,YAAc,IAAIvI,EAAqB,IAAIsI,EAAS,EAAG,aAAa,EAAG,IAAI,EAChF,IAAIt7B,EAAQ,KACZ,KAAK,YAAY,GAAG,SAAU,SAAUqE,EAAG,CACvCrE,EAAM,QAAQ,kBAAmBqE,CAAC,CACtC,CAAC,EACD,KAAK,GAAG,aAAc,KAAK,aAAa,KAAK,IAAI,CAAC,EAClD,KAAK,UAAY,KAAK,SAAS,KAAK,IAAI,GACpC,OAAOuJ,GAAQ,UAAY,CAACA,EAAK,WACjCA,EAAO,IAAIqkB,EAA6BrkB,CAAK,GACjD,KAAK,YAAYA,CAAI,EACrB,KAAK,UAAY,IAAI2X,EAAU,IAAI,EACnC,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1D,KAAK,UAAU,GAAG,kBAAmB,KAAK,kBAAkB,EAC5D,KAAK,UAAU,GAAG,eAAgB,KAAK,kBAAkB,EACzD,KAAK,aAAe,IAAIlC,EAAY,IAAI,EACxClc,EAAO,aAAa,IAAI,EACxB,KAAK,QAAQ0T,CAAI,EACjB1T,EAAO,QAAQ,UAAW,IAAI,EAC9B,KAAK,UAAY,GACjB,KAAK,wBAAwB,CACjC,CACA,OAAAo0B,EAAY,UAAU,wBAA0B,UAAY,CACxD,IAAI/tB,EAAQ,KACZ,KAAK,MAAQ,KACb,KAAK,GAAG,SAAU,UAAY,CACrBA,EAAM,QACPA,EAAM,eAAe,EACrBA,EAAM,MAAM,gBAAkBA,EAAM,UAExCA,EAAM,MAAM,WAAa,EAC7B,EAAG,EAAI,EACP,KAAK,GAAG,kBAAmB,UAAY,CAC9BA,EAAM,QACPA,EAAM,eAAe,EACrBA,EAAM,MAAM,gBAAkBA,EAAM,UAExCA,EAAM,MAAM,iBAAmB,EACnC,EAAG,EAAI,EACP,KAAK,qBAAuBvH,EAAK,YAAY,KAAK,aAAa,KAAK,KAAM,EAAI,CAAC,CACnF,EACAs1B,EAAY,UAAU,eAAiB,SAAUC,EAAc,CAC3D,GAAI,KAAK,MAAO,CACZ,GAAI,CAACA,GAAgB,KAAK,MAAM,QAC5B,OAEJ,KAAK,OAAS,KAAK,KACvB,CACKA,IACDA,EAAe,CAAC,GAEpB,KAAK,qBAAqB,SAAS,EACnC,KAAK,MAAQ,CACT,QAASA,EAAa,SAAW,CAAC,EAClC,KAAMA,EAAa,IACvB,EACA,KAAK,MAAM,gBAAkB,KAAK,UAAU,OAAO,EACnD,KAAK,QAAQ,iBAAkBA,CAAY,CAC/C,EACAD,EAAY,UAAU,aAAe,SAAUl3B,EAAG,CAC9C,GAAI,KAAK,MAAO,CACZ,GAAIA,GAAKA,EAAE,cAAgB,GAAO,CAC9B,KAAK,MAAQ,KACb,KAAK,QAAQ,eAAgBA,CAAC,EAC9B,MACJ,CACA,GAAIA,GAAK,IAAQ,KAAK,MAAM,SAAW,KAAK,MAAM,QAAQ,MAAQ,QAC9D,OAEJ,IAAIo3B,EAAmB,KAAK,UAAU,OAAO,EAC7C,KAAK,MAAM,eAAiBA,EAC5B,KAAK,SAAW,KAAK,UAAU,OAAO,EACtC,KAAK,eAAe,EAAE,aAAaA,CAAgB,EACnD,KAAK,QAAQ,oBAAoB,EACjC,KAAK,OAAS,KAAK,MACnB,KAAK,MAAQ,KACb,KAAK,QAAQ,eAAgBp3B,CAAC,CAClC,CACJ,EACAk3B,EAAY,UAAU,YAAc,SAAUj6B,EAAK,CAC3C,KAAK,KACL,KAAK,IAAI,IAAI,SAAU,KAAK,SAAS,EACzC,KAAK,IAAMA,EACXA,EAAI,GAAG,SAAU,KAAK,UAAW,EAAI,EACrC,KAAK,YAAY,YAAY,KAAK,YAAY,CAAC,EAC/C,KAAK,YAAY,CACrB,EACAi6B,EAAY,UAAU,YAAc,UAAY,CAC5C,OAAO,KAAK,GAChB,EACA,OAAO,eAAeA,EAAY,UAAW,gBAAiB,CAC1D,IAAK,UAAY,CACb,IAAIG,EAAgB,IAAI3L,EAAY,IAAI,EACxC,YAAK,cAAgB2L,EACjB,KAAK,SACLA,EAAc,OAAO,KAAK,OAAO,EAC9BA,CACX,EACA,IAAK,SAAUl9B,EAAO,CAClB,OAAO,eAAe,KAAM,gBAAiB,CACzC,SAAU,GACV,WAAY,GACZ,aAAc,GACd,MAAOA,CACX,CAAC,CACL,EACA,WAAY,GACZ,aAAc,EAClB,CAAC,EACD+8B,EAAY,UAAU,eAAiB,SAAUjY,EAAQ,CACrD,GAAI,CAACA,EAAQ,CACT,KAAK,aAAe,CAAC,EACrB,KAAK,gBAAkB,CAAC,EACxB,MACJ,CACA,IAAIrnB,EAAI,KAAK,aAAa,OACtBoD,EAAI,KAAK,kBAAkB,KAAK,aAAcikB,CAAM,EAAI,EACxDrnB,EAAIoD,IACJ,KAAK,aAAa,OAAOA,EAAGpD,CAAC,EAC7B,KAAK,gBAAgB,OAAOoD,EAAGpD,CAAC,EAExC,EACAs/B,EAAY,UAAU,kBAAoB,SAAUI,EAAYx+B,EAAK,CAGjE,QAFIy+B,EAAM,EACNzZ,EAAKwZ,EAAW,OAAS,EACtBC,GAAOzZ,GAAI,CACd,IAAI0Z,EAAOD,EAAMzZ,GAAO,EACpBK,EAAImZ,EAAWE,CAAG,EACtB,GAAI1+B,EAAMqlB,EACNoZ,EAAMC,EAAM,UACP1+B,EAAMqlB,EACXL,EAAK0Z,EAAM,MAEX,QAAOA,CACf,CACA,OAAOD,EAAM,CACjB,EACAL,EAAY,UAAU,YAAc,UAAY,CAC5C,KAAK,UAAY,GACjB,KAAK,UAAY,CAAC,EAClB,KAAK,gBAAkB,CAAC,EACxB,KAAK,eAAe,CAAC,EAChB,KAAK,WACN,KAAK,YAAY,MAAM,CAAC,CAChC,EACAA,EAAY,UAAU,aAAe,SAAUl3B,EAAG,CAC9C,IAAI8R,EAAO9R,EAAE,KACb,KAAK,eAAe8R,EAAK,MAAM,GAAG,CACtC,EACAolB,EAAY,UAAU,SAAW,SAAU/X,EAAO,CAC9C,KAAK,UAAY,GACjB,KAAK,aAAa,SAASA,CAAK,EAChC,KAAK,eAAeA,EAAM,MAAM,GAAG,EACnC,IAAIsY,EAAe,KAAK,4BAA4BtY,CAAK,EACrD,CAAC,KAAK,WAAa,KAAK,eACpBsY,GAAgBA,EAAa,SAC7B,KAAK,aAAa,IAAI,CAClB,OAAQ,cACR,MAAOA,CACX,EAAG,KAAK,eAAe,EACvB,KAAK,gBAAkB,IAE3B,KAAK,aAAa,IAAItY,EAAO,KAAK,eAAe,EACjD,KAAK,gBAAkB,GACvB,KAAK,mBAAmB,SAAS,GAErC,KAAK,YAAY,gBAAgBA,CAAK,EACtC,KAAK,QAAQ,SAAUA,CAAK,CAChC,EACA+X,EAAY,UAAU,kBAAoB,UAAY,CAClD,KAAK,QAAQ,iBAAiB,CAClC,EACAA,EAAY,UAAU,SAAW,SAAU3tB,EAAM,CAC7C,KAAK,IAAI,SAASA,CAAI,EACtB,KAAK,UAAU,OAAO,EAAG,CAAC,EAC1B,KAAK,eAAe,CAAC,EACrB,KAAK,eAAe,KAAK,YAAY,EACrC,KAAK,eAAe,EAAE,MAAM,CAChC,EACA2tB,EAAY,SAAW,SAAUvyB,EAAS,CAClC,OAAOA,GAAW,WAClBA,EAAU,KAAK,MAAMA,CAAO,GAChC,IAAI+yB,EAAc,IAAI9H,EACtB8H,EAAY,WAAa/yB,EAAQ,QAAQ,WACzC+yB,EAAY,WAAa/yB,EAAQ,QAAQ,WACzC+yB,EAAY,KAAO/yB,EAAQ,QAAQ,KACnC+yB,EAAY,KAAO/yB,EAAQ,QAAQ,IACnC,IAAIgzB,EAAc,IAAIT,EAAYvyB,EAAQ,KAAK,EAC/C,OAAAA,EAAQ,MAAM,QAAQ,SAAUmN,EAAM,CAClC6lB,EAAY,QAAQ,MAAO5zB,EAAM,WAAW+N,EAAK,MAAOA,EAAK,GAAG,CAAC,CACrE,CAAC,EACD6lB,EAAY,eAAehzB,EAAQ,WAAW,EAC9CgzB,EAAY,eAAehzB,EAAQ,WAAW,EAC9CgzB,EAAY,QAAQhzB,EAAQ,IAAI,EAChCgzB,EAAY,cAAchzB,EAAQ,UAAU,EAC5CgzB,EAAY,aAAahzB,EAAQ,SAAS,EAC1CgzB,EAAY,eAAeD,CAAW,EACtCC,EAAY,UAAU,SAAShzB,EAAQ,SAAS,EACzCgzB,CACX,EACAT,EAAY,UAAU,OAAS,UAAY,CACvC,MAAO,CACH,YAAa,KAAK,aAClB,YAAa,KAAK,aAClB,MAAO,KAAK,YAAY,EAAE,IAAI,SAAUplB,EAAM,CAC1C,OAAOA,EAAK,KAChB,CAAC,EACD,QAAS,KAAK,eAAe,EAC7B,KAAM,KAAK,MAAM,IACjB,WAAY,KAAK,YACjB,UAAW,KAAK,WAChB,UAAW,KAAK,UAAU,OAAO,EACjC,MAAO,KAAK,IAAI,SAAS,CAC7B,CACJ,EACAolB,EAAY,UAAU,SAAW,UAAY,CACzC,OAAO,KAAK,IAAI,SAAS,CAC7B,EACAA,EAAY,UAAU,aAAe,UAAY,CAC7C,OAAO,KAAK,SAChB,EACAA,EAAY,UAAU,SAAW,SAAU7yB,EAAK,CAC5C,OAAO,KAAK,YAAY,SAASA,CAAG,CACxC,EACA6yB,EAAY,UAAU,UAAY,SAAU7yB,EAAK,CAC7C,OAAO,KAAK,YAAY,UAAUA,CAAG,CACzC,EACA6yB,EAAY,UAAU,WAAa,SAAU7yB,EAAKC,EAAQ,CACtD,IAAIwf,EAAS,KAAK,YAAY,UAAUzf,CAAG,EACvCogB,EAAOtG,EAAI,EACf,GAAI7Z,GAAU,KAAM,CAChB,IAAItJ,EAAI8oB,EAAO,OAAS,EACxB3F,EAAI,KAAK,QAAQ9Z,CAAG,EAAE,MAC1B,KAEI,SAASrJ,EAAI,EAAGA,EAAI8oB,EAAO,SACvB3F,GAAK2F,EAAO9oB,CAAC,EAAE,MAAM,OACjB,EAAAmjB,GAAK7Z,IAFsBtJ,IAE/B,CAKR,OADAypB,EAAQX,EAAO9oB,CAAC,EACXypB,GAELA,EAAM,MAAQzpB,EACdypB,EAAM,MAAQtG,EAAIsG,EAAM,MAAM,OACvBA,GAHI,IAIf,EACAyS,EAAY,UAAU,eAAiB,SAAUQ,EAAa,CAI1D,GAHA,KAAK,aAAeA,EAChB,KAAK,oBACL,KAAK,mBAAmB,OAAO,EAC/BA,EAAa,CACb,IAAIrjB,EAAO,KACXqjB,EAAY,WAAW,IAAI,EAC3B,KAAK,uBAAyB,UAAY,CACtCrjB,EAAK,mBAAmB,OAAO,EAC/BA,EAAK,gBAAkB,EAC3B,EACA,KAAK,mBAAqBzS,EAAK,YAAY,KAAK,sBAAsB,CAC1E,MAEI,KAAK,uBAAyB,UAAY,CAAE,CAEpD,EACAs1B,EAAY,UAAU,cAAgB,UAAY,CAC1C,KAAK,wBACL,KAAK,uBAAuB,CACpC,EACAA,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,cAAgB,KAAK,mBACrC,EACAA,EAAY,UAAU,aAAe,UAAY,CAC7C,OAAI,KAAK,eAAe,EACbt1B,EAAK,aAAa,IAAK,KAAK,WAAW,CAAC,EAGxC,GAEf,EACAs1B,EAAY,UAAU,eAAiB,SAAUp+B,EAAK,CAClD,KAAK,UAAU,cAAeA,CAAG,CACrC,EACAo+B,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,cAAgB,CAAC,KAAK,MAAM,eAC5C,EACAA,EAAY,UAAU,WAAa,SAAUlV,EAAS,CAClD,KAAK,UAAU,UAAWA,CAAO,CACrC,EACAkV,EAAY,UAAU,WAAa,UAAY,CAC3C,OAAO,KAAK,QAChB,EACAA,EAAY,UAAU,UAAY,SAAUl+B,EAAU,CAClD,OAAO,KAAK,cAAiBA,EAAS,OAAS,KAAK,WAAa,CACrE,EACAk+B,EAAY,UAAU,0BAA4B,SAAUU,EAAwB,CAChF,KAAK,UAAU,yBAA0BA,CAAsB,CACnE,EACAV,EAAY,UAAU,0BAA4B,UAAY,CAC1D,OAAO,KAAK,uBAChB,EACAA,EAAY,UAAU,aAAe,SAAUW,EAAW,CACtD,KAAK,UAAU,YAAaA,CAAS,CACzC,EACAX,EAAY,UAAU,aAAe,UAAY,CAC7C,OAAO,KAAK,UAChB,EACAA,EAAY,UAAU,gBAAkB,UAAY,CAChD,KAAK,aAAa,CAAC,KAAK,UAAU,CACtC,EACAA,EAAY,UAAU,oBAAsB,SAAU7yB,EAAK7G,EAAW,CAC7D,KAAK,aAAa6G,CAAG,IACtB,KAAK,aAAaA,CAAG,EAAI,IAC7B,KAAK,aAAaA,CAAG,GAAK,IAAM7G,EAChC,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACA05B,EAAY,UAAU,yBAA2B,SAAU7yB,EAAK,CACxD,KAAK,SACL,KAAK,QAAQ,SAAS,aAAa,oBAAoBA,CAAG,CAElE,EACA6yB,EAAY,UAAU,sBAAwB,SAAU7yB,EAAKZ,EAAY,CACjE,KAAK,SACL,KAAK,QAAQ,SAAS,aAAa,iBAAiBY,EAAKZ,CAAU,CAE3E,EACAyzB,EAAY,UAAU,uBAAyB,SAAU7yB,EAAK7G,EAAW,CACrE,KAAK,aAAa6G,CAAG,GAAK,KAAK,aAAaA,CAAG,GAAK,IAAI,QAAQ,IAAM7G,EAAW,EAAE,EACnF,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACA05B,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,YAChB,EACAA,EAAY,UAAU,eAAiB,SAAUxU,EAAM,CACnD,KAAK,aAAe,CAAC,EACrB,QAAS1nB,EAAI,EAAGA,EAAI0nB,EAAK,OAAQ1nB,IAC7B,KAAK,aAAa0nB,EAAK1nB,CAAC,CAAC,EAAI,iBAEjC,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACAk8B,EAAY,UAAU,iBAAmB,UAAY,CACjD,KAAK,aAAe,CAAC,EACrB,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACAA,EAAY,UAAU,cAAgB,SAAU7yB,EAAK7G,EAAW,CACxDA,IAAc,SACdA,EAAY,kBACZA,EACA,KAAK,aAAa6G,CAAG,EAAI7G,EAEzB,OAAO,KAAK,aAAa6G,CAAG,EAChC,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACA6yB,EAAY,UAAU,gBAAkB,SAAU7yB,EAAK,CACnD,OAAO,KAAK,aAAaA,CAAG,EAC5B,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACA6yB,EAAY,UAAU,UAAY,SAAU9yB,EAAO+qB,EAAOnpB,EAAM8xB,EAAS,CACrE,IAAIp6B,EAAK,KAAK,YACVq6B,EAAS,CACT,MAAO3zB,EACP,KAAM4B,GAAQ,OACd,SAAU,OAAOA,GAAQ,WAAaA,EAAO,KAC7C,MAAOmpB,EACP,QAAS,CAAC,CAAC2I,EACX,GAAIp6B,CACR,EACA,OAAIo6B,GACA,KAAK,cAAcp6B,CAAE,EAAIq6B,EACzB,KAAK,QAAQ,mBAAmB,IAGhC,KAAK,aAAar6B,CAAE,EAAIq6B,EACxB,KAAK,QAAQ,kBAAkB,GAE5Br6B,CACX,EACAw5B,EAAY,UAAU,iBAAmB,SAAUa,EAAQD,EAAS,CAChE,GAAKC,EAAO,OAEZ,KAAIr6B,EAAK,KAAK,YACd,OAAAq6B,EAAO,GAAKr6B,EACZq6B,EAAO,QAAU,CAAC,CAACD,EACfA,GACA,KAAK,cAAcp6B,CAAE,EAAIq6B,EACzB,KAAK,QAAQ,mBAAmB,IAGhC,KAAK,aAAar6B,CAAE,EAAIq6B,EACxB,KAAK,QAAQ,kBAAkB,GAE5BA,EACX,EACAb,EAAY,UAAU,aAAe,SAAUc,EAAU,CACrD,IAAID,EAAS,KAAK,cAAcC,CAAQ,GAAK,KAAK,aAAaA,CAAQ,EACvE,GAAKD,EAEL,KAAIE,EAAUF,EAAO,QAAU,KAAK,cAAgB,KAAK,aACzD,OAAQE,EAAQD,CAAQ,EACxB,KAAK,QAAQD,EAAO,QAAU,oBAAsB,kBAAkB,EAC1E,EACAb,EAAY,UAAU,WAAa,SAAUY,EAAS,CAClD,OAAOA,EAAU,KAAK,cAAgB,KAAK,YAC/C,EACAZ,EAAY,UAAU,UAAY,SAAUj1B,EAAI,CAC5C,GAAI,CAAC,KAAK,iBAAkB,CACxB,IAAIi2B,EAAY,IAAIhJ,EAAgB,KAAM,oBAAqB,MAAM,EACrE,KAAK,iBAAmB,KAAK,iBAAiBgJ,CAAS,CAC3D,CACA,KAAK,iBAAiB,UAAUj2B,CAAE,CACtC,EACAi1B,EAAY,UAAU,eAAiB,SAAUlzB,EAAUE,EAAQirB,EAAO2I,EAAS,CAC3E,OAAO5zB,GAAU,WACjBirB,EAAQjrB,EACRA,EAASF,GAERmrB,IACDA,EAAQ,YACZ,IAAI/qB,EAAQ,IAAIL,EAAMC,EAAU,EAAGE,EAAQ,GAAQ,EACnD,OAAAE,EAAM,GAAK,KAAK,UAAUA,EAAO+qB,EAAO,WAAY2I,CAAO,EACpD1zB,CACX,EACA8yB,EAAY,UAAU,eAAiB,SAAUlkB,EAAa,CAC1D,KAAK,aAAeA,EACpB,KAAK,QAAQ,mBAAoB,CAAC,CAAC,CACvC,EACAkkB,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,cAAgB,CAAC,CACjC,EACAA,EAAY,UAAU,iBAAmB,UAAY,CACjD,KAAK,eAAe,CAAC,CAAC,CAC1B,EACAA,EAAY,UAAU,eAAiB,SAAU3tB,EAAM,CACnD,IAAIoa,EAAQpa,EAAK,MAAM,cAAc,EACjCoa,EACA,KAAK,aAAeA,EAAM,CAAC,EAG3B,KAAK,aAAe;AAAA,CAE5B,EACAuT,EAAY,UAAU,aAAe,SAAU7yB,EAAKC,EAAQ,CACxD,IAAIxI,EAAO,KAAK,QAAQuI,CAAG,EACvB8zB,EAAU,GAKd,GAJI7zB,EAAS,IACT6zB,EAAU,CAAC,CAACr8B,EAAK,OAAOwI,EAAS,CAAC,EAAE,MAAM,KAAK,OAAO,GACrD6zB,IACDA,EAAU,CAAC,CAACr8B,EAAK,OAAOwI,CAAM,EAAE,MAAM,KAAK,OAAO,GAClD6zB,EACA,IAAIl2B,EAAK,KAAK,gBACT,QAAQ,KAAKnG,EAAK,MAAMwI,EAAS,EAAGA,EAAS,CAAC,CAAC,EACpD,IAAIrC,EAAK,SAET,KAAIA,EAAK,KAAK,WAClB,IAAI5H,EAAQiK,EACZ,GAAIjK,EAAQ,EAAG,CACX,GACIA,UACKA,GAAS,GAAKyB,EAAK,OAAOzB,CAAK,EAAE,MAAM4H,CAAE,GAClD5H,GACJ,CAEA,QADIE,EAAM+J,EACH/J,EAAMuB,EAAK,QAAUA,EAAK,OAAOvB,CAAG,EAAE,MAAM0H,CAAE,GACjD1H,IAEJ,OAAO,IAAIwJ,EAAMM,EAAKhK,EAAOgK,EAAK9J,CAAG,CACzC,EACA28B,EAAY,UAAU,cAAgB,SAAU7yB,EAAKC,EAAQ,CAGzD,QAFI8zB,EAAY,KAAK,aAAa/zB,EAAKC,CAAM,EACzCxI,EAAO,KAAK,QAAQs8B,EAAU,IAAI,GAAG,EAClCt8B,EAAK,OAAOs8B,EAAU,IAAI,MAAM,EAAE,MAAM,OAAO,GAClDA,EAAU,IAAI,QAAU,EAE5B,OAAOA,CACX,EACAlB,EAAY,UAAU,eAAiB,SAAUpJ,EAAa,CAC1D,KAAK,IAAI,eAAeA,CAAW,CACvC,EACAoJ,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,IAAI,eAAe,CACnC,EACAA,EAAY,UAAU,aAAe,SAAUmB,EAAW,CAAE,KAAK,UAAU,YAAaA,CAAS,CAAG,EACpGnB,EAAY,UAAU,aAAe,UAAY,CAAE,OAAO,KAAK,UAAY,EAC3EA,EAAY,UAAU,kBAAoB,SAAUl3B,EAAG,CACnD,IAAI0iB,EAAO1iB,EAAE,KACb,KAAK,YAAY,MAAM0iB,EAAK,KAAK,EACjC,KAAK,QAAQ,kBAAmB1iB,CAAC,CACrC,EACAk3B,EAAY,UAAU,QAAU,SAAU1gB,EAAMpU,EAAI,CAChD,GAAIoU,GAAQ,OAAOA,GAAS,SAAU,CAClC,GAAIA,EAAK,aACL,OAAO,KAAK,cAAcA,CAAI,EAClC,IAAI1Z,EAAU0Z,EACVrX,EAAOrC,EAAQ,IACvB,MAEIqC,EAA2BqX,GAAS,gBAIxC,GAFK,KAAK,OAAO,eAAe,IAC5B,KAAK,OAAO,eAAe,EAAI,IAAIygB,GACnC,KAAK,OAAO93B,CAAI,GAAK,CAACrC,EAAS,CAC/B,KAAK,cAAc,KAAK,OAAOqC,CAAI,CAAC,EACpCiD,GAAMA,EAAG,EACT,MACJ,CACA,KAAK,QAAUjD,EACf2D,EAAO,WAAW,CAAC,OAAQ3D,CAAI,EAAG,SAAU0E,EAAG,CAC3C,GAAI,MAAK,UAGT,IAAI,KAAK,UAAY1E,EACjB,OAAOiD,GAAMA,EAAG,EAChB,KAAK,OAAOjD,CAAI,GAAK,CAACrC,EACtB,KAAK,cAAc,KAAK,OAAOqC,CAAI,CAAC,EAE/B0E,GAAKA,EAAE,OACZA,EAAI,IAAIA,EAAE,KAAK/G,CAAO,EACjBA,IACD,KAAK,OAAOqC,CAAI,EAAI0E,EACpBA,EAAE,IAAM1E,GAEZ,KAAK,cAAc0E,CAAC,GAExBzB,GAAMA,EAAG,EACb,EAAE,KAAK,IAAI,CAAC,EACP,KAAK,OACN,KAAK,cAAc,KAAK,OAAO,eAAe,EAAG,EAAI,CAC7D,EACA80B,EAAY,UAAU,cAAgB,SAAU1gB,EAAM8hB,EAAgB,CAGlE,GAFKA,IACD,KAAK,QAAU9hB,EAAK,KACpB,KAAK,QAAUA,EAEnB,KAAI+hB,EAAU,KAAK,MACnB,KAAK,MAAQ/hB,EACb,KAAK,YAAY,EACb,KAAK,YACL,KAAK,aAAa,EACtB,IAAIoY,EAAYpY,EAAK,aAAa,EAClC,GAAIoY,EAAU,KAAO,OAAW,CAC5B,IAAI4J,EAAoB,KAAK,kBAAkB,KAAK,IAAI,EACxD5J,EAAU,GAAG,SAAU4J,CAAiB,CAC5C,CACA,KAAK,YAAY,aAAa5J,CAAS,EACvC,KAAK,YAAY,YAAY,KAAK,YAAY,CAAC,EAC/C,KAAK,QAAUpY,EAAK,QACpB,KAAK,WAAaA,EAAK,WAClB8hB,IACG9hB,EAAK,iBACLA,EAAK,gBAAgB,IAAI,EAC7B,KAAK,SAAS,WAAW,IAAI,KAAK,KAAM,KAAK,WAAW,EACxD,KAAK,YAAYA,EAAK,YAAY,EAClC,KAAK,YAAY,MAAM,CAAC,EACxB,KAAK,MAAM,aAAc,CAAE,QAAS+hB,EAAS,KAAM/hB,CAAK,CAAC,GAEjE,EACA0gB,EAAY,UAAU,YAAc,UAAY,CACxC,KAAK,UACL,KAAK,QAAQ,UAAU,EACvB,KAAK,QAAU,KAEvB,EACAA,EAAY,UAAU,aAAe,UAAY,CAC7C,GAAI,CACA,KAAK,QAAU,KAAK,MAAM,aAAa,IAAI,CAC/C,OACOl3B,EAAG,CACN8C,EAAO,KAAK,wBAAyB9C,CAAC,EACtC,KAAK,QAAU,IACnB,CACJ,EACAk3B,EAAY,UAAU,QAAU,UAAY,CACxC,OAAO,KAAK,KAChB,EACAA,EAAY,UAAU,aAAe,SAAUuB,EAAW,CAClD,KAAK,aAAeA,GAAa,MAAMA,CAAS,IAEpD,KAAK,WAAaA,EAClB,KAAK,QAAQ,kBAAmBA,CAAS,EAC7C,EACAvB,EAAY,UAAU,aAAe,UAAY,CAC7C,OAAO,KAAK,UAChB,EACAA,EAAY,UAAU,cAAgB,SAAUnf,EAAY,CACpD,KAAK,cAAgBA,GAAc,MAAMA,CAAU,IAEvD,KAAK,YAAcA,EACnB,KAAK,QAAQ,mBAAoBA,CAAU,EAC/C,EACAmf,EAAY,UAAU,cAAgB,UAAY,CAC9C,OAAO,KAAK,WAChB,EACAA,EAAY,UAAU,eAAiB,UAAY,CAE/C,OADA,KAAK,cAAc,EACf,KAAK,YACE,KAAK,IAAI,KAAK,sBAAsB,EAAG,KAAK,WAAW,EAC3D,KAAK,WAChB,EACAA,EAAY,UAAU,sBAAwB,UAAY,CACtD,GAAI,KAAK,kBAAoB,KACzB,OAAO,KAAK,iBAChB,IAAIlX,EAAQ,EACZ,YAAK,YAAY,QAAQ,SAAU3H,EAAG,CAC9BA,GAAKA,EAAE,YAAc2H,IACrBA,EAAQ3H,EAAE,YAClB,CAAC,EACM,KAAK,gBAAkB2H,CAClC,EACAkX,EAAY,UAAU,cAAgB,SAAUwB,EAAO,CACnD,GAAI,KAAK,WAAaA,EAAO,CAEzB,GADA,KAAK,UAAY,GACb,KAAK,aACL,OAAO,KAAK,YAAc,KAAK,WAQnC,QAPI3tB,EAAQ,KAAK,IAAI,YAAY,EAC7BhN,EAAQ,KAAK,gBACb46B,EAAoB,EACpBC,EAAY,EACZ7W,EAAW,KAAK,UAAU6W,CAAS,EACnCC,EAAY9W,EAAWA,EAAS,MAAM,IAAM,IAC5ChoB,EAAMgR,EAAM,OACP/P,EAAI,EAAGA,EAAIjB,EAAKiB,IAAK,CAC1B,GAAIA,EAAI69B,EAAW,CAEf,GADA79B,EAAI+mB,EAAS,IAAI,IAAM,EACnB/mB,GAAKjB,EACL,MACJgoB,EAAW,KAAK,UAAU6W,GAAW,EACrCC,EAAY9W,EAAWA,EAAS,MAAM,IAAM,GAChD,CACIhkB,EAAM/C,CAAC,GAAK,OACZ+C,EAAM/C,CAAC,EAAI,KAAK,sBAAsB+P,EAAM/P,CAAC,CAAC,EAAE,CAAC,GACjD+C,EAAM/C,CAAC,EAAI29B,IACXA,EAAoB56B,EAAM/C,CAAC,EACnC,CACA,KAAK,YAAc29B,CACvB,CACJ,EACAzB,EAAY,UAAU,QAAU,SAAU7yB,EAAK,CAC3C,OAAO,KAAK,IAAI,QAAQA,CAAG,CAC/B,EACA6yB,EAAY,UAAU,SAAW,SAAUzyB,EAAUC,EAAS,CAC1D,OAAO,KAAK,IAAI,SAASD,EAAUC,CAAO,CAC9C,EACAwyB,EAAY,UAAU,UAAY,UAAY,CAC1C,OAAO,KAAK,IAAI,UAAU,CAC9B,EACAA,EAAY,UAAU,aAAe,SAAU9yB,EAAO,CAClD,OAAO,KAAK,IAAI,aAAaA,GAAS,KAAK,UAAU,SAAS,CAAC,CACnE,EACA8yB,EAAY,UAAU,OAAS,SAAUl+B,EAAUuQ,EAAM,CACrD,OAAO,KAAK,IAAI,OAAOvQ,EAAUuQ,CAAI,CACzC,EACA2tB,EAAY,UAAU,OAAS,SAAU9yB,EAAO,CAC5C,OAAO,KAAK,IAAI,OAAOA,CAAK,CAChC,EACA8yB,EAAY,UAAU,gBAAkB,SAAUzyB,EAAUC,EAAS,CACjE,OAAO,KAAK,IAAI,gBAAgBD,EAAUC,CAAO,CACrD,EACAwyB,EAAY,UAAU,YAAc,SAAU/I,EAAQ6B,EAAY,CAC9D,GAAK7B,EAAO,OAEZ,MAAK,UAAY,GACjB,QAASnzB,EAAImzB,EAAO,OAAS,EAAGnzB,GAAK,GAAIA,IAAK,CAC1C,IAAImkB,EAAQgP,EAAOnzB,CAAC,EAChBmkB,EAAM,QAAU,UAAYA,EAAM,QAAU,SAC5C,KAAK,IAAI,YAAYA,CAAK,EAErBA,EAAM,OACX,KAAK,SAASA,EAAM,KAAK,CAEjC,CACI,CAAC6Q,GAAc,KAAK,cAChB7B,EAAO,gBACP,KAAK,UAAU,SAASA,EAAO,eAAe,EAE9C,KAAK,UAAU,SAAS,KAAK,kBAAkBA,EAAQ,EAAI,CAAC,GAEpE,KAAK,UAAY,GACrB,EACA+I,EAAY,UAAU,YAAc,SAAU/I,EAAQ6B,EAAY,CAC9D,GAAK7B,EAAO,OAEZ,MAAK,UAAY,GACjB,QAASnzB,EAAI,EAAGA,EAAImzB,EAAO,OAAQnzB,IAAK,CACpC,IAAImkB,EAAQgP,EAAOnzB,CAAC,GAChBmkB,EAAM,QAAU,UAAYA,EAAM,QAAU,WAC5C,KAAK,IAAI,gBAAgBA,CAAK,CAEtC,CACI,CAAC6Q,GAAc,KAAK,cAChB7B,EAAO,eACP,KAAK,UAAU,SAASA,EAAO,cAAc,EAE7C,KAAK,UAAU,SAAS,KAAK,kBAAkBA,EAAQ,EAAK,CAAC,GAErE,KAAK,UAAY,GACrB,EACA+I,EAAY,UAAU,cAAgB,SAAU4B,EAAQ,CACpD,KAAK,YAAcA,CACvB,EACA5B,EAAY,UAAU,kBAAoB,SAAU/I,EAAQ4K,EAAQ,CAChE,SAAS3K,EAASjP,EAAO,CACrB,OAAO4Z,EAAS5Z,EAAM,SAAW,SAAWA,EAAM,SAAW,QACjE,CAEA,QADI/a,EAAOyoB,EACF7xB,EAAI,EAAGA,EAAImzB,EAAO,OAAQnzB,IAAK,CACpC,IAAImkB,EAAQgP,EAAOnzB,CAAC,EACpB,GAAKmkB,EAAM,MAEX,IAAI,CAAC/a,EAAO,CACJgqB,EAASjP,CAAK,EACd/a,EAAQL,EAAM,WAAWob,EAAM,MAAOA,EAAM,GAAG,EAG/C/a,EAAQL,EAAM,WAAWob,EAAM,MAAOA,EAAM,KAAK,EAErD,QACJ,CACIiP,EAASjP,CAAK,GACd0N,EAAQ1N,EAAM,MACV/a,EAAM,QAAQyoB,EAAM,IAAKA,EAAM,MAAM,GAAK,IAC1CzoB,EAAM,SAASyoB,CAAK,EAExBA,EAAQ1N,EAAM,IACV/a,EAAM,QAAQyoB,EAAM,IAAKA,EAAM,MAAM,GAAK,GAC1CzoB,EAAM,OAAOyoB,CAAK,IAItBA,EAAQ1N,EAAM,MACV/a,EAAM,QAAQyoB,EAAM,IAAKA,EAAM,MAAM,GAAK,KAC1CzoB,EAAQL,EAAM,WAAWob,EAAM,MAAOA,EAAM,KAAK,IAG7D,CACA,OAAO/a,CACX,EACA8yB,EAAY,UAAU,QAAU,SAAU9yB,EAAOmF,EAAM,CACnD,OAAO,KAAK,IAAI,QAAQnF,EAAOmF,CAAI,CACvC,EACA2tB,EAAY,UAAU,SAAW,SAAU8B,EAAWC,EAAYt+B,EAAM,CACpE,IAAI4O,EAAO,KAAK,aAAayvB,CAAS,EAClCxG,EAAQ,KAAK,gBAAgBwG,CAAS,EACtCE,EAAUn1B,EAAM,WAAWk1B,EAAYA,CAAU,EACrD,GAAI,CAACt+B,EAAM,CACP,KAAK,OAAOq+B,CAAS,EACrB,IAAI7R,EAAU6R,EAAU,MAAM,IAAMA,EAAU,IAAI,IAC9CG,EAAWhS,EAAU,CAAC6R,EAAU,IAAI,OAASA,EAAU,MAAM,OAASA,EAAU,IAAI,OACpFG,IACID,EAAQ,MAAM,KAAOF,EAAU,IAAI,KAAOE,EAAQ,MAAM,OAASF,EAAU,IAAI,SAC/EE,EAAQ,MAAM,QAAUC,GACxBD,EAAQ,IAAI,KAAOF,EAAU,IAAI,KAAOE,EAAQ,IAAI,OAASF,EAAU,IAAI,SAC3EE,EAAQ,IAAI,QAAUC,IAE1BhS,GAAW+R,EAAQ,MAAM,KAAOF,EAAU,IAAI,MAC9CE,EAAQ,MAAM,KAAO/R,EACrB+R,EAAQ,IAAI,KAAO/R,EAE3B,CAEA,GADA+R,EAAQ,IAAM,KAAK,OAAOA,EAAQ,MAAO3vB,CAAI,EACzCipB,EAAM,OAAQ,CACd,IAAI4G,EAAWJ,EAAU,MACrBK,EAAWH,EAAQ,MACnB/R,EAAUkS,EAAS,IAAMD,EAAS,IAClCD,EAAWE,EAAS,OAASD,EAAS,OAC1C,KAAK,SAAS5G,EAAM,IAAI,SAAUntB,EAAG,CACjC,OAAAA,EAAIA,EAAE,MAAM,EACRA,EAAE,MAAM,KAAO+zB,EAAS,MACxB/zB,EAAE,MAAM,QAAU8zB,GAClB9zB,EAAE,IAAI,KAAO+zB,EAAS,MACtB/zB,EAAE,IAAI,QAAU8zB,GACpB9zB,EAAE,MAAM,KAAO8hB,EACf9hB,EAAE,IAAI,KAAO8hB,EACN9hB,CACX,CAAC,CAAC,CACN,CACA,OAAO6zB,CACX,EACAhC,EAAY,UAAU,WAAa,SAAUlzB,EAAUE,EAAQo1B,EAAc,CACzEA,EAAeA,EAAa,QAAQ,MAAO,KAAK,aAAa,CAAC,EAC9D,QAASj1B,EAAML,EAAUK,GAAOH,EAAQG,IACpC,KAAK,IAAI,aAAa,CAAE,IAAKA,EAAK,OAAQ,CAAE,EAAGi1B,CAAY,CACnE,EACApC,EAAY,UAAU,YAAc,SAAU9yB,EAAO,CAIjD,QAHIm1B,EAAWn1B,EAAM,aAAa,EAC9Bo1B,EAAc,IAAIz1B,EAAM,EAAG,EAAG,EAAG,CAAC,EAClC4b,EAAO,KAAK,WAAW,EAClB3kB,EAAIu+B,EAAS,MAAM,IAAKv+B,GAAKu+B,EAAS,IAAI,IAAK,EAAEv+B,EAAG,CACzD,IAAIc,EAAO,KAAK,QAAQd,CAAC,EACzBw+B,EAAY,MAAM,IAAMx+B,EACxBw+B,EAAY,IAAI,IAAMx+B,EACtB,QAAS0I,EAAI,EAAGA,EAAIic,GACZ7jB,EAAK,OAAO4H,CAAC,GAAK,IADA,EAAEA,EACxB,CAEAA,EAAIic,GAAQ7jB,EAAK,OAAO4H,CAAC,GAAK,KAC9B81B,EAAY,MAAM,OAAS91B,EAC3B81B,EAAY,IAAI,OAAS91B,EAAI,IAG7B81B,EAAY,MAAM,OAAS,EAC3BA,EAAY,IAAI,OAAS91B,GAE7B,KAAK,OAAO81B,CAAW,CAC3B,CACJ,EACAtC,EAAY,UAAU,WAAa,SAAUzyB,EAAUC,EAASiW,EAAK,CAGjE,GAFAlW,EAAW,KAAK,gBAAgBA,CAAQ,EACxCC,EAAU,KAAK,cAAcA,CAAO,EAChCiW,EAAM,EAAG,CACT,IAAItW,EAAM,KAAK,gBAAgBI,EAAWkW,CAAG,EAC7C,GAAItW,EAAM,EACN,MAAO,GACX,IAAI+rB,EAAO/rB,EAAMI,CACrB,SACSkW,EAAM,EAAG,CACd,IAAItW,EAAM,KAAK,cAAcK,EAAUiW,CAAG,EAC1C,GAAItW,EAAM,KAAK,IAAI,UAAU,EAAI,EAC7B,MAAO,GACX,IAAI+rB,EAAO/rB,EAAMK,CACrB,KACK,CACDD,EAAW,KAAK,mBAAmBA,CAAQ,EAC3CC,EAAU,KAAK,mBAAmBA,CAAO,EACzC,IAAI0rB,EAAO1rB,EAAUD,EAAW,CACpC,CACA,IAAIL,EAAQ,IAAIL,EAAMU,EAAU,EAAGC,EAAS,OAAO,SAAS,EACxD8tB,EAAQ,KAAK,gBAAgBpuB,CAAK,EAAE,IAAI,SAAUiB,EAAG,CACrD,OAAAA,EAAIA,EAAE,MAAM,EACZA,EAAE,MAAM,KAAO+qB,EACf/qB,EAAE,IAAI,KAAO+qB,EACN/qB,CACX,CAAC,EACG0F,EAAQ4P,GAAO,EACb,KAAK,IAAI,SAASlW,EAAUC,CAAO,EACnC,KAAK,IAAI,gBAAgBD,EAAUC,CAAO,EAChD,YAAK,IAAI,gBAAgBD,EAAW2rB,EAAMrlB,CAAK,EAC/CynB,EAAM,QAAU,KAAK,SAASA,CAAK,EAC5BpC,CACX,EACA8G,EAAY,UAAU,YAAc,SAAUzyB,EAAUC,EAAS,CAC7D,OAAO,KAAK,WAAWD,EAAUC,EAAS,EAAE,CAChD,EACAwyB,EAAY,UAAU,cAAgB,SAAUzyB,EAAUC,EAAS,CAC/D,OAAO,KAAK,WAAWD,EAAUC,EAAS,CAAC,CAC/C,EACAwyB,EAAY,UAAU,eAAiB,SAAUzyB,EAAUC,EAAS,CAChE,OAAO,KAAK,WAAWD,EAAUC,EAAS,CAAC,CAC/C,EACAwyB,EAAY,UAAU,mBAAqB,SAAU7yB,EAAK,CACtD,OAAO,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAK,KAAK,IAAI,UAAU,EAAI,CAAC,CAAC,CAC9D,EACA6yB,EAAY,UAAU,iBAAmB,SAAU7yB,EAAKC,EAAQ,CAC5D,OAAIA,EAAS,EACF,EACJ,KAAK,IAAI,KAAK,IAAI,QAAQD,CAAG,EAAE,OAAQC,CAAM,CACxD,EACA4yB,EAAY,UAAU,wBAA0B,SAAU7yB,EAAKC,EAAQ,CAEnE,GADAA,EAAS,KAAK,IAAI,EAAGA,CAAM,EACvBD,EAAM,EACNA,EAAM,EACNC,EAAS,MAER,CACD,IAAIvK,EAAM,KAAK,IAAI,UAAU,EACzBsK,GAAOtK,GACPsK,EAAMtK,EAAM,EACZuK,EAAS,KAAK,IAAI,QAAQvK,EAAM,CAAC,EAAE,QAGnCuK,EAAS,KAAK,IAAI,KAAK,IAAI,QAAQD,CAAG,EAAE,OAAQC,CAAM,CAE9D,CACA,MAAO,CACH,IAAKD,EACL,OAAQC,CACZ,CACJ,EACA4yB,EAAY,UAAU,qBAAuB,SAAU9yB,EAAO,CACtDA,EAAM,MAAM,IAAM,GAClBA,EAAM,MAAM,IAAM,EAClBA,EAAM,MAAM,OAAS,GAGrBA,EAAM,MAAM,OAAS,KAAK,iBAAiBA,EAAM,MAAM,IAAKA,EAAM,MAAM,MAAM,EAElF,IAAIrK,EAAM,KAAK,IAAI,UAAU,EAAI,EACjC,OAAIqK,EAAM,IAAI,IAAMrK,GAChBqK,EAAM,IAAI,IAAMrK,EAChBqK,EAAM,IAAI,OAAS,KAAK,IAAI,QAAQrK,CAAG,EAAE,QAGzCqK,EAAM,IAAI,OAAS,KAAK,iBAAiBA,EAAM,IAAI,IAAKA,EAAM,IAAI,MAAM,EAErEA,CACX,EACA8yB,EAAY,UAAU,eAAiB,SAAUuC,EAAa,CAC1D,GAAIA,GAAe,KAAK,aAAc,CAIlC,GAHA,KAAK,aAAeA,EACpB,KAAK,UAAY,GACjB,KAAK,eAAe,CAAC,EACjBA,EAAa,CACb,IAAI1/B,EAAM,KAAK,UAAU,EACzB,KAAK,UAAY,MAAMA,CAAG,EAC1B,KAAK,gBAAgB,EAAGA,EAAM,CAAC,CACnC,CACA,KAAK,QAAQ,gBAAgB,CACjC,CACJ,EACAm9B,EAAY,UAAU,eAAiB,UAAY,CAC/C,OAAO,KAAK,YAChB,EACAA,EAAY,UAAU,kBAAoB,SAAUhL,EAAKwN,EAAK,EACtD,KAAK,gBAAgB,MAAQxN,GAAO,KAAK,gBAAgB,MAAQwN,KACjE,KAAK,gBAAkB,CAAE,IAAKxN,EAAK,IAAKwN,CAAI,EAC5C,KAAK,UAAY,GACjB,KAAK,aAAa,YAAY,EAC1B,KAAK,cACL,KAAK,QAAQ,gBAAgB,EAEzC,EACAxC,EAAY,UAAU,gBAAkB,SAAUyC,EAAcC,EAAc,CAC1E,IAAIC,EAAS,KAAK,gBACdA,EAAO,IAAM,IACbA,EAAS,CAAE,IAAKD,EAAc,IAAKA,CAAa,GACpD,IAAIE,EAAY,KAAK,oBAAoBH,EAAcE,EAAO,IAAKA,EAAO,GAAG,EAC7E,OAAIC,GAAa,KAAK,YAAcA,EAAY,GAC5C,KAAK,WAAaA,EAClB,KAAK,UAAY,GACb,KAAK,eACL,KAAK,gBAAgB,EAAG,KAAK,UAAU,EAAI,CAAC,EAC5C,KAAK,eAAe,CAAC,EACrB,KAAK,QAAQ,iBAAiB,GAE3B,IAEJ,EACX,EACA5C,EAAY,UAAU,oBAAsB,SAAU4C,EAAW5N,EAAKwN,EAAK,CACvE,OAAIxN,IACA4N,EAAY,KAAK,IAAI5N,EAAK4N,CAAS,GACnCJ,IACAI,EAAY,KAAK,IAAIJ,EAAKI,CAAS,GAChCA,CACX,EACA5C,EAAY,UAAU,aAAe,UAAY,CAC7C,OAAO,KAAK,UAChB,EACAA,EAAY,UAAU,aAAe,SAAU6C,EAAO,CAClD,KAAK,kBAAkBA,EAAOA,CAAK,CACvC,EACA7C,EAAY,UAAU,kBAAoB,UAAY,CAClD,MAAO,CACH,IAAK,KAAK,gBAAgB,IAC1B,IAAK,KAAK,gBAAgB,GAC9B,CACJ,EACAA,EAAY,UAAU,4BAA8B,SAAU/X,EAAO,CACjE,IAAIsa,EAAc,KAAK,aACnB/hB,EAASyH,EAAM,OACf9kB,EAAQ8kB,EAAM,MACd5kB,EAAM4kB,EAAM,IACZ1a,EAAWpK,EAAM,IACjBqK,EAAUnK,EAAI,IACdR,EAAM2K,EAAUD,EAChBgzB,EAAe,KAEnB,GADA,KAAK,UAAY,GACb19B,GAAO,EACP,GAAI2d,IAAW,SAAU,CACrB,KAAK+hB,EAAc,YAAc,iBAAiB,EAAE,OAAOh1B,EAAU1K,CAAG,EACxE,IAAIk6B,EAAY,KAAK,UACrBwD,EAAe,KAAK,gBAAgBtY,CAAK,EACzC,KAAK,YAAYsY,CAAY,EAC7B,IAAI1V,EAAW,KAAK,YAAYxnB,EAAI,GAAG,EACnCu4B,EAAM,EACV,GAAI/Q,EAAU,CACVA,EAAS,eAAexnB,EAAI,IAAKA,EAAI,OAAQF,EAAM,OAASE,EAAI,MAAM,EACtEwnB,EAAS,SAAS,CAAChoB,CAAG,EACtB,IAAIigC,EAAiB,KAAK,YAAYv1B,CAAQ,EAC1Cu1B,GAAkBA,IAAmBjY,IACrCiY,EAAe,MAAMjY,CAAQ,EAC7BA,EAAWiY,GAEflH,EAAMmB,EAAU,QAAQlS,CAAQ,EAAI,CACxC,CACA,IAAK+Q,EAAKA,EAAMmB,EAAU,OAAQnB,IAAO,CACrC,IAAI/Q,EAAWkS,EAAUnB,CAAG,EACxB/Q,EAAS,MAAM,KAAOxnB,EAAI,KAC1BwnB,EAAS,SAAS,CAAChoB,CAAG,CAE9B,CACA2K,EAAUD,CACd,KACK,CACD,IAAIihB,EAAO,MAAM3rB,CAAG,EACpB2rB,EAAK,QAAQjhB,EAAU,CAAC,EACxB,IAAIxJ,EAAMw+B,EAAc,KAAK,UAAY,KAAK,gBAC9Cx+B,EAAI,OAAO,MAAMA,EAAKyqB,CAAI,EAC1B,IAAIuO,EAAY,KAAK,UACjBlS,EAAW,KAAK,YAAYtd,CAAQ,EACpCquB,EAAM,EACV,GAAI/Q,EAAU,CACV,IAAIxd,EAAMwd,EAAS,MAAM,cAAc1nB,EAAM,IAAKA,EAAM,MAAM,EAC1DkK,GAAO,GACPwd,EAAWA,EAAS,MAAM1nB,EAAM,IAAKA,EAAM,MAAM,EAC7C0nB,IACAA,EAAS,SAAShoB,CAAG,EACrBgoB,EAAS,eAAerd,EAAS,EAAGnK,EAAI,OAASF,EAAM,MAAM,IAIjEkK,GAAO,KACPwd,EAAS,eAAetd,EAAU,EAAGlK,EAAI,OAASF,EAAM,MAAM,EAC9D0nB,EAAS,SAAShoB,CAAG,GAEzB+4B,EAAMmB,EAAU,QAAQlS,CAAQ,EAAI,CACxC,CACA,IAAK+Q,EAAKA,EAAMmB,EAAU,OAAQnB,IAAO,CACrC,IAAI/Q,EAAWkS,EAAUnB,CAAG,EACxB/Q,EAAS,MAAM,KAAOtd,GACtBsd,EAAS,SAAShoB,CAAG,CAE7B,CACJ,KAEC,CACDA,EAAM,KAAK,IAAIolB,EAAM,MAAM,OAASA,EAAM,IAAI,MAAM,EAChDzH,IAAW,WACX+f,EAAe,KAAK,gBAAgBtY,CAAK,EACzC,KAAK,YAAYsY,CAAY,EAC7B19B,EAAM,CAACA,GAEX,IAAIgoB,EAAW,KAAK,YAAYtd,CAAQ,EACpCsd,GACAA,EAAS,eAAetd,EAAUpK,EAAM,OAAQN,CAAG,CAE3D,CACA,OAAI0/B,GAAe,KAAK,UAAU,QAAU,KAAK,IAAI,UAAU,GAC3D,QAAQ,MAAM,2DAA2D,EAE7E,KAAK,UAAY,GACbA,EACA,KAAK,gBAAgBh1B,EAAUC,CAAO,EAEtC,KAAK,sBAAsBD,EAAUC,CAAO,EACzC+yB,CACX,EACAP,EAAY,UAAU,sBAAwB,SAAUzyB,EAAUC,EAAS,CACvE,KAAK,gBAAgBD,CAAQ,EAAI,KACjC,KAAK,gBAAgBC,CAAO,EAAI,IACpC,EACAwyB,EAAY,UAAU,gBAAkB,SAAUzyB,EAAUC,EAAS,CACjE,IAAIqG,EAAQ,KAAK,IAAI,YAAY,EAC7BiX,EAAU,KAAK,WAAW,EAC1BiY,EAAW,KAAK,UAChBH,EAAY,KAAK,WACjBhW,EACA/B,EACA1d,EAAMI,EAEV,IADAC,EAAU,KAAK,IAAIA,EAASqG,EAAM,OAAS,CAAC,EACrC1G,GAAOK,GACVqd,EAAW,KAAK,YAAY1d,EAAK0d,CAAQ,EACpCA,GAMD+B,EAAS,CAAC,EACV/B,EAAS,KAAK,SAAUuR,EAAajvB,EAAKC,EAAQwwB,EAAY,CAC1D,IAAIoF,EACJ,GAAI5G,GAAe,KAAM,CACrB4G,EAAa,KAAK,kBAAkB5G,EAAaxP,EAAO,MAAM,EAC9DoW,EAAW,CAAC,EAAIC,EAChB,QAASn/B,EAAI,EAAGA,EAAIk/B,EAAW,OAAQl/B,IACnCk/B,EAAWl/B,CAAC,EAAIo/B,CAExB,MAEIF,EAAa,KAAK,kBAAkBnvB,EAAM1G,CAAG,EAAE,UAAUywB,EAAYxwB,CAAM,EAAGwf,EAAO,MAAM,EAE/FA,EAASA,EAAO,OAAOoW,CAAU,CACrC,EAAE,KAAK,IAAI,EAAGnY,EAAS,IAAI,IAAKhX,EAAMgX,EAAS,IAAI,GAAG,EAAE,OAAS,CAAC,EAClEkY,EAASlY,EAAS,MAAM,GAAG,EAAI,KAAK,mBAAmB+B,EAAQgW,EAAW9X,CAAO,EACjF3d,EAAM0d,EAAS,IAAI,IAAM,IArBzB+B,EAAS,KAAK,kBAAkB/Y,EAAM1G,CAAG,CAAC,EAC1C41B,EAAS51B,CAAG,EAAI,KAAK,mBAAmByf,EAAQgW,EAAW9X,CAAO,EAClE3d,IAsBZ,EACA6yB,EAAY,UAAU,mBAAqB,SAAUpT,EAAQgW,EAAW9X,EAAS,CAC7E,GAAI8B,EAAO,QAAU,EACjB,MAAO,CAAC,EAEZ,IAAIrE,EAAS,CAAC,EACV4a,EAAgBvW,EAAO,OACvBwW,EAAY,EAAGC,EAAe,EAC9BC,EAAS,KAAK,YACdC,EAAmB,KAAK,kBACxBC,EAAYZ,GAAa,KAAK,IAAI,EAAI9X,EAAS,CAAC,GAC7CyY,IAAqB,GAAQ,EAAI,KAAK,MAAMX,EAAY,CAAC,EAChE,SAASa,GAAgB,CACrB,IAAIC,EAAc,EAClB,GAAIF,IAAc,EACd,OAAOE,EACX,GAAIH,EACA,QAASz/B,EAAI,EAAGA,EAAI8oB,EAAO,OAAQ9oB,IAAK,CACpC,IAAIypB,EAAQX,EAAO9oB,CAAC,EACpB,GAAIypB,GAASoW,EACTD,GAAe,UACVnW,GAASqW,EACdF,GAAe5Y,MACd,IAAIyC,GAASsW,EACd,SAEA,MACR,CAEJ,OAAIP,GAAUC,IAAqB,KAC/BG,GAAe5Y,GACZ,KAAK,IAAI4Y,EAAaF,CAAS,CAC1C,CACA,SAASM,EAAStqB,EAAW,CAEzB,QADI3W,EAAM2W,EAAY4pB,EACbt/B,EAAIs/B,EAAWt/B,EAAI0V,EAAW1V,IAAK,CACxC,IAAI4B,EAAKknB,EAAO9oB,CAAC,GACb4B,IAAO,IAAMA,IAAO,KACpB7C,GAAO,EACf,CACK0lB,EAAO,SACRiI,EAASiT,EAAc,EACvBlb,EAAO,OAASiI,GAEpB6S,GAAgBxgC,EAChB0lB,EAAO,KAAK8a,CAAY,EACxBD,EAAY5pB,CAChB,CAEA,QADIgX,EAAS,EACN2S,EAAgBC,EAAYR,EAAYpS,GAAQ,CACnD,IAAI2D,EAAQiP,EAAYR,EAAYpS,EACpC,GAAI5D,EAAOuH,EAAQ,CAAC,GAAKwP,GAAS/W,EAAOuH,CAAK,GAAKwP,EAAO,CACtDG,EAAS3P,CAAK,EACd,QACJ,CACA,GAAIvH,EAAOuH,CAAK,GAAK8O,GAAqBrW,EAAOuH,CAAK,GAAK+O,EAAkB,CACzE,IAAK/O,EAAOA,GAASiP,EAAY,GACzBxW,EAAOuH,CAAK,GAAK8O,EADW9O,IAChC,CAIJ,GAAIA,EAAQiP,EAAW,CACnBU,EAAS3P,CAAK,EACd,QACJ,CAEA,IADAA,EAAQiP,EAAYR,EACfzO,EAAOA,EAAQvH,EAAO,QACnBA,EAAOuH,CAAK,GAAK+O,EADU/O,IAC/B,CAIJ,GAAIA,GAASvH,EAAO,OAChB,MAEJkX,EAAS3P,CAAK,EACd,QACJ,CAEA,QADI4P,EAAW,KAAK,IAAI5P,GAASyO,GAAaA,GAAa,IAAKQ,EAAY,CAAC,EACtEjP,EAAQ4P,GAAYnX,EAAOuH,CAAK,EAAI8O,GACvC9O,IAEJ,GAAImP,EAAQ,CACR,KAAOnP,EAAQ4P,GAAYnX,EAAOuH,CAAK,EAAI8O,GACvC9O,IAEJ,KAAOA,EAAQ4P,GAAYnX,EAAOuH,CAAK,GAAK6P,GACxC7P,GAER,KAEI,MAAOA,EAAQ4P,GAAYnX,EAAOuH,CAAK,EAAIwP,GACvCxP,IAGR,GAAIA,EAAQ4P,EAAU,CAClBD,EAAS,EAAE3P,CAAK,EAChB,QACJ,CACAA,EAAQiP,EAAYR,EAChBhW,EAAOuH,CAAK,GAAK8P,GACjB9P,IACJ2P,EAAS3P,EAAQ3D,CAAM,CAC3B,CACA,OAAOjI,CACX,EACAyX,EAAY,UAAU,kBAAoB,SAAU59B,EAAKonB,EAAQ,CAC7D,IAAIzlB,EAAM,CAAC,EACP+mB,EACJtB,EAASA,GAAU,EACnB,QAAS1lB,EAAI,EAAGA,EAAI1B,EAAI,OAAQ0B,IAAK,CACjC,IAAImjB,EAAI7kB,EAAI,WAAW0B,CAAC,EACxB,GAAImjB,GAAK,EAAG,CACR6D,EAAU,KAAK,iBAAiB/mB,EAAI,OAASylB,CAAM,EACnDzlB,EAAI,KAAK6/B,CAAG,EACZ,QAAS99B,EAAI,EAAGA,EAAIglB,EAAShlB,IACzB/B,EAAI,KAAK8/B,CAAS,CAE1B,MACS5c,GAAK,GACVljB,EAAI,KAAK4/B,CAAK,EAER1c,EAAI,IAAMA,EAAI,IAAQA,EAAI,IAAMA,EAAI,GAC1CljB,EAAI,KAAKigC,CAAW,EAEf/c,GAAK,MAAUid,EAAYjd,CAAC,EACjCljB,EAAI,KAAKogC,EAAMF,CAAQ,EAGvBlgC,EAAI,KAAKogC,CAAI,CAErB,CACA,OAAOpgC,CACX,EACAi8B,EAAY,UAAU,sBAAwB,SAAU59B,EAAKgiC,EAAiBC,EAAc,CACxF,GAAID,GAAmB,EACnB,MAAO,CAAC,EAAG,CAAC,EACZA,GAAmB,OACnBA,EAAkB,KACtBC,EAAeA,GAAgB,EAC/B,IAAIpd,EAAG7Z,EACP,IAAKA,EAAS,EAAGA,EAAShL,EAAI,SAC1B6kB,EAAI7kB,EAAI,WAAWgL,CAAM,EACrB6Z,GAAK,EACLod,GAAgB,KAAK,iBAAiBA,CAAY,EAE7Cpd,GAAK,MAAUid,EAAYjd,CAAC,EACjCod,GAAgB,EAGhBA,GAAgB,EAEhB,EAAAA,EAAeD,IAXeh3B,IAWlC,CAIJ,MAAO,CAACi3B,EAAcj3B,CAAM,CAChC,EACA4yB,EAAY,UAAU,aAAe,SAAU7yB,EAAK,CAChD,IAAI+T,EAAI,EAGR,OAFI,KAAK,cACLA,GAAK,KAAK,YAAY/T,CAAG,GAAK,KAAK,YAAYA,CAAG,EAAE,UAAY,GAChE,CAAC,KAAK,cAAgB,CAAC,KAAK,UAAUA,CAAG,EAClC+T,EAEA,KAAK,UAAU/T,CAAG,EAAE,OAAS+T,CAC5C,EACA8e,EAAY,UAAU,gBAAkB,SAAU7yB,EAAK,CACnD,MAAI,CAAC,KAAK,cAAgB,CAAC,KAAK,UAAUA,CAAG,EAClC,EAGA,KAAK,UAAUA,CAAG,EAAE,OAAS,CAE5C,EACA6yB,EAAY,UAAU,iBAAmB,SAAU/oB,EAAW,CAC1D,GAAI,KAAK,aAAc,CACnB,IAAI5B,EAAM,KAAK,yBAAyB4B,EAAW,OAAO,SAAS,EAC/DsR,EAAS,KAAK,UAAUlT,EAAI,GAAG,EACnC,OAAOkT,EAAO,QAAUA,EAAO,CAAC,EAAIlT,EAAI,OAASkT,EAAO,OAAS,CACrE,KAEI,OAAO,EAEf,EACAyX,EAAY,UAAU,uBAAyB,SAAU/oB,EAAW,CAChE,IAAI5B,EAAM,KAAK,yBAAyB4B,EAAW,OAAO,SAAS,EACnE,OAAO,KAAK,uBAAuB5B,EAAI,IAAKA,EAAI,MAAM,CAC1D,EACA2qB,EAAY,UAAU,yBAA2B,SAAUjY,EAAQuc,EAAW,CAC1E,IAAIrtB,EAAY,KAAK,oBAAoB8Q,EAAQuc,CAAS,EAC1D,OAAO,KAAK,uBAAuBrtB,CAAS,CAChD,EACA+oB,EAAY,UAAU,iCAAmC,SAAUjY,EAAQuc,EAAW,CAClF,IAAIrtB,EAAY,KAAK,oBAAoB8Q,EAAQuc,CAAS,EAC1D,OAAO,KAAK,yBAAyBrtB,EAAW,OAAO,UAAY,EAAE,CACzE,EACA+oB,EAAY,UAAU,gBAAkB,SAAU7yB,EAAK,CACnD,GAAK,KAAK,aAIN,OAAO,KAAK,UAAUA,CAAG,CAEjC,EACA6yB,EAAY,UAAU,iBAAmB,SAAUqE,EAAc,CAC7D,OAAO,KAAK,UAAYA,EAAe,KAAK,SAAW,EAC3D,EACArE,EAAY,UAAU,oBAAsB,SAAU/oB,EAAWotB,EAAc,CAC3E,OAAO,KAAK,yBAAyBptB,EAAWotB,CAAY,EAAE,GAClE,EACArE,EAAY,UAAU,uBAAyB,SAAU/oB,EAAWotB,EAAc,CAC9E,OAAO,KAAK,yBAAyBptB,EAAWotB,CAAY,EAAE,MAClE,EACArE,EAAY,UAAU,yBAA2B,SAAU/oB,EAAWotB,EAAc5Y,EAAS,CACzF,GAAIxU,EAAY,EACZ,MAAO,CAAE,IAAK,EAAG,OAAQ,CAAE,EAC/B,IAAIrS,EACAmjB,EAAS,EACTuc,EAAY,EACZl3B,EACAD,EAAM,EACNo3B,EAAY,EACZrc,EAAW,KAAK,gBAChBpkB,EAAI,KAAK,kBAAkBokB,EAAUjR,CAAS,EAC9CvW,EAAIwnB,EAAS,OACjB,GAAIxnB,GAAKoD,GAAK,EACV,IAAIqJ,EAAM+a,EAASpkB,CAAC,EAChBikB,EAAS,KAAK,aAAajkB,CAAC,EAC5B0gC,EAAUvtB,EAAYiR,EAASxnB,EAAI,CAAC,MAGxC,KAAI8jC,EAAU,CAAC9jC,EAKnB,QAHI+jC,EAAS,KAAK,UAAU,EAAI,EAC5B5Z,EAAW,KAAK,gBAAgB9C,CAAM,EACtC4Z,EAAY9W,EAAWA,EAAS,MAAM,IAAM,IACzC1d,GAAO8J,IACVstB,EAAY,KAAK,aAAaxc,CAAM,EAChC,EAAA5a,EAAMo3B,EAAYttB,GAAa8Q,GAAU0c,KAIzCt3B,GAAOo3B,EACPxc,IACIA,EAAS4Z,IACT5Z,EAAS8C,EAAS,IAAI,IAAM,EAC5BA,EAAW,KAAK,gBAAgB9C,EAAQ8C,CAAQ,EAChD8W,EAAY9W,EAAWA,EAAS,MAAM,IAAM,KAGhD2Z,IACA,KAAK,aAAa,KAAKzc,CAAM,EAC7B,KAAK,gBAAgB,KAAK5a,CAAG,GAGrC,GAAI0d,GAAYA,EAAS,MAAM,KAAO9C,EAClCnjB,EAAO,KAAK,mBAAmBimB,CAAQ,EACvC9C,EAAS8C,EAAS,MAAM,QAEvB,IAAI1d,EAAMo3B,GAAattB,GAAa8Q,EAAS0c,EAC9C,MAAO,CACH,IAAKA,EACL,OAAQ,KAAK,QAAQA,CAAM,EAAE,MACjC,EAGA7/B,EAAO,KAAK,QAAQmjB,CAAM,EAC1B8C,EAAW,KAEf,IAAI6Z,EAAa,EAAG1c,EAAa,KAAK,MAAM/Q,EAAY9J,CAAG,EAC3D,GAAI,KAAK,aAAc,CACnB,IAAIob,EAAS,KAAK,UAAUR,CAAM,EAC9BQ,IACAnb,EAASmb,EAAOP,CAAU,EACtBA,EAAa,GAAKO,EAAO,SACzBmc,EAAanc,EAAO,OACpB+b,EAAY/b,EAAOP,EAAa,CAAC,GAAKO,EAAOA,EAAO,OAAS,CAAC,EAC9D3jB,EAAOA,EAAK,UAAU0/B,CAAS,GAG3C,CAMA,OALI7Y,IAAY,QAAa,KAAK,aAAa,UAAUte,EAAM6a,EAAYD,EAAQC,CAAU,IACzFqc,EAAe,KAAK,aAAa,YAAY5Y,CAAO,GACxD6Y,GAAa,KAAK,sBAAsB1/B,EAAMy/B,EAAeK,CAAU,EAAE,CAAC,EACtE,KAAK,cAAgBJ,GAAal3B,IAClCk3B,EAAYl3B,EAAS,GACrByd,EACOA,EAAS,cAAcyZ,CAAS,EACpC,CAAE,IAAKvc,EAAQ,OAAQuc,CAAU,CAC5C,EACAtE,EAAY,UAAU,yBAA2B,SAAUjY,EAAQuc,EAAW,CAC1E,GAAI,OAAOA,EAAc,IACrB,IAAIjvB,EAAM,KAAK,wBAA2C0S,EAAQ,IAAwBA,EAAQ,MAAM,OAExG1S,EAAM,KAAK,wBAA4C0S,EAASuc,CAAS,EAC7Evc,EAAS1S,EAAI,IACbivB,EAAYjvB,EAAI,OAChB,IAAI4B,EAAY,EACZ0tB,EAAe,KACf/pB,EAAO,KACXA,EAAO,KAAK,UAAUmN,EAAQuc,EAAW,CAAC,EACtC1pB,IACAmN,EAASnN,EAAK,MAAM,IACpB0pB,EAAY1pB,EAAK,MAAM,QAE3B,IAAIgQ,EAAQzd,EAAM,EACd+a,EAAW,KAAK,aAChBpkB,EAAI,KAAK,kBAAkBokB,EAAUH,CAAM,EAC3CrnB,EAAIwnB,EAAS,OACjB,GAAIxnB,GAAKoD,GAAK,EACV,IAAIqJ,EAAM+a,EAASpkB,CAAC,EAChBmT,EAAY,KAAK,gBAAgBnT,CAAC,EAClC0gC,EAAUzc,EAASG,EAASxnB,EAAI,CAAC,MAGrC,KAAI8jC,EAAU,CAAC9jC,EAInB,QAFImqB,EAAW,KAAK,gBAAgB1d,CAAG,EACnCw0B,EAAY9W,EAAWA,EAAS,MAAM,IAAM,IACzC1d,EAAM4a,GAAQ,CACjB,GAAI5a,GAAOw0B,EAAW,CAElB,GADA/W,EAASC,EAAS,IAAI,IAAM,EACxBD,EAAS7C,EACT,MACJ8C,EAAW,KAAK,gBAAgBD,EAAQC,CAAQ,EAChD8W,EAAY9W,EAAWA,EAAS,MAAM,IAAM,GAChD,MAEID,EAASzd,EAAM,EAEnB8J,GAAa,KAAK,aAAa9J,CAAG,EAClCA,EAAMyd,EACF4Z,IACA,KAAK,aAAa,KAAKr3B,CAAG,EAC1B,KAAK,gBAAgB,KAAK8J,CAAS,EAE3C,CACA,IAAI0mB,EAAW,GACX9S,GAAY1d,GAAOw0B,GACnBhE,EAAW,KAAK,mBAAmB9S,EAAU9C,EAAQuc,CAAS,EAC9DK,EAAe9Z,EAAS,MAAM,MAG9B8S,EAAW,KAAK,QAAQ5V,CAAM,EAAE,UAAU,EAAGuc,CAAS,EACtDK,EAAe5c,GAEnB,IAAI2c,EAAa,EACjB,GAAI,KAAK,aAAc,CACnB,IAAIE,EAAU,KAAK,UAAUD,CAAY,EACzC,GAAIC,EAAS,CAET,QADIC,EAAkB,EACflH,EAAS,QAAUiH,EAAQC,CAAe,GAC7C5tB,IACA4tB,IAEJlH,EAAWA,EAAS,UAAUiH,EAAQC,EAAkB,CAAC,GAAK,EAAGlH,EAAS,MAAM,EAChF+G,EAAaG,EAAkB,EAAID,EAAQ,OAAS,CACxD,CACJ,CACA,OAAI,KAAK,aAAe,KAAK,YAAYz3B,CAAG,GAAK,KAAK,YAAYA,CAAG,EAAE,YACnE8J,GAAa,KAAK,YAAY9J,CAAG,EAAE,WAChC,CACH,IAAK8J,EACL,OAAQytB,EAAa,KAAK,sBAAsB/G,CAAQ,EAAE,CAAC,CAC/D,CACJ,EACAqC,EAAY,UAAU,uBAAyB,SAAU7yB,EAAKm3B,EAAW,CACrE,OAAO,KAAK,yBAAyBn3B,EAAKm3B,CAAS,EAAE,MACzD,EACAtE,EAAY,UAAU,oBAAsB,SAAUjY,EAAQuc,EAAW,CACrE,OAAO,KAAK,yBAAyBvc,EAAQuc,CAAS,EAAE,GAC5D,EACAtE,EAAY,UAAU,gBAAkB,UAAY,CAChD,IAAIvL,EAAa,EACb7Z,EAAO,KACX,GAAK,KAAK,aAaN,QAJIpN,EAAU,KAAK,UAAU,OACzBL,EAAM,EAAGrJ,EAAI,EACb8W,EAAO,KAAK,UAAU9W,GAAG,EACzB69B,EAAY/mB,EAAOA,EAAK,MAAM,IAAM,IACjCzN,EAAMK,GAAS,CAClB,IAAI+a,EAAS,KAAK,UAAUpb,CAAG,EAC/BsnB,GAAclM,EAASA,EAAO,OAAS,EAAI,EAC3Cpb,IACIA,EAAMw0B,IACNx0B,EAAMyN,EAAK,IAAI,IAAM,EACrBA,EAAO,KAAK,UAAU9W,GAAG,EACzB69B,EAAY/mB,EAAOA,EAAK,MAAM,IAAM,IAE5C,KAtBoB,CACpB6Z,EAAa,KAAK,UAAU,EAE5B,QADI4G,EAAW,KAAK,UACXv3B,EAAI,EAAGA,EAAIu3B,EAAS,OAAQv3B,IACjC8W,EAAOygB,EAASv3B,CAAC,EACjB2wB,GAAc7Z,EAAK,IAAI,IAAMA,EAAK,MAAM,GAEhD,CAiBA,OAAI,KAAK,cACL6Z,GAAc,KAAK,uBAAuB,GACvCA,CACX,EACAuL,EAAY,UAAU,gBAAkB,SAAU8E,EAAI,CAC7C,KAAK,iBAEV,KAAK,sBAAwB,SAAU1iC,EAAKgiC,EAAiBC,EAAc,CACvE,GAAID,IAAoB,EACpB,MAAO,CAAC,EAAG,CAAC,EACXA,IACDA,EAAkB,KACtBC,EAAeA,GAAgB,EAC/B,IAAIpd,EAAG7Z,EACP,IAAKA,EAAS,EAAGA,EAAShL,EAAI,SAC1B6kB,EAAI7kB,EAAI,OAAOgL,CAAM,EACjB6Z,IAAM,IACNod,GAAgB,KAAK,iBAAiBA,CAAY,EAGlDA,GAAgBS,EAAG,kBAAkB7d,CAAC,EAEtC,EAAAod,EAAeD,IAReh3B,IAQlC,CAIJ,MAAO,CAACi3B,EAAcj3B,CAAM,CAChC,EACJ,EACA4yB,EAAY,UAAU,sBAAwB,UAAY,CACtD,IAAI3qB,EAAM,KAAK,UAAU,UAAU,EACnC,GAAIA,EAAI,SAAW,EACf,OAAOA,EAAI,MAAQ,EAAI,GAAK,KAAK,IAAI,oBAAoB,EAE7D,IAAIuiB,EAAc,KAAK,QAAQviB,EAAI,GAAG,EACtC,OAAOuiB,EAAYviB,EAAI,OAAS,CAAC,CACrC,EACA2qB,EAAY,UAAU,QAAU,UAAY,CACnC,KAAK,YACN,KAAK,YAAY,YAAY,IAAI,EACjC,KAAK,YAAY,QAAQ,EACzB,KAAK,UAAY,IAErB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACpB,KAAK,KACL,KAAK,IAAI,IAAI,SAAU,KAAK,SAAS,EAErC,KAAK,YACL,KAAK,UAAU,IAAI,eAAgB,KAAK,kBAAkB,EAC1D,KAAK,UAAU,IAAI,kBAAmB,KAAK,kBAAkB,GAEjE,KAAK,UAAU,OAAO,CAC1B,EACOA,CACX,EAAE,EACFA,EAAY,KAAO,EACnBA,EAAY,UAAU,OAASp0B,EAAO,OACtCo0B,EAAY,UAAU,SAAWA,EAAY,UAAU,SACvDA,EAAY,UAAU,oBAAsB,CACxC,KAAM,UAAY,CAAE,EACpB,KAAM,UAAY,CAAE,EACpB,QAAS,UAAY,CAAE,EACvB,QAAS,UAAY,CAAE,EACvB,MAAO,UAAY,CAAE,EACrB,IAAK,UAAY,CAAE,EACnB,aAAc,UAAY,CAAE,EAC5B,cAAe,UAAY,CAAE,EAC7B,WAAY,UAAY,CAAE,CAC9B,EACAA,EAAY,UAAU,WAAa,GACnCA,EAAY,UAAU,MAAQ,KAC9BA,EAAY,UAAU,QAAU,KAChCA,EAAY,UAAU,WAAa,EACnCA,EAAY,UAAU,YAAc,EACpCA,EAAY,UAAU,WAAa,GACnCA,EAAY,UAAU,aAAe,GACrCA,EAAY,UAAU,gBAAkB,CACpC,IAAK,KACL,IAAK,IACT,EACAA,EAAY,UAAU,YAAc,KACpCA,EAAY,UAAU,YAAckE,EACpCz6B,EAAI,UAAUu2B,EAAY,UAAWt3B,CAAY,EACjD,IAAIy7B,EAAO,EAAGF,EAAW,EAAGhB,EAAoB,EAAGC,EAAmB,EAAGc,EAAc,EAAGL,EAAQ,GAAIC,EAAM,GAAIC,EAAY,GAC5H,SAASK,EAAYjd,EAAG,CACpB,OAAIA,EAAI,KACG,GACJA,GAAK,MAAUA,GAAK,MACvBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,KAC5B,CACArmB,EAAQ,wBAAwB,EAAE,QAAQ,KAAKo/B,EAAY,SAAS,EACpEp/B,EAAQ,8BAA8B,EAAE,aAAa,KAAKo/B,EAAY,SAAS,EAC/Ep0B,EAAO,cAAco0B,EAAY,UAAW,UAAW,CACnD,KAAM,CACF,IAAK,SAAU/8B,EAAO,CASlB,GARI,CAACA,GAASA,GAAS,MACnBA,EAAQ,GACHA,GAAS,OACdA,EAAQ,GACHA,GAAS,cACdA,EAAQ,GACH,OAAOA,GAAS,WACrBA,EAAQ,SAASA,EAAO,EAAE,GAAK,IAC/B,KAAK,OAASA,EAGlB,GADA,KAAK,MAAQA,EACT,CAACA,EACD,KAAK,eAAe,EAAK,MAExB,CACD,IAAI+lB,EAAM,OAAO/lB,GAAS,SAAWA,EAAQ,KAC7C,KAAK,kBAAkB+lB,EAAKA,CAAG,EAC/B,KAAK,eAAe,EAAI,CAC5B,CACJ,EACA,IAAK,UAAY,CACb,OAAI,KAAK,eAAe,EAChB,KAAK,OAAS,GACP,cACN,KAAK,kBAAkB,EAAE,IAEvB,KAAK,MADD,OAGR,KACX,EACA,WAAY,EAChB,EACA,WAAY,CACR,IAAK,SAAUpnB,EAAK,CAChBA,EAAMA,GAAO,OACP,KAAK,MAAM,MAAQ,OACnBA,GAAO,OACTA,GAAO,KAAK,cACZ,KAAK,YAAcA,EACf,KAAK,eACL,KAAK,aAAe,GACpB,KAAK,eAAe,EAAI,GAGpC,EACA,aAAc,MAClB,EACA,iBAAkB,CACd,IAAK,UAAY,CACT,KAAK,eACL,KAAK,aAAe,GACpB,KAAK,eAAe,EAAI,EAEhC,EACA,aAAc,EAClB,EACA,gBAAiB,CACb,IAAK,UAAY,CAAE,KAAK,QAAQ,kBAAkB,CAAG,EACrD,aAAc,CAClB,EACA,UAAW,CACP,IAAK,SAAUu/B,EAAW,CACtB,KAAK,WAAaA,EAClB,KAAK,YAAY,EACbA,GACA,KAAK,aAAa,CAC1B,EACA,aAAc,EAClB,EACA,YAAa,CAAE,aAAc,EAAK,EAClC,QAAS,CACL,IAAK,SAAUrW,EAAS,CACpBA,EAAU,SAASA,CAAO,EACtBA,EAAU,GAAK,KAAK,WAAaA,IACjC,KAAK,UAAY,GACjB,KAAK,gBAAkB,CAAC,EACxB,KAAK,SAAWA,EAChB,KAAK,QAAQ,eAAe,EAEpC,EACA,aAAc,EACd,WAAY,EAChB,EACA,uBAAwB,CAAE,aAAc,EAAM,EAC9C,UAAW,CACP,IAAK,SAAUlpB,EAAK,CAAE,KAAK,aAAaA,CAAG,CAAG,EAC9C,WAAY,EAChB,EACA,UAAW,CACP,IAAK,SAAUA,EAAK,CAAE,KAAK,QAAQ,iBAAiB,CAAG,EACvD,aAAc,EAClB,EACA,YAAa,CACT,IAAK,SAAUA,EAAK,CAAE,KAAK,IAAI,eAAeA,CAAG,CAAG,EACpD,IAAK,UAAY,CAAE,OAAO,KAAK,IAAI,eAAe,CAAG,EACrD,WAAY,EAChB,EACA,KAAM,CACF,IAAK,SAAUA,EAAK,CAAE,KAAK,QAAQA,CAAG,CAAG,EACzC,IAAK,UAAY,CAAE,OAAO,KAAK,OAAS,EACxC,WAAY,EAChB,CACJ,CAAC,EACD9B,EAAQ,YAAckgC,CAEtB,CAAC,EAED,IAAI,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,eAAe,cAAc,WAAW,EAAG,SAASp/B,EAASd,EAASC,EAAO,CAAC,aACpI,IAAI2K,EAAO9J,EAAQ,YAAY,EAC3B6I,EAAM7I,EAAQ,WAAW,EACzBiM,EAAQjM,EAAQ,SAAS,EAAE,MAC3BmkC,EAAwB,UAAY,CACpC,SAASA,GAAS,CACd,KAAK,SAAW,CAAC,CACrB,CACA,OAAAA,EAAO,UAAU,IAAM,SAAUn/B,EAAS,CACtC,OAAA6D,EAAI,MAAM,KAAK,SAAU7D,CAAO,EACzB,IACX,EACAm/B,EAAO,UAAU,WAAa,UAAY,CACtC,OAAOr6B,EAAK,WAAW,KAAK,QAAQ,CACxC,EACAq6B,EAAO,UAAU,WAAa,SAAUn/B,EAAS,CAC7C,KAAK,SAAWA,CACpB,EACAm/B,EAAO,UAAU,KAAO,SAAUt3B,EAAS,CACvC,IAAI7H,EAAU,KAAK,SACf+rB,EAAW,KAAK,eAAelkB,EAAS7H,CAAO,EACnD,GAAI,CAAC+rB,EACD,MAAO,GACX,IAAI4M,EAAa,KACjB,OAAA5M,EAAS,QAAQ,SAAUqT,EAAIC,EAAIC,EAAIC,EAAI,CAEvC,OADA5G,EAAa,IAAI1xB,EAAMm4B,EAAIC,EAAIC,EAAIC,CAAE,EACjCF,GAAME,GAAMv/B,EAAQ,OAA4BA,EAAQ,MAAO,OAC5DA,EAAQ,aAAe,IAAS24B,EAAW,QAA2B34B,EAAQ,KAAM,GACvF24B,EAAa,KACN,IAEJ,EACX,CAAC,EACMA,CACX,EACAwG,EAAO,UAAU,QAAU,SAAUt3B,EAAS,CAC1C,IAAI7H,EAAU,KAAK,SACnB,GAAI,CAACA,EAAQ,OACT,MAAO,CAAC,EACZ,KAAK,gBAAgBA,CAAO,EAC5B,IAAIsH,EAAQtH,EAAQ,MAChBiO,EAAQ3G,EACNO,EAAQ,SAASP,EAAM,MAAM,IAAKA,EAAM,IAAI,GAAG,EAC/CO,EAAQ,IAAI,YAAY,EAC1B6qB,EAAS,CAAC,EACVvtB,EAAKnF,EAAQ,GACjB,GAAIA,EAAQ,aAAc,CACtB,IAAI/C,EAAMkI,EAAG,OACT05B,EAAS5wB,EAAM,OAAShR,EACxBuiC,EACJ/9B,EAAO,QAAS8F,EAAMpC,EAAG,QAAU,EAAGoC,GAAOs3B,EAAQt3B,IAAO,CACxD,QAASX,EAAI,EAAGA,EAAI3J,EAAK2J,IACrB,GAAIqH,EAAM1G,EAAMX,CAAC,EAAE,OAAOzB,EAAGyB,CAAC,CAAC,GAAK,GAChC,SAASnF,EACjB,IAAIywB,EAAYjkB,EAAM1G,CAAG,EACrBvI,EAAOiP,EAAM1G,EAAMtK,EAAM,CAAC,EAC1Bm5B,EAAalE,EAAU,OAASA,EAAU,MAAM/sB,EAAG,CAAC,CAAC,EAAE,CAAC,EAAE,OAC1DwI,EAAW3O,EAAK,MAAMmG,EAAGlI,EAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OACtCuiC,GAAaA,EAAU,IAAI,MAAQj4B,GACnCi4B,EAAU,IAAI,OAASpJ,IAG3B1D,EAAO,KAAK8M,EAAY,IAAIv4B,EAAMM,EAAK6uB,EAAY7uB,EAAMtK,EAAM,EAAG0Q,CAAQ,CAAC,EACvE1Q,EAAM,IACNsK,EAAMA,EAAMtK,EAAM,GAC1B,CACJ,KAEI,SAASsB,EAASL,EAAI,EAAGA,EAAI+P,EAAM,OAAQ/P,IACvC,GAAI,KAAK,mBAAmB8B,CAAO,EAAG,CAClC,IAAIy/B,EAAMxxB,EAAM,OAAS,EAEzB,GADA1P,EAAU,KAAK,kBAAkBsJ,EAAS1C,EAAIjH,EAAGuhC,CAAG,EAChDlhC,EAAS,CACT,IAAIo0B,EAAUp0B,EAAQ,QAAUkhC,EAAMlhC,EAAQ,OAAS,EAAIkhC,EACvD9M,EAAUz0B,IACVA,EAAIy0B,GACRD,EAAO,KAAK,IAAIzrB,EAAM1I,EAAQ,SAAUA,EAAQ,SAAUA,EAAQ,OAAQA,EAAQ,MAAM,CAAC,CAC7F,CACJ,KACK,CACDA,EAAUuG,EAAK,gBAAgBmJ,EAAM/P,CAAC,EAAGiH,CAAE,EAC3C,QAASyB,EAAI,EAAGA,EAAIrI,EAAQ,OAAQqI,IAAK,CACrC,IAAIigB,EAAQtoB,EAAQqI,CAAC,EACrB8rB,EAAO,KAAK,IAAIzrB,EAAM/I,EAAG2oB,EAAM,OAAQ3oB,EAAG2oB,EAAM,OAASA,EAAM,MAAM,CAAC,CAC1E,CACJ,CAGR,GAAIvf,EAAO,CAIP,QAHIH,EAAcG,EAAM,MAAM,OAC1BD,EAAYC,EAAM,IAAI,OACtBpJ,EAAI,EAAG0I,EAAI8rB,EAAO,OAAS,EACxBx0B,EAAI0I,GAAK8rB,EAAOx0B,CAAC,EAAE,MAAM,OAASiJ,GAAeurB,EAAOx0B,CAAC,EAAE,MAAM,KAAO,GAC3EA,IAEJ,QADIkJ,EAASE,EAAM,IAAI,IAAMA,EAAM,MAAM,IAClCpJ,EAAI0I,GAAK8rB,EAAO9rB,CAAC,EAAE,IAAI,OAASS,GAAaqrB,EAAO9rB,CAAC,EAAE,IAAI,KAAOQ,GACrER,IAEJ,IADA8rB,EAASA,EAAO,MAAMx0B,EAAG0I,EAAI,CAAC,EACzB1I,EAAI,EAAG0I,EAAI8rB,EAAO,OAAQx0B,EAAI0I,EAAG1I,IAClCw0B,EAAOx0B,CAAC,EAAE,MAAM,KAAOoJ,EAAM,MAAM,IACnCorB,EAAOx0B,CAAC,EAAE,IAAI,KAAOoJ,EAAM,MAAM,GAEzC,CACA,OAAOorB,CACX,EACAyM,EAAO,UAAU,mBAAqB,SAAUO,EAAe,CAY3D,QAXIC,EAAW,CACX,WAAY,GACZ,UAAW,GACX,OAAQ,GACR,OAAQ,GACR,OAAQ,GACR,UAAW,GACX,EAAG,IACH,EAAG,GACP,EACIC,EAAc,GACT1hC,EAAI,EAAGjB,EAAMyiC,EAAc,OAAQxhC,EAAIjB,EAAKiB,IAAK,CACtD,IAAI2hC,EAASH,EAAc,WAAWxhC,CAAC,EACvC,GAAI2hC,IAAWF,EAAS,UAAW,CAE/B,GADAzhC,IACIA,GAAKjB,EAAK,CACV2iC,GAAe,KACf,KACJ,CACA,IAAIE,EAAaJ,EAAc,WAAWxhC,CAAC,EAC3C,OAAQ4hC,EAAY,CAChB,KAAKH,EAAS,UACVC,GAAe,KACf,MACJ,KAAKD,EAAS,EACVC,GAAe;AAAA,EACf,MACJ,KAAKD,EAAS,EACVC,GAAe,IACf,KACR,CACA,QACJ,CACA,GAAIC,IAAWF,EAAS,WAAY,CAEhC,GADAzhC,IACIA,GAAKjB,EAAK,CACV2iC,GAAe,IACf,KACJ,CACA,IAAIG,EAAeL,EAAc,WAAWxhC,CAAC,EAC7C,GAAI6hC,IAAiBJ,EAAS,WAAY,CACtCC,GAAe,KACf,QACJ,CACA,GAAIG,IAAiBJ,EAAS,QAAUI,IAAiBJ,EAAS,UAAW,CACzEC,GAAe,KACf,QACJ,CACA,GAAID,EAAS,QAAUI,GAAgBA,GAAgBJ,EAAS,OAAQ,CACpEC,GAAe,IAAMF,EAAcxhC,CAAC,EACpC,QACJ,CACJ,CACA0hC,GAAeF,EAAcxhC,CAAC,CAClC,CACA,OAAO0hC,GAAeF,CAC1B,EACAP,EAAO,UAAU,QAAU,SAAUpR,EAAO6R,EAAa,CACrD,IAAI5/B,EAAU,KAAK,SACfmF,EAAK,KAAK,gBAAgBnF,CAAO,EACrC,GAAIA,EAAQ,aACR,OAAO4/B,EACX,GAAKz6B,EAEL,KAAIstB,EAAW,KAAK,mBAAmBzyB,CAAO,EAC1CyyB,IACA1E,EAAQA,EAAM,QAAQ,cAAe;AAAA,CAAI,GAC7C,IAAIlH,EAAQ1hB,EAAG,KAAK4oB,CAAK,EACzB,GAAI,CAAClH,GAAU,CAAC4L,GAAY5L,EAAM,CAAC,EAAE,QAAUkH,EAAM,OACjD,OAAO,KAKX,GAJA6R,EAAc5/B,EAAQ,OAChB,KAAK,mBAAmB4/B,CAAW,EACnCA,EAAY,QAAQ,MAAO,MAAM,EACvCA,EAAc7R,EAAM,QAAQ5oB,EAAIy6B,CAAW,EACvC5/B,EAAQ,aAAc,CACtB4/B,EAAcA,EAAY,MAAM,EAAE,EAClC,QAAS1hC,EAAI,KAAK,IAAI6vB,EAAM,OAAQA,EAAM,MAAM,EAAG7vB,KAAM,CACrD,IAAI4B,EAAKiuB,EAAM7vB,CAAC,EACZ4B,GAAMA,EAAG,YAAY,GAAKA,EAC1B8/B,EAAY1hC,CAAC,EAAI0hC,EAAY1hC,CAAC,EAAE,YAAY,EAE5C0hC,EAAY1hC,CAAC,EAAI0hC,EAAY1hC,CAAC,EAAE,YAAY,CACpD,CACA0hC,EAAcA,EAAY,KAAK,EAAE,CACrC,CACA,OAAOA,EACX,EACAT,EAAO,UAAU,gBAAkB,SAAUn/B,EAASggC,EAAuB,CACzE,GAAIhgC,EAAQ,kBAAkB,OAC1B,OAAOA,EAAQ,GAAKA,EAAQ,OAChC,IAAIigC,EAASjgC,EAAQ,OACrB,GAAI,CAACA,EAAQ,OACT,OAAOA,EAAQ,GAAK,GACnBA,EAAQ,SACTigC,EAASn7B,EAAK,aAAam7B,CAAM,GACrC,IAAIlzB,EAAW/M,EAAQ,cAAgB,KAAO,MAC9C,GAAI,CACA,IAAI,OAAOigC,EAAQ,GAAG,EACtBjgC,EAAQ,qBAAuB,GAC/B+M,GAAY,GAChB,MACU,CACN/M,EAAQ,qBAAuB,EACnC,CAIA,GAHIA,EAAQ,YACRigC,EAASC,EAAgBD,EAAQjgC,CAAO,GAC5CA,EAAQ,aAAe,CAACggC,GAAyB,SAAS,KAAKC,CAAM,EACjEjgC,EAAQ,aACR,OAAOA,EAAQ,GAAK,KAAK,yBAAyBigC,EAAQlzB,CAAQ,EACtE,GAAI,CACA,IAAI5H,EAAK,IAAI,OAAO86B,EAAQlzB,CAAQ,CACxC,MACU,CACN5H,EAAK,EACT,CACA,OAAOnF,EAAQ,GAAKmF,CACxB,EACAg6B,EAAO,UAAU,yBAA2B,SAAUc,EAAQlzB,EAAU,CAGpE,QAFI9H,EAAQg7B,EAAO,QAAQ,cAAe;AAAA,EAAM,EAAE,MAAM;AAAA,CAAI,EACxD96B,EAAK,CAAC,EACDjH,EAAI,EAAGA,EAAI+G,EAAM,OAAQ/G,IAC9B,GAAI,CACAiH,EAAG,KAAK,IAAI,OAAOF,EAAM/G,CAAC,EAAG6O,CAAQ,CAAC,CAC1C,MACU,CACN,MAAO,EACX,CACJ,OAAO5H,CACX,EACAg6B,EAAO,UAAU,mBAAqB,SAAUn/B,EAAS,CACrD,OAAOA,EAAQ,IAAM,iBAAiB,KAAKA,EAAQ,GAAG,MAAM,GAAKA,EAAQ,QAAU,CAACA,EAAQ,YAChG,EACAm/B,EAAO,UAAU,kBAAoB,SAAUt3B,EAAS1C,EAAI5H,EAAO0B,EAAM,CAErE,QADID,EAAM2yB,EAAQwO,EAASt4B,EAAStK,CAAK,EAChCgK,EAAMhK,EAAOgK,GAAOtI,GAAO,CAChC,QAASf,EAAI,EAAGA,EAAIyzB,GACZ,EAAApqB,EAAMtI,GADaf,IAAK,CAG5B,IAAIuqB,EAAO5gB,EAAQ,QAAQN,GAAK,EAChCvI,EAAOA,GAAQ,KAAOypB,EAAOzpB,EAAO;AAAA,EAAOypB,CAC/C,CACA,IAAI5B,EAAQ1hB,EAAG,KAAKnG,CAAI,EAExB,GADAmG,EAAG,UAAY,EACX0hB,EAAO,CACP,IAAIuZ,EAAcphC,EAAK,MAAM,EAAG6nB,EAAM,KAAK,EAAE,MAAM;AAAA,CAAI,EACnDwZ,EAAcxZ,EAAM,CAAC,EAAE,MAAM;AAAA,CAAI,EACjC3f,EAAW3J,EAAQ6iC,EAAY,OAAS,EACxC5c,EAAW4c,EAAYA,EAAY,OAAS,CAAC,EAAE,OAC/Ch5B,EAASF,EAAWm5B,EAAY,OAAS,EACzC5c,EAAS4c,EAAY,QAAU,EAC7B7c,EAAW6c,EAAY,CAAC,EAAE,OAC1BA,EAAYA,EAAY,OAAS,CAAC,EAAE,OAC1C,MAAO,CACH,SAAUn5B,EACV,SAAUsc,EACV,OAAQpc,EACR,OAAQqc,CACZ,CACJ,CACJ,CACA,OAAO,IACX,EACA0b,EAAO,UAAU,mBAAqB,SAAUt3B,EAAS1C,EAAIwI,EAAUpQ,EAAO8xB,EAAO,CAEjF,QADIrwB,EAAM2yB,EAAQwO,EAASt4B,EAAStK,CAAK,EAAG+iC,EAAYz4B,EAAQ,QAAQtK,CAAK,EAAE,OAASoQ,EAC/EpG,EAAMhK,EAAOgK,GAAO8nB,GAAQ,CACjC,QAASnxB,EAAI,EAAGA,EAAIyzB,GAASpqB,GAAO8nB,EAAOnxB,IAAK,CAC5C,IAAIuqB,EAAO5gB,EAAQ,QAAQN,GAAK,EAChCvI,EAAOA,GAAQ,KAAOypB,EAAOA,EAAO;AAAA,EAAOzpB,CAC/C,CACA,IAAI6nB,EAAQ0Z,EAAuBvhC,EAAMmG,EAAIm7B,CAAS,EACtD,GAAIzZ,EAAO,CACP,IAAIuZ,EAAcphC,EAAK,MAAM,EAAG6nB,EAAM,KAAK,EAAE,MAAM;AAAA,CAAI,EACnDwZ,EAAcxZ,EAAM,CAAC,EAAE,MAAM;AAAA,CAAI,EACjC3f,EAAWK,EAAM64B,EAAY,OAC7B5c,EAAW4c,EAAYA,EAAY,OAAS,CAAC,EAAE,OAC/Ch5B,EAASF,EAAWm5B,EAAY,OAAS,EACzC5c,EAAS4c,EAAY,QAAU,EAC7B7c,EAAW6c,EAAY,CAAC,EAAE,OAC1BA,EAAYA,EAAY,OAAS,CAAC,EAAE,OAC1C,MAAO,CACH,SAAUn5B,EACV,SAAUsc,EACV,OAAQpc,EACR,OAAQqc,CACZ,CACJ,CACJ,CACA,OAAO,IACX,EACA0b,EAAO,UAAU,eAAiB,SAAUt3B,EAAS7H,EAAS,CAC1D,IAAImF,EAAK,KAAK,gBAAgBnF,CAAO,EACrC,GAAI,CAACmF,EACD,MAAO,GACX,IAAIstB,EAAW,KAAK,mBAAmBzyB,CAAO,EAC1CwgC,EAAY,KAAK,kBACjBC,EAAa,KAAK,mBAClBC,EAAY1gC,EAAQ,WAAa,GACjC2gC,EAAc3gC,EAAQ,aAAe,GACrCd,EAAsBiG,EAAG,QACzBmC,EAAQtH,EAAQ,MAChBzC,EAAQyC,EAAQ,MACfzC,IACDA,EAAQ+J,EAAQA,EAAMo5B,EAAY,MAAQ,OAAO,EAAI74B,EAAQ,UAAU,SAAS,GAChFtK,EAAM,QACNA,EAAQA,EAAMojC,GAAeD,EAAY,MAAQ,OAAO,GAC5D,IAAI/4B,EAAWL,EAAQA,EAAM,MAAM,IAAM,EACrCM,EAAUN,EAAQA,EAAM,IAAI,IAAMO,EAAQ,UAAU,EAAI,EAC5D,GAAI64B,EACA,IAAIE,EAAU,SAAUjmC,EAAU,CAC9B,IAAI4M,EAAMhK,EAAM,IAChB,GAAI,CAAAsjC,EAAct5B,EAAKhK,EAAM,OAAQ5C,CAAQ,EAE7C,KAAK4M,IAAOA,GAAOI,EAAUJ,IACzB,GAAIs5B,EAAct5B,EAAK,OAAO,UAAW5M,CAAQ,EAC7C,OACR,GAAIqF,EAAQ,MAAQ,IAEpB,IAAKuH,EAAMK,EAASD,EAAWpK,EAAM,IAAKgK,GAAOI,EAAUJ,IACvD,GAAIs5B,EAAct5B,EAAK,OAAO,UAAW5M,CAAQ,EAC7C,QACZ,MAGA,KAAIimC,EAAU,SAAUjmC,EAAU,CAC9B,IAAI4M,EAAMhK,EAAM,IAChB,GAAI,CAAAsjC,EAAct5B,EAAKhK,EAAM,OAAQ5C,CAAQ,EAE7C,KAAK4M,EAAMA,EAAM,EAAGA,GAAOK,EAASL,IAChC,GAAIs5B,EAAct5B,EAAK,EAAG5M,CAAQ,EAC9B,OACR,GAAIqF,EAAQ,MAAQ,IAEpB,IAAKuH,EAAMI,EAAUC,EAAUrK,EAAM,IAAKgK,GAAOK,EAASL,IACtD,GAAIs5B,EAAct5B,EAAK,EAAG5M,CAAQ,EAC9B,QACZ,EAEJ,GAAIqF,EAAQ,aACR,IAAI/C,EAAMkI,EAAG,OACT07B,EAAgB,SAAUt5B,EAAKqc,EAAQjpB,EAAU,CACjD,IAAIuM,EAAWw5B,EAAYn5B,EAAMtK,EAAM,EAAIsK,EAC3C,GAAI,EAAAL,EAAW,GAAKA,EAAWjK,EAAM4K,EAAQ,UAAU,GAEvD,KAAI7I,EAAO6I,EAAQ,QAAQX,CAAQ,EAC/BkvB,EAAap3B,EAAK,OAAOmG,EAAG,CAAC,CAAC,EAClC,GAAI,GAACu7B,GAAatK,EAAaxS,GAAUwS,IAAe,IAExD,SAASl4B,EAAI,EAAGA,EAAIjB,EAAKiB,IAErB,GADAc,EAAO6I,EAAQ,QAAQX,EAAWhJ,CAAC,EAC/Bc,EAAK,OAAOmG,EAAGjH,CAAC,CAAC,GAAK,GACtB,OAER,IAAIyP,EAAW3O,EAAK,MAAMmG,EAAGlI,EAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAC1C,GAAI,EAAAyjC,GAAa/yB,EAAWiW,IAExBjpB,EAASuM,EAAUkvB,EAAYlvB,EAAWjK,EAAM,EAAG0Q,CAAQ,EAC3D,MAAO,IACf,UAEK+yB,EACL,IAAIG,EAAgB,SAAUt5B,EAAKoG,EAAUhT,EAAU,CACnD,GAAI83B,EAAU,CACV,IAAIhjB,EAAMgxB,EAAW54B,EAAS1C,EAAIwI,EAAUpG,EAAKI,CAAQ,EACzD,GAAI,CAAC8H,EACD,MAAO,GACX,GAAI9U,EAAS8U,EAAI,SAAUA,EAAI,SAAUA,EAAI,OAAQA,EAAI,MAAM,EAC3D,MAAO,EACf,KACK,CACD,IAAIzQ,EAAO6I,EAAQ,QAAQN,CAAG,EAC1BhJ,EAAU,CAAC,EACXwI,EAAG9H,EAAO,EAEd,IADAkG,EAAG,UAAY,EACP4B,EAAI5B,EAAG,KAAKnG,CAAI,GAAI,CACxB,IAAIiyB,EAASlqB,EAAE,CAAC,EAAE,OAElB,GADA9H,EAAO8H,EAAE,MACL,CAACkqB,EAAQ,CACT,GAAIhyB,GAAQD,EAAK,OACb,MACJmG,EAAG,UAAYlG,GAAQ6F,EAAK,eAAe9F,EAAMC,EAAMC,CAAmB,CAC9E,CACA,GAAI6H,EAAE,MAAQkqB,EAAStjB,EACnB,MACJpP,EAAQ,KAAKwI,EAAE,MAAOkqB,CAAM,CAChC,CACA,QAAS/yB,EAAIK,EAAQ,OAAS,EAAGL,GAAK,EAAGA,GAAK,EAAG,CAC7C,IAAIsJ,EAASjJ,EAAQL,EAAI,CAAC,EACtB+yB,EAAS1yB,EAAQL,CAAC,EACtB,GAAIvD,EAAS4M,EAAKC,EAAQD,EAAKC,EAASypB,CAAM,EAC1C,MAAO,EACf,CACJ,CACJ,MAGA,KAAI4P,EAAgB,SAAUt5B,EAAK6uB,EAAYz7B,EAAU,CAErD,GADAwK,EAAG,UAAYixB,EACX3D,EAAU,CACV,IAAIhjB,EAAM+wB,EAAU34B,EAAS1C,EAAIoC,EAAKK,CAAO,EAC7C,GAAI6H,EAAK,CACL,IAAIkjB,EAAUljB,EAAI,QAAU7H,EAAU6H,EAAI,OAAS,EAAI7H,EACnD+qB,EAAUprB,IACVA,EAAMorB,EACd,CACA,GAAI,CAACljB,EACD,MAAO,GACX,GAAI9U,EAAS8U,EAAI,SAAUA,EAAI,SAAUA,EAAI,OAAQA,EAAI,MAAM,EAC3D,MAAO,EACf,KAKI,SAHIzQ,EAAO6I,EAAQ,QAAQN,CAAG,EAC1BtI,EACA8H,EACIA,EAAI5B,EAAG,KAAKnG,CAAI,GAAI,CACxB,IAAIiyB,EAASlqB,EAAE,CAAC,EAAE,OAElB,GADA9H,EAAO8H,EAAE,MACLpM,EAAS4M,EAAKtI,EAAMsI,EAAKtI,EAAOgyB,CAAM,EACtC,MAAO,GACX,GAAI,CAACA,IACD9rB,EAAG,UAAYlG,GAAQ6F,EAAK,eAAe9F,EAAMC,EAAMC,CAAmB,EACtED,GAAQD,EAAK,QACb,MAAO,EAEnB,CAER,EAEJ,MAAO,CAAE,QAAS4hC,CAAQ,CAC9B,EACOzB,CACX,EAAE,EACF,SAASe,EAAgBD,EAAQjgC,EAAS,CACtC,IAAI8gC,EAAqBh8B,EAAK,mBAAmB,EACjD,SAASi8B,EAAa1f,EAAG2f,EAAW,CAC5BA,IAAc,SAAUA,EAAY,IACxC,IAAIC,EAAaH,GAAsB9gC,EAAQ,qBAAuB,IAAI,OAAO,kBAAmB,GAAG,EAAI,IAAI,OAAO,KAAK,EAC3H,OAAIihC,EAAW,KAAK5f,CAAC,GAAKrhB,EAAQ,OAC1B8gC,GAAsB9gC,EAAQ,qBAC1BghC,EACO,0BACJ,yBAEJ,MAEJ,EACX,CACA,IAAIE,EAAc,MAAM,KAAKjB,CAAM,EAC/Be,EAAYE,EAAY,CAAC,EACzBC,EAAWD,EAAYA,EAAY,OAAS,CAAC,EACjD,OAAOH,EAAaC,CAAS,EAAIf,EAASc,EAAaI,EAAU,EAAK,CAC1E,CACA,SAASZ,EAAuBvhC,EAAMmG,EAAIm7B,EAAW,CAGjD,QAFIzZ,EAAQ,KACR4K,EAAO,EACJA,GAAQzyB,EAAK,QAAQ,CACxBmG,EAAG,UAAYssB,EACf,IAAI2P,EAAWj8B,EAAG,KAAKnG,CAAI,EAC3B,GAAI,CAACoiC,EACD,MACJ,IAAI3jC,EAAM2jC,EAAS,MAAQA,EAAS,CAAC,EAAE,OACvC,GAAI3jC,EAAMuB,EAAK,OAASshC,EACpB,OACA,CAACzZ,GAASppB,EAAMopB,EAAM,MAAQA,EAAM,CAAC,EAAE,UACvCA,EAAQua,GACZ3P,EAAO2P,EAAS,MAAQ,CAC5B,CACA,OAAOva,CACX,CACA,SAASsZ,EAASt4B,EAAStK,EAAO,CAC9B,IAAIlC,EAAO,IAAMgmC,EAAgB,CAAE,IAAK9jC,EAAO,OAAQ,CAAE,EAAG64B,EAAavuB,EAAQ,IAAI,gBAAgBw5B,CAAa,EAAGC,EAAclL,EAAa/6B,EAAMkmC,EAAiB15B,EAAQ,IAAI,gBAAgBy5B,CAAW,EAAGE,EAAaD,EAAe,IAC7O,OAAOC,EAAa,CACxB,CACAtnC,EAAQ,OAASilC,CAEjB,CAAC,EAED,IAAI,OAAO,4BAA4B,CAAC,UAAU,UAAU,SAAS,eAAe,mBAAmB,EAAG,SAASnkC,EAASd,EAASC,EAAO,CAAC,aAC7I,IAAIqX,EAAa,MAAQ,KAAK,WAAe,UAAY,CACrD,IAAIC,EAAgB,SAAUC,EAAGC,EAAG,CAChC,OAAAF,EAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUC,EAAGC,EAAG,CAAED,EAAE,UAAYC,CAAG,GAC1E,SAAUD,EAAGC,EAAG,CAAE,QAASjK,KAAKiK,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGjK,CAAC,IAAGgK,EAAEhK,CAAC,EAAIiK,EAAEjK,CAAC,EAAG,EAC7F+J,EAAcC,EAAGC,CAAC,CAC7B,EACA,OAAO,SAAUD,EAAGC,EAAG,CACnB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5FF,EAAcC,EAAGC,CAAC,EAClB,SAASC,GAAK,CAAE,KAAK,YAAcF,CAAG,CACtCA,EAAE,UAAYC,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKC,EAAG,UAAYD,EAAE,UAAW,IAAIC,EACnF,CACJ,EAAG,EAAOyL,EAAUriB,EAAQ,aAAa,EACrCuE,EAAYvE,EAAQ,kBAAkB,EACtCymC,EAAWpkB,EAAQ,SACnBqkB,EAAkC,UAAY,CAC9C,SAASA,EAAiB17B,EAAQ27B,EAAU,CACxC,KAAK,MAAM37B,EAAQ27B,EAAU,EAAK,CACtC,CACA,OAAAD,EAAiB,UAAU,MAAQ,SAAU17B,EAAQ27B,EAAUC,EAAgB,CAC3E,KAAK,SAAWD,IAAapiC,EAAU,MAAQ,MAAQ,OACvD,KAAK,SAAW,CAAC,EACjB,KAAK,kBAAoB,CAAC,EAC1B,KAAK,YAAYyG,CAAM,EACvB,KAAK,eAAiB47B,CAC1B,EACAF,EAAiB,UAAU,WAAa,SAAU10B,EAAS,CACnD,KAAK,SAASA,EAAQ,IAAI,GAC1B,KAAK,cAAcA,CAAO,EAC9B,KAAK,SAASA,EAAQ,IAAI,EAAIA,EAC1BA,EAAQ,SACR,KAAK,cAAcA,CAAO,CAClC,EACA00B,EAAiB,UAAU,cAAgB,SAAU10B,EAAS60B,EAAa,CACvE,IAAI9lC,EAAOiR,IAAY,OAAOA,GAAY,SAAWA,EAAUA,EAAQ,MACvEA,EAAU,KAAK,SAASjR,CAAI,EACvB8lC,GACD,OAAO,KAAK,SAAS9lC,CAAI,EAC7B,IAAI+lC,EAAM,KAAK,kBACf,QAASC,KAASD,EAAK,CACnB,IAAIE,EAAWF,EAAIC,CAAK,EACxB,GAAIC,GAAYh1B,EACZ,OAAO80B,EAAIC,CAAK,UAEX,MAAM,QAAQC,CAAQ,EAAG,CAC9B,IAAI9jC,EAAI8jC,EAAS,QAAQh1B,CAAO,EAC5B9O,GAAK,KACL8jC,EAAS,OAAO9jC,EAAG,CAAC,EAChB8jC,EAAS,QAAU,IACnBF,EAAIC,CAAK,EAAIC,EAAS,CAAC,GAEnC,CACJ,CACJ,EACAN,EAAiB,UAAU,QAAU,SAAU7kC,EAAKmQ,EAAS9Q,EAAU,CAMnE,GALI,OAAOW,GAAO,UAAYA,IACtBX,GAAY,OACZA,EAAWW,EAAI,UACnBA,EAAMA,EAAI,KAAK,QAAQ,GAEvB,EAACA,EAEL,IAAI,OAAOmQ,GAAW,WAClB,OAAO,KAAK,WAAW,CAAE,KAAMA,EAAS,QAASnQ,EAAK,KAAMmQ,EAAQ,MAA4BnQ,CAAK,CAAC,EAAIA,EAAK,MAAM,GAAG,EAAE,QAAQ,SAAUolC,EAAS,CACrJ,IAAIC,EAAQ,GACZ,GAAID,EAAQ,QAAQ,GAAG,GAAK,GAAI,CAC5B,IAAIh9B,EAAQg9B,EAAQ,MAAM,KAAK,EAC/BA,EAAUh9B,EAAM,IAAI,EACpBA,EAAM,QAAQ,SAAUg9B,EAAS,CAC7B,IAAIE,EAAU,KAAK,UAAUF,CAAO,EAChCrhC,EAAK6gC,EAASU,EAAQ,MAAM,EAAIA,EAAQ,IAC5CD,IAAUA,EAAQ,IAAM,IAAMthC,EAC9B,KAAK,qBAAqBshC,EAAO,WAAW,CAChD,EAAG,IAAI,EACPA,GAAS,GACb,CACA,IAAIC,EAAU,KAAK,UAAUF,CAAO,EAChCrhC,EAAK6gC,EAASU,EAAQ,MAAM,EAAIA,EAAQ,IAC5C,KAAK,qBAAqBD,EAAQthC,EAAIoM,EAAS9Q,CAAQ,CAC3D,EAAG,IAAI,EACX,EACAwlC,EAAiB,UAAU,qBAAuB,SAAUK,EAAO/0B,EAAS9Q,EAAU,CAClF,IAAI4lC,EAAM,KAAK,kBAAmB5jC,EAClC,GAAI,CAAC8O,EACD,OAAO80B,EAAIC,CAAK,UAEX,CAACD,EAAIC,CAAK,GAAK,KAAK,eACzBD,EAAIC,CAAK,EAAI/0B,MAEZ,CACI,MAAM,QAAQ80B,EAAIC,CAAK,CAAC,GAGnB7jC,EAAI4jC,EAAIC,CAAK,EAAE,QAAQ/0B,CAAO,IAAM,IAC1C80B,EAAIC,CAAK,EAAE,OAAO7jC,EAAG,CAAC,EAHtB4jC,EAAIC,CAAK,EAAI,CAACD,EAAIC,CAAK,CAAC,EAKxB,OAAO7lC,GAAY,WACnBA,EAAWkmC,EAAYp1B,CAAO,GAElC,IAAI0Q,EAAWokB,EAAIC,CAAK,EACxB,IAAK7jC,EAAI,EAAGA,EAAIwf,EAAS,OAAQxf,IAAK,CAClC,IAAImkC,EAAQ3kB,EAASxf,CAAC,EAClBokC,EAAWF,EAAYC,CAAK,EAChC,GAAIC,EAAWpmC,EACX,KACR,CACAwhB,EAAS,OAAOxf,EAAG,EAAG8O,CAAO,CACjC,CACJ,EACA00B,EAAiB,UAAU,YAAc,SAAUhkB,EAAU,CACzDA,GAAY,OAAO,KAAKA,CAAQ,EAAE,QAAQ,SAAU3hB,EAAM,CACtD,IAAIiR,EAAU0Q,EAAS3hB,CAAI,EAC3B,GAAKiR,EAEL,IAAI,OAAOA,GAAY,SACnB,OAAO,KAAK,QAAQA,EAASjR,CAAI,EACjC,OAAOiR,GAAY,aACnBA,EAAU,CAAE,KAAMA,CAAQ,GAC1B,OAAOA,GAAY,WAElBA,EAAQ,OACTA,EAAQ,KAAOjR,GACnB,KAAK,WAAWiR,CAAO,GAC3B,EAAG,IAAI,CACX,EACA00B,EAAiB,UAAU,eAAiB,SAAUhkB,EAAU,CAC5D,OAAO,KAAKA,CAAQ,EAAE,QAAQ,SAAU3hB,EAAM,CAC1C,KAAK,cAAc2hB,EAAS3hB,CAAI,CAAC,CACrC,EAAG,IAAI,CACX,EACA2lC,EAAiB,UAAU,SAAW,SAAUa,EAAS,CACrD,OAAO,KAAKA,CAAO,EAAE,QAAQ,SAAU1lC,EAAK,CACxC,KAAK,QAAQA,EAAK0lC,EAAQ1lC,CAAG,CAAC,CAClC,EAAG,IAAI,CACX,EACA6kC,EAAiB,UAAU,cAAgB,SAAU10B,EAAS,CAC1D,KAAK,QAAQA,EAAQ,QAASA,CAAO,CACzC,EACA00B,EAAiB,UAAU,UAAY,SAAUh5B,EAAM,CACnD,IAAIzD,EAAQyD,EAAK,YAAY,EAAE,MAAM,iBAAiB,EAAE,OAAO,SAAUH,EAAG,CAAE,OAAOA,CAAG,CAAC,EACrF1L,EAAMoI,EAAM,IAAI,EAChBuD,EAAU6U,EAAQxgB,CAAG,EACzB,GAAIwgB,EAAQ,cAAc7U,CAAO,EAC7B3L,EAAMwgB,EAAQ,cAAc7U,CAAO,EAAE,YAAY,UAC3CvD,EAAM,QAEX,GAAIA,EAAM,QAAU,GAAKA,EAAM,CAAC,GAAK,QACtC,MAAO,CAAE,IAAKpI,EAAI,YAAY,EAAG,OAAQ,EAAG,MAF5C,OAAO,CAAE,IAAKA,EAAK,OAAQ,EAAG,EAIlC,QADI6N,EAAS,EACJxM,EAAI+G,EAAM,OAAQ/G,KAAM,CAC7B,IAAI6O,EAAWsQ,EAAQ,SAASpY,EAAM/G,CAAC,CAAC,EACxC,GAAI6O,GAAY,KACZ,OAAI,OAAO,QAAW,KAClB,QAAQ,MAAM,oBAAsB9H,EAAM/G,CAAC,EAAI,OAASwK,CAAI,EACzD,GAEXgC,GAAUqC,CACd,CACA,MAAO,CAAE,IAAKlQ,EAAK,OAAQ6N,CAAO,CACtC,EACAg3B,EAAiB,UAAU,eAAiB,SAAUh3B,EAAQjC,EAAW,CACrE,IAAI5L,EAAM4kC,EAAS/2B,CAAM,EAAIjC,EAC7B,OAAO,KAAK,kBAAkB5L,CAAG,CACrC,EACA6kC,EAAiB,UAAU,eAAiB,SAAU/9B,EAAM+G,EAAQjC,EAAWD,EAAS,CACpF,GAAI,EAAAA,EAAU,GAEd,KAAI3L,EAAM4kC,EAAS/2B,CAAM,EAAIjC,EACzBuE,EAAU,KAAK,kBAAkBnQ,CAAG,EAKxC,OAJI8G,EAAK,YACLA,EAAK,WAAa,IAAM9G,EACxBmQ,EAAU,KAAK,kBAAkBrJ,EAAK,SAAS,GAAKqJ,GAEpDA,IACIA,GAAW,aAAeA,EAAQA,EAAQ,OAAS,CAAC,GAAK,cACzDrJ,EAAK,UAAYA,EAAK,WAAa9G,EAC5B,CAAE,QAAS,MAAO,IAG7B8G,EAAK,aACA,CAAC+G,GAAUA,GAAU,IAAMjC,EAAU,QAAU,EAChD9E,EAAK,UAAYA,EAAK,UAAU,MAAM,EAAG,CAAC9G,EAAI,OAAS,CAAC,GACnD6N,GAAU,IAAMlC,EAAU,KAC/B7E,EAAK,UAAY,KAElB,CAAE,QAASqJ,CAAQ,GAC9B,EACA00B,EAAiB,UAAU,cAAgB,SAAUpyB,EAAQ3L,EAAM,CAC/D,OAAOA,EAAK,WAAa,EAC7B,EACO+9B,CACX,EAAE,EACF,SAASU,EAAYp1B,EAAS,CAC1B,OAAO,OAAOA,GAAW,UAAYA,EAAQ,SACtCA,EAAQ,QAAQ,WACfA,EAAQ,UAAY,KAAO,EACvC,CACA,IAAIw1B,EAA6B,SAAU/uB,EAAQ,CAC/CjC,EAAUgxB,EAAa/uB,CAAM,EAC7B,SAAS+uB,EAAYx8B,EAAQ27B,EAAU,CACnC,IAAIt1B,EAAQoH,EAAO,KAAK,KAAMzN,EAAQ27B,CAAQ,GAAK,KACnD,OAAAt1B,EAAM,eAAiB,GAChBA,CACX,CACA,OAAOm2B,CACX,EAAEd,CAAgB,EAClBc,EAAY,KAAO,SAAUtlC,EAAS8I,EAAQ27B,EAAU,CACpDD,EAAiB,UAAU,MAAM,KAAKxkC,EAAS8I,EAAQ27B,EAAU,EAAI,CACzE,EACAD,EAAiB,KAAO,SAAUxkC,EAAS8I,EAAQ27B,EAAU,CACzDD,EAAiB,UAAU,MAAM,KAAKxkC,EAAS8I,EAAQ27B,EAAU,EAAK,CAC1E,EACAznC,EAAQ,YAAcsoC,EACtBtoC,EAAQ,iBAAmBwnC,CAE3B,CAAC,EAED,IAAI,OAAO,+BAA+B,CAAC,UAAU,UAAU,SAAS,cAAc,4BAA4B,uBAAuB,EAAG,SAAS1mC,EAASd,EAASC,EAAO,CAAC,aAC/K,IAAIqX,EAAa,MAAQ,KAAK,WAAe,UAAY,CACrD,IAAIC,EAAgB,SAAUC,EAAGC,EAAG,CAChC,OAAAF,EAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUC,EAAGC,EAAG,CAAED,EAAE,UAAYC,CAAG,GAC1E,SAAUD,EAAGC,EAAG,CAAE,QAASjK,KAAKiK,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGjK,CAAC,IAAGgK,EAAEhK,CAAC,EAAIiK,EAAEjK,CAAC,EAAG,EAC7F+J,EAAcC,EAAGC,CAAC,CAC7B,EACA,OAAO,SAAUD,EAAGC,EAAG,CACnB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5FF,EAAcC,EAAGC,CAAC,EAClB,SAASC,GAAK,CAAE,KAAK,YAAcF,CAAG,CACtCA,EAAE,UAAYC,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKC,EAAG,UAAYD,EAAE,UAAW,IAAIC,EACnF,CACJ,EAAG,EACC/N,EAAM7I,EAAQ,YAAY,EAC1B0mC,EAAmB1mC,EAAQ,0BAA0B,EAAE,iBACvD8H,EAAe9H,EAAQ,sBAAsB,EAAE,aAC/CynC,EAAgC,SAAUhvB,EAAQ,CAClDjC,EAAUixB,EAAgBhvB,CAAM,EAChC,SAASgvB,EAAed,EAAUjkB,EAAU,CACxC,IAAIrR,EAAQoH,EAAO,KAAK,KAAMiK,EAAUikB,CAAQ,GAAK,KACrD,OAAAt1B,EAAM,OAASA,EAAM,SACrBA,EAAM,kBAAkB,OAAQ,SAAUnJ,EAAG,CACzC,OAAKA,EAAE,KAGAA,EAAE,QAAQ,KAAKA,EAAE,OAAQA,EAAE,KAAMA,EAAE,MAAO,EAAK,EAF3CA,EAAE,QAAQ,KAAKA,EAAE,OAAQ,CAAC,EAAGA,EAAE,MAAO,EAAI,CAGzD,CAAC,EACMmJ,CACX,CACA,OAAAo2B,EAAe,UAAU,KAAO,SAAUz1B,EAASsC,EAAQsZ,EAAM,CAC7D,GAAI,MAAM,QAAQ5b,CAAO,EAAG,CACxB,QAAS,EAAIA,EAAQ,OAAQ,KACzB,GAAI,KAAK,KAAKA,EAAQ,CAAC,EAAGsC,EAAQsZ,CAAI,EAClC,MAAO,GAEf,MAAO,EACX,CACI,OAAO5b,GAAY,WACnBA,EAAU,KAAK,SAASA,CAAO,GACnC,IAAI9J,EAAI,CAAE,OAAQoM,EAAQ,QAAStC,EAAS,KAAM4b,CAAK,EACvD,OAAK,KAAK,WAAW5b,EAASsC,CAAM,GAIpCpM,EAAE,YAAc,KAAK,MAAM,OAAQA,CAAC,EACpC,KAAK,QAAQ,YAAaA,CAAC,EACpBA,EAAE,cAAgB,KALrB,KAAK,QAAQ,qBAAsBA,CAAC,EAC7B,GAKf,EACAu/B,EAAe,UAAU,WAAa,SAAUz1B,EAASsC,EAAQ,CAO7D,OANI,OAAOtC,GAAY,WACnBA,EAAU,KAAK,SAASA,CAAO,GAC/B,GAACA,GAEDsC,GAAUA,EAAO,WAAa,CAACtC,EAAQ,UAEvC,KAAK,oBAAsB,IAASA,EAAQ,aAAe,CAACA,EAAQ,YAAYsC,CAAM,EAG9F,EACAmzB,EAAe,UAAU,gBAAkB,SAAUnzB,EAAQ,CACzD,GAAI,MAAK,UAGT,OADAA,GAAUA,EAAO,MAAM,cAAc,EACjC,KAAK,WACL,KAAK,MAAM,IAAI,EACf,KAAK,IAAI,OAAQ,KAAK,kBAAkB,EACnC,KAAK,MAAM,SACZ,KAAK,MAAQ,KAAK,UACf,KAAK,UAAY,KAEvB,KAAK,qBACN,KAAK,mBAAqB,SAAUpM,EAAG,CACnC,KAAK,MAAM,KAAK,CAACA,EAAE,QAASA,EAAE,IAAI,CAAC,CACvC,EAAE,KAAK,IAAI,GAEf,KAAK,SAAW,KAAK,MACrB,KAAK,MAAQ,CAAC,EACd,KAAK,GAAG,OAAQ,KAAK,kBAAkB,EAChC,KAAK,UAAY,GAC5B,EACAu/B,EAAe,UAAU,OAAS,SAAUnzB,EAAQ,CAChD,GAAI,OAAK,WAAa,CAAC,KAAK,OAE5B,IAAI,KAAK,UACL,OAAO,KAAK,gBAAgBA,CAAM,EACtC,GAAI,CACA,KAAK,UAAY,GACjB,KAAK,MAAM,QAAQ,SAAU/G,EAAG,CACxB,OAAOA,GAAK,SACZ,KAAK,KAAKA,EAAG+G,CAAM,EAEnB,KAAK,KAAK/G,EAAE,CAAC,EAAG+G,EAAQ/G,EAAE,CAAC,CAAC,CACpC,EAAG,IAAI,CACX,QACA,CACI,KAAK,UAAY,EACrB,EACJ,EACAk6B,EAAe,UAAU,UAAY,SAAU17B,EAAG,CAC9C,OAAOA,EAAE,IAAI,SAAUwB,EAAG,CACtB,OAAI,OAAOA,EAAE,CAAC,GAAK,WACfA,EAAE,CAAC,EAAIA,EAAE,CAAC,EAAE,MACXA,EAAE,CAAC,IACJA,EAAIA,EAAE,CAAC,GACJA,CACX,CAAC,CACL,EACOk6B,CACX,EAAEf,CAAgB,EAClB79B,EAAI,UAAU4+B,EAAe,UAAW3/B,CAAY,EACpD5I,EAAQ,eAAiBuoC,CAEzB,CAAC,EAED,IAAI,OAAO,gCAAgC,CAAC,UAAU,UAAU,SAAS,eAAe,aAAa,WAAW,EAAG,SAASznC,EAASd,EAASC,EAAO,CAAC,aACtJ,IAAI2K,EAAO9J,EAAQ,aAAa,EAC5BgL,EAAShL,EAAQ,WAAW,EAC5BiM,EAAQjM,EAAQ,UAAU,EAAE,MAChC,SAAS0nC,EAAQ13B,EAAK23B,EAAK,CACvB,MAAO,CAAE,IAAK33B,EAAK,IAAK23B,CAAI,CAChC,CACAzoC,EAAQ,SAAW,CAAC,CACZ,KAAM,mBACN,YAAa,qBACb,QAASwoC,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAUpzB,EAAQ,CACpBtJ,EAAO,WAAW,wBAAyB,SAAU7L,EAAQ,CACzDA,EAAO,KAAKmV,CAAM,EAClBA,EAAO,iBAAiB,CAC5B,CAAC,CACL,EACA,SAAU,EACd,EAAG,CACC,KAAM,gBACN,YAAa,mBACb,QAASozB,EAAQ,QAAS,IAAI,EAC9B,KAAM,SAAUpzB,EAAQ,CACpBtJ,EAAO,WAAW,uBAAwB,SAAU7L,EAAQ,CACxDA,EAAO,gBAAgBmV,EAAQ,CAAC,CACpC,CAAC,CACL,EACA,eAAgB,UAChB,SAAU,EACd,EAAG,CACC,KAAM,oBACN,YAAa,uBACb,QAASozB,EAAQ,cAAe,UAAU,EAC1C,KAAM,SAAUpzB,EAAQ,CACpBtJ,EAAO,WAAW,uBAAwB,SAAU7L,EAAQ,CACxDA,EAAO,gBAAgBmV,EAAQ,EAAE,CACrC,CAAC,CACL,EACA,eAAgB,UAChB,SAAU,EACd,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAASozB,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,UAAU,CAAG,EAC9C,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,mBACb,QAASozB,EAAQ,KAAM,QAAQ,EAC/B,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,gBAAgB,CAAG,EACpD,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,gBACb,QAASozB,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAUpzB,EAAQtQ,EAAM,CACtB,OAAOA,GAAS,UAAY,CAAC,MAAMA,CAAI,GACvCsQ,EAAO,SAAStQ,CAAI,EACxBsQ,EAAO,OAAO,CAAE,MAAO,UAAW,CAAC,CACvC,EACA,SAAU,EACd,EAAG,CACC,KAAM,OACN,QAASozB,EAAQ,gBAAiB,0BAA0B,EAC5D,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,QAAQ,WAAW,EAAK,CAAG,EAC5D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,SACN,QAASozB,EAAQ,4BAA6B,sCAAsC,EACpF,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,QAAQ,WAAW,EAAI,CAAG,EAC3D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,mBACN,YAAa,qBACb,QAASozB,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,QAAQ,iBAAiB,CAAG,EAC7D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,yBACN,YAAa,4BACb,QAASozB,EAAQ,SAAU,QAAQ,EACnC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,QAAQ,iBAAiB,EAAI,CAAG,EACjE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,UACN,YAAa,WACb,QAASozB,EAAQ,KAAM,uBAAuB,EAC9C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,QAAQ,QAAQ,CAAG,EACpD,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,oBACb,QAASozB,EAAQ,KAAM,uBAAuB,EAC9C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,QAAQ,gBAAgB,CAAG,EAC5D,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAASozB,EAAQ,QAAS,kBAAkB,EAC5C,KAAM,SAAUpzB,EAAQ,CACpBA,EAAO,QAAQ,QAAQ,EACvBA,EAAO,QAAQ,OAAOA,EAAO,UAAU,aAAa,CAAC,CACzD,EACA,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAASozB,EAAQ,cAAe,wBAAwB,EACxD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,QAAQ,OAAO,CAAG,EACnD,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,YACb,QAASozB,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,SAAS,CAAG,EAC7C,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,eACN,YAAa,gBACb,QAASozB,EAAQ,eAAgB,iBAAiB,EAClD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,CAAG,EACjD,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,mBACN,YAAa,sBACb,QAASozB,EAAQ,QAAS,QAAQ,EAClC,KAAM,SAAUpzB,EAAQ,CAChBA,EAAO,UAAU,QAAQ,EACzBA,EAAO,UAAU,WAAW,EAE5BA,EAAO,SAAS,CACxB,EACA,SAAU,EACd,EAAG,CACC,KAAM,uBACN,YAAa,0BACb,QAASozB,EAAQ,cAAe,cAAc,EAC9C,KAAM,SAAUpzB,EAAQ,CAChBA,EAAO,UAAU,QAAQ,EACzBA,EAAO,UAAU,WAAW,EAE5BA,EAAO,aAAa,CAC5B,EACA,SAAU,EACd,EAAG,CACC,KAAM,OACN,YAAa,OACb,QAASozB,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAUpzB,EAAQ,CACpBtJ,EAAO,WAAW,oBAAqB,SAAU9C,EAAG,CAAEA,EAAE,OAAOoM,CAAM,CAAG,CAAC,CAC7E,EACA,SAAU,EACd,EAAG,CACC,KAAM,YACN,YAAa,YACb,QAAS,SACT,KAAM,SAAUA,EAAQ,CAAEA,EAAO,gBAAgB,CAAG,EACpD,SAAU,EACd,EAAG,CACC,KAAM,gBACN,YAAa,kBACb,QAASozB,EAAQ,kBAAmB,qCAAqC,EACzE,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,EAAE,gBAAgB,CAAG,EACnE,kBAAmB,UACnB,SAAU,GACV,eAAgB,UAChB,gBAAiB,UACrB,EAAG,CACC,KAAM,YACN,YAAa,cACb,QAASozB,EAAQ,YAAa,yBAAyB,EACvD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,kBAAkB,CAAG,EACtD,kBAAmB,UACnB,SAAU,GACV,eAAgB,UAChB,gBAAiB,UACrB,EAAG,CACC,KAAM,WACN,YAAa,YACb,QAASozB,EAAQ,WAAY,uBAAuB,EACpD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,EAAE,SAAS,CAAG,EAC5D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,aACb,QAASozB,EAAQ,KAAM,WAAW,EAClC,KAAM,SAAUpzB,EAAQsZ,EAAM,CAAEtZ,EAAO,WAAWsZ,EAAK,KAAK,CAAG,EAC/D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,cACN,YAAa,gBACb,QAAS8Z,EAAQ,iBAAkB,sCAAsC,EACzE,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,EAAE,cAAc,CAAG,EACjE,kBAAmB,UACnB,SAAU,GACV,eAAgB,UAChB,gBAAiB,UACrB,EAAG,CACC,KAAM,UACN,YAAa,YACb,QAASozB,EAAQ,WAAY,0BAA0B,EACvD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,gBAAgB,CAAG,EACpD,kBAAmB,UACnB,SAAU,GACV,eAAgB,UAChB,gBAAiB,UACrB,EAAG,CACC,KAAM,aACN,YAAa,cACb,QAASozB,EAAQ,aAAc,yBAAyB,EACxD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,EAAE,WAAW,CAAG,EAC9D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,aACN,YAAa,eACb,QAASozB,EAAQ,OAAQ,aAAa,EACtC,KAAM,SAAUpzB,EAAQsZ,EAAM,CAAEtZ,EAAO,aAAasZ,EAAK,KAAK,CAAG,EACjE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,iBACN,YAAa,mBACb,QAAS8Z,EAAQ,kBAAmB,mBAAmB,EACvD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,EAAE,eAAe,CAAG,EAClE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,eACN,YAAa,kBACb,QAASozB,EAAQ,YAAa,aAAa,EAC3C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,iBAAiB,CAAG,EACrD,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,oBACN,YAAa,uBACb,QAASozB,EAAQ,iBAAkB,iCAAiC,EACpE,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,EAAE,gBAAgB,CAAG,EACnE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,gBACN,YAAa,mBACb,QAASozB,EAAQ,gBAAiB,0BAA0B,EAC5D,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,kBAAkB,CAAG,EACtD,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,aACN,YAAa,cACb,QAASozB,EAAQ,aAAc,yBAAyB,EACxD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,EAAE,WAAW,CAAG,EAC9D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,aACb,QAASozB,EAAQ,OAAQ,aAAa,EACtC,KAAM,SAAUpzB,EAAQsZ,EAAM,CAAEtZ,EAAO,aAAasZ,EAAK,KAAK,CAAG,EACjE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,oBACb,QAAS8Z,EAAQ,mBAAoB,oBAAoB,EACzD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,EAAE,gBAAgB,CAAG,EACnE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,gBACN,YAAa,mBACb,QAASozB,EAAQ,aAAc,cAAc,EAC7C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,kBAAkB,CAAG,EACtD,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,qBACb,QAASozB,EAAQ,kBAAmB,4CAA4C,EAChF,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,EAAE,cAAc,CAAG,EACjE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,cACN,YAAa,iBACb,QAASozB,EAAQ,gBAAiB,0BAA0B,EAC5D,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,gBAAgB,CAAG,EACpD,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,cACN,YAAa,eACb,QAASozB,EAAQ,cAAe,aAAa,EAC7C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,EAAE,YAAY,CAAG,EAC/D,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,YACN,YAAa,cACb,QAASozB,EAAQ,QAAS,cAAc,EACxC,KAAM,SAAUpzB,EAAQsZ,EAAM,CAAEtZ,EAAO,cAAcsZ,EAAK,KAAK,CAAG,EAClE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,iBACN,YAAa,mBACb,QAAS,iBACT,KAAM,SAAUtZ,EAAQ,CAAEA,EAAO,eAAe,CAAG,EACnD,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,YACb,QAASozB,EAAQ,KAAM,iBAAiB,EACxC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,eAAe,CAAG,EACnD,SAAU,EACd,EAAG,CACC,KAAM,eACN,YAAa,kBACb,QAASozB,EAAQ,WAAY,iBAAiB,EAC9C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,CAAG,EACjD,SAAU,EACd,EAAG,CACC,KAAM,eACN,YAAa,iBACb,QAAS,eACT,KAAM,SAAUA,EAAQ,CAAEA,EAAO,aAAa,CAAG,EACjD,SAAU,EACd,EAAG,CACC,KAAM,SACN,YAAa,UACb,QAASozB,EAAQ,KAAM,eAAe,EACtC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,CAAG,EACjD,SAAU,EACd,EAAG,CACC,KAAM,aACN,YAAa,gBACb,QAAS,SACT,KAAM,SAAUA,EAAQ,CAAEA,EAAO,WAAW,CAAG,EAC/C,SAAU,EACd,EAAG,CACC,KAAM,WACN,YAAa,YACb,QAASozB,EAAQ,UAAW,IAAI,EAChC,KAAM,SAAUx/B,EAAG,CAAEA,EAAE,SAAS,SAAS,EAAG,GAAKA,EAAE,SAAS,YAAY,UAAU,CAAG,EACrF,SAAU,EACd,EAAG,CACC,KAAM,aACN,YAAa,cACb,QAASw/B,EAAQ,YAAa,IAAI,EAClC,KAAM,SAAUx/B,EAAG,CAAEA,EAAE,SAAS,SAAS,EAAG,EAAIA,EAAE,SAAS,YAAY,UAAU,CAAG,EACpF,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,oBACb,QAAS,aACT,KAAM,SAAUoM,EAAQ,CAAEA,EAAO,aAAa,EAAE,gBAAgB,CAAG,EACnE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,gBACN,YAAa,kBACb,QAAS,YACT,KAAM,SAAUA,EAAQ,CAAEA,EAAO,aAAa,EAAE,cAAc,CAAG,EACjE,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,mBACb,QAASozB,EAAQ,aAAc,kBAAkB,EACjD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,SAAS,gBAAgBA,CAAM,CAAG,EACnE,SAAU,EACd,EAAG,CACC,KAAM,cACN,YAAa,eACb,QAASozB,EAAQ,eAAgB,iBAAiB,EAClD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,SAAS,OAAOA,CAAM,CAAG,EAC1D,SAAU,EACd,EAAG,CACC,KAAM,iBACN,YAAa,mBACb,QAASozB,EAAQ,iBAAkB,YAAY,EAC/C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,eAAe,CAAG,EACnD,kBAAmB,UACnB,eAAgB,UAChB,SAAU,EACd,EAAG,CACC,KAAM,mBACN,YAAa,qBACb,QAASozB,EAAQ,6BAA8B,kBAAkB,EACjE,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,eAAe,EAAI,CAAG,EACvD,kBAAmB,UACnB,eAAgB,UAChB,SAAU,EACd,EAAG,CACC,KAAM,mBACN,YAAa,qBACb,QAASozB,EAAQ,eAAgB,cAAc,EAC/C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,eAAe,GAAM,EAAI,CAAG,EAC7D,kBAAmB,UACnB,eAAgB,UAChB,SAAU,EACd,EAAG,CACC,KAAM,oBACN,YAAa,uBACb,QAASozB,EAAQ,KAAM,IAAI,EAC3B,KAAM,UAAY,CAAE,EACpB,UAAW,GACX,SAAU,EACd,EAAG,CACC,KAAM,OACN,YAAa,OACb,KAAM,SAAUpzB,EAAQ,CACxB,EACA,SAAU,EACd,EACA,CACI,KAAM,MACN,YAAa,MACb,KAAM,SAAUA,EAAQ,CACpB,IAAIszB,EAAUtzB,EAAO,yBAA2BA,EAAO,UAAU,QAAQ,EACrEhI,EAAQs7B,EAAUtzB,EAAO,UAAU,aAAa,EAAIA,EAAO,UAAU,SAAS,EAClFA,EAAO,MAAM,MAAOhI,CAAK,EACpBA,EAAM,QAAQ,GACfgI,EAAO,QAAQ,OAAOhI,CAAK,EAC/BgI,EAAO,eAAe,CAC1B,EACA,eAAgB,SAChB,kBAAmB,SACvB,EAAG,CACC,KAAM,QACN,YAAa,QACb,KAAM,SAAUA,EAAQsZ,EAAM,CAC1BtZ,EAAO,aAAasZ,CAAI,CAC5B,EACA,eAAgB,QACpB,EAAG,CACC,KAAM,aACN,YAAa,cACb,QAAS8Z,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,YAAY,CAAG,EAChD,eAAgB,SAChB,kBAAmB,aACvB,EAAG,CACC,KAAM,qBACN,YAAa,sBACb,QAASozB,EAAQ,eAAgB,iBAAiB,EAClD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,mBAAmB,CAAG,EACvD,eAAgB,SAChB,kBAAmB,SACvB,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAASozB,EAAQ,aAAc,eAAe,EAC9C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,UAAU,CAAG,EAC9C,eAAgB,YAChB,kBAAmB,aACvB,EAAG,CACC,KAAM,gBACN,YAAa,iBACb,QAASozB,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,mBAAmB,CAAG,EACvD,kBAAmB,cACnB,eAAgB,eACpB,EAAG,CACC,KAAM,qBACN,YAAa,uBACb,QAASozB,EAAQ,eAAgB,iBAAiB,EAClD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,mBAAmB,CAAG,EACvD,kBAAmB,UACnB,eAAgB,eACpB,EAAG,CACC,KAAM,iBACN,YAAa,mBACb,QAASozB,EAAQ,gBAAiB,cAAc,EAChD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,CAAC,CAAG,EAClD,eAAgB,SAChB,kBAAmB,SACvB,EAAG,CACC,KAAM,mBACN,YAAa,qBACb,QAASozB,EAAQ,kBAAmB,gBAAgB,EACpD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,EAAE,CAAG,EACnD,eAAgB,SAChB,kBAAmB,SACvB,EAAG,CACC,KAAM,UACN,YAAa,UACb,QAASozB,EAAQ,SAAU,kBAAkB,EAC7C,KAAM,SAAUpzB,EAAQ,CACpBtJ,EAAO,WAAW,oBAAqB,SAAU9C,EAAG,CAAEA,EAAE,OAAOoM,EAAQ,EAAI,CAAG,CAAC,CACnF,CACJ,EAAG,CACC,KAAM,OACN,YAAa,OACb,QAASozB,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,KAAK,CAAG,CAC7C,EAAG,CACC,KAAM,OACN,YAAa,OACb,QAASozB,EAAQ,sBAAuB,2BAA2B,EACnE,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,KAAK,CAAG,CAC7C,EAAG,CACC,KAAM,cACN,YAAa,gBACb,QAASozB,EAAQ,eAAgB,mBAAmB,EACpD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,YAAY,CAAG,EAChD,eAAgB,QACpB,EAAG,CACC,KAAM,cACN,YAAa,gBACb,QAASozB,EAAQ,SAAU,WAAW,EACtC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,YAAY,CAAG,EAChD,eAAgB,QACpB,EAAG,CACC,KAAM,gBACN,YAAa,kBACb,QAASozB,EAAQ,iBAAkB,qBAAqB,EACxD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,cAAc,CAAG,EAClD,eAAgB,QACpB,EAAG,CACC,KAAM,gBACN,YAAa,kBACb,QAASozB,EAAQ,WAAY,aAAa,EAC1C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,cAAc,CAAG,EAClD,eAAgB,QACpB,EAAG,CACC,KAAM,MACN,YAAa,SACb,QAASozB,EAAQ,SAAU,4BAA4B,EACvD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,OAAO,OAAO,CAAG,EAClD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,YACN,YAAa,YACb,QAASozB,EAAQ,4BAA6B,iDAAiD,EAC/F,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,OAAO,MAAM,CAAG,EACjD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,gBACN,YAAa,gBACb,QAASozB,EAAQ,eAAgB,IAAI,EACrC,KAAM,SAAUpzB,EAAQ,CACpB,GAAIA,EAAO,UAAU,QAAQ,EACzBA,EAAO,OAAO,MAAM,MAGpB,OAAO,EAEf,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,oBACN,YAAa,uBACb,QAASozB,EAAQ,gBAAiB,mBAAmB,EACrD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,kBAAkB,CAAG,EACtD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,kBACN,YAAa,qBACb,QAASozB,EAAQ,aAAc,uBAAuB,EACtD,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,gBAAgB,CAAG,EACpD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,wBACN,YAAa,4BACb,QAASozB,EAAQ,uBAAwB,IAAI,EAC7C,KAAM,SAAUpzB,EAAQ,CACpB,IAAIhI,EAAQgI,EAAO,UAAU,SAAS,EACtChI,EAAM,MAAM,OAAS,EACrBgI,EAAO,QAAQ,OAAOhI,CAAK,CAC/B,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,sBACN,YAAa,0BACb,QAASo7B,EAAQ,oBAAqB,IAAI,EAC1C,KAAM,SAAUpzB,EAAQ,CACpB,IAAIhI,EAAQgI,EAAO,UAAU,SAAS,EACtChI,EAAM,IAAI,OAAS,OAAO,UAC1BgI,EAAO,QAAQ,OAAOhI,CAAK,CAC/B,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,iBACN,YAAa,mBACb,QAASo7B,EAAQ,iBAAkB,kCAAkC,EACrE,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,eAAe,CAAG,EACnD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,kBACN,YAAa,oBACb,QAASozB,EAAQ,cAAe,YAAY,EAC5C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,gBAAgB,CAAG,EACpD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,UACN,YAAa,UACb,QAASozB,EAAQ,YAAa,WAAW,EACzC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,CAAG,EACjD,kBAAmB,UACnB,eAAgB,eACpB,EAAG,CACC,KAAM,SACN,YAAa,SACb,QAASozB,EAAQ,MAAO,KAAK,EAC7B,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,OAAO,CAAG,EAC3C,kBAAmB,UACnB,eAAgB,eACpB,EAAG,CACC,KAAM,eACN,YAAa,gBACb,QAASozB,EAAQ,SAAU,QAAQ,EACnC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,aAAa,CAAG,EACjD,kBAAmB,cACnB,eAAgB,eACpB,EAAG,CACC,KAAM,cACN,YAAa,eACb,QAASozB,EAAQ,SAAU,QAAQ,EACnC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,YAAY,CAAG,EAChD,kBAAmB,cACnB,eAAgB,eACpB,EAAG,CACC,KAAM,eACN,YAAa,gBACb,KAAM,SAAUA,EAAQ9S,EAAK,CAAE8S,EAAO,OAAO9S,CAAG,CAAG,EACnD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,aACN,YAAa,cACb,KAAM,SAAU8S,EAAQsZ,EAAM,CAC1BtZ,EAAO,OAAOxK,EAAK,aAAa8jB,EAAK,MAAQ,GAAIA,EAAK,OAAS,CAAC,CAAC,CACrE,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAAS8Z,EAAQ,KAAM,QAAQ,EAC/B,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,UAAU,CAAG,EAC9C,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,mBACN,YAAa,oBACb,QAASozB,EAAQ,cAAe,QAAQ,EACxC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,iBAAiB,CAAG,EACrD,kBAAmB,SAAUA,EAAQ,CAAEA,EAAO,oBAAoB,CAAC,CAAG,EACtE,eAAgB,QACpB,EAAG,CACC,KAAM,cACN,YAAa,eACb,QAASozB,EAAQ,SAAU,QAAQ,EACnC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,YAAY,CAAG,EAChD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,cACN,YAAa,eACb,QAASozB,EAAQ,eAAgB,cAAc,EAC/C,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,YAAY,CAAG,EAChD,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,aACN,YAAa,cACb,QAASozB,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,WAAW,CAAG,EAC/C,eAAgB,SACpB,EAAG,CACC,KAAM,eACN,YAAa,iBACb,QAASozB,EAAQ,eAAgB,iBAAiB,EAClD,KAAM,SAAUpzB,EAAQ,CACpB,IAAIhI,EAAQgI,EAAO,UAAU,SAAS,EACtChI,EAAM,MAAM,OAASA,EAAM,IAAI,OAAS,EACxCA,EAAM,IAAI,MACVgI,EAAO,UAAU,SAAShI,EAAO,EAAK,CAC1C,EACA,kBAAmB,UACnB,eAAgB,SAChB,SAAU,EACd,EAAG,CACC,KAAM,WACN,QAASo7B,EAAQ,UAAW,IAAI,EAChC,KAAM,SAAUpzB,EAAQ,CAAEA,EAAO,SAAS,CAAG,CACjD,EAAG,CACC,KAAM,YACN,YAAa,aACb,QAASozB,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAUpzB,EAAQ,CAQpB,QAPIypB,EAAczpB,EAAO,UAAU,YAAY,EAC3CzC,EAAiBksB,EAAczpB,EAAO,UAAU,iBAAiB,EAAIA,EAAO,UAAU,mBAAmB,EACzGxC,EAAeisB,EAAczpB,EAAO,UAAU,mBAAmB,EAAIA,EAAO,UAAU,iBAAiB,EACvGuzB,EAAkBvzB,EAAO,QAAQ,IAAI,QAAQzC,EAAe,GAAG,EAAE,OACjEi2B,EAAexzB,EAAO,QAAQ,IAAI,aAAaA,EAAO,UAAU,SAAS,CAAC,EAC1EyzB,EAAgBD,EAAa,QAAQ,QAAS,GAAG,EAAE,OACnDE,EAAa1zB,EAAO,QAAQ,IAAI,QAAQzC,EAAe,GAAG,EACrD3O,EAAI2O,EAAe,IAAM,EAAG3O,GAAK4O,EAAa,IAAM,EAAG5O,IAAK,CACjE,IAAI+kC,EAAUn+B,EAAK,eAAeA,EAAK,gBAAgBwK,EAAO,QAAQ,IAAI,QAAQpR,CAAC,CAAC,CAAC,EACjF+kC,EAAQ,SAAW,IACnBA,EAAU,IAAMA,GAEpBD,GAAcC,CAClB,CACIn2B,EAAa,IAAM,EAAKwC,EAAO,QAAQ,IAAI,UAAU,EAAI,IACzD0zB,GAAc1zB,EAAO,QAAQ,IAAI,oBAAoB,GAEzDA,EAAO,eAAe,EACtBA,EAAO,QAAQ,IAAI,QAAQ,IAAIrI,EAAM4F,EAAe,IAAK,EAAGC,EAAa,IAAM,EAAG,CAAC,EAAGk2B,CAAU,EAC5FD,EAAgB,GAChBzzB,EAAO,UAAU,aAAazC,EAAe,IAAKA,EAAe,MAAM,EACvEyC,EAAO,UAAU,SAASzC,EAAe,IAAKA,EAAe,OAASk2B,CAAa,IAGnFF,EAAkBvzB,EAAO,QAAQ,IAAI,QAAQzC,EAAe,GAAG,EAAE,OAASg2B,EAAmBA,EAAkB,EAAKA,EACpHvzB,EAAO,UAAU,aAAazC,EAAe,IAAKg2B,CAAe,EAEzE,EACA,kBAAmB,UACnB,SAAU,EACd,EAAG,CACC,KAAM,kBACN,YAAa,mBACb,QAASH,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAUpzB,EAAQ,CACpB,IAAIlI,EAASkI,EAAO,QAAQ,IAAI,UAAU,EAAI,EAC1CmU,EAASnU,EAAO,QAAQ,IAAI,QAAQlI,CAAM,EAAE,OAC5CsrB,EAASpjB,EAAO,UAAU,UAAU,OACpC4zB,EAAY,CAAC,EACbxQ,EAAO,OAAS,IAChBA,EAAS,CAACpjB,EAAO,UAAU,SAAS,CAAC,GAEzC,QAAS,EAAI,EAAG,EAAIojB,EAAO,OAAQ,IAC3B,GAAMA,EAAO,OAAS,IAChBA,EAAO,CAAC,EAAE,IAAI,MAAQtrB,GAAUsrB,EAAO,CAAC,EAAE,IAAI,SAAWjP,GAC3Dyf,EAAU,KAAK,IAAIj8B,EAAMyrB,EAAO,CAAC,EAAE,IAAI,IAAKA,EAAO,CAAC,EAAE,IAAI,OAAQtrB,EAAQqc,CAAM,CAAC,GAGrF,IAAM,EACAiP,EAAO,CAAC,EAAE,MAAM,MAAQ,GAAKA,EAAO,CAAC,EAAE,MAAM,SAAW,GAC1DwQ,EAAU,KAAK,IAAIj8B,EAAM,EAAG,EAAGyrB,EAAO,CAAC,EAAE,MAAM,IAAKA,EAAO,CAAC,EAAE,MAAM,MAAM,CAAC,EAI/EwQ,EAAU,KAAK,IAAIj8B,EAAMyrB,EAAO,EAAI,CAAC,EAAE,IAAI,IAAKA,EAAO,EAAI,CAAC,EAAE,IAAI,OAAQA,EAAO,CAAC,EAAE,MAAM,IAAKA,EAAO,CAAC,EAAE,MAAM,MAAM,CAAC,EAG9HpjB,EAAO,oBAAoB,EAC3BA,EAAO,eAAe,EACtB,QAAS,EAAI,EAAG,EAAI4zB,EAAU,OAAQ,IAClC5zB,EAAO,UAAU,SAAS4zB,EAAU,CAAC,EAAG,EAAK,CAErD,EACA,SAAU,GACV,eAAgB,MACpB,EAAG,CACC,KAAM,eACN,YAAa,sCACb,KAAM,SAAU5zB,EAAQ,CACpBA,EAAO,UAAU,eAAe,EAChCA,EAAO,gBAAgB,EACvBA,EAAO,OAAO;AAAA,CAAI,CACtB,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,gBACN,YAAa,uCACb,KAAM,SAAUA,EAAQ,CACpBA,EAAO,UAAU,eAAe,EAChC,IAAIS,EAAST,EAAO,kBAAkB,EACtCA,EAAO,UAAU,OAAOS,EAAO,IAAM,EAAG,OAAO,SAAS,EACxDT,EAAO,OAAO;AAAA,CAAI,EACdS,EAAO,MAAQ,GACfT,EAAO,WAAW,CAC1B,EACA,kBAAmB,UACnB,eAAgB,QACpB,EAAG,CACC,KAAM,qBACN,KAAM,SAAUA,EAAQ,CACpB,QAAQ,KAAK,uEAAuE,EACpFA,EAAO,OAAO,CAAE,MAAO,UAAW,CAAC,CACvC,EACA,SAAU,EACd,EAAG,CACC,KAAM,qBACN,YAAa,uBACb,QAASozB,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAUpzB,EAAQ,CACpBA,EAAO,OAAO,CAAE,MAAO,UAAW,CAAC,CACvC,EACA,SAAU,EACd,EAAG,CACC,KAAM,aACN,YAAa,0BACb,QAASozB,EAAQ,KAAM,IAAI,EAC3B,KAAM,SAAUpzB,EAAQ,CACpBA,EAAO,OAAO,CAAE,MAAO,OAAQ,CAAC,CACpC,EACA,SAAU,EACd,CAAC,EACL,QAASpR,EAAI,EAAGA,EAAI,EAAGA,IACnBhE,EAAQ,SAAS,KAAK,CAClB,KAAM,cAAgBgE,EACtB,YAAa,iBAAmBA,EAChC,MAAOA,EACP,KAAM,SAAUoR,EAAQ,CAAEA,EAAO,QAAQ,YAAY,KAAK,KAAK,CAAG,EAClE,eAAgB,SAChB,SAAU,EACd,CAAC,CAGL,CAAC,EAED,IAAI,OAAO,8BAA8B,CAAC,UAAU,UAAU,SAAS,cAAc,EAAG,SAAStU,EAASd,EAASC,EAAO,CAAC,aAC3H,IAAIuO,EAAO1N,EAAQ,aAAa,EAC5BmoC,EAAuC,UAAY,CACnD,SAASA,EAAsB7zB,EAAQ,CACnC,KAAK,OAASA,EACd,KAAK,YAAcA,EAAO,SAAS,aACnC,KAAK,QAAUA,EAAO,SAAS,QAC/B,KAAK,MAAQA,EAAO,SAAS,aAAa,OAC1C,KAAK,eAAiB,KACtB,KAAK,WAAa,KAClB,KAAK,kBAAoB,KAAK,OAAO,cAAc,QACvD,CACA,OAAA6zB,EAAsB,UAAU,YAAc,UAAY,CACtD,KAAK,QAAQ,iBAAiB,UAAW,KAAK,iBAAiB,KAAK,IAAI,CAAC,EACzE,KAAK,QAAQ,iBAAiB,WAAY,KAAK,YAAY,KAAK,IAAI,CAAC,EACrE,KAAK,OAAO,GAAG,aAAc,KAAK,YAAY,KAAK,IAAI,CAAC,CAC5D,EACAA,EAAsB,UAAU,eAAiB,UAAY,CACzD,KAAK,QAAQ,oBAAoB,UAAW,KAAK,iBAAiB,KAAK,IAAI,CAAC,EAC5E,KAAK,QAAQ,oBAAoB,WAAY,KAAK,YAAY,KAAK,IAAI,CAAC,EACxE,KAAK,OAAO,IAAI,aAAc,KAAK,YAAY,KAAK,IAAI,CAAC,CAC7D,EACAA,EAAsB,UAAU,iBAAmB,SAAUjgC,EAAG,CAC5D,GAAI,KAAK,kBAAkB,OAAQ,CAC/BA,EAAE,eAAe,EACbA,EAAE,UAAYwF,EAAK,QACnB,KAAK,kBAAkB,KAAK,EAChC,MACJ,CACA,GAAIxF,EAAE,SAAW,KAAK,QAAS,CAC3B,GAAIA,EAAE,SAAWwF,EAAK,MAClB,OAEJxF,EAAE,eAAe,EACjB,IAAIqE,EAAM,KAAK,OAAO,kBAAkB,EAAE,IACrC,KAAK,OAAO,aAAaA,CAAG,GAC7B,KAAK,OAAO,aAAaA,EAAK,GAAM,EAAI,EAC5C,WACA,UAAY,CACR,IAAI5K,EAAQ,KAAK,eAAe,KAAK,YAAY,YAAY,GAAG,EAC5DymC,EAA6B,KAAK,2BAA2BzmC,CAAK,EAClE0mC,EAAyB,KAAK,uBAAuB1mC,CAAK,EAC9D,GAAI,EAAAymC,IAA+B,MAAQC,IAA2B,MAEtE,KAAIC,EAAuB,KAAK,mBAAmBF,EAA4BC,EAAwB1mC,CAAK,EAC5G,GAAI2mC,IAAyBF,EAGzB,GAFA,KAAK,WAAa,OAClB,KAAK,eAAiBA,EAClB,KAAK,uBAAuBA,CAA0B,EAAG,CACzD,KAAK,mBAAmB,KAAK,cAAc,EAC3C,MACJ,KACK,CACD,KAAK,iBAAiB,KAAK,cAAc,EACzC,MACJ,KAEC,CACD,KAAK,eAAiBC,EACtB,KAAK,WAAa,aAClB,KAAK,iBAAiB,KAAK,cAAc,EACzC,MACJ,EACJ,EAAE,KAAK,IAAI,EAAG,EAAE,EAChB,MACJ,CACA,KAAK,iCAAiCngC,CAAC,EACvC,WAAW,UAAY,CACnB,KAAK,OAAO,QAAQ,gBAAiB,IAAIqgC,EAAoBrgC,EAAG,IAAI,CAAC,CACzE,EAAE,KAAK,IAAI,EAAG,EAAE,CACpB,EACAigC,EAAsB,UAAU,iCAAmC,SAAUjgC,EAAG,CAC5E,GAAIA,EAAE,UAAYwF,EAAK,IAAQ,CAC3BxF,EAAE,eAAe,EACjB,MACJ,CACA,GAAIA,EAAE,UAAYwF,EAAK,OAAW,CAC9BxF,EAAE,eAAe,EACjB,KAAK,YAAY,EACjB,KAAK,QAAQ,MAAM,EACnB,KAAK,KAAO,KACZ,MACJ,CACA,GAAIA,EAAE,UAAYwF,EAAK,GAAO,CAE1B,OADAxF,EAAE,eAAe,EACT,KAAK,WAAY,CACrB,IAAK,OACD,KAAK,kBAAkB,EACvB,MACJ,IAAK,aACD,KAAK,kBAAkB,EACvB,KACR,CACA,MACJ,CACA,GAAIA,EAAE,UAAYwF,EAAK,KAAS,CAE5B,OADAxF,EAAE,eAAe,EACT,KAAK,WAAY,CACrB,IAAK,OACD,KAAK,oBAAoB,EACzB,MACJ,IAAK,aACD,KAAK,oBAAoB,EACzB,KACR,CACA,MACJ,CACA,GAAIA,EAAE,UAAYwF,EAAK,KAAS,CAC5BxF,EAAE,eAAe,EACjB,KAAK,YAAY,YAAY,EAC7B,MACJ,CACA,GAAIA,EAAE,UAAYwF,EAAK,MAAU,CAC7BxF,EAAE,eAAe,EACjB,KAAK,YAAY,MAAM,EACvB,MACJ,CACA,GAAIA,EAAE,UAAYwF,EAAK,OAAYxF,EAAE,UAAYwF,EAAK,MAAU,CAE5D,OADAxF,EAAE,eAAe,EACT,KAAK,WAAY,CACrB,IAAK,OACD,IAAIqE,EAAM,KAAK,eAAe,KAAK,cAAc,EAC7Ci8B,EAAe,KAAK,OAAO,QAAQ,qBAAqBj8B,CAAG,EAC/D,GAAIi8B,EACIA,EAAa,WAAaA,EAAa,UAAU,SACjDA,EAAa,UAAU,QAAQtgC,EAAGqE,CAAG,UAGpC,KAAK,YAAY,QAAQ,YAAYA,CAAG,IAAM,QAAS,CAC5D,KAAK,OAAO,QAAQ,kBAAkB,KAAK,eAAe,KAAK,cAAc,EAAGrE,CAAC,EACjF,WACA,UAAY,CACJ,KAAK,eAAe,KAAK,cAAc,IAAMqE,IAC7C,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,eAAiB,KAAK,eAAeA,CAAG,EAC7C,KAAK,iBAAiB,KAAK,cAAc,EAEjD,EAAE,KAAK,IAAI,EAAG,EAAE,EAChB,KACJ,SACS,KAAK,YAAY,QAAQ,YAAY,KAAK,eAAe,KAAK,cAAc,CAAC,IAAM,MACxF,MAEJ,OACJ,IAAK,aACD,KAAK,kBAAkB,YAAY,KAAK,eAAe,KAAK,cAAc,CAAC,EAC3E,KAAK,kBAAkB,cAAgB,GACvC,KACR,CACA,MACJ,CACJ,EACA47B,EAAsB,UAAU,YAAc,UAAY,CACtD,GAAI,KAAK,iBAAmB,KACxB,OAAQ,KAAK,WAAY,CACrB,IAAK,OACD,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,kBAAkB,KAAK,cAAc,EAC1C,MACJ,IAAK,aACD,KAAK,gBAAgB,KAAK,cAAc,EACxC,KACR,CAEA,KAAK,kBAAkB,QACvB,KAAK,kBAAkB,KAAK,CAEpC,EACAA,EAAsB,UAAU,qBAAuB,SAAUxmC,EAAO,CACpE,IAAI8mC,EAAoB,KAAK,OAAO,kBAAkB,KAAK,eAAe9mC,CAAK,CAAC,EAC5E+mC,EAAgB,KAAK,eAAe/mC,CAAK,EAAE,MAAM,UAAY,OACjE,OAAO8mC,GAAqBC,CAChC,EACAP,EAAsB,UAAU,uBAAyB,SAAUxmC,EAAO,CACtE,IAAI8mC,EAAoB,KAAK,OAAO,kBAAkB,KAAK,eAAe9mC,CAAK,CAAC,EAC5E+mC,EAAgB,CAAC,CAAC,KAAK,iBAAiB/mC,CAAK,EACjD,OAAO8mC,GAAqBC,CAChC,EACAP,EAAsB,UAAU,qBAAuB,SAAUxmC,EAAO,CACpE,IAAI8mC,EAAoB,KAAK,OAAO,kBAAkB,KAAK,eAAe9mC,CAAK,CAAC,EAC5E+mC,EAAgB,KAAK,eAAe/mC,CAAK,EAAE,MAAM,UAAY,OACjE,OAAO8mC,GAAqBC,CAChC,EACAP,EAAsB,UAAU,eAAiB,SAAUxmC,EAAO,CAC9D,IAAIsZ,EAAO,KAAK,MAAM,IAAItZ,CAAK,EAC3B0D,EAAU4V,EAAK,QACnB,OAAO5V,EAAQ,WAAW,CAAC,CAC/B,EACA8iC,EAAsB,UAAU,iBAAmB,SAAUxmC,EAAO,CAChE,IAAIsZ,EAAO,KAAK,MAAM,IAAItZ,CAAK,EAC3B0D,EAAU4V,EAAK,QACnB,OAAO5V,EAAQ,WAAW,CAAC,CAC/B,EACA8iC,EAAsB,UAAU,eAAiB,SAAUxmC,EAAO,CAC9D,IAAIsZ,EAAO,KAAK,MAAM,IAAItZ,CAAK,EAC3B0D,EAAU4V,EAAK,QACnB,OAAO5V,EAAQ,WAAW,CAAC,CAC/B,EACA8iC,EAAsB,UAAU,2BAA6B,SAAUxmC,EAAO,CAG1E,GAFI,KAAK,uBAAuBA,CAAK,GAEjC,KAAK,qBAAqBA,CAAK,EAC/B,OAAOA,EAEX,QADIuB,EAAI,EACDvB,EAAQuB,EAAI,GAAKvB,EAAQuB,EAAI,KAAK,MAAM,UAAU,EAAI,GAAG,CAE5D,GADAA,IACIvB,EAAQuB,GAAK,GAAK,KAAK,uBAAuBvB,EAAQuB,CAAC,EACvD,OAAOvB,EAAQuB,EACnB,GAAIvB,EAAQuB,GAAK,KAAK,MAAM,UAAU,EAAI,GAAK,KAAK,uBAAuBvB,EAAQuB,CAAC,EAChF,OAAOvB,EAAQuB,EACnB,GAAIvB,EAAQuB,GAAK,GAAK,KAAK,qBAAqBvB,EAAQuB,CAAC,EACrD,OAAOvB,EAAQuB,EACnB,GAAIvB,EAAQuB,GAAK,KAAK,MAAM,UAAU,EAAI,GAAK,KAAK,qBAAqBvB,EAAQuB,CAAC,EAC9E,OAAOvB,EAAQuB,CACvB,CACA,OAAO,IACX,EACAilC,EAAsB,UAAU,uBAAyB,SAAUxmC,EAAO,CACtE,GAAI,KAAK,qBAAqBA,CAAK,EAC/B,OAAOA,EAEX,QADIuB,EAAI,EACDvB,EAAQuB,EAAI,GAAKvB,EAAQuB,EAAI,KAAK,MAAM,UAAU,EAAI,GAAG,CAE5D,GADAA,IACIvB,EAAQuB,GAAK,GAAK,KAAK,qBAAqBvB,EAAQuB,CAAC,EACrD,OAAOvB,EAAQuB,EACnB,GAAIvB,EAAQuB,GAAK,KAAK,MAAM,UAAU,EAAI,GAAK,KAAK,qBAAqBvB,EAAQuB,CAAC,EAC9E,OAAOvB,EAAQuB,CACvB,CACA,OAAO,IACX,EACAilC,EAAsB,UAAU,iBAAmB,SAAUxmC,EAAO,CAChE,GAAIA,GAAS,KAEb,KAAIgnC,EAAa,KAAK,eAAehnC,CAAK,EAC1CgnC,EAAW,UAAU,IAAI,KAAK,OAAO,SAAS,sBAAsB,EACpEA,EAAW,MAAM,EACrB,EACAR,EAAsB,UAAU,mBAAqB,SAAUxmC,EAAO,CAClE,GAAIA,GAAS,KAEb,KAAI6mC,EAAe,KAAK,iBAAiB7mC,CAAK,EAC1C6mC,IACAA,EAAa,UAAU,IAAI,KAAK,OAAO,SAAS,sBAAsB,EACtEA,EAAa,MAAM,GAE3B,EACAL,EAAsB,UAAU,iBAAmB,SAAUxmC,EAAO,CAChE,GAAIA,GAAS,KAEb,KAAIoY,EAAa,KAAK,eAAepY,CAAK,EAC1CoY,EAAW,UAAU,IAAI,KAAK,OAAO,SAAS,sBAAsB,EACpEA,EAAW,MAAM,EACrB,EACAouB,EAAsB,UAAU,gBAAkB,SAAUxmC,EAAO,CAC/D,IAAIgnC,EAAa,KAAK,eAAehnC,CAAK,EAC1CgnC,EAAW,UAAU,OAAO,KAAK,OAAO,SAAS,sBAAsB,EACvEA,EAAW,KAAK,CACpB,EACAR,EAAsB,UAAU,kBAAoB,SAAUxmC,EAAO,CACjE,IAAI6mC,EAAe,KAAK,iBAAiB7mC,CAAK,EAC1C6mC,IACAA,EAAa,UAAU,OAAO,KAAK,OAAO,SAAS,sBAAsB,EACzEA,EAAa,KAAK,EAE1B,EACAL,EAAsB,UAAU,gBAAkB,SAAUxmC,EAAO,CAC/D,IAAIoY,EAAa,KAAK,eAAepY,CAAK,EAC1CoY,EAAW,UAAU,OAAO,KAAK,OAAO,SAAS,sBAAsB,EACvEA,EAAW,KAAK,CACpB,EACAouB,EAAsB,UAAU,kBAAoB,UAAY,CAE5D,QADIxmC,EAAQ,KAAK,eACVA,EAAQ,GAEX,GADAA,IACI,KAAK,qBAAqBA,CAAK,GAAK,KAAK,uBAAuBA,CAAK,EAAG,CACxE,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,kBAAkB,KAAK,cAAc,EAC1C,KAAK,eAAiBA,EAClB,KAAK,qBAAqBA,CAAK,EAC/B,KAAK,iBAAiB,KAAK,cAAc,EAGzC,KAAK,mBAAmB,KAAK,cAAc,EAE/C,MACJ,CAGR,EACAwmC,EAAsB,UAAU,oBAAsB,UAAY,CAE9D,QADIxmC,EAAQ,KAAK,eACVA,EAAQ,KAAK,MAAM,UAAU,EAAI,GAEpC,GADAA,IACI,KAAK,qBAAqBA,CAAK,GAAK,KAAK,uBAAuBA,CAAK,EAAG,CACxE,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,kBAAkB,KAAK,cAAc,EAC1C,KAAK,eAAiBA,EAClB,KAAK,qBAAqBA,CAAK,EAC/B,KAAK,iBAAiB,KAAK,cAAc,EAGzC,KAAK,mBAAmB,KAAK,cAAc,EAE/C,MACJ,CAGR,EACAwmC,EAAsB,UAAU,kBAAoB,UAAY,CAE5D,QADIxmC,EAAQ,KAAK,eACVA,EAAQ,GAEX,GADAA,IACI,KAAK,qBAAqBA,CAAK,EAAG,CAClC,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,eAAiBA,EACtB,KAAK,iBAAiB,KAAK,cAAc,EACzC,MACJ,CAGR,EACAwmC,EAAsB,UAAU,oBAAsB,UAAY,CAE9D,QADIxmC,EAAQ,KAAK,eACVA,EAAQ,KAAK,MAAM,UAAU,EAAI,GAEpC,GADAA,IACI,KAAK,qBAAqBA,CAAK,EAAG,CAClC,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,eAAiBA,EACtB,KAAK,iBAAiB,KAAK,cAAc,EACzC,MACJ,CAGR,EACAwmC,EAAsB,UAAU,mBAAqB,SAAUS,EAAMC,EAAMpnC,EAAQ,CAC/E,OAAImnC,IAAS,KACFC,EACPA,IAAS,MAEL,KAAK,IAAIpnC,EAASmnC,CAAI,GAAK,KAAK,IAAInnC,EAASonC,CAAI,EAD9CD,EAC0DC,CACzE,EACAV,EAAsB,UAAU,YAAc,SAAUW,EAAgB,CACpE,OAAQA,EAAgB,CACpB,IAAK,aACD,GAAI,KAAK,aAAe,aACpB,MAEJ,IAAIC,EAAkB,KAAK,uBAAuB,KAAK,cAAc,EACrE,GAAIA,GAAmB,KACnB,MAEJ,KAAK,WAAa,aAClB,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,kBAAkB,KAAK,cAAc,EAC1C,KAAK,eAAiBA,EACtB,KAAK,iBAAiB,KAAK,cAAc,EACzC,MACJ,IAAK,OACD,GAAI,KAAK,aAAe,OACpB,MAEJ,IAAIC,EAAsB,KAAK,2BAA2B,KAAK,cAAc,EAC7E,GAAIA,IAAwB,KACxB,MAEJ,KAAK,WAAa,OAClB,KAAK,gBAAgB,KAAK,cAAc,EACxC,KAAK,eAAiBA,EAClB,KAAK,uBAAuBA,CAAmB,EAC/C,KAAK,mBAAmB,KAAK,cAAc,EAG3C,KAAK,iBAAiB,KAAK,cAAc,EAE7C,KACR,CAEJ,EACAb,EAAsB,UAAU,eAAiB,SAAUxmC,EAAO,CAC9D,IAAIsZ,EAAO,KAAK,MAAM,IAAItZ,CAAK,EAC/B,OAAIsZ,EACOA,EAAK,IACT,IACX,EACAktB,EAAsB,UAAU,eAAiB,SAAU57B,EAAK,CAC5D,QAASrJ,EAAI,EAAGA,EAAI,KAAK,MAAM,UAAU,EAAGA,IAAK,CAC7C,IAAI+X,EAAO,KAAK,MAAM,IAAI/X,CAAC,EAC3B,GAAI+X,EAAK,KAAO1O,EACZ,OAAOrJ,CACf,CACA,OAAO,IACX,EACOilC,CACX,EAAE,EACFjpC,EAAQ,sBAAwBipC,EAChC,IAAII,EAAqC,UAAY,CACjD,SAASA,EAAoBpyB,EAAU8yB,EAAuB,CAC1D,KAAK,sBAAwBA,EAC7B,KAAK,SAAW9yB,CACpB,CACA,OAAAoyB,EAAoB,UAAU,OAAS,UAAY,CAC/C,OAAO76B,EAAK,gBAAgB,KAAK,SAAS,OAAO,CACrD,EACA66B,EAAoB,UAAU,OAAS,UAAY,CAC/C,OAAO,KAAK,sBAAsB,eAAe,KAAK,sBAAsB,cAAc,CAC9F,EACAA,EAAoB,UAAU,mBAAqB,UAAY,CAC3D,OAAO,KAAK,sBAAsB,aAAe,YACrD,EACAA,EAAoB,UAAU,aAAe,UAAY,CACrD,OAAO,KAAK,sBAAsB,aAAe,MACrD,EACOA,CACX,EAAE,EACFrpC,EAAQ,oBAAsBqpC,CAE9B,CAAC,EAED,IAAI,OAAO,aAAa,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,oBAAoB,yBAAyB,0BAA0B,yBAAyB,0BAA0B,mBAAmB,aAAa,YAAY,wBAAwB,+BAA+B,gCAAgC,aAAa,qBAAqB,8BAA8B,aAAa,gBAAgB,eAAe,gBAAgB,aAAa,EAAG,SAASvoC,EAASd,EAASC,EAAO,CAAC,aAC7gB,IAAI0X,EAAY,MAAQ,KAAK,UAAa,SAAS/U,EAAG,CAClD,IAAIyF,EAAI,OAAO,QAAW,YAAc,OAAO,SAAUwE,EAAIxE,GAAKzF,EAAEyF,CAAC,EAAGrE,EAAI,EAC5E,GAAI6I,EAAG,OAAOA,EAAE,KAAKjK,CAAC,EACtB,GAAIA,GAAK,OAAOA,EAAE,QAAW,SAAU,MAAO,CAC1C,KAAM,UAAY,CACd,OAAIA,GAAKoB,GAAKpB,EAAE,SAAQA,EAAI,QACrB,CAAE,MAAOA,GAAKA,EAAEoB,GAAG,EAAG,KAAM,CAACpB,CAAE,CAC1C,CACJ,EACA,MAAM,IAAI,UAAUyF,EAAI,0BAA4B,iCAAiC,CACzF,EACIsB,EAAM7I,EAAQ,WAAW,EACzBkH,EAAMlH,EAAQ,WAAW,EACzB8J,EAAO9J,EAAQ,YAAY,EAC3BuE,EAAYvE,EAAQ,iBAAiB,EACrCkR,EAAYlR,EAAQ,sBAAsB,EAAE,UAC5CuhB,EAAevhB,EAAQ,uBAAuB,EAAE,aAChDoiB,EAAcpiB,EAAQ,sBAAsB,EAAE,YAC9CsiB,EAAatiB,EAAQ,uBAAuB,EAAE,WAC9Co/B,EAAcp/B,EAAQ,gBAAgB,EAAE,YACxCmkC,EAASnkC,EAAQ,UAAU,EAAE,OAC7BiM,EAAQjM,EAAQ,SAAS,EAAE,MAC3B8H,EAAe9H,EAAQ,qBAAqB,EAAE,aAC9CynC,EAAiBznC,EAAQ,4BAA4B,EAAE,eACvDkpC,EAAkBlpC,EAAQ,6BAA6B,EAAE,SACzDgL,EAAShL,EAAQ,UAAU,EAC3BsuB,EAAgBtuB,EAAQ,kBAAkB,EAAE,cAC5CmoC,EAAwBnoC,EAAQ,2BAA2B,EAAE,sBAC7DuQ,EAAMvQ,EAAQ,UAAU,EAAE,IAC1BwQ,EAAYxQ,EAAQ,aAAa,EACjC0N,EAAO1N,EAAQ,YAAY,EAC3BsQ,EAAQtQ,EAAQ,aAAa,EAC7BwY,EAAexY,EAAQ,WAAW,EAAE,aACpCmpC,EAAwB,UAAY,CACpC,SAASA,EAAOnwB,EAAUnM,EAAS7H,EAAS,CACxC,KAAK,GAAK,UAAY,EAAEmkC,EAAO,KAAO,KAAK,QAC3C,KAAK,WAAa,CAAC,EACnB,IAAI/iC,EAAY4S,EAAS,oBAAoB,EAC7C,KAAK,UAAY5S,EACjB,KAAK,SAAW4S,EAChB,KAAK,SAAW,IAAIyuB,EAAeljC,EAAU,MAAQ,MAAQ,MAAO2kC,CAAe,EAC/E,OAAO,UAAY,WACnB,KAAK,UAAY,IAAIh4B,EAAU8H,EAAS,qBAAqB,EAAG,IAAI,EACpE,KAAK,SAAS,SAAW,KAAK,UAAU,WAAW,EACnD,KAAK,cAAgB,IAAIuI,EAAa,IAAI,EAC1C,IAAIa,EAAY,IAAI,GAExB,KAAK,WAAa,IAAIE,EAAW,IAAI,EACrC,KAAK,QAAU,IAAI6hB,EAAO,EAAE,IAAI,CAC5B,KAAM,EACV,CAAC,EACD,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,SAAS,GAAG,OAAQ,KAAK,eAAe,EAC7C,KAAK,wBAAwB,EAC7B,KAAK,iBAAmBr6B,EAAK,YAAY,UAAY,CACjD,KAAK,QAAQ,QAAS,CAAC,CAAC,EACpB,KAAK,SAAW,CAAC,KAAK,QAAQ,WAC9B,KAAK,QAAQ,YAAY,cAAc,CAC/C,EAAE,KAAK,IAAI,CAAC,EACZ,KAAK,GAAG,SAAU,SAAUtC,EAAG3D,EAAO,CAClCA,EAAM,iBAAiB,SAAS,EAAE,CACtC,CAAC,EACD,KAAK,WAAWgJ,GAAW7H,GAAWA,EAAQ,SAAW,IAAIo6B,EAAY,EAAE,CAAC,EAC5Ep0B,EAAO,aAAa,IAAI,EACpBhG,GACA,KAAK,WAAWA,CAAO,EAC3BgG,EAAO,QAAQ,SAAU,IAAI,CACjC,CACA,OAAAm+B,EAAO,UAAU,wBAA0B,UAAY,CACnD,KAAK,SAAS,GAAG,OAAQ,KAAK,eAAe,KAAK,IAAI,EAAG,EAAI,EAC7D,KAAK,SAAS,GAAG,YAAa,KAAK,aAAa,KAAK,IAAI,EAAG,EAAI,CACpE,EACAA,EAAO,UAAU,eAAiB,SAAU9J,EAAc,CACtD,KAAK,QAAQ,eAAeA,CAAY,CAC5C,EACA8J,EAAO,UAAU,aAAe,SAAUjhC,EAAG,CACzC,KAAK,QAAQ,aAAaA,CAAC,CAC/B,EACAihC,EAAO,UAAU,iBAAmB,SAAU9J,EAAc,CACxD,KAAK,MAAQ,KAAK,QAAQ,MAC1B,KAAK,MAAM,UAAY,KAAK,SAAS,UACrC,KAAK,OAAS,KAAK,QAAQ,OACtBA,IACD,KAAK,gBAAkB,KAE/B,EACA8J,EAAO,UAAU,eAAiB,SAAUjhC,EAAG,CAC3C,GAAI,KAAK,OAAS,KAAK,QAAS,CAC5B,GAAIA,GAAKA,EAAE,cAAgB,GAAO,CAC9B,KAAK,MAAQ,KACb,MACJ,CAEA,GADA,KAAK,QAAQ,oBAAoB,EAC7B,CAAC,KAAK,MACN,OACJ,IAAI8J,EAAU,KAAK,MAAM,QACrBo3B,EAAiBp3B,GAAWA,EAAQ,eACxC,GAAIo3B,EAAgB,CAChB,OAAQA,EAAgB,CACpB,IAAK,iBACDA,EAAiB,UACrB,IAAK,SACD,KAAK,SAAS,qBAAqB,KAAM,EAAG,EAC5C,MACJ,IAAK,UACL,IAAK,SACD,KAAK,SAAS,qBAAqB,EACnC,MACJ,IAAK,gBACD,IAAI98B,EAAQ,KAAK,UAAU,SAAS,EAChCtB,EAAS,KAAK,SAAS,aACvBsB,EAAM,MAAM,KAAOtB,EAAO,SAAWsB,EAAM,IAAI,KAAOtB,EAAO,WAC7D,KAAK,SAAS,wBAAwB,KAAK,UAAU,OAAQ,KAAK,UAAU,IAAI,EAEpF,MACJ,QACI,KACR,CACIo+B,GAAkB,WAClB,KAAK,SAAS,iBAAiB,KAAK,MAAM,SAAS,CAC3D,CACA,KAAK,SAAW,KAAK,QAAQ,UAAU,OAAO,EAC9C,KAAK,OAAS,KAAK,MACnB,KAAK,MAAQ,IACjB,CACJ,EACAD,EAAO,UAAU,gBAAkB,SAAUjhC,EAAG,CAC5C,GAAK,KAAK,iBAEV,KAAImhC,EAAO,KAAK,OACZC,EAAoB,KAAK,mBACzBC,EAAcF,EAAK,SAAYnhC,EAAE,QAAQ,MAAQmhC,EAAK,QAAQ,KAClE,GAAInhC,EAAE,QAAQ,MAAQ,eAAgB,CAClC,IAAIuJ,EAAOvJ,EAAE,KACT,KAAK,mBAAqB,SAC1B,KAAK,iBAAmB,IAC5BqhC,EAAcA,GACP,KAAK,mBACJ,CAAC,KAAK,KAAK93B,CAAI,GAAK,KAAK,KAAK43B,EAAK,IAAI,GAC/C,KAAK,iBAAmB,EAC5B,MAEIE,EAAcA,GACPD,EAAkB,QAAQphC,EAAE,QAAQ,IAAI,IAAM,GAErD,KAAK,kBAAoB,UACtB,KAAK,IAAI,EAAI,KAAK,kBAAoB,MACzCqhC,EAAc,IAEdA,EACA,KAAK,QAAQ,gBAAkB,GAC1BD,EAAkB,QAAQphC,EAAE,QAAQ,IAAI,IAAM,KACnD,KAAK,kBAAoB,KAAK,IAAI,GAC1C,EACAihC,EAAO,UAAU,mBAAqB,SAAUK,EAAiBl/B,EAAI,CACjE,GAAIk/B,GAAmB,OAAOA,GAAoB,UAAYA,GAAmB,MAAO,CACpF,KAAK,cAAgBA,EACrB,IAAI3lC,EAAQ,KACZmH,EAAO,WAAW,CAAC,aAAcw+B,CAAe,EAAG,SAAUrqC,EAAQ,CAC7D0E,EAAM,eAAiB2lC,GACvB3lC,EAAM,WAAW,mBAAmB1E,GAAUA,EAAO,OAAO,EAChEmL,GAAMA,EAAG,CACb,CAAC,CACL,MAEI,KAAK,cAAgB,KACrB,KAAK,WAAW,mBAAmBk/B,CAAe,EAClDl/B,GAAMA,EAAG,CAEjB,EACA6+B,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,WAAW,mBAAmB,CAC9C,EACAA,EAAO,UAAU,WAAa,SAAUt8B,EAAS,CAC7C,GAAI,KAAK,SAAWA,EAEpB,CAAI,KAAK,OACL,KAAK,aAAa,EACtB,KAAK,MAAQ,CAAC,EACd,IAAI48B,EAAa,KAAK,QACtB,GAAIA,EAAY,CACZ,KAAK,QAAQ,IAAI,SAAU,KAAK,iBAAiB,EACjD,KAAK,QAAQ,IAAI,aAAc,KAAK,aAAa,EACjD,KAAK,QAAQ,IAAI,kBAAmB,KAAK,kBAAkB,EAC3D,KAAK,QAAQ,IAAI,gBAAiB,KAAK,gBAAgB,EACvD,KAAK,QAAQ,IAAI,kBAAmB,KAAK,kBAAkB,EAC3D,KAAK,QAAQ,IAAI,iBAAkB,KAAK,iBAAiB,EACzD,KAAK,QAAQ,IAAI,aAAc,KAAK,aAAa,EACjD,KAAK,QAAQ,IAAI,oBAAqB,KAAK,oBAAoB,EAC/D,KAAK,QAAQ,IAAI,mBAAoB,KAAK,mBAAmB,EAC7D,KAAK,QAAQ,IAAI,mBAAoB,KAAK,mBAAmB,EAC7D,KAAK,QAAQ,IAAI,mBAAoB,KAAK,mBAAmB,EAC7D,KAAK,QAAQ,IAAI,kBAAmB,KAAK,eAAe,EACxD,KAAK,QAAQ,IAAI,kBAAmB,KAAK,kBAAkB,EAC3D,KAAK,QAAQ,IAAI,mBAAoB,KAAK,mBAAmB,EAC7D,KAAK,QAAQ,IAAI,iBAAkB,KAAK,iBAAiB,EACzD,KAAK,QAAQ,IAAI,eAAgB,KAAK,eAAe,EACrD,IAAIz2B,EAAY,KAAK,QAAQ,aAAa,EAC1CA,EAAU,IAAI,eAAgB,KAAK,eAAe,EAClDA,EAAU,IAAI,kBAAmB,KAAK,kBAAkB,CAC5D,CACA,KAAK,QAAUnG,EACXA,GACA,KAAK,kBAAoB,KAAK,iBAAiB,KAAK,IAAI,EACxDA,EAAQ,GAAG,SAAU,KAAK,iBAAiB,EAC3C,KAAK,SAAS,WAAWA,CAAO,EAChC,KAAK,cAAgB,KAAK,aAAa,KAAK,IAAI,EAChDA,EAAQ,GAAG,aAAc,KAAK,aAAa,EAC3C,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1DA,EAAQ,GAAG,kBAAmB,KAAK,kBAAkB,EACrD,KAAK,iBAAmB,KAAK,SAAS,gBAAgB,KAAK,KAAK,QAAQ,EACxEA,EAAQ,GAAG,gBAAiB,KAAK,gBAAgB,EACjD,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1DA,EAAQ,GAAG,kBAAmB,KAAK,kBAAkB,EACrD,KAAK,kBAAoB,KAAK,iBAAiB,KAAK,IAAI,EACxDA,EAAQ,GAAG,iBAAkB,KAAK,iBAAiB,EACnD,KAAK,cAAgB,KAAK,aAAa,KAAK,IAAI,EAChDA,EAAQ,GAAG,aAAc,KAAK,aAAa,EAC3C,KAAK,qBAAuB,KAAK,oBAAoB,KAAK,IAAI,EAC9D,KAAK,QAAQ,GAAG,oBAAqB,KAAK,oBAAoB,EAC9D,KAAK,oBAAsB,KAAK,mBAAmB,KAAK,IAAI,EAC5D,KAAK,QAAQ,GAAG,mBAAoB,KAAK,mBAAmB,EAC5D,KAAK,oBAAsB,KAAK,mBAAmB,KAAK,IAAI,EAC5D,KAAK,QAAQ,GAAG,mBAAoB,KAAK,mBAAmB,EAC5D,KAAK,oBAAsB,KAAK,mBAAmB,KAAK,IAAI,EAC5D,KAAK,QAAQ,GAAG,mBAAoB,KAAK,mBAAmB,EAC5D,KAAK,gBAAkB,KAAK,eAAe,KAAK,IAAI,EACpD,KAAK,QAAQ,GAAG,kBAAmB,KAAK,eAAe,EACvD,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1D,KAAK,QAAQ,GAAG,kBAAmB,KAAK,kBAAkB,EAC1D,KAAK,oBAAsB,KAAK,mBAAmB,KAAK,IAAI,EAC5D,KAAK,QAAQ,GAAG,mBAAoB,KAAK,mBAAmB,EAC5D,KAAK,UAAYA,EAAQ,aAAa,EACtC,KAAK,UAAU,GAAG,eAAgB,KAAK,eAAe,EACtD,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,IAAI,EAC1D,KAAK,UAAU,GAAG,kBAAmB,KAAK,kBAAkB,EAC5D,KAAK,kBAAoB,KAAK,iBAAiB,KAAK,IAAI,EACxD,KAAK,QAAQ,GAAG,iBAAkB,KAAK,iBAAiB,EACxD,KAAK,gBAAkB,KAAK,eAAe,KAAK,IAAI,EACpD,KAAK,QAAQ,GAAG,eAAgB,KAAK,eAAe,EACpD,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,eAAe,GAAK,KAAK,SAAS,gBAAgB,EAC/D,KAAK,SAAS,WAAW,IAGzB,KAAK,UAAY,KACjB,KAAK,SAAS,WAAWA,CAAO,GAEpC,KAAK,QAAQ,gBAAiB,CAC1B,QAASA,EACT,WAAY48B,CAChB,CAAC,EACD,KAAK,MAAQ,KACbA,GAAcA,EAAW,QAAQ,eAAgB,CAAE,UAAW,IAAK,CAAC,EAChEA,IACAA,EAAW,QAAU,MACzB58B,GAAWA,EAAQ,QAAQ,eAAgB,CAAE,OAAQ,IAAK,CAAC,EACvDA,IACAA,EAAQ,QAAU,MAClBA,GAAW,CAACA,EAAQ,WACpBA,EAAQ,YAAY,cAAc,EAC1C,EACAs8B,EAAO,UAAU,WAAa,UAAY,CACtC,OAAO,KAAK,OAChB,EACAA,EAAO,UAAU,SAAW,SAAUnoC,EAAKyf,EAAW,CAClD,YAAK,QAAQ,IAAI,SAASzf,CAAG,EACxByf,EAEIA,GAAa,EAClB,KAAK,gBAAgB,EAChBA,GAAa,IAClB,KAAK,kBAAkB,EAJvB,KAAK,UAAU,EAKZzf,CACX,EACAmoC,EAAO,UAAU,SAAW,UAAY,CACpC,OAAO,KAAK,QAAQ,SAAS,CACjC,EACAA,EAAO,UAAU,aAAe,UAAY,CACxC,OAAO,KAAK,SAChB,EACAA,EAAO,UAAU,OAAS,SAAUvI,EAAO,CACvC,KAAK,SAAS,SAASA,CAAK,CAChC,EACAuI,EAAO,UAAU,SAAW,SAAUhyB,EAAO7M,EAAI,CAC7C,KAAK,SAAS,SAAS6M,EAAO7M,CAAE,CACpC,EACA6+B,EAAO,UAAU,SAAW,UAAY,CACpC,OAAO,KAAK,SAAS,SAAS,CAClC,EACAA,EAAO,UAAU,SAAW,SAAU9iC,EAAOqjC,EAAU,CACnD,KAAK,SAAS,SAASrjC,EAAOqjC,CAAQ,CAC1C,EACAP,EAAO,UAAU,WAAa,SAAU9iC,EAAO,CAC3C,KAAK,SAAS,WAAWA,CAAK,CAClC,EACA8iC,EAAO,UAAU,YAAc,UAAY,CACvC,OAAO,KAAK,UAAU,UAAU,GAC5BjiC,EAAI,cAAc,KAAK,SAAS,EAAE,QAC1C,EACAiiC,EAAO,UAAU,YAAc,SAAUthB,EAAM,CAC3C,KAAK,UAAU,WAAYA,CAAI,CACnC,EACAshB,EAAO,UAAU,mBAAqB,UAAY,CAC9C,GAAI,MAAK,kBAGT,KAAI5sB,EAAO,KACX,KAAK,kBAAoB,GACzB,WAAW,UAAY,CACnBA,EAAK,kBAAoB,GACzB,IAAI1P,EAAU0P,EAAK,QACnB,GAAI,GAAC1P,GAAWA,EAAQ,WAExB,CAAIA,EAAQ,oBACRA,EAAQ,kBAAkB,UAAU,QAAQ,SAAUjH,EAAI,CACtDiH,EAAQ,aAAajH,CAAE,CAC3B,CAAC,EACDiH,EAAQ,kBAAoB,MAEhC,IAAI4H,EAAM8H,EAAK,kBAAkB,EAC7BpM,EAAUoM,EAAK,mBAAmB,EAClCwhB,EAAc5tB,GAAWA,EAAQ,2BAA6BA,EAAQ,0BAA0BoM,CAAI,EACpGmb,EAAS7qB,EAAQ,yBAAyB4H,EAAKspB,CAAW,EAC9D,GAAI,CAACrG,EAAQ,CACT,IAAI3G,EAAW,IAAIzC,EAAczhB,EAAS4H,EAAI,IAAKA,EAAI,MAAM,EACzDkY,EAAQoE,EAAS,gBAAgB,EACrC,GAAIpE,GAAS,0BAA0B,KAAKA,EAAM,IAAI,EAAG,CACrD,IAAIgd,EAAiB98B,EAAQ,gBAAgB4H,CAAG,EAC5Ck1B,IACAjS,EAAS,CACLiS,EAAe,YAAY,QAAQ,EAAIA,EAAe,QAAUA,EAAe,YAC/EA,EAAe,aAAa,QAAQ,EAAIA,EAAe,SAAWA,EAAe,YACrF,EAER,CACJ,CAGA,GAFI,CAACjS,GAAU7qB,EAAQ,MAAM,cACzB6qB,EAAS7qB,EAAQ,MAAM,YAAY0P,EAAK,OAAO,GAC/C,CAACmb,EAAQ,CACLnb,EAAK,yBAAyB,GAC9BA,EAAK,SAAS,WAAW,sBAAsB,EACnD,MACJ,CACA,IAAIqtB,EAAa,cACZ,MAAM,QAAQlS,CAAM,EAGhBA,EAAO,QAAU,IACtBkS,EAAa,qBAHblS,EAAS,CAACA,CAAM,EAKhBA,EAAO,QAAU,IACbzrB,EAAM,cAAcyrB,EAAO,CAAC,EAAE,IAAKA,EAAO,CAAC,EAAE,KAAK,GAAK,EACvDA,EAAS,CAACzrB,EAAM,WAAWyrB,EAAO,CAAC,EAAE,MAAOA,EAAO,CAAC,EAAE,GAAG,CAAC,EACrDzrB,EAAM,cAAcyrB,EAAO,CAAC,EAAE,MAAOA,EAAO,CAAC,EAAE,GAAG,GAAK,IAC5DA,EAAS,CAACzrB,EAAM,WAAWyrB,EAAO,CAAC,EAAE,MAAOA,EAAO,CAAC,EAAE,GAAG,CAAC,IAElE7qB,EAAQ,kBAAoB,CACxB,OAAQ6qB,EACR,UAAWA,EAAO,IAAI,SAAUprB,EAAO,CACnC,OAAOO,EAAQ,UAAUP,EAAOs9B,EAAY,MAAM,CACtD,CAAC,CACL,EACIrtB,EAAK,yBAAyB,GAC9BA,EAAK,SAAS,WAAW,sBAAsB,EACvD,EAAG,EAAE,EACT,EACA4sB,EAAO,UAAU,MAAQ,UAAY,CACjC,KAAK,UAAU,MAAM,CACzB,EACAA,EAAO,UAAU,UAAY,UAAY,CACrC,OAAO,KAAK,UAAU,UAAU,CACpC,EACAA,EAAO,UAAU,KAAO,UAAY,CAChC,KAAK,UAAU,KAAK,CACxB,EACAA,EAAO,UAAU,QAAU,SAAUjhC,EAAG,CAChC,KAAK,aAET,KAAK,WAAa,GAClB,KAAK,SAAS,WAAW,EACzB,KAAK,SAAS,eAAe,EAC7B,KAAK,MAAM,QAASA,CAAC,EACzB,EACAihC,EAAO,UAAU,OAAS,SAAUjhC,EAAG,CAC9B,KAAK,aAEV,KAAK,WAAa,GAClB,KAAK,SAAS,WAAW,EACzB,KAAK,SAAS,cAAc,EAC5B,KAAK,MAAM,OAAQA,CAAC,EACxB,EACAihC,EAAO,UAAU,cAAgB,UAAY,CACzC,KAAK,SAAS,aAAa,EAC3B,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,CACpC,EACAA,EAAO,UAAU,iBAAmB,SAAU9hB,EAAO,CACjD,IAAIwiB,EAAO,KAAK,QAAQ,aACpBj9B,EAAWya,EAAM,MAAM,KAAOA,EAAM,IAAI,IAAMA,EAAM,IAAI,IAAM,IAClE,KAAK,SAAS,YAAYA,EAAM,MAAM,IAAKza,EAASi9B,CAAI,EACxD,KAAK,QAAQ,SAAUxiB,CAAK,EAC5B,KAAK,cAAc,CACvB,EACA8hB,EAAO,UAAU,kBAAoB,SAAUjhC,EAAG,CAC9C,IAAI0iB,EAAO1iB,EAAE,KACb,KAAK,SAAS,YAAY0iB,EAAK,MAAOA,EAAK,IAAI,CACnD,EACAue,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,SAAS,UAAU,KAAK,QAAQ,aAAa,CAAC,CACvD,EACAA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,KAAK,SAAS,UAAU,KAAK,QAAQ,cAAc,CAAC,CACxD,EACAA,EAAO,UAAU,eAAiB,UAAY,CAC1C,KAAK,cAAc,EACnB,KAAK,QAAQ,iBAAiB,CAClC,EACAA,EAAO,UAAU,2BAA6B,UAAY,CACtD,IAAIt8B,EAAU,KAAK,WAAW,EAC1BuzB,EASJ,GARI,KAAK,wBACD,KAAK,iBAAmB,QAAU,CAAC,KAAK,UAAU,YAAY,KAC9DA,EAAY,KAAK,kBAAkB,GACnC,KAAK,SAAS,OAAS,KAAK,SAAS,MAAM,yBAA2B,CAAC,KAAK,UAAU,QAAQ,IAC9FA,EAAY,IACZ,KAAK,SAAS,WAAa,KAAK,QAAQ,UAAU,IAAM,GAAK,EAAE,KAAK,SAAS,UAAY,KACzFA,EAAY,KAEhBvzB,EAAQ,sBAAwB,CAACuzB,EACjCvzB,EAAQ,aAAaA,EAAQ,qBAAqB,EAAE,EACpDA,EAAQ,qBAAuB,aAE1B,CAACA,EAAQ,sBAAwBuzB,EAAW,CACjD,IAAI9zB,EAAQ,IAAIL,EAAMm0B,EAAU,IAAKA,EAAU,OAAQA,EAAU,IAAK,GAAQ,EAC9E9zB,EAAM,GAAKO,EAAQ,UAAUP,EAAO,kBAAmB,YAAY,EACnEO,EAAQ,qBAAuBP,CACnC,MACS8zB,IACLvzB,EAAQ,qBAAqB,MAAM,IAAMuzB,EAAU,IACnDvzB,EAAQ,qBAAqB,IAAI,IAAMuzB,EAAU,IACjDvzB,EAAQ,qBAAqB,MAAM,OAASuzB,EAAU,OACtDvzB,EAAQ,QAAQ,kBAAkB,EAE1C,EACAs8B,EAAO,UAAU,kBAAoB,SAAUjhC,EAAG,CAC9C,IAAI2E,EAAU,KAAK,QAKnB,GAJIA,EAAQ,kBACRA,EAAQ,aAAaA,EAAQ,gBAAgB,EAEjDA,EAAQ,iBAAmB,KACtB,KAAK,UAAU,QAAQ,EAMxB,KAAK,2BAA2B,MANL,CAC3B,IAAIP,EAAQ,KAAK,UAAU,SAAS,EAChCjG,EAAQ,KAAK,kBAAkB,EACnCwG,EAAQ,iBAAmBA,EAAQ,UAAUP,EAAO,gBAAiBjG,CAAK,CAC9E,CAIA,IAAI8D,EAAK,KAAK,wBAA0B,KAAK,6BAA6B,EAC1E,KAAK,QAAQ,UAAUA,CAAE,EACzB,KAAK,QAAQ,iBAAiB,CAClC,EACAg/B,EAAO,UAAU,6BAA+B,UAAY,CACxD,IAAIt8B,EAAU,KAAK,QACfmG,EAAY,KAAK,kBAAkB,EACvC,GAAI,EAAAA,EAAU,QAAQ,GAAKA,EAAU,YAAY,GAEjD,KAAI7G,EAAc6G,EAAU,MAAM,OAC9B3G,EAAY2G,EAAU,IAAI,OAC1BhP,EAAO6I,EAAQ,QAAQmG,EAAU,MAAM,GAAG,EAC1CiyB,EAASjhC,EAAK,UAAUmI,EAAaE,CAAS,EAClD,GAAI,EAAA44B,EAAO,OAAS,KAAQ,CAAC,SAAS,KAAKA,CAAM,GAEjD,KAAI96B,EAAK,KAAK,QAAQ,gBAAgB,CAClC,UAAW,GACX,cAAe,GACf,OAAQ86B,CACZ,CAAC,EACG6E,EAAmB9lC,EAAK,UAAUmI,EAAc,EAAGE,EAAY,CAAC,EACpE,GAAKlC,EAAG,KAAK2/B,CAAgB,EAE7B,OAAO3/B,GACX,EACAg/B,EAAO,UAAU,oBAAsB,UAAY,CAC/C,KAAK,SAAS,mBAAmB,CACrC,EACAA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,KAAK,SAAS,kBAAkB,CACpC,EACAA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,KAAK,SAAS,kBAAkB,CACpC,EACAA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,KAAK,SAAS,eAAe,KAAK,QAAQ,eAAe,CAAC,CAC9D,EACAA,EAAO,UAAU,aAAe,SAAUjhC,EAAG,CACzC,KAAK,SAAS,WAAW,EACzB,KAAK,MAAM,aAAcA,CAAC,CAC9B,EACAihC,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,SAAS,WAAW,CAC7B,EACAA,EAAO,UAAU,iBAAmB,UAAY,CAC5C,KAAK,SAAS,SAAS,EAAI,CAC/B,EACAA,EAAO,UAAU,aAAe,UAAY,CACxC,KAAK,2BAA2B,EAChC,KAAK,SAAS,WAAW,CAC7B,EACAA,EAAO,UAAU,gBAAkB,UAAY,CAC3C,OAAO,KAAK,QAAQ,aAAa,KAAK,kBAAkB,CAAC,CAC7D,EACAA,EAAO,UAAU,YAAc,UAAY,CACvC,IAAI13B,EAAO,KAAK,gBAAgB,EAC5Bs4B,EAAK,KAAK,QAAQ,IAAI,oBAAoB,EAC1CC,EAAW,GACf,GAAI,CAACv4B,GAAQ,KAAK,wBAAyB,CACvCu4B,EAAW,GAEX,QADItS,EAAS,KAAK,UAAU,aAAa,EAChCx0B,EAAI,EAAGA,EAAIw0B,EAAO,OAAQx0B,IAAK,CACpC,IAAIoJ,EAAQorB,EAAOx0B,CAAC,EAChBA,GAAKw0B,EAAOx0B,EAAI,CAAC,EAAE,MAAM,KAAOoJ,EAAM,MAAM,MAEhDmF,GAAQ,KAAK,QAAQ,QAAQnF,EAAM,MAAM,GAAG,EAAIy9B,EACpD,CACJ,CACA,IAAI7hC,EAAI,CAAE,KAAMuJ,CAAK,EACrB,YAAK,QAAQ,OAAQvJ,CAAC,EACtBsI,EAAU,SAAWw5B,EAAW9hC,EAAE,KAAO,GAClCA,EAAE,IACb,EACAihC,EAAO,UAAU,OAAS,UAAY,CAClC,KAAK,SAAS,KAAK,OAAQ,IAAI,CACnC,EACAA,EAAO,UAAU,MAAQ,UAAY,CACjC,KAAK,SAAS,KAAK,MAAO,IAAI,CAClC,EACAA,EAAO,UAAU,QAAU,SAAU13B,EAAMnB,EAAO,CAC9C,IAAIpI,EAAI,CAAE,KAAMuJ,EAAM,MAAOnB,CAAM,EACnC,KAAK,SAAS,KAAK,QAAS,KAAMpI,CAAC,CACvC,EACAihC,EAAO,UAAU,aAAe,SAAUjhC,EAAG,CACrC,OAAOA,GAAK,WACZA,EAAI,CAAE,KAAMA,CAAE,GAClB,KAAK,QAAQ,QAASA,CAAC,EACvB,IAAIuJ,EAAOvJ,EAAE,KACT+hC,EAAWx4B,IAASjB,EAAU,SAC9B3D,EAAU,KAAK,QACnB,GAAI,CAAC,KAAK,mBAAqB,KAAK,uBAC5Bo9B,EACAp9B,EAAQ,OAAO,CAAE,IAAK,KAAK,UAAU,KAAK,IAAK,OAAQ,CAAE,EAAG4E,CAAI,EAEhE,KAAK,OAAOA,CAAI,UAEfw4B,EACL,KAAK,UAAU,UAAU,OAAO,QAAQ,SAAU39B,EAAO,CACrDO,EAAQ,OAAO,CAAE,IAAKP,EAAM,MAAM,IAAK,OAAQ,CAAE,EAAGmF,CAAI,CAC5D,CAAC,MAEA,CACD,IAAIwB,EAAQxB,EAAK,MAAM,YAAY,EAC/BimB,EAAS,KAAK,UAAU,UAAU,OAClCwS,EAAaj3B,EAAM,QAAU,IAAM,CAACA,EAAM,CAAC,GAAK,CAACA,EAAM,CAAC,GAC5D,GAAIA,EAAM,QAAUykB,EAAO,QAAUwS,EACjC,OAAO,KAAK,SAAS,KAAK,eAAgB,KAAMz4B,CAAI,EACxD,QAASvO,EAAIw0B,EAAO,OAAQx0B,KAAM,CAC9B,IAAIoJ,EAAQorB,EAAOx0B,CAAC,EACfoJ,EAAM,QAAQ,GACfO,EAAQ,OAAOP,CAAK,EACxBO,EAAQ,OAAOP,EAAM,MAAO2G,EAAM/P,CAAC,CAAC,CACxC,CACJ,CACJ,EACAimC,EAAO,UAAU,YAAc,SAAUn3B,EAAS4b,EAAM,CACpD,OAAO,KAAK,SAAS,KAAK5b,EAAS,KAAM4b,CAAI,CACjD,EACAub,EAAO,UAAU,OAAS,SAAU13B,EAAM04B,EAAQ,CAC9C,IAAIt9B,EAAU,KAAK,QACf6R,EAAO7R,EAAQ,QAAQ,EACvBkI,EAAS,KAAK,kBAAkB,EACpC,GAAI,KAAK,qBAAqB,GAAK,CAACo1B,EAAQ,CACxC,IAAIC,EAAY1rB,EAAK,gBAAgB7R,EAAQ,SAASkI,EAAO,GAAG,EAAG,YAAa,KAAMlI,EAAS4E,CAAI,EAC/F24B,IACI34B,IAAS24B,EAAU,OACd,KAAK,yBACN,KAAK,QAAQ,gBAAkB,GAC/B,KAAK,iBAAmB,KAGhC34B,EAAO24B,EAAU,KAEzB,CAGA,GAFI34B,GAAQ,MACRA,EAAO,KAAK,QAAQ,aAAa,GAChC,KAAK,UAAU,QAAQ,GAKvB,GAAI,KAAK,QAAQ,aAAa,GAAKA,EAAK,QAAQ;AAAA,CAAI,GAAK,GAAI,CAC9D,IAAInF,EAAQL,EAAM,WAAW8I,EAAQA,CAAM,EAC3CzI,EAAM,IAAI,QAAUmF,EAAK,OACzB,KAAK,QAAQ,OAAOnF,CAAK,CAC7B,MAT+B,CAC3B,IAAIA,EAAQ,KAAK,kBAAkB,EACnCyI,EAAS,KAAK,QAAQ,OAAOzI,CAAK,EAClC,KAAK,eAAe,CACxB,CAMA,GAAImF,GAAQ;AAAA,GAAQA,GAAQ;AAAA,EAAQ,CAChC,IAAIzN,EAAO6I,EAAQ,QAAQkI,EAAO,GAAG,EACrC,GAAIA,EAAO,OAAS/Q,EAAK,OAAO,MAAM,EAAG,CACrC,IAAI0S,EAAI1S,EAAK,OAAO+Q,EAAO,MAAM,EAAE,OAAO,MAAM,EAChDlI,EAAQ,IAAI,aAAakI,EAAO,IAAKA,EAAO,OAAQA,EAAO,OAAS2B,CAAC,CACzE,CACJ,CACA,KAAK,eAAe,EACpB,IAAInU,EAAQwS,EAAO,OACfs1B,EAAYx9B,EAAQ,SAASkI,EAAO,GAAG,EACvC/Q,EAAO6I,EAAQ,QAAQkI,EAAO,GAAG,EACjCu1B,EAAgB5rB,EAAK,aAAa2rB,EAAWrmC,EAAMyN,CAAI,EAU3D,GATA5E,EAAQ,OAAOkI,EAAQtD,CAAI,EACvB24B,GAAaA,EAAU,YACnBA,EAAU,UAAU,QAAU,EAC9B,KAAK,UAAU,kBAAkB,IAAIn+B,EAAM8I,EAAO,IAAKxS,EAAQ6nC,EAAU,UAAU,CAAC,EAAGr1B,EAAO,IAAKxS,EAAQ6nC,EAAU,UAAU,CAAC,CAAC,CAAC,EAGlI,KAAK,UAAU,kBAAkB,IAAIn+B,EAAM8I,EAAO,IAAMq1B,EAAU,UAAU,CAAC,EAAGA,EAAU,UAAU,CAAC,EAAGr1B,EAAO,IAAMq1B,EAAU,UAAU,CAAC,EAAGA,EAAU,UAAU,CAAC,CAAC,CAAC,GAGxK,KAAK,kBAAmB,CACxB,GAAIv9B,EAAQ,YAAY,EAAE,UAAU4E,CAAI,EAAG,CACvC,IAAI84B,EAAa7rB,EAAK,kBAAkB2rB,EAAWrmC,EAAK,MAAM,EAAG+Q,EAAO,MAAM,EAAGlI,EAAQ,aAAa,CAAC,EACvGA,EAAQ,OAAO,CAAE,IAAKkI,EAAO,IAAM,EAAG,OAAQ,CAAE,EAAGw1B,CAAU,CACjE,CACID,GACA5rB,EAAK,YAAY2rB,EAAWx9B,EAASkI,EAAO,GAAG,CACvD,CACJ,EACAo0B,EAAO,UAAU,WAAa,UAAY,CAUtC,QATIt8B,EAAU,KAAK,QACf6R,EAAO7R,EAAQ,QAAQ,EACvB6qB,EAAS,KAAK,UAAU,QAAQ,EAC9B,CAAC,IAAIzrB,EAAM,EAAG,EAAGY,EAAQ,IAAI,UAAU,EAAI,EAAG,CAAC,CAAC,EAChD,KAAK,UAAU,aAAa,EAC9B29B,EAAgB,GAChBt3B,EAAW,GACXq3B,EAAa,GACbzX,EAAMjmB,EAAQ,aAAa,EACtB3J,EAAI,EAAGA,EAAIw0B,EAAO,OAAQx0B,IAG/B,QAFIgJ,EAAWwrB,EAAOx0B,CAAC,EAAE,MAAM,IAC3BkJ,EAASsrB,EAAOx0B,CAAC,EAAE,IAAI,IAClBqJ,EAAML,EAAUK,GAAOH,EAAQG,IAAO,CACvCA,EAAM,IACNi+B,EAAgB39B,EAAQ,SAASN,EAAM,CAAC,EACxC2G,EAAWrG,EAAQ,QAAQN,EAAM,CAAC,EAClCg+B,EAAa7rB,EAAK,kBAAkB8rB,EAAet3B,EAAU4f,CAAG,GAEpE,IAAI9uB,EAAO6I,EAAQ,QAAQN,CAAG,EAC1Bk+B,EAAa/rB,EAAK,WAAW1a,CAAI,EACrC,GAAIumC,IAAeE,EAAY,CAC3B,GAAIA,EAAW,OAAS,EAAG,CACvB,IAAIn+B,EAAQ,IAAIL,EAAMM,EAAK,EAAGA,EAAKk+B,EAAW,MAAM,EACpD59B,EAAQ,OAAOP,CAAK,CACxB,CACIi+B,EAAW,OAAS,GACpB19B,EAAQ,OAAO,CAAE,IAAKN,EAAK,OAAQ,CAAE,EAAGg+B,CAAU,CAE1D,CACA7rB,EAAK,YAAY8rB,EAAe39B,EAASN,CAAG,CAChD,CAER,EACA48B,EAAO,UAAU,YAAc,SAAU13B,EAAMi5B,EAAa,CACxD,GAAI,CAACA,EACD,OAAO,KAAK,WAAW,YAAYj5B,CAAI,EAC3C,KAAK,eAAe,CAAE,QAAS,CAAE,KAAM,cAAe,CAAE,CAAC,EACzD,IAAIk5B,EAAmB,KAAK,iBAAiB,KAAK,KAAMl5B,EAAMi5B,CAAW,EACrE,KAAK,UAAU,WACf,KAAK,iBAAiBC,CAAgB,EAEtCA,EAAiB,EACrB,KAAK,aAAa,CACtB,EACAxB,EAAO,UAAU,iBAAmB,SAAU13B,EAAMi5B,EAAa,CAC7D,GAAIA,EAAY,YAAcA,EAAY,YAAa,CACnD,IAAI1vB,EAAI,KAAK,UAAU,SAAS,EAChCA,EAAE,MAAM,QAAU0vB,EAAY,WAC9B1vB,EAAE,IAAI,QAAU0vB,EAAY,YACxB1vB,EAAE,MAAM,OAAS,IACjBA,EAAE,MAAM,MACRA,EAAE,MAAM,QAAU,KAAK,QAAQ,QAAQA,EAAE,MAAM,GAAG,EAAE,OAAS,GAEjE,KAAK,UAAU,SAASA,CAAC,EACrB,CAACvJ,GAAQ,CAACuJ,EAAE,QAAQ,GACpB,KAAK,OAAO,CACpB,CAGA,IAFIvJ,GAAQ,CAAC,KAAK,UAAU,QAAQ,IAChC,KAAK,OAAOA,EAAM,EAAI,EACtBi5B,EAAY,cAAgBA,EAAY,WAAY,CACpD,IAAI1vB,EAAI,KAAK,UAAU,SAAS,EAChCA,EAAE,MAAM,QAAU0vB,EAAY,aAC9B1vB,EAAE,IAAI,QAAU0vB,EAAY,WAC5B,KAAK,UAAU,SAAS1vB,CAAC,CAC7B,CACJ,EACAmuB,EAAO,UAAU,aAAe,SAAUjhC,EAAGwH,EAAQlC,EAAS,CAC1D,OAAO,KAAK,WAAW,aAAatF,EAAGwH,EAAQlC,CAAO,CAC1D,EACA27B,EAAO,UAAU,aAAe,SAAUpJ,EAAW,CACjD,KAAK,QAAQ,aAAaA,CAAS,CACvC,EACAoJ,EAAO,UAAU,aAAe,UAAY,CACxC,OAAO,KAAK,QAAQ,aAAa,CACrC,EACAA,EAAO,UAAU,gBAAkB,UAAY,CAC3C,KAAK,QAAQ,gBAAgB,CACjC,EACAA,EAAO,UAAU,eAAiB,SAAUyB,EAAO,CAC/C,KAAK,UAAU,cAAeA,CAAK,CACvC,EACAzB,EAAO,UAAU,eAAiB,UAAY,CAC1C,OAAO,KAAK,UAAU,aAAa,CACvC,EACAA,EAAO,UAAU,aAAe,SAAU0B,EAAW,CACjD,KAAK,UAAU,YAAaA,CAAS,CACzC,EACA1B,EAAO,UAAU,aAAe,UAAY,CACxC,OAAO,KAAK,UAAU,WAAW,CACrC,EACAA,EAAO,UAAU,kBAAoB,SAAUnoC,EAAK,CAChD,KAAK,UAAU,iBAAkBA,CAAG,CACxC,EACAmoC,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,UAAU,gBAAgB,CAC1C,EACAA,EAAO,UAAU,uBAAyB,SAAU2B,EAAiB,CACjE,KAAK,UAAU,sBAAuBA,CAAe,CACzD,EACA3B,EAAO,UAAU,uBAAyB,UAAY,CAClD,OAAO,KAAK,UAAU,qBAAqB,CAC/C,EACAA,EAAO,UAAU,uBAAyB,SAAU2B,EAAiB,CACjE,KAAK,UAAU,sBAAuBA,CAAe,CACzD,EACA3B,EAAO,UAAU,uBAAyB,UAAY,CAClD,OAAO,KAAK,UAAU,qBAAqB,CAC/C,EACAA,EAAO,UAAU,yBAA2B,SAAU2B,EAAiB,CACnE,KAAK,UAAU,wBAAyBA,CAAe,CAC3D,EACA3B,EAAO,UAAU,yBAA2B,UAAY,CACpD,OAAO,KAAK,sBAChB,EACAA,EAAO,UAAU,kBAAoB,SAAU4B,EAAe,CAC1D,KAAK,SAAS,kBAAkBA,CAAa,CACjD,EACA5B,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,SAAS,kBAAkB,CAC3C,EACAA,EAAO,UAAU,kBAAoB,SAAUnhB,EAAgB,CAC3D,KAAK,SAAS,kBAAkBA,CAAc,CAClD,EACAmhB,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,SAAS,kBAAkB,CAC3C,EACAA,EAAO,UAAU,uBAAyB,SAAU6B,EAAS,CACzD,KAAK,SAAS,uBAAuBA,CAAO,CAChD,EACA7B,EAAO,UAAU,uBAAyB,UAAY,CAClD,OAAO,KAAK,SAAS,uBAAuB,CAChD,EACAA,EAAO,UAAU,yBAA2B,SAAU/I,EAAW,CAC7D,KAAK,SAAS,yBAAyBA,CAAS,CACpD,EACA+I,EAAO,UAAU,yBAA2B,UAAY,CACpD,OAAO,KAAK,SAAS,yBAAyB,CAClD,EACAA,EAAO,UAAU,mBAAqB,SAAU8B,EAAiB,CAC7D,KAAK,SAAS,mBAAmBA,CAAe,CACpD,EACA9B,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,SAAS,mBAAmB,CAC5C,EACAA,EAAO,UAAU,qBAAuB,SAAU8B,EAAiB,CAC/D,KAAK,SAAS,qBAAqBA,CAAe,CACtD,EACA9B,EAAO,UAAU,qBAAuB,UAAY,CAChD,OAAO,KAAK,SAAS,qBAAqB,CAC9C,EACAA,EAAO,UAAU,YAAc,SAAUx1B,EAAU,CAC/C,KAAK,UAAU,WAAYA,CAAQ,CACvC,EACAw1B,EAAO,UAAU,YAAc,UAAY,CACvC,OAAO,KAAK,UAAU,UAAU,CACpC,EACAA,EAAO,UAAU,qBAAuB,SAAU+B,EAAS,CACvD,KAAK,UAAU,oBAAqBA,CAAO,CAC/C,EACA/B,EAAO,UAAU,qBAAuB,UAAY,CAChD,OAAO,KAAK,UAAU,mBAAmB,CAC7C,EACAA,EAAO,UAAU,yBAA2B,SAAU+B,EAAS,CAC3D,KAAK,UAAU,wBAAyBA,CAAO,CACnD,EACA/B,EAAO,UAAU,yBAA2B,UAAY,CACpD,OAAO,KAAK,UAAU,uBAAuB,CACjD,EACAA,EAAO,UAAU,mBAAqB,SAAUgC,EAAM,CAClD,KAAK,UAAU,kBAAmBA,CAAI,CAC1C,EACAhC,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,UAAU,iBAAiB,CAC3C,EACAA,EAAO,UAAU,mBAAqB,SAAUiC,EAAM,CAClD,KAAK,UAAU,kBAAmBA,CAAI,CAC1C,EACAjC,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,UAAU,iBAAiB,CAC3C,EACAA,EAAO,UAAU,OAAS,SAAUtmB,EAAK,CACjC,KAAK,UAAU,QAAQ,IACnBA,GAAO,OACP,KAAK,UAAU,WAAW,EAE1B,KAAK,UAAU,YAAY,GAEnC,IAAIvW,EAAQ,KAAK,kBAAkB,EACnC,GAAI,KAAK,qBAAqB,EAAG,CAC7B,IAAIO,EAAU,KAAK,QACf+U,EAAQ/U,EAAQ,SAASP,EAAM,MAAM,GAAG,EACxC++B,EAAYx+B,EAAQ,QAAQ,EAAE,gBAAgB+U,EAAO,WAAY,KAAM/U,EAASP,CAAK,EACzF,GAAIA,EAAM,IAAI,SAAW,EAAG,CACxB,IAAImF,EAAO5E,EAAQ,aAAaP,CAAK,EACrC,GAAImF,EAAKA,EAAK,OAAS,CAAC,GAAK;AAAA,EAAM,CAC/B,IAAIzN,EAAO6I,EAAQ,QAAQP,EAAM,IAAI,GAAG,EACpC,QAAQ,KAAKtI,CAAI,IACjBsI,EAAM,IAAI,OAAStI,EAAK,OAEhC,CACJ,CACIqnC,IACA/+B,EAAQ++B,EAChB,CACA,KAAK,QAAQ,OAAO/+B,CAAK,EACzB,KAAK,eAAe,CACxB,EACA68B,EAAO,UAAU,gBAAkB,UAAY,CACvC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,gBAAgB,EACnC,KAAK,QAAQ,OAAO,KAAK,kBAAkB,CAAC,EAC5C,KAAK,eAAe,CACxB,EACAA,EAAO,UAAU,eAAiB,UAAY,CACtC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,eAAe,EAClC,KAAK,QAAQ,OAAO,KAAK,kBAAkB,CAAC,EAC5C,KAAK,eAAe,CACxB,EACAA,EAAO,UAAU,kBAAoB,UAAY,CACzC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,gBAAgB,EAC/B,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,WAAW,EAC9B,KAAK,QAAQ,OAAO,KAAK,kBAAkB,CAAC,EAC5C,KAAK,eAAe,CACxB,EACAA,EAAO,UAAU,gBAAkB,UAAY,CACvC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,cAAc,EACjC,IAAI78B,EAAQ,KAAK,kBAAkB,EAC/BA,EAAM,MAAM,QAAUA,EAAM,IAAI,QAAUA,EAAM,MAAM,KAAOA,EAAM,IAAI,MACvEA,EAAM,IAAI,OAAS,EACnBA,EAAM,IAAI,OAEd,KAAK,QAAQ,OAAOA,CAAK,EACzB,KAAK,eAAe,CACxB,EACA68B,EAAO,UAAU,UAAY,UAAY,CAChC,KAAK,UAAU,QAAQ,IACxB,KAAK,QAAQ,OAAO,KAAK,kBAAkB,CAAC,EAC5C,KAAK,eAAe,GAExB,IAAIp0B,EAAS,KAAK,kBAAkB,EACpC,KAAK,OAAO;AAAA,CAAI,EAChB,KAAK,qBAAqBA,CAAM,CACpC,EACAo0B,EAAO,UAAU,aAAe,SAAU13B,EAAMvQ,EAAU,CACtD,KAAK,SAAS,aAAauQ,EAAMvQ,CAAQ,CAC7C,EACAioC,EAAO,UAAU,gBAAkB,UAAY,CAC3C,KAAK,SAAS,gBAAgB,CAClC,EACAA,EAAO,UAAU,iBAAmB,UAAY,CAC5C,GAAK,KAAK,UAAU,QAAQ,EAG5B,KAAIp0B,EAAS,KAAK,kBAAkB,EAChCvI,EAASuI,EAAO,OACpB,GAAIvI,IAAW,EAEf,KAAIxI,EAAO,KAAK,QAAQ,QAAQ+Q,EAAO,GAAG,EACtCukB,EAAMhtB,EACNE,EAASxI,EAAK,QACds1B,EAAOt1B,EAAK,OAAOwI,CAAM,EAAIxI,EAAK,OAAOwI,EAAS,CAAC,EACnDF,EAAQ,IAAIL,EAAM8I,EAAO,IAAKvI,EAAS,EAAGuI,EAAO,IAAKvI,EAAS,CAAC,IAGhE8sB,EAAOt1B,EAAK,OAAOwI,EAAS,CAAC,EAAIxI,EAAK,OAAOwI,EAAS,CAAC,EACvDF,EAAQ,IAAIL,EAAM8I,EAAO,IAAKvI,EAAS,EAAGuI,EAAO,IAAKvI,CAAM,GAEhE,KAAK,QAAQ,QAAQF,EAAOgtB,CAAI,EAChC,KAAK,QAAQ,UAAU,eAAehtB,EAAM,GAAG,GACnD,EACA68B,EAAO,UAAU,YAAc,UAAY,CACvC,IAAImC,EAAgB,KAAK,kBAAkB,EACvC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,WAAW,EAE9B,IAAIh/B,EAAQ,KAAK,kBAAkB,EAC/BmF,EAAO,KAAK,QAAQ,aAAanF,CAAK,EAC1C,KAAK,QAAQ,QAAQA,EAAOmF,EAAK,YAAY,CAAC,EAC9C,KAAK,UAAU,kBAAkB65B,CAAa,CAClD,EACAnC,EAAO,UAAU,YAAc,UAAY,CACvC,IAAImC,EAAgB,KAAK,kBAAkB,EACvC,KAAK,UAAU,QAAQ,GACvB,KAAK,UAAU,WAAW,EAE9B,IAAIh/B,EAAQ,KAAK,kBAAkB,EAC/BmF,EAAO,KAAK,QAAQ,aAAanF,CAAK,EAC1C,KAAK,QAAQ,QAAQA,EAAOmF,EAAK,YAAY,CAAC,EAC9C,KAAK,UAAU,kBAAkB65B,CAAa,CAClD,EACAnC,EAAO,UAAU,OAAS,UAAY,CAClC,IAAIt8B,EAAU,KAAK,QACfP,EAAQ,KAAK,kBAAkB,EACnC,GAAIA,EAAM,MAAM,IAAMA,EAAM,IAAI,IAAK,CACjC,IAAIse,EAAO,KAAK,iBAAiB,EACjC/d,EAAQ,WAAW+d,EAAK,MAAOA,EAAK,KAAM,GAAI,EAC9C,MACJ,SACSte,EAAM,MAAM,OAASA,EAAM,IAAI,OAAQ,CAC5C,IAAImF,EAAO5E,EAAQ,aAAaP,CAAK,EACrC,GAAI,CAAC,QAAQ,KAAKmF,CAAI,EAAG,CACrB,IAAImZ,EAAO,KAAK,iBAAiB,EACjC/d,EAAQ,WAAW+d,EAAK,MAAOA,EAAK,KAAM,GAAI,EAC9C,MACJ,CACJ,CACA,IAAI5mB,EAAO6I,EAAQ,QAAQP,EAAM,MAAM,GAAG,EACtCpL,EAAWoL,EAAM,MACjBub,EAAOhb,EAAQ,WAAW,EAC1BL,EAASK,EAAQ,uBAAuB3L,EAAS,IAAKA,EAAS,MAAM,EACzE,GAAI,KAAK,QAAQ,eAAe,EAC5B,IAAIG,EAASwmB,EAAOrb,EAASqb,EACzB2Z,EAAe13B,EAAK,aAAa,IAAKzI,CAAK,MAE9C,CAED,QADIA,EAAQmL,EAASqb,EACd7jB,EAAKsI,EAAM,MAAM,OAAS,CAAC,GAAK,KAAOjL,GAC1CiL,EAAM,MAAM,SACZjL,IAEJ,KAAK,UAAU,kBAAkBiL,CAAK,EACtCk1B,EAAe,GACnB,CACA,OAAO,KAAK,OAAOA,CAAY,CACnC,EACA2H,EAAO,UAAU,YAAc,UAAY,CACvC,IAAIve,EAAO,KAAK,iBAAiB,EACjC,KAAK,QAAQ,WAAWA,EAAK,MAAOA,EAAK,KAAM,GAAI,CACvD,EACAue,EAAO,UAAU,aAAe,UAAY,CACxC,IAAIn2B,EAAY,KAAK,QAAQ,aAAa,EAC1C,KAAK,QAAQ,YAAYA,EAAU,SAAS,CAAC,CACjD,EACAm2B,EAAO,UAAU,UAAY,UAAY,CAIrC,QAHIve,EAAO,KAAK,iBAAiB,EAC7B/d,EAAU,KAAK,QACfoG,EAAQ,CAAC,EACJ/P,EAAI0nB,EAAK,MAAO1nB,GAAK0nB,EAAK,KAAM1nB,IACrC+P,EAAM,KAAKpG,EAAQ,QAAQ3J,CAAC,CAAC,EACjC+P,EAAM,KAAK,SAAUnQ,EAAG6T,EAAG,CACvB,OAAI7T,EAAE,YAAY,EAAI6T,EAAE,YAAY,EACzB,GACP7T,EAAE,YAAY,EAAI6T,EAAE,YAAY,EACzB,EACJ,CACX,CAAC,EAED,QADI+qB,EAAc,IAAIz1B,EAAM,EAAG,EAAG,EAAG,CAAC,EAC7B/I,EAAI0nB,EAAK,MAAO1nB,GAAK0nB,EAAK,KAAM1nB,IAAK,CAC1C,IAAIc,EAAO6I,EAAQ,QAAQ3J,CAAC,EAC5Bw+B,EAAY,MAAM,IAAMx+B,EACxBw+B,EAAY,IAAI,IAAMx+B,EACtBw+B,EAAY,IAAI,OAAS19B,EAAK,OAC9B6I,EAAQ,QAAQ60B,EAAazuB,EAAM/P,EAAI0nB,EAAK,KAAK,CAAC,CACtD,CACJ,EACAue,EAAO,UAAU,mBAAqB,UAAY,CAC9C,IAAIvnB,EAAQ,KAAK,QAAQ,SAAS,KAAK,kBAAkB,EAAE,GAAG,EAC1DgJ,EAAO,KAAK,iBAAiB,EACjC,KAAK,QAAQ,QAAQ,EAAE,mBAAmBhJ,EAAO,KAAK,QAASgJ,EAAK,MAAOA,EAAK,IAAI,CACxF,EACAue,EAAO,UAAU,mBAAqB,UAAY,CAC9C,IAAIp0B,EAAS,KAAK,kBAAkB,EAChC6M,EAAQ,KAAK,QAAQ,SAAS7M,EAAO,GAAG,EACxCzI,EAAQ,KAAK,kBAAkB,EACnC,KAAK,QAAQ,QAAQ,EAAE,mBAAmBsV,EAAO,KAAK,QAAStV,EAAOyI,CAAM,CAChF,EACAo0B,EAAO,UAAU,YAAc,SAAU58B,EAAKC,EAAQ,CAClD,IAAI++B,EAAY,4BAChBA,EAAU,UAAY,EAEtB,QADIhkC,EAAI,KAAK,QAAQ,QAAQgF,CAAG,EACzBg/B,EAAU,UAAY/+B,GAAQ,CACjC,IAAIT,EAAIw/B,EAAU,KAAKhkC,CAAC,EACxB,GAAIwE,EAAE,OAASS,GAAUT,EAAE,MAAQA,EAAE,CAAC,EAAE,QAAUS,EAAQ,CACtD,IAAI6G,EAAS,CACT,MAAOtH,EAAE,CAAC,EACV,MAAOA,EAAE,MACT,IAAKA,EAAE,MAAQA,EAAE,CAAC,EAAE,MACxB,EACA,OAAOsH,CACX,CACJ,CACA,OAAO,IACX,EACA81B,EAAO,UAAU,aAAe,SAAUqC,EAAQ,CAC9C,IAAIj/B,EAAM,KAAK,UAAU,UAAU,EAAE,IACjCC,EAAS,KAAK,UAAU,UAAU,EAAE,OACpCi/B,EAAY,IAAIx/B,EAAMM,EAAKC,EAAS,EAAGD,EAAKC,CAAM,EAClD6Z,EAAI,KAAK,QAAQ,aAAaolB,CAAS,EAC3C,GAAI,CAAC,MAAM,WAAWplB,CAAC,CAAC,GAAK,SAASA,CAAC,EAAG,CACtC,IAAIqlB,EAAK,KAAK,YAAYn/B,EAAKC,CAAM,EACrC,GAAIk/B,EAAI,CACJ,IAAIC,EAAKD,EAAG,MAAM,QAAQ,GAAG,GAAK,EAAIA,EAAG,MAAQA,EAAG,MAAM,QAAQ,GAAG,EAAI,EAAIA,EAAG,IAC5EE,EAAWF,EAAG,MAAQA,EAAG,MAAM,OAASC,EACxCj4B,EAAI,WAAWg4B,EAAG,KAAK,EAC3Bh4B,GAAK,KAAK,IAAI,GAAIk4B,CAAQ,EACtBD,IAAOD,EAAG,KAAOl/B,EAASm/B,EAC1BH,GAAU,KAAK,IAAI,GAAIE,EAAG,IAAMl/B,EAAS,CAAC,EAG1Cg/B,GAAU,KAAK,IAAI,GAAIE,EAAG,IAAMl/B,CAAM,EAE1CkH,GAAK83B,EACL93B,GAAK,KAAK,IAAI,GAAIk4B,CAAQ,EAC1B,IAAIC,EAAMn4B,EAAE,QAAQk4B,CAAQ,EACxBE,EAAe,IAAI7/B,EAAMM,EAAKm/B,EAAG,MAAOn/B,EAAKm/B,EAAG,GAAG,EACvD,KAAK,QAAQ,QAAQI,EAAcD,CAAG,EACtC,KAAK,aAAat/B,EAAK,KAAK,IAAIm/B,EAAG,MAAQ,EAAGl/B,EAASq/B,EAAI,OAASH,EAAG,MAAM,MAAM,CAAC,CACxF,CACJ,MAEI,KAAK,WAAW,CAExB,EACAvC,EAAO,UAAU,WAAa,UAAY,CACtC,IAAI58B,EAAM,KAAK,UAAU,UAAU,EAAE,IACjCC,EAAS,KAAK,UAAU,UAAU,EAAE,OACxC,KAAK,UAAU,WAAW,EAC1B,IAAIigB,EAAe,KAAK,gBAAgB,EACpCsf,EAAgB,KAAK,UAAU,aAAa,EAAE,MAAM,OACpDC,EAAYvf,EAAa,QAAQ,+BAAgC,KAAK,EAAE,MAAM,IAAI,EAClFpF,EAAQ7a,EAASu/B,EAAgB,EACjC1kB,EAAQ,IACRA,EAAQ,GACZ,IAAI4kB,EAAY,EAAGC,EAAW,EAC1BC,EAAO,KACP1f,EAAa,MAAM,eAAe,GAClCuf,EAAU,QAAQ,SAAU5pC,EAAMc,EAAG,CACjCgpC,EAAWD,EAAY7pC,EAAK,OACxBilB,GAAS4kB,GAAa5kB,GAAS6kB,IAC/Bzf,EAAerqB,EACf+pC,EAAK,UAAU,eAAe,EAC9BA,EAAK,aAAa5/B,EAAK0/B,EAAYF,CAAa,EAChDI,EAAK,UAAU,SAAS5/B,EAAK2/B,EAAWH,CAAa,GAEzDE,EAAYC,CAChB,CAAC,EAIL,QAFIE,EAAY,KAAK,iBACjBC,EACKnpC,EAAI,EAAGA,EAAIkpC,EAAU,OAAQlpC,IAElC,QADId,EAAOgqC,EAAUlpC,CAAC,EACb0I,EAAI,EAAGA,GAAK,EAAGA,IAAK,CACzB,IAAI0gC,EAAS,CAAC,CAAC1gC,EACX2gC,EAAiB9f,EAAa,MAAM,IAAI,OAAO,WAAa3iB,EAAK,aAAa1H,EAAKwJ,CAAC,CAAC,EAAI,SAAU,GAAG,CAAC,EAC3G,GAAI2gC,EAAgB,CAChB,IAAIC,EAAkB/f,EAAa,MAAM,IAAI,OAAO,eAAiB3iB,EAAK,aAAayiC,EAAe,CAAC,CAAC,EAAI,WAAY,GAAG,CAAC,EACxHC,IACAH,EAAM5f,EAAa,QAAQ,IAAI,OAAO3iB,EAAK,aAAa1H,EAAKwJ,CAAC,CAAC,EAAG,GAAG,EAAG,SAAUtK,EAAQ,CACtF,IAAImrC,EAAMrqC,EAAKkqC,CAAM,EACrB,OAAIhrC,EAAO,YAAY,GAAKA,EACxBmrC,EAAMA,EAAI,YAAY,EAEjBnrC,EAAO,OAAO,CAAC,EAAE,YAAY,GAAKA,EAAO,OAAO,CAAC,IACtDmrC,EAAMA,EAAI,OAAO,EAAG,CAAC,EAAIrqC,EAAKkqC,CAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAAIG,EAAI,OAAO,CAAC,GAEzEA,CACX,CAAC,EACD,KAAK,OAAOJ,CAAG,EACfA,EAAM,GAEd,CACJ,CAER,EACAlD,EAAO,UAAU,WAAa,SAAU58B,EAAKC,EAAQ,CACjD,IAAI8K,EAAKC,EACLvT,EAAO,KAAK,QAAQ,QAAQuI,CAAG,EAC/By/B,EAAYhoC,EAAK,MAAM,4BAA4B,EACnD0oC,EAAiBlgC,EACjBkgC,EAAiB,IACjBA,EAAiB,GACrB,IAAIC,EAAmB,EAAGC,EAAkB,EAAG/gB,EAC/C,GAAI,CACA,QAASghB,EAAch2B,EAASm1B,CAAS,EAAGc,EAAgBD,EAAY,KAAK,EAAG,CAACC,EAAc,KAAMA,EAAgBD,EAAY,KAAK,EAAG,CACrI,IAAIzqC,EAAO0qC,EAAc,MAEzB,GADAF,EAAkBD,EAAmBvqC,EAAK,OACtCsqC,GAAkBC,GAAoBD,GAAkBE,GACpDxqC,EAAK,MAAM,4BAA4B,EAAG,CAC1CypB,EAAQzpB,EAAK,QAAQ,kBAAmB,EAAE,EAC1C,KACJ,CAEJuqC,EAAmBC,CACvB,CACJ,OACO10B,EAAO,CAAEZ,EAAM,CAAE,MAAOY,CAAM,CAAG,QACxC,CACI,GAAI,CACI40B,GAAiB,CAACA,EAAc,OAASv1B,EAAKs1B,EAAY,SAASt1B,EAAG,KAAKs1B,CAAW,CAC9F,QACA,CAAU,GAAIv1B,EAAK,MAAMA,EAAI,KAAO,CACxC,CACA,OAAOuU,CACX,EACAsd,EAAO,UAAU,SAAW,UAAY,CACpC,IAAIp0B,EAAS,KAAK,UAAU,UAAU,EAClC5N,EAAM,KAAK,WAAW4N,EAAO,IAAKA,EAAO,MAAM,EACnD,OAAI5N,GACA,OAAO,KAAKA,EAAK,QAAQ,EACtBA,GAAO,IAClB,EACAgiC,EAAO,UAAU,YAAc,UAAY,CACvC,IAAIve,EAAO,KAAK,iBAAiB,EACjC,KAAK,QAAQ,gBAAgBA,EAAK,MAAOA,EAAK,IAAI,EAClD,KAAK,eAAe,CACxB,EACAue,EAAO,UAAU,mBAAqB,UAAY,CAC9C,IAAI1W,EAAM,KAAK,UACXttB,EAAM,KAAK,QACXmH,EAAQmmB,EAAI,SAAS,EACrBnJ,EAAUmJ,EAAI,YAAY,EAC9B,GAAInmB,EAAM,QAAQ,EAAG,CACjB,IAAIC,EAAMD,EAAM,MAAM,IACtBnH,EAAI,eAAeoH,EAAKA,CAAG,CAC/B,KACK,CACD,IAAIwoB,EAAQzL,EAAUhd,EAAM,MAAQA,EAAM,IACtCygC,EAAW5nC,EAAI,OAAO4vB,EAAO5vB,EAAI,aAAamH,CAAK,CAAC,EACxDA,EAAM,MAAQyoB,EACdzoB,EAAM,IAAMygC,EACZta,EAAI,kBAAkBnmB,EAAOgd,CAAO,CACxC,CACJ,EACA6f,EAAO,UAAU,cAAgB,UAAY,CACzC,KAAK,WAAW,EAAG,EAAK,CAC5B,EACAA,EAAO,UAAU,YAAc,UAAY,CACvC,KAAK,WAAW,GAAI,EAAK,CAC7B,EACAA,EAAO,UAAU,SAAW,SAAU78B,EAAO60B,EAAYt+B,EAAM,CAC3D,OAAO,KAAK,QAAQ,SAASyJ,EAAO60B,EAAYt+B,CAAI,CACxD,EACAsmC,EAAO,UAAU,YAAc,UAAY,CACvC,KAAK,WAAW,GAAI,EAAI,CAC5B,EACAA,EAAO,UAAU,cAAgB,UAAY,CACzC,KAAK,WAAW,EAAG,EAAI,CAC3B,EACAA,EAAO,UAAU,WAAa,SAAUtmB,EAAKhgB,EAAM,CAC/C,IAAI+nB,EAAMoiB,EACNh6B,EAAY,KAAK,UACrB,GAAI,CAACA,EAAU,mBAAqB,KAAK,uBAAwB,CAC7D,IAAI1G,EAAQ0G,EAAU,gBAAgB,EACtC4X,EAAO,KAAK,iBAAiBte,CAAK,EAClC0gC,EAAQ,KAAK,QAAQ,WAAWpiB,EAAK,MAAOA,EAAK,KAAM/nB,EAAO,EAAIggB,CAAG,EACjEhgB,GAAQggB,GAAO,KACfmqB,EAAQ,GACZ1gC,EAAM,OAAO0gC,EAAO,CAAC,EACrBh6B,EAAU,kBAAkB1G,CAAK,CACrC,KACK,CACD,IAAIorB,EAAS1kB,EAAU,UAAU,OACjCA,EAAU,UAAU,OAAO,KAAK,OAAO,EACvC,KAAK,uBAAyB,GAI9B,QAHIslB,EAAO,EACP2U,EAAY,EACZntC,EAAI43B,EAAO,OACNx0B,EAAI,EAAGA,EAAIpD,EAAGoD,IAAK,CACxB,IAAIgqC,EAAahqC,EACjBw0B,EAAOx0B,CAAC,EAAE,OAAOo1B,EAAM,CAAC,EACxB1N,EAAO,KAAK,iBAAiB8M,EAAOx0B,CAAC,CAAC,EAGtC,QAFImxB,EAAQzJ,EAAK,MACb3mB,EAAO2mB,EAAK,KACT,EAAE1nB,EAAIpD,GAAG,CACRmtC,GACAvV,EAAOx0B,CAAC,EAAE,OAAO+pC,EAAW,CAAC,EACjC,IAAIE,EAAU,KAAK,iBAAiBzV,EAAOx0B,CAAC,CAAC,EAC7C,GAAIL,GAAQsqC,EAAQ,OAASlpC,EACzB,MACC,GAAI,CAACpB,GAAQsqC,EAAQ,MAAQlpC,EAAO,EACrC,MACJA,EAAOkpC,EAAQ,IACnB,CAKA,IAJAjqC,IACAo1B,EAAO,KAAK,QAAQ,WAAWjE,EAAOpwB,EAAMpB,EAAO,EAAIggB,CAAG,EACtDhgB,GAAQggB,GAAO,KACfqqB,EAAahqC,EAAI,GACdgqC,GAAchqC,GACjBw0B,EAAOwV,CAAU,EAAE,OAAO5U,EAAM,CAAC,EACjC4U,IAECrqC,IACDy1B,EAAO,GACX2U,GAAa3U,CACjB,CACAtlB,EAAU,kBAAkBA,EAAU,OAAO,CAAC,CAAC,EAC/CA,EAAU,UAAU,OAAO,KAAK,OAAO,EACvC,KAAK,uBAAyB,EAClC,CACJ,EACAm2B,EAAO,UAAU,iBAAmB,SAAU78B,EAAO,CACjD,OAAAA,GAASA,GAAS,KAAK,kBAAkB,GAAG,aAAa,EAClD,CACH,MAAO,KAAK,QAAQ,gBAAgBA,EAAM,MAAM,GAAG,EACnD,KAAM,KAAK,QAAQ,cAAcA,EAAM,IAAI,GAAG,CAClD,CACJ,EACA68B,EAAO,UAAU,mBAAqB,SAAUiE,EAAkB,CAC9D,KAAK,SAAS,gBAAgBA,CAAgB,CAClD,EACAjE,EAAO,UAAU,oBAAsB,SAAU13B,EAAM,CACnD,KAAK,SAAS,mBAAmBA,CAAI,CACzC,EACA03B,EAAO,UAAU,iBAAmB,UAAY,CAC5C,KAAK,SAAS,gBAAgB,CAClC,EACAA,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,SAAS,mBAAmB,CAC5C,EACAA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,SAAS,kBAAkB,CAC3C,EACAA,EAAO,UAAU,aAAe,SAAU58B,EAAK,CAC3C,OAAQA,GAAO,KAAK,mBAAmB,GAAKA,GAAO,KAAK,kBAAkB,CAC9E,EACA48B,EAAO,UAAU,kBAAoB,SAAU58B,EAAK,CAChD,OAAQA,GAAO,KAAK,SAAS,wBAAwB,GAAKA,GAAO,KAAK,SAAS,uBAAuB,CAC1G,EACA48B,EAAO,UAAU,oBAAsB,UAAY,CAC/C,OAAO,KAAK,SAAS,mBAAmB,EAAI,KAAK,SAAS,gBAAgB,EAAI,CAClF,EACAA,EAAO,UAAU,YAAc,SAAUtmB,EAAKwqB,EAAQ,CAClD,IAAIr0B,EAAW,KAAK,SAChBhO,EAAS,KAAK,SAAS,YACvB4f,EAAO/H,EAAM,KAAK,MAAM7X,EAAO,OAASA,EAAO,UAAU,EACzDqiC,IAAW,GACX,KAAK,UAAU,eAAe,UAAY,CACtC,KAAK,aAAaziB,EAAM,CAAC,CAC7B,CAAC,EAEIyiB,IAAW,KAChB,KAAK,UAAU,aAAaziB,EAAM,CAAC,EACnC,KAAK,UAAU,eAAe,GAElC,IAAI+V,EAAY3nB,EAAS,UACzBA,EAAS,SAAS,EAAG4R,EAAO5f,EAAO,UAAU,EACzCqiC,GAAU,MACVr0B,EAAS,qBAAqB,KAAM,EAAG,EAC3CA,EAAS,iBAAiB2nB,CAAS,CACvC,EACAwI,EAAO,UAAU,eAAiB,UAAY,CAC1C,KAAK,YAAY,EAAG,EAAI,CAC5B,EACAA,EAAO,UAAU,aAAe,UAAY,CACxC,KAAK,YAAY,GAAI,EAAI,CAC7B,EACAA,EAAO,UAAU,aAAe,UAAY,CACxC,KAAK,YAAY,EAAG,EAAK,CAC7B,EACAA,EAAO,UAAU,WAAa,UAAY,CACtC,KAAK,YAAY,GAAI,EAAK,CAC9B,EACAA,EAAO,UAAU,eAAiB,UAAY,CAC1C,KAAK,YAAY,CAAC,CACtB,EACAA,EAAO,UAAU,aAAe,UAAY,CACxC,KAAK,YAAY,EAAE,CACvB,EACAA,EAAO,UAAU,YAAc,SAAU58B,EAAK,CAC1C,KAAK,SAAS,YAAYA,CAAG,CACjC,EACA48B,EAAO,UAAU,aAAe,SAAUnlC,EAAMspC,EAAQtsB,EAASrhB,EAAU,CACvE,KAAK,SAAS,aAAaqE,EAAMspC,EAAQtsB,EAASrhB,CAAQ,CAC9D,EACAwpC,EAAO,UAAU,gBAAkB,UAAY,CAC3C,IAAI78B,EAAQ,KAAK,kBAAkB,EAC/BmI,EAAM,CACN,IAAK,KAAK,MAAMnI,EAAM,MAAM,KAAOA,EAAM,IAAI,IAAMA,EAAM,MAAM,KAAO,CAAC,EACvE,OAAQ,KAAK,MAAMA,EAAM,MAAM,QAAUA,EAAM,IAAI,OAASA,EAAM,MAAM,QAAU,CAAC,CACvF,EACA,KAAK,SAAS,YAAYmI,EAAK,EAAG,CACtC,EACA00B,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,UAAU,UAAU,CACpC,EACAA,EAAO,UAAU,wBAA0B,UAAY,CACnD,OAAO,KAAK,QAAQ,yBAAyB,KAAK,kBAAkB,CAAC,CACzE,EACAA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,OAAO,KAAK,UAAU,SAAS,CACnC,EACAA,EAAO,UAAU,UAAY,UAAY,CACrC,KAAK,UAAU,UAAU,CAC7B,EACAA,EAAO,UAAU,eAAiB,UAAY,CAC1C,KAAK,UAAU,eAAe,CAClC,EACAA,EAAO,UAAU,aAAe,SAAU58B,EAAKC,EAAQ,CACnD,KAAK,UAAU,aAAaD,EAAKC,CAAM,CAC3C,EACA28B,EAAO,UAAU,qBAAuB,SAAU10B,EAAK,CACnD,KAAK,UAAU,qBAAqBA,CAAG,CAC3C,EACA00B,EAAO,UAAU,eAAiB,SAAUkE,EAAQE,EAAQ,CACxD,IAAIx4B,EAAS,KAAK,kBAAkB,EAChCgc,EAAW,IAAIzC,EAAc,KAAK,QAASvZ,EAAO,IAAKA,EAAO,MAAM,EACpEupB,EAAYvN,EAAS,gBAAgB,EACrCyc,EAAa,EACblP,GAAaA,EAAU,KAAK,QAAQ,UAAU,IAAM,KACpDA,EAAYvN,EAAS,aAAa,GAEtC,IAAIpE,EAAQ2R,GAAavN,EAAS,YAAY,EAC9C,GAAKpE,EAEL,KAAI8gB,EACAlP,EAAQ,GACRlB,EAAQ,CAAC,EACTn6B,EAAI6R,EAAO,OAAS4X,EAAM,MAC1B+gB,EACAC,EAAW,CACX,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,GACT,EACA,EAAG,CACC,GAAIhhB,EAAM,MAAM,MAAM,aAAa,GAC/B,KAAOzpB,EAAIypB,EAAM,MAAM,QAAU,CAAC4R,EAAOr7B,IACrC,GAAKyqC,EAAShhB,EAAM,MAAMzpB,CAAC,CAAC,EAO5B,OAJAwqC,EAAcC,EAAShhB,EAAM,MAAMzpB,CAAC,CAAC,EAAI,IAAMypB,EAAM,KAAK,QAAQ,SAAU,QAAQ,EAChF,MAAM0Q,EAAMqQ,CAAW,CAAC,IACxBrQ,EAAMqQ,CAAW,EAAI,GAEjB/gB,EAAM,MAAMzpB,CAAC,EAAG,CACpB,IAAK,IACL,IAAK,IACL,IAAK,IACDm6B,EAAMqQ,CAAW,IACjB,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACDrQ,EAAMqQ,CAAW,IACbrQ,EAAMqQ,CAAW,IAAM,KACvBD,EAAY,UACZlP,EAAQ,IAEZ,KACR,OAGC5R,EAAM,KAAK,QAAQ,UAAU,IAAM,KACpC,MAAM0Q,EAAM1Q,EAAM,KAAK,CAAC,IACxB0Q,EAAM1Q,EAAM,KAAK,EAAI,GAErB2R,EAAU,QAAU,KAAOkP,EAAa,EACxCnQ,EAAM1Q,EAAM,KAAK,IAEZ2R,EAAU,QAAU,MACzBjB,EAAM1Q,EAAM,KAAK,IAEjB0Q,EAAM1Q,EAAM,KAAK,IAAM,KACvB8gB,EAAY,MACZlP,EAAQ,KAGXA,IACDD,EAAY3R,EACZ6gB,IACA7gB,EAAQoE,EAAS,YAAY,EAC7B7tB,EAAI,EAEZ,OAASypB,GAAS,CAAC4R,GACnB,GAAKkP,EAEL,KAAInhC,EAAOmI,EACX,GAAIg5B,IAAc,UACdnhC,EAAQ,KAAK,QAAQ,gBAAgByI,CAAM,EACtCzI,IACDA,EAAQ,IAAIL,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI7tB,EAAI,EAAG6tB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI7tB,EAAI,CAAC,EAClKuR,EAAMnI,EAAM,OACRihC,GAAU94B,EAAI,MAAQM,EAAO,KAAO,KAAK,IAAIN,EAAI,OAASM,EAAO,MAAM,EACrE,KACFzI,EAAQ,KAAK,QAAQ,gBAAgBmI,CAAG,YAG3Cg5B,IAAc,MAAO,CAC1B,GAAI,CAAC9gB,GAASA,EAAM,KAAK,QAAQ,UAAU,IAAM,GAC7C,OAEJ,GADArgB,EAAQ,IAAIL,EAAM8kB,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI,EAAGA,EAAS,mBAAmB,EAAGA,EAAS,sBAAsB,EAAI,CAAC,EACtJzkB,EAAM,QAAQyI,EAAO,IAAKA,EAAO,MAAM,IAAM,EAAG,CAChD,IAAI64B,EAAa,KAAK,QAAQ,gBAAgB74B,CAAM,EAChD64B,IACIA,EAAW,QAAQ,SAAS74B,EAAO,IAAKA,EAAO,MAAM,GACrDzI,EAAQshC,EAAW,SACnBn5B,EAAMnI,EAAM,QAGZA,EAAQshC,EAAW,QACfA,EAAW,SAAS,MAAM,MAAQ74B,EAAO,KAAO64B,EAAW,SAAS,MAAM,SACtE74B,EAAO,OACXN,EAAMnI,EAAM,IAEZmI,EAAMnI,EAAM,OAG5B,CACAmI,EAAMA,GAAOnI,EAAM,KACvB,CACAmI,EAAMnI,GAASA,EAAM,QAAUmI,EAC3BA,IACI44B,EACI/gC,GAASihC,EACT,KAAK,UAAU,SAASjhC,CAAK,EAExBA,GAASA,EAAM,QAAQ,KAAK,kBAAkB,CAAC,EACpD,KAAK,eAAe,EAGpB,KAAK,UAAU,SAASmI,EAAI,IAAKA,EAAI,MAAM,EAI/C,KAAK,UAAU,OAAOA,EAAI,IAAKA,EAAI,MAAM,IAGrD,EACA00B,EAAO,UAAU,SAAW,SAAU0E,EAAYrhC,EAAQwU,EAAS,CAC/D,KAAK,UAAU,eAAe,EAC9B,KAAK,QAAQ,OAAO,CAAE,IAAK6sB,EAAa,EAAG,OAAQrhC,GAAU,CAAE,CAAC,EAChE,KAAK,qBAAuB,KAAK,oBAAoB,EACrD,KAAK,aAAaqhC,EAAa,EAAGrhC,GAAU,CAAC,EACxC,KAAK,kBAAkBqhC,EAAa,CAAC,GACtC,KAAK,aAAaA,EAAa,EAAG,GAAM7sB,CAAO,CACvD,EACAmoB,EAAO,UAAU,WAAa,SAAU58B,EAAKC,EAAQ,CACjD,KAAK,UAAU,OAAOD,EAAKC,CAAM,CACrC,EACA28B,EAAO,UAAU,WAAa,SAAU2E,EAAO,CAC3C,GAAI,KAAK,UAAU,YAAY,GAAK,CAAC,KAAK,UAAU,YAAY,EAAG,CAC/D,IAAIj8B,EAAiB,KAAK,UAAU,OAAO,YAAY,EACvD,OAAO,KAAK,qBAAqBA,CAAc,CACnD,CACA,KAAK,UAAU,eAAe,EAC9B,KAAK,UAAU,aAAa,CAACi8B,GAAS,GAAI,CAAC,CAC/C,EACA3E,EAAO,UAAU,aAAe,SAAU2E,EAAO,CAC7C,GAAI,KAAK,UAAU,YAAY,GAAK,KAAK,UAAU,YAAY,EAAG,CAC9D,IAAIh8B,EAAe,KAAK,UAAU,OAAO,YAAY,EACrD,OAAO,KAAK,qBAAqBA,CAAY,CACjD,CACA,KAAK,UAAU,eAAe,EAC9B,KAAK,UAAU,aAAag8B,GAAS,EAAG,CAAC,CAC7C,EACA3E,EAAO,UAAU,aAAe,SAAU2E,EAAO,CAC7C,GAAK,KAAK,UAAU,QAAQ,EAMxB,IADAA,EAAQA,GAAS,EACVA,KACH,KAAK,UAAU,eAAe,MAPP,CAC3B,IAAIj8B,EAAiB,KAAK,kBAAkB,EAAE,MAC9C,KAAK,qBAAqBA,CAAc,CAC5C,CAOA,KAAK,eAAe,CACxB,EACAs3B,EAAO,UAAU,cAAgB,SAAU2E,EAAO,CAC9C,GAAK,KAAK,UAAU,QAAQ,EAMxB,IADAA,EAAQA,GAAS,EACVA,KACH,KAAK,UAAU,gBAAgB,MAPR,CAC3B,IAAIh8B,EAAe,KAAK,kBAAkB,EAAE,IAC5C,KAAK,qBAAqBA,CAAY,CAC1C,CAOA,KAAK,eAAe,CACxB,EACAq3B,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,UAAU,oBAAoB,EACnC,KAAK,eAAe,CACxB,EACAA,EAAO,UAAU,gBAAkB,UAAY,CAC3C,KAAK,UAAU,kBAAkB,EACjC,KAAK,eAAe,CACxB,EACAA,EAAO,UAAU,gBAAkB,UAAY,CAC3C,KAAK,UAAU,kBAAkB,EACjC,KAAK,eAAe,CACxB,EACAA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,UAAU,oBAAoB,EACnC,KAAK,eAAe,CACxB,EACAA,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,UAAU,oBAAoB,EACnC,KAAK,eAAe,CACxB,EACAA,EAAO,UAAU,iBAAmB,UAAY,CAC5C,KAAK,UAAU,mBAAmB,EAClC,KAAK,eAAe,CACxB,EACAA,EAAO,UAAU,QAAU,SAAUvE,EAAa5/B,EAAS,CACnDA,GACA,KAAK,QAAQ,IAAIA,CAAO,EAC5B,IAAIsH,EAAQ,KAAK,QAAQ,KAAK,KAAK,OAAO,EACtCyhC,EAAW,EACf,OAAKzhC,IAED,KAAK,YAAYA,EAAOs4B,CAAW,IACnCmJ,EAAW,GAEf,KAAK,UAAU,kBAAkBzhC,CAAK,EACtC,KAAK,SAAS,wBAAwBA,EAAM,MAAOA,EAAM,GAAG,GACrDyhC,CACX,EACA5E,EAAO,UAAU,WAAa,SAAUvE,EAAa5/B,EAAS,CACtDA,GACA,KAAK,QAAQ,IAAIA,CAAO,EAE5B,IAAI0yB,EAAS,KAAK,QAAQ,QAAQ,KAAK,OAAO,EAC1CqW,EAAW,EACf,GAAI,CAACrW,EAAO,OACR,OAAOqW,EACX,IAAI/6B,EAAY,KAAK,kBAAkB,EACvC,KAAK,UAAU,OAAO,EAAG,CAAC,EAC1B,QAAS9P,EAAIw0B,EAAO,OAAS,EAAGx0B,GAAK,EAAG,EAAEA,EAClC,KAAK,YAAYw0B,EAAOx0B,CAAC,EAAG0hC,CAAW,GACvCmJ,IAGR,YAAK,UAAU,kBAAkB/6B,CAAS,EACnC+6B,CACX,EACA5E,EAAO,UAAU,YAAc,SAAU78B,EAAOs4B,EAAa,CACzD,IAAI7R,EAAQ,KAAK,QAAQ,aAAazmB,CAAK,EAE3C,OADAs4B,EAAc,KAAK,QAAQ,QAAQ7R,EAAO6R,CAAW,EACjDA,IAAgB,MAChBt4B,EAAM,IAAM,KAAK,QAAQ,QAAQA,EAAOs4B,CAAW,EAC5Ct4B,GAGA,IAEf,EACA68B,EAAO,UAAU,qBAAuB,UAAY,CAChD,OAAO,KAAK,QAAQ,WAAW,CACnC,EACAA,EAAO,UAAU,KAAO,SAAUlE,EAAQjgC,EAASgc,EAAS,CACnDhc,IACDA,EAAU,CAAC,GACX,OAAOigC,GAAU,UAAYA,aAAkB,OAC/CjgC,EAAQ,OAASigC,EACZ,OAAOA,GAAU,UACtBp8B,EAAI,MAAM7D,EAASigC,CAAM,EAC7B,IAAI34B,EAAQ,KAAK,UAAU,SAAS,EAChCtH,EAAQ,QAAU,OAClBigC,EAAS,KAAK,QAAQ,aAAa34B,CAAK,GACjC,KAAK,QAAQ,SAAS,OACxB24B,IACD34B,EAAQ,KAAK,QAAQ,aAAaA,EAAM,MAAM,IAAKA,EAAM,MAAM,MAAM,EACrE24B,EAAS,KAAK,QAAQ,aAAa34B,CAAK,GAE5C,KAAK,QAAQ,IAAI,CAAE,OAAQ24B,CAAO,CAAC,GAEvC,KAAK,QAAQ,IAAIjgC,CAAO,EACnBA,EAAQ,OACT,KAAK,QAAQ,IAAI,CAAE,MAAOsH,CAAM,CAAC,EACrC,IAAI0hC,EAAW,KAAK,QAAQ,KAAK,KAAK,OAAO,EAC7C,GAAIhpC,EAAQ,cACR,OAAOgpC,EACX,GAAIA,EACA,YAAK,YAAYA,EAAUhtB,CAAO,EAC3BgtB,EAEPhpC,EAAQ,UACRsH,EAAM,MAAQA,EAAM,IAEpBA,EAAM,IAAMA,EAAM,MACtB,KAAK,UAAU,SAASA,CAAK,CACjC,EACA68B,EAAO,UAAU,SAAW,SAAUnkC,EAASgc,EAAS,CACpD,KAAK,KAAK,CAAE,YAAa,GAAM,UAAW,EAAM,EAAGhc,EAASgc,CAAO,CACvE,EACAmoB,EAAO,UAAU,aAAe,SAAUnkC,EAASgc,EAAS,CACxD,KAAK,KAAKhc,EAAS,CAAE,YAAa,GAAM,UAAW,EAAK,EAAGgc,CAAO,CACtE,EACAmoB,EAAO,UAAU,YAAc,SAAU78B,EAAO0U,EAAS,CACrD,KAAK,QAAQ,OAAO1U,CAAK,EACzB,KAAK,UAAU,kBAAkBA,CAAK,EACtC,IAAIq0B,EAAY,KAAK,SAAS,UAC9B,KAAK,SAAS,wBAAwBr0B,EAAM,MAAOA,EAAM,IAAK,EAAG,EAC7D0U,IAAY,IACZ,KAAK,SAAS,iBAAiB2f,CAAS,CAChD,EACAwI,EAAO,UAAU,KAAO,UAAY,CAChC,KAAK,QAAQ,eAAe,EAAE,KAAK,KAAK,OAAO,EAC/C,KAAK,SAAS,qBAAqB,KAAM,EAAG,CAChD,EACAA,EAAO,UAAU,KAAO,UAAY,CAChC,KAAK,QAAQ,eAAe,EAAE,KAAK,KAAK,OAAO,EAC/C,KAAK,SAAS,qBAAqB,KAAM,EAAG,CAChD,EACAA,EAAO,UAAU,QAAU,UAAY,CACnC,KAAK,UAAY,GACb,KAAK,aACL,KAAK,WAAW,QAAQ,SAAUpkC,EAAI,CAClCA,EAAG,QAAQ,CACf,CAAC,EACD,KAAK,WAAa,CAAC,GAEnB,KAAK,eACL,KAAK,cAAc,QAAQ,EAC/B,KAAK,SAAS,QAAQ,EACtB,KAAK,QAAQ,UAAW,IAAI,EACxB,KAAK,SACL,KAAK,QAAQ,QAAQ,EACrB,KAAK,kBACL,KAAK,iBAAiB,OAAO,EACjC,KAAK,mBAAmB,CAC5B,EACAokC,EAAO,UAAU,4BAA8B,SAAUnI,EAAQ,CAC7D,GAAKA,EAEL,KAAIz6B,EACAgW,EAAO,KACP0xB,EAAe,GACd,KAAK,gBACN,KAAK,cAAgB,SAAS,cAAc,KAAK,GACrD,IAAIC,EAAe,KAAK,cACxBA,EAAa,MAAM,QAAU,oBAC7B,KAAK,UAAU,aAAaA,EAAc,KAAK,UAAU,UAAU,EACnE,IAAIC,EAAoB,KAAK,GAAG,kBAAmB,UAAY,CAC3DF,EAAe,EACnB,CAAC,EACGG,EAAiB,KAAK,SAAS,GAAG,eAAgB,UAAY,CAC1DH,IACA1nC,EAAOgW,EAAK,SAAS,UAAU,sBAAsB,EAC7D,CAAC,EACG8xB,EAAgB,KAAK,SAAS,GAAG,cAAe,UAAY,CAC5D,GAAIJ,GAAgB1nC,IAASgW,EAAK,UAAU,GACrCA,EAAK,WAAaA,EAAK,UAAU,UAAU,GAAI,CAClD,IAAIvD,EAAWuD,EAAK,SAChB9H,EAAMuE,EAAS,aAAa,UAC5BhO,EAASgO,EAAS,YAClBzF,EAAMkB,EAAI,IAAMzJ,EAAO,OACvByJ,EAAI,KAAO,GAAKlB,EAAMhN,EAAK,IAAM,EACjC0nC,EAAe,GAEVx5B,EAAI,IAAMzJ,EAAO,QACtByJ,EAAI,IAAMlO,EAAK,IAAMyE,EAAO,WAAa,OAAO,YAChDijC,EAAe,GAGfA,EAAe,KAEfA,GAAgB,OAChBC,EAAa,MAAM,IAAM36B,EAAM,KAC/B26B,EAAa,MAAM,KAAOz5B,EAAI,KAAO,KACrCy5B,EAAa,MAAM,OAASljC,EAAO,WAAa,KAChDkjC,EAAa,eAAeD,CAAY,GAE5CA,EAAe1nC,EAAO,IAC1B,CACJ,CAAC,EACD,KAAK,4BAA8B,SAAUy6B,EAAQ,CAC7CA,IAEJ,OAAO,KAAK,4BACZ,KAAK,IAAI,kBAAmBmN,CAAiB,EAC7C,KAAK,SAAS,IAAI,cAAeE,CAAa,EAC9C,KAAK,SAAS,IAAI,eAAgBD,CAAc,EACpD,EACJ,EACAjF,EAAO,UAAU,kBAAoB,UAAY,CAC7C,IAAI9iC,EAAQ,KAAK,cAAgB,MAC7BioC,EAAc,KAAK,SAAS,aAC3BA,IAELA,EAAY,kBAAkB,SAAS,KAAKjoC,CAAK,CAAC,EAClDioC,EAAY,WAAa,CAAC,KAAK,WAAajoC,GAAS,OACrDa,EAAI,YAAYonC,EAAY,QAAS,mBAAoB,OAAO,KAAKjoC,CAAK,CAAC,EAC/E,EACA8iC,EAAO,UAAU,OAAS,SAAU//B,EAASpE,EAASrF,EAAU,CAC5D,IAAI2U,EAAS,KACbtJ,EAAO,WAAW,iBAAkB,SAAU7L,EAAQ,CAClDA,EAAO,OAAOmV,EAAQlL,EAASpE,EAASrF,CAAQ,CACpD,CAAC,CACL,EACA,OAAO,eAAewpC,EAAO,UAAW,eAAgB,CACpD,IAAK,UAAY,CACb,OAAO,KAAK,gBAAkB,KAAK,cAAgB,IAAI3wB,EAAa,KAAK,SAAS,EACtF,EACA,IAAK,SAAUnW,EAAO,CACd,KAAK,eACL,KAAK,cAAc,QAAQ,EAC/B,KAAK,cAAgBA,CACzB,EACA,WAAY,GACZ,aAAc,EAClB,CAAC,EACM8mC,CACX,EAAE,EACFA,EAAO,KAAO,EACdA,EAAO,UAAU,MAAQ,KACzBA,EAAO,UAAU,OAAS,CAAC,EAC3BA,EAAO,UAAU,mBAAqB,CAAC,YAAa,MAAO,cAAc,EACzEA,EAAO,UAAU,iBAAmB,CAChC,CAAC,QAAS,MAAM,EAChB,CAAC,OAAQ,OAAO,EAChB,CAAC,MAAO,IAAI,EACZ,CAAC,QAAS,QAAQ,EAClB,CAAC,MAAO,QAAQ,EAChB,CAAC,QAAS,MAAM,EAChB,CAAC,KAAM,KAAK,EACZ,CAAC,IAAK,GAAG,EACT,CAAC,MAAO,KAAK,EACb,CAAC,MAAO,KAAK,EACb,CAAC,aAAc,UAAU,EACzB,CAAC,OAAQ,MAAM,EACf,CAAC,MAAO,QAAQ,EAChB,CAAC,KAAM,MAAM,EACb,CAAC,SAAU,OAAO,EAClB,CAAC,OAAQ,KAAK,EACd,CAAC,KAAM,KAAK,EACZ,CAAC,SAAU,SAAS,EACpB,CAAC,OAAQ,UAAU,EACnB,CAAC,WAAY,UAAU,EACvB,CAAC,SAAU,QAAQ,EACnB,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,IAAI,CACf,EACAtgC,EAAI,UAAUsgC,EAAO,UAAWrhC,CAAY,EAC5CkD,EAAO,cAAcm+B,EAAO,UAAW,SAAU,CAC7C,eAAgB,CACZ,IAAK,SAAU9iC,EAAO,CAClB,KAAK,kBAAkB,EACvB,KAAK,QAAQ,uBAAwB,CAAE,KAAMA,CAAM,CAAC,CACxD,EACA,aAAc,MAClB,EACA,oBAAqB,CACjB,IAAK,UAAY,CAAE,KAAK,2BAA2B,CAAG,EACtD,aAAc,EAClB,EACA,sBAAuB,CACnB,IAAK,SAAUykC,EAAiB,CAAE,KAAK,mBAAmB,CAAG,EAC7D,aAAc,EAClB,EACA,SAAU,CACN,IAAK,SAA8Bn3B,EAAU,CACzC,IAAItC,EAAQ,KAEZ,GADA,KAAK,UAAU,YAAYsC,CAAQ,EAC/B,MAAK,UAET,MAAK,kBAAkB,EAClB,KAAK,oBACN,KAAK,kBAAoB,SAAUzL,EAAG,CAClC,IAAIqmC,EAAa,GACjB,GAAIrmC,GAAKA,EAAE,MAAQ,WAMf,GALIA,GAAKA,EAAE,KAAO,CAACA,EAAE,SAAW,CAACA,EAAE,UAC3BA,EAAE,KAAO,KACTA,EAAE,eAAe,EACrBqmC,EAAarmC,EAAE,IAAI,QAAU,GAE7B,CAACqmC,EACD,YAECrmC,GAAKA,EAAE,OAAS,SACrBqmC,EAAa,IAEjB,GAAIA,EAAY,CACZ,IAAIz1B,EAAU5R,EAAI,cAAc,KAAK,EACrC4R,EAAQ,YAAcvI,EAAI,iCAAkC,qBAAqB,EAC5Ec,EAAM,aAAa,QACpBA,EAAM,aAAa,aAAaA,EAAOA,EAAM,kBAAkB,EAAGyH,CAAO,CAEjF,MACSzH,EAAM,cAAgBA,EAAM,aAAa,QAC9CA,EAAM,aAAa,KAAK,CAEhC,GAEJ,IAAIm9B,EAAW,KAAK,UAAU,WAAW,EACrC76B,GACArD,EAAM,YAAYk+B,EAAU,UAAW,KAAK,kBAAmB,IAAI,EACnE,KAAK,SAAS,GAAG,OAAQ,KAAK,iBAAiB,EAC/C,KAAK,SAAS,GAAG,qBAAsB,KAAK,iBAAiB,IAG7Dl+B,EAAM,eAAek+B,EAAU,UAAW,KAAK,iBAAiB,EAChE,KAAK,SAAS,IAAI,OAAQ,KAAK,iBAAiB,EAChD,KAAK,SAAS,IAAI,qBAAsB,KAAK,iBAAiB,GAEtE,EACA,aAAc,EAClB,EACA,uBAAwB,CACpB,IAAK,SAAUnsC,EAAO,CAClB,KAAK,UAAU,0BAA0BA,CAAK,CAClD,EACA,aAAc,EAClB,EACA,YAAa,CACT,IAAK,SAAUrB,EAAK,CAAE,KAAK,kBAAkB,CAAG,EAChD,OAAQ,CAAC,MAAO,OAAQ,SAAU,MAAM,EACxC,aAAc,KAClB,EACA,gBAAiB,CACb,OAAQ,CAAC,GAAO,GAAM,QAAQ,EAC9B,aAAc,EAClB,EACA,kBAAmB,CAAE,aAAc,EAAK,EACxC,sBAAuB,CAAE,aAAc,EAAK,EAC5C,iBAAkB,CAAE,aAAc,EAAK,EACvC,yBAA0B,CACtB,IAAK,SAAUA,EAAK,CAAE,KAAK,4BAA4BA,CAAG,CAAG,CACjE,EACA,gBAAiB,CACb,IAAK,SAAUA,EAAK,CAAE,KAAK,mBAAmBA,CAAG,CAAG,EACpD,IAAK,UAAY,CAAE,OAAO,KAAK,aAAe,EAC9C,WAAY,EAChB,EACA,MAAO,CACH,IAAK,SAAUA,EAAK,CAAE,KAAK,QAAQ,SAASA,CAAG,CAAG,EAClD,IAAK,UAAY,CAAE,OAAO,KAAK,SAAS,CAAG,EAC3C,WAAY,GACZ,OAAQ,EACZ,EACA,QAAS,CACL,IAAK,SAAUA,EAAK,CAAE,KAAK,WAAWA,CAAG,CAAG,EAC5C,IAAK,UAAY,CAAE,OAAO,KAAK,OAAS,EACxC,WAAY,GACZ,OAAQ,EACZ,EACA,gBAAiB,CACb,IAAK,SAAUmqC,EAAM,CACjB,KAAK,SAAS,aAAa,mBAAmBA,CAAI,EAClD,KAAK,SAAS,MAAM,SAAS,KAAK,SAAS,aAAa,EACpDA,GAAQ,KAAK,qBACbsD,EAAuB,OAAO,IAAI,EAElCA,EAAuB,OAAO,IAAI,CAC1C,EACA,aAAc,EAClB,EACA,oBAAqB,CACjB,IAAK,SAAUpsC,EAAO,CACd,KAAK,kBAAoBA,EACzBosC,EAAuB,OAAO,IAAI,EAElCA,EAAuB,OAAO,IAAI,CAC1C,CACJ,EACA,YAAa,CACT,IAAK,SAAUrlC,EAAS,CACf,KAAK,qBACN,KAAK,mBAAqB,UAAY,CAClC,IAAIslC,EAAW,KAAK,UAAY,KAAK,SAAS,cAC1C,KAAK,QAAQ,UAAU,EAAI,GAAK,KAAK,QAAQ,QAAQ,CAAC,EAAE,OAAS,GACrE,GAAIA,GAAY,KAAK,SAAS,gBAC1B,KAAK,SAAS,IAAI,cAAe,KAAK,kBAAkB,EACxDxnC,EAAI,eAAe,KAAK,UAAW,oBAAoB,EACvD,KAAK,SAAS,gBAAgB,OAAO,EACrC,KAAK,SAAS,gBAAkB,aAE3B,CAACwnC,GAAY,CAAC,KAAK,SAAS,gBAAiB,CAClD,KAAK,SAAS,GAAG,cAAe,KAAK,kBAAkB,EACvDxnC,EAAI,YAAY,KAAK,UAAW,oBAAoB,EACpD,IAAInC,EAAKmC,EAAI,cAAc,KAAK,EAChCnC,EAAG,UAAY,kBACfA,EAAG,YAAc,KAAK,cAAgB,GACtC,KAAK,SAAS,gBAAkBA,EAChC,KAAK,SAAS,QAAQ,YAAY,KAAK,SAAS,eAAe,CACnE,KACS,CAAC2pC,GAAY,KAAK,SAAS,kBAChC,KAAK,SAAS,gBAAgB,YAAc,KAAK,cAAgB,GAEzE,EAAE,KAAK,IAAI,EACX,KAAK,GAAG,QAAS,KAAK,kBAAkB,GAE5C,KAAK,mBAAmB,CAC5B,CACJ,EACA,4BAA6B,CACzB,IAAK,SAAUrsC,EAAO,CAClB,IAAIssC,EAAc,CACd,KAAM,gBACN,YAAa,wEACb,QAAS,MACT,KAAM,SAAUr6B,EAAQ,CACpBA,EAAO,KAAK,EACZA,EAAO,SAAS,SAAS,MAAM,CACnC,EACA,SAAU,EACd,EACIs6B,EAAoB,SAAU1mC,EAAG,CACjC,GAAIA,EAAE,QAAU,KAAK,SAAS,UAAYA,EAAE,UAAYwF,EAAK,MAAU,CACnExF,EAAE,eAAe,EACjB,IAAIqE,EAAM,KAAK,kBAAkB,EAAE,IAC9B,KAAK,aAAaA,CAAG,GACtB,KAAK,aAAaA,EAAK,GAAM,EAAI,EACrC,KAAK,MAAM,CACf,CACJ,EACI08B,EACA5mC,GACA,KAAK,SAAS,4BAA8B,GAC5C,KAAK,SAAS,uBAAyB,qBACvC,KAAK,UAAU,WAAW,EAAE,aAAa,WAAY,EAAE,EACvD,KAAK,UAAU,sBAAsBkC,EAAU,MAAQ,EAAI,CAAC,EAC5D,KAAK,SAAS,SAAS,aAAa,WAAY,CAAC,EACjD,KAAK,SAAS,SAAS,aAAa,OAAQ,OAAO,EACnD,KAAK,SAAS,SAAS,aAAa,uBAAwBgM,EAAI,uCAAwC,QAAQ,CAAC,EACjH,KAAK,SAAS,SAAS,UAAU,IAAI,KAAK,SAAS,sBAAsB,EACzE,KAAK,SAAS,SAAS,aAAa,aAAcA,EAAI,6BAA8B,oEAAoE,CAAC,EACzJ,KAAK,SAAS,SAAS,iBAAiB,QAASq+B,EAAkB,KAAK,IAAI,CAAC,EAC7E,KAAK,SAAS,WAAWD,CAAW,EACpC,KAAK,SAAS,QAAQ,aAAa,WAAY,CAAC,EAChD,KAAK,SAAS,QAAQ,aAAa,cAAe,EAAK,EACvD,KAAK,SAAS,QAAQ,aAAa,OAAQ,OAAO,EAClD,KAAK,SAAS,QAAQ,aAAa,uBAAwBp+B,EAAI,qCAAsC,eAAe,CAAC,EACrH,KAAK,SAAS,QAAQ,aAAa,aAAcA,EAAI,2BAA4B,6FAA6F,CAAC,EAC/K,KAAK,SAAS,QAAQ,UAAU,IAAI,KAAK,SAAS,sBAAsB,EACxE,KAAK,SAAS,QAAQ,aAAa,cAAe,EAAI,EACjD04B,IACDA,EAAwB,IAAId,EAAsB,IAAI,GAC1Dc,EAAsB,YAAY,EAClC,KAAK,UAAU,eAAe,CAC1B,SAAU,EACd,CAAC,IAGD,KAAK,SAAS,4BAA8B,GAC5C,KAAK,UAAU,WAAW,EAAE,aAAa,WAAY,CAAC,EACtD,KAAK,UAAU,sBAAsB,CAAC,EACtC,KAAK,SAAS,SAAS,aAAa,WAAY,EAAE,EAClD,KAAK,SAAS,SAAS,gBAAgB,MAAM,EAC7C,KAAK,SAAS,SAAS,gBAAgB,sBAAsB,EAC7D,KAAK,SAAS,SAAS,UAAU,OAAO,KAAK,SAAS,sBAAsB,EAC5E,KAAK,SAAS,SAAS,gBAAgB,YAAY,EACnD,KAAK,SAAS,SAAS,oBAAoB,QAAS2F,EAAkB,KAAK,IAAI,CAAC,EAChF,KAAK,SAAS,cAAcD,CAAW,EACvC,KAAK,SAAS,QAAQ,gBAAgB,aAAa,EACnD,KAAK,SAAS,QAAQ,aAAa,WAAY,EAAE,EACjD,KAAK,SAAS,QAAQ,aAAa,cAAe,EAAI,EACtD,KAAK,SAAS,QAAQ,gBAAgB,MAAM,EAC5C,KAAK,SAAS,QAAQ,gBAAgB,sBAAsB,EAC5D,KAAK,SAAS,QAAQ,gBAAgB,YAAY,EAClD,KAAK,SAAS,QAAQ,UAAU,OAAO,KAAK,SAAS,sBAAsB,EACvE1F,GACAA,EAAsB,eAAe,EAEjD,EACA,aAAc,EAClB,EACA,mBAAoB,CAChB,IAAK,SAAUjoC,EAAK,CAAE,KAAK,oBAAsBA,CAAK,EACtD,aAAc,EAClB,EACA,iBAAkB,CACd,IAAK,SAAUA,EAAK,CAAE,KAAK,kBAAoBA,CAAK,EACpD,aAAc,EAClB,EACA,gBAAiB,WACjB,wBAAyB,WACzB,wBAAyB,WACzB,oBAAqB,WACrB,eAAgB,WAChB,eAAgB,WAChB,gBAAiB,WACjB,kBAAmB,WACnB,YAAa,WACb,gBAAiB,WACjB,gBAAiB,WACjB,oBAAqB,WACrB,sBAAuB,WACvB,WAAY,WACZ,SAAU,WACV,WAAY,WACZ,SAAU,WACV,SAAU,WACV,cAAe,WACf,iBAAkB,WAClB,MAAO,WACP,iBAAkB,WAClB,eAAgB,WAChB,kBAAmB,WACnB,kBAAmB,WACnB,kBAAmB,WACnB,sBAAuB,WACvB,YAAa,gBACb,UAAW,gBACX,YAAa,gBACb,aAAc,gBACd,gBAAiB,UACjB,UAAW,UACX,YAAa,UACb,UAAW,UACX,YAAa,UACb,uBAAwB,UACxB,QAAS,UACT,KAAM,UACN,iBAAkB,UAClB,UAAW,UACX,KAAM,SACV,CAAC,EACD,IAAIytC,EAAyB,CACzB,QAAS,SAAkC5hC,EAA4BN,EAAK,CACxE,OAAQ,KAAK,IAAIM,EAAQ,UAAU,KAAK,IAAMN,CAAG,GAAMA,EAAM,GAAKA,EAAM,EAAI,OAAS,KAAQ,EACjG,EACA,SAAU,SAAUM,EAA4BgiC,EAAgB7jC,EAAQ,CACpE,OAAO,KAAK,IAAI6jC,EAAe,SAAS,EAAE,QAAS7jC,EAAO,QAAU,GAAG,SAAS,EAAE,OAAQ,CAAC,EAAIA,EAAO,cAC1G,EACA,OAAQ,SAAU9C,EAAsBoM,EAAQ,CAC5CA,EAAO,SAAS,MAAM,SAASA,EAAO,SAAS,aAAa,CAChE,EACA,OAAQ,SAA6BA,EAAQ,CACzCA,EAAO,SAAS,aAAa,UAAY,KACzCA,EAAO,GAAG,kBAAmB,KAAK,MAAM,EACxC,KAAK,OAAO,KAAMA,CAAM,CAC5B,EACA,OAAQ,SAA6BA,EAAQ,CACrCA,EAAO,SAAS,aAAa,WAAa,OAC1CA,EAAO,SAAS,aAAa,UAAY,MAC7CA,EAAO,IAAI,kBAAmB,KAAK,MAAM,EACzC,KAAK,OAAO,KAAMA,CAAM,CAC5B,CACJ,EACApV,EAAQ,OAASiqC,CAEjB,CAAC,EAED,IAAI,OAAO,kBAAkB,CAAC,UAAU,UAAU,SAAS,aAAa,EAAG,SAASnpC,EAASd,EAASC,EAAO,CAAC,aAC9G,IAAI+H,EAAMlH,EAAQ,YAAY,EAC1B8uC,EAAuB,UAAY,CACnC,SAASA,EAAMzpC,EAAS0pC,EAAc,CAClC,KAAK,QAAU1pC,EACf,KAAK,aAAe0pC,GAAgB,IACpC,KAAK,QAAQ,MAAM,OAAU,KAAK,aAAe,EAAK,KACtD,KAAK,MAAQ,CAAC,EACd,KAAK,UAAY,CAAC,EAClB,KAAK,mBAAqB,CAC9B,CACA,OAAAD,EAAM,UAAU,cAAgB,SAAU9jC,EAAQ,CAC9C9D,EAAI,UAAU,KAAK,QAAS,EAAG,EAAG8D,EAAO,eAAiBA,EAAO,WAAc,KAAK,cAAgBA,EAAO,OAAS,KAAK,kBAAkB,CAC/I,EACA8jC,EAAM,UAAU,YAAc,SAAUE,EAAWC,EAAW,CAC1D,OAAQ,KAAK,MAAOD,EAAU,eAAiBA,EAAU,WAAc,KAAK,YAAY,IACpF,KAAK,MAAOC,EAAU,eAAiBA,EAAU,WAAc,KAAK,YAAY,CACxF,EACAH,EAAM,UAAU,eAAiB,SAAUviC,EAAKvB,EAAQ6B,EAAS,CAC7D,IAAIqiC,EAAYlkC,EAAO,eAAiBA,EAAO,WAC3CmkC,EAAa,KAAK,MAAMD,EAAY,KAAK,YAAY,EACrDE,EAAUviC,EAAQ,oBAAoBN,EAAK,CAAC,EAAIvB,EAAO,WAC3D,OAAOokC,EAAWD,EAAa,KAAK,YACxC,EACAL,EAAM,UAAU,kBAAoB,SAAUviC,EAAKvB,EAAQ6B,EAAS,CAChE,OAAO7B,EAAO,WAAa6B,EAAQ,gBAAgBN,CAAG,CAC1D,EACAuiC,EAAM,UAAU,UAAY,UAAY,CACpC,OAAO,KAAK,MAAM,MACtB,EACAA,EAAM,UAAU,IAAM,SAAUntC,EAAO,CACnC,OAAO,KAAK,MAAMA,CAAK,CAC3B,EACAmtC,EAAM,UAAU,MAAQ,UAAY,CAChC,KAAK,WAAW,KAAK,MAAM,MAAM,CAAC,CACtC,EACAA,EAAM,UAAU,IAAM,UAAY,CAC9B,KAAK,WAAW,KAAK,MAAM,IAAI,CAAC,CACpC,EACAA,EAAM,UAAU,KAAO,SAAU7zB,EAAM,CACnC,GAAI,MAAM,QAAQA,CAAI,EAAG,CACrB,KAAK,MAAM,KAAK,MAAM,KAAK,MAAOA,CAAI,EAEtC,QADIo0B,EAAWnoC,EAAI,eAAe,KAAK,OAAO,EACrChE,EAAI,EAAGA,EAAI+X,EAAK,OAAQ/X,IAC7BmsC,EAAS,YAAYp0B,EAAK/X,CAAC,EAAE,OAAO,EAExC,KAAK,QAAQ,YAAYmsC,CAAQ,CACrC,MAEI,KAAK,MAAM,KAAKp0B,CAAI,EACpB,KAAK,QAAQ,YAAYA,EAAK,OAAO,CAE7C,EACA6zB,EAAM,UAAU,QAAU,SAAU7zB,EAAM,CACtC,GAAI,MAAM,QAAQA,CAAI,EAAG,CACrB,KAAK,MAAM,QAAQ,MAAM,KAAK,MAAOA,CAAI,EAEzC,QADIo0B,EAAWnoC,EAAI,eAAe,KAAK,OAAO,EACrChE,EAAI,EAAGA,EAAI+X,EAAK,OAAQ/X,IAC7BmsC,EAAS,YAAYp0B,EAAK/X,CAAC,EAAE,OAAO,EAEpC,KAAK,QAAQ,WACb,KAAK,QAAQ,aAAamsC,EAAU,KAAK,QAAQ,UAAU,EAE3D,KAAK,QAAQ,YAAYA,CAAQ,CACzC,MAEI,KAAK,MAAM,QAAQp0B,CAAI,EACvB,KAAK,QAAQ,sBAAsB,aAAcA,EAAK,OAAO,CAErE,EACA6zB,EAAM,UAAU,KAAO,UAAY,CAC/B,OAAI,KAAK,MAAM,OACJ,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,EAEhC,IACf,EACAA,EAAM,UAAU,WAAa,SAAU7zB,EAAM,CACpCA,IAELA,EAAK,QAAQ,OAAO,EACpB,KAAK,UAAU,KAAKA,CAAI,EAC5B,EACA6zB,EAAM,UAAU,WAAa,SAAUviC,EAAKvB,EAAQ6B,EAASyiC,EAAa,CACtE,IAAIr0B,EAAO,KAAK,UAAU,IAAI,EAC9B,GAAI,CAACA,EAAM,CACP,IAAI5V,EAAU6B,EAAI,cAAc,KAAK,EACjCooC,GACAA,EAAYjqC,CAAO,EACvB,KAAK,QAAQ,YAAYA,CAAO,EAChC4V,EAAO,CACH,QAAS5V,EACT,KAAM,GACN,IAAKkH,CACT,CACJ,CACA,OAAA0O,EAAK,IAAM1O,EACJ0O,CACX,EACO6zB,CACX,EAAE,EACF5vC,EAAQ,MAAQ4vC,CAEhB,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,wBAAwB,kBAAkB,YAAY,EAAG,SAAS9uC,EAASd,EAASC,EAAO,CAAC,aACnM,IAAI+H,EAAMlH,EAAQ,YAAY,EAC1B6I,EAAM7I,EAAQ,YAAY,EAC1B8J,EAAO9J,EAAQ,aAAa,EAC5B8H,EAAe9H,EAAQ,sBAAsB,EAAE,aAC/C8uC,EAAQ9uC,EAAQ,SAAS,EAAE,MAC3BuQ,EAAMvQ,EAAQ,WAAW,EAAE,IAC3BuvC,EAAwB,UAAY,CACpC,SAASA,EAAOC,EAAU,CACtB,KAAK,kBAAoB,KACzB,KAAK,QAAUtoC,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,6BACzBsoC,EAAS,YAAY,KAAK,OAAO,EACjC,KAAK,mBAAmB,KAAK,gBAAgB,EAC7C,KAAK,YAAc,EACnB,KAAK,aAAe,CAAC,EACrB,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,OAAS,IAAIV,EAAM,KAAK,OAAO,EACpC,KAAK,OAAO,mBAAqB,CACrC,CACA,OAAAS,EAAO,UAAU,WAAa,SAAU1iC,EAAS,CACzC,KAAK,SACL,KAAK,QAAQ,IAAI,SAAU,KAAK,kBAAkB,EACtD,KAAK,QAAUA,EACXA,GACAA,EAAQ,GAAG,SAAU,KAAK,kBAAkB,CACpD,EACA0iC,EAAO,UAAU,oBAAsB,SAAUhjC,EAAK7G,EAAW,CACzD,OAAO,SACP,QAAQ,MAAQ,QAAQ,KAAK,4CAA4C,EAC7E,KAAK,QAAQ,oBAAoB6G,EAAK7G,CAAS,CACnD,EACA6pC,EAAO,UAAU,uBAAyB,SAAUhjC,EAAK7G,EAAW,CAC5D,OAAO,SACP,QAAQ,MAAQ,QAAQ,KAAK,+CAA+C,EAChF,KAAK,QAAQ,uBAAuB6G,EAAK7G,CAAS,CACtD,EACA6pC,EAAO,UAAU,eAAiB,SAAUr0B,EAAa,CACrD,KAAK,aAAe,CAAC,EACrB,QAAS,EAAI,EAAG,EAAIA,EAAY,OAAQ,IAAK,CACzC,IAAInB,EAAamB,EAAY,CAAC,EAC1B3O,EAAMwN,EAAW,IACjB01B,EAAU,KAAK,aAAaljC,CAAG,EAC9BkjC,IACDA,EAAU,KAAK,aAAaljC,CAAG,EAAI,CAAE,KAAM,CAAC,EAAG,KAAM,CAAC,EAAG,YAAa,CAAC,CAAE,GAC7E,IAAImjC,EAAW31B,EAAW,KACtB41B,EAAkB51B,EAAW,KAC7B61B,EAAW71B,EAAW,KAC1B21B,EAAWA,EAAW5lC,EAAK,WAAW4lC,CAAQ,EAAI31B,EAAW,MAAQ,GACrE41B,EAAkBA,GAAoC51B,EAAW,MAAQ,GACrE01B,EAAQ,KAAK,QAAQC,CAAQ,IAAM,KACnCD,EAAQ,KAAK,KAAKC,CAAQ,EAC1BD,EAAQ,KAAK,KAAKG,CAAQ,EAC1BH,EAAQ,YAAY,KAAKE,CAAe,GAE5C,IAAIjqC,EAAYqU,EAAW,UACvBrU,EACA+pC,EAAQ,UAAY/pC,EAEfkqC,IAAa,QAClBH,EAAQ,UAAY,aAEfG,IAAa,YAAc,CAAC,gBAAgB,KAAKH,EAAQ,SAAS,EACvEA,EAAQ,UAAY,gBAEfG,IAAa,WAAa,CAAC,2BAA2B,KAAKH,EAAQ,SAAS,EACjFA,EAAQ,UAAY,eAEfG,IAAa,QAAU,CAACH,EAAQ,UACrCA,EAAQ,UAAY,YAEfG,IAAa,QAAU,CAACH,EAAQ,YACrCA,EAAQ,UAAY,YAE5B,CACJ,EACAF,EAAO,UAAU,mBAAqB,SAAUloB,EAAO,CACnD,GAAK,KAAK,aAAa,OAEvB,KAAI1a,EAAW0a,EAAM,MAAM,IACvBplB,EAAMolB,EAAM,IAAI,IAAM1a,EAC1B,GAAI1K,IAAQ,EAEP,GAAIolB,EAAM,QAAU,SACrB,KAAK,aAAa,OAAO1a,EAAU1K,EAAM,EAAG,IAAI,MAE/C,CACD,IAAI2rB,EAAO,IAAI,MAAM3rB,EAAM,CAAC,EAC5B2rB,EAAK,QAAQjhB,EAAU,CAAC,EACxB,KAAK,aAAa,OAAO,MAAM,KAAK,aAAcihB,CAAI,CAC1D,EACJ,EACA2hB,EAAO,UAAU,OAAS,SAAUvkC,EAAQ,CACxC,KAAK,OAASA,EACd,IAAI6B,EAAU,KAAK,QACfF,EAAW3B,EAAO,SAClB4B,EAAU,KAAK,IAAI5B,EAAO,QAAUA,EAAO,aAC/C6B,EAAQ,UAAU,EAAI,CAAC,EACvB,KAAK,WAAaD,EAClB,KAAK,OAAS5B,EACd,KAAK,OAAO,cAAcA,CAAM,EAChC,KAAK,iBAAiB,EAMtB,QALIgP,EAAOnN,EAAQ,gBAAgBF,CAAQ,EACvCo0B,EAAY/mB,EAAOA,EAAK,MAAM,IAAM,IACpCiB,EAAO,KACPtZ,EAAQ,GACR4K,EAAMI,IACG,CAMT,GALIJ,EAAMw0B,IACNx0B,EAAMyN,EAAK,IAAI,IAAM,EACrBA,EAAOnN,EAAQ,gBAAgBN,EAAKyN,CAAI,EACxC+mB,EAAY/mB,EAAOA,EAAK,MAAM,IAAM,KAEpCzN,EAAMK,EAAS,CACf,KAAO,KAAK,OAAO,UAAU,EAAIjL,EAAQ,GACrC,KAAK,OAAO,IAAI,EACpB,KACJ,CACAsZ,EAAO,KAAK,OAAO,IAAI,EAAEtZ,CAAK,EAC1BsZ,EACAA,EAAK,IAAM1O,GAGX0O,EAAO,KAAK,OAAO,WAAW1O,EAAKvB,EAAQ,KAAK,QAAS6kC,CAAY,EACrE,KAAK,OAAO,KAAK50B,CAAI,GAEzB,KAAK,YAAYA,EAAMjQ,EAAQgP,EAAMzN,CAAG,EACxCA,GACJ,CACA,KAAK,QAAQ,aAAa,EAC1B,KAAK,mBAAmBvB,CAAM,EAC1B,KAAK,mBAAqB,KAAK,sBAC/B,KAAK,oBAAoB,CACjC,EACAukC,EAAO,UAAU,mBAAqB,SAAUvkC,EAAQ,CACpD,IAAI6B,EAAU,KAAK,QACfijC,EAAiBjjC,EAAQ,gBAAkB,KAAK,UAChDkjC,EAAkBljC,EAAQ,iBAC1BmjC,EAAe,KAAK,OAAO,KAAK,EAAI,KAAK,OAAO,KAAK,EAAE,KAAO,IAC9D,KAAK,aAAenjC,EAAQ,gBAC5BmjC,EAAenjC,EAAQ,UAAU,EAAIkjC,EAAkB,GAC3D,IAAIE,EAAcH,EACZA,EAAe,SAASjjC,EAASmjC,EAAchlC,CAAM,EACrDglC,EAAa,SAAS,EAAE,OAAShlC,EAAO,eAC1CklC,EAAU,KAAK,UAAY,KAAK,gBAAgB,EACpDD,GAAeC,EAAQ,KAAOA,EAAQ,MAClCD,IAAgB,KAAK,aAAe,CAAC,MAAMA,CAAW,IACtD,KAAK,YAAcA,EAAc,KAAK,QAAQ,WAAY,MAAM,MAC5D,KAAK,QAAQ,MAAM,MAAQ,KAAK,KAAK,KAAK,WAAW,EAAI,KAC7D,KAAK,QAAQ,oBAAqBA,CAAW,EAErD,EACAV,EAAO,UAAU,iBAAmB,UAAY,CAC5C,GAAK,KAAK,qBAEV,KAAIruC,EAAW,KAAK,QAAQ,UAAU,UAAU,EAC5C,KAAK,aAAeA,EAAS,MAEjC,KAAK,WAAaA,EAAS,KAC/B,EACAquC,EAAO,UAAU,oBAAsB,UAAY,CAG/C,GAFI,KAAK,mBACL,KAAK,oBAAoB,EACzB,EAAC,KAAK,qBAEV,KAAIhjC,EAAM,KAAK,QAAQ,UAAU,OAAO,IAExC,GADA,KAAK,WAAaA,EACd,OAAK,aAAe,KAAK,YAAY,KAAOA,GAEhD,CAAI,KAAK,cACL,KAAK,YAAY,QAAQ,UAAY,KAAK,YAAY,QAAQ,UAAU,QAAQ,0BAA2B,EAAE,GACjH,IAAI4jC,EAAQ,KAAK,OAAO,MACxB,KAAK,YAAc,KACnB,QAASjtC,EAAI,EAAGA,EAAIitC,EAAM,OAAQjtC,IAAK,CACnC,IAAI+X,EAAOk1B,EAAMjtC,CAAC,EAClB,GAAI+X,EAAK,KAAO,KAAK,WAAY,CAC7B,GAAIA,EAAK,IAAM,KAAK,WAAY,CAC5B,IAAIjB,EAAO,KAAK,QAAQ,YAAY,KAAK,UAAU,EACnD,GAAI9W,EAAI,GAAK8W,GAAQA,EAAK,MAAM,KAAOm2B,EAAMjtC,EAAI,CAAC,EAAE,IAChD+X,EAAOk1B,EAAMjtC,EAAI,CAAC,MAElB,MACR,CACA+X,EAAK,QAAQ,UAAY,0BAA4BA,EAAK,QAAQ,UAClE,KAAK,YAAcA,EACnB,KACJ,CACJ,GACJ,EACAs0B,EAAO,UAAU,oBAAsB,UAAY,CAC/C,GAAK,KAAK,QAEV,KAAI1iC,EAAU,KAAK,QACd,KAAK,oBACN,KAAK,kBAAoB3F,EAAI,cAAc,KAAK,EAChD,KAAK,kBAAkB,UAAY,oBACnC,KAAK,kBAAkB,MAAM,cAAgB,OAC7C,KAAK,QAAQ,YAAY,KAAK,iBAAiB,GAEnD,IAAIuN,EAAM5H,EAAQ,UAAU,OACxB7B,EAAS,KAAK,OACdiI,EAAQ,KAAK,OACbi8B,EAAYlkC,EAAO,eAAiBA,EAAO,WAC3CmkC,EAAa,KAAK,MAAMD,EAAYj8B,EAAM,YAAY,EACtDm8B,EAAUviC,EAAQ,oBAAoB4H,CAAG,EAAIzJ,EAAO,WACpDuI,EAAM67B,EAAWD,EAAal8B,EAAM,aACxC/L,EAAI,SAAS,KAAK,kBAAkB,MAAO,SAAU8D,EAAO,WAAa,IAAI,EAC7E9D,EAAI,SAAS,KAAK,kBAAkB,MAAO,MAAOqM,EAAM,IAAI,EAChE,EACAg8B,EAAO,UAAU,YAAc,SAAUvkC,EAAQ,CAC7C,IAAIgkC,EAAY,KAAK,OAGrB,GAFA,KAAK,OAAShkC,EACd,KAAK,iBAAiB,EAClB,KAAK,OAAO,YAAYgkC,EAAWhkC,CAAM,EACzC,OAAO,KAAK,OAAOA,CAAM,EAC7B,KAAK,OAAO,cAAcA,CAAM,EAChC,IAAI4B,EAAU,KAAK,IAAI5B,EAAO,QAAUA,EAAO,aAC/C,KAAK,QAAQ,UAAU,EAAI,CAAC,EACxBolC,EAAa,KAAK,WAEtB,GADA,KAAK,WAAaxjC,EACd,CAACoiC,GAAaoB,EAAaplC,EAAO,SAClC,OAAO,KAAK,OAAOA,CAAM,EAC7B,GAAI4B,EAAUoiC,EAAU,SACpB,OAAO,KAAK,OAAOhkC,CAAM,EAC7B,GAAIgkC,EAAU,SAAWhkC,EAAO,SAC5B,QAASuB,EAAM,KAAK,QAAQ,kBAAkByiC,EAAU,SAAUhkC,EAAO,SAAW,CAAC,EAAGuB,EAAM,EAAGA,IAC7F,KAAK,OAAO,MAAM,EAC1B,GAAI6jC,EAAaxjC,EACb,QAASL,EAAM,KAAK,QAAQ,kBAAkBK,EAAU,EAAGwjC,CAAU,EAAG7jC,EAAM,EAAGA,IAC7E,KAAK,OAAO,IAAI,EACpBvB,EAAO,SAAWgkC,EAAU,UAC5B,KAAK,OAAO,QAAQ,KAAK,aAAahkC,EAAQA,EAAO,SAAUgkC,EAAU,SAAW,CAAC,CAAC,EAEtFpiC,EAAUwjC,GACV,KAAK,OAAO,KAAK,KAAK,aAAaplC,EAAQolC,EAAa,EAAGxjC,CAAO,CAAC,EAEvE,KAAK,oBAAoB,EACzB,KAAK,QAAQ,aAAa,EAC1B,KAAK,mBAAmB5B,CAAM,CAClC,EACAukC,EAAO,UAAU,aAAe,SAAUvkC,EAAQ2B,EAAUC,EAAS,CAKjE,QAJIyiC,EAAW,CAAC,EACZ9iC,EAAMI,EACNsd,EAAW,KAAK,QAAQ,gBAAgB1d,CAAG,EAC3Cw0B,EAAY9W,EAAWA,EAAS,MAAM,IAAM,IAExC1d,EAAMw0B,IACNx0B,EAAM0d,EAAS,IAAI,IAAM,EACzBA,EAAW,KAAK,QAAQ,gBAAgB1d,EAAK0d,CAAQ,EACrD8W,EAAY9W,EAAWA,EAAS,MAAM,IAAM,KAE5C,EAAA1d,EAAMK,IAND,CAQT,IAAIqO,EAAO,KAAK,OAAO,WAAW1O,EAAKvB,EAAQ,KAAK,QAAS6kC,CAAY,EACzE,KAAK,YAAY50B,EAAMjQ,EAAQif,EAAU1d,CAAG,EAC5C8iC,EAAS,KAAKp0B,CAAI,EAClB1O,GACJ,CACA,OAAO8iC,CACX,EACAE,EAAO,UAAU,YAAc,SAAUt0B,EAAMjQ,EAAQgP,EAAMzN,EAAK,CAC9D,IAAIlH,EAAU4V,EAAK,QACfpO,EAAU,KAAK,QACfwjC,EAAWhrC,EAAQ,WAAW,CAAC,EAC/BsjC,EAAatjC,EAAQ,WAAW,CAAC,EACjCsV,EAAiBtV,EAAQ,WAAW,CAAC,EACrCmjC,EAAenjC,EAAQ,WAAW,CAAC,EACnCirC,EAAqB31B,EAAe,WACpCo1B,EAAkBljC,EAAQ,iBAC1B0jC,EAAc1jC,EAAQ,aACtB2jC,EAAc3jC,EAAQ,aACtBijC,EAAiBjjC,EAAQ,gBAAkB,KAAK,UAChD0wB,EAAc,KAAK,kBAAoB1wB,EAAQ,YAC/Ck0B,EAAY/mB,EAAOA,EAAK,MAAM,IAAM,OAAO,UAC3CsD,EAAatS,EAAO,WAAa,KACjCtF,EAAY,KAAK,mBAAqB,6BAA+B,mBACrE6U,EAAgB,KAAK,mBAAqB,eAAiB,WAC3Dk2B,GAAWX,EACTA,EAAe,QAAQjjC,EAASN,CAAG,EACnCA,EAAMwjC,GAAiB,SAAS,EAiBtC,GAhBI,KAAK,uBACDxjC,GAAO,KAAK,YAAeyN,GAAQzN,EAAM,KAAK,YAAcA,GAAOw0B,GAAa,KAAK,YAAc/mB,EAAK,IAAI,OAC5GtU,GAAa,0BACT,KAAK,aAAeuV,IAChB,KAAK,cACL,KAAK,YAAY,QAAQ,UAAY,KAAK,YAAY,QAAQ,UAAU,QAAQ,0BAA2B,EAAE,GACjH,KAAK,YAAcA,IAI3Bs1B,EAAYhkC,CAAG,IACf7G,GAAa6qC,EAAYhkC,CAAG,GAC5BikC,EAAYjkC,CAAG,IACf7G,GAAa8qC,EAAYjkC,CAAG,GAC5B,KAAK,aAAaA,CAAG,GAAKA,IAAQw0B,IAClCr7B,GAAa,KAAK,aAAa6G,CAAG,EAAE,WACpCgxB,EAAa,CACb,IAAIlX,EAAIkX,EAAYhxB,CAAG,EACnB8Z,GAAK,OACLA,EAAIkX,EAAYhxB,CAAG,EAAIM,EAAQ,cAAcN,CAAG,EACxD,CACA,GAAI8Z,EAAG,CACH,IAAIqqB,EAAY,uBAAyBrqB,EACrCsqB,EAAetqB,GAAK,SAAW9Z,GAAOw0B,GAAax0B,EAAMyN,EAAK,IAAI,IACtE,GAAI22B,EAAc,CACdD,GAAa,cAGb,QAFIE,EAAsB,GACtBC,EAAmB,GACd3tC,EAAIqJ,EAAM,EAAGrJ,GAAK8W,EAAK,IAAI,IAAK9W,IACrC,GAAK,KAAK,aAAaA,CAAC,EAExB,IAAI,KAAK,aAAaA,CAAC,EAAE,YAAc,aAAc,CACjD2tC,EAAmB,GACnBD,EAAsB,kBACtB,KACJ,CACI,KAAK,aAAa1tC,CAAC,EAAE,YAAc,iBACnC2tC,EAAmB,GACnBD,EAAsB,sBAEjB,KAAK,aAAa1tC,CAAC,EAAE,YAAc,gBACxC0tC,IAAwB,uBACxBC,EAAmB,GACnBD,EAAsB,qBAG9BlrC,GAAakrC,CACjB,MAEIF,GAAa,YACb/H,EAAW,WAAa+H,IACxB/H,EAAW,UAAY+H,GAC3BxpC,EAAI,SAASyhC,EAAW,MAAO,SAAUrrB,CAAU,EACnDpW,EAAI,SAASyhC,EAAW,MAAO,UAAW,cAAc,EACxDA,EAAW,aAAa,OAAQ,QAAQ,EACxCA,EAAW,aAAa,WAAY,IAAI,EACxC,IAAImI,EAAYjkC,EAAQ,mBAAmBN,CAAG,EAC1CukC,EACAnI,EAAW,aAAa,aAAcp4B,EAAI,uCAAwC,0CAA2C,CACzHugC,EAAU,MAAM,IAAM,EACtBA,EAAU,IAAI,IAAM,CACxB,CAAC,CAAC,EAEE92B,EACA2uB,EAAW,aAAa,aAAcp4B,EAAI,wCAAyC,0CAA2C,CAC1HyJ,EAAK,MAAM,IAAM,EACjBA,EAAK,IAAI,IAAM,CACnB,CAAC,CAAC,EAEF2uB,EAAW,aAAa,aAAcp4B,EAAI,sCAAuC,8BAA+B,CAAChE,EAAM,CAAC,CAAC,CAAC,EAE9HokC,GACAhI,EAAW,aAAa,gBAAiB,OAAO,EAChDA,EAAW,aAAa,QAASp4B,EAAI,mCAAoC,aAAa,CAAC,IAGvFo4B,EAAW,aAAa,gBAAiB,MAAM,EAC/CA,EAAW,aAAa,QAASp4B,EAAI,iCAAkC,WAAW,CAAC,EAE3F,MAEQo4B,IACAzhC,EAAI,SAASyhC,EAAW,MAAO,UAAW,MAAM,EAChDA,EAAW,aAAa,WAAY,GAAG,EACvCA,EAAW,gBAAgB,MAAM,EACjCA,EAAW,gBAAgB,YAAY,GAG/C,IAAIoI,EAAyB,KAAK,QAAQ,qBAAqBxkC,CAAG,EAOlE,GANIwkC,EACA,KAAK,iBAAiBxkC,EAAKwkC,EAAwB91B,CAAI,EAElDutB,GACL,KAAK,oBAAoBj8B,EAAK0O,CAAI,EAElC41B,GAAoB,KAAK,uBAAwB,CACjDl2B,EAAe,UAAY,wBAC3B21B,EAAmB,UAAY/1B,EAC/B+1B,EAAmB,WAAaM,EAChC1pC,EAAI,SAASopC,EAAmB,MAAO,SAAUhzB,CAAU,EAC3DpW,EAAI,SAASyT,EAAe,MAAO,UAAW,OAAO,EACrDzT,EAAI,SAASyT,EAAe,MAAO,SAAU2C,CAAU,EACvD,IAAIhK,EACJ,OAAQs9B,EAAqB,CACzB,IAAK,kBACDt9B,EAAY/C,EAAI,qCAAsC,iCAAkC,CAACkgC,CAAO,CAAC,EACjG,MACJ,IAAK,qBACDn9B,EAAY/C,EAAI,wCAAyC,4CAA6C,CAACkgC,CAAO,CAAC,EAC/G,MACJ,IAAK,oBACDn9B,EAAY/C,EAAI,uCAAwC,mCAAoC,CAACkgC,CAAO,CAAC,EACrG,KACR,CACA91B,EAAe,aAAa,aAAcrH,CAAS,EACnDqH,EAAe,aAAa,WAAY,IAAI,EAC5CA,EAAe,aAAa,OAAQ,QAAQ,CAChD,SACS,KAAK,aAAapO,CAAG,EAAG,CAC7BoO,EAAe,UAAY,wBAC3B21B,EAAmB,UAAY/1B,EAC3B,KAAK,mBACL+1B,EAAmB,WAAa,KAAK,aAAa/jC,CAAG,EAAE,UAEvDlH,EAAQ,UAAU,IAAI,KAAK,aAAakH,CAAG,EAAE,UAAU,QAAQ,IAAK,EAAE,CAAC,EAC3ErF,EAAI,SAASopC,EAAmB,MAAO,SAAUhzB,CAAU,EAC3DpW,EAAI,SAASyT,EAAe,MAAO,UAAW,OAAO,EACrDzT,EAAI,SAASyT,EAAe,MAAO,SAAU2C,CAAU,EACvD,IAAIhK,EACJ,OAAQ,KAAK,aAAa/G,CAAG,EAAE,UAAW,CACtC,IAAK,aACD+G,EAAY/C,EAAI,qCAAsC,iCAAkC,CAACkgC,CAAO,CAAC,EACjG,MACJ,IAAK,gBACDn9B,EAAY/C,EAAI,wCAAyC,4CAA6C,CAACkgC,CAAO,CAAC,EAC/G,MACJ,IAAK,eACDn9B,EAAY/C,EAAI,uCAAwC,mCAAoC,CAACkgC,CAAO,CAAC,EACrG,MACJ,IAAK,YACDn9B,EAAY/C,EAAI,oCAAqC,gCAAiC,CAACkgC,CAAO,CAAC,EAC/F,MACJ,IAAK,YACDn9B,EAAY/C,EAAI,oCAAqC,sCAAuC,CAACkgC,CAAO,CAAC,EACrG,KACR,CACA91B,EAAe,aAAa,aAAcrH,CAAS,EACnDqH,EAAe,aAAa,WAAY,IAAI,EAC5CA,EAAe,aAAa,OAAQ,QAAQ,CAChD,MAEIzT,EAAI,SAASyT,EAAe,MAAO,UAAW,MAAM,EACpDA,EAAe,gBAAgB,YAAY,EAC3CA,EAAe,gBAAgB,MAAM,EACrCA,EAAe,aAAa,WAAY,GAAG,EAE/C,OAAI81B,IAAYJ,EAAS,OACrBA,EAAS,KAAOI,GAEhBprC,EAAQ,WAAaK,IACrBL,EAAQ,UAAYK,GACxBwB,EAAI,SAAS+T,EAAK,QAAQ,MAAO,SAAU,KAAK,OAAO,kBAAkB1O,EAAKvB,EAAQ6B,CAAO,EAAI,IAAI,EACrG3F,EAAI,SAAS+T,EAAK,QAAQ,MAAO,MAAO,KAAK,OAAO,eAAe1O,EAAKvB,EAAQ6B,CAAO,EAAI,IAAI,EAC/FoO,EAAK,KAAOw1B,EACR91B,EAAe,MAAM,UAAY,QAAUguB,EAAW,MAAM,UAAY,QAAU,CAACoI,EACnF91B,EAAK,QAAQ,aAAa,cAAe,EAAI,EAE7CA,EAAK,QAAQ,aAAa,cAAe,EAAK,EAC3CA,CACX,EACAs0B,EAAO,UAAU,uBAAyB,SAAUyB,EAAqB,CACrE,KAAK,qBAAuBA,EACxB,CAACA,GAAuB,KAAK,oBAC7B,KAAK,kBAAkB,OAAO,EAC9B,KAAK,kBAAoB,KAEjC,EACAzB,EAAO,UAAU,mBAAqB,SAAUpE,EAAM,CAClD,KAAK,UAAY,CAACA,GAAQ,CACtB,SAAU,UAAY,CAAE,MAAO,EAAG,EAClC,QAAS,UAAY,CAAE,MAAO,EAAI,CACtC,CACJ,EACAoE,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,gBAChB,EACAA,EAAO,UAAU,mBAAqB,SAAUpE,EAAM,CAC9CA,EACAjkC,EAAI,YAAY,KAAK,QAAS,qBAAqB,EAEnDA,EAAI,eAAe,KAAK,QAAS,qBAAqB,EAC1D,KAAK,iBAAmBikC,EACxB,KAAK,SAAW,IACpB,EACAoE,EAAO,UAAU,mBAAqB,UAAY,CAC9C,OAAO,KAAK,gBAChB,EACAA,EAAO,UAAU,gBAAkB,SAAUhjC,EAAK0O,EAAM,CACpD,IAAIg2B,EAAUh2B,GAAQ,KAAK,eAAe1O,CAAG,EAC7C,GAAI0kC,GAAWA,EAAQ,QAAS,CAC5B,IAAItI,EAAasI,EAAQ,QAAQ,WAAW,CAAC,EACzCtI,GACAzhC,EAAI,SAASyhC,EAAW,MAAO,UAAW,MAAM,CAExD,CACJ,EACA4G,EAAO,UAAU,gBAAkB,SAAUhjC,EAAK0O,EAAM,CACpD,IAAIg2B,EAAUh2B,GAAQ,KAAK,eAAe1O,CAAG,EAC7C,GAAI0kC,GAAWA,EAAQ,QAAS,CAC5B,IAAItI,EAAasI,EAAQ,QAAQ,WAAW,CAAC,EACzCtI,GAAc,KAAK,QAAQ,aAAe,KAAK,QAAQ,YAAYsI,EAAQ,GAAG,GAC9E/pC,EAAI,SAASyhC,EAAW,MAAO,UAAW,cAAc,CAEhE,CACJ,EACA4G,EAAO,UAAU,eAAiB,SAAUhjC,EAAK,CAC7C,IAAI4jC,EAAQ,KAAK,OAAO,MACpB/b,EAAM,EACNwN,EAAMuO,EAAM,OAAS,EACzB,GAAI,EAAA5jC,EAAM4jC,EAAM,CAAC,EAAE,KAAO5jC,EAAM4jC,EAAMvO,CAAG,EAAE,KAE3C,MAAOxN,GAAOwN,GAAK,CACf,IAAIlC,EAAM,KAAK,OAAOtL,EAAMwN,GAAO,CAAC,EAChC3mB,EAAOk1B,EAAMzQ,CAAG,EACpB,GAAIzkB,EAAK,IAAM1O,EACXq1B,EAAMlC,EAAM,UAEPzkB,EAAK,IAAM1O,EAChB6nB,EAAMsL,EAAM,MAGZ,QAAOzkB,CAEf,CACA,OAAOA,EACX,EACAs0B,EAAO,UAAU,iBAAmB,SAAUhjC,EAAKgL,EAAI0D,EAAM,CACzD,IAAIvV,EAAY6R,EAAG,UAAWgE,EAAQhE,EAAG,MAAO25B,EAAQ35B,EAAG,MAAO45B,EAAY55B,EAAG,UACjF,KAAK,QAAQ,qBAAqBhL,CAAG,EAAI,CAAE,UAAW7G,EAAW,MAAO6V,EAAO,MAAO21B,EAAO,UAAWC,CAAU,EAClH,KAAK,gBAAgB5kC,EAAK0O,CAAI,EAC9B,IAAIg2B,EAAUh2B,GAAQ,KAAK,eAAe1O,CAAG,EAC7C,GAAI0kC,GAAWA,EAAQ,QAAS,CAC5B,IAAIzI,EAAeyI,EAAQ,QAAQ,cAAc,oBAAoB,EACjEzI,GACAA,EAAa,OAAO,EAExBA,EAAethC,EAAI,cAAc,MAAM,EACvCshC,EAAa,UAAY,qBAAqB,OAAO9iC,CAAS,EAC9D8iC,EAAa,aAAa,WAAY,IAAI,EAC1CA,EAAa,aAAa,OAAQ,QAAQ,EAC1CA,EAAa,aAAa,aAAcjtB,CAAK,EAC7CitB,EAAa,aAAa,QAAS0I,CAAK,EACxChqC,EAAI,SAASshC,EAAa,MAAO,UAAW,cAAc,EAC1DthC,EAAI,SAASshC,EAAa,MAAO,SAAU,SAAS,EAChD2I,GAAaA,EAAU,SACvB3I,EAAa,iBAAiB,QAAS,SAAUtgC,EAAG,CAChDipC,EAAU,QAAQjpC,EAAGqE,CAAG,EACxBrE,EAAE,gBAAgB,CACtB,CAAC,EAEL+oC,EAAQ,QAAQ,YAAYzI,CAAY,CAC5C,CACJ,EACA+G,EAAO,UAAU,oBAAsB,SAAUhjC,EAAK0O,EAAM,CACxD,OAAO,KAAK,QAAQ,qBAAqB1O,CAAG,EAC5C,KAAK,gBAAgBA,EAAK0O,CAAI,EAC9B,IAAIg2B,EAAUh2B,GAAQ,KAAK,eAAe1O,CAAG,EAC7C,GAAI0kC,GAAWA,EAAQ,QAAS,CAC5B,IAAIzI,EAAeyI,EAAQ,QAAQ,cAAc,oBAAoB,EACjEzI,GACAyI,EAAQ,QAAQ,YAAYzI,CAAY,CAEhD,CACJ,EACA+G,EAAO,UAAU,gBAAkB,UAAY,CAC3C,GAAI,CAAC,KAAK,QAAQ,WACd,MAAO,CAAE,KAAM,EAAG,MAAO,CAAE,EAC/B,IAAIlpC,EAAQa,EAAI,cAAmC,KAAK,QAAQ,UAAW,EAC3E,YAAK,SAAW,CAAC,EACjB,KAAK,SAAS,MAAQ,SAASb,EAAM,eAAe,GAAK,IAClD,SAASA,EAAM,WAAW,GAAK,GAAK,EAC3C,KAAK,SAAS,OAAS,SAASA,EAAM,gBAAgB,GAAK,IACpD,SAASA,EAAM,YAAY,GAAK,GAChC,KAAK,QAChB,EACAkpC,EAAO,UAAU,UAAY,SAAUxa,EAAO,CAC1C,IAAImb,EAAU,KAAK,UAAY,KAAK,gBAAgB,EAChD3pC,EAAO,KAAK,QAAQ,sBAAsB,EAC9C,GAAIwuB,EAAM,EAAImb,EAAQ,KAAO3pC,EAAK,KAC9B,MAAO,UACX,GAAI,KAAK,kBAAoBwuB,EAAM,EAAIxuB,EAAK,MAAQ2pC,EAAQ,MACxD,MAAO,aACf,EACOX,CACX,EAAE,EACFA,EAAO,UAAU,YAAc,GAC/BA,EAAO,UAAU,qBAAuB,GACxCA,EAAO,UAAU,UAAY,OAC7BA,EAAO,UAAU,iBAAmB,GACpCA,EAAO,UAAU,iBAAmB,GACpC1mC,EAAI,UAAU0mC,EAAO,UAAWznC,CAAY,EAC5C,SAAS+nC,EAAaxqC,EAAS,CAC3B,IAAIgrC,EAAW,SAAS,eAAe,EAAE,EACzChrC,EAAQ,YAAYgrC,CAAQ,EAC5B,IAAI1H,EAAazhC,EAAI,cAAc,MAAM,EACzC7B,EAAQ,YAAYsjC,CAAU,EAC9B,IAAIhuB,EAAiBzT,EAAI,cAAc,MAAM,EAC7C7B,EAAQ,YAAYsV,CAAc,EAClC,IAAI21B,EAAqBppC,EAAI,cAAc,MAAM,EACjD,OAAAyT,EAAe,YAAY21B,CAAkB,EACtCjrC,CACX,CACAnG,EAAQ,OAASqwC,CAEjB,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,YAAY,aAAa,EAAG,SAASvvC,EAASd,EAASC,EAAO,CAAC,aAC3H,IAAI8M,EAAQjM,EAAQ,UAAU,EAAE,MAC5BkH,EAAMlH,EAAQ,YAAY,EAC1BoxC,EAAwB,UAAY,CACpC,SAASA,EAAO5B,EAAU,CACtB,KAAK,QAAUtoC,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,6BACzBsoC,EAAS,YAAY,KAAK,OAAO,CACrC,CACA,OAAA4B,EAAO,UAAU,WAAa,SAAUlB,EAAS,CAC7C,KAAK,SAAWA,CACpB,EACAkB,EAAO,UAAU,WAAa,SAAUvkC,EAAS,CAC7C,KAAK,QAAUA,CACnB,EACAukC,EAAO,UAAU,WAAa,SAAUjR,EAAS,CAC7C,KAAK,QAAUA,CACnB,EACAiR,EAAO,UAAU,IAAM,SAAU1rC,EAAW2rC,EAAK,CAC7C,IAAI9jC,EAAI,KAAK,GAAK,IAAM,KAAK,QAAQ,WAAW,KAAK,CAAC,EACjDA,EAMD,KAAK,KALLA,EAAI,SAAS,cAAc,KAAK,EAChC,KAAK,QAAQ,YAAYA,CAAC,EAC1B,KAAK,EAAI,IAKbA,EAAE,MAAM,QAAU8jC,EAClB9jC,EAAE,UAAY7H,CAClB,EACA0rC,EAAO,UAAU,OAAS,SAAUpmC,EAAQ,CACxC,GAAKA,EAEL,MAAK,OAASA,EACd,KAAK,EAAI,EACT,IAAIiM,EACJ,QAASpV,KAAO,KAAK,QAAS,CAC1B,IAAIo+B,EAAS,KAAK,QAAQp+B,CAAG,EAC7B,GAAI,CAACo+B,EAAO,MAAO,CACfA,EAAO,OAAOhpB,EAAM,KAAM,KAAK,QAASjM,CAAM,EAC9C,QACJ,CACA,IAAIsB,EAAQ2zB,EAAO,MAAM,SAASj1B,EAAO,SAAUA,EAAO,OAAO,EACjE,GAAI,CAAAsB,EAAM,QAAQ,EAGlB,GADAA,EAAQA,EAAM,cAAc,KAAK,OAAO,EACpC2zB,EAAO,SAAU,CACjB,IAAI1sB,EAAM,KAAK,QAAQjH,EAAM,MAAM,IAAKtB,CAAM,EAC1C6I,EAAO,KAAK,SAAWvH,EAAM,MAAM,OAAStB,EAAO,eACvDi1B,EAAO,SAAShpB,EAAM3K,EAAOuH,EAAMN,EAAKvI,CAAM,CAClD,MACSi1B,EAAO,MAAQ,WACpB,KAAK,mBAAmBhpB,EAAM3K,EAAO2zB,EAAO,MAAOj1B,CAAM,EAEpDi1B,EAAO,MAAQ,aACpB,KAAK,qBAAqBhpB,EAAM3K,EAAO2zB,EAAO,MAAOj1B,CAAM,EAEtDsB,EAAM,YAAY,EACnB2zB,EAAO,MAAQ,OACf,KAAK,eAAehpB,EAAM3K,EAAO2zB,EAAO,MAAOj1B,CAAM,EAErD,KAAK,oBAAoBiM,EAAM3K,EAAO2zB,EAAO,MAAOj1B,CAAM,EAG9D,KAAK,qBAAqBiM,EAAM3K,EAAO2zB,EAAO,MAAQ,sBAA4Bj1B,CAAM,CAEhG,CACA,GAAI,KAAK,GAAK,GACV,KAAO,KAAK,EAAI,KAAK,QAAQ,mBACzB,KAAK,QAAQ,YAAY,KAAK,QAAQ,SAAS,EAE3D,EACAomC,EAAO,UAAU,QAAU,SAAU7kC,EAAK+kC,EAAa,CACnD,OAAQ/kC,EAAM+kC,EAAY,gBAAkBA,EAAY,UAC5D,EACAF,EAAO,UAAU,eAAiB,SAAUG,EAAejlC,EAAO+qB,EAAOia,EAAaE,EAAY,CAS9F,QARI3kC,EAAU,KAAK,QACftK,EAAQ+J,EAAM,MAAM,IACpB7J,EAAM6J,EAAM,IAAI,IAChBC,EAAMhK,EACN8mC,EAAO,EACPoI,EAAO,EACPhkB,EAAO5gB,EAAQ,uBAAuBN,CAAG,EACzCmlC,EAAY,IAAIzlC,EAAMM,EAAKD,EAAM,MAAM,OAAQC,EAAKklC,CAAI,EACrDllC,GAAO9J,EAAK8J,IACfmlC,EAAU,MAAM,IAAMA,EAAU,IAAI,IAAMnlC,EAC1CmlC,EAAU,MAAM,OAASnlC,GAAOhK,EAAQ+J,EAAM,MAAM,OAASO,EAAQ,iBAAiBN,CAAG,EACzFmlC,EAAU,IAAI,OAASjkB,EACvB4b,EAAOoI,EACPA,EAAOhkB,EACPA,EAAOlhB,EAAM,EAAI9J,EAAMoK,EAAQ,uBAAuBN,EAAM,CAAC,EAAIA,GAAO9J,EAAM,EAAI6J,EAAM,IAAI,OAC5F,KAAK,qBAAqBilC,EAAeG,EAAWra,GAAS9qB,GAAOhK,EAAQ,aAAe,IAAM,UAC3FovC,EAAeplC,GAAOhK,GAASgK,GAAOhK,EAAQ,GAAK+J,EAAM,MAAM,OAAQ+8B,EAAOoI,EAAMA,EAAOhkB,EAAMlhB,GAAO9J,CAAG,EAAG6uC,EAAa/kC,GAAO9J,EAAM,EAAI,EAAG+uC,CAAU,CAEvK,EACAJ,EAAO,UAAU,oBAAsB,SAAUG,EAAejlC,EAAO+qB,EAAOrsB,EAAQwmC,EAAY,CAC9F,IAAItB,EAAU,KAAK,SACf0B,EAAS5mC,EAAO,WAChBuI,EAAM,KAAK,QAAQjH,EAAM,MAAM,IAAKtB,CAAM,EAC1C6I,EAAOq8B,EAAU5jC,EAAM,MAAM,OAAStB,EAAO,eAEjD,GADAwmC,EAAaA,GAAc,GACvB,KAAK,QAAQ,aAAa,UAAUllC,EAAM,MAAM,GAAG,EAAG,CACtD,IAAIulC,EAASvlC,EAAM,MAAM,EACzBulC,EAAO,IAAI,IAAMA,EAAO,MAAM,IAC9BA,EAAO,IAAI,OAAS,KAAK,QAAQ,QAAQA,EAAO,MAAM,GAAG,EAAE,OAC3D,KAAK,yBAAyBN,EAAeM,EAAQxa,EAAQ,qBAAsBrsB,EAAQ,KAAMwmC,CAAU,CAC/G,MAEI,KAAK,IAAIna,EAAQ,qBAAsB,UAAYua,EAAS,YAAmB1B,EAAU,UAAiB38B,EAAM,WAAaM,EAAO,OAAS29B,GAAc,GAAG,EAElK,GAAI,KAAK,QAAQ,aAAa,UAAUllC,EAAM,IAAI,GAAG,EAAG,CACpD,IAAIulC,EAASvlC,EAAM,MAAM,EACzBulC,EAAO,MAAM,IAAMA,EAAO,IAAI,IAC9BA,EAAO,MAAM,OAAS,EACtB,KAAK,yBAAyBN,EAAeM,EAAQxa,EAAQ,YAAarsB,EAAQ,KAAMwmC,CAAU,CACtG,KACK,CACDj+B,EAAM,KAAK,QAAQjH,EAAM,IAAI,IAAKtB,CAAM,EACxC,IAAIkd,EAAQ5b,EAAM,IAAI,OAAStB,EAAO,eACtC,KAAK,IAAIqsB,EAAQ,YAAa,UAAYua,EAAS,YACpC1pB,EAAQ,UACV3U,EAAM,WACL28B,EAAU,OAASsB,GAAc,GAAG,CACtD,CAEA,GADAI,GAAUtlC,EAAM,IAAI,IAAMA,EAAM,MAAM,IAAM,GAAKtB,EAAO,WACpD,EAAA4mC,GAAU,GAEd,CAAAr+B,EAAM,KAAK,QAAQjH,EAAM,MAAM,IAAM,EAAGtB,CAAM,EAC9C,IAAI8mC,GAAexlC,EAAM,MAAM,OAAS,EAAI,IAAMA,EAAM,IAAI,OAAS,EAAI,GACzE,KAAK,IAAI+qB,GAASya,EAAc,UAAYA,EAAc,IAAK,UAAYF,EAAS,YACrE1B,EAAU,UACZ38B,EAAM,WACL28B,EAAU,OAASsB,GAAc,GAAG,EACtD,EACAJ,EAAO,UAAU,qBAAuB,SAAUG,EAAejlC,EAAO+qB,EAAOrsB,EAAQ+mC,EAAaP,EAAY,CAC5G,GAAI,KAAK,QAAQ,aAAa,UAAUllC,EAAM,MAAM,GAAG,EACnD,OAAO,KAAK,yBAAyBilC,EAAejlC,EAAO+qB,EAAOrsB,EAAQ+mC,EAAaP,CAAU,EACrG,IAAII,EAAS5mC,EAAO,WAChBkd,GAAS5b,EAAM,IAAI,QAAUylC,GAAe,GAAKzlC,EAAM,MAAM,QAAUtB,EAAO,eAC9EuI,EAAM,KAAK,QAAQjH,EAAM,MAAM,IAAKtB,CAAM,EAC1C6I,EAAO,KAAK,SAAWvH,EAAM,MAAM,OAAStB,EAAO,eACvD,KAAK,IAAIqsB,EAAO,UAAYua,EAAS,YACtB1pB,EAAQ,UACV3U,EAAM,WACLM,EAAO,OAAS29B,GAAc,GAAG,CACnD,EACAJ,EAAO,UAAU,yBAA2B,SAAUG,EAAejlC,EAAO+qB,EAAOrsB,EAAQ+mC,EAAaP,EAAY,CAChH,IAAII,EAAS5mC,EAAO,WAAYuI,EAAM,KAAK,QAAQjH,EAAM,MAAM,IAAKtB,CAAM,EAAGklC,EAAU,KAAK,SACxFvnB,EAAa,KAAK,QAAQ,aAAa,cAAcrc,EAAM,MAAM,OAAQA,EAAM,IAAI,MAAM,EAC7Fqc,EAAW,QAAQ,SAAU3V,EAAW,CACpC,KAAK,IAAIqkB,EAAO,UAAYua,EAAS,aACrB5+B,EAAU,OAAS++B,GAAe,IAAM,UAC3Cx+B,EAAM,YACJ28B,EAAUl9B,EAAU,MAAQ,OAASw+B,GAAc,GAAG,CACzE,EAAG,IAAI,CACX,EACAJ,EAAO,UAAU,mBAAqB,SAAUG,EAAejlC,EAAO+qB,EAAOrsB,EAAQwmC,EAAY,CAC7F,IAAIj+B,EAAM,KAAK,QAAQjH,EAAM,MAAM,IAAKtB,CAAM,EAC1C4mC,EAAS5mC,EAAO,WAChBsB,EAAM,MAAM,KAAOA,EAAM,IAAI,MAC7BslC,GAAU,KAAK,QAAQtlC,EAAM,IAAI,IAAKtB,CAAM,EAAIuI,GACpD,KAAK,IAAI8jB,EAAO,UAAYua,EAAS,UACxBr+B,EAAM,sBACMi+B,GAAc,GAAG,CAC9C,EACAJ,EAAO,UAAU,qBAAuB,SAAUG,EAAejlC,EAAO+qB,EAAOrsB,EAAQwmC,EAAY,CAC/F,IAAIj+B,EAAM,KAAK,QAAQjH,EAAM,MAAM,IAAKtB,CAAM,EAC1C4mC,EAAS5mC,EAAO,WACpB,KAAK,IAAIqsB,EAAO,UAAYua,EAAS,UACxBr+B,EAAM,sBACMi+B,GAAc,GAAG,CAC9C,EACOJ,CACX,EAAE,EACFA,EAAO,UAAU,SAAW,EAC5B,SAASO,EAAeK,EAAIC,EAAIC,EAAIC,EAAI,CACpC,OAAQH,EAAK,EAAI,IAAMC,EAAK,EAAI,IAAMC,EAAK,EAAI,IAAMC,EAAK,EAAI,EAClE,CACAjzC,EAAQ,OAASkyC,CAEjB,CAAC,EAED,IAAI,OAAO,sBAAsB,CAAC,UAAU,UAAU,QAAQ,EAAG,SAASpxC,EAASd,EAASC,EAAO,CACnG,IAAIizC,EAAa,IAAI,IAAI,CAAC,OAAQ,SAAU,QAAQ,CAAC,EACrDlzC,EAAQ,YAAc,SAAUmzC,EAAW,CACvC,OAAOD,EAAW,IAAIC,CAAS,CACnC,CAEA,CAAC,EAED,IAAI,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,kBAAkB,wBAAwB,aAAa,qBAAqB,EAAG,SAASryC,EAASd,EAASC,EAAO,CAAC,aACvN,IAAI0J,EAAM7I,EAAQ,YAAY,EAC1BkH,EAAMlH,EAAQ,YAAY,EAC1B8J,EAAO9J,EAAQ,aAAa,EAC5B8uC,EAAQ9uC,EAAQ,SAAS,EAAE,MAC3B8H,EAAe9H,EAAQ,sBAAsB,EAAE,aAC/CuQ,EAAMvQ,EAAQ,WAAW,EAAE,IAC3BsyC,EAActyC,EAAQ,aAAa,EAAE,YACrCuyC,EAAsB,UAAY,CAClC,SAASA,EAAK/C,EAAU,CACpB,KAAK,IAAMtoC,EACX,KAAK,QAAU,KAAK,IAAI,cAAc,KAAK,EAC3C,KAAK,QAAQ,UAAY,2BACzBsoC,EAAS,YAAY,KAAK,OAAO,EACjC,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,OAAS,IAAIV,EAAM,KAAK,OAAO,CACxC,CACA,OAAAyD,EAAK,UAAU,eAAiB,UAAY,CACxC,IAAIptC,EAAM,KAAK,QAAQ,IACnBqtC,EAAWrtC,EAAI,oBAAoB,GAAK;AAAA,GAAQA,EAAI,eAAe,GAAK,UACxEstC,EAAWD,EAAW,KAAK,YAAc,KAAK,cAClD,GAAI,KAAK,UAAYC,EACjB,YAAK,SAAWA,EACT,EAEf,EACAF,EAAK,UAAU,WAAa,SAAUrC,EAAS,CAC3C,KAAK,SAAWA,EAChB,KAAK,QAAQ,MAAM,OAAS,KAAOA,EAAU,IACjD,EACAqC,EAAK,UAAU,cAAgB,UAAY,CACvC,OAAO,KAAK,aAAa,eAAe,QAAU,CACtD,EACAA,EAAK,UAAU,kBAAoB,UAAY,CAC3C,OAAO,KAAK,aAAa,eAAe,OAAS,CACrD,EACAA,EAAK,UAAU,gBAAkB,SAAUG,EAAS,CAChD,KAAK,aAAeA,EACpB,KAAK,aAAa,GAAG,sBACrB,SAAUxqC,EAAG,CACT,KAAK,QAAQ,sBAAuBA,CAAC,CACzC,EAAE,KAAK,IAAI,CAAC,EACZ,KAAK,iBAAiB,CAC1B,EACAqqC,EAAK,UAAU,oBAAsB,UAAY,CAC7C,KAAK,aAAa,oBAAoB,CAC1C,EACAA,EAAK,UAAU,iBAAmB,UAAY,CAC1C,OAAO,KAAK,sBAAwB,KAAK,aAAa,iBAAiB,CAC3E,EACAA,EAAK,UAAU,WAAa,SAAU1lC,EAAS,CAC3C,KAAK,QAAUA,EACXA,GACA,KAAK,kBAAkB,CAC/B,EACA0lC,EAAK,UAAU,kBAAoB,SAAUvqB,EAAgB,CACzD,OAAI,KAAK,gBAAkBA,EAChB,IACX,KAAK,eAAiBA,EAClB,OAAOA,GAAkB,UACzB,KAAK,WAAa,OAAO,KAAKA,CAAc,EAC5C,KAAK,SAAW,SAAS,KAAKA,CAAc,EAC5C,KAAK,QAAU,OAAO,KAAKA,CAAc,GAGzC,KAAK,WAAa,KAAK,SAAW,KAAK,QAAUA,EAErD,KAAK,kBAAkB,EAChB,GACX,EACAuqB,EAAK,UAAU,uBAAyB,SAAUvH,EAAS,CACvD,OAAI,KAAK,qBAAuBA,EACrB,IACX,KAAK,oBAAsBA,EAC3B,KAAK,kBAAkB,EAChB,GACX,EACAuH,EAAK,UAAU,yBAA2B,SAAUnS,EAAW,CAC3D,OAAI,KAAK,yBAA2BA,EACzB,IACX,KAAK,uBAAyBA,EACvBA,EACX,EACAmS,EAAK,UAAU,kBAAoB,UAAY,CAC3C,IAAIroB,EAAU,KAAK,QAAQ,WAAW,EACtC,KAAK,QAAUA,EACf,QAD4ByoB,EAAS,KAAK,YAAc,CAAC,CAAC,EACjDzvC,EAAI,EAAGA,EAAIgnB,EAAU,EAAGhnB,IAC7B,GAAI,KAAK,SAAU,CACf,IAAI0vC,EAAO,KAAK,IAAI,cAAc,MAAM,EACxCA,EAAK,UAAY,kCACjBA,EAAK,YAAc9oC,EAAK,aAAa,KAAK,SAAU5G,CAAC,EACrDyvC,EAAO,KAAKC,CAAI,CACpB,MAEID,EAAO,KAAK,KAAK,IAAI,eAAe7oC,EAAK,aAAa,IAAK5G,CAAC,EAAG,KAAK,OAAO,CAAC,EAGpF,GAAI,KAAK,oBAAqB,CAC1B,KAAK,eAAiB,mBACtB,IAAIwC,EAAY,mBACZmtC,EAAa,KAAK,WAAa,qCAAuC,GACtEC,EAAe,KAAK,WAClBhpC,EAAK,aAAa,KAAK,WAAY,KAAK,OAAO,EAC/CA,EAAK,aAAa,IAAK,KAAK,OAAO,EACrCipC,EAAW,KAAK,SAAW,mCAAqC,GAChEC,EAAa,KAAK,SAChBlpC,EAAK,aAAa,KAAK,SAAU,KAAK,OAAO,EAC7CgpC,EACFF,EAAO,KAAK,IAAI,cAAc,MAAM,EACxCA,EAAK,UAAYltC,EAAYmtC,EAC7BD,EAAK,YAAcE,EACnB,KAAK,YAAY,GAAG,EAAIF,EACxB,IAAIA,EAAO,KAAK,IAAI,cAAc,MAAM,EACxCA,EAAK,UAAYltC,EAAYqtC,EAC7BH,EAAK,YAAcI,EACnB,KAAK,YAAY,GAAI,EAAIJ,CAC7B,CACJ,EACAL,EAAK,UAAU,YAAc,SAAUvnC,EAAQ2B,EAAUC,EAAS,CAC9D,GAAI,KAAK,OAAO,SAAW5B,EAAO,SAC9B,KAAK,OAAO,UAAYA,EAAO,SAC/B,OAAO,KAAK,OAAOA,CAAM,EAE7B,KAAK,OAASA,EAKd,QAJIqpB,EAAQ,KAAK,IAAI1nB,EAAU3B,EAAO,QAAQ,EAC1C/G,EAAO,KAAK,IAAI2I,EAAS5B,EAAO,OAAO,EACvCioC,EAAe,KAAK,QAAQ,WAC5BC,EAAkB,EACb3mC,EAAMvB,EAAO,SAAUuB,EAAM8nB,EAAO9nB,IAAO,CAChD,IAAI0d,EAAW,KAAK,QAAQ,YAAY1d,CAAG,EAC3C,GAAI0d,EACA,GAAIA,EAAS,YAAYoK,CAAK,EAAG,CAC7BA,EAAQpK,EAAS,MAAM,IACvB,KACJ,MAEI1d,EAAM0d,EAAS,IAAI,IAG3BipB,GACJ,CAKA,QAJIC,EAAgB,GAChB5mC,EAAM8nB,EACNpK,EAAW,KAAK,QAAQ,gBAAgB1d,CAAG,EAC3Cw0B,EAAY9W,EAAWA,EAAS,MAAM,IAAM,IAExC1d,EAAMw0B,IACNx0B,EAAM0d,EAAS,IAAI,IAAM,EACzBA,EAAW,KAAK,QAAQ,gBAAgB1d,EAAK0d,CAAQ,EACrD8W,EAAY9W,EAAWA,EAAS,MAAM,IAAM,KAE5C,EAAA1d,EAAMtI,IAND,CAOE,IAAIuW,EAAcy4B,EAAaC,GAAiB,EAC3D,GAAI14B,EAAa,CACb,KAAK,IAAI,eAAeA,CAAW,EACnC,KAAK,YAAYA,EAAajO,EAAKA,GAAOw0B,EAAY9W,EAAW,EAAK,EAClEkpB,IACA34B,EAAY,MAAM,IAAM,KAAK,OAAO,eAAejO,EAAKvB,EAAQ,KAAK,OAAO,EAAI,MACpF,IAAI4mC,EAAU5mC,EAAO,WAAa,KAAK,QAAQ,aAAauB,CAAG,EAAK,KAChEiO,EAAY,MAAM,QAAUo3B,IAC5BuB,EAAgB,GAChB34B,EAAY,MAAM,OAASo3B,EAEnC,CACArlC,GACJ,CACA,GAAI4mC,EACA,KAAOD,EAAkB,KAAK,OAAO,MAAM,QAAQ,CAC/C,IAAIj4B,EAAO,KAAK,OAAO,MAAMi4B,GAAiB,EAC9Cj4B,EAAK,QAAQ,MAAM,IAAM,KAAK,OAAO,eAAeA,EAAK,IAAKjQ,EAAQ,KAAK,OAAO,EAAI,IAC1F,CAER,EACAunC,EAAK,UAAU,YAAc,SAAUvnC,EAAQ,CAC3C,IAAIgkC,EAAY,KAAK,OAErB,GADA,KAAK,OAAShkC,EACV,KAAK,OAAO,YAAYgkC,EAAWhkC,CAAM,EACzC,OAAO,KAAK,OAAOA,CAAM,EAC7B,KAAK,OAAO,cAAcA,CAAM,EAChC,IAAI4B,EAAU5B,EAAO,QACjBolC,EAAapB,EAAYA,EAAU,QAAU,GACjD,GAAI,CAACA,GAAaoB,EAAaplC,EAAO,SAClC,OAAO,KAAK,OAAOA,CAAM,EAC7B,GAAI4B,EAAUoiC,EAAU,SACpB,OAAO,KAAK,OAAOhkC,CAAM,EAC7B,GAAI,CAACgkC,GAAaA,EAAU,QAAUhkC,EAAO,SACzC,OAAO,KAAK,OAAOA,CAAM,EAC7B,GAAIA,EAAO,QAAUgkC,EAAU,SAC3B,OAAO,KAAK,OAAOhkC,CAAM,EAC7B,GAAIgkC,EAAU,SAAWhkC,EAAO,SAC5B,QAASuB,EAAM,KAAK,QAAQ,kBAAkByiC,EAAU,SAAUhkC,EAAO,SAAW,CAAC,EAAGuB,EAAM,EAAGA,IAC7F,KAAK,OAAO,MAAM,EAC1B,GAAIyiC,EAAU,QAAUhkC,EAAO,QAC3B,QAASuB,EAAM,KAAK,QAAQ,kBAAkBvB,EAAO,QAAU,EAAGgkC,EAAU,OAAO,EAAGziC,EAAM,EAAGA,IAC3F,KAAK,OAAO,IAAI,EACpBvB,EAAO,SAAWgkC,EAAU,UAC5B,KAAK,OAAO,QAAQ,KAAK,qBAAqBhkC,EAAQA,EAAO,SAAUgkC,EAAU,SAAW,CAAC,CAAC,EAE9FhkC,EAAO,QAAUgkC,EAAU,SAC3B,KAAK,OAAO,KAAK,KAAK,qBAAqBhkC,EAAQgkC,EAAU,QAAU,EAAGhkC,EAAO,OAAO,CAAC,EAE7F,KAAK,sBAAsB,CAC/B,EACAunC,EAAK,UAAU,qBAAuB,SAAUvnC,EAAQ2B,EAAUC,EAAS,CAKvE,QAJIyiC,EAAW,CAAC,EACZ9iC,EAAMI,EACNsd,EAAW,KAAK,QAAQ,gBAAgB1d,CAAG,EAC3Cw0B,EAAY9W,EAAWA,EAAS,MAAM,IAAM,IAExC1d,EAAMw0B,IACNx0B,EAAM0d,EAAS,IAAI,IAAM,EACzBA,EAAW,KAAK,QAAQ,gBAAgB1d,EAAK0d,CAAQ,EACrD8W,EAAY9W,EAAWA,EAAS,MAAM,IAAM,KAE5C,EAAA1d,EAAMK,IAND,CAQT,IAAI5I,EAAO,KAAK,OAAO,WAAWuI,EAAKvB,EAAQ,KAAK,OAAO,EACvDooC,EAASpvC,EAAK,QAClB,KAAK,IAAI,eAAeovC,CAAM,EAC9BlsC,EAAI,SAASksC,EAAO,MAAO,SAAU,KAAK,OAAO,kBAAkB7mC,EAAKvB,EAAQ,KAAK,OAAO,EAAI,IAAI,EACpG9D,EAAI,SAASksC,EAAO,MAAO,MAAO,KAAK,OAAO,eAAe7mC,EAAKvB,EAAQ,KAAK,OAAO,EAAI,IAAI,EAC9F,KAAK,YAAYooC,EAAQ7mC,EAAKA,GAAOw0B,EAAY9W,EAAW,EAAK,EAC7D,KAAK,eAAe,EACpBmpB,EAAO,UAAY,iBAGnBA,EAAO,UAAY,WAEvB/D,EAAS,KAAKrrC,CAAI,EAClBuI,GACJ,CACA,OAAO8iC,CACX,EACAkD,EAAK,UAAU,OAAS,SAAUvnC,EAAQ,CACtC,KAAK,OAAO,cAAcA,CAAM,EAChC,KAAK,OAASA,EAId,QAHI2B,EAAW3B,EAAO,SAClB4B,EAAU5B,EAAO,QACjBiI,EAAQ,KAAK,OACVA,EAAM,UAAU,GACnBA,EAAM,IAAI,EACdA,EAAM,KAAK,KAAK,qBAAqBjI,EAAQ2B,EAAUC,CAAO,CAAC,CACnE,EACA2lC,EAAK,UAAU,aAAe,SAAU7tC,EAAQ++B,EAAc9W,EAAOtqB,EAAO,CAMxE,QALIka,EAAO,KACPpS,EAAK,wrBACLkpC,EAAgB,KAAK,IAAI,eAAe,KAAK,OAAO,EACpDtnC,EACA7I,EAAI,EACD6I,EAAI5B,EAAG,KAAK9H,CAAK,GAAG,CACvB,IAAIywB,EAAM/mB,EAAE,CAAC,EACTunC,EAAcvnC,EAAE,CAAC,EACjBwnC,EAAmBxnC,EAAE,CAAC,EACtBynC,EAAWznC,EAAE,CAAC,EACd0nC,EAAM1nC,EAAE,CAAC,EACb,GAAI,GAACwQ,EAAK,YAAc+2B,GAExB,KAAIrhB,EAAS/uB,GAAK6I,EAAE,MAAQ1J,EAAM,MAAMa,EAAG6I,EAAE,KAAK,EAAI,GAKtD,GAJA7I,EAAI6I,EAAE,MAAQA,EAAE,CAAC,EAAE,OACfkmB,GACAohB,EAAc,YAAY,KAAK,IAAI,eAAephB,EAAQ,KAAK,OAAO,CAAC,EAEvEa,EAAK,CACL,IAAI5I,EAAU3N,EAAK,QAAQ,iBAAiBknB,EAAe13B,EAAE,KAAK,EAC9D0F,EAAO8K,EAAK,YAAY2N,CAAO,EAAE,UAAU,EAAI,EACnDzY,EAAK,UAAe,EACpB4hC,EAAc,YAAY5hC,CAAI,EAC9BgyB,GAAgBvZ,EAAU,CAC9B,SACSopB,EACL,GAAI/2B,EAAK,WAAY,CACjB,IAAIq2B,EAAO,KAAK,IAAI,cAAc,MAAM,EACxCA,EAAK,UAAY,oCACjBA,EAAK,YAAc9oC,EAAK,aAAayS,EAAK,WAAY+2B,EAAY,MAAM,EACxED,EAAc,YAAYT,CAAI,CAClC,MAEIS,EAAc,YAAY,KAAK,IAAI,eAAeC,EAAa,KAAK,OAAO,CAAC,UAG3EC,EAAkB,CACvB,IAAIX,EAAO,KAAK,IAAI,cAAc,MAAM,EACxCA,EAAK,UAAY,gDACjBA,EAAK,YAAc9oC,EAAK,aAAayS,EAAK,WAAYg3B,EAAiB,MAAM,EAC7EF,EAAc,YAAYT,CAAI,CAClC,SACSY,EAAU,CACf/P,GAAgB,EAChB,IAAImP,EAAO,KAAK,IAAI,cAAc,MAAM,EACxCA,EAAK,MAAM,MAASr2B,EAAK,OAAO,eAAiB,EAAK,KACtDq2B,EAAK,UAAYr2B,EAAK,WAAa,4CAA8C,UACjFq2B,EAAK,YAAcr2B,EAAK,WAAaA,EAAK,WAAai3B,EACvDH,EAAc,YAAYT,CAAI,CAClC,SACSa,EAAK,CACVhQ,GAAgB,EAChB,IAAImP,EAAO,KAAK,IAAI,cAAc,MAAM,EACxCA,EAAK,MAAM,MAASr2B,EAAK,OAAO,eAAiB,EAAK,KACtDq2B,EAAK,UAAY,UACjBA,EAAK,YAAca,EACnBJ,EAAc,YAAYT,CAAI,CAClC,EACJ,CAEA,GADAS,EAAc,YAAY,KAAK,IAAI,eAAenwC,EAAIb,EAAM,MAAMa,CAAC,EAAIb,EAAO,KAAK,OAAO,CAAC,EACtFiwC,EAAY3lB,EAAM,IAAI,EAYvBjoB,EAAO,YAAY2uC,CAAa,MAZN,CAC1B,IAAI9tC,EAAU,OAASonB,EAAM,KAAK,QAAQ,MAAO,OAAO,EACpDimB,EAAO,KAAK,IAAI,cAAc,MAAM,EACpCjmB,EAAM,MAAQ,SACdimB,EAAK,MAAM,MAASjmB,EAAM,MAAM,OAAS,KAAK,OAAO,eAAkB,KACvEimB,EAAK,aAAa,QAASriC,EAAI,2BAA4B,aAAa,CAAC,GAE7EqiC,EAAK,UAAYrtC,EACjBqtC,EAAK,YAAYS,CAAa,EAC9B3uC,EAAO,YAAYkuC,CAAI,CAC3B,CAIA,OAAOnP,EAAephC,EAAM,MAChC,EACAkwC,EAAK,UAAU,kBAAoB,SAAU7tC,EAAQrC,EAAOu/B,EAAK,CAC7D,IAAI8R,EAAOrxC,EAAM,OAAO,KAAK,cAAc,EAC3C,GAAIqxC,GAAQ,GAAKA,GAAQ9R,EACrB,OAAOv/B,EACX,GAAIA,EAAM,CAAC,GAAK,IAAK,CACjBqxC,GAAQA,EAAO,KAAK,QAEpB,QADIryC,EAAQqyC,EAAO,KAAK,QACfxwC,EAAI,EAAGA,EAAI7B,EAAO6B,IACvBwB,EAAO,YAAY,KAAK,YAAY,GAAG,EAAE,UAAU,EAAI,CAAC,EAE5D,YAAK,sBAAsB,EACpBrC,EAAM,OAAOqxC,CAAI,CAC5B,SACSrxC,EAAM,CAAC,GAAK,IAAM,CACvB,QAASa,EAAI,EAAGA,EAAIwwC,EAAMxwC,IAAK,CAC3B,IAAIywC,EAAU,KAAK,YAAY,GAAI,EAAE,UAAU,EAAI,EACnDA,EAAQ,UAAe,EACvBjvC,EAAO,YAAYivC,CAAO,CAC9B,CACA,YAAK,sBAAsB,EACpBtxC,EAAM,OAAOqxC,CAAI,CAC5B,CACA,YAAK,sBAAsB,EACpBrxC,CACX,EACAkwC,EAAK,UAAU,sBAAwB,UAAY,CAC/C,GAAI,GAAC,KAAK,wBAA0B,CAAC,KAAK,qBAE1C,MAAK,4BAA8B,CAC/B,YAAa,OACb,MAAO,OACP,IAAK,OACL,IAAK,MACT,EACA,IAAIt/B,EAAQ,KAAK,QAAQ,IAAI,OAC7B,GAAKA,EAEL,KAAI8B,EAAS,KAAK,QAAQ,UAAU,UAAU,EAC1C6+B,EAAgB,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ7+B,EAAO,GAAG,CAAC,EAAE,CAAC,EAAE,OACrE8+B,EAAqB,KAAK,MAAMD,EAAgB,KAAK,OAAO,EAChE,KAAK,4BAA8B,CAC/B,YAAaC,EACb,MAAO9+B,EAAO,GAClB,EACA,IAAI++B,EAAmB,KAAK,QAAQ,kBACpC,GAAIA,GAEA,QADIpc,EAAS,KAAK,QAAQ,kBAAkB,OACnCx0B,EAAI,EAAGA,EAAIw0B,EAAO,OAAQx0B,IAC/B,GAAI6R,EAAO,MAAQ2iB,EAAOx0B,CAAC,EAAE,MAAM,IAAK,CACpC,KAAK,4BAA4B,IAAMw0B,EAAOx0B,CAAC,EAAE,MAAM,IAAM,EACzD6R,EAAO,IAAM2iB,EAAOx0B,CAAC,EAAE,MAAM,IAC7B,KAAK,4BAA4B,IAAM,GAGvC,KAAK,4BAA4B,IAAM,EAE3C,KACJ,EAGR,GAAI,CAAC,KAAK,4BAA4B,KAC9B+P,EAAM8B,EAAO,GAAG,IAAM,IAAMA,EAAO,SAAW9B,EAAM8B,EAAO,GAAG,EAAE,OAAQ,CACxE,KAAK,4BAA4B,IAAM,EACvC,QAAS7R,EAAI6R,EAAO,IAAM,EAAG7R,EAAI+P,EAAM,OAAQ/P,IAAK,CAChD,IAAIc,EAAOiP,EAAM/P,CAAC,EACd6wC,EAAgB,OAAO,KAAK/vC,CAAI,EAAE,CAAC,EAAE,OACzC,GAAIA,IAAS,KACT,KAAK,4BAA4B,IAAMd,EACnC6wC,GAAiBH,GACjB,KAEZ,CACJ,CAEJ,KAAK,4BAA4B,GACrC,EACArB,EAAK,UAAU,wBAA0B,UAAY,CAEjD,QADIyB,EAAqB,KAAK,QAAQ,iBAAiB,0BAA0B,EACxE,EAAI,EAAG,EAAIA,EAAmB,OAAQ,IAC3CA,EAAmB,CAAC,EAAE,UAAU,OAAO,yBAAyB,CAExE,EACAzB,EAAK,UAAU,sBAAwB,SAAUt3B,EAAMg5B,EAAa,CAChE,IAAIjwC,EAAO,KAAK,QAAQ,IAAI,QAAQiX,EAAK,GAAG,EAC5C,GAAIjX,IAAS,GAAI,CACb,IAAIqB,EAAU4V,EAAK,QACnB,GAAIA,EAAK,QAAQ,WAAaA,EAAK,QAAQ,UAAU,SAAS,gBAAgB,EAC1E,GAAIA,EAAK,QAAQ,WAAW,OAAS,EACjC5V,EAAU4V,EAAK,QAAQ,WAAW,CAAC,MAGnC,QAGR,IAAIi5B,EAAa7uC,EAAQ,WACzB,GAAI6uC,EAAY,CACZ,IAAIzuC,EAAOyuC,EAAWD,EAAc,CAAC,EACjCxuC,GAAQA,EAAK,WAAaA,EAAK,UAAU,SAAS,kBAAkB,GACpEA,EAAK,UAAU,IAAI,yBAAyB,CACpD,CACJ,CACJ,EACA8sC,EAAK,UAAU,4BAA8B,UAAY,CACrD,GAAK,KAAK,OAEV,KAAIpC,EAAQ,KAAK,OAAO,MACxB,KAAK,wBAAwB,EAC7B,IAAI8D,EAAc,KAAK,4BAA4B,YACnD,GAAIA,IAAgB,EAChB,GAAI,KAAK,4BAA4B,MAAQ,EACzC,QAAS/wC,EAAI,EAAGA,EAAIitC,EAAM,OAAQjtC,IAAK,CACnC,IAAI+X,EAAOk1B,EAAMjtC,CAAC,EAClB,GAAI,KAAK,4BAA4B,KAAO+X,EAAK,KAAO,KAAK,4BAA4B,MACnF,EAAG,CACL,GAAIA,EAAK,KAAO,KAAK,4BAA4B,IAC7C,MACJ,KAAK,sBAAsBA,EAAMg5B,CAAW,CAChD,CACJ,KAGA,SAAS/wC,EAAIitC,EAAM,OAAS,EAAGjtC,GAAK,EAAGA,IAAK,CACxC,IAAI+X,EAAOk1B,EAAMjtC,CAAC,EAClB,GAAI,KAAK,4BAA4B,KAAO+X,EAAK,IAAM,KAAK,4BAA4B,MAAO,CAC3F,GAAIA,EAAK,IAAM,KAAK,4BAA4B,IAC5C,MACJ,KAAK,sBAAsBA,EAAMg5B,CAAW,CAChD,CACJ,EAGZ,EACA1B,EAAK,UAAU,mBAAqB,SAAU7tC,EAAQ,CAClD,IAAI0uC,EAAS,KAAK,IAAI,cAAc,KAAK,EACzC,OAAAA,EAAO,UAAY,WACnBA,EAAO,MAAM,OAAS,KAAK,OAAO,WAAa,KACxCA,CACX,EACAb,EAAK,UAAU,mBAAqB,SAAU7tC,EAAQsnB,EAAQrE,EAAQ,CAClE,IAAI5C,EAAQ,EACRwO,EAAQ,EACR4gB,EAAaxsB,EAAO,CAAC,EACrB8b,EAAe,EACf2P,EAAS,KAAK,mBAAmB,EACrC1uC,EAAO,YAAY0uC,CAAM,EACzB,QAASlwC,EAAI,EAAGA,EAAI8oB,EAAO,OAAQ9oB,IAAK,CACpC,IAAIypB,EAAQX,EAAO9oB,CAAC,EAChBb,EAAQsqB,EAAM,MAClB,GAAIzpB,GAAK,GAAK,KAAK,oBAAqB,CAGpC,GAFA6hB,EAAQ1iB,EAAM,OACdA,EAAQ,KAAK,kBAAkB+wC,EAAQ/wC,EAAO8xC,CAAU,EACpD,CAAC9xC,EACD,SACJ0iB,GAAS1iB,EAAM,MACnB,CACA,GAAI0iB,EAAQ1iB,EAAM,OAAS8xC,EACvB1Q,EAAe,KAAK,aAAa2P,EAAQ3P,EAAc9W,EAAOtqB,CAAK,EACnE0iB,GAAS1iB,EAAM,WAEd,CACD,KAAO0iB,EAAQ1iB,EAAM,QAAU8xC,GAAY,CACvC1Q,EAAe,KAAK,aAAa2P,EAAQ3P,EAAc9W,EAAOtqB,EAAM,UAAU,EAAG8xC,EAAapvB,CAAK,CAAC,EACpG1iB,EAAQA,EAAM,UAAU8xC,EAAapvB,CAAK,EAC1CA,EAAQovB,EACRf,EAAS,KAAK,mBAAmB,EACjC1uC,EAAO,YAAY0uC,CAAM,EACzB,IAAI3hC,EAAO,KAAK,IAAI,eAAe3H,EAAK,aAAa,OAAQ6d,EAAO,MAAM,EAAG,KAAK,OAAO,EACzFlW,EAAK,UAAe,EACpB2hC,EAAO,YAAY3hC,CAAI,EACvB8hB,IACAkQ,EAAe,EACf0Q,EAAaxsB,EAAO4L,CAAK,GAAK,OAAO,SACzC,CACIlxB,EAAM,QAAU,IAChB0iB,GAAS1iB,EAAM,OACfohC,EAAe,KAAK,aAAa2P,EAAQ3P,EAAc9W,EAAOtqB,CAAK,EAE3E,CACJ,CACIslB,EAAOA,EAAO,OAAS,CAAC,EAAI,KAAK,iBACjC,KAAK,uBAAuByrB,EAAQ3P,EAAc,KAAM,GAAI,EAAI,CACxE,EACA8O,EAAK,UAAU,kBAAoB,SAAU7tC,EAAQsnB,EAAQ,CAEzD,QADIyX,EAAe,EACVvgC,EAAI,EAAGA,EAAI8oB,EAAO,OAAQ9oB,IAAK,CACpC,IAAIypB,EAAQX,EAAO9oB,CAAC,EAChBb,EAAQsqB,EAAM,MAClB,GAAI,EAAAzpB,GAAK,GAAK,KAAK,sBACfb,EAAQ,KAAK,kBAAkBqC,EAAQrC,CAAK,EACxC,CAACA,IAGT,IAAIohC,EAAephC,EAAM,OAAS,KAAK,gBACnC,OAAO,KAAK,uBAAuBqC,EAAQ++B,EAAc9W,EAAOtqB,CAAK,EACzEohC,EAAe,KAAK,aAAa/+B,EAAQ++B,EAAc9W,EAAOtqB,CAAK,EACvE,CACJ,EACAkwC,EAAK,UAAU,uBAAyB,SAAU7tC,EAAQ++B,EAAc9W,EAAOtqB,EAAO0xB,EAAM,CACxFpH,GAAS,KAAK,aAAajoB,EAAQ++B,EAAc9W,EAAOtqB,EAAM,MAAM,EAAG,KAAK,gBAAkBohC,CAAY,CAAC,EAC3G,IAAI2Q,EAAa,KAAK,IAAI,cAAc,MAAM,EAC9CA,EAAW,UAAY,gDACvBA,EAAW,YAAcrgB,EAAO,SAAW,yBAC3CrvB,EAAO,YAAY0vC,CAAU,CACjC,EACA7B,EAAK,UAAU,YAAc,SAAU7tC,EAAQ6H,EAAK0d,EAAU,CAG1D,GAFI,CAACA,GAAYA,GAAY,KACzBA,EAAW,KAAK,QAAQ,YAAY1d,CAAG,GACvC0d,EACA,IAAI+B,EAAS,KAAK,mBAAmBzf,EAAK0d,CAAQ,MAElD,KAAI+B,EAAS,KAAK,QAAQ,UAAUzf,CAAG,EAC3C,IAAI8nC,EAAa3vC,EACjB,GAAIsnB,EAAO,OAAQ,CACf,IAAIrE,EAAS,KAAK,QAAQ,gBAAgBpb,CAAG,EAC7C,GAAIob,GAAUA,EAAO,OAAQ,CACzB,KAAK,mBAAmBjjB,EAAQsnB,EAAQrE,CAAM,EAC9C,IAAI0sB,EAAa3vC,EAAO,SAC5B,KACK,CACD,IAAI2vC,EAAa3vC,EACb,KAAK,eAAe,IACpB2vC,EAAa,KAAK,mBAAmB,EACrC3vC,EAAO,YAAY2vC,CAAU,GAEjC,KAAK,kBAAkBA,EAAYroB,CAAM,CAC7C,CACJ,MACS,KAAK,eAAe,IACzBqoB,EAAa,KAAK,mBAAmB,EACrC3vC,EAAO,YAAY2vC,CAAU,GAEjC,GAAI,KAAK,SAAWA,EAAY,CACxBpqB,IACA1d,EAAM0d,EAAS,IAAI,KACvB,IAAIqqB,EAAc,KAAK,IAAI,cAAc,MAAM,EAC/CA,EAAY,UAAY,kCACxBA,EAAY,YAAc/nC,GAAO,KAAK,QAAQ,UAAU,EAAI,EAAI,KAAK,SAAW,KAAK,SACrF8nC,EAAW,YAAYC,CAAW,CACtC,CACJ,EACA/B,EAAK,UAAU,mBAAqB,SAAUhmC,EAAK0d,EAAU,CACzD,IAAIpd,EAAU,KAAK,QACf0nC,EAAe,CAAC,EACpB,SAASC,EAAUxoB,EAAQyK,EAAMC,EAAI,CAEjC,QADIsE,EAAM,EAAG5S,EAAM,EACXA,EAAM4D,EAAOgP,CAAG,EAAE,MAAM,OAAUvE,GAGtC,GAFArO,GAAO4D,EAAOgP,CAAG,EAAE,MAAM,OACzBA,IACIA,GAAOhP,EAAO,OACd,OAER,GAAI5D,GAAOqO,EAAM,CACb,IAAIp0B,EAAQ2pB,EAAOgP,CAAG,EAAE,MAAM,UAAUvE,EAAOrO,CAAG,EAC9C/lB,EAAM,OAAUq0B,EAAKD,IACrBp0B,EAAQA,EAAM,UAAU,EAAGq0B,EAAKD,CAAI,GACxC8d,EAAa,KAAK,CACd,KAAMvoB,EAAOgP,CAAG,EAAE,KAClB,MAAO34B,CACX,CAAC,EACD+lB,EAAMqO,EAAOp0B,EAAM,OACnB24B,GAAO,CACX,CACA,KAAO5S,EAAMsO,GAAMsE,EAAMhP,EAAO,QAAQ,CACpC,IAAI3pB,EAAQ2pB,EAAOgP,CAAG,EAAE,MACpB34B,EAAM,OAAS+lB,EAAMsO,EACrB6d,EAAa,KAAK,CACd,KAAMvoB,EAAOgP,CAAG,EAAE,KAClB,MAAO34B,EAAM,UAAU,EAAGq0B,EAAKtO,CAAG,CACtC,CAAC,EAGDmsB,EAAa,KAAKvoB,EAAOgP,CAAG,CAAC,EACjC5S,GAAO/lB,EAAM,OACb24B,GAAO,CACX,CACJ,CACA,IAAIhP,EAASnf,EAAQ,UAAUN,CAAG,EAClC,OAAA0d,EAAS,KAAK,SAAUuR,EAAajvB,EAAKC,EAAQwwB,EAAYpC,EAAU,CAChEY,GAAe,KACf+Y,EAAa,KAAK,CACd,KAAM,OACN,MAAO/Y,CACX,CAAC,GAGGZ,IACA5O,EAASnf,EAAQ,UAAUN,CAAG,GAC9Byf,EAAO,QACPwoB,EAAUxoB,EAAQgR,EAAYxwB,CAAM,EAEhD,EAAGyd,EAAS,IAAI,IAAK,KAAK,QAAQ,QAAQA,EAAS,IAAI,GAAG,EAAE,MAAM,EAC3DsqB,CACX,EACAhC,EAAK,UAAU,eAAiB,UAAY,CACxC,OAAO,KAAK,QAAQ,eAAe,CACvC,EACOA,CACX,EAAE,EACFA,EAAK,UAAU,SAAW,OAC1BA,EAAK,UAAU,YAAc,OAC7BA,EAAK,UAAU,cAAgB,OAC/BA,EAAK,UAAU,SAAWA,EAAK,UAAU,YACzCA,EAAK,UAAU,SAAW,SAC1BA,EAAK,UAAU,WAAa,OAC5BA,EAAK,UAAU,SAAW,EAC1BA,EAAK,UAAU,gBAAkB,IACjCA,EAAK,UAAU,eAAiB,GAChCA,EAAK,UAAU,WAAa,GAC5BA,EAAK,UAAU,SAAW,GAC1BA,EAAK,UAAU,QAAU,GACzBA,EAAK,UAAU,oBAAsB,GACrCA,EAAK,UAAU,uBAAyB,GACxCA,EAAK,UAAU,YAAc,CAAC,EAC9BA,EAAK,UAAU,QAAU,CAAC,EAC1BA,EAAK,UAAU,gBAAkBA,EAAK,UAAU,kBAChD1pC,EAAI,UAAU0pC,EAAK,UAAWzqC,CAAY,EAC1C5I,EAAQ,KAAOqzC,CAEf,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,aAAa,EAAG,SAASvyC,EAASd,EAASC,EAAO,CAAC,aAC/G,IAAI+H,EAAMlH,EAAQ,YAAY,EAC1By0C,EAAwB,UAAY,CACpC,SAASA,EAAOjF,EAAU,CACtB,KAAK,QAAUtoC,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,6BACzBsoC,EAAS,YAAY,KAAK,OAAO,EACjC,KAAK,UAAY,GACjB,KAAK,WAAa,GAClB,KAAK,cAAgB,IACrB,KAAK,eAAiB,GACtB,KAAK,QAAU,CAAC,EAChB,KAAK,OAAS,KAAK,UAAU,EAC7BtoC,EAAI,YAAY,KAAK,QAAS,oBAAoB,EAClD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,CACvD,CACA,OAAAutC,EAAO,UAAU,eAAiB,SAAUzzC,EAAK,CAE7C,QADI0zC,EAAU,KAAK,QACVxxC,EAAIwxC,EAAQ,OAAQxxC,KACzBgE,EAAI,SAASwtC,EAAQxxC,CAAC,EAAE,MAAO,UAAWlC,EAAM,GAAK,GAAG,CAChE,EACAyzC,EAAO,UAAU,mBAAqB,UAAY,CAE9C,QADIC,EAAU,KAAK,QACVxxC,EAAIwxC,EAAQ,OAAQxxC,KACzBwxC,EAAQxxC,CAAC,EAAE,MAAM,kBAAoB,KAAK,cAAgB,KAC9D,KAAK,aAAe,GACpB,WAAW,UAAY,CACf,KAAK,cACLgE,EAAI,YAAY,KAAK,QAAS,sBAAsB,CAE5D,EAAE,KAAK,IAAI,CAAC,CAChB,EACAutC,EAAO,UAAU,kBAAoB,UAAY,CAC7C,KAAK,aAAe,GACpBvtC,EAAI,eAAe,KAAK,QAAS,sBAAsB,CAC3D,EACAutC,EAAO,UAAU,WAAa,SAAUvE,EAAS,CAC7C,KAAK,SAAWA,CACpB,EACAuE,EAAO,UAAU,WAAa,SAAU5nC,EAAS,CAC7C,KAAK,QAAUA,CACnB,EACA4nC,EAAO,UAAU,YAAc,SAAUE,EAAU,CAC3CA,GAAY,KAAK,aACjB,KAAK,WAAaA,EAClB,KAAK,aAAa,EAE1B,EACAF,EAAO,UAAU,iBAAmB,SAAUG,EAAe,CACrDA,GAAiB,KAAK,gBACtB,KAAK,cAAgBA,EACrB,KAAK,aAAa,EAE1B,EACAH,EAAO,UAAU,kBAAoB,SAAUI,EAAgB,CACvDA,GAAkB,KAAK,iBACvB,KAAK,eAAiBA,EACtB3tC,EAAI,YAAY,KAAK,QAAS,sBAAuB2tC,CAAc,EACnE,KAAK,eAAe,EAAI,EACxB,KAAK,aAAa,EAE1B,EACAJ,EAAO,UAAU,UAAY,UAAY,CACrC,IAAI1vC,EAAKmC,EAAI,cAAc,KAAK,EAChC,OAAAnC,EAAG,UAAY,aACf,KAAK,QAAQ,YAAYA,CAAE,EAC3B,KAAK,QAAQ,KAAKA,CAAE,EACbA,CACX,EACA0vC,EAAO,UAAU,aAAe,UAAY,CACxC,GAAI,KAAK,QAAQ,OAAS,EAAG,CACzB,IAAI1vC,EAAK,KAAK,QAAQ,IAAI,EAC1B,OAAAA,EAAG,WAAW,YAAYA,CAAE,EACrBA,CACX,CACJ,EACA0vC,EAAO,UAAU,WAAa,UAAY,CACtC,KAAK,UAAY,GACjBvtC,EAAI,YAAY,KAAK,QAAS,oBAAoB,EAClD,KAAK,aAAa,CACtB,EACAutC,EAAO,UAAU,WAAa,UAAY,CACtC,KAAK,UAAY,GACjBvtC,EAAI,eAAe,KAAK,QAAS,oBAAoB,EACrD,KAAK,aAAa,CACtB,EACAutC,EAAO,UAAU,aAAe,UAAY,CACxC,IAAIK,EAAS,KAAK,eASlB,GARA,cAAc,KAAK,UAAU,EAC7B,aAAa,KAAK,SAAS,EAC3B,KAAK,kBAAkB,EACnB,KAAK,iBACL,KAAK,kBAAoB,GACzB5tC,EAAI,eAAe,KAAK,QAAS,qBAAqB,GAE1D4tC,EAAO,EAAI,EACP,CAAC,KAAK,YAAc,CAAC,KAAK,eAAiB,CAAC,KAAK,UAAW,CAC5D,KAAK,kBAAkB,EACvB,MACJ,CASA,GARI,KAAK,iBACL,KAAK,kBAAoB,GACzB,WAAW,UAAY,CACf,KAAK,mBACL5tC,EAAI,YAAY,KAAK,QAAS,qBAAqB,CAE3D,EAAE,KAAK,IAAI,CAAC,GAEZA,EAAI,kBACJ,KAAK,mBAAmB,MAEvB,CACD,IAAI6tC,EAA2B,UAAY,CACvC,KAAK,UAAY,WAAW,UAAY,CACpCD,EAAO,EAAK,CAChB,EAAG,GAAM,KAAK,aAAa,CAC/B,EAAE,KAAK,IAAI,EACX,KAAK,WAAa,YAAY,UAAY,CACtCA,EAAO,EAAI,EACXC,EAAM,CACV,EAAG,KAAK,aAAa,EACrBA,EAAM,CACV,CACJ,EACAN,EAAO,UAAU,iBAAmB,SAAUvzC,EAAU8zC,EAAU,CAC9D,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,QACtB,MAAO,CAAE,KAAM,EAAG,IAAK,CAAE,EACxB9zC,IACDA,EAAW,KAAK,QAAQ,UAAU,UAAU,GAChD,IAAIuT,EAAM,KAAK,QAAQ,yBAAyBvT,CAAQ,EACpD+zC,EAAa,KAAK,UAAY,KAAK,QAAQ,aAAa,UAAUxgC,EAAI,IAAKvT,EAAS,GAAG,EACrF,KAAK,QAAQ,aAAa,WAAWuT,EAAI,MAAM,EAC/CA,EAAI,OAAS,KAAK,OAAO,gBAC3BygC,GAAazgC,EAAI,KAAOugC,EAAW,KAAK,OAAO,eAAiB,IAChE,KAAK,OAAO,WAChB,MAAO,CAAE,KAAMC,EAAY,IAAKC,CAAU,CAC9C,EACAT,EAAO,UAAU,eAAiB,SAAUU,EAAUnqC,EAAQ,CAC1D,OAAOmqC,EAAS,KAAO,GAAKA,EAAS,IAAMnqC,EAAO,SACtD,EACAypC,EAAO,UAAU,OAAS,SAAUzpC,EAAQ,CACxC,KAAK,OAASA,EACd,IAAI2d,EAAa,KAAK,QAAQ,kBAC1BzlB,EAAI,EAAGkyC,EAAc,GACrBzsB,IAAe,QAAaA,EAAW,SAAW,KAClDA,EAAa,CAAC,CAAE,OAAQ,IAAK,CAAC,GAElC,QAASzlB,EAAI,EAAG,EAAIylB,EAAW,OAAQzlB,EAAI,EAAGA,IAAK,CAC/C,IAAIiyC,EAAW,KAAK,iBAAiBxsB,EAAWzlB,CAAC,EAAE,OAAQ,EAAI,EAC/D,GAAK,GAAAiyC,EAAS,IAAMnqC,EAAO,OAASA,EAAO,QACvCmqC,EAAS,IAAM,IAAMjyC,EAAI,GAG7B,KAAImC,EAAU,KAAK,QAAQ+vC,GAAa,GAAK,KAAK,UAAU,EACxD/uC,EAAQhB,EAAQ,MACf,KAAK,WAYN,KAAK,WAAWA,EAAS8vC,EAAUnqC,EAAQ2d,EAAWzlB,CAAC,EAAG,KAAK,OAAO,EAXjE,KAAK,eAAeiyC,EAAUnqC,CAAM,GAIrC9D,EAAI,SAASb,EAAO,UAAW,OAAO,EACtCa,EAAI,UAAU7B,EAAS8vC,EAAS,KAAMA,EAAS,GAAG,EAClDjuC,EAAI,SAASb,EAAO,QAAS,KAAK,MAAM2E,EAAO,cAAc,EAAI,IAAI,EACrE9D,EAAI,SAASb,EAAO,SAAU2E,EAAO,WAAa,IAAI,GANtD9D,EAAI,SAASb,EAAO,UAAW,MAAM,EAYjD,CACA,KAAO,KAAK,QAAQ,OAAS+uC,GACzB,KAAK,aAAa,EACtB,IAAIrV,EAAY,KAAK,QAAQ,aAAa,EAC1C,KAAK,cAAcA,CAAS,EAC5B,KAAK,UAAYoV,EACjB,KAAK,aAAa,CACtB,EACAV,EAAO,UAAU,cAAgB,SAAU1U,EAAW,CAC9CA,GAAa,KAAK,YAClB,KAAK,UAAYA,EACbA,EACA74B,EAAI,YAAY,KAAK,QAAS,uBAAuB,EAErDA,EAAI,eAAe,KAAK,QAAS,uBAAuB,EAEpE,EACAutC,EAAO,UAAU,QAAU,UAAY,CACnC,cAAc,KAAK,UAAU,EAC7B,aAAa,KAAK,SAAS,CAC/B,EACOA,CACX,EAAE,EACFA,EAAO,UAAU,SAAW,EAC5BA,EAAO,UAAU,WAAa,KAC9Bv1C,EAAQ,OAASu1C,CAEjB,CAAC,EAED,IAAI,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,gBAAgB,uBAAuB,EAAG,SAASz0C,EAASd,EAASC,EAAO,CAAC,aAClK,IAAIqX,EAAa,MAAQ,KAAK,WAAe,UAAY,CACrD,IAAIC,EAAgB,SAAUC,EAAGC,EAAG,CAChC,OAAAF,EAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUC,EAAGC,EAAG,CAAED,EAAE,UAAYC,CAAG,GAC1E,SAAUD,EAAGC,EAAG,CAAE,QAASjK,KAAKiK,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGjK,CAAC,IAAGgK,EAAEhK,CAAC,EAAIiK,EAAEjK,CAAC,EAAG,EAC7F+J,EAAcC,EAAGC,CAAC,CAC7B,EACA,OAAO,SAAUD,EAAGC,EAAG,CACnB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5FF,EAAcC,EAAGC,CAAC,EAClB,SAASC,GAAK,CAAE,KAAK,YAAcF,CAAG,CACtCA,EAAE,UAAYC,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKC,EAAG,UAAYD,EAAE,UAAW,IAAIC,EACnF,CACJ,EAAG,EACC/N,EAAM7I,EAAQ,WAAW,EACzBkH,EAAMlH,EAAQ,WAAW,EACzBsQ,EAAQtQ,EAAQ,aAAa,EAC7B8H,EAAe9H,EAAQ,qBAAqB,EAAE,aAC9Cq1C,EAAe,MACfC,EAA2B,UAAY,CACvC,SAASA,EAAU5wC,EAAQ6wC,EAAa,CACpC,KAAK,QAAUruC,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,8BAAgCquC,EACzD,KAAK,QAAQ,SAAW,GACxB,KAAK,MAAQruC,EAAI,cAAc,KAAK,EACpC,KAAK,MAAM,UAAY,sBACvB,KAAK,MAAM,YAAc,OACzB,KAAK,QAAQ,YAAY,KAAK,KAAK,EACnCxC,EAAO,YAAY,KAAK,OAAO,EAC/B,KAAK,WAAW,EAAK,EACrB,KAAK,UAAY,GACjB4L,EAAM,YAAY,KAAK,QAAS,SAAU,KAAK,SAAS,KAAK,IAAI,CAAC,EAClEA,EAAM,YAAY,KAAK,QAAS,YAAaA,EAAM,cAAc,CACrE,CACA,OAAAglC,EAAU,UAAU,WAAa,SAAUE,EAAW,CAClD,KAAK,QAAQ,MAAM,QAAUA,EAAY,GAAK,OAC9C,KAAK,UAAYA,EACjB,KAAK,MAAQ,CACjB,EACOF,CACX,EAAE,EACFzsC,EAAI,UAAUysC,EAAU,UAAWxtC,CAAY,EAC/C,IAAI2tC,EAA4B,SAAUh9B,EAAQ,CAC9CjC,EAAUi/B,EAAYh9B,CAAM,EAC5B,SAASg9B,EAAW/wC,EAAQsU,EAAU,CAClC,IAAI3H,EAAQoH,EAAO,KAAK,KAAM/T,EAAQ,IAAI,GAAK,KAC/C,OAAA2M,EAAM,UAAY,EAClBA,EAAM,aAAe,EACrB2H,EAAS,gBACL3H,EAAM,MAAQnK,EAAI,eAAexC,EAAO,aAAa,EACzD2M,EAAM,MAAM,MAAM,MACdA,EAAM,QAAQ,MAAM,OAASA,EAAM,OAAS,IAAM,EAAI,KAC1DA,EAAM,UAAY,EACXA,CACX,CACA,OAAAokC,EAAW,UAAU,SAAW,UAAY,CACxC,GAAI,CAAC,KAAK,UAAW,CAEjB,GADA,KAAK,UAAY,KAAK,QAAQ,UAC1B,KAAK,OAAS,EAAG,CACjB,IAAIn1B,EAAI,KAAK,QAAQ,aAAe,KAAK,aACzC,KAAK,UAAY,KAAK,WAAa,EAAIA,IAAM,KAAK,MAAQA,EAC9D,CACA,KAAK,MAAM,SAAU,CAAE,KAAM,KAAK,SAAU,CAAC,CACjD,CACA,KAAK,UAAY,EACrB,EACAm1B,EAAW,UAAU,SAAW,UAAY,CACxC,OAAO,KAAK,IAAI,KAAK,UAAY,KAAK,MAAQ,EAAG,KAAK,WAAa,CAAC,CACxE,EACAA,EAAW,UAAU,UAAY,SAAU7D,EAAQ,CAC/C,KAAK,QAAQ,MAAM,OAASA,EAAS,IACzC,EACA6D,EAAW,UAAU,gBAAkB,SAAU7D,EAAQ,CACrD,KAAK,aAAeA,EAChBA,EAASyD,GACT,KAAK,MAAQA,EAAezD,EAC5BA,EAASyD,GAEJ,KAAK,OAAS,IACnB,KAAK,MAAQ,GAEjB,KAAK,MAAM,MAAM,OAASzD,EAAS,IACvC,EACA6D,EAAW,UAAU,aAAe,SAAU9U,EAAW,CACjD,KAAK,WAAaA,IAClB,KAAK,UAAY,GACjB,KAAK,UAAYA,EACjB,KAAK,QAAQ,UAAYA,EAAY,KAAK,MAElD,EACO8U,CACX,EAAEH,CAAS,EACXG,EAAW,UAAU,eAAiBA,EAAW,UAAU,gBAC3D,IAAIC,EAA4B,SAAUj9B,EAAQ,CAC9CjC,EAAUk/B,EAAYj9B,CAAM,EAC5B,SAASi9B,EAAWhxC,EAAQsU,EAAU,CAClC,IAAI3H,EAAQoH,EAAO,KAAK,KAAM/T,EAAQ,IAAI,GAAK,KAC/C,OAAA2M,EAAM,WAAa,EACnBA,EAAM,OAAS2H,EAAS,gBACxB3H,EAAM,MAAM,MAAM,OACdA,EAAM,QAAQ,MAAM,QAAUA,EAAM,QAAU,IAAM,EAAI,KACrDA,CACX,CACA,OAAAqkC,EAAW,UAAU,SAAW,UAAY,CACnC,KAAK,YACN,KAAK,WAAa,KAAK,QAAQ,WAC/B,KAAK,MAAM,SAAU,CAAE,KAAM,KAAK,UAAW,CAAC,GAElD,KAAK,UAAY,EACrB,EACAA,EAAW,UAAU,UAAY,UAAY,CACzC,OAAO,KAAK,UAAY,KAAK,OAAS,CAC1C,EACAA,EAAW,UAAU,SAAW,SAAUxtB,EAAO,CAC7C,KAAK,QAAQ,MAAM,MAAQA,EAAQ,IACvC,EACAwtB,EAAW,UAAU,cAAgB,SAAUxtB,EAAO,CAClD,KAAK,MAAM,MAAM,MAAQA,EAAQ,IACrC,EACAwtB,EAAW,UAAU,eAAiB,SAAUxtB,EAAO,CACnD,KAAK,MAAM,MAAM,MAAQA,EAAQ,IACrC,EACAwtB,EAAW,UAAU,cAAgB,SAAUz1B,EAAY,CACnD,KAAK,YAAcA,IACnB,KAAK,UAAY,GACjB,KAAK,WAAa,KAAK,QAAQ,WAAaA,EAEpD,EACOy1B,CACX,EAAEJ,CAAS,EACXp2C,EAAQ,UAAYu2C,EACpBv2C,EAAQ,WAAau2C,EACrBv2C,EAAQ,WAAaw2C,EACrBx2C,EAAQ,WAAau2C,EACrBv2C,EAAQ,WAAaw2C,CAErB,CAAC,EAED,IAAI,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,gBAAgB,uBAAuB,EAAG,SAAS11C,EAASd,EAASC,EAAO,CAAC,aACzK,IAAIqX,EAAa,MAAQ,KAAK,WAAe,UAAY,CACrD,IAAIC,EAAgB,SAAUC,EAAGC,EAAG,CAChC,OAAAF,EAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUC,EAAGC,EAAG,CAAED,EAAE,UAAYC,CAAG,GAC1E,SAAUD,EAAGC,EAAG,CAAE,QAASjK,KAAKiK,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGjK,CAAC,IAAGgK,EAAEhK,CAAC,EAAIiK,EAAEjK,CAAC,EAAG,EAC7F+J,EAAcC,EAAGC,CAAC,CAC7B,EACA,OAAO,SAAUD,EAAGC,EAAG,CACnB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5FF,EAAcC,EAAGC,CAAC,EAClB,SAASC,GAAK,CAAE,KAAK,YAAcF,CAAG,CACtCA,EAAE,UAAYC,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKC,EAAG,UAAYD,EAAE,UAAW,IAAIC,EACnF,CACJ,EAAG,EACC/N,EAAM7I,EAAQ,WAAW,EACzBkH,EAAMlH,EAAQ,WAAW,EACzBsQ,EAAQtQ,EAAQ,aAAa,EAC7B8H,EAAe9H,EAAQ,qBAAqB,EAAE,aAClDkH,EAAI,gBAAgB;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAAgvB,oBAAqB,EAAK,EAC9xB,IAAIyuC,EAA2B,UAAY,CACvC,SAASA,EAAUjxC,EAAQ6wC,EAAa,CACpC,KAAK,QAAUruC,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,SAAWquC,EACpC,KAAK,MAAQruC,EAAI,cAAc,KAAK,EACpC,KAAK,MAAM,UAAY,GACvB,KAAK,QAAQ,YAAY,KAAK,KAAK,EACnC,KAAK,aAAe,GACpB,KAAK,cAAgB,GACrBxC,EAAO,YAAY,KAAK,OAAO,EAC/B,KAAK,WAAW,EAAK,EACrB,KAAK,UAAY,GACjB4L,EAAM,0BAA0B,KAAK,QAAS,CAAC,IAAK,IAAK,GAAG,EAAG,KAAM,aAAa,CACtF,CACA,OAAAqlC,EAAU,UAAU,WAAa,SAAUH,EAAW,CAClD,KAAK,QAAQ,MAAM,QAAUA,EAAY,GAAK,OAC9C,KAAK,UAAYA,EACjB,KAAK,MAAQ,CACjB,EACOG,CACX,EAAE,EACF9sC,EAAI,UAAU8sC,EAAU,UAAW7tC,CAAY,EAC/C,IAAI2tC,EAA4B,SAAUh9B,EAAQ,CAC9CjC,EAAUi/B,EAAYh9B,CAAM,EAC5B,SAASg9B,EAAW/wC,EAAQsU,EAAU,CAClC,IAAI3H,EAAQoH,EAAO,KAAK,KAAM/T,EAAQ,IAAI,GAAK,KAC/C,OAAA2M,EAAM,UAAY,EAClBA,EAAM,aAAe,EACrBA,EAAM,OAAS3M,EACf2M,EAAM,MAAQA,EAAM,aACpBA,EAAM,SAAW2H,EACjB3H,EAAM,MAAM,MAAM,MAAQA,EAAM,QAAQ,MAAM,OAASA,EAAM,OAAS,IAAM,KAC5EA,EAAM,UAAY,EACXA,CACX,CACA,OAAAokC,EAAW,UAAU,YAAc,SAAUG,EAAO1tC,EAAG,CACnD,GAAI0tC,IAAU,aAEV,EAAAtlC,EAAM,UAAUpI,CAAC,IAAM,GAAKA,EAAE,SAAW,GAG7C,IAAIA,EAAE,SAAW,KAAK,MAAO,CACzB,IAAIqU,EAAO,KACPs5B,EAAa3tC,EAAE,QACf8V,EAAc,SAAU9V,EAAG,CAC3B2tC,EAAa3tC,EAAE,OACnB,EACIuG,EAAY,UAAY,CACxB,cAAcsN,CAAO,CACzB,EACI3M,EAASlH,EAAE,QACX4tC,EAAW,KAAK,SAChBC,EAAmB,UAAY,CAC/B,GAAIF,IAAe,OAEnB,KAAIlV,EAAYpkB,EAAK,sBAAsBu5B,EAAWD,EAAazmC,CAAM,EACrEuxB,IAAcpkB,EAAK,WAEvBA,EAAK,MAAM,SAAU,CAAE,KAAMokB,CAAU,CAAC,EAC5C,EACArwB,EAAM,QAAQ,KAAK,MAAO0N,EAAavP,CAAS,EAChD,IAAIsN,EAAU,YAAYg6B,EAAkB,EAAE,EAC9C,OAAOzlC,EAAM,eAAepI,CAAC,CACjC,CACA,IAAIqL,EAAMrL,EAAE,QAAU,KAAK,QAAQ,sBAAsB,EAAE,IAAM,KAAK,YAAc,EACpF,YAAK,MAAM,SAAU,CAAE,KAAM,KAAK,sBAAsBqL,CAAG,CAAE,CAAC,EACvDjD,EAAM,eAAepI,CAAC,EACjC,EACAutC,EAAW,UAAU,UAAY,UAAY,CACzC,OAAO,KAAK,MAChB,EACAA,EAAW,UAAU,sBAAwB,SAAUO,EAAU,CAC7D,IAAIrV,EAAYqV,GAAY,KAAK,WAAa,KAAK,aAAe,KAAK,YAAc,KAAK,aAC1F,OAAArV,EAAYA,GAAa,EACrBA,EAAY,EACZA,EAAY,EAEPA,EAAY,KAAK,WAAa,KAAK,aACxCA,EAAY,KAAK,WAAa,KAAK,YAEhCA,CACX,EACA8U,EAAW,UAAU,SAAW,UAAY,CACxC,OAAO,KAAK,IAAI,KAAK,UAAY,KAAK,MAAQ,EAAG,KAAK,WAAa,CAAC,CACxE,EACAA,EAAW,UAAU,UAAY,SAAU7D,EAAQ,CAC/C,KAAK,OAAS,KAAK,IAAI,EAAGA,CAAM,EAChC,KAAK,YAAc,KAAK,OACxB,KAAK,WAAa,KAAK,OACvB,KAAK,gBAAgB,KAAK,WAAY,EAAI,CAC9C,EACA6D,EAAW,UAAU,gBAAkB,SAAU7D,EAAQhR,EAAO,CACxD,KAAK,aAAegR,GAAU,CAAChR,IAEnC,KAAK,WAAagR,EAClB,KAAK,YAAc,KAAK,YAAc,KAAK,WAAa,KAAK,WACzD,KAAK,YAAc,KAAK,cACxB,KAAK,YAAc,KAAK,aACxB,KAAK,YAAc,KACnB,KAAK,YAAc,IACvB,KAAK,MAAM,MAAM,OAAS,KAAK,YAAc,KACzC,KAAK,UAAa,KAAK,WAAa,KAAK,aACzC,KAAK,UAAa,KAAK,WAAa,KAAK,WACrC,KAAK,UAAY,IACjB,KAAK,UAAY,GACrB,KAAK,MAAM,SAAU,CAAE,KAAM,KAAK,SAAU,CAAC,GAErD,EACA6D,EAAW,UAAU,aAAe,SAAU9U,EAAW,CACrD,KAAK,UAAYA,EACbA,EAAY,IACZA,EAAY,GAChB,KAAK,SAAWA,GAAa,KAAK,YAAc,KAAK,cAAgB,KAAK,WAAa,KAAK,YAC5F,KAAK,MAAM,MAAM,IAAM,KAAK,SAAW,IAC3C,EACO8U,CACX,EAAEE,CAAS,EACXF,EAAW,UAAU,eAAiBA,EAAW,UAAU,gBAC3D,IAAIC,EAA4B,SAAUj9B,EAAQ,CAC9CjC,EAAUk/B,EAAYj9B,CAAM,EAC5B,SAASi9B,EAAWhxC,EAAQsU,EAAU,CAClC,IAAI3H,EAAQoH,EAAO,KAAK,KAAM/T,EAAQ,IAAI,GAAK,KAC/C,OAAA2M,EAAM,WAAa,EACnBA,EAAM,YAAc,EACpBA,EAAM,OAASA,EAAM,cACrBA,EAAM,MAAM,MAAM,OAASA,EAAM,QAAQ,MAAM,QAAUA,EAAM,QAAU,IAAM,KAC/EA,EAAM,SAAW2H,EACV3H,CACX,CACA,OAAAqkC,EAAW,UAAU,YAAc,SAAUE,EAAO1tC,EAAG,CACnD,GAAI0tC,IAAU,aAEV,EAAAtlC,EAAM,UAAUpI,CAAC,IAAM,GAAKA,EAAE,SAAW,GAG7C,IAAIA,EAAE,SAAW,KAAK,MAAO,CACzB,IAAIqU,EAAO,KACP05B,EAAa/tC,EAAE,QACf8V,EAAc,SAAU9V,EAAG,CAC3B+tC,EAAa/tC,EAAE,OACnB,EACIuG,EAAY,UAAY,CACxB,cAAcsN,CAAO,CACzB,EACI5M,EAASjH,EAAE,QACXguC,EAAY,KAAK,UACjBH,EAAmB,UAAY,CAC/B,GAAIE,IAAe,OAEnB,KAAIh2B,EAAa1D,EAAK,wBAAwB25B,EAAYD,EAAa9mC,CAAM,EACzE8Q,IAAe1D,EAAK,YAExBA,EAAK,MAAM,SAAU,CAAE,KAAM0D,CAAW,CAAC,EAC7C,EACA3P,EAAM,QAAQ,KAAK,MAAO0N,EAAavP,CAAS,EAChD,IAAIsN,EAAU,YAAYg6B,EAAkB,EAAE,EAC9C,OAAOzlC,EAAM,eAAepI,CAAC,CACjC,CACA,IAAI2L,EAAO3L,EAAE,QAAU,KAAK,QAAQ,sBAAsB,EAAE,KAAO,KAAK,WAAa,EACrF,YAAK,MAAM,SAAU,CAAE,KAAM,KAAK,wBAAwB2L,CAAI,CAAE,CAAC,EAC1DvD,EAAM,eAAepI,CAAC,EACjC,EACAwtC,EAAW,UAAU,UAAY,UAAY,CACzC,OAAO,KAAK,UAAY,KAAK,OAAS,CAC1C,EACAA,EAAW,UAAU,wBAA0B,SAAUS,EAAW,CAChE,IAAIl2B,EAAak2B,GAAa,KAAK,UAAY,KAAK,YAAc,KAAK,WAAa,KAAK,YACzF,OAAAl2B,EAAaA,GAAc,EACvBA,EAAa,EACbA,EAAa,EAERA,EAAa,KAAK,UAAY,KAAK,YACxCA,EAAa,KAAK,UAAY,KAAK,WAEhCA,CACX,EACAy1B,EAAW,UAAU,SAAW,SAAUxtB,EAAO,CAC7C,KAAK,MAAQ,KAAK,IAAI,EAAGA,CAAK,EAC9B,KAAK,QAAQ,MAAM,MAAQ,KAAK,MAAQ,KACxC,KAAK,WAAa,KAAK,MACvB,KAAK,UAAY,KAAK,MACtB,KAAK,eAAe,KAAK,UAAW,EAAI,CAC5C,EACAwtB,EAAW,UAAU,eAAiB,SAAUxtB,EAAO0Y,EAAO,CACtD,KAAK,YAAc1Y,GAAS,CAAC0Y,IAEjC,KAAK,UAAY1Y,EACjB,KAAK,WAAa,KAAK,WAAa,KAAK,UAAY,KAAK,UACtD,KAAK,WAAa,KAAK,aACvB,KAAK,WAAa,KAAK,YACvB,KAAK,WAAa,KAClB,KAAK,WAAa,IACtB,KAAK,MAAM,MAAM,MAAQ,KAAK,WAAa,KACvC,KAAK,WAAc,KAAK,UAAY,KAAK,YACzC,KAAK,WAAc,KAAK,UAAY,KAAK,UACrC,KAAK,WAAa,IAClB,KAAK,WAAa,GACtB,KAAK,MAAM,SAAU,CAAE,KAAM,KAAK,UAAW,CAAC,GAEtD,EACAwtB,EAAW,UAAU,cAAgB,SAAUz1B,EAAY,CACvD,KAAK,WAAaA,EACdA,EAAa,IACbA,EAAa,GACjB,KAAK,UAAYA,GAAc,KAAK,WAAa,KAAK,aAAe,KAAK,UAAY,KAAK,WAC3F,KAAK,MAAM,MAAM,KAAQ,KAAK,UAAa,IAC/C,EACOy1B,CACX,EAAEC,CAAS,EACXD,EAAW,UAAU,cAAgBA,EAAW,UAAU,eAC1Dx2C,EAAQ,UAAYu2C,EACpBv2C,EAAQ,WAAau2C,EACrBv2C,EAAQ,WAAaw2C,EACrBx2C,EAAQ,WAAau2C,EACrBv2C,EAAQ,WAAaw2C,CAErB,CAAC,EAED,IAAI,OAAO,iBAAiB,CAAC,UAAU,UAAU,SAAS,eAAe,EAAG,SAAS11C,EAASd,EAASC,EAAO,CAAC,aAC/G,IAAImR,EAAQtQ,EAAQ,aAAa,EAC7Bo2C,EAA4B,UAAY,CACxC,SAASA,EAAWC,EAAUrmC,EAAK,CAC/B,KAAK,SAAWqmC,EAChB,KAAK,QAAU,GACf,KAAK,QAAU,EACf,KAAK,gBAAkB,EACvB,KAAK,OAASrmC,GAAO,OACrB,IAAInM,EAAQ,KACZ,KAAK,OAAS,SAAU+J,EAAI,CACxB/J,EAAM,QAAU,GAChB,IAAIyyC,EAAUzyC,EAAM,QAMpB,GALIyyC,IACAhmC,EAAM,UAAU,GAAG,EACnBzM,EAAM,QAAU,EAChBA,EAAM,SAASyyC,CAAO,GAEtBzyC,EAAM,QAAS,CACf,GAAIA,EAAM,kBAAoB,EAC1B,OACJA,EAAM,SAAS,CACnB,MAEIA,EAAM,gBAAkB,CAEhC,CACJ,CACA,OAAAuyC,EAAW,UAAU,SAAW,SAAUG,EAAQ,CAC9C,KAAK,QAAU,KAAK,QAAUA,EAC1B,KAAK,SAAW,CAAC,KAAK,UACtBjmC,EAAM,UAAU,KAAK,MAAM,EAC3B,KAAK,QAAU,GAEvB,EACA8lC,EAAW,UAAU,MAAQ,SAAUG,EAAQ,CAC3C,IAAID,EAAU,KAAK,QACnB,YAAK,QAAU,EACRA,CACX,EACOF,CACX,EAAE,EACFl3C,EAAQ,WAAak3C,CAErB,CAAC,EAED,IAAI,OAAO,yBAAyB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,eAAe,gBAAgB,oBAAoB,uBAAuB,EAAG,SAASp2C,EAASd,EAASC,EAAO,CAAC,IAAI0J,EAAM7I,EAAQ,YAAY,EACxOkH,EAAMlH,EAAQ,YAAY,EAC1B8J,EAAO9J,EAAQ,aAAa,EAC5BsQ,EAAQtQ,EAAQ,cAAc,EAC9BuE,EAAYvE,EAAQ,kBAAkB,EACtC8H,EAAe9H,EAAQ,sBAAsB,EAAE,aAC/Cw2C,EAAa,IACbC,EAAe,OAAO,gBAAkB,WACxChzB,EAAI,IACJizB,EAA6B,UAAY,CACzC,SAASA,EAAYlH,EAAU,CAC3B,KAAK,GAAKtoC,EAAI,cAAc,KAAK,EACjC,KAAK,sBAAsB,KAAK,GAAG,MAAO,EAAI,EAC9C,KAAK,MAAQA,EAAI,cAAc,KAAK,EACpC,KAAK,sBAAsB,KAAK,MAAM,KAAK,EAC3C,KAAK,aAAeA,EAAI,cAAc,KAAK,EAC3C,KAAK,sBAAsB,KAAK,aAAa,KAAK,EAClD,KAAK,GAAG,YAAY,KAAK,KAAK,EAC9B,KAAK,GAAG,YAAY,KAAK,YAAY,EACrCsoC,EAAS,YAAY,KAAK,EAAE,EAC5B,KAAK,aAAa,YAAc1lC,EAAK,aAAa,IAAK0sC,CAAU,EACjE,KAAK,eAAiB,CAAE,MAAO,EAAG,OAAQ,CAAE,EACxCC,EACA,KAAK,aAAa,EAElB,KAAK,oBAAoB,CACjC,CACA,OAAAC,EAAY,UAAU,sBAAwB,SAAUrwC,EAAOswC,EAAQ,CACnEtwC,EAAM,MAAQA,EAAM,OAAS,OAC7BA,EAAM,KAAOA,EAAM,IAAM,MACzBA,EAAM,WAAa,SACnBA,EAAM,SAAW,WACjBA,EAAM,WAAa,MACf9B,EAAU,KAAO,EACjB8B,EAAM,aAAa,EAAI,UAGvBA,EAAM,KAAO,UAEjBA,EAAM,SAAWswC,EAAS,SAAW,SACzC,EACAD,EAAY,UAAU,oBAAsB,SAAU7uB,EAAM,CAGxD,GAFIA,IAAS,SACTA,EAAO,KAAK,cAAc,GAC1BA,IAAS,KAAK,eAAe,QAAUA,EAAK,OAAS,KAAK,eAAe,SAAWA,EAAK,QAAS,CAClG,KAAK,aAAa,MAAM,WAAa,OACrC,IAAI+uB,EAAW,KAAK,cAAc,EAClC,KAAK,aAAa,MAAM,WAAa,GACrC,KAAK,eAAiB/uB,EACtB,KAAK,UAAY,OAAO,OAAO,IAAI,EACnC,KAAK,eAAiB+uB,GAAYA,EAAS,QAAU/uB,EAAK,OAAS+uB,EAAS,SAAW/uB,EAAK,OAC5F,KAAK,MAAM,sBAAuB,CAAE,KAAMA,CAAK,CAAC,CACpD,CACJ,EACA6uB,EAAY,UAAU,aAAe,UAAY,CAC7C,IAAIn6B,EAAO,KACX,KAAK,UAAY,IAAI,OAAO,eAAe,SAAUrU,EAAG,CACpDqU,EAAK,oBAAoB,CAC7B,CAAC,EACD,KAAK,UAAU,QAAQ,KAAK,YAAY,CAC5C,EACAm6B,EAAY,UAAU,iBAAmB,UAAY,CACjD,GAAI,KAAK,uBAAyB,KAAK,UACnC,OAAO,KAAK,sBAChB,IAAIn6B,EAAO,KACX,OAAO,KAAK,sBAAwBjM,EAAM,OAAO,SAAShG,GAAK,CAC3DiS,EAAK,oBAAoB,EACzBjM,EAAM,OAAOhG,EAAI,GAAG,CACxB,EAAG,GAAG,CACV,EACAosC,EAAY,UAAU,WAAa,SAAU11C,EAAK,CAC1CA,EACA,KAAK,iBAAiB,EAEjB,KAAK,wBACV,cAAc,KAAK,qBAAqB,EACxC,KAAK,sBAAwB,EAErC,EACA01C,EAAY,UAAU,cAAgB,SAAUjxC,EAAM,CAClD,IAAIoiB,EAAO,CACP,QAASpiB,GAAQ,KAAK,cAAc,aACpC,OAAQA,GAAQ,KAAK,cAAc,YAAc+wC,CACrD,EACA,OAAI3uB,EAAK,QAAU,GAAKA,EAAK,SAAW,EAC7B,KACJA,CACX,EACA6uB,EAAY,UAAU,kBAAoB,SAAU5xC,EAAI,CACpD,KAAK,MAAM,YAAcgF,EAAK,aAAahF,EAAI0xC,CAAU,EACzD,IAAIjwC,EAAO,KAAK,MAAM,sBAAsB,EAC5C,OAAOA,EAAK,MAAQiwC,CACxB,EACAE,EAAY,UAAU,kBAAoB,SAAU5xC,EAAI,CACpD,IAAIyb,EAAI,KAAK,UAAUzb,CAAE,EACzB,OAAIyb,IAAM,SACNA,EAAI,KAAK,UAAUzb,CAAE,EAAI,KAAK,kBAAkBA,CAAE,EAAI,KAAK,eAAe,OAEvEyb,CACX,EACAm2B,EAAY,UAAU,QAAU,UAAY,CACxC,cAAc,KAAK,qBAAqB,EACpC,KAAK,WACL,KAAK,UAAU,WAAW,EAC1B,KAAK,IAAM,KAAK,GAAG,YACnB,KAAK,GAAG,WAAW,YAAY,KAAK,EAAE,CAC9C,EACAA,EAAY,UAAU,SAAW,SAAUrxC,EAAS,CAChD,MAAI,CAACA,GAAW,CAACA,EAAQ,cACd,GACH,OAAO,OAAO,iBAAiBA,CAAO,EAAE,IAAO,GAAK,GAAK,KAAK,SAASA,EAAQ,aAAa,CACxG,EACAqxC,EAAY,UAAU,2BAA6B,UAAY,CAC3D,IAAIhjC,EAAI,SAAUA,EAAG5T,EAAG,CACpB,MAAO,CAAC,MAAO,CACP,MAAO,0BAA4B4T,EAAI,WAAa5T,EAAI,KAC5D,CAAC,CACT,EACA,KAAK,IAAMoH,EAAI,SAAS,CAACwM,EAAE,EAAG,CAAC,EAAGA,EAAE+P,EAAG,CAAC,EAAG/P,EAAE,EAAG+P,CAAC,EAAG/P,EAAE+P,EAAGA,CAAC,CAAC,EAAG,KAAK,EAAE,CACzE,EACAizB,EAAY,UAAU,qBAAuB,SAAUG,EAAWC,EAAO,CACrE,GAAID,EAAW,CACX,IAAIE,EAAO,KAAK,SAAS,KAAK,EAAE,EAChCF,EAAYG,EAAI,EAAID,EAAMF,CAAS,CACvC,CACA,SAASI,EAAMC,EAAIC,EAAIn8B,EAAG,CACtB,IAAIo8B,EAAMF,EAAG,CAAC,EAAIC,EAAG,CAAC,EAAID,EAAG,CAAC,EAAIC,EAAG,CAAC,EACtC,MAAO,EACF,CAACA,EAAG,CAAC,EAAIn8B,EAAE,CAAC,EAAIm8B,EAAG,CAAC,EAAIn8B,EAAE,CAAC,GAAKo8B,GAChC,CAACF,EAAG,CAAC,EAAIl8B,EAAE,CAAC,EAAIk8B,EAAG,CAAC,EAAIl8B,EAAE,CAAC,GAAKo8B,CACrC,CACJ,CACA,SAASC,EAAIv0C,EAAG6T,EAAG,CAAE,MAAO,CAAC7T,EAAE,CAAC,EAAI6T,EAAE,CAAC,EAAG7T,EAAE,CAAC,EAAI6T,EAAE,CAAC,CAAC,CAAG,CACxD,SAASnR,EAAI1C,EAAG6T,EAAG,CAAE,MAAO,CAAC7T,EAAE,CAAC,EAAI6T,EAAE,CAAC,EAAG7T,EAAE,CAAC,EAAI6T,EAAE,CAAC,CAAC,CAAG,CACxD,SAASqgC,EAAIl0C,EAAG6T,EAAG,CAAE,MAAO,CAAC7T,EAAI6T,EAAE,CAAC,EAAG7T,EAAI6T,EAAE,CAAC,CAAC,CAAG,CAC7C,KAAK,KACN,KAAK,2BAA2B,EACpC,SAASjK,EAAE3H,EAAI,CACX,IAAIiW,EAAIjW,EAAG,sBAAsB,EACjC,MAAO,CAACiW,EAAE,KAAMA,EAAE,GAAG,CACzB,CACA,IAAIlY,EAAI4J,EAAE,KAAK,IAAI,CAAC,CAAC,EACjBiK,EAAIjK,EAAE,KAAK,IAAI,CAAC,CAAC,EACjB2Z,EAAI3Z,EAAE,KAAK,IAAI,CAAC,CAAC,EACjBgK,EAAIhK,EAAE,KAAK,IAAI,CAAC,CAAC,EACjB4T,EAAI22B,EAAMI,EAAI3gC,EAAGC,CAAC,EAAG0gC,EAAI3gC,EAAG2P,CAAC,EAAGgxB,EAAI7xC,EAAImR,EAAG0P,CAAC,EAAG7gB,EAAIkR,EAAG5T,CAAC,CAAC,CAAC,EACzDkJ,EAAKgrC,EAAI,EAAI12B,EAAE,CAAC,EAAG+2B,EAAI1gC,EAAG7T,CAAC,CAAC,EAC5Bw0C,EAAKN,EAAI,EAAI12B,EAAE,CAAC,EAAG+2B,EAAIhxB,EAAGvjB,CAAC,CAAC,EAChC,GAAIg0C,EAAO,CACP,IAAIvpC,EAAIupC,EACJ/0C,EAAIue,EAAE,CAAC,EAAI/S,EAAE,CAAC,EAAIkW,EAAInD,EAAE,CAAC,EAAI/S,EAAE,CAAC,EAAIkW,EAAI,EACxC8zB,EAAK/xC,EAAIwxC,EAAIzpC,EAAE,CAAC,EAAGvB,CAAE,EAAGgrC,EAAIzpC,EAAE,CAAC,EAAG+pC,CAAE,CAAC,EACzC,OAAO9xC,EAAIwxC,EAAI,EAAIj1C,EAAI0hB,EAAG8zB,CAAE,EAAGz0C,CAAC,CACpC,CACA,IAAI00C,EAAIH,EAAIR,EAAW/zC,CAAC,EACpB20C,EAAIR,EAAMI,EAAIrrC,EAAIgrC,EAAI12B,EAAE,CAAC,EAAGk3B,CAAC,CAAC,EAAGH,EAAIC,EAAIN,EAAI12B,EAAE,CAAC,EAAGk3B,CAAC,CAAC,EAAGA,CAAC,EAC7D,OAAOR,EAAIvzB,EAAGg0B,CAAC,CACnB,EACOf,CACX,EAAE,EACFA,EAAY,UAAU,eAAiB,CAAE,MAAO,EAAG,OAAQ,CAAE,EAC7D7tC,EAAI,UAAU6tC,EAAY,UAAW5uC,CAAY,EACjD5I,EAAQ,YAAcw3C,CAEtB,CAAC,EAED,IAAI,OAAO,qBAAqB,CAAC,UAAU,UAAU,QAAQ,EAAG,SAAS12C,EAASd,EAASC,EAAO,CAWlGA,EAAO,QAAU;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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C,MAAO,QACP,MAAO,GACP,KAAM,UACV,CACJ,EACA,MAAS,CACL,CACI,MAAO,0BACP,MAAO,2CACX,EAAG,CACC,MAAO,gBACP,MAAO,cACP,KAAM,UACV,EAAG,CACC,MAAO,UACP,MAAO,+CACX,EAAG,CACC,MAAO,2BACP,MAAO,+CACX,EAAG,CACC,MAAO,8BACP,MAAO,IACX,EAAG,CACC,MAAO,2BACP,MAAO,QACP,KAAM,uBACV,EAAG,CACC,MAAO,QACP,MAAO,IACP,KAAM,UACV,EAAG,CACC,aAAc,eAClB,CACJ,EACA,sBAAyB,CACrB,CACI,MAAO,oCACP,MAAO,2CACX,EAAG,CACC,MAAO,2BACP,MAAO,IACP,KAAM,OACV,EAAG,CACC,MAAO,2BACP,MAAO,GACX,EAAG,CACC,MAAO,QACP,MAAO,IACP,KAAM,UACV,EAAG,CACC,aAAc,+BAClB,CACJ,EACA,kBAAqB,CACjB,CACI,MAAO,SACP,MAAO,SACP,KAAM,CACF,CACI,MAAO,SACP,MAAO,MACP,KAAM,KACV,EAAG,CACC,QAAS,SACb,CACJ,CACJ,EAAG,CACC,MAAO,SACP,MAAO,SACP,KAAM,CACF,CACI,MAAO,SACP,MAAO,MACP,KAAM,KACV,EAAG,CACC,QAAS,UACb,CACJ,CACJ,EAAG,CACC,MAAO,oBACP,MAAO,6BACX,EAAG,CACC,QAAS,mBACb,EAAG,CACC,MAAO,uBACP,MAAO,IACP,KAAM,oBACV,EAAG,CACC,MAAO,OACP,MAAO,MACX,EAAG,CACC,MAAO,uBACP,MAAO,GACX,EAAG,CACC,MAAO,QACP,MAAO,GACP,KAAM,UACV,CACJ,EACA,mBAAsB,CAClBA,EAAS,oBAAoB,EAC7B,CACI,MAAO,qBACP,MAAOT,CACX,EAAG,CACC,MAAO,uBACP,MAAO,GACX,EAAG,CACC,MAAO,OACP,MAAO,MACX,EAAG,CACC,MAAO,uBACP,MAAO,GACX,EAAG,CACC,MAAO,QACP,MAAO,GACP,KAAM,UACV,CACJ,EACA,SAAY,CACR,CACI,MAAO,2BACP,MAAOM,CACX,EAAG,CACC,MAAO,SACP,MAAO,QA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",
  "names": ["require_ace", "__commonJSMin", "exports", "module", "ACE_NAMESPACE", "global", "define", "deps", "payload", "_require", "parentId", "callback", "lookup", "params", "l", "dep", "require", "packagedModule", "normalizeModule", "moduleName", "chunks", "base", "previous", "mod", "req", "returnValue", "exportAce", "ns", "root", "defineProp", "obj", "name", "val", "searchString", "position", "subjectString", "lastIndex", "count", "result", "string", "str", "target", "output", "index", "source", "key", "o", "k", "predicate", "len", "thisArg", "kValue", "item", "value", "O", "start", "relativeStart", "end", "relativeEnd", "final", "deepCopy", "copy", "a", "trimBeginRegexp", "trimEndRegexp", "array", "i", "arr", "map", "props", "regExp", "matches", "fcn", "timer", "deferred", "timeout", "defaultTimeout", "_self", "ms", "resolve", "line", "last", "supportsUnicodeFlag", "_navigator", "os", "ua", "appName", "useragent", "XHTML_NS", "buildDom", "parent", "refs", "txt", "els", "ch", "el", "options", "childIndex", "n", "doc", "tag", "element", "textContent", "classes", "add", "node", "className", "include", "id", "sheets", "strictCSP", "cssCache", "insertPendingStyles", "cache", "importCssString", "cssText", "container", "style", "uri", "rect", "inner", "outer", "body", "noScrollbar", "withScrollbar", "styles", "property", "div", "tx", "ty", "dom", "url", "xhr", "path", "head", "s", "_", "isAbort", "ctor", "superCtor", "mixin", "proto", "EventEmitter", "stopPropagation", "preventDefault", "eventName", "e", "listeners", "defaultHandler", "newCallback", "handlers", "old", "disabled", "capturing", "msg", "data", "defaultEnglishMessages", "oop", "reportError", "optionsProvider", "optList", "optionNames", "opt", "warn", "message", "messages", "nlsPlaceholders", "AppConfig", "opts", "optionHash", "defaultString", "translated", "dollarMatch", "curlyBracketMatch", "lang", "net", "component", "parts", "sep", "re", "subst", "loader", "cb", "customLoader", "moduleId", "onLoad", "loadedModule", "moduleType", "load", "afterLoad", "err", "reportErrorIfPathIsNotConfigured", "config", "ace", "init", "packaged", "scriptOptions", "scriptUrl", "currentScript", "currentDocument", "scripts", "script", "src", "attributes", "j", "attr", "deHyphenate", "m", "m1", "Range", "startRow", "startColumn", "endRow", "endColumn", "range", "row", "column", "cmp", "p", "firstRow", "lastRow", "session", "screenPosStart", "screenPosEnd", "p1", "p2", "Keys", "codeToKeyCode", "chr", "modifiers", "mods", "x", "keyCode", "keyString", "keys", "pressedKeys", "ts", "activeListenerOptions", "detectListenerOptionsSupport", "getListenerOptions", "EventListener", "elem", "type", "removeListener", "addListener", "destroyer", "eventHandler", "releaseCaptureHandler", "ownerDocument", "onMouseUp", "factor", "deltaX", "deltaY", "linePixels", "pagePixels", "elements", "timeouts", "callbackName", "clicks", "startX", "startY", "eventNames", "onMousedown", "isNewClick", "getModifierHash", "normalizeCommandKeys", "hashId", "location", "dt", "lastDefaultPrevented", "resetPressedKeys", "postMessageId", "win", "messageName", "listener", "handler", "delay", "$cancelT", "event", "nls", "clipboard", "BROKEN_SETDATA", "USE_IE_MIME_TYPE", "HAS_FOCUS_ARGS", "MAX_LINE_LENGTH", "KEYS", "MODS", "isIOS", "valueResetRegex", "isMobile", "TextInput", "parentNode", "host", "_this", "curOp", "commandName", "isUserAction", "text", "typingResetTimeout", "typing", "detectArrowKeys", "selectionStart", "selectionEnd", "modifier", "command", "isCut", "forceIEMime", "clipboardData", "mime", "inserted", "fromInput", "extendLeft", "extendRight", "restoreStart", "restoreEnd", "endIndex", "shouldReset", "isAllSelected", "newValue", "positionToSelection", "selection", "lines", "prevLine", "nextLine", "newHost", "number", "ariaLabel", "top", "isTransformed", "ancestors", "t", "readOnly", "bringToFront", "left", "maxTop", "move", "_isMobile", "_isIOS", "DRAG_OFFSET", "SCROLL_COOLDOWN_T", "DefaultHandlers", "mouseHandler", "editor", "ev", "inSelection", "pos", "button", "selectionRange", "selectionEmpty", "waitForClickSelection", "anchor", "cursor", "orientedRange", "calcRangeOrientation", "unitName", "cmpStart", "cmpEnd", "distance", "calcDistance", "time", "prevScroll", "vx", "vy", "direction", "canScroll", "isSlower", "ax", "ay", "bx", "by", "MouseEvent", "domEvent", "documentRow", "screenRow", "screenTopRow", "contentOverflows", "__extends", "extendStatics", "d", "b", "__", "__values", "preventParentScroll", "CLASSNAME", "Tooltip", "html", "y", "theme", "PopupManager", "popup", "e_1", "_a", "e_2", "_b", "visiblepopups", "_c", "_d", "shouldDisplay", "visiblepopups_1", "visiblepopups_1_1", "visiblePopup", "e_2_1", "e_1_1", "popupA", "popupB", "rectA", "rectB", "popupManager", "HoverTooltip", "_super", "isMousePressed", "docPos", "screenPos", "clippedPos", "domNode", "startingEvent", "renderer", "withMarker", "MARGIN", "labelHeight", "labelWidth", "anchorTop", "anchorLeft", "spaceBelow", "isAbove", "GutterHandler", "gutter", "GutterTooltip", "gutterRegion", "aceEvent", "annotationsInRow", "annotation", "fold", "annotationsInFold", "severityRank", "mostSevereAnnotationTypeInFold", "annotationType", "summaryFoldedAnnotations", "annotationMessages", "iconClassName", "lineElement", "iconElement", "tooltipElement", "annotationNode", "_ignoredPosition", "_withMarker", "gutterCell", "anchorEl", "r", "cell", "annotations", "summary", "annotationTypes", "annotationTypes_1", "annotationTypes_1_1", "label", "AUTOSCROLL_DELAY", "SCROLL_CURSOR_DELAY", "SCROLL_CURSOR_HYSTERESIS", "DragdropHandler", "dragImage", "mouseTarget", "dragSelectionMarker", "timerId", "dragCursor", "counter", "dragOperation", "isInternal", "autoScrollStartTime", "cursorMovedTime", "cursorPointOnCaretMoved", "self", "dataTransfer", "dropEffect", "canAccept", "addDragMarker", "getDropEffect", "onMouseMoveTimer", "clearDragMarker", "dropData", "scrollCursorIntoView", "prevCursor", "now", "vMovement", "hMovement", "autoScroll", "lineHeight", "characterWidth", "editorRect", "offsets", "nearestXOffset", "nearestYOffset", "scrollCursor", "vScroll", "hScroll", "onDragInterval", "onMouseMove", "types", "copyAllowed", "moveAllowed", "copyModifierState", "effectAllowed", "interval", "cursorStyle", "clickCount", "eventTarget", "mode", "touchStartT", "lastT", "longTouchTimer", "animationTimer", "animationSteps", "vX", "vY", "pressed", "contextMenu", "createContextMenu", "isOpen", "updateMenu", "selected", "hasUndo", "canExecuteCommand", "cmd", "handleClick", "action", "showContextMenu", "hideContextMenu", "pagePos", "leftOffset", "scrollLeft", "handleLongTap", "switchToSelectionMode", "textarea", "touches", "h", "w", "touchObj", "cursorPos", "anchorPos", "offsetTop", "offsetLeft", "weightedDistance", "diff1", "diff2", "animate", "wheelX", "wheelY", "mouseEvent", "oldScrollTop", "DefaultGutterHandler", "addTouchListeners", "MouseHandler", "focusEditor", "windowBlurred", "gutterEl", "character", "state", "mouseMoveHandler", "continueCapture", "onCaptureEnd", "onOperationEnd", "onCaptureUpdate", "onCaptureInterval", "stop", "FoldHandler", "keyUtil", "KeyBinding", "kb", "toExecute", "success", "commands", "ArabicAlefBetIntervalsBegine", "ArabicAlefBetIntervalsEnd", "dir", "hiLevel", "lastArabic", "hasUBAT_AL", "hasUBAT_B", "hasUBAT_S", "hasBlockSep", "hasSegSep", "impTab_LTR", "impTab_RTL", "LTR", "RTL", "L", "R", "EN", "AN", "ON", "B", "S", "AL", "WS", "CS", "ES", "ET", "NSM", "LRE", "RLE", "PDF", "LRO", "RLO", "BN", "UnicodeTBL00", "UnicodeTBL20", "_computeLevels", "chars", "levels", "charTypes", "impTab", "prevState", "newClass", "newLevel", "newState", "cond", "condPos", "ix", "_getCharacterType", "_getCharClass", "_invertLevel", "lev", "_array", "lo", "hi", "tmp", "cType", "wType", "nType", "c", "rtlCandidate", "uc", "_isArabicDiacritics", "textCharTypes", "isRtl", "logicalFromVisual", "bidiLevels", "ret", "logIdx", "rowMap", "bidiUtil", "bidiRE", "BidiHandler", "docRow", "splitIndex", "delta", "rowCache", "currentIndex", "prevIndex", "isLastRow", "endOfLine", "splits", "shift", "size", "fontMetrics", "bidiCharWidth", "showInvisibles", "eolChar", "width", "isRtlDir", "col", "leftBoundary", "logicalIdx", "visualIdx", "startCol", "endCol", "level", "selections", "offset", "selColMin", "selColMax", "isSelected", "isSelectedPrev", "visIdx", "posX", "charWidth", "Selection", "lead", "reverse", "anchorRow", "anchorColumn", "cursorRow", "cursorColumn", "wasEmpty", "wasMultiselect", "mover", "excludeLastChar", "rowStart", "rowEnd", "foldLine", "tabSize", "firstColumnPosition", "beforeCursor", "leadingSpace", "lineEnd", "textEnd", "rightOfCursor", "leftOfCursor", "whitespaceRe", "tokenRe", "rows", "offsetX", "widget", "keepDesiredColumn", "func", "r1", "MAX_TOKEN_COUNT", "Tokenizer", "rules", "ruleRegExps", "matchTotal", "mapping", "flag", "splitterRurles", "rule", "adjustedregex", "matchcount", "match", "digit", "values", "tokens", "stack", "inChClass", "lastCapture", "esc", "parenOpen", "parenClose", "square", "startState", "currentState", "matchAttempts", "token", "skipped", "TextHighlightRules", "prefix", "HighlightRules", "escapeRules", "states", "append", "embedRules", "addRules", "pushState", "popState", "processState", "toInsert", "next", "stateName", "includeName", "args", "defaultToken", "ignoreCase", "splitChar", "keywords", "list", "word", "Behaviour", "behaviours", "filter", "TokenIterator", "initialRow", "initialColumn", "rowCount", "rowTokens", "tokenIndex", "SAFE_INSERT_IN_TOKENS", "SAFE_INSERT_BEFORE_TOKENS", "context", "contextCache", "defaultQuotes", "initContext", "getWrapped", "opening", "closing", "rowDiff", "CstyleBehaviour", "excludeTokens", "rightChar", "matching", "openBracePos", "next_indent", "indent", "quotes", "quote", "leftChar", "rightToken", "stringBefore", "stringAfter", "pair", "wordRe", "isWordBefore", "isWordAfter", "pairQuotesAfter", "shouldPairQuotes", "charBefore", "currentToken", "nextToken", "cursorPosInToken", "closeDocPos", "openDocPos", "iterator", "iterator2", "bracket", "wordChars", "code", "unicode", "Mode", "ignoreBlankLines", "shouldRemove", "minIndent", "insertAtTabStop", "regexpStart", "lineCommentStart", "uncomment", "shouldInsertSpace", "commentWithSpace", "comment", "testRemove", "before", "after", "spaces", "lineCommentEnd", "regexpEnd", "iter", "fun", "minEmptyLength", "sel", "initialRange", "colDiff", "startRange", "endRange", "tab", "input", "delegations", "_loop_1", "scope", "functionName", "this_1", "method", "language", "split", "param", "completionKeywords", "ruleItr", "aLength", "LineWidgets", "screenRows", "lineWidgets", "hide", "removed", "noWidgets", "w1", "changedWidgets", "min", "first", "throwDeltaError", "errorText", "positionInDocument", "docLines", "validateDelta", "numRangeRows", "numRangeLastLineChars", "doNotValidate", "Anchor", "point", "$getTransformedPoint", "noClip", "$pointsInOrder", "point1", "point2", "equalPointsInOrder", "bColIsAfter", "moveIfEqual", "deltaIsInsert", "deltaRowShift", "deltaColShift", "deltaStart", "deltaEnd", "applyDelta", "Document", "textOrLines", "newLineMode", "length", "deleteFirstNewLine", "deleteLastNewLine", "deletedLines", "deltas", "isInsert", "docLength", "MAX", "from", "to", "chunk", "newlineLength", "BackgroundTokenizer", "tokenizer", "workerStart", "currentLine", "endLine", "startLine", "processedLines", "SearchHighlight", "clazz", "markerLayer", "renderedMarkerRanges", "_search", "mtSearch", "ranges", "end_row", "rangeToAddMarkerTo", "rangeAsString", "UndoManager", "allowMerge", "undoStackLength", "rev", "dontSelect", "rearrangeUndoStack", "deltaSet", "undoSelectionRange", "diff", "rebaseRedoStack", "redoSelectionRange", "nextDelta", "json", "stringifyDelta", "swapped", "swapGroups", "comparePoints", "$updateMarkers", "rowShift", "colShift", "cmp2", "clonePos", "cloneDelta", "stringifyRange", "swap", "d1", "d2", "i1", "i2", "ds1", "ds2", "xform", "c1", "splitDelta", "shiftPos", "rowsBefore", "otherLines", "rest", "moveDeltasByOne", "redoStack", "xformed", "deltaSets", "FoldLine", "foldData", "folds", "lastEnd", "isNewRow", "foldBefore", "newFoldLine", "foldLineNext", "idx", "lastFoldEndColumn", "RangeList", "excludeEdges", "startIndex", "clipped", "lineDif", "Fold", "placeholder", "subFold", "consumeRange", "afterStart", "firstConsumed", "consumedFolds", "restoreRange", "consumePoint", "restorePoint", "Folding", "side", "foldLines", "foundFolds", "trim", "lastFold", "startFoldLine", "added", "startFold", "endFold", "cloneFolds", "expandInner", "outermostFolds", "startFoldRow", "textLine", "lastColumn", "fd", "tryToUnfold", "bracketPos", "initState", "depth", "test", "foldWidgets", "foldMode", "ignoreCurrent", "fw", "firstRange", "toggleParent", "BracketMatch", "charBeforeCursor", "isBackwards", "bracketsRegExp", "typeRe", "openBracket", "valueIndex", "closingBracket", "valueLength", "prevToken", "found", "backward", "currentTag", "openTagStart", "openTagName", "foundOpenTagEnd", "openTagEnd", "closeTagStart", "closeTagName", "closeTagEnd", "stepCount", "tmpToken", "TextMode", "EditSession", "commandEvent", "currentSelection", "widgetManager", "cacheArray", "low", "mid", "removedFolds", "undoManager", "editSession", "navigateWithinSoftTabs", "overwrite", "inFront", "marker", "markerId", "markers", "highlight", "inToken", "wordRange", "useWorker", "$isPlaceholder", "oldMode", "onReloadTokenizer", "scrollTop", "force", "longestScreenLine", "foldIndex", "foldStart", "enable", "isUndo", "fromRange", "toPosition", "toRange", "collDiff", "oldStart", "newStart", "indentString", "rowRange", "deleteRange", "useWrapMode", "max", "desiredLimit", "$printMargin", "limits", "wrapLimit", "limit", "foldLineBefore", "wrapData", "walkTokens", "PLACEHOLDER_START", "PLACEHOLDER_BODY", "displayLength", "lastSplit", "lastDocSplit", "isCode", "indentedSoftWrap", "maxIndent", "getWrapIndent", "indentation", "SPACE", "TAB", "TAB_SPACE", "addSplit", "minSplit", "PUNCTUATION", "CHAR_EXT", "isFullWidth", "CHAR", "maxScreenColumn", "screenColumn", "docColumn", "rowLength", "doCache", "maxRow", "wrapIndent", "foldStartRow", "wrapRow", "screenRowOffset", "fm", "Search", "sr", "sc", "er", "ec", "prevRange", "lng", "replaceString", "CharCode", "replacement", "chCode", "nextChCode", "nextChCode_1", "$disableFakeMultiline", "needle", "addWordBoundary", "chunkEnd", "beforeMatch", "matchedText", "endMargin", "multiLineBackwardMatch", "mtForward", "mtBackward", "backwards", "skipCurrent", "forEach", "forEachInLine", "supportsLookbehind", "wordBoundary", "firstChar", "wordRegExp", "needleArray", "lastChar", "newMatch", "startPosition", "targetIndex", "targetPosition", "targetLine", "KEY_MODS", "MultiHashHandler", "platform", "$singleCommand", "keepCommand", "ckb", "keyId", "cmdGroup", "keyPart", "chain", "binding", "getPosition", "other", "otherPos", "keyList", "HashHandler", "CommandManager", "bindKey", "mac", "cutLine", "firstLineEndCol", "selectedText", "selectedCount", "insertLine", "curLine", "newRanges", "GutterKeyboardHandler", "nearestFoldLaneWidgetIndex", "nearestAnnotationIndex", "futureActiveRowIndex", "GutterKeyboardEvent", "customWidget", "isRowFullyVisible", "isIconVisible", "foldWidget", "num1", "num2", "desinationLane", "annotationIndex", "foldLaneWidgetIndex", "gutterKeyboardHandler", "defaultCommands", "Editor", "scrollIntoView", "prev", "mergeableCommands", "shouldMerge", "keyboardHandler", "oldSession", "incluude", "tagNamesRanges", "markerType", "wrap", "wordWithBoundary", "nl", "copyLine", "lineMode", "isFullLine", "pasted", "transform", "lineState", "shouldOutdent", "lineIndent", "prevLineState", "currIndent", "composition", "applyComposition", "speed", "dragDelay", "shouldHighlight", "shouldAnimate", "display", "showPrintMargin", "enabled", "show", "fade", "new_range", "originalRange", "_numberRx", "amount", "charRange", "nr", "fp", "decimals", "nnr", "replaceRange", "currWordStart", "wordParts", "curLength", "itLength", "that", "wordPairs", "reg", "negate", "firstCondition", "secondCondition", "res", "columnPosition", "previousPosition", "currentPosition", "wordParts_1", "wordParts_1_1", "endPoint", "moved", "totalDiff", "rangeIndex", "subRows", "compositionState", "select", "center", "expand", "tokenCount", "matchType", "bracketType", "brackets", "tagsRanges", "lineNumber", "times", "replaced", "newRange", "shouldScroll", "scrollAnchor", "onChangeSelection", "onBeforeRender", "onAfterRender", "cursorLayer", "shouldShow", "textArea", "relativeNumberRenderer", "hasValue", "blurCommand", "focusOnEnterKeyup", "lastLineNumber", "Lines", "canvasHeight", "oldConfig", "newConfig", "screenTop", "screenPage", "lineTop", "fragment", "initElement", "Gutter", "parentEl", "rowInfo", "annoText", "displayAnnoText", "annoType", "onCreateCell", "gutterRenderer", "firstLineNumber", "lastLineText", "gutterWidth", "padding", "cells", "oldLastRow", "textNode", "annotationIconNode", "breakpoints", "decorations", "rowText", "foldClass", "isClosedFold", "foldAnnotationClass", "annotationInFold", "foldRange", "customWidgetAttributes", "highlightGutterLine", "rowCell", "title", "callbacks", "Marker", "css", "layerConfig", "stringBuilder", "extraStyle", "curr", "lineRange", "getBorderClass", "height", "range1", "radiusClass", "extraLength", "tl", "tr", "br", "bl", "textTokens", "tokenType", "isTextToken", "Text", "unixMode", "EOL_CHAR", "measure", "tabStr", "span", "spaceClass", "spaceContent", "tabClass", "tabContent", "lineElements", "lineElementsIdx", "heightChanged", "lineEl", "valueFragment", "simpleSpace", "controlCharacter", "cjkSpace", "cjk", "cols", "tabSpan", "initialIndent", "elementIndentLevel", "bracketHighlight", "currentIndent", "activeIndentGuides", "indentLevel", "childNodes", "splitChars", "overflowEl", "lastLineEl", "invisibleEl", "renderTokens", "addTokens", "Cursor", "cursors", "blinking", "blinkInterval", "smoothBlinking", "update", "blink", "onScreen", "cursorLeft", "cursorTop", "pixelPos", "cursorIndex", "MAX_SCROLL_H", "Scrollbar", "classSuffix", "isVisible", "VScrollBar", "HScrollBar", "ScrollBar", "eType", "mousePageY", "startTop", "onScrollInterval", "thumbTop", "mousePageX", "startLeft", "thumbLeft", "RenderLoop", "onRender", "changes", "change", "CHAR_COUNT", "USE_OBSERVER", "FontMetrics", "isRoot", "boldSize", "clientPos", "elPos", "zoom", "mul", "solve", "l1", "l2", "det", "sub", "m2", "ut", "u", "f", "Decorator", "scrollbarV", "colors", "ctx", "compare", "priorities", "offset1", "offset2", "y1", "y2", "ycenter", "halfHeight", "zoneHeight", "currentY", "GutterLayer", "MarkerLayer", "TextLayer", "CursorLayer", "HScrollBarCustom", "VScrollBarCustom", "editorCss", "VirtualRenderer", "textLayer", "oldSize", "right", "availableWidth", "printMarginColumn", "containerEl", "posTop", "posLeft", "bottom", "sm", "alwaysVisible", "scrollHeight", "scrollerHeight", "st", "maxHeight", "desiredHeight", "hideScrollbars", "screenLines", "longestLine", "horizScroll", "hScrollChanged", "vScrollBefore", "minHeight", "scrollPastEnd", "vScrollChanged", "lineCount", "firstRowScreen", "firstRowHeight", "charCount", "$viewMargin", "newLeft", "newTop", "topMargin", "bottomMargin", "currentTop", "currentLeft", "twoCharsWidth", "alignment", "fromValue", "toValue", "steps", "x_min", "dx", "initialScroll", "oldSteps", "endAnimation", "canvasPos", "insertPosition", "textChunks", "widgetDiv", "hiddenTokens", "lastLineDiv", "chunkDiv", "chunkSpan", "pixelPosition", "ghostTextHeight", "fitsY", "textLines", "displayTokens", "wrapSplits", "textSlice", "newToken", "hasPassedCursor", "showGutterCursor", "$workerBlob", "workerUrl", "BlobBuilder", "blobBuilder", "createWorker", "blob", "URL", "blobURL", "WorkerClient", "worker", "topLevelNamespaces", "classname", "importScripts", "normalizePath", "tlns", "ex", "q", "UIWorkerClient", "main", "emitSync", "sender", "messageBuffer", "workerClient", "processNext", "callbackId", "Main", "PlaceHolder", "others", "mainClass", "othersClass", "undoStack", "lengthDiff", "inMainRange", "distanceFromStart", "newPos", "updateMarker", "undosRequired", "isSamePoint", "onMouseDown", "alt", "ctrl", "accel", "isMultiSelect", "mouseX", "mouseY", "onMouseSelection", "screenAnchor", "screenCursor", "selectionMode", "oldRange", "tmpSel", "rectSel", "blockSelect", "newCursor", "onMouseSelectionEnd", "onSelectionInterval", "search", "find", "$blockChangeEvents", "lastRange", "includeEmptyLines", "xBackwards", "startOffsetX", "endOffsetX", "yBackwards", "docEnd", "markerList", "keepOrder", "$byLines", "rangeList", "cmdResult", "anim", "buf", "additive", "skip", "screenLead", "toRemove", "all", "tmp_1", "words", "stopAtFirst", "sameRowRanges", "fr", "lr", "guessRange", "maxCol", "minSpace", "spaceOffsets", "spaceOffset", "forceLeft", "isLeftAligned", "isRightAligned", "startW", "textW", "endW", "alignLeft", "alignRight", "unAlign", "MultiSelect", "addAltCursorListeners", "altCursor", "altDown", "reset", "FoldMode", "foldStyle", "startLevel", "binarySearch", "comparator", "findAnnotations", "matched", "oldWidget", "gutterAnno", "arrow", "annoTextLine", "Renderer", "_id", "oldNode", "env", "version", "require_mode_html", "__commonJSMin", "exports", "module", "require", "oop", "TextHighlightRules", "JsDocCommentHighlightRules", "start", "DocCommentHighlightRules", "identifierRe", "JavaScriptHighlightRules", "options", "keywords", "keywordMapper", "kwBeforeRe", "escapedRe", "anonymousFunctionRe", "functionCallStartRule", "comments", "val", "state", "stack", "JSX", "tagRegex", "jsxTag", "offset", "jsxJsRule", "value", "currentState", "next", "Range", "MatchingBraceOutdent", "line", "input", "doc", "row", "match", "column", "openBracePos", "indent", "Behaviour", "TokenIterator", "is", "token", "type", "XmlBehaviour", "action", "editor", "session", "text", "quote", "selected", "cursor", "rightChar", "iterator", "rightSpace", "range", "position", "tokenEndColumn", "nextToken", "tokenRow", "tokenColumn", "element", "tag", "nextIndent", "CstyleBehaviour", "JavaScriptBehaviour", "xmlBehaviours", "BaseFoldMode", "FoldMode", "voidElements", "optionalEndTags", "Tag", "foldStyle", "tokens", "tagName", "startColumn", "i", "firstTag", "tags", "commentRegex", "fw", "forceMultiline", "startIndent", "startRow", "endRow", "maxRow", "subRange", "re", "depth", "m", "XmlFoldMode", "CFoldMode", "TextMode", "WorkerClient", "JavaScriptFoldMode", "Mode", "tab", "tokenizedLine", "endState", "worker", "results", "lang", "supportType", "supportFunction", "supportConstant", "supportConstantColor", "supportConstantFonts", "numRe", "pseudoElements", "pseudoClasses", "CssHighlightRules", "propertyMap", "CssCompletions", "style", "name", "x", "pos", "prefix", "inParens", "skipSemicolon", "properties", "property", "values", "CssBehaviour", "CStyleFoldMode", "e", "XmlHighlightRules", "normalize", "HighlightRules", "tagMap", "HtmlHighlightRules", "group", "defaultMode", "subModes", "key", "mode", "MixedFoldMode", "optionalTags", "commonAttributes", "eventAttributes", "globalAttributes", "attributeMap", "elements", "findTagName", "findAttributeName", "HtmlCompletions", "attributes", "attribute", "attributeName", "JavaScriptMode", "CssMode", "HtmlFoldMode", "import_ace", "import_mode_html", "textarea", "editor_element", "editor", "ace", "e", "data", "add_event_listener", "type", "selector", "callback", "e", "target", "add_event_listener_change", "selector", "callback", "add_event_listener", "add_event_listener_change", "e", "target", "max", "file"]
}
