iobroker.admin 7.4.13 → 7.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/adminWww/asset-manifest.json +23 -26
- package/adminWww/index.html +1 -1
- package/adminWww/static/js/{1809.3970d4d2.chunk.js → 1809.797e6d9a.chunk.js} +3 -3
- package/adminWww/static/js/1809.797e6d9a.chunk.js.map +1 -0
- package/adminWww/static/js/288.b83253b7.chunk.js +2 -0
- package/adminWww/static/js/288.b83253b7.chunk.js.map +1 -0
- package/adminWww/static/js/3849.c8d3a754.chunk.js +2 -0
- package/adminWww/static/js/3849.c8d3a754.chunk.js.map +1 -0
- package/adminWww/static/js/4289.3fbd195d.chunk.js +2 -0
- package/adminWww/static/js/4289.3fbd195d.chunk.js.map +1 -0
- package/adminWww/static/js/471.c7298807.chunk.js +2 -0
- package/adminWww/static/js/471.c7298807.chunk.js.map +1 -0
- package/adminWww/static/js/6603.eaf9efa3.chunk.js +3 -0
- package/adminWww/static/js/6603.eaf9efa3.chunk.js.map +1 -0
- package/adminWww/static/js/{6853.1d96bb1c.chunk.js → 6853.c817c98e.chunk.js} +2 -2
- package/adminWww/static/js/6853.c817c98e.chunk.js.map +1 -0
- package/adminWww/static/js/7424.38cdae41.chunk.js +2 -0
- package/adminWww/static/js/7424.38cdae41.chunk.js.map +1 -0
- package/adminWww/static/js/7435.0f078b05.chunk.js +2 -0
- package/adminWww/static/js/7435.0f078b05.chunk.js.map +1 -0
- package/adminWww/static/js/8222.68da8b63.chunk.js +2 -0
- package/adminWww/static/js/8222.68da8b63.chunk.js.map +1 -0
- package/adminWww/static/js/{main.6be9bde2.js → main.d3c54b8f.js} +2 -2
- package/adminWww/static/js/{main.6be9bde2.js.map → main.d3c54b8f.js.map} +1 -1
- package/io-package.json +15 -15
- package/package.json +4 -4
- package/adminWww/static/js/1809.3970d4d2.chunk.js.map +0 -1
- package/adminWww/static/js/288.492f41ab.chunk.js +0 -2
- package/adminWww/static/js/288.492f41ab.chunk.js.map +0 -1
- package/adminWww/static/js/3849.363dd3ca.chunk.js +0 -2
- package/adminWww/static/js/3849.363dd3ca.chunk.js.map +0 -1
- package/adminWww/static/js/4289.6ac6a4bc.chunk.js +0 -2
- package/adminWww/static/js/4289.6ac6a4bc.chunk.js.map +0 -1
- package/adminWww/static/js/471.8a82d825.chunk.js +0 -2
- package/adminWww/static/js/471.8a82d825.chunk.js.map +0 -1
- package/adminWww/static/js/6603.51b36d23.chunk.js +0 -3
- package/adminWww/static/js/6603.51b36d23.chunk.js.map +0 -1
- package/adminWww/static/js/6853.1d96bb1c.chunk.js.map +0 -1
- package/adminWww/static/js/6858.7b3f28b9.chunk.js +0 -2
- package/adminWww/static/js/6858.7b3f28b9.chunk.js.map +0 -1
- package/adminWww/static/js/7424.a53c0d15.chunk.js +0 -2
- package/adminWww/static/js/7424.a53c0d15.chunk.js.map +0 -1
- package/adminWww/static/js/8222.399b9b24.chunk.js +0 -2
- package/adminWww/static/js/8222.399b9b24.chunk.js.map +0 -1
- package/adminWww/static/media/thread.78489b630e6b27d860ae133d9ccca0a6.svg +0 -4
- package/adminWww/static/media/z-wave.09176b331d7b6b4b101cffaddf3e441a.svg +0 -3
- package/adminWww/static/media/zigbee.0e17b818ea0c78a95e189da4dac70a6e.svg +0 -4
- /package/adminWww/static/js/{1809.3970d4d2.chunk.js.LICENSE.txt → 1809.797e6d9a.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{6603.51b36d23.chunk.js.LICENSE.txt → 6603.eaf9efa3.chunk.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/js/6603.eaf9efa3.chunk.js","mappings":"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AAG,EAAG,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,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,EAAG,GAAI,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,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,G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","sources":["../node_modules/ace-builds/src-noconflict/ace.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, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/</g, \"<\");\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.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 ?\n document.createElementNS(ns || XHTML_NS, tag) :\n 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.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};\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 result = optionNames;\n optionNames = Object.keys(result);\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.37.5\";\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;\nTextInput = function (parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", \"false\");\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n if (!isMobile)\n text.style.fontSize = \"1px\";\n var commandMode = false;\n var ignoreFocusEvents = false;\n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n var rowStart = Number.MAX_SAFE_INTEGER;\n var rowEnd = Number.MIN_SAFE_INTEGER;\n var numberOfExtraLines = 0;\n try {\n var isFocused = document.activeElement === text;\n }\n catch (e) { }\n this.setNumberOfExtraLines = function (number) {\n rowStart = Number.MAX_SAFE_INTEGER;\n rowEnd = Number.MIN_SAFE_INTEGER;\n if (number < 0) {\n numberOfExtraLines = 0;\n return;\n }\n numberOfExtraLines = number;\n };\n this.setAriaLabel = function () {\n var ariaLabel = \"\";\n if (host.$textInputAriaLabel) {\n ariaLabel += \"\".concat(host.$textInputAriaLabel, \", \");\n }\n if (host.session) {\n var row = host.session.selection.cursor.row;\n ariaLabel += nls(\"text-input.aria-label\", \"Cursor at row $0\", [row + 1]);\n }\n text.setAttribute(\"aria-label\", ariaLabel);\n };\n this.setAriaOptions = function (options) {\n if (options.activeDescendant) {\n text.setAttribute(\"aria-haspopup\", \"true\");\n text.setAttribute(\"aria-autocomplete\", options.inline ? \"both\" : \"list\");\n text.setAttribute(\"aria-activedescendant\", options.activeDescendant);\n }\n else {\n text.setAttribute(\"aria-haspopup\", \"false\");\n text.setAttribute(\"aria-autocomplete\", \"both\");\n text.removeAttribute(\"aria-activedescendant\");\n }\n if (options.role) {\n text.setAttribute(\"role\", options.role);\n }\n if (options.setLabel) {\n text.setAttribute(\"aria-roledescription\", nls(\"text-input.aria-roledescription\", \"editor\"));\n this.setAriaLabel();\n }\n };\n this.setAriaOptions({ role: \"textbox\" });\n event.addListener(text, \"blur\", function (e) {\n if (ignoreFocusEvents)\n return;\n host.onBlur(e);\n isFocused = false;\n }, host);\n event.addListener(text, \"focus\", function (e) {\n if (ignoreFocusEvents)\n return;\n isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n }\n catch (e) { }\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(resetSelection);\n else\n resetSelection();\n }, host);\n this.$focusScroll = false;\n this.focus = function () {\n this.setAriaOptions({\n setLabel: host.renderer.enableKeyboardAccessibility\n });\n if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return text.focus({ preventScroll: true });\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n try {\n var isTransformed = text.getBoundingClientRect().top != 0;\n }\n catch (e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = 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 text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function (p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function () {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function () {\n text.blur();\n };\n this.isFocused = function () {\n return isFocused;\n };\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 (inComposition && isUserAction) {\n lastValue = text.value = \"\";\n onCompositionEnd();\n }\n resetSelection();\n });\n host.on(\"changeSelection\", this.setAriaLabel);\n var positionToSelection = function (row, column) {\n var selection = column;\n for (var i = 1; i <= row - rowStart && i < 2 * numberOfExtraLines + 1; i++) {\n selection += host.session.getLine(row - i).length + 1;\n }\n return selection;\n };\n var resetSelection = isIOS\n ? function (value) {\n if (!isFocused || (copied && !value) || sendingText)\n return;\n if (!value)\n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != text.value)\n text.value = lastValue = newValue;\n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n text.setSelectionRange(selectionStart, selectionEnd);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n : function () {\n if (inComposition || sendingText)\n return;\n if (!isFocused && !afterContextMenu)\n return;\n inComposition = true;\n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n if (host.session) {\n var selection = host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n if (row === rowEnd + 1) {\n rowStart = rowEnd + 1;\n rowEnd = rowStart + 2 * numberOfExtraLines;\n }\n else if (row === rowStart - 1) {\n rowEnd = rowStart - 1;\n rowStart = rowEnd - 2 * numberOfExtraLines;\n }\n else if (row < rowStart - 1 || row > rowEnd + 1) {\n rowStart = row > numberOfExtraLines ? row - numberOfExtraLines : 0;\n rowEnd = row > numberOfExtraLines ? row + numberOfExtraLines : 2 * numberOfExtraLines;\n }\n var lines = [];\n for (var i = rowStart; i <= rowEnd; i++) {\n lines.push(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 < rowStart) {\n var prevLine = host.session.getLine(rowStart - 1);\n selectionStart = range.start.row < rowStart - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row > rowEnd) {\n var nextLine = host.session.getLine(rowEnd + 1);\n selectionEnd = range.end.row > 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 != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\n }\n }\n if (afterContextMenu) {\n lastSelectionStart = text.selectionStart;\n lastSelectionEnd = text.selectionEnd;\n }\n if (lastSelectionEnd != selectionEnd\n || lastSelectionStart != selectionStart\n || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n catch (e) { }\n }\n inComposition = false;\n };\n this.resetSelection = resetSelection;\n if (isFocused)\n host.onFocus();\n var isAllSelected = function (text) {\n return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n && text.value === lastValue && lastValue\n && text.selectionEnd !== lastSelectionEnd;\n };\n var onSelect = function (e) {\n if (inComposition)\n return;\n if (copied) {\n copied = false;\n }\n else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n }\n else if (isMobile && text.selectionStart != lastSelectionStart) {\n resetSelection();\n }\n };\n var inputHandler = null;\n this.setInputHandler = function (cb) { inputHandler = cb; };\n this.getInputHandler = function () { return inputHandler; };\n var afterContextMenu = false;\n var sendText = function (value, fromInput) {\n if (afterContextMenu)\n afterContextMenu = false;\n if (pasted) {\n resetSelection();\n if (value)\n host.onPaste(value);\n pasted = false;\n return \"\";\n }\n else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - 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 && lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[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 sendingText = true;\n var shouldReset = false;\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n }\n else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n sendingText = false;\n lastValue = value;\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n var onInput = function (e) {\n if (inComposition)\n return onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\")\n return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\")\n return host.execCommand(\"redo\");\n }\n var data = text.value;\n var inserted = sendText(data, true);\n if (data.length > MAX_LINE_LENGTH + 100\n || valueResetRegex.test(inserted)\n || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd) {\n resetSelection();\n }\n };\n var 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 handleClipboardData(e, data, true);\n }\n };\n var doCopy = function (e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n if (handleClipboardData(e, data)) {\n if (isIOS) {\n resetSelection(data);\n copied = data;\n setTimeout(function () {\n copied = false;\n }, 10);\n }\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n }\n else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function () {\n copied = false;\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n var onCut = function (e) {\n doCopy(e, true);\n };\n var onCopy = function (e) {\n doCopy(e, false);\n };\n var onPaste = function (e) {\n var data = handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n event.addCommandKeyListener(text, function (e, hashId, keyCode) {\n if (inComposition)\n return;\n return host.onCommandKey(e, hashId, keyCode);\n }, host);\n event.addListener(text, \"select\", onSelect, host);\n event.addListener(text, \"input\", onInput, host);\n event.addListener(text, \"cut\", onCut, host);\n event.addListener(text, \"copy\", onCopy, host);\n event.addListener(text, \"paste\", onPaste, host);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in 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 onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n }, host);\n }\n var onCompositionStart = function (e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly)\n return;\n inComposition = {};\n if (commandMode)\n return;\n if (e.data)\n inComposition.useTextareaForIME = false;\n setTimeout(onCompositionUpdate, 0);\n host._signal(\"compositionStart\");\n host.on(\"mousedown\", cancelComposition);\n var range = host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n inComposition.markerRange = range;\n inComposition.selectionStart = lastSelectionStart;\n host.onCompositionStart(inComposition);\n if (inComposition.useTextareaForIME) {\n lastValue = text.value = \"\";\n lastSelectionStart = 0;\n lastSelectionEnd = 0;\n }\n else {\n if (text.msGetInputContext)\n inComposition.context = text.msGetInputContext();\n if (text.getInputContext)\n inComposition.context = text.getInputContext();\n }\n };\n var onCompositionUpdate = function () {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n if (commandMode)\n return cancelComposition();\n if (inComposition.useTextareaForIME) {\n host.onCompositionUpdate(text.value);\n }\n else {\n var data = text.value;\n sendText(data);\n if (inComposition.markerRange) {\n if (inComposition.context) {\n inComposition.markerRange.start.column = inComposition.selectionStart\n = inComposition.context.compositionStartOffset;\n }\n inComposition.markerRange.end.column = inComposition.markerRange.start.column\n + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n }\n }\n };\n var onCompositionEnd = function (e) {\n if (!host.onCompositionEnd || host.$readOnly)\n return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e)\n onInput();\n };\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n function onKeyup(e) {\n if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n if (!inComposition)\n lastValue = text.value;\n lastSelectionStart = lastSelectionEnd = -1;\n resetSelection();\n }\n syncComposition();\n }\n event.addListener(text, \"compositionstart\", onCompositionStart, host);\n event.addListener(text, \"compositionupdate\", onCompositionUpdate, host);\n event.addListener(text, \"keyup\", onKeyup, host);\n event.addListener(text, \"keydown\", syncComposition, host);\n event.addListener(text, \"compositionend\", onCompositionEnd, host);\n this.getElement = function () {\n return text;\n };\n this.setCommandMode = function (value) {\n commandMode = value;\n text.readOnly = false;\n };\n this.setReadOnly = function (readOnly) {\n if (!commandMode)\n text.readOnly = readOnly;\n };\n this.setCopyWithEmptySelection = function (value) {\n };\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection();\n host._emit(\"nativecontextmenu\", { target: host, domEvent: e });\n this.moveToMouse(e, true);\n };\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight - 2;\n var move = function (e) {\n dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n };\n move(e);\n if (e.type != \"mousedown\")\n return;\n host.renderer.$isMousePressed = true;\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n host.renderer.$isMousePressed = false;\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$moveTextAreaToCursor();\n }, 0);\n }\n var onContextMenu = function (e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu, host);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu, host);\n event.addListener(text, \"contextmenu\", onContextMenu, host);\n if (isIOS)\n addIosSelectionHandler(parentNode, host, text);\n function addIosSelectionHandler(parentNode, host, text) {\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 || inComposition || host.$mouseHandler.isMousePressed)\n return;\n if (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 > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n }\n else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n }\n else if (selectionStart < lastSelectionStart\n || (selectionStart == lastSelectionStart\n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd)) {\n key = KEYS.left;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n }\n else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n }\n else if (selectionEnd > lastSelectionEnd\n || (selectionEnd == lastSelectionEnd\n && lastSelectionEnd != lastSelectionStart\n && 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 lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n this.destroy = function () {\n if (text.parentElement)\n text.parentElement.removeChild(text);\n };\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);\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);\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) {\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 = cursor.column - 4;\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/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 this.$element.className = CLASSNAME + \" \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\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 editor.renderer.getMouseEventTarget().addEventListener(\"mouseout\", this.onMouseOut, true);\n };\n HoverTooltip.prototype.removeFromEditor = function (editor) {\n editor.off(\"mousemove\", this.onMouseMove);\n editor.off(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().removeEventListener(\"mouseout\", this.onMouseOut, true);\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 var MARGIN = 10;\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.addMarker(range, editor.session);\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 var labelHeight = element.clientHeight;\n var labelWidth = element.clientWidth;\n var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight;\n var isAbove = true;\n if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) {\n isAbove = false;\n }\n element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + \"px\";\n element.style.top = isAbove ? \"\" : position.pageY + renderer.lineHeight + \"px\";\n element.style.bottom = isAbove ? window.innerHeight - position.pageY + \"px\" : \"\";\n element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + \"px\";\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 && 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.$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/lib/event\",\"ace/tooltip\",\"ace/config\",\"ace/lib/lang\"], 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 Tooltip = require(\"../tooltip\").Tooltip;\nvar nls = require(\"../config\").nls;\nvar lang = require(\"../lib/lang\");\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor);\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 var tooltipTimeout, mouseEvent;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n tooltip.showTooltip(row);\n if (!tooltip.isOpen)\n return;\n editor.on(\"mousewheel\", hideTooltip);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterRow = mouseEvent.getGutterRow();\n var gutterCell = gutter.$lines.get(gutterRow);\n if (gutterCell) {\n var gutterElement = gutterCell.element.querySelector(\".ace_gutter_annotation\");\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n else {\n moveTooltip(mouseEvent);\n }\n }\n }\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltip.isOpen) {\n tooltip.hideTooltip();\n editor.off(\"mousewheel\", hideTooltip);\n }\n }\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltip.isOpen || tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n editor.on(\"changeSession\", hideTooltip);\n editor.on(\"input\", hideTooltip);\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.editor = editor;\n _this.visibleTooltipRow;\n return _this;\n }\n GutterTooltip.prototype.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\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.hideTooltip();\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 = this.getElement();\n dom.removeChildren(tooltipElement);\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 if (!this.isOpen) {\n this.setTheme(this.editor.renderer.theme);\n this.setClassName(\"ace_gutter-tooltip\");\n }\n this.show();\n this.visibleTooltipRow = row;\n this.editor._signal(\"showGutterTooltip\", this);\n };\n GutterTooltip.prototype.hideTooltip = function () {\n if (!this.isOpen) {\n return;\n }\n this.$element.removeAttribute(\"aria-live\");\n this.hide();\n this.visibleTooltipRow = undefined;\n this.editor._signal(\"hideGutterTooltip\", this);\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 return GutterTooltip;\n}(Tooltip));\nexports.GutterTooltip = GutterTooltip;\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/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 ontouchstart: function (e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\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 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 clearInterval(timerId);\n if (editor.session)\n onCaptureInterval();\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 onCaptureInterval = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\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 var timerId = setInterval(onCaptureInterval, 20);\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 };\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 tooltipFollowsMouse: { initialValue: true }\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 }\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, end = config.lastRow;\n var renderedMarkerRanges = {};\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\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 this.cache[i] = ranges.length ? ranges : \"\";\n }\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 };\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 (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 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.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.undo;\n undoManager.$redoStack = session.history.redo;\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.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.$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 i = 0; i < lines.length; i++) {\n var 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 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.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 match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n if (!options.regExp) {\n replacement = replacement.replace(/\\$/g, \"$$$$\");\n }\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.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\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 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 else {\n var forEachInLine = function (row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\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 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}\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 if (!this.canExecute(command, editor)) {\n return false;\n }\n var e = { editor: editor, command: command, args: args };\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\",\"ace/mouse/default_gutter_handler\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterTooltip = require(\"../mouse/default_gutter_handler\").GutterTooltip;\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 = new GutterTooltip(this.editor);\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.hideTooltip();\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 nearestFoldIndex = this.$findNearestFoldWidget(index);\n var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n if (nearestFoldIndex === null && nearestAnnotationIndex === null)\n return;\n if (nearestFoldIndex === null && nearestAnnotationIndex !== null) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n if (nearestFoldIndex !== null && nearestAnnotationIndex === null) {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n if (Math.abs(nearestAnnotationIndex - index) < Math.abs(nearestFoldIndex - index)) {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n else {\n this.activeRowIndex = nearestFoldIndex;\n this.activeLane = \"fold\";\n this.$focusFoldWidget(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 if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'start') {\n var rowFoldingWidget = this.$rowIndexToRow(this.activeRowIndex);\n this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n setTimeout(\n function () {\n if (this.$rowIndexToRow(this.activeRowIndex) !== rowFoldingWidget) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = this.$rowToRowIndex(rowFoldingWidget);\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 var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2];\n var rect = gutterElement.getBoundingClientRect();\n var style = this.annotationTooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\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 break;\n case \"annotation\":\n this.$blurAnnotation(this.activeRowIndex);\n break;\n }\n }\n if (this.annotationTooltip.isOpen)\n this.annotationTooltip.hideTooltip();\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.$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.$getAnnotation = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[2];\n };\n GutterKeyboardHandler.prototype.$findNearestFoldWidget = function (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.$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.$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.$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)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\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)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusFoldWidget(this.activeRowIndex);\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.$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.activeRowIndex = annotationIndex;\n this.$focusAnnotation(this.activeRowIndex);\n break;\n case \"fold\":\n if (this.activeLane === \"fold\") {\n break;\n }\n var foldWidgetIndex = this.$findNearestFoldWidget(this.activeRowIndex);\n if (foldWidgetIndex == null) {\n break;\n }\n this.activeLane = \"fold\";\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = foldWidgetIndex;\n this.$focusFoldWidget(this.activeRowIndex);\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\"], 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 Editor = /** @class */ (function () {\n function Editor(renderer, session, options) { this.session;\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\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) {\n this.renderer.setStyle(style);\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 if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = null;\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 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 (readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle();\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 tooltipFollowsMouse: \"$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.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 };\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.$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.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 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 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\")\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 };\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.$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 = \"\";\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 valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\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 parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\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;\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 cells = this.$lines.cells;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var childNodes = cell.element.childNodes;\n if (childNodes.length > 0) {\n for (var j = 0; j < childNodes.length; j++) {\n if (childNodes[j].classList && childNodes[j].classList.contains(\"ace_indent-guide-active\")) {\n childNodes[j].classList.remove(\"ace_indent-guide-active\");\n break;\n }\n }\n }\n }\n };\n Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n var line = this.session.doc.getLine(cell.row);\n if (line !== \"\") {\n var childNodes = cell.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 lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\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.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\\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 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 max-width: 100%;\\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(60em, 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 {\\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}\\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(parent, renderer) {\n this.canvas = dom.createElement(\"canvas\");\n this.renderer = renderer;\n this.pixelRatio = 1;\n this.maxHeight = renderer.layerConfig.maxHeight;\n this.lineHeight = renderer.layerConfig.lineHeight;\n this.canvasHeight = parent.parent.scrollHeight;\n this.heightRatio = this.canvasHeight / this.maxHeight;\n this.canvasWidth = parent.width;\n this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n this.canvas.width = this.canvasWidth;\n this.canvas.height = this.canvasHeight;\n this.canvas.style.top = 0 + \"px\";\n this.canvas.style.right = 0 + \"px\";\n this.canvas.style.zIndex = 7 + \"px\";\n this.canvas.style.position = \"absolute\";\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 parent.element.appendChild(this.canvas);\n }\n Decorator.prototype.$updateDecorators = function (config) {\n var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n if (config) {\n this.maxHeight = config.maxHeight;\n this.lineHeight = config.lineHeight;\n this.canvasHeight = config.height;\n var allLineHeight = (config.lastRow + 1) * this.lineHeight;\n if (allLineHeight < this.canvasHeight) {\n this.heightRatio = 1;\n }\n else {\n this.heightRatio = this.canvasHeight / this.maxHeight;\n }\n }\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 var foldData = this.renderer.session.$foldData;\n for (var i = 0; i < annotations.length; i++) {\n var row = annotations[i].row;\n var compensateFold = this.compensateFoldRows(row, foldData);\n var currentY = Math.round((row - compensateFold) * this.lineHeight * this.heightRatio);\n var y1 = Math.round(((row - compensateFold) * this.lineHeight * this.heightRatio));\n var y2 = Math.round((((row - compensateFold) * this.lineHeight + this.lineHeight) * this.heightRatio));\n var height = y2 - y1;\n if (height < this.minDecorationHeight) {\n var yCenter = ((y1 + y2) / 2) | 0;\n if (yCenter < this.halfMinDecorationHeight) {\n yCenter = this.halfMinDecorationHeight;\n }\n else if (yCenter + this.halfMinDecorationHeight > this.canvasHeight) {\n yCenter = this.canvasHeight - this.halfMinDecorationHeight;\n }\n y1 = Math.round(yCenter - this.halfMinDecorationHeight);\n y2 = Math.round(yCenter + this.halfMinDecorationHeight);\n }\n ctx.fillStyle = colors[annotations[i].type] || null;\n ctx.fillRect(0, currentY, this.canvasWidth, y2 - y1);\n }\n }\n var cursor = this.renderer.session.selection.getCursor();\n if (cursor) {\n var compensateFold = this.compensateFoldRows(cursor.row, foldData);\n var currentY = Math.round((cursor.row - compensateFold) * this.lineHeight * this.heightRatio);\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, currentY, this.canvasWidth, 2);\n }\n };\n Decorator.prototype.compensateFoldRows = function (row, foldData) {\n var compensateFold = 0;\n if (foldData && foldData.length > 0) {\n for (var j = 0; j < foldData.length; j++) {\n if (row > foldData[j].start.row && row < foldData[j].end.row) {\n compensateFold += row - foldData[j].start.row;\n }\n else if (row >= foldData[j].end.row) {\n compensateFold += foldData[j].end.row - foldData[j].start.row;\n }\n }\n }\n return compensateFold;\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 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 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 = Math.floor((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 _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 (this.$scrollDecorator) {\n delete this.$scrollDecorator;\n }\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 this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n this.$scrollDecorator.$updateDecorators();\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){\"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 "],"names":["global","this","window","define","module","deps","payload","arguments","length","modules","payloads","original","apply","console","error","trace","_require","parentId","callback","lookup","undefined","Object","prototype","toString","call","params","i","l","dep","require","push","packagedModule","normalizeModule","moduleName","indexOf","chunks","split","charAt","slice","join","previous","replace","exports","mod","id","uri","packaged","ns","root","exportAce","ace","defineProp","obj","name","val","defineProperty","value","enumerable","writable","configurable","String","startsWith","searchString","position","lastIndexOf","endsWith","subjectString","lastIndex","repeat","count","result","string","includes","str","assign","target","TypeError","output","index","source","keys","forEach","key","values","o","map","k","Array","find","predicate","len","thisArg","kValue","findIndex","item","fill","O","relativeStart","Math","max","min","end","relativeEnd","final","of","deepCopy","copy","isArray","last","a","stringReverse","reverse","stringRepeat","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copyArray","array","arrayToMap","arr","createMap","props","create","arrayRemove","splice","escapeRegExp","escapeHTML","getMatchOffsets","regExp","matches","offset","deferredCall","fcn","timer","deferred","timeout","cancel","setTimeout","schedule","clearTimeout","isPending","delayedCall","defaultTimeout","_self","delay","supportsLookbehind","RegExp","e","skipEmptyMatch","line","supportsUnicodeFlag","codePointAt","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","navigator","os","exec","platform","toLowerCase","ua","userAgent","appName","isWin","isIE","parseFloat","match","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isSafari","isEdge","isAIR","isAndroid","isChromeOS","isIOS","test","isMobile","strictCSP","useragent","buildDom","parent","refs","txt","document","createTextNode","appendChild","els","ch","el","createElement","options","childIndex","n","className","style","cssText","setAttribute","getDocumentHead","doc","head","getElementsByTagName","documentElement","tag","createElementNS","removeChildren","element","innerHTML","textContent","ownerDocument","createFragment","createDocumentFragment","hasCssClass","addCssClass","removeCssClass","classes","toggleCssClass","add","setCssClass","node","include","hasCssString","sheets","querySelectorAll","removeElementById","getElementById","remove","cssCache","insertPendingStyles","cache","importCssString","container","getRootNode","insertBefore","firstChild","useStrictCSP","importCssStylsheet","rel","href","scrollbarWidth","inner","width","minWidth","height","display","outer","left","overflow","body","noScrollbar","offsetWidth","withScrollbar","clientWidth","removeChild","computedStyle","getComputedStyle","setStyle","styles","property","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","transform","animationName","translate","tx","ty","round","top","dom","get","url","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","path","s","src","onload","_","isAbort","qualifyURL","inherits","ctor","superCtor","super_","constructor","mixin","implement","proto","EventEmitter","stopPropagation","propagationStopped","preventDefault","defaultPrevented","_emit","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","type","_signal","once","on","newCallback","off","Promise","resolve","setDefaultHandler","handlers","_disabled_","old","disabled","removeDefaultHandler","pop","addEventListener","capturing","removeListener","removeEventListener","removeAllListeners","reportError","msg","data","Error","defaultEnglishMessages","messages","nlsPlaceholders","oop","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","filter","hidden","getOption","opt","warn","forwardTo","handlesSet","set","message","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","setMessages","placeholders","nls","defaultString","$id","translated","dollarMatch","curlyBracketMatch","isDark","cssClass","lang","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","hasOwnProperty","all","$modes","moduleUrl","component","parts","sep","base","re","setModuleUrl","subst","customLoader","setLoader","cb","dynamicModules","$loading","$loaded","loadModule","moduleId","onLoad","loadedModule","moduleType","load","afterLoad","loader","err","reportErrorIfPathIsNotConfigured","then","default","$require","setModuleLoader","version","config","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","getAttribute","attributes","j","attr","m","m1","toUpperCase","Range","startRow","startColumn","endRow","endColumn","start","row","column","isEqual","range","contains","compare","compareRange","cmp","comparePoint","p","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","extend","isEmpty","clone","collapseRows","toScreenRange","session","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","Keys","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","codeToKeyCode","Command","Backspace","Tab","Return","Enter","Pause","Escape","PageUp","PageDown","End","Home","Insert","Delete","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","Backquote","Minus","Equal","BracketLeft","Backslash","BracketRight","Semicolon","Quote","Comma","Period","Slash","Space","NumpadAdd","NumpadDecimal","NumpadSubtract","NumpadDivide","NumpadMultiply","chr","fromCharCode","modifiers","Shift","Control","Alt","Meta","$codeToKeyCode","parseInt","enter","escape","esc","del","mods","pow","x","keyCodeToString","keyCode","keyString","activeListenerOptions","pressedKeys","ts","getListenerOptions","createComment","passive","detectListenerOptionsSupport","EventListener","elem","destroy","addListener","destroyer","$toDestroy","getModifierHash","ctrlKey","altKey","shiftKey","metaKey","resetPressedKeys","stopEvent","getButton","button","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","deltaX","deltaY","deltaMode","DOM_DELTA_PIXEL","wheelX","wheelY","DOM_DELTA_LINE","DOM_DELTA_PAGE","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","clicks","eventNames","onMousedown","detail","isNewClick","abs","clientX","clientY","_clicks","getModifierString","addCommandKeyListener","lastDefaultPrevented","hashId","code","getModifierState","altGr","location","timeStamp","normalizeCommandKeys","postMessage","postMessageId","nextTick","win","messageName","listener","$idleBlocked","onIdle","handler","$idleBlockId","blockIdle","nextFrame","requestAnimationFrame","bind","$cancelT","lineMode","pasteCancelled","Date","now","TextInput","event","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","parentNode","host","text","opacity","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","rowStart","Number","MAX_SAFE_INTEGER","rowEnd","MIN_SAFE_INTEGER","numberOfExtraLines","isFocused","activeElement","setNumberOfExtraLines","number","setAriaLabel","ariaLabel","$textInputAriaLabel","concat","selection","cursor","setAriaOptions","activeDescendant","inline","removeAttribute","role","setLabel","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","focus","renderer","enableKeyboardAccessibility","preventScroll","isTransformed","getBoundingClientRect","ancestors","t","parentElement","nodeType","blur","curOp","commandName","command","isUserAction","docChanged","selectionChanged","onCompositionEnd","positionToSelection","getLine","newValue","selectionEnd","setSelectionRange","afterContextMenu","selectionStart","getRange","lines","prevLine","nextLine","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","onPaste","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","shouldReset","onTextInput","onInput","onCompositionUpdate","inputType","execCommand","handleClipboardData","forceIEMime","clipboardData","mime","setData","getData","doCopy","isCut","getCopyText","onCut","onCopy","select","onCommandKey","isAllSelected","selectAll","$readOnly","cancelComposition","useTextareaForIME","markerRange","context","compositionStartOffset","closeTimeout","syncComposition","onContextMenuClose","$isMousePressed","$keepTextAreaAtCursor","$moveTextAreaToCursor","onCompositionStart","getSelectionRange","msGetInputContext","getInputContext","getElement","setCommandMode","readOnly","setReadOnly","setCopyWithEmptySelection","onContextMenu","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","bottom","clientHeight","move","textInput","scroller","typingResetTimeout","typing","detectArrowKeys","$mouseHandler","isMousePressed","modifier","up","home","option","down","right","shift","commands","findKeyCommand","addIosSelectionHandler","$setUserAgentForTests","_isMobile","_isIOS","DefaultHandlers","mouseHandler","$clickSelection","editor","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","extendSelectionBy","ev","inSelection","pos","getDocumentPosition","mousedownEvent","moveToPosition","time","$focusTimeout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","y","getShiftKey","selectToPosition","anchor","orientedRange","calcRangeOrientation","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectByLinesEnd","unsetStyle","focusWait","ax","ay","bx","by","distance","sqrt","getBracketRange","getWordRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","dt","direction","canScroll","isScrollableBy","speed","scrollBy","stop","selectEnd","selectAllEnd","selectByWordsEnd","preventParentScroll","currentTarget","scrollHeight","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","__values","Symbol","iterator","next","done","CLASSNAME","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","html","setPosition","setClassName","setTheme","theme","show","hide","getHeight","offsetHeight","getWidth","popupManager","PopupManager","popups","addPopup","popup","updatePopups","removePopup","e_1","_a","e_2","_b","sort","priority","visiblepopups","_c","_d","shouldDisplay","visiblepopups_1","visiblepopups_1_1","visiblePopup","doPopupsOverlap","e_2_1","return","e_1_1","popupA","popupB","rectA","rectB","HoverTooltip","_super","_this","lastT","idleTime","lastEvent","onMouseOut","onMouseMove","waitForHover","whiteSpace","pointerEvents","tabIndex","addToEditor","getMouseEventTarget","removeFromEditor","isOutsideOfText","$gatherData","docPos","screenPos","pixelToScreenCoordinates","clippedPos","setDataProvider","showForRange","domNode","startingEvent","$registerCloseEvents","addMarker","textToScreenCoordinates","pageX","maxHeight","labelHeight","labelWidth","spaceBelow","innerHeight","pageY","lineHeight","isAbove","innerWidth","marker","$markerSession","removeMarker","$removeCloseEvents","relatedTarget","classList","GutterHandler","tooltipTimeout","mouseEvent","gutter","$gutterLayer","tooltip","GutterTooltip","hideTooltip","moveTooltip","getRegion","selectTo","srcElement","$tooltipFollowsMouse","getLength","screenRow","$pos","documentToScreenRow","showTooltip","gutterRow","getGutterRow","gutterCell","$lines","querySelector","$gutter","visibleTooltipRow","windowWidth","windowHeight","singular","plural","security","warning","info","hint","annotation","annotationsInRow","$annotations","displayText","from","fold","getFoldLine","$showFoldedAnnotations","mostSevereAnnotationTypeInFold","annotationsInFold","severityRank","annotationType","summaryFoldedAnnotations","annotationsToSummaryString","annotationMessages","iconClassName","$useSvgGutterIcons","lineElement","iconElement","annotationLabels","tooltipElement","annotations","summary","annotationTypes_1","annotationTypes_1_1","label","MouseEvent","$inSelection","documentRow","selectionRange","DragdropHandler","dragImage","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","calcDistance","layerConfig","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","autoScroll","addDragMarker","toOrientedRange","getSelectionStyle","clearSelection","$cursorLayer","setBlinking","clearInterval","setInterval","clearDragMarker","fromOrientedRange","$resetCursorStyle","onDragStart","cancelDrag","draggable","self","dataTransfer","effectAllowed","getReadOnly","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","insert","types","some","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","eventTarget","unselectable","addTouchListeners","touchStartT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","clickCount","vX","vY","createContextMenu","canExecuteCommand","cmd","canExecute","handleClick","action","selected","hasUndo","getUndoManager","replaceChild","class","updateMenu","readText","writeText","ontouchstart","ontouchend","onclick","showContextMenu","pagePos","leftOffset","scrollLeft","hideContextMenu","handleLongTap","selectWord","touches","h","w","touchObj","setRange","switchToSelectionMode","cursorPos","getPixelPosition","anchorPos","offsetTop","offsetLeft","weightedDistance","diff1","diff2","oldScrollTop","getScrollTop","DefaultGutterHandler","MouseHandler","$dragDelay","$mouseMoved","focusEditor","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","endOperation","startOperation","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","args","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","ET","BN","UnicodeTBL00","UnicodeTBL20","_invertLevel","lev","levels","_array","lo","hi","tmp","_getCharClass","chars","ix","wType","nType","cType","c","rtlCandidate","_getCharacterType","uc","charCodeAt","L","R","EN","ON_R","AN","R_H","B","RLE","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","charTypes","impTab","prevState","newClass","newLevel","newState","condPos","_computeLevels","hasBidiCharacters","ret","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","getValue","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","onChange","delta","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","endOfLine","$useWrapMode","splits","$wrapData","indent","substring","size","isFullWidth","getScreenTabSize","$main","substr","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getCursorPosition","getSelectionAnchor","$bidiHandler","removeInLine","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","lead","createAnchor","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","setAnchor","getAnchor","getSelectionLead","isBackwards","$setSelection","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveCursorTo","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","foldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","lineWidgets","widget","rowsAbove","rowCount","keepDesiredColumn","moveCursorToScreen","desiredColumn","r","getRangeOfMovements","func","toJSON","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","rules","splitRegex","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","flag","splitterRurles","rule","caseInsensitive","unicode","regex","adjustedregex","matchcount","token","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","createSplitterRegexp","$setMaxTokenCount","tokens","stack","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","consumeLineEnd","merge","unshift","TextHighlightRules","addRules","prefix","nextState","$rules","getRules","embedRules","HighlightRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","ignoreCase","splitChar","keywords","$keywordList","list","word","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","CstyleBehaviour","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","getWrapBehavioursEnabled","recordAutoInsert","isSaneInsertion","braces","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","quotes","$mode","$quotes","lineCommentStart","quote","leftChar","rightChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","pairQuotesAfter","$pairQuotesAfter","charBefore","closeDocComment","currentToken","nextToken","cursorPosInToken","closeDocPos","openDocPos","$matchTokenType","iterator2","bracket","wordChars","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","commentWithSpace","comment","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","fun","minEmptyLength","floor","toggleBlockComment","colDiff","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","input","autoOutdent","createWorker","createModeDelegates","delegations","_loop_1","scope","functionName","$delegator","this_1","method","language","transformAction","param","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","meta","LineWidgets","widgetManager","getRowLength","$getWidgetScreenLength","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","screenRows","_inDocument","removed","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","updateFull","changedWidgets","fixedWidth","screenWidth","ceil","coverLine","getRowLineCount","lineWidgetWidth","first","gutterWidth","fullWidth","padding","scrollBar","applyDelta","docLines","doNotValidate","Anchor","$onChange","$clipPositionToDocument","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$pointsInOrder","$getTransformedPoint","$insertRight","noClip","point1","point2","equalPointsInOrder","bColIsAfter","Document","textOrLines","insertMergedLines","setValue","getAllLines","getNewLineCharacter","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","$split","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","to","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","scheduleStart","$updateOnChange","getState","cleanup","SearchHighlight","clazz","setRegexp","update","markerLayer","renderedMarkerRanges","MAX_RANGES","rangeToAddMarkerTo","rangeAsString","drawSingleLineMarker","UndoManager","$keepRedoStack","$maxRev","$fromUndo","$undoDepth","reset","addSession","allowMerge","$lastDelta","$redoStack","lastDeltas","undoStackLength","$undoStack","$rev","addSelection","rev","startNewGroup","markIgnored","ignore","getSelection","getRevision","getDeltas","getChangedRanges","getChangedLines","undo","dontSelect","deltaSet","swapped","swapGroups","rearrangeUndoStack","$redoStackBaseRev","undoSelectionRange","undoChanges","$syncRev","redo","diff","redoStack","deltaSets","moveDeltasByOne","rebaseRedoStack","redoSelectionRange","redoChanges","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","json","$prettyPrint","stringifyDelta","hasRedo","isClean","markClean","stringifyRange","swap","d1","d2","i1","i2","ds1","ds2","selectionBefore","selectionAfter","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","cloneDelta","xformed","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","walk","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","RangeList","$bias","pointIndex","excludeEdges","startIndex","addList","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","subFold","collapseChildren","addSubFold","consumePoint","afterStart","firstConsumed","consumedFolds","restoreRange","restorePoint","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","trim","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","outermostFolds","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","initState","depth","getFoldWidget","getFoldWidgetRange","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","charBeforeCursor","$findClosingBracket","getMatchingBracketRanges","bracketsRegExp","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","getMatchingTags","$findTagName","$findClosingTag","$findOpeningTag","found","backward","prevToken","currentTag","openTagStart","openTagName","foundOpenTagEnd","openTagEnd","closeTagStart","closeTagName","closeTagEnd","openTag","closeTag","stepCount","tmpToken","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","prevOp","$uid","bgTokenizer","onChangeFold","$onSelectionChange","onSelectionChange","setMode","destroyed","$initOperationListeners","$lastSel","$operationResetTimer","commandEvent","returnValue","currentSelection","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","JSON","parse","undoManager","history","editSession","setAnnotations","setBreakpoints","breakpoints","setScrollLeft","setScrollTop","scrollTop","$scrollLeft","$scrollTop","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","setOverwrite","overwrite","$overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","addDynamicMarker","markerId","getMarkers","highlight","$searchHighlight","highlightLines","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$onChangeMode","$modeId","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","getMode","isNaN","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","lineWidgetsWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","$getUndoSelection","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","setUseWrapMode","useWrapMode","setWrapLimitRange","$wrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","indentation","SPACE","TAB","TAB_SPACE","getWrapIndent","minSplit","PUNCTUATION","CHAR_EXT","CHAR","maxScreenColumn","screenColumn","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","maxRow","foldStartRow","wrapRow","screenRowOffset","getScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","getPrecedingCharacter","wrap","$wrap","firstLineNumber","useSoftTabs","foldStyle","Search","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","caseSensitive","$supportsUnicodeFlag","wholeWord","wordBoundary","firstChar","needleArray","lastChar","addWordBoundary","$assembleMultilineRegExp","backwards","forEachInLine","MultiHashHandler","$singleCommand","commandKeyBinding","addCommands","addCommand","removeCommand","bindKey","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","removeCommands","bindKeys","keyList","$keyChain","isDefault","HashHandler","CommandManager","byName","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","description","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","prompt","$type","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","passEvent","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","openLink","firstLineEndCol","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","GutterKeyboardHandler","gutterLayer","activeRowIndex","activeLane","annotationTooltip","$onGutterKeyDown","$blurGutter","isRowVisible","scrollToLine","$rowToRowIndex","$cursorCell","nearestFoldIndex","$findNearestFoldWidget","nearestAnnotationIndex","$findNearestAnnotation","$focusAnnotation","$focusFoldWidget","$handleGutterKeyboardInteraction","GutterKeyboardEvent","lane","$switchLane","$rowIndexToRow","rowFoldingWidget","$blurFoldWidget","cells","childNodes","$moveFoldWidgetDown","$moveAnnotationDown","$moveFoldWidgetUp","$moveAnnotationUp","$blurAnnotation","$isFoldWidgetVisible","isRowFullyVisible","isIconVisible","$getFoldWidget","$isAnnotationVisible","$getAnnotation","foldWidget","keyboardFocusClassName","desinationLane","annotationIndex","foldWidgetIndex","cell","gutterKeyboardHandler","getKey","getRow","isInAnnotationLane","isInFoldLane","defaultCommands","Editor","getContainerElement","getTextAreaContainer","textarea","keyBinding","$search","$historyTracker","_$emitInputEvent","setSession","onStartOperation","previousCommand","onEndOperation","scrollSelectionIntoView","animateScrolling","$mergeUndoDeltas","prev","mergeableCommands","$mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onStartOperation","$onEndOperation","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","oldEditor","getSession","resize","onResize","getTheme","getFontSize","setFontSize","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","$getDirectionForHighlight","tagNamesRanges","getMatching","markerType","getHighlightIndentGuides","$textLayer","$highlightIndentGuide","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","inVirtualSelectionMode","isFullLine","getBehavioursEnabled","lineState","shouldOutdent","$enableAutoIndent","lineIndent","prevLineState","currIndent","composition","applyComposition","forEachSelection","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","setHighlightIndentGuides","setShowPrintMargin","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","setGhostText","removeGhostText","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","$toggleWordPairs","negate","firstCondition","res","findLinkAt","columnPosition","previousPosition","currentPosition","wordParts_1","wordParts_1_1","sel","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","center","animate","alignCursor","getCursorPositionScreen","expand","tokenCount","matchType","bracketType","brackets","tagsRanges","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","enableAutoIndent","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","hasValue","$composition","placeholderNode","$placeholder","content","blurCommand","focusOnEnterKeyup","textInputAriaLabel","enableMobileMenu","$enableMobileMenu","customScrollbar","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","highlightIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","useResizeObserver","useSvgGutterIcons","showFoldedAnnotations","getText","lastLineNumber","$renderer","Lines","canvasHeight","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","computeLineHeight","$cacheCell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","$updateAnnotations","rowInfo","annoText","displayAnnoText","annoType","gutterOffset","oldLastRow","$updateCursorRow","onCreateCell","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","$padding","$computePadding","$highlightGutterLine","$cursorRow","updateLineHighlight","scrollLines","$renderLines","textNode","annotationNode","annotationIconNode","decorations","rowText","foldClass","isClosedFold","foldAnnotationClass","annotationInFold","foldRange","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","setPadding","setMarkers","markers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","range1","drawBidiSingleLineMarker","radiusClass","extraLength","textTokens","Set","isTextToken","tokenType","has","Text","$updateEolChar","EOL_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","margin","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","showSpaces","showTabs","showEOL","$highlightIndentGuides","tabStr","$tabStrings","span","TAB_CHAR","$indentGuideRe","spaceClass","spaceContent","SPACE_CHAR","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","renderIndentGuide","cols","$highlightIndentGuideMarker","indentLevel","initialIndent","elementIndentLevel","currentIndent","$renderHighlightIndentGuide","$clearActiveIndentGuide","$setIndentGuideActive","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","EOF_CHAR","renderTokens","addTokens","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$isAnimating","$stopCssAnimation","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","$isSmoothBlinking","blink","onScreen","isCursorInView","pixelPos","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","MAX_SCROLL_H","Scrollbar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","$scrollbarWidth","$minWidth","setHeight","setScrollHeight","setInnerHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBar","ScrollBarV","ScrollBarH","VScrollWidth","HScrollHeight","eType","mousePageY","startTop","thumbTop","scrollTopFromThumbTop","thumbHeight","pageHeight","viewHeight","slideHeight","scrollWidth","mousePageX","startLeft","thumbLeft","scrollLeftFromThumbLeft","thumbWidth","pageWidth","viewWidth","slideWidth","RenderLoop","onRender","pending","changes","$recursionLimit","_flush","change","clear","CHAR_COUNT","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","disconnect","$getZoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","mul","solve","l1","l2","det","sub","m2","ut","u","f","Decorator","canvas","pixelRatio","heightRatio","canvasWidth","minDecorationHeight","halfMinDecorationHeight","colors","dark","light","$updateDecorators","ctx","getContext","clearRect","priorities","compensateFold","compensateFoldRows","currentY","y1","y2","yCenter","fillStyle","fillRect","GutterLayer","MarkerLayer","TextLayer","CursorLayer","HScrollBarCustom","VScrollBarCustom","editorCss","VirtualRenderer","onGutterResize","$markerBack","textLayer","$markerFront","$horizScroll","$vScroll","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","v","$renderChanges","defaultView","CHANGE_FULL","$addResizeObserver","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","CHANGE_LINES","CHANGE_TEXT","CHANGE_MARKER","updateFontSize","$updateSizeAsync","resizing","$updateCachedSize","$resizeTimer","$changes","$customScrollbar","$updateCustomScrollbar","$extraHeight","oldSize","CHANGE_SIZE","CHANGE_SCROLL","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$printMarginEl","containerEl","posTop","posLeft","setScrollMargin","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","freeze","$frozen","unfreeze","CHANGE_H_SCROLL","st","$scrollDecorator","$updateLines","CHANGE_CURSOR","CHANGE_MARKER_FRONT","CHANGE_MARKER_BACK","$autosize","desiredHeight","$maxPixelHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","_rows","$viewMargin","newLeft","newTop","topMargin","bottomMargin","$stopAnimation","currentTop","currentLeft","twoCharsWidth","alignment","$calcSteps","fromValue","toValue","x_min","STEPS","steps","initialScroll","oldSteps","$timer","endAnimation","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","$useTextareaForIME","addToken","removeExtraToken","insertPosition","textChunks","$calculateWrappedTextChunks","$ghostText","widgetDiv","lastLineDiv","hiddenTokens","hideTokensAfterPosition","chunkDiv","chunkSpan","wrapped","$ghostTextWidget","pixelPosition","ghostTextHeight","textLines","displayTokens","wrapSplits","textSlice","newToken","hasPassedCursor","$themeId","$theme","background","setMouseCursor","attachToShadowRoot","$resizeObserver","contentRect","workerUrl","Worker","blob","Blob","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","getBlob","$workerBlob","blobURL","URL","webkitURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","changeListener","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","deltaQueue","onerror","$doc","emit","ex","attachToDocument","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undoStackDepth","setup","other","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onSelectionInterval","selectMoreLines","selectMore","joinSelections","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","docEnd","yBackwards","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","keepOrder","$byLines","cmdResult","anim","buf","additive","skip","screenLead","toRemove","tmp_1","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","oldWidget","gutterAnno","comparator","binarySearch","matched","findAnnotations","arrow","annoTextLine","onmousedown","Renderer","edit","_id","env","tagName","oldNode","createEditSession"],"sourceRoot":""}
|