{"version":3,"file":"1664.b8783a02950235a5701c.js","mappings":"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EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,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,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ACPH,MAAO,cACPnkB,KAAM,YACP,CACCskB,MAAO,UACPH,MAAO,iDACR,CACCG,MAAO,2BACPH,MAAO,iDACR,CACCG,MAAO,8BACPH,MAAO,MACR,CACCG,MAAO,2BACPH,MAAO,QACPnkB,KAAM,yBACP,CACCskB,MAAO,QACPH,MAAO,IACPnkB,KAAM,YACP,CACC6jB,aAAc,kBAGtB,sBAAyB,CACrB,CACIS,MAAO,oCACPH,MAAO,6CACR,CACCG,MAAO,2BACPH,MAAO,IACPnkB,KAAM,SACP,CACCskB,MAAO,2BACPH,MAAO,KACR,CACCG,MAAO,QACPH,MAAO,IACPnkB,KAAM,YACP,CACC6jB,aAAc,kCAGtB,kBAAqB,CACjB,CACIS,MAAO,SACPH,MAAO,SACPn1C,KAAM,CACF,CACIs1C,MAAO,SACPH,MAAO,MACPnkB,KAAM,OACP,CACC1kB,QAAS,aAGlB,CACCgpC,MAAO,SACPH,MAAO,SACPn1C,KAAM,CACF,CACIs1C,MAAO,SACPH,MAAO,MACPnkB,KAAM,OACP,CACC1kB,QAAS,cAGlB,CACCgpC,MAAO,oBACPH,MAAO,+BACR,CACCG,MAAO,mBACPH,MAAO,gDACR,CACCG,MAAO,mBACPH,MAAO,gDACR,CACCG,MAAO,uBACPH,MAAO,IACPnkB,KAAM,sBACP,CACCskB,MAAO,OACPH,MAAO,QACR,CACCG,MAAO,uBACPH,MAAO,KACR,CACCG,MAAO,QACPH,MAAO,GACPnkB,KAAM,aAGd,mBAAsB,CAClBsqF,EAAS,sBACT,CACIhmE,MAAO,qBACPH,MAAOgmE,GACR,CACC7lE,MAAO,uBACPH,MAAO,KACR,CACCG,MAAO,OACPH,MAAO,QACR,CACCG,MAAO,uBACPH,MAAO,KACR,CACCG,MAAO,QACPH,MAAO,GACPnkB,KAAM,aAGd,SAAY,CACR,CACIskB,MAAO,2BACPH,MAAOkmE,GACR,CACC/lE,MAAO,SACPH,MAAO,QACPyB,gBAAgB,GACjB,CACCtB,MAAO,SACPH,MAAO,MACPnkB,KAAM,YACP,CACC6jB,aAAc,WAGtB,QAAW,CACP,CACIS,MAAO,2BACPH,MAA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","sources":["webpack://spheeres/./node_modules/ace-builds/src-noconflict/ace.js","webpack://spheeres/./node_modules/ace-builds/src-noconflict/ext-language_tools.js","webpack://spheeres/./node_modules/ace-builds/src-noconflict/mode-csharp.js","webpack://spheeres/./node_modules/ace-builds/src-noconflict/mode-javascript.js","webpack://spheeres/./node_modules/ace-builds/src-noconflict/mode-json.js","webpack://spheeres/./node_modules/ace-builds/src-noconflict/snippets/text.js","webpack://spheeres/./node_modules/ace-builds/src-noconflict/worker-javascript.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(/ 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/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\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 AppConfig = /** @class */ (function () {\n function AppConfig() {\n this.$defaultOptions = {};\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) {\n messages = value;\n };\n AppConfig.prototype.nls = function (string, params) {\n if (messages && !messages[string]) {\n warn(\"No message found for '\" + string + \"' in the provided messages, falling back to default English message.\");\n }\n var translated = messages && messages[string] || string;\n if (params) {\n translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, name) {\n if (name == \"$\")\n return \"$\";\n return params[name];\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.32.7\";\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 [\" + 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){/*! @license\n==========================================================================\nSproutCore -- JavaScript Application Framework\ncopyright 2006-2009, Sprout Systems Inc., Apple Inc. and contributors.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\nSproutCore and the SproutCore logo are trademarks of Sprout Systems, Inc.\n\nFor more information about SproutCore, visit http://www.sproutcore.com\n\n\n==========================================================================\n@license */\n\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = (function () {\n var ret = {\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 96: \"Numpad0\",\n 97: \"Numpad1\",\n 98: \"Numpad2\",\n 99: \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n ret.PRINTABLE_KEYS[173] = '-';\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n (function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) {\n ret.KEY_MODS[i] = mods.filter(function (x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n return ret;\n})();\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, /**@type{any?}*/ 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 (!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.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(\"editor\"));\n if (host.session) {\n var row = host.session.selection.cursor.row;\n text.setAttribute(\"aria-label\", nls(\"Cursor at row $0\", [row + 1]));\n }\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 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\"], 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;\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 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: { singular: nls(\"error\"), plural: nls(\"errors\") },\n warning: { singular: nls(\"warning\"), plural: nls(\"warnings\") },\n info: { singular: nls(\"information message\"), plural: nls(\"information messages\") }\n };\n },\n enumerable: false,\n configurable: true\n });\n GutterTooltip.prototype.showTooltip = function (row) {\n var gutter = this.editor.renderer.$gutterLayer;\n var annotationsInRow = gutter.$annotations[row];\n var annotation;\n if (annotationsInRow)\n annotation = { text: Array.from(annotationsInRow.text), type: Array.from(annotationsInRow.type) };\n else\n annotation = { text: [], type: [] };\n var fold = gutter.session.getFoldLine(row);\n if (fold && gutter.$showFoldedAnnotations) {\n var annotationsInFold = { error: [], warning: [], info: [] };\n var mostSevereAnnotationInFoldType;\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 (annotationType === \"error\") {\n mostSevereAnnotationInFoldType = \"error_fold\";\n continue;\n }\n if (annotationType === \"warning\") {\n mostSevereAnnotationInFoldType = \"warning_fold\";\n continue;\n }\n }\n }\n if (mostSevereAnnotationInFoldType === \"error_fold\" || mostSevereAnnotationInFoldType === \"warning_fold\") {\n var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n annotation.text.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationInFoldType);\n }\n }\n if (annotation.text.length === 0)\n return this.hide();\n var annotationMessages = { error: [], warning: [], info: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.text.length; i++) {\n var line = \" \").concat(annotation.text[i]);\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(line);\n }\n var tooltipContent = [].concat(annotationMessages.error, annotationMessages.warning, annotationMessages.info).join(\"
\");\n this.setHtml(tooltipContent);\n this.$element.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.editor._signal(\"showGutterTooltip\", this);\n };\n GutterTooltip.prototype.hideTooltip = function () {\n this.$element.removeAttribute(\"aria-live\");\n this.hide();\n this.editor._signal(\"hideGutterTooltip\", this);\n };\n GutterTooltip.annotationsToSummaryString = function (annotations) {\n var e_1, _a;\n var summary = [];\n var annotationTypes = ['error', 'warning', 'info'];\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 && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\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 (!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 if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\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 var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\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, 3 + indent.length, 1, 3 + 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/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) && !/^comment.end/.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + (/^comment.start/.test(token.type) ? token.value.length : 2);\n iterator = new TokenIterator(this, row, column);\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 (!re.test(state))\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type) && !/^comment.start/.test(token.type));\n token = iterator.stepBackward();\n }\n else\n token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn();\n if (!/^comment.end/.test(token.type)) {\n range.end.column += token.value.length - 2;\n }\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 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 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 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 === '') { // 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/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 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.$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.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\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 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.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.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\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 (!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 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.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/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/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/line_widgets\",\"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 LineWidgets = require(\"./line_widgets\").LineWidgets;\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 this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\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 }.bind(this), 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 }.bind(this), true);\n };\n Editor.prototype.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n Editor.prototype.endOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false || !this.session)\n return (this.curOp = null);\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n return;\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 var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\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 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.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 session && session._signal(\"changeEditor\", { 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 = [tagNamesRanges.openTagName, tagNamesRanges.closeTagName];\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 if (!this.session.widgetManager) {\n this.session.widgetManager = new LineWidgets(this.session);\n this.session.widgetManager.attach(this);\n }\n this.renderer.setGhostText(text, position);\n };\n Editor.prototype.removeGhostText = function () {\n if (!this.session.widgetManager)\n return;\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 === '= 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\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"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\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"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 }\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 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: [] };\n var annoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n }\n var className = annotation.className;\n if (className)\n rowInfo.className = className;\n else if (annoType == \"error\")\n rowInfo.className = \" ace_error\";\n else if (annoType == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (annoType == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\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_warning\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n continue;\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(\"Toggle code folding, rows $0 through $1\", [foldRange.start.row + 1, foldRange.end.row + 1]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, rows $0 through $1\", [fold.start.row + 1, fold.end.row + 1]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"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 annotationNode.setAttribute(\"aria-label\", nls(\"Read annotations row $0\", [rowText]));\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 annotationNode.setAttribute(\"aria-label\", nls(\"Read annotations row $0\", [rowText]));\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:0;\" + \"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:0;\" +\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]+)|(\\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(\"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 ? \"\" : \"\";\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 (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< .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 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}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n white-space: pre;\\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});\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\"], 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\");\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 (!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 textLines = text.split(\"\\n\");\n this.addToken(textLines[0], \"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 if (textLines.length > 1) {\n this.$ghostTextWidget = {\n text: textLines.slice(1).join(\"\\n\"),\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text\"\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 = textLines.length * this.lineHeight;\n var fitsY = ghostTextHeight < height - pixelPosition.top;\n if (fitsY)\n return;\n if (ghostTextHeight < height) {\n this.scrollBy(0, (textLines.length - 1) * this.lineHeight);\n }\n else {\n this.scrollBy(0, pixelPosition.top);\n }\n }\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.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 }\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/line_widgets\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\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 if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\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 text: [nls(\"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 el.innerHTML = gutterAnno.text.join(\"
\");\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;\nexports.version = exports.config.version;\n\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n var global = (function () {\n return this;\n })();\n if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n \n if (!global.ace)\n global.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n global.ace[key] = a[key];\n global.ace[\"default\"] = global.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = global.ace;\n }\n });\n })();\n ","ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\nvar VARIABLES = {\n CURRENT_WORD: function (editor) {\n return editor.session.getTextRange(editor.session.getWordRange());\n },\n SELECTION: function (editor, name, indentation) {\n var text = editor.session.getTextRange();\n if (indentation)\n return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n return text;\n },\n CURRENT_LINE: function (editor) {\n return editor.session.getLine(editor.getCursorPosition().row);\n },\n PREV_LINE: function (editor) {\n return editor.session.getLine(editor.getCursorPosition().row - 1);\n },\n LINE_INDEX: function (editor) {\n return editor.getCursorPosition().row;\n },\n LINE_NUMBER: function (editor) {\n return editor.getCursorPosition().row + 1;\n },\n SOFT_TABS: function (editor) {\n return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n },\n TAB_SIZE: function (editor) {\n return editor.session.getTabSize();\n },\n CLIPBOARD: function (editor) {\n return clipboard.getText && clipboard.getText();\n },\n FILENAME: function (editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n },\n FILENAME_BASE: function (editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n },\n DIRECTORY: function (editor) {\n return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n },\n FILEPATH: function (editor) { return \"/not implemented.txt\"; },\n WORKSPACE_NAME: function () { return \"Unknown\"; },\n FULLNAME: function () { return \"Unknown\"; },\n BLOCK_COMMENT_START: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.start || \"\";\n },\n BLOCK_COMMENT_END: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.end || \"\";\n },\n LINE_COMMENT: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.lineCommentStart || \"\";\n },\n CURRENT_YEAR: date.bind(null, { year: \"numeric\" }),\n CURRENT_YEAR_SHORT: date.bind(null, { year: \"2-digit\" }),\n CURRENT_MONTH: date.bind(null, { month: \"numeric\" }),\n CURRENT_MONTH_NAME: date.bind(null, { month: \"long\" }),\n CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: \"short\" }),\n CURRENT_DATE: date.bind(null, { day: \"2-digit\" }),\n CURRENT_DAY_NAME: date.bind(null, { weekday: \"long\" }),\n CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: \"short\" }),\n CURRENT_HOUR: date.bind(null, { hour: \"2-digit\", hour12: false }),\n CURRENT_MINUTE: date.bind(null, { minute: \"2-digit\" }),\n CURRENT_SECOND: date.bind(null, { second: \"2-digit\" })\n};\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\nfunction date(dateFormat) {\n var str = new Date().toLocaleString(\"en-us\", dateFormat);\n return str.length == 1 ? \"0\" + str : str;\n}\nvar SnippetManager = /** @class */ (function () {\n function SnippetManager() {\n this.snippetMap = {};\n this.snippetNameMap = {};\n this.variables = VARIABLES;\n }\n SnippetManager.prototype.getTokenizer = function () {\n return SnippetManager[\"$tokenizer\"] || this.createTokenizer();\n };\n SnippetManager.prototype.createTokenizer = function () {\n function TabstopToken(str) {\n str = str.substr(1);\n if (/^\\d+$/.test(str))\n return [{ tabstopId: parseInt(str, 10) }];\n return [{ text: str }];\n }\n function escape(ch) {\n return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n }\n var formatMatcher = {\n regex: \"/(\" + escape(\"/\") + \"+)/\",\n onMatch: function (val, state, stack) {\n var ts = stack[0];\n ts.fmtString = true;\n ts.guard = val.slice(1, -1);\n ts.flag = \"\";\n return \"\";\n },\n next: \"formatString\"\n };\n SnippetManager[\"$tokenizer\"] = new Tokenizer({\n start: [\n { regex: /\\\\./, onMatch: function (val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length) {\n val = ch;\n }\n else if (\"`$\\\\\".indexOf(ch) != -1) {\n val = ch;\n }\n return [val];\n } },\n { regex: /}/, onMatch: function (val, state, stack) {\n return [stack.length ? stack.shift() : val];\n } },\n { regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken },\n { regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function (str, state, stack) {\n var t = TabstopToken(str.substr(1));\n stack.unshift(t[0]);\n return t;\n }, next: \"snippetVar\" },\n { regex: /\\n/, token: \"newline\", merge: false }\n ],\n snippetVar: [\n { regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function (val, state, stack) {\n var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function (operator) {\n return operator.length == 2 ? operator[1] : \"\\x00\";\n }).split(\"\\x00\").map(function (value) {\n return { value: value };\n });\n stack[0].choices = choices;\n return [choices[0]];\n }, next: \"start\" },\n formatMatcher,\n { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\" }\n ],\n formatString: [\n { regex: /:/, onMatch: function (val, state, stack) {\n if (stack.length && stack[0].expectElse) {\n stack[0].expectElse = false;\n stack[0].ifEnd = { elseEnd: stack[0] };\n return [stack[0].ifEnd];\n }\n return \":\";\n } },\n { regex: /\\\\./, onMatch: function (val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length)\n val = ch;\n else if (\"`$\\\\\".indexOf(ch) != -1)\n val = ch;\n else if (ch == \"n\")\n val = \"\\n\";\n else if (ch == \"t\")\n val = \"\\t\";\n else if (\"ulULE\".indexOf(ch) != -1)\n val = { changeCase: ch, local: ch > \"a\" };\n return [val];\n } },\n { regex: \"/\\\\w*}\", onMatch: function (val, state, stack) {\n var next = stack.shift();\n if (next)\n next.flag = val.slice(1, -1);\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\" },\n { regex: /\\$(?:\\d+|\\w+)/, onMatch: function (val, state, stack) {\n return [{ text: val.slice(1) }];\n } },\n { regex: /\\${\\w+/, onMatch: function (val, state, stack) {\n var token = { text: val.slice(2) };\n stack.unshift(token);\n return [token];\n }, next: \"formatStringVar\" },\n { regex: /\\n/, token: \"newline\", merge: false },\n { regex: /}/, onMatch: function (val, state, stack) {\n var next = stack.shift();\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\" }\n ],\n formatStringVar: [\n { regex: /:\\/\\w+}/, onMatch: function (val, state, stack) {\n var ts = stack[0];\n ts.formatFunction = val.slice(2, -1);\n return [stack.shift()];\n }, next: \"formatString\" },\n formatMatcher,\n { regex: /:[\\?\\-+]?/, onMatch: function (val, state, stack) {\n if (val[1] == \"+\")\n stack[0].ifEnd = stack[0];\n if (val[1] == \"?\")\n stack[0].expectElse = true;\n }, next: \"formatString\" },\n { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\" }\n ]\n });\n return SnippetManager[\"$tokenizer\"];\n };\n SnippetManager.prototype.tokenizeTmSnippet = function (str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n return x.value || x;\n });\n };\n SnippetManager.prototype.getVariableValue = function (editor, name, indentation) {\n if (/^\\d+$/.test(name))\n return (this.variables.__ || {})[name] || \"\";\n if (/^[A-Z]\\d+$/.test(name))\n return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n name = name.replace(/^TM_/, \"\");\n if (!this.variables.hasOwnProperty(name))\n return \"\";\n var value = this.variables[name];\n if (typeof value == \"function\")\n value = this.variables[name](editor, name, indentation);\n return value == null ? \"\" : value;\n };\n SnippetManager.prototype.tmStrFormat = function (str, ch, editor) {\n if (!ch.fmt)\n return str;\n var flag = ch.flag || \"\";\n var re = ch.guard;\n re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n var _self = this;\n var formatted = str.replace(re, function () {\n var oldArgs = _self.variables.__;\n _self.variables.__ = [].slice.call(arguments);\n var fmtParts = _self.resolveVariables(fmtTokens, editor);\n var gChangeCase = \"E\";\n for (var i = 0; i < fmtParts.length; i++) {\n var ch = fmtParts[i];\n if (typeof ch == \"object\") {\n fmtParts[i] = \"\";\n if (ch.changeCase && ch.local) {\n var next = fmtParts[i + 1];\n if (next && typeof next == \"string\") {\n if (ch.changeCase == \"u\")\n fmtParts[i] = next[0].toUpperCase();\n else\n fmtParts[i] = next[0].toLowerCase();\n fmtParts[i + 1] = next.substr(1);\n }\n }\n else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n }\n else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n }\n else if (gChangeCase == \"L\") {\n fmtParts[i] = ch.toLowerCase();\n }\n }\n _self.variables.__ = oldArgs;\n return fmtParts.join(\"\");\n });\n return formatted;\n };\n SnippetManager.prototype.tmFormatFunction = function (str, ch, editor) {\n if (ch.formatFunction == \"upcase\")\n return str.toUpperCase();\n if (ch.formatFunction == \"downcase\")\n return str.toLowerCase();\n return str;\n };\n SnippetManager.prototype.resolveVariables = function (snippet, editor) {\n var result = [];\n var indentation = \"\";\n var afterNewLine = true;\n for (var i = 0; i < snippet.length; i++) {\n var ch = snippet[i];\n if (typeof ch == \"string\") {\n result.push(ch);\n if (ch == \"\\n\") {\n afterNewLine = true;\n indentation = \"\";\n }\n else if (afterNewLine) {\n indentation = /^\\t*/.exec(ch)[0];\n afterNewLine = /\\S/.test(ch);\n }\n continue;\n }\n if (!ch)\n continue;\n afterNewLine = false;\n if (ch.fmtString) {\n var j = snippet.indexOf(ch, i + 1);\n if (j == -1)\n j = snippet.length;\n ch.fmt = snippet.slice(i + 1, j);\n i = j;\n }\n if (ch.text) {\n var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n if (ch.fmtString)\n value = this.tmStrFormat(value, ch, editor);\n if (ch.formatFunction)\n value = this.tmFormatFunction(value, ch, editor);\n if (value && !ch.ifEnd) {\n result.push(value);\n gotoNext(ch);\n }\n else if (!value && ch.ifEnd) {\n gotoNext(ch.ifEnd);\n }\n }\n else if (ch.elseEnd) {\n gotoNext(ch.elseEnd);\n }\n else if (ch.tabstopId != null) {\n result.push(ch);\n }\n else if (ch.changeCase != null) {\n result.push(ch);\n }\n }\n function gotoNext(ch) {\n var i1 = snippet.indexOf(ch, i + 1);\n if (i1 != -1)\n i = i1;\n }\n return result;\n };\n SnippetManager.prototype.getDisplayTextForSnippet = function (editor, snippetText) {\n var processedSnippet = processSnippetText.call(this, editor, snippetText);\n return processedSnippet.text;\n };\n SnippetManager.prototype.insertSnippetForSelection = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var processedSnippet = processSnippetText.call(this, editor, snippetText, options);\n var range = editor.getSelectionRange();\n var end = editor.session.replace(range, processedSnippet.text);\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId);\n };\n SnippetManager.prototype.insertSnippet = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText, options);\n editor.forEachSelection(function () {\n self.insertSnippetForSelection(editor, snippetText, options);\n }, null, { keepOrder: true });\n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\n };\n SnippetManager.prototype.$getScope = function (editor) {\n var scope = editor.session.$mode.$id || \"\";\n scope = scope.split(\"/\").pop();\n if (scope === \"html\" || scope === \"php\") {\n if (scope === \"php\" && !editor.session.$mode.inlinePhp)\n scope = \"html\";\n var c = editor.getCursorPosition();\n var state = editor.session.getState(c.row);\n if (typeof state === \"object\") {\n state = state[0];\n }\n if (state.substring) {\n if (state.substring(0, 3) == \"js-\")\n scope = \"javascript\";\n else if (state.substring(0, 4) == \"css-\")\n scope = \"css\";\n else if (state.substring(0, 4) == \"php-\")\n scope = \"php\";\n }\n }\n return scope;\n };\n SnippetManager.prototype.getActiveScopes = function (editor) {\n var scope = this.$getScope(editor);\n var scopes = [scope];\n var snippetMap = this.snippetMap;\n if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n }\n scopes.push(\"_\");\n return scopes;\n };\n SnippetManager.prototype.expandWithTab = function (editor, options) {\n var self = this;\n var result = editor.forEachSelection(function () {\n return self.expandSnippetForSelection(editor, options);\n }, null, { keepOrder: true });\n if (result && editor.tabstopManager)\n editor.tabstopManager.tabNext();\n return result;\n };\n SnippetManager.prototype.expandSnippetForSelection = function (editor, options) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var before = line.substring(0, cursor.column);\n var after = line.substr(cursor.column);\n var snippetMap = this.snippetMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = this.findMatchingSnippet(snippets, before, after);\n return !!snippet;\n }, this);\n if (!snippet)\n return false;\n if (options && options.dryRun)\n return true;\n editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n this.variables.M__ = this.variables.T__ = null;\n return true;\n };\n SnippetManager.prototype.findMatchingSnippet = function (snippetList, before, after) {\n for (var i = snippetList.length; i--;) {\n var s = snippetList[i];\n if (s.startRe && !s.startRe.test(before))\n continue;\n if (s.endRe && !s.endRe.test(after))\n continue;\n if (!s.startRe && !s.endRe)\n continue;\n s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n return s;\n }\n };\n SnippetManager.prototype.register = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n var self = this;\n if (!snippets)\n snippets = [];\n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n src = \"(?:\" + src + \")\";\n return src || \"\";\n }\n function guardedRegexp(re, guard, opening) {\n re = wrapRegexp(re);\n guard = wrapRegexp(guard);\n if (opening) {\n re = guard + re;\n if (re && re[re.length - 1] != \"$\")\n re = re + \"$\";\n }\n else {\n re = re + guard;\n if (re && re[0] != \"^\")\n re = \"^\" + re;\n }\n return new RegExp(re);\n }\n function addSnippet(s) {\n if (!s.scope)\n s.scope = scope || \"_\";\n scope = s.scope;\n if (!snippetMap[scope]) {\n snippetMap[scope] = [];\n snippetNameMap[scope] = {};\n }\n var map = snippetNameMap[scope];\n if (s.name) {\n var old = map[s.name];\n if (old)\n self.unregister(old);\n map[s.name] = s;\n }\n snippetMap[scope].push(s);\n if (s.prefix)\n s.tabTrigger = s.prefix;\n if (!s.content && s.body)\n s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n if (s.tabTrigger && !s.trigger) {\n if (!s.guard && /^\\w/.test(s.tabTrigger))\n s.guard = \"\\\\b\";\n s.trigger = lang.escapeRegExp(s.tabTrigger);\n }\n if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n return;\n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger);\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger);\n }\n if (Array.isArray(snippets)) {\n snippets.forEach(addSnippet);\n }\n else {\n Object.keys(snippets).forEach(function (key) {\n addSnippet(snippets[key]);\n });\n }\n this._signal(\"registerSnippets\", { scope: scope });\n };\n SnippetManager.prototype.unregister = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n function removeSnippet(s) {\n var nameMap = snippetNameMap[s.scope || scope];\n if (nameMap && nameMap[s.name]) {\n delete nameMap[s.name];\n var map = snippetMap[s.scope || scope];\n var i = map && map.indexOf(s);\n if (i >= 0)\n map.splice(i, 1);\n }\n }\n if (snippets.content)\n removeSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(removeSnippet);\n };\n SnippetManager.prototype.parseSnippetFile = function (str) {\n str = str.replace(/\\r/g, \"\");\n var list = [], /**@type{Snippet}*/ snippet = {};\n var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n var m;\n while (m = re.exec(str)) {\n if (m[1]) {\n try {\n snippet = JSON.parse(m[1]);\n list.push(snippet);\n }\n catch (e) { }\n }\n if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n }\n else {\n var key = m[2], val = m[3];\n if (key == \"regex\") {\n var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n snippet.guard = guardRe.exec(val)[1];\n snippet.trigger = guardRe.exec(val)[1];\n snippet.endTrigger = guardRe.exec(val)[1];\n snippet.endGuard = guardRe.exec(val)[1];\n }\n else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name)\n snippet.name = val;\n }\n else if (key) {\n snippet[key] = val;\n }\n }\n }\n return list;\n };\n SnippetManager.prototype.getSnippetByName = function (name, editor) {\n var snippetMap = this.snippetNameMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = snippets[name];\n return !!snippet;\n }, this);\n return snippet;\n };\n return SnippetManager;\n}());\noop.implement(SnippetManager.prototype, EventEmitter);\nvar processSnippetText = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var tabString = editor.session.getTabString();\n var indentString = line.match(/^\\s*/)[0];\n if (cursor.column < indentString.length)\n indentString = indentString.slice(0, cursor.column);\n snippetText = snippetText.replace(/\\r/g, \"\");\n var tokens = this.tokenizeTmSnippet(snippetText);\n tokens = this.resolveVariables(tokens, editor);\n tokens = tokens.map(function (x) {\n if (x == \"\\n\" && !options.excludeExtraIndent)\n return x + indentString;\n if (typeof x == \"string\")\n return x.replace(/\\t/g, tabString);\n return x;\n });\n var tabstops = [];\n tokens.forEach(function (p, i) {\n if (typeof p != \"object\")\n return;\n var id = p.tabstopId;\n var ts = tabstops[id];\n if (!ts) {\n ts = tabstops[id] = [];\n ts.index = id;\n ts.value = \"\";\n ts.parents = {};\n }\n if (ts.indexOf(p) !== -1)\n return;\n if (p.choices && !ts.choices)\n ts.choices = p.choices;\n ts.push(p);\n var i1 = tokens.indexOf(p, i + 1);\n if (i1 === -1)\n return;\n var value = tokens.slice(i + 1, i1);\n var isNested = value.some(function (t) { return typeof t === \"object\"; });\n if (isNested && !ts.value) {\n ts.value = value;\n }\n else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n ts.value = value.join(\"\");\n }\n });\n tabstops.forEach(function (ts) { ts.length = 0; });\n var expanding = {};\n function copyValue(val) {\n var copy = [];\n for (var i = 0; i < val.length; i++) {\n var p = val[i];\n if (typeof p == \"object\") {\n if (expanding[p.tabstopId])\n continue;\n var j = val.lastIndexOf(p, i - 1);\n p = copy[j] || { tabstopId: p.tabstopId };\n }\n copy[i] = p;\n }\n return copy;\n }\n for (var i = 0; i < tokens.length; i++) {\n var p = tokens[i];\n if (typeof p != \"object\")\n continue;\n var id = p.tabstopId;\n var ts = tabstops[id];\n var i1 = tokens.indexOf(p, i + 1);\n if (expanding[id]) {\n if (expanding[id] === p) {\n delete expanding[id];\n Object.keys(expanding).forEach(function (parentId) {\n ts.parents[parentId] = true;\n });\n }\n continue;\n }\n expanding[id] = p;\n var value = ts.value;\n if (typeof value !== \"string\")\n value = copyValue(value);\n else if (p.fmt)\n value = this.tmStrFormat(value, p, editor);\n tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n if (ts.indexOf(p) === -1)\n ts.push(p);\n }\n var row = 0, column = 0;\n var text = \"\";\n tokens.forEach(function (t) {\n if (typeof t === \"string\") {\n var lines = t.split(\"\\n\");\n if (lines.length > 1) {\n column = lines[lines.length - 1].length;\n row += lines.length - 1;\n }\n else\n column += t.length;\n text += t;\n }\n else if (t) {\n if (!t.start)\n t.start = { row: row, column: column };\n else\n t.end = { row: row, column: column };\n }\n });\n return {\n text: text,\n tabstops: tabstops,\n tokens: tokens\n };\n};\nvar TabstopManager = /** @class */ (function () {\n function TabstopManager(editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n if (editor.tabstopManager)\n return editor.tabstopManager;\n editor.tabstopManager = this;\n this.$onChange = this.onChange.bind(this);\n this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n this.$onChangeSession = this.onChangeSession.bind(this);\n this.$onAfterExec = this.onAfterExec.bind(this);\n this.attach(editor);\n }\n TabstopManager.prototype.attach = function (editor) {\n this.$openTabstops = null;\n this.selectedTabstop = null;\n this.editor = editor;\n this.session = editor.session;\n this.editor.on(\"change\", this.$onChange);\n this.editor.on(\"changeSelection\", this.$onChangeSelection);\n this.editor.on(\"changeSession\", this.$onChangeSession);\n this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n TabstopManager.prototype.detach = function () {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges.length = 0;\n this.tabstops.length = 0;\n this.selectedTabstop = null;\n this.editor.off(\"change\", this.$onChange);\n this.editor.off(\"changeSelection\", this.$onChangeSelection);\n this.editor.off(\"changeSession\", this.$onChangeSession);\n this.editor.commands.off(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.session = null;\n this.editor = null;\n };\n TabstopManager.prototype.onChange = function (delta) {\n var isRemove = delta.action[0] == \"r\";\n var selectedTabstop = this.selectedTabstop || {};\n var parents = selectedTabstop.parents || {};\n var tabstops = this.tabstops.slice();\n for (var i = 0; i < tabstops.length; i++) {\n var ts = tabstops[i];\n var active = ts == selectedTabstop || parents[ts.index];\n ts.rangeList.$bias = active ? 0 : 1;\n if (delta.action == \"remove\" && ts !== selectedTabstop) {\n var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n for (var j = 0; j < toRemove.length; j++)\n this.removeRange(toRemove[j]);\n }\n ts.rangeList.$onChange(delta);\n }\n var session = this.session;\n if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n this.detach();\n };\n TabstopManager.prototype.updateLinkedFields = function () {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n return;\n this.$inChange = true;\n var session = this.session;\n var text = session.getTextRange(ts.firstNonLinked);\n for (var i = 0; i < ts.length; i++) {\n var range = ts[i];\n if (!range.linked)\n continue;\n var original = range.original;\n var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n session.replace(range, fmt);\n }\n this.$inChange = false;\n };\n TabstopManager.prototype.onAfterExec = function (e) {\n if (e.command && !e.command.readOnly)\n this.updateLinkedFields();\n };\n TabstopManager.prototype.onChangeSelection = function () {\n if (!this.editor)\n return;\n var lead = this.editor.selection.lead;\n var anchor = this.editor.selection.anchor;\n var isEmpty = this.editor.selection.isEmpty();\n for (var i = 0; i < this.ranges.length; i++) {\n if (this.ranges[i].linked)\n continue;\n var containsLead = this.ranges[i].contains(lead.row, lead.column);\n var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n if (containsLead && containsAnchor)\n return;\n }\n this.detach();\n };\n TabstopManager.prototype.onChangeSession = function () {\n this.detach();\n };\n TabstopManager.prototype.tabNext = function (dir) {\n var max = this.tabstops.length;\n var index = this.index + (dir || 1);\n index = Math.min(Math.max(index, 1), max);\n if (index == max)\n index = 0;\n this.selectTabstop(index);\n this.updateTabstopMarkers();\n if (index === 0) {\n this.detach();\n }\n };\n TabstopManager.prototype.selectTabstop = function (index) {\n this.$openTabstops = null;\n var ts = this.tabstops[this.index];\n if (ts)\n this.addTabstopMarkers(ts);\n this.index = index;\n ts = this.tabstops[this.index];\n if (!ts || !ts.length)\n return;\n this.selectedTabstop = ts;\n var range = ts.firstNonLinked || ts;\n if (ts.choices)\n range.cursor = range.start;\n if (!this.editor.inVirtualSelectionMode) {\n var sel = this.editor.multiSelect;\n sel.toSingleRange(range);\n for (var i = 0; i < ts.length; i++) {\n if (ts.hasLinkedRanges && ts[i].linked)\n continue;\n sel.addRange(ts[i].clone(), true);\n }\n }\n else {\n this.editor.selection.fromOrientedRange(range);\n }\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n if (this.selectedTabstop && this.selectedTabstop.choices)\n this.editor.execCommand(\"startAutocomplete\", { matches: this.selectedTabstop.choices });\n };\n TabstopManager.prototype.addTabstops = function (tabstops, start, end) {\n var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n if (!this.$openTabstops)\n this.$openTabstops = [];\n if (!tabstops[0]) {\n var p = Range.fromPoints(end, end);\n moveRelative(p.start, start);\n moveRelative(p.end, start);\n tabstops[0] = [p];\n tabstops[0].index = 0;\n }\n var i = this.index;\n var arg = [i + 1, 0];\n var ranges = this.ranges;\n var snippetId = this.snippetId = (this.snippetId || 0) + 1;\n tabstops.forEach(function (ts, index) {\n var dest = this.$openTabstops[index] || ts;\n dest.snippetId = snippetId;\n for (var i = 0; i < ts.length; i++) {\n var p = ts[i];\n var range = Range.fromPoints(p.start, p.end || p.start);\n movePoint(range.start, start);\n movePoint(range.end, start);\n range.original = p;\n range.tabstop = dest;\n ranges.push(range);\n if (dest != ts)\n dest.unshift(range);\n else\n dest[i] = range;\n if (p.fmtString || (dest.firstNonLinked && useLink)) {\n range.linked = true;\n dest.hasLinkedRanges = true;\n }\n else if (!dest.firstNonLinked)\n dest.firstNonLinked = range;\n }\n if (!dest.firstNonLinked)\n dest.hasLinkedRanges = false;\n if (dest === ts) {\n arg.push(dest);\n this.$openTabstops[index] = dest;\n }\n this.addTabstopMarkers(dest);\n dest.rangeList = dest.rangeList || new RangeList();\n dest.rangeList.$bias = 0;\n dest.rangeList.addList(dest);\n }, this);\n if (arg.length > 2) {\n if (this.tabstops.length)\n arg.push(arg.splice(2, 1)[0]);\n this.tabstops.splice.apply(this.tabstops, arg);\n }\n };\n TabstopManager.prototype.addTabstopMarkers = function (ts) {\n var session = this.session;\n ts.forEach(function (range) {\n if (!range.markerId)\n range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n TabstopManager.prototype.removeTabstopMarkers = function (ts) {\n var session = this.session;\n ts.forEach(function (range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n TabstopManager.prototype.updateTabstopMarkers = function () {\n if (!this.selectedTabstop)\n return;\n var currentSnippetId = this.selectedTabstop.snippetId;\n if (this.selectedTabstop.index === 0) {\n currentSnippetId--;\n }\n this.tabstops.forEach(function (ts) {\n if (ts.snippetId === currentSnippetId)\n this.addTabstopMarkers(ts);\n else\n this.removeTabstopMarkers(ts);\n }, this);\n };\n TabstopManager.prototype.removeRange = function (range) {\n var i = range.tabstop.indexOf(range);\n if (i != -1)\n range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n if (i != -1)\n this.ranges.splice(i, 1);\n i = range.tabstop.rangeList.ranges.indexOf(range);\n if (i != -1)\n range.tabstop.splice(i, 1);\n this.session.removeMarker(range.markerId);\n if (!range.tabstop.length) {\n i = this.tabstops.indexOf(range.tabstop);\n if (i != -1)\n this.tabstops.splice(i, 1);\n if (!this.tabstops.length)\n this.detach();\n }\n };\n return TabstopManager;\n}());\nTabstopManager.prototype.keyboardHandler = new HashHandler();\nTabstopManager.prototype.keyboardHandler.bindKeys({\n \"Tab\": function (editor) {\n if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n return;\n editor.tabstopManager.tabNext(1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Shift-Tab\": function (editor) {\n editor.tabstopManager.tabNext(-1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Esc\": function (editor) {\n editor.tabstopManager.detach();\n }\n});\nvar movePoint = function (point, diff) {\n if (point.row == 0)\n point.column += diff.column;\n point.row += diff.row;\n};\nvar moveRelative = function (point, start) {\n if (point.row == start.row)\n point.column -= start.column;\n point.row -= start.row;\n};\ndom.importCssString(\"\\n.ace_snippet-marker {\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n background: rgba(194, 193, 208, 0.09);\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\n position: absolute;\\n}\", \"snippets.css\", false);\nexports.snippetManager = new SnippetManager();\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.insertSnippet = function (content, options) {\n return exports.snippetManager.insertSnippet(this, content, options);\n };\n this.expandSnippet = function (options) {\n return exports.snippetManager.expandWithTab(this, options);\n };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\nvar nls = require(\"../config\").nls;\nvar userAgent = require(\"./../lib/useragent\");\nvar getAriaId = function (index) {\n return \"suggest-aria-id:\".concat(index);\n};\nvar popupAriaRole = userAgent.isSafari ? \"menu\" : \"listbox\";\nvar optionAriaRole = userAgent.isSafari ? \"menuitem\" : \"option\";\nvar ariaActiveState = userAgent.isSafari ? \"aria-current\" : \"aria-selected\";\nvar $singleLineEditor = function (el) {\n var renderer = new Renderer(el);\n renderer.$maxLines = 4;\n var editor = new Editor(renderer);\n editor.setHighlightActiveLine(false);\n editor.setShowPrintMargin(false);\n editor.renderer.setShowGutter(false);\n editor.renderer.setHighlightGutterLine(false);\n editor.$mouseHandler.$focusTimeout = 0;\n editor.$highlightTagPending = true;\n return editor;\n};\nvar AcePopup = /** @class */ (function () {\n function AcePopup(parentNode) {\n var el = dom.createElement(\"div\");\n var popup = $singleLineEditor(el);\n if (parentNode) {\n parentNode.appendChild(el);\n }\n el.style.display = \"none\";\n popup.renderer.content.style.cursor = \"default\";\n popup.renderer.setStyle(\"ace_autocomplete\");\n popup.renderer.$textLayer.element.setAttribute(\"role\", popupAriaRole);\n popup.renderer.$textLayer.element.setAttribute(\"aria-roledescription\", nls(\"Autocomplete suggestions\"));\n popup.renderer.$textLayer.element.setAttribute(\"aria-label\", nls(\"Autocomplete suggestions\"));\n popup.renderer.textarea.setAttribute(\"aria-hidden\", \"true\");\n popup.setOption(\"displayIndentGuides\", false);\n popup.setOption(\"dragDelay\", 150);\n var noop = function () { };\n popup.focus = noop;\n popup.$isFocused = true;\n popup.renderer.$cursorLayer.restartTimer = noop;\n popup.renderer.$cursorLayer.element.style.opacity = \"0\";\n popup.renderer.$maxLines = 8;\n popup.renderer.$keepTextAreaAtCursor = false;\n popup.setHighlightActiveLine(false);\n popup.session.highlight(\"\");\n popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n popup.on(\"mousedown\", function (e) {\n var pos = e.getDocumentPosition();\n popup.selection.moveToPosition(pos);\n selectionMarker.start.row = selectionMarker.end.row = pos.row;\n e.stop();\n });\n var lastMouseEvent;\n var hoverMarker = new Range(-1, 0, -1, Infinity);\n var selectionMarker = new Range(-1, 0, -1, Infinity);\n selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n popup.setSelectOnHover = function (val) {\n if (!val) {\n hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n }\n else if (hoverMarker.id) {\n popup.session.removeMarker(hoverMarker.id);\n hoverMarker.id = null;\n }\n };\n popup.setSelectOnHover(false);\n popup.on(\"mousemove\", function (e) {\n if (!lastMouseEvent) {\n lastMouseEvent = e;\n return;\n }\n if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n return;\n }\n lastMouseEvent = e;\n lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n popup.isMouseOver = true;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (hoverMarker.start.row != row) {\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row);\n }\n });\n popup.renderer.on(\"beforeRender\", function () {\n if (lastMouseEvent && hoverMarker.start.row != -1) {\n lastMouseEvent.$pos = null;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row, true);\n }\n });\n popup.renderer.on(\"afterRender\", function () {\n var row = popup.getRow();\n var t = popup.renderer.$textLayer;\n var selected = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n var el = document.activeElement; // Active element is textarea of main editor\n if (selected !== popup.selectedNode && popup.selectedNode) {\n dom.removeCssClass(popup.selectedNode, \"ace_selected\");\n el.removeAttribute(\"aria-activedescendant\");\n popup.selectedNode.removeAttribute(ariaActiveState);\n popup.selectedNode.removeAttribute(\"id\");\n }\n popup.selectedNode = selected;\n if (selected) {\n dom.addCssClass(selected, \"ace_selected\");\n var ariaId = getAriaId(row);\n selected.id = ariaId;\n t.element.setAttribute(\"aria-activedescendant\", ariaId);\n el.setAttribute(\"aria-activedescendant\", ariaId);\n selected.setAttribute(\"role\", optionAriaRole);\n selected.setAttribute(\"aria-roledescription\", nls(\"item\"));\n selected.setAttribute(\"aria-label\", popup.getData(row).caption || popup.getData(row).value);\n selected.setAttribute(\"aria-setsize\", popup.data.length);\n selected.setAttribute(\"aria-posinset\", row + 1);\n selected.setAttribute(\"aria-describedby\", \"doc-tooltip\");\n selected.setAttribute(ariaActiveState, \"true\");\n }\n });\n var hideHoverMarker = function () { setHoverMarker(-1); };\n var setHoverMarker = function (row, suppressRedraw) {\n if (row !== hoverMarker.start.row) {\n hoverMarker.start.row = hoverMarker.end.row = row;\n if (!suppressRedraw)\n popup.session._emit(\"changeBackMarker\");\n popup._emit(\"changeHoverMarker\");\n }\n };\n popup.getHoveredRow = function () {\n return hoverMarker.start.row;\n };\n event.addListener(popup.container, \"mouseout\", function () {\n popup.isMouseOver = false;\n hideHoverMarker();\n });\n popup.on(\"hide\", hideHoverMarker);\n popup.on(\"changeSelection\", hideHoverMarker);\n popup.session.doc.getLength = function () {\n return popup.data.length;\n };\n popup.session.doc.getLine = function (i) {\n var data = popup.data[i];\n if (typeof data == \"string\")\n return data;\n return (data && data.value) || \"\";\n };\n var bgTokenizer = popup.session.bgTokenizer;\n bgTokenizer.$tokenizeRow = function (row) {\n var data = popup.data[row];\n var tokens = [];\n if (!data)\n return tokens;\n if (typeof data == \"string\")\n data = { value: data };\n var caption = data.caption || data.value || data.name;\n function addToken(value, className) {\n value && tokens.push({\n type: (data.className || \"\") + (className || \"\"),\n value: value\n });\n }\n var lower = caption.toLowerCase();\n var filterText = (popup.filterText || \"\").toLowerCase();\n var lastIndex = 0;\n var lastI = 0;\n for (var i = 0; i <= filterText.length; i++) {\n if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n var sub = filterText.slice(lastI, i);\n lastI = i;\n var index = lower.indexOf(sub, lastIndex);\n if (index == -1)\n continue;\n addToken(caption.slice(lastIndex, index), \"\");\n lastIndex = index + sub.length;\n addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n }\n }\n addToken(caption.slice(lastIndex, caption.length), \"\");\n tokens.push({ type: \"completion-spacer\", value: \" \" });\n if (data.meta)\n tokens.push({ type: \"completion-meta\", value: data.meta });\n if (data.message)\n tokens.push({ type: \"completion-message\", value: data.message });\n return tokens;\n };\n bgTokenizer.$updateOnChange = noop;\n bgTokenizer.start = noop;\n popup.session.$computeWidth = function () {\n return this.screenWidth = 0;\n };\n popup.isOpen = false;\n popup.isTopdown = false;\n popup.autoSelect = true;\n popup.filterText = \"\";\n popup.isMouseOver = false;\n popup.data = [];\n popup.setData = function (list, filterText) {\n popup.filterText = filterText || \"\";\n popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n popup.data = list || [];\n popup.setRow(0);\n };\n popup.getData = function (row) {\n return popup.data[row];\n };\n popup.getRow = function () {\n return selectionMarker.start.row;\n };\n popup.setRow = function (line) {\n line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, line));\n if (selectionMarker.start.row != line) {\n popup.selection.clearSelection();\n selectionMarker.start.row = selectionMarker.end.row = line || 0;\n popup.session._emit(\"changeBackMarker\");\n popup.moveCursorTo(line || 0, 0);\n if (popup.isOpen)\n popup._signal(\"select\");\n }\n };\n popup.on(\"changeSelection\", function () {\n if (popup.isOpen)\n popup.setRow(popup.selection.lead.row);\n popup.renderer.scrollCursorIntoView();\n });\n popup.hide = function () {\n this.container.style.display = \"none\";\n popup.anchorPos = null;\n popup.anchor = null;\n if (popup.isOpen) {\n popup.isOpen = false;\n this._signal(\"hide\");\n }\n };\n popup.tryShow = function (pos, lineHeight, anchor, forceShow) {\n if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor &&\n popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left &&\n popup.anchor === anchor) {\n return true;\n }\n var el = this.container;\n var screenHeight = window.innerHeight;\n var screenWidth = window.innerWidth;\n var renderer = this.renderer;\n var maxH = renderer.$maxLines * lineHeight * 1.4;\n var dims = { top: 0, bottom: 0, left: 0 };\n var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight;\n var spaceAbove = pos.top - 3 * this.$borderSize;\n if (!anchor) {\n if (spaceAbove <= spaceBelow || spaceBelow >= maxH) {\n anchor = \"bottom\";\n }\n else {\n anchor = \"top\";\n }\n }\n if (anchor === \"top\") {\n dims.bottom = pos.top - this.$borderSize;\n dims.top = dims.bottom - maxH;\n }\n else if (anchor === \"bottom\") {\n dims.top = pos.top + lineHeight + this.$borderSize;\n dims.bottom = dims.top + maxH;\n }\n var fitsX = dims.top >= 0 && dims.bottom <= screenHeight;\n if (!forceShow && !fitsX) {\n return false;\n }\n if (!fitsX) {\n if (anchor === \"top\") {\n renderer.$maxPixelHeight = spaceAbove;\n }\n else {\n renderer.$maxPixelHeight = spaceBelow;\n }\n }\n else {\n renderer.$maxPixelHeight = null;\n }\n if (anchor === \"top\") {\n el.style.top = \"\";\n el.style.bottom = (screenHeight - dims.bottom) + \"px\";\n popup.isTopdown = false;\n }\n else {\n el.style.top = dims.top + \"px\";\n el.style.bottom = \"\";\n popup.isTopdown = true;\n }\n el.style.display = \"\";\n var left = pos.left;\n if (left + el.offsetWidth > screenWidth)\n left = screenWidth - el.offsetWidth;\n el.style.left = left + \"px\";\n el.style.right = \"\";\n if (!popup.isOpen) {\n popup.isOpen = true;\n this._signal(\"show\");\n lastMouseEvent = null;\n }\n popup.anchorPos = pos;\n popup.anchor = anchor;\n return true;\n };\n popup.show = function (pos, lineHeight, topdownOnly) {\n this.tryShow(pos, lineHeight, topdownOnly ? \"bottom\" : undefined, true);\n };\n popup.goTo = function (where) {\n var row = this.getRow();\n var max = this.session.getLength() - 1;\n switch (where) {\n case \"up\":\n row = row <= 0 ? max : row - 1;\n break;\n case \"down\":\n row = row >= max ? -1 : row + 1;\n break;\n case \"start\":\n row = 0;\n break;\n case \"end\":\n row = max;\n break;\n }\n this.setRow(row);\n };\n popup.getTextLeftOffset = function () {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n };\n popup.$imageSize = 0;\n popup.$borderSize = 1;\n return popup;\n }\n return AcePopup;\n}());\ndom.importCssString(\"\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #CAD6FA;\\n z-index: 1;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #3a674e;\\n}\\n.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid #abbffe;\\n margin-top: -1px;\\n background: rgba(233,233,253,0.4);\\n position: absolute;\\n z-index: 2;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid rgba(109, 150, 13, 0.8);\\n background: rgba(58, 103, 78, 0.62);\\n}\\n.ace_completion-meta {\\n opacity: 0.5;\\n margin-left: 0.9em;\\n}\\n.ace_completion-message {\\n margin-left: 0.9em;\\n color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n width: 300px;\\n z-index: 200000;\\n border: 1px lightgray solid;\\n position: fixed;\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n line-height: 1.4;\\n background: #fefefe;\\n color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n border: 1px #484747 solid;\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n line-height: 1.4;\\n background: #25282c;\\n color: #c1c1c1;\\n}\\n.ace_autocomplete .ace_text-layer {\\n width: calc(100% - 8px);\\n}\\n.ace_autocomplete .ace_line {\\n display: flex;\\n align-items: center;\\n}\\n.ace_autocomplete .ace_line > * {\\n min-width: 0;\\n flex: 0 0 auto;\\n}\\n.ace_autocomplete .ace_line .ace_ {\\n flex: 0 1 auto;\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n.ace_autocomplete .ace_completion-spacer {\\n flex: 1;\\n}\\n.ace_autocomplete.ace_loading:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0px;\\n height: 2px;\\n width: 8%;\\n background: blue;\\n z-index: 100;\\n animation: ace_progress 3s infinite linear;\\n animation-delay: 300ms;\\n transform: translateX(-100%) scaleX(1);\\n}\\n@keyframes ace_progress {\\n 0% { transform: translateX(-100%) scaleX(1) }\\n 50% { transform: translateX(625%) scaleX(2) } \\n 100% { transform: translateX(1500%) scaleX(3) } \\n}\\n@media (prefers-reduced-motion) {\\n .ace_autocomplete.ace_loading:after {\\n transform: translateX(625%) scaleX(2);\\n animation: none;\\n }\\n}\\n\", \"autocompletion.css\", false);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\nexports.getAriaId = getAriaId;\n\n});\n\nace.define(\"ace/autocomplete/inline_screenreader\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar AceInlineScreenReader = /** @class */ (function () {\n function AceInlineScreenReader(editor) {\n this.editor = editor;\n this.screenReaderDiv = document.createElement(\"div\");\n this.screenReaderDiv.classList.add(\"ace_screenreader-only\");\n this.editor.container.appendChild(this.screenReaderDiv);\n }\n AceInlineScreenReader.prototype.setScreenReaderContent = function (content) {\n if (!this.popup && this.editor.completer && /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup) {\n this.popup = /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup;\n this.popup.renderer.on(\"afterRender\", function () {\n var row = this.popup.getRow();\n var t = this.popup.renderer.$textLayer;\n var selected = t.element.childNodes[row - t.config.firstRow];\n if (selected) {\n var idString = \"doc-tooltip \";\n for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n idString += \"ace-inline-screenreader-line-\".concat(lineIndex, \" \");\n }\n selected.setAttribute(\"aria-describedby\", idString);\n }\n }.bind(this));\n }\n while (this.screenReaderDiv.firstChild) {\n this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild);\n }\n this._lines = content.split(/\\r\\n|\\r|\\n/);\n var codeElement = this.createCodeBlock();\n this.screenReaderDiv.appendChild(codeElement);\n };\n AceInlineScreenReader.prototype.destroy = function () {\n this.screenReaderDiv.remove();\n };\n AceInlineScreenReader.prototype.createCodeBlock = function () {\n var container = document.createElement(\"pre\");\n container.setAttribute(\"id\", \"ace-inline-screenreader\");\n for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n var codeElement = document.createElement(\"code\");\n codeElement.setAttribute(\"id\", \"ace-inline-screenreader-line-\".concat(lineIndex));\n var line = document.createTextNode(this._lines[lineIndex]);\n codeElement.appendChild(line);\n container.appendChild(codeElement);\n }\n return container;\n };\n return AceInlineScreenReader;\n}());\nexports.AceInlineScreenReader = AceInlineScreenReader;\n\n});\n\nace.define(\"ace/autocomplete/inline\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete/inline_screenreader\"], function(require, exports, module){\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar AceInlineScreenReader = require(\"./inline_screenreader\").AceInlineScreenReader;\nvar AceInline = /** @class */ (function () {\n function AceInline() {\n this.editor = null;\n }\n AceInline.prototype.show = function (editor, completion, prefix) {\n prefix = prefix || \"\";\n if (editor && this.editor && this.editor !== editor) {\n this.hide();\n this.editor = null;\n this.inlineScreenReader = null;\n }\n if (!editor || !completion) {\n return false;\n }\n if (!this.inlineScreenReader) {\n this.inlineScreenReader = new AceInlineScreenReader(editor);\n }\n var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value;\n if (completion.hideInlinePreview || !displayText || !displayText.startsWith(prefix)) {\n return false;\n }\n this.editor = editor;\n this.inlineScreenReader.setScreenReaderContent(displayText);\n displayText = displayText.slice(prefix.length);\n if (displayText === \"\") {\n editor.removeGhostText();\n }\n else {\n editor.setGhostText(displayText);\n }\n return true;\n };\n AceInline.prototype.isOpen = function () {\n if (!this.editor) {\n return false;\n }\n return !!this.editor.renderer.$ghostText;\n };\n AceInline.prototype.hide = function () {\n if (!this.editor) {\n return false;\n }\n this.editor.removeGhostText();\n return true;\n };\n AceInline.prototype.destroy = function () {\n this.hide();\n this.editor = null;\n if (this.inlineScreenReader) {\n this.inlineScreenReader.destroy();\n this.inlineScreenReader = null;\n }\n };\n return AceInline;\n}());\nexports.AceInline = AceInline;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.parForEach = function (array, fn, callback) {\n var completed = 0;\n var arLength = array.length;\n if (arLength === 0)\n callback();\n for (var i = 0; i < arLength; i++) {\n fn(array[i], function (result, err) {\n completed++;\n if (completed === arLength)\n callback(result, err);\n });\n }\n};\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\nexports.retrievePrecedingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos - 1; i >= 0; i--) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf.reverse().join(\"\");\n};\nexports.retrieveFollowingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos; i < text.length; i++) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf;\n};\nexports.getCompletionPrefix = function (editor) {\n var pos = editor.getCursorPosition();\n var line = editor.session.getLine(pos.row);\n var prefix;\n editor.completers.forEach(function (completer) {\n if (completer.identifierRegexps) {\n completer.identifierRegexps.forEach(function (identifierRegex) {\n if (!prefix && identifierRegex)\n prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n }.bind(this));\n }\n }.bind(this));\n return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\nexports.triggerAutocomplete = function (editor) {\n var pos = editor.getCursorPosition();\n var line = editor.session.getLine(pos.row);\n var column = (pos.column === 0) ? 0 : pos.column - 1;\n var previousChar = line[column];\n return editor.completers.some(function (el) {\n if (el.triggerCharacters && Array.isArray(el.triggerCharacters)) {\n return el.triggerCharacters.includes(previousChar);\n }\n });\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/inline\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\",\"ace/lib/event\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar AceInline = require(\"./autocomplete/inline\").AceInline;\nvar getAriaId = require(\"./autocomplete/popup\").getAriaId;\nvar util = require(\"./autocomplete/util\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar config = require(\"./config\");\nvar event = require(\"./lib/event\");\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar destroyCompleter = function (e, editor) {\n editor.completer && editor.completer.destroy();\n};\nvar Autocomplete = /** @class */ (function () {\n function Autocomplete() {\n this.autoInsert = false;\n this.autoSelect = true;\n this.autoShown = false;\n this.exactMatch = false;\n this.inlineEnabled = false;\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys(this.commands);\n this.parentNode = null;\n this.setSelectOnHover = false;\n this.hasSeen = new Set();\n this.showLoadingState = false;\n this.stickySelectionDelay = 500;\n this.blurListener = this.blurListener.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.mousedownListener = this.mousedownListener.bind(this);\n this.mousewheelListener = this.mousewheelListener.bind(this);\n this.onLayoutChange = this.onLayoutChange.bind(this);\n this.changeTimer = lang.delayedCall(function () {\n this.updateCompletions(true);\n }.bind(this));\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n this.popupTimer = lang.delayedCall(this.$updatePopupPosition.bind(this), 50);\n this.stickySelectionTimer = lang.delayedCall(function () {\n this.stickySelection = true;\n }.bind(this), this.stickySelectionDelay);\n this.$firstOpenTimer = lang.delayedCall(/**@this{Autocomplete}*/ function () {\n var initialPosition = this.completionProvider && this.completionProvider.initialPosition;\n if (this.autoShown || (this.popup && this.popup.isOpen) || !initialPosition || this.editor.completers.length === 0)\n return;\n this.completions = new FilteredList(Autocomplete.completionsForLoading);\n this.openPopup(this.editor, initialPosition.prefix, false);\n this.popup.renderer.setStyle(\"ace_loading\", true);\n }.bind(this), this.stickySelectionDelay);\n }\n Object.defineProperty(Autocomplete, \"completionsForLoading\", {\n get: function () {\n return [{\n caption: config.nls(\"Loading...\"),\n value: \"\"\n }];\n },\n enumerable: false,\n configurable: true\n });\n Autocomplete.prototype.$init = function () {\n this.popup = new AcePopup(this.parentNode || document.body || document.documentElement);\n this.popup.on(\"click\", function (e) {\n this.insertMatch();\n e.stop();\n }.bind(this));\n this.popup.focus = this.editor.focus.bind(this.editor);\n this.popup.on(\"show\", this.$onPopupShow.bind(this));\n this.popup.on(\"hide\", this.$onHidePopup.bind(this));\n this.popup.on(\"select\", this.$onPopupChange.bind(this));\n event.addListener(this.popup.container, \"mouseout\", this.mouseOutListener.bind(this));\n this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n this.popup.renderer.on(\"afterRender\", this.$onPopupRender.bind(this));\n return this.popup;\n };\n Autocomplete.prototype.$initInline = function () {\n if (!this.inlineEnabled || this.inlineRenderer)\n return;\n this.inlineRenderer = new AceInline();\n return this.inlineRenderer;\n };\n Autocomplete.prototype.getPopup = function () {\n return this.popup || this.$init();\n };\n Autocomplete.prototype.$onHidePopup = function () {\n if (this.inlineRenderer) {\n this.inlineRenderer.hide();\n }\n this.hideDocTooltip();\n this.stickySelectionTimer.cancel();\n this.popupTimer.cancel();\n this.stickySelection = false;\n };\n Autocomplete.prototype.$seen = function (completion) {\n if (!this.hasSeen.has(completion) && completion && completion.completer && completion.completer.onSeen && typeof completion.completer.onSeen === \"function\") {\n completion.completer.onSeen(this.editor, completion);\n this.hasSeen.add(completion);\n }\n };\n Autocomplete.prototype.$onPopupChange = function (hide) {\n if (this.inlineRenderer && this.inlineEnabled) {\n var completion = hide ? null : this.popup.getData(this.popup.getRow());\n this.$updateGhostText(completion);\n if (this.popup.isMouseOver && this.setSelectOnHover) {\n this.tooltipTimer.call(null, null);\n return;\n }\n this.popupTimer.schedule();\n this.tooltipTimer.schedule();\n }\n else {\n this.popupTimer.call(null, null);\n this.tooltipTimer.call(null, null);\n }\n };\n Autocomplete.prototype.$updateGhostText = function (completion) {\n var row = this.base.row;\n var column = this.base.column;\n var cursorColumn = this.editor.getCursorPosition().column;\n var prefix = this.editor.session.getLine(row).slice(column, cursorColumn);\n if (!this.inlineRenderer.show(this.editor, completion, prefix)) {\n this.inlineRenderer.hide();\n }\n else {\n this.$seen(completion);\n }\n };\n Autocomplete.prototype.$onPopupRender = function () {\n var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n if (this.completions && this.completions.filtered && this.completions.filtered.length > 0) {\n for (var i = this.popup.getFirstVisibleRow(); i <= this.popup.getLastVisibleRow(); i++) {\n var completion = this.popup.getData(i);\n if (completion && (!inlineEnabled || completion.hideInlinePreview)) {\n this.$seen(completion);\n }\n }\n }\n };\n Autocomplete.prototype.$onPopupShow = function (hide) {\n this.$onPopupChange(hide);\n this.stickySelection = false;\n if (this.stickySelectionDelay >= 0)\n this.stickySelectionTimer.schedule(this.stickySelectionDelay);\n };\n Autocomplete.prototype.observeLayoutChanges = function () {\n if (this.$elements || !this.editor)\n return;\n window.addEventListener(\"resize\", this.onLayoutChange, { passive: true });\n window.addEventListener(\"wheel\", this.mousewheelListener);\n var el = this.editor.container.parentNode;\n var elements = [];\n while (el) {\n elements.push(el);\n el.addEventListener(\"scroll\", this.onLayoutChange, { passive: true });\n el = el.parentNode;\n }\n this.$elements = elements;\n };\n Autocomplete.prototype.unObserveLayoutChanges = function () {\n var _this = this;\n window.removeEventListener(\"resize\", this.onLayoutChange, { passive: true });\n window.removeEventListener(\"wheel\", this.mousewheelListener);\n this.$elements && this.$elements.forEach(function (el) {\n el.removeEventListener(\"scroll\", _this.onLayoutChange, { passive: true });\n });\n this.$elements = null;\n };\n Autocomplete.prototype.onLayoutChange = function () {\n if (!this.popup.isOpen)\n return this.unObserveLayoutChanges();\n this.$updatePopupPosition();\n this.updateDocTooltip();\n };\n Autocomplete.prototype.$updatePopupPosition = function () {\n var editor = this.editor;\n var renderer = editor.renderer;\n var lineHeight = renderer.layerConfig.lineHeight;\n var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n pos.left -= this.popup.getTextLeftOffset();\n var rect = editor.container.getBoundingClientRect();\n pos.top += rect.top - renderer.layerConfig.offset;\n pos.left += rect.left - editor.renderer.scrollLeft;\n pos.left += renderer.gutterWidth;\n var posGhostText = {\n top: pos.top,\n left: pos.left\n };\n if (renderer.$ghostText && renderer.$ghostTextWidget) {\n if (this.base.row === renderer.$ghostText.position.row) {\n posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight;\n }\n }\n var editorContainerBottom = editor.container.getBoundingClientRect().bottom - lineHeight;\n var lowestPosition = editorContainerBottom < posGhostText.top ?\n { top: editorContainerBottom, left: posGhostText.left } :\n posGhostText;\n if (this.popup.tryShow(lowestPosition, lineHeight, \"bottom\")) {\n return;\n }\n if (this.popup.tryShow(pos, lineHeight, \"top\")) {\n return;\n }\n this.popup.show(pos, lineHeight);\n };\n Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) {\n this.$firstOpenTimer.cancel();\n if (!this.popup)\n this.$init();\n if (this.inlineEnabled && !this.inlineRenderer)\n this.$initInline();\n this.popup.autoSelect = this.autoSelect;\n this.popup.setSelectOnHover(this.setSelectOnHover);\n var oldRow = this.popup.getRow();\n var previousSelectedItem = this.popup.data[oldRow];\n this.popup.setData(this.completions.filtered, this.completions.filterText);\n if (this.editor.textInput.setAriaOptions) {\n this.editor.textInput.setAriaOptions({\n activeDescendant: getAriaId(this.popup.getRow()),\n inline: this.inlineEnabled\n });\n }\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n var newRow;\n if (this.stickySelection)\n newRow = this.popup.data.indexOf(previousSelectedItem);\n if (!newRow || newRow === -1)\n newRow = 0;\n this.popup.setRow(this.autoSelect ? newRow : -1);\n if (newRow === oldRow && previousSelectedItem !== this.completions.filtered[newRow])\n this.$onPopupChange();\n var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n if (newRow === oldRow && inlineEnabled) {\n var completion = this.popup.getData(this.popup.getRow());\n this.$updateGhostText(completion);\n }\n if (!keepPopupPosition) {\n this.popup.setTheme(editor.getTheme());\n this.popup.setFontSize(editor.getFontSize());\n this.$updatePopupPosition();\n if (this.tooltipNode) {\n this.updateDocTooltip();\n }\n }\n else if (keepPopupPosition && !prefix) {\n this.detach();\n }\n this.changeTimer.cancel();\n this.observeLayoutChanges();\n };\n Autocomplete.prototype.detach = function () {\n if (this.editor) {\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.off(\"changeSelection\", this.changeListener);\n this.editor.off(\"blur\", this.blurListener);\n this.editor.off(\"mousedown\", this.mousedownListener);\n this.editor.off(\"mousewheel\", this.mousewheelListener);\n }\n this.$firstOpenTimer.cancel();\n this.changeTimer.cancel();\n this.hideDocTooltip();\n if (this.completionProvider) {\n this.completionProvider.detach();\n }\n if (this.popup && this.popup.isOpen)\n this.popup.hide();\n if (this.popup && this.popup.renderer) {\n this.popup.renderer.off(\"afterRender\", this.$onPopupRender);\n }\n if (this.base)\n this.base.detach();\n this.activated = false;\n this.completionProvider = this.completions = this.base = null;\n this.unObserveLayoutChanges();\n };\n Autocomplete.prototype.changeListener = function (e) {\n var cursor = this.editor.selection.lead;\n if (cursor.row != this.base.row || cursor.column < this.base.column) {\n this.detach();\n }\n if (this.activated)\n this.changeTimer.schedule();\n else\n this.detach();\n };\n Autocomplete.prototype.blurListener = function (e) {\n var el = document.activeElement;\n var text = this.editor.textInput.getElement();\n var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n var container = this.popup && this.popup.container;\n if (el != text && el.parentNode != container && !fromTooltip\n && el != this.tooltipNode && e.relatedTarget != text) {\n this.detach();\n }\n };\n Autocomplete.prototype.mousedownListener = function (e) {\n this.detach();\n };\n Autocomplete.prototype.mousewheelListener = function (e) {\n if (!this.popup.isMouseOver)\n this.detach();\n };\n Autocomplete.prototype.mouseOutListener = function (e) {\n if (this.popup.isOpen)\n this.$updatePopupPosition();\n };\n Autocomplete.prototype.goTo = function (where) {\n this.popup.goTo(where);\n };\n Autocomplete.prototype.insertMatch = function (data, options) {\n if (!data)\n data = this.popup.getData(this.popup.getRow());\n if (!data)\n return false;\n if (data.value === \"\") // Explicitly given nothing to insert, e.g. \"No suggestion state\"\n return this.detach();\n var completions = this.completions;\n var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options);\n if (this.completions == completions)\n this.detach();\n return result;\n };\n Autocomplete.prototype.showPopup = function (editor, options) {\n if (this.editor)\n this.detach();\n this.activated = true;\n this.editor = editor;\n if (editor.completer != this) {\n if (editor.completer)\n editor.completer.detach();\n editor.completer = this;\n }\n editor.on(\"changeSelection\", this.changeListener);\n editor.on(\"blur\", this.blurListener);\n editor.on(\"mousedown\", this.mousedownListener);\n editor.on(\"mousewheel\", this.mousewheelListener);\n this.updateCompletions(false, options);\n };\n Autocomplete.prototype.getCompletionProvider = function (initialPosition) {\n if (!this.completionProvider)\n this.completionProvider = new CompletionProvider(initialPosition);\n return this.completionProvider;\n };\n Autocomplete.prototype.gatherCompletions = function (editor, callback) {\n return this.getCompletionProvider().gatherCompletions(editor, callback);\n };\n Autocomplete.prototype.updateCompletions = function (keepPopupPosition, options) {\n if (keepPopupPosition && this.base && this.completions) {\n var pos = this.editor.getCursorPosition();\n var prefix = this.editor.session.getTextRange({ start: this.base, end: pos });\n if (prefix == this.completions.filterText)\n return;\n this.completions.setFilter(prefix);\n if (!this.completions.filtered.length)\n return this.detach();\n if (this.completions.filtered.length == 1\n && this.completions.filtered[0].value == prefix\n && !this.completions.filtered[0].snippet)\n return this.detach();\n this.openPopup(this.editor, prefix, keepPopupPosition);\n return;\n }\n if (options && options.matches) {\n var pos = this.editor.getSelectionRange().start;\n this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n this.base.$insertRight = true;\n this.completions = new FilteredList(options.matches);\n this.getCompletionProvider().completions = this.completions;\n return this.openPopup(this.editor, \"\", keepPopupPosition);\n }\n var session = this.editor.getSession();\n var pos = this.editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(this.editor);\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\n var completionOptions = {\n exactMatch: this.exactMatch,\n ignoreCaption: this.ignoreCaption\n };\n this.getCompletionProvider({\n prefix: prefix,\n pos: pos\n }).provideCompletions(this.editor, completionOptions, \n function (err, completions, finished) {\n var filtered = completions.filtered;\n var prefix = util.getCompletionPrefix(this.editor);\n this.$firstOpenTimer.cancel();\n if (finished) {\n if (!filtered.length) {\n var emptyMessage = !this.autoShown && this.emptyMessage;\n if (typeof emptyMessage == \"function\")\n emptyMessage = this.emptyMessage(prefix);\n if (emptyMessage) {\n var completionsForEmpty = [{\n caption: emptyMessage,\n value: \"\"\n }\n ];\n this.completions = new FilteredList(completionsForEmpty);\n this.openPopup(this.editor, prefix, keepPopupPosition);\n this.popup.renderer.setStyle(\"ace_loading\", false);\n return;\n }\n return this.detach();\n }\n if (filtered.length == 1 && filtered[0].value == prefix\n && !filtered[0].snippet)\n return this.detach();\n if (this.autoInsert && !this.autoShown && filtered.length == 1)\n return this.insertMatch(filtered[0]);\n }\n this.completions = !finished && this.showLoadingState ?\n new FilteredList(Autocomplete.completionsForLoading.concat(filtered), completions.filterText) :\n completions;\n this.openPopup(this.editor, prefix, keepPopupPosition);\n this.popup.renderer.setStyle(\"ace_loading\", !finished);\n }.bind(this));\n if (this.showLoadingState && !this.autoShown && !(this.popup && this.popup.isOpen)) {\n this.$firstOpenTimer.delay(this.stickySelectionDelay / 2);\n }\n };\n Autocomplete.prototype.cancelContextMenu = function () {\n this.editor.$mouseHandler.cancelContextMenu();\n };\n Autocomplete.prototype.updateDocTooltip = function () {\n var popup = this.popup;\n var all = this.completions.filtered;\n var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n var doc = null;\n if (!selected || !this.editor || !this.popup.isOpen)\n return this.hideDocTooltip();\n var completersLength = this.editor.completers.length;\n for (var i = 0; i < completersLength; i++) {\n var completer = this.editor.completers[i];\n if (completer.getDocTooltip && selected.completerId === completer.id) {\n doc = completer.getDocTooltip(selected);\n break;\n }\n }\n if (!doc && typeof selected != \"string\")\n doc = selected;\n if (typeof doc == \"string\")\n doc = { docText: doc };\n if (!doc || !(doc.docHTML || doc.docText))\n return this.hideDocTooltip();\n this.showDocTooltip(doc);\n };\n Autocomplete.prototype.showDocTooltip = function (item) {\n if (!this.tooltipNode) {\n this.tooltipNode = dom.createElement(\"div\");\n this.tooltipNode.style.margin = \"0\";\n this.tooltipNode.style.pointerEvents = \"auto\";\n this.tooltipNode.style.overscrollBehavior = \"contain\";\n this.tooltipNode.tabIndex = -1;\n this.tooltipNode.onblur = this.blurListener.bind(this);\n this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n this.tooltipNode.id = \"doc-tooltip\";\n this.tooltipNode.setAttribute(\"role\", \"tooltip\");\n this.tooltipNode.addEventListener(\"wheel\", preventParentScroll);\n }\n var theme = this.editor.renderer.theme;\n this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n var tooltipNode = this.tooltipNode;\n if (item.docHTML) {\n tooltipNode.innerHTML = item.docHTML;\n }\n else if (item.docText) {\n tooltipNode.textContent = item.docText;\n }\n if (!tooltipNode.parentNode)\n this.popup.container.appendChild(this.tooltipNode);\n var popup = this.popup;\n var rect = popup.container.getBoundingClientRect();\n tooltipNode.style.top = popup.container.style.top;\n tooltipNode.style.bottom = popup.container.style.bottom;\n tooltipNode.style.display = \"block\";\n if (window.innerWidth - rect.right < 320) {\n if (rect.left < 320) {\n if (popup.isTopdown) {\n tooltipNode.style.top = rect.bottom + \"px\";\n tooltipNode.style.left = rect.left + \"px\";\n tooltipNode.style.right = \"\";\n tooltipNode.style.bottom = \"\";\n }\n else {\n tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n tooltipNode.style.left = rect.left + \"px\";\n tooltipNode.style.right = \"\";\n tooltipNode.style.bottom = \"\";\n }\n }\n else {\n tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n tooltipNode.style.left = \"\";\n }\n }\n else {\n tooltipNode.style.left = (rect.right + 1) + \"px\";\n tooltipNode.style.right = \"\";\n }\n };\n Autocomplete.prototype.hideDocTooltip = function () {\n this.tooltipTimer.cancel();\n if (!this.tooltipNode)\n return;\n var el = this.tooltipNode;\n if (!this.editor.isFocused() && document.activeElement == el)\n this.editor.focus();\n this.tooltipNode = null;\n if (el.parentNode)\n el.parentNode.removeChild(el);\n };\n Autocomplete.prototype.onTooltipClick = function (e) {\n var a = e.target;\n while (a && a != this.tooltipNode) {\n if (a.nodeName == \"A\" && a.href) {\n a.rel = \"noreferrer\";\n a.target = \"_blank\";\n break;\n }\n a = a.parentNode;\n }\n };\n Autocomplete.prototype.destroy = function () {\n this.detach();\n if (this.popup) {\n this.popup.destroy();\n var el = this.popup.container;\n if (el && el.parentNode)\n el.parentNode.removeChild(el);\n }\n if (this.editor && this.editor.completer == this) {\n this.editor.off(\"destroy\", destroyCompleter);\n this.editor.completer = null;\n }\n this.inlineRenderer = this.popup = this.editor = null;\n };\n return Autocomplete;\n}());\nAutocomplete.prototype.commands = {\n \"Up\": function (editor) { editor.completer.goTo(\"up\"); },\n \"Down\": function (editor) { editor.completer.goTo(\"down\"); },\n \"Ctrl-Up|Ctrl-Home\": function (editor) { editor.completer.goTo(\"start\"); },\n \"Ctrl-Down|Ctrl-End\": function (editor) { editor.completer.goTo(\"end\"); },\n \"Esc\": function (editor) { editor.completer.detach(); },\n \"Return\": function (editor) { return editor.completer.insertMatch(); },\n \"Shift-Return\": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); },\n \"Tab\": function (editor) {\n var result = editor.completer.insertMatch();\n if (!result && !editor.tabstopManager)\n editor.completer.goTo(\"down\");\n else\n return result;\n },\n \"PageUp\": function (editor) { editor.completer.popup.gotoPageUp(); },\n \"PageDown\": function (editor) { editor.completer.popup.gotoPageDown(); }\n};\nAutocomplete.for = function (editor) {\n if (editor.completer instanceof Autocomplete) {\n return editor.completer;\n }\n if (editor.completer) {\n editor.completer.destroy();\n editor.completer = null;\n }\n if (config.get(\"sharedPopups\")) {\n if (!Autocomplete[\"$sharedInstance\"])\n Autocomplete[\"$sharedInstance\"] = new Autocomplete();\n editor.completer = Autocomplete[\"$sharedInstance\"];\n }\n else {\n editor.completer = new Autocomplete();\n editor.once(\"destroy\", destroyCompleter);\n }\n return editor.completer;\n};\nAutocomplete.startCommand = {\n name: \"startAutocomplete\",\n exec: function (editor, options) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.autoSelect = true;\n completer.autoShown = false;\n completer.showPopup(editor, options);\n completer.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\nvar CompletionProvider = /** @class */ (function () {\n function CompletionProvider(initialPosition) {\n this.initialPosition = initialPosition;\n this.active = true;\n }\n CompletionProvider.prototype.insertByIndex = function (editor, index, options) {\n if (!this.completions || !this.completions.filtered) {\n return false;\n }\n return this.insertMatch(editor, this.completions.filtered[index], options);\n };\n CompletionProvider.prototype.insertMatch = function (editor, data, options) {\n if (!data)\n return false;\n editor.startOperation({ command: { name: \"insertMatch\" } });\n if (data.completer && data.completer.insertMatch) {\n data.completer.insertMatch(editor, data);\n }\n else {\n if (!this.completions)\n return false;\n var replaceBefore = this.completions.filterText.length;\n var replaceAfter = 0;\n if (data.range && data.range.start.row === data.range.end.row) {\n replaceBefore -= this.initialPosition.prefix.length;\n replaceBefore += this.initialPosition.pos.column - data.range.start.column;\n replaceAfter += data.range.end.column - this.initialPosition.pos.column;\n }\n if (replaceBefore || replaceAfter) {\n var ranges;\n if (editor.selection.getAllRanges) {\n ranges = editor.selection.getAllRanges();\n }\n else {\n ranges = [editor.getSelectionRange()];\n }\n for (var i = 0, range; range = ranges[i]; i++) {\n range.start.column -= replaceBefore;\n range.end.column += replaceAfter;\n editor.session.remove(range);\n }\n }\n if (data.snippet) {\n snippetManager.insertSnippet(editor, data.snippet);\n }\n else {\n this.$insertString(editor, data);\n }\n if (data.completer && data.completer.onInsert && typeof data.completer.onInsert == \"function\") {\n data.completer.onInsert(editor, data);\n }\n if (data.command && data.command === \"startAutocomplete\") {\n editor.execCommand(data.command);\n }\n }\n editor.endOperation();\n return true;\n };\n CompletionProvider.prototype.$insertString = function (editor, data) {\n var text = data.value || data;\n editor.execCommand(\"insertstring\", text);\n };\n CompletionProvider.prototype.gatherCompletions = function (editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(editor);\n var matches = [];\n this.completers = editor.completers;\n var total = editor.completers.length;\n editor.completers.forEach(function (completer, i) {\n completer.getCompletions(editor, session, pos, prefix, function (err, results) {\n if (completer.hideInlinePreview)\n results = results.map(function (result) {\n return Object.assign(result, { hideInlinePreview: completer.hideInlinePreview });\n });\n if (!err && results)\n matches = matches.concat(results);\n callback(null, {\n prefix: util.getCompletionPrefix(editor),\n matches: matches,\n finished: (--total === 0)\n });\n });\n });\n return true;\n };\n CompletionProvider.prototype.provideCompletions = function (editor, options, callback) {\n var processResults = function (results) {\n var prefix = results.prefix;\n var matches = results.matches;\n this.completions = new FilteredList(matches);\n if (options.exactMatch)\n this.completions.exactMatch = true;\n if (options.ignoreCaption)\n this.completions.ignoreCaption = true;\n this.completions.setFilter(prefix);\n if (results.finished || this.completions.filtered.length)\n callback(null, this.completions, results.finished);\n }.bind(this);\n var isImmediate = true;\n var immediateResults = null;\n this.gatherCompletions(editor, function (err, results) {\n if (!this.active) {\n return;\n }\n if (err) {\n callback(err, [], true);\n this.detach();\n }\n var prefix = results.prefix;\n if (prefix.indexOf(results.prefix) !== 0)\n return;\n if (isImmediate) {\n immediateResults = results;\n return;\n }\n processResults(results);\n }.bind(this));\n isImmediate = false;\n if (immediateResults) {\n var results = immediateResults;\n immediateResults = null;\n processResults(results);\n }\n };\n CompletionProvider.prototype.detach = function () {\n this.active = false;\n this.completers && this.completers.forEach(function (completer) {\n if (typeof completer.cancel === \"function\") {\n completer.cancel();\n }\n });\n };\n return CompletionProvider;\n}());\nvar FilteredList = /** @class */ (function () {\n function FilteredList(array, filterText) {\n this.all = array;\n this.filtered = array;\n this.filterText = filterText || \"\";\n this.exactMatch = false;\n this.ignoreCaption = false;\n }\n FilteredList.prototype.setFilter = function (str) {\n if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n var matches = this.filtered;\n else\n var matches = this.all;\n this.filterText = str;\n matches = this.filterCompletions(matches, this.filterText);\n matches = matches.sort(function (a, b) {\n return b.exactMatch - a.exactMatch || b.$score - a.$score\n || (a.caption || a.value).localeCompare(b.caption || b.value);\n });\n var prev = null;\n matches = matches.filter(function (item) {\n var caption = item.snippet || item.caption || item.value;\n if (caption === prev)\n return false;\n prev = caption;\n return true;\n });\n this.filtered = matches;\n };\n FilteredList.prototype.filterCompletions = function (items, needle) {\n var results = [];\n var upper = needle.toUpperCase();\n var lower = needle.toLowerCase();\n loop: for (var i = 0, item; item = items[i]; i++) {\n var caption = (!this.ignoreCaption && item.caption) || item.value || item.snippet;\n if (!caption)\n continue;\n var lastIndex = -1;\n var matchMask = 0;\n var penalty = 0;\n var index, distance;\n if (this.exactMatch) {\n if (needle !== caption.substr(0, needle.length))\n continue loop;\n }\n else {\n var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n if (fullMatchIndex > -1) {\n penalty = fullMatchIndex;\n }\n else {\n for (var j = 0; j < needle.length; j++) {\n var i1 = caption.indexOf(lower[j], lastIndex + 1);\n var i2 = caption.indexOf(upper[j], lastIndex + 1);\n index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n if (index < 0)\n continue loop;\n distance = index - lastIndex - 1;\n if (distance > 0) {\n if (lastIndex === -1)\n penalty += 10;\n penalty += distance;\n matchMask = matchMask | (1 << j);\n }\n lastIndex = index;\n }\n }\n }\n item.matchMask = matchMask;\n item.exactMatch = penalty ? 0 : 1;\n item.$score = (item.score || 0) - penalty;\n results.push(item);\n }\n return results;\n };\n return FilteredList;\n}());\nexports.Autocomplete = Autocomplete;\nexports.CompletionProvider = CompletionProvider;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){var Range = require(\"../range\").Range;\nvar splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\nfunction getWordIndex(doc, pos) {\n var textBefore = doc.getTextRange(Range.fromPoints({\n row: 0,\n column: 0\n }, pos));\n return textBefore.split(splitRegex).length - 1;\n}\nfunction wordDistance(doc, pos) {\n var prefixPos = getWordIndex(doc, pos);\n var words = doc.getValue().split(splitRegex);\n var wordScores = Object.create(null);\n var currentWord = words[prefixPos];\n words.forEach(function (word, idx) {\n if (!word || word === currentWord)\n return;\n var distance = Math.abs(prefixPos - idx);\n var score = words.length - distance;\n if (wordScores[word]) {\n wordScores[word] = Math.max(score, wordScores[word]);\n }\n else {\n wordScores[word] = score;\n }\n });\n return wordScores;\n}\nexports.getCompletions = function (editor, session, pos, prefix, callback) {\n var wordScore = wordDistance(session, pos);\n var wordList = Object.keys(wordScore);\n callback(null, wordList.map(function (word) {\n return {\n caption: word,\n value: word,\n score: wordScore[word],\n meta: \"local\"\n };\n }));\n};\n\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n getCompletions: function (editor, session, pos, prefix, callback) {\n if (session.$mode.completer) {\n return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n }\n var state = editor.session.getState(pos.row);\n var completions = session.$mode.getCompletions(state, session, pos, prefix);\n completions = completions.map(function (el) {\n el.completerId = keyWordCompleter.id;\n return el;\n });\n callback(null, completions);\n },\n id: \"keywordCompleter\"\n};\nvar transformSnippetTooltip = function (str) {\n var record = {};\n return str.replace(/\\${(\\d+)(:(.*?))?}/g, function (_, p1, p2, p3) {\n return (record[p1] = p3 || '');\n }).replace(/\\$(\\d+?)/g, function (_, p1) {\n return record[p1];\n });\n};\nvar snippetCompleter = {\n getCompletions: function (editor, session, pos, prefix, callback) {\n var scopes = [];\n var token = session.getTokenAt(pos.row, pos.column);\n if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n scopes.push('html-tag');\n else\n scopes = snippetManager.getActiveScopes(editor);\n var snippetMap = snippetManager.snippetMap;\n var completions = [];\n scopes.forEach(function (scope) {\n var snippets = snippetMap[scope] || [];\n for (var i = snippets.length; i--;) {\n var s = snippets[i];\n var caption = s.name || s.tabTrigger;\n if (!caption)\n continue;\n completions.push({\n caption: caption,\n snippet: s.content,\n meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n completerId: snippetCompleter.id\n });\n }\n }, this);\n callback(null, completions);\n },\n getDocTooltip: function (item) {\n if (item.snippet && !item.docHTML) {\n item.docHTML = [\n \"\", lang.escapeHTML(item.caption), \"\", \"
\",\n lang.escapeHTML(transformSnippetTooltip(item.snippet))\n ].join(\"\");\n }\n },\n id: \"snippetCompleter\"\n};\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function (val) {\n completers.length = 0;\n if (val)\n completers.push.apply(completers, val);\n};\nexports.addCompleter = function (completer) {\n completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\nvar expandSnippet = {\n name: \"expandSnippet\",\n exec: function (editor) {\n return snippetManager.expandWithTab(editor);\n },\n bindKey: \"Tab\"\n};\nvar onChangeMode = function (e, editor) {\n loadSnippetsForMode(editor.session.$mode);\n};\nvar loadSnippetsForMode = function (mode) {\n if (typeof mode == \"string\")\n mode = config.$modes[mode];\n if (!mode)\n return;\n if (!snippetManager.files)\n snippetManager.files = {};\n loadSnippetFile(mode.$id, mode.snippetFileId);\n if (mode.modes)\n mode.modes.forEach(loadSnippetsForMode);\n};\nvar loadSnippetFile = function (id, snippetFilePath) {\n if (!snippetFilePath || !id || snippetManager.files[id])\n return;\n snippetManager.files[id] = {};\n config.loadModule(snippetFilePath, function (m) {\n if (!m)\n return;\n snippetManager.files[id] = m;\n if (!m.snippets && m.snippetText)\n m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n snippetManager.register(m.snippets || [], m.scope);\n if (m.includeScopes) {\n snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n m.includeScopes.forEach(function (x) {\n loadSnippetsForMode(\"ace/mode/\" + x);\n });\n }\n });\n};\nvar doLiveAutocomplete = function (e) {\n var editor = e.editor;\n var hasCompleter = editor.completer && editor.completer.activated;\n if (e.command.name === \"backspace\") {\n if (hasCompleter && !util.getCompletionPrefix(editor))\n editor.completer.detach();\n }\n else if (e.command.name === \"insertstring\" && !hasCompleter) {\n lastExecEvent = e;\n var delay = e.editor.$liveAutocompletionDelay;\n if (delay) {\n liveAutocompleteTimer.delay(delay);\n }\n else {\n showLiveAutocomplete(e);\n }\n }\n};\nvar lastExecEvent;\nvar liveAutocompleteTimer = lang.delayedCall(function () {\n showLiveAutocomplete(lastExecEvent);\n}, 0);\nvar showLiveAutocomplete = function (e) {\n var editor = e.editor;\n var prefix = util.getCompletionPrefix(editor);\n var triggerAutocomplete = util.triggerAutocomplete(editor);\n if (prefix && prefix.length >= editor.$liveAutocompletionThreshold || triggerAutocomplete) {\n var completer = Autocomplete.for(editor);\n completer.autoShown = true;\n completer.showPopup(editor);\n }\n};\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n enableBasicAutocompletion: {\n set: function (val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val) ? val : completers;\n this.commands.addCommand(Autocomplete.startCommand);\n }\n else {\n this.commands.removeCommand(Autocomplete.startCommand);\n }\n },\n value: false\n },\n enableLiveAutocompletion: {\n set: function (val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val) ? val : completers;\n this.commands.on('afterExec', doLiveAutocomplete);\n }\n else {\n this.commands.off('afterExec', doLiveAutocomplete);\n }\n },\n value: false\n },\n liveAutocompletionDelay: {\n initialValue: 0\n },\n liveAutocompletionThreshold: {\n initialValue: 0\n },\n enableSnippets: {\n set: function (val) {\n if (val) {\n this.commands.addCommand(expandSnippet);\n this.on(\"changeMode\", onChangeMode);\n onChangeMode(null, this);\n }\n else {\n this.commands.removeCommand(expandSnippet);\n this.off(\"changeMode\", onChangeMode);\n }\n },\n value: false\n }\n});\n\n}); (function() {\n ace.require([\"ace/ext/language_tools\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n this.$rules = {\n \"start\": [\n {\n token: \"comment.doc.tag\",\n regex: \"@\\\\w+(?=\\\\s|$)\"\n }, DocCommentHighlightRules.getTagRule(), {\n defaultToken: \"comment.doc\",\n caseInsensitive: true\n }\n ]\n };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n return {\n token: \"comment.doc.tag.storage.type\",\n regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n return {\n token: \"comment.doc\", // doc comment\n regex: \"\\\\/\\\\*(?=\\\\*)\",\n next: start\n };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n return {\n token: \"comment.doc\", // closing comment\n regex: \"\\\\*\\\\/\",\n next: start\n };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CSharpHighlightRules = function () {\n var keywordMapper = this.createKeywordMapper({\n \"variable.language\": \"this\",\n \"keyword\": \"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\n \"constant.language\": \"null|true|false\"\n }, \"identifier\");\n this.$rules = {\n \"start\": [\n {\n token: \"comment\",\n regex: \"\\\\/\\\\/.*$\"\n },\n DocCommentHighlightRules.getStartRule(\"doc-start\"),\n {\n token: \"comment\", // multi line comment\n regex: \"\\\\/\\\\*\",\n next: \"comment\"\n }, {\n token: \"string\", // character\n regex: /'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/\n }, {\n token: \"string\", start: '\"', end: '\"|$', next: [\n { token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/ },\n { token: \"invalid\", regex: /\\\\./ }\n ]\n }, {\n token: \"string\", start: '@\"', end: '\"', next: [\n { token: \"constant.language.escape\", regex: '\"\"' }\n ]\n }, {\n token: \"string\", start: /\\$\"/, end: '\"|$', next: [\n { token: \"constant.language.escape\", regex: /\\\\(:?$)|{{/ },\n { token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/ },\n { token: \"invalid\", regex: /\\\\./ }\n ]\n }, {\n token: \"constant.numeric\", // hex\n regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n }, {\n token: \"constant.numeric\", // float\n regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token: \"constant.language.boolean\",\n regex: \"(?:true|false)\\\\b\"\n }, {\n token: keywordMapper,\n regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n }, {\n token: \"keyword.operator\",\n regex: \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n }, {\n token: \"keyword\",\n regex: \"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"\n }, {\n token: \"punctuation.operator\",\n regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n }, {\n token: \"paren.lparen\",\n regex: \"[[({]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\])}]\"\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }\n ],\n \"comment\": [\n {\n token: \"comment\", // closing comment\n regex: \"\\\\*\\\\/\",\n next: \"start\"\n }, {\n defaultToken: \"comment\"\n }\n ]\n };\n this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n this.normalizeRules();\n};\noop.inherits(CSharpHighlightRules, TextHighlightRules);\nexports.CSharpHighlightRules = CSharpHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n this.checkOutdent = function (line, input) {\n if (!/^\\s+$/.test(line))\n return false;\n return /^\\s*\\}/.test(input);\n };\n this.autoOutdent = function (doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n if (!match)\n return 0;\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n if (!openBracePos || openBracePos.row == row)\n return 0;\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column - 1), indent);\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n return fw;\n };\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n }\n else if (foldStyle != \"all\")\n range = null;\n }\n return range;\n }\n if (foldStyle === \"markbegin\")\n return;\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n }\n else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n }\n else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m)\n continue;\n if (m[1])\n depth--;\n else\n depth++;\n if (!depth)\n break;\n }\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar CFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n};\noop.inherits(FoldMode, CFoldMode);\n(function () {\n this.usingRe = /^\\s*using \\S/;\n this.getFoldWidgetRangeBase = this.getFoldWidgetRange;\n this.getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function (session, foldStyle, row) {\n var fw = this.getFoldWidgetBase(session, foldStyle, row);\n if (!fw) {\n var line = session.getLine(row);\n if (/^\\s*#region\\b/.test(line))\n return \"start\";\n var usingRe = this.usingRe;\n if (usingRe.test(line)) {\n var prev = session.getLine(row - 1);\n var next = session.getLine(row + 1);\n if (!usingRe.test(prev) && usingRe.test(next))\n return \"start\";\n }\n }\n return fw;\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n var range = this.getFoldWidgetRangeBase(session, foldStyle, row);\n if (range)\n return range;\n var line = session.getLine(row);\n if (this.usingRe.test(line))\n return this.getUsingStatementBlock(session, line, row);\n if (/^\\s*#region\\b/.test(line))\n return this.getRegionBlock(session, line, row);\n };\n this.getUsingStatementBlock = function (session, line, row) {\n var startColumn = line.match(this.usingRe)[0].length - 1;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n line = session.getLine(row);\n if (/^\\s*$/.test(line))\n continue;\n if (!this.usingRe.test(line))\n break;\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.getRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*#(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m)\n continue;\n if (m[1])\n depth--;\n else\n depth++;\n if (!depth)\n break;\n }\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csharp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/csharp\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CSharpHighlightRules = require(\"./csharp_highlight_rules\").CSharpHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/csharp\").FoldMode;\nvar Mode = function () {\n this.HighlightRules = CSharpHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = this.$defaultBehaviour;\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n this.lineCommentStart = \"//\";\n this.blockComment = { start: \"/*\", end: \"*/\" };\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n return indent;\n }\n if (state == \"start\") {\n var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n if (match) {\n indent += tab;\n }\n }\n return indent;\n };\n this.checkOutdent = function (state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n this.autoOutdent = function (state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n this.createWorker = function (session) {\n return null;\n };\n this.$id = \"ace/mode/csharp\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n}); (function() {\n ace.require([\"ace/mode/csharp\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/jsdoc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsDocCommentHighlightRules = function () {\n this.$rules = {\n \"start\": [\n {\n token: [\"comment.doc.tag\", \"comment.doc.text\", \"lparen.doc\"],\n regex: \"(@(?:param|member|typedef|property|namespace|var|const|callback))(\\\\s*)({)\",\n push: [\n {\n token: \"lparen.doc\",\n regex: \"{\",\n push: [\n {\n include: \"doc-syntax\"\n }, {\n token: \"rparen.doc\",\n regex: \"}|(?=$)\",\n next: \"pop\"\n }\n ]\n }, {\n token: [\"rparen.doc\", \"text.doc\", \"variable.parameter.doc\", \"lparen.doc\", \"variable.parameter.doc\", \"rparen.doc\"],\n regex: /(})(\\s*)(?:([\\w=:\\/\\.]+)|(?:(\\[)([\\w=:\\/\\.]+)(\\])))/,\n next: \"pop\"\n }, {\n token: \"rparen.doc\",\n regex: \"}|(?=$)\",\n next: \"pop\"\n }, {\n include: \"doc-syntax\"\n }, {\n defaultToken: \"text.doc\"\n }\n ]\n }, {\n token: [\"comment.doc.tag\", \"text.doc\", \"lparen.doc\"],\n regex: \"(@(?:returns?|yields|type|this|suppress|public|protected|private|package|modifies|\"\n + \"implements|external|exception|throws|enum|define|extends))(\\\\s*)({)\",\n push: [\n {\n token: \"lparen.doc\",\n regex: \"{\",\n push: [\n {\n include: \"doc-syntax\"\n }, {\n token: \"rparen.doc\",\n regex: \"}|(?=$)\",\n next: \"pop\"\n }\n ]\n }, {\n token: \"rparen.doc\",\n regex: \"}|(?=$)\",\n next: \"pop\"\n }, {\n include: \"doc-syntax\"\n }, {\n defaultToken: \"text.doc\"\n }\n ]\n }, {\n token: [\"comment.doc.tag\", \"text.doc\", \"variable.parameter.doc\"],\n regex: \"(@(?:alias|memberof|instance|module|name|lends|namespace|external|this|template|\"\n + \"requires|param|implements|function|extends|typedef|mixes|constructor|var|\"\n + \"memberof\\\\!|event|listens|exports|class|constructs|interface|emits|fires|\"\n + \"throws|const|callback|borrows|augments))(\\\\s+)(\\\\w[\\\\w#\\.:\\/~\\\"\\\\-]*)?\"\n }, {\n token: [\"comment.doc.tag\", \"text.doc\", \"variable.parameter.doc\"],\n regex: \"(@method)(\\\\s+)(\\\\w[\\\\w\\.\\\\(\\\\)]*)\"\n }, {\n token: \"comment.doc.tag\",\n regex: \"@access\\\\s+(?:private|public|protected)\"\n }, {\n token: \"comment.doc.tag\",\n regex: \"@kind\\\\s+(?:class|constant|event|external|file|function|member|mixin|module|namespace|typedef)\"\n }, {\n token: \"comment.doc.tag\",\n regex: \"@\\\\w+(?=\\\\s|$)\"\n },\n JsDocCommentHighlightRules.getTagRule(),\n {\n defaultToken: \"comment.doc\",\n caseInsensitive: true\n }\n ],\n \"doc-syntax\": [{\n token: \"operator.doc\",\n regex: /[|:]/\n }, {\n token: \"paren.doc\",\n regex: /[\\[\\]]/\n }]\n };\n this.normalizeRules();\n};\noop.inherits(JsDocCommentHighlightRules, TextHighlightRules);\nJsDocCommentHighlightRules.getTagRule = function (start) {\n return {\n token: \"comment.doc.tag.storage.type\",\n regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n };\n};\nJsDocCommentHighlightRules.getStartRule = function (start) {\n return {\n token: \"comment.doc\", // doc comment\n regex: \"\\\\/\\\\*(?=\\\\*)\",\n next: start\n };\n};\nJsDocCommentHighlightRules.getEndRule = function (start) {\n return {\n token: \"comment.doc\", // closing comment\n regex: \"\\\\*\\\\/\",\n next: start\n };\n};\nexports.JsDocCommentHighlightRules = JsDocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/jsdoc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./jsdoc_comment_highlight_rules\").JsDocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n var keywordMapper = this.createKeywordMapper({\n \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Symbol|\" + // Constructors\n \"Namespace|QName|XML|XMLList|\" + // E4X\n \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n \"SyntaxError|TypeError|URIError|\" +\n \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n \"isNaN|parseFloat|parseInt|\" +\n \"JSON|Math|\" + // Other\n \"this|arguments|prototype|window|document\", // Pseudo\n \"keyword\": \"const|yield|import|get|set|async|await|\" +\n \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static|constructor\",\n \"storage.type\": \"const|let|var|function\",\n \"constant.language\": \"null|Infinity|NaN|undefined\",\n \"support.function\": \"alert\",\n \"constant.language.boolean\": \"true|false\"\n }, \"identifier\");\n var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n \"u[0-9a-fA-F]{4}|\" + // unicode\n \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n \"[0-2][0-7]{0,2}|\" + // oct\n \"3[0-7][0-7]?|\" + // oct\n \"[4-7][0-7]?|\" + //oct\n \".)\";\n this.$rules = {\n \"no_regex\": [\n DocCommentHighlightRules.getStartRule(\"doc-start\"),\n comments(\"no_regex\"),\n {\n token: \"string\",\n regex: \"'(?=.)\",\n next: \"qstring\"\n }, {\n token: \"string\",\n regex: '\"(?=.)',\n next: \"qqstring\"\n }, {\n token: \"constant.numeric\", // hexadecimal, octal and binary\n regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n }, {\n token: \"constant.numeric\", // decimal integers and floats\n regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n }, {\n token: [\n \"storage.type\", \"punctuation.operator\", \"support.function\",\n \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n ],\n regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n next: \"function_arguments\"\n }, {\n token: [\n \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n ],\n regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function\\\\*?)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\n \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n \"text\", \"paren.lparen\"\n ],\n regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function\\\\*?)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\n \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n \"keyword.operator\", \"text\",\n \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n ],\n regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function\\\\*?)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\n \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n ],\n regex: \"(function\\\\*?)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\n \"entity.name.function\", \"text\", \"punctuation.operator\",\n \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n ],\n regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function\\\\*?)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\n \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n ],\n regex: \"(:)(\\\\s*)(function\\\\*?)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: \"keyword\",\n regex: \"from(?=\\\\s*('|\\\"))\"\n }, {\n token: \"keyword\",\n regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n next: \"start\"\n }, {\n token: \"support.constant\",\n regex: /that\\b/\n }, {\n token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n regex: /(console)(\\.)(warn|info|log|error|debug|time|trace|timeEnd|assert)\\b/\n }, {\n token: keywordMapper,\n regex: identifierRe\n }, {\n token: \"punctuation.operator\",\n regex: /[.](?![.])/,\n next: \"property\"\n }, {\n token: \"storage.type\",\n regex: /=>/,\n next: \"start\"\n }, {\n token: \"keyword.operator\",\n regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n next: \"start\"\n }, {\n token: \"punctuation.operator\",\n regex: /[?:,;.]/,\n next: \"start\"\n }, {\n token: \"paren.lparen\",\n regex: /[\\[({]/,\n next: \"start\"\n }, {\n token: \"paren.rparen\",\n regex: /[\\])}]/\n }, {\n token: \"comment\",\n regex: /^#!.*$/\n }\n ],\n property: [{\n token: \"text\",\n regex: \"\\\\s+\"\n }, {\n token: [\n \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n \"keyword.operator\", \"text\",\n \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n ],\n regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function\\\\*?)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: \"punctuation.operator\",\n regex: /[.](?![.])/\n }, {\n token: \"support.function\",\n regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|lter|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward|rEach)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token: \"support.function.dom\",\n regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n }, {\n token: \"support.constant\",\n regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n }, {\n token: \"identifier\",\n regex: identifierRe\n }, {\n regex: \"\",\n token: \"empty\",\n next: \"no_regex\"\n }\n ],\n \"start\": [\n DocCommentHighlightRules.getStartRule(\"doc-start\"),\n comments(\"start\"),\n {\n token: \"string.regexp\",\n regex: \"\\\\/\",\n next: \"regex\"\n }, {\n token: \"text\",\n regex: \"\\\\s+|^$\",\n next: \"start\"\n }, {\n token: \"empty\",\n regex: \"\",\n next: \"no_regex\"\n }\n ],\n \"regex\": [\n {\n token: \"regexp.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"string.regexp\",\n regex: \"/[sxngimy]*\",\n next: \"no_regex\"\n }, {\n token: \"invalid\",\n regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n }, {\n token: \"constant.language.escape\",\n regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n }, {\n token: \"constant.language.delimiter\",\n regex: /\\|/\n }, {\n token: \"constant.language.escape\",\n regex: /\\[\\^?/,\n next: \"regex_character_class\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp\"\n }\n ],\n \"regex_character_class\": [\n {\n token: \"regexp.charclass.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"constant.language.escape\",\n regex: \"]\",\n next: \"regex\"\n }, {\n token: \"constant.language.escape\",\n regex: \"-\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp.charachterclass\"\n }\n ],\n \"default_parameter\": [\n {\n token: \"string\",\n regex: \"'(?=.)\",\n push: [\n {\n token: \"string\",\n regex: \"'|$\",\n next: \"pop\"\n }, {\n include: \"qstring\"\n }\n ]\n }, {\n token: \"string\",\n regex: '\"(?=.)',\n push: [\n {\n token: \"string\",\n regex: '\"|$',\n next: \"pop\"\n }, {\n include: \"qqstring\"\n }\n ]\n }, {\n token: \"constant.language\",\n regex: \"null|Infinity|NaN|undefined\"\n }, {\n token: \"constant.numeric\", // hexadecimal, octal and binary\n regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n }, {\n token: \"constant.numeric\", // decimal integers and floats\n regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n }, {\n token: \"punctuation.operator\",\n regex: \",\",\n next: \"function_arguments\"\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }, {\n token: \"punctuation.operator\",\n regex: \"$\"\n }, {\n token: \"empty\",\n regex: \"\",\n next: \"no_regex\"\n }\n ],\n \"function_arguments\": [\n comments(\"function_arguments\"),\n {\n token: \"variable.parameter\",\n regex: identifierRe\n }, {\n token: \"punctuation.operator\",\n regex: \",\"\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }, {\n token: \"punctuation.operator\",\n regex: \"$\"\n }, {\n token: \"empty\",\n regex: \"\",\n next: \"no_regex\"\n }\n ],\n \"qqstring\": [\n {\n token: \"constant.language.escape\",\n regex: escapedRe\n }, {\n token: \"string\",\n regex: \"\\\\\\\\$\",\n consumeLineEnd: true\n }, {\n token: \"string\",\n regex: '\"|$',\n next: \"no_regex\"\n }, {\n defaultToken: \"string\"\n }\n ],\n \"qstring\": [\n {\n token: \"constant.language.escape\",\n regex: escapedRe\n }, {\n token: \"string\",\n regex: \"\\\\\\\\$\",\n consumeLineEnd: true\n }, {\n token: \"string\",\n regex: \"'|$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string\"\n }\n ]\n };\n if (!options || !options.noES6) {\n this.$rules.no_regex.unshift({\n regex: \"[{}]\", onMatch: function (val, state, stack) {\n this.next = val == \"{\" ? this.nextState : \"\";\n if (val == \"{\" && stack.length) {\n stack.unshift(\"start\", state);\n }\n else if (val == \"}\" && stack.length) {\n stack.shift();\n this.next = stack.shift();\n if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n return \"paren.quasi.end\";\n }\n return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n },\n nextState: \"start\"\n }, {\n token: \"string.quasi.start\",\n regex: /`/,\n push: [{\n token: \"constant.language.escape\",\n regex: escapedRe\n }, {\n token: \"paren.quasi.start\",\n regex: /\\${/,\n push: \"start\"\n }, {\n token: \"string.quasi.end\",\n regex: /`/,\n next: \"pop\"\n }, {\n defaultToken: \"string.quasi\"\n }]\n }, {\n token: [\"variable.parameter\", \"text\"],\n regex: \"(\" + identifierRe + \")(\\\\s*)(?=\\\\=>)\"\n }, {\n token: \"paren.lparen\",\n regex: \"(\\\\()(?=.+\\\\s*=>)\",\n next: \"function_arguments\"\n }, {\n token: \"variable.language\",\n regex: \"(?:(?:(?:Weak)?(?:Set|Map))|Promise)\\\\b\"\n });\n this.$rules[\"function_arguments\"].unshift({\n token: \"keyword.operator\",\n regex: \"=\",\n next: \"default_parameter\"\n }, {\n token: \"keyword.operator\",\n regex: \"\\\\.{3}\"\n });\n this.$rules[\"property\"].unshift({\n token: \"support.function\",\n regex: \"(findIndex|repeat|startsWith|endsWith|includes|isSafeInteger|trunc|cbrt|log2|log10|sign|then|catch|\"\n + \"finally|resolve|reject|race|any|all|allSettled|keys|entries|isInteger)\\\\b(?=\\\\()\"\n }, {\n token: \"constant.language\",\n regex: \"(?:MAX_SAFE_INTEGER|MIN_SAFE_INTEGER|EPSILON)\\\\b\"\n });\n if (!options || options.jsx != false)\n JSX.call(this);\n }\n this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n var jsxTag = {\n onMatch: function (val, state, stack) {\n var offset = val.charAt(1) == \"/\" ? 2 : 1;\n if (offset == 1) {\n if (state != this.nextState)\n stack.unshift(this.next, this.nextState, 0);\n else\n stack.unshift(this.next);\n stack[2]++;\n }\n else if (offset == 2) {\n if (state == this.nextState) {\n stack[1]--;\n if (!stack[1] || stack[1] < 0) {\n stack.shift();\n stack.shift();\n }\n }\n }\n return [{\n type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n value: val.slice(0, offset)\n }, {\n type: \"meta.tag.tag-name.xml\",\n value: val.substr(offset)\n }];\n },\n regex: \"\",\n onMatch: function (value, currentState, stack) {\n if (currentState == stack[0])\n stack.shift();\n if (value.length == 2) {\n if (stack[0] == this.nextState)\n stack[1]--;\n if (!stack[1] || stack[1] < 0) {\n stack.splice(0, 2);\n }\n }\n this.next = stack[0] || \"start\";\n return [{ type: this.token, value: value }];\n },\n nextState: \"jsx\"\n },\n jsxJsRule,\n comments(\"jsxAttributes\"),\n {\n token: \"entity.other.attribute-name.xml\",\n regex: tagRegex\n }, {\n token: \"keyword.operator.attribute-equals.xml\",\n regex: \"=\"\n }, {\n token: \"text.tag-whitespace.xml\",\n regex: \"\\\\s+\"\n }, {\n token: \"string.attribute-value.xml\",\n regex: \"'\",\n stateName: \"jsx_attr_q\",\n push: [\n { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n { include: \"reference\" },\n { defaultToken: \"string.attribute-value.xml\" }\n ]\n }, {\n token: \"string.attribute-value.xml\",\n regex: '\"',\n stateName: \"jsx_attr_qq\",\n push: [\n { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n { include: \"reference\" },\n { defaultToken: \"string.attribute-value.xml\" }\n ]\n },\n jsxTag\n ];\n this.$rules.reference = [{\n token: \"constant.language.escape.reference.xml\",\n regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }];\n}\nfunction comments(next) {\n return [\n {\n token: \"comment\", // multi line comment\n regex: /\\/\\*/,\n next: [\n DocCommentHighlightRules.getTagRule(),\n { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n { defaultToken: \"comment\", caseInsensitive: true }\n ]\n }, {\n token: \"comment\",\n regex: \"\\\\/\\\\/\",\n next: [\n DocCommentHighlightRules.getTagRule(),\n { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n { defaultToken: \"comment\", caseInsensitive: true }\n ]\n }\n ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n this.checkOutdent = function (line, input) {\n if (!/^\\s+$/.test(line))\n return false;\n return /^\\s*\\}/.test(input);\n };\n this.autoOutdent = function (doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n if (!match)\n return 0;\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n if (!openBracePos || openBracePos.row == row)\n return 0;\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column - 1), indent);\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n return fw;\n };\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n }\n else if (foldStyle != \"all\")\n range = null;\n }\n return range;\n }\n if (foldStyle === \"markbegin\")\n return;\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n }\n else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n }\n else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m)\n continue;\n if (m[1])\n depth--;\n else\n depth++;\n if (!depth)\n break;\n }\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n this.HighlightRules = JavaScriptHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n this.lineCommentStart = \"//\";\n this.blockComment = { start: \"/*\", end: \"*/\" };\n this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n this.$pairQuotesAfter = {\n \"`\": /\\w/\n };\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n return indent;\n }\n if (state == \"start\" || state == \"no_regex\") {\n var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n if (match) {\n indent += tab;\n }\n }\n else if (state == \"doc-start\") {\n if (endState == \"start\" || endState == \"no_regex\") {\n return \"\";\n }\n var match = line.match(/^\\s*(\\/?)\\*/);\n if (match) {\n if (match[1]) {\n indent += \" \";\n }\n indent += \"* \";\n }\n }\n return indent;\n };\n this.checkOutdent = function (state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n this.autoOutdent = function (state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n this.createWorker = function (session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n worker.attachToDocument(session.getDocument());\n worker.on(\"annotate\", function (results) {\n session.setAnnotations(results.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n this.$id = \"ace/mode/javascript\";\n this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n}); (function() {\n ace.require([\"ace/mode/javascript\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsonHighlightRules = function () {\n this.$rules = {\n \"start\": [\n {\n token: \"variable\", // single line\n regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n }, {\n token: \"string\", // single line\n regex: '\"',\n next: \"string\"\n }, {\n token: \"constant.numeric\", // hex\n regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n }, {\n token: \"constant.numeric\", // float\n regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token: \"constant.language.boolean\",\n regex: \"(?:true|false)\\\\b\"\n }, {\n token: \"text\", // single quoted strings are not allowed\n regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n }, {\n token: \"comment\", // comments are not allowed, but who cares?\n regex: \"\\\\/\\\\/.*$\"\n }, {\n token: \"comment.start\", // comments are not allowed, but who cares?\n regex: \"\\\\/\\\\*\",\n next: \"comment\"\n }, {\n token: \"paren.lparen\",\n regex: \"[[({]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\])}]\"\n }, {\n token: \"punctuation.operator\",\n regex: /[,]/\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }\n ],\n \"string\": [\n {\n token: \"constant.language.escape\",\n regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n }, {\n token: \"string\",\n regex: '\"|$',\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }\n ],\n \"comment\": [\n {\n token: \"comment.end\", // comments are not allowed, but who cares?\n regex: \"\\\\*\\\\/\",\n next: \"start\"\n }, {\n defaultToken: \"comment\"\n }\n ]\n };\n};\noop.inherits(JsonHighlightRules, TextHighlightRules);\nexports.JsonHighlightRules = JsonHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n this.checkOutdent = function (line, input) {\n if (!/^\\s+$/.test(line))\n return false;\n return /^\\s*\\}/.test(input);\n };\n this.autoOutdent = function (doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n if (!match)\n return 0;\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n if (!openBracePos || openBracePos.row == row)\n return 0;\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column - 1), indent);\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n return fw;\n };\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n }\n else if (foldStyle != \"all\")\n range = null;\n }\n return range;\n }\n if (foldStyle === \"markbegin\")\n return;\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n }\n else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n }\n else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m)\n continue;\n if (m[1])\n depth--;\n else\n depth++;\n if (!depth)\n break;\n }\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar Mode = function () {\n this.HighlightRules = HighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = this.$defaultBehaviour;\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n this.lineCommentStart = \"//\";\n this.blockComment = { start: \"/*\", end: \"*/\" };\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n if (state == \"start\") {\n var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n if (match) {\n indent += tab;\n }\n }\n return indent;\n };\n this.checkOutdent = function (state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n this.autoOutdent = function (state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n this.createWorker = function (session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/json_worker\", \"JsonWorker\");\n worker.attachToDocument(session.getDocument());\n worker.on(\"annotate\", function (e) {\n session.setAnnotations(e.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n this.$id = \"ace/mode/json\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n}); (function() {\n ace.require([\"ace/mode/json\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","\n; (function() {\n ace.require([\"ace/snippets/text\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n return;\nif (window.require && window.define)\n return;\n\nif (!window.console) {\n window.console = function() {\n var msgs = Array.prototype.slice.call(arguments, 0);\n postMessage({type: \"log\", data: msgs});\n };\n window.console.error =\n window.console.warn = \n window.console.log =\n window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n postMessage({type: \"error\", data: {\n message: message,\n data: err && err.data,\n file: file,\n line: line, \n col: col,\n stack: err && err.stack\n }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.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 ? base + \"/\" : \"\") + moduleName;\n \n while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n \n return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n if (!id) {\n id = parentId;\n parentId = null;\n }\n if (!id.charAt)\n throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n id = window.normalizeModule(parentId, id);\n\n var module = window.require.modules[id];\n if (module) {\n if (!module.initialized) {\n module.initialized = true;\n module.exports = module.factory().exports;\n }\n return module.exports;\n }\n \n if (!window.require.tlns)\n return console.log(\"unable to load \" + id);\n \n var path = resolveModuleId(id, window.require.tlns);\n if (path.slice(-3) != \".js\") path += \".js\";\n \n window.require.id = id;\n window.require.modules[id] = {}; // prevent infinite loop on broken modules\n importScripts(path);\n return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n var testPath = id, tail = \"\";\n while (testPath) {\n var alias = paths[testPath];\n if (typeof alias == \"string\") {\n return alias + tail;\n } else if (alias) {\n return alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n } else if (alias === false) {\n return \"\";\n }\n var i = testPath.lastIndexOf(\"/\");\n if (i === -1) break;\n tail = testPath.substr(i) + tail;\n testPath = testPath.slice(0, i);\n }\n return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n if (arguments.length == 2) {\n factory = deps;\n if (typeof id != \"string\") {\n deps = id;\n id = window.require.id;\n }\n } else if (arguments.length == 1) {\n factory = id;\n deps = [];\n id = window.require.id;\n }\n \n if (typeof factory != \"function\") {\n window.require.modules[id] = {\n exports: factory,\n initialized: true\n };\n return;\n }\n\n if (!deps.length)\n // If there is no dependencies, we inject \"require\", \"exports\" and\n // \"module\" as dependencies, to provide CommonJS compatibility.\n deps = [\"require\", \"exports\", \"module\"];\n\n var req = function(childId) {\n return window.require(id, childId);\n };\n\n window.require.modules[id] = {\n exports: {},\n factory: function() {\n var module = this;\n var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n switch (dep) {\n // Because \"require\", \"exports\" and \"module\" aren't actual\n // dependencies, we must handle them seperately.\n case \"require\": return req;\n case \"exports\": return module.exports;\n case \"module\": return module;\n // But for all other dependencies, we can just go ahead and\n // require them.\n default: return req(dep);\n }\n }));\n if (returnExports)\n module.exports = returnExports;\n return module;\n }\n };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls = function initBaseUrls(topLevelNamespaces) {\n for (var i in topLevelNamespaces)\n this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n var oop = window.require(\"ace/lib/oop\");\n \n var Sender = function() {};\n \n (function() {\n \n oop.implement(this, EventEmitter);\n \n this.callback = function(data, callbackId) {\n postMessage({\n type: \"call\",\n id: callbackId,\n data: data\n });\n };\n \n this.emit = function(name, data) {\n postMessage({\n type: \"event\",\n name: name,\n data: data\n });\n };\n \n }).call(Sender.prototype);\n \n return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n var msg = e.data;\n if (msg.event && sender) {\n sender._signal(msg.event, msg.data);\n }\n else if (msg.command) {\n if (main[msg.command])\n main[msg.command].apply(main, msg.args);\n else if (window[msg.command])\n window[msg.command].apply(window, msg.args);\n else\n throw new Error(\"Unknown command:\" + msg.command);\n }\n else if (msg.init) {\n window.initBaseUrls(msg.tlns);\n sender = window.sender = window.initSender();\n var clazz = this.require(msg.module)[msg.classname];\n main = window.main = new clazz(sender);\n }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], 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/apply_delta\",[], 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/lib/event_emitter\",[], 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/range\",[], 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/anchor\",[], 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\",[], 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/lib/deep_copy\",[], 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\",[], 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(/ 0xffff ? 2 : 1;\n};\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n \nvar Mirror = exports.Mirror = function(sender) {\n this.sender = sender;\n var doc = this.doc = new Document(\"\");\n \n var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n \n var _self = this;\n sender.on(\"change\", function(e) {\n var data = e.data;\n if (data[0].start) {\n doc.applyDeltas(data);\n } else {\n for (var i = 0; i < data.length; i += 2) {\n var d, err; \n if (Array.isArray(data[i+1])) {\n d = {action: \"insert\", start: data[i], lines: data[i+1]};\n } else {\n d = {action: \"remove\", start: data[i], end: data[i+1]};\n }\n \n if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n err = new Error(\"Invalid delta\");\n err.data = {\n path: _self.$path,\n linesLength: doc.$lines.length,\n start: d.start,\n end: d.end\n };\n throw err;\n }\n\n doc.applyDelta(d, true);\n }\n }\n if (_self.$timeout)\n return deferredUpdate.schedule(_self.$timeout);\n _self.onUpdate();\n });\n};\n\n(function() {\n \n this.$timeout = 500;\n \n this.setTimeout = function(timeout) {\n this.$timeout = timeout;\n };\n \n this.setValue = function(value) {\n this.doc.setValue(value);\n this.deferredUpdate.schedule(this.$timeout);\n };\n \n this.getValue = function(callbackId) {\n this.sender.callback(this.doc.getValue(), callbackId);\n };\n \n this.onUpdate = function() {\n };\n \n this.isPending = function() {\n return this.deferredUpdate.isPending();\n };\n \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/javascript/jshint\",[], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n var previousRequire = typeof require == \"function\" && require;\n function newRequire(name, jumped){\n if(!cache[name]) {\n if(!modules[name]) {\n var currentRequire = typeof require == \"function\" && require;\n if (!jumped && currentRequire) return currentRequire(name, true);\n if (previousRequire) return previousRequire(name, true);\n var err = new Error('Cannot find module \\'' + name + '\\'');\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n }\n var m = cache[name] = {exports:{}};\n modules[name][0].call(m.exports, function(x){\n var id = modules[name][1][x];\n return newRequire(id ? id : x);\n },m,m.exports,outer,modules,cache,entry);\n }\n return cache[name].exports;\n }\n for(var i=0;i= 65 && i <= 90 || // A-Z\n i === 95 || // _\n i >= 97 && i <= 122; // a-z\n}\n\nvar identifierPartTable = [];\n\nfor (var i = 0; i < 128; i++) {\n identifierPartTable[i] =\n identifierStartTable[i] || // $, _, A-Z, a-z\n i >= 48 && i <= 57; // 0-9\n}\n\nmodule.exports = {\n asciiIdentifierStartTable: identifierStartTable,\n asciiIdentifierPartTable: identifierPartTable\n};\n\n},{}],\"/../../../jshint/data/es5-identifier-names.js\":[function(_dereq_,module,exports){\nmodule.exports = /^(?:[\\$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0525\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCB\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA2D\\uFA30-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])(?:[\\$0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u0525\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0621-\\u065E\\u0660-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0900-\\u0939\\u093C-\\u094E\\u0950-\\u0955\\u0958-\\u0963\\u0966-\\u096F\\u0971\\u0972\\u0979-\\u097F\\u0981-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C82\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0D02\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC\\u0EDD\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F8B\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17B3\\u17B6-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BAA\\u1BAE-\\u1BB9\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF2\\u1D00-\\u1DE6\\u1DFD-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u2094\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF1\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCB\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA65F\\uA662-\\uA66F\\uA67C\\uA67D\\uA67F-\\uA697\\uA6A0-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7B\\uAA80-\\uAAC2\\uAADB-\\uAADD\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA2D\\uFA30-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE26\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])*$/;\n},{}],\"/../../../jshint/data/non-ascii-identifier-part-only.js\":[function(_dereq_,module,exports){\nvar str = '183,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,903,1155,1156,1157,1158,1159,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1471,1473,1474,1476,1477,1479,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1648,1750,1751,1752,1753,1754,1755,1756,1759,1760,1761,1762,1763,1764,1767,1768,1770,1771,1772,1773,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1809,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,2027,2028,2029,2030,2031,2032,2033,2034,2035,2045,2070,2071,2072,2073,2075,2076,2077,2078,2079,2080,2081,2082,2083,2085,2086,2087,2089,2090,2091,2092,2093,2137,2138,2139,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2362,2363,2364,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2385,2386,2387,2388,2389,2390,2391,2402,2403,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2433,2434,2435,2492,2494,2495,2496,2497,2498,2499,2500,2503,2504,2507,2508,2509,2519,2530,2531,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2558,2561,2562,2563,2620,2622,2623,2624,2625,2626,2631,2632,2635,2636,2637,2641,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2677,2689,2690,2691,2748,2750,2751,2752,2753,2754,2755,2756,2757,2759,2760,2761,2763,2764,2765,2786,2787,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2810,2811,2812,2813,2814,2815,2817,2818,2819,2876,2878,2879,2880,2881,2882,2883,2884,2887,2888,2891,2892,2893,2902,2903,2914,2915,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2946,3006,3007,3008,3009,3010,3014,3015,3016,3018,3019,3020,3021,3031,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3072,3073,3074,3075,3076,3134,3135,3136,3137,3138,3139,3140,3142,3143,3144,3146,3147,3148,3149,3157,3158,3170,3171,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3201,3202,3203,3260,3262,3263,3264,3265,3266,3267,3268,3270,3271,3272,3274,3275,3276,3277,3285,3286,3298,3299,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3328,3329,3330,3331,3387,3388,3390,3391,3392,3393,3394,3395,3396,3398,3399,3400,3402,3403,3404,3405,3415,3426,3427,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3458,3459,3530,3535,3536,3537,3538,3539,3540,3542,3544,3545,3546,3547,3548,3549,3550,3551,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3570,3571,3633,3636,3637,3638,3639,3640,3641,3642,3655,3656,3657,3658,3659,3660,3661,3662,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3761,3764,3765,3766,3767,3768,3769,3771,3772,3784,3785,3786,3787,3788,3789,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3864,3865,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3893,3895,3897,3902,3903,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3974,3975,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4038,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4182,4183,4184,4185,4190,4191,4192,4194,4195,4196,4199,4200,4201,4202,4203,4204,4205,4209,4210,4211,4212,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4957,4958,4959,4969,4970,4971,4972,4973,4974,4975,4976,4977,5906,5907,5908,5938,5939,5940,5970,5971,6002,6003,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6109,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121,6155,6156,6157,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6313,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6470,6471,6472,6473,6474,6475,6476,6477,6478,6479,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6679,6680,6681,6682,6683,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6912,6913,6914,6915,6916,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6992,6993,6994,6995,6996,6997,6998,6999,7000,7001,7019,7020,7021,7022,7023,7024,7025,7026,7027,7040,7041,7042,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,7155,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7376,7377,7378,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7405,7410,7411,7412,7415,7416,7417,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7675,7676,7677,7678,7679,8204,8205,8255,8256,8276,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8417,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,11503,11504,11505,11647,11744,11745,11746,11747,11748,11749,11750,11751,11752,11753,11754,11755,11756,11757,11758,11759,11760,11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,12330,12331,12332,12333,12334,12335,12441,12442,42528,42529,42530,42531,42532,42533,42534,42535,42536,42537,42607,42612,42613,42614,42615,42616,42617,42618,42619,42620,42621,42654,42655,42736,42737,43010,43014,43019,43043,43044,43045,43046,43047,43136,43137,43188,43189,43190,43191,43192,43193,43194,43195,43196,43197,43198,43199,43200,43201,43202,43203,43204,43205,43216,43217,43218,43219,43220,43221,43222,43223,43224,43225,43232,43233,43234,43235,43236,43237,43238,43239,43240,43241,43242,43243,43244,43245,43246,43247,43248,43249,43263,43264,43265,43266,43267,43268,43269,43270,43271,43272,43273,43302,43303,43304,43305,43306,43307,43308,43309,43335,43336,43337,43338,43339,43340,43341,43342,43343,43344,43345,43346,43347,43392,43393,43394,43395,43443,43444,43445,43446,43447,43448,43449,43450,43451,43452,43453,43454,43455,43456,43472,43473,43474,43475,43476,43477,43478,43479,43480,43481,43493,43504,43505,43506,43507,43508,43509,43510,43511,43512,43513,43561,43562,43563,43564,43565,43566,43567,43568,43569,43570,43571,43572,43573,43574,43587,43596,43597,43600,43601,43602,43603,43604,43605,43606,43607,43608,43609,43643,43644,43645,43696,43698,43699,43700,43703,43704,43710,43711,43713,43755,43756,43757,43758,43759,43765,43766,44003,44004,44005,44006,44007,44008,44009,44010,44012,44013,44016,44017,44018,44019,44020,44021,44022,44023,44024,44025,64286,65024,65025,65026,65027,65028,65029,65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65056,65057,65058,65059,65060,65061,65062,65063,65064,65065,65066,65067,65068,65069,65070,65071,65075,65076,65101,65102,65103,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65343';\nvar arr = str.split(',').map(function(code) {\n return parseInt(code, 10);\n});\nmodule.exports = arr;\n},{}],\"/../../../jshint/data/non-ascii-identifier-start.js\":[function(_dereq_,module,exports){\nvar str = '170,181,186,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,710,711,712,713,714,715,716,717,718,719,720,721,736,737,738,739,740,748,750,880,881,882,883,884,886,887,890,891,892,893,895,902,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1369,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1519,1520,1521,1522,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1646,1647,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1749,1765,1766,1774,1775,1786,1787,1788,1791,1808,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1969,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2036,2037,2042,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2074,2084,2088,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2230,2231,2232,2233,2234,2235,2236,2237,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2365,2384,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2437,2438,2439,2440,2441,2442,2443,2444,2447,2448,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2474,2475,2476,2477,2478,2479,2480,2482,2486,2487,2488,2489,2493,2510,2524,2525,2527,2528,2529,2544,2545,2556,2565,2566,2567,2568,2569,2570,2575,2576,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2602,2603,2604,2605,2606,2607,2608,2610,2611,2613,2614,2616,2617,2649,2650,2651,2652,2654,2674,2675,2676,2693,2694,2695,2696,2697,2698,2699,2700,2701,2703,2704,2705,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2730,2731,2732,2733,2734,2735,2736,2738,2739,2741,2742,2743,2744,2745,2749,2768,2784,2785,2809,2821,2822,2823,2824,2825,2826,2827,2828,2831,2832,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2858,2859,2860,2861,2862,2863,2864,2866,2867,2869,2870,2871,2872,2873,2877,2908,2909,2911,2912,2913,2929,2947,2949,2950,2951,2952,2953,2954,2958,2959,2960,2962,2963,2964,2965,2969,2970,2972,2974,2975,2979,2980,2984,2985,2986,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3024,3077,3078,3079,3080,3081,3082,3083,3084,3086,3087,3088,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3133,3160,3161,3162,3168,3169,3200,3205,3206,3207,3208,3209,3210,3211,3212,3214,3215,3216,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3253,3254,3255,3256,3257,3261,3294,3296,3297,3313,3314,3333,3334,3335,3336,3337,3338,3339,3340,3342,3343,3344,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3389,3406,3412,3413,3414,3423,3424,3425,3450,3451,3452,3453,3454,3455,3461,3462,3463,3464,3465,3466,3467,3468,3469,3470,3471,3472,3473,3474,3475,3476,3477,3478,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3507,3508,3509,3510,3511,3512,3513,3514,3515,3517,3520,3521,3522,3523,3524,3525,3526,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3634,3635,3648,3649,3650,3651,3652,3653,3654,3713,3714,3716,3719,3720,3722,3725,3732,3733,3734,3735,3737,3738,3739,3740,3741,3742,3743,3745,3746,3747,3749,3751,3754,3755,3757,3758,3759,3760,3762,3763,3773,3776,3777,3778,3779,3780,3782,3804,3805,3806,3807,3840,3904,3905,3906,3907,3908,3909,3910,3911,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3976,3977,3978,3979,3980,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4159,4176,4177,4178,4179,4180,4181,4186,4187,4188,4189,4193,4197,4198,4206,4207,4208,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4238,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4295,4301,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,4643,4644,4645,4646,4647,4648,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,4673,4674,4675,4676,4677,4678,4679,4680,4682,4683,4684,4685,4688,4689,4690,4691,4692,4693,4694,4696,4698,4699,4700,4701,4704,4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4746,4747,4748,4749,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4786,4787,4788,4789,4792,4793,4794,4795,4796,4797,4798,4800,4802,4803,4804,4805,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4882,4883,4884,4885,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,5112,5113,5114,5115,5116,5117,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385,5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728,5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5743,5744,5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776,5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5870,5871,5872,5873,5874,5875,5876,5877,5878,5879,5880,5888,5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5902,5903,5904,5905,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5952,5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5998,5999,6000,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6103,6108,6176,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6314,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,6426,6427,6428,6429,6430,6480,6481,6482,6483,6484,6485,6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6512,6513,6514,6515,6516,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6576,6577,6578,6579,6580,6581,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6823,6917,6918,6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6981,6982,6983,6984,6985,6986,6987,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7086,7087,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,7139,7140,7141,7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7245,7246,7247,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7296,7297,7298,7299,7300,7301,7302,7303,7304,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7357,7358,7359,7401,7402,7403,7404,7406,7407,7408,7409,7413,7414,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7960,7961,7962,7963,7964,7965,7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,8000,8001,8002,8003,8004,8005,8008,8009,8010,8011,8012,8013,8016,8017,8018,8019,8020,8021,8022,8023,8025,8027,8029,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8118,8119,8120,8121,8122,8123,8124,8126,8130,8131,8132,8134,8135,8136,8137,8138,8139,8140,8144,8145,8146,8147,8150,8151,8152,8153,8154,8155,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8178,8179,8180,8182,8183,8184,8185,8186,8187,8188,8305,8319,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8450,8455,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8469,8472,8473,8474,8475,8476,8477,8484,8486,8488,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8508,8509,8510,8511,8517,8518,8519,8520,8521,8526,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,11264,11265,11266,11267,11268,11269,11270,11271,11272,11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288,11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304,11305,11306,11307,11308,11309,11310,11312,11313,11314,11315,11316,11317,11318,11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11351,11352,11353,11354,11355,11356,11357,11358,11360,11361,11362,11363,11364,11365,11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,11378,11379,11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395,11396,11397,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425,11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441,11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457,11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,11470,11471,11472,11473,11474,11475,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486,11487,11488,11489,11490,11491,11492,11499,11500,11501,11502,11506,11507,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,11530,11531,11532,11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548,11549,11550,11551,11552,11553,11554,11555,11556,11557,11559,11565,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578,11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,11592,11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,11605,11606,11607,11608,11609,11610,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622,11623,11631,11648,11649,11650,11651,11652,11653,11654,11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670,11680,11681,11682,11683,11684,11685,11686,11688,11689,11690,11691,11692,11693,11694,11696,11697,11698,11699,11700,11701,11702,11704,11705,11706,11707,11708,11709,11710,11712,11713,11714,11715,11716,11717,11718,11720,11721,11722,11723,11724,11725,11726,11728,11729,11730,11731,11732,11733,11734,11736,11737,11738,11739,11740,11741,11742,12293,12294,12295,12321,12322,12323,12324,12325,12326,12327,12328,12329,12337,12338,12339,12340,12341,12344,12345,12346,12347,12348,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12436,12437,12438,12443,12444,12445,12446,12447,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12540,12541,12542,12543,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,12586,12587,12588,12589,12590,12591,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,12704,12705,12706,12707,12708,12709,12710,12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12784,12785,12786,12787,12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321,13322,13323,13324,13325,13326,13327,13328,13329,13330,13331,13332,13333,13334,13335,13336,13337,13338,13339,13340,13341,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351,13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,13379,13380,13381,13382,13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398,13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414,13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430,13431,13432,13433,13434,13435,13436,13437,13438,13439,13440,13441,13442,13443,13444,13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,13458,13459,13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,13471,13472,13473,13474,13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490,13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506,13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522,13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538,13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554,13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570,13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586,13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602,13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618,13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634,13635,13636,13637,13638,13639,13640,13641,13642,13643,13644,13645,13646,13647,13648,13649,13650,13651,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664,13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680,13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696,13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712,13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728,13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744,13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760,13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,13775,13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791,13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807,13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823,13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839,13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855,13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871,13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887,13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903,13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919,13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935,13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951,13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967,13968,13969,13970,13971,13972,13973,13974,13975,13976,13977,13978,13979,13980,13981,13982,13983,13984,13985,13986,13987,13988,13989,13990,13991,13992,13993,13994,13995,13996,13997,13998,13999,14000,14001,14002,14003,14004,14005,14006,14007,14008,14009,14010,14011,14012,14013,14014,14015,14016,14017,14018,14019,14020,14021,14022,14023,14024,14025,14026,14027,14028,14029,14030,14031,14032,14033,14034,14035,14036,14037,14038,14039,14040,14041,14042,14043,14044,14045,14046,14047,14048,14049,14050,14051,14052,14053,14054,14055,14056,14057,14058,14059,14060,14061,14062,14063,14064,14065,14066,14067,14068,14069,14070,14071,14072,14073,14074,14075,14076,14077,14078,14079,14080,14081,14082,14083,14084,14085,14086,14087,14088,14089,14090,14091,14092,14093,14094,14095,14096,14097,14098,14099,14100,14101,14102,14103,14104,14105,14106,14107,14108,14109,14110,14111,14112,14113,14114,14115,14116,14117,14118,14119,14120,14121,14122,14123,14124,14125,14126,14127,14128,14129,14130,14131,14132,14133,14134,14135,14136,14137,14138,14139,14140,14141,14142,14143,14144,14145,14146,14147,14148,14149,14150,14151,14152,14153,14154,14155,14156,14157,14158,14159,14160,14161,14162,14163,14164,14165,14166,14167,14168,14169,14170,14171,14172,14173,14174,14175,14176,14177,14178,14179,14180,14181,14182,14183,14184,14185,14186,14187,14188,14189,14190,14191,14192,14193,14194,14195,14196,14197,14198,14199,14200,14201,14202,14203,14204,14205,14206,14207,14208,14209,14210,14211,14212,14213,14214,14215,14216,14217,14218,14219,14220,14221,14222,14223,14224,14225,14226,14227,14228,14229,14230,14231,14232,14233,14234,14235,14236,14237,14238,14239,14240,14241,14242,14243,14244,14245,14246,14247,14248,14249,14250,14251,14252,14253,14254,14255,14256,14257,14258,14259,14260,14261,14262,14263,14264,14265,14266,14267,14268,14269,14270,14271,14272,14273,14274,14275,14276,14277,14278,14279,14280,14281,14282,14283,14284,14285,14286,14287,14288,14289,14290,14291,14292,14293,14294,14295,14296,14297,14298,14299,14300,14301,14302,14303,14304,14305,14306,14307,14308,14309,14310,14311,14312,14313,14314,14315,14316,14317,14318,14319,14320,14321,14322,14323,14324,14325,14326,14327,14328,14329,14330,14331,14332,14333,14334,14335,14336,14337,14338,14339,14340,14341,14342,14343,14344,14345,14346,14347,14348,14349,14350,14351,14352,14353,14354,14355,14356,14357,14358,14359,14360,14361,14362,14363,14364,14365,14366,14367,14368,14369,14370,14371,14372,14373,14374,14375,14376,14377,14378,14379,14380,14381,14382,14383,14384,14385,14386,14387,14388,14389,14390,14391,14392,14393,14394,14395,14396,14397,14398,14399,14400,14401,14402,14403,14404,14405,14406,14407,14408,14409,14410,14411,14412,14413,14414,14415,14416,14417,14418,14419,14420,14421,14422,14423,14424,14425,14426,14427,14428,14429,14430,14431,14432,14433,14434,14435,14436,14437,14438,14439,14440,14441,14442,14443,14444,14445,14446,14447,14448,14449,14450,14451,14452,14453,14454,14455,14456,14457,14458,14459,14460,14461,14462,14463,14464,14465,14466,14467,14468,14469,14470,14471,14472,14473,14474,14475,14476,14477,14478,14479,14480,14481,14482,14483,14484,14485,14486,14487,14488,14489,14490,14491,14492,14493,14494,14495,14496,14497,14498,14499,14500,14501,14502,14503,14504,14505,14506,14507,14508,14509,14510,14511,14512,14513,14514,14515,14516,14517,14518,14519,14520,14521,14522,14523,14524,14525,14526,14527,14528,14529,14530,14531,14532,14533,14534,14535,14536,14537,14538,14539,14540,14541,14542,14543,14544,14545,14546,14547,14548,14549,14550,14551,14552,14553,14554,14555,14556,14557,14558,14559,14560,14561,14562,14563,14564,14565,14566,14567,14568,14569,14570,14571,14572,14573,14574,14575,14576,14577,14578,14579,14580,14581,14582,14583,14584,14585,14586,14587,14588,14589,14590,14591,14592,14593,14594,14595,14596,14597,14598,14599,14600,14601,14602,14603,14604,14605,14606,14607,14608,14609,14610,14611,14612,14613,14614,14615,14616,14617,14618,14619,14620,14621,14622,14623,14624,14625,14626,14627,14628,14629,14630,14631,14632,14633,14634,14635,14636,14637,14638,14639,14640,14641,14642,14643,14644,14645,14646,14647,14648,14649,14650,14651,14652,14653,14654,14655,14656,14657,14658,14659,14660,14661,14662,14663,14664,14665,14666,14667,14668,14669,14670,14671,14672,14673,14674,14675,14676,14677,14678,14679,14680,14681,14682,14683,14684,14685,14686,14687,14688,14689,14690,14691,14692,14693,14694,14695,14696,14697,14698,14699,14700,14701,14702,14703,14704,14705,14706,14707,14708,14709,14710,14711,14712,14713,14714,14715,14716,14717,14718,14719,14720,14721,14722,14723,14724,14725,14726,14727,14728,14729,14730,14731,14732,14733,14734,14735,14736,14737,14738,14739,14740,14741,14742,14743,14744,14745,14746,14747,14748,14749,14750,14751,14752,14753,14754,14755,14756,14757,14758,14759,14760,14761,14762,14763,14764,14765,14766,14767,14768,14769,14770,14771,14772,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,14783,14784,14785,14786,14787,14788,14789,14790,14791,14792,14793,14794,14795,14796,14797,14798,14799,14800,14801,14802,14803,14804,14805,14806,14807,14808,14809,14810,14811,14812,14813,14814,14815,14816,14817,14818,14819,14820,14821,14822,14823,14824,14825,14826,14827,14828,14829,14830,14831,14832,14833,14834,14835,14836,14837,14838,14839,14840,14841,14842,14843,14844,14845,14846,14847,14848,14849,14850,14851,14852,14853,14854,14855,14856,14857,14858,14859,14860,14861,14862,14863,14864,14865,14866,14867,14868,14869,14870,14871,14872,14873,14874,14875,14876,14877,14878,14879,14880,14881,14882,14883,14884,14885,14886,14887,14888,14889,14890,14891,14892,14893,14894,14895,14896,14897,14898,14899,14900,14901,14902,14903,14904,14905,14906,14907,14908,14909,14910,14911,14912,14913,14914,14915,14916,14917,14918,14919,14920,14921,14922,14923,14924,14925,14926,14927,14928,14929,14930,14931,14932,14933,14934,14935,14936,14937,14938,14939,14940,14941,14942,14943,14944,14945,14946,14947,14948,14949,14950,14951,14952,14953,14954,14955,14956,14957,14958,14959,14960,14961,14962,14963,14964,14965,14966,14967,14968,14969,14970,14971,14972,14973,14974,14975,14976,14977,14978,14979,14980,14981,14982,14983,14984,14985,14986,14987,14988,14989,14990,14991,14992,14993,14994,14995,14996,14997,14998,14999,15000,15001,15002,15003,15004,15005,15006,15007,15008,15009,15010,15011,15012,15013,15014,15015,15016,15017,15018,15019,15020,15021,15022,15023,15024,15025,15026,15027,15028,15029,15030,15031,15032,15033,15034,15035,15036,15037,15038,15039,15040,15041,15042,15043,15044,15045,15046,15047,15048,15049,15050,15051,15052,15053,15054,15055,15056,15057,15058,15059,15060,15061,15062,15063,15064,15065,15066,15067,15068,15069,15070,15071,15072,15073,15074,15075,15076,15077,15078,15079,15080,15081,15082,15083,15084,15085,15086,15087,15088,15089,15090,15091,15092,15093,15094,15095,15096,15097,15098,15099,15100,15101,15102,15103,15104,15105,15106,15107,15108,15109,15110,15111,15112,15113,15114,15115,15116,15117,15118,15119,15120,15121,15122,15123,15124,15125,15126,15127,15128,15129,15130,15131,15132,15133,15134,15135,15136,15137,15138,15139,15140,15141,15142,15143,15144,15145,15146,15147,15148,15149,15150,15151,15152,15153,15154,15155,15156,15157,15158,15159,15160,15161,15162,15163,15164,15165,15166,15167,15168,15169,15170,15171,15172,15173,15174,15175,15176,15177,15178,15179,15180,15181,15182,15183,15184,15185,15186,15187,15188,15189,15190,15191,15192,15193,15194,15195,15196,15197,15198,15199,15200,15201,15202,15203,15204,15205,15206,15207,15208,15209,15210,15211,15212,15213,15214,15215,15216,15217,15218,15219,15220,15221,15222,15223,15224,15225,15226,15227,15228,15229,15230,15231,15232,15233,15234,15235,15236,15237,15238,15239,15240,15241,15242,15243,15244,15245,15246,15247,15248,15249,15250,15251,15252,15253,15254,15255,15256,15257,15258,15259,15260,15261,15262,15263,15264,15265,15266,15267,15268,15269,15270,15271,15272,15273,15274,15275,15276,15277,15278,15279,15280,15281,15282,15283,15284,15285,15286,15287,15288,15289,15290,15291,15292,15293,15294,15295,15296,15297,15298,15299,15300,15301,15302,15303,15304,15305,15306,15307,15308,15309,15310,15311,15312,15313,15314,15315,15316,15317,15318,15319,15320,15321,15322,15323,15324,15325,15326,15327,15328,15329,15330,15331,15332,15333,15334,15335,15336,15337,15338,15339,15340,15341,15342,15343,15344,15345,15346,15347,15348,15349,15350,15351,15352,15353,15354,15355,15356,15357,15358,15359,15360,15361,15362,15363,15364,15365,15366,15367,15368,15369,15370,15371,15372,15373,15374,15375,15376,15377,15378,15379,15380,15381,15382,15383,15384,15385,15386,15387,15388,15389,15390,15391,15392,15393,15394,15395,15396,15397,15398,15399,15400,15401,15402,15403,15404,15405,15406,15407,15408,15409,15410,15411,15412,15413,15414,15415,15416,15417,15418,15419,15420,15421,15422,15423,15424,15425,15426,15427,15428,15429,15430,15431,15432,15433,15434,15435,15436,15437,15438,15439,15440,15441,15442,15443,15444,15445,15446,15447,15448,15449,15450,15451,15452,15453,15454,15455,15456,15457,15458,15459,15460,15461,15462,15463,15464,15465,15466,15467,15468,15469,15470,15471,15472,15473,15474,15475,15476,15477,15478,15479,15480,15481,15482,15483,15484,15485,15486,15487,15488,15489,15490,15491,15492,15493,15494,15495,15496,15497,15498,15499,15500,15501,15502,15503,15504,15505,15506,15507,15508,15509,15510,15511,15512,15513,15514,15515,15516,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15528,15529,15530,15531,15532,15533,15534,15535,15536,15537,15538,15539,15540,15541,15542,15543,15544,15545,15546,15547,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,15559,15560,15561,15562,15563,15564,15565,15566,15567,15568,15569,15570,15571,15572,15573,15574,15575,15576,15577,15578,15579,15580,15581,15582,15583,15584,15585,15586,15587,15588,15589,15590,15591,15592,15593,15594,15595,15596,15597,15598,15599,15600,15601,15602,15603,15604,15605,15606,15607,15608,15609,15610,15611,15612,15613,15614,15615,15616,15617,15618,15619,15620,15621,15622,15623,15624,15625,15626,15627,15628,15629,15630,15631,15632,15633,15634,15635,15636,15637,15638,15639,15640,15641,15642,15643,15644,15645,15646,15647,15648,15649,15650,15651,15652,15653,15654,15655,15656,15657,15658,15659,15660,15661,15662,15663,15664,15665,15666,15667,15668,15669,15670,15671,15672,15673,15674,15675,15676,15677,15678,15679,15680,15681,15682,15683,15684,15685,15686,15687,15688,15689,15690,15691,15692,15693,15694,15695,15696,15697,15698,15699,15700,15701,15702,15703,15704,15705,15706,15707,15708,15709,15710,15711,15712,15713,15714,15715,15716,15717,15718,15719,15720,15721,15722,15723,15724,15725,15726,15727,15728,15729,15730,15731,15732,15733,15734,15735,15736,15737,15738,15739,15740,15741,15742,15743,15744,15745,15746,15747,15748,15749,15750,15751,15752,15753,15754,15755,15756,15757,15758,15759,15760,15761,15762,15763,15764,15765,15766,15767,15768,15769,15770,15771,15772,15773,15774,15775,15776,15777,15778,15779,15780,15781,15782,15783,15784,15785,15786,15787,15788,15789,15790,15791,15792,15793,15794,15795,15796,15797,15798,15799,15800,15801,15802,15803,15804,15805,15806,15807,15808,15809,15810,15811,15812,15813,15814,15815,15816,15817,15818,15819,15820,15821,15822,15823,15824,15825,15826,15827,15828,15829,15830,15831,15832,15833,15834,15835,15836,15837,15838,15839,15840,15841,15842,15843,15844,15845,15846,15847,15848,15849,15850,15851,15852,15853,15854,15855,15856,15857,15858,15859,15860,15861,15862,15863,15864,15865,15866,15867,15868,15869,15870,15871,15872,15873,15874,15875,15876,15877,15878,15879,15880,15881,15882,15883,15884,15885,15886,15887,15888,15889,15890,15891,15892,15893,15894,15895,15896,15897,15898,15899,15900,15901,15902,15903,15904,15905,15906,15907,15908,15909,15910,15911,15912,15913,15914,15915,15916,15917,15918,15919,15920,15921,15922,15923,15924,15925,15926,15927,15928,15929,15930,15931,15932,15933,15934,15935,15936,15937,15938,15939,15940,15941,15942,15943,15944,15945,15946,15947,15948,15949,15950,15951,15952,15953,15954,15955,15956,15957,15958,15959,15960,15961,15962,15963,15964,15965,15966,15967,15968,15969,15970,15971,15972,15973,15974,15975,15976,15977,15978,15979,15980,15981,15982,15983,15984,15985,15986,15987,15988,15989,15990,15991,15992,15993,15994,15995,15996,15997,15998,15999,16000,16001,16002,16003,16004,16005,16006,16007,16008,16009,16010,16011,16012,16013,16014,16015,16016,16017,16018,16019,16020,16021,16022,16023,16024,16025,16026,16027,16028,16029,16030,16031,16032,16033,16034,16035,16036,16037,16038,16039,16040,16041,16042,16043,16044,16045,16046,16047,16048,16049,16050,16051,16052,16053,16054,16055,16056,16057,16058,16059,16060,16061,16062,16063,16064,16065,16066,16067,16068,16069,16070,16071,16072,16073,16074,16075,16076,16077,16078,16079,16080,16081,16082,16083,16084,16085,16086,16087,16088,16089,16090,16091,16092,16093,16094,16095,16096,16097,16098,16099,16100,16101,16102,16103,16104,16105,16106,16107,16108,16109,16110,16111,16112,16113,16114,16115,16116,16117,16118,16119,16120,16121,16122,16123,16124,16125,16126,16127,16128,16129,16130,16131,16132,16133,16134,16135,16136,16137,16138,16139,16140,16141,16142,16143,16144,16145,16146,16147,16148,16149,16150,16151,16152,16153,16154,16155,16156,16157,16158,16159,16160,16161,16162,16163,16164,16165,16166,16167,16168,16169,16170,16171,16172,16173,16174,16175,16176,16177,16178,16179,16180,16181,16182,16183,16184,16185,16186,16187,16188,16189,16190,16191,16192,16193,16194,16195,16196,16197,16198,16199,16200,16201,16202,16203,16204,16205,16206,16207,16208,16209,16210,16211,16212,16213,16214,16215,16216,16217,16218,16219,16220,16221,16222,16223,16224,16225,16226,16227,16228,16229,16230,16231,16232,16233,16234,16235,16236,16237,16238,16239,16240,16241,16242,16243,16244,16245,16246,16247,16248,16249,16250,16251,16252,16253,16254,16255,16256,16257,16258,16259,16260,16261,16262,16263,16264,16265,16266,16267,16268,16269,16270,16271,16272,16273,16274,16275,16276,16277,16278,16279,16280,16281,16282,16283,16284,16285,16286,16287,16288,16289,16290,16291,16292,16293,16294,16295,16296,16297,16298,16299,16300,16301,16302,16303,16304,16305,16306,16307,16308,16309,16310,16311,16312,16313,16314,16315,16316,16317,16318,16319,16320,16321,16322,16323,16324,16325,16326,16327,16328,16329,16330,16331,16332,16333,16334,16335,16336,16337,16338,16339,16340,16341,16342,16343,16344,16345,16346,16347,16348,16349,16350,16351,16352,16353,16354,16355,16356,16357,16358,16359,16360,16361,16362,16363,16364,16365,16366,16367,16368,16369,16370,16371,16372,16373,16374,16375,16376,16377,16378,16379,16380,16381,16382,16383,16384,16385,16386,16387,16388,16389,16390,16391,16392,16393,16394,16395,16396,16397,16398,16399,16400,16401,16402,16403,16404,16405,16406,16407,16408,16409,16410,16411,16412,16413,16414,16415,16416,16417,16418,16419,16420,16421,16422,16423,16424,16425,16426,16427,16428,16429,16430,16431,16432,16433,16434,16435,16436,16437,16438,16439,16440,16441,16442,16443,16444,16445,16446,16447,16448,16449,16450,16451,16452,16453,16454,16455,16456,16457,16458,16459,16460,16461,16462,16463,16464,16465,16466,16467,16468,16469,16470,16471,16472,16473,16474,16475,16476,16477,16478,16479,16480,16481,16482,16483,16484,16485,16486,16487,16488,16489,16490,16491,16492,16493,16494,16495,16496,16497,16498,16499,16500,16501,16502,16503,16504,16505,16506,16507,16508,16509,16510,16511,16512,16513,16514,16515,16516,16517,16518,16519,16520,16521,16522,16523,16524,16525,16526,16527,16528,16529,16530,16531,16532,16533,16534,16535,16536,16537,16538,16539,16540,16541,16542,16543,16544,16545,16546,16547,16548,16549,16550,16551,16552,16553,16554,16555,16556,16557,16558,16559,16560,16561,16562,16563,16564,16565,16566,16567,16568,16569,16570,16571,16572,16573,16574,16575,16576,16577,16578,16579,16580,16581,16582,16583,16584,16585,16586,16587,16588,16589,16590,16591,16592,16593,16594,16595,16596,16597,16598,16599,16600,16601,16602,16603,16604,16605,16606,16607,16608,16609,16610,16611,16612,16613,16614,16615,16616,16617,16618,16619,16620,16621,16622,16623,16624,16625,16626,16627,16628,16629,16630,16631,16632,16633,16634,16635,16636,16637,16638,16639,16640,16641,16642,16643,16644,16645,16646,16647,16648,16649,16650,16651,16652,16653,16654,16655,16656,16657,16658,16659,16660,16661,16662,16663,16664,16665,16666,16667,16668,16669,16670,16671,16672,16673,16674,16675,16676,16677,16678,16679,16680,16681,16682,16683,16684,16685,16686,16687,16688,16689,16690,16691,16692,16693,16694,16695,16696,16697,16698,16699,16700,16701,16702,16703,16704,16705,16706,16707,16708,16709,16710,16711,16712,16713,16714,16715,16716,16717,16718,16719,16720,16721,16722,16723,16724,16725,16726,16727,16728,16729,16730,16731,16732,16733,16734,16735,16736,16737,16738,16739,16740,16741,16742,16743,16744,16745,16746,16747,16748,16749,16750,16751,16752,16753,16754,16755,16756,16757,16758,16759,16760,16761,16762,16763,16764,16765,16766,16767,16768,16769,16770,16771,16772,16773,16774,16775,16776,16777,16778,16779,16780,16781,16782,16783,16784,16785,16786,16787,16788,16789,16790,16791,16792,16793,16794,16795,16796,16797,16798,16799,16800,16801,16802,16803,16804,16805,16806,16807,16808,16809,16810,16811,16812,16813,16814,16815,16816,16817,16818,16819,16820,16821,16822,16823,16824,16825,16826,16827,16828,16829,16830,16831,16832,16833,16834,16835,16836,16837,16838,16839,16840,16841,16842,16843,16844,16845,16846,16847,16848,16849,16850,16851,16852,16853,16854,16855,16856,16857,16858,16859,16860,16861,16862,16863,16864,16865,16866,16867,16868,16869,16870,16871,16872,16873,16874,16875,16876,16877,16878,16879,16880,16881,16882,16883,16884,16885,16886,16887,16888,16889,16890,16891,16892,16893,16894,16895,16896,16897,16898,16899,16900,16901,16902,16903,16904,16905,16906,16907,16908,16909,16910,16911,16912,16913,16914,16915,16916,16917,16918,16919,16920,16921,16922,16923,16924,16925,16926,16927,16928,16929,16930,16931,16932,16933,16934,16935,16936,16937,16938,16939,16940,16941,16942,16943,16944,16945,16946,16947,16948,16949,16950,16951,16952,16953,16954,16955,16956,16957,16958,16959,16960,16961,16962,16963,16964,16965,16966,16967,16968,16969,16970,16971,16972,16973,16974,16975,16976,16977,16978,16979,16980,16981,16982,16983,16984,16985,16986,16987,16988,16989,16990,16991,16992,16993,16994,16995,16996,16997,16998,16999,17000,17001,17002,17003,17004,17005,17006,17007,17008,17009,17010,17011,17012,17013,17014,17015,17016,17017,17018,17019,17020,17021,17022,17023,17024,17025,17026,17027,17028,17029,17030,17031,17032,17033,17034,17035,17036,17037,17038,17039,17040,17041,17042,17043,17044,17045,17046,17047,17048,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,17062,17063,17064,17065,17066,17067,17068,17069,17070,17071,17072,17073,17074,17075,17076,17077,17078,17079,17080,17081,17082,17083,17084,17085,17086,17087,17088,17089,17090,17091,17092,17093,17094,17095,17096,17097,17098,17099,17100,17101,17102,17103,17104,17105,17106,17107,17108,17109,17110,17111,17112,17113,17114,17115,17116,17117,17118,17119,17120,17121,17122,17123,17124,17125,17126,17127,17128,17129,17130,17131,17132,17133,17134,17135,17136,17137,17138,17139,17140,17141,17142,17143,17144,17145,17146,17147,17148,17149,17150,17151,17152,17153,17154,17155,17156,17157,17158,17159,17160,17161,17162,17163,17164,17165,17166,17167,17168,17169,17170,17171,17172,17173,17174,17175,17176,17177,17178,17179,17180,17181,17182,17183,17184,17185,17186,17187,17188,17189,17190,17191,17192,17193,17194,17195,17196,17197,17198,17199,17200,17201,17202,17203,17204,17205,17206,17207,17208,17209,17210,17211,17212,17213,17214,17215,17216,17217,17218,17219,17220,17221,17222,17223,17224,17225,17226,17227,17228,17229,17230,17231,17232,17233,17234,17235,17236,17237,17238,17239,17240,17241,17242,17243,17244,17245,17246,17247,17248,17249,17250,17251,17252,17253,17254,17255,17256,17257,17258,17259,17260,17261,17262,17263,17264,17265,17266,17267,17268,17269,17270,17271,17272,17273,17274,17275,17276,17277,17278,17279,17280,17281,17282,17283,17284,17285,17286,17287,17288,17289,17290,17291,17292,17293,17294,17295,17296,17297,17298,17299,17300,17301,17302,17303,17304,17305,17306,17307,17308,17309,17310,17311,17312,17313,17314,17315,17316,17317,17318,17319,17320,17321,17322,17323,17324,17325,17326,17327,17328,17329,17330,17331,17332,17333,17334,17335,17336,17337,17338,17339,17340,17341,17342,17343,17344,17345,17346,17347,17348,17349,17350,17351,17352,17353,17354,17355,17356,17357,17358,17359,17360,17361,17362,17363,17364,17365,17366,17367,17368,17369,17370,17371,17372,17373,17374,17375,17376,17377,17378,17379,17380,17381,17382,17383,17384,17385,17386,17387,17388,17389,17390,17391,17392,17393,17394,17395,17396,17397,17398,17399,17400,17401,17402,17403,17404,17405,17406,17407,17408,17409,17410,17411,17412,17413,17414,17415,17416,17417,17418,17419,17420,17421,17422,17423,17424,17425,17426,17427,17428,17429,17430,17431,17432,17433,17434,17435,17436,17437,17438,17439,17440,17441,17442,17443,17444,17445,17446,17447,17448,17449,17450,17451,17452,17453,17454,17455,17456,17457,17458,17459,17460,17461,17462,17463,17464,17465,17466,17467,17468,17469,17470,17471,17472,17473,17474,17475,17476,17477,17478,17479,17480,17481,17482,17483,17484,17485,17486,17487,17488,17489,17490,17491,17492,17493,17494,17495,17496,17497,17498,17499,17500,17501,17502,17503,17504,17505,17506,17507,17508,17509,17510,17511,17512,17513,17514,17515,17516,17517,17518,17519,17520,17521,17522,17523,17524,17525,17526,17527,17528,17529,17530,17531,17532,17533,17534,17535,17536,17537,17538,17539,17540,17541,17542,17543,17544,17545,17546,17547,17548,17549,17550,17551,17552,17553,17554,17555,17556,17557,17558,17559,17560,17561,17562,17563,17564,17565,17566,17567,17568,17569,17570,17571,17572,17573,17574,17575,17576,17577,17578,17579,17580,17581,17582,17583,17584,17585,17586,17587,17588,17589,17590,17591,17592,17593,17594,17595,17596,17597,17598,17599,17600,17601,17602,17603,17604,17605,17606,17607,17608,17609,17610,17611,17612,17613,17614,17615,17616,17617,17618,17619,17620,17621,17622,17623,17624,17625,17626,17627,17628,17629,17630,17631,17632,17633,17634,17635,17636,17637,17638,17639,17640,17641,17642,17643,17644,17645,17646,17647,17648,17649,17650,17651,17652,17653,17654,17655,17656,17657,17658,17659,17660,17661,17662,17663,17664,17665,17666,17667,17668,17669,17670,17671,17672,17673,17674,17675,17676,17677,17678,17679,17680,17681,17682,17683,17684,17685,17686,17687,17688,17689,17690,17691,17692,17693,17694,17695,17696,17697,17698,17699,17700,17701,17702,17703,17704,17705,17706,17707,17708,17709,17710,17711,17712,17713,17714,17715,17716,17717,17718,17719,17720,17721,17722,17723,17724,17725,17726,17727,17728,17729,17730,17731,17732,17733,17734,17735,17736,17737,17738,17739,17740,17741,17742,17743,17744,17745,17746,17747,17748,17749,17750,17751,17752,17753,17754,17755,17756,17757,17758,17759,17760,17761,17762,17763,17764,17765,17766,17767,17768,17769,17770,17771,17772,17773,17774,17775,17776,17777,17778,17779,17780,17781,17782,17783,17784,17785,17786,17787,17788,17789,17790,17791,17792,17793,17794,17795,17796,17797,17798,17799,17800,17801,17802,17803,17804,17805,17806,17807,17808,17809,17810,17811,17812,17813,17814,17815,17816,17817,17818,17819,17820,17821,17822,17823,17824,17825,17826,17827,17828,17829,17830,17831,17832,17833,17834,17835,17836,17837,17838,17839,17840,17841,17842,17843,17844,17845,17846,17847,17848,17849,17850,17851,17852,17853,17854,17855,17856,17857,17858,17859,17860,17861,17862,17863,17864,17865,17866,17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,17879,17880,17881,17882,17883,17884,17885,17886,17887,17888,17889,17890,17891,17892,17893,17894,17895,17896,17897,17898,17899,17900,17901,17902,17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,17913,17914,17915,17916,17917,17918,17919,17920,17921,17922,17923,17924,17925,17926,17927,17928,17929,17930,17931,17932,17933,17934,17935,17936,17937,17938,17939,17940,17941,17942,17943,17944,17945,17946,17947,17948,17949,17950,17951,17952,17953,17954,17955,17956,17957,17958,17959,17960,17961,17962,17963,17964,17965,17966,17967,17968,17969,17970,17971,17972,17973,17974,17975,17976,17977,17978,17979,17980,17981,17982,17983,17984,17985,17986,17987,17988,17989,17990,17991,17992,17993,17994,17995,17996,17997,17998,17999,18000,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,18011,18012,18013,18014,18015,18016,18017,18018,18019,18020,18021,18022,18023,18024,18025,18026,18027,18028,18029,18030,18031,18032,18033,18034,18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,18047,18048,18049,18050,18051,18052,18053,18054,18055,18056,18057,18058,18059,18060,18061,18062,18063,18064,18065,18066,18067,18068,18069,18070,18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,18083,18084,18085,18086,18087,18088,18089,18090,18091,18092,18093,18094,18095,18096,18097,18098,18099,18100,18101,18102,18103,18104,18105,18106,18107,18108,18109,18110,18111,18112,18113,18114,18115,18116,18117,18118,18119,18120,18121,18122,18123,18124,18125,18126,18127,18128,18129,18130,18131,18132,18133,18134,18135,18136,18137,18138,18139,18140,18141,18142,18143,18144,18145,18146,18147,18148,18149,18150,18151,18152,18153,18154,18155,18156,18157,18158,18159,18160,18161,18162,18163,18164,18165,18166,18167,18168,18169,18170,18171,18172,18173,18174,18175,18176,18177,18178,18179,18180,18181,18182,18183,18184,18185,18186,18187,18188,18189,18190,18191,18192,18193,18194,18195,18196,18197,18198,18199,18200,18201,18202,18203,18204,18205,18206,18207,18208,18209,18210,18211,18212,18213,18214,18215,18216,18217,18218,18219,18220,18221,18222,18223,18224,18225,18226,18227,18228,18229,18230,18231,18232,18233,18234,18235,18236,18237,18238,18239,18240,18241,18242,18243,18244,18245,18246,18247,18248,18249,18250,18251,18252,18253,18254,18255,18256,18257,18258,18259,18260,18261,18262,18263,18264,18265,18266,18267,18268,18269,18270,18271,18272,18273,18274,18275,18276,18277,18278,18279,18280,18281,18282,18283,18284,18285,18286,18287,18288,18289,18290,18291,18292,18293,18294,18295,18296,18297,18298,18299,18300,18301,18302,18303,18304,18305,18306,18307,18308,18309,18310,18311,18312,18313,18314,18315,18316,18317,18318,18319,18320,18321,18322,18323,18324,18325,18326,18327,18328,18329,18330,18331,18332,18333,18334,18335,18336,18337,18338,18339,18340,18341,18342,18343,18344,18345,18346,18347,18348,18349,18350,18351,18352,18353,18354,18355,18356,18357,18358,18359,18360,18361,18362,18363,18364,18365,18366,18367,18368,18369,18370,18371,18372,18373,18374,18375,18376,18377,18378,18379,18380,18381,18382,18383,18384,18385,18386,18387,18388,18389,18390,18391,18392,18393,18394,18395,18396,18397,18398,18399,18400,18401,18402,18403,18404,18405,18406,18407,18408,18409,18410,18411,18412,18413,18414,18415,18416,18417,18418,18419,18420,18421,18422,18423,18424,18425,18426,18427,18428,18429,18430,18431,18432,18433,18434,18435,18436,18437,18438,18439,18440,18441,18442,18443,18444,18445,18446,18447,18448,18449,18450,18451,18452,18453,18454,18455,18456,18457,18458,18459,18460,18461,18462,18463,18464,18465,18466,18467,18468,18469,18470,18471,18472,18473,18474,18475,18476,18477,18478,18479,18480,18481,18482,18483,18484,18485,18486,18487,18488,18489,18490,18491,18492,18493,18494,18495,18496,18497,18498,18499,18500,18501,18502,18503,18504,18505,18506,18507,18508,18509,18510,18511,18512,18513,18514,18515,18516,18517,18518,18519,18520,18521,18522,18523,18524,18525,18526,18527,18528,18529,18530,18531,18532,18533,18534,18535,18536,18537,18538,18539,18540,18541,18542,18543,18544,18545,18546,18547,18548,18549,18550,18551,18552,18553,18554,18555,18556,18557,18558,18559,18560,18561,18562,18563,18564,18565,18566,18567,18568,18569,18570,18571,18572,18573,18574,18575,18576,18577,18578,18579,18580,18581,18582,18583,18584,18585,18586,18587,18588,18589,18590,18591,18592,18593,18594,18595,18596,18597,18598,18599,18600,18601,18602,18603,18604,18605,18606,18607,18608,18609,18610,18611,18612,18613,18614,18615,18616,18617,18618,18619,18620,18621,18622,18623,18624,18625,18626,18627,18628,18629,18630,18631,18632,18633,18634,18635,18636,18637,18638,18639,18640,18641,18642,18643,18644,18645,18646,18647,18648,18649,18650,18651,18652,18653,18654,18655,18656,18657,18658,18659,18660,18661,18662,18663,18664,18665,18666,18667,18668,18669,18670,18671,18672,18673,18674,18675,18676,18677,18678,18679,18680,18681,18682,18683,18684,18685,18686,18687,18688,18689,18690,18691,18692,18693,18694,18695,18696,18697,18698,18699,18700,18701,18702,18703,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18746,18747,18748,18749,18750,18751,18752,18753,18754,18755,18756,18757,18758,18759,18760,18761,18762,18763,18764,18765,18766,18767,18768,18769,18770,18771,18772,18773,18774,18775,18776,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18787,18788,18789,18790,18791,18792,18793,18794,18795,18796,18797,18798,18799,18800,18801,18802,18803,18804,18805,18806,18807,18808,18809,18810,18811,18812,18813,18814,18815,18816,18817,18818,18819,18820,18821,18822,18823,18824,18825,18826,18827,18828,18829,18830,18831,18832,18833,18834,18835,18836,18837,18838,18839,18840,18841,18842,18843,18844,18845,18846,18847,18848,18849,18850,18851,18852,18853,18854,18855,18856,18857,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,18918,18919,18920,18921,18922,18923,18924,18925,18926,18927,18928,18929,18930,18931,18932,18933,18934,18935,18936,18937,18938,18939,18940,18941,18942,18943,18944,18945,18946,18947,18948,18949,18950,18951,18952,18953,18954,18955,18956,18957,18958,18959,18960,18961,18962,18963,18964,18965,18966,18967,18968,18969,18970,18971,18972,18973,18974,18975,18976,18977,18978,18979,18980,18981,18982,18983,18984,18985,18986,18987,18988,18989,18990,18991,18992,18993,18994,18995,18996,18997,18998,18999,19000,19001,19002,19003,19004,19005,19006,19007,19008,19009,19010,19011,19012,19013,19014,19015,19016,19017,19018,19019,19020,19021,19022,19023,19024,19025,19026,19027,19028,19029,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,19079,19080,19081,19082,19083,19084,19085,19086,19087,19088,19089,19090,19091,19092,19093,19094,19095,19096,19097,19098,19099,19100,19101,19102,19103,19104,19105,19106,19107,19108,19109,19110,19111,19112,19113,19114,19115,19116,19117,19118,19119,19120,19121,19122,19123,19124,19125,19126,19127,19128,19129,19130,19131,19132,19133,19134,19135,19136,19137,19138,19139,19140,19141,19142,19143,19144,19145,19146,19147,19148,19149,19150,19151,19152,19153,19154,19155,19156,19157,19158,19159,19160,19161,19162,19163,19164,19165,19166,19167,19168,19169,19170,19171,19172,19173,19174,19175,19176,19177,19178,19179,19180,19181,19182,19183,19184,19185,19186,19187,19188,19189,19190,19191,19192,19193,19194,19195,19196,19197,19198,19199,19200,19201,19202,19203,19204,19205,19206,19207,19208,19209,19210,19211,19212,19213,19214,19215,19216,19217,19218,19219,19220,19221,19222,19223,19224,19225,19226,19227,19228,19229,19230,19231,19232,19233,19234,19235,19236,19237,19238,19239,19240,19241,19242,19243,19244,19245,19246,19247,19248,19249,19250,19251,19252,19253,19254,19255,19256,19257,19258,19259,19260,19261,19262,19263,19264,19265,19266,19267,19268,19269,19270,19271,19272,19273,19274,19275,19276,19277,19278,19279,19280,19281,19282,19283,19284,19285,19286,19287,19288,19289,19290,19291,19292,19293,19294,19295,19296,19297,19298,19299,19300,19301,19302,19303,19304,19305,19306,19307,19308,19309,19310,19311,19312,19313,19314,19315,19316,19317,19318,19319,19320,19321,19322,19323,19324,19325,19326,19327,19328,19329,19330,19331,19332,19333,19334,19335,19336,19337,19338,19339,19340,19341,19342,19343,19344,19345,19346,19347,19348,19349,19350,19351,19352,19353,19354,19355,19356,19357,19358,19359,19360,19361,19362,19363,19364,19365,19366,19367,19368,19369,19370,19371,19372,19373,19374,19375,19376,19377,19378,19379,19380,19381,19382,19383,19384,19385,19386,19387,19388,19389,19390,19391,19392,19393,19394,19395,19396,19397,19398,19399,19400,19401,19402,19403,19404,19405,19406,19407,19408,19409,19410,19411,19412,19413,19414,19415,19416,19417,19418,19419,19420,19421,19422,19423,19424,19425,19426,19427,19428,19429,19430,19431,19432,19433,19434,19435,19436,19437,19438,19439,19440,19441,19442,19443,19444,19445,19446,19447,19448,19449,19450,19451,19452,19453,19454,19455,19456,19457,19458,19459,19460,19461,19462,19463,19464,19465,19466,19467,19468,19469,19470,19471,19472,19473,19474,19475,19476,19477,19478,19479,19480,19481,19482,19483,19484,19485,19486,19487,19488,19489,19490,19491,19492,19493,19494,19495,19496,19497,19498,19499,19500,19501,19502,19503,19504,19505,19506,19507,19508,19509,19510,19511,19512,19513,19514,19515,19516,19517,19518,19519,19520,19521,19522,19523,19524,19525,19526,19527,19528,19529,19530,19531,19532,19533,19534,19535,19536,19537,19538,19539,19540,19541,19542,19543,19544,19545,19546,19547,19548,19549,19550,19551,19552,19553,19554,19555,19556,19557,19558,19559,19560,19561,19562,19563,19564,19565,19566,19567,19568,19569,19570,19571,19572,19573,19574,19575,19576,19577,19578,19579,19580,19581,19582,19583,19584,19585,19586,19587,19588,19589,19590,19591,19592,19593,19594,19595,19596,19597,19598,19599,19600,19601,19602,19603,19604,19605,19606,19607,19608,19609,19610,19611,19612,19613,19614,19615,19616,19617,19618,19619,19620,19621,19622,19623,19624,19625,19626,19627,19628,19629,19630,19631,19632,19633,19634,19635,19636,19637,19638,19639,19640,19641,19642,19643,19644,19645,19646,19647,19648,19649,19650,19651,19652,19653,19654,19655,19656,19657,19658,19659,19660,19661,19662,19663,19664,19665,19666,19667,19668,19669,19670,19671,19672,19673,19674,19675,19676,19677,19678,19679,19680,19681,19682,19683,19684,19685,19686,19687,19688,19689,19690,19691,19692,19693,19694,19695,19696,19697,19698,19699,19700,19701,19702,19703,19704,19705,19706,19707,19708,19709,19710,19711,19712,19713,19714,19715,19716,19717,19718,19719,19720,19721,19722,19723,19724,19725,19726,19727,19728,19729,19730,19731,19732,19733,19734,19735,19736,19737,19738,19739,19740,19741,19742,19743,19744,19745,19746,19747,19748,19749,19750,19751,19752,19753,19754,19755,19756,19757,19758,19759,19760,19761,19762,19763,19764,19765,19766,19767,19768,19769,19770,19771,19772,19773,19774,19775,19776,19777,19778,19779,19780,19781,19782,19783,19784,19785,19786,19787,19788,19789,19790,19791,19792,19793,19794,19795,19796,19797,19798,19799,19800,19801,19802,19803,19804,19805,19806,19807,19808,19809,19810,19811,19812,19813,19814,19815,19816,19817,19818,19819,19820,19821,19822,19823,19824,19825,19826,19827,19828,19829,19830,19831,19832,19833,19834,19835,19836,19837,19838,19839,19840,19841,19842,19843,19844,19845,19846,19847,19848,19849,19850,19851,19852,19853,19854,19855,19856,19857,19858,19859,19860,19861,19862,19863,19864,19865,19866,19867,19868,19869,19870,19871,19872,19873,19874,19875,19876,19877,19878,19879,19880,19881,19882,19883,19884,19885,19886,19887,19888,19889,19890,19891,19892,19893,19968,19969,19970,19971,19972,19973,19974,19975,19976,19977,19978,19979,19980,19981,19982,19983,19984,19985,19986,19987,19988,19989,19990,19991,19992,19993,19994,19995,19996,19997,19998,19999,20000,20001,20002,20003,20004,20005,20006,20007,20008,20009,20010,20011,20012,20013,20014,20015,20016,20017,20018,20019,20020,20021,20022,20023,20024,20025,20026,20027,20028,20029,20030,20031,20032,20033,20034,20035,20036,20037,20038,20039,20040,20041,20042,20043,20044,20045,20046,20047,20048,20049,20050,20051,20052,20053,20054,20055,20056,20057,20058,20059,20060,20061,20062,20063,20064,20065,20066,20067,20068,20069,20070,20071,20072,20073,20074,20075,20076,20077,20078,20079,20080,20081,20082,20083,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20094,20095,20096,20097,20098,20099,20100,20101,20102,20103,20104,20105,20106,20107,20108,20109,20110,20111,20112,20113,20114,20115,20116,20117,20118,20119,20120,20121,20122,20123,20124,20125,20126,20127,20128,20129,20130,20131,20132,20133,20134,20135,20136,20137,20138,20139,20140,20141,20142,20143,20144,20145,20146,20147,20148,20149,20150,20151,20152,20153,20154,20155,20156,20157,20158,20159,20160,20161,20162,20163,20164,20165,20166,20167,20168,20169,20170,20171,20172,20173,20174,20175,20176,20177,20178,20179,20180,20181,20182,20183,20184,20185,20186,20187,20188,20189,20190,20191,20192,20193,20194,20195,20196,20197,20198,20199,20200,20201,20202,20203,20204,20205,20206,20207,20208,20209,20210,20211,20212,20213,20214,20215,20216,20217,20218,20219,20220,20221,20222,20223,20224,20225,20226,20227,20228,20229,20230,20231,20232,20233,20234,20235,20236,20237,20238,20239,20240,20241,20242,20243,20244,20245,20246,20247,20248,20249,20250,20251,20252,20253,20254,20255,20256,20257,20258,20259,20260,20261,20262,20263,20264,20265,20266,20267,20268,20269,20270,20271,20272,20273,20274,20275,20276,20277,20278,20279,20280,20281,20282,20283,20284,20285,20286,20287,20288,20289,20290,20291,20292,20293,20294,20295,20296,20297,20298,20299,20300,20301,20302,20303,20304,20305,20306,20307,20308,20309,20310,20311,20312,20313,20314,20315,20316,20317,20318,20319,20320,20321,20322,20323,20324,20325,20326,20327,20328,20329,20330,20331,20332,20333,20334,20335,20336,20337,20338,20339,20340,20341,20342,20343,20344,20345,20346,20347,20348,20349,20350,20351,20352,20353,20354,20355,20356,20357,20358,20359,20360,20361,20362,20363,20364,20365,20366,20367,20368,20369,20370,20371,20372,20373,20374,20375,20376,20377,20378,20379,20380,20381,20382,20383,20384,20385,20386,20387,20388,20389,20390,20391,20392,20393,20394,20395,20396,20397,20398,20399,20400,20401,20402,20403,20404,20405,20406,20407,20408,20409,20410,20411,20412,20413,20414,20415,20416,20417,20418,20419,20420,20421,20422,20423,20424,20425,20426,20427,20428,20429,20430,20431,20432,20433,20434,20435,20436,20437,20438,20439,20440,20441,20442,20443,20444,20445,20446,20447,20448,20449,20450,20451,20452,20453,20454,20455,20456,20457,20458,20459,20460,20461,20462,20463,20464,20465,20466,20467,20468,20469,20470,20471,20472,20473,20474,20475,20476,20477,20478,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20492,20493,20494,20495,20496,20497,20498,20499,20500,20501,20502,20503,20504,20505,20506,20507,20508,20509,20510,20511,20512,20513,20514,20515,20516,20517,20518,20519,20520,20521,20522,20523,20524,20525,20526,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20538,20539,20540,20541,20542,20543,20544,20545,20546,20547,20548,20549,20550,20551,20552,20553,20554,20555,20556,20557,20558,20559,20560,20561,20562,20563,20564,20565,20566,20567,20568,20569,20570,20571,20572,20573,20574,20575,20576,20577,20578,20579,20580,20581,20582,20583,20584,20585,20586,20587,20588,20589,20590,20591,20592,20593,20594,20595,20596,20597,20598,20599,20600,20601,20602,20603,20604,20605,20606,20607,20608,20609,20610,20611,20612,20613,20614,20615,20616,20617,20618,20619,20620,20621,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20643,20644,20645,20646,20647,20648,20649,20650,20651,20652,20653,20654,20655,20656,20657,20658,20659,20660,20661,20662,20663,20664,20665,20666,20667,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20687,20688,20689,20690,20691,20692,20693,20694,20695,20696,20697,20698,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20710,20711,20712,20713,20714,20715,20716,20717,20718,20719,20720,20721,20722,20723,20724,20725,20726,20727,20728,20729,20730,20731,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20742,20743,20744,20745,20746,20747,20748,20749,20750,20751,20752,20753,20754,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20769,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20799,20800,20801,20802,20803,20804,20805,20806,20807,20808,20809,20810,20811,20812,20813,20814,20815,20816,20817,20818,20819,20820,20821,20822,20823,20824,20825,20826,20827,20828,20829,20830,20831,20832,20833,20834,20835,20836,20837,20838,20839,20840,20841,20842,20843,20844,20845,20846,20847,20848,20849,20850,20851,20852,20853,20854,20855,20856,20857,20858,20859,20860,20861,20862,20863,20864,20865,20866,20867,20868,20869,20870,20871,20872,20873,20874,20875,20876,20877,20878,20879,20880,20881,20882,20883,20884,20885,20886,20887,20888,20889,20890,20891,20892,20893,20894,20895,20896,20897,20898,20899,20900,20901,20902,20903,20904,20905,20906,20907,20908,20909,20910,20911,20912,20913,20914,20915,20916,20917,20918,20919,20920,20921,20922,20923,20924,20925,20926,20927,20928,20929,20930,20931,20932,20933,20934,20935,20936,20937,20938,20939,20940,20941,20942,20943,20944,20945,20946,20947,20948,20949,20950,20951,20952,20953,20954,20955,20956,20957,20958,20959,20960,20961,20962,20963,20964,20965,20966,20967,20968,20969,20970,20971,20972,20973,20974,20975,20976,20977,20978,20979,20980,20981,20982,20983,20984,20985,20986,20987,20988,20989,20990,20991,20992,20993,20994,20995,20996,20997,20998,20999,21000,21001,21002,21003,21004,21005,21006,21007,21008,21009,21010,21011,21012,21013,21014,21015,21016,21017,21018,21019,21020,21021,21022,21023,21024,21025,21026,21027,21028,21029,21030,21031,21032,21033,21034,21035,21036,21037,21038,21039,21040,21041,21042,21043,21044,21045,21046,21047,21048,21049,21050,21051,21052,21053,21054,21055,21056,21057,21058,21059,21060,21061,21062,21063,21064,21065,21066,21067,21068,21069,21070,21071,21072,21073,21074,21075,21076,21077,21078,21079,21080,21081,21082,21083,21084,21085,21086,21087,21088,21089,21090,21091,21092,21093,21094,21095,21096,21097,21098,21099,21100,21101,21102,21103,21104,21105,21106,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21117,21118,21119,21120,21121,21122,21123,21124,21125,21126,21127,21128,21129,21130,21131,21132,21133,21134,21135,21136,21137,21138,21139,21140,21141,21142,21143,21144,21145,21146,21147,21148,21149,21150,21151,21152,21153,21154,21155,21156,21157,21158,21159,21160,21161,21162,21163,21164,21165,21166,21167,21168,21169,21170,21171,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21182,21183,21184,21185,21186,21187,21188,21189,21190,21191,21192,21193,21194,21195,21196,21197,21198,21199,21200,21201,21202,21203,21204,21205,21206,21207,21208,21209,21210,21211,21212,21213,21214,21215,21216,21217,21218,21219,21220,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21232,21233,21234,21235,21236,21237,21238,21239,21240,21241,21242,21243,21244,21245,21246,21247,21248,21249,21250,21251,21252,21253,21254,21255,21256,21257,21258,21259,21260,21261,21262,21263,21264,21265,21266,21267,21268,21269,21270,21271,21272,21273,21274,21275,21276,21277,21278,21279,21280,21281,21282,21283,21284,21285,21286,21287,21288,21289,21290,21291,21292,21293,21294,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21305,21306,21307,21308,21309,21310,21311,21312,21313,21314,21315,21316,21317,21318,21319,21320,21321,21322,21323,21324,21325,21326,21327,21328,21329,21330,21331,21332,21333,21334,21335,21336,21337,21338,21339,21340,21341,21342,21343,21344,21345,21346,21347,21348,21349,21350,21351,21352,21353,21354,21355,21356,21357,21358,21359,21360,21361,21362,21363,21364,21365,21366,21367,21368,21369,21370,21371,21372,21373,21374,21375,21376,21377,21378,21379,21380,21381,21382,21383,21384,21385,21386,21387,21388,21389,21390,21391,21392,21393,21394,21395,21396,21397,21398,21399,21400,21401,21402,21403,21404,21405,21406,21407,21408,21409,21410,21411,21412,21413,21414,21415,21416,21417,21418,21419,21420,21421,21422,21423,21424,21425,21426,21427,21428,21429,21430,21431,21432,21433,21434,21435,21436,21437,21438,21439,21440,21441,21442,21443,21444,21445,21446,21447,21448,21449,21450,21451,21452,21453,21454,21455,21456,21457,21458,21459,21460,21461,21462,21463,21464,21465,21466,21467,21468,21469,21470,21471,21472,21473,21474,21475,21476,21477,21478,21479,21480,21481,21482,21483,21484,21485,21486,21487,21488,21489,21490,21491,21492,21493,21494,21495,21496,21497,21498,21499,21500,21501,21502,21503,21504,21505,21506,21507,21508,21509,21510,21511,21512,21513,21514,21515,21516,21517,21518,21519,21520,21521,21522,21523,21524,21525,21526,21527,21528,21529,21530,21531,21532,21533,21534,21535,21536,21537,21538,21539,21540,21541,21542,21543,21544,21545,21546,21547,21548,21549,21550,21551,21552,21553,21554,21555,21556,21557,21558,21559,21560,21561,21562,21563,21564,21565,21566,21567,21568,21569,21570,21571,21572,21573,21574,21575,21576,21577,21578,21579,21580,21581,21582,21583,21584,21585,21586,21587,21588,21589,21590,21591,21592,21593,21594,21595,21596,21597,21598,21599,21600,21601,21602,21603,21604,21605,21606,21607,21608,21609,21610,21611,21612,21613,21614,21615,21616,21617,21618,21619,21620,21621,21622,21623,21624,21625,21626,21627,21628,21629,21630,21631,21632,21633,21634,21635,21636,21637,21638,21639,21640,21641,21642,21643,21644,21645,21646,21647,21648,21649,21650,21651,21652,21653,21654,21655,21656,21657,21658,21659,21660,21661,21662,21663,21664,21665,21666,21667,21668,21669,21670,21671,21672,21673,21674,21675,21676,21677,21678,21679,21680,21681,21682,21683,21684,21685,21686,21687,21688,21689,21690,21691,21692,21693,21694,21695,21696,21697,21698,21699,21700,21701,21702,21703,21704,21705,21706,21707,21708,21709,21710,21711,21712,21713,21714,21715,21716,21717,21718,21719,21720,21721,21722,21723,21724,21725,21726,21727,21728,21729,21730,21731,21732,21733,21734,21735,21736,21737,21738,21739,21740,21741,21742,21743,21744,21745,21746,21747,21748,21749,21750,21751,21752,21753,21754,21755,21756,21757,21758,21759,21760,21761,21762,21763,21764,21765,21766,21767,21768,21769,21770,21771,21772,21773,21774,21775,21776,21777,21778,21779,21780,21781,21782,21783,21784,21785,21786,21787,21788,21789,21790,21791,21792,21793,21794,21795,21796,21797,21798,21799,21800,21801,21802,21803,21804,21805,21806,21807,21808,21809,21810,21811,21812,21813,21814,21815,21816,21817,21818,21819,21820,21821,21822,21823,21824,21825,21826,21827,21828,21829,21830,21831,21832,21833,21834,21835,21836,21837,21838,21839,21840,21841,21842,21843,21844,21845,21846,21847,21848,21849,21850,21851,21852,21853,21854,21855,21856,21857,21858,21859,21860,21861,21862,21863,21864,21865,21866,21867,21868,21869,21870,21871,21872,21873,21874,21875,21876,21877,21878,21879,21880,21881,21882,21883,21884,21885,21886,21887,21888,21889,21890,21891,21892,21893,21894,21895,21896,21897,21898,21899,21900,21901,21902,21903,21904,21905,21906,21907,21908,21909,21910,21911,21912,21913,21914,21915,21916,21917,21918,21919,21920,21921,21922,21923,21924,21925,21926,21927,21928,21929,21930,21931,21932,21933,21934,21935,21936,21937,21938,21939,21940,21941,21942,21943,21944,21945,21946,21947,21948,21949,21950,21951,21952,21953,21954,21955,21956,21957,21958,21959,21960,21961,21962,21963,21964,21965,21966,21967,21968,21969,21970,21971,21972,21973,21974,21975,21976,21977,21978,21979,21980,21981,21982,21983,21984,21985,21986,21987,21988,21989,21990,21991,21992,21993,21994,21995,21996,21997,21998,21999,22000,22001,22002,22003,22004,22005,22006,22007,22008,22009,22010,22011,22012,22013,22014,22015,22016,22017,22018,22019,22020,22021,22022,22023,22024,22025,22026,22027,22028,22029,22030,22031,22032,22033,22034,22035,22036,22037,22038,22039,22040,22041,22042,22043,22044,22045,22046,22047,22048,22049,22050,22051,22052,22053,22054,22055,22056,22057,22058,22059,22060,22061,22062,22063,22064,22065,22066,22067,22068,22069,22070,22071,22072,22073,22074,22075,22076,22077,22078,22079,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22092,22093,22094,22095,22096,22097,22098,22099,22100,22101,22102,22103,22104,22105,22106,22107,22108,22109,22110,22111,22112,22113,22114,22115,22116,22117,22118,22119,22120,22121,22122,22123,22124,22125,22126,22127,22128,22129,22130,22131,22132,22133,22134,22135,22136,22137,22138,22139,22140,22141,22142,22143,22144,22145,22146,22147,22148,22149,22150,22151,22152,22153,22154,22155,22156,22157,22158,22159,22160,22161,22162,22163,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22179,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22191,22192,22193,22194,22195,22196,22197,22198,22199,22200,22201,22202,22203,22204,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22218,22219,22220,22221,22222,22223,22224,22225,22226,22227,22228,22229,22230,22231,22232,22233,22234,22235,22236,22237,22238,22239,22240,22241,22242,22243,22244,22245,22246,22247,22248,22249,22250,22251,22252,22253,22254,22255,22256,22257,22258,22259,22260,22261,22262,22263,22264,22265,22266,22267,22268,22269,22270,22271,22272,22273,22274,22275,22276,22277,22278,22279,22280,22281,22282,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22300,22301,22302,22303,22304,22305,22306,22307,22308,22309,22310,22311,22312,22313,22314,22315,22316,22317,22318,22319,22320,22321,22322,22323,22324,22325,22326,22327,22328,22329,22330,22331,22332,22333,22334,22335,22336,22337,22338,22339,22340,22341,22342,22343,22344,22345,22346,22347,22348,22349,22350,22351,22352,22353,22354,22355,22356,22357,22358,22359,22360,22361,22362,22363,22364,22365,22366,22367,22368,22369,22370,22371,22372,22373,22374,22375,22376,22377,22378,22379,22380,22381,22382,22383,22384,22385,22386,22387,22388,22389,22390,22391,22392,22393,22394,22395,22396,22397,22398,22399,22400,22401,22402,22403,22404,22405,22406,22407,22408,22409,22410,22411,22412,22413,22414,22415,22416,22417,22418,22419,22420,22421,22422,22423,22424,22425,22426,22427,22428,22429,22430,22431,22432,22433,22434,22435,22436,22437,22438,22439,22440,22441,22442,22443,22444,22445,22446,22447,22448,22449,22450,22451,22452,22453,22454,22455,22456,22457,22458,22459,22460,22461,22462,22463,22464,22465,22466,22467,22468,22469,22470,22471,22472,22473,22474,22475,22476,22477,22478,22479,22480,22481,22482,22483,22484,22485,22486,22487,22488,22489,22490,22491,22492,22493,22494,22495,22496,22497,22498,22499,22500,22501,22502,22503,22504,22505,22506,22507,22508,22509,22510,22511,22512,22513,22514,22515,22516,22517,22518,22519,22520,22521,22522,22523,22524,22525,22526,22527,22528,22529,22530,22531,22532,22533,22534,22535,22536,22537,22538,22539,22540,22541,22542,22543,22544,22545,22546,22547,22548,22549,22550,22551,22552,22553,22554,22555,22556,22557,22558,22559,22560,22561,22562,22563,22564,22565,22566,22567,22568,22569,22570,22571,22572,22573,22574,22575,22576,22577,22578,22579,22580,22581,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22596,22597,22598,22599,22600,22601,22602,22603,22604,22605,22606,22607,22608,22609,22610,22611,22612,22613,22614,22615,22616,22617,22618,22619,22620,22621,22622,22623,22624,22625,22626,22627,22628,22629,22630,22631,22632,22633,22634,22635,22636,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22654,22655,22656,22657,22658,22659,22660,22661,22662,22663,22664,22665,22666,22667,22668,22669,22670,22671,22672,22673,22674,22675,22676,22677,22678,22679,22680,22681,22682,22683,22684,22685,22686,22687,22688,22689,22690,22691,22692,22693,22694,22695,22696,22697,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22716,22717,22718,22719,22720,22721,22722,22723,22724,22725,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22737,22738,22739,22740,22741,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22756,22757,22758,22759,22760,22761,22762,22763,22764,22765,22766,22767,22768,22769,22770,22771,22772,22773,22774,22775,22776,22777,22778,22779,22780,22781,22782,22783,22784,22785,22786,22787,22788,22789,22790,22791,22792,22793,22794,22795,22796,22797,22798,22799,22800,22801,22802,22803,22804,22805,22806,22807,22808,22809,22810,22811,22812,22813,22814,22815,22816,22817,22818,22819,22820,22821,22822,22823,22824,22825,22826,22827,22828,22829,22830,22831,22832,22833,22834,22835,22836,22837,22838,22839,22840,22841,22842,22843,22844,22845,22846,22847,22848,22849,22850,22851,22852,22853,22854,22855,22856,22857,22858,22859,22860,22861,22862,22863,22864,22865,22866,22867,22868,22869,22870,22871,22872,22873,22874,22875,22876,22877,22878,22879,22880,22881,22882,22883,22884,22885,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22899,22900,22901,22902,22903,22904,22905,22906,22907,22908,22909,22910,22911,22912,22913,22914,22915,22916,22917,22918,22919,22920,22921,22922,22923,22924,22925,22926,22927,22928,22929,22930,22931,22932,22933,22934,22935,22936,22937,22938,22939,22940,22941,22942,22943,22944,22945,22946,22947,22948,22949,22950,22951,22952,22953,22954,22955,22956,22957,22958,22959,22960,22961,22962,22963,22964,22965,22966,22967,22968,22969,22970,22971,22972,22973,22974,22975,22976,22977,22978,22979,22980,22981,22982,22983,22984,22985,22986,22987,22988,22989,22990,22991,22992,22993,22994,22995,22996,22997,22998,22999,23000,23001,23002,23003,23004,23005,23006,23007,23008,23009,23010,23011,23012,23013,23014,23015,23016,23017,23018,23019,23020,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23033,23034,23035,23036,23037,23038,23039,23040,23041,23042,23043,23044,23045,23046,23047,23048,23049,23050,23051,23052,23053,23054,23055,23056,23057,23058,23059,23060,23061,23062,23063,23064,23065,23066,23067,23068,23069,23070,23071,23072,23073,23074,23075,23076,23077,23078,23079,23080,23081,23082,23083,23084,23085,23086,23087,23088,23089,23090,23091,23092,23093,23094,23095,23096,23097,23098,23099,23100,23101,23102,23103,23104,23105,23106,23107,23108,23109,23110,23111,23112,23113,23114,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23125,23126,23127,23128,23129,23130,23131,23132,23133,23134,23135,23136,23137,23138,23139,23140,23141,23142,23143,23144,23145,23146,23147,23148,23149,23150,23151,23152,23153,23154,23155,23156,23157,23158,23159,23160,23161,23162,23163,23164,23165,23166,23167,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23186,23187,23188,23189,23190,23191,23192,23193,23194,23195,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23210,23211,23212,23213,23214,23215,23216,23217,23218,23219,23220,23221,23222,23223,23224,23225,23226,23227,23228,23229,23230,23231,23232,23233,23234,23235,23236,23237,23238,23239,23240,23241,23242,23243,23244,23245,23246,23247,23248,23249,23250,23251,23252,23253,23254,23255,23256,23257,23258,23259,23260,23261,23262,23263,23264,23265,23266,23267,23268,23269,23270,23271,23272,23273,23274,23275,23276,23277,23278,23279,23280,23281,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23305,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23318,23319,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23346,23347,23348,23349,23350,23351,23352,23353,23354,23355,23356,23357,23358,23359,23360,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23376,23377,23378,23379,23380,23381,23382,23383,23384,23385,23386,23387,23388,23389,23390,23391,23392,23393,23394,23395,23396,23397,23398,23399,23400,23401,23402,23403,23404,23405,23406,23407,23408,23409,23410,23411,23412,23413,23414,23415,23416,23417,23418,23419,23420,23421,23422,23423,23424,23425,23426,23427,23428,23429,23430,23431,23432,23433,23434,23435,23436,23437,23438,23439,23440,23441,23442,23443,23444,23445,23446,23447,23448,23449,23450,23451,23452,23453,23454,23455,23456,23457,23458,23459,23460,23461,23462,23463,23464,23465,23466,23467,23468,23469,23470,23471,23472,23473,23474,23475,23476,23477,23478,23479,23480,23481,23482,23483,23484,23485,23486,23487,23488,23489,23490,23491,23492,23493,23494,23495,23496,23497,23498,23499,23500,23501,23502,23503,23504,23505,23506,23507,23508,23509,23510,23511,23512,23513,23514,23515,23516,23517,23518,23519,23520,23521,23522,23523,23524,23525,23526,23527,23528,23529,23530,23531,23532,23533,23534,23535,23536,23537,23538,23539,23540,23541,23542,23543,23544,23545,23546,23547,23548,23549,23550,23551,23552,23553,23554,23555,23556,23557,23558,23559,23560,23561,23562,23563,23564,23565,23566,23567,23568,23569,23570,23571,23572,23573,23574,23575,23576,23577,23578,23579,23580,23581,23582,23583,23584,23585,23586,23587,23588,23589,23590,23591,23592,23593,23594,23595,23596,23597,23598,23599,23600,23601,23602,23603,23604,23605,23606,23607,23608,23609,23610,23611,23612,23613,23614,23615,23616,23617,23618,23619,23620,23621,23622,23623,23624,23625,23626,23627,23628,23629,23630,23631,23632,23633,23634,23635,23636,23637,23638,23639,23640,23641,23642,23643,23644,23645,23646,23647,23648,23649,23650,23651,23652,23653,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23664,23665,23666,23667,23668,23669,23670,23671,23672,23673,23674,23675,23676,23677,23678,23679,23680,23681,23682,23683,23684,23685,23686,23687,23688,23689,23690,23691,23692,23693,23694,23695,23696,23697,23698,23699,23700,23701,23702,23703,23704,23705,23706,23707,23708,23709,23710,23711,23712,23713,23714,23715,23716,23717,23718,23719,23720,23721,23722,23723,23724,23725,23726,23727,23728,23729,23730,23731,23732,23733,23734,23735,23736,23737,23738,23739,23740,23741,23742,23743,23744,23745,23746,23747,23748,23749,23750,23751,23752,23753,23754,23755,23756,23757,23758,23759,23760,23761,23762,23763,23764,23765,23766,23767,23768,23769,23770,23771,23772,23773,23774,23775,23776,23777,23778,23779,23780,23781,23782,23783,23784,23785,23786,23787,23788,23789,23790,23791,23792,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23803,23804,23805,23806,23807,23808,23809,23810,23811,23812,23813,23814,23815,23816,23817,23818,23819,23820,23821,23822,23823,23824,23825,23826,23827,23828,23829,23830,23831,23832,23833,23834,23835,23836,23837,23838,23839,23840,23841,23842,23843,23844,23845,23846,23847,23848,23849,23850,23851,23852,23853,23854,23855,23856,23857,23858,23859,23860,23861,23862,23863,23864,23865,23866,23867,23868,23869,23870,23871,23872,23873,23874,23875,23876,23877,23878,23879,23880,23881,23882,23883,23884,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23896,23897,23898,23899,23900,23901,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23913,23914,23915,23916,23917,23918,23919,23920,23921,23922,23923,23924,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23938,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23961,23962,23963,23964,23965,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23991,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24005,24006,24007,24008,24009,24010,24011,24012,24013,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24027,24028,24029,24030,24031,24032,24033,24034,24035,24036,24037,24038,24039,24040,24041,24042,24043,24044,24045,24046,24047,24048,24049,24050,24051,24052,24053,24054,24055,24056,24057,24058,24059,24060,24061,24062,24063,24064,24065,24066,24067,24068,24069,24070,24071,24072,24073,24074,24075,24076,24077,24078,24079,24080,24081,24082,24083,24084,24085,24086,24087,24088,24089,24090,24091,24092,24093,24094,24095,24096,24097,24098,24099,24100,24101,24102,24103,24104,24105,24106,24107,24108,24109,24110,24111,24112,24113,24114,24115,24116,24117,24118,24119,24120,24121,24122,24123,24124,24125,24126,24127,24128,24129,24130,24131,24132,24133,24134,24135,24136,24137,24138,24139,24140,24141,24142,24143,24144,24145,24146,24147,24148,24149,24150,24151,24152,24153,24154,24155,24156,24157,24158,24159,24160,24161,24162,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24178,24179,24180,24181,24182,24183,24184,24185,24186,24187,24188,24189,24190,24191,24192,24193,24194,24195,24196,24197,24198,24199,24200,24201,24202,24203,24204,24205,24206,24207,24208,24209,24210,24211,24212,24213,24214,24215,24216,24217,24218,24219,24220,24221,24222,24223,24224,24225,24226,24227,24228,24229,24230,24231,24232,24233,24234,24235,24236,24237,24238,24239,24240,24241,24242,24243,24244,24245,24246,24247,24248,24249,24250,24251,24252,24253,24254,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24265,24266,24267,24268,24269,24270,24271,24272,24273,24274,24275,24276,24277,24278,24279,24280,24281,24282,24283,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24296,24297,24298,24299,24300,24301,24302,24303,24304,24305,24306,24307,24308,24309,24310,24311,24312,24313,24314,24315,24316,24317,24318,24319,24320,24321,24322,24323,24324,24325,24326,24327,24328,24329,24330,24331,24332,24333,24334,24335,24336,24337,24338,24339,24340,24341,24342,24343,24344,24345,24346,24347,24348,24349,24350,24351,24352,24353,24354,24355,24356,24357,24358,24359,24360,24361,24362,24363,24364,24365,24366,24367,24368,24369,24370,24371,24372,24373,24374,24375,24376,24377,24378,24379,24380,24381,24382,24383,24384,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24400,24401,24402,24403,24404,24405,24406,24407,24408,24409,24410,24411,24412,24413,24414,24415,24416,24417,24418,24419,24420,24421,24422,24423,24424,24425,24426,24427,24428,24429,24430,24431,24432,24433,24434,24435,24436,24437,24438,24439,24440,24441,24442,24443,24444,24445,24446,24447,24448,24449,24450,24451,24452,24453,24454,24455,24456,24457,24458,24459,24460,24461,24462,24463,24464,24465,24466,24467,24468,24469,24470,24471,24472,24473,24474,24475,24476,24477,24478,24479,24480,24481,24482,24483,24484,24485,24486,24487,24488,24489,24490,24491,24492,24493,24494,24495,24496,24497,24498,24499,24500,24501,24502,24503,24504,24505,24506,24507,24508,24509,24510,24511,24512,24513,24514,24515,24516,24517,24518,24519,24520,24521,24522,24523,24524,24525,24526,24527,24528,24529,24530,24531,24532,24533,24534,24535,24536,24537,24538,24539,24540,24541,24542,24543,24544,24545,24546,24547,24548,24549,24550,24551,24552,24553,24554,24555,24556,24557,24558,24559,24560,24561,24562,24563,24564,24565,24566,24567,24568,24569,24570,24571,24572,24573,24574,24575,24576,24577,24578,24579,24580,24581,24582,24583,24584,24585,24586,24587,24588,24589,24590,24591,24592,24593,24594,24595,24596,24597,24598,24599,24600,24601,24602,24603,24604,24605,24606,24607,24608,24609,24610,24611,24612,24613,24614,24615,24616,24617,24618,24619,24620,24621,24622,24623,24624,24625,24626,24627,24628,24629,24630,24631,24632,24633,24634,24635,24636,24637,24638,24639,24640,24641,24642,24643,24644,24645,24646,24647,24648,24649,24650,24651,24652,24653,24654,24655,24656,24657,24658,24659,24660,24661,24662,24663,24664,24665,24666,24667,24668,24669,24670,24671,24672,24673,24674,24675,24676,24677,24678,24679,24680,24681,24682,24683,24684,24685,24686,24687,24688,24689,24690,24691,24692,24693,24694,24695,24696,24697,24698,24699,24700,24701,24702,24703,24704,24705,24706,24707,24708,24709,24710,24711,24712,24713,24714,24715,24716,24717,24718,24719,24720,24721,24722,24723,24724,24725,24726,24727,24728,24729,24730,24731,24732,24733,24734,24735,24736,24737,24738,24739,24740,24741,24742,24743,24744,24745,24746,24747,24748,24749,24750,24751,24752,24753,24754,24755,24756,24757,24758,24759,24760,24761,24762,24763,24764,24765,24766,24767,24768,24769,24770,24771,24772,24773,24774,24775,24776,24777,24778,24779,24780,24781,24782,24783,24784,24785,24786,24787,24788,24789,24790,24791,24792,24793,24794,24795,24796,24797,24798,24799,24800,24801,24802,24803,24804,24805,24806,24807,24808,24809,24810,24811,24812,24813,24814,24815,24816,24817,24818,24819,24820,24821,24822,24823,24824,24825,24826,24827,24828,24829,24830,24831,24832,24833,24834,24835,24836,24837,24838,24839,24840,24841,24842,24843,24844,24845,24846,24847,24848,24849,24850,24851,24852,24853,24854,24855,24856,24857,24858,24859,24860,24861,24862,24863,24864,24865,24866,24867,24868,24869,24870,24871,24872,24873,24874,24875,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24895,24896,24897,24898,24899,24900,24901,24902,24903,24904,24905,24906,24907,24908,24909,24910,24911,24912,24913,24914,24915,24916,24917,24918,24919,24920,24921,24922,24923,24924,24925,24926,24927,24928,24929,24930,24931,24932,24933,24934,24935,24936,24937,24938,24939,24940,24941,24942,24943,24944,24945,24946,24947,24948,24949,24950,24951,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24971,24972,24973,24974,24975,24976,24977,24978,24979,24980,24981,24982,24983,24984,24985,24986,24987,24988,24989,24990,24991,24992,24993,24994,24995,24996,24997,24998,24999,25000,25001,25002,25003,25004,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25015,25016,25017,25018,25019,25020,25021,25022,25023,25024,25025,25026,25027,25028,25029,25030,25031,25032,25033,25034,25035,25036,25037,25038,25039,25040,25041,25042,25043,25044,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25062,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25077,25078,25079,25080,25081,25082,25083,25084,25085,25086,25087,25088,25089,25090,25091,25092,25093,25094,25095,25096,25097,25098,25099,25100,25101,25102,25103,25104,25105,25106,25107,25108,25109,25110,25111,25112,25113,25114,25115,25116,25117,25118,25119,25120,25121,25122,25123,25124,25125,25126,25127,25128,25129,25130,25131,25132,25133,25134,25135,25136,25137,25138,25139,25140,25141,25142,25143,25144,25145,25146,25147,25148,25149,25150,25151,25152,25153,25154,25155,25156,25157,25158,25159,25160,25161,25162,25163,25164,25165,25166,25167,25168,25169,25170,25171,25172,25173,25174,25175,25176,25177,25178,25179,25180,25181,25182,25183,25184,25185,25186,25187,25188,25189,25190,25191,25192,25193,25194,25195,25196,25197,25198,25199,25200,25201,25202,25203,25204,25205,25206,25207,25208,25209,25210,25211,25212,25213,25214,25215,25216,25217,25218,25219,25220,25221,25222,25223,25224,25225,25226,25227,25228,25229,25230,25231,25232,25233,25234,25235,25236,25237,25238,25239,25240,25241,25242,25243,25244,25245,25246,25247,25248,25249,25250,25251,25252,25253,25254,25255,25256,25257,25258,25259,25260,25261,25262,25263,25264,25265,25266,25267,25268,25269,25270,25271,25272,25273,25274,25275,25276,25277,25278,25279,25280,25281,25282,25283,25284,25285,25286,25287,25288,25289,25290,25291,25292,25293,25294,25295,25296,25297,25298,25299,25300,25301,25302,25303,25304,25305,25306,25307,25308,25309,25310,25311,25312,25313,25314,25315,25316,25317,25318,25319,25320,25321,25322,25323,25324,25325,25326,25327,25328,25329,25330,25331,25332,25333,25334,25335,25336,25337,25338,25339,25340,25341,25342,25343,25344,25345,25346,25347,25348,25349,25350,25351,25352,25353,25354,25355,25356,25357,25358,25359,25360,25361,25362,25363,25364,25365,25366,25367,25368,25369,25370,25371,25372,25373,25374,25375,25376,25377,25378,25379,25380,25381,25382,25383,25384,25385,25386,25387,25388,25389,25390,25391,25392,25393,25394,25395,25396,25397,25398,25399,25400,25401,25402,25403,25404,25405,25406,25407,25408,25409,25410,25411,25412,25413,25414,25415,25416,25417,25418,25419,25420,25421,25422,25423,25424,25425,25426,25427,25428,25429,25430,25431,25432,25433,25434,25435,25436,25437,25438,25439,25440,25441,25442,25443,25444,25445,25446,25447,25448,25449,25450,25451,25452,25453,25454,25455,25456,25457,25458,25459,25460,25461,25462,25463,25464,25465,25466,25467,25468,25469,25470,25471,25472,25473,25474,25475,25476,25477,25478,25479,25480,25481,25482,25483,25484,25485,25486,25487,25488,25489,25490,25491,25492,25493,25494,25495,25496,25497,25498,25499,25500,25501,25502,25503,25504,25505,25506,25507,25508,25509,25510,25511,25512,25513,25514,25515,25516,25517,25518,25519,25520,25521,25522,25523,25524,25525,25526,25527,25528,25529,25530,25531,25532,25533,25534,25535,25536,25537,25538,25539,25540,25541,25542,25543,25544,25545,25546,25547,25548,25549,25550,25551,25552,25553,25554,25555,25556,25557,25558,25559,25560,25561,25562,25563,25564,25565,25566,25567,25568,25569,25570,25571,25572,25573,25574,25575,25576,25577,25578,25579,25580,25581,25582,25583,25584,25585,25586,25587,25588,25589,25590,25591,25592,25593,25594,25595,25596,25597,25598,25599,25600,25601,25602,25603,25604,25605,25606,25607,25608,25609,25610,25611,25612,25613,25614,25615,25616,25617,25618,25619,25620,25621,25622,25623,25624,25625,25626,25627,25628,25629,25630,25631,25632,25633,25634,25635,25636,25637,25638,25639,25640,25641,25642,25643,25644,25645,25646,25647,25648,25649,25650,25651,25652,25653,25654,25655,25656,25657,25658,25659,25660,25661,25662,25663,25664,25665,25666,25667,25668,25669,25670,25671,25672,25673,25674,25675,25676,25677,25678,25679,25680,25681,25682,25683,25684,25685,25686,25687,25688,25689,25690,25691,25692,25693,25694,25695,25696,25697,25698,25699,25700,25701,25702,25703,25704,25705,25706,25707,25708,25709,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25720,25721,25722,25723,25724,25725,25726,25727,25728,25729,25730,25731,25732,25733,25734,25735,25736,25737,25738,25739,25740,25741,25742,25743,25744,25745,25746,25747,25748,25749,25750,25751,25752,25753,25754,25755,25756,25757,25758,25759,25760,25761,25762,25763,25764,25765,25766,25767,25768,25769,25770,25771,25772,25773,25774,25775,25776,25777,25778,25779,25780,25781,25782,25783,25784,25785,25786,25787,25788,25789,25790,25791,25792,25793,25794,25795,25796,25797,25798,25799,25800,25801,25802,25803,25804,25805,25806,25807,25808,25809,25810,25811,25812,25813,25814,25815,25816,25817,25818,25819,25820,25821,25822,25823,25824,25825,25826,25827,25828,25829,25830,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25856,25857,25858,25859,25860,25861,25862,25863,25864,25865,25866,25867,25868,25869,25870,25871,25872,25873,25874,25875,25876,25877,25878,25879,25880,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25893,25894,25895,25896,25897,25898,25899,25900,25901,25902,25903,25904,25905,25906,25907,25908,25909,25910,25911,25912,25913,25914,25915,25916,25917,25918,25919,25920,25921,25922,25923,25924,25925,25926,25927,25928,25929,25930,25931,25932,25933,25934,25935,25936,25937,25938,25939,25940,25941,25942,25943,25944,25945,25946,25947,25948,25949,25950,25951,25952,25953,25954,25955,25956,25957,25958,25959,25960,25961,25962,25963,25964,25965,25966,25967,25968,25969,25970,25971,25972,25973,25974,25975,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25991,25992,25993,25994,25995,25996,25997,25998,25999,26000,26001,26002,26003,26004,26005,26006,26007,26008,26009,26010,26011,26012,26013,26014,26015,26016,26017,26018,26019,26020,26021,26022,26023,26024,26025,26026,26027,26028,26029,26030,26031,26032,26033,26034,26035,26036,26037,26038,26039,26040,26041,26042,26043,26044,26045,26046,26047,26048,26049,26050,26051,26052,26053,26054,26055,26056,26057,26058,26059,26060,26061,26062,26063,26064,26065,26066,26067,26068,26069,26070,26071,26072,26073,26074,26075,26076,26077,26078,26079,26080,26081,26082,26083,26084,26085,26086,26087,26088,26089,26090,26091,26092,26093,26094,26095,26096,26097,26098,26099,26100,26101,26102,26103,26104,26105,26106,26107,26108,26109,26110,26111,26112,26113,26114,26115,26116,26117,26118,26119,26120,26121,26122,26123,26124,26125,26126,26127,26128,26129,26130,26131,26132,26133,26134,26135,26136,26137,26138,26139,26140,26141,26142,26143,26144,26145,26146,26147,26148,26149,26150,26151,26152,26153,26154,26155,26156,26157,26158,26159,26160,26161,26162,26163,26164,26165,26166,26167,26168,26169,26170,26171,26172,26173,26174,26175,26176,26177,26178,26179,26180,26181,26182,26183,26184,26185,26186,26187,26188,26189,26190,26191,26192,26193,26194,26195,26196,26197,26198,26199,26200,26201,26202,26203,26204,26205,26206,26207,26208,26209,26210,26211,26212,26213,26214,26215,26216,26217,26218,26219,26220,26221,26222,26223,26224,26225,26226,26227,26228,26229,26230,26231,26232,26233,26234,26235,26236,26237,26238,26239,26240,26241,26242,26243,26244,26245,26246,26247,26248,26249,26250,26251,26252,26253,26254,26255,26256,26257,26258,26259,26260,26261,26262,26263,26264,26265,26266,26267,26268,26269,26270,26271,26272,26273,26274,26275,26276,26277,26278,26279,26280,26281,26282,26283,26284,26285,26286,26287,26288,26289,26290,26291,26292,26293,26294,26295,26296,26297,26298,26299,26300,26301,26302,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26329,26330,26331,26332,26333,26334,26335,26336,26337,26338,26339,26340,26341,26342,26343,26344,26345,26346,26347,26348,26349,26350,26351,26352,26353,26354,26355,26356,26357,26358,26359,26360,26361,26362,26363,26364,26365,26366,26367,26368,26369,26370,26371,26372,26373,26374,26375,26376,26377,26378,26379,26380,26381,26382,26383,26384,26385,26386,26387,26388,26389,26390,26391,26392,26393,26394,26395,26396,26397,26398,26399,26400,26401,26402,26403,26404,26405,26406,26407,26408,26409,26410,26411,26412,26413,26414,26415,26416,26417,26418,26419,26420,26421,26422,26423,26424,26425,26426,26427,26428,26429,26430,26431,26432,26433,26434,26435,26436,26437,26438,26439,26440,26441,26442,26443,26444,26445,26446,26447,26448,26449,26450,26451,26452,26453,26454,26455,26456,26457,26458,26459,26460,26461,26462,26463,26464,26465,26466,26467,26468,26469,26470,26471,26472,26473,26474,26475,26476,26477,26478,26479,26480,26481,26482,26483,26484,26485,26486,26487,26488,26489,26490,26491,26492,26493,26494,26495,26496,26497,26498,26499,26500,26501,26502,26503,26504,26505,26506,26507,26508,26509,26510,26511,26512,26513,26514,26515,26516,26517,26518,26519,26520,26521,26522,26523,26524,26525,26526,26527,26528,26529,26530,26531,26532,26533,26534,26535,26536,26537,26538,26539,26540,26541,26542,26543,26544,26545,26546,26547,26548,26549,26550,26551,26552,26553,26554,26555,26556,26557,26558,26559,26560,26561,26562,26563,26564,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26575,26576,26577,26578,26579,26580,26581,26582,26583,26584,26585,26586,26587,26588,26589,26590,26591,26592,26593,26594,26595,26596,26597,26598,26599,26600,26601,26602,26603,26604,26605,26606,26607,26608,26609,26610,26611,26612,26613,26614,26615,26616,26617,26618,26619,26620,26621,26622,26623,26624,26625,26626,26627,26628,26629,26630,26631,26632,26633,26634,26635,26636,26637,26638,26639,26640,26641,26642,26643,26644,26645,26646,26647,26648,26649,26650,26651,26652,26653,26654,26655,26656,26657,26658,26659,26660,26661,26662,26663,26664,26665,26666,26667,26668,26669,26670,26671,26672,26673,26674,26675,26676,26677,26678,26679,26680,26681,26682,26683,26684,26685,26686,26687,26688,26689,26690,26691,26692,26693,26694,26695,26696,26697,26698,26699,26700,26701,26702,26703,26704,26705,26706,26707,26708,26709,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26720,26721,26722,26723,26724,26725,26726,26727,26728,26729,26730,26731,26732,26733,26734,26735,26736,26737,26738,26739,26740,26741,26742,26743,26744,26745,26746,26747,26748,26749,26750,26751,26752,26753,26754,26755,26756,26757,26758,26759,26760,26761,26762,26763,26764,26765,26766,26767,26768,26769,26770,26771,26772,26773,26774,26775,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26786,26787,26788,26789,26790,26791,26792,26793,26794,26795,26796,26797,26798,26799,26800,26801,26802,26803,26804,26805,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26816,26817,26818,26819,26820,26821,26822,26823,26824,26825,26826,26827,26828,26829,26830,26831,26832,26833,26834,26835,26836,26837,26838,26839,26840,26841,26842,26843,26844,26845,26846,26847,26848,26849,26850,26851,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26862,26863,26864,26865,26866,26867,26868,26869,26870,26871,26872,26873,26874,26875,26876,26877,26878,26879,26880,26881,26882,26883,26884,26885,26886,26887,26888,26889,26890,26891,26892,26893,26894,26895,26896,26897,26898,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26911,26912,26913,26914,26915,26916,26917,26918,26919,26920,26921,26922,26923,26924,26925,26926,26927,26928,26929,26930,26931,26932,26933,26934,26935,26936,26937,26938,26939,26940,26941,26942,26943,26944,26945,26946,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26964,26965,26966,26967,26968,26969,26970,26971,26972,26973,26974,26975,26976,26977,26978,26979,26980,26981,26982,26983,26984,26985,26986,26987,26988,26989,26990,26991,26992,26993,26994,26995,26996,26997,26998,26999,27000,27001,27002,27003,27004,27005,27006,27007,27008,27009,27010,27011,27012,27013,27014,27015,27016,27017,27018,27019,27020,27021,27022,27023,27024,27025,27026,27027,27028,27029,27030,27031,27032,27033,27034,27035,27036,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27047,27048,27049,27050,27051,27052,27053,27054,27055,27056,27057,27058,27059,27060,27061,27062,27063,27064,27065,27066,27067,27068,27069,27070,27071,27072,27073,27074,27075,27076,27077,27078,27079,27080,27081,27082,27083,27084,27085,27086,27087,27088,27089,27090,27091,27092,27093,27094,27095,27096,27097,27098,27099,27100,27101,27102,27103,27104,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27117,27118,27119,27120,27121,27122,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27133,27134,27135,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27146,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27159,27160,27161,27162,27163,27164,27165,27166,27167,27168,27169,27170,27171,27172,27173,27174,27175,27176,27177,27178,27179,27180,27181,27182,27183,27184,27185,27186,27187,27188,27189,27190,27191,27192,27193,27194,27195,27196,27197,27198,27199,27200,27201,27202,27203,27204,27205,27206,27207,27208,27209,27210,27211,27212,27213,27214,27215,27216,27217,27218,27219,27220,27221,27222,27223,27224,27225,27226,27227,27228,27229,27230,27231,27232,27233,27234,27235,27236,27237,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27249,27250,27251,27252,27253,27254,27255,27256,27257,27258,27259,27260,27261,27262,27263,27264,27265,27266,27267,27268,27269,27270,27271,27272,27273,27274,27275,27276,27277,27278,27279,27280,27281,27282,27283,27284,27285,27286,27287,27288,27289,27290,27291,27292,27293,27294,27295,27296,27297,27298,27299,27300,27301,27302,27303,27304,27305,27306,27307,27308,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27424,27425,27426,27427,27428,27429,27430,27431,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27442,27443,27444,27445,27446,27447,27448,27449,27450,27451,27452,27453,27454,27455,27456,27457,27458,27459,27460,27461,27462,27463,27464,27465,27466,27467,27468,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27481,27482,27483,27484,27485,27486,27487,27488,27489,27490,27491,27492,27493,27494,27495,27496,27497,27498,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27513,27514,27515,27516,27517,27518,27519,27520,27521,27522,27523,27524,27525,27526,27527,27528,27529,27530,27531,27532,27533,27534,27535,27536,27537,27538,27539,27540,27541,27542,27543,27544,27545,27546,27547,27548,27549,27550,27551,27552,27553,27554,27555,27556,27557,27558,27559,27560,27561,27562,27563,27564,27565,27566,27567,27568,27569,27570,27571,27572,27573,27574,27575,27576,27577,27578,27579,27580,27581,27582,27583,27584,27585,27586,27587,27588,27589,27590,27591,27592,27593,27594,27595,27596,27597,27598,27599,27600,27601,27602,27603,27604,27605,27606,27607,27608,27609,27610,27611,27612,27613,27614,27615,27616,27617,27618,27619,27620,27621,27622,27623,27624,27625,27626,27627,27628,27629,27630,27631,27632,27633,27634,27635,27636,27637,27638,27639,27640,27641,27642,27643,27644,27645,27646,27647,27648,27649,27650,27651,27652,27653,27654,27655,27656,27657,27658,27659,27660,27661,27662,27663,27664,27665,27666,27667,27668,27669,27670,27671,27672,27673,27674,27675,27676,27677,27678,27679,27680,27681,27682,27683,27684,27685,27686,27687,27688,27689,27690,27691,27692,27693,27694,27695,27696,27697,27698,27699,27700,27701,27702,27703,27704,27705,27706,27707,27708,27709,27710,27711,27712,27713,27714,27715,27716,27717,27718,27719,27720,27721,27722,27723,27724,27725,27726,27727,27728,27729,27730,27731,27732,27733,27734,27735,27736,27737,27738,27739,27740,27741,27742,27743,27744,27745,27746,27747,27748,27749,27750,27751,27752,27753,27754,27755,27756,27757,27758,27759,27760,27761,27762,27763,27764,27765,27766,27767,27768,27769,27770,27771,27772,27773,27774,27775,27776,27777,27778,27779,27780,27781,27782,27783,27784,27785,27786,27787,27788,27789,27790,27791,27792,27793,27794,27795,27796,27797,27798,27799,27800,27801,27802,27803,27804,27805,27806,27807,27808,27809,27810,27811,27812,27813,27814,27815,27816,27817,27818,27819,27820,27821,27822,27823,27824,27825,27826,27827,27828,27829,27830,27831,27832,27833,27834,27835,27836,27837,27838,27839,27840,27841,27842,27843,27844,27845,27846,27847,27848,27849,27850,27851,27852,27853,27854,27855,27856,27857,27858,27859,27860,27861,27862,27863,27864,27865,27866,27867,27868,27869,27870,27871,27872,27873,27874,27875,27876,27877,27878,27879,27880,27881,27882,27883,27884,27885,27886,27887,27888,27889,27890,27891,27892,27893,27894,27895,27896,27897,27898,27899,27900,27901,27902,27903,27904,27905,27906,27907,27908,27909,27910,27911,27912,27913,27914,27915,27916,27917,27918,27919,27920,27921,27922,27923,27924,27925,27926,27927,27928,27929,27930,27931,27932,27933,27934,27935,27936,27937,27938,27939,27940,27941,27942,27943,27944,27945,27946,27947,27948,27949,27950,27951,27952,27953,27954,27955,27956,27957,27958,27959,27960,27961,27962,27963,27964,27965,27966,27967,27968,27969,27970,27971,27972,27973,27974,27975,27976,27977,27978,27979,27980,27981,27982,27983,27984,27985,27986,27987,27988,27989,27990,27991,27992,27993,27994,27995,27996,27997,27998,27999,28000,28001,28002,28003,28004,28005,28006,28007,28008,28009,28010,28011,28012,28013,28014,28015,28016,28017,28018,28019,28020,28021,28022,28023,28024,28025,28026,28027,28028,28029,28030,28031,28032,28033,28034,28035,28036,28037,28038,28039,28040,28041,28042,28043,28044,28045,28046,28047,28048,28049,28050,28051,28052,28053,28054,28055,28056,28057,28058,28059,28060,28061,28062,28063,28064,28065,28066,28067,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093,28094,28095,28096,28097,28098,28099,28100,28101,28102,28103,28104,28105,28106,28107,28108,28109,28110,28111,28112,28113,28114,28115,28116,28117,28118,28119,28120,28121,28122,28123,28124,28125,28126,28127,28128,28129,28130,28131,28132,28133,28134,28135,28136,28137,28138,28139,28140,28141,28142,28143,28144,28145,28146,28147,28148,28149,28150,28151,28152,28153,28154,28155,28156,28157,28158,28159,28160,28161,28162,28163,28164,28165,28166,28167,28168,28169,28170,28171,28172,28173,28174,28175,28176,28177,28178,28179,28180,28181,28182,28183,28184,28185,28186,28187,28188,28189,28190,28191,28192,28193,28194,28195,28196,28197,28198,28199,28200,28201,28202,28203,28204,28205,28206,28207,28208,28209,28210,28211,28212,28213,28214,28215,28216,28217,28218,28219,28220,28221,28222,28223,28224,28225,28226,28227,28228,28229,28230,28231,28232,28233,28234,28235,28236,28237,28238,28239,28240,28241,28242,28243,28244,28245,28246,28247,28248,28249,28250,28251,28252,28253,28254,28255,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28267,28268,28269,28270,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28286,28287,28288,28289,28290,28291,28292,28293,28294,28295,28296,28297,28298,28299,28300,28301,28302,28303,28304,28305,28306,28307,28308,28309,28310,28311,28312,28313,28314,28315,28316,28317,28318,28319,28320,28321,28322,28323,28324,28325,28326,28327,28328,28329,28330,28331,28332,28333,28334,28335,28336,28337,28338,28339,28340,28341,28342,28343,28344,28345,28346,28347,28348,28349,28350,28351,28352,28353,28354,28355,28356,28357,28358,28359,28360,28361,28362,28363,28364,28365,28366,28367,28368,28369,28370,28371,28372,28373,28374,28375,28376,28377,28378,28379,28380,28381,28382,28383,28384,28385,28386,28387,28388,28389,28390,28391,28392,28393,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28404,28405,28406,28407,28408,28409,28410,28411,28412,28413,28414,28415,28416,28417,28418,28419,28420,28421,28422,28423,28424,28425,28426,28427,28428,28429,28430,28431,28432,28433,28434,28435,28436,28437,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28448,28449,28450,28451,28452,28453,28454,28455,28456,28457,28458,28459,28460,28461,28462,28463,28464,28465,28466,28467,28468,28469,28470,28471,28472,28473,28474,28475,28476,28477,28478,28479,28480,28481,28482,28483,28484,28485,28486,28487,28488,28489,28490,28491,28492,28493,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28504,28505,28506,28507,28508,28509,28510,28511,28512,28513,28514,28515,28516,28517,28518,28519,28520,28521,28522,28523,28524,28525,28526,28527,28528,28529,28530,28531,28532,28533,28534,28535,28536,28537,28538,28539,28540,28541,28542,28543,28544,28545,28546,28547,28548,28549,28550,28551,28552,28553,28554,28555,28556,28557,28558,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28572,28573,28574,28575,28576,28577,28578,28579,28580,28581,28582,28583,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28595,28596,28597,28598,28599,28600,28601,28602,28603,28604,28605,28606,28607,28608,28609,28610,28611,28612,28613,28614,28615,28616,28617,28618,28619,28620,28621,28622,28623,28624,28625,28626,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28638,28639,28640,28641,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28654,28655,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28689,28690,28691,28692,28693,28694,28695,28696,28697,28698,28699,28700,28701,28702,28703,28704,28705,28706,28707,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28725,28726,28727,28728,28729,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28748,28749,28750,28751,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28766,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,28818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28917,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28966,28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28997,28998,28999,29000,29001,29002,29003,29004,29005,29006,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29051,29052,29053,29054,29055,29056,29057,29058,29059,29060,29061,29062,29063,29064,29065,29066,29067,29068,29069,29070,29071,29072,29073,29074,29075,29076,29077,29078,29079,29080,29081,29082,29083,29084,29085,29086,29087,29088,29089,29090,29091,29092,29093,29094,29095,29096,29097,29098,29099,29100,29101,29102,29103,29104,29105,29106,29107,29108,29109,29110,29111,29112,29113,29114,29115,29116,29117,29118,29119,29120,29121,29122,29123,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29134,29135,29136,29137,29138,29139,29140,29141,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29152,29153,29154,29155,29156,29157,29158,29159,29160,29161,29162,29163,29164,29165,29166,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29177,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29190,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29213,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29224,29225,29226,29227,29228,29229,29230,29231,29232,29233,29234,29235,29236,29237,29238,29239,29240,29241,29242,29243,29244,29245,29246,29247,29248,29249,29250,29251,29252,29253,29254,29255,29256,29257,29258,29259,29260,29261,29262,29263,29264,29265,29266,29267,29268,29269,29270,29271,29272,29273,29274,29275,29276,29277,29278,29279,29280,29281,29282,29283,29284,29285,29286,29287,29288,29289,29290,29291,29292,29293,29294,29295,29296,29297,29298,29299,29300,29301,29302,29303,29304,29305,29306,29307,29308,29309,29310,29311,29312,29313,29314,29315,29316,29317,29318,29319,29320,29321,29322,29323,29324,29325,29326,29327,29328,29329,29330,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29343,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29356,29357,29358,29359,29360,29361,29362,29363,29364,29365,29366,29367,29368,29369,29370,29371,29372,29373,29374,29375,29376,29377,29378,29379,29380,29381,29382,29383,29384,29385,29386,29387,29388,29389,29390,29391,29392,29393,29394,29395,29396,29397,29398,29399,29400,29401,29402,29403,29404,29405,29406,29407,29408,29409,29410,29411,29412,29413,29414,29415,29416,29417,29418,29419,29420,29421,29422,29423,29424,29425,29426,29427,29428,29429,29430,29431,29432,29433,29434,29435,29436,29437,29438,29439,29440,29441,29442,29443,29444,29445,29446,29447,29448,29449,29450,29451,29452,29453,29454,29455,29456,29457,29458,29459,29460,29461,29462,29463,29464,29465,29466,29467,29468,29469,29470,29471,29472,29473,29474,29475,29476,29477,29478,29479,29480,29481,29482,29483,29484,29485,29486,29487,29488,29489,29490,29491,29492,29493,29494,29495,29496,29497,29498,29499,29500,29501,29502,29503,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29517,29518,29519,29520,29521,29522,29523,29524,29525,29526,29527,29528,29529,29530,29531,29532,29533,29534,29535,29536,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29548,29549,29550,29551,29552,29553,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29566,29567,29568,29569,29570,29571,29572,29573,29574,29575,29576,29577,29578,29579,29580,29581,29582,29583,29584,29585,29586,29587,29588,29589,29590,29591,29592,29593,29594,29595,29596,29597,29598,29599,29600,29601,29602,29603,29604,29605,29606,29607,29608,29609,29610,29611,29612,29613,29614,29615,29616,29617,29618,29619,29620,29621,29622,29623,29624,29625,29626,29627,29628,29629,29630,29631,29632,29633,29634,29635,29636,29637,29638,29639,29640,29641,29642,29643,29644,29645,29646,29647,29648,29649,29650,29651,29652,29653,29654,29655,29656,29657,29658,29659,29660,29661,29662,29663,29664,29665,29666,29667,29668,29669,29670,29671,29672,29673,29674,29675,29676,29677,29678,29679,29680,29681,29682,29683,29684,29685,29686,29687,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29699,29700,29701,29702,29703,29704,29705,29706,29707,29708,29709,29710,29711,29712,29713,29714,29715,29716,29717,29718,29719,29720,29721,29722,29723,29724,29725,29726,29727,29728,29729,29730,29731,29732,29733,29734,29735,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29746,29747,29748,29749,29750,29751,29752,29753,29754,29755,29756,29757,29758,29759,29760,29761,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29781,29782,29783,29784,29785,29786,29787,29788,29789,29790,29791,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29805,29806,29807,29808,29809,29810,29811,29812,29813,29814,29815,29816,29817,29818,29819,29820,29821,29822,29823,29824,29825,29826,29827,29828,29829,29830,29831,29832,29833,29834,29835,29836,29837,29838,29839,29840,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29852,29853,29854,29855,29856,29857,29858,29859,29860,29861,29862,29863,29864,29865,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29882,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29906,29907,29908,29909,29910,29911,29912,29913,29914,29915,29916,29917,29918,29919,29920,29921,29922,29923,29924,29925,29926,29927,29928,29929,29930,29931,29932,29933,29934,29935,29936,29937,29938,29939,29940,29941,29942,29943,29944,29945,29946,29947,29948,29949,29950,29951,29952,29953,29954,29955,29956,29957,29958,29959,29960,29961,29962,29963,29964,29965,29966,29967,29968,29969,29970,29971,29972,29973,29974,29975,29976,29977,29978,29979,29980,29981,29982,29983,29984,29985,29986,29987,29988,29989,29990,29991,29992,29993,29994,29995,29996,29997,29998,29999,30000,30001,30002,30003,30004,30005,30006,30007,30008,30009,30010,30011,30012,30013,30014,30015,30016,30017,30018,30019,30020,30021,30022,30023,30024,30025,30026,30027,30028,30029,30030,30031,30032,30033,30034,30035,30036,30037,30038,30039,30040,30041,30042,30043,30044,30045,30046,30047,30048,30049,30050,30051,30052,30053,30054,30055,30056,30057,30058,30059,30060,30061,30062,30063,30064,30065,30066,30067,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096,30097,30098,30099,30100,30101,30102,30103,30104,30105,30106,30107,30108,30109,30110,30111,30112,30113,30114,30115,30116,30117,30118,30119,30120,30121,30122,30123,30124,30125,30126,30127,30128,30129,30130,30131,30132,30133,30134,30135,30136,30137,30138,30139,30140,30141,30142,30143,30144,30145,30146,30147,30148,30149,30150,30151,30152,30153,30154,30155,30156,30157,30158,30159,30160,30161,30162,30163,30164,30165,30166,30167,30168,30169,30170,30171,30172,30173,30174,30175,30176,30177,30178,30179,30180,30181,30182,30183,30184,30185,30186,30187,30188,30189,30190,30191,30192,30193,30194,30195,30196,30197,30198,30199,30200,30201,30202,30203,30204,30205,30206,30207,30208,30209,30210,30211,30212,30213,30214,30215,30216,30217,30218,30219,30220,30221,30222,30223,30224,30225,30226,30227,30228,30229,30230,30231,30232,30233,30234,30235,30236,30237,30238,30239,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30270,30271,30272,30273,30274,30275,30276,30277,30278,30279,30280,30281,30282,30283,30284,30285,30286,30287,30288,30289,30290,30291,30292,30293,30294,30295,30296,30297,30298,30299,30300,30301,30302,30303,30304,30305,30306,30307,30308,30309,30310,30311,30312,30313,30314,30315,30316,30317,30318,30319,30320,30321,30322,30323,30324,30325,30326,30327,30328,30329,30330,30331,30332,30333,30334,30335,30336,30337,30338,30339,30340,30341,30342,30343,30344,30345,30346,30347,30348,30349,30350,30351,30352,30353,30354,30355,30356,30357,30358,30359,30360,30361,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30372,30373,30374,30375,30376,30377,30378,30379,30380,30381,30382,30383,30384,30385,30386,30387,30388,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30399,30400,30401,30402,30403,30404,30405,30406,30407,30408,30409,30410,30411,30412,30413,30414,30415,30416,30417,30418,30419,30420,30421,30422,30423,30424,30425,30426,30427,30428,30429,30430,30431,30432,30433,30434,30435,30436,30437,30438,30439,30440,30441,30442,30443,30444,30445,30446,30447,30448,30449,30450,30451,30452,30453,30454,30455,30456,30457,30458,30459,30460,30461,30462,30463,30464,30465,30466,30467,30468,30469,30470,30471,30472,30473,30474,30475,30476,30477,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30489,30490,30491,30492,30493,30494,30495,30496,30497,30498,30499,30500,30501,30502,30503,30504,30505,30506,30507,30508,30509,30510,30511,30512,30513,30514,30515,30516,30517,30518,30519,30520,30521,30522,30523,30524,30525,30526,30527,30528,30529,30530,30531,30532,30533,30534,30535,30536,30537,30538,30539,30540,30541,30542,30543,30544,30545,30546,30547,30548,30549,30550,30551,30552,30553,30554,30555,30556,30557,30558,30559,30560,30561,30562,30563,30564,30565,30566,30567,30568,30569,30570,30571,30572,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30585,30586,30587,30588,30589,30590,30591,30592,30593,30594,30595,30596,30597,30598,30599,30600,30601,30602,30603,30604,30605,30606,30607,30608,30609,30610,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30623,30624,30625,30626,30627,30628,30629,30630,30631,30632,30633,30634,30635,30636,30637,30638,30639,30640,30641,30642,30643,30644,30645,30646,30647,30648,30649,30650,30651,30652,30653,30654,30655,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30669,30670,30671,30672,30673,30674,30675,30676,30677,30678,30679,30680,30681,30682,30683,30684,30685,30686,30687,30688,30689,30690,30691,30692,30693,30694,30695,30696,30697,30698,30699,30700,30701,30702,30703,30704,30705,30706,30707,30708,30709,30710,30711,30712,30713,30714,30715,30716,30717,30718,30719,30720,30721,30722,30723,30724,30725,30726,30727,30728,30729,30730,30731,30732,30733,30734,30735,30736,30737,30738,30739,30740,30741,30742,30743,30744,30745,30746,30747,30748,30749,30750,30751,30752,30753,30754,30755,30756,30757,30758,30759,30760,30761,30762,30763,30764,30765,30766,30767,30768,30769,30770,30771,30772,30773,30774,30775,30776,30777,30778,30779,30780,30781,30782,30783,30784,30785,30786,30787,30788,30789,30790,30791,30792,30793,30794,30795,30796,30797,30798,30799,30800,30801,30802,30803,30804,30805,30806,30807,30808,30809,30810,30811,30812,30813,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30826,30827,30828,30829,30830,30831,30832,30833,30834,30835,30836,30837,30838,30839,30840,30841,30842,30843,30844,30845,30846,30847,30848,30849,30850,30851,30852,30853,30854,30855,30856,30857,30858,30859,30860,30861,30862,30863,30864,30865,30866,30867,30868,30869,30870,30871,30872,30873,30874,30875,30876,30877,30878,30879,30880,30881,30882,30883,30884,30885,30886,30887,30888,30889,30890,30891,30892,30893,30894,30895,30896,30897,30898,30899,30900,30901,30902,30903,30904,30905,30906,30907,30908,30909,30910,30911,30912,30913,30914,30915,30916,30917,30918,30919,30920,30921,30922,30923,30924,30925,30926,30927,30928,30929,30930,30931,30932,30933,30934,30935,30936,30937,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30952,30953,30954,30955,30956,30957,30958,30959,30960,30961,30962,30963,30964,30965,30966,30967,30968,30969,30970,30971,30972,30973,30974,30975,30976,30977,30978,30979,30980,30981,30982,30983,30984,30985,30986,30987,30988,30989,30990,30991,30992,30993,30994,30995,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31006,31007,31008,31009,31010,31011,31012,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31028,31029,31030,31031,31032,31033,31034,31035,31036,31037,31038,31039,31040,31041,31042,31043,31044,31045,31046,31047,31048,31049,31050,31051,31052,31053,31054,31055,31056,31057,31058,31059,31060,31061,31062,31063,31064,31065,31066,31067,31068,31069,31070,31071,31072,31073,31074,31075,31076,31077,31078,31079,31080,31081,31082,31083,31084,31085,31086,31087,31088,31089,31090,31091,31092,31093,31094,31095,31096,31097,31098,31099,31100,31101,31102,31103,31104,31105,31106,31107,31108,31109,31110,31111,31112,31113,31114,31115,31116,31117,31118,31119,31120,31121,31122,31123,31124,31125,31126,31127,31128,31129,31130,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31143,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31155,31156,31157,31158,31159,31160,31161,31162,31163,31164,31165,31166,31167,31168,31169,31170,31171,31172,31173,31174,31175,31176,31177,31178,31179,31180,31181,31182,31183,31184,31185,31186,31187,31188,31189,31190,31191,31192,31193,31194,31195,31196,31197,31198,31199,31200,31201,31202,31203,31204,31205,31206,31207,31208,31209,31210,31211,31212,31213,31214,31215,31216,31217,31218,31219,31220,31221,31222,31223,31224,31225,31226,31227,31228,31229,31230,31231,31232,31233,31234,31235,31236,31237,31238,31239,31240,31241,31242,31243,31244,31245,31246,31247,31248,31249,31250,31251,31252,31253,31254,31255,31256,31257,31258,31259,31260,31261,31262,31263,31264,31265,31266,31267,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31283,31284,31285,31286,31287,31288,31289,31290,31291,31292,31293,31294,31295,31296,31297,31298,31299,31300,31301,31302,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31313,31314,31315,31316,31317,31318,31319,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31344,31345,31346,31347,31348,31349,31350,31351,31352,31353,31354,31355,31356,31357,31358,31359,31360,31361,31362,31363,31364,31365,31366,31367,31368,31369,31370,31371,31372,31373,31374,31375,31376,31377,31378,31379,31380,31381,31382,31383,31384,31385,31386,31387,31388,31389,31390,31391,31392,31393,31394,31395,31396,31397,31398,31399,31400,31401,31402,31403,31404,31405,31406,31407,31408,31409,31410,31411,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31423,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31435,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31446,31447,31448,31449,31450,31451,31452,31453,31454,31455,31456,31457,31458,31459,31460,31461,31462,31463,31464,31465,31466,31467,31468,31469,31470,31471,31472,31473,31474,31475,31476,31477,31478,31479,31480,31481,31482,31483,31484,31485,31486,31487,31488,31489,31490,31491,31492,31493,31494,31495,31496,31497,31498,31499,31500,31501,31502,31503,31504,31505,31506,31507,31508,31509,31510,31511,31512,31513,31514,31515,31516,31517,31518,31519,31520,31521,31522,31523,31524,31525,31526,31527,31528,31529,31530,31531,31532,31533,31534,31535,31536,31537,31538,31539,31540,31541,31542,31543,31544,31545,31546,31547,31548,31549,31550,31551,31552,31553,31554,31555,31556,31557,31558,31559,31560,31561,31562,31563,31564,31565,31566,31567,31568,31569,31570,31571,31572,31573,31574,31575,31576,31577,31578,31579,31580,31581,31582,31583,31584,31585,31586,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31598,31599,31600,31601,31602,31603,31604,31605,31606,31607,31608,31609,31610,31611,31612,31613,31614,31615,31616,31617,31618,31619,31620,31621,31622,31623,31624,31625,31626,31627,31628,31629,31630,31631,31632,31633,31634,31635,31636,31637,31638,31639,31640,31641,31642,31643,31644,31645,31646,31647,31648,31649,31650,31651,31652,31653,31654,31655,31656,31657,31658,31659,31660,31661,31662,31663,31664,31665,31666,31667,31668,31669,31670,31671,31672,31673,31674,31675,31676,31677,31678,31679,31680,31681,31682,31683,31684,31685,31686,31687,31688,31689,31690,31691,31692,31693,31694,31695,31696,31697,31698,31699,31700,31701,31702,31703,31704,31705,31706,31707,31708,31709,31710,31711,31712,31713,31714,31715,31716,31717,31718,31719,31720,31721,31722,31723,31724,31725,31726,31727,31728,31729,31730,31731,31732,31733,31734,31735,31736,31737,31738,31739,31740,31741,31742,31743,31744,31745,31746,31747,31748,31749,31750,31751,31752,31753,31754,31755,31756,31757,31758,31759,31760,31761,31762,31763,31764,31765,31766,31767,31768,31769,31770,31771,31772,31773,31774,31775,31776,31777,31778,31779,31780,31781,31782,31783,31784,31785,31786,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31800,31801,31802,31803,31804,31805,31806,31807,31808,31809,31810,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31821,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31859,31860,31861,31862,31863,31864,31865,31866,31867,31868,31869,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31881,31882,31883,31884,31885,31886,31887,31888,31889,31890,31891,31892,31893,31894,31895,31896,31897,31898,31899,31900,31901,31902,31903,31904,31905,31906,31907,31908,31909,31910,31911,31912,31913,31914,31915,31916,31917,31918,31919,31920,31921,31922,31923,31924,31925,31926,31927,31928,31929,31930,31931,31932,31933,31934,31935,31936,31937,31938,31939,31940,31941,31942,31943,31944,31945,31946,31947,31948,31949,31950,31951,31952,31953,31954,31955,31956,31957,31958,31959,31960,31961,31962,31963,31964,31965,31966,31967,31968,31969,31970,31971,31972,31973,31974,31975,31976,31977,31978,31979,31980,31981,31982,31983,31984,31985,31986,31987,31988,31989,31990,31991,31992,31993,31994,31995,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32010,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32032,32033,32034,32035,32036,32037,32038,32039,32040,32041,32042,32043,32044,32045,32046,32047,32048,32049,32050,32051,32052,32053,32054,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32110,32111,32112,32113,32114,32115,32116,32117,32118,32119,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32166,32167,32168,32169,32170,32171,32172,32173,32174,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32315,32316,32317,32318,32319,32320,32321,32322,32323,32324,32325,32326,32327,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32386,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32411,32412,32413,32414,32415,32416,32417,32418,32419,32420,32421,32422,32423,32424,32425,32426,32427,32428,32429,32430,32431,32432,32433,32434,32435,32436,32437,32438,32439,32440,32441,32442,32443,32444,32445,32446,32447,32448,32449,32450,32451,32452,32453,32454,32455,32456,32457,32458,32459,32460,32461,32462,32463,32464,32465,32466,32467,32468,32469,32470,32471,32472,32473,32474,32475,32476,32477,32478,32479,32480,32481,32482,32483,32484,32485,32486,32487,32488,32489,32490,32491,32492,32493,32494,32495,32496,32497,32498,32499,32500,32501,32502,32503,32504,32505,32506,32507,32508,32509,32510,32511,32512,32513,32514,32515,32516,32517,32518,32519,32520,32521,32522,32523,32524,32525,32526,32527,32528,32529,32530,32531,32532,32533,32534,32535,32536,32537,32538,32539,32540,32541,32542,32543,32544,32545,32546,32547,32548,32549,32550,32551,32552,32553,32554,32555,32556,32557,32558,32559,32560,32561,32562,32563,32564,32565,32566,32567,32568,32569,32570,32571,32572,32573,32574,32575,32576,32577,32578,32579,32580,32581,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32592,32593,32594,32595,32596,32597,32598,32599,32600,32601,32602,32603,32604,32605,32606,32607,32608,32609,32610,32611,32612,32613,32614,32615,32616,32617,32618,32619,32620,32621,32622,32623,32624,32625,32626,32627,32628,32629,32630,32631,32632,32633,32634,32635,32636,32637,32638,32639,32640,32641,32642,32643,32644,32645,32646,32647,32648,32649,32650,32651,32652,32653,32654,32655,32656,32657,32658,32659,32660,32661,32662,32663,32664,32665,32666,32667,32668,32669,32670,32671,32672,32673,32674,32675,32676,32677,32678,32679,32680,32681,32682,32683,32684,32685,32686,32687,32688,32689,32690,32691,32692,32693,32694,32695,32696,32697,32698,32699,32700,32701,32702,32703,32704,32705,32706,32707,32708,32709,32710,32711,32712,32713,32714,32715,32716,32717,32718,32719,32720,32721,32722,32723,32724,32725,32726,32727,32728,32729,32730,32731,32732,32733,32734,32735,32736,32737,32738,32739,32740,32741,32742,32743,32744,32745,32746,32747,32748,32749,32750,32751,32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767,32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783,32784,32785,32786,32787,32788,32789,32790,32791,32792,32793,32794,32795,32796,32797,32798,32799,32800,32801,32802,32803,32804,32805,32806,32807,32808,32809,32810,32811,32812,32813,32814,32815,32816,32817,32818,32819,32820,32821,32822,32823,32824,32825,32826,32827,32828,32829,32830,32831,32832,32833,32834,32835,32836,32837,32838,32839,32840,32841,32842,32843,32844,32845,32846,32847,32848,32849,32850,32851,32852,32853,32854,32855,32856,32857,32858,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32873,32874,32875,32876,32877,32878,32879,32880,32881,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,32894,32895,32896,32897,32898,32899,32900,32901,32902,32903,32904,32905,32906,32907,32908,32909,32910,32911,32912,32913,32914,32915,32916,32917,32918,32919,32920,32921,32922,32923,32924,32925,32926,32927,32928,32929,32930,32931,32932,32933,32934,32935,32936,32937,32938,32939,32940,32941,32942,32943,32944,32945,32946,32947,32948,32949,32950,32951,32952,32953,32954,32955,32956,32957,32958,32959,32960,32961,32962,32963,32964,32965,32966,32967,32968,32969,32970,32971,32972,32973,32974,32975,32976,32977,32978,32979,32980,32981,32982,32983,32984,32985,32986,32987,32988,32989,32990,32991,32992,32993,32994,32995,32996,32997,32998,32999,33000,33001,33002,33003,33004,33005,33006,33007,33008,33009,33010,33011,33012,33013,33014,33015,33016,33017,33018,33019,33020,33021,33022,33023,33024,33025,33026,33027,33028,33029,33030,33031,33032,33033,33034,33035,33036,33037,33038,33039,33040,33041,33042,33043,33044,33045,33046,33047,33048,33049,33050,33051,33052,33053,33054,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33068,33069,33070,33071,33072,33073,33074,33075,33076,33077,33078,33079,33080,33081,33082,33083,33084,33085,33086,33087,33088,33089,33090,33091,33092,33093,33094,33095,33096,33097,33098,33099,33100,33101,33102,33103,33104,33105,33106,33107,33108,33109,33110,33111,33112,33113,33114,33115,33116,33117,33118,33119,33120,33121,33122,33123,33124,33125,33126,33127,33128,33129,33130,33131,33132,33133,33134,33135,33136,33137,33138,33139,33140,33141,33142,33143,33144,33145,33146,33147,33148,33149,33150,33151,33152,33153,33154,33155,33156,33157,33158,33159,33160,33161,33162,33163,33164,33165,33166,33167,33168,33169,33170,33171,33172,33173,33174,33175,33176,33177,33178,33179,33180,33181,33182,33183,33184,33185,33186,33187,33188,33189,33190,33191,33192,33193,33194,33195,33196,33197,33198,33199,33200,33201,33202,33203,33204,33205,33206,33207,33208,33209,33210,33211,33212,33213,33214,33215,33216,33217,33218,33219,33220,33221,33222,33223,33224,33225,33226,33227,33228,33229,33230,33231,33232,33233,33234,33235,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33251,33252,33253,33254,33255,33256,33257,33258,33259,33260,33261,33262,33263,33264,33265,33266,33267,33268,33269,33270,33271,33272,33273,33274,33275,33276,33277,33278,33279,33280,33281,33282,33283,33284,33285,33286,33287,33288,33289,33290,33291,33292,33293,33294,33295,33296,33297,33298,33299,33300,33301,33302,33303,33304,33305,33306,33307,33308,33309,33310,33311,33312,33313,33314,33315,33316,33317,33318,33319,33320,33321,33322,33323,33324,33325,33326,33327,33328,33329,33330,33331,33332,33333,33334,33335,33336,33337,33338,33339,33340,33341,33342,33343,33344,33345,33346,33347,33348,33349,33350,33351,33352,33353,33354,33355,33356,33357,33358,33359,33360,33361,33362,33363,33364,33365,33366,33367,33368,33369,33370,33371,33372,33373,33374,33375,33376,33377,33378,33379,33380,33381,33382,33383,33384,33385,33386,33387,33388,33389,33390,33391,33392,33393,33394,33395,33396,33397,33398,33399,33400,33401,33402,33403,33404,33405,33406,33407,33408,33409,33410,33411,33412,33413,33414,33415,33416,33417,33418,33419,33420,33421,33422,33423,33424,33425,33426,33427,33428,33429,33430,33431,33432,33433,33434,33435,33436,33437,33438,33439,33440,33441,33442,33443,33444,33445,33446,33447,33448,33449,33450,33451,33452,33453,33454,33455,33456,33457,33458,33459,33460,33461,33462,33463,33464,33465,33466,33467,33468,33469,33470,33471,33472,33473,33474,33475,33476,33477,33478,33479,33480,33481,33482,33483,33484,33485,33486,33487,33488,33489,33490,33491,33492,33493,33494,33495,33496,33497,33498,33499,33500,33501,33502,33503,33504,33505,33506,33507,33508,33509,33510,33511,33512,33513,33514,33515,33516,33517,33518,33519,33520,33521,33522,33523,33524,33525,33526,33527,33528,33529,33530,33531,33532,33533,33534,33535,33536,33537,33538,33539,33540,33541,33542,33543,33544,33545,33546,33547,33548,33549,33550,33551,33552,33553,33554,33555,33556,33557,33558,33559,33560,33561,33562,33563,33564,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33575,33576,33577,33578,33579,33580,33581,33582,33583,33584,33585,33586,33587,33588,33589,33590,33591,33592,33593,33594,33595,33596,33597,33598,33599,33600,33601,33602,33603,33604,33605,33606,33607,33608,33609,33610,33611,33612,33613,33614,33615,33616,33617,33618,33619,33620,33621,33622,33623,33624,33625,33626,33627,33628,33629,33630,33631,33632,33633,33634,33635,33636,33637,33638,33639,33640,33641,33642,33643,33644,33645,33646,33647,33648,33649,33650,33651,33652,33653,33654,33655,33656,33657,33658,33659,33660,33661,33662,33663,33664,33665,33666,33667,33668,33669,33670,33671,33672,33673,33674,33675,33676,33677,33678,33679,33680,33681,33682,33683,33684,33685,33686,33687,33688,33689,33690,33691,33692,33693,33694,33695,33696,33697,33698,33699,33700,33701,33702,33703,33704,33705,33706,33707,33708,33709,33710,33711,33712,33713,33714,33715,33716,33717,33718,33719,33720,33721,33722,33723,33724,33725,33726,33727,33728,33729,33730,33731,33732,33733,33734,33735,33736,33737,33738,33739,33740,33741,33742,33743,33744,33745,33746,33747,33748,33749,33750,33751,33752,33753,33754,33755,33756,33757,33758,33759,33760,33761,33762,33763,33764,33765,33766,33767,33768,33769,33770,33771,33772,33773,33774,33775,33776,33777,33778,33779,33780,33781,33782,33783,33784,33785,33786,33787,33788,33789,33790,33791,33792,33793,33794,33795,33796,33797,33798,33799,33800,33801,33802,33803,33804,33805,33806,33807,33808,33809,33810,33811,33812,33813,33814,33815,33816,33817,33818,33819,33820,33821,33822,33823,33824,33825,33826,33827,33828,33829,33830,33831,33832,33833,33834,33835,33836,33837,33838,33839,33840,33841,33842,33843,33844,33845,33846,33847,33848,33849,33850,33851,33852,33853,33854,33855,33856,33857,33858,33859,33860,33861,33862,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33873,33874,33875,33876,33877,33878,33879,33880,33881,33882,33883,33884,33885,33886,33887,33888,33889,33890,33891,33892,33893,33894,33895,33896,33897,33898,33899,33900,33901,33902,33903,33904,33905,33906,33907,33908,33909,33910,33911,33912,33913,33914,33915,33916,33917,33918,33919,33920,33921,33922,33923,33924,33925,33926,33927,33928,33929,33930,33931,33932,33933,33934,33935,33936,33937,33938,33939,33940,33941,33942,33943,33944,33945,33946,33947,33948,33949,33950,33951,33952,33953,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33967,33968,33969,33970,33971,33972,33973,33974,33975,33976,33977,33978,33979,33980,33981,33982,33983,33984,33985,33986,33987,33988,33989,33990,33991,33992,33993,33994,33995,33996,33997,33998,33999,34000,34001,34002,34003,34004,34005,34006,34007,34008,34009,34010,34011,34012,34013,34014,34015,34016,34017,34018,34019,34020,34021,34022,34023,34024,34025,34026,34027,34028,34029,34030,34031,34032,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34044,34045,34046,34047,34048,34049,34050,34051,34052,34053,34054,34055,34056,34057,34058,34059,34060,34061,34062,34063,34064,34065,34066,34067,34068,34069,34070,34071,34072,34073,34074,34075,34076,34077,34078,34079,34080,34081,34082,34083,34084,34085,34086,34087,34088,34089,34090,34091,34092,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34103,34104,34105,34106,34107,34108,34109,34110,34111,34112,34113,34114,34115,34116,34117,34118,34119,34120,34121,34122,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34134,34135,34136,34137,34138,34139,34140,34141,34142,34143,34144,34145,34146,34147,34148,34149,34150,34151,34152,34153,34154,34155,34156,34157,34158,34159,34160,34161,34162,34163,34164,34165,34166,34167,34168,34169,34170,34171,34172,34173,34174,34175,34176,34177,34178,34179,34180,34181,34182,34183,34184,34185,34186,34187,34188,34189,34190,34191,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34203,34204,34205,34206,34207,34208,34209,34210,34211,34212,34213,34214,34215,34216,34217,34218,34219,34220,34221,34222,34223,34224,34225,34226,34227,34228,34229,34230,34231,34232,34233,34234,34235,34236,34237,34238,34239,34240,34241,34242,34243,34244,34245,34246,34247,34248,34249,34250,34251,34252,34253,34254,34255,34256,34257,34258,34259,34260,34261,34262,34263,34264,34265,34266,34267,34268,34269,34270,34271,34272,34273,34274,34275,34276,34277,34278,34279,34280,34281,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,34297,34298,34299,34300,34301,34302,34303,34304,34305,34306,34307,34308,34309,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34321,34322,34323,34324,34325,34326,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34343,34344,34345,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34360,34361,34362,34363,34364,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34381,34382,34383,34384,34385,34386,34387,34388,34389,34390,34391,34392,34393,34394,34395,34396,34397,34398,34399,34400,34401,34402,34403,34404,34405,34406,34407,34408,34409,34410,34411,34412,34413,34414,34415,34416,34417,34418,34419,34420,34421,34422,34423,34424,34425,34426,34427,34428,34429,34430,34431,34432,34433,34434,34435,34436,34437,34438,34439,34440,34441,34442,34443,34444,34445,34446,34447,34448,34449,34450,34451,34452,34453,34454,34455,34456,34457,34458,34459,34460,34461,34462,34463,34464,34465,34466,34467,34468,34469,34470,34471,34472,34473,34474,34475,34476,34477,34478,34479,34480,34481,34482,34483,34484,34485,34486,34487,34488,34489,34490,34491,34492,34493,34494,34495,34496,34497,34498,34499,34500,34501,34502,34503,34504,34505,34506,34507,34508,34509,34510,34511,34512,34513,34514,34515,34516,34517,34518,34519,34520,34521,34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34548,34549,34550,34551,34552,34553,34554,34555,34556,34557,34558,34559,34560,34561,34562,34563,34564,34565,34566,34567,34568,34569,34570,34571,34572,34573,34574,34575,34576,34577,34578,34579,34580,34581,34582,34583,34584,34585,34586,34587,34588,34589,34590,34591,34592,34593,34594,34595,34596,34597,34598,34599,34600,34601,34602,34603,34604,34605,34606,34607,34608,34609,34610,34611,34612,34613,34614,34615,34616,34617,34618,34619,34620,34621,34622,34623,34624,34625,34626,34627,34628,34629,34630,34631,34632,34633,34634,34635,34636,34637,34638,34639,34640,34641,34642,34643,34644,34645,34646,34647,34648,34649,34650,34651,34652,34653,34654,34655,34656,34657,34658,34659,34660,34661,34662,34663,34664,34665,34666,34667,34668,34669,34670,34671,34672,34673,34674,34675,34676,34677,34678,34679,34680,34681,34682,34683,34684,34685,34686,34687,34688,34689,34690,34691,34692,34693,34694,34695,34696,34697,34698,34699,34700,34701,34702,34703,34704,34705,34706,34707,34708,34709,34710,34711,34712,34713,34714,34715,34716,34717,34718,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730,34731,34732,34733,34734,34735,34736,34737,34738,34739,34740,34741,34742,34743,34744,34745,34746,34747,34748,34749,34750,34751,34752,34753,34754,34755,34756,34757,34758,34759,34760,34761,34762,34763,34764,34765,34766,34767,34768,34769,34770,34771,34772,34773,34774,34775,34776,34777,34778,34779,34780,34781,34782,34783,34784,34785,34786,34787,34788,34789,34790,34791,34792,34793,34794,34795,34796,34797,34798,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34809,34810,34811,34812,34813,34814,34815,34816,34817,34818,34819,34820,34821,34822,34823,34824,34825,34826,34827,34828,34829,34830,34831,34832,34833,34834,34835,34836,34837,34838,34839,34840,34841,34842,34843,34844,34845,34846,34847,34848,34849,34850,34851,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34866,34867,34868,34869,34870,34871,34872,34873,34874,34875,34876,34877,34878,34879,34880,34881,34882,34883,34884,34885,34886,34887,34888,34889,34890,34891,34892,34893,34894,34895,34896,34897,34898,34899,34900,34901,34902,34903,34904,34905,34906,34907,34908,34909,34910,34911,34912,34913,34914,34915,34916,34917,34918,34919,34920,34921,34922,34923,34924,34925,34926,34927,34928,34929,34930,34931,34932,34933,34934,34935,34936,34937,34938,34939,34940,34941,34942,34943,34944,34945,34946,34947,34948,34949,34950,34951,34952,34953,34954,34955,34956,34957,34958,34959,34960,34961,34962,34963,34964,34965,34966,34967,34968,34969,34970,34971,34972,34973,34974,34975,34976,34977,34978,34979,34980,34981,34982,34983,34984,34985,34986,34987,34988,34989,34990,34991,34992,34993,34994,34995,34996,34997,34998,34999,35000,35001,35002,35003,35004,35005,35006,35007,35008,35009,35010,35011,35012,35013,35014,35015,35016,35017,35018,35019,35020,35021,35022,35023,35024,35025,35026,35027,35028,35029,35030,35031,35032,35033,35034,35035,35036,35037,35038,35039,35040,35041,35042,35043,35044,35045,35046,35047,35048,35049,35050,35051,35052,35053,35054,35055,35056,35057,35058,35059,35060,35061,35062,35063,35064,35065,35066,35067,35068,35069,35070,35071,35072,35073,35074,35075,35076,35077,35078,35079,35080,35081,35082,35083,35084,35085,35086,35087,35088,35089,35090,35091,35092,35093,35094,35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106,35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119,35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132,35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170,35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35265,35266,35267,35268,35269,35270,35271,35272,35273,35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286,35287,35288,35289,35290,35291,35292,35293,35294,35295,35296,35297,35298,35299,35300,35301,35302,35303,35304,35305,35306,35307,35308,35309,35310,35311,35312,35313,35314,35315,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35328,35329,35330,35331,35332,35333,35334,35335,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35390,35391,35392,35393,35394,35395,35396,35397,35398,35399,35400,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35449,35450,35451,35452,35453,35454,35455,35456,35457,35458,35459,35460,35461,35462,35463,35464,35465,35466,35467,35468,35469,35470,35471,35472,35473,35474,35475,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35591,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35622,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35686,35687,35688,35689,35690,35691,35692,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35744,35745,35746,35747,35748,35749,35750,35751,35752,35753,35754,35755,35756,35757,35758,35759,35760,35761,35762,35763,35764,35765,35766,35767,35768,35769,35770,35771,35772,35773,35774,35775,35776,35777,35778,35779,35780,35781,35782,35783,35784,35785,35786,35787,35788,35789,35790,35791,35792,35793,35794,35795,35796,35797,35798,35799,35800,35801,35802,35803,35804,35805,35806,35807,35808,35809,35810,35811,35812,35813,35814,35815,35816,35817,35818,35819,35820,35821,35822,35823,35824,35825,35826,35827,35828,35829,35830,35831,35832,35833,35834,35835,35836,35837,35838,35839,35840,35841,35842,35843,35844,35845,35846,35847,35848,35849,35850,35851,35852,35853,35854,35855,35856,35857,35858,35859,35860,35861,35862,35863,35864,35865,35866,35867,35868,35869,35870,35871,35872,35873,35874,35875,35876,35877,35878,35879,35880,35881,35882,35883,35884,35885,35886,35887,35888,35889,35890,35891,35892,35893,35894,35895,35896,35897,35898,35899,35900,35901,35902,35903,35904,35905,35906,35907,35908,35909,35910,35911,35912,35913,35914,35915,35916,35917,35918,35919,35920,35921,35922,35923,35924,35925,35926,35927,35928,35929,35930,35931,35932,35933,35934,35935,35936,35937,35938,35939,35940,35941,35942,35943,35944,35945,35946,35947,35948,35949,35950,35951,35952,35953,35954,35955,35956,35957,35958,35959,35960,35961,35962,35963,35964,35965,35966,35967,35968,35969,35970,35971,35972,35973,35974,35975,35976,35977,35978,35979,35980,35981,35982,35983,35984,35985,35986,35987,35988,35989,35990,35991,35992,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36125,36126,36127,36128,36129,36130,36131,36132,36133,36134,36135,36136,36137,36138,36139,36140,36141,36142,36143,36144,36145,36146,36147,36148,36149,36150,36151,36152,36153,36154,36155,36156,36157,36158,36159,36160,36161,36162,36163,36164,36165,36166,36167,36168,36169,36170,36171,36172,36173,36174,36175,36176,36177,36178,36179,36180,36181,36182,36183,36184,36185,36186,36187,36188,36189,36190,36191,36192,36193,36194,36195,36196,36197,36198,36199,36200,36201,36202,36203,36204,36205,36206,36207,36208,36209,36210,36211,36212,36213,36214,36215,36216,36217,36218,36219,36220,36221,36222,36223,36224,36225,36226,36227,36228,36229,36230,36231,36232,36233,36234,36235,36236,36237,36238,36239,36240,36241,36242,36243,36244,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36255,36256,36257,36258,36259,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36273,36274,36275,36276,36277,36278,36279,36280,36281,36282,36283,36284,36285,36286,36287,36288,36289,36290,36291,36292,36293,36294,36295,36296,36297,36298,36299,36300,36301,36302,36303,36304,36305,36306,36307,36308,36309,36310,36311,36312,36313,36314,36315,36316,36317,36318,36319,36320,36321,36322,36323,36324,36325,36326,36327,36328,36329,36330,36331,36332,36333,36334,36335,36336,36337,36338,36339,36340,36341,36342,36343,36344,36345,36346,36347,36348,36349,36350,36351,36352,36353,36354,36355,36356,36357,36358,36359,36360,36361,36362,36363,36364,36365,36366,36367,36368,36369,36370,36371,36372,36373,36374,36375,36376,36377,36378,36379,36380,36381,36382,36383,36384,36385,36386,36387,36388,36389,36390,36391,36392,36393,36394,36395,36396,36397,36398,36399,36400,36401,36402,36403,36404,36405,36406,36407,36408,36409,36410,36411,36412,36413,36414,36415,36416,36417,36418,36419,36420,36421,36422,36423,36424,36425,36426,36427,36428,36429,36430,36431,36432,36433,36434,36435,36436,36437,36438,36439,36440,36441,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36454,36455,36456,36457,36458,36459,36460,36461,36462,36463,36464,36465,36466,36467,36468,36469,36470,36471,36472,36473,36474,36475,36476,36477,36478,36479,36480,36481,36482,36483,36484,36485,36486,36487,36488,36489,36490,36491,36492,36493,36494,36495,36496,36497,36498,36499,36500,36501,36502,36503,36504,36505,36506,36507,36508,36509,36510,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36523,36524,36525,36526,36527,36528,36529,36530,36531,36532,36533,36534,36535,36536,36537,36538,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36558,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36710,36711,36712,36713,36714,36715,36716,36717,36718,36719,36720,36721,36722,36723,36724,36725,36726,36727,36728,36729,36730,36731,36732,36733,36734,36735,36736,36737,36738,36739,36740,36741,36742,36743,36744,36745,36746,36747,36748,36749,36750,36751,36752,36753,36754,36755,36756,36757,36758,36759,36760,36761,36762,36763,36764,36765,36766,36767,36768,36769,36770,36771,36772,36773,36774,36775,36776,36777,36778,36779,36780,36781,36782,36783,36784,36785,36786,36787,36788,36789,36790,36791,36792,36793,36794,36795,36796,36797,36798,36799,36800,36801,36802,36803,36804,36805,36806,36807,36808,36809,36810,36811,36812,36813,36814,36815,36816,36817,36818,36819,36820,36821,36822,36823,36824,36825,36826,36827,36828,36829,36830,36831,36832,36833,36834,36835,36836,36837,36838,36839,36840,36841,36842,36843,36844,36845,36846,36847,36848,36849,36850,36851,36852,36853,36854,36855,36856,36857,36858,36859,36860,36861,36862,36863,36864,36865,36866,36867,36868,36869,36870,36871,36872,36873,36874,36875,36876,36877,36878,36879,36880,36881,36882,36883,36884,36885,36886,36887,36888,36889,36890,36891,36892,36893,36894,36895,36896,36897,36898,36899,36900,36901,36902,36903,36904,36905,36906,36907,36908,36909,36910,36911,36912,36913,36914,36915,36916,36917,36918,36919,36920,36921,36922,36923,36924,36925,36926,36927,36928,36929,36930,36931,36932,36933,36934,36935,36936,36937,36938,36939,36940,36941,36942,36943,36944,36945,36946,36947,36948,36949,36950,36951,36952,36953,36954,36955,36956,36957,36958,36959,36960,36961,36962,36963,36964,36965,36966,36967,36968,36969,36970,36971,36972,36973,36974,36975,36976,36977,36978,36979,36980,36981,36982,36983,36984,36985,36986,36987,36988,36989,36990,36991,36992,36993,36994,36995,36996,36997,36998,36999,37000,37001,37002,37003,37004,37005,37006,37007,37008,37009,37010,37011,37012,37013,37014,37015,37016,37017,37018,37019,37020,37021,37022,37023,37024,37025,37026,37027,37028,37029,37030,37031,37032,37033,37034,37035,37036,37037,37038,37039,37040,37041,37042,37043,37044,37045,37046,37047,37048,37049,37050,37051,37052,37053,37054,37055,37056,37057,37058,37059,37060,37061,37062,37063,37064,37065,37066,37067,37068,37069,37070,37071,37072,37073,37074,37075,37076,37077,37078,37079,37080,37081,37082,37083,37084,37085,37086,37087,37088,37089,37090,37091,37092,37093,37094,37095,37096,37097,37098,37099,37100,37101,37102,37103,37104,37105,37106,37107,37108,37109,37110,37111,37112,37113,37114,37115,37116,37117,37118,37119,37120,37121,37122,37123,37124,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37145,37146,37147,37148,37149,37150,37151,37152,37153,37154,37155,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37167,37168,37169,37170,37171,37172,37173,37174,37175,37176,37177,37178,37179,37180,37181,37182,37183,37184,37185,37186,37187,37188,37189,37190,37191,37192,37193,37194,37195,37196,37197,37198,37199,37200,37201,37202,37203,37204,37205,37206,37207,37208,37209,37210,37211,37212,37213,37214,37215,37216,37217,37218,37219,37220,37221,37222,37223,37224,37225,37226,37227,37228,37229,37230,37231,37232,37233,37234,37235,37236,37237,37238,37239,37240,37241,37242,37243,37244,37245,37246,37247,37248,37249,37250,37251,37252,37253,37254,37255,37256,37257,37258,37259,37260,37261,37262,37263,37264,37265,37266,37267,37268,37269,37270,37271,37272,37273,37274,37275,37276,37277,37278,37279,37280,37281,37282,37283,37284,37285,37286,37287,37288,37289,37290,37291,37292,37293,37294,37295,37296,37297,37298,37299,37300,37301,37302,37303,37304,37305,37306,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37319,37320,37321,37322,37323,37324,37325,37326,37327,37328,37329,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37340,37341,37342,37343,37344,37345,37346,37347,37348,37349,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37492,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37518,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,37544,37545,37546,37547,37548,37549,37550,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37576,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37694,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37738,37739,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37775,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37834,37835,37836,37837,37838,37839,37840,37841,37842,37843,37844,37845,37846,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37950,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37995,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38021,38022,38023,38024,38025,38026,38027,38028,38029,38030,38031,38032,38033,38034,38035,38036,38037,38038,38039,38040,38041,38042,38043,38044,38045,38046,38047,38048,38049,38050,38051,38052,38053,38054,38055,38056,38057,38058,38059,38060,38061,38062,38063,38064,38065,38066,38067,38068,38069,38070,38071,38072,38073,38074,38075,38076,38077,38078,38079,38080,38081,38082,38083,38084,38085,38086,38087,38088,38089,38090,38091,38092,38093,38094,38095,38096,38097,38098,38099,38100,38101,38102,38103,38104,38105,38106,38107,38108,38109,38110,38111,38112,38113,38114,38115,38116,38117,38118,38119,38120,38121,38122,38123,38124,38125,38126,38127,38128,38129,38130,38131,38132,38133,38134,38135,38136,38137,38138,38139,38140,38141,38142,38143,38144,38145,38146,38147,38148,38149,38150,38151,38152,38153,38154,38155,38156,38157,38158,38159,38160,38161,38162,38163,38164,38165,38166,38167,38168,38169,38170,38171,38172,38173,38174,38175,38176,38177,38178,38179,38180,38181,38182,38183,38184,38185,38186,38187,38188,38189,38190,38191,38192,38193,38194,38195,38196,38197,38198,38199,38200,38201,38202,38203,38204,38205,38206,38207,38208,38209,38210,38211,38212,38213,38214,38215,38216,38217,38218,38219,38220,38221,38222,38223,38224,38225,38226,38227,38228,38229,38230,38231,38232,38233,38234,38235,38236,38237,38238,38239,38240,38241,38242,38243,38244,38245,38246,38247,38248,38249,38250,38251,38252,38253,38254,38255,38256,38257,38258,38259,38260,38261,38262,38263,38264,38265,38266,38267,38268,38269,38270,38271,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38376,38377,38378,38379,38380,38381,38382,38383,38384,38385,38386,38387,38388,38389,38390,38391,38392,38393,38394,38395,38396,38397,38398,38399,38400,38401,38402,38403,38404,38405,38406,38407,38408,38409,38410,38411,38412,38413,38414,38415,38416,38417,38418,38419,38420,38421,38422,38423,38424,38425,38426,38427,38428,38429,38430,38431,38432,38433,38434,38435,38436,38437,38438,38439,38440,38441,38442,38443,38444,38445,38446,38447,38448,38449,38450,38451,38452,38453,38454,38455,38456,38457,38458,38459,38460,38461,38462,38463,38464,38465,38466,38467,38468,38469,38470,38471,38472,38473,38474,38475,38476,38477,38478,38479,38480,38481,38482,38483,38484,38485,38486,38487,38488,38489,38490,38491,38492,38493,38494,38495,38496,38497,38498,38499,38500,38501,38502,38503,38504,38505,38506,38507,38508,38509,38510,38511,38512,38513,38514,38515,38516,38517,38518,38519,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38533,38534,38535,38536,38537,38538,38539,38540,38541,38542,38543,38544,38545,38546,38547,38548,38549,38550,38551,38552,38553,38554,38555,38556,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38567,38568,38569,38570,38571,38572,38573,38574,38575,38576,38577,38578,38579,38580,38581,38582,38583,38584,38585,38586,38587,38588,38589,38590,38591,38592,38593,38594,38595,38596,38597,38598,38599,38600,38601,38602,38603,38604,38605,38606,38607,38608,38609,38610,38611,38612,38613,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38624,38625,38626,38627,38628,38629,38630,38631,38632,38633,38634,38635,38636,38637,38638,38639,38640,38641,38642,38643,38644,38645,38646,38647,38648,38649,38650,38651,38652,38653,38654,38655,38656,38657,38658,38659,38660,38661,38662,38663,38664,38665,38666,38667,38668,38669,38670,38671,38672,38673,38674,38675,38676,38677,38678,38679,38680,38681,38682,38683,38684,38685,38686,38687,38688,38689,38690,38691,38692,38693,38694,38695,38696,38697,38698,38699,38700,38701,38702,38703,38704,38705,38706,38707,38708,38709,38710,38711,38712,38713,38714,38715,38716,38717,38718,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38738,38739,38740,38741,38742,38743,38744,38745,38746,38747,38748,38749,38750,38751,38752,38753,38754,38755,38756,38757,38758,38759,38760,38761,38762,38763,38764,38765,38766,38767,38768,38769,38770,38771,38772,38773,38774,38775,38776,38777,38778,38779,38780,38781,38782,38783,38784,38785,38786,38787,38788,38789,38790,38791,38792,38793,38794,38795,38796,38797,38798,38799,38800,38801,38802,38803,38804,38805,38806,38807,38808,38809,38810,38811,38812,38813,38814,38815,38816,38817,38818,38819,38820,38821,38822,38823,38824,38825,38826,38827,38828,38829,38830,38831,38832,38833,38834,38835,38836,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38886,38887,38888,38889,38890,38891,38892,38893,38894,38895,38896,38897,38898,38899,38900,38901,38902,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,39023,39024,39025,39026,39027,39028,39029,39030,39031,39032,39033,39034,39035,39036,39037,39038,39039,39040,39041,39042,39043,39044,39045,39046,39047,39048,39049,39050,39051,39052,39053,39054,39055,39056,39057,39058,39059,39060,39061,39062,39063,39064,39065,39066,39067,39068,39069,39070,39071,39072,39073,39074,39075,39076,39077,39078,39079,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39118,39119,39120,39121,39122,39123,39124,39125,39126,39127,39128,39129,39130,39131,39132,39133,39134,39135,39136,39137,39138,39139,39140,39141,39142,39143,39144,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,39176,39177,39178,39179,39180,39181,39182,39183,39184,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39214,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39252,39253,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39267,39268,39269,39270,39271,39272,39273,39274,39275,39276,39277,39278,39279,39280,39281,39282,39283,39284,39285,39286,39287,39288,39289,39290,39291,39292,39293,39294,39295,39296,39297,39298,39299,39300,39301,39302,39303,39304,39305,39306,39307,39308,39309,39310,39311,39312,39313,39314,39315,39316,39317,39318,39319,39320,39321,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39333,39334,39335,39336,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39532,39533,39534,39535,39536,39537,39538,39539,39540,39541,39542,39543,39544,39545,39546,39547,39548,39549,39550,39551,39552,39553,39554,39555,39556,39557,39558,39559,39560,39561,39562,39563,39564,39565,39566,39567,39568,39569,39570,39571,39572,39573,39574,39575,39576,39577,39578,39579,39580,39581,39582,39583,39584,39585,39586,39587,39588,39589,39590,39591,39592,39593,39594,39595,39596,39597,39598,39599,39600,39601,39602,39603,39604,39605,39606,39607,39608,39609,39610,39611,39612,39613,39614,39615,39616,39617,39618,39619,39620,39621,39622,39623,39624,39625,39626,39627,39628,39629,39630,39631,39632,39633,39634,39635,39636,39637,39638,39639,39640,39641,39642,39643,39644,39645,39646,39647,39648,39649,39650,39651,39652,39653,39654,39655,39656,39657,39658,39659,39660,39661,39662,39663,39664,39665,39666,39667,39668,39669,39670,39671,39672,39673,39674,39675,39676,39677,39678,39679,39680,39681,39682,39683,39684,39685,39686,39687,39688,39689,39690,39691,39692,39693,39694,39695,39696,39697,39698,39699,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39711,39712,39713,39714,39715,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39727,39728,39729,39730,39731,39732,39733,39734,39735,39736,39737,39738,39739,39740,39741,39742,39743,39744,39745,39746,39747,39748,39749,39750,39751,39752,39753,39754,39755,39756,39757,39758,39759,39760,39761,39762,39763,39764,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40060,40061,40062,40063,40064,40065,40066,40067,40068,40069,40070,40071,40072,40073,40074,40075,40076,40077,40078,40079,40080,40081,40082,40083,40084,40085,40086,40087,40088,40089,40090,40091,40092,40093,40094,40095,40096,40097,40098,40099,40100,40101,40102,40103,40104,40105,40106,40107,40108,40109,40110,40111,40112,40113,40114,40115,40116,40117,40118,40119,40120,40121,40122,40123,40124,40125,40126,40127,40128,40129,40130,40131,40132,40133,40134,40135,40136,40137,40138,40139,40140,40141,40142,40143,40144,40145,40146,40147,40148,40149,40150,40151,40152,40153,40154,40155,40156,40157,40158,40159,40160,40161,40162,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40479,40480,40481,40482,40483,40484,40485,40486,40487,40488,40489,40490,40491,40492,40493,40494,40495,40496,40497,40498,40499,40500,40501,40502,40503,40504,40505,40506,40507,40508,40509,40510,40511,40512,40513,40514,40515,40516,40517,40518,40519,40520,40521,40522,40523,40524,40525,40526,40527,40528,40529,40530,40531,40532,40533,40534,40535,40536,40537,40538,40539,40540,40541,40542,40543,40544,40545,40546,40547,40548,40549,40550,40551,40552,40553,40554,40555,40556,40557,40558,40559,40560,40561,40562,40563,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40574,40575,40576,40577,40578,40579,40580,40581,40582,40583,40584,40585,40586,40587,40588,40589,40590,40591,40592,40593,40594,40595,40596,40597,40598,40599,40600,40601,40602,40603,40604,40605,40606,40607,40608,40609,40610,40611,40612,40613,40614,40615,40616,40617,40618,40619,40620,40621,40622,40623,40624,40625,40626,40627,40628,40629,40630,40631,40632,40633,40634,40635,40636,40637,40638,40639,40640,40641,40642,40643,40644,40645,40646,40647,40648,40649,40650,40651,40652,40653,40654,40655,40656,40657,40658,40659,40660,40661,40662,40663,40664,40665,40666,40667,40668,40669,40670,40671,40672,40673,40674,40675,40676,40677,40678,40679,40680,40681,40682,40683,40684,40685,40686,40687,40688,40689,40690,40691,40692,40693,40694,40695,40696,40697,40698,40699,40700,40701,40702,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40715,40716,40717,40718,40719,40720,40721,40722,40723,40724,40725,40726,40727,40728,40729,40730,40731,40732,40733,40734,40735,40736,40737,40738,40739,40740,40741,40742,40743,40744,40745,40746,40747,40748,40749,40750,40751,40752,40753,40754,40755,40756,40757,40758,40759,40760,40761,40762,40763,40764,40765,40766,40767,40768,40769,40770,40771,40772,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40784,40785,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40831,40832,40833,40834,40835,40836,40837,40838,40839,40840,40841,40842,40843,40844,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40857,40858,40859,40860,40861,40862,40863,40864,40865,40866,40867,40868,40869,40870,40871,40872,40873,40874,40875,40876,40877,40878,40879,40880,40881,40882,40883,40884,40885,40886,40887,40888,40889,40890,40891,40892,40893,40894,40895,40896,40897,40898,40899,40900,40901,40902,40903,40904,40905,40906,40907,40908,40909,40910,40911,40912,40913,40914,40915,40916,40917,40918,40919,40920,40921,40922,40923,40924,40925,40926,40927,40928,40929,40930,40931,40932,40933,40934,40935,40936,40937,40938,40939,40940,40941,40942,40943,40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975,40976,40977,40978,40979,40980,40981,40982,40983,40984,40985,40986,40987,40988,40989,40990,40991,40992,40993,40994,40995,40996,40997,40998,40999,41000,41001,41002,41003,41004,41005,41006,41007,41008,41009,41010,41011,41012,41013,41014,41015,41016,41017,41018,41019,41020,41021,41022,41023,41024,41025,41026,41027,41028,41029,41030,41031,41032,41033,41034,41035,41036,41037,41038,41039,41040,41041,41042,41043,41044,41045,41046,41047,41048,41049,41050,41051,41052,41053,41054,41055,41056,41057,41058,41059,41060,41061,41062,41063,41064,41065,41066,41067,41068,41069,41070,41071,41072,41073,41074,41075,41076,41077,41078,41079,41080,41081,41082,41083,41084,41085,41086,41087,41088,41089,41090,41091,41092,41093,41094,41095,41096,41097,41098,41099,41100,41101,41102,41103,41104,41105,41106,41107,41108,41109,41110,41111,41112,41113,41114,41115,41116,41117,41118,41119,41120,41121,41122,41123,41124,41125,41126,41127,41128,41129,41130,41131,41132,41133,41134,41135,41136,41137,41138,41139,41140,41141,41142,41143,41144,41145,41146,41147,41148,41149,41150,41151,41152,41153,41154,41155,41156,41157,41158,41159,41160,41161,41162,41163,41164,41165,41166,41167,41168,41169,41170,41171,41172,41173,41174,41175,41176,41177,41178,41179,41180,41181,41182,41183,41184,41185,41186,41187,41188,41189,41190,41191,41192,41193,41194,41195,41196,41197,41198,41199,41200,41201,41202,41203,41204,41205,41206,41207,41208,41209,41210,41211,41212,41213,41214,41215,41216,41217,41218,41219,41220,41221,41222,41223,41224,41225,41226,41227,41228,41229,41230,41231,41232,41233,41234,41235,41236,41237,41238,41239,41240,41241,41242,41243,41244,41245,41246,41247,41248,41249,41250,41251,41252,41253,41254,41255,41256,41257,41258,41259,41260,41261,41262,41263,41264,41265,41266,41267,41268,41269,41270,41271,41272,41273,41274,41275,41276,41277,41278,41279,41280,41281,41282,41283,41284,41285,41286,41287,41288,41289,41290,41291,41292,41293,41294,41295,41296,41297,41298,41299,41300,41301,41302,41303,41304,41305,41306,41307,41308,41309,41310,41311,41312,41313,41314,41315,41316,41317,41318,41319,41320,41321,41322,41323,41324,41325,41326,41327,41328,41329,41330,41331,41332,41333,41334,41335,41336,41337,41338,41339,41340,41341,41342,41343,41344,41345,41346,41347,41348,41349,41350,41351,41352,41353,41354,41355,41356,41357,41358,41359,41360,41361,41362,41363,41364,41365,41366,41367,41368,41369,41370,41371,41372,41373,41374,41375,41376,41377,41378,41379,41380,41381,41382,41383,41384,41385,41386,41387,41388,41389,41390,41391,41392,41393,41394,41395,41396,41397,41398,41399,41400,41401,41402,41403,41404,41405,41406,41407,41408,41409,41410,41411,41412,41413,41414,41415,41416,41417,41418,41419,41420,41421,41422,41423,41424,41425,41426,41427,41428,41429,41430,41431,41432,41433,41434,41435,41436,41437,41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41448,41449,41450,41451,41452,41453,41454,41455,41456,41457,41458,41459,41460,41461,41462,41463,41464,41465,41466,41467,41468,41469,41470,41471,41472,41473,41474,41475,41476,41477,41478,41479,41480,41481,41482,41483,41484,41485,41486,41487,41488,41489,41490,41491,41492,41493,41494,41495,41496,41497,41498,41499,41500,41501,41502,41503,41504,41505,41506,41507,41508,41509,41510,41511,41512,41513,41514,41515,41516,41517,41518,41519,41520,41521,41522,41523,41524,41525,41526,41527,41528,41529,41530,41531,41532,41533,41534,41535,41536,41537,41538,41539,41540,41541,41542,41543,41544,41545,41546,41547,41548,41549,41550,41551,41552,41553,41554,41555,41556,41557,41558,41559,41560,41561,41562,41563,41564,41565,41566,41567,41568,41569,41570,41571,41572,41573,41574,41575,41576,41577,41578,41579,41580,41581,41582,41583,41584,41585,41586,41587,41588,41589,41590,41591,41592,41593,41594,41595,41596,41597,41598,41599,41600,41601,41602,41603,41604,41605,41606,41607,41608,41609,41610,41611,41612,41613,41614,41615,41616,41617,41618,41619,41620,41621,41622,41623,41624,41625,41626,41627,41628,41629,41630,41631,41632,41633,41634,41635,41636,41637,41638,41639,41640,41641,41642,41643,41644,41645,41646,41647,41648,41649,41650,41651,41652,41653,41654,41655,41656,41657,41658,41659,41660,41661,41662,41663,41664,41665,41666,41667,41668,41669,41670,41671,41672,41673,41674,41675,41676,41677,41678,41679,41680,41681,41682,41683,41684,41685,41686,41687,41688,41689,41690,41691,41692,41693,41694,41695,41696,41697,41698,41699,41700,41701,41702,41703,41704,41705,41706,41707,41708,41709,41710,41711,41712,41713,41714,41715,41716,41717,41718,41719,41720,41721,41722,41723,41724,41725,41726,41727,41728,41729,41730,41731,41732,41733,41734,41735,41736,41737,41738,41739,41740,41741,41742,41743,41744,41745,41746,41747,41748,41749,41750,41751,41752,41753,41754,41755,41756,41757,41758,41759,41760,41761,41762,41763,41764,41765,41766,41767,41768,41769,41770,41771,41772,41773,41774,41775,41776,41777,41778,41779,41780,41781,41782,41783,41784,41785,41786,41787,41788,41789,41790,41791,41792,41793,41794,41795,41796,41797,41798,41799,41800,41801,41802,41803,41804,41805,41806,41807,41808,41809,41810,41811,41812,41813,41814,41815,41816,41817,41818,41819,41820,41821,41822,41823,41824,41825,41826,41827,41828,41829,41830,41831,41832,41833,41834,41835,41836,41837,41838,41839,41840,41841,41842,41843,41844,41845,41846,41847,41848,41849,41850,41851,41852,41853,41854,41855,41856,41857,41858,41859,41860,41861,41862,41863,41864,41865,41866,41867,41868,41869,41870,41871,41872,41873,41874,41875,41876,41877,41878,41879,41880,41881,41882,41883,41884,41885,41886,41887,41888,41889,41890,41891,41892,41893,41894,41895,41896,41897,41898,41899,41900,41901,41902,41903,41904,41905,41906,41907,41908,41909,41910,41911,41912,41913,41914,41915,41916,41917,41918,41919,41920,41921,41922,41923,41924,41925,41926,41927,41928,41929,41930,41931,41932,41933,41934,41935,41936,41937,41938,41939,41940,41941,41942,41943,41944,41945,41946,41947,41948,41949,41950,41951,41952,41953,41954,41955,41956,41957,41958,41959,41960,41961,41962,41963,41964,41965,41966,41967,41968,41969,41970,41971,41972,41973,41974,41975,41976,41977,41978,41979,41980,41981,41982,41983,41984,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,41997,41998,41999,42000,42001,42002,42003,42004,42005,42006,42007,42008,42009,42010,42011,42012,42013,42014,42015,42016,42017,42018,42019,42020,42021,42022,42023,42024,42025,42026,42027,42028,42029,42030,42031,42032,42033,42034,42035,42036,42037,42038,42039,42040,42041,42042,42043,42044,42045,42046,42047,42048,42049,42050,42051,42052,42053,42054,42055,42056,42057,42058,42059,42060,42061,42062,42063,42064,42065,42066,42067,42068,42069,42070,42071,42072,42073,42074,42075,42076,42077,42078,42079,42080,42081,42082,42083,42084,42085,42086,42087,42088,42089,42090,42091,42092,42093,42094,42095,42096,42097,42098,42099,42100,42101,42102,42103,42104,42105,42106,42107,42108,42109,42110,42111,42112,42113,42114,42115,42116,42117,42118,42119,42120,42121,42122,42123,42124,42192,42193,42194,42195,42196,42197,42198,42199,42200,42201,42202,42203,42204,42205,42206,42207,42208,42209,42210,42211,42212,42213,42214,42215,42216,42217,42218,42219,42220,42221,42222,42223,42224,42225,42226,42227,42228,42229,42230,42231,42232,42233,42234,42235,42236,42237,42240,42241,42242,42243,42244,42245,42246,42247,42248,42249,42250,42251,42252,42253,42254,42255,42256,42257,42258,42259,42260,42261,42262,42263,42264,42265,42266,42267,42268,42269,42270,42271,42272,42273,42274,42275,42276,42277,42278,42279,42280,42281,42282,42283,42284,42285,42286,42287,42288,42289,42290,42291,42292,42293,42294,42295,42296,42297,42298,42299,42300,42301,42302,42303,42304,42305,42306,42307,42308,42309,42310,42311,42312,42313,42314,42315,42316,42317,42318,42319,42320,42321,42322,42323,42324,42325,42326,42327,42328,42329,42330,42331,42332,42333,42334,42335,42336,42337,42338,42339,42340,42341,42342,42343,42344,42345,42346,42347,42348,42349,42350,42351,42352,42353,42354,42355,42356,42357,42358,42359,42360,42361,42362,42363,42364,42365,42366,42367,42368,42369,42370,42371,42372,42373,42374,42375,42376,42377,42378,42379,42380,42381,42382,42383,42384,42385,42386,42387,42388,42389,42390,42391,42392,42393,42394,42395,42396,42397,42398,42399,42400,42401,42402,42403,42404,42405,42406,42407,42408,42409,42410,42411,42412,42413,42414,42415,42416,42417,42418,42419,42420,42421,42422,42423,42424,42425,42426,42427,42428,42429,42430,42431,42432,42433,42434,42435,42436,42437,42438,42439,42440,42441,42442,42443,42444,42445,42446,42447,42448,42449,42450,42451,42452,42453,42454,42455,42456,42457,42458,42459,42460,42461,42462,42463,42464,42465,42466,42467,42468,42469,42470,42471,42472,42473,42474,42475,42476,42477,42478,42479,42480,42481,42482,42483,42484,42485,42486,42487,42488,42489,42490,42491,42492,42493,42494,42495,42496,42497,42498,42499,42500,42501,42502,42503,42504,42505,42506,42507,42508,42512,42513,42514,42515,42516,42517,42518,42519,42520,42521,42522,42523,42524,42525,42526,42527,42538,42539,42560,42561,42562,42563,42564,42565,42566,42567,42568,42569,42570,42571,42572,42573,42574,42575,42576,42577,42578,42579,42580,42581,42582,42583,42584,42585,42586,42587,42588,42589,42590,42591,42592,42593,42594,42595,42596,42597,42598,42599,42600,42601,42602,42603,42604,42605,42606,42623,42624,42625,42626,42627,42628,42629,42630,42631,42632,42633,42634,42635,42636,42637,42638,42639,42640,42641,42642,42643,42644,42645,42646,42647,42648,42649,42650,42651,42652,42653,42656,42657,42658,42659,42660,42661,42662,42663,42664,42665,42666,42667,42668,42669,42670,42671,42672,42673,42674,42675,42676,42677,42678,42679,42680,42681,42682,42683,42684,42685,42686,42687,42688,42689,42690,42691,42692,42693,42694,42695,42696,42697,42698,42699,42700,42701,42702,42703,42704,42705,42706,42707,42708,42709,42710,42711,42712,42713,42714,42715,42716,42717,42718,42719,42720,42721,42722,42723,42724,42725,42726,42727,42728,42729,42730,42731,42732,42733,42734,42735,42775,42776,42777,42778,42779,42780,42781,42782,42783,42786,42787,42788,42789,42790,42791,42792,42793,42794,42795,42796,42797,42798,42799,42800,42801,42802,42803,42804,42805,42806,42807,42808,42809,42810,42811,42812,42813,42814,42815,42816,42817,42818,42819,42820,42821,42822,42823,42824,42825,42826,42827,42828,42829,42830,42831,42832,42833,42834,42835,42836,42837,42838,42839,42840,42841,42842,42843,42844,42845,42846,42847,42848,42849,42850,42851,42852,42853,42854,42855,42856,42857,42858,42859,42860,42861,42862,42863,42864,42865,42866,42867,42868,42869,42870,42871,42872,42873,42874,42875,42876,42877,42878,42879,42880,42881,42882,42883,42884,42885,42886,42887,42888,42891,42892,42893,42894,42895,42896,42897,42898,42899,42900,42901,42902,42903,42904,42905,42906,42907,42908,42909,42910,42911,42912,42913,42914,42915,42916,42917,42918,42919,42920,42921,42922,42923,42924,42925,42926,42927,42928,42929,42930,42931,42932,42933,42934,42935,42936,42937,42999,43000,43001,43002,43003,43004,43005,43006,43007,43008,43009,43011,43012,43013,43015,43016,43017,43018,43020,43021,43022,43023,43024,43025,43026,43027,43028,43029,43030,43031,43032,43033,43034,43035,43036,43037,43038,43039,43040,43041,43042,43072,43073,43074,43075,43076,43077,43078,43079,43080,43081,43082,43083,43084,43085,43086,43087,43088,43089,43090,43091,43092,43093,43094,43095,43096,43097,43098,43099,43100,43101,43102,43103,43104,43105,43106,43107,43108,43109,43110,43111,43112,43113,43114,43115,43116,43117,43118,43119,43120,43121,43122,43123,43138,43139,43140,43141,43142,43143,43144,43145,43146,43147,43148,43149,43150,43151,43152,43153,43154,43155,43156,43157,43158,43159,43160,43161,43162,43163,43164,43165,43166,43167,43168,43169,43170,43171,43172,43173,43174,43175,43176,43177,43178,43179,43180,43181,43182,43183,43184,43185,43186,43187,43250,43251,43252,43253,43254,43255,43259,43261,43262,43274,43275,43276,43277,43278,43279,43280,43281,43282,43283,43284,43285,43286,43287,43288,43289,43290,43291,43292,43293,43294,43295,43296,43297,43298,43299,43300,43301,43312,43313,43314,43315,43316,43317,43318,43319,43320,43321,43322,43323,43324,43325,43326,43327,43328,43329,43330,43331,43332,43333,43334,43360,43361,43362,43363,43364,43365,43366,43367,43368,43369,43370,43371,43372,43373,43374,43375,43376,43377,43378,43379,43380,43381,43382,43383,43384,43385,43386,43387,43388,43396,43397,43398,43399,43400,43401,43402,43403,43404,43405,43406,43407,43408,43409,43410,43411,43412,43413,43414,43415,43416,43417,43418,43419,43420,43421,43422,43423,43424,43425,43426,43427,43428,43429,43430,43431,43432,43433,43434,43435,43436,43437,43438,43439,43440,43441,43442,43471,43488,43489,43490,43491,43492,43494,43495,43496,43497,43498,43499,43500,43501,43502,43503,43514,43515,43516,43517,43518,43520,43521,43522,43523,43524,43525,43526,43527,43528,43529,43530,43531,43532,43533,43534,43535,43536,43537,43538,43539,43540,43541,43542,43543,43544,43545,43546,43547,43548,43549,43550,43551,43552,43553,43554,43555,43556,43557,43558,43559,43560,43584,43585,43586,43588,43589,43590,43591,43592,43593,43594,43595,43616,43617,43618,43619,43620,43621,43622,43623,43624,43625,43626,43627,43628,43629,43630,43631,43632,43633,43634,43635,43636,43637,43638,43642,43646,43647,43648,43649,43650,43651,43652,43653,43654,43655,43656,43657,43658,43659,43660,43661,43662,43663,43664,43665,43666,43667,43668,43669,43670,43671,43672,43673,43674,43675,43676,43677,43678,43679,43680,43681,43682,43683,43684,43685,43686,43687,43688,43689,43690,43691,43692,43693,43694,43695,43697,43701,43702,43705,43706,43707,43708,43709,43712,43714,43739,43740,43741,43744,43745,43746,43747,43748,43749,43750,43751,43752,43753,43754,43762,43763,43764,43777,43778,43779,43780,43781,43782,43785,43786,43787,43788,43789,43790,43793,43794,43795,43796,43797,43798,43808,43809,43810,43811,43812,43813,43814,43816,43817,43818,43819,43820,43821,43822,43824,43825,43826,43827,43828,43829,43830,43831,43832,43833,43834,43835,43836,43837,43838,43839,43840,43841,43842,43843,43844,43845,43846,43847,43848,43849,43850,43851,43852,43853,43854,43855,43856,43857,43858,43859,43860,43861,43862,43863,43864,43865,43866,43868,43869,43870,43871,43872,43873,43874,43875,43876,43877,43888,43889,43890,43891,43892,43893,43894,43895,43896,43897,43898,43899,43900,43901,43902,43903,43904,43905,43906,43907,43908,43909,43910,43911,43912,43913,43914,43915,43916,43917,43918,43919,43920,43921,43922,43923,43924,43925,43926,43927,43928,43929,43930,43931,43932,43933,43934,43935,43936,43937,43938,43939,43940,43941,43942,43943,43944,43945,43946,43947,43948,43949,43950,43951,43952,43953,43954,43955,43956,43957,43958,43959,43960,43961,43962,43963,43964,43965,43966,43967,43968,43969,43970,43971,43972,43973,43974,43975,43976,43977,43978,43979,43980,43981,43982,43983,43984,43985,43986,43987,43988,43989,43990,43991,43992,43993,43994,43995,43996,43997,43998,43999,44000,44001,44002,44032,44033,44034,44035,44036,44037,44038,44039,44040,44041,44042,44043,44044,44045,44046,44047,44048,44049,44050,44051,44052,44053,44054,44055,44056,44057,44058,44059,44060,44061,44062,44063,44064,44065,44066,44067,44068,44069,44070,44071,44072,44073,44074,44075,44076,44077,44078,44079,44080,44081,44082,44083,44084,44085,44086,44087,44088,44089,44090,44091,44092,44093,44094,44095,44096,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44107,44108,44109,44110,44111,44112,44113,44114,44115,44116,44117,44118,44119,44120,44121,44122,44123,44124,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44144,44145,44146,44147,44148,44149,44150,44151,44152,44153,44154,44155,44156,44157,44158,44159,44160,44161,44162,44163,44164,44165,44166,44167,44168,44169,44170,44171,44172,44173,44174,44175,44176,44177,44178,44179,44180,44181,44182,44183,44184,44185,44186,44187,44188,44189,44190,44191,44192,44193,44194,44195,44196,44197,44198,44199,44200,44201,44202,44203,44204,44205,44206,44207,44208,44209,44210,44211,44212,44213,44214,44215,44216,44217,44218,44219,44220,44221,44222,44223,44224,44225,44226,44227,44228,44229,44230,44231,44232,44233,44234,44235,44236,44237,44238,44239,44240,44241,44242,44243,44244,44245,44246,44247,44248,44249,44250,44251,44252,44253,44254,44255,44256,44257,44258,44259,44260,44261,44262,44263,44264,44265,44266,44267,44268,44269,44270,44271,44272,44273,44274,44275,44276,44277,44278,44279,44280,44281,44282,44283,44284,44285,44286,44287,44288,44289,44290,44291,44292,44293,44294,44295,44296,44297,44298,44299,44300,44301,44302,44303,44304,44305,44306,44307,44308,44309,44310,44311,44312,44313,44314,44315,44316,44317,44318,44319,44320,44321,44322,44323,44324,44325,44326,44327,44328,44329,44330,44331,44332,44333,44334,44335,44336,44337,44338,44339,44340,44341,44342,44343,44344,44345,44346,44347,44348,44349,44350,44351,44352,44353,44354,44355,44356,44357,44358,44359,44360,44361,44362,44363,44364,44365,44366,44367,44368,44369,44370,44371,44372,44373,44374,44375,44376,44377,44378,44379,44380,44381,44382,44383,44384,44385,44386,44387,44388,44389,44390,44391,44392,44393,44394,44395,44396,44397,44398,44399,44400,44401,44402,44403,44404,44405,44406,44407,44408,44409,44410,44411,44412,44413,44414,44415,44416,44417,44418,44419,44420,44421,44422,44423,44424,44425,44426,44427,44428,44429,44430,44431,44432,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44444,44445,44446,44447,44448,44449,44450,44451,44452,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44471,44472,44473,44474,44475,44476,44477,44478,44479,44480,44481,44482,44483,44484,44485,44486,44487,44488,44489,44490,44491,44492,44493,44494,44495,44496,44497,44498,44499,44500,44501,44502,44503,44504,44505,44506,44507,44508,44509,44510,44511,44512,44513,44514,44515,44516,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44536,44537,44538,44539,44540,44541,44542,44543,44544,44545,44546,44547,44548,44549,44550,44551,44552,44553,44554,44555,44556,44557,44558,44559,44560,44561,44562,44563,44564,44565,44566,44567,44568,44569,44570,44571,44572,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44592,44593,44594,44595,44596,44597,44598,44599,44600,44601,44602,44603,44604,44605,44606,44607,44608,44609,44610,44611,44612,44613,44614,44615,44616,44617,44618,44619,44620,44621,44622,44623,44624,44625,44626,44627,44628,44629,44630,44631,44632,44633,44634,44635,44636,44637,44638,44639,44640,44641,44642,44643,44644,44645,44646,44647,44648,44649,44650,44651,44652,44653,44654,44655,44656,44657,44658,44659,44660,44661,44662,44663,44664,44665,44666,44667,44668,44669,44670,44671,44672,44673,44674,44675,44676,44677,44678,44679,44680,44681,44682,44683,44684,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44732,44733,44734,44735,44736,44737,44738,44739,44740,44741,44742,44743,44744,44745,44746,44747,44748,44749,44750,44751,44752,44753,44754,44755,44756,44757,44758,44759,44760,44761,44762,44763,44764,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44776,44777,44778,44779,44780,44781,44782,44783,44784,44785,44786,44787,44788,44789,44790,44791,44792,44793,44794,44795,44796,44797,44798,44799,44800,44801,44802,44803,44804,44805,44806,44807,44808,44809,44810,44811,44812,44813,44814,44815,44816,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,44836,44837,44838,44839,44840,44841,44842,44843,44844,44845,44846,44847,44848,44849,44850,44851,44852,44853,44854,44855,44856,44857,44858,44859,44860,44861,44862,44863,44864,44865,44866,44867,44868,44869,44870,44871,44872,44873,44874,44875,44876,44877,44878,44879,44880,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44892,44893,44894,44895,44896,44897,44898,44899,44900,44901,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44921,44922,44923,44924,44925,44926,44927,44928,44929,44930,44931,44932,44933,44934,44935,44936,44937,44938,44939,44940,44941,44942,44943,44944,44945,44946,44947,44948,44949,44950,44951,44952,44953,44954,44955,44956,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44984,44985,44986,44987,44988,44989,44990,44991,44992,44993,44994,44995,44996,44997,44998,44999,45000,45001,45002,45003,45004,45005,45006,45007,45008,45009,45010,45011,45012,45013,45014,45015,45016,45017,45018,45019,45020,45021,45022,45023,45024,45025,45026,45027,45028,45029,45030,45031,45032,45033,45034,45035,45036,45037,45038,45039,45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055,45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071,45072,45073,45074,45075,45076,45077,45078,45079,45080,45081,45082,45083,45084,45085,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45096,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45124,45125,45126,45127,45128,45129,45130,45131,45132,45133,45134,45135,45136,45137,45138,45139,45140,45141,45142,45143,45144,45145,45146,45147,45148,45149,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45180,45181,45182,45183,45184,45185,45186,45187,45188,45189,45190,45191,45192,45193,45194,45195,45196,45197,45198,45199,45200,45201,45202,45203,45204,45205,45206,45207,45208,45209,45210,45211,45212,45213,45214,45215,45216,45217,45218,45219,45220,45221,45222,45223,45224,45225,45226,45227,45228,45229,45230,45231,45232,45233,45234,45235,45236,45237,45238,45239,45240,45241,45242,45243,45244,45245,45246,45247,45248,45249,45250,45251,45252,45253,45254,45255,45256,45257,45258,45259,45260,45261,45262,45263,45264,45265,45266,45267,45268,45269,45270,45271,45272,45273,45274,45275,45276,45277,45278,45279,45280,45281,45282,45283,45284,45285,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45320,45321,45322,45323,45324,45325,45326,45327,45328,45329,45330,45331,45332,45333,45334,45335,45336,45337,45338,45339,45340,45341,45342,45343,45344,45345,45346,45347,45348,45349,45350,45351,45352,45353,45354,45355,45356,45357,45358,45359,45360,45361,45362,45363,45364,45365,45366,45367,45368,45369,45370,45371,45372,45373,45374,45375,45376,45377,45378,45379,45380,45381,45382,45383,45384,45385,45386,45387,45388,45389,45390,45391,45392,45393,45394,45395,45396,45397,45398,45399,45400,45401,45402,45403,45404,45405,45406,45407,45408,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45432,45433,45434,45435,45436,45437,45438,45439,45440,45441,45442,45443,45444,45445,45446,45447,45448,45449,45450,45451,45452,45453,45454,45455,45456,45457,45458,45459,45460,45461,45462,45463,45464,45465,45466,45467,45468,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45480,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45516,45517,45518,45519,45520,45521,45522,45523,45524,45525,45526,45527,45528,45529,45530,45531,45532,45533,45534,45535,45536,45537,45538,45539,45540,45541,45542,45543,45544,45545,45546,45547,45548,45549,45550,45551,45552,45553,45554,45555,45556,45557,45558,45559,45560,45561,45562,45563,45564,45565,45566,45567,45568,45569,45570,45571,45572,45573,45574,45575,45576,45577,45578,45579,45580,45581,45582,45583,45584,45585,45586,45587,45588,45589,45590,45591,45592,45593,45594,45595,45596,45597,45598,45599,45600,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45620,45621,45622,45623,45624,45625,45626,45627,45628,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45656,45657,45658,45659,45660,45661,45662,45663,45664,45665,45666,45667,45668,45669,45670,45671,45672,45673,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45684,45685,45686,45687,45688,45689,45690,45691,45692,45693,45694,45695,45696,45697,45698,45699,45700,45701,45702,45703,45704,45705,45706,45707,45708,45709,45710,45711,45712,45713,45714,45715,45716,45717,45718,45719,45720,45721,45722,45723,45724,45725,45726,45727,45728,45729,45730,45731,45732,45733,45734,45735,45736,45737,45738,45739,45740,45741,45742,45743,45744,45745,45746,45747,45748,45749,45750,45751,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45768,45769,45770,45771,45772,45773,45774,45775,45776,45777,45778,45779,45780,45781,45782,45783,45784,45785,45786,45787,45788,45789,45790,45791,45792,45793,45794,45795,45796,45797,45798,45799,45800,45801,45802,45803,45804,45805,45806,45807,45808,45809,45810,45811,45812,45813,45814,45815,45816,45817,45818,45819,45820,45821,45822,45823,45824,45825,45826,45827,45828,45829,45830,45831,45832,45833,45834,45835,45836,45837,45838,45839,45840,45841,45842,45843,45844,45845,45846,45847,45848,45849,45850,45851,45852,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45908,45909,45910,45911,45912,45913,45914,45915,45916,45917,45918,45919,45920,45921,45922,45923,45924,45925,45926,45927,45928,45929,45930,45931,45932,45933,45934,45935,45936,45937,45938,45939,45940,45941,45942,45943,45944,45945,45946,45947,45948,45949,45950,45951,45952,45953,45954,45955,45956,45957,45958,45959,45960,45961,45962,45963,45964,45965,45966,45967,45968,45969,45970,45971,45972,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45984,45985,45986,45987,45988,45989,45990,45991,45992,45993,45994,45995,45996,45997,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46020,46021,46022,46023,46024,46025,46026,46027,46028,46029,46030,46031,46032,46033,46034,46035,46036,46037,46038,46039,46040,46041,46042,46043,46044,46045,46046,46047,46048,46049,46050,46051,46052,46053,46054,46055,46056,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46076,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46096,46097,46098,46099,46100,46101,46102,46103,46104,46105,46106,46107,46108,46109,46110,46111,46112,46113,46114,46115,46116,46117,46118,46119,46120,46121,46122,46123,46124,46125,46126,46127,46128,46129,46130,46131,46132,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46160,46161,46162,46163,46164,46165,46166,46167,46168,46169,46170,46171,46172,46173,46174,46175,46176,46177,46178,46179,46180,46181,46182,46183,46184,46185,46186,46187,46188,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46208,46209,46210,46211,46212,46213,46214,46215,46216,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46237,46238,46239,46240,46241,46242,46243,46244,46245,46246,46247,46248,46249,46250,46251,46252,46253,46254,46255,46256,46257,46258,46259,46260,46261,46262,46263,46264,46265,46266,46267,46268,46269,46270,46271,46272,46273,46274,46275,46276,46277,46278,46279,46280,46281,46282,46283,46284,46285,46286,46287,46288,46289,46290,46291,46292,46293,46294,46295,46296,46297,46298,46299,46300,46301,46302,46303,46304,46305,46306,46307,46308,46309,46310,46311,46312,46313,46314,46315,46316,46317,46318,46319,46320,46321,46322,46323,46324,46325,46326,46327,46328,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46356,46357,46358,46359,46360,46361,46362,46363,46364,46365,46366,46367,46368,46369,46370,46371,46372,46373,46374,46375,46376,46377,46378,46379,46380,46381,46382,46383,46384,46385,46386,46387,46388,46389,46390,46391,46392,46393,46394,46395,46396,46397,46398,46399,46400,46401,46402,46403,46404,46405,46406,46407,46408,46409,46410,46411,46412,46413,46414,46415,46416,46417,46418,46419,46420,46421,46422,46423,46424,46425,46426,46427,46428,46429,46430,46431,46432,46433,46434,46435,46436,46437,46438,46439,46440,46441,46442,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46496,46497,46498,46499,46500,46501,46502,46503,46504,46505,46506,46507,46508,46509,46510,46511,46512,46513,46514,46515,46516,46517,46518,46519,46520,46521,46522,46523,46524,46525,46526,46527,46528,46529,46530,46531,46532,46533,46534,46535,46536,46537,46538,46539,46540,46541,46542,46543,46544,46545,46546,46547,46548,46549,46550,46551,46552,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46572,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46608,46609,46610,46611,46612,46613,46614,46615,46616,46617,46618,46619,46620,46621,46622,46623,46624,46625,46626,46627,46628,46629,46630,46631,46632,46633,46634,46635,46636,46637,46638,46639,46640,46641,46642,46643,46644,46645,46646,46647,46648,46649,46650,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46664,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46692,46693,46694,46695,46696,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46748,46749,46750,46751,46752,46753,46754,46755,46756,46757,46758,46759,46760,46761,46762,46763,46764,46765,46766,46767,46768,46769,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46804,46805,46806,46807,46808,46809,46810,46811,46812,46813,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46832,46833,46834,46835,46836,46837,46838,46839,46840,46841,46842,46843,46844,46845,46846,46847,46848,46849,46850,46851,46852,46853,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46888,46889,46890,46891,46892,46893,46894,46895,46896,46897,46898,46899,46900,46901,46902,46903,46904,46905,46906,46907,46908,46909,46910,46911,46912,46913,46914,46915,46916,46917,46918,46919,46920,46921,46922,46923,46924,46925,46926,46927,46928,46929,46930,46931,46932,46933,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46944,46945,46946,46947,46948,46949,46950,46951,46952,46953,46954,46955,46956,46957,46958,46959,46960,46961,46962,46963,46964,46965,46966,46967,46968,46969,46970,46971,46972,46973,46974,46975,46976,46977,46978,46979,46980,46981,46982,46983,46984,46985,46986,46987,46988,46989,46990,46991,46992,46993,46994,46995,46996,46997,46998,46999,47000,47001,47002,47003,47004,47005,47006,47007,47008,47009,47010,47011,47012,47013,47014,47015,47016,47017,47018,47019,47020,47021,47022,47023,47024,47025,47026,47027,47028,47029,47030,47031,47032,47033,47034,47035,47036,47037,47038,47039,47040,47041,47042,47043,47044,47045,47046,47047,47048,47049,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47084,47085,47086,47087,47088,47089,47090,47091,47092,47093,47094,47095,47096,47097,47098,47099,47100,47101,47102,47103,47104,47105,47106,47107,47108,47109,47110,47111,47112,47113,47114,47115,47116,47117,47118,47119,47120,47121,47122,47123,47124,47125,47126,47127,47128,47129,47130,47131,47132,47133,47134,47135,47136,47137,47138,47139,47140,47141,47142,47143,47144,47145,47146,47147,47148,47149,47150,47151,47152,47153,47154,47155,47156,47157,47158,47159,47160,47161,47162,47163,47164,47165,47166,47167,47168,47169,47170,47171,47172,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47185,47186,47187,47188,47189,47190,47191,47192,47193,47194,47195,47196,47197,47198,47199,47200,47201,47202,47203,47204,47205,47206,47207,47208,47209,47210,47211,47212,47213,47214,47215,47216,47217,47218,47219,47220,47221,47222,47223,47224,47225,47226,47227,47228,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47245,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,47264,47265,47266,47267,47268,47269,47270,47271,47272,47273,47274,47275,47276,47277,47278,47279,47280,47281,47282,47283,47284,47285,47286,47287,47288,47289,47290,47291,47292,47293,47294,47295,47296,47297,47298,47299,47300,47301,47302,47303,47304,47305,47306,47307,47308,47309,47310,47311,47312,47313,47314,47315,47316,47317,47318,47319,47320,47321,47322,47323,47324,47325,47326,47327,47328,47329,47330,47331,47332,47333,47334,47335,47336,47337,47338,47339,47340,47341,47342,47343,47344,47345,47346,47347,47348,47349,47350,47351,47352,47353,47354,47355,47356,47357,47358,47359,47360,47361,47362,47363,47364,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47384,47385,47386,47387,47388,47389,47390,47391,47392,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47420,47421,47422,47423,47424,47425,47426,47427,47428,47429,47430,47431,47432,47433,47434,47435,47436,47437,47438,47439,47440,47441,47442,47443,47444,47445,47446,47447,47448,47449,47450,47451,47452,47453,47454,47455,47456,47457,47458,47459,47460,47461,47462,47463,47464,47465,47466,47467,47468,47469,47470,47471,47472,47473,47474,47475,47476,47477,47478,47479,47480,47481,47482,47483,47484,47485,47486,47487,47488,47489,47490,47491,47492,47493,47494,47495,47496,47497,47498,47499,47500,47501,47502,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47532,47533,47534,47535,47536,47537,47538,47539,47540,47541,47542,47543,47544,47545,47546,47547,47548,47549,47550,47551,47552,47553,47554,47555,47556,47557,47558,47559,47560,47561,47562,47563,47564,47565,47566,47567,47568,47569,47570,47571,47572,47573,47574,47575,47576,47577,47578,47579,47580,47581,47582,47583,47584,47585,47586,47587,47588,47589,47590,47591,47592,47593,47594,47595,47596,47597,47598,47599,47600,47601,47602,47603,47604,47605,47606,47607,47608,47609,47610,47611,47612,47613,47614,47615,47616,47617,47618,47619,47620,47621,47622,47623,47624,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47637,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47672,47673,47674,47675,47676,47677,47678,47679,47680,47681,47682,47683,47684,47685,47686,47687,47688,47689,47690,47691,47692,47693,47694,47695,47696,47697,47698,47699,47700,47701,47702,47703,47704,47705,47706,47707,47708,47709,47710,47711,47712,47713,47714,47715,47716,47717,47718,47719,47720,47721,47722,47723,47724,47725,47726,47727,47728,47729,47730,47731,47732,47733,47734,47735,47736,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47747,47748,47749,47750,47751,47752,47753,47754,47755,47756,47757,47758,47759,47760,47761,47762,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47784,47785,47786,47787,47788,47789,47790,47791,47792,47793,47794,47795,47796,47797,47798,47799,47800,47801,47802,47803,47804,47805,47806,47807,47808,47809,47810,47811,47812,47813,47814,47815,47816,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47832,47833,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47868,47869,47870,47871,47872,47873,47874,47875,47876,47877,47878,47879,47880,47881,47882,47883,47884,47885,47886,47887,47888,47889,47890,47891,47892,47893,47894,47895,47896,47897,47898,47899,47900,47901,47902,47903,47904,47905,47906,47907,47908,47909,47910,47911,47912,47913,47914,47915,47916,47917,47918,47919,47920,47921,47922,47923,47924,47925,47926,47927,47928,47929,47930,47931,47932,47933,47934,47935,47936,47937,47938,47939,47940,47941,47942,47943,47944,47945,47946,47947,47948,47949,47950,47951,47952,47953,47954,47955,47956,47957,47958,47959,47960,47961,47962,47963,47964,47965,47966,47967,47968,47969,47970,47971,47972,47973,47974,47975,47976,47977,47978,47979,47980,47981,47982,47983,47984,47985,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48008,48009,48010,48011,48012,48013,48014,48015,48016,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48036,48037,48038,48039,48040,48041,48042,48043,48044,48045,48046,48047,48048,48049,48050,48051,48052,48053,48054,48055,48056,48057,48058,48059,48060,48061,48062,48063,48064,48065,48066,48067,48068,48069,48070,48071,48072,48073,48074,48075,48076,48077,48078,48079,48080,48081,48082,48083,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48120,48121,48122,48123,48124,48125,48126,48127,48128,48129,48130,48131,48132,48133,48134,48135,48136,48137,48138,48139,48140,48141,48142,48143,48144,48145,48146,48147,48148,48149,48150,48151,48152,48153,48154,48155,48156,48157,48158,48159,48160,48161,48162,48163,48164,48165,48166,48167,48168,48169,48170,48171,48172,48173,48174,48175,48176,48177,48178,48179,48180,48181,48182,48183,48184,48185,48186,48187,48188,48189,48190,48191,48192,48193,48194,48195,48196,48197,48198,48199,48200,48201,48202,48203,48204,48205,48206,48207,48208,48209,48210,48211,48212,48213,48214,48215,48216,48217,48218,48219,48220,48221,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48260,48261,48262,48263,48264,48265,48266,48267,48268,48269,48270,48271,48272,48273,48274,48275,48276,48277,48278,48279,48280,48281,48282,48283,48284,48285,48286,48287,48288,48289,48290,48291,48292,48293,48294,48295,48296,48297,48298,48299,48300,48301,48302,48303,48304,48305,48306,48307,48308,48309,48310,48311,48312,48313,48314,48315,48316,48317,48318,48319,48320,48321,48322,48323,48324,48325,48326,48327,48328,48329,48330,48331,48332,48333,48334,48335,48336,48337,48338,48339,48340,48341,48342,48343,48344,48345,48346,48347,48348,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48372,48373,48374,48375,48376,48377,48378,48379,48380,48381,48382,48383,48384,48385,48386,48387,48388,48389,48390,48391,48392,48393,48394,48395,48396,48397,48398,48399,48400,48401,48402,48403,48404,48405,48406,48407,48408,48409,48410,48411,48412,48413,48414,48415,48416,48417,48418,48419,48420,48421,48422,48423,48424,48425,48426,48427,48428,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,48442,48443,48444,48445,48446,48447,48448,48449,48450,48451,48452,48453,48454,48455,48456,48457,48458,48459,48460,48461,48462,48463,48464,48465,48466,48467,48468,48469,48470,48471,48472,48473,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48484,48485,48486,48487,48488,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48512,48513,48514,48515,48516,48517,48518,48519,48520,48521,48522,48523,48524,48525,48526,48527,48528,48529,48530,48531,48532,48533,48534,48535,48536,48537,48538,48539,48540,48541,48542,48543,48544,48545,48546,48547,48548,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48560,48561,48562,48563,48564,48565,48566,48567,48568,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48596,48597,48598,48599,48600,48601,48602,48603,48604,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48617,48618,48619,48620,48621,48622,48623,48624,48625,48626,48627,48628,48629,48630,48631,48632,48633,48634,48635,48636,48637,48638,48639,48640,48641,48642,48643,48644,48645,48646,48647,48648,48649,48650,48651,48652,48653,48654,48655,48656,48657,48658,48659,48660,48661,48662,48663,48664,48665,48666,48667,48668,48669,48670,48671,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48708,48709,48710,48711,48712,48713,48714,48715,48716,48717,48718,48719,48720,48721,48722,48723,48724,48725,48726,48727,48728,48729,48730,48731,48732,48733,48734,48735,48736,48737,48738,48739,48740,48741,48742,48743,48744,48745,48746,48747,48748,48749,48750,48751,48752,48753,48754,48755,48756,48757,48758,48759,48760,48761,48762,48763,48764,48765,48766,48767,48768,48769,48770,48771,48772,48773,48774,48775,48776,48777,48778,48779,48780,48781,48782,48783,48784,48785,48786,48787,48788,48789,48790,48791,48792,48793,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48808,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48848,48849,48850,48851,48852,48853,48854,48855,48856,48857,48858,48859,48860,48861,48862,48863,48864,48865,48866,48867,48868,48869,48870,48871,48872,48873,48874,48875,48876,48877,48878,48879,48880,48881,48882,48883,48884,48885,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48897,48898,48899,48900,48901,48902,48903,48904,48905,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48920,48921,48922,48923,48924,48925,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48960,48961,48962,48963,48964,48965,48966,48967,48968,48969,48970,48971,48972,48973,48974,48975,48976,48977,48978,48979,48980,48981,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49044,49045,49046,49047,49048,49049,49050,49051,49052,49053,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49072,49073,49074,49075,49076,49077,49078,49079,49080,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49093,49094,49095,49096,49097,49098,49099,49100,49101,49102,49103,49104,49105,49106,49107,49108,49109,49110,49111,49112,49113,49114,49115,49116,49117,49118,49119,49120,49121,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49212,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49233,49234,49235,49236,49237,49238,49239,49240,49241,49242,49243,49244,49245,49246,49247,49248,49249,49250,49251,49252,49253,49254,49255,49256,49257,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49296,49297,49298,49299,49300,49301,49302,49303,49304,49305,49306,49307,49308,49309,49310,49311,49312,49313,49314,49315,49316,49317,49318,49319,49320,49321,49322,49323,49324,49325,49326,49327,49328,49329,49330,49331,49332,49333,49334,49335,49336,49337,49338,49339,49340,49341,49342,49343,49344,49345,49346,49347,49348,49349,49350,49351,49352,49353,49354,49355,49356,49357,49358,49359,49360,49361,49362,49363,49364,49365,49366,49367,49368,49369,49370,49371,49372,49373,49374,49375,49376,49377,49378,49379,49380,49381,49382,49383,49384,49385,49386,49387,49388,49389,49390,49391,49392,49393,49394,49395,49396,49397,49398,49399,49400,49401,49402,49403,49404,49405,49406,49407,49408,49409,49410,49411,49412,49413,49414,49415,49416,49417,49418,49419,49420,49421,49422,49423,49424,49425,49426,49427,49428,49429,49430,49431,49432,49433,49434,49435,49436,49437,49438,49439,49440,49441,49442,49443,49444,49445,49446,49447,49448,49449,49450,49451,49452,49453,49454,49455,49456,49457,49458,49459,49460,49461,49462,49463,49464,49465,49466,49467,49468,49469,49470,49471,49472,49473,49474,49475,49476,49477,49478,49479,49480,49481,49482,49483,49484,49485,49486,49487,49488,49489,49490,49491,49492,49493,49494,49495,49496,49497,49498,49499,49500,49501,49502,49503,49504,49505,49506,49507,49508,49509,49510,49511,49512,49513,49514,49515,49516,49517,49518,49519,49520,49521,49522,49523,49524,49525,49526,49527,49528,49529,49530,49531,49532,49533,49534,49535,49536,49537,49538,49539,49540,49541,49542,49543,49544,49545,49546,49547,49548,49549,49550,49551,49552,49553,49554,49555,49556,49557,49558,49559,49560,49561,49562,49563,49564,49565,49566,49567,49568,49569,49570,49571,49572,49573,49574,49575,49576,49577,49578,49579,49580,49581,49582,49583,49584,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49597,49598,49599,49600,49601,49602,49603,49604,49605,49606,49607,49608,49609,49610,49611,49612,49613,49614,49615,49616,49617,49618,49619,49620,49621,49622,49623,49624,49625,49626,49627,49628,49629,49630,49631,49632,49633,49634,49635,49636,49637,49638,49639,49640,49641,49642,49643,49644,49645,49646,49647,49648,49649,49650,49651,49652,49653,49654,49655,49656,49657,49658,49659,49660,49661,49662,49663,49664,49665,49666,49667,49668,49669,49670,49671,49672,49673,49674,49675,49676,49677,49678,49679,49680,49681,49682,49683,49684,49685,49686,49687,49688,49689,49690,49691,49692,49693,49694,49695,49696,49697,49698,49699,49700,49701,49702,49703,49704,49705,49706,49707,49708,49709,49710,49711,49712,49713,49714,49715,49716,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,49734,49735,49736,49737,49738,49739,49740,49741,49742,49743,49744,49745,49746,49747,49748,49749,49750,49751,49752,49753,49754,49755,49756,49757,49758,49759,49760,49761,49762,49763,49764,49765,49766,49767,49768,49769,49770,49771,49772,49773,49774,49775,49776,49777,49778,49779,49780,49781,49782,49783,49784,49785,49786,49787,49788,49789,49790,49791,49792,49793,49794,49795,49796,49797,49798,49799,49800,49801,49802,49803,49804,49805,49806,49807,49808,49809,49810,49811,49812,49813,49814,49815,49816,49817,49818,49819,49820,49821,49822,49823,49824,49825,49826,49827,49828,49829,49830,49831,49832,49833,49834,49835,49836,49837,49838,49839,49840,49841,49842,49843,49844,49845,49846,49847,49848,49849,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49884,49885,49886,49887,49888,49889,49890,49891,49892,49893,49894,49895,49896,49897,49898,49899,49900,49901,49902,49903,49904,49905,49906,49907,49908,49909,49910,49911,49912,49913,49914,49915,49916,49917,49918,49919,49920,49921,49922,49923,49924,49925,49926,49927,49928,49929,49930,49931,49932,49933,49934,49935,49936,49937,49938,49939,49940,49941,49942,49943,49944,49945,49946,49947,49948,49949,49950,49951,49952,49953,49954,49955,49956,49957,49958,49959,49960,49961,49962,49963,49964,49965,49966,49967,49968,49969,49970,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49989,49990,49991,49992,49993,49994,49995,49996,49997,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50024,50025,50026,50027,50028,50029,50030,50031,50032,50033,50034,50035,50036,50037,50038,50039,50040,50041,50042,50043,50044,50045,50046,50047,50048,50049,50050,50051,50052,50053,50054,50055,50056,50057,50058,50059,50060,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50112,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50136,50137,50138,50139,50140,50141,50142,50143,50144,50145,50146,50147,50148,50149,50150,50151,50152,50153,50154,50155,50156,50157,50158,50159,50160,50161,50162,50163,50164,50165,50166,50167,50168,50169,50170,50171,50172,50173,50174,50175,50176,50177,50178,50179,50180,50181,50182,50183,50184,50185,50186,50187,50188,50189,50190,50191,50192,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,50203,50204,50205,50206,50207,50208,50209,50210,50211,50212,50213,50214,50215,50216,50217,50218,50219,50220,50221,50222,50223,50224,50225,50226,50227,50228,50229,50230,50231,50232,50233,50234,50235,50236,50237,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50248,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50276,50277,50278,50279,50280,50281,50282,50283,50284,50285,50286,50287,50288,50289,50290,50291,50292,50293,50294,50295,50296,50297,50298,50299,50300,50301,50302,50303,50304,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50324,50325,50326,50327,50328,50329,50330,50331,50332,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50360,50361,50362,50363,50364,50365,50366,50367,50368,50369,50370,50371,50372,50373,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,50400,50401,50402,50403,50404,50405,50406,50407,50408,50409,50410,50411,50412,50413,50414,50415,50416,50417,50418,50419,50420,50421,50422,50423,50424,50425,50426,50427,50428,50429,50430,50431,50432,50433,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50444,50445,50446,50447,50448,50449,50450,50451,50452,50453,50454,50455,50456,50457,50458,50459,50460,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50472,50473,50474,50475,50476,50477,50478,50479,50480,50481,50482,50483,50484,50485,50486,50487,50488,50489,50490,50491,50492,50493,50494,50495,50496,50497,50498,50499,50500,50501,50502,50503,50504,50505,50506,50507,50508,50509,50510,50511,50512,50513,50514,50515,50516,50517,50518,50519,50520,50521,50522,50523,50524,50525,50526,50527,50528,50529,50530,50531,50532,50533,50534,50535,50536,50537,50538,50539,50540,50541,50542,50543,50544,50545,50546,50547,50548,50549,50550,50551,50552,50553,50554,50555,50556,50557,50558,50559,50560,50561,50562,50563,50564,50565,50566,50567,50568,50569,50570,50571,50572,50573,50574,50575,50576,50577,50578,50579,50580,50581,50582,50583,50584,50585,50586,50587,50588,50589,50590,50591,50592,50593,50594,50595,50596,50597,50598,50599,50600,50601,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50612,50613,50614,50615,50616,50617,50618,50619,50620,50621,50622,50623,50624,50625,50626,50627,50628,50629,50630,50631,50632,50633,50634,50635,50636,50637,50638,50639,50640,50641,50642,50643,50644,50645,50646,50647,50648,50649,50650,50651,50652,50653,50654,50655,50656,50657,50658,50659,50660,50661,50662,50663,50664,50665,50666,50667,50668,50669,50670,50671,50672,50673,50674,50675,50676,50677,50678,50679,50680,50681,50682,50683,50684,50685,50686,50687,50688,50689,50690,50691,50692,50693,50694,50695,50696,50697,50698,50699,50700,50701,50702,50703,50704,50705,50706,50707,50708,50709,50710,50711,50712,50713,50714,50715,50716,50717,50718,50719,50720,50721,50722,50723,50724,50725,50726,50727,50728,50729,50730,50731,50732,50733,50734,50735,50736,50737,50738,50739,50740,50741,50742,50743,50744,50745,50746,50747,50748,50749,50750,50751,50752,50753,50754,50755,50756,50757,50758,50759,50760,50761,50762,50763,50764,50765,50766,50767,50768,50769,50770,50771,50772,50773,50774,50775,50776,50777,50778,50779,50780,50781,50782,50783,50784,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50796,50797,50798,50799,50800,50801,50802,50803,50804,50805,50806,50807,50808,50809,50810,50811,50812,50813,50814,50815,50816,50817,50818,50819,50820,50821,50822,50823,50824,50825,50826,50827,50828,50829,50830,50831,50832,50833,50834,50835,50836,50837,50838,50839,50840,50841,50842,50843,50844,50845,50846,50847,50848,50849,50850,50851,50852,50853,50854,50855,50856,50857,50858,50859,50860,50861,50862,50863,50864,50865,50866,50867,50868,50869,50870,50871,50872,50873,50874,50875,50876,50877,50878,50879,50880,50881,50882,50883,50884,50885,50886,50887,50888,50889,50890,50891,50892,50893,50894,50895,50896,50897,50898,50899,50900,50901,50902,50903,50904,50905,50906,50907,50908,50909,50910,50911,50912,50913,50914,50915,50916,50917,50918,50919,50920,50921,50922,50923,50924,50925,50926,50927,50928,50929,50930,50931,50932,50933,50934,50935,50936,50937,50938,50939,50940,50941,50942,50943,50944,50945,50946,50947,50948,50949,50950,50951,50952,50953,50954,50955,50956,50957,50958,50959,50960,50961,50962,50963,50964,50965,50966,50967,50968,50969,50970,50971,50972,50973,50974,50975,50976,50977,50978,50979,50980,50981,50982,50983,50984,50985,50986,50987,50988,50989,50990,50991,50992,50993,50994,50995,50996,50997,50998,50999,51000,51001,51002,51003,51004,51005,51006,51007,51008,51009,51010,51011,51012,51013,51014,51015,51016,51017,51018,51019,51020,51021,51022,51023,51024,51025,51026,51027,51028,51029,51030,51031,51032,51033,51034,51035,51036,51037,51038,51039,51040,51041,51042,51043,51044,51045,51046,51047,51048,51049,51050,51051,51052,51053,51054,51055,51056,51057,51058,51059,51060,51061,51062,51063,51064,51065,51066,51067,51068,51069,51070,51071,51072,51073,51074,51075,51076,51077,51078,51079,51080,51081,51082,51083,51084,51085,51086,51087,51088,51089,51090,51091,51092,51093,51094,51095,51096,51097,51098,51099,51100,51101,51102,51103,51104,51105,51106,51107,51108,51109,51110,51111,51112,51113,51114,51115,51116,51117,51118,51119,51120,51121,51122,51123,51124,51125,51126,51127,51128,51129,51130,51131,51132,51133,51134,51135,51136,51137,51138,51139,51140,51141,51142,51143,51144,51145,51146,51147,51148,51149,51150,51151,51152,51153,51154,51155,51156,51157,51158,51159,51160,51161,51162,51163,51164,51165,51166,51167,51168,51169,51170,51171,51172,51173,51174,51175,51176,51177,51178,51179,51180,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,51195,51196,51197,51198,51199,51200,51201,51202,51203,51204,51205,51206,51207,51208,51209,51210,51211,51212,51213,51214,51215,51216,51217,51218,51219,51220,51221,51222,51223,51224,51225,51226,51227,51228,51229,51230,51231,51232,51233,51234,51235,51236,51237,51238,51239,51240,51241,51242,51243,51244,51245,51246,51247,51248,51249,51250,51251,51252,51253,51254,51255,51256,51257,51258,51259,51260,51261,51262,51263,51264,51265,51266,51267,51268,51269,51270,51271,51272,51273,51274,51275,51276,51277,51278,51279,51280,51281,51282,51283,51284,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51312,51313,51314,51315,51316,51317,51318,51319,51320,51321,51322,51323,51324,51325,51326,51327,51328,51329,51330,51331,51332,51333,51334,51335,51336,51337,51338,51339,51340,51341,51342,51343,51344,51345,51346,51347,51348,51349,51350,51351,51352,51353,51354,51355,51356,51357,51358,51359,51360,51361,51362,51363,51364,51365,51366,51367,51368,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51388,51389,51390,51391,51392,51393,51394,51395,51396,51397,51398,51399,51400,51401,51402,51403,51404,51405,51406,51407,51408,51409,51410,51411,51412,51413,51414,51415,51416,51417,51418,51419,51420,51421,51422,51423,51424,51425,51426,51427,51428,51429,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51445,51446,51447,51448,51449,51450,51451,51452,51453,51454,51455,51456,51457,51458,51459,51460,51461,51462,51463,51464,51465,51466,51467,51468,51469,51470,51471,51472,51473,51474,51475,51476,51477,51478,51479,51480,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,51500,51501,51502,51503,51504,51505,51506,51507,51508,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,51528,51529,51530,51531,51532,51533,51534,51535,51536,51537,51538,51539,51540,51541,51542,51543,51544,51545,51546,51547,51548,51549,51550,51551,51552,51553,51554,51555,51556,51557,51558,51559,51560,51561,51562,51563,51564,51565,51566,51567,51568,51569,51570,51571,51572,51573,51574,51575,51576,51577,51578,51579,51580,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51592,51593,51594,51595,51596,51597,51598,51599,51600,51601,51602,51603,51604,51605,51606,51607,51608,51609,51610,51611,51612,51613,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51648,51649,51650,51651,51652,51653,51654,51655,51656,51657,51658,51659,51660,51661,51662,51663,51664,51665,51666,51667,51668,51669,51670,51671,51672,51673,51674,51675,51676,51677,51678,51679,51680,51681,51682,51683,51684,51685,51686,51687,51688,51689,51690,51691,51692,51693,51694,51695,51696,51697,51698,51699,51700,51701,51702,51703,51704,51705,51706,51707,51708,51709,51710,51711,51712,51713,51714,51715,51716,51717,51718,51719,51720,51721,51722,51723,51724,51725,51726,51727,51728,51729,51730,51731,51732,51733,51734,51735,51736,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,51750,51751,51752,51753,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,51783,51784,51785,51786,51787,51788,51789,51790,51791,51792,51793,51794,51795,51796,51797,51798,51799,51800,51801,51802,51803,51804,51805,51806,51807,51808,51809,51810,51811,51812,51813,51814,51815,51816,51817,51818,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51837,51838,51839,51840,51841,51842,51843,51844,51845,51846,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51864,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51900,51901,51902,51903,51904,51905,51906,51907,51908,51909,51910,51911,51912,51913,51914,51915,51916,51917,51918,51919,51920,51921,51922,51923,51924,51925,51926,51927,51928,51929,51930,51931,51932,51933,51934,51935,51936,51937,51938,51939,51940,51941,51942,51943,51944,51945,51946,51947,51948,51949,51950,51951,51952,51953,51954,51955,51956,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51976,51977,51978,51979,51980,51981,51982,51983,51984,51985,51986,51987,51988,51989,51990,51991,51992,51993,51994,51995,51996,51997,51998,51999,52000,52001,52002,52003,52004,52005,52006,52007,52008,52009,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52033,52034,52035,52036,52037,52038,52039,52040,52041,52042,52043,52044,52045,52046,52047,52048,52049,52050,52051,52052,52053,52054,52055,52056,52057,52058,52059,52060,52061,52062,52063,52064,52065,52066,52067,52068,52069,52070,52071,52072,52073,52074,52075,52076,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52088,52089,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52124,52125,52126,52127,52128,52129,52130,52131,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52152,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52180,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,52192,52193,52194,52195,52196,52197,52198,52199,52200,52201,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52236,52237,52238,52239,52240,52241,52242,52243,52244,52245,52246,52247,52248,52249,52250,52251,52252,52253,52254,52255,52256,52257,52258,52259,52260,52261,52262,52263,52264,52265,52266,52267,52268,52269,52270,52271,52272,52273,52274,52275,52276,52277,52278,52279,52280,52281,52282,52283,52284,52285,52286,52287,52288,52289,52290,52291,52292,52293,52294,52295,52296,52297,52298,52299,52300,52301,52302,52303,52304,52305,52306,52307,52308,52309,52310,52311,52312,52313,52314,52315,52316,52317,52318,52319,52320,52321,52322,52323,52324,52325,52326,52327,52328,52329,52330,52331,52332,52333,52334,52335,52336,52337,52338,52339,52340,52341,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,52372,52373,52374,52375,52376,52377,52378,52379,52380,52381,52382,52383,52384,52385,52386,52387,52388,52389,52390,52391,52392,52393,52394,52395,52396,52397,52398,52399,52400,52401,52402,52403,52404,52405,52406,52407,52408,52409,52410,52411,52412,52413,52414,52415,52416,52417,52418,52419,52420,52421,52422,52423,52424,52425,52426,52427,52428,52429,52430,52431,52432,52433,52434,52435,52436,52437,52438,52439,52440,52441,52442,52443,52444,52445,52446,52447,52448,52449,52450,52451,52452,52453,52454,52455,52456,52457,52458,52459,52460,52461,52462,52463,52464,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,52478,52479,52480,52481,52482,52483,52484,52485,52486,52487,52488,52489,52490,52491,52492,52493,52494,52495,52496,52497,52498,52499,52500,52501,52502,52503,52504,52505,52506,52507,52508,52509,52510,52511,52512,52513,52514,52515,52516,52517,52518,52519,52520,52521,52522,52523,52524,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52537,52538,52539,52540,52541,52542,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52572,52573,52574,52575,52576,52577,52578,52579,52580,52581,52582,52583,52584,52585,52586,52587,52588,52589,52590,52591,52592,52593,52594,52595,52596,52597,52598,52599,52600,52601,52602,52603,52604,52605,52606,52607,52608,52609,52610,52611,52612,52613,52614,52615,52616,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52628,52629,52630,52631,52632,52633,52634,52635,52636,52637,52638,52639,52640,52641,52642,52643,52644,52645,52646,52647,52648,52649,52650,52651,52652,52653,52654,52655,52656,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52676,52677,52678,52679,52680,52681,52682,52683,52684,52685,52686,52687,52688,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,52706,52707,52708,52709,52710,52711,52712,52713,52714,52715,52716,52717,52718,52719,52720,52721,52722,52723,52724,52725,52726,52727,52728,52729,52730,52731,52732,52733,52734,52735,52736,52737,52738,52739,52740,52741,52742,52743,52744,52745,52746,52747,52748,52749,52750,52751,52752,52753,52754,52755,52756,52757,52758,52759,52760,52761,52762,52763,52764,52765,52766,52767,52768,52769,52770,52771,52772,52773,52774,52775,52776,52777,52778,52779,52780,52781,52782,52783,52784,52785,52786,52787,52788,52789,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52824,52825,52826,52827,52828,52829,52830,52831,52832,52833,52834,52835,52836,52837,52838,52839,52840,52841,52842,52843,52844,52845,52846,52847,52848,52849,52850,52851,52852,52853,52854,52855,52856,52857,52858,52859,52860,52861,52862,52863,52864,52865,52866,52867,52868,52869,52870,52871,52872,52873,52874,52875,52876,52877,52878,52879,52880,52881,52882,52883,52884,52885,52886,52887,52888,52889,52890,52891,52892,52893,52894,52895,52896,52897,52898,52899,52900,52901,52902,52903,52904,52905,52906,52907,52908,52909,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,52923,52924,52925,52926,52927,52928,52929,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52964,52965,52966,52967,52968,52969,52970,52971,52972,52973,52974,52975,52976,52977,52978,52979,52980,52981,52982,52983,52984,52985,52986,52987,52988,52989,52990,52991,52992,52993,52994,52995,52996,52997,52998,52999,53000,53001,53002,53003,53004,53005,53006,53007,53008,53009,53010,53011,53012,53013,53014,53015,53016,53017,53018,53019,53020,53021,53022,53023,53024,53025,53026,53027,53028,53029,53030,53031,53032,53033,53034,53035,53036,53037,53038,53039,53040,53041,53042,53043,53044,53045,53046,53047,53048,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53076,53077,53078,53079,53080,53081,53082,53083,53084,53085,53086,53087,53088,53089,53090,53091,53092,53093,53094,53095,53096,53097,53098,53099,53100,53101,53102,53103,53104,53105,53106,53107,53108,53109,53110,53111,53112,53113,53114,53115,53116,53117,53118,53119,53120,53121,53122,53123,53124,53125,53126,53127,53128,53129,53130,53131,53132,53133,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53153,53154,53155,53156,53157,53158,53159,53160,53161,53162,53163,53164,53165,53166,53167,53168,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53188,53189,53190,53191,53192,53193,53194,53195,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53216,53217,53218,53219,53220,53221,53222,53223,53224,53225,53226,53227,53228,53229,53230,53231,53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247,53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263,53264,53265,53266,53267,53268,53269,53270,53271,53272,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,53293,53294,53295,53296,53297,53298,53299,53300,53301,53302,53303,53304,53305,53306,53307,53308,53309,53310,53311,53312,53313,53314,53315,53316,53317,53318,53319,53320,53321,53322,53323,53324,53325,53326,53327,53328,53329,53330,53331,53332,53333,53334,53335,53336,53337,53338,53339,53340,53341,53342,53343,53344,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53356,53357,53358,53359,53360,53361,53362,53363,53364,53365,53366,53367,53368,53369,53370,53371,53372,53373,53374,53375,53376,53377,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53412,53413,53414,53415,53416,53417,53418,53419,53420,53421,53422,53423,53424,53425,53426,53427,53428,53429,53430,53431,53432,53433,53434,53435,53436,53437,53438,53439,53440,53441,53442,53443,53444,53445,53446,53447,53448,53449,53450,53451,53452,53453,53454,53455,53456,53457,53458,53459,53460,53461,53462,53463,53464,53465,53466,53467,53468,53469,53470,53471,53472,53473,53474,53475,53476,53477,53478,53479,53480,53481,53482,53483,53484,53485,53486,53487,53488,53489,53490,53491,53492,53493,53494,53495,53496,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,53509,53510,53511,53512,53513,53514,53515,53516,53517,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53552,53553,53554,53555,53556,53557,53558,53559,53560,53561,53562,53563,53564,53565,53566,53567,53568,53569,53570,53571,53572,53573,53574,53575,53576,53577,53578,53579,53580,53581,53582,53583,53584,53585,53586,53587,53588,53589,53590,53591,53592,53593,53594,53595,53596,53597,53598,53599,53600,53601,53602,53603,53604,53605,53606,53607,53608,53609,53610,53611,53612,53613,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53628,53629,53630,53631,53632,53633,53634,53635,53636,53637,53638,53639,53640,53641,53642,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53664,53665,53666,53667,53668,53669,53670,53671,53672,53673,53674,53675,53676,53677,53678,53679,53680,53681,53682,53683,53684,53685,53686,53687,53688,53689,53690,53691,53692,53693,53694,53695,53696,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,53712,53713,53714,53715,53716,53717,53718,53719,53720,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,53739,53740,53741,53742,53743,53744,53745,53746,53747,53748,53749,53750,53751,53752,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,53767,53768,53769,53770,53771,53772,53773,53774,53775,53776,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,53802,53803,53804,53805,53806,53807,53808,53809,53810,53811,53812,53813,53814,53815,53816,53817,53818,53819,53820,53821,53822,53823,53824,53825,53826,53827,53828,53829,53830,53831,53832,53833,53834,53835,53836,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53852,53853,53854,53855,53856,53857,53858,53859,53860,53861,53862,53863,53864,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53888,53889,53890,53891,53892,53893,53894,53895,53896,53897,53898,53899,53900,53901,53902,53903,53904,53905,53906,53907,53908,53909,53910,53911,53912,53913,53914,53915,53916,53917,53918,53919,53920,53921,53922,53923,53924,53925,53926,53927,53928,53929,53930,53931,53932,53933,53934,53935,53936,53937,53938,53939,53940,53941,53942,53943,53944,53945,53946,53947,53948,53949,53950,53951,53952,53953,53954,53955,53956,53957,53958,53959,53960,53961,53962,53963,53964,53965,53966,53967,53968,53969,53970,53971,53972,53973,53974,53975,53976,53977,53978,53979,53980,53981,53982,53983,53984,53985,53986,53987,53988,53989,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54000,54001,54002,54003,54004,54005,54006,54007,54008,54009,54010,54011,54012,54013,54014,54015,54016,54017,54018,54019,54020,54021,54022,54023,54024,54025,54026,54027,54028,54029,54030,54031,54032,54033,54034,54035,54036,54037,54038,54039,54040,54041,54042,54043,54044,54045,54046,54047,54048,54049,54050,54051,54052,54053,54054,54055,54056,54057,54058,54059,54060,54061,54062,54063,54064,54065,54066,54067,54068,54069,54070,54071,54072,54073,54074,54075,54076,54077,54078,54079,54080,54081,54082,54083,54084,54085,54086,54087,54088,54089,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54140,54141,54142,54143,54144,54145,54146,54147,54148,54149,54150,54151,54152,54153,54154,54155,54156,54157,54158,54159,54160,54161,54162,54163,54164,54165,54166,54167,54168,54169,54170,54171,54172,54173,54174,54175,54176,54177,54178,54179,54180,54181,54182,54183,54184,54185,54186,54187,54188,54189,54190,54191,54192,54193,54194,54195,54196,54197,54198,54199,54200,54201,54202,54203,54204,54205,54206,54207,54208,54209,54210,54211,54212,54213,54214,54215,54216,54217,54218,54219,54220,54221,54222,54223,54224,54225,54226,54227,54228,54229,54230,54231,54232,54233,54234,54235,54236,54237,54238,54239,54240,54241,54242,54243,54244,54245,54246,54247,54248,54249,54250,54251,54252,54253,54254,54255,54256,54257,54258,54259,54260,54261,54262,54263,54264,54265,54266,54267,54268,54269,54270,54271,54272,54273,54274,54275,54276,54277,54278,54279,54280,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,54295,54296,54297,54298,54299,54300,54301,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,54328,54329,54330,54331,54332,54333,54334,54335,54336,54337,54338,54339,54340,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,54356,54357,54358,54359,54360,54361,54362,54363,54364,54365,54366,54367,54368,54369,54370,54371,54372,54373,54374,54375,54376,54377,54378,54379,54380,54381,54382,54383,54384,54385,54386,54387,54388,54389,54390,54391,54392,54393,54394,54395,54396,54397,54398,54399,54400,54401,54402,54403,54404,54405,54406,54407,54408,54409,54410,54411,54412,54413,54414,54415,54416,54417,54418,54419,54420,54421,54422,54423,54424,54425,54426,54427,54428,54429,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54441,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54476,54477,54478,54479,54480,54481,54482,54483,54484,54485,54486,54487,54488,54489,54490,54491,54492,54493,54494,54495,54496,54497,54498,54499,54500,54501,54502,54503,54504,54505,54506,54507,54508,54509,54510,54511,54512,54513,54514,54515,54516,54517,54518,54519,54520,54521,54522,54523,54524,54525,54526,54527,54528,54529,54530,54531,54532,54533,54534,54535,54536,54537,54538,54539,54540,54541,54542,54543,54544,54545,54546,54547,54548,54549,54550,54551,54552,54553,54554,54555,54556,54557,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,54584,54585,54586,54587,54588,54589,54590,54591,54592,54593,54594,54595,54596,54597,54598,54599,54600,54601,54602,54603,54604,54605,54606,54607,54608,54609,54610,54611,54612,54613,54614,54615,54616,54617,54618,54619,54620,54621,54622,54623,54624,54625,54626,54627,54628,54629,54630,54631,54632,54633,54634,54635,54636,54637,54638,54639,54640,54641,54642,54643,54644,54645,54646,54647,54648,54649,54650,54651,54652,54653,54654,54655,54656,54657,54658,54659,54660,54661,54662,54663,54664,54665,54666,54667,54668,54669,54670,54671,54672,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54693,54694,54695,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,54728,54729,54730,54731,54732,54733,54734,54735,54736,54737,54738,54739,54740,54741,54742,54743,54744,54745,54746,54747,54748,54749,54750,54751,54752,54753,54754,54755,54756,54757,54758,54759,54760,54761,54762,54763,54764,54765,54766,54767,54768,54769,54770,54771,54772,54773,54774,54775,54776,54777,54778,54779,54780,54781,54782,54783,54784,54785,54786,54787,54788,54789,54790,54791,54792,54793,54794,54795,54796,54797,54798,54799,54800,54801,54802,54803,54804,54805,54806,54807,54808,54809,54810,54811,54812,54813,54814,54815,54816,54817,54818,54819,54820,54821,54822,54823,54824,54825,54826,54827,54828,54829,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54840,54841,54842,54843,54844,54845,54846,54847,54848,54849,54850,54851,54852,54853,54854,54855,54856,54857,54858,54859,54860,54861,54862,54863,54864,54865,54866,54867,54868,54869,54870,54871,54872,54873,54874,54875,54876,54877,54878,54879,54880,54881,54882,54883,54884,54885,54886,54887,54888,54889,54890,54891,54892,54893,54894,54895,54896,54897,54898,54899,54900,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,54913,54914,54915,54916,54917,54918,54919,54920,54921,54922,54923,54924,54925,54926,54927,54928,54929,54930,54931,54932,54933,54934,54935,54936,54937,54938,54939,54940,54941,54942,54943,54944,54945,54946,54947,54948,54949,54950,54951,54952,54953,54954,54955,54956,54957,54958,54959,54960,54961,54962,54963,54964,54965,54966,54967,54968,54969,54970,54971,54972,54973,54974,54975,54976,54977,54978,54979,54980,54981,54982,54983,54984,54985,54986,54987,54988,54989,54990,54991,54992,54993,54994,54995,54996,54997,54998,54999,55000,55001,55002,55003,55004,55005,55006,55007,55008,55009,55010,55011,55012,55013,55014,55015,55016,55017,55018,55019,55020,55021,55022,55023,55024,55025,55026,55027,55028,55029,55030,55031,55032,55033,55034,55035,55036,55037,55038,55039,55040,55041,55042,55043,55044,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55057,55058,55059,55060,55061,55062,55063,55064,55065,55066,55067,55068,55069,55070,55071,55072,55073,55074,55075,55076,55077,55078,55079,55080,55081,55082,55083,55084,55085,55086,55087,55088,55089,55090,55091,55092,55093,55094,55095,55096,55097,55098,55099,55100,55101,55102,55103,55104,55105,55106,55107,55108,55109,55110,55111,55112,55113,55114,55115,55116,55117,55118,55119,55120,55121,55122,55123,55124,55125,55126,55127,55128,55129,55130,55131,55132,55133,55134,55135,55136,55137,55138,55139,55140,55141,55142,55143,55144,55145,55146,55147,55148,55149,55150,55151,55152,55153,55154,55155,55156,55157,55158,55159,55160,55161,55162,55163,55164,55165,55166,55167,55168,55169,55170,55171,55172,55173,55174,55175,55176,55177,55178,55179,55180,55181,55182,55183,55184,55185,55186,55187,55188,55189,55190,55191,55192,55193,55194,55195,55196,55197,55198,55199,55200,55201,55202,55203,55216,55217,55218,55219,55220,55221,55222,55223,55224,55225,55226,55227,55228,55229,55230,55231,55232,55233,55234,55235,55236,55237,55238,55243,55244,55245,55246,55247,55248,55249,55250,55251,55252,55253,55254,55255,55256,55257,55258,55259,55260,55261,55262,55263,55264,55265,55266,55267,55268,55269,55270,55271,55272,55273,55274,55275,55276,55277,55278,55279,55280,55281,55282,55283,55284,55285,55286,55287,55288,55289,55290,55291,63744,63745,63746,63747,63748,63749,63750,63751,63752,63753,63754,63755,63756,63757,63758,63759,63760,63761,63762,63763,63764,63765,63766,63767,63768,63769,63770,63771,63772,63773,63774,63775,63776,63777,63778,63779,63780,63781,63782,63783,63784,63785,63786,63787,63788,63789,63790,63791,63792,63793,63794,63795,63796,63797,63798,63799,63800,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,63812,63813,63814,63815,63816,63817,63818,63819,63820,63821,63822,63823,63824,63825,63826,63827,63828,63829,63830,63831,63832,63833,63834,63835,63836,63837,63838,63839,63840,63841,63842,63843,63844,63845,63846,63847,63848,63849,63850,63851,63852,63853,63854,63855,63856,63857,63858,63859,63860,63861,63862,63863,63864,63865,63866,63867,63868,63869,63870,63871,63872,63873,63874,63875,63876,63877,63878,63879,63880,63881,63882,63883,63884,63885,63886,63887,63888,63889,63890,63891,63892,63893,63894,63895,63896,63897,63898,63899,63900,63901,63902,63903,63904,63905,63906,63907,63908,63909,63910,63911,63912,63913,63914,63915,63916,63917,63918,63919,63920,63921,63922,63923,63924,63925,63926,63927,63928,63929,63930,63931,63932,63933,63934,63935,63936,63937,63938,63939,63940,63941,63942,63943,63944,63945,63946,63947,63948,63949,63950,63951,63952,63953,63954,63955,63956,63957,63958,63959,63960,63961,63962,63963,63964,63965,63966,63967,63968,63969,63970,63971,63972,63973,63974,63975,63976,63977,63978,63979,63980,63981,63982,63983,63984,63985,63986,63987,63988,63989,63990,63991,63992,63993,63994,63995,63996,63997,63998,63999,64000,64001,64002,64003,64004,64005,64006,64007,64008,64009,64010,64011,64012,64013,64014,64015,64016,64017,64018,64019,64020,64021,64022,64023,64024,64025,64026,64027,64028,64029,64030,64031,64032,64033,64034,64035,64036,64037,64038,64039,64040,64041,64042,64043,64044,64045,64046,64047,64048,64049,64050,64051,64052,64053,64054,64055,64056,64057,64058,64059,64060,64061,64062,64063,64064,64065,64066,64067,64068,64069,64070,64071,64072,64073,64074,64075,64076,64077,64078,64079,64080,64081,64082,64083,64084,64085,64086,64087,64088,64089,64090,64091,64092,64093,64094,64095,64096,64097,64098,64099,64100,64101,64102,64103,64104,64105,64106,64107,64108,64109,64112,64113,64114,64115,64116,64117,64118,64119,64120,64121,64122,64123,64124,64125,64126,64127,64128,64129,64130,64131,64132,64133,64134,64135,64136,64137,64138,64139,64140,64141,64142,64143,64144,64145,64146,64147,64148,64149,64150,64151,64152,64153,64154,64155,64156,64157,64158,64159,64160,64161,64162,64163,64164,64165,64166,64167,64168,64169,64170,64171,64172,64173,64174,64175,64176,64177,64178,64179,64180,64181,64182,64183,64184,64185,64186,64187,64188,64189,64190,64191,64192,64193,64194,64195,64196,64197,64198,64199,64200,64201,64202,64203,64204,64205,64206,64207,64208,64209,64210,64211,64212,64213,64214,64215,64216,64217,64256,64257,64258,64259,64260,64261,64262,64275,64276,64277,64278,64279,64285,64287,64288,64289,64290,64291,64292,64293,64294,64295,64296,64298,64299,64300,64301,64302,64303,64304,64305,64306,64307,64308,64309,64310,64312,64313,64314,64315,64316,64318,64320,64321,64323,64324,64326,64327,64328,64329,64330,64331,64332,64333,64334,64335,64336,64337,64338,64339,64340,64341,64342,64343,64344,64345,64346,64347,64348,64349,64350,64351,64352,64353,64354,64355,64356,64357,64358,64359,64360,64361,64362,64363,64364,64365,64366,64367,64368,64369,64370,64371,64372,64373,64374,64375,64376,64377,64378,64379,64380,64381,64382,64383,64384,64385,64386,64387,64388,64389,64390,64391,64392,64393,64394,64395,64396,64397,64398,64399,64400,64401,64402,64403,64404,64405,64406,64407,64408,64409,64410,64411,64412,64413,64414,64415,64416,64417,64418,64419,64420,64421,64422,64423,64424,64425,64426,64427,64428,64429,64430,64431,64432,64433,64467,64468,64469,64470,64471,64472,64473,64474,64475,64476,64477,64478,64479,64480,64481,64482,64483,64484,64485,64486,64487,64488,64489,64490,64491,64492,64493,64494,64495,64496,64497,64498,64499,64500,64501,64502,64503,64504,64505,64506,64507,64508,64509,64510,64511,64512,64513,64514,64515,64516,64517,64518,64519,64520,64521,64522,64523,64524,64525,64526,64527,64528,64529,64530,64531,64532,64533,64534,64535,64536,64537,64538,64539,64540,64541,64542,64543,64544,64545,64546,64547,64548,64549,64550,64551,64552,64553,64554,64555,64556,64557,64558,64559,64560,64561,64562,64563,64564,64565,64566,64567,64568,64569,64570,64571,64572,64573,64574,64575,64576,64577,64578,64579,64580,64581,64582,64583,64584,64585,64586,64587,64588,64589,64590,64591,64592,64593,64594,64595,64596,64597,64598,64599,64600,64601,64602,64603,64604,64605,64606,64607,64608,64609,64610,64611,64612,64613,64614,64615,64616,64617,64618,64619,64620,64621,64622,64623,64624,64625,64626,64627,64628,64629,64630,64631,64632,64633,64634,64635,64636,64637,64638,64639,64640,64641,64642,64643,64644,64645,64646,64647,64648,64649,64650,64651,64652,64653,64654,64655,64656,64657,64658,64659,64660,64661,64662,64663,64664,64665,64666,64667,64668,64669,64670,64671,64672,64673,64674,64675,64676,64677,64678,64679,64680,64681,64682,64683,64684,64685,64686,64687,64688,64689,64690,64691,64692,64693,64694,64695,64696,64697,64698,64699,64700,64701,64702,64703,64704,64705,64706,64707,64708,64709,64710,64711,64712,64713,64714,64715,64716,64717,64718,64719,64720,64721,64722,64723,64724,64725,64726,64727,64728,64729,64730,64731,64732,64733,64734,64735,64736,64737,64738,64739,64740,64741,64742,64743,64744,64745,64746,64747,64748,64749,64750,64751,64752,64753,64754,64755,64756,64757,64758,64759,64760,64761,64762,64763,64764,64765,64766,64767,64768,64769,64770,64771,64772,64773,64774,64775,64776,64777,64778,64779,64780,64781,64782,64783,64784,64785,64786,64787,64788,64789,64790,64791,64792,64793,64794,64795,64796,64797,64798,64799,64800,64801,64802,64803,64804,64805,64806,64807,64808,64809,64810,64811,64812,64813,64814,64815,64816,64817,64818,64819,64820,64821,64822,64823,64824,64825,64826,64827,64828,64829,64848,64849,64850,64851,64852,64853,64854,64855,64856,64857,64858,64859,64860,64861,64862,64863,64864,64865,64866,64867,64868,64869,64870,64871,64872,64873,64874,64875,64876,64877,64878,64879,64880,64881,64882,64883,64884,64885,64886,64887,64888,64889,64890,64891,64892,64893,64894,64895,64896,64897,64898,64899,64900,64901,64902,64903,64904,64905,64906,64907,64908,64909,64910,64911,64914,64915,64916,64917,64918,64919,64920,64921,64922,64923,64924,64925,64926,64927,64928,64929,64930,64931,64932,64933,64934,64935,64936,64937,64938,64939,64940,64941,64942,64943,64944,64945,64946,64947,64948,64949,64950,64951,64952,64953,64954,64955,64956,64957,64958,64959,64960,64961,64962,64963,64964,64965,64966,64967,65008,65009,65010,65011,65012,65013,65014,65015,65016,65017,65018,65019,65136,65137,65138,65139,65140,65142,65143,65144,65145,65146,65147,65148,65149,65150,65151,65152,65153,65154,65155,65156,65157,65158,65159,65160,65161,65162,65163,65164,65165,65166,65167,65168,65169,65170,65171,65172,65173,65174,65175,65176,65177,65178,65179,65180,65181,65182,65183,65184,65185,65186,65187,65188,65189,65190,65191,65192,65193,65194,65195,65196,65197,65198,65199,65200,65201,65202,65203,65204,65205,65206,65207,65208,65209,65210,65211,65212,65213,65214,65215,65216,65217,65218,65219,65220,65221,65222,65223,65224,65225,65226,65227,65228,65229,65230,65231,65232,65233,65234,65235,65236,65237,65238,65239,65240,65241,65242,65243,65244,65245,65246,65247,65248,65249,65250,65251,65252,65253,65254,65255,65256,65257,65258,65259,65260,65261,65262,65263,65264,65265,65266,65267,65268,65269,65270,65271,65272,65273,65274,65275,65276,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65382,65383,65384,65385,65386,65387,65388,65389,65390,65391,65392,65393,65394,65395,65396,65397,65398,65399,65400,65401,65402,65403,65404,65405,65406,65407,65408,65409,65410,65411,65412,65413,65414,65415,65416,65417,65418,65419,65420,65421,65422,65423,65424,65425,65426,65427,65428,65429,65430,65431,65432,65433,65434,65435,65436,65437,65438,65439,65440,65441,65442,65443,65444,65445,65446,65447,65448,65449,65450,65451,65452,65453,65454,65455,65456,65457,65458,65459,65460,65461,65462,65463,65464,65465,65466,65467,65468,65469,65470,65474,65475,65476,65477,65478,65479,65482,65483,65484,65485,65486,65487,65490,65491,65492,65493,65494,65495,65498,65499,65500';\nvar arr = str.split(',').map(function(code) {\n return parseInt(code, 10);\n});\nmodule.exports = arr;\n},{}],\"/../../../jshint/node_modules/console-browserify/index.js\":[function(_dereq_,module,exports){\n(function (global){\nvar util = _dereq_(\"util\")\nvar assert = _dereq_(\"assert\")\nvar now = _dereq_(\"date-now\")\n\nvar slice = Array.prototype.slice\nvar console\nvar times = {}\n\nif (typeof global !== \"undefined\" && global.console) {\n console = global.console\n} else if (typeof window !== \"undefined\" && window.console) {\n console = window.console\n} else {\n console = {}\n}\n\nvar functions = [\n [log, \"log\"],\n [info, \"info\"],\n [warn, \"warn\"],\n [error, \"error\"],\n [time, \"time\"],\n [timeEnd, \"timeEnd\"],\n [trace, \"trace\"],\n [dir, \"dir\"],\n [consoleAssert, \"assert\"]\n]\n\nfor (var i = 0; i < functions.length; i++) {\n var tuple = functions[i]\n var f = tuple[0]\n var name = tuple[1]\n\n if (!console[name]) {\n console[name] = f\n }\n}\n\nmodule.exports = console\n\nfunction log() {}\n\nfunction info() {\n console.log.apply(console, arguments)\n}\n\nfunction warn() {\n console.log.apply(console, arguments)\n}\n\nfunction error() {\n console.warn.apply(console, arguments)\n}\n\nfunction time(label) {\n times[label] = now()\n}\n\nfunction timeEnd(label) {\n var time = times[label]\n if (!time) {\n throw new Error(\"No such label: \" + label)\n }\n\n var duration = now() - time\n console.log(label + \": \" + duration + \"ms\")\n}\n\nfunction trace() {\n var err = new Error()\n err.name = \"Trace\"\n err.message = util.format.apply(null, arguments)\n console.error(err.stack)\n}\n\nfunction dir(object) {\n console.log(util.inspect(object) + \"\\n\")\n}\n\nfunction consoleAssert(expression) {\n if (!expression) {\n var arr = slice.call(arguments, 1)\n assert.ok(false, util.format.apply(null, arr))\n }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"assert\":\"/node_modules/assert/assert.js\",\"date-now\":\"/../../../jshint/node_modules/date-now/index.js\",\"util\":\"/node_modules/util/util.js\"}],\"/../../../jshint/node_modules/date-now/index.js\":[function(_dereq_,module,exports){\nmodule.exports = now\n\nfunction now() {\n return new Date().getTime()\n}\n\n},{}],\"/../../../jshint/node_modules/lodash.clone/index.js\":[function(_dereq_,module,exports){\n(function (global){\nvar LARGE_ARRAY_SIZE = 200;\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\nvar MAX_SAFE_INTEGER = 9007199254740991;\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\nvar reFlags = /\\w*$/;\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\nvar root = freeGlobal || freeSelf || Function('return this')();\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\nvar moduleExports = freeModule && freeModule.exports === freeExports;\nfunction addMapEntry(map, pair) {\n map.set(pair[0], pair[1]);\n return map;\n}\nfunction addSetEntry(set, value) {\n set.add(value);\n return set;\n}\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\nfunction isHostObject(value) {\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\nvar coreJsData = root['__core-js_shared__'];\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\nvar funcToString = funcProto.toString;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nvar objectToString = objectProto.toString;\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\nfunction listCacheClear() {\n this.__data__ = [];\n}\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\nfunction arrayLikeKeys(value, inherited) {\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\nvar getTag = baseGetTag;\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\nfunction clone(value) {\n return baseClone(value, false, true);\n}\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\nfunction isArguments(value) {\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\nvar isArray = Array.isArray;\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\nvar isBuffer = nativeIsBuffer || stubFalse;\nfunction isFunction(value) {\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\nfunction stubArray() {\n return [];\n}\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = clone;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],\"/../../../jshint/node_modules/lodash.slice/index.js\":[function(_dereq_,module,exports){\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\nvar reTrim = /^\\s+|\\s+$/g;\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\nvar reIsBinary = /^0b[01]+$/i;\nvar reIsOctal = /^0o[0-7]+$/i;\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\nvar freeParseInt = parseInt;\nvar objectProto = Object.prototype;\nvar objectToString = objectProto.toString;\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\nfunction slice(array, start, end) {\n var length = array ? array.length : 0;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n}\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\nfunction isFunction(value) {\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = slice;\n\n},{}],\"/../../../jshint/node_modules/underscore/underscore-umd.js\":[function(_dereq_,module,exports){\n(function (global){\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('underscore', factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n var current = global._;\n var exports = global._ = factory();\n exports.noConflict = function () { global._ = current; return exports; };\n }()));\n}(this, (function () {\n var VERSION = '1.13.6';\n var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global) ||\n Function('return this')() ||\n {};\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n var _isNaN = isNaN,\n _isFinite = isFinite;\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n }\n function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || (type === 'object' && !!obj);\n }\n function isNull(obj) {\n return obj === null;\n }\n function isUndefined(obj) {\n return obj === void 0;\n }\n function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n }\n function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n }\n\n var isString = tagTester('String');\n\n var isNumber = tagTester('Number');\n\n var isDate = tagTester('Date');\n\n var isRegExp = tagTester('RegExp');\n\n var isError = tagTester('Error');\n\n var isSymbol = tagTester('Symbol');\n\n var isArrayBuffer = tagTester('ArrayBuffer');\n\n var isFunction = tagTester('Function');\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n var isFunction$1 = isFunction;\n\n var hasObjectTag = tagTester('Object');\n var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n\n var isDataView = tagTester('DataView');\n function ie10IsDataView(obj) {\n return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);\n }\n\n var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);\n var isArray = nativeIsArray || tagTester('Array');\n function has$1(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n }\n\n var isArguments = tagTester('Arguments');\n (function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has$1(obj, 'callee');\n };\n }\n }());\n\n var isArguments$1 = isArguments;\n function isFinite$1(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n }\n function isNaN$1(obj) {\n return isNumber(obj) && _isNaN(obj);\n }\n function constant(value) {\n return function() {\n return value;\n };\n }\n function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n }\n function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n }\n var getByteLength = shallowProperty('byteLength');\n var isBufferLike = createSizePropertyCheck(getByteLength);\n var typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n function isTypedArray(obj) {\n return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n }\n\n var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);\n var getLength = shallowProperty('length');\n function emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key] === true; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n }\n function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto;\n var prop = 'constructor';\n if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n }\n function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has$1(obj, key)) keys.push(key);\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n function isEmpty(obj) {\n if (obj == null) return true;\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments$1(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n }\n function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n }\n function _$1(obj) {\n if (obj instanceof _$1) return obj;\n if (!(this instanceof _$1)) return new _$1(obj);\n this._wrapped = obj;\n }\n\n _$1.VERSION = VERSION;\n _$1.prototype.value = function() {\n return this._wrapped;\n };\n _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;\n\n _$1.prototype.toString = function() {\n return String(this._wrapped);\n };\n function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n }\n var tagDataView = '[object DataView]';\n function eq(a, b, aStack, bStack) {\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n if (a == null || b == null) return false;\n if (a !== a) return b !== b;\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n }\n function deepEq(a, b, aStack, bStack) {\n if (a instanceof _$1) a = a._wrapped;\n if (b instanceof _$1) b = b._wrapped;\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {\n if (!isDataView$1(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n case '[object RegExp]':\n case '[object String]':\n return '' + a === '' + b;\n case '[object Number]':\n if (+a !== +a) return +b !== +b;\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray$1(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&\n isFunction$1(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n if (aStack[length] === a) return bStack[length] === b;\n }\n aStack.push(a);\n bStack.push(b);\n if (areArrays) {\n length = a.length;\n if (length !== b.length) return false;\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n var _keys = keys(a), key;\n length = _keys.length;\n if (keys(b).length !== length) return false;\n while (length--) {\n key = _keys[length];\n if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n aStack.pop();\n bStack.pop();\n return true;\n }\n function isEqual(a, b) {\n return eq(a, b);\n }\n function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction$1(obj[methods[i]])) return false;\n }\n return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);\n };\n }\n var forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n\n var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n\n var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n\n var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n\n var isWeakSet = tagTester('WeakSet');\n function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n }\n function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n }\n function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n }\n function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction$1(obj[key])) names.push(key);\n }\n return names.sort();\n }\n function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n }\n var extend = createAssigner(allKeys);\n var extendOwn = createAssigner(keys);\n var defaults = createAssigner(allKeys, true);\n function ctor() {\n return function(){};\n }\n function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n }\n function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n }\n function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n }\n function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n }\n function toPath$1(path) {\n return isArray(path) ? path : [path];\n }\n _$1.toPath = toPath$1;\n function toPath(path) {\n return _$1.toPath(path);\n }\n function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n }\n function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n }\n function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!has$1(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n }\n function identity(value) {\n return value;\n }\n function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n }\n function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n }\n function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n }\n function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction$1(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n }\n function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n }\n _$1.iteratee = iteratee;\n function cb(value, context, argCount) {\n if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n }\n function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n function noop(){}\n function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n }\n function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n }\n function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n }\n var now = Date.now || function() {\n return new Date().getTime();\n };\n function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n }\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var _escape = createEscaper(escapeMap);\n var unescapeMap = invert(escapeMap);\n var _unescape = createEscaper(unescapeMap);\n var templateSettings = _$1.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n var noMatch = /(.)^/;\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n function escapeChar(match) {\n return '\\\\' + escapes[match];\n }\n var bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _$1.templateSettings);\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _$1);\n };\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n }\n function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction$1(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction$1(prop) ? prop.call(obj) : prop;\n }\n return obj;\n }\n var idCounter = 0;\n function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n }\n function chain(obj) {\n var instance = _$1(obj);\n instance._chain = true;\n return instance;\n }\n function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n }\n var partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n partial.placeholder = _$1;\n var bind = restArguments(function(func, context, args) {\n if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n var isArrayLike = createSizePropertyCheck(getLength);\n function flatten$1(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {\n if (depth > 1) {\n flatten$1(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n }\n var bindAll = restArguments(function(obj, keys) {\n keys = flatten$1(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n });\n function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n }\n var delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n var defer = partial(delay, _$1, 1);\n function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n }\n function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n }\n function wrap(func, wrapper) {\n return partial(wrapper, func);\n }\n function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n }\n function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n }\n function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n }\n var once = partial(before, 2);\n function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n }\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n var findIndex = createPredicateIndexFinder(1);\n var findLastIndex = createPredicateIndexFinder(-1);\n function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n }\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN$1);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n var indexOf = createIndexFinder(1, findIndex, sortedIndex);\n var lastIndexOf = createIndexFinder(-1, findLastIndex);\n function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n }\n function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n }\n function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n }\n function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n function createReduce(dir) {\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n }\n var reduce = createReduce(1);\n var reduceRight = createReduce(-1);\n function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n }\n function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n }\n function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n }\n function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n }\n function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n }\n var invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction$1(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n function pluck(obj, key) {\n return map(obj, property(key));\n }\n function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n }\n function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n }\n function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = toArray(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n }\n function shuffle(obj) {\n return sample(obj, Infinity);\n }\n function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n }\n function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n }\n var groupBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key].push(value); else result[key] = [value];\n });\n var indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n var countBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key]++; else result[key] = 1;\n });\n var partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n }\n function keyInObj(value, key, obj) {\n return key in obj;\n }\n var pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction$1(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten$1(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n var omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction$1(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten$1(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n });\n function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n }\n function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n }\n function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n }\n function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n }\n function compact(array) {\n return filter(array, Boolean);\n }\n function flatten(array, depth) {\n return flatten$1(array, depth, false);\n }\n var difference = restArguments(function(array, rest) {\n rest = flatten$1(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n });\n var without = restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n });\n function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n }\n var union = restArguments(function(arrays) {\n return uniq(flatten$1(arrays, true, true));\n });\n function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n }\n function unzip(array) {\n var length = (array && max(array, getLength).length) || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n }\n var zip = restArguments(unzip);\n function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n }\n function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n }\n function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n }\n function chainResult(instance, obj) {\n return instance._chain ? _$1(obj).chain() : obj;\n }\n function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _$1[name] = obj[name];\n _$1.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_$1, args));\n };\n });\n return _$1;\n }\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n });\n each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n });\n\n var allExports = {\n __proto__: null,\n VERSION: VERSION,\n restArguments: restArguments,\n isObject: isObject,\n isNull: isNull,\n isUndefined: isUndefined,\n isBoolean: isBoolean,\n isElement: isElement,\n isString: isString,\n isNumber: isNumber,\n isDate: isDate,\n isRegExp: isRegExp,\n isError: isError,\n isSymbol: isSymbol,\n isArrayBuffer: isArrayBuffer,\n isDataView: isDataView$1,\n isArray: isArray,\n isFunction: isFunction$1,\n isArguments: isArguments$1,\n isFinite: isFinite$1,\n isNaN: isNaN$1,\n isTypedArray: isTypedArray$1,\n isEmpty: isEmpty,\n isMatch: isMatch,\n isEqual: isEqual,\n isMap: isMap,\n isWeakMap: isWeakMap,\n isSet: isSet,\n isWeakSet: isWeakSet,\n keys: keys,\n allKeys: allKeys,\n values: values,\n pairs: pairs,\n invert: invert,\n functions: functions,\n methods: functions,\n extend: extend,\n extendOwn: extendOwn,\n assign: extendOwn,\n defaults: defaults,\n create: create,\n clone: clone,\n tap: tap,\n get: get,\n has: has,\n mapObject: mapObject,\n identity: identity,\n constant: constant,\n noop: noop,\n toPath: toPath$1,\n property: property,\n propertyOf: propertyOf,\n matcher: matcher,\n matches: matcher,\n times: times,\n random: random,\n now: now,\n escape: _escape,\n unescape: _unescape,\n templateSettings: templateSettings,\n template: template,\n result: result,\n uniqueId: uniqueId,\n chain: chain,\n iteratee: iteratee,\n partial: partial,\n bind: bind,\n bindAll: bindAll,\n memoize: memoize,\n delay: delay,\n defer: defer,\n throttle: throttle,\n debounce: debounce,\n wrap: wrap,\n negate: negate,\n compose: compose,\n after: after,\n before: before,\n once: once,\n findKey: findKey,\n findIndex: findIndex,\n findLastIndex: findLastIndex,\n sortedIndex: sortedIndex,\n indexOf: indexOf,\n lastIndexOf: lastIndexOf,\n find: find,\n detect: find,\n findWhere: findWhere,\n each: each,\n forEach: each,\n map: map,\n collect: map,\n reduce: reduce,\n foldl: reduce,\n inject: reduce,\n reduceRight: reduceRight,\n foldr: reduceRight,\n filter: filter,\n select: filter,\n reject: reject,\n every: every,\n all: every,\n some: some,\n any: some,\n contains: contains,\n includes: contains,\n include: contains,\n invoke: invoke,\n pluck: pluck,\n where: where,\n max: max,\n min: min,\n shuffle: shuffle,\n sample: sample,\n sortBy: sortBy,\n groupBy: groupBy,\n indexBy: indexBy,\n countBy: countBy,\n partition: partition,\n toArray: toArray,\n size: size,\n pick: pick,\n omit: omit,\n first: first,\n head: first,\n take: first,\n initial: initial,\n last: last,\n rest: rest,\n tail: rest,\n drop: rest,\n compact: compact,\n flatten: flatten,\n without: without,\n uniq: uniq,\n unique: uniq,\n union: union,\n intersection: intersection,\n difference: difference,\n unzip: unzip,\n transpose: unzip,\n zip: zip,\n object: object,\n range: range,\n chunk: chunk,\n mixin: mixin,\n 'default': _$1\n };\n var _ = mixin(allExports);\n _._ = _;\n\n return _;\n\n})));\n\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],\"/../../../jshint/src/jshint.js\":[function(_dereq_,module,exports){\n\nvar _ = _dereq_(\"underscore\");\n_.clone = _dereq_(\"lodash.clone\");\nvar events = _dereq_(\"events\");\nvar vars = _dereq_(\"./vars.js\");\nvar messages = _dereq_(\"./messages.js\");\nvar Lexer = _dereq_(\"./lex.js\").Lexer;\nvar reg = _dereq_(\"./reg.js\");\nvar state = _dereq_(\"./state.js\").state;\nvar style = _dereq_(\"./style.js\");\nvar options = _dereq_(\"./options.js\");\nvar scopeManager = _dereq_(\"./scope-manager.js\");\nvar prodParams = _dereq_(\"./prod-params.js\");\nvar console = _dereq_(\"console-browserify\");\n\nvar JSHINT = (function() {\n \"use strict\";\n\n var api, // Extension API\n bang = {\n \"<\" : true,\n \"<=\" : true,\n \"==\" : true,\n \"===\": true,\n \"!==\": true,\n \"!=\" : true,\n \">\" : true,\n \">=\" : true,\n \"+\" : true,\n \"-\" : true,\n \"*\" : true,\n \"/\" : true,\n \"%\" : true\n },\n\n declared, // Globals that were declared using /*global ... */ syntax.\n\n functions, // All of the functions\n\n inblock,\n indent,\n lookahead,\n lex,\n member,\n membersOnly,\n predefined, // Global variables defined by option\n\n extraModules = [],\n emitter = new events.EventEmitter();\n\n function checkOption(name, isStable, t) {\n var type, validNames;\n\n if (isStable) {\n type = \"\";\n validNames = options.validNames;\n } else {\n type = \"unstable \";\n validNames = options.unstableNames;\n }\n\n name = name.trim();\n\n if (/^[+-]W\\d{3}$/g.test(name)) {\n return true;\n }\n\n if (validNames.indexOf(name) === -1) {\n if (t.type !== \"jslint\" && !_.has(options.removed, name)) {\n error(\"E001\", t, type, name);\n return false;\n }\n }\n\n return true;\n }\n\n function isString(obj) {\n return Object.prototype.toString.call(obj) === \"[object String]\";\n }\n\n function isIdentifier(tkn, value) {\n if (!tkn)\n return false;\n\n if (!tkn.identifier || tkn.value !== value)\n return false;\n\n return true;\n }\n function isReserved(context, token) {\n if (!token.reserved) {\n return false;\n }\n var meta = token.meta;\n\n if (meta && meta.isFutureReservedWord) {\n if (state.inES5()) {\n if (!meta.es5) {\n return false;\n }\n\n if (token.isProperty) {\n return false;\n }\n }\n } else if (meta && meta.es5 && !state.inES5()) {\n return false;\n }\n if (meta && meta.strictOnly && state.inES5()) {\n if (!state.option.strict && !state.isStrict()) {\n return false;\n }\n }\n\n if (token.id === \"await\" && (!(context & prodParams.async) && !state.option.module)) {\n return false;\n }\n\n if (token.id === \"yield\" && (!(context & prodParams.yield))) {\n return state.isStrict();\n }\n\n return true;\n }\n\n function supplant(str, data) {\n return str.replace(/\\{([^{}]*)\\}/g, function(a, b) {\n var r = data[b];\n return typeof r === \"string\" || typeof r === \"number\" ? r : a;\n });\n }\n\n function combine(dest, src) {\n Object.keys(src).forEach(function(name) {\n if (_.has(JSHINT.blacklist, name)) return;\n dest[name] = src[name];\n });\n }\n\n function processenforceall() {\n if (state.option.enforceall) {\n for (var enforceopt in options.bool.enforcing) {\n if (state.option[enforceopt] === undefined &&\n !options.noenforceall[enforceopt]) {\n state.option[enforceopt] = true;\n }\n }\n for (var relaxopt in options.bool.relaxing) {\n if (state.option[relaxopt] === undefined) {\n state.option[relaxopt] = false;\n }\n }\n }\n }\n function applyOptions() {\n var badESOpt = null;\n processenforceall();\n badESOpt = state.inferEsVersion();\n if (badESOpt) {\n quit(\"E059\", state.tokens.next, \"esversion\", badESOpt);\n }\n\n if (state.inES5()) {\n combine(predefined, vars.ecmaIdentifiers[5]);\n }\n\n if (state.inES6()) {\n combine(predefined, vars.ecmaIdentifiers[6]);\n }\n\n if (state.inES8()) {\n combine(predefined, vars.ecmaIdentifiers[8]);\n }\n\n if (state.inES11()) {\n combine(predefined, vars.ecmaIdentifiers[11]);\n }\n if (state.option.strict === \"global\" && \"globalstrict\" in state.option) {\n quit(\"E059\", state.tokens.next, \"strict\", \"globalstrict\");\n }\n\n if (state.option.module) {\n if (!state.inES6()) {\n warning(\"W134\", state.tokens.next, \"module\", 6);\n }\n }\n\n if (state.option.regexpu) {\n if (!state.inES6()) {\n warning(\"W134\", state.tokens.next, \"regexpu\", 6);\n }\n }\n\n if (state.option.couch) {\n combine(predefined, vars.couch);\n }\n\n if (state.option.qunit) {\n combine(predefined, vars.qunit);\n }\n\n if (state.option.rhino) {\n combine(predefined, vars.rhino);\n }\n\n if (state.option.shelljs) {\n combine(predefined, vars.shelljs);\n combine(predefined, vars.node);\n }\n if (state.option.typed) {\n combine(predefined, vars.typed);\n }\n\n if (state.option.phantom) {\n combine(predefined, vars.phantom);\n }\n\n if (state.option.prototypejs) {\n combine(predefined, vars.prototypejs);\n }\n\n if (state.option.node) {\n combine(predefined, vars.node);\n combine(predefined, vars.typed);\n }\n\n if (state.option.devel) {\n combine(predefined, vars.devel);\n }\n\n if (state.option.dojo) {\n combine(predefined, vars.dojo);\n }\n\n if (state.option.browser) {\n combine(predefined, vars.browser);\n combine(predefined, vars.typed);\n }\n\n if (state.option.browserify) {\n combine(predefined, vars.browser);\n combine(predefined, vars.typed);\n combine(predefined, vars.browserify);\n }\n\n if (state.option.nonstandard) {\n combine(predefined, vars.nonstandard);\n }\n\n if (state.option.jasmine) {\n combine(predefined, vars.jasmine);\n }\n\n if (state.option.jquery) {\n combine(predefined, vars.jquery);\n }\n\n if (state.option.mootools) {\n combine(predefined, vars.mootools);\n }\n\n if (state.option.worker) {\n combine(predefined, vars.worker);\n }\n\n if (state.option.wsh) {\n combine(predefined, vars.wsh);\n }\n\n if (state.option.yui) {\n combine(predefined, vars.yui);\n }\n\n if (state.option.mocha) {\n combine(predefined, vars.mocha);\n }\n }\n function quit(code, token, a, b) {\n var percentage = Math.floor((token.line / state.lines.length) * 100);\n var message = messages.errors[code].desc;\n\n var exception = {\n name: \"JSHintError\",\n line: token.line,\n character: token.from,\n message: message + \" (\" + percentage + \"% scanned).\",\n raw: message,\n code: code,\n a: a,\n b: b\n };\n\n exception.reason = supplant(message, exception) + \" (\" + percentage +\n \"% scanned).\";\n\n throw exception;\n }\n\n function removeIgnoredMessages() {\n var ignored = state.ignoredLines;\n\n if (_.isEmpty(ignored)) return;\n JSHINT.errors = _.reject(JSHINT.errors, function(err) { return ignored[err.line] });\n }\n\n function warning(code, t, a, b, c, d) {\n var ch, l, w, msg;\n\n if (/^W\\d{3}$/.test(code)) {\n if (state.ignored[code])\n return;\n\n msg = messages.warnings[code];\n } else if (/E\\d{3}/.test(code)) {\n msg = messages.errors[code];\n } else if (/I\\d{3}/.test(code)) {\n msg = messages.info[code];\n }\n\n t = t || state.tokens.next || {};\n if (t.id === \"(end)\") { // `~\n t = state.tokens.curr;\n }\n\n l = t.line;\n ch = t.from;\n\n w = {\n id: \"(error)\",\n raw: msg.desc,\n code: msg.code,\n evidence: state.lines[l - 1] || \"\",\n line: l,\n character: ch,\n scope: JSHINT.scope,\n a: a,\n b: b,\n c: c,\n d: d\n };\n\n w.reason = supplant(msg.desc, w);\n JSHINT.errors.push(w);\n\n removeIgnoredMessages();\n\n var errors = JSHINT.errors.filter(function(e) { return /E\\d{3}/.test(e.code); });\n if (errors.length >= state.option.maxerr) {\n quit(\"E043\", t);\n }\n return w;\n }\n\n function warningAt(m, l, ch, a, b, c, d) {\n return warning(m, {\n line: l,\n from: ch\n }, a, b, c, d);\n }\n\n function error(m, t, a, b, c, d) {\n warning(m, t, a, b, c, d);\n }\n\n function errorAt(m, l, ch, a, b, c, d) {\n return error(m, {\n line: l,\n from: ch\n }, a, b, c, d);\n }\n function addEvalCode(elem, token) {\n JSHINT.internals.push({\n id: \"(internal)\",\n elem: elem,\n token: token,\n code: token.value.replace(/([^\\\\])(\\\\*)\\2\\\\n/g, \"$1\\n\")\n });\n }\n function lintingDirective(directiveToken, previous) {\n var body = directiveToken.body.split(\",\")\n .map(function(s) { return s.trim(); });\n var predef = {};\n\n if (directiveToken.type === \"falls through\") {\n previous.caseFallsThrough = true;\n return;\n }\n\n if (directiveToken.type === \"globals\") {\n body.forEach(function(item, idx) {\n var parts = item.split(\":\");\n var key = parts[0].trim();\n\n if (key === \"-\" || !key.length) {\n if (idx > 0 && idx === body.length - 1) {\n return;\n }\n error(\"E002\", directiveToken);\n return;\n }\n\n if (key.charAt(0) === \"-\") {\n key = key.slice(1);\n\n JSHINT.blacklist[key] = key;\n delete predefined[key];\n } else {\n predef[key] = parts.length > 1 && parts[1].trim() === \"true\";\n }\n });\n\n combine(predefined, predef);\n\n for (var key in predef) {\n if (_.has(predef, key)) {\n declared[key] = directiveToken;\n }\n }\n }\n\n if (directiveToken.type === \"exported\") {\n body.forEach(function(e, idx) {\n if (!e.length) {\n if (idx > 0 && idx === body.length - 1) {\n return;\n }\n error(\"E002\", directiveToken);\n return;\n }\n\n state.funct[\"(scope)\"].addExported(e);\n });\n }\n\n if (directiveToken.type === \"members\") {\n membersOnly = membersOnly || {};\n\n body.forEach(function(m) {\n var ch1 = m.charAt(0);\n var ch2 = m.charAt(m.length - 1);\n\n if (ch1 === ch2 && (ch1 === \"\\\"\" || ch1 === \"'\")) {\n m = m\n .substr(1, m.length - 2)\n .replace(\"\\\\\\\"\", \"\\\"\");\n }\n\n membersOnly[m] = false;\n });\n }\n\n var numvals = [\n \"maxstatements\",\n \"maxparams\",\n \"maxdepth\",\n \"maxcomplexity\",\n \"maxerr\",\n \"maxlen\",\n \"indent\"\n ];\n\n if (directiveToken.type === \"jshint\" || directiveToken.type === \"jslint\" ||\n directiveToken.type === \"jshint.unstable\") {\n body.forEach(function(item) {\n var parts = item.split(\":\");\n var key = parts[0].trim();\n var val = parts.length > 1 ? parts[1].trim() : \"\";\n var numberVal;\n\n if (!checkOption(key, directiveToken.type !== \"jshint.unstable\", directiveToken)) {\n return;\n }\n\n if (numvals.indexOf(key) >= 0) {\n if (val !== \"false\") {\n numberVal = +val;\n\n if (typeof numberVal !== \"number\" || !isFinite(numberVal) ||\n numberVal <= 0 || Math.floor(numberVal) !== numberVal) {\n error(\"E032\", directiveToken, val);\n return;\n }\n\n state.option[key] = numberVal;\n } else {\n state.option[key] = key === \"indent\" ? 4 : false;\n }\n\n return;\n }\n\n if (key === \"validthis\") {\n\n if (state.funct[\"(global)\"])\n return void error(\"E009\");\n\n if (val !== \"true\" && val !== \"false\")\n return void error(\"E002\", directiveToken);\n\n state.option.validthis = (val === \"true\");\n return;\n }\n\n if (key === \"quotmark\") {\n switch (val) {\n case \"true\":\n case \"false\":\n state.option.quotmark = (val === \"true\");\n break;\n case \"double\":\n case \"single\":\n state.option.quotmark = val;\n break;\n default:\n error(\"E002\", directiveToken);\n }\n return;\n }\n\n if (key === \"shadow\") {\n switch (val) {\n case \"true\":\n state.option.shadow = true;\n break;\n case \"outer\":\n state.option.shadow = \"outer\";\n break;\n case \"false\":\n case \"inner\":\n state.option.shadow = \"inner\";\n break;\n default:\n error(\"E002\", directiveToken);\n }\n return;\n }\n\n if (key === \"unused\") {\n switch (val) {\n case \"true\":\n state.option.unused = true;\n break;\n case \"false\":\n state.option.unused = false;\n break;\n case \"vars\":\n case \"strict\":\n state.option.unused = val;\n break;\n default:\n error(\"E002\", directiveToken);\n }\n return;\n }\n\n if (key === \"latedef\") {\n switch (val) {\n case \"true\":\n state.option.latedef = true;\n break;\n case \"false\":\n state.option.latedef = false;\n break;\n case \"nofunc\":\n state.option.latedef = \"nofunc\";\n break;\n default:\n error(\"E002\", directiveToken);\n }\n return;\n }\n\n if (key === \"ignore\") {\n switch (val) {\n case \"line\":\n state.ignoredLines[directiveToken.line] = true;\n removeIgnoredMessages();\n break;\n default:\n error(\"E002\", directiveToken);\n }\n return;\n }\n\n if (key === \"strict\") {\n switch (val) {\n case \"true\":\n state.option.strict = true;\n break;\n case \"false\":\n state.option.strict = false;\n break;\n case \"global\":\n case \"implied\":\n state.option.strict = val;\n break;\n default:\n error(\"E002\", directiveToken);\n }\n return;\n }\n\n if (key === \"module\") {\n if (!hasParsedCode(state.funct)) {\n error(\"E055\", directiveToken, \"module\");\n }\n }\n\n if (key === \"esversion\") {\n switch (val) {\n case \"3\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\":\n case \"10\":\n case \"11\":\n state.option.moz = false;\n state.option.esversion = +val;\n break;\n case \"2015\":\n case \"2016\":\n case \"2017\":\n case \"2018\":\n case \"2019\":\n case \"2020\":\n state.option.moz = false;\n state.option.esversion = +val - 2009;\n break;\n default:\n error(\"E002\", directiveToken);\n }\n if (!hasParsedCode(state.funct)) {\n error(\"E055\", directiveToken, \"esversion\");\n }\n return;\n }\n\n var match = /^([+-])(W\\d{3})$/g.exec(key);\n if (match) {\n state.ignored[match[2]] = (match[1] === \"-\");\n return;\n }\n\n var tn;\n if (val === \"true\" || val === \"false\") {\n if (directiveToken.type === \"jslint\") {\n tn = options.renamed[key] || key;\n state.option[tn] = (val === \"true\");\n\n if (options.inverted[tn] !== undefined) {\n state.option[tn] = !state.option[tn];\n }\n } else if (directiveToken.type === \"jshint.unstable\") {\n state.option.unstable[key] = (val === \"true\");\n } else {\n state.option[key] = (val === \"true\");\n }\n\n return;\n }\n\n error(\"E002\", directiveToken);\n });\n\n applyOptions();\n }\n }\n function peek(p) {\n var i = p || 0, j = lookahead.length, t;\n\n if (i < j) {\n return lookahead[i];\n }\n\n while (j <= i) {\n t = lex.token();\n if (!t) {\n if (!lookahead.length) {\n return state.tokens.next;\n }\n\n return lookahead[j - 1];\n }\n\n lookahead[j] = t;\n j += 1;\n }\n\n return t;\n }\n\n function peekIgnoreEOL() {\n var i = 0;\n var t;\n do {\n t = peek(i++);\n } while (t.id === \"(endline)\");\n return t;\n }\n function advance(expected, relatedToken) {\n var nextToken = state.tokens.next;\n\n if (expected && nextToken.id !== expected) {\n if (relatedToken) {\n if (nextToken.id === \"(end)\") {\n error(\"E019\", relatedToken, relatedToken.id);\n } else {\n error(\"E020\", nextToken, expected, relatedToken.id,\n relatedToken.line, nextToken.value);\n }\n } else if (nextToken.type !== \"(identifier)\" || nextToken.value !== expected) {\n error(\"E021\", nextToken, expected, nextToken.value);\n }\n }\n\n state.tokens.prev = state.tokens.curr;\n state.tokens.curr = state.tokens.next;\n for (;;) {\n state.tokens.next = lookahead.shift() || lex.token();\n\n if (!state.tokens.next) { // No more tokens left, give up\n quit(\"E041\", state.tokens.curr);\n }\n\n if (state.tokens.next.id === \"(end)\" || state.tokens.next.id === \"(error)\") {\n return;\n }\n\n if (state.tokens.next.check) {\n state.tokens.next.check();\n }\n\n if (state.tokens.next.isSpecial) {\n lintingDirective(state.tokens.next, state.tokens.curr);\n } else {\n if (state.tokens.next.id !== \"(endline)\") {\n break;\n }\n }\n }\n }\n function isOperator(token) {\n return token.first || token.right || token.left || token.id === \"yield\" || token.id === \"await\";\n }\n\n function isEndOfExpr(context, curr, next) {\n if (arguments.length <= 1) {\n curr = state.tokens.curr;\n next = state.tokens.next;\n }\n\n if (next.id === \"in\" && context & prodParams.noin) {\n return true;\n }\n\n if (next.id === \";\" || next.id === \"}\" || next.id === \":\") {\n return true;\n }\n\n if (next.infix === curr.infix ||\n (curr.id === \"yield\" && curr.rbp < next.rbp)) {\n return !sameLine(curr, next);\n }\n\n return false;\n }\n function expression(context, rbp) {\n var left, isArray = false, isObject = false;\n var initial = context & prodParams.initial;\n var curr;\n\n context &= ~prodParams.initial;\n\n state.nameStack.push();\n\n if (state.tokens.next.id === \"(end)\")\n error(\"E006\", state.tokens.curr);\n\n advance();\n\n if (initial) {\n state.funct[\"(verb)\"] = state.tokens.curr.value;\n state.tokens.curr.beginsStmt = true;\n }\n\n curr = state.tokens.curr;\n\n if (initial && curr.fud && (!curr.useFud || curr.useFud(context))) {\n left = state.tokens.curr.fud(context);\n } else {\n if (state.tokens.curr.nud) {\n left = state.tokens.curr.nud(context, rbp);\n } else {\n error(\"E030\", state.tokens.curr, state.tokens.curr.id);\n }\n\n while (rbp < state.tokens.next.lbp && !isEndOfExpr(context)) {\n isArray = state.tokens.curr.value === \"Array\";\n isObject = state.tokens.curr.value === \"Object\";\n if (left && (left.value || (left.first && left.first.value))) {\n if (left.value !== \"new\" ||\n (left.first && left.first.value && left.first.value === \".\")) {\n isArray = false;\n if (left.value !== state.tokens.curr.value) {\n isObject = false;\n }\n }\n }\n\n advance();\n\n if (isArray && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n warning(\"W009\", state.tokens.curr);\n }\n\n if (isObject && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n warning(\"W010\", state.tokens.curr);\n }\n\n if (left && state.tokens.curr.led) {\n left = state.tokens.curr.led(context, left);\n } else {\n error(\"E033\", state.tokens.curr, state.tokens.curr.id);\n }\n }\n }\n\n state.nameStack.pop();\n\n return left;\n }\n\n function sameLine(first, second) {\n return first.line === (second.startLine || second.line);\n }\n\n function nobreaknonadjacent(left, right) {\n if (!state.option.laxbreak && !sameLine(left, right)) {\n warning(\"W014\", right, right.value);\n }\n }\n\n function nolinebreak(t) {\n if (!sameLine(t, state.tokens.next)) {\n warning(\"E022\", t, t.value);\n }\n }\n function checkComma(opts) {\n var prev = state.tokens.prev;\n var curr = state.tokens.curr;\n opts = opts || {};\n\n if (!sameLine(prev, curr)) {\n if (!state.option.laxcomma) {\n if (checkComma.first) {\n warning(\"I001\", curr);\n checkComma.first = false;\n }\n warning(\"W014\", prev, curr.value);\n }\n }\n\n if (state.tokens.next.identifier && !(opts.property && state.inES5())) {\n switch (state.tokens.next.value) {\n case \"break\":\n case \"case\":\n case \"catch\":\n case \"continue\":\n case \"default\":\n case \"do\":\n case \"else\":\n case \"finally\":\n case \"for\":\n case \"if\":\n case \"in\":\n case \"instanceof\":\n case \"return\":\n case \"switch\":\n case \"throw\":\n case \"try\":\n case \"var\":\n case \"let\":\n case \"while\":\n case \"with\":\n error(\"E024\", state.tokens.next, state.tokens.next.value);\n return false;\n }\n }\n\n if (state.tokens.next.type === \"(punctuator)\") {\n switch (state.tokens.next.value) {\n case \"}\":\n case \"]\":\n case \",\":\n case \")\":\n if (opts.allowTrailing) {\n return true;\n }\n\n error(\"E024\", state.tokens.next, state.tokens.next.value);\n return false;\n }\n }\n return true;\n }\n function symbol(s, p) {\n var x = state.syntax[s];\n if (!x || typeof x !== \"object\") {\n state.syntax[s] = x = {\n id: s,\n lbp: p,\n rbp: p,\n value: s\n };\n }\n return x;\n }\n function delim(s) {\n var x = symbol(s, 0);\n x.delim = true;\n return x;\n }\n function stmt(s, f) {\n var x = delim(s);\n x.identifier = x.reserved = true;\n x.fud = f;\n return x;\n }\n function blockstmt(s, f) {\n var x = stmt(s, f);\n x.block = true;\n return x;\n }\n function reserveName(x) {\n var c = x.id.charAt(0);\n if ((c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\")) {\n x.identifier = x.reserved = true;\n }\n return x;\n }\n function prefix(s, f) {\n var x = symbol(s, 150);\n reserveName(x);\n\n x.nud = (typeof f === \"function\") ? f : function(context) {\n this.arity = \"unary\";\n this.right = expression(context, 150);\n\n if (this.id === \"++\" || this.id === \"--\") {\n if (state.option.plusplus) {\n warning(\"W016\", this, this.id);\n }\n\n if (this.right) {\n checkLeftSideAssign(context, this.right, this);\n }\n }\n\n return this;\n };\n\n return x;\n }\n function type(s, f) {\n var x = symbol(s, 0);\n x.type = s;\n x.nud = f;\n return x;\n }\n function reserve(name, func) {\n var x = type(name, func);\n x.identifier = true;\n x.reserved = true;\n return x;\n }\n function FutureReservedWord(name, meta) {\n var x = type(name, state.syntax[\"(identifier)\"].nud);\n\n meta = meta || {};\n meta.isFutureReservedWord = true;\n\n x.value = name;\n x.identifier = true;\n x.reserved = true;\n x.meta = meta;\n\n return x;\n }\n function infix(s, f, p, w) {\n var x = symbol(s, p);\n reserveName(x);\n x.infix = true;\n x.led = function(context, left) {\n if (!w) {\n nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n }\n if ((s === \"in\" || s === \"instanceof\") && left.id === \"!\") {\n warning(\"W018\", left, \"!\");\n }\n if (typeof f === \"function\") {\n return f(context, left, this);\n } else {\n this.left = left;\n this.right = expression(context, p);\n return this;\n }\n };\n return x;\n }\n function application(s) {\n var x = symbol(s, 42);\n\n x.infix = true;\n x.led = function(context, left) {\n nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n\n this.left = left;\n this.right = doFunction(context, { type: \"arrow\", loneArg: left });\n return this;\n };\n return x;\n }\n function relation(s, f) {\n var x = symbol(s, 100);\n\n x.infix = true;\n x.led = function(context, left) {\n nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n this.left = left;\n var right = this.right = expression(context, 100);\n\n if (isIdentifier(left, \"NaN\") || isIdentifier(right, \"NaN\")) {\n warning(\"W019\", this);\n } else if (f) {\n f.apply(this, [context, left, right]);\n }\n\n if (!left || !right) {\n quit(\"E041\", state.tokens.curr);\n }\n\n if (left.id === \"!\") {\n warning(\"W018\", left, \"!\");\n }\n\n if (right.id === \"!\") {\n warning(\"W018\", right, \"!\");\n }\n\n return this;\n };\n return x;\n }\n function beginsUnaryExpression(token) {\n return token.arity === \"unary\" && token.id !== \"++\" && token.id !== \"--\";\n }\n\n var typeofValues = {};\n typeofValues.legacy = [\n \"xml\",\n \"unknown\"\n ];\n typeofValues.es3 = [\n \"undefined\", \"boolean\", \"number\", \"string\", \"function\", \"object\",\n ];\n typeofValues.es3 = typeofValues.es3.concat(typeofValues.legacy);\n typeofValues.es6 = typeofValues.es3.concat(\"symbol\", \"bigint\");\n function isTypoTypeof(left, right, state) {\n var values;\n\n if (state.option.notypeof)\n return false;\n\n if (!left || !right)\n return false;\n\n values = state.inES6() ? typeofValues.es6 : typeofValues.es3;\n\n if (right.type === \"(identifier)\" && right.value === \"typeof\" && left.type === \"(string)\") {\n if (left.value === \"bigint\") {\n if (!state.inES11()) {\n warning(\"W119\", left, \"BigInt\", \"11\");\n }\n\n return false;\n }\n\n return !_.includes(values, left.value);\n }\n\n return false;\n }\n function isGlobalEval(left, state) {\n var isGlobal = false;\n if (left.type === \"this\" && state.funct[\"(context)\"] === null) {\n isGlobal = true;\n }\n else if (left.type === \"(identifier)\") {\n if (state.option.node && left.value === \"global\") {\n isGlobal = true;\n }\n\n else if (state.option.browser && (left.value === \"window\" || left.value === \"document\")) {\n isGlobal = true;\n }\n }\n\n return isGlobal;\n }\n function findNativePrototype(left) {\n var natives = [\n \"Array\", \"ArrayBuffer\", \"Boolean\", \"Collator\", \"DataView\", \"Date\",\n \"DateTimeFormat\", \"Error\", \"EvalError\", \"Float32Array\", \"Float64Array\",\n \"Function\", \"Infinity\", \"Intl\", \"Int16Array\", \"Int32Array\", \"Int8Array\",\n \"Iterator\", \"Number\", \"NumberFormat\", \"Object\", \"RangeError\",\n \"ReferenceError\", \"RegExp\", \"StopIteration\", \"String\", \"SyntaxError\",\n \"TypeError\", \"Uint16Array\", \"Uint32Array\", \"Uint8Array\", \"Uint8ClampedArray\",\n \"URIError\"\n ];\n\n function walkPrototype(obj) {\n if (typeof obj !== \"object\") return;\n return obj.right === \"prototype\" ? obj : walkPrototype(obj.left);\n }\n\n function walkNative(obj) {\n while (!obj.identifier && typeof obj.left === \"object\")\n obj = obj.left;\n\n if (obj.identifier && natives.indexOf(obj.value) >= 0 &&\n state.funct[\"(scope)\"].isPredefined(obj.value)) {\n return obj.value;\n }\n }\n\n var prototype = walkPrototype(left);\n if (prototype) return walkNative(prototype);\n }\n function checkLeftSideAssign(context, left, assignToken, options) {\n\n var allowDestructuring = options && options.allowDestructuring;\n\n assignToken = assignToken || left;\n\n if (state.option.freeze) {\n var nativeObject = findNativePrototype(left);\n if (nativeObject)\n warning(\"W121\", left, nativeObject);\n }\n\n if (left.identifier && !left.isMetaProperty) {\n state.funct[\"(scope)\"].block.reassign(left.value, left);\n }\n\n if (left.id === \".\") {\n if (!left.left || left.left.value === \"arguments\" && !state.isStrict()) {\n warning(\"W143\", assignToken);\n }\n\n state.nameStack.set(state.tokens.prev);\n return true;\n } else if (left.id === \"{\" || left.id === \"[\") {\n if (!allowDestructuring || !left.destructAssign) {\n if (left.id === \"{\" || !left.left) {\n warning(\"E031\", assignToken);\n } else if (left.left.value === \"arguments\" && !state.isStrict()) {\n warning(\"W143\", assignToken);\n }\n }\n\n if (left.id === \"[\") {\n state.nameStack.set(left.right);\n }\n\n return true;\n } else if (left.identifier && !isReserved(context, left) && !left.isMetaProperty) {\n if (state.funct[\"(scope)\"].bindingtype(left.value) === \"exception\") {\n warning(\"W022\", left);\n }\n\n if (left.value === \"eval\" && state.isStrict()) {\n error(\"E031\", assignToken);\n return false;\n } else if (left.value === \"arguments\") {\n if (!state.isStrict()) {\n warning(\"W143\", assignToken);\n } else {\n error(\"E031\", assignToken);\n return false;\n }\n }\n state.nameStack.set(left);\n return true;\n }\n\n error(\"E031\", assignToken);\n\n return false;\n }\n function assignop(s, f) {\n var x = infix(s, typeof f === \"function\" ? f : function(context, left, that) {\n that.left = left;\n\n checkLeftSideAssign(context, left, that, { allowDestructuring: true });\n\n that.right = expression(context, 10);\n\n return that;\n }, 20);\n\n x.exps = true;\n x.assign = true;\n\n return x;\n }\n function bitwise(s, f, p) {\n var x = symbol(s, p);\n reserveName(x);\n x.infix = true;\n x.led = (typeof f === \"function\") ? f : function(context, left) {\n if (state.option.bitwise) {\n warning(\"W016\", this, this.id);\n }\n this.left = left;\n this.right = expression(context, p);\n return this;\n };\n return x;\n }\n function bitwiseassignop(s) {\n symbol(s, 20).exps = true;\n return infix(s, function(context, left, that) {\n if (state.option.bitwise) {\n warning(\"W016\", that, that.id);\n }\n\n checkLeftSideAssign(context, left, that);\n\n that.right = expression(context, 10);\n\n return that;\n }, 20);\n }\n function suffix(s) {\n var x = symbol(s, 150);\n\n x.led = function(context, left) {\n if (state.option.plusplus) {\n warning(\"W016\", this, this.id);\n }\n\n checkLeftSideAssign(context, left, this);\n\n this.left = left;\n return this;\n };\n return x;\n }\n function optionalidentifier(context, isName, preserve) {\n if (!state.tokens.next.identifier) {\n return;\n }\n\n if (!preserve) {\n advance();\n }\n\n var curr = state.tokens.curr;\n\n if (isReserved(context, curr) && !(isName && state.inES5())) {\n warning(\"W024\", state.tokens.curr, state.tokens.curr.id);\n }\n\n return curr.value;\n }\n function spreadrest(operation) {\n if (!checkPunctuator(state.tokens.next, \"...\")) {\n return false;\n }\n\n if (!state.inES6(true)) {\n warning(\"W119\", state.tokens.next, operation + \" operator\", \"6\");\n }\n advance();\n\n if (checkPunctuator(state.tokens.next, \"...\")) {\n warning(\"E024\", state.tokens.next, \"...\");\n while (checkPunctuator(state.tokens.next, \"...\")) {\n advance();\n }\n }\n\n return true;\n }\n function identifier(context, isName) {\n var i = optionalidentifier(context, isName, false);\n if (i) {\n return i;\n }\n\n error(\"E030\", state.tokens.next, state.tokens.next.value);\n if (state.tokens.next.id !== \";\") {\n advance();\n }\n }\n function reachable(controlToken) {\n var i = 0, t;\n if (state.tokens.next.id !== \";\" || controlToken.inBracelessBlock) {\n return;\n }\n for (;;) {\n do {\n t = peek(i);\n i += 1;\n } while (t.id !== \"(end)\" && t.id === \"(comment)\");\n\n if (t.reach) {\n return;\n }\n\n if (t.id !== \"(endline)\") {\n if (isFunction(t, i)) {\n if (state.option.latedef === true) {\n warning(\"W026\", t);\n }\n break;\n }\n\n warning(\"W027\", t, t.value, controlToken.value);\n break;\n }\n }\n\n function isFunction(t, i) {\n if (t.id === \"function\") {\n return true;\n }\n if (t.id === \"async\") {\n t = peek(i);\n return t.id === \"function\";\n }\n }\n }\n function parseFinalSemicolon(stmt) {\n if (state.tokens.next.id !== \";\") {\n if (state.tokens.next.isUnclosed) return advance();\n\n var isSameLine = sameLine(state.tokens.curr, state.tokens.next) &&\n state.tokens.next.id !== \"(end)\";\n var blockEnd = checkPunctuator(state.tokens.next, \"}\");\n\n if (isSameLine && !blockEnd && !(stmt.id === \"do\" && state.inES6(true))) {\n errorAt(\"E058\", state.tokens.curr.line, state.tokens.curr.character);\n } else if (!state.option.asi) {\n if (!(blockEnd && isSameLine && state.option.lastsemic)) {\n warningAt(\"W033\", state.tokens.curr.line, state.tokens.curr.character);\n }\n }\n } else {\n advance(\";\");\n }\n }\n function statement(context) {\n var i = indent, r, t = state.tokens.next, hasOwnScope = false;\n\n context |= prodParams.initial;\n\n if (t.id === \";\") {\n advance(\";\");\n return;\n }\n var res = isReserved(context, t);\n\n if (res && t.meta && t.meta.isFutureReservedWord && !t.fud) {\n warning(\"W024\", t, t.id);\n res = false;\n }\n\n if (t.identifier && !res && peek().id === \":\") {\n advance();\n advance(\":\");\n\n hasOwnScope = true;\n state.funct[\"(scope)\"].stack();\n state.funct[\"(scope)\"].block.addLabel(t.value, { token: state.tokens.curr });\n\n if (!state.tokens.next.labelled && state.tokens.next.value !== \"{\") {\n warning(\"W028\", state.tokens.next, t.value, state.tokens.next.value);\n }\n\n t = state.tokens.next;\n }\n\n if (t.id === \"{\") {\n var iscase = (state.funct[\"(verb)\"] === \"case\" && state.tokens.curr.value === \":\");\n block(context, true, true, false, false, iscase);\n\n if (hasOwnScope) {\n state.funct[\"(scope)\"].unstack();\n }\n\n return;\n }\n\n r = expression(context, 0);\n\n if (r && !(r.identifier && r.value === \"function\") &&\n !(r.type === \"(punctuator)\" && r.left &&\n r.left.identifier && r.left.value === \"function\")) {\n if (!state.isStrict() && state.stmtMissingStrict()) {\n warning(\"E007\");\n }\n }\n\n if (!t.block) {\n if (!state.option.expr && (!r || !r.exps)) {\n warning(\"W030\", state.tokens.curr);\n } else if (state.option.nonew && r && r.left && r.id === \"(\" && r.left.id === \"new\") {\n warning(\"W031\", t);\n }\n\n parseFinalSemicolon(t);\n }\n\n indent = i;\n if (hasOwnScope) {\n state.funct[\"(scope)\"].unstack();\n }\n return r;\n }\n function statements(context) {\n var a = [], p;\n\n while (!state.tokens.next.reach && state.tokens.next.id !== \"(end)\") {\n if (state.tokens.next.id === \";\") {\n p = peek();\n\n if (!p || (p.id !== \"(\" && p.id !== \"[\")) {\n warning(\"W032\");\n }\n\n advance(\";\");\n } else {\n a.push(statement(context));\n }\n }\n return a;\n }\n function directives() {\n var current = state.tokens.next;\n while (state.tokens.next.id === \"(string)\") {\n var next = peekIgnoreEOL();\n if (!isEndOfExpr(0, current, next)) {\n break;\n }\n current = next;\n\n advance();\n var directive = state.tokens.curr.value;\n if (state.directive[directive] ||\n (directive === \"use strict\" && state.option.strict === \"implied\")) {\n warning(\"W034\", state.tokens.curr, directive);\n }\n if (directive === \"use strict\" && state.inES7() &&\n !state.funct[\"(global)\"] && state.funct[\"(hasSimpleParams)\"] === false) {\n error(\"E065\", state.tokens.curr);\n }\n\n state.directive[directive] = state.tokens.curr;\n\n parseFinalSemicolon(current);\n }\n\n if (state.isStrict()) {\n state.option.undef = true;\n }\n }\n function block(context, ordinary, stmt, isfunc, isfatarrow, iscase) {\n var a,\n b = inblock,\n old_indent = indent,\n m,\n t,\n d;\n\n inblock = ordinary;\n\n t = state.tokens.next;\n\n var metrics = state.funct[\"(metrics)\"];\n metrics.nestedBlockDepth += 1;\n metrics.verifyMaxNestedBlockDepthPerFunction();\n\n if (state.tokens.next.id === \"{\") {\n advance(\"{\");\n state.funct[\"(scope)\"].stack();\n\n if (state.tokens.next.id !== \"}\") {\n indent += state.option.indent;\n while (!ordinary && state.tokens.next.from > indent) {\n indent += state.option.indent;\n }\n\n if (isfunc) {\n m = {};\n for (d in state.directive) {\n m[d] = state.directive[d];\n }\n directives();\n\n state.funct[\"(isStrict)\"] = state.isStrict();\n\n if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n if (!m[\"use strict\"] && !state.isStrict()) {\n warning(\"E007\");\n }\n }\n }\n\n a = statements(context);\n\n metrics.statementCount += a.length;\n\n indent -= state.option.indent;\n } else if (isfunc) {\n state.funct[\"(isStrict)\"] = state.isStrict();\n }\n\n advance(\"}\", t);\n\n if (isfunc) {\n state.funct[\"(scope)\"].validateParams(isfatarrow);\n if (m) {\n state.directive = m;\n }\n }\n\n state.funct[\"(scope)\"].unstack();\n\n indent = old_indent;\n } else if (!ordinary) {\n if (isfunc) {\n state.funct[\"(scope)\"].stack();\n\n if (stmt && !isfatarrow && !state.inMoz()) {\n error(\"W118\", state.tokens.curr, \"function closure expressions\");\n }\n\n if (isfatarrow) {\n state.funct[\"(scope)\"].validateParams(true);\n }\n\n var expr = expression(context, 10);\n\n if (state.option.noreturnawait && context & prodParams.async &&\n expr.identifier && expr.value === \"await\") {\n warning(\"W146\", expr);\n }\n\n if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n if (!state.isStrict()) {\n warning(\"E007\");\n }\n }\n\n state.funct[\"(scope)\"].unstack();\n } else {\n error(\"E021\", state.tokens.next, \"{\", state.tokens.next.value);\n }\n } else {\n\n state.funct[\"(scope)\"].stack();\n\n if (!stmt || state.option.curly) {\n warning(\"W116\", state.tokens.next, \"{\", state.tokens.next.value);\n }\n var supportsFnDecl = state.funct[\"(verb)\"] === \"if\" ||\n state.tokens.curr.id === \"else\";\n\n state.tokens.next.inBracelessBlock = true;\n indent += state.option.indent;\n a = [statement(context)];\n indent -= state.option.indent;\n\n if (a[0] && a[0].declaration &&\n !(supportsFnDecl && a[0].id === \"function\")) {\n error(\"E048\", a[0], a[0].id[0].toUpperCase() + a[0].id.slice(1));\n }\n\n state.funct[\"(scope)\"].unstack();\n }\n switch (state.funct[\"(verb)\"]) {\n case \"break\":\n case \"continue\":\n case \"return\":\n case \"throw\":\n if (iscase) {\n break;\n }\n default:\n state.funct[\"(verb)\"] = null;\n }\n\n inblock = b;\n if (ordinary && state.option.noempty && (!a || a.length === 0)) {\n warning(\"W035\", state.tokens.prev);\n }\n metrics.nestedBlockDepth -= 1;\n return a;\n }\n function countMember(m) {\n if (membersOnly && typeof membersOnly[m] !== \"boolean\") {\n warning(\"W036\", state.tokens.curr, m);\n }\n if (typeof member[m] === \"number\") {\n member[m] += 1;\n } else {\n member[m] = 1;\n }\n }\n\n type(\"(number)\", function() {\n if (state.tokens.next.id === \".\") {\n warning(\"W005\", this);\n }\n\n return this;\n });\n\n type(\"(string)\", function() {\n return this;\n });\n\n state.syntax[\"(identifier)\"] = {\n type: \"(identifier)\",\n lbp: 0,\n identifier: true,\n\n nud: function(context) {\n var v = this.value;\n var isLoneArrowParam = state.tokens.next.id === \"=>\";\n\n if (isReserved(context, this)) {\n warning(\"W024\", this, v);\n } else if (!isLoneArrowParam && !state.funct[\"(comparray)\"].check(v)) {\n state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n }\n\n return this;\n },\n\n led: function() {\n error(\"E033\", state.tokens.next, state.tokens.next.value);\n }\n };\n\n var baseTemplateSyntax = {\n identifier: false,\n template: true,\n };\n state.syntax[\"(template)\"] = _.extend({\n lbp: 155,\n type: \"(template)\",\n nud: doTemplateLiteral,\n led: doTemplateLiteral,\n noSubst: false\n }, baseTemplateSyntax);\n\n state.syntax[\"(template middle)\"] = _.extend({\n lbp: 0,\n type: \"(template middle)\",\n noSubst: false\n }, baseTemplateSyntax);\n\n state.syntax[\"(template tail)\"] = _.extend({\n lbp: 0,\n type: \"(template tail)\",\n tail: true,\n noSubst: false\n }, baseTemplateSyntax);\n\n state.syntax[\"(no subst template)\"] = _.extend({\n lbp: 155,\n type: \"(template)\",\n nud: doTemplateLiteral,\n led: doTemplateLiteral,\n noSubst: true,\n tail: true // mark as tail, since it's always the last component\n }, baseTemplateSyntax);\n\n type(\"(regexp)\", function() {\n return this;\n });\n\n delim(\"(endline)\");\n (function(x) {\n x.line = x.from = 0;\n })(delim(\"(begin)\"));\n delim(\"(end)\").reach = true;\n delim(\"(error)\").reach = true;\n delim(\"}\").reach = true;\n delim(\")\");\n delim(\"]\");\n delim(\"\\\"\").reach = true;\n delim(\"'\").reach = true;\n delim(\";\");\n delim(\":\").reach = true;\n delim(\"#\");\n\n reserve(\"else\");\n reserve(\"case\").reach = true;\n reserve(\"catch\");\n reserve(\"default\").reach = true;\n reserve(\"finally\");\n reserve(\"true\", function() { return this; });\n reserve(\"false\", function() { return this; });\n reserve(\"null\", function() { return this; });\n reserve(\"this\", function() {\n if (state.isStrict() && !isMethod() &&\n !state.option.validthis && ((state.funct[\"(statement)\"] &&\n state.funct[\"(name)\"].charAt(0) > \"Z\") || state.funct[\"(global)\"])) {\n warning(\"W040\", this);\n }\n\n return this;\n });\n\n (function(superSymbol) {\n superSymbol.rbp = 161;\n })(reserve(\"super\", function() {\n superNud.call(state.tokens.curr, this);\n\n return this;\n }));\n\n assignop(\"=\", \"assign\");\n assignop(\"+=\", \"assignadd\");\n assignop(\"-=\", \"assignsub\");\n assignop(\"*=\", \"assignmult\");\n assignop(\"/=\", \"assigndiv\").nud = function() {\n error(\"E014\");\n };\n assignop(\"%=\", \"assignmod\");\n assignop(\"**=\", function(context, left, that) {\n if (!state.inES7()) {\n warning(\"W119\", that, \"Exponentiation operator\", \"7\");\n }\n\n that.left = left;\n\n checkLeftSideAssign(context, left, that);\n\n that.right = expression(context, 10);\n\n return that;\n });\n\n bitwiseassignop(\"&=\");\n bitwiseassignop(\"|=\");\n bitwiseassignop(\"^=\");\n bitwiseassignop(\"<<=\");\n bitwiseassignop(\">>=\");\n bitwiseassignop(\">>>=\");\n infix(\",\", function(context, left, that) {\n if (state.option.nocomma) {\n warning(\"W127\", that);\n }\n\n that.left = left;\n\n if (checkComma()) {\n that.right = expression(context, 10);\n } else {\n that.right = null;\n }\n\n return that;\n }, 10, true);\n\n infix(\"?\", function(context, left, that) {\n increaseComplexityCount();\n that.left = left;\n that.right = expression(context & ~prodParams.noin, 10);\n advance(\":\");\n expression(context, 10);\n return that;\n }, 30);\n\n infix(\"||\", function(context, left, that) {\n increaseComplexityCount();\n that.left = left;\n that.right = expression(context, 40);\n return that;\n }, 40);\n\n var andPrecedence = 50;\n infix(\"&&\", function(context, left, that) {\n increaseComplexityCount();\n that.left = left;\n that.right = expression(context, andPrecedence);\n return that;\n }, andPrecedence);\n\n infix(\"??\", function(context, left, that) {\n if (!left.paren && (left.id === \"||\" || left.id === \"&&\")) {\n error(\"E024\", that, \"??\");\n }\n\n if (!state.inES11()) {\n warning(\"W119\", that, \"nullish coalescing\", \"11\");\n }\n\n increaseComplexityCount();\n that.left = left;\n var right = that.right = expression(context, 39);\n\n if (!right) {\n error(\"E024\", state.tokens.next, state.tokens.next.id);\n } else if (!right.paren && (right.id === \"||\" || right.id === \"&&\")) {\n error(\"E024\", that.right, that.right.id);\n }\n\n return that;\n }, 39);\n infix(\"**\", function(context, left, that) {\n if (!state.inES7()) {\n warning(\"W119\", that, \"Exponentiation operator\", \"7\");\n }\n if (!left.paren && beginsUnaryExpression(left)) {\n error(\"E024\", that, \"**\");\n }\n\n that.left = left;\n that.right = expression(context, that.rbp);\n return that;\n }, 150);\n state.syntax[\"**\"].rbp = 140;\n bitwise(\"|\", \"bitor\", 70);\n bitwise(\"^\", \"bitxor\", 80);\n bitwise(\"&\", \"bitand\", 90);\n relation(\"==\", function(context, left, right) {\n var eqnull = state.option.eqnull &&\n ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n switch (true) {\n case !eqnull && state.option.eqeqeq:\n this.from = this.character;\n warning(\"W116\", this, \"===\", \"==\");\n break;\n case isTypoTypeof(right, left, state):\n warning(\"W122\", this, right.value);\n break;\n case isTypoTypeof(left, right, state):\n warning(\"W122\", this, left.value);\n break;\n }\n\n return this;\n });\n relation(\"===\", function(context, left, right) {\n if (isTypoTypeof(right, left, state)) {\n warning(\"W122\", this, right.value);\n } else if (isTypoTypeof(left, right, state)) {\n warning(\"W122\", this, left.value);\n }\n return this;\n });\n relation(\"!=\", function(context, left, right) {\n var eqnull = state.option.eqnull &&\n ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n if (!eqnull && state.option.eqeqeq) {\n this.from = this.character;\n warning(\"W116\", this, \"!==\", \"!=\");\n } else if (isTypoTypeof(right, left, state)) {\n warning(\"W122\", this, right.value);\n } else if (isTypoTypeof(left, right, state)) {\n warning(\"W122\", this, left.value);\n }\n return this;\n });\n relation(\"!==\", function(context, left, right) {\n if (isTypoTypeof(right, left, state)) {\n warning(\"W122\", this, right.value);\n } else if (isTypoTypeof(left, right, state)) {\n warning(\"W122\", this, left.value);\n }\n return this;\n });\n relation(\"<\");\n relation(\">\");\n relation(\"<=\");\n relation(\">=\");\n bitwise(\"<<\", \"shiftleft\", 120);\n bitwise(\">>\", \"shiftright\", 120);\n bitwise(\">>>\", \"shiftrightunsigned\", 120);\n infix(\"in\", \"in\", 120);\n infix(\"instanceof\", function(context, left, token) {\n var right;\n var scope = state.funct[\"(scope)\"];\n token.left = left;\n token.right = right = expression(context, 120);\n if (!right) {\n return token;\n }\n\n if (right.id === \"(number)\" ||\n right.id === \"(string)\" ||\n right.value === \"null\" ||\n (right.value === \"undefined\" && !scope.has(\"undefined\")) ||\n right.arity === \"unary\" ||\n right.id === \"{\" ||\n (right.id === \"[\" && !right.right) ||\n right.id === \"(regexp)\" ||\n (right.id === \"(template)\" && !right.tag)) {\n error(\"E060\");\n }\n\n if (right.id === \"function\") {\n warning(\"W139\");\n }\n\n return token;\n }, 120);\n infix(\"+\", function(context, left, that) {\n var next = state.tokens.next;\n var right;\n that.left = left;\n that.right = right = expression(context, 130);\n\n if (left && right && left.id === \"(string)\" && right.id === \"(string)\") {\n left.value += right.value;\n left.character = right.character;\n if (!state.option.scripturl && reg.javascriptURL.test(left.value)) {\n warning(\"W050\", left);\n }\n return left;\n }\n\n if (next.id === \"+\" || next.id === \"++\") {\n warning(\"W007\", that.right);\n }\n\n return that;\n }, 130);\n prefix(\"+\", function(context) {\n var next = state.tokens.next;\n this.arity = \"unary\";\n this.right = expression(context, 150);\n\n if (next.id === \"+\" || next.id === \"++\") {\n warning(\"W007\", this.right);\n }\n\n return this;\n });\n infix(\"-\", function(context, left, that) {\n var next = state.tokens.next;\n that.left = left;\n that.right = expression(context, 130);\n\n if (next.id === \"-\" || next.id === \"--\") {\n warning(\"W006\", that.right);\n }\n\n return that;\n }, 130);\n prefix(\"-\", function(context) {\n var next = state.tokens.next;\n this.arity = \"unary\";\n this.right = expression(context, 150);\n\n if (next.id === \"-\" || next.id === \"--\") {\n warning(\"W006\", this.right);\n }\n\n return this;\n });\n infix(\"*\", \"mult\", 140);\n infix(\"/\", \"div\", 140);\n infix(\"%\", \"mod\", 140);\n\n suffix(\"++\");\n prefix(\"++\", \"preinc\");\n state.syntax[\"++\"].exps = true;\n\n suffix(\"--\");\n prefix(\"--\", \"predec\");\n state.syntax[\"--\"].exps = true;\n\n prefix(\"delete\", function(context) {\n this.arity = \"unary\";\n var p = expression(context, 150);\n if (!p) {\n return this;\n }\n\n if (p.id !== \".\" && p.id !== \"[\") {\n warning(\"W051\");\n }\n this.first = p;\n if (p.identifier && !state.isStrict()) {\n p.forgiveUndef = true;\n }\n return this;\n }).exps = true;\n\n prefix(\"~\", function(context) {\n if (state.option.bitwise) {\n warning(\"W016\", this, \"~\");\n }\n this.arity = \"unary\";\n this.right = expression(context, 150);\n return this;\n });\n\n infix(\"...\");\n\n prefix(\"!\", function(context) {\n this.arity = \"unary\";\n this.right = expression(context, 150);\n\n if (!this.right) { // '!' followed by nothing? Give up.\n quit(\"E041\", this);\n }\n\n if (bang[this.right.id] === true) {\n warning(\"W018\", this, \"!\");\n }\n return this;\n });\n\n prefix(\"typeof\", function(context) {\n this.arity = \"unary\";\n var p = expression(context, 150);\n this.first = this.right = p;\n\n if (!p) { // 'typeof' followed by nothing? Give up.\n quit(\"E041\", this);\n }\n if (p.identifier) {\n p.forgiveUndef = true;\n }\n return this;\n });\n prefix(\"new\", function(context) {\n var mp = metaProperty(context, \"target\", function() {\n if (!state.inES6(true)) {\n warning(\"W119\", state.tokens.prev, \"new.target\", \"6\");\n }\n var inFunction, c = state.funct;\n while (c) {\n inFunction = !c[\"(global)\"];\n if (!c[\"(arrow)\"]) { break; }\n c = c[\"(context)\"];\n }\n if (!inFunction) {\n warning(\"W136\", state.tokens.prev, \"new.target\");\n }\n });\n if (mp) { return mp; }\n\n var opening = state.tokens.next;\n var c = expression(context, 155), i;\n\n if (!c) {\n return this;\n }\n\n if (!c.paren && c.rbp > 160) {\n error(\"E024\", opening, opening.value);\n }\n\n if (c.id !== \"function\") {\n if (c.identifier) {\n switch (c.value) {\n case \"Number\":\n case \"String\":\n case \"Boolean\":\n case \"Math\":\n case \"JSON\":\n warning(\"W053\", state.tokens.prev, c.value);\n break;\n case \"Symbol\":\n if (state.inES6()) {\n warning(\"W053\", state.tokens.prev, c.value);\n }\n break;\n case \"Function\":\n if (!state.option.evil) {\n warning(\"W054\");\n }\n break;\n case \"Date\":\n case \"RegExp\":\n case \"this\":\n break;\n default:\n i = c.value.substr(0, 1);\n if (state.option.newcap && (i < \"A\" || i > \"Z\") &&\n !state.funct[\"(scope)\"].isPredefined(c.value)) {\n warning(\"W055\", state.tokens.curr);\n }\n }\n } else {\n if (c.id === \"?.\" && !c.paren) {\n error(\"E024\", c, \"?.\");\n } else if (c.id !== \".\" && c.id !== \"[\" && c.id !== \"(\") {\n warning(\"W056\", state.tokens.curr);\n }\n }\n } else {\n if (!state.option.supernew)\n warning(\"W057\", this);\n }\n if (state.tokens.next.id !== \"(\" && !state.option.supernew) {\n warning(\"W058\", state.tokens.curr, state.tokens.curr.value);\n }\n this.first = this.right = c;\n return this;\n });\n state.syntax[\"new\"].exps = true;\n\n\n var classDeclaration = blockstmt(\"class\", function(context) {\n var className, classNameToken;\n\n if (!state.inES6()) {\n warning(\"W104\", state.tokens.curr, \"class\", \"6\");\n }\n state.inClassBody = true;\n if (state.tokens.next.identifier && state.tokens.next.value !== \"extends\") {\n classNameToken = state.tokens.next;\n className = classNameToken.value;\n identifier(context);\n state.funct[\"(scope)\"].addbinding(className, {\n type: \"class\",\n initialized: false,\n token: classNameToken\n });\n }\n if (state.tokens.next.value === \"extends\") {\n advance(\"extends\");\n expression(context, 0);\n }\n\n if (classNameToken) {\n this.name = classNameToken;\n state.funct[\"(scope)\"].initialize(className);\n } else {\n this.name = null;\n }\n\n state.funct[\"(scope)\"].stack();\n classBody(this, context);\n return this;\n });\n classDeclaration.exps = true;\n classDeclaration.declaration = true;\n prefix(\"class\", function(context) {\n var className, classNameToken;\n\n if (!state.inES6()) {\n warning(\"W104\", state.tokens.curr, \"class\", \"6\");\n }\n state.inClassBody = true;\n if (state.tokens.next.identifier && state.tokens.next.value !== \"extends\") {\n classNameToken = state.tokens.next;\n className = classNameToken.value;\n identifier(context);\n }\n if (state.tokens.next.value === \"extends\") {\n advance(\"extends\");\n expression(context, 0);\n }\n\n state.funct[\"(scope)\"].stack();\n if (classNameToken) {\n this.name = classNameToken;\n state.funct[\"(scope)\"].addbinding(className, {\n type: \"class\",\n initialized: true,\n token: classNameToken\n });\n state.funct[\"(scope)\"].block.use(className, classNameToken);\n } else {\n this.name = null;\n }\n\n classBody(this, context);\n return this;\n });\n\n function classBody(classToken, context) {\n var props = Object.create(null);\n var name, accessorType, token, isStatic, inGenerator, hasConstructor;\n if (state.tokens.next.value === \"{\") {\n advance(\"{\");\n } else {\n warning(\"W116\", state.tokens.curr, \"identifier\", state.tokens.next.type); //?\n advance();\n }\n\n while (state.tokens.next.value !== \"}\") {\n isStatic = false;\n inGenerator = false;\n context &= ~prodParams.preAsync;\n\n if (state.tokens.next.value === \"static\" &&\n !checkPunctuator(peek(), \"(\")) {\n isStatic = true;\n advance();\n }\n\n if (state.tokens.next.value === \"async\") {\n if (!checkPunctuator(peek(), \"(\")) {\n context |= prodParams.preAsync;\n advance();\n\n nolinebreak(state.tokens.curr);\n\n if (checkPunctuator(state.tokens.next, \"*\")) {\n inGenerator = true;\n advance(\"*\");\n\n if (!state.inES9()) {\n warning(\"W119\", state.tokens.next, \"async generators\", \"9\");\n }\n }\n\n if (!state.inES8()) {\n warning(\"W119\", state.tokens.curr, \"async functions\", \"8\");\n }\n }\n }\n\n if (state.tokens.next.value === \"*\") {\n inGenerator = true;\n advance();\n }\n\n token = state.tokens.next;\n\n if ((token.value === \"set\" || token.value === \"get\") && !checkPunctuator(peek(), \"(\")) {\n if (inGenerator) {\n error(\"E024\", token, token.value);\n }\n accessorType = token.value;\n advance();\n token = state.tokens.next;\n\n if (!isStatic && token.value === \"constructor\") {\n error(\"E049\", token, \"class \" + accessorType + \"ter method\", token.value);\n } else if (isStatic && token.value === \"prototype\") {\n error(\"E049\", token, \"static class \" + accessorType + \"ter method\", token.value);\n }\n } else {\n accessorType = null;\n }\n\n switch (token.value) {\n case \";\":\n warning(\"W032\", token);\n advance();\n break;\n case \"constructor\":\n if (isStatic) {\n name = propertyName(context);\n saveProperty(props, name, token, true, isStatic);\n doMethod(classToken, context, name, inGenerator);\n } else {\n if (inGenerator || context & prodParams.preAsync) {\n error(\"E024\", token, token.value);\n } else if (hasConstructor) {\n error(\"E024\", token, token.value);\n } else {\n hasConstructor = !accessorType && !isStatic;\n }\n advance();\n doMethod(classToken, context, state.nameStack.infer());\n }\n break;\n case \"[\":\n name = computedPropertyName(context);\n doMethod(classToken, context, name, inGenerator);\n break;\n default:\n name = propertyName(context);\n if (name === undefined) {\n error(\"E024\", token, token.value);\n advance();\n break;\n }\n\n if (accessorType) {\n saveAccessor(accessorType, props, name, token, true, isStatic);\n name = state.nameStack.infer();\n } else {\n if (isStatic && name === \"prototype\") {\n error(\"E049\", token, \"static class method\", name);\n }\n\n saveProperty(props, name, token, true, isStatic);\n }\n\n doMethod(classToken, context, name, inGenerator);\n break;\n }\n }\n advance(\"}\");\n checkProperties(props);\n\n state.inClassBody = false;\n state.funct[\"(scope)\"].unstack();\n }\n\n function doMethod(classToken, context, name, generator) {\n if (generator) {\n if (!state.inES6()) {\n warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n }\n }\n\n if (state.tokens.next.value !== \"(\") {\n error(\"E054\", state.tokens.next, state.tokens.next.value);\n advance();\n if (state.tokens.next.value === \"{\") {\n advance();\n if (state.tokens.next.value === \"}\") {\n warning(\"W116\", state.tokens.next, \"(\", state.tokens.next.value);\n advance();\n identifier(context);\n advance();\n }\n return;\n } else {\n while (state.tokens.next.value !== \"(\") {\n advance();\n }\n }\n }\n\n doFunction(context, { name: name,\n type: generator ? \"generator\" : null,\n isMethod: true,\n statement: classToken });\n }\n\n prefix(\"void\").exps = true;\n\n infix(\".\", function(context, left, that) {\n var m = identifier(context, true);\n\n if (typeof m === \"string\") {\n countMember(m);\n }\n\n that.left = left;\n that.right = m;\n\n if (m && m === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n warning(\"W001\");\n }\n\n if (left && left.value === \"arguments\" && (m === \"callee\" || m === \"caller\")) {\n if (state.option.noarg)\n warning(\"W059\", left, m);\n else if (state.isStrict())\n error(\"E008\");\n } else if (!state.option.evil && left && left.value === \"document\" &&\n (m === \"write\" || m === \"writeln\")) {\n warning(\"W060\", left);\n }\n\n if (!state.option.evil && (m === \"eval\" || m === \"execScript\")) {\n if (isGlobalEval(left, state)) {\n warning(\"W061\");\n }\n }\n\n return that;\n }, 160, true);\n\n infix(\"?.\", function(context, left, that) {\n if (!state.inES11()) {\n warning(\"W119\", state.tokens.curr, \"Optional chaining\", \"11\");\n }\n\n\n if (checkPunctuator(state.tokens.next, \"[\")) {\n that.left = left;\n advance();\n that.right = state.tokens.curr.led(context, left);\n } else if (checkPunctuator(state.tokens.next, \"(\")) {\n that.left = left;\n advance();\n that.right = state.tokens.curr.led(context, left);\n that.exps = true;\n } else {\n state.syntax[\".\"].led.call(that, context, left);\n }\n\n if (state.tokens.next.type === \"(template)\") {\n error(\"E024\", state.tokens.next, \"`\");\n }\n\n return that;\n }, 160, true);\n function isTypicalCallExpression(token) {\n return token.identifier || token.id === \".\" || token.id === \"[\" ||\n token.id === \"=>\" || token.id === \"(\" || token.id === \"&&\" ||\n token.id === \"||\" || token.id === \"?\" || token.id === \"async\" ||\n token.id === \"?.\" || (state.inES6() && token[\"(name)\"]);\n }\n\n infix(\"(\", function(context, left, that) {\n if (state.option.immed && left && !left.immed && left.id === \"function\") {\n warning(\"W062\");\n }\n\n if (state.option.asi && checkPunctuators(state.tokens.prev, [\")\", \"]\"]) &&\n !sameLine(state.tokens.prev, state.tokens.curr)) {\n warning(\"W014\", state.tokens.curr, state.tokens.curr.id);\n }\n\n var n = 0;\n var p = [];\n\n if (left) {\n if (left.type === \"(identifier)\") {\n var newcapRe = /^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/;\n var newcapIgnore = [\n \"Array\", \"Boolean\", \"Date\", \"Error\", \"Function\", \"Number\",\n \"Object\", \"RegExp\", \"String\", \"Symbol\"\n ];\n if (newcapRe.test(left.value) && newcapIgnore.indexOf(left.value) === -1) {\n if (left.value === \"Math\") {\n warning(\"W063\", left);\n } else if (state.option.newcap) {\n warning(\"W064\", left);\n }\n }\n }\n }\n\n if (state.tokens.next.id !== \")\") {\n for (;;) {\n spreadrest(\"spread\");\n\n p[p.length] = expression(context, 10);\n n += 1;\n if (state.tokens.next.id !== \",\") {\n break;\n }\n advance(\",\");\n checkComma({ allowTrailing: true });\n\n if (state.tokens.next.id === \")\") {\n if (!state.inES8()) {\n warning(\"W119\", state.tokens.curr, \"Trailing comma in arguments lists\", \"8\");\n }\n\n break;\n }\n }\n }\n\n advance(\")\");\n\n if (typeof left === \"object\") {\n if (!state.inES5() && left.value === \"parseInt\" && n === 1) {\n warning(\"W065\", state.tokens.curr);\n }\n if (!state.option.evil) {\n if (left.value === \"eval\" || left.value === \"Function\" ||\n left.value === \"execScript\") {\n warning(\"W061\", left);\n } else if (p[0] && p[0].id === \"(string)\" &&\n (left.value === \"setTimeout\" ||\n left.value === \"setInterval\")) {\n warning(\"W066\", left);\n addEvalCode(left, p[0]);\n } else if (p[0] && p[0].id === \"(string)\" &&\n left.value === \".\" &&\n left.left.value === \"window\" &&\n (left.right === \"setTimeout\" ||\n left.right === \"setInterval\")) {\n warning(\"W066\", left);\n addEvalCode(left, p[0]);\n }\n }\n if (!isTypicalCallExpression(left)) {\n warning(\"W067\", that);\n }\n }\n\n that.left = left;\n return that;\n }, 155, true).exps = true;\n\n function peekThroughParens(parens) {\n var pn = state.tokens.next;\n var i = -1;\n var pn1;\n\n do {\n if (pn.value === \"(\") {\n parens += 1;\n } else if (pn.value === \")\") {\n parens -= 1;\n }\n\n i += 1;\n pn1 = pn;\n pn = peek(i);\n } while (!(parens === 0 && pn1.value === \")\") && pn.type !== \"(end)\");\n\n return pn;\n }\n\n prefix(\"(\", function(context, rbp) {\n var ret, triggerFnExpr, first, last;\n var opening = state.tokens.curr;\n var preceeding = state.tokens.prev;\n var isNecessary = !state.option.singleGroups;\n var pn = peekThroughParens(1);\n\n if (state.tokens.next.id === \"function\") {\n triggerFnExpr = state.tokens.next.immed = true;\n }\n if (pn.value === \"=>\") {\n pn.funct = doFunction(context, { type: \"arrow\", parsedOpening: true });\n return pn;\n }\n if (state.tokens.next.id === \")\") {\n advance(\")\");\n return;\n }\n\n ret = expression(context, 0);\n\n advance(\")\", this);\n\n if (!ret) {\n return;\n }\n\n ret.paren = true;\n\n if (state.option.immed && ret && ret.id === \"function\") {\n if (state.tokens.next.id !== \"(\" &&\n state.tokens.next.id !== \".\" && state.tokens.next.id !== \"[\") {\n warning(\"W068\", this);\n }\n }\n\n if (ret.id === \",\") {\n first = ret.left;\n while (first.id === \",\") {\n first = first.left;\n }\n\n last = ret.right;\n } else {\n first = last = ret;\n\n if (!isNecessary) {\n if (!triggerFnExpr) {\n triggerFnExpr = ret.id === \"async\";\n }\n\n isNecessary =\n (opening.beginsStmt && (ret.id === \"{\" || triggerFnExpr)) ||\n (triggerFnExpr &&\n (!isEndOfExpr() || state.tokens.prev.id !== \"}\")) ||\n (ret.id === \"=>\" && !isEndOfExpr()) ||\n (ret.id === \"{\" && preceeding.id === \"=>\") ||\n (beginsUnaryExpression(ret) && state.tokens.next.id === \"**\") ||\n (preceeding.id === \"??\" && (ret.id === \"&&\" || ret.id === \"||\")) ||\n (ret.type === \"(number)\" &&\n checkPunctuator(pn, \".\") && /^\\d+$/.test(ret.value)) ||\n (opening.beginsStmt && ret.id === \"=\" && ret.left.id === \"{\") ||\n (ret.id === \"?.\" &&\n (preceeding.id === \"new\" || state.tokens.next.type === \"(template)\"));\n }\n }\n if (!isNecessary && (isOperator(first) || first !== last)) {\n isNecessary =\n (rbp > first.lbp) ||\n (rbp > 0 && rbp === first.lbp) ||\n (!isEndOfExpr() && last.rbp < state.tokens.next.lbp);\n }\n\n if (!isNecessary) {\n warning(\"W126\", opening);\n }\n\n return ret;\n });\n\n application(\"=>\").rbp = 161;\n\n infix(\"[\", function(context, left, that) {\n var e, s, canUseDot;\n\n if (state.option.asi && checkPunctuators(state.tokens.prev, [\")\", \"]\"]) &&\n !sameLine(state.tokens.prev, state.tokens.curr)) {\n warning(\"W014\", state.tokens.curr, state.tokens.curr.id);\n }\n\n e = expression(context & ~prodParams.noin, 0);\n\n if (e && e.type === \"(string)\") {\n if (!state.option.evil && (e.value === \"eval\" || e.value === \"execScript\")) {\n if (isGlobalEval(left, state)) {\n warning(\"W061\");\n }\n }\n\n countMember(e.value);\n if (!state.option.sub && reg.identifier.test(e.value)) {\n s = state.syntax[e.value];\n\n if (s) {\n canUseDot = !isReserved(context, s);\n } else {\n canUseDot = e.value !== \"eval\" && e.value !== \"arguments\";\n }\n\n if (canUseDot) {\n warning(\"W069\", state.tokens.prev, e.value);\n }\n }\n }\n advance(\"]\", that);\n\n if (e && e.value === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n warning(\"W001\");\n }\n\n that.left = left;\n that.right = e;\n return that;\n }, 160, true);\n\n function comprehensiveArrayExpression(context) {\n var res = {};\n res.exps = true;\n state.funct[\"(comparray)\"].stack();\n var reversed = false;\n if (state.tokens.next.value !== \"for\") {\n reversed = true;\n if (!state.inMoz()) {\n warning(\"W116\", state.tokens.next, \"for\", state.tokens.next.value);\n }\n state.funct[\"(comparray)\"].setState(\"use\");\n res.right = expression(context, 10);\n }\n\n advance(\"for\");\n if (state.tokens.next.value === \"each\") {\n advance(\"each\");\n if (!state.inMoz()) {\n warning(\"W118\", state.tokens.curr, \"for each\");\n }\n }\n advance(\"(\");\n state.funct[\"(comparray)\"].setState(\"define\");\n res.left = expression(context, 130);\n if (_.includes([\"in\", \"of\"], state.tokens.next.value)) {\n advance();\n } else {\n error(\"E045\", state.tokens.curr);\n }\n state.funct[\"(comparray)\"].setState(\"generate\");\n expression(context, 10);\n\n advance(\")\");\n if (state.tokens.next.value === \"if\") {\n advance(\"if\");\n advance(\"(\");\n state.funct[\"(comparray)\"].setState(\"filter\");\n expression(context, 10);\n advance(\")\");\n }\n\n if (!reversed) {\n state.funct[\"(comparray)\"].setState(\"use\");\n res.right = expression(context, 10);\n }\n\n advance(\"]\");\n state.funct[\"(comparray)\"].unstack();\n return res;\n }\n\n prefix(\"[\", function(context) {\n var blocktype = lookupBlockType();\n if (blocktype.isCompArray) {\n if (!state.option.esnext && !state.inMoz()) {\n warning(\"W118\", state.tokens.curr, \"array comprehension\");\n }\n return comprehensiveArrayExpression(context);\n } else if (blocktype.isDestAssign) {\n this.destructAssign = destructuringPattern(context, {\n openingParsed: true,\n assignment: true\n });\n return this;\n }\n var b = !sameLine(state.tokens.curr, state.tokens.next);\n this.first = [];\n if (b) {\n indent += state.option.indent;\n if (state.tokens.next.from === indent + state.option.indent) {\n indent += state.option.indent;\n }\n }\n while (state.tokens.next.id !== \"(end)\") {\n while (state.tokens.next.id === \",\") {\n if (!state.option.elision) {\n if (!state.inES5()) {\n warning(\"W070\");\n } else {\n warning(\"W128\");\n do {\n advance(\",\");\n } while (state.tokens.next.id === \",\");\n continue;\n }\n }\n advance(\",\");\n }\n\n if (state.tokens.next.id === \"]\") {\n break;\n }\n\n spreadrest(\"spread\");\n\n this.first.push(expression(context, 10));\n if (state.tokens.next.id === \",\") {\n advance(\",\");\n checkComma({ allowTrailing: true });\n if (state.tokens.next.id === \"]\" && !state.inES5()) {\n warning(\"W070\", state.tokens.curr);\n break;\n }\n } else {\n if (state.option.trailingcomma && state.inES5()) {\n warningAt(\"W140\", state.tokens.curr.line, state.tokens.curr.character);\n }\n break;\n }\n }\n if (b) {\n indent -= state.option.indent;\n }\n advance(\"]\", this);\n return this;\n });\n\n\n function isMethod() {\n return !!state.funct[\"(method)\"];\n }\n function propertyName(context) {\n var id = optionalidentifier(context, true);\n\n if (!id) {\n if (state.tokens.next.id === \"(string)\") {\n id = state.tokens.next.value;\n advance();\n } else if (state.tokens.next.id === \"(number)\") {\n id = state.tokens.next.value.toString();\n advance();\n }\n }\n\n if (id === \"hasOwnProperty\") {\n warning(\"W001\");\n }\n\n return id;\n }\n function functionparams(context, options) {\n var next;\n var paramsIds = [];\n var ident;\n var tokens = [];\n var t;\n var pastDefault = false;\n var pastRest = false;\n var arity = 0;\n var loneArg = options && options.loneArg;\n var hasDestructuring = false;\n\n if (loneArg && loneArg.identifier === true) {\n state.funct[\"(scope)\"].addParam(loneArg.value, loneArg);\n return { arity: 1, params: [ loneArg.value ], isSimple: true };\n }\n\n next = state.tokens.next;\n\n if (!options || !options.parsedOpening) {\n advance(\"(\");\n }\n\n if (state.tokens.next.id === \")\") {\n advance(\")\");\n return;\n }\n\n function addParam(addParamArgs) {\n state.funct[\"(scope)\"].addParam.apply(state.funct[\"(scope)\"], addParamArgs);\n }\n\n for (;;) {\n arity++;\n var currentParams = [];\n\n pastRest = spreadrest(\"rest\");\n\n if (_.includes([\"{\", \"[\"], state.tokens.next.id)) {\n hasDestructuring = true;\n tokens = destructuringPattern(context);\n for (t in tokens) {\n t = tokens[t];\n if (t.id) {\n paramsIds.push(t.id);\n currentParams.push([t.id, t.token]);\n }\n }\n } else {\n ident = identifier(context);\n\n if (ident) {\n paramsIds.push(ident);\n currentParams.push([ident, state.tokens.curr]);\n } else {\n while (!checkPunctuators(state.tokens.next, [\",\", \")\"])) advance();\n }\n }\n if (pastDefault) {\n if (state.tokens.next.id !== \"=\") {\n error(\"W138\", state.tokens.curr);\n }\n }\n if (state.tokens.next.id === \"=\") {\n if (!state.inES6()) {\n warning(\"W119\", state.tokens.next, \"default parameters\", \"6\");\n }\n\n if (pastRest) {\n error(\"E062\", state.tokens.next);\n }\n\n advance(\"=\");\n pastDefault = true;\n expression(context, 10);\n }\n currentParams.forEach(addParam);\n if (state.tokens.next.id === \",\") {\n if (pastRest) {\n warning(\"W131\", state.tokens.next);\n }\n advance(\",\");\n checkComma({ allowTrailing: true });\n }\n\n if (state.tokens.next.id === \")\") {\n if (state.tokens.curr.id === \",\" && !state.inES8()) {\n warning(\"W119\", state.tokens.curr, \"Trailing comma in function parameters\", \"8\");\n }\n\n advance(\")\", next);\n return {\n arity: arity,\n params: paramsIds,\n isSimple: !hasDestructuring && !pastRest && !pastDefault\n };\n }\n }\n }\n function functor(name, token, overwrites) {\n var funct = {\n \"(name)\" : name,\n \"(breakage)\" : 0,\n \"(loopage)\" : 0,\n \"(isStrict)\" : \"unknown\",\n\n \"(global)\" : false,\n\n \"(line)\" : null,\n \"(character)\" : null,\n \"(metrics)\" : null,\n \"(statement)\" : null,\n \"(context)\" : null,\n \"(scope)\" : null,\n \"(comparray)\" : null,\n \"(yielded)\" : null,\n \"(arrow)\" : null,\n \"(async)\" : null,\n \"(params)\" : null\n };\n\n if (token) {\n _.extend(funct, {\n \"(line)\" : token.line,\n \"(character)\": token.character,\n \"(metrics)\" : createMetrics(token)\n });\n }\n\n _.extend(funct, overwrites);\n\n if (funct[\"(context)\"]) {\n funct[\"(scope)\"] = funct[\"(context)\"][\"(scope)\"];\n funct[\"(comparray)\"] = funct[\"(context)\"][\"(comparray)\"];\n }\n\n return funct;\n }\n function hasParsedCode(funct) {\n return funct[\"(global)\"] && !funct[\"(verb)\"];\n }\n function doTemplateLiteral(context, leftOrRbp) {\n var ctx = this.context;\n var noSubst = this.noSubst;\n var depth = this.depth;\n var left = typeof leftOrRbp === \"number\" ? null : leftOrRbp;\n\n if (!noSubst) {\n while (!end()) {\n if (!state.tokens.next.template || state.tokens.next.depth > depth) {\n expression(context, 0); // should probably have different rbp?\n } else {\n advance();\n }\n }\n }\n\n return {\n id: \"(template)\",\n type: \"(template)\",\n tag: left\n };\n\n function end() {\n if (state.tokens.curr.template && state.tokens.curr.tail &&\n state.tokens.curr.context === ctx) {\n return true;\n }\n var complete = (state.tokens.next.template && state.tokens.next.tail &&\n state.tokens.next.context === ctx);\n if (complete) advance();\n return complete || state.tokens.next.isUnclosed;\n }\n }\n function doFunction(context, options) {\n var f, token, name, statement, classExprBinding, isGenerator, isArrow,\n isMethod, ignoreLoopFunc;\n var oldOption = state.option;\n var oldIgnored = state.ignored;\n var isAsync = context & prodParams.preAsync;\n\n if (options) {\n name = options.name;\n statement = options.statement;\n classExprBinding = options.classExprBinding;\n isGenerator = options.type === \"generator\";\n isArrow = options.type === \"arrow\";\n isMethod = options.isMethod;\n ignoreLoopFunc = options.ignoreLoopFunc;\n }\n\n context &= ~prodParams.noin;\n context &= ~prodParams.tryClause;\n\n if (isAsync) {\n context |= prodParams.async;\n } else {\n context &= ~prodParams.async;\n }\n\n if (isGenerator) {\n context |= prodParams.yield;\n } else if (!isArrow) {\n context &= ~prodParams.yield;\n }\n context &= ~prodParams.preAsync;\n\n state.option = Object.create(state.option);\n state.ignored = Object.create(state.ignored);\n\n state.funct = functor(name || state.nameStack.infer(), state.tokens.next, {\n \"(statement)\": statement,\n \"(context)\": state.funct,\n \"(arrow)\": isArrow,\n \"(method)\": isMethod,\n \"(async)\": isAsync\n });\n\n f = state.funct;\n token = state.tokens.curr;\n\n functions.push(state.funct);\n state.funct[\"(scope)\"].stack(\"functionouter\");\n var internallyAccessibleName = !isMethod && (name || classExprBinding);\n if (internallyAccessibleName) {\n state.funct[\"(scope)\"].block.add(internallyAccessibleName,\n classExprBinding ? \"class\" : \"function\", state.tokens.curr, false);\n }\n\n if (!isArrow) {\n state.funct[\"(scope)\"].funct.add(\"arguments\", \"var\", token, false);\n }\n state.funct[\"(scope)\"].stack(\"functionparams\");\n\n var paramsInfo = functionparams(context, options);\n\n if (paramsInfo) {\n state.funct[\"(params)\"] = paramsInfo.params;\n state.funct[\"(hasSimpleParams)\"] = paramsInfo.isSimple;\n state.funct[\"(metrics)\"].arity = paramsInfo.arity;\n state.funct[\"(metrics)\"].verifyMaxParametersPerFunction();\n } else {\n state.funct[\"(params)\"] = [];\n state.funct[\"(metrics)\"].arity = 0;\n state.funct[\"(hasSimpleParams)\"] = true;\n }\n\n if (isArrow) {\n context &= ~prodParams.yield;\n\n if (!state.inES6(true)) {\n warning(\"W119\", state.tokens.curr, \"arrow function syntax (=>)\", \"6\");\n }\n\n if (!options.loneArg) {\n advance(\"=>\");\n }\n }\n\n block(context, false, true, true, isArrow);\n\n if (!state.option.noyield && isGenerator && !state.funct[\"(yielded)\"]) {\n warning(\"W124\", state.tokens.curr);\n }\n\n state.funct[\"(metrics)\"].verifyMaxStatementsPerFunction();\n state.funct[\"(metrics)\"].verifyMaxComplexityPerFunction();\n state.funct[\"(unusedOption)\"] = state.option.unused;\n state.option = oldOption;\n state.ignored = oldIgnored;\n state.funct[\"(last)\"] = state.tokens.curr.line;\n state.funct[\"(lastcharacter)\"] = state.tokens.curr.character;\n state.funct[\"(scope)\"].unstack(); // also does usage and label checks\n state.funct[\"(scope)\"].unstack();\n\n state.funct = state.funct[\"(context)\"];\n\n if (!ignoreLoopFunc && !state.option.loopfunc && state.funct[\"(loopage)\"]) {\n if (f[\"(outerMutables)\"]) {\n warning(\"W083\", token, f[\"(outerMutables)\"].join(\", \"));\n }\n }\n\n return f;\n }\n\n function createMetrics(functionStartToken) {\n return {\n statementCount: 0,\n nestedBlockDepth: -1,\n ComplexityCount: 1,\n arity: 0,\n\n verifyMaxStatementsPerFunction: function() {\n if (state.option.maxstatements &&\n this.statementCount > state.option.maxstatements) {\n warning(\"W071\", functionStartToken, this.statementCount);\n }\n },\n\n verifyMaxParametersPerFunction: function() {\n if (_.isNumber(state.option.maxparams) &&\n this.arity > state.option.maxparams) {\n warning(\"W072\", functionStartToken, this.arity);\n }\n },\n\n verifyMaxNestedBlockDepthPerFunction: function() {\n if (state.option.maxdepth &&\n this.nestedBlockDepth > 0 &&\n this.nestedBlockDepth === state.option.maxdepth + 1) {\n warning(\"W073\", null, this.nestedBlockDepth);\n }\n },\n\n verifyMaxComplexityPerFunction: function() {\n var max = state.option.maxcomplexity;\n var cc = this.ComplexityCount;\n if (max && cc > max) {\n warning(\"W074\", functionStartToken, cc);\n }\n }\n };\n }\n\n function increaseComplexityCount() {\n state.funct[\"(metrics)\"].ComplexityCount += 1;\n }\n\n function checkCondAssignment(token) {\n if (!token || token.paren) {\n return;\n }\n\n if (token.id === \",\") {\n checkCondAssignment(token.right);\n return;\n }\n\n switch (token.id) {\n case \"=\":\n case \"+=\":\n case \"-=\":\n case \"*=\":\n case \"%=\":\n case \"&=\":\n case \"|=\":\n case \"^=\":\n case \"/=\":\n if (!state.option.boss) {\n warning(\"W084\", token);\n }\n }\n }\n function checkProperties(props) {\n if (state.inES5()) {\n for (var name in props) {\n if (props[name] && props[name].setterToken && !props[name].getterToken &&\n !props[name].static) {\n warning(\"W078\", props[name].setterToken);\n }\n }\n }\n }\n\n function metaProperty(context, name, c) {\n if (checkPunctuator(state.tokens.next, \".\")) {\n var left = state.tokens.curr.id;\n advance(\".\");\n var id = identifier(context);\n state.tokens.curr.isMetaProperty = true;\n if (name !== id) {\n error(\"E057\", state.tokens.prev, left, id);\n } else {\n c();\n }\n return state.tokens.curr;\n }\n }\n (function(x) {\n x.nud = function(context) {\n var b, f, i, params, t, isGeneratorMethod = false, nextVal;\n var props = Object.create(null); // All properties, including accessors\n var isAsyncMethod = false;\n\n b = !sameLine(state.tokens.curr, state.tokens.next);\n if (b) {\n indent += state.option.indent;\n if (state.tokens.next.from === indent + state.option.indent) {\n indent += state.option.indent;\n }\n }\n\n var blocktype = lookupBlockType();\n if (blocktype.isDestAssign) {\n this.destructAssign = destructuringPattern(context, {\n openingParsed: true,\n assignment: true\n });\n return this;\n }\n state.inObjectBody = true;\n for (;;) {\n if (state.tokens.next.id === \"}\") {\n break;\n }\n\n nextVal = state.tokens.next.value;\n if (state.tokens.next.identifier &&\n (peekIgnoreEOL().id === \",\" || peekIgnoreEOL().id === \"}\")) {\n if (!state.inES6()) {\n warning(\"W104\", state.tokens.next, \"object short notation\", \"6\");\n }\n t = expression(context, 10);\n i = t && t.value;\n if (t) {\n saveProperty(props, i, t);\n }\n\n } else if (peek().id !== \":\" && (nextVal === \"get\" || nextVal === \"set\")) {\n advance(nextVal);\n\n if (!state.inES5()) {\n error(\"E034\");\n }\n\n if (state.tokens.next.id === \"[\") {\n i = computedPropertyName(context);\n } else {\n i = propertyName(context);\n if (!i && !state.inES6()) {\n error(\"E035\");\n }\n }\n if (i) {\n saveAccessor(nextVal, props, i, state.tokens.curr);\n }\n\n t = state.tokens.next;\n f = doFunction(context, { isMethod: true });\n params = f[\"(params)\"];\n if (nextVal === \"get\" && i && params.length) {\n warning(\"W076\", t, params[0], i);\n } else if (nextVal === \"set\" && i && f[\"(metrics)\"].arity !== 1) {\n warning(\"W077\", t, i);\n }\n\n } else if (spreadrest(\"spread\")) {\n if (!state.inES9()) {\n warning(\"W119\", state.tokens.next, \"object spread property\", \"9\");\n }\n\n expression(context, 10);\n } else {\n if (state.tokens.next.id === \"async\" && !checkPunctuators(peek(), [\"(\", \":\"])) {\n if (!state.inES8()) {\n warning(\"W119\", state.tokens.next, \"async functions\", \"8\");\n }\n\n isAsyncMethod = true;\n advance();\n\n nolinebreak(state.tokens.curr);\n } else {\n isAsyncMethod = false;\n }\n\n if (state.tokens.next.value === \"*\" && state.tokens.next.type === \"(punctuator)\") {\n if (isAsyncMethod && !state.inES9()) {\n warning(\"W119\", state.tokens.next, \"async generators\", \"9\");\n } else if (!state.inES6()) {\n warning(\"W104\", state.tokens.next, \"generator functions\", \"6\");\n }\n\n advance(\"*\");\n isGeneratorMethod = true;\n } else {\n isGeneratorMethod = false;\n }\n\n if (state.tokens.next.id === \"[\") {\n i = computedPropertyName(context);\n state.nameStack.set(i);\n } else {\n state.nameStack.set(state.tokens.next);\n i = propertyName(context);\n saveProperty(props, i, state.tokens.next);\n\n if (typeof i !== \"string\") {\n break;\n }\n }\n\n if (state.tokens.next.value === \"(\") {\n if (!state.inES6()) {\n warning(\"W104\", state.tokens.curr, \"concise methods\", \"6\");\n }\n\n doFunction(isAsyncMethod ? context | prodParams.preAsync : context, {\n isMethod: true,\n type: isGeneratorMethod ? \"generator\" : null\n });\n } else {\n advance(\":\");\n expression(context, 10);\n }\n }\n\n countMember(i);\n\n if (state.tokens.next.id === \",\") {\n advance(\",\");\n checkComma({ allowTrailing: true, property: true });\n if (state.tokens.next.id === \",\") {\n warning(\"W070\", state.tokens.curr);\n } else if (state.tokens.next.id === \"}\" && !state.inES5()) {\n warning(\"W070\", state.tokens.curr);\n }\n } else {\n if (state.option.trailingcomma && state.inES5()) {\n warningAt(\"W140\", state.tokens.curr.line, state.tokens.curr.character);\n }\n break;\n }\n }\n if (b) {\n indent -= state.option.indent;\n }\n advance(\"}\", this);\n\n checkProperties(props);\n state.inObjectBody = false;\n\n return this;\n };\n x.fud = function() {\n error(\"E036\", state.tokens.curr);\n };\n }(delim(\"{\")));\n\n function destructuringPattern(context, options) {\n var isAssignment = options && options.assignment;\n\n context &= ~prodParams.noin;\n\n if (!state.inES6()) {\n warning(\"W104\", state.tokens.curr,\n isAssignment ? \"destructuring assignment\" : \"destructuring binding\", \"6\");\n }\n\n return destructuringPatternRecursive(context, options);\n }\n\n function destructuringPatternRecursive(context, options) {\n var ids, idx;\n var identifiers = [];\n var openingParsed = options && options.openingParsed;\n var isAssignment = options && options.assignment;\n var recursiveOptions = isAssignment ? { assignment: isAssignment } : null;\n var firstToken = openingParsed ? state.tokens.curr : state.tokens.next;\n\n var nextInnerDE = function() {\n var ident;\n if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n ids = destructuringPatternRecursive(context, recursiveOptions);\n for (idx = 0; idx < ids.length; idx++) {\n identifiers.push({ id: ids[idx].id, token: ids[idx].token });\n }\n } else if (checkPunctuator(state.tokens.next, \",\")) {\n identifiers.push({ id: null, token: state.tokens.curr });\n } else if (checkPunctuator(state.tokens.next, \"(\")) {\n advance(\"(\");\n nextInnerDE();\n advance(\")\");\n } else {\n if (isAssignment) {\n var assignTarget = expression(context, 20);\n if (assignTarget) {\n checkLeftSideAssign(context, assignTarget);\n if (assignTarget.identifier) {\n ident = assignTarget.value;\n }\n }\n } else {\n ident = identifier(context);\n }\n if (ident) {\n identifiers.push({ id: ident, token: state.tokens.curr });\n }\n }\n };\n\n var assignmentProperty = function(context) {\n var id, expr;\n\n if (checkPunctuator(state.tokens.next, \"[\")) {\n advance(\"[\");\n expression(context, 10);\n advance(\"]\");\n advance(\":\");\n nextInnerDE();\n } else if (state.tokens.next.id === \"(string)\" ||\n state.tokens.next.id === \"(number)\") {\n advance();\n advance(\":\");\n nextInnerDE();\n } else {\n var isRest = spreadrest(\"rest\");\n\n if (isRest) {\n if (!state.inES9()) {\n warning(\"W119\", state.tokens.next, \"object rest property\", \"9\");\n }\n if (state.tokens.next.type === \"(identifier)\") {\n id = identifier(context);\n } else {\n expr = expression(context, 10);\n error(\"E030\", expr, expr.value);\n }\n } else {\n id = identifier(context);\n }\n\n if (!isRest && checkPunctuator(state.tokens.next, \":\")) {\n advance(\":\");\n nextInnerDE();\n } else if (id) {\n if (isAssignment) {\n checkLeftSideAssign(context, state.tokens.curr);\n }\n identifiers.push({ id: id, token: state.tokens.curr });\n }\n\n if (isRest && checkPunctuator(state.tokens.next, \",\")) {\n warning(\"W130\", state.tokens.next);\n }\n }\n };\n\n var id, value;\n if (checkPunctuator(firstToken, \"[\")) {\n if (!openingParsed) {\n advance(\"[\");\n }\n if (checkPunctuator(state.tokens.next, \"]\")) {\n warning(\"W137\", state.tokens.curr);\n }\n var element_after_rest = false;\n while (!checkPunctuator(state.tokens.next, \"]\")) {\n var isRest = spreadrest(\"rest\");\n\n nextInnerDE();\n\n if (isRest && !element_after_rest &&\n checkPunctuator(state.tokens.next, \",\")) {\n warning(\"W130\", state.tokens.next);\n element_after_rest = true;\n }\n if (!isRest && checkPunctuator(state.tokens.next, \"=\")) {\n if (checkPunctuator(state.tokens.prev, \"...\")) {\n advance(\"]\");\n } else {\n advance(\"=\");\n }\n id = state.tokens.prev;\n value = expression(context, 10);\n if (value && value.identifier && value.value === \"undefined\") {\n warning(\"W080\", id, id.value);\n }\n }\n if (!checkPunctuator(state.tokens.next, \"]\")) {\n advance(\",\");\n }\n }\n advance(\"]\");\n } else if (checkPunctuator(firstToken, \"{\")) {\n\n if (!openingParsed) {\n advance(\"{\");\n }\n if (checkPunctuator(state.tokens.next, \"}\")) {\n warning(\"W137\", state.tokens.curr);\n }\n while (!checkPunctuator(state.tokens.next, \"}\")) {\n assignmentProperty(context);\n if (checkPunctuator(state.tokens.next, \"=\")) {\n advance(\"=\");\n id = state.tokens.prev;\n value = expression(context, 10);\n if (value && value.identifier && value.value === \"undefined\") {\n warning(\"W080\", id, id.value);\n }\n }\n if (!checkPunctuator(state.tokens.next, \"}\")) {\n advance(\",\");\n if (checkPunctuator(state.tokens.next, \"}\")) {\n break;\n }\n }\n }\n advance(\"}\");\n }\n return identifiers;\n }\n\n function destructuringPatternMatch(tokens, value) {\n var first = value.first;\n\n if (!first)\n return;\n\n _.zip(tokens, Array.isArray(first) ? first : [ first ]).forEach(function(val) {\n var token = val[0];\n var value = val[1];\n\n if (token && value)\n token.first = value;\n else if (token && token.first && !value)\n warning(\"W080\", token.first, token.first.value);\n });\n }\n\n function blockVariableStatement(type, statement, context) {\n\n var noin = context & prodParams.noin;\n var isLet = type === \"let\";\n var isConst = type === \"const\";\n var tokens, lone, value, letblock;\n\n if (!state.inES6()) {\n warning(\"W104\", state.tokens.curr, type, \"6\");\n }\n\n if (isLet && isMozillaLet()) {\n advance(\"(\");\n state.funct[\"(scope)\"].stack();\n letblock = true;\n statement.declaration = false;\n }\n\n statement.first = [];\n for (;;) {\n var names = [];\n if (_.includes([\"{\", \"[\"], state.tokens.next.value)) {\n tokens = destructuringPattern(context);\n lone = false;\n } else {\n tokens = [ { id: identifier(context), token: state.tokens.curr } ];\n lone = true;\n }\n if (!noin && isConst && state.tokens.next.id !== \"=\") {\n warning(\"E012\", state.tokens.curr, state.tokens.curr.value);\n }\n\n for (var t in tokens) {\n if (tokens.hasOwnProperty(t)) {\n t = tokens[t];\n if (t.id === \"let\") {\n warning(\"W024\", t.token, t.id);\n }\n\n if (state.funct[\"(scope)\"].block.isGlobal()) {\n if (predefined[t.id] === false) {\n warning(\"W079\", t.token, t.id);\n }\n }\n if (t.id) {\n state.funct[\"(scope)\"].addbinding(t.id, {\n type: type,\n token: t.token });\n names.push(t.token);\n }\n }\n }\n\n if (state.tokens.next.id === \"=\") {\n statement.hasInitializer = true;\n\n advance(\"=\");\n if (!noin && peek(0).id === \"=\" && state.tokens.next.identifier) {\n warning(\"W120\", state.tokens.next, state.tokens.next.value);\n }\n var id = state.tokens.prev;\n value = expression(context, 10);\n if (value) {\n if (!isConst && value.identifier && value.value === \"undefined\") {\n warning(\"W080\", id, id.value);\n }\n if (!lone) {\n destructuringPatternMatch(names, value);\n }\n }\n }\n if (state.tokens.next.value !== \"in\" && state.tokens.next.value !== \"of\") {\n for (t in tokens) {\n if (tokens.hasOwnProperty(t)) {\n t = tokens[t];\n state.funct[\"(scope)\"].initialize(t.id);\n }\n }\n }\n\n statement.first = statement.first.concat(names);\n\n if (state.tokens.next.id !== \",\") {\n break;\n }\n\n statement.hasComma = true;\n advance(\",\");\n checkComma();\n }\n if (letblock) {\n advance(\")\");\n block(context, true, true);\n statement.block = true;\n state.funct[\"(scope)\"].unstack();\n }\n\n return statement;\n }\n\n var conststatement = stmt(\"const\", function(context) {\n return blockVariableStatement(\"const\", this, context);\n });\n conststatement.exps = true;\n conststatement.declaration = true;\n function isMozillaLet() {\n return state.tokens.next.id === \"(\" && state.inMoz();\n }\n var letstatement = stmt(\"let\", function(context) {\n return blockVariableStatement(\"let\", this, context);\n });\n letstatement.nud = function(context, rbp) {\n if (isMozillaLet()) {\n state.funct[\"(scope)\"].stack();\n advance(\"(\");\n state.tokens.prev.fud(context);\n advance(\")\");\n expression(context, rbp);\n state.funct[\"(scope)\"].unstack();\n } else {\n this.exps = false;\n return state.syntax[\"(identifier)\"].nud.apply(this, arguments);\n }\n };\n letstatement.meta = { es5: true, isFutureReservedWord: false, strictOnly: true };\n letstatement.exps = true;\n letstatement.declaration = true;\n letstatement.useFud = function(context) {\n var next = state.tokens.next;\n var nextIsBindingName;\n\n if (this.line !== next.line && !state.inES6()) {\n return false;\n }\n nextIsBindingName = next.identifier && (!isReserved(context, next) ||\n next.id === \"let\");\n\n return nextIsBindingName || checkPunctuators(next, [\"{\", \"[\"]) ||\n isMozillaLet();\n };\n\n var varstatement = stmt(\"var\", function(context) {\n var noin = context & prodParams.noin;\n var tokens, lone, value, id;\n\n this.first = [];\n for (;;) {\n var names = [];\n if (_.includes([\"{\", \"[\"], state.tokens.next.value)) {\n tokens = destructuringPattern(context);\n lone = false;\n } else {\n tokens = [];\n id = identifier(context);\n\n if (id) {\n tokens.push({ id: id, token: state.tokens.curr });\n }\n\n lone = true;\n }\n\n if (state.option.varstmt) {\n warning(\"W132\", this);\n }\n\n\n for (var t in tokens) {\n if (tokens.hasOwnProperty(t)) {\n t = tokens[t];\n if (state.funct[\"(global)\"] && !state.impliedClosure()) {\n if (predefined[t.id] === false) {\n warning(\"W079\", t.token, t.id);\n } else if (state.option.futurehostile === false) {\n if ((!state.inES5() && vars.ecmaIdentifiers[5][t.id] === false) ||\n (!state.inES6() && vars.ecmaIdentifiers[6][t.id] === false)) {\n warning(\"W129\", t.token, t.id);\n }\n }\n }\n if (t.id) {\n state.funct[\"(scope)\"].addbinding(t.id, {\n type: \"var\",\n token: t.token });\n\n names.push(t.token);\n }\n }\n }\n\n if (state.tokens.next.id === \"=\") {\n this.hasInitializer = true;\n\n state.nameStack.set(state.tokens.curr);\n\n advance(\"=\");\n if (peek(0).id === \"=\" && state.tokens.next.identifier) {\n if (!noin &&\n !state.funct[\"(params)\"] ||\n state.funct[\"(params)\"].indexOf(state.tokens.next.value) === -1) {\n warning(\"W120\", state.tokens.next, state.tokens.next.value);\n }\n }\n id = state.tokens.prev;\n value = expression(context, 10);\n if (value) {\n if (!state.funct[\"(loopage)\"] && value.identifier &&\n value.value === \"undefined\") {\n warning(\"W080\", id, id.value);\n }\n if (!lone) {\n destructuringPatternMatch(names, value);\n }\n }\n }\n\n this.first = this.first.concat(names);\n\n if (state.tokens.next.id !== \",\") {\n break;\n }\n this.hasComma = true;\n advance(\",\");\n checkComma();\n }\n\n return this;\n });\n varstatement.exps = true;\n\n blockstmt(\"function\", function(context) {\n var inexport = context & prodParams.export;\n var generator = false;\n var isAsync = context & prodParams.preAsync;\n var labelType = \"\";\n\n if (isAsync) {\n labelType = \"async \";\n }\n\n if (state.tokens.next.value === \"*\") {\n if (isAsync && !state.inES9()) {\n warning(\"W119\", state.tokens.prev, \"async generators\", \"9\");\n } else if (!isAsync && !state.inES6(true)) {\n warning(\"W119\", state.tokens.next, \"function*\", \"6\");\n }\n\n advance(\"*\");\n labelType += \"generator \";\n generator = true;\n }\n\n labelType += \"function\";\n\n if (inblock) {\n warning(\"W082\", state.tokens.curr);\n }\n this.name = optionalidentifier(context) ? state.tokens.curr : null;\n\n if (!this.name) {\n if (!inexport) {\n warning(\"W025\");\n }\n } else {\n state.funct[\"(scope)\"].addbinding(this.name.value, {\n type: labelType,\n token: state.tokens.curr,\n initialized: true });\n }\n\n var f = doFunction(context, {\n name: this.name && this.name.value,\n statement: this,\n type: generator ? \"generator\" : null,\n ignoreLoopFunc: inblock // a declaration may already have warned\n });\n var enablesStrictMode = f[\"(isStrict)\"] && !state.isStrict();\n if (this.name && (f[\"(name)\"] === \"arguments\" || f[\"(name)\"] === \"eval\") &&\n enablesStrictMode) {\n error(\"E008\", this.name);\n }\n if (state.tokens.next.id === \"(\" && peek().id === \")\" && peek(1).id !== \"=>\" &&\n state.tokens.next.line === state.tokens.curr.line) {\n error(\"E039\");\n }\n return this;\n }).declaration = true;\n\n prefix(\"function\", function(context) {\n var generator = false;\n var isAsync = context & prodParams.preAsync;\n\n if (state.tokens.next.value === \"*\") {\n if (isAsync && !state.inES9()) {\n warning(\"W119\", state.tokens.prev, \"async generators\", \"9\");\n } else if (!isAsync && !state.inES6(true)) {\n warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n }\n\n advance(\"*\");\n generator = true;\n }\n this.name = optionalidentifier(isAsync ? context | prodParams.async : context) ?\n state.tokens.curr : null;\n\n var f = doFunction(context, {\n name: this.name && this.name.value,\n type: generator ? \"generator\" : null\n });\n\n if (generator && this.name && this.name.value === \"yield\") {\n error(\"E024\", this.name, \"yield\");\n }\n\n if (this.name && (f[\"(name)\"] === \"arguments\" || f[\"(name)\"] === \"eval\") &&\n f[\"(isStrict)\"]) {\n error(\"E008\", this.name);\n }\n\n return this;\n });\n\n blockstmt(\"if\", function(context) {\n var t = state.tokens.next;\n increaseComplexityCount();\n advance(\"(\");\n var expr = expression(context, 0);\n\n if (!expr) {\n quit(\"E041\", this);\n }\n\n checkCondAssignment(expr);\n var forinifcheck = null;\n if (state.option.forin && state.forinifcheckneeded) {\n state.forinifcheckneeded = false; // We only need to analyze the first if inside the loop\n forinifcheck = state.forinifchecks[state.forinifchecks.length - 1];\n if (expr.type === \"(punctuator)\" && expr.value === \"!\") {\n forinifcheck.type = \"(negative)\";\n } else {\n forinifcheck.type = \"(positive)\";\n }\n }\n\n advance(\")\", t);\n var s = block(context, true, true);\n if (forinifcheck && forinifcheck.type === \"(negative)\") {\n if (s && s[0] && s[0].type === \"(identifier)\" && s[0].value === \"continue\") {\n forinifcheck.type = \"(negative-with-continue)\";\n }\n }\n\n if (state.tokens.next.id === \"else\") {\n advance(\"else\");\n if (state.tokens.next.id === \"if\" || state.tokens.next.id === \"switch\") {\n statement(context);\n } else {\n block(context, true, true);\n }\n }\n return this;\n });\n\n blockstmt(\"try\", function(context) {\n var b;\n var hasParameter = false;\n\n function catchParameter() {\n advance(\"(\");\n\n if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n var tokens = destructuringPattern(context);\n _.each(tokens, function(token) {\n if (token.id) {\n state.funct[\"(scope)\"].addParam(token.id, token.token, \"exception\");\n }\n });\n } else if (state.tokens.next.type !== \"(identifier)\") {\n warning(\"E030\", state.tokens.next, state.tokens.next.value);\n } else {\n state.funct[\"(scope)\"].addParam(identifier(context), state.tokens.curr, \"exception\");\n }\n\n if (state.tokens.next.value === \"if\") {\n if (!state.inMoz()) {\n warning(\"W118\", state.tokens.curr, \"catch filter\");\n }\n advance(\"if\");\n expression(context, 0);\n }\n\n advance(\")\");\n }\n\n block(context | prodParams.tryClause, true);\n\n while (state.tokens.next.id === \"catch\") {\n increaseComplexityCount();\n if (b && (!state.inMoz())) {\n warning(\"W118\", state.tokens.next, \"multiple catch blocks\");\n }\n advance(\"catch\");\n if (state.tokens.next.id !== \"{\") {\n state.funct[\"(scope)\"].stack(\"catchparams\");\n hasParameter = true;\n catchParameter();\n } else if (!state.inES10()) {\n warning(\"W119\", state.tokens.curr, \"optional catch binding\", \"10\");\n }\n block(context, false);\n\n if (hasParameter) {\n state.funct[\"(scope)\"].unstack();\n hasParameter = false;\n }\n b = true;\n }\n\n if (state.tokens.next.id === \"finally\") {\n advance(\"finally\");\n block(context, true);\n return;\n }\n\n if (!b) {\n error(\"E021\", state.tokens.next, \"catch\", state.tokens.next.value);\n }\n\n return this;\n });\n\n blockstmt(\"while\", function(context) {\n var t = state.tokens.next;\n state.funct[\"(breakage)\"] += 1;\n state.funct[\"(loopage)\"] += 1;\n increaseComplexityCount();\n advance(\"(\");\n checkCondAssignment(expression(context, 0));\n advance(\")\", t);\n block(context, true, true);\n state.funct[\"(breakage)\"] -= 1;\n state.funct[\"(loopage)\"] -= 1;\n return this;\n }).labelled = true;\n\n blockstmt(\"with\", function(context) {\n var t = state.tokens.next;\n if (state.isStrict()) {\n error(\"E010\", state.tokens.curr);\n } else if (!state.option.withstmt) {\n warning(\"W085\", state.tokens.curr);\n }\n\n advance(\"(\");\n expression(context, 0);\n advance(\")\", t);\n block(context, true, true);\n\n return this;\n });\n\n blockstmt(\"switch\", function(context) {\n var t = state.tokens.next;\n var g = false;\n var noindent = false;\n var seenCase = false;\n\n state.funct[\"(breakage)\"] += 1;\n advance(\"(\");\n checkCondAssignment(expression(context, 0));\n advance(\")\", t);\n t = state.tokens.next;\n advance(\"{\");\n state.funct[\"(scope)\"].stack();\n\n if (state.tokens.next.from === indent)\n noindent = true;\n\n if (!noindent)\n indent += state.option.indent;\n\n for (;;) {\n switch (state.tokens.next.id) {\n case \"case\":\n switch (state.funct[\"(verb)\"]) {\n case \"yield\":\n case \"break\":\n case \"case\":\n case \"continue\":\n case \"return\":\n case \"switch\":\n case \"throw\":\n break;\n case \"default\":\n if (state.option.leanswitch) {\n warning(\"W145\", state.tokens.next);\n }\n\n break;\n default:\n if (!state.tokens.curr.caseFallsThrough) {\n warning(\"W086\", state.tokens.curr, \"case\");\n }\n }\n\n advance(\"case\");\n expression(context, 0);\n seenCase = true;\n increaseComplexityCount();\n g = true;\n advance(\":\");\n state.funct[\"(verb)\"] = \"case\";\n break;\n case \"default\":\n switch (state.funct[\"(verb)\"]) {\n case \"yield\":\n case \"break\":\n case \"continue\":\n case \"return\":\n case \"throw\":\n break;\n case \"case\":\n if (state.option.leanswitch) {\n warning(\"W145\", state.tokens.curr);\n }\n\n break;\n default:\n if (seenCase && !state.tokens.curr.caseFallsThrough) {\n warning(\"W086\", state.tokens.curr, \"default\");\n }\n }\n\n advance(\"default\");\n g = true;\n advance(\":\");\n state.funct[\"(verb)\"] = \"default\";\n break;\n case \"}\":\n if (!noindent)\n indent -= state.option.indent;\n\n advance(\"}\", t);\n state.funct[\"(scope)\"].unstack();\n state.funct[\"(breakage)\"] -= 1;\n state.funct[\"(verb)\"] = undefined;\n return;\n case \"(end)\":\n error(\"E023\", state.tokens.next, \"}\");\n return;\n default:\n indent += state.option.indent;\n if (g) {\n switch (state.tokens.curr.id) {\n case \",\":\n error(\"E040\");\n return;\n case \":\":\n g = false;\n statements(context);\n break;\n default:\n error(\"E025\", state.tokens.curr);\n return;\n }\n } else {\n if (state.tokens.curr.id === \":\") {\n advance(\":\");\n error(\"E024\", state.tokens.curr, \":\");\n statements(context);\n } else {\n error(\"E021\", state.tokens.next, \"case\", state.tokens.next.value);\n return;\n }\n }\n indent -= state.option.indent;\n }\n }\n }).labelled = true;\n\n stmt(\"debugger\", function() {\n if (!state.option.debug) {\n warning(\"W087\", this);\n }\n return this;\n }).exps = true;\n\n (function() {\n var x = stmt(\"do\", function(context) {\n state.funct[\"(breakage)\"] += 1;\n state.funct[\"(loopage)\"] += 1;\n increaseComplexityCount();\n\n this.first = block(context, true, true);\n advance(\"while\");\n var t = state.tokens.next;\n advance(\"(\");\n checkCondAssignment(expression(context, 0));\n advance(\")\", t);\n state.funct[\"(breakage)\"] -= 1;\n state.funct[\"(loopage)\"] -= 1;\n return this;\n });\n x.labelled = true;\n x.exps = true;\n }());\n\n blockstmt(\"for\", function(context) {\n var s, t = state.tokens.next;\n var letscope = false;\n var isAsync = false;\n var foreachtok = null;\n\n if (t.value === \"each\") {\n foreachtok = t;\n advance(\"each\");\n if (!state.inMoz()) {\n warning(\"W118\", state.tokens.curr, \"for each\");\n }\n }\n\n if (state.tokens.next.identifier && state.tokens.next.value === \"await\") {\n advance(\"await\");\n isAsync = true;\n\n if (!(context & prodParams.async)) {\n error(\"E024\", state.tokens.curr, \"await\");\n } else if (!state.inES9()) {\n warning(\"W119\", state.tokens.curr, \"asynchronous iteration\", \"9\");\n }\n }\n\n increaseComplexityCount();\n advance(\"(\");\n var nextop; // contains the token of the \"in\" or \"of\" operator\n var comma; // First comma punctuator at level 0\n var initializer; // First initializer at level 0\n var bindingPower;\n var targets;\n var target;\n var decl;\n var afterNext = peek();\n\n var headContext = context | prodParams.noin;\n\n if (state.tokens.next.id === \"var\") {\n advance(\"var\");\n decl = state.tokens.curr.fud(headContext);\n comma = decl.hasComma ? decl : null;\n initializer = decl.hasInitializer ? decl : null;\n } else if (state.tokens.next.id === \"const\" ||\n (state.tokens.next.id === \"let\" &&\n ((afterNext.identifier && afterNext.id !== \"in\") ||\n checkPunctuators(afterNext, [\"{\", \"[\"])))) {\n advance(state.tokens.next.id);\n letscope = true;\n state.funct[\"(scope)\"].stack();\n decl = state.tokens.curr.fud(headContext);\n comma = decl.hasComma ? decl : null;\n initializer = decl.hasInitializer ? decl : null;\n } else if (!checkPunctuator(state.tokens.next, \";\")) {\n targets = [];\n\n while (state.tokens.next.value !== \"in\" &&\n state.tokens.next.value !== \"of\" &&\n !checkPunctuator(state.tokens.next, \";\")) {\n\n if (checkPunctuators(state.tokens.next, [\"{\", \"[\"])) {\n destructuringPattern(headContext, { assignment: true })\n .forEach(function(elem) {\n this.push(elem.token);\n }, targets);\n if (checkPunctuator(state.tokens.next, \"=\")) {\n advance(\"=\");\n initializer = state.tokens.curr;\n expression(headContext, 10);\n }\n } else {\n target = expression(headContext, 10);\n\n if (target) {\n if (target.type === \"(identifier)\") {\n targets.push(target);\n } else if (checkPunctuator(target, \"=\")) {\n initializer = target;\n targets.push(target);\n }\n }\n }\n\n if (checkPunctuator(state.tokens.next, \",\")) {\n advance(\",\");\n\n if (!comma) {\n comma = state.tokens.curr;\n }\n }\n }\n if (!initializer && !comma) {\n targets.forEach(function(token) {\n if (!state.funct[\"(scope)\"].has(token.value)) {\n warning(\"W088\", token, token.value);\n }\n });\n }\n }\n\n nextop = state.tokens.next;\n\n if (isAsync && nextop.value !== \"of\") {\n error(\"E066\", nextop);\n }\n if (_.includes([\"in\", \"of\"], nextop.value)) {\n if (nextop.value === \"of\") {\n bindingPower = 20;\n\n if (!state.inES6()) {\n warning(\"W104\", nextop, \"for of\", \"6\");\n }\n } else {\n bindingPower = 0;\n }\n if (comma) {\n error(\"W133\", comma, nextop.value, \"more than one ForBinding\");\n }\n if (initializer) {\n error(\"W133\", initializer, nextop.value, \"initializer is forbidden\");\n }\n if (target && !comma && !initializer) {\n checkLeftSideAssign(context, target, nextop);\n }\n\n advance(nextop.value);\n expression(context, bindingPower);\n advance(\")\", t);\n\n if (nextop.value === \"in\" && state.option.forin) {\n state.forinifcheckneeded = true;\n\n if (state.forinifchecks === undefined) {\n state.forinifchecks = [];\n }\n state.forinifchecks.push({\n type: \"(none)\"\n });\n }\n\n state.funct[\"(breakage)\"] += 1;\n state.funct[\"(loopage)\"] += 1;\n\n s = block(context, true, true);\n\n if (nextop.value === \"in\" && state.option.forin) {\n if (state.forinifchecks && state.forinifchecks.length > 0) {\n var check = state.forinifchecks.pop();\n\n if (// No if statement or not the first statement in loop body\n s && s.length > 0 && (typeof s[0] !== \"object\" || s[0].value !== \"if\") ||\n check.type === \"(positive)\" && s.length > 1 ||\n check.type === \"(negative)\") {\n warning(\"W089\", this);\n }\n }\n state.forinifcheckneeded = false;\n }\n\n state.funct[\"(breakage)\"] -= 1;\n state.funct[\"(loopage)\"] -= 1;\n\n } else {\n if (foreachtok) {\n error(\"E045\", foreachtok);\n }\n\n advance(\";\");\n if (decl && decl.first && decl.first[0]) {\n if (decl.value === \"const\" && !decl.hasInitializer) {\n warning(\"E012\", decl, decl.first[0].value);\n }\n\n decl.first.forEach(function(token) {\n state.funct[\"(scope)\"].initialize(token.value);\n });\n }\n state.funct[\"(loopage)\"] += 1;\n if (state.tokens.next.id !== \";\") {\n checkCondAssignment(expression(context, 0));\n }\n\n advance(\";\");\n if (state.tokens.next.id === \";\") {\n error(\"E021\", state.tokens.next, \")\", \";\");\n }\n if (state.tokens.next.id !== \")\") {\n for (;;) {\n expression(context, 0);\n if (state.tokens.next.id !== \",\") {\n break;\n }\n advance(\",\");\n checkComma();\n }\n }\n advance(\")\", t);\n state.funct[\"(breakage)\"] += 1;\n block(context, true, true);\n state.funct[\"(breakage)\"] -= 1;\n state.funct[\"(loopage)\"] -= 1;\n }\n if (letscope) {\n state.funct[\"(scope)\"].unstack();\n }\n return this;\n }).labelled = true;\n\n\n stmt(\"break\", function() {\n var v = state.tokens.next.value;\n\n if (state.tokens.next.identifier &&\n sameLine(state.tokens.curr, state.tokens.next)) {\n if (!state.funct[\"(scope)\"].funct.hasLabel(v)) {\n warning(\"W090\", state.tokens.next, v);\n }\n this.first = state.tokens.next;\n advance();\n } else {\n if (state.funct[\"(breakage)\"] === 0)\n warning(\"W052\", state.tokens.next, this.value);\n }\n\n reachable(this);\n\n return this;\n }).exps = true;\n\n\n stmt(\"continue\", function() {\n var v = state.tokens.next.value;\n\n if (state.funct[\"(breakage)\"] === 0 || !state.funct[\"(loopage)\"]) {\n warning(\"W052\", state.tokens.next, this.value);\n }\n\n if (state.tokens.next.identifier) {\n if (sameLine(state.tokens.curr, state.tokens.next)) {\n if (!state.funct[\"(scope)\"].funct.hasLabel(v)) {\n warning(\"W090\", state.tokens.next, v);\n }\n this.first = state.tokens.next;\n advance();\n }\n }\n\n reachable(this);\n\n return this;\n }).exps = true;\n\n\n stmt(\"return\", function(context) {\n if (sameLine(this, state.tokens.next)) {\n if (state.tokens.next.id !== \";\" && !state.tokens.next.reach) {\n this.first = expression(context, 0);\n\n if (this.first &&\n this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n !this.first.paren && !state.option.boss) {\n warning(\"W093\", this.first);\n }\n\n if (state.option.noreturnawait && context & prodParams.async &&\n !(context & prodParams.tryClause) &&\n this.first.identifier && this.first.value === \"await\") {\n warning(\"W146\", this.first);\n }\n }\n } else {\n if (state.tokens.next.type === \"(punctuator)\" &&\n [\"[\", \"{\", \"+\", \"-\"].indexOf(state.tokens.next.value) > -1) {\n nolinebreak(this); // always warn (Line breaking error)\n }\n }\n\n reachable(this);\n\n return this;\n }).exps = true;\n\n prefix(\"await\", function(context) {\n if (context & prodParams.async) {\n if (!state.funct[\"(params)\"]) {\n error(\"E024\", this, \"await\");\n }\n\n expression(context, 10);\n return this;\n } else {\n this.exps = false;\n return state.syntax[\"(identifier)\"].nud.apply(this, arguments);\n }\n }).exps = true;\n\n (function(asyncSymbol) {\n asyncSymbol.meta = { es5: true, isFutureReservedWord: true, strictOnly: true };\n asyncSymbol.isFunc = function() {\n var next = state.tokens.next;\n var afterParens;\n\n if (this.line !== next.line) {\n return false;\n }\n\n if (next.id === \"function\") {\n return true;\n }\n\n if (next.id === \"(\") {\n afterParens = peekThroughParens(0);\n\n return afterParens.id === \"=>\";\n }\n\n if (next.identifier) {\n return peek().id === \"=>\";\n }\n\n return false;\n };\n asyncSymbol.useFud = asyncSymbol.isFunc;\n asyncSymbol.fud = function(context) {\n if (!state.inES8()) {\n warning(\"W119\", this, \"async functions\", \"8\");\n }\n context |= prodParams.preAsync;\n context |= prodParams.initial;\n this.func = expression(context, 0);\n this.block = this.func.block;\n this.exps = this.func.exps;\n return this;\n };\n asyncSymbol.exps = true;\n delete asyncSymbol.reserved;\n }(prefix(\"async\", function(context, rbp) {\n if (this.isFunc(context)) {\n if (!state.inES8()) {\n warning(\"W119\", this, \"async functions\", \"8\");\n }\n\n context |= prodParams.preAsync;\n this.func = expression(context, rbp);\n this.identifier = false;\n return this;\n }\n\n this.exps = false;\n return state.syntax[\"(identifier)\"].nud.apply(this, arguments);\n })));\n\n (function(yieldSymbol) {\n yieldSymbol.rbp = yieldSymbol.lbp = 25;\n yieldSymbol.exps = true;\n })(prefix(\"yield\", function(context) {\n if (state.inMoz()) {\n return mozYield.call(this, context);\n }\n\n if (!(context & prodParams.yield)) {\n this.exps = false;\n return state.syntax[\"(identifier)\"].nud.apply(this, arguments);\n }\n\n var prev = state.tokens.prev;\n if (!state.funct[\"(params)\"]) {\n error(\"E024\", this, \"yield\");\n }\n\n if (!this.beginsStmt && prev.lbp > 30 && !checkPunctuators(prev, [\"(\"])) {\n error(\"E061\", this);\n }\n\n if (!state.inES6()) {\n warning(\"W104\", state.tokens.curr, \"yield\", \"6\");\n }\n state.funct[\"(yielded)\"] = true;\n\n if (state.tokens.next.value === \"*\") {\n advance(\"*\");\n }\n if (state.tokens.curr.value === \"*\" || sameLine(state.tokens.curr, state.tokens.next)) {\n if (state.tokens.next.nud) {\n\n nobreaknonadjacent(state.tokens.curr, state.tokens.next);\n this.first = expression(context, 10);\n\n if (this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n !this.first.paren && !state.option.boss) {\n warning(\"W093\", this.first);\n }\n } else if (state.tokens.next.led) {\n if (state.tokens.next.id !== \",\") {\n error(\"W017\", state.tokens.next);\n }\n }\n }\n\n return this;\n }));\n var mozYield = function(context) {\n var prev = state.tokens.prev;\n if (state.inES6(true) && !(context & prodParams.yield)) {\n error(\"E046\", state.tokens.curr, \"yield\");\n }\n state.funct[\"(yielded)\"] = true;\n var delegatingYield = false;\n\n if (state.tokens.next.value === \"*\") {\n delegatingYield = true;\n advance(\"*\");\n }\n\n if (sameLine(this, state.tokens.next)) {\n if (delegatingYield ||\n (state.tokens.next.id !== \";\" && !state.option.asi &&\n !state.tokens.next.reach && state.tokens.next.nud)) {\n\n nobreaknonadjacent(state.tokens.curr, state.tokens.next);\n this.first = expression(context, 10);\n\n if (this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n !this.first.paren && !state.option.boss) {\n warning(\"W093\", this.first);\n }\n }\n if (state.tokens.next.id !== \")\" &&\n (prev.lbp > 30 || (!prev.assign && !isEndOfExpr()))) {\n error(\"E050\", this);\n }\n } else if (!state.option.asi) {\n nolinebreak(this); // always warn (Line breaking error)\n }\n return this;\n };\n\n stmt(\"throw\", function(context) {\n nolinebreak(this);\n this.first = expression(context, 20);\n\n reachable(this);\n\n return this;\n }).exps = true;\n\n prefix(\"import\", function(context) {\n var mp = metaProperty(context, \"meta\", function() {\n if (!state.inES11(true)) {\n warning(\"W119\", state.tokens.prev, \"import.meta\", \"11\");\n }\n if (!state.option.module) {\n error(\"E070\", state.tokens.prev);\n }\n });\n\n if (mp) {\n return mp;\n }\n\n if (!checkPunctuator(state.tokens.next, \"(\")) {\n return state.syntax[\"(identifier)\"].nud.call(this, context);\n }\n\n if (!state.inES11()) {\n warning(\"W119\", state.tokens.curr, \"dynamic import\", \"11\");\n }\n\n advance(\"(\");\n expression(context, 10);\n advance(\")\");\n return this;\n });\n\n var importSymbol = stmt(\"import\", function(context) {\n if (!state.funct[\"(scope)\"].block.isGlobal()) {\n error(\"E053\", state.tokens.curr, \"Import\");\n }\n\n if (!state.inES6()) {\n warning(\"W119\", state.tokens.curr, \"import\", \"6\");\n }\n\n if (state.tokens.next.type === \"(string)\") {\n advance(\"(string)\");\n return this;\n }\n\n if (state.tokens.next.identifier) {\n this.name = identifier(context);\n state.funct[\"(scope)\"].addbinding(this.name, {\n type: \"import\",\n initialized: true,\n token: state.tokens.curr });\n\n if (state.tokens.next.value === \",\") {\n advance(\",\");\n } else {\n advance(\"from\");\n advance(\"(string)\");\n return this;\n }\n }\n\n if (state.tokens.next.id === \"*\") {\n advance(\"*\");\n advance(\"as\");\n if (state.tokens.next.identifier) {\n this.name = identifier(context);\n state.funct[\"(scope)\"].addbinding(this.name, {\n type: \"import\",\n initialized: true,\n token: state.tokens.curr });\n }\n } else {\n advance(\"{\");\n for (;;) {\n if (state.tokens.next.value === \"}\") {\n advance(\"}\");\n break;\n }\n var importName;\n if (peek().value === \"as\") {\n identifier(context, true);\n advance(\"as\");\n importName = identifier(context);\n } else {\n importName = identifier(context);\n }\n state.funct[\"(scope)\"].addbinding(importName, {\n type: \"import\",\n initialized: true,\n token: state.tokens.curr });\n\n if (state.tokens.next.value === \",\") {\n advance(\",\");\n } else if (state.tokens.next.value === \"}\") {\n advance(\"}\");\n break;\n } else {\n error(\"E024\", state.tokens.next, state.tokens.next.value);\n break;\n }\n }\n }\n advance(\"from\");\n advance(\"(string)\");\n\n return this;\n });\n importSymbol.exps = true;\n importSymbol.reserved = true;\n importSymbol.meta = { isFutureReservedWord: true, es5: true };\n importSymbol.useFud = function() {\n return !(checkPunctuators(state.tokens.next, [\".\", \"(\"]));\n };\n importSymbol.rbp = 161;\n\n stmt(\"export\", function(context) {\n var ok = true;\n var token;\n var moduleSpecifier;\n context = context | prodParams.export;\n\n if (!state.inES6()) {\n warning(\"W119\", state.tokens.curr, \"export\", \"6\");\n ok = false;\n }\n\n if (!state.funct[\"(scope)\"].block.isGlobal()) {\n error(\"E053\", state.tokens.curr, \"Export\");\n ok = false;\n }\n\n if (state.tokens.next.value === \"*\") {\n advance(\"*\");\n\n if (state.tokens.next.value === \"as\") {\n if (!state.inES11()) {\n warning(\"W119\", state.tokens.curr, \"export * as ns from\", \"11\");\n }\n advance(\"as\");\n identifier(context, true);\n state.funct[\"(scope)\"].setExported(null, state.tokens.curr);\n }\n\n advance(\"from\");\n advance(\"(string)\");\n return this;\n }\n\n if (state.tokens.next.type === \"default\") {\n state.nameStack.set(state.tokens.next);\n\n advance(\"default\");\n var def = state.tokens.curr;\n var exportType = state.tokens.next.id;\n if (exportType === \"function\") {\n this.block = true;\n advance(\"function\");\n token = state.syntax[\"function\"].fud(context);\n state.funct[\"(scope)\"].setExported(token.name, def);\n } else if (exportType === \"async\" && peek().id === \"function\") {\n this.block = true;\n advance(\"async\");\n advance(\"function\");\n token = state.syntax[\"function\"].fud(context | prodParams.preAsync);\n state.funct[\"(scope)\"].setExported(token.name, def);\n } else if (exportType === \"class\") {\n this.block = true;\n advance(\"class\");\n token = state.syntax[\"class\"].fud(context);\n state.funct[\"(scope)\"].setExported(token.name, def);\n } else {\n expression(context, 10);\n state.funct[\"(scope)\"].setExported(null, def);\n }\n return this;\n }\n if (state.tokens.next.value === \"{\") {\n advance(\"{\");\n var exportedTokens = [];\n while (!checkPunctuator(state.tokens.next, \"}\")) {\n if (!state.tokens.next.identifier) {\n error(\"E030\", state.tokens.next, state.tokens.next.value);\n }\n advance();\n\n if (state.tokens.next.value === \"as\") {\n advance(\"as\");\n if (!state.tokens.next.identifier) {\n error(\"E030\", state.tokens.next, state.tokens.next.value);\n }\n exportedTokens.push({\n local: state.tokens.prev,\n export: state.tokens.next\n });\n advance();\n } else {\n exportedTokens.push({\n local: state.tokens.curr,\n export: state.tokens.curr\n });\n }\n\n if (!checkPunctuator(state.tokens.next, \"}\")) {\n advance(\",\");\n }\n }\n advance(\"}\");\n if (state.tokens.next.value === \"from\") {\n advance(\"from\");\n moduleSpecifier = state.tokens.next;\n advance(\"(string)\");\n } else if (ok) {\n exportedTokens.forEach(function(x) {\n state.funct[\"(scope)\"].setExported(x.local, x.export);\n });\n }\n\n if (exportedTokens.length === 0) {\n if (moduleSpecifier) {\n warning(\"W142\", this, \"export\", moduleSpecifier.value);\n } else {\n warning(\"W141\", this, \"export\");\n }\n }\n\n return this;\n } else if (state.tokens.next.id === \"var\") {\n advance(\"var\");\n token = state.tokens.curr.fud(context);\n token.first.forEach(function(binding) {\n state.funct[\"(scope)\"].setExported(binding, binding);\n });\n } else if (state.tokens.next.id === \"let\") {\n advance(\"let\");\n token = state.tokens.curr.fud(context);\n token.first.forEach(function(binding) {\n state.funct[\"(scope)\"].setExported(binding, binding);\n });\n } else if (state.tokens.next.id === \"const\") {\n advance(\"const\");\n token = state.tokens.curr.fud(context);\n token.first.forEach(function(binding) {\n state.funct[\"(scope)\"].setExported(binding, binding);\n });\n } else if (state.tokens.next.id === \"function\") {\n this.block = true;\n advance(\"function\");\n token = state.syntax[\"function\"].fud(context);\n state.funct[\"(scope)\"].setExported(token.name, token.name);\n } else if (state.tokens.next.id === \"async\" && peek().id === \"function\") {\n this.block = true;\n advance(\"async\");\n advance(\"function\");\n token = state.syntax[\"function\"].fud(context | prodParams.preAsync);\n state.funct[\"(scope)\"].setExported(token.name, token.name);\n } else if (state.tokens.next.id === \"class\") {\n this.block = true;\n advance(\"class\");\n token = state.syntax[\"class\"].fud(context);\n state.funct[\"(scope)\"].setExported(token.name, token.name);\n } else {\n error(\"E024\", state.tokens.next, state.tokens.next.value);\n }\n\n return this;\n }).exps = true;\n function supportsSuper(type, funct) {\n if (type === \"call\" && funct[\"(async)\"]) {\n return false;\n }\n\n if (type === \"property\" && funct[\"(method)\"]) {\n return true;\n }\n\n if (type === \"call\" && funct[\"(statement)\"] &&\n funct[\"(statement)\"].id === \"class\") {\n return true;\n }\n\n if (funct[\"(arrow)\"]) {\n return supportsSuper(type, funct[\"(context)\"]);\n }\n\n return false;\n }\n\n var superNud = function() {\n var next = state.tokens.next;\n\n if (checkPunctuators(next, [\"[\", \".\"])) {\n if (!supportsSuper(\"property\", state.funct)) {\n error(\"E063\", this);\n }\n } else if (checkPunctuator(next, \"(\")) {\n if (!supportsSuper(\"call\", state.funct)) {\n error(\"E064\", this);\n }\n } else {\n error(\"E024\", next, next.value || next.id);\n }\n\n return this;\n };\n\n FutureReservedWord(\"abstract\");\n FutureReservedWord(\"boolean\");\n FutureReservedWord(\"byte\");\n FutureReservedWord(\"char\");\n FutureReservedWord(\"double\");\n FutureReservedWord(\"enum\", { es5: true });\n FutureReservedWord(\"export\", { es5: true });\n FutureReservedWord(\"extends\", { es5: true });\n FutureReservedWord(\"final\");\n FutureReservedWord(\"float\");\n FutureReservedWord(\"goto\");\n FutureReservedWord(\"implements\", { es5: true, strictOnly: true });\n FutureReservedWord(\"int\");\n FutureReservedWord(\"interface\", { es5: true, strictOnly: true });\n FutureReservedWord(\"long\");\n FutureReservedWord(\"native\");\n FutureReservedWord(\"package\", { es5: true, strictOnly: true });\n FutureReservedWord(\"private\", { es5: true, strictOnly: true });\n FutureReservedWord(\"protected\", { es5: true, strictOnly: true });\n FutureReservedWord(\"public\", { es5: true, strictOnly: true });\n FutureReservedWord(\"short\");\n FutureReservedWord(\"static\", { es5: true, strictOnly: true });\n FutureReservedWord(\"synchronized\");\n FutureReservedWord(\"transient\");\n FutureReservedWord(\"volatile\");\n\n var lookupBlockType = function() {\n var pn, pn1, prev;\n var i = -1;\n var bracketStack = 0;\n var ret = {};\n if (checkPunctuators(state.tokens.curr, [\"[\", \"{\"])) {\n bracketStack += 1;\n }\n do {\n prev = i === -1 ? state.tokens.curr : pn;\n pn = i === -1 ? state.tokens.next : peek(i);\n pn1 = peek(i + 1);\n i = i + 1;\n if (checkPunctuators(pn, [\"[\", \"{\"])) {\n bracketStack += 1;\n } else if (checkPunctuators(pn, [\"]\", \"}\"])) {\n bracketStack -= 1;\n }\n if (bracketStack === 1 && pn.identifier && pn.value === \"for\" &&\n !checkPunctuator(prev, \".\")) {\n ret.isCompArray = true;\n ret.notJson = true;\n break;\n }\n if (bracketStack === 0 && checkPunctuators(pn, [\"}\", \"]\"])) {\n if (pn1.value === \"=\") {\n ret.isDestAssign = true;\n ret.notJson = true;\n break;\n } else if (pn1.value === \".\") {\n ret.notJson = true;\n break;\n }\n }\n if (checkPunctuator(pn, \";\")) {\n ret.notJson = true;\n }\n } while (bracketStack > 0 && pn.id !== \"(end)\");\n return ret;\n };\n function saveProperty(props, name, tkn, isClass, isStatic, isComputed) {\n if (tkn.identifier) {\n name = tkn.value;\n }\n var key = name;\n if (isClass && isStatic) {\n key = \"static \" + name;\n }\n\n if (props[key] && name !== \"__proto__\" && !isComputed) {\n var msg = [\"key\", \"class method\", \"static class method\"];\n msg = msg[(isClass || false) + (isStatic || false)];\n warning(\"W075\", state.tokens.next, msg, name);\n } else {\n props[key] = Object.create(null);\n }\n\n props[key].basic = true;\n props[key].basictkn = tkn;\n }\n function saveAccessor(accessorType, props, name, tkn, isClass, isStatic) {\n var flagName = accessorType === \"get\" ? \"getterToken\" : \"setterToken\";\n var key = name;\n state.tokens.curr.accessorType = accessorType;\n state.nameStack.set(tkn);\n if (isClass && isStatic) {\n key = \"static \" + name;\n }\n\n if (props[key]) {\n if ((props[key].basic || props[key][flagName]) && name !== \"__proto__\") {\n var msg = \"\";\n if (isClass) {\n if (isStatic) {\n msg += \"static \";\n }\n msg += accessorType + \"ter method\";\n } else {\n msg = \"key\";\n }\n warning(\"W075\", state.tokens.next, msg, name);\n }\n } else {\n props[key] = Object.create(null);\n }\n\n props[key][flagName] = tkn;\n if (isStatic) {\n props[key].static = true;\n }\n }\n function computedPropertyName(context) {\n advance(\"[\");\n state.tokens.curr.delim = true;\n state.tokens.curr.lbp = 0;\n\n if (!state.inES6()) {\n warning(\"W119\", state.tokens.curr, \"computed property names\", \"6\");\n }\n var value = expression(context & ~prodParams.noin, 10);\n advance(\"]\");\n return value;\n }\n function checkPunctuators(token, values) {\n if (token.type === \"(punctuator)\") {\n return _.includes(values, token.value);\n }\n return false;\n }\n function checkPunctuator(token, value) {\n return token.type === \"(punctuator)\" && token.value === value;\n }\n function destructuringAssignOrJsonValue(context) {\n\n var block = lookupBlockType();\n if (block.notJson) {\n if (!state.inES6() && block.isDestAssign) {\n warning(\"W104\", state.tokens.curr, \"destructuring assignment\", \"6\");\n }\n statements(context);\n } else {\n state.option.laxbreak = true;\n state.jsonMode = true;\n jsonValue();\n }\n }\n var arrayComprehension = function() {\n var CompArray = function() {\n this.mode = \"use\";\n this.variables = [];\n };\n var _carrays = [];\n var _current;\n function declare(v) {\n var l = _current.variables.filter(function(elt) {\n if (elt.value === v) {\n elt.undef = false;\n return v;\n }\n }).length;\n return l !== 0;\n }\n function use(v) {\n var l = _current.variables.filter(function(elt) {\n if (elt.value === v && !elt.undef) {\n if (elt.unused === true) {\n elt.unused = false;\n }\n return v;\n }\n }).length;\n return (l === 0);\n }\n return { stack: function() {\n _current = new CompArray();\n _carrays.push(_current);\n },\n unstack: function() {\n _current.variables.filter(function(v) {\n if (v.unused)\n warning(\"W098\", v.token, v.token.raw_text || v.value);\n if (v.undef)\n state.funct[\"(scope)\"].block.use(v.value, v.token);\n });\n _carrays.splice(-1, 1);\n _current = _carrays[_carrays.length - 1];\n },\n setState: function(s) {\n if (_.includes([\"use\", \"define\", \"generate\", \"filter\"], s))\n _current.mode = s;\n },\n check: function(v) {\n if (!_current) {\n return;\n }\n if (_current && _current.mode === \"use\") {\n if (use(v)) {\n _current.variables.push({\n token: state.tokens.curr,\n value: v,\n undef: true,\n unused: false\n });\n }\n return true;\n } else if (_current && _current.mode === \"define\") {\n if (!declare(v)) {\n _current.variables.push({\n token: state.tokens.curr,\n value: v,\n undef: false,\n unused: true\n });\n }\n return true;\n } else if (_current && _current.mode === \"generate\") {\n state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n return true;\n } else if (_current && _current.mode === \"filter\") {\n if (use(v)) {\n state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n }\n return true;\n }\n return false;\n }\n };\n };\n function jsonValue() {\n function jsonObject() {\n var o = {}, t = state.tokens.next;\n advance(\"{\");\n if (state.tokens.next.id !== \"}\") {\n for (;;) {\n if (state.tokens.next.id === \"(end)\") {\n error(\"E026\", state.tokens.next, t.line);\n } else if (state.tokens.next.id === \"}\") {\n warning(\"W094\", state.tokens.curr);\n break;\n } else if (state.tokens.next.id === \",\") {\n error(\"E028\", state.tokens.next);\n } else if (state.tokens.next.id !== \"(string)\") {\n warning(\"W095\", state.tokens.next, state.tokens.next.value);\n }\n if (o[state.tokens.next.value] === true) {\n warning(\"W075\", state.tokens.next, \"key\", state.tokens.next.value);\n } else if ((state.tokens.next.value === \"__proto__\" &&\n !state.option.proto) || (state.tokens.next.value === \"__iterator__\" &&\n !state.option.iterator)) {\n warning(\"W096\", state.tokens.next, state.tokens.next.value);\n } else {\n o[state.tokens.next.value] = true;\n }\n advance();\n advance(\":\");\n jsonValue();\n if (state.tokens.next.id !== \",\") {\n break;\n }\n advance(\",\");\n }\n }\n advance(\"}\");\n }\n\n function jsonArray() {\n var t = state.tokens.next;\n advance(\"[\");\n if (state.tokens.next.id !== \"]\") {\n for (;;) {\n if (state.tokens.next.id === \"(end)\") {\n error(\"E027\", state.tokens.next, t.line);\n } else if (state.tokens.next.id === \"]\") {\n warning(\"W094\", state.tokens.curr);\n break;\n } else if (state.tokens.next.id === \",\") {\n error(\"E028\", state.tokens.next);\n }\n jsonValue();\n if (state.tokens.next.id !== \",\") {\n break;\n }\n advance(\",\");\n }\n }\n advance(\"]\");\n }\n\n switch (state.tokens.next.id) {\n case \"{\":\n jsonObject();\n break;\n case \"[\":\n jsonArray();\n break;\n case \"true\":\n case \"false\":\n case \"null\":\n case \"(number)\":\n case \"(string)\":\n advance();\n break;\n case \"-\":\n advance(\"-\");\n advance(\"(number)\");\n break;\n default:\n error(\"E003\", state.tokens.next);\n }\n }\n function lintEvalCode(internals, options, globals) {\n var priorErrorCount, idx, jdx, internal;\n\n for (idx = 0; idx < internals.length; idx += 1) {\n internal = internals[idx];\n options.scope = internal.elem;\n priorErrorCount = JSHINT.errors.length;\n\n itself(internal.code, options, globals);\n\n for (jdx = priorErrorCount; jdx < JSHINT.errors.length; jdx += 1) {\n JSHINT.errors[jdx].line += internal.token.line - 1;\n }\n }\n }\n\n var escapeRegex = function(str) {\n return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n };\n var itself = function(s, o, g) {\n var x, reIgnoreStr, reIgnore;\n var optionKeys, newOptionObj, newIgnoredObj;\n\n o = _.clone(o);\n state.reset();\n newOptionObj = state.option;\n newIgnoredObj = state.ignored;\n\n if (o && o.scope) {\n JSHINT.scope = o.scope;\n } else {\n JSHINT.errors = [];\n JSHINT.internals = [];\n JSHINT.blacklist = {};\n JSHINT.scope = \"(main)\";\n }\n\n predefined = Object.create(null);\n combine(predefined, vars.ecmaIdentifiers[3]);\n combine(predefined, vars.reservedVars);\n\n declared = Object.create(null);\n var exported = Object.create(null); // Variables that live outside the current file\n\n function each(obj, cb) {\n if (!obj)\n return;\n\n if (!Array.isArray(obj) && typeof obj === \"object\")\n obj = Object.keys(obj);\n\n obj.forEach(cb);\n }\n\n if (o) {\n\n each([o.predef, o.globals], function(dict) {\n each(dict, function(item) {\n var slice, prop;\n\n if (item[0] === \"-\") {\n slice = item.slice(1);\n JSHINT.blacklist[slice] = slice;\n delete predefined[slice];\n } else {\n prop = Object.getOwnPropertyDescriptor(dict, item);\n predefined[item] = prop ? prop.value : false;\n }\n });\n });\n\n each(o.exported || null, function(item) {\n exported[item] = true;\n });\n\n delete o.predef;\n delete o.exported;\n\n optionKeys = Object.keys(o);\n for (x = 0; x < optionKeys.length; x++) {\n if (/^-W\\d{3}$/g.test(optionKeys[x])) {\n newIgnoredObj[optionKeys[x].slice(1)] = true;\n } else {\n var optionKey = optionKeys[x];\n newOptionObj[optionKey] = o[optionKey];\n }\n }\n }\n\n state.option = newOptionObj;\n state.ignored = newIgnoredObj;\n\n state.option.indent = state.option.indent || 4;\n state.option.maxerr = state.option.maxerr || 50;\n\n indent = 1;\n\n var scopeManagerInst = scopeManager(state, predefined, exported, declared);\n scopeManagerInst.on(\"warning\", function(ev) {\n warning.apply(null, [ ev.code, ev.token].concat(ev.data));\n });\n\n scopeManagerInst.on(\"error\", function(ev) {\n error.apply(null, [ ev.code, ev.token ].concat(ev.data));\n });\n\n state.funct = functor(\"(global)\", null, {\n \"(global)\" : true,\n \"(scope)\" : scopeManagerInst,\n \"(comparray)\" : arrayComprehension(),\n \"(metrics)\" : createMetrics(state.tokens.next)\n });\n\n functions = [state.funct];\n member = {};\n membersOnly = null;\n inblock = false;\n lookahead = [];\n\n if (!isString(s) && !Array.isArray(s)) {\n errorAt(\"E004\", 0);\n return false;\n }\n\n api = {\n get isJSON() {\n return state.jsonMode;\n },\n\n getOption: function(name) {\n return state.option[name] || null;\n },\n\n getCache: function(name) {\n return state.cache[name];\n },\n\n setCache: function(name, value) {\n state.cache[name] = value;\n },\n\n warn: function(code, data) {\n warningAt.apply(null, [ code, data.line, data.char ].concat(data.data));\n },\n\n on: function(names, listener) {\n names.split(\" \").forEach(function(name) {\n emitter.on(name, listener);\n }.bind(this));\n }\n };\n\n emitter.removeAllListeners();\n (extraModules || []).forEach(function(func) {\n func(api);\n });\n\n state.tokens.prev = state.tokens.curr = state.tokens.next = state.syntax[\"(begin)\"];\n if (o && o.ignoreDelimiters) {\n\n if (!Array.isArray(o.ignoreDelimiters)) {\n o.ignoreDelimiters = [o.ignoreDelimiters];\n }\n\n o.ignoreDelimiters.forEach(function(delimiterPair) {\n if (!delimiterPair.start || !delimiterPair.end)\n return;\n\n reIgnoreStr = escapeRegex(delimiterPair.start) +\n \"[\\\\s\\\\S]*?\" +\n escapeRegex(delimiterPair.end);\n\n reIgnore = new RegExp(reIgnoreStr, \"ig\");\n\n s = s.replace(reIgnore, function(match) {\n return match.replace(/./g, \" \");\n });\n });\n }\n\n lex = new Lexer(s);\n\n lex.on(\"warning\", function(ev) {\n warningAt.apply(null, [ ev.code, ev.line, ev.character].concat(ev.data));\n });\n\n lex.on(\"error\", function(ev) {\n errorAt.apply(null, [ ev.code, ev.line, ev.character ].concat(ev.data));\n });\n\n lex.on(\"fatal\", function(ev) {\n quit(\"E041\", ev);\n });\n\n lex.on(\"Identifier\", function(ev) {\n emitter.emit(\"Identifier\", ev);\n });\n\n lex.on(\"String\", function(ev) {\n emitter.emit(\"String\", ev);\n });\n\n lex.on(\"Number\", function(ev) {\n emitter.emit(\"Number\", ev);\n });\n var name;\n for (name in o) {\n if (_.has(o, name)) {\n checkOption(name, true, state.tokens.curr);\n }\n }\n if (o) {\n for (name in o.unstable) {\n if (_.has(o.unstable, name)) {\n checkOption(name, false, state.tokens.curr);\n }\n }\n }\n\n try {\n applyOptions();\n combine(predefined, g || {});\n checkComma.first = true;\n\n advance();\n switch (state.tokens.next.id) {\n case \"{\":\n case \"[\":\n destructuringAssignOrJsonValue(0);\n break;\n default:\n directives();\n\n if (state.directive[\"use strict\"]) {\n if (!state.allowsGlobalUsd()) {\n warning(\"W097\", state.directive[\"use strict\"]);\n }\n }\n\n statements(0);\n }\n\n if (state.tokens.next.id !== \"(end)\") {\n quit(\"E041\", state.tokens.curr);\n }\n\n state.funct[\"(scope)\"].unstack();\n\n } catch (err) {\n if (err && err.name === \"JSHintError\") {\n var nt = state.tokens.next || {};\n JSHINT.errors.push({\n scope : \"(main)\",\n raw : err.raw,\n code : err.code,\n reason : err.reason,\n line : err.line || nt.line,\n character : err.character || nt.from\n });\n } else {\n throw err;\n }\n }\n if (JSHINT.scope === \"(main)\") {\n lintEvalCode(JSHINT.internals, o || {}, g);\n }\n\n return JSHINT.errors.length === 0;\n };\n itself.addModule = function(func) {\n extraModules.push(func);\n };\n\n itself.addModule(style.register);\n itself.data = function() {\n var data = {\n functions: [],\n options: state.option\n };\n\n var fu, f, i, n, globals;\n\n if (itself.errors.length) {\n data.errors = itself.errors;\n }\n\n if (state.jsonMode) {\n data.json = true;\n }\n\n var impliedGlobals = state.funct[\"(scope)\"].getImpliedGlobals();\n if (impliedGlobals.length > 0) {\n data.implieds = impliedGlobals;\n }\n\n globals = state.funct[\"(scope)\"].getUsedOrDefinedGlobals();\n if (globals.length > 0) {\n data.globals = globals;\n }\n\n for (i = 1; i < functions.length; i += 1) {\n f = functions[i];\n fu = {};\n\n fu.name = f[\"(name)\"];\n fu.param = f[\"(params)\"];\n fu.line = f[\"(line)\"];\n fu.character = f[\"(character)\"];\n fu.last = f[\"(last)\"];\n fu.lastcharacter = f[\"(lastcharacter)\"];\n\n fu.metrics = {\n complexity: f[\"(metrics)\"].ComplexityCount,\n parameters: f[\"(metrics)\"].arity,\n statements: f[\"(metrics)\"].statementCount\n };\n\n data.functions.push(fu);\n }\n\n var unuseds = state.funct[\"(scope)\"].getUnuseds();\n if (unuseds.length > 0) {\n data.unused = unuseds;\n }\n\n for (n in member) {\n if (typeof member[n] === \"number\") {\n data.member = member;\n break;\n }\n }\n\n return data;\n };\n\n itself.jshint = itself;\n\n return itself;\n}());\nif (typeof exports === \"object\" && exports) {\n exports.JSHINT = JSHINT;\n}\n\n},{\"./lex.js\":\"/../../../jshint/src/lex.js\",\"./messages.js\":\"/../../../jshint/src/messages.js\",\"./options.js\":\"/../../../jshint/src/options.js\",\"./prod-params.js\":\"/../../../jshint/src/prod-params.js\",\"./reg.js\":\"/../../../jshint/src/reg.js\",\"./scope-manager.js\":\"/../../../jshint/src/scope-manager.js\",\"./state.js\":\"/../../../jshint/src/state.js\",\"./style.js\":\"/../../../jshint/src/style.js\",\"./vars.js\":\"/../../../jshint/src/vars.js\",\"console-browserify\":\"/../../../jshint/node_modules/console-browserify/index.js\",\"events\":\"/node_modules/events/events.js\",\"lodash.clone\":\"/../../../jshint/node_modules/lodash.clone/index.js\",\"underscore\":\"/../../../jshint/node_modules/underscore/underscore-umd.js\"}],\"/../../../jshint/src/lex.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nvar _ = _dereq_(\"underscore\");\nvar events = _dereq_(\"events\");\nvar reg = _dereq_(\"./reg.js\");\nvar state = _dereq_(\"./state.js\").state;\n\nvar unicodeData = _dereq_(\"../data/ascii-identifier-data.js\");\nvar asciiIdentifierStartTable = unicodeData.asciiIdentifierStartTable;\nvar asciiIdentifierPartTable = unicodeData.asciiIdentifierPartTable;\nvar nonAsciiIdentifierStartTable = _dereq_(\"../data/non-ascii-identifier-start.js\");\nvar nonAsciiIdentifierPartTable = _dereq_(\"../data/non-ascii-identifier-part-only.js\");\nvar es5IdentifierNames;\n\nvar Token = {\n Identifier: 1,\n Punctuator: 2,\n NumericLiteral: 3,\n StringLiteral: 4,\n Comment: 5,\n Keyword: 6,\n RegExp: 9,\n TemplateHead: 10,\n TemplateMiddle: 11,\n TemplateTail: 12,\n NoSubstTemplate: 13\n};\n\nvar Context = {\n Block: 1,\n Template: 2\n};\n\nfunction isHex(str) {\n return /^[0-9a-fA-F]+$/.test(str);\n}\n\nfunction isHexDigit(str) {\n return str.length === 1 && isHex(str);\n}\n\nfunction asyncTrigger() {\n var _checks = [];\n\n return {\n push: function(fn) {\n _checks.push(fn);\n },\n\n check: function() {\n for (var check = 0; check < _checks.length; ++check) {\n _checks[check]();\n }\n\n _checks.splice(0, _checks.length);\n }\n };\n}\nfunction Lexer(source) {\n var lines = source;\n\n if (typeof lines === \"string\") {\n lines = lines\n .replace(/\\r\\n/g, \"\\n\")\n .replace(/\\r/g, \"\\n\")\n .split(\"\\n\");\n }\n\n if (lines[0] && lines[0].substr(0, 2) === \"#!\") {\n if (lines[0].indexOf(\"node\") !== -1) {\n state.option.node = true;\n }\n lines[0] = \"\";\n }\n\n this.emitter = new events.EventEmitter();\n this.source = source;\n this.setLines(lines);\n this.prereg = true;\n\n this.line = 0;\n this.char = 1;\n this.from = 1;\n this.input = \"\";\n this.inComment = false;\n this.context = [];\n this.templateStarts = [];\n\n for (var i = 0; i < state.option.indent; i += 1) {\n state.tab += \" \";\n }\n}\n\nLexer.prototype = {\n _lines: [],\n\n inContext: function(ctxType) {\n return this.context.length > 0 && this.context[this.context.length - 1].type === ctxType;\n },\n\n pushContext: function(ctxType) {\n this.context.push({ type: ctxType });\n },\n\n popContext: function() {\n return this.context.pop();\n },\n\n currentContext: function() {\n return this.context.length > 0 && this.context[this.context.length - 1];\n },\n\n getLines: function() {\n this._lines = state.lines;\n return this._lines;\n },\n\n setLines: function(val) {\n this._lines = val;\n state.lines = this._lines;\n },\n peek: function(i) {\n return this.input.charAt(i || 0);\n },\n skip: function(i) {\n i = i || 1;\n this.char += i;\n this.input = this.input.slice(i);\n },\n on: function(names, listener) {\n names.split(\" \").forEach(function(name) {\n this.emitter.on(name, listener);\n }.bind(this));\n },\n trigger: function() {\n this.emitter.emit.apply(this.emitter, Array.prototype.slice.call(arguments));\n },\n triggerAsync: function(type, args, checks, fn) {\n checks.push(function() {\n if (fn()) {\n this.trigger(type, args);\n }\n }.bind(this));\n },\n scanPunctuator: function() {\n var ch1 = this.peek();\n var ch2, ch3, ch4;\n\n switch (ch1) {\n case \".\":\n if ((/^[0-9]$/).test(this.peek(1))) {\n return null;\n }\n if (this.peek(1) === \".\" && this.peek(2) === \".\") {\n return {\n type: Token.Punctuator,\n value: \"...\"\n };\n }\n case \"(\":\n case \")\":\n case \";\":\n case \",\":\n case \"[\":\n case \"]\":\n case \":\":\n case \"~\":\n return {\n type: Token.Punctuator,\n value: ch1\n };\n case \"{\":\n this.pushContext(Context.Block);\n return {\n type: Token.Punctuator,\n value: ch1\n };\n case \"}\":\n if (this.inContext(Context.Block)) {\n this.popContext();\n }\n return {\n type: Token.Punctuator,\n value: ch1\n };\n case \"#\":\n return {\n type: Token.Punctuator,\n value: ch1\n };\n case \"\":\n return null;\n }\n\n ch2 = this.peek(1);\n ch3 = this.peek(2);\n\n if (ch1 === \"?\") {\n if (ch2 === \".\" && !reg.decimalDigit.test(ch3)) {\n return {\n type: Token.Punctuator,\n value: \"?.\"\n };\n }\n\n return {\n type: Token.Punctuator,\n value: ch2 === \"?\" ? \"??\" : \"?\"\n };\n }\n\n ch4 = this.peek(3);\n\n if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\" && ch4 === \"=\") {\n return {\n type: Token.Punctuator,\n value: \">>>=\"\n };\n }\n\n if (ch1 === \"=\" && ch2 === \"=\" && ch3 === \"=\") {\n return {\n type: Token.Punctuator,\n value: \"===\"\n };\n }\n\n if (ch1 === \"!\" && ch2 === \"=\" && ch3 === \"=\") {\n return {\n type: Token.Punctuator,\n value: \"!==\"\n };\n }\n\n if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\") {\n return {\n type: Token.Punctuator,\n value: \">>>\"\n };\n }\n\n if (ch1 === \"<\" && ch2 === \"<\" && ch3 === \"=\") {\n return {\n type: Token.Punctuator,\n value: \"<<=\"\n };\n }\n\n if (ch1 === \">\" && ch2 === \">\" && ch3 === \"=\") {\n return {\n type: Token.Punctuator,\n value: \">>=\"\n };\n }\n if (ch1 === \"=\" && ch2 === \">\") {\n return {\n type: Token.Punctuator,\n value: ch1 + ch2\n };\n }\n if (ch1 === ch2 && (\"+-<>&|*\".indexOf(ch1) >= 0)) {\n if (ch1 === \"*\" && ch3 === \"=\") {\n return {\n type: Token.Punctuator,\n value: ch1 + ch2 + ch3\n };\n }\n\n return {\n type: Token.Punctuator,\n value: ch1 + ch2\n };\n }\n if (\"<>=!+-*%&|^/\".indexOf(ch1) >= 0) {\n if (ch2 === \"=\") {\n return {\n type: Token.Punctuator,\n value: ch1 + ch2\n };\n }\n\n return {\n type: Token.Punctuator,\n value: ch1\n };\n }\n\n return null;\n },\n scanComments: function(checks) {\n var ch1 = this.peek();\n var ch2 = this.peek(1);\n var rest = this.input.substr(2);\n var startLine = this.line;\n var startChar = this.char;\n var self = this;\n\n function commentToken(label, body, opt) {\n var special = [\n \"jshint\", \"jshint.unstable\", \"jslint\", \"members\", \"member\", \"globals\",\n \"global\", \"exported\"\n ];\n var isSpecial = false;\n var value = label + body;\n var commentType = \"plain\";\n opt = opt || {};\n\n if (opt.isMultiline) {\n value += \"*/\";\n }\n\n body = body.replace(/\\n/g, \" \");\n\n if (label === \"/*\" && reg.fallsThrough.test(body)) {\n isSpecial = true;\n commentType = \"falls through\";\n }\n\n special.forEach(function(str) {\n if (isSpecial) {\n return;\n }\n if (label === \"//\" && str !== \"jshint\" && str !== \"jshint.unstable\") {\n return;\n }\n\n if (body.charAt(str.length) === \" \" && body.substr(0, str.length) === str) {\n isSpecial = true;\n label = label + str;\n body = body.substr(str.length);\n }\n\n if (!isSpecial && body.charAt(0) === \" \" && body.charAt(str.length + 1) === \" \" &&\n body.substr(1, str.length) === str) {\n isSpecial = true;\n label = label + \" \" + str;\n body = body.substr(str.length + 1);\n }\n var strIndex = body.indexOf(str);\n if (!isSpecial && strIndex >= 0 && body.charAt(strIndex + str.length) === \" \") {\n var isAllWhitespace = body.substr(0, strIndex).trim().length === 0;\n if (isAllWhitespace) {\n isSpecial = true;\n body = body.substr(str.length + strIndex);\n }\n }\n\n if (!isSpecial) {\n return;\n }\n\n switch (str) {\n case \"member\":\n commentType = \"members\";\n break;\n case \"global\":\n commentType = \"globals\";\n break;\n default:\n var options = body.split(\":\").map(function(v) {\n return v.replace(/^\\s+/, \"\").replace(/\\s+$/, \"\");\n });\n\n if (options.length === 2) {\n switch (options[0]) {\n case \"ignore\":\n switch (options[1]) {\n case \"start\":\n self.ignoringLinterErrors = true;\n isSpecial = false;\n break;\n case \"end\":\n self.ignoringLinterErrors = false;\n isSpecial = false;\n break;\n }\n }\n }\n\n commentType = str;\n }\n });\n\n return {\n type: Token.Comment,\n commentType: commentType,\n value: value,\n body: body,\n isSpecial: isSpecial,\n isMalformed: opt.isMalformed || false\n };\n }\n if (ch1 === \"*\" && ch2 === \"/\") {\n this.trigger(\"error\", {\n code: \"E018\",\n line: startLine,\n character: startChar\n });\n\n this.skip(2);\n return null;\n }\n if (ch1 !== \"/\" || (ch2 !== \"*\" && ch2 !== \"/\")) {\n return null;\n }\n if (ch2 === \"/\") {\n this.skip(this.input.length); // Skip to the EOL.\n return commentToken(\"//\", rest);\n }\n\n var body = \"\";\n if (ch2 === \"*\") {\n this.inComment = true;\n this.skip(2);\n\n while (this.peek() !== \"*\" || this.peek(1) !== \"/\") {\n if (this.peek() === \"\") { // End of Line\n body += \"\\n\";\n if (!this.nextLine(checks)) {\n this.trigger(\"error\", {\n code: \"E017\",\n line: startLine,\n character: startChar\n });\n\n this.inComment = false;\n return commentToken(\"/*\", body, {\n isMultiline: true,\n isMalformed: true\n });\n }\n } else {\n body += this.peek();\n this.skip();\n }\n }\n\n this.skip(2);\n this.inComment = false;\n return commentToken(\"/*\", body, { isMultiline: true });\n }\n },\n scanKeyword: function() {\n var result = /^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input);\n var keywords = [\n \"if\", \"in\", \"do\", \"var\", \"for\", \"new\",\n \"try\", \"let\", \"this\", \"else\", \"case\",\n \"void\", \"with\", \"enum\", \"while\", \"break\",\n \"catch\", \"throw\", \"const\", \"yield\", \"class\",\n \"super\", \"return\", \"typeof\", \"delete\",\n \"switch\", \"export\", \"import\", \"default\",\n \"finally\", \"extends\", \"function\", \"continue\",\n \"debugger\", \"instanceof\", \"true\", \"false\", \"null\", \"async\", \"await\"\n ];\n\n if (result && keywords.indexOf(result[0]) >= 0) {\n return {\n type: Token.Keyword,\n value: result[0]\n };\n }\n\n return null;\n },\n scanIdentifier: function(checks) {\n var id = \"\";\n var index = 0;\n var char, value;\n\n function isNonAsciiIdentifierStart(code) {\n return nonAsciiIdentifierStartTable.indexOf(code) > -1;\n }\n\n function isNonAsciiIdentifierPart(code) {\n return isNonAsciiIdentifierStart(code) || nonAsciiIdentifierPartTable.indexOf(code) > -1;\n }\n\n var readUnicodeEscapeSequence = function() {\n index += 1;\n\n if (this.peek(index) !== \"u\") {\n return null;\n }\n\n var sequence = this.peek(index + 1) + this.peek(index + 2) +\n this.peek(index + 3) + this.peek(index + 4);\n var code;\n\n if (isHex(sequence)) {\n code = parseInt(sequence, 16);\n\n if (asciiIdentifierPartTable[code] || isNonAsciiIdentifierPart(code)) {\n index += 5;\n return \"\\\\u\" + sequence;\n }\n\n return null;\n }\n\n return null;\n }.bind(this);\n\n var getIdentifierStart = function() {\n var chr = this.peek(index);\n var code = chr.charCodeAt(0);\n\n if (code === 92) {\n return readUnicodeEscapeSequence();\n }\n\n if (code < 128) {\n if (asciiIdentifierStartTable[code]) {\n index += 1;\n return chr;\n }\n\n return null;\n }\n\n if (isNonAsciiIdentifierStart(code)) {\n index += 1;\n return chr;\n }\n\n return null;\n }.bind(this);\n\n var getIdentifierPart = function() {\n var chr = this.peek(index);\n var code = chr.charCodeAt(0);\n\n if (code === 92) {\n return readUnicodeEscapeSequence();\n }\n\n if (code < 128) {\n if (asciiIdentifierPartTable[code]) {\n index += 1;\n return chr;\n }\n\n return null;\n }\n\n if (isNonAsciiIdentifierPart(code)) {\n index += 1;\n return chr;\n }\n\n return null;\n }.bind(this);\n\n function removeEscapeSequences(id) {\n return id.replace(/\\\\u([0-9a-fA-F]{4})/g, function(m0, codepoint) {\n return String.fromCharCode(parseInt(codepoint, 16));\n });\n }\n\n char = getIdentifierStart();\n if (char === null) {\n return null;\n }\n\n id = char;\n for (;;) {\n char = getIdentifierPart();\n\n if (char === null) {\n break;\n }\n\n id += char;\n }\n\n value = removeEscapeSequences(id);\n\n if (!state.inES6(true)) {\n es5IdentifierNames = _dereq_(\"../data/es5-identifier-names.js\");\n\n if (!es5IdentifierNames.test(value)) {\n this.triggerAsync(\n \"warning\",\n {\n code: \"W119\",\n line: this.line,\n character: this.char,\n data: [\"unicode 8\", \"6\"]\n },\n checks,\n function() { return true; }\n );\n }\n }\n\n return {\n type: Token.Identifier,\n value: value,\n text: id,\n tokenLength: id.length\n };\n },\n scanNumericLiteral: function(checks) {\n var index = 0;\n var value = \"\";\n var length = this.input.length;\n var char = this.peek(index);\n var isAllowedDigit = isDecimalDigit;\n var base = 10;\n var isLegacy = false;\n var isNonOctal = false;\n\n function isDecimalDigit(str) {\n return (/^[0-9]$/).test(str);\n }\n\n function isOctalDigit(str) {\n return (/^[0-7]$/).test(str);\n }\n\n function isNonOctalDigit(str) {\n return str === \"8\" || str === \"9\";\n }\n\n function isBinaryDigit(str) {\n return (/^[01]$/).test(str);\n }\n\n function isIdentifierStart(ch) {\n return (ch === \"$\") || (ch === \"_\") || (ch === \"\\\\\") ||\n (ch >= \"a\" && ch <= \"z\") || (ch >= \"A\" && ch <= \"Z\");\n }\n\n if (char !== \".\" && !isDecimalDigit(char)) {\n return null;\n }\n\n if (char !== \".\") {\n value = this.peek(index);\n index += 1;\n char = this.peek(index);\n\n if (value === \"0\") {\n if (char === \"x\" || char === \"X\") {\n isAllowedDigit = isHexDigit;\n base = 16;\n\n index += 1;\n value += char;\n }\n if (char === \"o\" || char === \"O\") {\n isAllowedDigit = isOctalDigit;\n base = 8;\n\n if (!state.inES6(true)) {\n this.triggerAsync(\n \"warning\",\n {\n code: \"W119\",\n line: this.line,\n character: this.char,\n data: [ \"Octal integer literal\", \"6\" ]\n },\n checks,\n function() { return true; }\n );\n }\n\n index += 1;\n value += char;\n }\n if (char === \"b\" || char === \"B\") {\n isAllowedDigit = isBinaryDigit;\n base = 2;\n\n if (!state.inES6(true)) {\n this.triggerAsync(\n \"warning\",\n {\n code: \"W119\",\n line: this.line,\n character: this.char,\n data: [ \"Binary integer literal\", \"6\" ]\n },\n checks,\n function() { return true; }\n );\n }\n\n index += 1;\n value += char;\n }\n if (isOctalDigit(char)) {\n isAllowedDigit = isOctalDigit;\n base = 8;\n isLegacy = true;\n\n } else if (isDecimalDigit(char)) {\n isNonOctal = true;\n }\n }\n\n while (index < length) {\n char = this.peek(index);\n\n if (isLegacy && isNonOctalDigit(char)) {\n base = 10;\n isLegacy = false;\n isNonOctal = true;\n isAllowedDigit = isDecimalDigit;\n }\n\n if (!isAllowedDigit(char)) {\n break;\n }\n value += char;\n index += 1;\n }\n\n var isBigInt = this.peek(index) === 'n';\n\n if (isAllowedDigit !== isDecimalDigit || isBigInt) {\n if (isBigInt) {\n this.triggerAsync(\n \"warning\",\n {\n code: \"W119\",\n line: this.line,\n character: this.char,\n data: [ \"BigInt\", \"11\" ]\n },\n checks,\n function() { return !state.inES11(); }\n );\n\n if (isLegacy || isNonOctal) {\n this.triggerAsync(\n \"error\",\n {\n code: \"E067\",\n line: this.line,\n character: this.char,\n data: [value + char]\n },\n checks,\n function() { return true; }\n );\n }\n\n value += char;\n index += 1;\n } else if (!isLegacy && value.length <= 2) { // 0x\n return {\n type: Token.NumericLiteral,\n value: value,\n isMalformed: true\n };\n }\n\n if (index < length) {\n char = this.peek(index);\n if (isIdentifierStart(char)) {\n return null;\n }\n }\n\n return {\n type: Token.NumericLiteral,\n value: value,\n base: base,\n isLegacy: isLegacy,\n isMalformed: false\n };\n }\n }\n\n if (char === \".\") {\n value += char;\n index += 1;\n\n while (index < length) {\n char = this.peek(index);\n if (!isDecimalDigit(char)) {\n break;\n }\n value += char;\n index += 1;\n }\n }\n\n if (char === \"e\" || char === \"E\") {\n value += char;\n index += 1;\n char = this.peek(index);\n\n if (char === \"+\" || char === \"-\") {\n value += this.peek(index);\n index += 1;\n }\n\n char = this.peek(index);\n if (isDecimalDigit(char)) {\n value += char;\n index += 1;\n\n while (index < length) {\n char = this.peek(index);\n if (!isDecimalDigit(char)) {\n break;\n }\n value += char;\n index += 1;\n }\n } else {\n return null;\n }\n }\n\n if (index < length) {\n char = this.peek(index);\n if (isIdentifierStart(char)) {\n return null;\n }\n }\n this.triggerAsync(\"warning\", {\n code: \"W045\",\n line: this.line,\n character: this.char + value.length,\n data: [ value ]\n }, checks, function() { return !isFinite(value); });\n\n return {\n type: Token.NumericLiteral,\n value: value,\n base: base,\n isNonOctal: isNonOctal,\n isMalformed: false\n };\n },\n scanEscapeSequence: function(checks) {\n var allowNewLine = false;\n var jump = 1;\n this.skip();\n var char = this.peek();\n\n switch (char) {\n case \"'\":\n this.triggerAsync(\"warning\", {\n code: \"W114\",\n line: this.line,\n character: this.char,\n data: [ \"\\\\'\" ]\n }, checks, function() {return state.jsonMode; });\n break;\n case \"b\":\n char = \"\\\\b\";\n break;\n case \"f\":\n char = \"\\\\f\";\n break;\n case \"n\":\n char = \"\\\\n\";\n break;\n case \"r\":\n char = \"\\\\r\";\n break;\n case \"t\":\n char = \"\\\\t\";\n break;\n case \"0\":\n char = \"\\\\0\";\n var n = parseInt(this.peek(1), 10);\n this.triggerAsync(\"warning\", {\n code: \"W115\",\n line: this.line,\n character: this.char\n }, checks,\n function() { return n >= 0 && n <= 7 && state.isStrict(); });\n break;\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n char = \"\\\\\" + char;\n this.triggerAsync(\"warning\", {\n code: \"W115\",\n line: this.line,\n character: this.char\n }, checks,\n function() { return state.isStrict(); });\n break;\n case \"u\":\n var sequence = this.input.substr(1, 4);\n var code = parseInt(sequence, 16);\n if (!isHex(sequence)) {\n this.trigger(\"warning\", {\n code: \"W052\",\n line: this.line,\n character: this.char,\n data: [ \"u\" + sequence ]\n });\n }\n char = String.fromCharCode(code);\n jump = 5;\n break;\n case \"v\":\n this.triggerAsync(\"warning\", {\n code: \"W114\",\n line: this.line,\n character: this.char,\n data: [ \"\\\\v\" ]\n }, checks, function() { return state.jsonMode; });\n\n char = \"\\v\";\n break;\n case \"x\":\n var x = parseInt(this.input.substr(1, 2), 16);\n\n this.triggerAsync(\"warning\", {\n code: \"W114\",\n line: this.line,\n character: this.char,\n data: [ \"\\\\x-\" ]\n }, checks, function() { return state.jsonMode; });\n\n char = String.fromCharCode(x);\n jump = 3;\n break;\n case \"\\\\\":\n char = \"\\\\\\\\\";\n break;\n case \"/\":\n break;\n case \"\":\n allowNewLine = true;\n char = \"\";\n break;\n }\n\n return { char: char, jump: jump, allowNewLine: allowNewLine };\n },\n scanTemplateLiteral: function(checks) {\n var tokenType;\n var value = \"\";\n var ch;\n var startLine = this.line;\n var startChar = this.char;\n var depth = this.templateStarts.length;\n\n if (this.peek() === \"`\") {\n if (!state.inES6(true)) {\n this.triggerAsync(\n \"warning\",\n {\n code: \"W119\",\n line: this.line,\n character: this.char,\n data: [\"template literal syntax\", \"6\"]\n },\n checks,\n function() { return true; }\n );\n }\n tokenType = Token.TemplateHead;\n this.templateStarts.push({ line: this.line, char: this.char });\n depth = this.templateStarts.length;\n this.skip(1);\n this.pushContext(Context.Template);\n } else if (this.inContext(Context.Template) && this.peek() === \"}\") {\n tokenType = Token.TemplateMiddle;\n } else {\n return null;\n }\n\n while (this.peek() !== \"`\") {\n while ((ch = this.peek()) === \"\") {\n value += \"\\n\";\n if (!this.nextLine(checks)) {\n var startPos = this.templateStarts.pop();\n this.trigger(\"error\", {\n code: \"E052\",\n line: startPos.line,\n character: startPos.char\n });\n return {\n type: tokenType,\n value: value,\n startLine: startLine,\n startChar: startChar,\n isUnclosed: true,\n depth: depth,\n context: this.popContext()\n };\n }\n }\n\n if (ch === '$' && this.peek(1) === '{') {\n value += '${';\n this.skip(2);\n return {\n type: tokenType,\n value: value,\n startLine: startLine,\n startChar: startChar,\n isUnclosed: false,\n depth: depth,\n context: this.currentContext()\n };\n } else if (ch === '\\\\') {\n var escape = this.scanEscapeSequence(checks);\n value += escape.char;\n this.skip(escape.jump);\n } else if (ch !== '`') {\n value += ch;\n this.skip(1);\n }\n }\n tokenType = tokenType === Token.TemplateHead ? Token.NoSubstTemplate : Token.TemplateTail;\n this.skip(1);\n this.templateStarts.pop();\n\n return {\n type: tokenType,\n value: value,\n startLine: startLine,\n startChar: startChar,\n isUnclosed: false,\n depth: depth,\n context: this.popContext()\n };\n },\n scanStringLiteral: function(checks) {\n var quote = this.peek();\n if (quote !== \"\\\"\" && quote !== \"'\") {\n return null;\n }\n this.triggerAsync(\"warning\", {\n code: \"W108\",\n line: this.line,\n character: this.char // +1?\n }, checks, function() { return state.jsonMode && quote !== \"\\\"\"; });\n\n var value = \"\";\n var startLine = this.line;\n var startChar = this.char;\n var allowNewLine = false;\n\n this.skip();\n\n while (this.peek() !== quote) {\n if (this.peek() === \"\") { // End Of Line\n\n if (!allowNewLine) {\n this.trigger(\"warning\", {\n code: \"W112\",\n line: this.line,\n character: this.char\n });\n } else {\n allowNewLine = false;\n\n this.triggerAsync(\"warning\", {\n code: \"W043\",\n line: this.line,\n character: this.char\n }, checks, function() { return !state.option.multistr; });\n\n this.triggerAsync(\"warning\", {\n code: \"W042\",\n line: this.line,\n character: this.char\n }, checks, function() { return state.jsonMode && state.option.multistr; });\n }\n\n if (!this.nextLine(checks)) {\n return {\n type: Token.StringLiteral,\n value: value,\n startLine: startLine,\n startChar: startChar,\n isUnclosed: true,\n quote: quote\n };\n }\n\n } else { // Any character other than End Of Line\n\n allowNewLine = false;\n var char = this.peek();\n var jump = 1; // A length of a jump, after we're done\n\n if (char < \" \") {\n this.triggerAsync(\n \"warning\",\n {\n code: \"W113\",\n line: this.line,\n character: this.char,\n data: [ \"\" ]\n },\n checks,\n function() { return true; }\n );\n }\n if (char === \"\\\\\") {\n var parsed = this.scanEscapeSequence(checks);\n char = parsed.char;\n jump = parsed.jump;\n allowNewLine = parsed.allowNewLine;\n }\n if (char !== \"\") {\n value += char;\n this.skip(jump);\n }\n }\n }\n\n this.skip();\n return {\n type: Token.StringLiteral,\n value: value,\n startLine: startLine,\n startChar: startChar,\n isUnclosed: false,\n quote: quote\n };\n },\n scanRegExp: function(checks) {\n var index = 0;\n var length = this.input.length;\n var char = this.peek();\n var value = char;\n var body = \"\";\n var groupReferences = [];\n var allFlags = \"\";\n var es5Flags = \"\";\n var malformed = false;\n var isCharSet = false;\n var isCharSetRange = false;\n var isGroup = false;\n var isQuantifiable = false;\n var hasInvalidQuantifier = false;\n var escapedChars = \"\";\n var hasUFlag = function() { return allFlags.indexOf(\"u\") > -1; };\n var escapeSequence;\n var groupCount = 0;\n var terminated, malformedDesc;\n\n var scanRegexpEscapeSequence = function() {\n var next, sequence;\n index += 1;\n char = this.peek(index);\n\n if (reg.nonzeroDigit.test(char)) {\n sequence = char;\n next = this.peek(index + 1);\n while (reg.nonzeroDigit.test(next) || next === \"0\") {\n index += 1;\n char = next;\n sequence += char;\n body += char;\n value += char;\n next = this.peek(index + 1);\n }\n groupReferences.push(Number(sequence));\n return sequence;\n }\n\n escapedChars += char;\n\n if (char === \"u\" && this.peek(index + 1) === \"{\") {\n var x = index + 2;\n sequence = \"u{\";\n next = this.peek(x);\n while (isHex(next)) {\n sequence += next;\n x += 1;\n next = this.peek(x);\n }\n\n if (next !== \"}\") {\n this.triggerAsync(\n \"error\",\n {\n code: \"E016\",\n line: this.line,\n character: this.char,\n data: [ \"Invalid Unicode escape sequence\" ]\n },\n checks,\n hasUFlag\n );\n } else if (sequence.length > 2) {\n sequence += \"}\";\n body += sequence;\n value += sequence;\n index = x + 1;\n return sequence;\n }\n }\n\n if (char === \"p\" || char === \"P\") {\n var y = index + 2;\n sequence = \"\";\n next = \"\";\n\n if (this.peek(index + 1) === \"{\") {\n next = this.peek(y);\n while (next && next !== \"}\") {\n sequence += next;\n y += 1;\n next = this.peek(y);\n }\n }\n if (!sequence || !_dereq_(\"./validate-unicode-escape-sequence\")(sequence)) {\n this.triggerAsync(\n \"error\",\n {\n code: \"E016\",\n line: this.line,\n character: this.char,\n data: [ \"Invalid Unicode property escape sequence\" ]\n },\n checks,\n hasUFlag\n );\n }\n\n if (sequence) {\n sequence = char + \"{\" + sequence + \"}\";\n body += sequence;\n value += sequence;\n index = y + 1;\n\n if (!state.inES9()) {\n this.triggerAsync(\n \"warning\",\n {\n code: \"W119\",\n line: this.line,\n character: this.char,\n data: [ \"Unicode property escape\", \"9\" ]\n },\n checks,\n hasUFlag\n );\n }\n\n return sequence;\n }\n }\n if (char < \" \") {\n malformed = true;\n this.triggerAsync(\n \"warning\",\n {\n code: \"W048\",\n line: this.line,\n character: this.char\n },\n checks,\n function() { return true; }\n );\n }\n if (char === \"<\") {\n malformed = true;\n this.triggerAsync(\n \"warning\",\n {\n code: \"W049\",\n line: this.line,\n character: this.char,\n data: [ char ]\n },\n checks,\n function() { return true; }\n );\n } else if (char === \"0\" && reg.decimalDigit.test(this.peek(index + 1))) {\n this.triggerAsync(\n \"error\",\n {\n code: \"E016\",\n line: this.line,\n character: this.char,\n data: [ \"Invalid decimal escape sequence\" ]\n },\n checks,\n hasUFlag\n );\n }\n\n index += 1;\n body += char;\n value += char;\n\n return char;\n }.bind(this);\n\n var checkQuantifier = function() {\n var lookahead = index;\n var lowerBound = \"\";\n var upperBound = \"\";\n var next;\n\n next = this.peek(lookahead + 1);\n\n while (reg.decimalDigit.test(next)) {\n lookahead += 1;\n lowerBound += next;\n next = this.peek(lookahead + 1);\n }\n\n if (!lowerBound) {\n return false;\n }\n\n if (next === \"}\") {\n return true;\n }\n\n if (next !== \",\") {\n return false;\n }\n\n lookahead += 1;\n next = this.peek(lookahead + 1);\n\n while (reg.decimalDigit.test(next)) {\n lookahead += 1;\n upperBound += next;\n next = this.peek(lookahead + 1);\n }\n\n if (next !== \"}\") {\n return false;\n }\n\n if (upperBound) {\n return Number(lowerBound) <= Number(upperBound);\n }\n\n return true;\n }.bind(this);\n\n var translateUFlag = function(body) {\n var astralSubstitute = \"\\uFFFF\";\n\n return body\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function($0, $1, $2) {\n var codePoint = parseInt($1 || $2, 16);\n var literal;\n\n if (codePoint > 0x10FFFF) {\n malformed = true;\n this.trigger(\"error\", {\n code: \"E016\",\n line: this.line,\n character: this.char,\n data: [ char ]\n });\n\n return;\n }\n literal = String.fromCharCode(codePoint);\n\n if (reg.regexpSyntaxChars.test(literal)) {\n return $0;\n }\n\n if (codePoint <= 0xFFFF) {\n return String.fromCharCode(codePoint);\n }\n return astralSubstitute;\n }.bind(this))\n .replace(\n /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n astralSubstitute\n );\n }.bind(this);\n if (!this.prereg || char !== \"/\") {\n return null;\n }\n\n index += 1;\n terminated = false;\n\n while (index < length) {\n isCharSetRange &= char === \"-\";\n char = this.peek(index);\n value += char;\n body += char;\n\n if (isCharSet) {\n if (char === \"]\") {\n if (this.peek(index - 1) !== \"\\\\\" || this.peek(index - 2) === \"\\\\\") {\n isCharSet = false;\n }\n } else if (char === \"-\") {\n isCharSetRange = true;\n }\n }\n\n if (char === \"\\\\\") {\n escapeSequence = scanRegexpEscapeSequence();\n\n if (isCharSet && (this.peek(index) === \"-\" || isCharSetRange) &&\n reg.regexpCharClasses.test(escapeSequence)) {\n this.triggerAsync(\n \"error\",\n {\n code: \"E016\",\n line: this.line,\n character: this.char,\n data: [ \"Character class used in range\" ]\n },\n checks,\n hasUFlag\n );\n }\n\n continue;\n }\n\n if (isCharSet) {\n index += 1;\n continue;\n }\n\n if (char === \"{\" && !hasInvalidQuantifier) {\n hasInvalidQuantifier = !checkQuantifier();\n }\n\n if (char === \"[\") {\n isCharSet = true;\n index += 1;\n continue;\n } else if (char === \"(\") {\n isGroup = true;\n\n if (this.peek(index + 1) === \"?\" &&\n (this.peek(index + 2) === \"=\" || this.peek(index + 2) === \"!\")) {\n isQuantifiable = true;\n }\n } else if (char === \")\") {\n if (isQuantifiable) {\n isQuantifiable = false;\n\n if (reg.regexpQuantifiers.test(this.peek(index + 1))) {\n this.triggerAsync(\n \"error\",\n {\n code: \"E016\",\n line: this.line,\n character: this.char,\n data: [ \"Quantified quantifiable\" ]\n },\n checks,\n hasUFlag\n );\n }\n } else {\n groupCount += 1;\n }\n\n isGroup = false;\n } else if (char === \"/\") {\n body = body.substr(0, body.length - 1);\n terminated = true;\n index += 1;\n break;\n }\n\n index += 1;\n }\n\n if (!terminated) {\n this.trigger(\"error\", {\n code: \"E015\",\n line: this.line,\n character: this.from\n });\n\n return void this.trigger(\"fatal\", {\n line: this.line,\n from: this.from\n });\n }\n\n while (index < length) {\n char = this.peek(index);\n if (!/[gimyus]/.test(char)) {\n break;\n }\n if (char === \"y\") {\n if (!state.inES6(true)) {\n this.triggerAsync(\n \"warning\",\n {\n code: \"W119\",\n line: this.line,\n character: this.char,\n data: [ \"Sticky RegExp flag\", \"6\" ]\n },\n checks,\n function() { return true; }\n );\n }\n } else if (char === \"u\") {\n if (!state.inES6(true)) {\n this.triggerAsync(\n \"warning\",\n {\n code: \"W119\",\n line: this.line,\n character: this.char,\n data: [ \"Unicode RegExp flag\", \"6\" ]\n },\n checks,\n function() { return true; }\n );\n }\n\n var hasInvalidEscape = (function(groupReferences, groupCount, escapedChars, reg) {\n var hasInvalidGroup = groupReferences.some(function(groupReference) {\n if (groupReference > groupCount) {\n return true;\n }\n });\n\n if (hasInvalidGroup) {\n return true;\n }\n\n return !escapedChars.split(\"\").every(function(escapedChar) {\n return escapedChar === \"u\" ||\n escapedChar === \"/\" ||\n escapedChar === \"0\" ||\n reg.regexpControlEscapes.test(escapedChar) ||\n reg.regexpCharClasses.test(escapedChar) ||\n reg.regexpSyntaxChars.test(escapedChar);\n });\n }(groupReferences, groupCount, escapedChars, reg));\n\n if (hasInvalidEscape) {\n malformedDesc = \"Invalid escape\";\n } else if (hasInvalidQuantifier) {\n malformedDesc = \"Invalid quantifier\";\n }\n\n body = translateUFlag(body);\n } else if (char === \"s\") {\n if (!state.inES9()) {\n this.triggerAsync(\n \"warning\",\n {\n code: \"W119\",\n line: this.line,\n character: this.char,\n data: [ \"DotAll RegExp flag\", \"9\" ]\n },\n checks,\n function() { return true; }\n );\n }\n if (value.indexOf(\"s\") > -1) {\n malformedDesc = \"Duplicate RegExp flag\";\n }\n } else {\n es5Flags += char;\n }\n\n if (allFlags.indexOf(char) > -1) {\n malformedDesc = \"Duplicate RegExp flag\";\n }\n allFlags += char;\n\n value += char;\n allFlags += char;\n index += 1;\n }\n\n if (allFlags.indexOf(\"u\") === -1) {\n this.triggerAsync(\"warning\", {\n code: \"W147\",\n line: this.line,\n character: this.char\n }, checks, function() { return state.option.regexpu; });\n }\n\n try {\n new RegExp(body, es5Flags);\n } catch (err) {\n malformedDesc = err.message;\n }\n\n if (malformedDesc) {\n malformed = true;\n this.trigger(\"error\", {\n code: \"E016\",\n line: this.line,\n character: this.char,\n data: [ malformedDesc ]\n });\n } else if (allFlags.indexOf(\"s\") > -1 && !reg.regexpDot.test(body)) {\n this.trigger(\"warning\", {\n code: \"W148\",\n line: this.line,\n character: this.char\n });\n }\n\n return {\n type: Token.RegExp,\n value: value,\n isMalformed: malformed\n };\n },\n scanNonBreakingSpaces: function() {\n return state.option.nonbsp ?\n this.input.search(/(\\u00A0)/) : -1;\n },\n next: function(checks) {\n this.from = this.char;\n while (reg.whitespace.test(this.peek())) {\n this.from += 1;\n this.skip();\n }\n\n var match = this.scanComments(checks) ||\n this.scanStringLiteral(checks) ||\n this.scanTemplateLiteral(checks);\n\n if (match) {\n return match;\n }\n\n match =\n this.scanRegExp(checks) ||\n this.scanPunctuator() ||\n this.scanKeyword() ||\n this.scanIdentifier(checks) ||\n this.scanNumericLiteral(checks);\n\n if (match) {\n this.skip(match.tokenLength || match.value.length);\n return match;\n }\n\n return null;\n },\n nextLine: function(checks) {\n var char;\n\n if (this.line >= this.getLines().length) {\n return false;\n }\n\n this.input = this.getLines()[this.line];\n this.line += 1;\n this.char = 1;\n this.from = 1;\n\n var inputTrimmed = this.input.trim();\n\n var startsWith = function() {\n return _.some(arguments, function(prefix) {\n return inputTrimmed.indexOf(prefix) === 0;\n });\n };\n\n var endsWith = function() {\n return _.some(arguments, function(suffix) {\n return inputTrimmed.indexOf(suffix, inputTrimmed.length - suffix.length) !== -1;\n });\n };\n if (this.ignoringLinterErrors === true) {\n if (!startsWith(\"/*\", \"//\") && !(this.inComment && endsWith(\"*/\"))) {\n this.input = \"\";\n }\n }\n\n char = this.scanNonBreakingSpaces();\n if (char >= 0) {\n this.triggerAsync(\n \"warning\",\n { code: \"W125\", line: this.line, character: char + 1 },\n checks,\n function() { return true; }\n );\n }\n\n this.input = this.input.replace(/\\t/g, state.tab);\n\n if (!this.ignoringLinterErrors && state.option.maxlen &&\n state.option.maxlen < this.input.length) {\n var inComment = this.inComment ||\n startsWith.call(inputTrimmed, \"//\") ||\n startsWith.call(inputTrimmed, \"/*\");\n\n var shouldTriggerError = !inComment || !reg.maxlenException.test(inputTrimmed);\n\n if (shouldTriggerError) {\n this.triggerAsync(\n \"warning\",\n { code: \"W101\", line: this.line, character: this.input.length },\n checks,\n function() { return true; }\n );\n }\n }\n\n return true;\n },\n token: function() {\n var checks = asyncTrigger();\n var token;\n var create = function(type, value, isProperty, token) {\n var obj;\n\n if (type !== \"(endline)\" && type !== \"(end)\") {\n this.prereg = false;\n }\n\n if (type === \"(punctuator)\") {\n switch (value) {\n case \".\":\n case \")\":\n case \"~\":\n case \"#\":\n case \"]\":\n case \"}\":\n case \"++\":\n case \"--\":\n this.prereg = false;\n break;\n default:\n this.prereg = true;\n }\n\n obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n }\n\n if (type === \"(identifier)\") {\n if (value === \"return\" || value === \"case\" || value === \"yield\" ||\n value === \"typeof\" || value === \"instanceof\" || value === \"void\" ||\n value === \"await\" || value === \"new\" || value === \"delete\" ||\n value === \"default\" || value === \"extends\") {\n this.prereg = true;\n }\n\n if (_.has(state.syntax, value)) {\n obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n }\n }\n\n if (type === \"(template)\" || type === \"(template middle)\") {\n this.prereg = true;\n }\n\n if (!obj) {\n obj = Object.create(state.syntax[type]);\n }\n\n obj.identifier = (type === \"(identifier)\");\n obj.type = obj.type || type;\n obj.value = value;\n obj.line = this.line;\n obj.character = this.char;\n obj.from = this.from;\n if (obj.identifier && token) obj.raw_text = token.text || token.value;\n if (token && token.startLine && token.startLine !== this.line) {\n obj.startLine = token.startLine;\n }\n if (token && token.context) {\n obj.context = token.context;\n }\n if (token && token.depth) {\n obj.depth = token.depth;\n }\n if (token && token.isUnclosed) {\n obj.isUnclosed = token.isUnclosed;\n }\n\n if (isProperty && obj.identifier) {\n obj.isProperty = isProperty;\n }\n\n obj.check = checks.check;\n\n return obj;\n }.bind(this);\n\n for (;;) {\n if (!this.input.length) {\n if (this.nextLine(checks)) {\n return create(\"(endline)\", \"\");\n }\n\n if (this.exhausted) {\n return null;\n }\n\n this.exhausted = true;\n return create(\"(end)\", \"\");\n }\n\n token = this.next(checks);\n\n if (!token) {\n if (this.input.length) {\n this.trigger(\"error\", {\n code: \"E024\",\n line: this.line,\n character: this.char,\n data: [ this.peek() ]\n });\n\n this.input = \"\";\n }\n\n continue;\n }\n\n switch (token.type) {\n case Token.StringLiteral:\n this.triggerAsync(\"String\", {\n line: this.line,\n char: this.char,\n from: this.from,\n startLine: token.startLine,\n startChar: token.startChar,\n value: token.value,\n quote: token.quote\n }, checks, function() { return true; });\n\n return create(\"(string)\", token.value, null, token);\n\n case Token.TemplateHead:\n this.trigger(\"TemplateHead\", {\n line: this.line,\n char: this.char,\n from: this.from,\n startLine: token.startLine,\n startChar: token.startChar,\n value: token.value\n });\n return create(\"(template)\", token.value, null, token);\n\n case Token.TemplateMiddle:\n this.trigger(\"TemplateMiddle\", {\n line: this.line,\n char: this.char,\n from: this.from,\n startLine: token.startLine,\n startChar: token.startChar,\n value: token.value\n });\n return create(\"(template middle)\", token.value, null, token);\n\n case Token.TemplateTail:\n this.trigger(\"TemplateTail\", {\n line: this.line,\n char: this.char,\n from: this.from,\n startLine: token.startLine,\n startChar: token.startChar,\n value: token.value\n });\n return create(\"(template tail)\", token.value, null, token);\n\n case Token.NoSubstTemplate:\n this.trigger(\"NoSubstTemplate\", {\n line: this.line,\n char: this.char,\n from: this.from,\n startLine: token.startLine,\n startChar: token.startChar,\n value: token.value\n });\n return create(\"(no subst template)\", token.value, null, token);\n\n case Token.Identifier:\n this.triggerAsync(\"Identifier\", {\n line: this.line,\n char: this.char,\n from: this.from,\n name: token.value,\n raw_name: token.text,\n isProperty: state.tokens.curr.id === \".\"\n }, checks, function() { return true; });\n case Token.Keyword:\n return create(\"(identifier)\", token.value, state.tokens.curr.id === \".\", token);\n\n case Token.NumericLiteral:\n if (token.isMalformed) {\n this.trigger(\"error\", {\n code: \"E067\",\n line: this.line,\n character: this.char,\n data: [ token.value ]\n });\n }\n\n this.triggerAsync(\"warning\", {\n code: \"W114\",\n line: this.line,\n character: this.char,\n data: [ \"0x-\" ]\n }, checks, function() { return token.base === 16 && state.jsonMode; });\n\n this.triggerAsync(\"warning\", {\n code: \"W115\",\n line: this.line,\n character: this.char\n }, checks, function() {\n return state.isStrict() && token.base === 8 && token.isLegacy;\n });\n\n this.triggerAsync(\"error\", {\n code: \"E068\",\n line: this.line,\n character: this.char\n }, checks, function() {\n return state.isStrict() && token.isNonOctal;\n });\n\n this.trigger(\"Number\", {\n line: this.line,\n char: this.char,\n from: this.from,\n value: token.value,\n base: token.base,\n isMalformed: token.isMalformed\n });\n\n return create(\"(number)\", token.value);\n\n case Token.RegExp:\n return create(\"(regexp)\", token.value);\n\n case Token.Comment:\n if (token.isSpecial) {\n return {\n id: '(comment)',\n value: token.value,\n body: token.body,\n type: token.commentType,\n isSpecial: token.isSpecial,\n line: this.line,\n character: this.char,\n from: this.from\n };\n }\n\n break;\n\n default:\n return create(\"(punctuator)\", token.value);\n }\n }\n }\n};\n\nexports.Lexer = Lexer;\nexports.Context = Context;\n\n},{\"../data/ascii-identifier-data.js\":\"/../../../jshint/data/ascii-identifier-data.js\",\"../data/es5-identifier-names.js\":\"/../../../jshint/data/es5-identifier-names.js\",\"../data/non-ascii-identifier-part-only.js\":\"/../../../jshint/data/non-ascii-identifier-part-only.js\",\"../data/non-ascii-identifier-start.js\":\"/../../../jshint/data/non-ascii-identifier-start.js\",\"./reg.js\":\"/../../../jshint/src/reg.js\",\"./state.js\":\"/../../../jshint/src/state.js\",\"./validate-unicode-escape-sequence\":\"/../../../jshint/src/validate-unicode-escape-sequence.js\",\"events\":\"/node_modules/events/events.js\",\"underscore\":\"/../../../jshint/node_modules/underscore/underscore-umd.js\"}],\"/../../../jshint/src/messages.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _ = _dereq_(\"underscore\");\n\nvar errors = {\n E001: \"Bad {a}option: '{b}'.\",\n E002: \"Bad option value.\",\n E003: \"Expected a JSON value.\",\n E004: \"Input is neither a string nor an array of strings.\",\n E005: \"Input is empty.\",\n E006: \"Unexpected early end of program.\",\n E007: \"Missing \\\"use strict\\\" statement.\",\n E008: \"Strict violation.\",\n E009: \"Option 'validthis' can't be used in a global scope.\",\n E010: \"'with' is not allowed in strict mode.\",\n E011: \"'{a}' has already been declared.\",\n E012: \"Missing initializer for constant '{a}'.\",\n E013: \"Attempting to override '{a}' which is a constant.\",\n E014: \"A regular expression literal can be confused with '/='.\",\n E015: \"Unclosed regular expression.\",\n E016: \"Invalid regular expression.\",\n E017: \"Unclosed comment.\",\n E018: \"Unbegun comment.\",\n E019: \"Unmatched '{a}'.\",\n E020: \"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.\",\n E021: \"Expected '{a}' and instead saw '{b}'.\",\n E022: \"Line breaking error '{a}'.\",\n E023: \"Missing '{a}'.\",\n E024: \"Unexpected '{a}'.\",\n E025: \"Missing ':' on a case clause.\",\n E026: \"Missing '}' to match '{' from line {a}.\",\n E027: \"Missing ']' to match '[' from line {a}.\",\n E028: \"Illegal comma.\",\n E029: \"Unclosed string.\",\n E030: \"Expected an identifier and instead saw '{a}'.\",\n E031: \"Bad assignment.\", // FIXME: Rephrase\n E032: \"Expected a small integer or 'false' and instead saw '{a}'.\",\n E033: \"Expected an operator and instead saw '{a}'.\",\n E034: \"get/set are ES5 features.\",\n E035: \"Missing property name.\",\n E036: \"Expected to see a statement and instead saw a block.\",\n E037: null,\n E038: null,\n E039: \"Function declarations are not invocable. Wrap the whole function invocation in parens.\",\n E040: \"Each value should have its own case label.\",\n E041: \"Unrecoverable syntax error.\",\n E042: \"Stopping.\",\n E043: \"Too many errors.\",\n E044: null,\n E045: \"Invalid for each loop.\",\n E046: \"Yield expressions may only occur within generator functions.\",\n E047: null,\n E048: \"{a} declaration not directly within block.\",\n E049: \"A {a} cannot be named '{b}'.\",\n E050: \"Mozilla requires the yield expression to be parenthesized here.\",\n E051: null,\n E052: \"Unclosed template literal.\",\n E053: \"{a} declarations are only allowed at the top level of module scope.\",\n E054: \"Class properties must be methods. Expected '(' but instead saw '{a}'.\",\n E055: \"The '{a}' option cannot be set after any executable code.\",\n E056: \"'{a}' was used before it was declared, which is illegal for '{b}' variables.\",\n E057: \"Invalid meta property: '{a}.{b}'.\",\n E058: \"Missing semicolon.\",\n E059: \"Incompatible values for the '{a}' and '{b}' linting options.\",\n E060: \"Non-callable values cannot be used as the second operand to instanceof.\",\n E061: \"Invalid position for 'yield' expression (consider wrapping in parenthesis).\",\n E062: \"Rest parameter does not a support default value.\",\n E063: \"Super property may only be used within method bodies.\",\n E064: \"Super call may only be used within class method bodies.\",\n E065: \"Functions defined outside of strict mode with non-simple parameter lists may not \" +\n \"enable strict mode.\",\n E066: \"Asynchronous iteration is only available with for-of loops.\",\n E067: \"Malformed numeric literal: '{a}'.\",\n E068: \"Decimals with leading zeros are not allowed in strict mode.\",\n E069: \"Duplicate exported binding: '{a}'.\",\n E070: \"import.meta may only be used in module code.\"\n};\n\nvar warnings = {\n W001: \"'hasOwnProperty' is a really bad name.\",\n W002: \"Value of '{a}' may be overwritten in IE 8 and earlier.\",\n W003: \"'{a}' was used before it was defined.\",\n W004: \"'{a}' is already defined.\",\n W005: \"A dot following a number can be confused with a decimal point.\",\n W006: \"Confusing minuses.\",\n W007: \"Confusing plusses.\",\n W008: \"A leading decimal point can be confused with a dot: '{a}'.\",\n W009: \"The array literal notation [] is preferable.\",\n W010: \"The object literal notation {} is preferable.\",\n W011: null,\n W012: null,\n W013: null,\n W014: \"Misleading line break before '{a}'; readers may interpret this as an expression boundary.\",\n W015: null,\n W016: \"Unexpected use of '{a}'.\",\n W017: \"Bad operand.\",\n W018: \"Confusing use of '{a}'.\",\n W019: \"Use the isNaN function to compare with NaN.\",\n W020: \"Read only.\",\n W021: \"Reassignment of '{a}', which is a {b}. \" +\n \"Use 'var' or 'let' to declare bindings that may change.\",\n W022: \"Do not assign to the exception parameter.\",\n W023: null,\n W024: \"Expected an identifier and instead saw '{a}' (a reserved word).\",\n W025: \"Missing name in function declaration.\",\n W026: \"Inner functions should be listed at the top of the outer function.\",\n W027: \"Unreachable '{a}' after '{b}'.\",\n W028: \"Label '{a}' on {b} statement.\",\n W030: \"Expected an assignment or function call and instead saw an expression.\",\n W031: \"Do not use 'new' for side effects.\",\n W032: \"Unnecessary semicolon.\",\n W033: \"Missing semicolon.\",\n W034: \"Unnecessary directive \\\"{a}\\\".\",\n W035: \"Empty block.\",\n W036: \"Unexpected /*member '{a}'.\",\n W037: \"'{a}' is a statement label.\",\n W038: \"'{a}' used out of scope.\",\n W039: null,\n W040: \"If a strict mode function is executed using function invocation, \" +\n \"its 'this' value will be undefined.\",\n W041: null,\n W042: \"Avoid EOL escaping.\",\n W043: \"Bad escaping of EOL. Use option multistr if needed.\",\n W044: \"Bad or unnecessary escaping.\", /* TODO(caitp): remove W044 */\n W045: \"Value described by numeric literal cannot be accurately \" +\n \"represented with a number value: '{a}'.\",\n W046: \"Don't use extra leading zeros '{a}'.\",\n W047: \"A trailing decimal point can be confused with a dot: '{a}'.\",\n W048: \"Unexpected control character in regular expression.\",\n W049: \"Unexpected escaped character '{a}' in regular expression.\",\n W050: \"JavaScript URL.\",\n W051: \"Variables should not be deleted.\",\n W052: \"Unexpected '{a}'.\",\n W053: \"Do not use {a} as a constructor.\",\n W054: \"The Function constructor is a form of eval.\",\n W055: \"A constructor name should start with an uppercase letter.\",\n W056: \"Bad constructor.\",\n W057: \"Weird construction. Is 'new' necessary?\",\n W058: \"Missing '()' invoking a constructor.\",\n W059: \"Avoid arguments.{a}.\",\n W060: \"document.write can be a form of eval.\",\n W061: \"eval can be harmful.\",\n W062: \"Wrap an immediate function invocation in parens \" +\n \"to assist the reader in understanding that the expression \" +\n \"is the result of a function, and not the function itself.\",\n W063: \"Math is not a function.\",\n W064: \"Missing 'new' prefix when invoking a constructor.\",\n W065: \"Missing radix parameter.\",\n W066: \"Implied eval. Consider passing a function instead of a string.\",\n W067: \"Unorthodox function invocation.\",\n W068: \"Wrapping non-IIFE function literals in parens is unnecessary.\",\n W069: \"['{a}'] is better written in dot notation.\",\n W070: \"Extra comma. (it breaks older versions of IE)\",\n W071: \"This function has too many statements. ({a})\",\n W072: \"This function has too many parameters. ({a})\",\n W073: \"Blocks are nested too deeply. ({a})\",\n W074: \"This function's cyclomatic complexity is too high. ({a})\",\n W075: \"Duplicate {a} '{b}'.\",\n W076: \"Unexpected parameter '{a}' in get {b} function.\",\n W077: \"Expected a single parameter in set {a} function.\",\n W078: \"Setter is defined without getter.\",\n W079: \"Redefinition of '{a}'.\",\n W080: \"It's not necessary to initialize '{a}' to 'undefined'.\",\n W081: null,\n W082: \"Function declarations should not be placed in blocks. \" +\n \"Use a function expression or move the statement to the top of \" +\n \"the outer function.\",\n W083: \"Functions declared within loops referencing an outer scoped \" +\n \"variable may lead to confusing semantics. ({a})\",\n W084: \"Assignment in conditional expression\",\n W085: \"Don't use 'with'.\",\n W086: \"Expected a 'break' statement before '{a}'.\",\n W087: \"Forgotten 'debugger' statement?\",\n W088: \"Creating global 'for' variable. Should be 'for (var {a} ...'.\",\n W089: \"The body of a for in should be wrapped in an if statement to filter \" +\n \"unwanted properties from the prototype.\",\n W090: \"'{a}' is not a statement label.\",\n W091: null,\n W093: \"Did you mean to return a conditional instead of an assignment?\",\n W094: \"Unexpected comma.\",\n W095: \"Expected a string and instead saw {a}.\",\n W096: \"The '{a}' key may produce unexpected results.\",\n W097: \"Use the function form of \\\"use strict\\\".\",\n W098: \"'{a}' is defined but never used.\",\n W099: null,\n W100: null,\n W101: \"Line is too long.\",\n W102: null,\n W103: \"The '{a}' property is deprecated.\",\n W104: \"'{a}' is available in ES{b} (use 'esversion: {b}') or Mozilla JS extensions (use moz).\",\n W105: null,\n W106: \"Identifier '{a}' is not in camel case.\",\n W107: \"Script URL.\",\n W108: \"Strings must use doublequote.\",\n W109: \"Strings must use singlequote.\",\n W110: \"Mixed double and single quotes.\",\n W112: \"Unclosed string.\",\n W113: \"Control character in string: {a}.\",\n W114: \"Avoid {a}.\",\n W115: \"Octal literals are not allowed in strict mode.\",\n W116: \"Expected '{a}' and instead saw '{b}'.\",\n W117: \"'{a}' is not defined.\",\n W118: \"'{a}' is only available in Mozilla JavaScript extensions (use moz option).\",\n W119: \"'{a}' is only available in ES{b} (use 'esversion: {b}').\",\n W120: \"You might be leaking a variable ({a}) here.\",\n W121: \"Extending prototype of native object: '{a}'.\",\n W122: \"Invalid typeof value '{a}'\",\n W123: \"'{a}' is already defined in outer scope.\",\n W124: \"A generator function should contain at least one yield expression.\",\n W125: \"This line contains non-breaking spaces: http://jshint.com/docs/options/#nonbsp\",\n W126: \"Unnecessary grouping operator.\",\n W127: \"Unexpected use of a comma operator.\",\n W128: \"Empty array elements require elision=true.\",\n W129: \"'{a}' is defined in a future version of JavaScript. Use a \" +\n \"different variable name to avoid migration issues.\",\n W130: \"Invalid element after rest element.\",\n W131: \"Invalid parameter after rest parameter.\",\n W132: \"`var` declarations are forbidden. Use `let` or `const` instead.\",\n W133: \"Invalid for-{a} loop left-hand-side: {b}.\",\n W134: \"The '{a}' option is only available when linting ECMAScript {b} code.\",\n W135: \"{a} may not be supported by non-browser environments.\",\n W136: \"'{a}' must be in function scope.\",\n W137: \"Empty destructuring: this is unnecessary and can be removed.\",\n W138: \"Regular parameters should not come after default parameters.\",\n W139: \"Function expressions should not be used as the second operand to instanceof.\",\n W140: \"Missing comma.\",\n W141: \"Empty {a}: this is unnecessary and can be removed.\",\n W142: \"Empty {a}: consider replacing with `import '{b}';`.\",\n W143: \"Assignment to properties of a mapped arguments object may cause \" +\n \"unexpected changes to formal parameters.\",\n W144: \"'{a}' is a non-standard language feature. Enable it using the '{b}' unstable option.\",\n W145: \"Superfluous 'case' clause.\",\n W146: \"Unnecessary `await` expression.\",\n W147: \"Regular expressions should include the 'u' flag.\",\n W148: \"Unnecessary RegExp 's' flag.\"\n};\n\nvar info = {\n I001: \"Comma warnings can be turned off with 'laxcomma'.\",\n I002: null,\n I003: \"ES5 option is now set per default\"\n};\n\nexports.errors = {};\nexports.warnings = {};\nexports.info = {};\n\n_.each(errors, function(desc, code) {\n exports.errors[code] = { code: code, desc: desc };\n});\n\n_.each(warnings, function(desc, code) {\n exports.warnings[code] = { code: code, desc: desc };\n});\n\n_.each(info, function(desc, code) {\n exports.info[code] = { code: code, desc: desc };\n});\n\n},{\"underscore\":\"/../../../jshint/node_modules/underscore/underscore-umd.js\"}],\"/../../../jshint/src/name-stack.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction NameStack() {\n this._stack = [];\n}\n\nObject.defineProperty(NameStack.prototype, \"length\", {\n get: function() {\n return this._stack.length;\n }\n});\nNameStack.prototype.push = function() {\n this._stack.push(null);\n};\nNameStack.prototype.pop = function() {\n this._stack.pop();\n};\nNameStack.prototype.set = function(token) {\n this._stack[this.length - 1] = token;\n};\nNameStack.prototype.infer = function() {\n var nameToken = this._stack[this.length - 1];\n var prefix = \"\";\n var type;\n if (!nameToken || nameToken.type === \"class\") {\n nameToken = this._stack[this.length - 2];\n }\n\n if (!nameToken) {\n return \"(empty)\";\n }\n\n type = nameToken.type;\n\n if (type !== \"(string)\" && type !== \"(number)\" && type !== \"(identifier)\" && type !== \"default\") {\n return \"(expression)\";\n }\n\n if (nameToken.accessorType) {\n prefix = nameToken.accessorType + \" \";\n }\n\n return prefix + nameToken.value;\n};\n\nmodule.exports = NameStack;\n\n},{}],\"/../../../jshint/src/options.js\":[function(_dereq_,module,exports){\n\"use strict\";\nexports.bool = {\n enforcing: {\n bitwise : true,\n freeze : true,\n camelcase : true,\n curly : true,\n eqeqeq : true,\n futurehostile: true,\n es3 : true,\n es5 : true,\n forin : true,\n immed : true,\n leanswitch : true,\n newcap : true,\n noarg : true,\n nocomma : true,\n noempty : true,\n nonbsp : true,\n nonew : true,\n noreturnawait: true,\n regexpu : true,\n undef : true,\n singleGroups: false,\n varstmt: false,\n enforceall : false,\n trailingcomma: false\n },\n relaxing: {\n asi : true,\n multistr : true,\n debug : true,\n boss : true,\n evil : true,\n funcscope : true,\n globalstrict: true,\n iterator : true,\n notypeof : true,\n plusplus : true,\n proto : true,\n scripturl : true,\n sub : true,\n supernew : true,\n laxbreak : true,\n laxcomma : true,\n validthis : true,\n withstmt : true,\n moz : true,\n noyield : true,\n eqnull : true,\n lastsemic : true,\n loopfunc : true,\n expr : true,\n esnext : true,\n elision : true,\n },\n environments: {\n mootools : true,\n couch : true,\n jasmine : true,\n jquery : true,\n node : true,\n qunit : true,\n rhino : true,\n shelljs : true,\n prototypejs : true,\n yui : true,\n mocha : true,\n module : true,\n wsh : true,\n worker : true,\n nonstandard : true,\n browser : true,\n browserify : true,\n devel : true,\n dojo : true,\n typed : true,\n phantom : true\n },\n obsolete: {\n onecase : true, // if one case switch statements should be allowed\n regexp : true, // if the . should not be allowed in regexp literals\n regexdash : true // if unescaped first/last dash (-) inside brackets\n }\n};\nexports.val = {\n maxlen : false,\n indent : false,\n maxerr : false,\n predef : false,\n globals : false,\n quotmark : false,\n\n scope : false,\n maxstatements: false,\n maxdepth : false,\n maxparams : false,\n maxcomplexity: false,\n shadow : false,\n strict : true,\n unused : true,\n latedef : false,\n\n ignore : false, // start/end ignoring lines of code, bypassing the lexer\n\n ignoreDelimiters: false, // array of start/end delimiters used to ignore\n esversion: 5\n};\nexports.unstable = {\n};\nexports.inverted = {\n bitwise : true,\n forin : true,\n newcap : true,\n plusplus: true,\n regexp : true,\n undef : true,\n eqeqeq : true,\n strict : true\n};\n\nexports.validNames = Object.keys(exports.val)\n .concat(Object.keys(exports.bool.relaxing))\n .concat(Object.keys(exports.bool.enforcing))\n .concat(Object.keys(exports.bool.obsolete))\n .concat(Object.keys(exports.bool.environments))\n .concat([\"unstable\"]);\n\nexports.unstableNames = Object.keys(exports.unstable);\nexports.renamed = {\n eqeq : \"eqeqeq\",\n windows: \"wsh\",\n sloppy : \"strict\"\n};\n\nexports.removed = {\n nomen: true,\n onevar: true,\n passfail: true,\n white: true,\n gcl: true,\n smarttabs: true,\n trailing: true\n};\nexports.noenforceall = {\n varstmt: true,\n strict: true,\n regexpu: true\n};\n\n},{}],\"/../../../jshint/src/prod-params.js\":[function(_dereq_,module,exports){\nmodule.exports = {\n export: 1,\n noin: 2,\n initial: 4,\n\n preAsync: 8,\n\n async: 16,\n tryClause: 32,\n yield: 64\n};\n\n},{}],\"/../../../jshint/src/reg.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\nexports.unsafeString =\n /@cc|<\\/?|script|\\]\\s*\\]|<\\s*!|</i;\nexports.needEsc =\n /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n\nexports.needEscGlobal =\n /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\nexports.starSlash = /\\*\\//;\nexports.identifier = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;\nexports.javascriptURL = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\nexports.fallsThrough = /^\\s*falls?\\sthrough\\s*$/;\nexports.maxlenException = /^(?:(?:\\/\\/|\\/\\*|\\*) ?)?[^ ]+$/;\nexports.whitespace = /[ \\f\\n\\r\\t\\v\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]/;\n\nexports.nonzeroDigit = /^[1-9]$/;\n\nexports.decimalDigit = /^[0-9]$/;\n\nexports.regexpSyntaxChars = /[\\^$\\\\.*+?()[\\]{}|]/;\n\nexports.regexpQuantifiers = /[*+?{]/;\n\nexports.regexpControlEscapes = /[fnrtv]/;\n\nexports.regexpCharClasses = /[dDsSwWpP]/;\nexports.regexpDot = /(^|[^\\\\])(\\\\\\\\)*\\./;\n\n},{}],\"/../../../jshint/src/scope-manager.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _ = _dereq_(\"underscore\");\n_.slice = _dereq_(\"lodash.slice\");\nvar events = _dereq_(\"events\");\nvar marker = {};\nvar scopeManager = function(state, predefined, exported, declared) {\n\n var _current;\n var _scopeStack = [];\n\n function _newScope(type) {\n _current = {\n \"(bindings)\": Object.create(null),\n \"(usages)\": Object.create(null),\n \"(labels)\": Object.create(null),\n \"(parent)\": _current,\n \"(type)\": type,\n \"(params)\": (type === \"functionparams\" || type === \"catchparams\") ? [] : null\n };\n _scopeStack.push(_current);\n }\n\n _newScope(\"global\");\n _current[\"(predefined)\"] = predefined;\n\n var _currentFunctBody = _current; // this is the block after the params = function\n\n var usedPredefinedAndGlobals = Object.create(null);\n var impliedGlobals = Object.create(null);\n var unuseds = [];\n var esModuleExports = [];\n var emitter = new events.EventEmitter();\n\n function warning(code, token) {\n emitter.emit(\"warning\", {\n code: code,\n token: token,\n data: _.slice(arguments, 2)\n });\n }\n\n function error(code, token) {\n emitter.emit(\"warning\", {\n code: code,\n token: token,\n data: _.slice(arguments, 2)\n });\n }\n\n function _setupUsages(bindingName) {\n if (!_current[\"(usages)\"][bindingName]) {\n _current[\"(usages)\"][bindingName] = {\n \"(modified)\": [],\n \"(reassigned)\": [],\n \"(tokens)\": []\n };\n }\n }\n\n var _getUnusedOption = function(unused_opt) {\n if (unused_opt === undefined) {\n unused_opt = state.option.unused;\n }\n\n if (unused_opt === true) {\n unused_opt = \"last-param\";\n }\n\n return unused_opt;\n };\n\n var _warnUnused = function(name, tkn, type, unused_opt) {\n var line = tkn.line;\n var chr = tkn.from;\n var raw_name = tkn.raw_text || name;\n\n unused_opt = _getUnusedOption(unused_opt);\n\n var warnable_types = {\n \"vars\": [\"var\"],\n \"last-param\": [\"var\", \"param\"],\n \"strict\": [\"var\", \"param\", \"last-param\"]\n };\n\n if (unused_opt) {\n if (warnable_types[unused_opt] && warnable_types[unused_opt].indexOf(type) !== -1) {\n warning(\"W098\", { line: line, from: chr }, raw_name);\n }\n }\n if (unused_opt || type === \"var\") {\n unuseds.push({\n name: name,\n line: line,\n character: chr\n });\n }\n };\n function _checkForUnused() {\n if (_current[\"(type)\"] !== \"functionparams\") {\n var currentBindings = _current[\"(bindings)\"];\n for (var bindingName in currentBindings) {\n if (currentBindings[bindingName][\"(type)\"] !== \"exception\" &&\n currentBindings[bindingName][\"(unused)\"]) {\n _warnUnused(bindingName, currentBindings[bindingName][\"(token)\"], \"var\");\n }\n }\n return;\n }\n var params = _current[\"(params)\"];\n\n var param = params.pop();\n var unused_opt;\n\n while (param) {\n var binding = _current[\"(bindings)\"][param];\n\n unused_opt = _getUnusedOption(state.funct[\"(unusedOption)\"]);\n if (param === \"undefined\")\n return;\n\n if (binding[\"(unused)\"]) {\n _warnUnused(param, binding[\"(token)\"], \"param\", state.funct[\"(unusedOption)\"]);\n } else if (unused_opt === \"last-param\") {\n return;\n }\n\n param = params.pop();\n }\n }\n function _getBinding(bindingName) {\n for (var i = _scopeStack.length - 1 ; i >= 0; --i) {\n var scopeBindings = _scopeStack[i][\"(bindings)\"];\n if (scopeBindings[bindingName]) {\n return scopeBindings;\n }\n }\n }\n function usedSoFarInCurrentFunction(bindingName) {\n for (var i = _scopeStack.length - 1; i >= 0; i--) {\n var current = _scopeStack[i];\n if (current[\"(usages)\"][bindingName]) {\n return current[\"(usages)\"][bindingName];\n }\n if (current === _currentFunctBody) {\n break;\n }\n }\n return false;\n }\n\n function _checkOuterShadow(bindingName, token) {\n if (state.option.shadow !== \"outer\") {\n return;\n }\n\n var isGlobal = _currentFunctBody[\"(type)\"] === \"global\",\n isNewFunction = _current[\"(type)\"] === \"functionparams\";\n\n var outsideCurrentFunction = !isGlobal;\n for (var i = 0; i < _scopeStack.length; i++) {\n var stackItem = _scopeStack[i];\n\n if (!isNewFunction && _scopeStack[i + 1] === _currentFunctBody) {\n outsideCurrentFunction = false;\n }\n if (outsideCurrentFunction && stackItem[\"(bindings)\"][bindingName]) {\n warning(\"W123\", token, bindingName);\n }\n if (stackItem[\"(labels)\"][bindingName]) {\n warning(\"W123\", token, bindingName);\n }\n }\n }\n\n function _latedefWarning(type, bindingName, token) {\n var isFunction;\n\n if (state.option.latedef) {\n isFunction = type === \"function\" || type === \"generator function\" ||\n type === \"async function\";\n if ((state.option.latedef === true && isFunction) || !isFunction) {\n warning(\"W003\", token, bindingName);\n }\n }\n }\n\n var scopeManagerInst = {\n\n on: function(names, listener) {\n names.split(\" \").forEach(function(name) {\n emitter.on(name, listener);\n });\n },\n\n isPredefined: function(bindingName) {\n return !this.has(bindingName) && _.has(_scopeStack[0][\"(predefined)\"], bindingName);\n },\n stack: function(type) {\n var previousScope = _current;\n _newScope(type);\n\n if (!type && previousScope[\"(type)\"] === \"functionparams\") {\n\n _current[\"(isFuncBody)\"] = true;\n _currentFunctBody = _current;\n }\n },\n unstack: function() {\n var subScope = _scopeStack.length > 1 ? _scopeStack[_scopeStack.length - 2] : null;\n var isUnstackingFunctionBody = _current === _currentFunctBody,\n isUnstackingFunctionParams = _current[\"(type)\"] === \"functionparams\",\n isUnstackingFunctionOuter = _current[\"(type)\"] === \"functionouter\";\n\n var i, j, isImmutable, isFunction;\n var currentUsages = _current[\"(usages)\"];\n var currentBindings = _current[\"(bindings)\"];\n var usedBindingNameList = Object.keys(currentUsages);\n if (currentUsages.__proto__ && usedBindingNameList.indexOf(\"__proto__\") === -1) {\n usedBindingNameList.push(\"__proto__\");\n }\n\n for (i = 0; i < usedBindingNameList.length; i++) {\n var usedBindingName = usedBindingNameList[i];\n\n var usage = currentUsages[usedBindingName];\n var usedBinding = currentBindings[usedBindingName];\n if (usedBinding) {\n var usedBindingType = usedBinding[\"(type)\"];\n isImmutable = usedBindingType === \"const\" || usedBindingType === \"import\";\n\n if (usedBinding[\"(useOutsideOfScope)\"] && !state.option.funcscope) {\n var usedTokens = usage[\"(tokens)\"];\n for (j = 0; j < usedTokens.length; j++) {\n if (usedBinding[\"(function)\"] === usedTokens[j][\"(function)\"]) {\n error(\"W038\", usedTokens[j], usedBindingName);\n }\n }\n }\n _current[\"(bindings)\"][usedBindingName][\"(unused)\"] = false;\n if (isImmutable && usage[\"(modified)\"]) {\n for (j = 0; j < usage[\"(modified)\"].length; j++) {\n error(\"E013\", usage[\"(modified)\"][j], usedBindingName);\n }\n }\n\n isFunction = usedBindingType === \"function\" ||\n usedBindingType === \"generator function\" ||\n usedBindingType === \"async function\";\n if ((isFunction || usedBindingType === \"class\") && usage[\"(reassigned)\"]) {\n for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n if (!usage[\"(reassigned)\"][j].ignoreW021) {\n warning(\"W021\", usage[\"(reassigned)\"][j], usedBindingName, usedBindingType);\n }\n }\n }\n continue;\n }\n\n if (subScope) {\n var bindingType = this.bindingtype(usedBindingName);\n isImmutable = bindingType === \"const\" ||\n (bindingType === null && _scopeStack[0][\"(predefined)\"][usedBindingName] === false);\n if (isUnstackingFunctionOuter && !isImmutable) {\n if (!state.funct[\"(outerMutables)\"]) {\n state.funct[\"(outerMutables)\"] = [];\n }\n state.funct[\"(outerMutables)\"].push(usedBindingName);\n }\n if (!subScope[\"(usages)\"][usedBindingName]) {\n subScope[\"(usages)\"][usedBindingName] = usage;\n if (isUnstackingFunctionBody) {\n subScope[\"(usages)\"][usedBindingName][\"(onlyUsedSubFunction)\"] = true;\n }\n } else {\n var subScopeUsage = subScope[\"(usages)\"][usedBindingName];\n subScopeUsage[\"(modified)\"] = subScopeUsage[\"(modified)\"].concat(usage[\"(modified)\"]);\n subScopeUsage[\"(tokens)\"] = subScopeUsage[\"(tokens)\"].concat(usage[\"(tokens)\"]);\n subScopeUsage[\"(reassigned)\"] =\n subScopeUsage[\"(reassigned)\"].concat(usage[\"(reassigned)\"]);\n }\n } else {\n if (typeof _current[\"(predefined)\"][usedBindingName] === \"boolean\") {\n delete declared[usedBindingName];\n usedPredefinedAndGlobals[usedBindingName] = marker;\n if (_current[\"(predefined)\"][usedBindingName] === false && usage[\"(reassigned)\"]) {\n for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n if (!usage[\"(reassigned)\"][j].ignoreW020) {\n warning(\"W020\", usage[\"(reassigned)\"][j]);\n }\n }\n }\n }\n else {\n for (j = 0; j < usage[\"(tokens)\"].length; j++) {\n var undefinedToken = usage[\"(tokens)\"][j];\n if (!undefinedToken.forgiveUndef) {\n if (state.option.undef && !undefinedToken.ignoreUndef) {\n warning(\"W117\", undefinedToken, usedBindingName);\n }\n if (impliedGlobals[usedBindingName]) {\n impliedGlobals[usedBindingName].line.push(undefinedToken.line);\n } else {\n impliedGlobals[usedBindingName] = {\n name: usedBindingName,\n line: [undefinedToken.line]\n };\n }\n }\n }\n }\n }\n }\n if (!subScope) {\n Object.keys(declared)\n .forEach(function(bindingNotUsed) {\n _warnUnused(bindingNotUsed, declared[bindingNotUsed], \"var\");\n });\n }\n if (subScope && !isUnstackingFunctionBody &&\n !isUnstackingFunctionParams && !isUnstackingFunctionOuter) {\n var bindingNames = Object.keys(currentBindings);\n for (i = 0; i < bindingNames.length; i++) {\n\n var defBindingName = bindingNames[i];\n var defBinding = currentBindings[defBindingName];\n\n if (!defBinding[\"(blockscoped)\"] && defBinding[\"(type)\"] !== \"exception\") {\n var shadowed = subScope[\"(bindings)\"][defBindingName];\n if (shadowed) {\n shadowed[\"(unused)\"] &= defBinding[\"(unused)\"];\n } else {\n defBinding[\"(useOutsideOfScope)\"] =\n _currentFunctBody[\"(type)\"] !== \"global\" &&\n !this.funct.has(defBindingName, { excludeCurrent: true });\n\n subScope[\"(bindings)\"][defBindingName] = defBinding;\n }\n\n delete currentBindings[defBindingName];\n }\n }\n }\n\n _checkForUnused();\n\n _scopeStack.pop();\n if (isUnstackingFunctionBody) {\n _currentFunctBody = _scopeStack[_.findLastIndex(_scopeStack, function(scope) {\n return scope[\"(isFuncBody)\"] || scope[\"(type)\"] === \"global\";\n })];\n }\n\n _current = subScope;\n },\n addParam: function(bindingName, token, type) {\n type = type || \"param\";\n\n if (type === \"exception\") {\n var previouslyDefinedBindingType = this.funct.bindingtype(bindingName);\n if (previouslyDefinedBindingType && previouslyDefinedBindingType !== \"exception\") {\n if (!state.option.node) {\n warning(\"W002\", state.tokens.next, bindingName);\n }\n }\n\n if (state.isStrict() && (bindingName === \"arguments\" || bindingName === \"eval\")) {\n warning(\"E008\", token);\n }\n }\n if (_.has(_current[\"(bindings)\"], bindingName)) {\n _current[\"(bindings)\"][bindingName].duplicated = true;\n } else {\n _checkOuterShadow(bindingName, token);\n\n _current[\"(bindings)\"][bindingName] = {\n \"(type)\" : type,\n \"(token)\": token,\n \"(unused)\": true };\n\n _current[\"(params)\"].push(bindingName);\n }\n\n if (_.has(_current[\"(usages)\"], bindingName)) {\n var usage = _current[\"(usages)\"][bindingName];\n if (usage[\"(onlyUsedSubFunction)\"]) {\n _latedefWarning(type, bindingName, token);\n } else {\n warning(\"W003\", token, bindingName);\n }\n }\n },\n\n validateParams: function(isArrow) {\n var isStrict = state.isStrict();\n var currentFunctParamScope = _currentFunctBody[\"(parent)\"];\n var isSimple = state.funct['(hasSimpleParams)'];\n var isMethod = state.funct[\"(method)\"];\n\n if (!currentFunctParamScope[\"(params)\"]) {\n return;\n }\n\n currentFunctParamScope[\"(params)\"].forEach(function(bindingName) {\n var binding = currentFunctParamScope[\"(bindings)\"][bindingName];\n\n if (binding.duplicated) {\n if (isStrict || isArrow || isMethod || !isSimple) {\n warning(\"E011\", binding[\"(token)\"], bindingName);\n } else if (state.option.shadow !== true) {\n warning(\"W004\", binding[\"(token)\"], bindingName);\n }\n }\n\n if (isStrict && (bindingName === \"arguments\" || bindingName === \"eval\")) {\n warning(\"E008\", binding[\"(token)\"]);\n }\n });\n },\n\n getUsedOrDefinedGlobals: function() {\n var list = Object.keys(usedPredefinedAndGlobals);\n if (usedPredefinedAndGlobals.__proto__ === marker &&\n list.indexOf(\"__proto__\") === -1) {\n list.push(\"__proto__\");\n }\n\n return list;\n },\n getImpliedGlobals: function() {\n var values = _.values(impliedGlobals);\n var hasProto = false;\n if (impliedGlobals.__proto__) {\n hasProto = values.some(function(value) {\n return value.name === \"__proto__\";\n });\n if (!hasProto) {\n values.push(impliedGlobals.__proto__);\n }\n }\n\n return values;\n },\n getUnuseds: function() {\n return unuseds;\n },\n has: function(bindingName) {\n return Boolean(_getBinding(bindingName));\n },\n bindingtype: function(bindingName) {\n var scopeBindings = _getBinding(bindingName);\n if (scopeBindings) {\n return scopeBindings[bindingName][\"(type)\"];\n }\n return null;\n },\n addExported: function(bindingName) {\n var globalBindings = _scopeStack[0][\"(bindings)\"];\n if (_.has(declared, bindingName)) {\n delete declared[bindingName];\n } else if (_.has(globalBindings, bindingName)) {\n globalBindings[bindingName][\"(unused)\"] = false;\n } else {\n for (var i = 1; i < _scopeStack.length; i++) {\n var scope = _scopeStack[i];\n if (!scope[\"(type)\"]) {\n if (_.has(scope[\"(bindings)\"], bindingName) &&\n !scope[\"(bindings)\"][bindingName][\"(blockscoped)\"]) {\n scope[\"(bindings)\"][bindingName][\"(unused)\"] = false;\n return;\n }\n } else {\n break;\n }\n }\n exported[bindingName] = true;\n }\n },\n setExported: function(localName, exportName) {\n if (exportName) {\n if (esModuleExports.indexOf(exportName.value) > -1) {\n error(\"E069\", exportName, exportName.value);\n }\n\n esModuleExports.push(exportName.value);\n }\n\n if (localName) {\n this.block.use(localName.value, localName);\n }\n },\n initialize: function(bindingName) {\n if (_current[\"(bindings)\"][bindingName]) {\n _current[\"(bindings)\"][bindingName][\"(initialized)\"] = true;\n }\n },\n addbinding: function(bindingName, opts) {\n\n var type = opts.type;\n var token = opts.token;\n var isblockscoped = type === \"let\" || type === \"const\" ||\n type === \"class\" || type === \"import\" || type === \"generator function\" ||\n type === \"async function\" || type === \"async generator function\";\n var ishoisted = type === \"function\" || type === \"generator function\" ||\n type === \"async function\" || type === \"import\";\n var isexported = (isblockscoped ? _current : _currentFunctBody)[\"(type)\"] === \"global\" &&\n _.has(exported, bindingName);\n _checkOuterShadow(bindingName, token);\n\n if (state.isStrict() && (bindingName === \"arguments\" || bindingName === \"eval\")) {\n warning(\"E008\", token);\n }\n\n if (isblockscoped) {\n\n var declaredInCurrentScope = _current[\"(bindings)\"][bindingName];\n if (!declaredInCurrentScope && _current === _currentFunctBody &&\n _current[\"(type)\"] !== \"global\") {\n declaredInCurrentScope = !!_currentFunctBody[\"(parent)\"][\"(bindings)\"][bindingName];\n }\n if (!declaredInCurrentScope && _current[\"(usages)\"][bindingName]) {\n var usage = _current[\"(usages)\"][bindingName];\n if (usage[\"(onlyUsedSubFunction)\"] || ishoisted) {\n _latedefWarning(type, bindingName, token);\n } else if (!ishoisted) {\n warning(\"E056\", token, bindingName, type);\n }\n }\n if (declaredInCurrentScope &&\n (!ishoisted || (_current[\"(type)\"] !== \"global\" || type === \"import\"))) {\n warning(\"E011\", token, bindingName);\n }\n else if (state.option.shadow === \"outer\") {\n if (scopeManagerInst.funct.has(bindingName)) {\n warning(\"W004\", token, bindingName);\n }\n }\n\n scopeManagerInst.block.add(\n bindingName, type, token, !isexported, opts.initialized\n );\n\n } else {\n\n var declaredInCurrentFunctionScope = scopeManagerInst.funct.has(bindingName);\n if (!declaredInCurrentFunctionScope && usedSoFarInCurrentFunction(bindingName)) {\n _latedefWarning(type, bindingName, token);\n }\n if (scopeManagerInst.funct.has(bindingName, { onlyBlockscoped: true })) {\n warning(\"E011\", token, bindingName);\n } else if (state.option.shadow !== true) {\n if (declaredInCurrentFunctionScope && bindingName !== \"__proto__\") {\n if (_currentFunctBody[\"(type)\"] !== \"global\") {\n warning(\"W004\", token, bindingName);\n }\n }\n }\n\n scopeManagerInst.funct.add(bindingName, type, token, !isexported);\n\n if (_currentFunctBody[\"(type)\"] === \"global\" && !state.impliedClosure()) {\n usedPredefinedAndGlobals[bindingName] = marker;\n }\n }\n },\n\n funct: {\n bindingtype: function(bindingName, options) {\n var onlyBlockscoped = options && options.onlyBlockscoped;\n var excludeParams = options && options.excludeParams;\n var currentScopeIndex = _scopeStack.length - (options && options.excludeCurrent ? 2 : 1);\n for (var i = currentScopeIndex; i >= 0; i--) {\n var current = _scopeStack[i];\n if (current[\"(bindings)\"][bindingName] &&\n (!onlyBlockscoped || current[\"(bindings)\"][bindingName][\"(blockscoped)\"])) {\n return current[\"(bindings)\"][bindingName][\"(type)\"];\n }\n var scopeCheck = excludeParams ? _scopeStack[ i - 1 ] : current;\n if (scopeCheck && scopeCheck[\"(type)\"] === \"functionparams\") {\n return null;\n }\n }\n return null;\n },\n hasLabel: function(labelName) {\n for (var i = _scopeStack.length - 1; i >= 0; i--) {\n var current = _scopeStack[i];\n\n if (current[\"(labels)\"][labelName]) {\n return true;\n }\n if (current[\"(type)\"] === \"functionparams\") {\n return false;\n }\n }\n return false;\n },\n has: function(bindingName, options) {\n return Boolean(this.bindingtype(bindingName, options));\n },\n add: function(bindingName, type, tok, unused) {\n _current[\"(bindings)\"][bindingName] = {\n \"(type)\" : type,\n \"(token)\": tok,\n \"(blockscoped)\": false,\n \"(function)\": _currentFunctBody,\n \"(unused)\": unused };\n }\n },\n\n block: {\n isGlobal: function() {\n return _current[\"(type)\"] === \"global\";\n },\n use: function(bindingName, token) {\n var paramScope = _currentFunctBody[\"(parent)\"];\n if (paramScope && paramScope[\"(bindings)\"][bindingName] &&\n paramScope[\"(bindings)\"][bindingName][\"(type)\"] === \"param\") {\n if (!scopeManagerInst.funct.has(bindingName,\n { excludeParams: true, onlyBlockscoped: true })) {\n paramScope[\"(bindings)\"][bindingName][\"(unused)\"] = false;\n }\n }\n\n if (token && (state.ignored.W117 || state.option.undef === false)) {\n token.ignoreUndef = true;\n }\n\n _setupUsages(bindingName);\n\n _current[\"(usages)\"][bindingName][\"(onlyUsedSubFunction)\"] = false;\n\n if (token) {\n token[\"(function)\"] = _currentFunctBody;\n _current[\"(usages)\"][bindingName][\"(tokens)\"].push(token);\n }\n var binding = _current[\"(bindings)\"][bindingName];\n if (binding && binding[\"(blockscoped)\"] && !binding[\"(initialized)\"]) {\n error(\"E056\", token, bindingName, binding[\"(type)\"]);\n }\n },\n\n reassign: function(bindingName, token) {\n token.ignoreW020 = state.ignored.W020;\n token.ignoreW021 = state.ignored.W021;\n\n this.modify(bindingName, token);\n\n _current[\"(usages)\"][bindingName][\"(reassigned)\"].push(token);\n },\n\n modify: function(bindingName, token) {\n\n _setupUsages(bindingName);\n\n _current[\"(usages)\"][bindingName][\"(onlyUsedSubFunction)\"] = false;\n _current[\"(usages)\"][bindingName][\"(modified)\"].push(token);\n },\n add: function(bindingName, type, tok, unused, initialized) {\n _current[\"(bindings)\"][bindingName] = {\n \"(type)\" : type,\n \"(token)\": tok,\n \"(initialized)\": !!initialized,\n \"(blockscoped)\": true,\n \"(unused)\": unused };\n },\n\n addLabel: function(labelName, opts) {\n var token = opts.token;\n if (scopeManagerInst.funct.hasLabel(labelName)) {\n warning(\"E011\", token, labelName);\n }\n else if (state.option.shadow === \"outer\") {\n if (scopeManagerInst.funct.has(labelName)) {\n warning(\"W004\", token, labelName);\n } else {\n _checkOuterShadow(labelName, token);\n }\n }\n _current[\"(labels)\"][labelName] = token;\n }\n }\n };\n return scopeManagerInst;\n};\n\nmodule.exports = scopeManager;\n\n},{\"events\":\"/node_modules/events/events.js\",\"lodash.slice\":\"/../../../jshint/node_modules/lodash.slice/index.js\",\"underscore\":\"/../../../jshint/node_modules/underscore/underscore-umd.js\"}],\"/../../../jshint/src/state.js\":[function(_dereq_,module,exports){\n\"use strict\";\nvar NameStack = _dereq_(\"./name-stack.js\");\n\nvar state = {\n syntax: {},\n isStrict: function() {\n return !!this.directive[\"use strict\"] || this.inClassBody ||\n this.option.module || this.option.strict === \"implied\";\n },\n stmtMissingStrict: function() {\n if (this.option.strict === \"global\") {\n return true;\n }\n\n if (this.option.strict === false) {\n return false;\n }\n\n if (this.option.globalstrict) {\n return true;\n }\n\n return false;\n },\n\n allowsGlobalUsd: function() {\n return this.option.strict === \"global\" || this.option.globalstrict ||\n this.option.module || this.impliedClosure();\n },\n impliedClosure: function() {\n return this.option.node || this.option.phantom || this.option.browserify;\n },\n\n inMoz: function() {\n return this.option.moz;\n },\n inES11: function() {\n return this.esVersion >= 11;\n },\n inES10: function() {\n return this.esVersion >= 10;\n },\n inES9: function() {\n return this.esVersion >= 9;\n },\n inES8: function() {\n return this.esVersion >= 8;\n },\n inES7: function() {\n return this.esVersion >= 7;\n },\n inES6: function(strict) {\n if (!strict && this.option.moz) {\n return true;\n }\n\n return this.esVersion >= 6;\n },\n inES5: function() {\n return !this.esVersion || this.esVersion >= 5 || this.option.moz;\n },\n inferEsVersion: function() {\n var badOpt = null;\n\n if (this.option.esversion) {\n if (this.option.es3) {\n badOpt = \"es3\";\n } else if (this.option.es5) {\n badOpt = \"es5\";\n } else if (this.option.esnext) {\n badOpt = \"esnext\";\n }\n\n if (badOpt) {\n return badOpt;\n }\n\n if (this.option.esversion === 2015) {\n this.esVersion = 6;\n } else {\n this.esVersion = this.option.esversion;\n }\n } else if (this.option.es3) {\n this.esVersion = 3;\n } else if (this.option.esnext) {\n this.esVersion = 6;\n }\n\n return null;\n },\n\n reset: function() {\n this.tokens = {\n prev: null,\n next: null,\n curr: null\n };\n\n this.option = { unstable: {} };\n this.esVersion = 5;\n this.funct = null;\n this.ignored = {};\n this.directive = Object.create(null);\n this.jsonMode = false;\n this.lines = [];\n this.tab = \"\";\n this.cache = {}; // Node.JS doesn't have Map. Sniff.\n this.ignoredLines = {};\n this.forinifcheckneeded = false;\n this.nameStack = new NameStack();\n this.inClassBody = false;\n }\n};\n\nexports.state = state;\n\n},{\"./name-stack.js\":\"/../../../jshint/src/name-stack.js\"}],\"/../../../jshint/src/style.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.register = function(linter) {\n\n linter.on(\"Identifier\", function style_scanProto(data) {\n if (linter.getOption(\"proto\")) {\n return;\n }\n\n if (data.name === \"__proto__\") {\n linter.warn(\"W103\", {\n line: data.line,\n char: data.char,\n data: [ data.name, \"6\" ]\n });\n }\n });\n\n linter.on(\"Identifier\", function style_scanIterator(data) {\n if (linter.getOption(\"iterator\")) {\n return;\n }\n\n if (data.name === \"__iterator__\") {\n linter.warn(\"W103\", {\n line: data.line,\n char: data.char,\n data: [ data.name ]\n });\n }\n });\n\n linter.on(\"Identifier\", function style_scanCamelCase(data) {\n if (!linter.getOption(\"camelcase\")) {\n return;\n }\n\n if (data.name.replace(/^_+|_+$/g, \"\").indexOf(\"_\") > -1 && !data.name.match(/^[A-Z0-9_]*$/)) {\n linter.warn(\"W106\", {\n line: data.line,\n char: data.char,\n data: [ data.name ]\n });\n }\n });\n\n linter.on(\"String\", function style_scanQuotes(data) {\n var quotmark = linter.getOption(\"quotmark\");\n var code;\n\n if (!quotmark) {\n return;\n }\n\n if (quotmark === \"single\" && data.quote !== \"'\") {\n code = \"W109\";\n }\n\n if (quotmark === \"double\" && data.quote !== \"\\\"\") {\n code = \"W108\";\n }\n\n if (quotmark === true) {\n if (!linter.getCache(\"quotmark\")) {\n linter.setCache(\"quotmark\", data.quote);\n }\n\n if (linter.getCache(\"quotmark\") !== data.quote) {\n code = \"W110\";\n }\n }\n\n if (code) {\n linter.warn(code, {\n line: data.line,\n char: data.char,\n });\n }\n });\n\n linter.on(\"Number\", function style_scanNumbers(data) {\n if (data.value.charAt(0) === \".\") {\n linter.warn(\"W008\", {\n line: data.line,\n char: data.char,\n data: [ data.value ]\n });\n }\n\n if (data.value.substr(data.value.length - 1) === \".\") {\n linter.warn(\"W047\", {\n line: data.line,\n char: data.char,\n data: [ data.value ]\n });\n }\n\n if (/^00+/.test(data.value)) {\n linter.warn(\"W046\", {\n line: data.line,\n char: data.char,\n data: [ data.value ]\n });\n }\n });\n\n linter.on(\"String\", function style_scanJavaScriptURLs(data) {\n var re = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\n\n if (linter.getOption(\"scripturl\")) {\n return;\n }\n\n if (re.test(data.value)) {\n linter.warn(\"W107\", {\n line: data.line,\n char: data.char\n });\n }\n });\n};\n\n},{}],\"/../../../jshint/src/validate-unicode-escape-sequence.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nmodule.exports = function validate(sequence) {\n var equalSignIndex = sequence.indexOf(\"=\");\n\n if (equalSignIndex === -1) {\n return sequence in names.binary || sequence in values.general;\n }\n\n var name = sequence.substr(0, equalSignIndex);\n var value = sequence.substr(equalSignIndex + 1);\n\n if (name === \"General_Category\" || name === \"gc\") {\n return value in values.general;\n } if (name === \"Script\" || name === \"sc\" || name === \"Script_Extensions\" || name === \"scx\") {\n return value in values.script;\n }\n\n return false;\n};\n\n\nvar names = {\n nonBinary: Object.create(null),\n binary: Object.create(null)\n};\nvar values = {\n general: Object.create(null),\n script: Object.create(null)\n};\n\nvar nb = names.nonBinary;\nnb.General_Category = true;\nnb.gc = true;\nnb.Script = true;\nnb.sc = true;\nnb.Script_Extensions = true;\nnb.scx = true;\n\nvar b = names.binary;\nb.ASCII = true;\nb.ASCII_Hex_Digit = true;\nb.AHex = true;\nb.Alphabetic = true;\nb.Alpha = true;\nb.Any = true;\nb.Assigned = true;\nb.Bidi_Control = true;\nb.Bidi_C = true;\nb.Bidi_Mirrored = true;\nb.Bidi_M = true;\nb.Case_Ignorable = true;\nb.CI = true;\nb.Cased = true;\nb.Changes_When_Casefolded = true;\nb.CWCF = true;\nb.Changes_When_Casemapped = true;\nb.CWCM = true;\nb.Changes_When_Lowercased = true;\nb.CWL = true;\nb.Changes_When_NFKC_Casefolded = true;\nb.CWKCF = true;\nb.Changes_When_Titlecased = true;\nb.CWT = true;\nb.Changes_When_Uppercased = true;\nb.CWU = true;\nb.Dash = true;\nb.Default_Ignorable_Code_Point = true;\nb.DI = true;\nb.Deprecated = true;\nb.Dep = true;\nb.Diacritic = true;\nb.Dia = true;\nb.Emoji = true;\nb.Emoji_Component = true;\nb.EComp = true;\nb.Emoji_Modifier = true;\nb.EMod = true;\nb.Emoji_Modifier_Base = true;\nb.EBase = true;\nb.Emoji_Presentation = true;\nb.EPres = true;\nb.Extended_Pictographic = true;\nb.ExtPict = true;\nb.Extender = true;\nb.Ext = true;\nb.Grapheme_Base = true;\nb.Gr_Base = true;\nb.Grapheme_Extend = true;\nb.Gr_Ext = true;\nb.Hex_Digit = true;\nb.Hex = true;\nb.IDS_Binary_Operator = true;\nb.IDSB = true;\nb.IDS_Trinary_Operator = true;\nb.IDST = true;\nb.ID_Continue = true;\nb.IDC = true;\nb.ID_Start = true;\nb.IDS = true;\nb.Ideographic = true;\nb.Ideo = true;\nb.Join_Control = true;\nb.Join_C = true;\nb.Logical_Order_Exception = true;\nb.LOE = true;\nb.Lowercase = true;\nb.Lower = true;\nb.Math = true;\nb.Noncharacter_Code_Point = true;\nb.NChar = true;\nb.Pattern_Syntax = true;\nb.Pat_Syn = true;\nb.Pattern_White_Space = true;\nb.Pat_WS = true;\nb.Quotation_Mark = true;\nb.QMark = true;\nb.Radical = true;\nb.Regional_Indicator = true;\nb.RI = true;\nb.Sentence_Terminal = true;\nb.STerm = true;\nb.Soft_Dotted = true;\nb.SD = true;\nb.Terminal_Punctuation = true;\nb.Term = true;\nb.Unified_Ideograph = true;\nb.UIdeo = true;\nb.Uppercase = true;\nb.Upper = true;\nb.Variation_Selector = true;\nb.VS = true;\nb.White_Space = true;\nb.space = true;\nb.XID_Continue = true;\nb.XIDC = true;\nb.XID_Start = true;\nb.XIDS = true;\n\nvar g = values.general;\ng.Cased_Letter = true;\ng.LC = true;\ng.Close_Punctuation = true;\ng.Pe = true;\ng.Connector_Punctuation = true;\ng.Pc = true;\ng.Control = true;\ng.Cc = true;\ng.cntrl = true;\ng.Currency_Symbol = true;\ng.Sc = true;\ng.Dash_Punctuation = true;\ng.Pd = true;\ng.Decimal_Number = true;\ng.Nd = true;\ng.digit = true;\ng.Enclosing_Mark = true;\ng.Me = true;\ng.Final_Punctuation = true;\ng.Pf = true;\ng.Format = true;\ng.Cf = true;\ng.Initial_Punctuation = true;\ng.Pi = true;\ng.Letter = true;\ng.L = true;\ng.Letter_Number = true;\ng.Nl = true;\ng.Line_Separator = true;\ng.Zl = true;\ng.Lowercase_Letter = true;\ng.Ll = true;\ng.Mark = true;\ng.M = true;\ng.Combining_Mark = true;\ng.Math_Symbol = true;\ng.Sm = true;\ng.Modifier_Letter = true;\ng.Lm = true;\ng.Modifier_Symbol = true;\ng.Sk = true;\ng.Nonspacing_Mark = true;\ng.Mn = true;\ng.Number = true;\ng.N = true;\ng.Open_Punctuation = true;\ng.Ps = true;\ng.Other = true;\ng.C = true;\ng.Other_Letter = true;\ng.Lo = true;\ng.Other_Number = true;\ng.No = true;\ng.Other_Punctuation = true;\ng.Po = true;\ng.Other_Symbol = true;\ng.So = true;\ng.Paragraph_Separator = true;\ng.Zp = true;\ng.Private_Use = true;\ng.Co = true;\ng.Punctuation = true;\ng.P = true;\ng.punct = true;\ng.Separator = true;\ng.Z = true;\ng.Space_Separator = true;\ng.Zs = true;\ng.Spacing_Mark = true;\ng.Mc = true;\ng.Surrogate = true;\ng.Cs = true;\ng.Symbol = true;\ng.S = true;\ng.Titlecase_Letter = true;\ng.Lt = true;\ng.Unassigned = true;\ng.Cn = true;\ng.Uppercase_Letter = true;\ng.Lu = true;\n\nvar s = values.script;\ns.Adlam = true;\ns.Adlm = true;\ns.Ahom = true;\ns.Anatolian_Hieroglyphs = true;\ns.Hluw = true;\ns.Arabic = true;\ns.Arab = true;\ns.Armenian = true;\ns.Armn = true;\ns.Avestan = true;\ns.Avst = true;\ns.Balinese = true;\ns.Bali = true;\ns.Bamum = true;\ns.Bamu = true;\ns.Bassa_Vah = true;\ns.Bass = true;\ns.Batak = true;\ns.Batk = true;\ns.Bengali = true;\ns.Beng = true;\ns.Bhaiksuki = true;\ns.Bhks = true;\ns.Bopomofo = true;\ns.Bopo = true;\ns.Brahmi = true;\ns.Brah = true;\ns.Braille = true;\ns.Brai = true;\ns.Buginese = true;\ns.Bugi = true;\ns.Buhid = true;\ns.Buhd = true;\ns.Canadian_Aboriginal = true;\ns.Cans = true;\ns.Carian = true;\ns.Cari = true;\ns.Caucasian_Albanian = true;\ns.Aghb = true;\ns.Chakma = true;\ns.Cakm = true;\ns.Cham = true;\ns.Chorasmian = true;\ns.Chrs = true;\ns.Cherokee = true;\ns.Cher = true;\ns.Common = true;\ns.Zyyy = true;\ns.Coptic = true;\ns.Copt = true;\ns.Qaac = true;\ns.Cuneiform = true;\ns.Xsux = true;\ns.Cypriot = true;\ns.Cprt = true;\ns.Cyrillic = true;\ns.Cyrl = true;\ns.Deseret = true;\ns.Dsrt = true;\ns.Devanagari = true;\ns.Deva = true;\ns.Dives_Akuru = true;\ns.Diak = true;\ns.Dogra = true;\ns.Dogr = true;\ns.Duployan = true;\ns.Dupl = true;\ns.Egyptian_Hieroglyphs = true;\ns.Egyp = true;\ns.Elbasan = true;\ns.Elba = true;\ns.Elymaic = true;\ns.Elym = true;\ns.Ethiopic = true;\ns.Ethi = true;\ns.Georgian = true;\ns.Geor = true;\ns.Glagolitic = true;\ns.Glag = true;\ns.Gothic = true;\ns.Goth = true;\ns.Grantha = true;\ns.Gran = true;\ns.Greek = true;\ns.Grek = true;\ns.Gujarati = true;\ns.Gujr = true;\ns.Gunjala_Gondi = true;\ns.Gong = true;\ns.Gurmukhi = true;\ns.Guru = true;\ns.Han = true;\ns.Hani = true;\ns.Hangul = true;\ns.Hang = true;\ns.Hanifi_Rohingya = true;\ns.Rohg = true;\ns.Hanunoo = true;\ns.Hano = true;\ns.Hatran = true;\ns.Hatr = true;\ns.Hebrew = true;\ns.Hebr = true;\ns.Hiragana = true;\ns.Hira = true;\ns.Imperial_Aramaic = true;\ns.Armi = true;\ns.Inherited = true;\ns.Zinh = true;\ns.Qaai = true;\ns.Inscriptional_Pahlavi = true;\ns.Phli = true;\ns.Inscriptional_Parthian = true;\ns.Prti = true;\ns.Javanese = true;\ns.Java = true;\ns.Kaithi = true;\ns.Kthi = true;\ns.Kannada = true;\ns.Knda = true;\ns.Katakana = true;\ns.Kana = true;\ns.Kayah_Li = true;\ns.Kali = true;\ns.Kharoshthi = true;\ns.Khar = true;\ns.Khitan_Small_Script = true;\ns.Kits = true;\ns.Khmer = true;\ns.Khmr = true;\ns.Khojki = true;\ns.Khoj = true;\ns.Khudawadi = true;\ns.Sind = true;\ns.Lao = true;\ns.Laoo = true;\ns.Latin = true;\ns.Latn = true;\ns.Lepcha = true;\ns.Lepc = true;\ns.Limbu = true;\ns.Limb = true;\ns.Linear_A = true;\ns.Lina = true;\ns.Linear_B = true;\ns.Linb = true;\ns.Lisu = true;\ns.Lycian = true;\ns.Lyci = true;\ns.Lydian = true;\ns.Lydi = true;\ns.Mahajani = true;\ns.Mahj = true;\ns.Makasar = true;\ns.Maka = true;\ns.Malayalam = true;\ns.Mlym = true;\ns.Mandaic = true;\ns.Mand = true;\ns.Manichaean = true;\ns.Mani = true;\ns.Marchen = true;\ns.Marc = true;\ns.Medefaidrin = true;\ns.Medf = true;\ns.Masaram_Gondi = true;\ns.Gonm = true;\ns.Meetei_Mayek = true;\ns.Mtei = true;\ns.Mende_Kikakui = true;\ns.Mend = true;\ns.Meroitic_Cursive = true;\ns.Merc = true;\ns.Meroitic_Hieroglyphs = true;\ns.Mero = true;\ns.Miao = true;\ns.Plrd = true;\ns.Modi = true;\ns.Mongolian = true;\ns.Mong = true;\ns.Mro = true;\ns.Mroo = true;\ns.Multani = true;\ns.Mult = true;\ns.Myanmar = true;\ns.Mymr = true;\ns.Nabataean = true;\ns.Nbat = true;\ns.Nandinagari = true;\ns.Nand = true;\ns.New_Tai_Lue = true;\ns.Talu = true;\ns.Newa = true;\ns.Nko = true;\ns.Nkoo = true;\ns.Nushu = true;\ns.Nshu = true;\ns.Nyiakeng_Puachue_Hmong = true;\ns.Hmnp = true;\ns.Ogham = true;\ns.Ogam = true;\ns.Ol_Chiki = true;\ns.Olck = true;\ns.Old_Hungarian = true;\ns.Hung = true;\ns.Old_Italic = true;\ns.Ital = true;\ns.Old_North_Arabian = true;\ns.Narb = true;\ns.Old_Permic = true;\ns.Perm = true;\ns.Old_Persian = true;\ns.Xpeo = true;\ns.Old_Sogdian = true;\ns.Sogo = true;\ns.Old_South_Arabian = true;\ns.Sarb = true;\ns.Old_Turkic = true;\ns.Orkh = true;\ns.Oriya = true;\ns.Orya = true;\ns.Osage = true;\ns.Osge = true;\ns.Osmanya = true;\ns.Osma = true;\ns.Pahawh_Hmong = true;\ns.Hmng = true;\ns.Palmyrene = true;\ns.Palm = true;\ns.Pau_Cin_Hau = true;\ns.Pauc = true;\ns.Phags_Pa = true;\ns.Phag = true;\ns.Phoenician = true;\ns.Phnx = true;\ns.Psalter_Pahlavi = true;\ns.Phlp = true;\ns.Rejang = true;\ns.Rjng = true;\ns.Runic = true;\ns.Runr = true;\ns.Samaritan = true;\ns.Samr = true;\ns.Saurashtra = true;\ns.Saur = true;\ns.Sharada = true;\ns.Shrd = true;\ns.Shavian = true;\ns.Shaw = true;\ns.Siddham = true;\ns.Sidd = true;\ns.SignWriting = true;\ns.Sgnw = true;\ns.Sinhala = true;\ns.Sinh = true;\ns.Sogdian = true;\ns.Sogd = true;\ns.Sora_Sompeng = true;\ns.Sora = true;\ns.Soyombo = true;\ns.Soyo = true;\ns.Sundanese = true;\ns.Sund = true;\ns.Syloti_Nagri = true;\ns.Sylo = true;\ns.Syriac = true;\ns.Syrc = true;\ns.Tagalog = true;\ns.Tglg = true;\ns.Tagbanwa = true;\ns.Tagb = true;\ns.Tai_Le = true;\ns.Tale = true;\ns.Tai_Tham = true;\ns.Lana = true;\ns.Tai_Viet = true;\ns.Tavt = true;\ns.Takri = true;\ns.Takr = true;\ns.Tamil = true;\ns.Taml = true;\ns.Tangut = true;\ns.Tang = true;\ns.Telugu = true;\ns.Telu = true;\ns.Thaana = true;\ns.Thaa = true;\ns.Thai = true;\ns.Tibetan = true;\ns.Tibt = true;\ns.Tifinagh = true;\ns.Tfng = true;\ns.Tirhuta = true;\ns.Tirh = true;\ns.Ugaritic = true;\ns.Ugar = true;\ns.Vai = true;\ns.Vaii = true;\ns.Wancho = true;\ns.Wcho = true;\ns.Warang_Citi = true;\ns.Wara = true;\ns.Yezidi = true;\ns.Yezi = true;\ns.Yi = true;\ns.Yiii = true;\ns.Zanabazar_Square = true;\ns.Zanb = true;\n\n},{}],\"/../../../jshint/src/vars.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nexports.reservedVars = {\n NaN : false,\n undefined : false\n};\n\nexports.ecmaIdentifiers = {\n 3: {\n Array : false,\n Boolean : false,\n Date : false,\n decodeURI : false,\n decodeURIComponent : false,\n encodeURI : false,\n encodeURIComponent : false,\n Error : false,\n \"eval\" : false,\n EvalError : false,\n Function : false,\n hasOwnProperty : false,\n Infinity : false,\n isFinite : false,\n isNaN : false,\n Math : false,\n Number : false,\n Object : false,\n parseInt : false,\n parseFloat : false,\n RangeError : false,\n ReferenceError : false,\n RegExp : false,\n String : false,\n SyntaxError : false,\n TypeError : false,\n URIError : false\n },\n 5: {\n JSON : false\n },\n 6: {\n ArrayBuffer : false,\n DataView : false,\n Float32Array : false,\n Float64Array : false,\n Int8Array : false,\n Int16Array : false,\n Int32Array : false,\n Map : false,\n Promise : false,\n Proxy : false,\n Reflect : false,\n Set : false,\n Symbol : false,\n Uint8Array : false,\n Uint16Array : false,\n Uint32Array : false,\n Uint8ClampedArray : false,\n WeakMap : false,\n WeakSet : false\n },\n 8: {\n Atomics : false,\n SharedArrayBuffer : false\n },\n 11: {\n BigInt : false,\n globalThis : false\n }\n};\n\nexports.browser = {\n Audio : false,\n Blob : false,\n addEventListener : false, // EventTarget\n applicationCache : false,\n atob : false, // WindowOrWorkerGlobalScope\n blur : false,\n btoa : false, // WindowOrWorkerGlobalScope\n cancelAnimationFrame : false,\n CanvasGradient : false,\n CanvasPattern : false,\n CanvasRenderingContext2D: false,\n CSS : false,\n CSSImportRule : false,\n CSSGroupingRule : false,\n CSSMarginRule : false,\n CSSMediaRule : false,\n CSSNamespaceRule : false,\n CSSPageRule : false,\n CSSRule : false,\n CSSRuleList : false,\n CSSStyleDeclaration : false,\n CSSStyleRule : false,\n CSSStyleSheet : false,\n clearInterval : false, // WindowOrWorkerGlobalScope\n clearTimeout : false, // WindowOrWorkerGlobalScope\n close : false,\n closed : false,\n Comment : false,\n CompositionEvent : false,\n createImageBitmap : false, // WindowOrWorkerGlobalScope\n CustomEvent : false,\n DOMParser : false,\n defaultStatus : false,\n dispatchEvent : false, // EventTarget\n Document : false,\n document : false,\n DocumentFragment : false,\n Element : false,\n ElementTimeControl : false,\n Event : false,\n event : false,\n fetch : false,\n File : false,\n FileList : false,\n FileReader : false,\n FormData : false,\n focus : false,\n frames : false,\n getComputedStyle : false,\n Headers : false,\n HTMLAnchorElement : false,\n HTMLAreaElement : false,\n HTMLAudioElement : false,\n HTMLBaseElement : false,\n HTMLBlockquoteElement: false,\n HTMLBodyElement : false,\n HTMLBRElement : false,\n HTMLButtonElement : false,\n HTMLCanvasElement : false,\n HTMLCollection : false,\n HTMLDataElement : false,\n HTMLDataListElement : false,\n HTMLDetailsElement : false,\n HTMLDialogElement : false,\n HTMLDirectoryElement : false,\n HTMLDivElement : false,\n HTMLDListElement : false,\n HTMLElement : false,\n HTMLEmbedElement : false,\n HTMLFieldSetElement : false,\n HTMLFontElement : false,\n HTMLFormElement : false,\n HTMLFrameElement : false,\n HTMLFrameSetElement : false,\n HTMLHeadElement : false,\n HTMLHeadingElement : false,\n HTMLHRElement : false,\n HTMLHtmlElement : false,\n HTMLIFrameElement : false,\n HTMLImageElement : false,\n HTMLInputElement : false,\n HTMLIsIndexElement : false,\n HTMLLabelElement : false,\n HTMLLayerElement : false,\n HTMLLegendElement : false,\n HTMLLIElement : false,\n HTMLLinkElement : false,\n HTMLMapElement : false,\n HTMLMarqueeElement : false,\n HTMLMediaElement : false,\n HTMLMenuElement : false,\n HTMLMetaElement : false,\n HTMLMeterElement : false,\n HTMLModElement : false,\n HTMLObjectElement : false,\n HTMLOListElement : false,\n HTMLOptGroupElement : false,\n HTMLOptionElement : false,\n HTMLParagraphElement : false,\n HTMLParamElement : false,\n HTMLPictureElement : false,\n HTMLPreElement : false,\n HTMLProgressElement : false,\n HTMLQuoteElement : false,\n HTMLScriptElement : false,\n HTMLSelectElement : false,\n HTMLSlotElement : false,\n HTMLSourceElement : false,\n HTMLStyleElement : false,\n HTMLTableCaptionElement: false,\n HTMLTableCellElement : false,\n HTMLTableColElement : false,\n HTMLTableElement : false,\n HTMLTableRowElement : false,\n HTMLTableSectionElement: false,\n HTMLTemplateElement : false,\n HTMLTextAreaElement : false,\n HTMLTimeElement : false,\n HTMLTitleElement : false,\n HTMLTrackElement : false,\n HTMLUListElement : false,\n HTMLVideoElement : false,\n history : false,\n Image : false,\n IntersectionObserver : false,\n Intl : false,\n length : false,\n localStorage : false,\n location : false,\n matchMedia : false,\n MediaList : false,\n MediaRecorder : false,\n MessageChannel : false,\n MessageEvent : false,\n MessagePort : false,\n MouseEvent : false,\n moveBy : false,\n moveTo : false,\n MutationObserver : false,\n name : false,\n Node : false,\n NodeFilter : false,\n NodeList : false,\n Notification : false,\n navigator : false,\n onbeforeunload : true,\n onblur : true,\n onerror : true,\n onfocus : true,\n onload : true,\n onresize : true,\n onunload : true,\n open : false,\n openDatabase : false,\n opener : false,\n Option : false,\n origin : false, // WindowOrWorkerGlobalScope\n parent : false,\n performance : false,\n print : false,\n queueMicrotask : false, // WindowOrWorkerGlobalScope\n Range : false,\n requestAnimationFrame : false,\n removeEventListener : false, // EventTarget\n Request : false,\n resizeBy : false,\n resizeTo : false,\n Response : false,\n screen : false,\n scroll : false,\n scrollBy : false,\n scrollTo : false,\n sessionStorage : false,\n setInterval : false, // WindowOrWorkerGlobalScope\n setTimeout : false, // WindowOrWorkerGlobalScope\n SharedWorker : false,\n status : false,\n Storage : false,\n StyleSheet : false,\n SVGAElement : false,\n SVGAltGlyphDefElement: false,\n SVGAltGlyphElement : false,\n SVGAltGlyphItemElement: false,\n SVGAngle : false,\n SVGAnimateColorElement: false,\n SVGAnimateElement : false,\n SVGAnimateMotionElement: false,\n SVGAnimateTransformElement: false,\n SVGAnimatedAngle : false,\n SVGAnimatedBoolean : false,\n SVGAnimatedEnumeration: false,\n SVGAnimatedInteger : false,\n SVGAnimatedLength : false,\n SVGAnimatedLengthList: false,\n SVGAnimatedNumber : false,\n SVGAnimatedNumberList: false,\n SVGAnimatedPathData : false,\n SVGAnimatedPoints : false,\n SVGAnimatedPreserveAspectRatio: false,\n SVGAnimatedRect : false,\n SVGAnimatedString : false,\n SVGAnimatedTransformList: false,\n SVGAnimationElement : false,\n SVGCSSRule : false,\n SVGCircleElement : false,\n SVGClipPathElement : false,\n SVGColor : false,\n SVGColorProfileElement: false,\n SVGColorProfileRule : false,\n SVGComponentTransferFunctionElement: false,\n SVGCursorElement : false,\n SVGDefsElement : false,\n SVGDescElement : false,\n SVGDocument : false,\n SVGElement : false,\n SVGElementInstance : false,\n SVGElementInstanceList: false,\n SVGEllipseElement : false,\n SVGExternalResourcesRequired: false,\n SVGFEBlendElement : false,\n SVGFEColorMatrixElement: false,\n SVGFEComponentTransferElement: false,\n SVGFECompositeElement: false,\n SVGFEConvolveMatrixElement: false,\n SVGFEDiffuseLightingElement: false,\n SVGFEDisplacementMapElement: false,\n SVGFEDistantLightElement: false,\n SVGFEFloodElement : false,\n SVGFEFuncAElement : false,\n SVGFEFuncBElement : false,\n SVGFEFuncGElement : false,\n SVGFEFuncRElement : false,\n SVGFEGaussianBlurElement: false,\n SVGFEImageElement : false,\n SVGFEMergeElement : false,\n SVGFEMergeNodeElement: false,\n SVGFEMorphologyElement: false,\n SVGFEOffsetElement : false,\n SVGFEPointLightElement: false,\n SVGFESpecularLightingElement: false,\n SVGFESpotLightElement: false,\n SVGFETileElement : false,\n SVGFETurbulenceElement: false,\n SVGFilterElement : false,\n SVGFilterPrimitiveStandardAttributes: false,\n SVGFitToViewBox : false,\n SVGFontElement : false,\n SVGFontFaceElement : false,\n SVGFontFaceFormatElement: false,\n SVGFontFaceNameElement: false,\n SVGFontFaceSrcElement: false,\n SVGFontFaceUriElement: false,\n SVGForeignObjectElement: false,\n SVGGElement : false,\n SVGGlyphElement : false,\n SVGGlyphRefElement : false,\n SVGGradientElement : false,\n SVGHKernElement : false,\n SVGICCColor : false,\n SVGImageElement : false,\n SVGLangSpace : false,\n SVGLength : false,\n SVGLengthList : false,\n SVGLineElement : false,\n SVGLinearGradientElement: false,\n SVGLocatable : false,\n SVGMPathElement : false,\n SVGMarkerElement : false,\n SVGMaskElement : false,\n SVGMatrix : false,\n SVGMetadataElement : false,\n SVGMissingGlyphElement: false,\n SVGNumber : false,\n SVGNumberList : false,\n SVGPaint : false,\n SVGPathElement : false,\n SVGPathSeg : false,\n SVGPathSegArcAbs : false,\n SVGPathSegArcRel : false,\n SVGPathSegClosePath : false,\n SVGPathSegCurvetoCubicAbs: false,\n SVGPathSegCurvetoCubicRel: false,\n SVGPathSegCurvetoCubicSmoothAbs: false,\n SVGPathSegCurvetoCubicSmoothRel: false,\n SVGPathSegCurvetoQuadraticAbs: false,\n SVGPathSegCurvetoQuadraticRel: false,\n SVGPathSegCurvetoQuadraticSmoothAbs: false,\n SVGPathSegCurvetoQuadraticSmoothRel: false,\n SVGPathSegLinetoAbs : false,\n SVGPathSegLinetoHorizontalAbs: false,\n SVGPathSegLinetoHorizontalRel: false,\n SVGPathSegLinetoRel : false,\n SVGPathSegLinetoVerticalAbs: false,\n SVGPathSegLinetoVerticalRel: false,\n SVGPathSegList : false,\n SVGPathSegMovetoAbs : false,\n SVGPathSegMovetoRel : false,\n SVGPatternElement : false,\n SVGPoint : false,\n SVGPointList : false,\n SVGPolygonElement : false,\n SVGPolylineElement : false,\n SVGPreserveAspectRatio: false,\n SVGRadialGradientElement: false,\n SVGRect : false,\n SVGRectElement : false,\n SVGRenderingIntent : false,\n SVGSVGElement : false,\n SVGScriptElement : false,\n SVGSetElement : false,\n SVGStopElement : false,\n SVGStringList : false,\n SVGStylable : false,\n SVGStyleElement : false,\n SVGSwitchElement : false,\n SVGSymbolElement : false,\n SVGTRefElement : false,\n SVGTSpanElement : false,\n SVGTests : false,\n SVGTextContentElement: false,\n SVGTextElement : false,\n SVGTextPathElement : false,\n SVGTextPositioningElement: false,\n SVGTitleElement : false,\n SVGTransform : false,\n SVGTransformList : false,\n SVGTransformable : false,\n SVGURIReference : false,\n SVGUnitTypes : false,\n SVGUseElement : false,\n SVGVKernElement : false,\n SVGViewElement : false,\n SVGViewSpec : false,\n SVGZoomAndPan : false,\n Text : false,\n TextDecoder : false,\n TextEncoder : false,\n TimeEvent : false,\n top : false,\n URL : false,\n URLSearchParams : false,\n WebGLActiveInfo : false,\n WebGLBuffer : false,\n WebGLContextEvent : false,\n WebGLFramebuffer : false,\n WebGLProgram : false,\n WebGLRenderbuffer : false,\n WebGLRenderingContext: false,\n WebGLShader : false,\n WebGLShaderPrecisionFormat: false,\n WebGLTexture : false,\n WebGLUniformLocation : false,\n WebSocket : false,\n window : false,\n Window : false,\n Worker : false,\n XDomainRequest : false,\n XMLDocument : false,\n XMLHttpRequest : false,\n XMLSerializer : false,\n XPathEvaluator : false,\n XPathException : false,\n XPathExpression : false,\n XPathNamespace : false,\n XPathNSResolver : false,\n XPathResult : false\n};\n\nexports.devel = {\n alert : false,\n confirm: false,\n console: false,\n Debug : false,\n opera : false,\n prompt : false\n};\n\nexports.worker = {\n addEventListener : true, // EventTarget\n atob : true, // WindowOrWorkerGlobalScope\n btoa : true, // WindowOrWorkerGlobalScope\n clearInterval : true, // WindowOrWorkerGlobalScope\n clearTimeout : true, // WindowOrWorkerGlobalScope\n createImageBitmap : true, // WindowOrWorkerGlobalScope\n dispatchEvent : true, // EventTarget\n importScripts : true,\n onmessage : true,\n origin : true, // WindowOrWorkerGlobalScope\n postMessage : true,\n queueMicrotask : true, // WindowOrWorkerGlobalScope\n removeEventListener : true, // EventTarget\n self : true,\n setInterval : true, // WindowOrWorkerGlobalScope\n setTimeout : true, // WindowOrWorkerGlobalScope\n FileReaderSync : true\n};\nexports.nonstandard = {\n escape : false,\n unescape: false\n};\n\nexports.couch = {\n \"require\" : false,\n respond : false,\n getRow : false,\n emit : false,\n send : false,\n start : false,\n sum : false,\n log : false,\n exports : false,\n module : false,\n provides : false\n};\n\nexports.node = {\n __filename : false,\n __dirname : false,\n arguments : false,\n GLOBAL : false,\n global : false,\n module : false,\n require : false,\n Intl : false,\n\n Buffer : true,\n console : true,\n exports : true,\n process : true,\n setTimeout : true,\n clearTimeout : true,\n setInterval : true,\n clearInterval : true,\n setImmediate : true, // v0.9.1+\n clearImmediate : true, // v0.9.1+\n URL : true, // v10.0.0+\n URLSearchParams: true // v10.0.0+\n};\n\nexports.browserify = {\n __filename : false,\n __dirname : false,\n global : false,\n module : false,\n require : false,\n Buffer : true,\n exports : true,\n process : true\n};\n\nexports.phantom = {\n phantom : true,\n require : true,\n WebPage : true,\n console : true, // in examples, but undocumented\n exports : true // v1.7+\n};\n\nexports.qunit = {\n asyncTest : false,\n deepEqual : false,\n equal : false,\n expect : false,\n module : false,\n notDeepEqual : false,\n notEqual : false,\n notOk : false,\n notPropEqual : false,\n notStrictEqual : false,\n ok : false,\n propEqual : false,\n QUnit : false,\n raises : false,\n start : false,\n stop : false,\n strictEqual : false,\n test : false,\n \"throws\" : false\n};\n\nexports.rhino = {\n arguments : false,\n defineClass : false,\n deserialize : false,\n gc : false,\n help : false,\n importClass : false,\n importPackage: false,\n \"java\" : false,\n load : false,\n loadClass : false,\n Packages : false,\n print : false,\n quit : false,\n readFile : false,\n readUrl : false,\n runCommand : false,\n seal : false,\n serialize : false,\n spawn : false,\n sync : false,\n toint32 : false,\n version : false\n};\n\nexports.shelljs = {\n target : false,\n echo : false,\n exit : false,\n cd : false,\n pwd : false,\n ls : false,\n find : false,\n cp : false,\n rm : false,\n mv : false,\n mkdir : false,\n test : false,\n cat : false,\n sed : false,\n grep : false,\n which : false,\n dirs : false,\n pushd : false,\n popd : false,\n env : false,\n exec : false,\n chmod : false,\n config : false,\n error : false,\n tempdir : false\n};\n\nexports.typed = {\n ArrayBuffer : false,\n ArrayBufferView : false,\n DataView : false,\n Float32Array : false,\n Float64Array : false,\n Int16Array : false,\n Int32Array : false,\n Int8Array : false,\n Uint16Array : false,\n Uint32Array : false,\n Uint8Array : false,\n Uint8ClampedArray : false\n};\n\nexports.wsh = {\n ActiveXObject : true,\n Enumerator : true,\n GetObject : true,\n ScriptEngine : true,\n ScriptEngineBuildVersion : true,\n ScriptEngineMajorVersion : true,\n ScriptEngineMinorVersion : true,\n VBArray : true,\n WSH : true,\n WScript : true,\n XDomainRequest : true\n};\n\nexports.dojo = {\n dojo : false,\n dijit : false,\n dojox : false,\n define : false,\n \"require\": false\n};\n\nexports.jquery = {\n \"$\" : false,\n jQuery : false\n};\n\nexports.mootools = {\n \"$\" : false,\n \"$$\" : false,\n Asset : false,\n Browser : false,\n Chain : false,\n Class : false,\n Color : false,\n Cookie : false,\n Core : false,\n Document : false,\n DomReady : false,\n DOMEvent : false,\n DOMReady : false,\n Drag : false,\n Element : false,\n Elements : false,\n Event : false,\n Events : false,\n Fx : false,\n Group : false,\n Hash : false,\n HtmlTable : false,\n IFrame : false,\n IframeShim : false,\n InputValidator: false,\n instanceOf : false,\n Keyboard : false,\n Locale : false,\n Mask : false,\n MooTools : false,\n Native : false,\n Options : false,\n OverText : false,\n Request : false,\n Scroller : false,\n Slick : false,\n Slider : false,\n Sortables : false,\n Spinner : false,\n Swiff : false,\n Tips : false,\n Type : false,\n typeOf : false,\n URI : false,\n Window : false\n};\n\nexports.prototypejs = {\n \"$\" : false,\n \"$$\" : false,\n \"$A\" : false,\n \"$F\" : false,\n \"$H\" : false,\n \"$R\" : false,\n \"$break\" : false,\n \"$continue\" : false,\n \"$w\" : false,\n Abstract : false,\n Ajax : false,\n Class : false,\n Enumerable : false,\n Element : false,\n Event : false,\n Field : false,\n Form : false,\n Hash : false,\n Insertion : false,\n ObjectRange : false,\n PeriodicalExecuter: false,\n Position : false,\n Prototype : false,\n Selector : false,\n Template : false,\n Toggle : false,\n Try : false,\n Autocompleter : false,\n Builder : false,\n Control : false,\n Draggable : false,\n Draggables : false,\n Droppables : false,\n Effect : false,\n Sortable : false,\n SortableObserver : false,\n Sound : false,\n Scriptaculous : false\n};\n\nexports.yui = {\n YUI : false,\n Y : false,\n YUI_config: false\n};\n\nexports.mocha = {\n mocha : false,\n describe : false,\n xdescribe : false,\n context : false,\n xcontext : false,\n it : false,\n xit : false,\n specify : false,\n xspecify : false,\n before : false,\n after : false,\n beforeEach : false,\n afterEach : false,\n suite : false,\n test : false,\n setup : false,\n teardown : false,\n suiteSetup : false,\n suiteTeardown : false\n};\n\nexports.jasmine = {\n jasmine : false,\n describe : false,\n xdescribe : false,\n it : false,\n xit : false,\n beforeEach : false,\n afterEach : false,\n setFixtures : false,\n loadFixtures: false,\n spyOn : false,\n expect : false,\n runs : false,\n waitsFor : false,\n waits : false,\n beforeAll : false,\n afterAll : false,\n fail : false,\n fdescribe : false,\n fit : false,\n pending : false,\n spyOnProperty: false\n};\n\n},{}],\"/node_modules/assert/assert.js\":[function(_dereq_,module,exports){\nvar util = _dereq_('util/');\n\nvar pSlice = Array.prototype.slice;\nvar hasOwn = Object.prototype.hasOwnProperty;\n\nvar assert = module.exports = ok;\n\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n }\n else {\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n var fn_name = stackStartFunction.name;\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\nutil.inherits(assert.AssertionError, Error);\n\nfunction replacer(key, value) {\n if (util.isUndefined(value)) {\n return '' + value;\n }\n if (util.isNumber(value) && !isFinite(value)) {\n return value.toString();\n }\n if (util.isFunction(value) || util.isRegExp(value)) {\n return value.toString();\n }\n return value;\n}\n\nfunction truncate(s, n) {\n if (util.isString(s)) {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\n\nfunction getMessage(self) {\n return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +\n self.operator + ' ' +\n truncate(JSON.stringify(self.expected, replacer), 128);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\nassert.fail = fail;\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nfunction _deepEqual(actual, expected) {\n if (actual === expected) {\n return true;\n\n } else if (util.isBuffer(actual) && util.isBuffer(expected)) {\n if (actual.length != expected.length) return false;\n\n for (var i = 0; i < actual.length; i++) {\n if (actual[i] !== expected[i]) return false;\n }\n\n return true;\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n } else if (!util.isObject(actual) && !util.isObject(expected)) {\n return actual == expected;\n } else {\n return objEquiv(actual, expected);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b) {\n if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))\n return false;\n if (a.prototype !== b.prototype) return false;\n if (util.isPrimitive(a) || util.isPrimitive(b)) {\n return a === b;\n }\n var aIsArgs = isArguments(a),\n bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b);\n }\n var ka = objectKeys(a),\n kb = objectKeys(b),\n key, i;\n if (ka.length != kb.length)\n return false;\n ka.sort();\n kb.sort();\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i])\n return false;\n }\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key])) return false;\n }\n return true;\n}\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n } else if (actual instanceof expected) {\n return true;\n } else if (expected.call({}, actual) === true) {\n return true;\n }\n\n return false;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (util.isString(expected)) {\n message = expected;\n expected = null;\n }\n\n try {\n block();\n } catch (e) {\n actual = e;\n }\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n if (!shouldThrow && expectedException(actual, expected)) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws.apply(this, [true].concat(pSlice.call(arguments)));\n};\nassert.doesNotThrow = function(block, /*optional*/message) {\n _throws.apply(this, [false].concat(pSlice.call(arguments)));\n};\n\nassert.ifError = function(err) { if (err) {throw err;}};\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n\n},{\"util/\":\"/node_modules/assert/node_modules/util/util.js\"}],\"/node_modules/assert/node_modules/inherits/inherits_browser.js\":[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n module.exports = function inherits(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 };\n} else {\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n\n},{}],\"/node_modules/assert/node_modules/util/support/isBufferBrowser.js\":[function(_dereq_,module,exports){\nmodule.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}\n},{}],\"/node_modules/assert/node_modules/util/util.js\":[function(_dereq_,module,exports){\n(function (process,global){\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\nexports.deprecate = function(fn, msg) {\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\nfunction inspect(obj, opts) {\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n ctx.showHidden = opts;\n } else if (opts) {\n exports._extend(ctx, opts);\n }\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n value.inspect !== exports.inspect &&\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = _dereq_('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\nexports.inherits = _dereq_('inherits');\n\nexports._extend = function(origin, add) {\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,_dereq_('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./support/isBuffer\":\"/node_modules/assert/node_modules/util/support/isBufferBrowser.js\",\"_process\":\"/node_modules/process/browser.js\",\"inherits\":\"/node_modules/assert/node_modules/inherits/inherits_browser.js\"}],\"/node_modules/events/events.js\":[function(_dereq_,module,exports){\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\nEventEmitter.defaultMaxListeners = 10;\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n }\n throw TypeError('Uncaught, unspecified \"error\" event.');\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n default:\n len = arguments.length;\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n len = arguments.length;\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n this._events[type].push(listener);\n else\n this._events[type] = [this._events[type], listener];\n if (isObject(this._events[type]) && !this._events[type].warned) {\n var m;\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else {\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n var ret;\n if (!emitter._events || !emitter._events[type])\n ret = 0;\n else if (isFunction(emitter._events[type]))\n ret = 1;\n else\n ret = emitter._events[type].length;\n return ret;\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\n},{}],\"/node_modules/process/browser.js\":[function(_dereq_,module,exports){\nvar process = module.exports = {};\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],\"/node_modules/util/node_modules/inherits/inherits_browser.js\":[function(_dereq_,module,exports){\narguments[4][\"/node_modules/assert/node_modules/inherits/inherits_browser.js\"][0].apply(exports,arguments)\n},{}],\"/node_modules/util/support/isBufferBrowser.js\":[function(_dereq_,module,exports){\narguments[4][\"/node_modules/assert/node_modules/util/support/isBufferBrowser.js\"][0].apply(exports,arguments)\n},{}],\"/node_modules/util/util.js\":[function(_dereq_,module,exports){\narguments[4][\"/node_modules/assert/node_modules/util/util.js\"][0].apply(exports,arguments)\n},{\"./support/isBuffer\":\"/node_modules/util/support/isBufferBrowser.js\",\"_process\":\"/node_modules/process/browser.js\",\"inherits\":\"/node_modules/util/node_modules/inherits/inherits_browser.js\"}]},{},[\"/../../../jshint/src/jshint.js\"]);\n\n});\n\nace.define(\"ace/mode/javascript_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar lint = require(\"./javascript/jshint\").JSHINT;\n\nfunction startRegex(arr) {\n return RegExp(\"^(\" + arr.join(\"|\") + \")\");\n}\n\nvar disabledWarningsRe = startRegex([\n \"Bad for in variable '(.+)'.\",\n 'Missing \"use strict\"'\n]);\nvar errorsRe = startRegex([\n \"Unexpected\",\n \"Expected \",\n \"Confusing (plus|minus)\",\n \"\\\\{a\\\\} unterminated regular expression\",\n \"Unclosed \",\n \"Unmatched \",\n \"Unbegun comment\",\n \"Bad invocation\",\n \"Missing space after\",\n \"Missing operator at\"\n]);\nvar infoRe = startRegex([\n \"Expected an assignment\",\n \"Bad escapement of EOL\",\n \"Unexpected comma\",\n \"Unexpected space\",\n \"Missing radix parameter.\",\n \"A leading decimal point can\",\n \"\\\\['{a}'\\\\] is better written in dot notation.\",\n \"'{a}' used out of scope\"\n]);\n\nvar JavaScriptWorker = exports.JavaScriptWorker = function(sender) {\n Mirror.call(this, sender);\n this.setTimeout(500);\n this.setOptions();\n};\n\noop.inherits(JavaScriptWorker, Mirror);\n\n(function() {\n this.setOptions = function(options) {\n this.options = options || {\n esversion: 11,\n moz: true,\n devel: true,\n browser: true,\n node: true,\n laxcomma: true,\n laxbreak: true,\n lastsemic: true,\n onevar: false,\n passfail: false,\n maxerr: 100,\n expr: true,\n multistr: true,\n globalstrict: true\n };\n this.doc.getValue() && this.deferredUpdate.schedule(100);\n };\n\n this.changeOptions = function(newOptions) {\n oop.mixin(this.options, newOptions);\n this.doc.getValue() && this.deferredUpdate.schedule(100);\n };\n\n this.onUpdate = function() {\n var value = this.doc.getValue();\n value = value.replace(/^#!.*\\n/, \"\\n\");\n if (!value)\n return this.sender.emit(\"annotate\", []);\n\n var errors = [];\n lint(value, this.options, this.options.globals);\n var results = lint.errors;\n\n var errorAdded = false;\n for (var i = 0; i < results.length; i++) {\n var error = results[i];\n if (!error)\n continue;\n var raw = error.raw;\n var type = \"warning\";\n\n if (raw == \"Missing semicolon.\") {\n var str = error.evidence.substr(error.character);\n str = str.charAt(str.search(/\\S/));\n if (str && /[\\w\\d{(['\"]/.test(str)) {\n error.reason = 'Missing \";\" before statement';\n type = \"error\";\n } else {\n type = \"info\";\n }\n }\n else if (disabledWarningsRe.test(raw)) {\n continue;\n }\n else if (infoRe.test(raw)) {\n type = \"info\";\n }\n else if (errorsRe.test(raw)) {\n errorAdded = true;\n type = \"error\";\n }\n else if (raw == \"'{a}' is not defined.\") {\n type = \"warning\";\n }\n else if (raw == \"'{a}' is defined but never used.\") {\n type = \"info\";\n }\n\n errors.push({\n row: error.line-1,\n column: error.character-1,\n text: error.reason,\n type: type,\n raw: raw\n });\n\n if (errorAdded) {\n }\n }\n\n this.sender.emit(\"annotate\", errors);\n };\n\n}).call(JavaScriptWorker.prototype);\n\n});\n"],"names":["global","this","window","define","module","deps","payload","arguments","length","modules","payloads","original","apply","console","error","trace","ns","root","_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","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","messages","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","nls","translated","isDark","cssClass","$id","lang","net","customLoader","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","hasOwnProperty","all","$modes","moduleUrl","component","parts","sep","base","re","setModuleUrl","subst","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","ret","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","parseInt","enter","escape","esc","del","mods","pow","x","keyCodeToString","keyCode","keyString","fromCharCode","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","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","setAriaOptions","activeDescendant","inline","removeAttribute","role","setLabel","selection","cursor","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","extendStatics","__extends","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","windowWidth","windowHeight","singular","plural","warning","info","annotation","annotationsInRow","$annotations","from","fold","getFoldLine","$showFoldedAnnotations","mostSevereAnnotationInFoldType","annotationsInFold","annotationType","summaryFoldedAnnotations","concat","annotationsToSummaryString","annotationMessages","iconClassName","$useSvgGutterIcons","annotationLabels","tooltipContent","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","showContextMenu","handleClick","selected","hasUndo","action","getUndoManager","replaceChild","class","readText","writeText","ontouchstart","ontouchend","onclick","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","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","isSaneInsertion","braces","recordAutoInsert","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","$matchTokenType","iterator2","bracket","wordChars","code","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","this_1","$delegator","method","language","transformAction","param","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","meta","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","first","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","removed","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","depth","getFoldWidget","getFoldWidgetRange","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","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","$uid","bgTokenizer","onChangeFold","setMode","destroyed","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","screenWidth","lineWidgetsWidth","lineWidgetWidth","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","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","maxRow","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","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","returnValue","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","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","updateFull","changedWidgets","fixedWidth","ceil","coverLine","gutterWidth","fullWidth","padding","scrollBar","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","$initOperationListeners","_$emitInputEvent","setSession","$opResetTimer","$lastSel","commandEvent","prevOp","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeUndoDeltas","prev","mergeableCommands","$mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","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","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","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","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","lineElement","$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","solve","l1","l2","det","sub","mul","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","textLines","$ghostText","$ghostTextWidget","pixelPosition","ghostTextHeight","newToken","$themeId","$theme","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","cmd","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","onmousedown","Renderer","edit","_id","env","tagName","oldNode","createEditSession","VARIABLES","CURRENT_WORD","SELECTION","CURRENT_LINE","PREV_LINE","LINE_INDEX","LINE_NUMBER","SOFT_TABS","TAB_SIZE","CLIPBOARD","FILENAME","FILEPATH","FILENAME_BASE","DIRECTORY","WORKSPACE_NAME","FULLNAME","BLOCK_COMMENT_START","BLOCK_COMMENT_END","LINE_COMMENT","CURRENT_YEAR","date","year","CURRENT_YEAR_SHORT","CURRENT_MONTH","month","CURRENT_MONTH_NAME","CURRENT_MONTH_NAME_SHORT","CURRENT_DATE","day","CURRENT_DAY_NAME","weekday","CURRENT_DAY_NAME_SHORT","CURRENT_HOUR","hour","hour12","CURRENT_MINUTE","minute","CURRENT_SECOND","second","dateFormat","toLocaleString","SELECTED_TEXT","SnippetManager","snippetMap","snippetNameMap","variables","createTokenizer","TabstopToken","tabstopId","formatMatcher","fmtString","guard","snippetVar","choices","operator","formatString","expectElse","ifEnd","elseEnd","changeCase","local","formatStringVar","formatFunction","tokenizeTmSnippet","getVariableValue","tmStrFormat","fmt","fmtTokens","formatted","oldArgs","fmtParts","resolveVariables","gChangeCase","tmFormatFunction","snippet","afterNewLine","gotoNext","getDisplayTextForSnippet","snippetText","processSnippetText","insertSnippetForSelection","processedSnippet","tabstopManager","TabstopManager","selectionId","addTabstops","tabstops","insertSnippet","tabNext","$getScope","inlinePhp","getActiveScopes","scopes","includeScopes","expandWithTab","expandSnippetForSelection","snippets","findMatchingSnippet","dryRun","replaceBefore","replaceAfter","M__","matchBefore","T__","matchAfter","snippetList","startRe","endRe","triggerRe","endTriggerRe","register","wrapRegexp","guardedRegexp","addSnippet","unregister","tabTrigger","trigger","endTrigger","endGuard","removeSnippet","nameMap","parseSnippetFile","guardRe","getSnippetByName","tabString","excludeExtraIndent","parents","expanding","copyValue","$onChangeSelection","$onChangeSession","onChangeSession","$onAfterExec","onAfterExec","$openTabstops","selectedTabstop","removeTabstopMarkers","isRemove","active","parentActive","removeRange","$inChange","updateLinkedFields","hasLinkedRanges","firstNonLinked","linked","snippetManager","containsLead","containsAnchor","selectTabstop","updateTabstopMarkers","addTabstopMarkers","useLink","moveRelative","arg","snippetId","dest","movePoint","tabstop","currentSnippetId","expandSnippet","getAriaId","popupAriaRole","optionAriaRole","ariaActiveState","$singleLineEditor","$highlightTagPending","AcePopup","lastMouseEvent","noop","selectionMarker","hoverMarker","setSelectOnHover","isMouseOver","setRow","setHoverMarker","selectedNode","ariaId","caption","hideHoverMarker","suppressRedraw","getHoveredRow","lower","filterText","lastI","matchMask","isTopdown","autoSelect","tryShow","forceShow","screenHeight","maxH","dims","$borderSize","spaceAbove","fitsX","topdownOnly","goTo","where","getTextLeftOffset","$imageSize","AceInlineScreenReader","screenReaderDiv","setScreenReaderContent","completer","idString","lineIndex","_lines","codeElement","createCodeBlock","AceInline","completion","inlineScreenReader","displayText","hideInlinePreview","parForEach","fn","completed","arLength","ID_REGEX","retrievePrecedingIdentifier","retrieveFollowingIdentifier","getCompletionPrefix","completers","identifierRegexps","identifierRegex","triggerAutocomplete","previousChar","triggerCharacters","util","destroyCompleter","Autocomplete","autoInsert","autoShown","exactMatch","inlineEnabled","hasSeen","showLoadingState","stickySelectionDelay","blurListener","mousedownListener","mousewheelListener","onLayoutChange","changeTimer","updateCompletions","tooltipTimer","updateDocTooltip","popupTimer","$updatePopupPosition","stickySelectionTimer","stickySelection","$firstOpenTimer","initialPosition","completionProvider","completions","FilteredList","completionsForLoading","openPopup","insertMatch","$onPopupShow","$onHidePopup","$onPopupChange","mouseOutListener","$onPopupRender","$initInline","inlineRenderer","getPopup","hideDocTooltip","$seen","onSeen","$updateGhostText","filtered","observeLayoutChanges","$elements","unObserveLayoutChanges","posGhostText","editorContainerBottom","lowestPosition","keepPopupPosition","newRow","oldRow","previousSelectedItem","tooltipNode","activated","fromTooltip","getCompletionProvider","showPopup","CompletionProvider","gatherCompletions","setFilter","completionOptions","ignoreCaption","provideCompletions","finished","emptyMessage","completionsForEmpty","completersLength","getDocTooltip","completerId","docText","docHTML","showDocTooltip","overscrollBehavior","onblur","onTooltipClick","nodeName","deleteSuffix","for","startCommand","insertByIndex","$insertString","onInsert","total","results","processResults","isImmediate","immediateResults","filterCompletions","$score","localeCompare","items","upper","loop","penalty","fullMatchIndex","wordScore","prefixPos","getWordIndex","wordScores","currentWord","wordDistance","textCompleter","keyWordCompleter","snippetCompleter","record","p3","setCompleters","addCompleter","lastExecEvent","loadSnippetsForMode","files","loadSnippetFile","snippetFileId","modes","snippetFilePath","doLiveAutocomplete","hasCompleter","$liveAutocompletionDelay","liveAutocompleteTimer","showLiveAutocomplete","$liveAutocompletionThreshold","enableBasicAutocompletion","enableLiveAutocompletion","liveAutocompletionDelay","liveAutocompletionThreshold","enableSnippets","DocCommentHighlightRules","getTagRule","getStartRule","getEndRule","CSharpHighlightRules","keywordMapper","MatchingBraceOutdent","BaseFoldMode","commentRegex","singleLineBlockCommentRe","tripleStarBlockCommentRe","startRegionRe","_getFoldWidgetBase","forceMultiline","getCommentRegionBlock","getSectionRange","startIndent","subRange","CFoldMode","usingRe","getFoldWidgetRangeBase","getFoldWidgetBase","getUsingStatementBlock","getRegionBlock","CStyleFoldMode","$outdent","JsDocCommentHighlightRules","identifierRe","JavaScriptHighlightRules","escapedRe","comments","noES6","no_regex","jsx","JSX","tagRegex","jsxTag","jsxJsRule","jsxAttributes","reference","tokenizedLine","endState","JsonHighlightRules","msgs","file","initialized","factory","paths","testPath","tail","alias","resolveModuleId","req","childId","returnExports","amd","initBaseUrls","initSender","Sender","Mirror","deferredUpdate","$path","linesLength","$timeout","entry","previousRequire","newRequire","jumped","currentRequire","_dereq_","identifierStartTable","identifierPartTable","asciiIdentifierStartTable","asciiIdentifierPartTable","assert","functions","duration","format","object","inspect","expression","ok","tuple","g","getTime","HASH_UNDEFINED","argsTag","boolTag","dateTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reFlags","reIsHostCtor","reIsUint","cloneableTags","freeGlobal","freeSelf","Function","freeExports","freeModule","moduleExports","addMapEntry","addSetEntry","arrayReduce","iteratee","accumulator","initAccum","isHostObject","mapToArray","overArg","setToArray","uid","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","IE_PROTO","funcToString","objectToString","reIsNative","Buffer","Uint8Array","getPrototype","getPrototypeOf","objectCreate","propertyIsEnumerable","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeKeys","DataView","getNative","Map","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","Hash","entries","ListCache","MapCache","Stack","__data__","assignValue","objValue","eq","assocIndexOf","baseClone","isDeep","isFull","customizer","isObject","isArr","initCloneArray","getTag","isFunc","buffer","cloneBuffer","isPrototype","initCloneObject","getSymbols","copySymbols","baseAssign","cloneFunc","symbol","Ctor","cloneArrayBuffer","dataView","byteOffset","byteLength","cloneDataView","typedArray","cloneTypedArray","cloneMap","regexp","cloneRegExp","cloneSet","initCloneByTag","stacked","keysFunc","symbolsFunc","arrayPush","baseGetAllKeys","getAllKeys","arrayEach","subValue","arrayBuffer","getMapData","isFunction","baseIsNative","pairs","LARGE_ARRAY_SIZE","isIndex","ArrayBuffer","ctorString","isArrayLike","isLength","inherited","isObjectLike","isArrayLikeObject","isArguments","baseTimes","skipIndexes","arrayLikeKeys","baseKeys","INFINITY","MAX_INTEGER","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toInteger","isSymbol","isBinary","toNumber","toFinite","remainder","isIterateeCall","baseSlice","VERSION","ArrayProto","ObjProto","SymbolProto","supportsArrayBuffer","supportsDataView","nativeIsArray","nativeIsView","isView","_isNaN","_isFinite","hasEnumBug","nonEnumerableProps","MAX_ARRAY_INDEX","restArguments","rest","isUndefined","isBoolean","tagTester","isString","isNumber","isDate","isRegExp","isError","isArrayBuffer","nodelist","Int8Array","isFunction$1","hasObjectTag","hasStringTagBug","isIE11","isDataView","isDataView$1","getInt8","has$1","isArguments$1","isNaN$1","constant","createSizePropertyCheck","getSizeProperty","collection","sizeProperty","shallowProperty","getByteLength","isBufferLike","typedArrayPattern","isTypedArray$1","collectNonEnumProps","hash","emulatedSet","nonEnumIdx","prop","isMatch","attrs","_keys","_$1","_wrapped","toBufferView","bufferSource","tagDataView","aStack","bStack","deepEq","areArrays","aCtor","bCtor","allKeys","ie11fingerprint","methods","weakMapMethods","forEachName","commonInit","mapTail","mapMethods","setMethods","isMap","isWeakMap","isSet","isWeakSet","invert","names","createAssigner","defaults","extendOwn","baseCreate","toPath$1","toPath","deepGet","defaultValue","identity","matcher","optimizeCb","argCount","baseIteratee","random","createEscaper","escaper","testRegexp","replaceRegexp","escapeMap","_escape","_unescape","templateSettings","evaluate","interpolate","noMatch","escapes","escapeChar","bareIdentifier","idCounter","executeBound","sourceFunc","boundFunc","callingContext","partial","boundArgs","bound","callArgs","flatten$1","strict","bindAll","wait","defer","memo","findKey","createPredicateIndexFinder","findLastIndex","sortedIndex","high","createIndexFinder","predicateFind","each","currentKey","createReduce","initial","reducer","reduce","reduceRight","every","fromIndex","invoke","contextPath","pluck","computed","lastComputed","reStrSymbol","toArray","sample","rand","temp","group","behavior","partition","groupBy","indexBy","countBy","pass","keyInObj","pick","omit","difference","without","otherArrays","uniq","isSorted","seen","union","arrays","unzip","zip","chainResult","instance","_chain","allExports","isNull","isElement","isTypedArray","tap","interceptor","mapObject","propertyOf","accum","unescape","template","settings","oldSettings","render","argument","variable","fallback","uniqueId","memoize","hasher","address","throttle","later","leading","throttled","_now","remaining","trailing","debounce","immediate","passed","debounced","_args","wrapper","compose","detect","findWhere","collect","foldl","inject","foldr","reject","any","shuffle","sortBy","criteria","take","drop","compact","flatten","unique","intersection","argsLength","transpose","step","events","vars","Lexer","scopeManager","prodParams","JSHINT","api","declared","inblock","lookahead","lex","member","membersOnly","predefined","bang","extraModules","emitter","checkOption","isStable","validNames","unstableNames","isIdentifier","tkn","identifier","isReserved","reserved","isFutureReservedWord","inES5","es5","isProperty","strictOnly","isStrict","async","yield","supplant","combine","blacklist","applyOptions","badESOpt","enforceall","enforceopt","bool","enforcing","noenforceall","relaxopt","relaxing","processenforceall","inferEsVersion","quit","ecmaIdentifiers","inES6","inES8","inES11","regexpu","couch","qunit","rhino","shelljs","typed","phantom","prototypejs","devel","dojo","browser","browserify","nonstandard","jasmine","jquery","mootools","wsh","yui","mocha","percentage","errors","desc","exception","raw","reason","removeIgnoredMessages","ignored","ignoredLines","warnings","evidence","maxerr","warningAt","errorAt","lintingDirective","directiveToken","predef","funct","addExported","ch1","numvals","numberVal","validthis","hasParsedCode","tn","renamed","inverted","unstable","moz","esversion","latedef","unused","shadow","quotmark","caseFallsThrough","peek","peekIgnoreEOL","advance","expected","relatedToken","nextToken","check","isSpecial","isEndOfExpr","noin","infix","rbp","sameLine","nameStack","beginsStmt","fud","useFud","nud","lbp","led","nobreaknonadjacent","laxbreak","nolinebreak","checkComma","laxcomma","allowTrailing","syntax","delim","stmt","blockstmt","block","reserveName","arity","plusplus","checkLeftSideAssign","reserve","FutureReservedWord","relation","beginsUnaryExpression","typeofValues","isTypoTypeof","notypeof","es6","es3","isGlobalEval","isGlobal","assignToken","allowDestructuring","nativeObject","natives","walkPrototype","isPredefined","walkNative","findNativePrototype","isMetaProperty","reassign","destructAssign","bindingtype","assignop","exps","bitwise","bitwiseassignop","optionalidentifier","isName","preserve","spreadrest","operation","checkPunctuator","reachable","controlToken","inBracelessBlock","reach","parseFinalSemicolon","isUnclosed","isSameLine","blockEnd","asi","lastsemic","statement","hasOwnScope","addLabel","labelled","unstack","stmtMissingStrict","expr","nonew","statements","directives","current","directive","inES7","undef","ordinary","isfunc","isfatarrow","iscase","old_indent","metrics","nestedBlockDepth","verifyMaxNestedBlockDepthPerFunction","statementCount","validateParams","curly","supportsFnDecl","declaration","inMoz","noreturnawait","noempty","countMember","legacy","isLoneArrowParam","use","baseTemplateSyntax","doTemplateLiteral","noSubst","superNud","nocomma","increaseComplexityCount","paren","eqnull","eqeqeq","scripturl","javascriptURL","forgiveUndef","mp","metaProperty","inFunction","evil","newcap","supernew","classDeclaration","classNameToken","inClassBody","addbinding","initialize","classBody","classToken","accessorType","isStatic","inGenerator","hasConstructor","preAsync","inES9","saveProperty","propertyName","doMethod","infer","computedPropertyName","saveAccessor","checkProperties","generator","doFunction","isMethod","peekThroughParens","parens","pn1","pn","functor","overwrites","createMetrics","leftOrRbp","complete","classExprBinding","isGenerator","isArrow","ignoreLoopFunc","oldOption","oldIgnored","isAsync","tryClause","internallyAccessibleName","paramsInfo","ident","paramsIds","pastDefault","pastRest","loneArg","hasDestructuring","addParam","isSimple","parsedOpening","currentParams","destructuringPattern","checkPunctuators","addParamArgs","functionparams","verifyMaxParametersPerFunction","noyield","verifyMaxStatementsPerFunction","verifyMaxComplexityPerFunction","loopfunc","functionStartToken","ComplexityCount","maxstatements","maxparams","maxdepth","maxcomplexity","cc","checkCondAssignment","boss","setterToken","getterToken","static","isAssignment","assignment","destructuringPatternRecursive","ids","identifiers","openingParsed","recursiveOptions","firstToken","nextInnerDE","assignTarget","assignmentProperty","isRest","element_after_rest","destructuringPatternMatch","blockVariableStatement","lone","letblock","isLet","isConst","isMozillaLet","hasInitializer","hasComma","noarg","immed","internals","addEvalCode","triggerFnExpr","preceeding","isNecessary","singleGroups","application","blocktype","lookupBlockType","isCompArray","esnext","reversed","comprehensiveArrayExpression","isDestAssign","elision","trailingcomma","nextVal","isGeneratorMethod","isAsyncMethod","inObjectBody","conststatement","asyncSymbol","yieldSymbol","letstatement","varstmt","impliedClosure","futurehostile","inexport","export","labelType","enablesStrictMode","forinifcheck","forin","forinifcheckneeded","forinifchecks","hasParameter","catchParameter","inES10","withstmt","noindent","seenCase","leanswitch","debug","nextop","comma","initializer","bindingPower","targets","decl","letscope","foreachtok","afterNext","headContext","hasLabel","mozYield","delegatingYield","importSymbol","importName","supportsSuper","moduleSpecifier","setExported","def","exportType","exportedTokens","bracketStack","notJson","isClass","isComputed","basic","basictkn","flagName","destructuringAssignOrJsonValue","jsonMode","jsonValue","arrayComprehension","_current","CompArray","_carrays","raw_text","declare","jsonObject","jsonArray","escapeRegex","itself","reIgnoreStr","reIgnore","optionKeys","newOptionObj","newIgnoredObj","reservedVars","exported","globals","dict","getOwnPropertyDescriptor","optionKey","scopeManagerInst","isJSON","getCache","setCache","char","ignoreDelimiters","delimiterPair","allowsGlobalUsd","nt","priorErrorCount","jdx","internal","lintEvalCode","addModule","fu","impliedGlobals","getImpliedGlobals","implieds","getUsedOrDefinedGlobals","lastcharacter","complexity","parameters","unuseds","getUnuseds","jshint","unicodeData","nonAsciiIdentifierStartTable","nonAsciiIdentifierPartTable","Context","Block","Template","isHex","isHexDigit","setLines","prereg","inComment","templateStarts","inContext","ctxType","pushContext","popContext","currentContext","triggerAsync","checks","scanPunctuator","ch2","ch3","ch4","decimalDigit","scanComments","startChar","commentToken","commentType","isMultiline","fallsThrough","strIndex","ignoringLinterErrors","isMalformed","scanKeyword","scanIdentifier","isNonAsciiIdentifierStart","isNonAsciiIdentifierPart","readUnicodeEscapeSequence","sequence","getIdentifierStart","getIdentifierPart","m0","codepoint","removeEscapeSequences","tokenLength","scanNumericLiteral","isAllowedDigit","isDecimalDigit","isLegacy","isNonOctal","isOctalDigit","isIdentifierStart","isBigInt","scanEscapeSequence","allowNewLine","jump","scanTemplateLiteral","startPos","scanStringLiteral","multistr","parsed","scanRegExp","escapeSequence","terminated","malformedDesc","groupReferences","allFlags","es5Flags","malformed","isCharSet","isCharSetRange","isQuantifiable","hasInvalidQuantifier","escapedChars","hasUFlag","scanRegexpEscapeSequence","nonzeroDigit","checkQuantifier","lowerBound","upperBound","translateUFlag","$0","$1","$2","literal","codePoint","regexpSyntaxChars","regexpQuantifiers","regexpCharClasses","hasInvalidEscape","groupReference","escapedChar","regexpControlEscapes","regexpDot","scanNonBreakingSpaces","nonbsp","whitespace","inputTrimmed","maxlen","maxlenException","_checks","exhausted","raw_name","E001","E002","E003","E004","E005","E006","E007","E008","E009","E010","E011","E012","E013","E014","E015","E016","E017","E018","E019","E020","E021","E022","E023","E024","E025","E026","E027","E028","E029","E030","E031","E032","E033","E034","E035","E036","E037","E038","E039","E040","E041","E042","E043","E044","E045","E046","E047","E048","E049","E050","E051","E052","E053","E054","E055","E056","E057","E058","E059","E060","E061","E062","E063","E064","E065","E066","E067","E068","E069","E070","W001","W002","W003","W004","W005","W006","W007","W008","W009","W010","W011","W012","W013","W014","W015","W016","W017","W018","W019","W020","W021","W022","W023","W024","W025","W026","W027","W028","W030","W031","W032","W033","W034","W035","W036","W037","W038","W039","W040","W041","W042","W043","W044","W045","W046","W047","W048","W049","W050","W051","W052","W053","W054","W055","W056","W057","W058","W059","W060","W061","W062","W063","W064","W065","W066","W067","W068","W069","W070","W071","W072","W073","W074","W075","W076","W077","W078","W079","W080","W081","W082","W083","W084","W085","W086","W087","W088","W089","W090","W091","W093","W094","W095","W096","W097","W098","W099","W100","W101","W102","W103","W104","W105","W106","W107","W108","W109","W110","W112","W113","W114","W115","W116","W117","W118","W119","W120","W121","W122","W123","W124","W125","W126","W127","W128","W129","W130","W131","W132","W133","W134","W135","W136","W137","W138","W139","W140","W141","W142","W143","W144","W145","W146","W147","W148","I001","I002","I003","NameStack","_stack","nameToken","camelcase","funcscope","globalstrict","environments","obsolete","onecase","regexdash","eqeq","windows","sloppy","nomen","onevar","passfail","white","gcl","smarttabs","unsafeString","needEsc","needEscGlobal","starSlash","_scopeStack","_newScope","_currentFunctBody","usedPredefinedAndGlobals","esModuleExports","_setupUsages","bindingName","_getUnusedOption","unused_opt","_warnUnused","warnable_types","_getBinding","scopeBindings","_checkOuterShadow","isNewFunction","outsideCurrentFunction","stackItem","_latedefWarning","previousScope","isImmutable","subScope","isUnstackingFunctionBody","isUnstackingFunctionParams","isUnstackingFunctionOuter","currentUsages","currentBindings","usedBindingNameList","usedBindingName","usage","usedBinding","usedBindingType","usedTokens","ignoreW021","bindingType","subScopeUsage","ignoreW020","undefinedToken","ignoreUndef","bindingNotUsed","bindingNames","defBindingName","defBinding","shadowed","excludeCurrent","_checkForUnused","previouslyDefinedBindingType","duplicated","currentFunctParamScope","globalBindings","localName","exportName","isblockscoped","ishoisted","isexported","declaredInCurrentScope","declaredInCurrentFunctionScope","usedSoFarInCurrentFunction","onlyBlockscoped","excludeParams","scopeCheck","labelName","tok","paramScope","modify","esVersion","badOpt","linter","equalSignIndex","binary","general","nonBinary","nb","General_Category","gc","Script","Script_Extensions","scx","ASCII","ASCII_Hex_Digit","AHex","Alphabetic","Alpha","Any","Assigned","Bidi_Control","Bidi_C","Bidi_Mirrored","Bidi_M","Case_Ignorable","CI","Cased","Changes_When_Casefolded","CWCF","Changes_When_Casemapped","CWCM","Changes_When_Lowercased","CWL","Changes_When_NFKC_Casefolded","CWKCF","Changes_When_Titlecased","CWT","Changes_When_Uppercased","CWU","Dash","Default_Ignorable_Code_Point","DI","Deprecated","Dep","Diacritic","Dia","Emoji","Emoji_Component","EComp","Emoji_Modifier","EMod","Emoji_Modifier_Base","EBase","Emoji_Presentation","EPres","Extended_Pictographic","ExtPict","Extender","Ext","Grapheme_Base","Gr_Base","Grapheme_Extend","Gr_Ext","Hex_Digit","Hex","IDS_Binary_Operator","IDSB","IDS_Trinary_Operator","IDST","ID_Continue","IDC","ID_Start","IDS","Ideographic","Ideo","Join_Control","Join_C","Logical_Order_Exception","LOE","Lowercase","Lower","Noncharacter_Code_Point","NChar","Pattern_Syntax","Pat_Syn","Pattern_White_Space","Pat_WS","Quotation_Mark","QMark","Radical","Regional_Indicator","RI","Sentence_Terminal","STerm","Soft_Dotted","SD","Terminal_Punctuation","Term","Unified_Ideograph","UIdeo","Uppercase","Upper","Variation_Selector","VS","White_Space","space","XID_Continue","XIDC","XID_Start","XIDS","Cased_Letter","LC","Close_Punctuation","Pe","Connector_Punctuation","Pc","Control","Cc","cntrl","Currency_Symbol","Sc","Dash_Punctuation","Pd","Decimal_Number","Nd","Enclosing_Mark","Me","Final_Punctuation","Pf","Format","Cf","Initial_Punctuation","Pi","Letter","Letter_Number","Nl","Line_Separator","Zl","Lowercase_Letter","Ll","Mark","M","Combining_Mark","Math_Symbol","Sm","Modifier_Letter","Lm","Modifier_Symbol","Sk","Nonspacing_Mark","Mn","N","Open_Punctuation","Ps","Other","C","Other_Letter","Lo","Other_Number","No","Other_Punctuation","Po","Other_Symbol","So","Paragraph_Separator","Zp","Private_Use","Co","Punctuation","P","punct","Separator","Z","Space_Separator","Zs","Spacing_Mark","Mc","Surrogate","Cs","S","Titlecase_Letter","Lt","Unassigned","Cn","Uppercase_Letter","Lu","Adlam","Adlm","Ahom","Anatolian_Hieroglyphs","Hluw","Arabic","Arab","Armenian","Armn","Avestan","Avst","Balinese","Bali","Bamum","Bamu","Bassa_Vah","Bass","Batak","Batk","Bengali","Beng","Bhaiksuki","Bhks","Bopomofo","Bopo","Brahmi","Brah","Braille","Brai","Buginese","Bugi","Buhid","Buhd","Canadian_Aboriginal","Cans","Carian","Cari","Caucasian_Albanian","Aghb","Chakma","Cakm","Cham","Chorasmian","Chrs","Cherokee","Cher","Common","Zyyy","Coptic","Copt","Qaac","Cuneiform","Xsux","Cypriot","Cprt","Cyrillic","Cyrl","Deseret","Dsrt","Devanagari","Deva","Dives_Akuru","Diak","Dogra","Dogr","Duployan","Dupl","Egyptian_Hieroglyphs","Egyp","Elbasan","Elba","Elymaic","Elym","Ethiopic","Ethi","Georgian","Geor","Glagolitic","Glag","Gothic","Goth","Grantha","Gran","Greek","Grek","Gujarati","Gujr","Gunjala_Gondi","Gong","Gurmukhi","Guru","Han","Hani","Hangul","Hang","Hanifi_Rohingya","Rohg","Hanunoo","Hano","Hatran","Hatr","Hebrew","Hebr","Hiragana","Hira","Imperial_Aramaic","Armi","Inherited","Zinh","Qaai","Inscriptional_Pahlavi","Phli","Inscriptional_Parthian","Prti","Javanese","Java","Kaithi","Kthi","Kannada","Knda","Katakana","Kana","Kayah_Li","Kali","Kharoshthi","Khar","Khitan_Small_Script","Kits","Khmer","Khmr","Khojki","Khoj","Khudawadi","Sind","Lao","Laoo","Latin","Latn","Lepcha","Lepc","Limbu","Limb","Linear_A","Lina","Linear_B","Linb","Lisu","Lycian","Lyci","Lydian","Lydi","Mahajani","Mahj","Makasar","Maka","Malayalam","Mlym","Mandaic","Mand","Manichaean","Mani","Marchen","Marc","Medefaidrin","Medf","Masaram_Gondi","Gonm","Meetei_Mayek","Mtei","Mende_Kikakui","Mend","Meroitic_Cursive","Merc","Meroitic_Hieroglyphs","Mero","Miao","Plrd","Modi","Mongolian","Mong","Mro","Mroo","Multani","Mult","Myanmar","Mymr","Nabataean","Nbat","Nandinagari","Nand","New_Tai_Lue","Talu","Newa","Nko","Nkoo","Nushu","Nshu","Nyiakeng_Puachue_Hmong","Hmnp","Ogham","Ogam","Ol_Chiki","Olck","Old_Hungarian","Hung","Old_Italic","Ital","Old_North_Arabian","Narb","Old_Permic","Perm","Old_Persian","Xpeo","Old_Sogdian","Sogo","Old_South_Arabian","Sarb","Old_Turkic","Orkh","Oriya","Orya","Osage","Osge","Osmanya","Osma","Pahawh_Hmong","Hmng","Palmyrene","Palm","Pau_Cin_Hau","Pauc","Phags_Pa","Phag","Phoenician","Phnx","Psalter_Pahlavi","Phlp","Rejang","Rjng","Runic","Runr","Samaritan","Samr","Saurashtra","Saur","Sharada","Shrd","Shavian","Shaw","Siddham","Sidd","SignWriting","Sgnw","Sinhala","Sinh","Sogdian","Sogd","Sora_Sompeng","Sora","Soyombo","Soyo","Sundanese","Sund","Syloti_Nagri","Sylo","Syriac","Syrc","Tagalog","Tglg","Tagbanwa","Tagb","Tai_Le","Tale","Tai_Tham","Lana","Tai_Viet","Tavt","Takri","Takr","Tamil","Taml","Tangut","Tang","Telugu","Telu","Thaana","Thaa","Thai","Tibetan","Tibt","Tifinagh","Tfng","Tirhuta","Tirh","Ugaritic","Ugar","Vai","Vaii","Wancho","Wcho","Warang_Citi","Wara","Yezidi","Yezi","Yi","Yiii","Zanabazar_Square","Zanb","NaN","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","EvalError","RangeError","ReferenceError","SyntaxError","URIError","Float32Array","Float64Array","Int16Array","Int32Array","Proxy","Reflect","Uint16Array","Uint32Array","Uint8ClampedArray","WeakSet","Atomics","SharedArrayBuffer","BigInt","globalThis","Audio","applicationCache","atob","btoa","cancelAnimationFrame","CanvasGradient","CanvasPattern","CanvasRenderingContext2D","CSS","CSSImportRule","CSSGroupingRule","CSSMarginRule","CSSMediaRule","CSSNamespaceRule","CSSPageRule","CSSRule","CSSRuleList","CSSStyleDeclaration","CSSStyleRule","CSSStyleSheet","close","closed","Comment","CompositionEvent","createImageBitmap","CustomEvent","DOMParser","defaultStatus","dispatchEvent","DocumentFragment","Element","ElementTimeControl","Event","fetch","File","FileList","FileReader","FormData","frames","Headers","HTMLAnchorElement","HTMLAreaElement","HTMLAudioElement","HTMLBaseElement","HTMLBlockquoteElement","HTMLBodyElement","HTMLBRElement","HTMLButtonElement","HTMLCanvasElement","HTMLCollection","HTMLDataElement","HTMLDataListElement","HTMLDetailsElement","HTMLDialogElement","HTMLDirectoryElement","HTMLDivElement","HTMLDListElement","HTMLElement","HTMLEmbedElement","HTMLFieldSetElement","HTMLFontElement","HTMLFormElement","HTMLFrameElement","HTMLFrameSetElement","HTMLHeadElement","HTMLHeadingElement","HTMLHRElement","HTMLHtmlElement","HTMLIFrameElement","HTMLImageElement","HTMLInputElement","HTMLIsIndexElement","HTMLLabelElement","HTMLLayerElement","HTMLLegendElement","HTMLLIElement","HTMLLinkElement","HTMLMapElement","HTMLMarqueeElement","HTMLMediaElement","HTMLMenuElement","HTMLMetaElement","HTMLMeterElement","HTMLModElement","HTMLObjectElement","HTMLOListElement","HTMLOptGroupElement","HTMLOptionElement","HTMLParagraphElement","HTMLParamElement","HTMLPictureElement","HTMLPreElement","HTMLProgressElement","HTMLQuoteElement","HTMLScriptElement","HTMLSelectElement","HTMLSlotElement","HTMLSourceElement","HTMLStyleElement","HTMLTableCaptionElement","HTMLTableCellElement","HTMLTableColElement","HTMLTableElement","HTMLTableRowElement","HTMLTableSectionElement","HTMLTemplateElement","HTMLTextAreaElement","HTMLTimeElement","HTMLTitleElement","HTMLTrackElement","HTMLUListElement","HTMLVideoElement","Image","IntersectionObserver","Intl","localStorage","matchMedia","MediaList","MediaRecorder","MessageChannel","MessageEvent","MessagePort","MutationObserver","Node","NodeFilter","NodeList","Notification","onbeforeunload","onfocus","onresize","onunload","openDatabase","opener","Option","origin","performance","print","queueMicrotask","Request","resizeBy","resizeTo","Response","screen","scroll","sessionStorage","SharedWorker","status","Storage","StyleSheet","SVGAElement","SVGAltGlyphDefElement","SVGAltGlyphElement","SVGAltGlyphItemElement","SVGAngle","SVGAnimateColorElement","SVGAnimateElement","SVGAnimateMotionElement","SVGAnimateTransformElement","SVGAnimatedAngle","SVGAnimatedBoolean","SVGAnimatedEnumeration","SVGAnimatedInteger","SVGAnimatedLength","SVGAnimatedLengthList","SVGAnimatedNumber","SVGAnimatedNumberList","SVGAnimatedPathData","SVGAnimatedPoints","SVGAnimatedPreserveAspectRatio","SVGAnimatedRect","SVGAnimatedString","SVGAnimatedTransformList","SVGAnimationElement","SVGCSSRule","SVGCircleElement","SVGClipPathElement","SVGColor","SVGColorProfileElement","SVGColorProfileRule","SVGComponentTransferFunctionElement","SVGCursorElement","SVGDefsElement","SVGDescElement","SVGDocument","SVGElement","SVGElementInstance","SVGElementInstanceList","SVGEllipseElement","SVGExternalResourcesRequired","SVGFEBlendElement","SVGFEColorMatrixElement","SVGFEComponentTransferElement","SVGFECompositeElement","SVGFEConvolveMatrixElement","SVGFEDiffuseLightingElement","SVGFEDisplacementMapElement","SVGFEDistantLightElement","SVGFEFloodElement","SVGFEFuncAElement","SVGFEFuncBElement","SVGFEFuncGElement","SVGFEFuncRElement","SVGFEGaussianBlurElement","SVGFEImageElement","SVGFEMergeElement","SVGFEMergeNodeElement","SVGFEMorphologyElement","SVGFEOffsetElement","SVGFEPointLightElement","SVGFESpecularLightingElement","SVGFESpotLightElement","SVGFETileElement","SVGFETurbulenceElement","SVGFilterElement","SVGFilterPrimitiveStandardAttributes","SVGFitToViewBox","SVGFontElement","SVGFontFaceElement","SVGFontFaceFormatElement","SVGFontFaceNameElement","SVGFontFaceSrcElement","SVGFontFaceUriElement","SVGForeignObjectElement","SVGGElement","SVGGlyphElement","SVGGlyphRefElement","SVGGradientElement","SVGHKernElement","SVGICCColor","SVGImageElement","SVGLangSpace","SVGLength","SVGLengthList","SVGLineElement","SVGLinearGradientElement","SVGLocatable","SVGMPathElement","SVGMarkerElement","SVGMaskElement","SVGMatrix","SVGMetadataElement","SVGMissingGlyphElement","SVGNumber","SVGNumberList","SVGPaint","SVGPathElement","SVGPathSeg","SVGPathSegArcAbs","SVGPathSegArcRel","SVGPathSegClosePath","SVGPathSegCurvetoCubicAbs","SVGPathSegCurvetoCubicRel","SVGPathSegCurvetoCubicSmoothAbs","SVGPathSegCurvetoCubicSmoothRel","SVGPathSegCurvetoQuadraticAbs","SVGPathSegCurvetoQuadraticRel","SVGPathSegCurvetoQuadraticSmoothAbs","SVGPathSegCurvetoQuadraticSmoothRel","SVGPathSegLinetoAbs","SVGPathSegLinetoHorizontalAbs","SVGPathSegLinetoHorizontalRel","SVGPathSegLinetoRel","SVGPathSegLinetoVerticalAbs","SVGPathSegLinetoVerticalRel","SVGPathSegList","SVGPathSegMovetoAbs","SVGPathSegMovetoRel","SVGPatternElement","SVGPoint","SVGPointList","SVGPolygonElement","SVGPolylineElement","SVGPreserveAspectRatio","SVGRadialGradientElement","SVGRect","SVGRectElement","SVGRenderingIntent","SVGSVGElement","SVGScriptElement","SVGSetElement","SVGStopElement","SVGStringList","SVGStylable","SVGStyleElement","SVGSwitchElement","SVGSymbolElement","SVGTRefElement","SVGTSpanElement","SVGTests","SVGTextContentElement","SVGTextElement","SVGTextPathElement","SVGTextPositioningElement","SVGTitleElement","SVGTransform","SVGTransformList","SVGTransformable","SVGURIReference","SVGUnitTypes","SVGUseElement","SVGVKernElement","SVGViewElement","SVGViewSpec","SVGZoomAndPan","TextDecoder","TextEncoder","TimeEvent","URLSearchParams","WebGLActiveInfo","WebGLBuffer","WebGLContextEvent","WebGLFramebuffer","WebGLProgram","WebGLRenderbuffer","WebGLRenderingContext","WebGLShader","WebGLShaderPrecisionFormat","WebGLTexture","WebGLUniformLocation","WebSocket","Window","XDomainRequest","XMLDocument","XMLSerializer","XPathEvaluator","XPathException","XPathExpression","XPathNamespace","XPathNSResolver","XPathResult","alert","confirm","Debug","FileReaderSync","respond","sum","provides","__filename","__dirname","GLOBAL","process","setImmediate","clearImmediate","WebPage","asyncTest","deepEqual","equal","expect","notDeepEqual","notEqual","notOk","notPropEqual","notStrictEqual","propEqual","QUnit","raises","strictEqual","defineClass","deserialize","help","importClass","importPackage","loadClass","Packages","readFile","readUrl","runCommand","seal","serialize","spawn","sync","toint32","echo","exit","cd","pwd","ls","cp","rm","mv","mkdir","cat","sed","grep","dirs","pushd","popd","chmod","tempdir","ArrayBufferView","ActiveXObject","Enumerator","GetObject","ScriptEngine","ScriptEngineBuildVersion","ScriptEngineMajorVersion","ScriptEngineMinorVersion","VBArray","WSH","WScript","dijit","dojox","jQuery","Asset","Browser","Chain","Class","Color","Cookie","Core","DomReady","DOMEvent","DOMReady","Drag","Elements","Events","Fx","Group","HtmlTable","IFrame","IframeShim","InputValidator","instanceOf","Keyboard","Locale","Mask","MooTools","Native","Options","OverText","Scroller","Slick","Slider","Sortables","Spinner","Swiff","Tips","Type","typeOf","URI","Abstract","Ajax","Enumerable","Field","Form","Insertion","ObjectRange","PeriodicalExecuter","Position","Prototype","Selector","Toggle","Try","Autocompleter","Builder","Draggable","Draggables","Droppables","Effect","Sortable","SortableObserver","Sound","Scriptaculous","YUI","Y","YUI_config","describe","xdescribe","xcontext","it","xit","specify","xspecify","beforeEach","afterEach","suite","teardown","suiteSetup","suiteTeardown","setFixtures","loadFixtures","spyOn","runs","waitsFor","waits","beforeAll","afterAll","fail","fdescribe","fit","spyOnProperty","pSlice","hasOwn","replacer","truncate","actual","stackStartFunction","AssertionError","_deepEqual","multiline","isNullOrUndefined","isPrimitive","aIsArgs","bIsArgs","ka","objectKeys","objEquiv","expectedException","_throws","shouldThrow","generatedMessage","stringify","getMessage","captureStackTrace","out","fn_name","next_line","throws","doesNotThrow","ifError","TempCtor","readUInt8","formatRegExp","objects","deprecate","noDeprecation","warned","throwDeprecation","traceDeprecation","debugEnviron","debugs","stylize","stylizeNoColor","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","recurseTimes","primitive","simple","formatPrimitive","visibleKeys","arrayToHash","getOwnPropertyNames","formatError","toUTCString","formatProperty","formatArray","cur","reduceToSingleString","ar","pad","debuglog","NODE_DEBUG","pid","months","getHours","getMinutes","getSeconds","getDate","getMonth","_events","_maxListeners","defaultMaxListeners","setMaxListeners","newListener","fired","listenerCount","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","runClearTimeout","Item","title","argv","versions","prependListener","prependOnceListener","cwd","chdir","umask","lint","startRegex","disabledWarningsRe","errorsRe","infoRe","JavaScriptWorker","changeOptions","newOptions"],"sourceRoot":""}