Sid Gifari File Manager
🏠 Root
/
home
/
genremedia08
/
musicjukebox.overlookedtracks.com
/
public
/
build
/
assets
/
Editing: ace-editor-74b87ff0.js.map
{"version":3,"file":"ace-editor-74b87ff0.js","sources":["../../../node_modules/ace-builds/src-noconflict/ace.js","../../../node_modules/ace-builds/src-noconflict/worker-css.js?url","../../../node_modules/ace-builds/src-noconflict/worker-html.js?url","../../../node_modules/ace-builds/src-noconflict/worker-javascript.js?url","../../../node_modules/lodash.isequal/index.js","../../../node_modules/react-ace/lib/editorOptions.js","../../../node_modules/react-ace/lib/ace.js","../../../node_modules/ace-builds/src-noconflict/ext-split.js","../../../node_modules/lodash.get/index.js","../../../node_modules/react-ace/lib/split.js","../../../node_modules/diff-match-patch/index.js","../../../node_modules/react-ace/lib/diff.js","../../../node_modules/react-ace/lib/index.js","../../../node_modules/ace-builds/src-noconflict/mode-css.js","../../../node_modules/ace-builds/src-noconflict/mode-html.js","../../../node_modules/ace-builds/src-noconflict/theme-chrome.js","../../../node_modules/ace-builds/src-noconflict/theme-tomorrow_night.js","../../../node_modules/ace-builds/src-noconflict/ext-language_tools.js","../../../node_modules/ace-builds/src-noconflict/ext-beautify.js","../../../common/resources/client/ace-editor/ace-editor.tsx"],"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/lang\",[\"require\",\"exports\",\"module\"], 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 = 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};\nexports.arrayToMap = function (arr) {\n var map = {};\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n};\nexports.createMap = function (props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\nexports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n return (\"\" + str).replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/</g, \"<\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n var matches = [];\n string.replace(regExp, function (str) {\n matches.push({\n offset: arguments[arguments.length - 2],\n length: str.length\n });\n });\n return matches;\n};\nexports.deferredCall = function (fcn) {\n var timer = null;\n var callback = function () {\n timer = null;\n fcn();\n };\n var deferred = function (timeout) {\n deferred.cancel();\n timer = setTimeout(callback, timeout || 0);\n return deferred;\n };\n deferred.schedule = deferred;\n deferred.call = function () {\n this.cancel();\n fcn();\n return deferred;\n };\n deferred.cancel = function () {\n clearTimeout(timer);\n timer = null;\n return deferred;\n };\n deferred.isPending = function () {\n return timer;\n };\n return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n var timer = null;\n var callback = function () {\n timer = null;\n fcn();\n };\n var _self = function (timeout) {\n if (timer == null)\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.delay = function (timeout) {\n timer && clearTimeout(timer);\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.schedule = _self;\n _self.call = function () {\n this.cancel();\n fcn();\n };\n _self.cancel = function () {\n timer && clearTimeout(timer);\n timer = null;\n };\n _self.isPending = function () {\n return timer;\n };\n return _self;\n};\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/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.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/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/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\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}\nfunction 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}\nvar AppConfig = function () {\n this.$defaultOptions = {};\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.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 this.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 this.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 this.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n this.warn = warn;\n this.reportError = reportError;\n}).call(AppConfig.prototype);\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/oop\",\"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 oop = require(\"./lib/oop\");\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 return console.error(\"loader is not configured\");\n};\nexports.setLoader = function (cb) {\n loader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.loadModule = function (moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\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 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 module = require(moduleName);\n }\n catch (e) { }\n load(module);\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.15.3\";\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 ace.require = require;\n\n if (typeof define === \"function\")\n ace.define = define;\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n if (currentScript && currentScript.src) {\n scriptUrl = currentScript.src.split(/[?#]/)[0].split(\"/\").slice(0, -1).join(\"/\") || \"\";\n }\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i<scripts.length; i++) {\n var script = scripts[i];\n\n var src = script.src || script.getAttribute(\"src\");\n if (!src)\n continue;\n\n var attributes = script.attributes;\n for (var j=0, l=attributes.length; j < l; j++) {\n var attr = attributes[j];\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace([\\-.]\\w+)?\\.js(\\?|$)/);\n if (m)\n scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions)\n if (typeof scriptOptions[key] !== \"undefined\")\n config.set(key, scriptOptions[key]);\n}\n\nfunction deHyphenate(str) {\n return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n});\n\nace.define(\"ace/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.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\";\nvar 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 }\n });\n }\n catch (e) { }\n}\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\nexports.stopPropagation = function (e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function (e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n addListener(el, \"wheel\", function (e) {\n var factor = 0.15;\n var deltaX = e.deltaX || 0;\n var deltaY = e.deltaY || 0;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = deltaX * factor;\n e.wheelY = deltaY * factor;\n break;\n case e.DOM_DELTA_LINE:\n var linePixels = 15;\n e.wheelX = deltaX * linePixels;\n e.wheelY = deltaY * linePixels;\n break;\n case e.DOM_DELTA_PAGE:\n var pagePixels = 150;\n e.wheelX = deltaX * pagePixels;\n e.wheelY = deltaY * pagePixels;\n break;\n }\n callback(e);\n }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n }\n else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n }\n else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function (el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\nvar getModifierHash = function (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 = \"location\" in e ? e.location : e.keyLocation;\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 var location = \"location\" in e ? e.location : e.keyLocation;\n if (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 if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function (e) {\n lastKeyDownKeyCode = e.keyCode;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n }, destroyer);\n }\n else {\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 }\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/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (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(function () {\n this.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 this.toString = function () {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n this.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n this.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 this.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n this.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n this.intersects = function (range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n this.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n this.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n this.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 this.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 this.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 this.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 this.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 this.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 this.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 this.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 this.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 this.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 this.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 this.isEmpty = function () {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n this.isMultiLine = function () {\n return (this.start.row !== this.end.row);\n };\n this.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n this.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 this.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 this.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}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\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/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/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 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 = 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 try {\n var isFocused = document.activeElement === text;\n }\n catch (e) { }\n this.setAriaOptions = function (options) {\n if (options.activeDescendant) {\n text.setAttribute(\"aria-haspopup\", \"true\");\n text.setAttribute(\"aria-autocomplete\", \"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 };\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 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 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 selectionStart = range.start.column;\n selectionEnd = range.end.column;\n line = host.session.getLine(row);\n if (range.start.row != row) {\n var prevLine = host.session.getLine(row - 1);\n selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row != row) {\n var nextLine = host.session.getLine(row + 1);\n selectionEnd = range.end.row > row + 1 ? nextLine.length : selectionEnd;\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 }\n var newValue = line + \"\\n\\n\";\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\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, host.onCommandKey.bind(host), 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\nfunction 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(function () {\n this.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 this.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 this.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 this.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 this.selectEnd =\n this.selectAllEnd =\n this.selectByWordsEnd =\n this.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n };\n this.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 this.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 this.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 this.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n this.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}).call(DefaultHandlers.prototype);\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/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar CLASSNAME = \"ace_tooltip\";\nfunction Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n}\n(function () {\n this.$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 this.getElement = function () {\n return this.$element || this.$init();\n };\n this.setText = function (text) {\n this.getElement().textContent = text;\n };\n this.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n this.setPosition = function (x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n this.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n this.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 this.hide = function () {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.getElement().className = CLASSNAME;\n this.isOpen = false;\n }\n };\n this.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n this.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n this.destroy = function () {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n}).call(Tooltip.prototype);\nexports.Tooltip = Tooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\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, tooltipAnnotation;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\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 if (tooltipAnnotation == annotation)\n return;\n tooltipAnnotation = annotation.text.join(\"<br/>\");\n tooltip.setHtml(tooltipAnnotation);\n var annotationClassName = annotation.className;\n if (annotationClassName) {\n tooltip.setClassName(annotationClassName.trim());\n }\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterElement = mouseEvent.domEvent.target;\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 }\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\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 (tooltipAnnotation && 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 (!tooltipAnnotation || tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n editor.on(\"changeSession\", hideTooltip);\n}\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\noop.inherits(GutterTooltip, Tooltip);\n(function () {\n this.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}).call(GutterTooltip.prototype);\nexports.GutterHandler = GutterHandler;\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 = exports.MouseEvent = function (domEvent, editor) {\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(function () {\n this.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n this.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n this.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n this.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 this.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 this.getButton = function () {\n return event.getButton(this.domEvent);\n };\n this.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n this.getAccelKey = useragent.isMac\n ? function () { return this.domEvent.metaKey; }\n : function () { return this.domEvent.ctrlKey; };\n}).call(MouseEvent.prototype);\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: \"openCommandPallete\" }, \"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 != \"openCommandPallete\")\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 = function (editor) {\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 }, editor);\n};\n(function () {\n this.onMouseEvent = function (name, e) {\n if (!this.editor.session)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n this.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 this.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 this.setState = function (state) {\n this.state = state;\n };\n this.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 this.releaseMouse = null;\n this.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 this.destroy = function () {\n if (this.releaseMouse)\n this.releaseMouse();\n };\n}).call(MouseHandler.prototype);\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\");\nfunction 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}\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 = function (editor) {\n this.$editor = editor;\n this.$data = { editor: editor };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n};\n(function () {\n this.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n this.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 this.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 this.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 this.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n this.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 this.$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(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 this.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n this.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n}).call(KeyBinding.prototype);\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 = function (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(function () {\n this.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 this.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 this.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 this.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 this.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 this.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 this.markAsDirty = function () {\n this.currentRow = null;\n };\n this.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 this.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n this.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n this.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n this.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 this.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 this.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 this.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 this.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}).call(BidiHandler.prototype);\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 = function (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(function () {\n oop.implement(this, EventEmitter);\n this.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n this.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n this.getCursor = function () {\n return this.lead.getPosition();\n };\n this.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n this.setSelectionAnchor = this.setAnchor;\n this.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n this.getSelectionAnchor = this.getAnchor;\n this.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n this.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 this.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 this.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n this.setRange =\n this.setSelectionRange = 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 this.$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 this.$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 this.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.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 this.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n this.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 this.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n this.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 this.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 this.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 this.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 this.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 this.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n this.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 this.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 this.$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 this.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 this.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 this.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n this.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.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 this.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n this.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 this.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n this.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n this.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 this.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 this.toJSON = function () {\n if (this.rangeCount) {\n 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 {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n this.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 this.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}).call(Selection.prototype);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function (rules) {\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(function () {\n this.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n this.$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 this.$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 this.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n return r;\n };\n this.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 this.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 = 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 this.reportError = config.reportError;\n}).call(Tokenizer.prototype);\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = 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]], lang.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 (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 = 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 = function (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(function () {\n this.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 this.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 this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n this.getCurrentTokenRow = function () {\n return this.$row;\n };\n this.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 this.getCurrentTokenPosition = function () {\n return { row: this.$row, column: this.getCurrentTokenColumn() };\n };\n this.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}).call(TokenIterator.prototype);\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 = function (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 && 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(leftChar);\n if (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};\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 = 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 for (var i = 0; i < delegations.length; i++) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\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 = exports.Anchor = function (doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n this.getDocument = function () {\n return this.document;\n };\n this.$insertRight = false;\n this.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 function $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 }\n function $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 }\n this.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 this.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n this.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n this.$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}).call(Anchor.prototype);\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 = function (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(function () {\n oop.implement(this, EventEmitter);\n this.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 this.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n this.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function (text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n }\n else {\n this.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n this.$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 this.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 this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineMode = function () {\n return this.$newLineMode;\n };\n this.isNewLine = function (text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n this.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n this.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n this.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n this.getLength = function () {\n return this.$lines.length;\n };\n this.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n this.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 this.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 this.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 this.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n this.insert = function (position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n this.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 this.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 this.clonePos = function (pos) {\n return { row: pos.row, column: pos.column };\n };\n this.pos = function (row, column) {\n return { row: row, column: column };\n };\n this.$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 this.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 this.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 this.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 this.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 this.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 this.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 this.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 this.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n this.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n this.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 this.$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 this.$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 this.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 this.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 this.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}).call(Document.prototype);\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 = function (tokenizer, editor) {\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(function () {\n oop.implement(this, EventEmitter);\n this.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n this.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n this.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", { data: data });\n };\n this.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 this.scheduleStart = function () {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n this.$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 this.stop = function () {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n this.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n this.getState = function (row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n this.$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 this.cleanup = function () {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.removeAllListeners();\n };\n}).call(BackgroundTokenizer.prototype);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"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 SearchHighlight = function (regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n};\n(function () {\n this.MAX_RANGES = 500;\n this.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n this.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}).call(SearchHighlight.prototype);\nexports.SearchHighlight = SearchHighlight;\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;\nfunction 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(function () {\n this.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 this.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 this.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n this.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 this.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 this.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 this.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 this.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 this.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 this.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}).call(FoldLine.prototype);\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 = function () {\n this.ranges = [];\n this.$bias = 1;\n};\n(function () {\n this.comparePoints = comparePoints;\n this.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 this.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 this.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 this.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n this.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 this.contains = function (row, column) {\n return this.pointIndex({ row: row, column: column }) >= 0;\n };\n this.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n this.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n this.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 this.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n this.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 this.detach = function () {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n this.$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}).call(RangeList.prototype);\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar RangeList = require(\"../range_list\").RangeList;\nvar oop = require(\"../lib/oop\");\nvar Fold = exports.Fold = function (range, placeholder) {\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};\noop.inherits(Fold, RangeList);\n(function () {\n this.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n this.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n this.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 this.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 this.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n}).call(Fold.prototype);\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}\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\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\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\";\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 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 + \")+\");\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 + \")+\");\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 depth--;\n if (depth < 0) { //found closing tag\n iterator.stepBackward();\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); //Range for </\n token = iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n token = iterator.stepForward();\n if (token && token.value === '>') {\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n else {\n return;\n }\n }\n }\n }\n }\n else if (tag === currentTag && token.value === '/>') { // self-closing tag\n depth--;\n if (depth < 0) { //found self-closing tag end\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n var closeTagName = closeTagStart;\n var closeTagEnd = closeTagName;\n var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n }\n }\n }\n } while (token && depth >= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n this.$findOpeningTag = function (iterator, token) {\n var prevToken = iterator.getCurrentToken();\n var tag = token.value;\n var depth = 0;\n var startRow = iterator.getCurrentTokenRow();\n var startColumn = iterator.getCurrentTokenColumn();\n var endColumn = startColumn + 2;\n var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for </\n iterator.stepForward();\n var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n token = iterator.stepForward();\n if (!token || token.value !== \">\")\n return;\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n iterator.stepBackward();\n iterator.stepBackward();\n do {\n token = prevToken;\n startRow = iterator.getCurrentTokenRow();\n startColumn = iterator.getCurrentTokenColumn();\n endColumn = startColumn + token.value.length;\n prevToken = iterator.stepBackward();\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n if (depth > 0) { //found opening tag\n var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n do {\n token = iterator.stepForward();\n } while (token && token.value !== '>');\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n }\n else if (prevToken.value === '</') {\n depth--;\n }\n }\n }\n else if (token.value === '/>') { // self-closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n }\n else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"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 EditSession = function (text, mode) {\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(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};\nEditSession.$uid = 0;\n(function () {\n oop.implement(this, EventEmitter);\n this.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 this.getDocument = function () {\n return this.doc;\n };\n this.$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 this.$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 this.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 this.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n this.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 this.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 this.getValue =\n this.toString = function () {\n return this.doc.getValue();\n };\n this.getSelection = function () {\n return this.selection;\n };\n this.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n this.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n this.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 this.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 this.markUndoGroup = function () {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n this.$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 };\n this.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n this.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n }\n else {\n return \"\\t\";\n }\n };\n this.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n this.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n this.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n this.getTabSize = function () {\n return this.$tabSize;\n };\n this.isTabStop = function (position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n this.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n this.$overwrite = false;\n this.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n this.getOverwrite = function () {\n return this.$overwrite;\n };\n this.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n this.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n this.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n this.getBreakpoints = function () {\n return this.$breakpoints;\n };\n this.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 this.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n this.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 this.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.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 this.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 this.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 this.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n this.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 this.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 this.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n this.getAnnotations = function () {\n return this.$annotations || [];\n };\n this.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n this.$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 this.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 this.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 this.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n this.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n this.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n this.getUseWorker = function () { return this.$useWorker; };\n this.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n this.$modes = config.$modes;\n this.$mode = null;\n this.$modeId = null;\n this.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 = 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 this.$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 this.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n this.$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 this.getMode = function () {\n return this.$mode;\n };\n this.$scrollTop = 0;\n this.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function () {\n return this.$scrollTop;\n };\n this.$scrollLeft = 0;\n this.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n this.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n this.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets)\n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n this.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 this.$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 this.getLine = function (row) {\n return this.doc.getLine(row);\n };\n this.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n this.getLength = function () {\n return this.doc.getLength();\n };\n this.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n this.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n this.remove = function (range) {\n return this.doc.remove(range);\n };\n this.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n this.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 this.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 this.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n this.$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 this.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n this.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 this.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 this.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 this.$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 this.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n this.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n this.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n this.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n this.$clipColumnToRow = function (row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n this.$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 this.$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 this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min: null,\n max: null\n };\n this.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 this.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n this.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 this.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 this.$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 this.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n this.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n this.$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 this.$updateRowLengthCache = function (firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n this.$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 var CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\n this.$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 this.$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 this.$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 this.lineWidgets = null;\n this.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 this.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 this.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 this.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n this.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n this.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n this.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n }\n else {\n return this.$wrapData[row];\n }\n };\n this.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n this.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n this.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n this.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 this.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(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 this.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n this.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n this.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 this.$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 this.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 this.isFullWidth = isFullWidth;\n function 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 }\n}).call(EditSession.prototype);\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 = function () {\n this.$options = {};\n};\n(function () {\n this.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n this.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n this.setOptions = function (options) {\n this.$options = options;\n };\n this.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 && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(options.start)) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n this.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 this.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 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 this.$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 if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\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 this.$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 this.$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 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 += 1;\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 += 1;\n if (last >= line.length)\n return false;\n }\n }\n };\n }\n return { forEach: forEach };\n };\n}).call(Search.prototype);\nfunction addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp)\n return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\nMultiHashHandler.prototype = HashHandler.prototype;\n(function () {\n this.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 this.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 this.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 || key });\n 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 function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n }\n this._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 this.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 this.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n this.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n this._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n this.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 this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n this.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 this.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n}).call(HashHandler.prototype);\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 oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = function (platform, commands) {\n MultiHashHandler.call(this, commands, platform);\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};\noop.inherits(CommandManager, MultiHashHandler);\n(function () {\n oop.implement(this, EventEmitter);\n this.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 this.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 this.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 this.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}).call(CommandManager.prototype);\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 multiSelectAction: \"forEachLine\",\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 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\");\nfunction 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(function () {\n this.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 this.$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 this.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n this.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 this.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 this.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 this.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 this.$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 this.$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 this.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 this.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 this.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 this.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n this.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 this.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}).call(LineWidgets.prototype);\nexports.LineWidgets = LineWidgets;\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/clipboard\"], 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 clipboard = require(\"./clipboard\");\nvar Editor = function (renderer, session, options) {\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};\nEditor.$uid = 0;\n(function () {\n oop.implement(this, EventEmitter);\n this.$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 this.curOp = null;\n this.prevOp = {};\n this.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 this.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 this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n this.$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 this.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 this.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n this.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 this.getSession = function () {\n return this.session;\n };\n this.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 this.getValue = function () {\n return this.session.getValue();\n };\n this.getSelection = function () {\n return this.selection;\n };\n this.resize = function (force) {\n this.renderer.onResize(force);\n };\n this.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n this.getTheme = function () {\n return this.renderer.getTheme();\n };\n this.setStyle = function (style) {\n this.renderer.setStyle(style);\n };\n this.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n this.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n this.$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 this.focus = function () {\n this.textInput.focus();\n };\n this.isFocused = function () {\n return this.textInput.isFocused();\n };\n this.blur = function () {\n this.textInput.blur();\n };\n this.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 this.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 this.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$updateHighlightActiveLine();\n };\n this.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 this.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n this.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n this.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n this.onCursorChange = function () {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n this.$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 this.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 this.$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 this.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n this.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n this.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n this.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n this.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n this.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n this.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n this.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n this.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n this.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 this.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n this.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n this.onPaste = function (text, event) {\n var e = { text: text, event: event };\n this.commands.exec(\"paste\", this, e);\n };\n this.$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 this.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n this.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 = new 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 this.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var startRow, endRow;\n if (this.selection.isEmpty()) {\n startRow = 0;\n endRow = session.doc.getLength() - 1;\n }\n else {\n var selectedRange = this.getSelectionRange();\n startRow = selectedRange.start.row;\n endRow = selectedRange.end.row;\n }\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var line, currIndent, range;\n var tab = session.getTabString();\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 line = session.getLine(row);\n currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n 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 this.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 this.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 this.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n this.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n this.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n this.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n this.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n this.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n this.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n this.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n this.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n this.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n this.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n this.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n this.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n this.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n this.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n this.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n this.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n this.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n this.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n this.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n this.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n this.setHighlightIndentGuides = function (highlight) {\n this.renderer.setHighlightIndentGuides(highlight);\n };\n this.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n };\n this.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n this.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n this.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n this.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n this.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n this.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n this.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n this.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n this.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n this.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.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 this.removeWordRight = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.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 this.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 this.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 this.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 this.removeGhostText = function () {\n if (!this.session.widgetManager)\n return;\n this.renderer.removeGhostText();\n };\n this.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 this.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 this.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 this.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 this.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n this.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n this.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 this.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 this.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 this.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 this.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 this.$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 ];\n this.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 this.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 this.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 this.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n this.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), false);\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n this.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n this.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n this.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n this.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n this.$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 this.$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 this.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n this.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n this.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n this.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n this.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n this.isRowVisible = function (row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n this.isRowFullyVisible = function (row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n this.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n this.$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 this.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n this.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n this.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n this.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n this.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n this.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n this.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n this.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n this.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 this.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n this.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n this.getSelectionRange = function () {\n return this.selection.getRange();\n };\n this.selectAll = function () {\n this.selection.selectAll();\n };\n this.clearSelection = function () {\n this.selection.clearSelection();\n };\n this.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n this.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n this.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var tokenCount = 0;\n if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n prevToken = iterator.stepBackward();\n }\n var token = prevToken || iterator.stepForward();\n if (!token)\n return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<' && tokenCount > 1) {\n depth[token.value]++;\n }\n else if (prevToken.value === '</') {\n depth[token.value]--;\n }\n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n if (!found) {\n prevToken = token;\n tokenCount++;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n if (!matchType)\n return;\n var range, pos;\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n if (!range) {\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column)\n < 2)\n range = this.session.getBracketRange(pos);\n }\n }\n else if (matchType === 'tag') {\n if (!token || token.type.indexOf('tag-name') === -1)\n return;\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n if (range.compare(cursor.row, cursor.column) === 0) {\n var tagsRanges = this.session.getMatchingTags(cursor);\n if (tagsRanges) {\n if (tagsRanges.openTag.contains(cursor.row, cursor.column)) {\n range = tagsRanges.closeTag;\n pos = range.start;\n }\n else {\n range = tagsRanges.openTag;\n if (tagsRanges.closeTag.start.row === cursor.row && tagsRanges.closeTag.start.column\n === cursor.column)\n pos = range.end;\n else\n pos = range.start;\n }\n }\n }\n pos = pos || range.start;\n }\n pos = range && range.cursor || pos;\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n }\n else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n }\n else {\n this.selection.selectTo(pos.row, pos.column);\n }\n }\n else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n this.gotoLine = function (lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({ row: lineNumber - 1, column: column || 0 });\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n if (!this.isRowFullyVisible(lineNumber - 1))\n this.scrollToLine(lineNumber - 1, true, animate);\n };\n this.navigateTo = function (row, column) {\n this.selection.moveTo(row, column);\n };\n this.navigateUp = function (times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n this.navigateDown = function (times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n this.navigateLeft = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n this.clearSelection();\n };\n this.navigateRight = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n }\n else {\n times = times || 1;\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n this.clearSelection();\n };\n this.navigateLineStart = function () {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n this.navigateLineEnd = function () {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n this.navigateFileEnd = function () {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n this.navigateFileStart = function () {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n this.navigateWordRight = function () {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n this.navigateWordLeft = function () {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n this.replace = function (replacement, options) {\n if (options)\n this.$search.set(options);\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range)\n return replaced;\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n return replaced;\n };\n this.replaceAll = function (replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length)\n return replaced;\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n for (var i = ranges.length - 1; i >= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n this.$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 this.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n this.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 this.findNext = function (options, animate) {\n this.find({ skipCurrent: true, backwards: false }, options, animate);\n };\n this.findPrevious = function (options, animate) {\n this.find(options, { skipCurrent: true, backwards: true }, animate);\n };\n this.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 this.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.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 this.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 this.$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 this.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}).call(Editor.prototype);\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 value = this.session && (this.renderer.$composition || this.getValue());\n if (value && 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 (!value && !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 (!value && 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 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 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 (session, row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (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/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = function () {\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.$undoDepth = Infinity;\n this.reset();\n};\n(function () {\n this.addSession = function (session) {\n this.$session = session;\n };\n this.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 this.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n this.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n this.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 this.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 this.getRevision = function () {\n return this.$rev;\n };\n this.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 this.getChangedRanges = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n this.getChangedLines = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n this.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 this.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 this.$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 this.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 this.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n this.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n this.bookmark = function (rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n this.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n this.toJSON = function () {\n };\n this.fromJSON = function () {\n };\n this.hasUndo = this.canUndo;\n this.hasRedo = this.canRedo;\n this.isClean = this.isAtBookmark;\n this.markClean = this.bookmark;\n this.$prettyPrint = function (delta) {\n if (delta)\n return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n}).call(UndoManager.prototype);\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/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = function (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(function () {\n this.moveContainer = function (config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n this.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 this.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 this.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n this.getLength = function () {\n return this.cells.length;\n };\n this.get = function (index) {\n return this.cells[index];\n };\n this.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n this.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n this.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 this.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 this.last = function () {\n if (this.cells.length)\n return this.cells[this.cells.length - 1];\n else\n return null;\n };\n this.$cacheCell = function (cell) {\n if (!cell)\n return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n this.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}).call(Lines.prototype);\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\"], 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 Gutter = function (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(function () {\n oop.implement(this, EventEmitter);\n this.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 this.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 this.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 this.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: [] };\n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1)\n rowInfo.text.push(annoText);\n var type = annotation.type;\n var className = annotation.className;\n if (className)\n rowInfo.className = className;\n else if (type == \"error\")\n rowInfo.className = \" ace_error\";\n else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (type == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\n }\n };\n this.$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 this.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 this.$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;\n this.element.parentNode.style.width =\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n this.$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 this.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 this.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 this.$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 this.$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 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 className = \"ace_gutter-cell \";\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])\n className += this.$annotations[row].className;\n if (element.className != className)\n element.className = 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 className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (foldWidget.className != className)\n foldWidget.className = className;\n var foldHeight = config.lineHeight + \"px\";\n dom.setStyle(foldWidget.style, \"height\", foldHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n var text = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (text !== textNode.data) {\n textNode.data = text;\n }\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 = text;\n return cell;\n };\n this.$fixedWidth = false;\n this.$highlightGutterLine = true;\n this.$renderer = \"\";\n this.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () { return 0; },\n getText: function () { return \"\"; }\n };\n };\n this.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n this.$showFoldWidgets = true;\n this.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 this.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n this.$computePadding = function () {\n if (!this.element.firstChild)\n return { left: 0, right: 0 };\n var style = dom.computedStyle(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 this.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}).call(Gutter.prototype);\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\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 = function (parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n};\n(function () {\n this.$padding = 0;\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n this.setSession = function (session) {\n this.session = session;\n };\n this.setMarkers = function (markers) {\n this.markers = markers;\n };\n this.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 this.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 this.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n this.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 this.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 this.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 this.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 this.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 this.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}).call(Marker.prototype);\nexports.Marker = Marker;\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\"], 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 Text = function (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(function () {\n oop.implement(this, EventEmitter);\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n this.MAX_LINE_LENGTH = 10000;\n this.$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 this.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n this.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n this.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n this.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n this.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n this.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n this.setSession = function (session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n this.showInvisibles = false;\n this.showSpaces = false;\n this.showTabs = false;\n this.showEOL = false;\n this.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 this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display)\n return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n this.$highlightIndentGuides = true;\n this.setHighlightIndentGuides = function (highlight) {\n if (this.$highlightIndentGuides === highlight)\n return false;\n this.$highlightIndentGuides = highlight;\n return highlight;\n };\n this.$tabStrings = [];\n this.onChangeTabSize =\n this.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n 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 this.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;\n 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 this.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 this.$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 this.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 this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n this.$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.com.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 (!this.$textToken[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.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 this.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 this.$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 this.$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 this.$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 this.$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 this.$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 this.$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 this.$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 this.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"<hide>\" : \"<click to see more...>\";\n parent.appendChild(overflowEl);\n };\n this.$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 this.$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 this.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n this.destroy = function () { };\n}).call(Text.prototype);\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 = function (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(function () {\n this.$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 this.$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 this.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n this.$padding = 0;\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n this.setSession = function (session) {\n this.session = session;\n };\n this.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n this.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n this.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 this.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 this.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 this.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n this.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n this.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 = 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 this.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 this.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n this.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 this.drawCursor = null;\n this.$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 this.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n}).call(Cursor.prototype);\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 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 = function (parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.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(function () {\n oop.implement(this, EventEmitter);\n this.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function (parent, renderer) {\n ScrollBar.call(this, parent);\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};\noop.inherits(VScrollBar, ScrollBar);\n(function () {\n this.classSuffix = '-v';\n this.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 this.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n this.setInnerHeight =\n this.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 this.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}).call(VScrollBar.prototype);\nvar HScrollBar = function (parent, renderer) {\n ScrollBar.call(this, parent);\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};\noop.inherits(HScrollBar, ScrollBar);\n(function () {\n this.classSuffix = '-h';\n this.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 this.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n this.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n this.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n}).call(HScrollBar.prototype);\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 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 = function (parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_sb\" + this.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(function () {\n oop.implement(this, EventEmitter);\n this.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function (parent, renderer) {\n ScrollBar.call(this, parent);\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};\noop.inherits(VScrollBar, ScrollBar);\n(function () {\n this.classSuffix = '-v';\n oop.implement(this, EventEmitter);\n this.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 this.getHeight = function () {\n return this.height;\n };\n this.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 this.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.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 this.setInnerHeight = this.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 this.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}).call(VScrollBar.prototype);\nvar HScrollBar = function (parent, renderer) {\n ScrollBar.call(this, parent);\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};\noop.inherits(HScrollBar, ScrollBar);\n(function () {\n this.classSuffix = '-h';\n oop.implement(this, EventEmitter);\n this.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 this.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n this.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 this.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 this.setInnerWidth = this.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 this.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}).call(HScrollBar.prototype);\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 = function (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(function () {\n this.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 this.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n}).call(RenderLoop.prototype);\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 = exports.FontMetrics = function (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(function () {\n oop.implement(this, EventEmitter);\n this.$characterSize = { width: 0, height: 0 };\n this.$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 this.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 this.$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 this.$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 this.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 this.$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 this.$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 this.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 this.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 this.$getZoom = function getZoom(element) {\n if (!element || !element.parentElement)\n return 1;\n return (window.getComputedStyle(element).zoom || 1) * getZoom(element.parentElement);\n };\n this.$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 this.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}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/css/editor.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n styles.push(\".ace_br\" + i + \"{\" + (\n [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n ).map(function(x, j) {\n return i & (1<<j) ? \"border-\" + x + \"-radius: 3px;\" : \"\"\n }).filter(Boolean).join(\" \") + \"}\")\n}\nstyles.join(\"\\\\n\")\n*/\nmodule.exports = \"\\n.ace_br1 {border-top-left-radius : 3px;}\\n.ace_br2 {border-top-right-radius : 3px;}\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\n.ace_br4 {border-bottom-right-radius: 3px;}\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\n.ace_br8 {border-bottom-left-radius : 3px;}\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n\\n\\n.ace_editor {\\n position: relative;\\n overflow: hidden;\\n padding: 0;\\n font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\n direction: ltr;\\n text-align: left;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n}\\n\\n.ace_scroller {\\n position: absolute;\\n overflow: hidden;\\n top: 0;\\n bottom: 0;\\n background-color: inherit;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n cursor: text;\\n}\\n\\n.ace_content {\\n position: absolute;\\n box-sizing: border-box;\\n min-width: 100%;\\n contain: style size layout;\\n font-variant-ligatures: no-common-ligatures;\\n}\\n\\n.ace_dragging .ace_scroller:before{\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n content: '';\\n background: rgba(250, 250, 250, 0.01);\\n z-index: 1000;\\n}\\n.ace_dragging.ace_dark .ace_scroller:before{\\n background: rgba(0, 0, 0, 0.01);\\n}\\n\\n.ace_gutter {\\n position: absolute;\\n overflow : hidden;\\n width: auto;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n cursor: default;\\n z-index: 4;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n contain: style size layout;\\n}\\n\\n.ace_gutter-active-line {\\n position: absolute;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_scroller.ace_scroll-left:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\n pointer-events: none;\\n}\\n\\n.ace_gutter-cell {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n padding-left: 19px;\\n padding-right: 6px;\\n background-repeat: no-repeat;\\n}\\n\\n.ace_gutter-cell.ace_error {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_warning {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_info {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\n background-position: 2px center;\\n}\\n.ace_dark .ace_gutter-cell.ace_info {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_scrollbar {\\n contain: strict;\\n position: absolute;\\n right: 0;\\n bottom: 0;\\n z-index: 6;\\n}\\n\\n.ace_scrollbar-inner {\\n position: absolute;\\n cursor: text;\\n left: 0;\\n top: 0;\\n}\\n\\n.ace_scrollbar-v{\\n overflow-x: hidden;\\n overflow-y: scroll;\\n top: 0;\\n}\\n\\n.ace_scrollbar-h {\\n overflow-x: scroll;\\n overflow-y: hidden;\\n left: 0;\\n}\\n\\n.ace_print-margin {\\n position: absolute;\\n height: 100%;\\n}\\n\\n.ace_text-input {\\n position: absolute;\\n z-index: 0;\\n width: 0.5em;\\n height: 1em;\\n opacity: 0;\\n background: transparent;\\n -moz-appearance: none;\\n appearance: none;\\n border: none;\\n resize: none;\\n outline: none;\\n overflow: hidden;\\n font: inherit;\\n padding: 0 1px;\\n margin: 0 -1px;\\n contain: strict;\\n -ms-user-select: text;\\n -moz-user-select: text;\\n -webkit-user-select: text;\\n user-select: text;\\n /*with `pre-line` chrome inserts instead of space*/\\n white-space: pre!important;\\n}\\n.ace_text-input.ace_composition {\\n background: transparent;\\n color: inherit;\\n z-index: 1000;\\n opacity: 1;\\n}\\n.ace_composition_placeholder { color: transparent }\\n.ace_composition_marker { \\n border-bottom: 1px solid;\\n position: absolute;\\n border-radius: 0;\\n margin-top: 1px;\\n}\\n\\n[ace_nocontext=true] {\\n transform: none!important;\\n filter: none!important;\\n clip-path: none!important;\\n mask : none!important;\\n contain: none!important;\\n perspective: none!important;\\n mix-blend-mode: initial!important;\\n z-index: auto;\\n}\\n\\n.ace_layer {\\n z-index: 1;\\n position: absolute;\\n overflow: hidden;\\n /* workaround for chrome bug https://github.com/ajaxorg/ace/issues/2312*/\\n word-wrap: normal;\\n white-space: pre;\\n height: 100%;\\n width: 100%;\\n box-sizing: border-box;\\n /* setting pointer-events: auto; on node under the mouse, which changes\\n during scroll, will break mouse wheel scrolling in Safari */\\n pointer-events: none;\\n}\\n\\n.ace_gutter-layer {\\n position: relative;\\n width: auto;\\n text-align: right;\\n pointer-events: auto;\\n height: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer {\\n font: inherit !important;\\n position: absolute;\\n height: 1000000px;\\n width: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n will-change: transform;\\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: #FFF;\\n background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\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;\\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}\\n\\n.ace_folding-enabled > .ace_gutter-cell {\\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}\";\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 = function (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(function () {\n oop.implement(this, EventEmitter);\n this.$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 this.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}.call(Decorator.prototype));\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"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 config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor.css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar HIDE_TEXTAREA = useragent.isIE;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = function (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 config.resetOptions(this);\n config._signal(\"renderer\", this);\n};\n(function () {\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n oop.implement(this, EventEmitter);\n this.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 this.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 this.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 this.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n this.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n this.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n this.updateFull = function (force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n this.$changes = 0;\n this.$updateSizeAsync = function () {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n this.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.$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 this.$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 this.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 this.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 this.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n this.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n this.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n this.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n this.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n this.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n };\n this.setHighlightIndentGuides = function (highlight) {\n this.setOption(\"highlightIndentGuides\", highlight);\n };\n this.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n this.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n this.setPrintMarginColumn = function (showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n this.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n this.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n this.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n this.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n this.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n this.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n this.$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 this.getContainerElement = function () {\n return this.container;\n };\n this.getMouseEventTarget = function () {\n return this.scroller;\n };\n this.getTextAreaContainer = function () {\n return this.container;\n };\n this.$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 ? this.lineHeight : HIDE_TEXTAREA ? 0 : 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 this.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n this.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n this.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 this.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n this.$padding = null;\n this.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 this.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 this.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 this.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n this.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.$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 this.$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 this.$frozen = false;\n this.freeze = function () {\n this.$frozen = true;\n };\n this.unfreeze = function () {\n this.$frozen = false;\n };\n this.$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 - this.layerConfig.firstRow) * 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 }\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 this.$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 this.$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 this.$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 this.$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 this.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n this.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n this.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n this.updateBreakpoints = function (rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n this.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n this.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n this.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n this.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 this.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n this.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n this.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n this.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n this.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n this.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 this.STEPS = 8;\n this.$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 this.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 this.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 this.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n this.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n this.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n this.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n this.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 this.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 this.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 this.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 this.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n this.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n this.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 this.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 this.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 this.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 }\n };\n this.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 this.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) {\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 this.removeExtraToken = function (row, column) {\n this.updateLines(row, row);\n };\n this.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 this.getTheme = function () {\n return this.$themeId;\n };\n this.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n this.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n this.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n this.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n this.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n this.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n };\n this.$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}).call(VirtualRenderer.prototype);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\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 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 = 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 = function (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(function () {\n oop.implement(this, EventEmitter);\n this.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 this.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 this.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 this.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 this.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 this.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 this.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 this.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 this.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}).call(PlaceHolder.prototype);\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){// commands to enter multiselect mode\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){var 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 = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.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(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\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\"], function(require, exports, module){\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\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: [\"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(\"<br>\");\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/lib/event\",\"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 * @class Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\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 event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function () {\n event.removeListener(window, \"resize\", env.onResize);\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 if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n window.ace[\"default\"] = window.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = window.ace;\n }\n });\n })();\n ","export default \"__VITE_ASSET__aff451cf__\"","export default \"__VITE_ASSET__bea50456__\"","export default \"__VITE_ASSET__91a578e2__\"","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\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 nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\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]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `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}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\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}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\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}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\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}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\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');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\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}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\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 --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\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}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\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}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\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}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\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 = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\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}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\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}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\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}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\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}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAceInstance = exports.debounce = exports.editorEvents = exports.editorOptions = void 0;\nvar editorOptions = [\n \"minLines\",\n \"maxLines\",\n \"readOnly\",\n \"highlightActiveLine\",\n \"tabSize\",\n \"enableBasicAutocompletion\",\n \"enableLiveAutocompletion\",\n \"enableSnippets\"\n];\nexports.editorOptions = editorOptions;\nvar editorEvents = [\n \"onChange\",\n \"onFocus\",\n \"onInput\",\n \"onBlur\",\n \"onCopy\",\n \"onPaste\",\n \"onSelectionChange\",\n \"onCursorChange\",\n \"onScroll\",\n \"handleOptions\",\n \"updateRef\"\n];\nexports.editorEvents = editorEvents;\nvar getAceInstance = function () {\n var ace;\n if (typeof window === \"undefined\") {\n // ace-builds just needs some window object to attach ace to.\n // During SSR even just an empty object will work.\n global.window = {};\n ace = require(\"ace-builds\");\n // And it can be discarded immediately afterward to avoid confusing\n // other libraries that might detect SSR the same way we did.\n delete global.window;\n }\n else if (window.ace) {\n // Fallback for ace.require when vanilla ACE is hosted over a CDN\n ace = window.ace;\n ace.acequire = window.ace.require || window.ace.acequire;\n }\n else {\n ace = require(\"ace-builds\");\n }\n return ace;\n};\nexports.getAceInstance = getAceInstance;\nvar debounce = function (fn, delay) {\n var timer = null;\n // tslint:disable-next-line\n return function () {\n var context = this;\n var args = arguments;\n clearTimeout(timer);\n timer = setTimeout(function () {\n fn.apply(context, args);\n }, delay);\n };\n};\nexports.debounce = debounce;\n//# sourceMappingURL=editorOptions.js.map","\"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 __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ace_builds_1 = require(\"ace-builds\");\nvar PropTypes = require(\"prop-types\");\nvar React = require(\"react\");\nvar isEqual = require(\"lodash.isequal\");\nvar editorOptions_1 = require(\"./editorOptions\");\nvar ace = (0, editorOptions_1.getAceInstance)();\nvar ReactAce = /** @class */ (function (_super) {\n __extends(ReactAce, _super);\n function ReactAce(props) {\n var _this = _super.call(this, props) || this;\n editorOptions_1.editorEvents.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n _this.debounce = editorOptions_1.debounce;\n return _this;\n }\n ReactAce.prototype.isInShadow = function (node) {\n var parent = node && node.parentNode;\n while (parent) {\n if (parent.toString() === \"[object ShadowRoot]\") {\n return true;\n }\n parent = parent.parentNode;\n }\n return false;\n };\n ReactAce.prototype.componentDidMount = function () {\n var _this = this;\n var _a = this.props, className = _a.className, onBeforeLoad = _a.onBeforeLoad, onValidate = _a.onValidate, mode = _a.mode, focus = _a.focus, theme = _a.theme, fontSize = _a.fontSize, value = _a.value, defaultValue = _a.defaultValue, showGutter = _a.showGutter, wrapEnabled = _a.wrapEnabled, showPrintMargin = _a.showPrintMargin, _b = _a.scrollMargin, scrollMargin = _b === void 0 ? [0, 0, 0, 0] : _b, keyboardHandler = _a.keyboardHandler, onLoad = _a.onLoad, commands = _a.commands, annotations = _a.annotations, markers = _a.markers, placeholder = _a.placeholder;\n this.editor = ace.edit(this.refEditor);\n if (onBeforeLoad) {\n onBeforeLoad(ace);\n }\n var editorProps = Object.keys(this.props.editorProps);\n for (var i = 0; i < editorProps.length; i++) {\n this.editor[editorProps[i]] = this.props.editorProps[editorProps[i]];\n }\n if (this.props.debounceChangePeriod) {\n this.onChange = this.debounce(this.onChange, this.props.debounceChangePeriod);\n }\n this.editor.renderer.setScrollMargin(scrollMargin[0], scrollMargin[1], scrollMargin[2], scrollMargin[3]);\n if (this.isInShadow(this.refEditor)) {\n this.editor.renderer.attachToShadowRoot();\n }\n this.editor\n .getSession()\n .setMode(typeof mode === \"string\" ? \"ace/mode/\".concat(mode) : mode);\n if (theme && theme !== \"\")\n this.editor.setTheme(\"ace/theme/\".concat(theme));\n this.editor.setFontSize(typeof fontSize === \"number\" ? \"\".concat(fontSize, \"px\") : fontSize);\n this.editor\n .getSession()\n .setValue(!defaultValue ? value || \"\" : defaultValue);\n if (this.props.navigateToFileEnd) {\n this.editor.navigateFileEnd();\n }\n this.editor.renderer.setShowGutter(showGutter);\n this.editor.getSession().setUseWrapMode(wrapEnabled);\n this.editor.setShowPrintMargin(showPrintMargin);\n this.editor.on(\"focus\", this.onFocus);\n this.editor.on(\"blur\", this.onBlur);\n this.editor.on(\"copy\", this.onCopy);\n this.editor.on(\"paste\", this.onPaste);\n this.editor.on(\"change\", this.onChange);\n this.editor.on(\"input\", this.onInput);\n if (placeholder) {\n this.updatePlaceholder();\n }\n this.editor\n .getSession()\n .selection.on(\"changeSelection\", this.onSelectionChange);\n this.editor.getSession().selection.on(\"changeCursor\", this.onCursorChange);\n if (onValidate) {\n // @ts-ignore types don't include\n this.editor.getSession().on(\"changeAnnotation\", function () {\n // tslint:disable-next-line:no-shadowed-variable\n var annotations = _this.editor.getSession().getAnnotations();\n _this.props.onValidate(annotations);\n });\n }\n this.editor.session.on(\"changeScrollTop\", this.onScroll);\n this.editor.getSession().setAnnotations(annotations || []);\n if (markers && markers.length > 0) {\n this.handleMarkers(markers);\n }\n // get a list of possible options to avoid 'misspelled option errors'\n var availableOptions = this.editor.$options;\n editorOptions_1.editorOptions.forEach(function (option) {\n if (availableOptions.hasOwnProperty(option)) {\n // @ts-ignore\n _this.editor.setOption(option, _this.props[option]);\n }\n else if (_this.props[option]) {\n console.warn(\"ReactAce: editor option \".concat(option, \" was activated but not found. Did you need to import a related tool or did you possibly mispell the option?\"));\n }\n });\n this.handleOptions(this.props);\n if (Array.isArray(commands)) {\n commands.forEach(function (command) {\n if (typeof command.exec === \"string\") {\n _this.editor.commands.bindKey(command.bindKey, command.exec);\n }\n else {\n _this.editor.commands.addCommand(command);\n }\n });\n }\n if (keyboardHandler) {\n this.editor.setKeyboardHandler(\"ace/keyboard/\" + keyboardHandler);\n }\n if (className) {\n this.refEditor.className += \" \" + className;\n }\n if (onLoad) {\n onLoad(this.editor);\n }\n this.editor.resize();\n if (focus) {\n this.editor.focus();\n }\n };\n ReactAce.prototype.componentDidUpdate = function (prevProps) {\n var oldProps = prevProps;\n var nextProps = this.props;\n for (var i = 0; i < editorOptions_1.editorOptions.length; i++) {\n var option = editorOptions_1.editorOptions[i];\n if (nextProps[option] !== oldProps[option]) {\n // @ts-ignore\n this.editor.setOption(option, nextProps[option]);\n }\n }\n if (nextProps.className !== oldProps.className) {\n var appliedClasses = this.refEditor.className;\n var appliedClassesArray_1 = appliedClasses.trim().split(\" \");\n var oldClassesArray = oldProps.className.trim().split(\" \");\n oldClassesArray.forEach(function (oldClass) {\n var index = appliedClassesArray_1.indexOf(oldClass);\n appliedClassesArray_1.splice(index, 1);\n });\n this.refEditor.className =\n \" \" + nextProps.className + \" \" + appliedClassesArray_1.join(\" \");\n }\n // First process editor value, as it may create a new session (see issue #300)\n var valueChanged = this.editor &&\n nextProps.value != null &&\n this.editor.getValue() !== nextProps.value;\n if (valueChanged) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n this.silent = true;\n var pos = this.editor.session.selection.toJSON();\n this.editor.setValue(nextProps.value, nextProps.cursorStart);\n this.editor.session.selection.fromJSON(pos);\n this.silent = false;\n }\n if (nextProps.placeholder !== oldProps.placeholder) {\n this.updatePlaceholder();\n }\n if (nextProps.mode !== oldProps.mode) {\n this.editor\n .getSession()\n .setMode(typeof nextProps.mode === \"string\"\n ? \"ace/mode/\".concat(nextProps.mode)\n : nextProps.mode);\n }\n if (nextProps.theme !== oldProps.theme) {\n this.editor.setTheme(\"ace/theme/\" + nextProps.theme);\n }\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n this.editor.setKeyboardHandler(\"ace/keyboard/\" + nextProps.keyboardHandler);\n }\n else {\n this.editor.setKeyboardHandler(null);\n }\n }\n if (nextProps.fontSize !== oldProps.fontSize) {\n this.editor.setFontSize(typeof nextProps.fontSize === \"number\"\n ? \"\".concat(nextProps.fontSize, \"px\")\n : nextProps.fontSize);\n }\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n this.editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n this.editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n if (nextProps.showGutter !== oldProps.showGutter) {\n this.editor.renderer.setShowGutter(nextProps.showGutter);\n }\n if (!isEqual(nextProps.setOptions, oldProps.setOptions)) {\n this.handleOptions(nextProps);\n }\n // if the value or annotations changed, set the annotations\n // changing the value may create create a new session which will require annotations to be re-set\n if (valueChanged || !isEqual(nextProps.annotations, oldProps.annotations)) {\n this.editor.getSession().setAnnotations(nextProps.annotations || []);\n }\n if (!isEqual(nextProps.markers, oldProps.markers) &&\n Array.isArray(nextProps.markers)) {\n this.handleMarkers(nextProps.markers);\n }\n // this doesn't look like it works at all....\n if (!isEqual(nextProps.scrollMargin, oldProps.scrollMargin)) {\n this.handleScrollMargins(nextProps.scrollMargin);\n }\n if (prevProps.height !== this.props.height ||\n prevProps.width !== this.props.width) {\n this.editor.resize();\n }\n if (this.props.focus && !prevProps.focus) {\n this.editor.focus();\n }\n };\n ReactAce.prototype.handleScrollMargins = function (margins) {\n if (margins === void 0) { margins = [0, 0, 0, 0]; }\n this.editor.renderer.setScrollMargin(margins[0], margins[1], margins[2], margins[3]);\n };\n ReactAce.prototype.componentWillUnmount = function () {\n if (this.editor) {\n this.editor.destroy();\n this.editor = null;\n }\n };\n ReactAce.prototype.onChange = function (event) {\n if (this.props.onChange && !this.silent) {\n var value = this.editor.getValue();\n this.props.onChange(value, event);\n }\n };\n ReactAce.prototype.onSelectionChange = function (event) {\n if (this.props.onSelectionChange) {\n var value = this.editor.getSelection();\n this.props.onSelectionChange(value, event);\n }\n };\n ReactAce.prototype.onCursorChange = function (event) {\n if (this.props.onCursorChange) {\n var value = this.editor.getSelection();\n this.props.onCursorChange(value, event);\n }\n };\n ReactAce.prototype.onInput = function (event) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n if (this.props.placeholder) {\n this.updatePlaceholder();\n }\n };\n ReactAce.prototype.onFocus = function (event) {\n if (this.props.onFocus) {\n this.props.onFocus(event, this.editor);\n }\n };\n ReactAce.prototype.onBlur = function (event) {\n if (this.props.onBlur) {\n this.props.onBlur(event, this.editor);\n }\n };\n ReactAce.prototype.onCopy = function (_a) {\n var text = _a.text;\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n };\n ReactAce.prototype.onPaste = function (_a) {\n var text = _a.text;\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n };\n ReactAce.prototype.onScroll = function () {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n };\n ReactAce.prototype.handleOptions = function (props) {\n var setOptions = Object.keys(props.setOptions);\n for (var y = 0; y < setOptions.length; y++) {\n // @ts-ignore\n this.editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n };\n ReactAce.prototype.handleMarkers = function (markers) {\n var _this = this;\n // remove foreground markers\n var currentMarkers = this.editor.getSession().getMarkers(true);\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n this.editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // remove background markers except active line marker and selected word marker\n currentMarkers = this.editor.getSession().getMarkers(false);\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i) &&\n currentMarkers[i].clazz !== \"ace_active-line\" &&\n currentMarkers[i].clazz !== \"ace_selected-word\") {\n this.editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // add new markers\n markers.forEach(function (_a) {\n var startRow = _a.startRow, startCol = _a.startCol, endRow = _a.endRow, endCol = _a.endCol, className = _a.className, type = _a.type, _b = _a.inFront, inFront = _b === void 0 ? false : _b;\n var range = new ace_builds_1.Range(startRow, startCol, endRow, endCol);\n _this.editor.getSession().addMarker(range, className, type, inFront);\n });\n };\n ReactAce.prototype.updatePlaceholder = function () {\n // Adapted from https://stackoverflow.com/questions/26695708/how-can-i-add-placeholder-text-when-the-editor-is-empty\n var editor = this.editor;\n var placeholder = this.props.placeholder;\n var showPlaceholder = !editor.session.getValue().length;\n var node = editor.renderer.placeholderNode;\n if (!showPlaceholder && node) {\n editor.renderer.scroller.removeChild(editor.renderer.placeholderNode);\n editor.renderer.placeholderNode = null;\n }\n else if (showPlaceholder && !node) {\n node = editor.renderer.placeholderNode = document.createElement(\"div\");\n node.textContent = placeholder || \"\";\n node.className = \"ace_comment ace_placeholder\";\n node.style.padding = \"0 9px\";\n node.style.position = \"absolute\";\n node.style.zIndex = \"3\";\n editor.renderer.scroller.appendChild(node);\n }\n else if (showPlaceholder && node) {\n node.textContent = placeholder;\n }\n };\n ReactAce.prototype.updateRef = function (item) {\n this.refEditor = item;\n };\n ReactAce.prototype.render = function () {\n var _a = this.props, name = _a.name, width = _a.width, height = _a.height, style = _a.style;\n var divStyle = __assign({ width: width, height: height }, style);\n return React.createElement(\"div\", { ref: this.updateRef, id: name, style: divStyle });\n };\n ReactAce.propTypes = {\n mode: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n focus: PropTypes.bool,\n theme: PropTypes.string,\n name: PropTypes.string,\n className: PropTypes.string,\n height: PropTypes.string,\n width: PropTypes.string,\n fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n showGutter: PropTypes.bool,\n onChange: PropTypes.func,\n onCopy: PropTypes.func,\n onPaste: PropTypes.func,\n onFocus: PropTypes.func,\n onInput: PropTypes.func,\n onBlur: PropTypes.func,\n onScroll: PropTypes.func,\n value: PropTypes.string,\n defaultValue: PropTypes.string,\n onLoad: PropTypes.func,\n onSelectionChange: PropTypes.func,\n onCursorChange: PropTypes.func,\n onBeforeLoad: PropTypes.func,\n onValidate: PropTypes.func,\n minLines: PropTypes.number,\n maxLines: PropTypes.number,\n readOnly: PropTypes.bool,\n highlightActiveLine: PropTypes.bool,\n tabSize: PropTypes.number,\n showPrintMargin: PropTypes.bool,\n cursorStart: PropTypes.number,\n debounceChangePeriod: PropTypes.number,\n editorProps: PropTypes.object,\n setOptions: PropTypes.object,\n style: PropTypes.object,\n scrollMargin: PropTypes.array,\n annotations: PropTypes.array,\n markers: PropTypes.array,\n keyboardHandler: PropTypes.string,\n wrapEnabled: PropTypes.bool,\n enableSnippets: PropTypes.bool,\n enableBasicAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n enableLiveAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n navigateToFileEnd: PropTypes.bool,\n commands: PropTypes.array,\n placeholder: PropTypes.string\n };\n ReactAce.defaultProps = {\n name: \"ace-editor\",\n focus: false,\n mode: \"\",\n theme: \"\",\n height: \"500px\",\n width: \"500px\",\n fontSize: 12,\n enableSnippets: false,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false,\n placeholder: null,\n navigateToFileEnd: true\n };\n return ReactAce;\n}(React.Component));\nexports.default = ReactAce;\n//# sourceMappingURL=ace.js.map","ace.define(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Editor = require(\"./editor\").Editor;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Split = function (container, theme, splits) {\n this.BELOW = 1;\n this.BESIDE = 0;\n this.$container = container;\n this.$theme = theme;\n this.$splits = 0;\n this.$editorCSS = \"\";\n this.$editors = [];\n this.$orientation = this.BESIDE;\n this.setSplits(splits || 1);\n this.$cEditor = this.$editors[0];\n this.on(\"focus\", function (editor) {\n this.$cEditor = editor;\n }.bind(this));\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.$createEditor = function () {\n var el = document.createElement(\"div\");\n el.className = this.$editorCSS;\n el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n this.$container.appendChild(el);\n var editor = new Editor(new Renderer(el, this.$theme));\n editor.on(\"focus\", function () {\n this._emit(\"focus\", editor);\n }.bind(this));\n this.$editors.push(editor);\n editor.setFontSize(this.$fontSize);\n return editor;\n };\n this.setSplits = function (splits) {\n var editor;\n if (splits < 1) {\n throw \"The number of splits have to be > 0!\";\n }\n if (splits == this.$splits) {\n return;\n }\n else if (splits > this.$splits) {\n while (this.$splits < this.$editors.length && this.$splits < splits) {\n editor = this.$editors[this.$splits];\n this.$container.appendChild(editor.container);\n editor.setFontSize(this.$fontSize);\n this.$splits++;\n }\n while (this.$splits < splits) {\n this.$createEditor();\n this.$splits++;\n }\n }\n else {\n while (this.$splits > splits) {\n editor = this.$editors[this.$splits - 1];\n this.$container.removeChild(editor.container);\n this.$splits--;\n }\n }\n this.resize();\n };\n this.getSplits = function () {\n return this.$splits;\n };\n this.getEditor = function (idx) {\n return this.$editors[idx];\n };\n this.getCurrentEditor = function () {\n return this.$cEditor;\n };\n this.focus = function () {\n this.$cEditor.focus();\n };\n this.blur = function () {\n this.$cEditor.blur();\n };\n this.setTheme = function (theme) {\n this.$editors.forEach(function (editor) {\n editor.setTheme(theme);\n });\n };\n this.setKeyboardHandler = function (keybinding) {\n this.$editors.forEach(function (editor) {\n editor.setKeyboardHandler(keybinding);\n });\n };\n this.forEach = function (callback, scope) {\n this.$editors.forEach(callback, scope);\n };\n this.$fontSize = \"\";\n this.setFontSize = function (size) {\n this.$fontSize = size;\n this.forEach(function (editor) {\n editor.setFontSize(size);\n });\n };\n this.$cloneSession = function (session) {\n var s = new EditSession(session.getDocument(), session.getMode());\n var undoManager = session.getUndoManager();\n s.setUndoManager(undoManager);\n s.setTabSize(session.getTabSize());\n s.setUseSoftTabs(session.getUseSoftTabs());\n s.setOverwrite(session.getOverwrite());\n s.setBreakpoints(session.getBreakpoints());\n s.setUseWrapMode(session.getUseWrapMode());\n s.setUseWorker(session.getUseWorker());\n s.setWrapLimitRange(session.$wrapLimitRange.min, session.$wrapLimitRange.max);\n s.$foldData = session.$cloneFoldData();\n return s;\n };\n this.setSession = function (session, idx) {\n var editor;\n if (idx == null) {\n editor = this.$cEditor;\n }\n else {\n editor = this.$editors[idx];\n }\n var isUsed = this.$editors.some(function (editor) {\n return editor.session === session;\n });\n if (isUsed) {\n session = this.$cloneSession(session);\n }\n editor.setSession(session);\n return session;\n };\n this.getOrientation = function () {\n return this.$orientation;\n };\n this.setOrientation = function (orientation) {\n if (this.$orientation == orientation) {\n return;\n }\n this.$orientation = orientation;\n this.resize();\n };\n this.resize = function () {\n var width = this.$container.clientWidth;\n var height = this.$container.clientHeight;\n var editor;\n if (this.$orientation == this.BESIDE) {\n var editorWidth = width / this.$splits;\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = editorWidth + \"px\";\n editor.container.style.top = \"0px\";\n editor.container.style.left = i * editorWidth + \"px\";\n editor.container.style.height = height + \"px\";\n editor.resize();\n }\n }\n else {\n var editorHeight = height / this.$splits;\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = width + \"px\";\n editor.container.style.top = i * editorHeight + \"px\";\n editor.container.style.left = \"0px\";\n editor.container.style.height = editorHeight + \"px\";\n editor.resize();\n }\n }\n };\n}).call(Split.prototype);\nexports.Split = Split;\n\n});\n\nace.define(\"ace/ext/split\",[\"require\",\"exports\",\"module\",\"ace/split\"], function(require, exports, module){\"use strict\";\nmodule.exports = require(\"../split\");\n\n}); (function() {\n ace.require([\"ace/ext/split\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\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}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\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}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\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}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\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}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\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}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\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}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\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}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\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}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\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}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\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}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\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}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\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}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","\"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 __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar editorOptions_1 = require(\"./editorOptions\");\nvar ace = (0, editorOptions_1.getAceInstance)();\nvar ace_builds_1 = require(\"ace-builds\");\nvar ext_split_1 = require(\"ace-builds/src-noconflict/ext-split\");\nvar PropTypes = require(\"prop-types\");\nvar React = require(\"react\");\nvar isEqual = require(\"lodash.isequal\");\nvar get = require(\"lodash.get\");\nvar SplitComponent = /** @class */ (function (_super) {\n __extends(SplitComponent, _super);\n function SplitComponent(props) {\n var _this = _super.call(this, props) || this;\n editorOptions_1.editorEvents.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n _this.debounce = editorOptions_1.debounce;\n return _this;\n }\n SplitComponent.prototype.isInShadow = function (node) {\n var parent = node && node.parentNode;\n while (parent) {\n if (parent.toString() === \"[object ShadowRoot]\") {\n return true;\n }\n parent = parent.parentNode;\n }\n return false;\n };\n SplitComponent.prototype.componentDidMount = function () {\n var _this = this;\n var _a = this.props, className = _a.className, onBeforeLoad = _a.onBeforeLoad, mode = _a.mode, focus = _a.focus, theme = _a.theme, fontSize = _a.fontSize, value = _a.value, defaultValue = _a.defaultValue, cursorStart = _a.cursorStart, showGutter = _a.showGutter, wrapEnabled = _a.wrapEnabled, showPrintMargin = _a.showPrintMargin, _b = _a.scrollMargin, scrollMargin = _b === void 0 ? [0, 0, 0, 0] : _b, keyboardHandler = _a.keyboardHandler, onLoad = _a.onLoad, commands = _a.commands, annotations = _a.annotations, markers = _a.markers, splits = _a.splits;\n this.editor = ace.edit(this.refEditor);\n if (this.isInShadow(this.refEditor)) {\n this.editor.renderer.attachToShadowRoot();\n }\n this.editor.setTheme(\"ace/theme/\".concat(theme));\n if (onBeforeLoad) {\n onBeforeLoad(ace);\n }\n var editorProps = Object.keys(this.props.editorProps);\n var split = new ext_split_1.Split(this.editor.container, \"ace/theme/\".concat(theme), splits);\n this.editor.env.split = split;\n this.splitEditor = split.getEditor(0);\n this.split = split;\n // in a split scenario we don't want a print margin for the entire application\n this.editor.setShowPrintMargin(false);\n this.editor.renderer.setShowGutter(false);\n // get a list of possible options to avoid 'misspelled option errors'\n var availableOptions = this.splitEditor.$options;\n if (this.props.debounceChangePeriod) {\n this.onChange = this.debounce(this.onChange, this.props.debounceChangePeriod);\n }\n split.forEach(function (editor, index) {\n for (var i = 0; i < editorProps.length; i++) {\n editor[editorProps[i]] = _this.props.editorProps[editorProps[i]];\n }\n var defaultValueForEditor = get(defaultValue, index);\n var valueForEditor = get(value, index, \"\");\n editor.session.setUndoManager(new ace.UndoManager());\n editor.setTheme(\"ace/theme/\".concat(theme));\n editor.renderer.setScrollMargin(scrollMargin[0], scrollMargin[1], scrollMargin[2], scrollMargin[3]);\n editor.getSession().setMode(\"ace/mode/\".concat(mode));\n editor.setFontSize(fontSize);\n editor.renderer.setShowGutter(showGutter);\n editor.getSession().setUseWrapMode(wrapEnabled);\n editor.setShowPrintMargin(showPrintMargin);\n editor.on(\"focus\", _this.onFocus);\n editor.on(\"blur\", _this.onBlur);\n editor.on(\"input\", _this.onInput);\n editor.on(\"copy\", _this.onCopy);\n editor.on(\"paste\", _this.onPaste);\n editor.on(\"change\", _this.onChange);\n editor\n .getSession()\n .selection.on(\"changeSelection\", _this.onSelectionChange);\n editor.getSession().selection.on(\"changeCursor\", _this.onCursorChange);\n editor.session.on(\"changeScrollTop\", _this.onScroll);\n editor.setValue(defaultValueForEditor === undefined\n ? valueForEditor\n : defaultValueForEditor, cursorStart);\n var newAnnotations = get(annotations, index, []);\n var newMarkers = get(markers, index, []);\n editor.getSession().setAnnotations(newAnnotations);\n if (newMarkers && newMarkers.length > 0) {\n _this.handleMarkers(newMarkers, editor);\n }\n for (var i = 0; i < editorOptions_1.editorOptions.length; i++) {\n var option = editorOptions_1.editorOptions[i];\n if (availableOptions.hasOwnProperty(option)) {\n editor.setOption(option, _this.props[option]);\n }\n else if (_this.props[option]) {\n console.warn(\"ReaceAce: editor option \".concat(option, \" was activated but not found. Did you need to import a related tool or did you possibly mispell the option?\"));\n }\n }\n _this.handleOptions(_this.props, editor);\n if (Array.isArray(commands)) {\n commands.forEach(function (command) {\n if (typeof command.exec === \"string\") {\n editor.commands.bindKey(command.bindKey, command.exec);\n }\n else {\n editor.commands.addCommand(command);\n }\n });\n }\n if (keyboardHandler) {\n editor.setKeyboardHandler(\"ace/keyboard/\" + keyboardHandler);\n }\n });\n if (className) {\n this.refEditor.className += \" \" + className;\n }\n if (focus) {\n this.splitEditor.focus();\n }\n var sp = this.editor.env.split;\n sp.setOrientation(this.props.orientation === \"below\" ? sp.BELOW : sp.BESIDE);\n sp.resize(true);\n if (onLoad) {\n onLoad(sp);\n }\n };\n SplitComponent.prototype.componentDidUpdate = function (prevProps) {\n var _this = this;\n var oldProps = prevProps;\n var nextProps = this.props;\n var split = this.editor.env.split;\n if (nextProps.splits !== oldProps.splits) {\n split.setSplits(nextProps.splits);\n }\n if (nextProps.orientation !== oldProps.orientation) {\n split.setOrientation(nextProps.orientation === \"below\" ? split.BELOW : split.BESIDE);\n }\n split.forEach(function (editor, index) {\n if (nextProps.mode !== oldProps.mode) {\n editor.getSession().setMode(\"ace/mode/\" + nextProps.mode);\n }\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n editor.setKeyboardHandler(\"ace/keyboard/\" + nextProps.keyboardHandler);\n }\n else {\n editor.setKeyboardHandler(null);\n }\n }\n if (nextProps.fontSize !== oldProps.fontSize) {\n editor.setFontSize(nextProps.fontSize);\n }\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n if (nextProps.showGutter !== oldProps.showGutter) {\n editor.renderer.setShowGutter(nextProps.showGutter);\n }\n for (var i = 0; i < editorOptions_1.editorOptions.length; i++) {\n var option = editorOptions_1.editorOptions[i];\n if (nextProps[option] !== oldProps[option]) {\n editor.setOption(option, nextProps[option]);\n }\n }\n if (!isEqual(nextProps.setOptions, oldProps.setOptions)) {\n _this.handleOptions(nextProps, editor);\n }\n var nextValue = get(nextProps.value, index, \"\");\n if (editor.getValue() !== nextValue) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n _this.silent = true;\n var pos = editor.session.selection.toJSON();\n editor.setValue(nextValue, nextProps.cursorStart);\n editor.session.selection.fromJSON(pos);\n _this.silent = false;\n }\n var newAnnotations = get(nextProps.annotations, index, []);\n var oldAnnotations = get(oldProps.annotations, index, []);\n if (!isEqual(newAnnotations, oldAnnotations)) {\n editor.getSession().setAnnotations(newAnnotations);\n }\n var newMarkers = get(nextProps.markers, index, []);\n var oldMarkers = get(oldProps.markers, index, []);\n if (!isEqual(newMarkers, oldMarkers) && Array.isArray(newMarkers)) {\n _this.handleMarkers(newMarkers, editor);\n }\n });\n if (nextProps.className !== oldProps.className) {\n var appliedClasses = this.refEditor.className;\n var appliedClassesArray_1 = appliedClasses.trim().split(\" \");\n var oldClassesArray = oldProps.className.trim().split(\" \");\n oldClassesArray.forEach(function (oldClass) {\n var index = appliedClassesArray_1.indexOf(oldClass);\n appliedClassesArray_1.splice(index, 1);\n });\n this.refEditor.className =\n \" \" + nextProps.className + \" \" + appliedClassesArray_1.join(\" \");\n }\n if (nextProps.theme !== oldProps.theme) {\n split.setTheme(\"ace/theme/\" + nextProps.theme);\n }\n if (nextProps.focus && !oldProps.focus) {\n this.splitEditor.focus();\n }\n if (nextProps.height !== this.props.height ||\n nextProps.width !== this.props.width) {\n this.editor.resize();\n }\n };\n SplitComponent.prototype.componentWillUnmount = function () {\n this.editor.destroy();\n this.editor = null;\n };\n SplitComponent.prototype.onChange = function (event) {\n if (this.props.onChange && !this.silent) {\n var value_1 = [];\n this.editor.env.split.forEach(function (editor) {\n value_1.push(editor.getValue());\n });\n this.props.onChange(value_1, event);\n }\n };\n SplitComponent.prototype.onSelectionChange = function (event) {\n if (this.props.onSelectionChange) {\n var value_2 = [];\n this.editor.env.split.forEach(function (editor) {\n value_2.push(editor.getSelection());\n });\n this.props.onSelectionChange(value_2, event);\n }\n };\n SplitComponent.prototype.onCursorChange = function (event) {\n if (this.props.onCursorChange) {\n var value_3 = [];\n this.editor.env.split.forEach(function (editor) {\n value_3.push(editor.getSelection());\n });\n this.props.onCursorChange(value_3, event);\n }\n };\n SplitComponent.prototype.onFocus = function (event) {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n SplitComponent.prototype.onInput = function (event) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n };\n SplitComponent.prototype.onBlur = function (event) {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n SplitComponent.prototype.onCopy = function (text) {\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n };\n SplitComponent.prototype.onPaste = function (text) {\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n };\n SplitComponent.prototype.onScroll = function () {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n };\n SplitComponent.prototype.handleOptions = function (props, editor) {\n var setOptions = Object.keys(props.setOptions);\n for (var y = 0; y < setOptions.length; y++) {\n editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n };\n SplitComponent.prototype.handleMarkers = function (markers, editor) {\n // remove foreground markers\n var currentMarkers = editor.getSession().getMarkers(true);\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // remove background markers\n currentMarkers = editor.getSession().getMarkers(false);\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // add new markers\n markers.forEach(function (_a) {\n var startRow = _a.startRow, startCol = _a.startCol, endRow = _a.endRow, endCol = _a.endCol, className = _a.className, type = _a.type, _b = _a.inFront, inFront = _b === void 0 ? false : _b;\n var range = new ace_builds_1.Range(startRow, startCol, endRow, endCol);\n editor\n .getSession()\n .addMarker(range, className, type, inFront);\n });\n };\n SplitComponent.prototype.updateRef = function (item) {\n this.refEditor = item;\n };\n SplitComponent.prototype.render = function () {\n var _a = this.props, name = _a.name, width = _a.width, height = _a.height, style = _a.style;\n var divStyle = __assign({ width: width, height: height }, style);\n return React.createElement(\"div\", { ref: this.updateRef, id: name, style: divStyle });\n };\n SplitComponent.propTypes = {\n className: PropTypes.string,\n debounceChangePeriod: PropTypes.number,\n defaultValue: PropTypes.arrayOf(PropTypes.string),\n focus: PropTypes.bool,\n fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n height: PropTypes.string,\n mode: PropTypes.string,\n name: PropTypes.string,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onCopy: PropTypes.func,\n onFocus: PropTypes.func,\n onInput: PropTypes.func,\n onLoad: PropTypes.func,\n onPaste: PropTypes.func,\n onScroll: PropTypes.func,\n orientation: PropTypes.string,\n showGutter: PropTypes.bool,\n splits: PropTypes.number,\n theme: PropTypes.string,\n value: PropTypes.arrayOf(PropTypes.string),\n width: PropTypes.string,\n onSelectionChange: PropTypes.func,\n onCursorChange: PropTypes.func,\n onBeforeLoad: PropTypes.func,\n minLines: PropTypes.number,\n maxLines: PropTypes.number,\n readOnly: PropTypes.bool,\n highlightActiveLine: PropTypes.bool,\n tabSize: PropTypes.number,\n showPrintMargin: PropTypes.bool,\n cursorStart: PropTypes.number,\n editorProps: PropTypes.object,\n setOptions: PropTypes.object,\n style: PropTypes.object,\n scrollMargin: PropTypes.array,\n annotations: PropTypes.array,\n markers: PropTypes.array,\n keyboardHandler: PropTypes.string,\n wrapEnabled: PropTypes.bool,\n enableBasicAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n enableLiveAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n commands: PropTypes.array\n };\n SplitComponent.defaultProps = {\n name: \"ace-editor\",\n focus: false,\n orientation: \"beside\",\n splits: 2,\n mode: \"\",\n theme: \"\",\n height: \"500px\",\n width: \"500px\",\n value: [],\n fontSize: 12,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false\n };\n return SplitComponent;\n}(React.Component));\nexports.default = SplitComponent;\n//# sourceMappingURL=split.js.map","/**\n * Diff Match and Patch\n * Copyright 2018 The diff-match-patch Authors.\n * https://github.com/google/diff-match-patch\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Computes the difference between two texts to create a patch.\n * Applies the patch onto another text, allowing for errors.\n * @author fraser@google.com (Neil Fraser)\n */\n\n/**\n * Class containing the diff, match and patch methods.\n * @constructor\n */\nvar diff_match_patch = function() {\n\n // Defaults.\n // Redefine these in your program to override the defaults.\n\n // Number of seconds to map a diff before giving up (0 for infinity).\n this.Diff_Timeout = 1.0;\n // Cost of an empty edit operation in terms of edit characters.\n this.Diff_EditCost = 4;\n // At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n this.Match_Threshold = 0.5;\n // How far to search for a match (0 = exact location, 1000+ = broad match).\n // A match this many characters away from the expected location will add\n // 1.0 to the score (0.0 is a perfect match).\n this.Match_Distance = 1000;\n // When deleting a large block of text (over ~64 characters), how close do\n // the contents have to be to match the expected contents. (0.0 = perfection,\n // 1.0 = very loose). Note that Match_Threshold controls how closely the\n // end points of a delete need to match.\n this.Patch_DeleteThreshold = 0.5;\n // Chunk size for context length.\n this.Patch_Margin = 4;\n\n // The number of bits in an int.\n this.Match_MaxBits = 32;\n};\n\n\n// DIFF FUNCTIONS\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Class representing one diff tuple.\n * ~Attempts to look like a two-element array (which is what this used to be).~\n * Constructor returns an actual two-element array, to allow destructing @JackuB\n * See https://github.com/JackuB/diff-match-patch/issues/14 for details\n * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.\n * @param {string} text Text to be deleted, inserted, or retained.\n * @constructor\n */\ndiff_match_patch.Diff = function(op, text) {\n return [op, text];\n};\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean=} opt_checklines Optional speedup flag. If present and false,\n * then don't run a line-level diff first to identify the changed areas.\n * Defaults to true, which does a faster, slightly less optimal diff.\n * @param {number=} opt_deadline Optional time when the diff should be complete\n * by. Used internally for recursive calls. Users should set DiffTimeout\n * instead.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_main = function(text1, text2, opt_checklines,\n opt_deadline) {\n // Set a deadline by which time the diff must be complete.\n if (typeof opt_deadline == 'undefined') {\n if (this.Diff_Timeout <= 0) {\n opt_deadline = Number.MAX_VALUE;\n } else {\n opt_deadline = (new Date).getTime() + this.Diff_Timeout * 1000;\n }\n }\n var deadline = opt_deadline;\n\n // Check for null inputs.\n if (text1 == null || text2 == null) {\n throw new Error('Null input. (diff_main)');\n }\n\n // Check for equality (speedup).\n if (text1 == text2) {\n if (text1) {\n return [new diff_match_patch.Diff(DIFF_EQUAL, text1)];\n }\n return [];\n }\n\n if (typeof opt_checklines == 'undefined') {\n opt_checklines = true;\n }\n var checklines = opt_checklines;\n\n // Trim off common prefix (speedup).\n var commonlength = this.diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = this.diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = this.diff_compute_(text1, text2, checklines, deadline);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, commonprefix));\n }\n if (commonsuffix) {\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, commonsuffix));\n }\n this.diff_cleanupMerge(diffs);\n return diffs;\n};\n\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} checklines Speedup flag. If false, then don't run a\n * line-level diff first to identify the changed areas.\n * If true, then run a faster, slightly less optimal diff.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_compute_ = function(text1, text2, checklines,\n deadline) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [new diff_match_patch.Diff(DIFF_INSERT, text2)];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [new diff_match_patch.Diff(DIFF_DELETE, text1)];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i != -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [new diff_match_patch.Diff(DIFF_INSERT, longtext.substring(0, i)),\n new diff_match_patch.Diff(DIFF_EQUAL, shorttext),\n new diff_match_patch.Diff(DIFF_INSERT,\n longtext.substring(i + shorttext.length))];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length == 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n new diff_match_patch.Diff(DIFF_INSERT, text2)];\n }\n\n // Check to see if the problem can be split in two.\n var hm = this.diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = this.diff_main(text1_a, text2_a, checklines, deadline);\n var diffs_b = this.diff_main(text1_b, text2_b, checklines, deadline);\n // Merge the results.\n return diffs_a.concat([new diff_match_patch.Diff(DIFF_EQUAL, mid_common)],\n diffs_b);\n }\n\n if (checklines && text1.length > 100 && text2.length > 100) {\n return this.diff_lineMode_(text1, text2, deadline);\n }\n\n return this.diff_bisect_(text1, text2, deadline);\n};\n\n\n/**\n * Do a quick line-level diff on both strings, then rediff the parts for\n * greater accuracy.\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_lineMode_ = function(text1, text2, deadline) {\n // Scan the text on a line-by-line basis first.\n var a = this.diff_linesToChars_(text1, text2);\n text1 = a.chars1;\n text2 = a.chars2;\n var linearray = a.lineArray;\n\n var diffs = this.diff_main(text1, text2, false, deadline);\n\n // Convert the diff back to original text.\n this.diff_charsToLines_(diffs, linearray);\n // Eliminate freak matches (e.g. blank lines)\n this.diff_cleanupSemantic(diffs);\n\n // Rediff any replacement blocks, this time character-by-character.\n // Add a dummy entry at the end.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete >= 1 && count_insert >= 1) {\n // Delete the offending records and add the merged ones.\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert);\n pointer = pointer - count_delete - count_insert;\n var subDiff =\n this.diff_main(text_delete, text_insert, false, deadline);\n for (var j = subDiff.length - 1; j >= 0; j--) {\n diffs.splice(pointer, 0, subDiff[j]);\n }\n pointer = pointer + subDiff.length;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n pointer++;\n }\n diffs.pop(); // Remove the dummy entry at the end.\n\n return diffs;\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisect_ = function(text1, text2, deadline) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = (delta % 2 != 0);\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Bail out if deadline is reached.\n if ((new Date()).getTime() > deadline) {\n break;\n }\n\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (x1 < text1_length && y1 < text2_length &&\n text1.charAt(x1) == text2.charAt(y1)) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (x2 < text1_length && y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) ==\n text2.charAt(text2_length - y2 - 1)) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n new diff_match_patch.Diff(DIFF_INSERT, text2)];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisectSplit_ = function(text1, text2, x, y,\n deadline) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = this.diff_main(text1a, text2a, false, deadline);\n var diffsb = this.diff_main(text1b, text2b, false, deadline);\n\n return diffs.concat(diffsb);\n};\n\n\n/**\n * Split two texts into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}\n * An object containing the encoded text1, the encoded text2 and\n * the array of unique strings.\n * The zeroth element of the array of unique strings is intentionally blank.\n * @private\n */\ndiff_match_patch.prototype.diff_linesToChars_ = function(text1, text2) {\n var lineArray = []; // e.g. lineArray[4] == 'Hello\\n'\n var lineHash = {}; // e.g. lineHash['Hello\\n'] == 4\n\n // '\\x00' is a valid character, but various debuggers don't like it.\n // So we'll insert a junk entry to avoid generating a null character.\n lineArray[0] = '';\n\n /**\n * Split a text into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * Modifies linearray and linehash through being a closure.\n * @param {string} text String to encode.\n * @return {string} Encoded string.\n * @private\n */\n function diff_linesToCharsMunge_(text) {\n var chars = '';\n // Walk the text, pulling out a substring for each line.\n // text.split('\\n') would would temporarily double our memory footprint.\n // Modifying text would create many large strings to garbage collect.\n var lineStart = 0;\n var lineEnd = -1;\n // Keeping our own length variable is faster than looking it up.\n var lineArrayLength = lineArray.length;\n while (lineEnd < text.length - 1) {\n lineEnd = text.indexOf('\\n', lineStart);\n if (lineEnd == -1) {\n lineEnd = text.length - 1;\n }\n var line = text.substring(lineStart, lineEnd + 1);\n\n if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :\n (lineHash[line] !== undefined)) {\n chars += String.fromCharCode(lineHash[line]);\n } else {\n if (lineArrayLength == maxLines) {\n // Bail out at 65535 because\n // String.fromCharCode(65536) == String.fromCharCode(0)\n line = text.substring(lineStart);\n lineEnd = text.length;\n }\n chars += String.fromCharCode(lineArrayLength);\n lineHash[line] = lineArrayLength;\n lineArray[lineArrayLength++] = line;\n }\n lineStart = lineEnd + 1;\n }\n return chars;\n }\n // Allocate 2/3rds of the space for text1, the rest for text2.\n var maxLines = 40000;\n var chars1 = diff_linesToCharsMunge_(text1);\n maxLines = 65535;\n var chars2 = diff_linesToCharsMunge_(text2);\n return {chars1: chars1, chars2: chars2, lineArray: lineArray};\n};\n\n\n/**\n * Rehydrate the text in a diff from a string of line hashes to real lines of\n * text.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {!Array.<string>} lineArray Array of unique strings.\n * @private\n */\ndiff_match_patch.prototype.diff_charsToLines_ = function(diffs, lineArray) {\n for (var i = 0; i < diffs.length; i++) {\n var chars = diffs[i][1];\n var text = [];\n for (var j = 0; j < chars.length; j++) {\n text[j] = lineArray[chars.charCodeAt(j)];\n }\n diffs[i][1] = text.join('');\n }\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\ndiff_match_patch.prototype.diff_commonPrefix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\ndiff_match_patch.prototype.diff_commonSuffix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 ||\n text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n * string and the start of the second string.\n * @private\n */\ndiff_match_patch.prototype.diff_commonOverlap_ = function(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n // Eliminate the null case.\n if (text1_length == 0 || text2_length == 0) {\n return 0;\n }\n // Truncate the longer string.\n if (text1_length > text2_length) {\n text1 = text1.substring(text1_length - text2_length);\n } else if (text1_length < text2_length) {\n text2 = text2.substring(0, text1_length);\n }\n var text_length = Math.min(text1_length, text2_length);\n // Quick check for the worst case.\n if (text1 == text2) {\n return text_length;\n }\n\n // Start by looking for a single character match\n // and increase length until no match is found.\n // Performance analysis: https://neil.fraser.name/news/2010/11/04/\n var best = 0;\n var length = 1;\n while (true) {\n var pattern = text1.substring(text_length - length);\n var found = text2.indexOf(pattern);\n if (found == -1) {\n return best;\n }\n length += found;\n if (found == 0 || text1.substring(text_length - length) ==\n text2.substring(0, length)) {\n best = length;\n length++;\n }\n }\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n * @private\n */\ndiff_match_patch.prototype.diff_halfMatch_ = function(text1, text2) {\n if (this.Diff_Timeout <= 0) {\n // Don't risk returning a non-optimal diff if we have unlimited time.\n return null;\n }\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = '';\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n var prefixLength = dmp.diff_commonPrefix(longtext.substring(i),\n shorttext.substring(j));\n var suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i),\n shorttext.substring(0, j));\n if (best_common.length < suffixLength + prefixLength) {\n best_common = shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [best_longtext_a, best_longtext_b,\n best_shorttext_a, best_shorttext_b, best_common];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 4));\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 2));\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemantic = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastEquality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_insertions1 = 0;\n var length_deletions1 = 0;\n // Number of characters that changed after the equality.\n var length_insertions2 = 0;\n var length_deletions2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found.\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = diffs[pointer][1];\n } else { // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_INSERT) {\n length_insertions2 += diffs[pointer][1].length;\n } else {\n length_deletions2 += diffs[pointer][1].length;\n }\n // Eliminate an equality that is smaller or equal to the edits on both\n // sides of it.\n if (lastEquality && (lastEquality.length <=\n Math.max(length_insertions1, length_deletions1)) &&\n (lastEquality.length <= Math.max(length_insertions2,\n length_deletions2))) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0,\n new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0; // Reset the counters.\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = null;\n changes = true;\n }\n }\n pointer++;\n }\n\n // Normalize the diff.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n this.diff_cleanupSemanticLossless(diffs);\n\n // Find any overlaps between deletions and insertions.\n // e.g: <del>abcxxx</del><ins>xxxdef</ins>\n // -> <del>abc</del>xxx<ins>def</ins>\n // e.g: <del>xxxabc</del><ins>defxxx</ins>\n // -> <ins>def</ins>xxx<del>abc</del>\n // Only extract an overlap if it is as big as the edit ahead or behind it.\n pointer = 1;\n while (pointer < diffs.length) {\n if (diffs[pointer - 1][0] == DIFF_DELETE &&\n diffs[pointer][0] == DIFF_INSERT) {\n var deletion = diffs[pointer - 1][1];\n var insertion = diffs[pointer][1];\n var overlap_length1 = this.diff_commonOverlap_(deletion, insertion);\n var overlap_length2 = this.diff_commonOverlap_(insertion, deletion);\n if (overlap_length1 >= overlap_length2) {\n if (overlap_length1 >= deletion.length / 2 ||\n overlap_length1 >= insertion.length / 2) {\n // Overlap found. Insert an equality and trim the surrounding edits.\n diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n insertion.substring(0, overlap_length1)));\n diffs[pointer - 1][1] =\n deletion.substring(0, deletion.length - overlap_length1);\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (overlap_length2 >= deletion.length / 2 ||\n overlap_length2 >= insertion.length / 2) {\n // Reverse overlap found.\n // Insert an equality and swap and trim the surrounding edits.\n diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n deletion.substring(0, overlap_length2)));\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] =\n insertion.substring(0, insertion.length - overlap_length2);\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] =\n deletion.substring(overlap_length2);\n pointer++;\n }\n }\n pointer++;\n }\n pointer++;\n }\n};\n\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemanticLossless = function(diffs) {\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 6 (best) to 0 (worst).\n * Closure, but does not reference any external variables.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n * @private\n */\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 6;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var char1 = one.charAt(one.length - 1);\n var char2 = two.charAt(0);\n var nonAlphaNumeric1 = char1.match(diff_match_patch.nonAlphaNumericRegex_);\n var nonAlphaNumeric2 = char2.match(diff_match_patch.nonAlphaNumericRegex_);\n var whitespace1 = nonAlphaNumeric1 &&\n char1.match(diff_match_patch.whitespaceRegex_);\n var whitespace2 = nonAlphaNumeric2 &&\n char2.match(diff_match_patch.whitespaceRegex_);\n var lineBreak1 = whitespace1 &&\n char1.match(diff_match_patch.linebreakRegex_);\n var lineBreak2 = whitespace2 &&\n char2.match(diff_match_patch.linebreakRegex_);\n var blankLine1 = lineBreak1 &&\n one.match(diff_match_patch.blanklineEndRegex_);\n var blankLine2 = lineBreak2 &&\n two.match(diff_match_patch.blanklineStartRegex_);\n\n if (blankLine1 || blankLine2) {\n // Five points for blank lines.\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n // Four points for line breaks.\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n // Three points for end of sentences.\n return 3;\n } else if (whitespace1 || whitespace2) {\n // Two points for whitespace.\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n // One point for non-alphanumeric.\n return 1;\n }\n return 0;\n }\n\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = this.diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore = diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score = diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n};\n\n// Define some regex patterns for matching boundaries.\ndiff_match_patch.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\ndiff_match_patch.whitespaceRegex_ = /\\s/;\ndiff_match_patch.linebreakRegex_ = /[\\r\\n]/;\ndiff_match_patch.blanklineEndRegex_ = /\\n\\r?\\n$/;\ndiff_match_patch.blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Reduce the number of edits by eliminating operationally trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupEfficiency = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastEquality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Is there an insertion operation before the last equality.\n var pre_ins = false;\n // Is there a deletion operation before the last equality.\n var pre_del = false;\n // Is there an insertion operation after the last equality.\n var post_ins = false;\n // Is there a deletion operation after the last equality.\n var post_del = false;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found.\n if (diffs[pointer][1].length < this.Diff_EditCost &&\n (post_ins || post_del)) {\n // Candidate found.\n equalities[equalitiesLength++] = pointer;\n pre_ins = post_ins;\n pre_del = post_del;\n lastEquality = diffs[pointer][1];\n } else {\n // Not a candidate, and can never become one.\n equalitiesLength = 0;\n lastEquality = null;\n }\n post_ins = post_del = false;\n } else { // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_DELETE) {\n post_del = true;\n } else {\n post_ins = true;\n }\n /*\n * Five types to be split:\n * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>\n * <ins>A</ins>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<ins>C</ins>\n * <ins>A</del>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<del>C</del>\n */\n if (lastEquality && ((pre_ins && pre_del && post_ins && post_del) ||\n ((lastEquality.length < this.Diff_EditCost / 2) &&\n (pre_ins + pre_del + post_ins + post_del) == 3))) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0,\n new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n equalitiesLength--; // Throw away the equality we just deleted;\n lastEquality = null;\n if (pre_ins && pre_del) {\n // No changes made which could affect previous entry, keep going.\n post_ins = post_del = true;\n equalitiesLength = 0;\n } else {\n equalitiesLength--; // Throw away the previous equality.\n pointer = equalitiesLength > 0 ?\n equalities[equalitiesLength - 1] : -1;\n post_ins = post_del = false;\n }\n changes = true;\n }\n }\n pointer++;\n }\n\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupMerge = function(diffs) {\n // Add a dummy entry at the end.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete + count_insert > 1) {\n if (count_delete !== 0 && count_insert !== 0) {\n // Factor out any common prefixies.\n commonlength = this.diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if ((pointer - count_delete - count_insert) > 0 &&\n diffs[pointer - count_delete - count_insert - 1][0] ==\n DIFF_EQUAL) {\n diffs[pointer - count_delete - count_insert - 1][1] +=\n text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n text_insert.substring(0, commonlength)));\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixies.\n commonlength = this.diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] = text_insert.substring(text_insert.length -\n commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length -\n commonlength);\n text_delete = text_delete.substring(0, text_delete.length -\n commonlength);\n }\n }\n // Delete the offending records and add the merged ones.\n pointer -= count_delete + count_insert;\n diffs.splice(pointer, count_delete + count_insert);\n if (text_delete.length) {\n diffs.splice(pointer, 0,\n new diff_match_patch.Diff(DIFF_DELETE, text_delete));\n pointer++;\n }\n if (text_insert.length) {\n diffs.splice(pointer, 0,\n new diff_match_patch.Diff(DIFF_INSERT, text_insert));\n pointer++;\n }\n pointer++;\n } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n if (diffs[pointer][1].substring(diffs[pointer][1].length -\n diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] = diffs[pointer - 1][1] +\n diffs[pointer][1].substring(0, diffs[pointer][1].length -\n diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * loc is a location in text1, compute and return the equivalent location in\n * text2.\n * e.g. 'The cat' vs 'The big cat', 1->1, 5->8\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {number} loc Location within text1.\n * @return {number} Location within text2.\n */\ndiff_match_patch.prototype.diff_xIndex = function(diffs, loc) {\n var chars1 = 0;\n var chars2 = 0;\n var last_chars1 = 0;\n var last_chars2 = 0;\n var x;\n for (x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) { // Equality or deletion.\n chars1 += diffs[x][1].length;\n }\n if (diffs[x][0] !== DIFF_DELETE) { // Equality or insertion.\n chars2 += diffs[x][1].length;\n }\n if (chars1 > loc) { // Overshot the location.\n break;\n }\n last_chars1 = chars1;\n last_chars2 = chars2;\n }\n // Was the location was deleted?\n if (diffs.length != x && diffs[x][0] === DIFF_DELETE) {\n return last_chars2;\n }\n // Add the remaining character length.\n return last_chars2 + (loc - last_chars1);\n};\n\n\n/**\n * Convert a diff array into a pretty HTML report.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} HTML representation.\n */\ndiff_match_patch.prototype.diff_prettyHtml = function(diffs) {\n var html = [];\n var pattern_amp = /&/g;\n var pattern_lt = /</g;\n var pattern_gt = />/g;\n var pattern_para = /\\n/g;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0]; // Operation (insert, delete, equal)\n var data = diffs[x][1]; // Text of change.\n var text = data.replace(pattern_amp, '&').replace(pattern_lt, '<')\n .replace(pattern_gt, '>').replace(pattern_para, '¶<br>');\n switch (op) {\n case DIFF_INSERT:\n html[x] = '<ins style=\"background:#e6ffe6;\">' + text + '</ins>';\n break;\n case DIFF_DELETE:\n html[x] = '<del style=\"background:#ffe6e6;\">' + text + '</del>';\n break;\n case DIFF_EQUAL:\n html[x] = '<span>' + text + '</span>';\n break;\n }\n }\n return html.join('');\n};\n\n\n/**\n * Compute and return the source text (all equalities and deletions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Source text.\n */\ndiff_match_patch.prototype.diff_text1 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute and return the destination text (all equalities and insertions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Destination text.\n */\ndiff_match_patch.prototype.diff_text2 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_DELETE) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute the Levenshtein distance; the number of inserted, deleted or\n * substituted characters.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {number} Number of changes.\n */\ndiff_match_patch.prototype.diff_levenshtein = function(diffs) {\n var levenshtein = 0;\n var insertions = 0;\n var deletions = 0;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0];\n var data = diffs[x][1];\n switch (op) {\n case DIFF_INSERT:\n insertions += data.length;\n break;\n case DIFF_DELETE:\n deletions += data.length;\n break;\n case DIFF_EQUAL:\n // A deletion and an insertion is one substitution.\n levenshtein += Math.max(insertions, deletions);\n insertions = 0;\n deletions = 0;\n break;\n }\n }\n levenshtein += Math.max(insertions, deletions);\n return levenshtein;\n};\n\n\n/**\n * Crush the diff into an encoded string which describes the operations\n * required to transform text1 into text2.\n * E.g. =3\\t-2\\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'.\n * Operations are tab-separated. Inserted text is escaped using %xx notation.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Delta text.\n */\ndiff_match_patch.prototype.diff_toDelta = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n switch (diffs[x][0]) {\n case DIFF_INSERT:\n text[x] = '+' + encodeURI(diffs[x][1]);\n break;\n case DIFF_DELETE:\n text[x] = '-' + diffs[x][1].length;\n break;\n case DIFF_EQUAL:\n text[x] = '=' + diffs[x][1].length;\n break;\n }\n }\n return text.join('\\t').replace(/%20/g, ' ');\n};\n\n\n/**\n * Given the original text1, and an encoded string which describes the\n * operations required to transform text1 into text2, compute the full diff.\n * @param {string} text1 Source string for the diff.\n * @param {string} delta Delta text.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.diff_fromDelta = function(text1, delta) {\n var diffs = [];\n var diffsLength = 0; // Keeping our own length var is faster in JS.\n var pointer = 0; // Cursor in text1\n var tokens = delta.split(/\\t/g);\n for (var x = 0; x < tokens.length; x++) {\n // Each token begins with a one character parameter which specifies the\n // operation of this token (delete, insert, equality).\n var param = tokens[x].substring(1);\n switch (tokens[x].charAt(0)) {\n case '+':\n try {\n diffs[diffsLength++] =\n new diff_match_patch.Diff(DIFF_INSERT, decodeURI(param));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in diff_fromDelta: ' + param);\n }\n break;\n case '-':\n // Fall through.\n case '=':\n var n = parseInt(param, 10);\n if (isNaN(n) || n < 0) {\n throw new Error('Invalid number in diff_fromDelta: ' + param);\n }\n var text = text1.substring(pointer, pointer += n);\n if (tokens[x].charAt(0) == '=') {\n diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_EQUAL, text);\n } else {\n diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_DELETE, text);\n }\n break;\n default:\n // Blank tokens are ok (from a trailing \\t).\n // Anything else is an error.\n if (tokens[x]) {\n throw new Error('Invalid diff operation in diff_fromDelta: ' +\n tokens[x]);\n }\n }\n }\n if (pointer != text1.length) {\n throw new Error('Delta length (' + pointer +\n ') does not equal source text length (' + text1.length + ').');\n }\n return diffs;\n};\n\n\n// MATCH FUNCTIONS\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc'.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n */\ndiff_match_patch.prototype.match_main = function(text, pattern, loc) {\n // Check for null inputs.\n if (text == null || pattern == null || loc == null) {\n throw new Error('Null input. (match_main)');\n }\n\n loc = Math.max(0, Math.min(loc, text.length));\n if (text == pattern) {\n // Shortcut (potentially not guaranteed by the algorithm)\n return 0;\n } else if (!text.length) {\n // Nothing to match.\n return -1;\n } else if (text.substring(loc, loc + pattern.length) == pattern) {\n // Perfect match at the perfect spot! (Includes case of null pattern)\n return loc;\n } else {\n // Do a fuzzy compare.\n return this.match_bitap_(text, pattern, loc);\n }\n};\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc' using the\n * Bitap algorithm.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n * @private\n */\ndiff_match_patch.prototype.match_bitap_ = function(text, pattern, loc) {\n if (pattern.length > this.Match_MaxBits) {\n throw new Error('Pattern too long for this browser.');\n }\n\n // Initialise the alphabet.\n var s = this.match_alphabet_(pattern);\n\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Compute and return the score for a match with e errors and x location.\n * Accesses loc and pattern through being a closure.\n * @param {number} e Number of errors in match.\n * @param {number} x Location of match.\n * @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n * @private\n */\n function match_bitapScore_(e, x) {\n var accuracy = e / pattern.length;\n var proximity = Math.abs(loc - x);\n if (!dmp.Match_Distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy;\n }\n return accuracy + (proximity / dmp.Match_Distance);\n }\n\n // Highest score beyond which we give up.\n var score_threshold = this.Match_Threshold;\n // Is there a nearby exact match? (speedup)\n var best_loc = text.indexOf(pattern, loc);\n if (best_loc != -1) {\n score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n // What about in the other direction? (speedup)\n best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n if (best_loc != -1) {\n score_threshold =\n Math.min(match_bitapScore_(0, best_loc), score_threshold);\n }\n }\n\n // Initialise the bit arrays.\n var matchmask = 1 << (pattern.length - 1);\n best_loc = -1;\n\n var bin_min, bin_mid;\n var bin_max = pattern.length + text.length;\n var last_rd;\n for (var d = 0; d < pattern.length; d++) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from 'loc' we can stray at this\n // error level.\n bin_min = 0;\n bin_mid = bin_max;\n while (bin_min < bin_mid) {\n if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) {\n bin_min = bin_mid;\n } else {\n bin_max = bin_mid;\n }\n bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n }\n // Use the result from this iteration as the maximum for the next.\n bin_max = bin_mid;\n var start = Math.max(1, loc - bin_mid + 1);\n var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n\n var rd = Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n for (var j = finish; j >= start; j--) {\n // The alphabet (s) is a sparse hash, so the following line generates\n // warnings.\n var charMatch = s[text.charAt(j - 1)];\n if (d === 0) { // First pass: exact match.\n rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n } else { // Subsequent passes: fuzzy match.\n rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) |\n (((last_rd[j + 1] | last_rd[j]) << 1) | 1) |\n last_rd[j + 1];\n }\n if (rd[j] & matchmask) {\n var score = match_bitapScore_(d, j - 1);\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (score <= score_threshold) {\n // Told you so.\n score_threshold = score;\n best_loc = j - 1;\n if (best_loc > loc) {\n // When passing loc, don't exceed our current distance from loc.\n start = Math.max(1, 2 * loc - best_loc);\n } else {\n // Already passed loc, downhill from here on in.\n break;\n }\n }\n }\n }\n // No hope for a (better) match at greater error levels.\n if (match_bitapScore_(d + 1, loc) > score_threshold) {\n break;\n }\n last_rd = rd;\n }\n return best_loc;\n};\n\n\n/**\n * Initialise the alphabet for the Bitap algorithm.\n * @param {string} pattern The text to encode.\n * @return {!Object} Hash of character locations.\n * @private\n */\ndiff_match_patch.prototype.match_alphabet_ = function(pattern) {\n var s = {};\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] = 0;\n }\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1);\n }\n return s;\n};\n\n\n// PATCH FUNCTIONS\n\n\n/**\n * Increase the context until it is unique,\n * but don't let the pattern expand beyond Match_MaxBits.\n * @param {!diff_match_patch.patch_obj} patch The patch to grow.\n * @param {string} text Source text.\n * @private\n */\ndiff_match_patch.prototype.patch_addContext_ = function(patch, text) {\n if (text.length == 0) {\n return;\n }\n if (patch.start2 === null) {\n throw Error('patch not initialized');\n }\n var pattern = text.substring(patch.start2, patch.start2 + patch.length1);\n var padding = 0;\n\n // Look for the first and last matches of pattern in text. If two different\n // matches are found, increase the pattern length.\n while (text.indexOf(pattern) != text.lastIndexOf(pattern) &&\n pattern.length < this.Match_MaxBits - this.Patch_Margin -\n this.Patch_Margin) {\n padding += this.Patch_Margin;\n pattern = text.substring(patch.start2 - padding,\n patch.start2 + patch.length1 + padding);\n }\n // Add one chunk for good luck.\n padding += this.Patch_Margin;\n\n // Add the prefix.\n var prefix = text.substring(patch.start2 - padding, patch.start2);\n if (prefix) {\n patch.diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, prefix));\n }\n // Add the suffix.\n var suffix = text.substring(patch.start2 + patch.length1,\n patch.start2 + patch.length1 + padding);\n if (suffix) {\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, suffix));\n }\n\n // Roll back the start points.\n patch.start1 -= prefix.length;\n patch.start2 -= prefix.length;\n // Extend the lengths.\n patch.length1 += prefix.length + suffix.length;\n patch.length2 += prefix.length + suffix.length;\n};\n\n\n/**\n * Compute a list of patches to turn text1 into text2.\n * Use diffs if provided, otherwise compute it ourselves.\n * There are four ways to call this function, depending on what data is\n * available to the caller:\n * Method 1:\n * a = text1, b = text2\n * Method 2:\n * a = diffs\n * Method 3 (optimal):\n * a = text1, b = diffs\n * Method 4 (deprecated, use method 3):\n * a = text1, b = text2, c = diffs\n *\n * @param {string|!Array.<!diff_match_patch.Diff>} a text1 (methods 1,3,4) or\n * Array of diff tuples for text1 to text2 (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>=} opt_b text2 (methods 1,4) or\n * Array of diff tuples for text1 to text2 (method 3) or undefined (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>=} opt_c Array of diff tuples\n * for text1 to text2 (method 4) or undefined (methods 1,2,3).\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_make = function(a, opt_b, opt_c) {\n var text1, diffs;\n if (typeof a == 'string' && typeof opt_b == 'string' &&\n typeof opt_c == 'undefined') {\n // Method 1: text1, text2\n // Compute diffs from text1 and text2.\n text1 = /** @type {string} */(a);\n diffs = this.diff_main(text1, /** @type {string} */(opt_b), true);\n if (diffs.length > 2) {\n this.diff_cleanupSemantic(diffs);\n this.diff_cleanupEfficiency(diffs);\n }\n } else if (a && typeof a == 'object' && typeof opt_b == 'undefined' &&\n typeof opt_c == 'undefined') {\n // Method 2: diffs\n // Compute text1 from diffs.\n diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(a);\n text1 = this.diff_text1(diffs);\n } else if (typeof a == 'string' && opt_b && typeof opt_b == 'object' &&\n typeof opt_c == 'undefined') {\n // Method 3: text1, diffs\n text1 = /** @type {string} */(a);\n diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(opt_b);\n } else if (typeof a == 'string' && typeof opt_b == 'string' &&\n opt_c && typeof opt_c == 'object') {\n // Method 4: text1, text2, diffs\n // text2 is not used.\n text1 = /** @type {string} */(a);\n diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(opt_c);\n } else {\n throw new Error('Unknown call format to patch_make.');\n }\n\n if (diffs.length === 0) {\n return []; // Get rid of the null case.\n }\n var patches = [];\n var patch = new diff_match_patch.patch_obj();\n var patchDiffLength = 0; // Keeping our own length var is faster in JS.\n var char_count1 = 0; // Number of characters into the text1 string.\n var char_count2 = 0; // Number of characters into the text2 string.\n // Start with text1 (prepatch_text) and apply the diffs until we arrive at\n // text2 (postpatch_text). We recreate the patches one by one to determine\n // context info.\n var prepatch_text = text1;\n var postpatch_text = text1;\n for (var x = 0; x < diffs.length; x++) {\n var diff_type = diffs[x][0];\n var diff_text = diffs[x][1];\n\n if (!patchDiffLength && diff_type !== DIFF_EQUAL) {\n // A new patch starts here.\n patch.start1 = char_count1;\n patch.start2 = char_count2;\n }\n\n switch (diff_type) {\n case DIFF_INSERT:\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length2 += diff_text.length;\n postpatch_text = postpatch_text.substring(0, char_count2) + diff_text +\n postpatch_text.substring(char_count2);\n break;\n case DIFF_DELETE:\n patch.length1 += diff_text.length;\n patch.diffs[patchDiffLength++] = diffs[x];\n postpatch_text = postpatch_text.substring(0, char_count2) +\n postpatch_text.substring(char_count2 +\n diff_text.length);\n break;\n case DIFF_EQUAL:\n if (diff_text.length <= 2 * this.Patch_Margin &&\n patchDiffLength && diffs.length != x + 1) {\n // Small equality inside a patch.\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length1 += diff_text.length;\n patch.length2 += diff_text.length;\n } else if (diff_text.length >= 2 * this.Patch_Margin) {\n // Time for a new patch.\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n patch = new diff_match_patch.patch_obj();\n patchDiffLength = 0;\n // Unlike Unidiff, our patch lists have a rolling context.\n // https://github.com/google/diff-match-patch/wiki/Unidiff\n // Update prepatch text & pos to reflect the application of the\n // just completed patch.\n prepatch_text = postpatch_text;\n char_count1 = char_count2;\n }\n }\n break;\n }\n\n // Update the current character count.\n if (diff_type !== DIFF_INSERT) {\n char_count1 += diff_text.length;\n }\n if (diff_type !== DIFF_DELETE) {\n char_count2 += diff_text.length;\n }\n }\n // Pick up the leftover patch if not empty.\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n }\n\n return patches;\n};\n\n\n/**\n * Given an array of patches, return another array that is identical.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_deepCopy = function(patches) {\n // Making deep copies is hard in JavaScript.\n var patchesCopy = [];\n for (var x = 0; x < patches.length; x++) {\n var patch = patches[x];\n var patchCopy = new diff_match_patch.patch_obj();\n patchCopy.diffs = [];\n for (var y = 0; y < patch.diffs.length; y++) {\n patchCopy.diffs[y] =\n new diff_match_patch.Diff(patch.diffs[y][0], patch.diffs[y][1]);\n }\n patchCopy.start1 = patch.start1;\n patchCopy.start2 = patch.start2;\n patchCopy.length1 = patch.length1;\n patchCopy.length2 = patch.length2;\n patchesCopy[x] = patchCopy;\n }\n return patchesCopy;\n};\n\n\n/**\n * Merge a set of patches onto the text. Return a patched text, as well\n * as a list of true/false values indicating which patches were applied.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @param {string} text Old text.\n * @return {!Array.<string|!Array.<boolean>>} Two element Array, containing the\n * new text and an array of boolean values.\n */\ndiff_match_patch.prototype.patch_apply = function(patches, text) {\n if (patches.length == 0) {\n return [text, []];\n }\n\n // Deep copy the patches so that no changes are made to originals.\n patches = this.patch_deepCopy(patches);\n\n var nullPadding = this.patch_addPadding(patches);\n text = nullPadding + text + nullPadding;\n\n this.patch_splitMax(patches);\n // delta keeps track of the offset between the expected and actual location\n // of the previous patch. If there are patches expected at positions 10 and\n // 20, but the first patch was found at 12, delta is 2 and the second patch\n // has an effective expected position of 22.\n var delta = 0;\n var results = [];\n for (var x = 0; x < patches.length; x++) {\n var expected_loc = patches[x].start2 + delta;\n var text1 = this.diff_text1(patches[x].diffs);\n var start_loc;\n var end_loc = -1;\n if (text1.length > this.Match_MaxBits) {\n // patch_splitMax will only provide an oversized pattern in the case of\n // a monster delete.\n start_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits),\n expected_loc);\n if (start_loc != -1) {\n end_loc = this.match_main(text,\n text1.substring(text1.length - this.Match_MaxBits),\n expected_loc + text1.length - this.Match_MaxBits);\n if (end_loc == -1 || start_loc >= end_loc) {\n // Can't find valid trailing context. Drop this patch.\n start_loc = -1;\n }\n }\n } else {\n start_loc = this.match_main(text, text1, expected_loc);\n }\n if (start_loc == -1) {\n // No match found. :(\n results[x] = false;\n // Subtract the delta for this failed patch from subsequent patches.\n delta -= patches[x].length2 - patches[x].length1;\n } else {\n // Found a match. :)\n results[x] = true;\n delta = start_loc - expected_loc;\n var text2;\n if (end_loc == -1) {\n text2 = text.substring(start_loc, start_loc + text1.length);\n } else {\n text2 = text.substring(start_loc, end_loc + this.Match_MaxBits);\n }\n if (text1 == text2) {\n // Perfect match, just shove the replacement text in.\n text = text.substring(0, start_loc) +\n this.diff_text2(patches[x].diffs) +\n text.substring(start_loc + text1.length);\n } else {\n // Imperfect match. Run a diff to get a framework of equivalent\n // indices.\n var diffs = this.diff_main(text1, text2, false);\n if (text1.length > this.Match_MaxBits &&\n this.diff_levenshtein(diffs) / text1.length >\n this.Patch_DeleteThreshold) {\n // The end points match, but the content is unacceptably bad.\n results[x] = false;\n } else {\n this.diff_cleanupSemanticLossless(diffs);\n var index1 = 0;\n var index2;\n for (var y = 0; y < patches[x].diffs.length; y++) {\n var mod = patches[x].diffs[y];\n if (mod[0] !== DIFF_EQUAL) {\n index2 = this.diff_xIndex(diffs, index1);\n }\n if (mod[0] === DIFF_INSERT) { // Insertion\n text = text.substring(0, start_loc + index2) + mod[1] +\n text.substring(start_loc + index2);\n } else if (mod[0] === DIFF_DELETE) { // Deletion\n text = text.substring(0, start_loc + index2) +\n text.substring(start_loc + this.diff_xIndex(diffs,\n index1 + mod[1].length));\n }\n if (mod[0] !== DIFF_DELETE) {\n index1 += mod[1].length;\n }\n }\n }\n }\n }\n }\n // Strip the padding off.\n text = text.substring(nullPadding.length, text.length - nullPadding.length);\n return [text, results];\n};\n\n\n/**\n * Add some padding on text start and end so that edges can match something.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} The padding string added to each side.\n */\ndiff_match_patch.prototype.patch_addPadding = function(patches) {\n var paddingLength = this.Patch_Margin;\n var nullPadding = '';\n for (var x = 1; x <= paddingLength; x++) {\n nullPadding += String.fromCharCode(x);\n }\n\n // Bump all the patches forward.\n for (var x = 0; x < patches.length; x++) {\n patches[x].start1 += paddingLength;\n patches[x].start2 += paddingLength;\n }\n\n // Add some padding on start of first diff.\n var patch = patches[0];\n var diffs = patch.diffs;\n if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n patch.start1 -= paddingLength; // Should be 0.\n patch.start2 -= paddingLength; // Should be 0.\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[0][1].length) {\n // Grow first equality.\n var extraLength = paddingLength - diffs[0][1].length;\n diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1];\n patch.start1 -= extraLength;\n patch.start2 -= extraLength;\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n // Add some padding on end of last diff.\n patch = patches[patches.length - 1];\n diffs = patch.diffs;\n if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[diffs.length - 1][1].length) {\n // Grow last equality.\n var extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength);\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n return nullPadding;\n};\n\n\n/**\n * Look through the patches and break up any which are longer than the maximum\n * limit of the match algorithm.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_splitMax = function(patches) {\n var patch_size = this.Match_MaxBits;\n for (var x = 0; x < patches.length; x++) {\n if (patches[x].length1 <= patch_size) {\n continue;\n }\n var bigpatch = patches[x];\n // Remove the big old patch.\n patches.splice(x--, 1);\n var start1 = bigpatch.start1;\n var start2 = bigpatch.start2;\n var precontext = '';\n while (bigpatch.diffs.length !== 0) {\n // Create one of several smaller patches.\n var patch = new diff_match_patch.patch_obj();\n var empty = true;\n patch.start1 = start1 - precontext.length;\n patch.start2 = start2 - precontext.length;\n if (precontext !== '') {\n patch.length1 = patch.length2 = precontext.length;\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, precontext));\n }\n while (bigpatch.diffs.length !== 0 &&\n patch.length1 < patch_size - this.Patch_Margin) {\n var diff_type = bigpatch.diffs[0][0];\n var diff_text = bigpatch.diffs[0][1];\n if (diff_type === DIFF_INSERT) {\n // Insertions are harmless.\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n patch.diffs.push(bigpatch.diffs.shift());\n empty = false;\n } else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 &&\n patch.diffs[0][0] == DIFF_EQUAL &&\n diff_text.length > 2 * patch_size) {\n // This is a large deletion. Let it pass in one chunk.\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n empty = false;\n patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n bigpatch.diffs.shift();\n } else {\n // Deletion or equality. Only take as much as we can stomach.\n diff_text = diff_text.substring(0,\n patch_size - patch.length1 - this.Patch_Margin);\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n if (diff_type === DIFF_EQUAL) {\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n } else {\n empty = false;\n }\n patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n if (diff_text == bigpatch.diffs[0][1]) {\n bigpatch.diffs.shift();\n } else {\n bigpatch.diffs[0][1] =\n bigpatch.diffs[0][1].substring(diff_text.length);\n }\n }\n }\n // Compute the head context for the next patch.\n precontext = this.diff_text2(patch.diffs);\n precontext =\n precontext.substring(precontext.length - this.Patch_Margin);\n // Append the end context for this patch.\n var postcontext = this.diff_text1(bigpatch.diffs)\n .substring(0, this.Patch_Margin);\n if (postcontext !== '') {\n patch.length1 += postcontext.length;\n patch.length2 += postcontext.length;\n if (patch.diffs.length !== 0 &&\n patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) {\n patch.diffs[patch.diffs.length - 1][1] += postcontext;\n } else {\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, postcontext));\n }\n }\n if (!empty) {\n patches.splice(++x, 0, patch);\n }\n }\n }\n};\n\n\n/**\n * Take a list of patches and return a textual representation.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} Text representation of patches.\n */\ndiff_match_patch.prototype.patch_toText = function(patches) {\n var text = [];\n for (var x = 0; x < patches.length; x++) {\n text[x] = patches[x];\n }\n return text.join('');\n};\n\n\n/**\n * Parse a textual representation of patches and return a list of Patch objects.\n * @param {string} textline Text representation of patches.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.patch_fromText = function(textline) {\n var patches = [];\n if (!textline) {\n return patches;\n }\n var text = textline.split('\\n');\n var textPointer = 0;\n var patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\n while (textPointer < text.length) {\n var m = text[textPointer].match(patchHeader);\n if (!m) {\n throw new Error('Invalid patch string: ' + text[textPointer]);\n }\n var patch = new diff_match_patch.patch_obj();\n patches.push(patch);\n patch.start1 = parseInt(m[1], 10);\n if (m[2] === '') {\n patch.start1--;\n patch.length1 = 1;\n } else if (m[2] == '0') {\n patch.length1 = 0;\n } else {\n patch.start1--;\n patch.length1 = parseInt(m[2], 10);\n }\n\n patch.start2 = parseInt(m[3], 10);\n if (m[4] === '') {\n patch.start2--;\n patch.length2 = 1;\n } else if (m[4] == '0') {\n patch.length2 = 0;\n } else {\n patch.start2--;\n patch.length2 = parseInt(m[4], 10);\n }\n textPointer++;\n\n while (textPointer < text.length) {\n var sign = text[textPointer].charAt(0);\n try {\n var line = decodeURI(text[textPointer].substring(1));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in patch_fromText: ' + line);\n }\n if (sign == '-') {\n // Deletion.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_DELETE, line));\n } else if (sign == '+') {\n // Insertion.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_INSERT, line));\n } else if (sign == ' ') {\n // Minor equality.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, line));\n } else if (sign == '@') {\n // Start of next patch.\n break;\n } else if (sign === '') {\n // Blank line? Whatever.\n } else {\n // WTF?\n throw new Error('Invalid patch mode \"' + sign + '\" in: ' + line);\n }\n textPointer++;\n }\n }\n return patches;\n};\n\n\n/**\n * Class representing one patch operation.\n * @constructor\n */\ndiff_match_patch.patch_obj = function() {\n /** @type {!Array.<!diff_match_patch.Diff>} */\n this.diffs = [];\n /** @type {?number} */\n this.start1 = null;\n /** @type {?number} */\n this.start2 = null;\n /** @type {number} */\n this.length1 = 0;\n /** @type {number} */\n this.length2 = 0;\n};\n\n\n/**\n * Emulate GNU diff's format.\n * Header: @@ -382,8 +481,9 @@\n * Indices are printed as 1-based, not 0-based.\n * @return {string} The GNU diff string.\n */\ndiff_match_patch.patch_obj.prototype.toString = function() {\n var coords1, coords2;\n if (this.length1 === 0) {\n coords1 = this.start1 + ',0';\n } else if (this.length1 == 1) {\n coords1 = this.start1 + 1;\n } else {\n coords1 = (this.start1 + 1) + ',' + this.length1;\n }\n if (this.length2 === 0) {\n coords2 = this.start2 + ',0';\n } else if (this.length2 == 1) {\n coords2 = this.start2 + 1;\n } else {\n coords2 = (this.start2 + 1) + ',' + this.length2;\n }\n var text = ['@@ -' + coords1 + ' +' + coords2 + ' @@\\n'];\n var op;\n // Escape the body of the patch with %xx notation.\n for (var x = 0; x < this.diffs.length; x++) {\n switch (this.diffs[x][0]) {\n case DIFF_INSERT:\n op = '+';\n break;\n case DIFF_DELETE:\n op = '-';\n break;\n case DIFF_EQUAL:\n op = ' ';\n break;\n }\n text[x + 1] = op + encodeURI(this.diffs[x][1]) + '\\n';\n }\n return text.join('').replace(/%20/g, ' ');\n};\n\n\n// The following export code was added by @ForbesLindesay\nmodule.exports = diff_match_patch;\nmodule.exports['diff_match_patch'] = diff_match_patch;\nmodule.exports['DIFF_DELETE'] = DIFF_DELETE;\nmodule.exports['DIFF_INSERT'] = DIFF_INSERT;\nmodule.exports['DIFF_EQUAL'] = DIFF_EQUAL;","\"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})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar PropTypes = require(\"prop-types\");\nvar React = require(\"react\");\nvar split_1 = require(\"./split\");\nvar DiffMatchPatch = require(\"diff-match-patch\");\nvar DiffComponent = /** @class */ (function (_super) {\n __extends(DiffComponent, _super);\n function DiffComponent(props) {\n var _this = _super.call(this, props) || this;\n _this.state = {\n value: _this.props.value\n };\n _this.onChange = _this.onChange.bind(_this);\n _this.diff = _this.diff.bind(_this);\n return _this;\n }\n DiffComponent.prototype.componentDidUpdate = function () {\n var value = this.props.value;\n if (value !== this.state.value) {\n this.setState({ value: value });\n }\n };\n DiffComponent.prototype.onChange = function (value) {\n this.setState({\n value: value\n });\n if (this.props.onChange) {\n this.props.onChange(value);\n }\n };\n DiffComponent.prototype.diff = function () {\n var dmp = new DiffMatchPatch();\n var lhString = this.state.value[0];\n var rhString = this.state.value[1];\n if (lhString.length === 0 && rhString.length === 0) {\n return [];\n }\n var diff = dmp.diff_main(lhString, rhString);\n dmp.diff_cleanupSemantic(diff);\n var diffedLines = this.generateDiffedLines(diff);\n var codeEditorSettings = this.setCodeMarkers(diffedLines);\n return codeEditorSettings;\n };\n DiffComponent.prototype.generateDiffedLines = function (diff) {\n var C = {\n DIFF_EQUAL: 0,\n DIFF_DELETE: -1,\n DIFF_INSERT: 1\n };\n var diffedLines = {\n left: [],\n right: []\n };\n var cursor = {\n left: 1,\n right: 1\n };\n diff.forEach(function (chunk) {\n var chunkType = chunk[0];\n var text = chunk[1];\n var lines = text.split(\"\\n\").length - 1;\n // diff-match-patch sometimes returns empty strings at random\n if (text.length === 0) {\n return;\n }\n var firstChar = text[0];\n var lastChar = text[text.length - 1];\n var linesToHighlight = 0;\n switch (chunkType) {\n case C.DIFF_EQUAL:\n cursor.left += lines;\n cursor.right += lines;\n break;\n case C.DIFF_DELETE:\n // If the deletion starts with a newline, push the cursor down to that line\n if (firstChar === \"\\n\") {\n cursor.left++;\n lines--;\n }\n linesToHighlight = lines;\n // If the deletion does not include a newline, highlight the same line on the right\n if (linesToHighlight === 0) {\n diffedLines.right.push({\n startLine: cursor.right,\n endLine: cursor.right\n });\n }\n // If the last character is a newline, we don't want to highlight that line\n if (lastChar === \"\\n\") {\n linesToHighlight -= 1;\n }\n diffedLines.left.push({\n startLine: cursor.left,\n endLine: cursor.left + linesToHighlight\n });\n cursor.left += lines;\n break;\n case C.DIFF_INSERT:\n // If the insertion starts with a newline, push the cursor down to that line\n if (firstChar === \"\\n\") {\n cursor.right++;\n lines--;\n }\n linesToHighlight = lines;\n // If the insertion does not include a newline, highlight the same line on the left\n if (linesToHighlight === 0) {\n diffedLines.left.push({\n startLine: cursor.left,\n endLine: cursor.left\n });\n }\n // If the last character is a newline, we don't want to highlight that line\n if (lastChar === \"\\n\") {\n linesToHighlight -= 1;\n }\n diffedLines.right.push({\n startLine: cursor.right,\n endLine: cursor.right + linesToHighlight\n });\n cursor.right += lines;\n break;\n default:\n throw new Error(\"Diff type was not defined.\");\n }\n });\n return diffedLines;\n };\n // Receives a collection of line numbers and iterates through them to highlight appropriately\n // Returns an object that tells the render() method how to display the code editors\n DiffComponent.prototype.setCodeMarkers = function (diffedLines) {\n if (diffedLines === void 0) { diffedLines = { left: [], right: [] }; }\n var codeEditorSettings = [];\n var newMarkerSet = {\n left: [],\n right: []\n };\n for (var i = 0; i < diffedLines.left.length; i++) {\n var markerObj = {\n startRow: diffedLines.left[i].startLine - 1,\n endRow: diffedLines.left[i].endLine,\n type: \"text\",\n className: \"codeMarker\"\n };\n newMarkerSet.left.push(markerObj);\n }\n for (var i = 0; i < diffedLines.right.length; i++) {\n var markerObj = {\n startRow: diffedLines.right[i].startLine - 1,\n endRow: diffedLines.right[i].endLine,\n type: \"text\",\n className: \"codeMarker\"\n };\n newMarkerSet.right.push(markerObj);\n }\n codeEditorSettings[0] = newMarkerSet.left;\n codeEditorSettings[1] = newMarkerSet.right;\n return codeEditorSettings;\n };\n DiffComponent.prototype.render = function () {\n var markers = this.diff();\n return (React.createElement(split_1.default, { name: this.props.name, className: this.props.className, focus: this.props.focus, orientation: this.props.orientation, splits: this.props.splits, mode: this.props.mode, theme: this.props.theme, height: this.props.height, width: this.props.width, fontSize: this.props.fontSize, showGutter: this.props.showGutter, onChange: this.onChange, onPaste: this.props.onPaste, onLoad: this.props.onLoad, onScroll: this.props.onScroll, minLines: this.props.minLines, maxLines: this.props.maxLines, readOnly: this.props.readOnly, highlightActiveLine: this.props.highlightActiveLine, showPrintMargin: this.props.showPrintMargin, tabSize: this.props.tabSize, cursorStart: this.props.cursorStart, editorProps: this.props.editorProps, style: this.props.style, scrollMargin: this.props.scrollMargin, setOptions: this.props.setOptions, wrapEnabled: this.props.wrapEnabled, enableBasicAutocompletion: this.props.enableBasicAutocompletion, enableLiveAutocompletion: this.props.enableLiveAutocompletion, value: this.state.value, markers: markers }));\n };\n DiffComponent.propTypes = {\n cursorStart: PropTypes.number,\n editorProps: PropTypes.object,\n enableBasicAutocompletion: PropTypes.bool,\n enableLiveAutocompletion: PropTypes.bool,\n focus: PropTypes.bool,\n fontSize: PropTypes.number,\n height: PropTypes.string,\n highlightActiveLine: PropTypes.bool,\n maxLines: PropTypes.number,\n minLines: PropTypes.number,\n mode: PropTypes.string,\n name: PropTypes.string,\n className: PropTypes.string,\n onLoad: PropTypes.func,\n onPaste: PropTypes.func,\n onScroll: PropTypes.func,\n onChange: PropTypes.func,\n orientation: PropTypes.string,\n readOnly: PropTypes.bool,\n scrollMargin: PropTypes.array,\n setOptions: PropTypes.object,\n showGutter: PropTypes.bool,\n showPrintMargin: PropTypes.bool,\n splits: PropTypes.number,\n style: PropTypes.object,\n tabSize: PropTypes.number,\n theme: PropTypes.string,\n value: PropTypes.array,\n width: PropTypes.string,\n wrapEnabled: PropTypes.bool\n };\n DiffComponent.defaultProps = {\n cursorStart: 1,\n editorProps: {},\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false,\n focus: false,\n fontSize: 12,\n height: \"500px\",\n highlightActiveLine: true,\n maxLines: null,\n minLines: null,\n mode: \"\",\n name: \"ace-editor\",\n onLoad: null,\n onScroll: null,\n onPaste: null,\n onChange: null,\n orientation: \"beside\",\n readOnly: false,\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n showGutter: true,\n showPrintMargin: true,\n splits: 2,\n style: {},\n tabSize: 4,\n theme: \"github\",\n value: [\"\", \"\"],\n width: \"500px\",\n wrapEnabled: true\n };\n return DiffComponent;\n}(React.Component));\nexports.default = DiffComponent;\n//# sourceMappingURL=diff.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.diff = exports.split = void 0;\nvar ace_1 = require(\"./ace\");\nvar diff_1 = require(\"./diff\");\nexports.diff = diff_1.default;\nvar split_1 = require(\"./split\");\nexports.split = split_1.default;\nexports.default = ace_1.default;\n//# sourceMappingURL=index.js.map","ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n var keywordMapper = this.createKeywordMapper({\n \"support.function\": supportFunction,\n \"support.constant\": supportConstant,\n \"support.type\": supportType,\n \"support.constant.color\": supportConstantColor,\n \"support.constant.fonts\": supportConstantFonts\n }, \"text\", true);\n this.$rules = {\n \"start\": [{\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"ruleset\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\"\n }, {\n token: \"string\",\n regex: \"@(?!viewport)\",\n next: \"media\"\n }, {\n token: \"keyword\",\n regex: \"#[a-z0-9-_]+\"\n }, {\n token: \"keyword\",\n regex: \"%\"\n }, {\n token: \"variable\",\n regex: \"\\\\.[a-z0-9-_]+\"\n }, {\n token: \"string\",\n regex: \":[a-z0-9-_]+\"\n }, {\n token: \"constant.numeric\",\n regex: numRe\n }, {\n token: \"constant\",\n regex: \"[a-z0-9-_]+\"\n }, {\n caseInsensitive: true\n }],\n \"media\": [{\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"start\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\",\n next: \"start\"\n }, {\n token: \"string\",\n regex: \";\",\n next: \"start\"\n }, {\n token: \"keyword\",\n regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n }],\n \"comments\": [{\n token: \"comment\",\n regex: \"\\\\/\\\\*\",\n push: [{\n token: \"comment\",\n regex: \"\\\\*\\\\/\",\n next: \"pop\"\n }, {\n defaultToken: \"comment\"\n }]\n }],\n \"ruleset\": [{\n regex: \"-(webkit|ms|moz|o)-\",\n token: \"text\"\n }, {\n token: \"punctuation.operator\",\n regex: \"[:;]\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\",\n next: \"start\"\n }, {\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: [\"constant.numeric\", \"keyword\"],\n regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n }, {\n token: \"constant.numeric\",\n regex: numRe\n }, {\n token: \"constant.numeric\",\n regex: \"#[a-f0-9]{6}\"\n }, {\n token: \"constant.numeric\",\n regex: \"#[a-f0-9]{3}\"\n }, {\n token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n regex: pseudoElements\n }, {\n token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n regex: pseudoClasses\n }, {\n include: \"url\"\n }, {\n token: keywordMapper,\n regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n }, {\n caseInsensitive: true\n }],\n url: [{\n token: \"support.function\",\n regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n push: [{\n token: \"support.function\",\n regex: \"\\\\)\",\n next: \"pop\"\n }, {\n defaultToken: \"string\"\n }]\n }],\n strings: [{\n token: \"string.start\",\n regex: \"'\",\n push: [{\n token: \"string.end\",\n regex: \"'|$\",\n next: \"pop\"\n }, {\n include: \"escapes\"\n }, {\n token: \"constant.language.escape\",\n regex: /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }, {\n token: \"string.start\",\n regex: '\"',\n push: [{\n token: \"string.end\",\n regex: '\"|$',\n next: \"pop\"\n }, {\n include: \"escapes\"\n }, {\n token: \"constant.language.escape\",\n regex: /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }],\n escapes: [{\n token: \"constant.language.escape\",\n regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n }]\n };\n this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/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/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n \"background\": { \"#$0\": 1 },\n \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n \"background-image\": { \"url('/$0')\": 1 },\n \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n \"background-size\": { \"cover\": 1, \"contain\": 1 },\n \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n \"border-color\": { \"#$0\": 1 },\n \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n \"font-style\": { \"italic\": 1, \"normal\": 1 },\n \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"letter-spacing\": { \"normal\": 1 },\n \"line-height\": { \"normal\": 1 },\n \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"word-spacing\": { \"normal\": 1 },\n \"filter\": { \"alpha(opacity=$0100)\": 1 },\n \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n \"-moz-border-radius\": 1,\n \"-moz-border-radius-topright\": 1,\n \"-moz-border-radius-bottomright\": 1,\n \"-moz-border-radius-topleft\": 1,\n \"-moz-border-radius-bottomleft\": 1,\n \"-webkit-border-radius\": 1,\n \"-webkit-border-top-right-radius\": 1,\n \"-webkit-border-top-left-radius\": 1,\n \"-webkit-border-bottom-right-radius\": 1,\n \"-webkit-border-bottom-left-radius\": 1,\n \"-moz-box-shadow\": 1,\n \"-webkit-box-shadow\": 1,\n \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n this.completionsDefined = false;\n this.defineCompletions = function () {\n if (document) {\n var style = document.createElement('c').style;\n for (var i in style) {\n if (typeof style[i] !== 'string')\n continue;\n var name = i.replace(/[A-Z]/g, function (x) {\n return '-' + x.toLowerCase();\n });\n if (!propertyMap.hasOwnProperty(name))\n propertyMap[name] = 1;\n }\n }\n this.completionsDefined = true;\n };\n this.getCompletions = function (state, session, pos, prefix) {\n if (!this.completionsDefined) {\n this.defineCompletions();\n }\n if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n var line = session.getLine(pos.row).substr(0, pos.column);\n var inParens = /\\([^)]*$/.test(line);\n if (inParens) {\n line = line.substr(line.lastIndexOf('(') + 1);\n }\n if (/:[^;]+$/.test(line)) {\n /([\\w\\-]+):[^:]*$/.test(line);\n return this.getPropertyValueCompletions(state, session, pos, prefix);\n }\n else {\n return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n }\n }\n return [];\n };\n this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n skipSemicolon = skipSemicolon || false;\n var properties = Object.keys(propertyMap);\n return properties.map(function (property) {\n return {\n caption: property,\n snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n meta: \"property\",\n score: 1000000\n };\n });\n };\n this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n var line = session.getLine(pos.row).substr(0, pos.column);\n var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n if (!property)\n return [];\n var values = [];\n if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n values = Object.keys(propertyMap[property]);\n }\n return values.map(function (value) {\n return {\n caption: value,\n snippet: value,\n meta: \"property value\",\n score: 1000000\n };\n });\n };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n this.inherit(CstyleBehaviour);\n this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n if (text === ':' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n if (token && token.value.match(/\\s+/)) {\n token = iterator.stepBackward();\n }\n if (token && token.type === 'support.type') {\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === ':') {\n return {\n text: '',\n selection: [1, 1]\n };\n }\n if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n return {\n text: ':;',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected === ':') {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n if (token && token.value.match(/\\s+/)) {\n token = iterator.stepBackward();\n }\n if (token && token.type === 'support.type') {\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar === ';') {\n range.end.column++;\n return range;\n }\n }\n }\n });\n this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n if (text === ';' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === ';') {\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n if (text === '!' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n return {\n text: '!important',\n selection: [10, 10]\n };\n }\n }\n });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/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/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.$completer = new CssCompletions();\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n this.foldingRules = \"cStyle\";\n this.blockComment = { start: \"/*\", end: \"*/\" };\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n return indent;\n }\n var match = line.match(/^.*\\{\\s*$/);\n if (match) {\n indent += tab;\n }\n return indent;\n };\n this.checkOutdent = function (state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n this.autoOutdent = function (state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n this.getCompletions = function (state, session, pos, prefix) {\n return this.$completer.getCompletions(state, session, pos, prefix);\n };\n this.createWorker = function (session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n worker.attachToDocument(session.getDocument());\n worker.on(\"annotate\", function (e) {\n session.setAnnotations(e.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n this.$id = \"ace/mode/css\";\n this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n}); (function() {\n ace.require([\"ace/mode/css\"], 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 token: \"comment.doc.tag\",\n regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n },\n DocCommentHighlightRules.getTagRule(),\n {\n defaultToken: \"comment.doc\",\n caseInsensitive: true\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\",\n regex: \"\\\\/\\\\*(?=\\\\*)\",\n next: start\n };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n return {\n token: \"comment.doc\",\n regex: \"\\\\*\\\\/\",\n next: start\n };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_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 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\",\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\",\n regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n }, {\n token: \"constant.numeric\",\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|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\",\n regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n }, {\n token: \"constant.numeric\",\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: \"</?\" + tagRegex + \"\",\n next: \"jsxAttributes\",\n nextState: \"jsx\"\n };\n this.$rules.start.unshift(jsxTag);\n var jsxJsRule = {\n regex: \"{\",\n token: \"paren.quasi.start\",\n push: \"start\"\n };\n this.$rules.jsx = [\n jsxJsRule,\n jsxTag,\n { include: \"reference\" },\n { defaultToken: \"string\" }\n ];\n this.$rules.jsxAttributes = [{\n token: \"meta.tag.punctuation.tag-close.xml\",\n regex: \"/?>\",\n onMatch: function (value, currentState, stack) {\n if (currentState == stack[0])\n stack.shift();\n if (value.length == 2) {\n if (stack[0] == this.nextState)\n stack[1]--;\n if (!stack[1] || stack[1] < 0) {\n stack.splice(0, 2);\n }\n }\n this.next = stack[0] || \"start\";\n return [{ type: this.token, value: value }];\n },\n nextState: \"jsx\"\n },\n jsxJsRule,\n comments(\"jsxAttributes\"),\n {\n token: \"entity.other.attribute-name.xml\",\n regex: tagRegex\n }, {\n token: \"keyword.operator.attribute-equals.xml\",\n regex: \"=\"\n }, {\n token: \"text.tag-whitespace.xml\",\n regex: \"\\\\s+\"\n }, {\n token: \"string.attribute-value.xml\",\n regex: \"'\",\n stateName: \"jsx_attr_q\",\n push: [\n { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n { include: \"reference\" },\n { defaultToken: \"string.attribute-value.xml\" }\n ]\n }, {\n token: \"string.attribute-value.xml\",\n regex: '\"',\n stateName: \"jsx_attr_qq\",\n push: [\n { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n { include: \"reference\" },\n { defaultToken: \"string.attribute-value.xml\" }\n ]\n },\n jsxTag\n ];\n this.$rules.reference = [{\n token: \"constant.language.escape.reference.xml\",\n regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }];\n}\nfunction comments(next) {\n return [\n {\n token: \"comment\",\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.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});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n var keywordMapper = this.createKeywordMapper({\n \"support.function\": supportFunction,\n \"support.constant\": supportConstant,\n \"support.type\": supportType,\n \"support.constant.color\": supportConstantColor,\n \"support.constant.fonts\": supportConstantFonts\n }, \"text\", true);\n this.$rules = {\n \"start\": [{\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"ruleset\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\"\n }, {\n token: \"string\",\n regex: \"@(?!viewport)\",\n next: \"media\"\n }, {\n token: \"keyword\",\n regex: \"#[a-z0-9-_]+\"\n }, {\n token: \"keyword\",\n regex: \"%\"\n }, {\n token: \"variable\",\n regex: \"\\\\.[a-z0-9-_]+\"\n }, {\n token: \"string\",\n regex: \":[a-z0-9-_]+\"\n }, {\n token: \"constant.numeric\",\n regex: numRe\n }, {\n token: \"constant\",\n regex: \"[a-z0-9-_]+\"\n }, {\n caseInsensitive: true\n }],\n \"media\": [{\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"start\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\",\n next: \"start\"\n }, {\n token: \"string\",\n regex: \";\",\n next: \"start\"\n }, {\n token: \"keyword\",\n regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n }],\n \"comments\": [{\n token: \"comment\",\n regex: \"\\\\/\\\\*\",\n push: [{\n token: \"comment\",\n regex: \"\\\\*\\\\/\",\n next: \"pop\"\n }, {\n defaultToken: \"comment\"\n }]\n }],\n \"ruleset\": [{\n regex: \"-(webkit|ms|moz|o)-\",\n token: \"text\"\n }, {\n token: \"punctuation.operator\",\n regex: \"[:;]\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\",\n next: \"start\"\n }, {\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: [\"constant.numeric\", \"keyword\"],\n regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n }, {\n token: \"constant.numeric\",\n regex: numRe\n }, {\n token: \"constant.numeric\",\n regex: \"#[a-f0-9]{6}\"\n }, {\n token: \"constant.numeric\",\n regex: \"#[a-f0-9]{3}\"\n }, {\n token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n regex: pseudoElements\n }, {\n token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n regex: pseudoClasses\n }, {\n include: \"url\"\n }, {\n token: keywordMapper,\n regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n }, {\n caseInsensitive: true\n }],\n url: [{\n token: \"support.function\",\n regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n push: [{\n token: \"support.function\",\n regex: \"\\\\)\",\n next: \"pop\"\n }, {\n defaultToken: \"string\"\n }]\n }],\n strings: [{\n token: \"string.start\",\n regex: \"'\",\n push: [{\n token: \"string.end\",\n regex: \"'|$\",\n next: \"pop\"\n }, {\n include: \"escapes\"\n }, {\n token: \"constant.language.escape\",\n regex: /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }, {\n token: \"string.start\",\n regex: '\"',\n push: [{\n token: \"string.end\",\n regex: '\"|$',\n next: \"pop\"\n }, {\n include: \"escapes\"\n }, {\n token: \"constant.language.escape\",\n regex: /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }],\n escapes: [{\n token: \"constant.language.escape\",\n regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n }]\n };\n this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n \"background\": { \"#$0\": 1 },\n \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n \"background-image\": { \"url('/$0')\": 1 },\n \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n \"background-size\": { \"cover\": 1, \"contain\": 1 },\n \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n \"border-color\": { \"#$0\": 1 },\n \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n \"font-style\": { \"italic\": 1, \"normal\": 1 },\n \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"letter-spacing\": { \"normal\": 1 },\n \"line-height\": { \"normal\": 1 },\n \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n \"word-spacing\": { \"normal\": 1 },\n \"filter\": { \"alpha(opacity=$0100)\": 1 },\n \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n \"-moz-border-radius\": 1,\n \"-moz-border-radius-topright\": 1,\n \"-moz-border-radius-bottomright\": 1,\n \"-moz-border-radius-topleft\": 1,\n \"-moz-border-radius-bottomleft\": 1,\n \"-webkit-border-radius\": 1,\n \"-webkit-border-top-right-radius\": 1,\n \"-webkit-border-top-left-radius\": 1,\n \"-webkit-border-bottom-right-radius\": 1,\n \"-webkit-border-bottom-left-radius\": 1,\n \"-moz-box-shadow\": 1,\n \"-webkit-box-shadow\": 1,\n \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n this.completionsDefined = false;\n this.defineCompletions = function () {\n if (document) {\n var style = document.createElement('c').style;\n for (var i in style) {\n if (typeof style[i] !== 'string')\n continue;\n var name = i.replace(/[A-Z]/g, function (x) {\n return '-' + x.toLowerCase();\n });\n if (!propertyMap.hasOwnProperty(name))\n propertyMap[name] = 1;\n }\n }\n this.completionsDefined = true;\n };\n this.getCompletions = function (state, session, pos, prefix) {\n if (!this.completionsDefined) {\n this.defineCompletions();\n }\n if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n var line = session.getLine(pos.row).substr(0, pos.column);\n var inParens = /\\([^)]*$/.test(line);\n if (inParens) {\n line = line.substr(line.lastIndexOf('(') + 1);\n }\n if (/:[^;]+$/.test(line)) {\n /([\\w\\-]+):[^:]*$/.test(line);\n return this.getPropertyValueCompletions(state, session, pos, prefix);\n }\n else {\n return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n }\n }\n return [];\n };\n this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n skipSemicolon = skipSemicolon || false;\n var properties = Object.keys(propertyMap);\n return properties.map(function (property) {\n return {\n caption: property,\n snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n meta: \"property\",\n score: 1000000\n };\n });\n };\n this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n var line = session.getLine(pos.row).substr(0, pos.column);\n var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n if (!property)\n return [];\n var values = [];\n if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n values = Object.keys(propertyMap[property]);\n }\n return values.map(function (value) {\n return {\n caption: value,\n snippet: value,\n meta: \"property value\",\n score: 1000000\n };\n });\n };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n this.inherit(CstyleBehaviour);\n this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n if (text === ':' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n if (token && token.value.match(/\\s+/)) {\n token = iterator.stepBackward();\n }\n if (token && token.type === 'support.type') {\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === ':') {\n return {\n text: '',\n selection: [1, 1]\n };\n }\n if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n return {\n text: ':;',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected === ':') {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n if (token && token.value.match(/\\s+/)) {\n token = iterator.stepBackward();\n }\n if (token && token.type === 'support.type') {\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar === ';') {\n range.end.column++;\n return range;\n }\n }\n }\n });\n this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n if (text === ';' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === ';') {\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n if (text === '!' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n return {\n text: '!important',\n selection: [10, 10]\n };\n }\n }\n });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.$completer = new CssCompletions();\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n this.foldingRules = \"cStyle\";\n this.blockComment = { start: \"/*\", end: \"*/\" };\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n return indent;\n }\n var match = line.match(/^.*\\{\\s*$/);\n if (match) {\n indent += tab;\n }\n return indent;\n };\n this.checkOutdent = function (state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n this.autoOutdent = function (state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n this.getCompletions = function (state, session, pos, prefix) {\n return this.$completer.getCompletions(state, session, pos, prefix);\n };\n this.createWorker = function (session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n worker.attachToDocument(session.getDocument());\n worker.on(\"annotate\", function (e) {\n session.setAnnotations(e.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n this.$id = \"ace/mode/css\";\n this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n this.$rules = {\n start: [\n { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n {\n token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n },\n { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n {\n token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n },\n { include: \"tag\" },\n { token: \"text.end-tag-open.xml\", regex: \"</\" },\n { token: \"text.tag-open.xml\", regex: \"<\" },\n { include: \"reference\" },\n { defaultToken: \"text.xml\" }\n ],\n processing_instruction: [{\n token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n regex: tagRegex\n }, {\n token: \"keyword.operator.decl-attribute-equals.xml\",\n regex: \"=\"\n }, {\n include: \"whitespace\"\n }, {\n include: \"string\"\n }, {\n token: \"punctuation.xml-decl.xml\",\n regex: \"\\\\?>\",\n next: \"start\"\n }],\n doctype: [\n { include: \"whitespace\" },\n { include: \"string\" },\n { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n ],\n int_subset: [{\n token: \"text.xml\",\n regex: \"\\\\s+\"\n }, {\n token: \"punctuation.int-subset.xml\",\n regex: \"]\",\n next: \"pop\"\n }, {\n token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n regex: \"(<\\\\!)(\" + tagRegex + \")\",\n push: [{\n token: \"text\",\n regex: \"\\\\s+\"\n },\n {\n token: \"punctuation.markup-decl.xml\",\n regex: \">\",\n next: \"pop\"\n },\n { include: \"string\" }]\n }],\n cdata: [\n { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n { token: \"text.xml\", regex: \"\\\\s+\" },\n { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n ],\n comment: [\n { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n { defaultToken: \"comment.xml\" }\n ],\n reference: [{\n token: \"constant.language.escape.reference.xml\",\n regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }],\n attr_reference: [{\n token: \"constant.language.escape.reference.attribute-value.xml\",\n regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }],\n tag: [{\n token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n next: [\n { include: \"attributes\" },\n { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n ]\n }],\n tag_whitespace: [\n { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n ],\n whitespace: [\n { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n ],\n string: [{\n token: \"string.xml\",\n regex: \"'\",\n push: [\n { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n { defaultToken: \"string.xml\" }\n ]\n }, {\n token: \"string.xml\",\n regex: '\"',\n push: [\n { token: \"string.xml\", regex: '\"', next: \"pop\" },\n { defaultToken: \"string.xml\" }\n ]\n }],\n attributes: [{\n token: \"entity.other.attribute-name.xml\",\n regex: tagRegex\n }, {\n token: \"keyword.operator.attribute-equals.xml\",\n regex: \"=\"\n }, {\n include: \"tag_whitespace\"\n }, {\n include: \"attribute_value\"\n }],\n attribute_value: [{\n token: \"string.attribute-value.xml\",\n regex: \"'\",\n push: [\n { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n { include: \"attr_reference\" },\n { defaultToken: \"string.attribute-value.xml\" }\n ]\n }, {\n token: \"string.attribute-value.xml\",\n regex: '\"',\n push: [\n { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n { include: \"attr_reference\" },\n { defaultToken: \"string.attribute-value.xml\" }\n ]\n }]\n };\n if (this.constructor === XmlHighlightRules)\n this.normalizeRules();\n};\n(function () {\n this.embedTagRules = function (HighlightRules, prefix, tag) {\n this.$rules.tag.unshift({\n token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n next: [\n { include: \"attributes\" },\n { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n ]\n });\n this.$rules[tag + \"-end\"] = [\n { include: \"attributes\" },\n { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n onMatch: function (value, currentState, stack) {\n stack.splice(0);\n return this.token;\n } }\n ];\n this.embedRules(HighlightRules, prefix, [{\n token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n next: tag + \"-end\"\n }, {\n token: \"string.cdata.xml\",\n regex: \"<\\\\!\\\\[CDATA\\\\[\"\n }, {\n token: \"string.cdata.xml\",\n regex: \"\\\\]\\\\]>\"\n }]);\n };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n a: 'anchor',\n button: 'form',\n form: 'form',\n img: 'image',\n input: 'form',\n label: 'form',\n option: 'form',\n script: 'script',\n select: 'form',\n textarea: 'form',\n style: 'style',\n table: 'table',\n tbody: 'table',\n td: 'table',\n tfoot: 'table',\n th: 'table',\n tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n XmlHighlightRules.call(this);\n this.addRules({\n attributes: [{\n include: \"tag_whitespace\"\n }, {\n token: \"entity.other.attribute-name.xml\",\n regex: \"[-_a-zA-Z0-9:.]+\"\n }, {\n token: \"keyword.operator.attribute-equals.xml\",\n regex: \"=\",\n push: [{\n include: \"tag_whitespace\"\n }, {\n token: \"string.unquoted.attribute-value.html\",\n regex: \"[^<>='\\\"`\\\\s]+\",\n next: \"pop\"\n }, {\n token: \"empty\",\n regex: \"\",\n next: \"pop\"\n }]\n }, {\n include: \"attribute_value\"\n }],\n tag: [{\n token: function (start, tag) {\n var group = tagMap[tag];\n return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n },\n regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n next: \"tag_stuff\"\n }],\n tag_stuff: [\n { include: \"attributes\" },\n { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n ]\n });\n this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n if (this.constructor === HtmlHighlightRules)\n this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"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\");\nfunction is(token, type) {\n return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '\"' || text == \"'\") {\n var quote = text;\n var selected = session.doc.getTextRange(editor.getSelectionRange());\n if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n return {\n text: quote + selected + quote,\n selection: false\n };\n }\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n return {\n text: \"\",\n selection: [1, 1]\n };\n }\n if (!token)\n token = iterator.stepBackward();\n if (!token)\n return;\n while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n token = iterator.stepBackward();\n }\n var rightSpace = !rightChar || rightChar.match(/\\s/);\n if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n return {\n text: quote + quote,\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '>') {\n var position = editor.getSelectionRange().start;\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken() || iterator.stepBackward();\n if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n return;\n if (is(token, \"reference.attribute-value\"))\n return;\n if (is(token, \"attribute-value\")) {\n var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n if (position.column < tokenEndColumn)\n return;\n if (position.column == tokenEndColumn) {\n var nextToken = iterator.stepForward();\n if (nextToken && is(nextToken, \"attribute-value\"))\n return;\n iterator.stepBackward();\n }\n }\n if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n return;\n while (!is(token, \"tag-name\")) {\n token = iterator.stepBackward();\n if (token.value == \"<\") {\n token = iterator.stepForward();\n break;\n }\n }\n var tokenRow = iterator.getCurrentTokenRow();\n var tokenColumn = iterator.getCurrentTokenColumn();\n if (is(iterator.stepBackward(), \"end-tag-open\"))\n return;\n var element = token.value;\n if (tokenRow == position.row)\n element = element.substring(0, position.column - tokenColumn);\n if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n return;\n return {\n text: \">\" + \"</\" + element + \">\",\n selection: [1, 1]\n };\n }\n });\n this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n if (text == \"\\n\") {\n var cursor = editor.getCursorPosition();\n var line = session.getLine(cursor.row);\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n if (token && token.type.indexOf(\"tag-close\") !== -1) {\n if (token.value == \"/>\")\n return;\n while (token && token.type.indexOf(\"tag-name\") === -1) {\n token = iterator.stepBackward();\n }\n if (!token) {\n return;\n }\n var tag = token.value;\n var row = iterator.getCurrentTokenRow();\n token = iterator.stepBackward();\n if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n return;\n }\n if (this.voidElements && !this.voidElements[tag]) {\n var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n var line = session.getLine(row);\n var nextIndent = this.$getIndent(line);\n var indent = nextIndent + session.getTabString();\n if (nextToken && nextToken.value === \"</\") {\n return {\n text: \"\\n\" + indent + \"\\n\" + nextIndent,\n selection: [1, indent.length, 1, indent.length]\n };\n }\n else {\n return {\n text: \"\\n\" + indent\n };\n }\n }\n }\n }\n });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n this.defaultMode = defaultMode;\n this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n this.$getMode = function (state) {\n if (typeof state != \"string\")\n state = state[0];\n for (var key in this.subModes) {\n if (state.indexOf(key) === 0)\n return this.subModes[key];\n }\n return null;\n };\n this.$tryMode = function (state, session, foldStyle, row) {\n var mode = this.$getMode(state);\n return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n };\n this.getFoldWidget = function (session, foldStyle, row) {\n return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n this.$tryMode(session.getState(row), session, foldStyle, row) ||\n this.defaultMode.getFoldWidget(session, foldStyle, row));\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n var mode = this.$getMode(session.getState(row - 1));\n if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n mode = this.$getMode(session.getState(row));\n if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n mode = this.defaultMode;\n return mode.getFoldWidgetRange(session, foldStyle, row);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n BaseFoldMode.call(this);\n this.voidElements = voidElements || {};\n this.optionalEndTags = oop.mixin({}, this.voidElements);\n if (optionalEndTags)\n oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n this.tagName = \"\";\n this.closing = false;\n this.selfClosing = false;\n this.start = { row: 0, column: 0 };\n this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n this.getFoldWidget = function (session, foldStyle, row) {\n var tag = this._getFirstTagInLine(session, row);\n if (!tag)\n return this.getCommentFoldWidget(session, row);\n if (tag.closing || (!tag.tagName && tag.selfClosing))\n return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n return \"\";\n if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n return \"\";\n return \"start\";\n };\n this.getCommentFoldWidget = function (session, row) {\n if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n return \"start\";\n return \"\";\n };\n this._getFirstTagInLine = function (session, row) {\n var tokens = session.getTokens(row);\n var tag = new Tag();\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (is(token, \"tag-open\")) {\n tag.end.column = tag.start.column + token.value.length;\n tag.closing = is(token, \"end-tag-open\");\n token = tokens[++i];\n if (!token)\n return null;\n tag.tagName = token.value;\n tag.end.column += token.value.length;\n for (i++; i < tokens.length; i++) {\n token = tokens[i];\n tag.end.column += token.value.length;\n if (is(token, \"tag-close\")) {\n tag.selfClosing = token.value == '/>';\n break;\n }\n }\n return tag;\n }\n else if (is(token, \"tag-close\")) {\n tag.selfClosing = token.value == '/>';\n return tag;\n }\n tag.start.column += token.value.length;\n }\n return null;\n };\n this._findEndTagInLine = function (session, row, tagName, startColumn) {\n var tokens = session.getTokens(row);\n var column = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n column += token.value.length;\n if (column < startColumn)\n continue;\n if (is(token, \"end-tag-open\")) {\n token = tokens[i + 1];\n if (token && token.value == tagName)\n return true;\n }\n }\n return false;\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n var tags = session.getMatchingTags({ row: row, column: 0 });\n if (tags) {\n return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n }\n else {\n return this.getCommentFoldWidget(session, row)\n && session.getCommentFoldRange(row, session.getLine(row).length);\n }\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n \"js-\": new CStyleFoldMode(),\n \"css-\": new CStyleFoldMode()\n });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n \"accesskey\",\n \"class\",\n \"contenteditable\",\n \"contextmenu\",\n \"dir\",\n \"draggable\",\n \"dropzone\",\n \"hidden\",\n \"id\",\n \"inert\",\n \"itemid\",\n \"itemprop\",\n \"itemref\",\n \"itemscope\",\n \"itemtype\",\n \"lang\",\n \"spellcheck\",\n \"style\",\n \"tabindex\",\n \"title\",\n \"translate\"\n];\nvar eventAttributes = [\n \"onabort\",\n \"onblur\",\n \"oncancel\",\n \"oncanplay\",\n \"oncanplaythrough\",\n \"onchange\",\n \"onclick\",\n \"onclose\",\n \"oncontextmenu\",\n \"oncuechange\",\n \"ondblclick\",\n \"ondrag\",\n \"ondragend\",\n \"ondragenter\",\n \"ondragleave\",\n \"ondragover\",\n \"ondragstart\",\n \"ondrop\",\n \"ondurationchange\",\n \"onemptied\",\n \"onended\",\n \"onerror\",\n \"onfocus\",\n \"oninput\",\n \"oninvalid\",\n \"onkeydown\",\n \"onkeypress\",\n \"onkeyup\",\n \"onload\",\n \"onloadeddata\",\n \"onloadedmetadata\",\n \"onloadstart\",\n \"onmousedown\",\n \"onmousemove\",\n \"onmouseout\",\n \"onmouseover\",\n \"onmouseup\",\n \"onmousewheel\",\n \"onpause\",\n \"onplay\",\n \"onplaying\",\n \"onprogress\",\n \"onratechange\",\n \"onreset\",\n \"onscroll\",\n \"onseeked\",\n \"onseeking\",\n \"onselect\",\n \"onshow\",\n \"onstalled\",\n \"onsubmit\",\n \"onsuspend\",\n \"ontimeupdate\",\n \"onvolumechange\",\n \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n \"abbr\": {},\n \"address\": {},\n \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n \"article\": { \"pubdate\": 1 },\n \"aside\": {},\n \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n \"b\": {},\n \"base\": { \"href\": 1, \"target\": 1 },\n \"bdi\": {},\n \"bdo\": {},\n \"blockquote\": { \"cite\": 1 },\n \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n \"br\": {},\n \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n \"canvas\": { \"width\": 1, \"height\": 1 },\n \"caption\": {},\n \"cite\": {},\n \"code\": {},\n \"col\": { \"span\": 1 },\n \"colgroup\": { \"span\": 1 },\n \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n \"data\": {},\n \"datalist\": {},\n \"dd\": {},\n \"del\": { \"cite\": 1, \"datetime\": 1 },\n \"details\": { \"open\": 1 },\n \"dfn\": {},\n \"dialog\": { \"open\": 1 },\n \"div\": {},\n \"dl\": {},\n \"dt\": {},\n \"em\": {},\n \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n \"figcaption\": {},\n \"figure\": {},\n \"footer\": {},\n \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n \"h1\": {},\n \"h2\": {},\n \"h3\": {},\n \"h4\": {},\n \"h5\": {},\n \"h6\": {},\n \"head\": {},\n \"header\": {},\n \"hr\": {},\n \"html\": { \"manifest\": 1 },\n \"i\": {},\n \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n \"input\": {\n \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n },\n \"ins\": { \"cite\": 1, \"datetime\": 1 },\n \"kbd\": {},\n \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n \"label\": { \"form\": 1, \"for\": 1 },\n \"legend\": {},\n \"li\": { \"value\": 1 },\n \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n \"main\": {},\n \"map\": { \"name\": 1 },\n \"mark\": {},\n \"math\": {},\n \"menu\": { \"type\": 1, \"label\": 1 },\n \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n \"nav\": {},\n \"noscript\": { \"href\": 1 },\n \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n \"ol\": { \"start\": 1, \"reversed\": 1 },\n \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n \"p\": {},\n \"param\": { \"name\": 1, \"value\": 1 },\n \"pre\": {},\n \"progress\": { \"value\": 1, \"max\": 1 },\n \"q\": { \"cite\": 1 },\n \"rp\": {},\n \"rt\": {},\n \"ruby\": {},\n \"s\": {},\n \"samp\": {},\n \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n \"small\": {},\n \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n \"span\": {},\n \"strong\": {},\n \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n \"sub\": {},\n \"sup\": {},\n \"svg\": {},\n \"table\": { \"summary\": 1 },\n \"tbody\": {},\n \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n \"tfoot\": {},\n \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n \"thead\": {},\n \"time\": { \"datetime\": 1 },\n \"title\": {},\n \"tr\": {},\n \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n \"section\": {},\n \"summary\": {},\n \"u\": {},\n \"ul\": {},\n \"var\": {},\n \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n while (token && !is(token, \"tag-name\")) {\n token = iterator.stepBackward();\n }\n if (token)\n return token.value;\n}\nfunction findAttributeName(session, pos) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n while (token && !is(token, \"attribute-name\")) {\n token = iterator.stepBackward();\n }\n if (token)\n return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n this.getCompletions = function (state, session, pos, prefix) {\n var token = session.getTokenAt(pos.row, pos.column);\n if (!token)\n return [];\n if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n return this.getTagCompletions(state, session, pos, prefix);\n if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n return this.getAttributeCompletions(state, session, pos, prefix);\n if (is(token, \"attribute-value\"))\n return this.getAttributeValueCompletions(state, session, pos, prefix);\n var line = session.getLine(pos.row).substr(0, pos.column);\n if (/&[a-z]*$/i.test(line))\n return this.getHTMLEntityCompletions(state, session, pos, prefix);\n return [];\n };\n this.getTagCompletions = function (state, session, pos, prefix) {\n return elements.map(function (element) {\n return {\n value: element,\n meta: \"tag\",\n score: 1000000\n };\n });\n };\n this.getAttributeCompletions = function (state, session, pos, prefix) {\n var tagName = findTagName(session, pos);\n if (!tagName)\n return [];\n var attributes = globalAttributes;\n if (tagName in attributeMap) {\n attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n }\n return attributes.map(function (attribute) {\n return {\n caption: attribute,\n snippet: attribute + '=\"$0\"',\n meta: \"attribute\",\n score: 1000000\n };\n });\n };\n this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n var tagName = findTagName(session, pos);\n var attributeName = findAttributeName(session, pos);\n if (!tagName)\n return [];\n var values = [];\n if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n values = Object.keys(attributeMap[tagName][attributeName]);\n }\n return values.map(function (value) {\n return {\n caption: value,\n snippet: value,\n meta: \"attribute value\",\n score: 1000000\n };\n });\n };\n this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n return values.map(function (value) {\n return {\n caption: value,\n snippet: value,\n meta: \"html entity\",\n score: 1000000\n };\n });\n };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n this.fragmentContext = options && options.fragmentContext;\n this.HighlightRules = HtmlHighlightRules;\n this.$behaviour = new XmlBehaviour();\n this.$completer = new HtmlCompletions();\n this.createModeDelegates({\n \"js-\": JavaScriptMode,\n \"css-\": CssMode\n });\n this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n this.blockComment = { start: \"<!--\", end: \"-->\" };\n this.voidElements = lang.arrayToMap(voidElements);\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.getCompletions = function (state, session, pos, prefix) {\n return this.$completer.getCompletions(state, session, pos, prefix);\n };\n this.createWorker = function (session) {\n if (this.constructor != Mode)\n return;\n var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n worker.attachToDocument(session.getDocument());\n if (this.fragmentContext)\n worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n worker.on(\"error\", function (e) {\n session.setAnnotations(e.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n this.$id = \"ace/mode/html\";\n this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n}); (function() {\n ace.require([\"ace/mode/html\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/chrome.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-chrome .ace_gutter {\\n background: #ebebeb;\\n color: #333;\\n overflow : hidden;\\n}\\n\\n.ace-chrome .ace_print-margin {\\n width: 1px;\\n background: #e8e8e8;\\n}\\n\\n.ace-chrome {\\n background-color: #FFFFFF;\\n color: black;\\n}\\n\\n.ace-chrome .ace_cursor {\\n color: black;\\n}\\n\\n.ace-chrome .ace_invisible {\\n color: rgb(191, 191, 191);\\n}\\n\\n.ace-chrome .ace_constant.ace_buildin {\\n color: rgb(88, 72, 246);\\n}\\n\\n.ace-chrome .ace_constant.ace_language {\\n color: rgb(88, 92, 246);\\n}\\n\\n.ace-chrome .ace_constant.ace_library {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-chrome .ace_invalid {\\n background-color: rgb(153, 0, 0);\\n color: white;\\n}\\n\\n.ace-chrome .ace_fold {\\n}\\n\\n.ace-chrome .ace_support.ace_function {\\n color: rgb(60, 76, 114);\\n}\\n\\n.ace-chrome .ace_support.ace_constant {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-chrome .ace_support.ace_type,\\n.ace-chrome .ace_support.ace_class\\n.ace-chrome .ace_support.ace_other {\\n color: rgb(109, 121, 222);\\n}\\n\\n.ace-chrome .ace_variable.ace_parameter {\\n font-style:italic;\\n color:#FD971F;\\n}\\n.ace-chrome .ace_keyword.ace_operator {\\n color: rgb(104, 118, 135);\\n}\\n\\n.ace-chrome .ace_comment {\\n color: #236e24;\\n}\\n\\n.ace-chrome .ace_comment.ace_doc {\\n color: #236e24;\\n}\\n\\n.ace-chrome .ace_comment.ace_doc.ace_tag {\\n color: #236e24;\\n}\\n\\n.ace-chrome .ace_constant.ace_numeric {\\n color: rgb(0, 0, 205);\\n}\\n\\n.ace-chrome .ace_variable {\\n color: rgb(49, 132, 149);\\n}\\n\\n.ace-chrome .ace_xml-pe {\\n color: rgb(104, 104, 91);\\n}\\n\\n.ace-chrome .ace_entity.ace_name.ace_function {\\n color: #0000A2;\\n}\\n\\n\\n.ace-chrome .ace_heading {\\n color: rgb(12, 7, 255);\\n}\\n\\n.ace-chrome .ace_list {\\n color:rgb(185, 6, 144);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_selection {\\n background: rgb(181, 213, 255);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_step {\\n background: rgb(252, 255, 0);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_stack {\\n background: rgb(164, 229, 101);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_active-line {\\n background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-chrome .ace_gutter-active-line {\\n background-color : #dcdcdc;\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_selected-word {\\n background: rgb(250, 250, 255);\\n border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-chrome .ace_storage,\\n.ace-chrome .ace_keyword,\\n.ace-chrome .ace_meta.ace_tag {\\n color: rgb(147, 15, 128);\\n}\\n\\n.ace-chrome .ace_string.ace_regex {\\n color: rgb(255, 0, 0)\\n}\\n\\n.ace-chrome .ace_string {\\n color: #1A1AA6;\\n}\\n\\n.ace-chrome .ace_entity.ace_other.ace_attribute-name {\\n color: #994409;\\n}\\n\\n.ace-chrome .ace_indent-guide {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n \\n.ace-chrome .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/chrome\",[\"require\",\"exports\",\"module\",\"ace/theme/chrome.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-chrome\";\nexports.cssText = require(\"./chrome.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n}); (function() {\n ace.require([\"ace/theme/chrome\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/tomorrow_night.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tomorrow-night .ace_gutter {\\n background: #25282c;\\n color: #C5C8C6\\n}\\n\\n.ace-tomorrow-night .ace_print-margin {\\n width: 1px;\\n background: #25282c\\n}\\n\\n.ace-tomorrow-night {\\n background-color: #1D1F21;\\n color: #C5C8C6\\n}\\n\\n.ace-tomorrow-night .ace_cursor {\\n color: #AEAFAD\\n}\\n\\n.ace-tomorrow-night .ace_marker-layer .ace_selection {\\n background: #373B41\\n}\\n\\n.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px #1D1F21;\\n}\\n\\n.ace-tomorrow-night .ace_marker-layer .ace_step {\\n background: rgb(102, 82, 0)\\n}\\n\\n.ace-tomorrow-night .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid #4B4E55\\n}\\n\\n.ace-tomorrow-night .ace_marker-layer .ace_active-line {\\n background: #282A2E\\n}\\n\\n.ace-tomorrow-night .ace_gutter-active-line {\\n background-color: #282A2E\\n}\\n\\n.ace-tomorrow-night .ace_marker-layer .ace_selected-word {\\n border: 1px solid #373B41\\n}\\n\\n.ace-tomorrow-night .ace_invisible {\\n color: #4B4E55\\n}\\n\\n.ace-tomorrow-night .ace_keyword,\\n.ace-tomorrow-night .ace_meta,\\n.ace-tomorrow-night .ace_storage,\\n.ace-tomorrow-night .ace_storage.ace_type,\\n.ace-tomorrow-night .ace_support.ace_type {\\n color: #B294BB\\n}\\n\\n.ace-tomorrow-night .ace_keyword.ace_operator {\\n color: #8ABEB7\\n}\\n\\n.ace-tomorrow-night .ace_constant.ace_character,\\n.ace-tomorrow-night .ace_constant.ace_language,\\n.ace-tomorrow-night .ace_constant.ace_numeric,\\n.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,\\n.ace-tomorrow-night .ace_support.ace_constant,\\n.ace-tomorrow-night .ace_variable.ace_parameter {\\n color: #DE935F\\n}\\n\\n.ace-tomorrow-night .ace_constant.ace_other {\\n color: #CED1CF\\n}\\n\\n.ace-tomorrow-night .ace_invalid {\\n color: #CED2CF;\\n background-color: #DF5F5F\\n}\\n\\n.ace-tomorrow-night .ace_invalid.ace_deprecated {\\n color: #CED2CF;\\n background-color: #B798BF\\n}\\n\\n.ace-tomorrow-night .ace_fold {\\n background-color: #81A2BE;\\n border-color: #C5C8C6\\n}\\n\\n.ace-tomorrow-night .ace_entity.ace_name.ace_function,\\n.ace-tomorrow-night .ace_support.ace_function,\\n.ace-tomorrow-night .ace_variable {\\n color: #81A2BE\\n}\\n\\n.ace-tomorrow-night .ace_support.ace_class,\\n.ace-tomorrow-night .ace_support.ace_type {\\n color: #F0C674\\n}\\n\\n.ace-tomorrow-night .ace_heading,\\n.ace-tomorrow-night .ace_markup.ace_heading,\\n.ace-tomorrow-night .ace_string {\\n color: #B5BD68\\n}\\n\\n.ace-tomorrow-night .ace_entity.ace_name.ace_tag,\\n.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,\\n.ace-tomorrow-night .ace_meta.ace_tag,\\n.ace-tomorrow-night .ace_string.ace_regexp,\\n.ace-tomorrow-night .ace_variable {\\n color: #CC6666\\n}\\n\\n.ace-tomorrow-night .ace_comment {\\n color: #969896\\n}\\n\\n.ace-tomorrow-night .ace_indent-guide {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-tomorrow-night .ace_indent-guide-active {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQIW2PQ1dX9zzBz5sz/ABCcBFFentLlAAAAAElFTkSuQmCC) right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/tomorrow_night\",[\"require\",\"exports\",\"module\",\"ace/theme/tomorrow_night.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night\";\nexports.cssText = require(\"./tomorrow_night.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n}); (function() {\n ace.require([\"ace/theme/tomorrow_night\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\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 = function () {\n this.snippetMap = {};\n this.snippetNameMap = {};\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.getTokenizer = function () {\n return SnippetManager.$tokenizer || this.createTokenizer();\n };\n this.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 this.tokenizeTmSnippet = function (str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n return x.value || x;\n });\n };\n this.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 this.variables = VARIABLES;\n this.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 this.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 this.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 this.insertSnippetForSelection = function (editor, snippetText) {\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\")\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 var range = editor.getSelectionRange();\n var end = editor.session.replace(range, text);\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n };\n this.insertSnippet = function (editor, snippetText) {\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText);\n editor.forEachSelection(function () {\n self.insertSnippetForSelection(editor, snippetText);\n }, null, { keepOrder: true });\n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\n };\n this.$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 this.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 this.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 this.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 this.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 this.snippetMap = {};\n this.snippetNameMap = {};\n this.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 this.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 this.parseSnippetFile = function (str) {\n str = str.replace(/\\r/g, \"\");\n var list = [], 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 this.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}).call(SnippetManager.prototype);\nvar TabstopManager = function (editor) {\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(function () {\n this.attach = function (editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n this.$openTabstops = null;\n this.selectedTabstop = null;\n this.editor = editor;\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 this.detach = function () {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges = null;\n this.tabstops = null;\n this.selectedTabstop = null;\n this.editor.removeListener(\"change\", this.$onChange);\n this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.editor = null;\n };\n this.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.editor.session;\n if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n this.detach();\n };\n this.updateLinkedFields = function () {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n return;\n this.$inChange = true;\n var session = this.editor.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 this.onAfterExec = function (e) {\n if (e.command && !e.command.readOnly)\n this.updateLinkedFields();\n };\n this.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 this.onChangeSession = function () {\n this.detach();\n };\n this.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 if (index === 0)\n this.detach();\n };\n this.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 this.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 tabstops.forEach(function (ts, index) {\n var dest = this.$openTabstops[index] || ts;\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 this.addTabstopMarkers = function (ts) {\n var session = this.editor.session;\n ts.forEach(function (range) {\n if (!range.markerId)\n range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n this.removeTabstopMarkers = function (ts) {\n var session = this.editor.session;\n ts.forEach(function (range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n this.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.editor.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 this.keyboardHandler = new HashHandler();\n this.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 });\n}).call(TabstopManager.prototype);\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\"], 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 getAriaId = function (index) {\n return \"suggest-aria-id:\".concat(index);\n};\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 = function (parentNode) {\n var el = dom.createElement(\"div\");\n var popup = new $singleLineEditor(el);\n if (parentNode)\n parentNode.appendChild(el);\n el.style.display = \"none\";\n popup.renderer.content.style.cursor = \"default\";\n popup.renderer.setStyle(\"ace_autocomplete\");\n popup.renderer.container.setAttribute(\"role\", \"listbox\");\n popup.renderer.container.setAttribute(\"aria-label\", \"Autocomplete suggestions\");\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 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 = t.element.childNodes[row - t.config.firstRow];\n var el = document.activeElement; // Active element is textarea of main editor\n if (selected !== t.selectedNode && t.selectedNode) {\n dom.removeCssClass(t.selectedNode, \"ace_selected\");\n el.removeAttribute(\"aria-activedescendant\");\n t.selectedNode.removeAttribute(\"id\");\n }\n t.selectedNode = selected;\n if (selected) {\n dom.addCssClass(selected, \"ace_selected\");\n var ariaId = getAriaId(row);\n selected.id = ariaId;\n popup.renderer.container.setAttribute(\"aria-activedescendant\", ariaId);\n el.setAttribute(\"aria-activedescendant\", ariaId);\n selected.setAttribute(\"role\", \"option\");\n selected.setAttribute(\"aria-label\", popup.getData(row).value);\n selected.setAttribute(\"aria-setsize\", popup.data.length);\n selected.setAttribute(\"aria-posinset\", row);\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\", hideHoverMarker);\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 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.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, 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 this._signal(\"hide\");\n popup.isOpen = false;\n };\n popup.show = function (pos, lineHeight, topdownOnly) {\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 top = pos.top + this.$borderSize;\n var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n el.style.top = \"\";\n el.style.bottom = screenHeight - top + \"px\";\n popup.isTopdown = false;\n }\n else {\n top += lineHeight;\n renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n el.style.top = 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 this._signal(\"show\");\n lastMouseEvent = null;\n popup.isOpen = 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};\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: 0.9em;\\n}\\n.ace_completion-message {\\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}\", \"autocompletion.css\", false);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\nexports.getAriaId = getAriaId;\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};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\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 Autocomplete = function () {\n this.autoInsert = false;\n this.autoSelect = true;\n this.exactMatch = false;\n this.gatherCompletionsId = 0;\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys(this.commands);\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.changeTimer = lang.delayedCall(function () {\n this.updateCompletions(true);\n }.bind(this));\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n(function () {\n this.$init = function () {\n this.popup = new AcePopup(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.tooltipTimer.bind(null, null));\n this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n return this.popup;\n };\n this.getPopup = function () {\n return this.popup || this.$init();\n };\n this.openPopup = function (editor, prefix, keepPopupPosition) {\n if (!this.popup)\n this.$init();\n this.popup.autoSelect = this.autoSelect;\n this.popup.setData(this.completions.filtered, this.completions.filterText);\n if (this.editor.textInput.setAriaOptions)\n this.editor.textInput.setAriaOptions({ activeDescendant: getAriaId(this.popup.getRow()) });\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n var renderer = editor.renderer;\n this.popup.setRow(this.autoSelect ? 0 : -1);\n if (!keepPopupPosition) {\n this.popup.setTheme(editor.getTheme());\n this.popup.setFontSize(editor.getFontSize());\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 this.popup.show(pos, lineHeight);\n }\n else if (keepPopupPosition && !prefix) {\n this.detach();\n }\n this.changeTimer.cancel();\n };\n this.detach = function () {\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 this.changeTimer.cancel();\n this.hideDocTooltip();\n this.gatherCompletionsId += 1;\n if (this.popup && this.popup.isOpen)\n this.popup.hide();\n if (this.base)\n this.base.detach();\n this.activated = false;\n this.completions = this.base = null;\n };\n this.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 this.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 this.mousedownListener = function (e) {\n this.detach();\n };\n this.mousewheelListener = function (e) {\n this.detach();\n };\n this.goTo = function (where) {\n this.popup.goTo(where);\n };\n this.insertMatch = function (data, options) {\n if (!data)\n data = this.popup.getData(this.popup.getRow());\n if (!data)\n return false;\n var completions = this.completions;\n this.editor.startOperation({ command: { name: \"insertMatch\" } });\n if (data.completer && data.completer.insertMatch) {\n data.completer.insertMatch(this.editor, data);\n }\n else {\n if (!completions)\n return false;\n if (completions.filterText) {\n var ranges = this.editor.selection.getAllRanges();\n for (var i = 0, range; range = ranges[i]; i++) {\n range.start.column -= completions.filterText.length;\n this.editor.session.remove(range);\n }\n }\n if (data.snippet)\n snippetManager.insertSnippet(this.editor, data.snippet);\n else\n this.editor.execCommand(\"insertstring\", data.value || data);\n }\n if (this.completions == completions)\n this.detach();\n this.editor.endOperation();\n };\n this.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 };\n this.gatherCompletions = function (editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(editor);\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\n var matches = [];\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 (!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 this.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 this.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 return this.openPopup(this.editor, \"\", keepPopupPosition);\n }\n var _id = this.gatherCompletionsId;\n var detachIfFinished = function (results) {\n if (!results.finished)\n return;\n return this.detach();\n }.bind(this);\n var processResults = function (results) {\n var prefix = results.prefix;\n var matches = results.matches;\n this.completions = new FilteredList(matches);\n if (this.exactMatch)\n this.completions.exactMatch = true;\n this.completions.setFilter(prefix);\n var filtered = this.completions.filtered;\n if (!filtered.length)\n return detachIfFinished(results);\n if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n return detachIfFinished(results);\n if (this.autoInsert && filtered.length == 1 && results.finished)\n return this.insertMatch(filtered[0]);\n this.openPopup(this.editor, prefix, keepPopupPosition);\n }.bind(this);\n var isImmediate = true;\n var immediateResults = null;\n this.gatherCompletions(this.editor, function (err, results) {\n var prefix = results.prefix;\n var matches = results && results.matches;\n if (!matches || !matches.length)\n return detachIfFinished(results);\n if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\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 this.cancelContextMenu = function () {\n this.editor.$mouseHandler.cancelContextMenu();\n };\n this.updateDocTooltip = function () {\n var popup = this.popup;\n var all = popup.data;\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 this.editor.completers.some(function (completer) {\n if (completer.getDocTooltip)\n doc = completer.getDocTooltip(selected);\n return doc;\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 this.showDocTooltip = function (item) {\n if (!this.tooltipNode) {\n this.tooltipNode = dom.createElement(\"div\");\n this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n this.tooltipNode.style.margin = 0;\n this.tooltipNode.style.pointerEvents = \"auto\";\n this.tooltipNode.tabIndex = -1;\n this.tooltipNode.onblur = this.blurListener.bind(this);\n this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n }\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 document.body.appendChild(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 this.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 this.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 this.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.completer == null;\n this.popup = null;\n };\n}).call(Autocomplete.prototype);\nAutocomplete.for = function (editor) {\n if (editor.completer) {\n return editor.completer;\n }\n if (config.get(\"sharedPopups\")) {\n if (!Autocomplete.$shared)\n Autocomplete.$sharedInstance = new Autocomplete();\n editor.completer = Autocomplete.$sharedInstance;\n }\n else {\n editor.completer = new Autocomplete();\n editor.once(\"destroy\", function (e, editor) {\n editor.completer.destroy();\n });\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.showPopup(editor, options);\n completer.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\nvar FilteredList = function (array, filterText) {\n this.all = array;\n this.filtered = array;\n this.filterText = filterText || \"\";\n this.exactMatch = false;\n};\n(function () {\n this.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 this.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 = 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}).call(FilteredList.prototype);\nexports.Autocomplete = Autocomplete;\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({ row: 0, column: 0 }, 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 callback(null, completions);\n }\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 type: \"snippet\"\n });\n }\n }, this);\n callback(null, completions);\n },\n getDocTooltip: function (item) {\n if (item.type == \"snippet\" && !item.docHTML) {\n item.docHTML = [\n \"<b>\", lang.escapeHTML(item.caption), \"</b>\", \"<hr></hr>\",\n lang.escapeHTML(transformSnippetTooltip(item.snippet))\n ].join(\"\");\n }\n }\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\") {\n var prefix = util.getCompletionPrefix(editor);\n if (prefix && !hasCompleter) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.showPopup(editor);\n }\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.removeListener('afterExec', doLiveAutocomplete);\n }\n },\n value: false\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/ext/beautify\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){// [WIP]\n\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nfunction is(token, type) {\n return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nexports.singletonTags = [\"area\", \"base\", \"br\", \"col\", \"command\", \"embed\", \"hr\", \"html\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"];\nexports.blockTags = [\"article\", \"aside\", \"blockquote\", \"body\", \"div\", \"dl\", \"fieldset\", \"footer\", \"form\", \"head\", \"header\", \"html\", \"nav\", \"ol\", \"p\", \"script\", \"section\", \"style\", \"table\", \"tbody\", \"tfoot\", \"thead\", \"ul\"];\nexports.formatOptions = {\n lineBreaksAfterCommasInCurlyBlock: true\n};\nexports.beautify = function (session) {\n var iterator = new TokenIterator(session, 0, 0);\n var token = iterator.getCurrentToken();\n var tabString = session.getTabString();\n var singletonTags = exports.singletonTags;\n var blockTags = exports.blockTags;\n var formatOptions = exports.formatOptions || {};\n var nextToken;\n var breakBefore = false;\n var spaceBefore = false;\n var spaceAfter = false;\n var code = \"\";\n var value = \"\";\n var tagName = \"\";\n var depth = 0;\n var lastDepth = 0;\n var lastIndent = 0;\n var indent = 0;\n var unindent = 0;\n var roundDepth = 0;\n var curlyDepth = 0;\n var row;\n var curRow = 0;\n var rowsToAdd = 0;\n var rowTokens = [];\n var abort = false;\n var i;\n var indentNextLine = false;\n var inTag = false;\n var inCSS = false;\n var inBlock = false;\n var levels = { 0: 0 };\n var parents = [];\n var caseBody = false;\n var trimNext = function () {\n if (nextToken && nextToken.value && nextToken.type !== 'string.regexp')\n nextToken.value = nextToken.value.replace(/^\\s*/, \"\");\n };\n var trimLine = function () {\n var end = code.length - 1;\n while (true) {\n if (end == 0)\n break;\n if (code[end] !== \" \")\n break;\n end = end - 1;\n }\n code = code.slice(0, end + 1);\n };\n var trimCode = function () {\n code = code.trimRight();\n breakBefore = false;\n };\n while (token !== null) {\n curRow = iterator.getCurrentTokenRow();\n rowTokens = iterator.$rowTokens;\n nextToken = iterator.stepForward();\n if (typeof token !== \"undefined\") {\n value = token.value;\n unindent = 0;\n inCSS = (tagName === \"style\" || session.$modeId === \"ace/mode/css\");\n if (is(token, \"tag-open\")) {\n inTag = true;\n if (nextToken)\n inBlock = (blockTags.indexOf(nextToken.value) !== -1);\n if (value === \"</\") {\n if (inBlock && !breakBefore && rowsToAdd < 1)\n rowsToAdd++;\n if (inCSS)\n rowsToAdd = 1;\n unindent = 1;\n inBlock = false;\n }\n }\n else if (is(token, \"tag-close\")) {\n inTag = false;\n }\n else if (is(token, \"comment.start\")) {\n inBlock = true;\n }\n else if (is(token, \"comment.end\")) {\n inBlock = false;\n }\n if (!inTag && !rowsToAdd && token.type === \"paren.rparen\" && token.value.substr(0, 1) === \"}\") {\n rowsToAdd++;\n }\n if (curRow !== row) {\n rowsToAdd = curRow;\n if (row)\n rowsToAdd -= row;\n }\n if (rowsToAdd) {\n trimCode();\n for (; rowsToAdd > 0; rowsToAdd--)\n code += \"\\n\";\n breakBefore = true;\n if (!is(token, \"comment\") && !token.type.match(/^(comment|string)$/))\n value = value.trimLeft();\n }\n if (value) {\n if (token.type === \"keyword\" && value.match(/^(if|else|elseif|for|foreach|while|switch)$/)) {\n parents[depth] = value;\n trimNext();\n spaceAfter = true;\n if (value.match(/^(else|elseif)$/)) {\n if (code.match(/\\}[\\s]*$/)) {\n trimCode();\n spaceBefore = true;\n }\n }\n }\n else if (token.type === \"paren.lparen\") {\n trimNext();\n if (value.substr(-1) === \"{\") {\n spaceAfter = true;\n indentNextLine = false;\n if (!inTag)\n rowsToAdd = 1;\n }\n if (value.substr(0, 1) === \"{\") {\n spaceBefore = true;\n if (code.substr(-1) !== '[' && code.trimRight().substr(-1) === '[') {\n trimCode();\n spaceBefore = false;\n }\n else if (code.trimRight().substr(-1) === ')') {\n trimCode();\n }\n else {\n trimLine();\n }\n }\n }\n else if (token.type === \"paren.rparen\") {\n unindent = 1;\n if (value.substr(0, 1) === \"}\") {\n if (parents[depth - 1] === 'case')\n unindent++;\n if (code.trimRight().substr(-1) === '{') {\n trimCode();\n }\n else {\n spaceBefore = true;\n if (inCSS)\n rowsToAdd += 2;\n }\n }\n if (value.substr(0, 1) === \"]\") {\n if (code.substr(-1) !== '}' && code.trimRight().substr(-1) === '}') {\n spaceBefore = false;\n indent++;\n trimCode();\n }\n }\n if (value.substr(0, 1) === \")\") {\n if (code.substr(-1) !== '(' && code.trimRight().substr(-1) === '(') {\n spaceBefore = false;\n indent++;\n trimCode();\n }\n }\n trimLine();\n }\n else if ((token.type === \"keyword.operator\" || token.type === \"keyword\") && value.match(/^(=|==|===|!=|!==|&&|\\|\\||and|or|xor|\\+=|.=|>|>=|<|<=|=>)$/)) {\n trimCode();\n trimNext();\n spaceBefore = true;\n spaceAfter = true;\n }\n else if (token.type === \"punctuation.operator\" && value === ';') {\n trimCode();\n trimNext();\n spaceAfter = true;\n if (inCSS)\n rowsToAdd++;\n }\n else if (token.type === \"punctuation.operator\" && value.match(/^(:|,)$/)) {\n trimCode();\n trimNext();\n if (value.match(/^(,)$/) && curlyDepth > 0 && roundDepth === 0 && formatOptions.lineBreaksAfterCommasInCurlyBlock) {\n rowsToAdd++;\n }\n else {\n spaceAfter = true;\n breakBefore = false;\n }\n }\n else if (token.type === \"support.php_tag\" && value === \"?>\" && !breakBefore) {\n trimCode();\n spaceBefore = true;\n }\n else if (is(token, \"attribute-name\") && code.substr(-1).match(/^\\s$/)) {\n spaceBefore = true;\n }\n else if (is(token, \"attribute-equals\")) {\n trimLine();\n trimNext();\n }\n else if (is(token, \"tag-close\")) {\n trimLine();\n if (value === \"/>\")\n spaceBefore = true;\n }\n else if (token.type === \"keyword\" && value.match(/^(case|default)$/)) {\n if (caseBody)\n unindent = 1;\n }\n if (breakBefore && !(token.type.match(/^(comment)$/) && !value.substr(0, 1).match(/^[/#]$/)) && !(token.type.match(/^(string)$/) && !value.substr(0, 1).match(/^['\"@]$/))) {\n indent = lastIndent;\n if (depth > lastDepth) {\n indent++;\n for (i = depth; i > lastDepth; i--)\n levels[i] = indent;\n }\n else if (depth < lastDepth)\n indent = levels[depth];\n lastDepth = depth;\n lastIndent = indent;\n if (unindent)\n indent -= unindent;\n if (indentNextLine && !roundDepth) {\n indent++;\n indentNextLine = false;\n }\n for (i = 0; i < indent; i++)\n code += tabString;\n }\n if (token.type === \"keyword\" && value.match(/^(case|default)$/)) {\n if (caseBody === false) {\n parents[depth] = value;\n depth++;\n caseBody = true;\n }\n }\n else if (token.type === \"keyword\" && value.match(/^(break)$/)) {\n if (parents[depth - 1] && parents[depth - 1].match(/^(case|default)$/)) {\n depth--;\n caseBody = false;\n }\n }\n if (token.type === \"paren.lparen\") {\n roundDepth += (value.match(/\\(/g) || []).length;\n curlyDepth += (value.match(/\\{/g) || []).length;\n depth += value.length;\n }\n if (token.type === \"keyword\" && value.match(/^(if|else|elseif|for|while)$/)) {\n indentNextLine = true;\n roundDepth = 0;\n }\n else if (!roundDepth && value.trim() && token.type !== \"comment\")\n indentNextLine = false;\n if (token.type === \"paren.rparen\") {\n roundDepth -= (value.match(/\\)/g) || []).length;\n curlyDepth -= (value.match(/\\}/g) || []).length;\n for (i = 0; i < value.length; i++) {\n depth--;\n if (value.substr(i, 1) === '}' && parents[depth] === 'case') {\n depth--;\n }\n }\n }\n if (token.type == \"text\")\n value = value.replace(/\\s+$/, \" \");\n if (spaceBefore && !breakBefore) {\n trimLine();\n if (code.substr(-1) !== \"\\n\")\n code += \" \";\n }\n code += value;\n if (spaceAfter)\n code += \" \";\n breakBefore = false;\n spaceBefore = false;\n spaceAfter = false;\n if ((is(token, \"tag-close\") && (inBlock || blockTags.indexOf(tagName) !== -1)) || (is(token, \"doctype\") && value === \">\")) {\n if (inBlock && nextToken && nextToken.value === \"</\")\n rowsToAdd = -1;\n else\n rowsToAdd = 1;\n }\n if (nextToken && singletonTags.indexOf(nextToken.value) === -1) {\n if (is(token, \"tag-open\") && value === \"</\") {\n depth--;\n }\n else if (is(token, \"tag-open\") && value === \"<\") {\n depth++;\n }\n else if (is(token, \"tag-close\") && value === \"/>\") {\n depth--;\n }\n }\n if (is(token, \"tag-name\")) {\n tagName = value;\n }\n row = curRow;\n }\n }\n token = nextToken;\n }\n code = code.trim();\n session.doc.setValue(code);\n};\nexports.commands = [{\n name: \"beautify\",\n description: \"Format selection (Beautify)\",\n exec: function (editor) {\n exports.beautify(editor.session);\n },\n bindKey: \"Ctrl-Shift-B\"\n }];\n\n}); (function() {\n ace.require([\"ace/ext/beautify\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","import ace from 'ace-builds/src-noconflict/ace';\nimport cssWorkerUrl from 'ace-builds/src-noconflict/worker-css?url';\nimport htmlWorkerUrl from 'ace-builds/src-noconflict/worker-html?url';\nimport javascriptWorkerUrl from 'ace-builds/src-noconflict/worker-javascript?url';\nimport React, {useEffect, useRef} from 'react';\nimport AceEditorRender from 'react-ace';\nimport 'ace-builds/src-noconflict/mode-css';\nimport 'ace-builds/src-noconflict/mode-html';\nimport 'ace-builds/src-noconflict/theme-chrome';\nimport 'ace-builds/src-noconflict/theme-tomorrow_night';\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport Beautify from 'ace-builds/src-noconflict/ext-beautify';\nimport {useIsDarkMode} from '../ui/themes/use-is-dark-mode';\n\nace.config.setModuleUrl('ace/mode/css_worker', cssWorkerUrl);\nace.config.setModuleUrl('ace/mode/html_worker', htmlWorkerUrl);\nace.config.setModuleUrl('ace/mode/javascript_worker', javascriptWorkerUrl);\n\ninterface Props {\n mode: 'css' | 'html';\n onChange: (value: string) => void;\n onIsValidChange: (isValid: boolean) => void;\n defaultValue: string;\n}\nexport default function AceEditor({\n mode,\n onChange,\n onIsValidChange,\n defaultValue,\n}: Props) {\n const isDarkMode = useIsDarkMode();\n const editorRef = useRef<any>();\n\n useEffect(() => {\n Beautify.beautify(editorRef.current.editor.session);\n }, []);\n\n return (\n <AceEditorRender\n ref={editorRef}\n width=\"auto\"\n height=\"auto\"\n wrapEnabled\n className=\"absolute inset-0\"\n focus\n mode={mode}\n theme={isDarkMode ? 'tomorrow_night' : 'chrome'}\n enableBasicAutocompletion\n enableLiveAutocompletion\n defaultValue={defaultValue}\n onChange={onChange}\n editorProps={{$blockScrolling: true}}\n commands={Beautify.commands}\n onValidate={annotations => {\n const isValid =\n annotations.filter(a => a.type === 'error').length === 0;\n onIsValidChange(isValid);\n }}\n />\n );\n}\n"],"names":["ACE_NAMESPACE","global","define","module","deps","payload","_require","parentId","callback","lookup","params","i","l","dep","require","packagedModule","normalizeModule","moduleName","chunks","base","previous","exports","mod","req","returnValue","exportAce","ns","root","defineProp","obj","name","val","searchString","position","subjectString","lastIndex","count","result","string","str","target","output","index","source","key","o","k","predicate","len","thisArg","kValue","item","value","O","start","relativeStart","end","relativeEnd","final","a","trimBeginRegexp","trimEndRegexp","copy","array","deepCopy","arr","map","props","regExp","matches","fcn","timer","deferred","timeout","defaultTimeout","_self","ctor","superCtor","mixin","proto","_navigator","os","ua","appName","useragent","XHTML_NS","buildDom","parent","refs","txt","els","ch","el","options","childIndex","n","doc","tag","element","textContent","classes","add","node","className","include","id","sheets","strictCSP","cssCache","insertPendingStyles","cache","importCssString","cssText","container","style","uri","inner","outer","body","noScrollbar","withScrollbar","styles","property","div","tx","ty","dom","url","xhr","path","head","s","_","isAbort","EventEmitter","stopPropagation","preventDefault","eventName","e","listeners","defaultHandler","newCallback","resolve","handlers","old","disabled","capturing","oop","optionsProvider","optList","optionNames","opt","warn","message","reportError","msg","data","AppConfig","opts","optionHash","lang","net","component","parts","sep","re","subst","loader","cb","onLoad","moduleType","load","afterLoad","err","reportErrorIfPathIsNotConfigured","config","ace","init","packaged","scriptOptions","scriptUrl","currentScript","currentDocument","scripts","script","src","attributes","j","attr","deHyphenate","m","m1","Keys","ret","mods","x","keyCode","keyString","keys","pressedKeys","ts","activeListenerOptions","detectListenerOptionsSupport","getListenerOptions","EventListener","elem","type","removeListener","addListener","destroyer","eventHandler","releaseCaptureHandler","ownerDocument","onMouseUp","factor","deltaX","deltaY","linePixels","pagePixels","elements","timeouts","callbackName","clicks","startX","startY","eventNames","onMousedown","isNewClick","getModifierHash","normalizeCommandKeys","hashId","location","dt","lastKeyDownKeyCode","lastDefaultPrevented","resetPressedKeys","postMessageId","win","messageName","listener","handler","delay","comparePoints","p1","p2","Range","startRow","startColumn","endRow","endColumn","range","row","column","cmp","p","firstRow","lastRow","session","screenPosStart","screenPosEnd","$cancelT","event","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","isIOS","valueResetRegex","isMobile","TextInput","parentNode","host","text","copied","pasted","inComposition","sendingText","tempStyle","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","isFocused","resetSelection","top","isTransformed","ancestors","t","curOp","commandName","isUserAction","onCompositionEnd","newValue","selectionStart","selectionEnd","afterContextMenu","line","selection","prevLine","nextLine","isAllSelected","onSelect","inputHandler","sendText","fromInput","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","shouldReset","onInput","onCompositionUpdate","handleClipboardData","forceIEMime","clipboardData","mime","doCopy","isCut","onCut","onCopy","onPaste","onCompositionStart","cancelComposition","syncComposition","onKeyup","readOnly","bringToFront","rect","left","maxTop","move","closeTimeout","onContextMenuClose","onContextMenu","addIosSelectionHandler","typingResetTimeout","typing","detectArrowKeys","modifier","command","_isMobile","_isIOS","DRAG_OFFSET","SCROLL_COOLDOWN_T","DefaultHandlers","mouseHandler","editor","ev","inSelection","pos","button","selectionRange","selectionEmpty","waitForClickSelection","anchor","cursor","orientedRange","calcRangeOrientation","unitName","cmpStart","cmpEnd","distance","calcDistance","time","prevScroll","vx","vy","direction","canScroll","isSlower","ax","ay","bx","by","CLASSNAME","Tooltip","html","y","GutterHandler","gutter","tooltip","GutterTooltip","gutterRegion","tooltipTimeout","mouseEvent","tooltipAnnotation","showTooltip","annotation","hideTooltip","maxRow","screenRow","annotationClassName","moveTooltip","gutterElement","windowWidth","windowHeight","width","height","MouseEvent","domEvent","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","dragImage","mouseTarget","dragSelectionMarker","timerId","dragCursor","counter","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","self","dataTransfer","dropEffect","canAccept","addDragMarker","getDropEffect","onMouseMoveTimer","clearDragMarker","dropData","scrollCursorIntoView","prevCursor","now","vMovement","hMovement","autoScroll","lineHeight","characterWidth","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","onDragInterval","onMouseMove","types","copyAllowed","moveAllowed","copyModifierState","effectAllowed","interval","cursorStyle","clickCount","eventTarget","mode","touchStartT","lastT","longTouchTimer","animationTimer","animationSteps","vX","vY","pressed","contextMenu","createContextMenu","isOpen","updateMenu","selected","hasUndo","handleClick","action","showContextMenu","pagePos","leftOffset","scrollLeft","hideContextMenu","handleLongTap","switchToSelectionMode","textarea","touches","h","w","touchObj","cursorPos","anchorPos","offsetTop","offsetLeft","weightedDistance","diff1","diff2","animate","wheelX","wheelY","oldScrollTop","DefaultGutterHandler","addTouchListeners","MouseHandler","focusEditor","windowBlurred","gutterEl","character","renderer","state","mouseMoveHandler","onCaptureEnd","onOperationEnd","onCaptureInterval","stop","FoldHandler","fold","keyUtil","KeyBinding","kb","toExecute","success","commands","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","LTR","RTL","L","R","EN","AN","ON","B","S","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_computeLevels","chars","levels","charTypes","impTab","prevState","newClass","newLevel","newState","cond","condPos","ix","_getCharacterType","_getCharClass","_invertLevel","lev","_array","lo","hi","tmp","cType","wType","nType","c","rtlCandidate","uc","textCharTypes","isRtl","logicalFromVisual","bidiLevels","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","docRow","splitIndex","delta","rowCache","currentIndex","prevIndex","isLastRow","endOfLine","splits","shift","size","fontMetrics","bidiCharWidth","showInvisibles","eolChar","isRtlDir","col","leftBoundary","logicalIdx","visualIdx","startCol","endCol","level","selections","offset","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","posX","charWidth","Selection","lead","reverse","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","mover","excludeLastChar","rowStart","rowEnd","foldLine","tabSize","firstColumnPosition","beforeCursor","leadingSpace","lineEnd","textEnd","rightOfCursor","leftOfCursor","whitespaceRe","tokenRe","rows","screenPos","offsetX","widget","docPos","keepDesiredColumn","r","func","r1","MAX_TOKEN_COUNT","Tokenizer","rules","ruleRegExps","matchTotal","mapping","flag","splitterRurles","rule","adjustedregex","matchcount","match","digit","values","tokens","stack","inChClass","lastCapture","esc","parenOpen","parenClose","square","startState","currentState","matchAttempts","token","skipped","TextHighlightRules","prefix","HighlightRules","escapeRules","states","append","embedRules","addRules","pushState","popState","processState","toInsert","next","stateName","includeName","args","defaultToken","ignoreCase","splitChar","keywords","list","word","Behaviour","behaviours","filter","TokenIterator","initialRow","initialColumn","rowCount","rowTokens","tokenIndex","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","context","contextCache","defaultQuotes","initContext","getWrapped","opening","closing","rowDiff","CstyleBehaviour","rightChar","matching","openBracePos","next_indent","indent","quotes","quote","leftChar","rightToken","stringBefore","stringAfter","pair","wordRe","isWordBefore","isWordAfter","charBefore","iterator","iterator2","bracket","wordChars","code","unicode","Mode","ignoreBlankLines","shouldRemove","minIndent","insertAtTabStop","regexpStart","lineCommentStart","uncomment","shouldInsertSpace","commentWithSpace","comment","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","fun","minEmptyLength","initialRange","colDiff","startRange","endRange","tab","input","delegations","scope","functionName","method","language","split","param","completionKeywords","ruleItr","aLength","docLines","doNotValidate","lines","Anchor","point","$getTransformedPoint","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","noClip","applyDelta","Document","textOrLines","newLineMode","length","deleteFirstNewLine","deleteLastNewLine","deletedLines","deltas","isInsert","docLength","MAX","from","to","chunk","newlineLength","BackgroundTokenizer","tokenizer","workerStart","currentLine","endLine","startLine","processedLines","SearchHighlight","clazz","markerLayer","renderedMarkerRanges","ranges","rangeToAddMarkerTo","rangeAsString","FoldLine","foldData","folds","last","b","lastEnd","isNewRow","foldBefore","newFoldLine","foldLineNext","idx","lastFoldEndColumn","RangeList","excludeEdges","startIndex","removed","clipped","lineDif","Fold","placeholder","subFold","consumeRange","afterStart","firstConsumed","consumedFolds","restoreRange","consumePoint","restorePoint","Folding","side","foldLines","foundFolds","trim","lastFold","startFoldLine","first","added","startFold","endFold","cloneFolds","expandInner","outermostFolds","startFoldRow","textLine","lastColumn","fd","tryToUnfold","bracketPos","depth","test","foldWidgets","foldMode","ignoreCurrent","fw","firstRange","toggleParent","BracketMatch","chr","charBeforeCursor","isBackwards","bracketsRegExp","typeRe","openBracket","valueIndex","closingBracket","valueLength","prevToken","found","backward","currentTag","openTagStart","openTagName","foundOpenTagEnd","openTagEnd","closeTagStart","closeTagName","closeTagEnd","stepCount","tmpToken","TextMode","EditSession","cacheArray","low","mid","removedFolds","undoManager","navigateWithinSoftTabs","overwrite","inFront","marker","markerId","markers","highlight","annotations","inToken","wordRange","useWorker","$isPlaceholder","oldMode","onReloadTokenizer","scrollTop","force","longestScreenLine","foldIndex","foldStart","dontSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentString","rowRange","deleteRange","diff","useWrapMode","min","max","desiredLimit","$printMargin","limits","wrapLimit","limit","foldLineBefore","wrapData","walkTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","CHAR","CHAR_EXT","PUNCTUATION","SPACE","TAB","TAB_SPACE","displayLength","lastSplit","lastDocSplit","isCode","indentedSoftWrap","maxIndent","getWrapIndent","indentation","addSplit","minSplit","isFullWidth","maxScreenColumn","screenColumn","docColumn","rowLength","doCache","wrapIndent","foldStartRow","wrapRow","screenRowOffset","screenRows","fm","Search","sr","sc","er","ec","prevRange","replacement","$disableFakeMultiline","needle","addWordBoundary","backwards","skipCurrent","forEach","forEachInLine","wordBoundary","KEY_MODS","HashHandler","platform","MultiHashHandler","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","getPosition","other","otherPos","keyList","CommandManager","bindKey","mac","cutLine","firstLineEndCol","selectedText","selectedCount","insertLine","curLine","newRanges","LineWidgets","lineWidgets","hide","noWidgets","w1","changedWidgets","__values","defaultCommands","Editor","commandEvent","scrollIntoView","sel","prev","mergeableCommands","shouldMerge","keyboardHandler","oldSession","theme","tagNamesRanges","markerType","wrap","wordWithBoundary","nl","copyLine","lineMode","isFullLine","transform","d","lineState","shouldOutdent","lineIndent","selectedRange","prevLineState","currIndent","composition","applyComposition","speed","dragDelay","shouldHighlight","shouldAnimate","display","showPrintMargin","enabled","show","fade","new_range","swap","originalRange","_numberRx","number","amount","charRange","nr","fp","decimals","nnr","replaceRange","currWordStart","wordParts","curLength","itLength","that","wordPairs","reg","negate","firstCondition","secondCondition","res","e_1","_a","columnPosition","previousPosition","currentPosition","wordParts_1","wordParts_1_1","e_1_1","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","select","center","expand","tokenCount","matchType","bracketType","brackets","tagsRanges","lineNumber","times","replaced","newRange","shouldScroll","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","cursorLayer","relativeNumberRenderer","lastLineNumber","UndoManager","allowMerge","undoStackLength","rev","rearrangeUndoStack","deltaSet","undoSelectionRange","rebaseRedoStack","redoSelectionRange","nextDelta","stringifyDelta","swapped","swapGroups","clonePos","cloneDelta","stringifyRange","d1","d2","i1","i2","ds1","ds2","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","rest","moveDeltasByOne","redoStack","xformed","deltaSets","Lines","canvasHeight","oldConfig","newConfig","screenTop","screenPage","lineTop","cell","fragment","initElement","Gutter","parentEl","rowInfo","annoText","onCreateCell","gutterRenderer","firstLineNumber","lastLineText","gutterWidth","padding","cells","oldLastRow","textNode","foldWidget","breakpoints","decorations","foldHeight","highlightGutterLine","Marker","css","layerConfig","getBorderClass","tl","tr","br","bl","stringBuilder","extraStyle","curr","lineRange","range1","radiusClass","extraLength","Text","unixMode","EOL_CHAR","measure","tabStr","span","spaceClass","spaceContent","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","lineElement","lineEl","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cols","initialIndent","elementIndentLevel","bracketHighlight","currentIndent","childNodes","indentLevel","splitChars","overflowEl","lastLineEl","invisibleEl","renderTokens","addTokens","Cursor","cursors","blinking","blinkInterval","smoothBlinking","update","blink","onScreen","cursorLeft","cursorTop","pixelPos","cursorIndex","MAX_SCROLL_H","ScrollBar","isVisible","VScrollBar","HScrollBar","eType","mousePageY","startTop","onScrollInterval","thumbTop","mousePageX","startLeft","thumbLeft","RenderLoop","onRender","changes","change","CHAR_COUNT","USE_OBSERVER","FontMetrics","isRoot","boldSize","getZoom","clientPos","elPos","zoom","mul","solve","l1","l2","det","sub","m2","ut","u","f","Decorator","colors","allLineHeight","ctx","compare","priorities","compensateFold","currentY","y1","y2","yCenter","GutterLayer","MarkerLayer","TextLayer","CursorLayer","HScrollBarCustom","VScrollBarCustom","editorCss","HIDE_TEXTAREA","VirtualRenderer","textLayer","oldSize","right","availableWidth","containerEl","posTop","posLeft","bottom","sm","alwaysVisible","scrollHeight","scrollerHeight","st","maxHeight","desiredHeight","hideScrollbars","screenLines","longestLine","horizScroll","hScrollChanged","vScrollBefore","minHeight","scrollPastEnd","vScrollChanged","lineCount","firstRowScreen","firstRowHeight","charCount","$viewMargin","newLeft","newTop","topMargin","bottomMargin","currentTop","currentLeft","twoCharsWidth","alignment","fromValue","toValue","steps","x_min","dx","initialScroll","oldSteps","endAnimation","canvasPos","insertPosition","textLines","newToken","$workerBlob","workerUrl","BlobBuilder","blobBuilder","createWorker","blob","URL","blobURL","WorkerClient","worker","topLevelNamespaces","classname","importScripts","normalizePath","tlns","cmd","ex","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","callbackId","Main","PlaceHolder","others","mainClass","othersClass","undoStack","lengthDiff","inMainRange","distanceFromStart","newPos","updateMarker","undosRequired","isSamePoint","onMouseDown","alt","ctrl","accel","isMultiSelect","mouseX","mouseY","onMouseSelection","screenAnchor","screenCursor","selectionMode","oldRange","tmpSel","rectSel","blockSelect","newCursor","onMouseSelectionEnd","onSelectionInterval","search","find","$blockChangeEvents","lastRange","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","yBackwards","docEnd","markerList","keepOrder","$byLines","rangeList","cmdResult","anim","buf","additive","skip","screenLead","toRemove","all","words","stopAtFirst","sameRowRanges","fr","lr","guessRange","maxCol","minSpace","spaceOffsets","spaceOffset","forceLeft","isLeftAligned","isRightAligned","startW","textW","endW","alignLeft","alignRight","unAlign","MultiSelect","addAltCursorListeners","altCursor","altDown","reset","FoldMode","foldStyle","startLevel","binarySearch","comparator","findAnnotations","matched","oldWidget","gutterAnno","arrow","Renderer","_id","oldNode","env","cssWorkerUrl","htmlWorkerUrl","javascriptWorkerUrl","LARGE_ARRAY_SIZE","HASH_UNDEFINED","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","MAX_SAFE_INTEGER","argsTag","arrayTag","asyncTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","promiseTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reRegExpChar","reIsHostCtor","reIsUint","typedArrayTags","freeGlobal","freeSelf","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","nodeIsTypedArray","arrayFilter","resIndex","arrayPush","arraySome","baseTimes","iteratee","baseUnary","cacheHas","getValue","object","mapToArray","overArg","arg","setToArray","set","arrayProto","funcProto","objectProto","coreJsData","funcToString","hasOwnProperty","maskSrcKey","uid","nativeObjectToString","reIsNative","Buffer","Symbol","Uint8Array","propertyIsEnumerable","splice","symToStringTag","nativeGetSymbols","nativeIsBuffer","nativeKeys","DataView","getNative","Map","Promise","Set","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","Hash","entries","entry","hashClear","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","SetCache","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArr","isArray","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","isIndex","eq","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","getRawTag","objectToString","baseIsArguments","isObjectLike","baseIsEqual","bitmask","customizer","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","getTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsNative","isObject","isMasked","pattern","isFunction","baseIsTypedArray","isLength","baseKeys","isPrototype","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","othIndex","convert","objProps","getAllKeys","objLength","othProps","skipCtor","objValue","objCtor","othCtor","getSymbols","isKeyable","isOwn","unmasked","symbol","stubArray","Ctor","ctorString","isArrayLike","stubFalse","isEqual","editorOptions_1","editorOptions","editorEvents","getAceInstance","require$$0","debounce","fn","__extends","this","extendStatics","__","__assign","ace_1","ace_builds_1","PropTypes","require$$1","React","require$$2","require$$3","require$$4","ReactAce","_super","_this","onBeforeLoad","onValidate","focus","fontSize","defaultValue","showGutter","wrapEnabled","_b","scrollMargin","editorProps","availableOptions","option","prevProps","oldProps","nextProps","appliedClasses","appliedClassesArray_1","oldClassesArray","oldClass","valueChanged","margins","setOptions","currentMarkers","showPlaceholder","divStyle","Split","keybinding","isUsed","orientation","editorWidth","editorHeight","FUNC_ERROR_TEXT","INFINITY","reIsDeepProp","reIsPlainProp","reLeadingDot","rePropName","reEscapeChar","isHostObject","symbolToString","baseGet","isKey","castPath","toKey","baseToString","isSymbol","stringToPath","memoize","toString","resolver","memoized","get","lodash_get","ext_split_1","require$$5","require$$6","SplitComponent","cursorStart","defaultValueForEditor","valueForEditor","newAnnotations","newMarkers","sp","nextValue","oldAnnotations","oldMarkers","value_1","value_2","value_3","diff_match_patch","DIFF_DELETE","DIFF_INSERT","DIFF_EQUAL","op","text1","text2","opt_checklines","opt_deadline","deadline","checklines","commonlength","commonprefix","commonsuffix","diffs","longtext","shorttext","hm","text1_a","text1_b","text2_a","text2_b","mid_common","diffs_a","diffs_b","linearray","pointer","count_delete","count_insert","text_delete","text_insert","subDiff","text1_length","text2_length","max_d","v_offset","v_length","v1","v2","front","k1start","k1end","k2start","k2end","k1","k1_offset","x1","k2_offset","x2","k2","text1a","text2a","text1b","text2b","diffsb","lineArray","lineHash","diff_linesToCharsMunge_","lineStart","lineArrayLength","maxLines","chars1","chars2","pointermin","pointermax","pointermid","pointerstart","pointerend","text_length","best","dmp","diff_halfMatchI_","seed","best_common","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","prefixLength","suffixLength","hm1","hm2","equalities","equalitiesLength","lastEquality","length_insertions1","length_deletions1","length_insertions2","length_deletions2","deletion","insertion","overlap_length1","overlap_length2","diff_cleanupSemanticScore_","one","two","char1","char2","nonAlphaNumeric1","nonAlphaNumeric2","whitespace1","whitespace2","lineBreak1","lineBreak2","blankLine1","blankLine2","equality1","edit","equality2","commonOffset","commonString","bestEquality1","bestEdit","bestEquality2","bestScore","score","pre_ins","pre_del","post_ins","post_del","loc","last_chars1","last_chars2","pattern_amp","pattern_lt","pattern_gt","pattern_para","levenshtein","insertions","deletions","diffsLength","match_bitapScore_","accuracy","proximity","score_threshold","best_loc","matchmask","bin_min","bin_mid","bin_max","last_rd","finish","rd","charMatch","patch","suffix","opt_b","opt_c","patches","patchDiffLength","char_count1","char_count2","prepatch_text","postpatch_text","diff_type","diff_text","patchesCopy","patchCopy","nullPadding","results","expected_loc","start_loc","end_loc","index1","index2","paddingLength","patch_size","bigpatch","start1","start2","precontext","empty","postcontext","textline","textPointer","patchHeader","sign","coords1","coords2","split_1","DiffMatchPatch","DiffComponent","lhString","rhString","diffedLines","codeEditorSettings","C","chunkType","firstChar","lastChar","linesToHighlight","newMarkerSet","markerObj","lib","diff_1","_default","supportType","supportFunction","supportConstant","supportConstantColor","supportConstantFonts","numRe","pseudoElements","pseudoClasses","CssHighlightRules","keywordMapper","MatchingBraceOutdent","propertyMap","CssCompletions","inParens","skipSemicolon","properties","CssBehaviour","BaseFoldMode","commentRegex","forceMultiline","startIndent","subRange","CStyleFoldMode","DocCommentHighlightRules","identifierRe","JavaScriptHighlightRules","kwBeforeRe","escapedRe","comments","JSX","tagRegex","jsxTag","jsxJsRule","tokenizedLine","endState","XmlHighlightRules","normalize","tagMap","HtmlHighlightRules","group","is","XmlBehaviour","rightSpace","tokenEndColumn","nextToken","tokenRow","tokenColumn","nextIndent","defaultMode","subModes","voidElements","optionalEndTags","Tag","tagName","tags","MixedFoldMode","XmlFoldMode","optionalTags","commonAttributes","eventAttributes","globalAttributes","attributeMap","findTagName","findAttributeName","HtmlCompletions","attribute","attributeName","JavaScriptMode","CssMode","HtmlFoldMode","VARIABLES","date","dateFormat","SnippetManager","TabstopToken","escape","formatMatcher","choices","operator","fmtTokens","formatted","oldArgs","fmtParts","gChangeCase","snippet","afterNewLine","gotoNext","snippetText","tabString","tabstops","isNested","expanding","copyValue","tabstopManager","TabstopManager","selectionId","scopes","snippetMap","snippets","snippetList","snippetNameMap","wrapRegexp","guardedRegexp","guard","addSnippet","removeSnippet","nameMap","guardRe","isRemove","selectedTabstop","parents","active","parentActive","original","fmt","isEmpty","containsLead","containsAnchor","useLink","moveRelative","dest","movePoint","content","getAriaId","$singleLineEditor","AcePopup","popup","noop","selectionMarker","lastMouseEvent","hoverMarker","setHoverMarker","ariaId","hideHoverMarker","suppressRedraw","bgTokenizer","caption","addToken","lower","filterText","lastI","topdownOnly","screenHeight","screenWidth","maxH","allowTopdown","where","completed","arLength","ID_REGEX","regex","completer","identifierRegex","util","snippetManager","Autocomplete","keepPopupPosition","fromTooltip","completions","total","FilteredList","detachIfFinished","processResults","filtered","isImmediate","immediateResults","tooltipNode","items","upper","loop","matchMask","penalty","fullMatchIndex","splitRegex","getWordIndex","textBefore","wordDistance","prefixPos","wordScores","currentWord","wordScore","wordList","textCompleter","keyWordCompleter","transformSnippetTooltip","record","p3","snippetCompleter","completers","expandSnippet","onChangeMode","loadSnippetsForMode","loadSnippetFile","snippetFilePath","doLiveAutocomplete","hasCompleter","singletonTags","blockTags","formatOptions","breakBefore","spaceBefore","spaceAfter","lastDepth","lastIndent","unindent","roundDepth","curlyDepth","curRow","rowsToAdd","indentNextLine","inTag","inCSS","inBlock","caseBody","trimNext","trimLine","trimCode","AceEditor","onChange","onIsValidChange","isDarkMode","useIsDarkMode","editorRef","useRef","useEffect","Beautify","jsx","AceEditorRender","isValid"],"mappings":"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AI,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,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAEjB,CAAC,EAED,IAAI,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,uBAAuB,EAAG,SAASW,EAASO,EAASlB,EAAO,CACxJ,IAAI2H,EAAMhH,EAAQ,YAAY,EAC1BqI,EAAMrI,EAAQ,YAAY,EAC1BwH,EAAexH,EAAQ,sBAAsB,EAAE,aAC/CovC,EAAY,SAAU3qC,EAAQia,EAAU,CACxC,KAAK,OAAS1X,EAAI,cAAc,QAAQ,EACxC,KAAK,SAAW0X,EAChB,KAAK,WAAa,EAClB,KAAK,UAAYA,EAAS,YAAY,UACtC,KAAK,WAAaA,EAAS,YAAY,WACvC,KAAK,aAAeja,EAAO,OAAO,aAClC,KAAK,YAAc,KAAK,aAAe,KAAK,UAC5C,KAAK,YAAcA,EAAO,MAC1B,KAAK,oBAAuB,EAAI,KAAK,WAAc,EACnD,KAAK,wBAA2B,KAAK,oBAAsB,EAAK,EAChE,KAAK,OAAO,MAAQ,KAAK,YACzB,KAAK,OAAO,OAAS,KAAK,aAC1B,KAAK,OAAO,MAAM,IAAM,MACxB,KAAK,OAAO,MAAM,MAAQ,MAC1B,KAAK,OAAO,MAAM,OAAS,MAC3B,KAAK,OAAO,MAAM,SAAW,WAC7B,KAAK,OAAS,GACd,KAAK,OAAO,KAAO,CACf,MAAS,uBACT,QAAW,uBACX,KAAQ,sBAChB,EACI,KAAK,OAAO,MAAQ,CAChB,MAAS,iBACT,QAAW,iBACX,KAAQ,gBAChB,EACIA,EAAO,QAAQ,YAAY,KAAK,MAAM,CAC1C,GACC,UAAY,CACT4D,EAAI,UAAU,KAAMb,CAAY,EAChC,KAAK,kBAAoB,SAAUyC,EAAQ,CACvC,IAAIolC,EAAU,KAAK,SAAS,MAAM,SAAW,GAAQ,KAAK,OAAO,KAAO,KAAK,OAAO,MACpF,GAAIplC,EAAQ,CACR,KAAK,UAAYA,EAAO,UACxB,KAAK,WAAaA,EAAO,WACzB,KAAK,aAAeA,EAAO,OAC3B,IAAIqlC,GAAiBrlC,EAAO,QAAU,GAAK,KAAK,WAC5CqlC,EAAgB,KAAK,aACrB,KAAK,YAAc,EAGnB,KAAK,YAAc,KAAK,aAAe,KAAK,UAGpD,IAAIC,EAAM,KAAK,OAAO,WAAW,IAAI,EACrC,SAASC,EAAQ3sC,EAAGiwB,EAAG,CACnB,OAAIjwB,EAAE,SAAWiwB,EAAE,SACR,GACPjwB,EAAE,SAAWiwB,EAAE,SACR,EACJ,CACV,CACD,IAAIyF,EAAc,KAAK,SAAS,QAAQ,aAExC,GADAgX,EAAI,UAAU,EAAG,EAAG,KAAK,OAAO,MAAO,KAAK,OAAO,MAAM,EACrDhX,EAAa,CACb,IAAIkX,EAAa,CACb,KAAQ,EACR,QAAW,EACX,MAAS,CACzB,EACYlX,EAAY,QAAQ,SAAUl2B,EAAM,CAChCA,EAAK,SAAWotC,EAAWptC,EAAK,IAAI,GAAK,IACzD,CAAa,EACDk2B,EAAcA,EAAY,KAAKiX,CAAO,EAEtC,QADI7c,EAAW,KAAK,SAAS,QAAQ,UAC5B9yB,EAAI,EAAGA,EAAI04B,EAAY,OAAQ14B,IAAK,CACzC,IAAIgP,EAAM0pB,EAAY14B,CAAC,EAAE,IACrB6vC,EAAiB,KAAK,mBAAmB7gC,EAAK8jB,CAAQ,EACtDgd,EAAW,KAAK,OAAO9gC,EAAM6gC,GAAkB,KAAK,WAAa,KAAK,WAAW,EACjFE,EAAK,KAAK,OAAQ/gC,EAAM6gC,GAAkB,KAAK,WAAa,KAAK,aACjEG,EAAK,KAAK,QAAShhC,EAAM6gC,GAAkB,KAAK,WAAa,KAAK,YAAc,KAAK,WAAW,EAChGp3B,EAASu3B,EAAKD,EAClB,GAAIt3B,EAAS,KAAK,oBAAqB,CACnC,IAAIw3B,GAAYF,EAAKC,GAAM,EAAK,EAC5BC,EAAU,KAAK,wBACfA,EAAU,KAAK,wBAEVA,EAAU,KAAK,wBAA0B,KAAK,eACnDA,EAAU,KAAK,aAAe,KAAK,yBAEvCF,EAAK,KAAK,MAAME,EAAU,KAAK,uBAAuB,EACtDD,EAAK,KAAK,MAAMC,EAAU,KAAK,uBAAuB,EAE1DP,EAAI,UAAYF,EAAO9W,EAAY14B,CAAC,EAAE,IAAI,GAAK,KAC/C0vC,EAAI,SAAS,EAAGI,EAAU,KAAK,YAAaE,EAAKD,CAAE,GAG3D,IAAIh6B,EAAS,KAAK,SAAS,QAAQ,UAAU,YAC7C,GAAIA,EAAQ,CACR,IAAI85B,EAAiB,KAAK,mBAAmB95B,EAAO,IAAK+c,CAAQ,EAC7Dgd,EAAW,KAAK,OAAO/5B,EAAO,IAAM85B,GAAkB,KAAK,WAAa,KAAK,WAAW,EAC5FH,EAAI,UAAY,qBAChBA,EAAI,SAAS,EAAGI,EAAU,KAAK,YAAa,CAAC,EAEzD,EACI,KAAK,mBAAqB,SAAU9gC,EAAK8jB,EAAU,CAC/C,IAAI+c,EAAiB,EACrB,GAAI/c,GAAYA,EAAS,OAAS,EAC9B,QAAS9nB,EAAI,EAAGA,EAAI8nB,EAAS,OAAQ9nB,IAC7BgE,EAAM8jB,EAAS9nB,CAAC,EAAE,MAAM,KAAOgE,EAAM8jB,EAAS9nB,CAAC,EAAE,IAAI,IACrD6kC,GAAkB7gC,EAAM8jB,EAAS9nB,CAAC,EAAE,MAAM,IAErCgE,GAAO8jB,EAAS9nB,CAAC,EAAE,IAAI,MAC5B6kC,GAAkB/c,EAAS9nB,CAAC,EAAE,IAAI,IAAM8nB,EAAS9nB,CAAC,EAAE,MAAM,KAItE,OAAO6kC,CACf,CACA,GAAE,KAAKN,EAAU,SAAS,EAC1B7uC,EAAQ,UAAY6uC,CAEpB,CAAC,EAED,IAAI,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,aAAa,mBAAmB,mBAAmB,iBAAiB,mBAAmB,gBAAgB,gBAAgB,uBAAuB,uBAAuB,iBAAiB,yBAAyB,wBAAwB,qBAAqB,uBAAuB,mBAAmB,EAAG,SAASpvC,EAASO,EAASlB,EAAO,CACva,IAAIgJ,EAAMrI,EAAQ,WAAW,EACzBgH,EAAMhH,EAAQ,WAAW,EACzBiK,EAASjK,EAAQ,UAAU,EAC3B+vC,EAAc/vC,EAAQ,gBAAgB,EAAE,OACxCgwC,EAAchwC,EAAQ,gBAAgB,EAAE,OACxCiwC,EAAYjwC,EAAQ,cAAc,EAAE,KACpCkwC,EAAclwC,EAAQ,gBAAgB,EAAE,OACxCotC,EAAaptC,EAAQ,aAAa,EAAE,WACpCmtC,EAAantC,EAAQ,aAAa,EAAE,WACpCmwC,EAAmBnwC,EAAQ,oBAAoB,EAAE,WACjDowC,EAAmBpwC,EAAQ,oBAAoB,EAAE,WACjD6tC,EAAa7tC,EAAQ,cAAc,EAAE,WACrCmuC,EAAcnuC,EAAQ,sBAAsB,EAAE,YAC9CwH,EAAexH,EAAQ,qBAAqB,EAAE,aAC9CqwC,EAAYrwC,EAAQ,kBAAkB,EACtCovC,EAAYpvC,EAAQ,oBAAoB,EAAE,UAC1CsE,EAAYtE,EAAQ,iBAAiB,EACrCswC,EAAgBhsC,EAAU,KAC9B0C,EAAI,gBAAgBqpC,EAAW,iBAAkB,EAAK,EACtD,IAAIE,EAAkB,SAAUpqC,EAAW+5B,EAAO,CAC9C,IAAIr8B,EAAQ,KACZ,KAAK,UAAYsC,GAAaa,EAAI,cAAc,KAAK,EACrDA,EAAI,YAAY,KAAK,UAAW,YAAY,EACxCA,EAAI,QACJA,EAAI,YAAY,KAAK,UAAW,WAAW,EAC/C,KAAK,SAASk5B,CAAK,EACfj2B,EAAO,IAAI,cAAc,GAAK,MAC9BA,EAAO,IAAI,eAAgB,EAAK,EACpC,KAAK,QAAUjD,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,aACzB,KAAK,UAAU,YAAY,KAAK,OAAO,EACvC,KAAK,QAAQ,aAAa,cAAe,EAAI,EAC7C,KAAK,SAAWA,EAAI,cAAc,KAAK,EACvC,KAAK,SAAS,UAAY,eAC1B,KAAK,UAAU,YAAY,KAAK,QAAQ,EACxC,KAAK,QAAUA,EAAI,cAAc,KAAK,EACtC,KAAK,QAAQ,UAAY,cACzB,KAAK,SAAS,YAAY,KAAK,OAAO,EACtC,KAAK,aAAe,IAAI+oC,EAAY,KAAK,OAAO,EAChD,KAAK,aAAa,GAAG,oBAAqB,KAAK,eAAe,KAAK,IAAI,CAAC,EACxE,KAAK,YAAc,IAAIC,EAAY,KAAK,OAAO,EAC/C,IAAIQ,EAAY,KAAK,WAAa,IAAIP,EAAU,KAAK,OAAO,EAC5D,KAAK,OAASO,EAAU,QACxB,KAAK,aAAe,IAAIR,EAAY,KAAK,OAAO,EAChD,KAAK,aAAe,IAAIE,EAAY,KAAK,OAAO,EAChD,KAAK,aAAe,GACpB,KAAK,SAAW,GAChB,KAAK,UACD,KAAK,WAAa,IAAI/C,EAAW,KAAK,UAAW,IAAI,EACzD,KAAK,WAAa,IAAIC,EAAW,KAAK,UAAW,IAAI,EACrD,KAAK,WAAW,GAAG,SAAU,SAAUxlC,EAAG,CACjC/D,EAAM,kBACPA,EAAM,QAAQ,aAAa+D,EAAE,KAAO/D,EAAM,aAAa,GAAG,CACtE,CAAK,EACD,KAAK,WAAW,GAAG,SAAU,SAAU+D,EAAG,CACjC/D,EAAM,kBACPA,EAAM,QAAQ,cAAc+D,EAAE,KAAO/D,EAAM,aAAa,IAAI,CACxE,CAAK,EACD,KAAK,UAAY,EACjB,KAAK,WAAa,EAClB,KAAK,UAAY,CACb,IAAK,EACL,OAAQ,CAChB,EACI,KAAK,aAAe,IAAIsqC,EAAY,KAAK,SAAS,EAClD,KAAK,WAAW,gBAAgB,KAAK,YAAY,EACjD,KAAK,WAAW,GAAG,sBAAuB,SAAUvmC,EAAG,CACnD/D,EAAM,oBAAmB,EACzBA,EAAM,SAAS,GAAMA,EAAM,YAAaA,EAAM,MAAM,MAAOA,EAAM,MAAM,MAAM,EAC7EA,EAAM,QAAQ,sBAAuB+D,CAAC,CAC9C,CAAK,EACD,KAAK,MAAQ,CACT,MAAO,EACP,OAAQ,EACR,eAAgB,EAChB,cAAe,EACf,OAAQ,EAChB,EACI,KAAK,YAAc,CACf,MAAO,EACP,QAAS,EACT,SAAU,EACV,eAAgB,EAChB,QAAS,EACT,WAAY,EACZ,eAAgB,EAChB,UAAW,EACX,UAAW,EACX,OAAQ,EACR,OAAQ,EACR,aAAc,CACtB,EACI,KAAK,aAAe,CAChB,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,EACR,EAAG,EACH,EAAG,CACX,EACI,KAAK,OAAS,CACV,KAAM,EACN,MAAO,EACP,IAAK,EACL,OAAQ,EACR,EAAG,EACH,EAAG,CACX,EACI,KAAK,sBAAwB,CAACtD,EAAU,MACxC,KAAK,MAAQ,IAAIupC,EAAW,KAAK,eAAe,KAAK,IAAI,EAAG,KAAK,UAAU,cAAc,WAAW,EACpG,KAAK,MAAM,SAAS,KAAK,WAAW,EACpC,KAAK,oBAAmB,EACxB,KAAK,WAAW,CAAC,EACjB5jC,EAAO,aAAa,IAAI,EACxBA,EAAO,QAAQ,WAAY,IAAI,CACnC,GACC,UAAY,CACT,KAAK,cAAgB,EACrB,KAAK,cAAgB,EACrB,KAAK,cAAgB,EACrB,KAAK,cAAgB,EACrB,KAAK,aAAe,GACpB,KAAK,YAAc,GACnB,KAAK,YAAc,GACnB,KAAK,mBAAqB,IAC1B,KAAK,oBAAsB,IAC3B,KAAK,YAAc,IACnB,KAAK,gBAAkB,KACvB5B,EAAI,UAAU,KAAMb,CAAY,EAChC,KAAK,oBAAsB,UAAY,CAC/B,KAAK,WAAW,gBAAkB,KAAK,kBACvC,KAAK,gBAAkB,KAAK,WAAW,eACvC,KAAK,SAAS,aAAc,CAAC,KAAK,eAAe,GAErD,KAAK,YAAY,eACb,KAAK,eAAiB,KAAK,WAAW,kBAAiB,EAC3D,KAAK,YAAY,WACb,KAAK,WAAa,KAAK,WAAW,cAAa,EACnD,KAAK,mBAAkB,EACvBR,EAAI,SAAS,KAAK,SAAS,MAAO,cAAe,KAAK,WAAa,IAAI,CAC/E,EACI,KAAK,WAAa,SAAUmI,EAAS,CAC7B,KAAK,SACL,KAAK,QAAQ,IAAI,IAAI,oBAAqB,KAAK,mBAAmB,EACtE,KAAK,QAAUA,EACXA,GAAW,KAAK,aAAa,KAAOA,EAAQ,aAAY,GAAM,GAC9DA,EAAQ,aAAa,CAAC,KAAK,aAAa,GAAG,EAC/C,KAAK,aAAa,WAAWA,CAAO,EACpC,KAAK,YAAY,WAAWA,CAAO,EACnC,KAAK,aAAa,WAAWA,CAAO,EACpC,KAAK,aAAa,WAAWA,CAAO,EACpC,KAAK,WAAW,WAAWA,CAAO,EAC7BA,IAEL,KAAK,MAAM,SAAS,KAAK,WAAW,EACpC,KAAK,QAAQ,gBAAgB,KAAK,YAAY,EAC9C,KAAK,WAAW,WAAa,KAAK,WAAW,UAAY,KACzD,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,oBAAmB,EACxB,KAAK,QAAQ,IAAI,GAAG,oBAAqB,KAAK,mBAAmB,EACzE,EACI,KAAK,YAAc,SAAUF,EAAUC,EAAS6pB,EAAO,CAenD,GAdI7pB,IAAY,SACZA,EAAU,KACT,KAAK,eAOF,KAAK,cAAc,SAAWD,IAC9B,KAAK,cAAc,SAAWA,GAC9B,KAAK,cAAc,QAAUC,IAC7B,KAAK,cAAc,QAAUA,IATjC,KAAK,cAAgB,CACjB,SAAUD,EACV,QAASC,CACzB,EAQY,KAAK,cAAc,QAAU,KAAK,YAAY,SAC9C,GAAI6pB,EACA,KAAK,cAAc,QAAU,KAAK,YAAY,YAE9C,QAEJ,KAAK,cAAc,SAAW,KAAK,YAAY,SAEnD,KAAK,MAAM,SAAS,KAAK,YAAY,CAC7C,EACI,KAAK,oBAAsB,UAAY,CACnC,KAAK,MAAM,SAAS,KAAK,WAAW,EACpC,KAAK,WAAW,iBAChB,KAAK,QAAQ,aAAa,WAAW,KAAK,WAAW,QAAQ,CACrE,EACI,KAAK,gBAAkB,UAAY,CAC/B,KAAK,MAAM,SAAS,KAAK,YAAc,KAAK,aAAa,EACzD,KAAK,WAAW,iBACxB,EACI,KAAK,WAAa,UAAY,CAC1B,KAAK,MAAM,SAAS,KAAK,WAAW,CAC5C,EACI,KAAK,WAAa,SAAUA,EAAO,CAC3BA,EACA,KAAK,eAAe,KAAK,YAAa,EAAI,EAE1C,KAAK,MAAM,SAAS,KAAK,WAAW,CAChD,EACI,KAAK,eAAiB,UAAY,CAC9B,KAAK,WAAW,qBACxB,EACI,KAAK,SAAW,EAChB,KAAK,iBAAmB,UAAY,CAC5B,KAAK,MAAM,QACX,KAAK,MAAM,OAAS,GAEpB,KAAK,SAAQ,CACzB,EACI,KAAK,SAAW,SAAUA,EAAO2P,EAAarwB,EAAOC,EAAQ,CACzD,GAAI,OAAK,SAAW,GAEf,CAAI,KAAK,SAAW,EACrB,KAAK,WAEL,KAAK,SAAWygB,EAAQ,EAAI,EAChC,IAAIj0B,EAAK,KAAK,UACTwT,IACDA,EAASxT,EAAG,cAAgBA,EAAG,cAC9BuT,IACDA,EAAQvT,EAAG,aAAeA,EAAG,aACjC,IAAIipC,EAAU,KAAK,kBAAkBhV,EAAO2P,EAAarwB,EAAOC,CAAM,EACtE,GAAI,CAAC,KAAK,MAAM,gBAAmB,CAACD,GAAS,CAACC,EAC1C,OAAO,KAAK,SAAW,EACvBygB,IACA,KAAK,aAAa,SAAW,MAC7BA,EACA,KAAK,eAAegV,EAAU,KAAK,SAAU,EAAI,EAEjD,KAAK,MAAM,SAASA,EAAU,KAAK,QAAQ,EAC3C,KAAK,WACL,KAAK,SAAW,GACpB,KAAK,WAAW,WAAa,KAAK,WAAW,UAAY,KACrD,KAAK,kBACL,KAAK,uBAAuB,EAAI,EAE5C,EACI,KAAK,kBAAoB,SAAUhV,EAAO2P,EAAarwB,EAAOC,EAAQ,CAClEA,GAAW,KAAK,cAAgB,EAChC,IAAIy1B,EAAU,EACV3pB,EAAO,KAAK,MACZqsB,EAAU,CACV,MAAOrsB,EAAK,MACZ,OAAQA,EAAK,OACb,eAAgBA,EAAK,eACrB,cAAeA,EAAK,aAChC,EAWQ,GAVI9L,IAAWygB,GAAS3U,EAAK,QAAU9L,KACnC8L,EAAK,OAAS9L,EACdy1B,GAAW,KAAK,YAChB3pB,EAAK,eAAiBA,EAAK,OACvB,KAAK,eACLA,EAAK,gBAAkB,KAAK,WAAW,UAAS,GACpD,KAAK,WAAW,UAAUA,EAAK,cAAc,EAC7C,KAAK,WAAW,QAAQ,MAAM,OAAS,KAAK,WAAW,UAAW,EAAG,KACrE2pB,EAAUA,EAAU,KAAK,eAEzB11B,IAAU0gB,GAAS3U,EAAK,OAAS/L,GAAQ,CACzC01B,GAAW,KAAK,YAChB3pB,EAAK,MAAQ/L,EACTqwB,GAAe,OACfA,EAAc,KAAK,YAAc,KAAK,QAAQ,YAAc,GAChE,KAAK,YAAcA,EACnB1hC,EAAI,SAAS,KAAK,WAAW,QAAQ,MAAO,OAAQ0hC,EAAc,IAAI,EACtE1hC,EAAI,SAAS,KAAK,SAAS,MAAO,OAAQ0hC,EAAc,KAAK,OAAO,KAAO,IAAI,EAC/EtkB,EAAK,cAAgB,KAAK,IAAI,EAAG/L,EAAQqwB,EAAc,KAAK,WAAW,SAAU,EAAG,KAAK,OAAO,CAAC,EACjG1hC,EAAI,SAAS,KAAK,QAAQ,MAAO,OAAQ,KAAK,OAAO,KAAO,IAAI,EAChE,IAAI0pC,EAAQ,KAAK,WAAW,SAAQ,EAAK,KACzC1pC,EAAI,SAAS,KAAK,WAAW,QAAQ,MAAO,QAAS0pC,CAAK,EAC1D1pC,EAAI,SAAS,KAAK,SAAS,MAAO,QAAS0pC,CAAK,EAChD1pC,EAAI,SAAS,KAAK,SAAS,MAAO,SAAU,KAAK,WAAW,UAAS,CAAE,EACvE,KAAK,WAAW,SAASod,EAAK,aAAa,GACvC,KAAK,SAAW,KAAK,QAAQ,eAAc,GAAM,KAAK,gBAAiB,GAAI2U,KAC3EgV,GAAW,KAAK,aAGxB,OAAA3pB,EAAK,OAAS,CAAC/L,GAAS,CAACC,EACrBy1B,GACA,KAAK,QAAQ,SAAU0C,CAAO,EAC3B1C,CACf,EACI,KAAK,eAAiB,SAAU11B,EAAO,CACnC,IAAIqwB,EAAc,KAAK,YAAcrwB,EAAQ,EACzCqwB,GAAe,KAAK,cACpB,KAAK,UAAY,KAAK,kBAAkB,GAAMA,EAAa,KAAK,MAAM,MAAO,KAAK,MAAM,MAAM,GAC9F,KAAK,QAAQ,eAAgB,GAAI,KAAK,gBAAe,EACrD,KAAK,MAAM,SAAS,KAAK,WAAW,EAE/B,KAAK,MAAM,OAChB,KAAK,MAAM,SAAS,KAAK,WAAW,EAGpC,KAAK,oBAAmB,CAEpC,EACI,KAAK,gBAAkB,UAAY,CAC/B,IAAIiI,EAAiB,KAAK,MAAM,cAAgB,KAAK,SAAW,EAC5DpW,EAAQ,KAAK,MAAMoW,EAAiB,KAAK,cAAc,EAC3D,OAAO,KAAK,QAAQ,gBAAgBpW,EAAO,KAAK,kBAAoB,KAAK,kBAAkB,CACnG,EACI,KAAK,kBAAoB,SAAUiH,EAAe,CAC9C,KAAK,UAAU,iBAAkBA,CAAa,CACtD,EACI,KAAK,kBAAoB,UAAY,CACjC,OAAO,KAAK,eACpB,EACI,KAAK,kBAAoB,SAAUjd,EAAgB,CAC/C,KAAK,UAAU,iBAAkBA,CAAc,EAC/C,KAAK,QAAQ,aAAa,kBAAkBA,CAAc,CAClE,EACI,KAAK,kBAAoB,UAAY,CACjC,OAAO,KAAK,UAAU,gBAAgB,CAC9C,EACI,KAAK,uBAAyB,UAAY,CACtC,OAAO,KAAK,UAAU,qBAAqB,CACnD,EACI,KAAK,uBAAyB,SAAUkd,EAAS,CAC7C,KAAK,UAAU,sBAAuBA,CAAO,CACrD,EACI,KAAK,yBAA2B,UAAY,CACxC,OAAO,KAAK,UAAU,uBAAuB,CACrD,EACI,KAAK,yBAA2B,SAAUnJ,EAAW,CACjD,KAAK,UAAU,wBAAyBA,CAAS,CACzD,EACI,KAAK,mBAAqB,SAAUoJ,EAAiB,CACjD,KAAK,UAAU,kBAAmBA,CAAe,CACzD,EACI,KAAK,mBAAqB,UAAY,CAClC,OAAO,KAAK,UAAU,iBAAiB,CAC/C,EACI,KAAK,qBAAuB,SAAUA,EAAiB,CACnD,KAAK,UAAU,oBAAqBA,CAAe,CAC3D,EACI,KAAK,qBAAuB,UAAY,CACpC,OAAO,KAAK,UAAU,mBAAmB,CACjD,EACI,KAAK,cAAgB,UAAY,CAC7B,OAAO,KAAK,UAAU,YAAY,CAC1C,EACI,KAAK,cAAgB,SAAUE,EAAM,CACjC,OAAO,KAAK,UAAU,aAAcA,CAAI,CAChD,EACI,KAAK,mBAAqB,UAAY,CAClC,OAAO,KAAK,UAAU,iBAAiB,CAC/C,EACI,KAAK,mBAAqB,SAAUA,EAAM,CACtC,KAAK,UAAU,kBAAmBA,CAAI,CAC9C,EACI,KAAK,uBAAyB,SAAUL,EAAiB,CACrD,KAAK,UAAU,sBAAuBA,CAAe,CAC7D,EACI,KAAK,uBAAyB,UAAY,CACtC,OAAO,KAAK,UAAU,qBAAqB,CACnD,EACI,KAAK,mBAAqB,UAAY,CAClC,GAAI,GAAC,KAAK,kBAAoB,CAAC,KAAK,gBAEpC,IAAI,CAAC,KAAK,eAAgB,CACtB,IAAIqP,EAAc5pC,EAAI,cAAc,KAAK,EACzC4pC,EAAY,UAAY,mCACxB,KAAK,eAAiB5pC,EAAI,cAAc,KAAK,EAC7C,KAAK,eAAe,UAAY,mBAChC4pC,EAAY,YAAY,KAAK,cAAc,EAC3C,KAAK,QAAQ,aAAaA,EAAa,KAAK,QAAQ,UAAU,EAElE,IAAIxqC,EAAQ,KAAK,eAAe,MAChCA,EAAM,KAAO,KAAK,MAAM,KAAK,eAAiB,KAAK,mBAAqB,KAAK,QAAQ,EAAI,KACzFA,EAAM,WAAa,KAAK,iBAAmB,UAAY,SACnD,KAAK,SAAW,KAAK,QAAQ,OAAS,IACtC,KAAK,gBAAe,EAChC,EACI,KAAK,oBAAsB,UAAY,CACnC,OAAO,KAAK,SACpB,EACI,KAAK,oBAAsB,UAAY,CACnC,OAAO,KAAK,QACpB,EACI,KAAK,qBAAuB,UAAY,CACpC,OAAO,KAAK,SACpB,EACI,KAAK,sBAAwB,UAAY,CACrC,GAAI,MAAK,gBAET,KAAIA,EAAQ,KAAK,SAAS,MACtB+6B,EAAc,KAAK,aACvB,GAAI,CAAC,KAAK,uBAAyB,CAACA,EAAa,CAC7Cn6B,EAAI,UAAU,KAAK,SAAU,KAAM,CAAC,EACpC,OAEJ,IAAI8lC,EAAW,KAAK,aAAa,UACjC,GAAKA,EAEL,CAAI3L,GAAeA,EAAY,cAC3B2L,EAAW,KAAK,aAAa,iBAAiB3L,EAAY,YAAY,MAAO,EAAI,GACrF,IAAIl3B,EAAS,KAAK,YACd4mC,EAAS/D,EAAS,IAClBgE,EAAUhE,EAAS,KACvB+D,GAAU5mC,EAAO,OACjB,IAAIoT,EAAI8jB,GAAeA,EAAY,kBAAoB,KAAK,WAAamP,EAAgB,EAAI,EAC7F,GAAIO,EAAS,GAAKA,EAAS5mC,EAAO,OAASoT,EAAG,CAC1CrW,EAAI,UAAU,KAAK,SAAU,EAAG,CAAC,EACjC,OAEJ,IAAIsW,EAAI,EACJpJ,EAAS,KAAK,MAAM,OAASmJ,EACjC,GAAI,CAAC8jB,EACD0P,GAAU,KAAK,mBAGX1P,EAAY,kBAAmB,CAC/B,IAAIlgC,EAAM,KAAK,SAAS,MACxBqc,EAAI,KAAK,eAAkB,KAAK,QAAQ,sBAAsBrc,CAAG,EAAE,CAAC,OAGpE4vC,GAAU,KAAK,WAAa,EAGpCC,GAAW,KAAK,WACZA,EAAU,KAAK,MAAM,cAAgBxzB,IACrCwzB,EAAU,KAAK,MAAM,cAAgBxzB,GACzCwzB,GAAW,KAAK,YAAc,KAAK,OAAO,KAC1C9pC,EAAI,SAASZ,EAAO,SAAUiX,EAAI,IAAI,EACtCrW,EAAI,SAASZ,EAAO,QAASkX,EAAI,IAAI,EACrCtW,EAAI,UAAU,KAAK,SAAU,KAAK,IAAI8pC,EAAS,KAAK,MAAM,cAAgBxzB,CAAC,EAAG,KAAK,IAAIuzB,EAAQ38B,CAAM,CAAC,GAC9G,EACI,KAAK,mBAAqB,UAAY,CAClC,OAAO,KAAK,YAAY,QAChC,EACI,KAAK,wBAA0B,UAAY,CACvC,OAAO,KAAK,YAAY,UAAY,KAAK,YAAY,SAAW,EAAI,EAAI,EAChF,EACI,KAAK,uBAAyB,UAAY,CACtC,IAAIjK,EAAS,KAAK,YACdiF,EAAUjF,EAAO,QACjBkH,EAAM,KAAK,QAAQ,oBAAoBjC,EAAS,CAAC,EAAIjF,EAAO,WAChE,OAAIkH,EAAM,KAAK,QAAQ,aAAc,EAAGlH,EAAO,OAASA,EAAO,WACpDiF,EAAU,EACdA,CACf,EACI,KAAK,kBAAoB,UAAY,CACjC,OAAO,KAAK,YAAY,OAChC,EACI,KAAK,SAAW,KAChB,KAAK,WAAa,SAAUy5B,EAAS,CACjC,KAAK,SAAWA,EAChB,KAAK,WAAW,WAAWA,CAAO,EAClC,KAAK,aAAa,WAAWA,CAAO,EACpC,KAAK,aAAa,WAAWA,CAAO,EACpC,KAAK,YAAY,WAAWA,CAAO,EACnC,KAAK,MAAM,SAAS,KAAK,WAAW,EACpC,KAAK,mBAAkB,CAC/B,EACI,KAAK,gBAAkB,SAAUx3B,EAAK4/B,EAAQ98B,EAAMy8B,EAAO,CACvD,IAAIM,EAAK,KAAK,aACdA,EAAG,IAAM7/B,EAAM,EACf6/B,EAAG,OAASD,EAAS,EACrBC,EAAG,MAAQN,EAAQ,EACnBM,EAAG,KAAO/8B,EAAO,EACjB+8B,EAAG,EAAIA,EAAG,IAAMA,EAAG,OACnBA,EAAG,EAAIA,EAAG,KAAOA,EAAG,MAChBA,EAAG,KAAO,KAAK,WAAa,GAAK,KAAK,SACtC,KAAK,QAAQ,aAAa,CAACA,EAAG,GAAG,EACrC,KAAK,WAAU,CACvB,EACI,KAAK,UAAY,SAAU7/B,EAAK4/B,EAAQ98B,EAAMy8B,EAAO,CACjD,IAAIM,EAAK,KAAK,OACdA,EAAG,IAAM7/B,EAAM,EACf6/B,EAAG,OAASD,EAAS,EACrBC,EAAG,MAAQN,EAAQ,EACnBM,EAAG,KAAO/8B,EAAO,EACjB+8B,EAAG,EAAIA,EAAG,IAAMA,EAAG,OACnBA,EAAG,EAAIA,EAAG,KAAOA,EAAG,MACpB,KAAK,kBAAkB,GAAM,KAAK,YAAa,KAAK,MAAM,MAAO,KAAK,MAAM,MAAM,EAClF,KAAK,WAAU,CACvB,EACI,KAAK,2BAA6B,UAAY,CAC1C,OAAO,KAAK,wBACpB,EACI,KAAK,2BAA6B,SAAUC,EAAe,CACvD,KAAK,UAAU,0BAA2BA,CAAa,CAC/D,EACI,KAAK,2BAA6B,UAAY,CAC1C,OAAO,KAAK,wBACpB,EACI,KAAK,2BAA6B,SAAUA,EAAe,CACvD,KAAK,UAAU,0BAA2BA,CAAa,CAC/D,EACI,KAAK,kBAAoB,UAAY,CACjC,IAAIC,EAAe,KAAK,YAAY,UAChCC,EAAiB,KAAK,MAAM,eAC5B,CAAC,KAAK,WAAa,KAAK,iBACxBD,IAAiBC,EAAiB,KAAK,YAAc,KAAK,eACtD,KAAK,UAAYD,EAAeC,IAChCD,EAAe,KAAK,UAAYC,EAChC,KAAK,WAAW,UAAY,OAGpC,KAAK,WAAW,gBAAgBD,EAAe,KAAK,aAAa,CAAC,EAClE,KAAK,WAAW,aAAa,KAAK,UAAY,KAAK,aAAa,GAAG,CAC3E,EACI,KAAK,kBAAoB,UAAY,CACjC,KAAK,WAAW,eAAe,KAAK,YAAY,MAAQ,EAAI,KAAK,SAAW,KAAK,aAAa,CAAC,EAC/F,KAAK,WAAW,cAAc,KAAK,WAAa,KAAK,aAAa,IAAI,CAC9E,EACI,KAAK,QAAU,GACf,KAAK,OAAS,UAAY,CACtB,KAAK,QAAU,EACvB,EACI,KAAK,SAAW,UAAY,CACxB,KAAK,QAAU,EACvB,EACI,KAAK,eAAiB,SAAUnD,EAAShV,EAAO,CAK5C,GAJI,KAAK,WACLgV,GAAW,KAAK,SAChB,KAAK,SAAW,GAEf,CAAC,KAAK,SAAW,CAAC,KAAK,UAAU,aAAe,KAAK,SAAa,CAACA,GAAW,CAAChV,EAAQ,CACxF,KAAK,UAAYgV,EACjB,OAEJ,GAAI,KAAK,MAAM,OACX,YAAK,UAAYA,EACV,KAAK,SAAS,EAAI,EAExB,KAAK,YACN,KAAK,WAAW,sBAEpB,KAAK,QAAQ,eAAgBA,CAAO,EAChC,KAAK,SAAW,KAAK,QAAQ,cAC7B,KAAK,QAAQ,aAAa,sBAAsB,KAAK,YAAY,EACrE,IAAI9jC,EAAS,KAAK,YAClB,GAAI8jC,EAAU,KAAK,aACfA,EAAU,KAAK,aACfA,EAAU,KAAK,aACfA,EAAU,KAAK,cACfA,EAAU,KAAK,eACfA,EAAU,KAAK,gBAAiB,CAEhC,GADAA,GAAW,KAAK,oBAAmB,EAAK,KAAK,MAAM,QAC/C9jC,EAAO,UAAY,KAAK,YAAY,UAAYA,EAAO,gBAAkB,KAAK,YAAY,eAAgB,CAC1G,IAAImnC,EAAK,KAAK,WAAannC,EAAO,SAAW,KAAK,YAAY,UAAY,KAAK,WAC3EmnC,EAAK,IACL,KAAK,UAAYA,EACjBrD,EAAUA,EAAU,KAAK,cACzBA,GAAW,KAAK,oBAAmB,EAAK,KAAK,MAAM,SAG3D9jC,EAAS,KAAK,YACd,KAAK,kBAAiB,EAClB8jC,EAAU,KAAK,iBACf,KAAK,kBAAiB,EAC1B/mC,EAAI,UAAU,KAAK,QAAS,CAAC,KAAK,WAAY,CAACiD,EAAO,MAAM,EAC5D,IAAIoO,EAAQpO,EAAO,MAAQ,EAAI,KAAK,SAAW,KAC3CqO,EAASrO,EAAO,UAAY,KAChCjD,EAAI,SAAS,KAAK,QAAQ,MAAO,QAASqR,CAAK,EAC/CrR,EAAI,SAAS,KAAK,QAAQ,MAAO,SAAUsR,CAAM,EAMrD,GAJIy1B,EAAU,KAAK,kBACf/mC,EAAI,UAAU,KAAK,QAAS,CAAC,KAAK,WAAY,CAACiD,EAAO,MAAM,EAC5D,KAAK,SAAS,UAAY,KAAK,YAAc,EAAI,eAAiB,gCAElE8jC,EAAU,KAAK,YAAa,CAC5B,KAAK,cAAgB,KACrB,KAAK,WAAW,OAAO9jC,CAAM,EACzB,KAAK,aACL,KAAK,aAAa,OAAOA,CAAM,EAC/B,KAAK,kBACL,KAAK,iBAAiB,kBAAkBA,CAAM,EAElD,KAAK,YAAY,OAAOA,CAAM,EAC9B,KAAK,aAAa,OAAOA,CAAM,EAC/B,KAAK,aAAa,OAAOA,CAAM,EAC/B,KAAK,sBAAqB,EAC1B,KAAK,QAAQ,cAAe8jC,CAAO,EACnC,OAEJ,GAAIA,EAAU,KAAK,cAAe,CAC9B,KAAK,cAAgB,KACjBA,EAAU,KAAK,aAAeA,EAAU,KAAK,aAC7C,KAAK,WAAW,OAAO9jC,CAAM,EAE7B,KAAK,WAAW,YAAYA,CAAM,EAClC,KAAK,cACD8jC,EAAU,KAAK,eAAiBA,EAAU,KAAK,aAC/C,KAAK,aAAa,OAAO9jC,CAAM,EAE/B,KAAK,aAAa,YAAYA,CAAM,GAExC,KAAK,kBACL,KAAK,iBAAiB,kBAAkBA,CAAM,EAElD,KAAK,YAAY,OAAOA,CAAM,EAC9B,KAAK,aAAa,OAAOA,CAAM,EAC/B,KAAK,aAAa,OAAOA,CAAM,EAC/B,KAAK,sBAAqB,EAC1B,KAAK,QAAQ,cAAe8jC,CAAO,EACnC,OAEAA,EAAU,KAAK,aACf,KAAK,cAAgB,KACrB,KAAK,WAAW,OAAO9jC,CAAM,EACzB,KAAK,aACL,KAAK,aAAa,OAAOA,CAAM,EAC/B,KAAK,kBACL,KAAK,iBAAiB,kBAAkBA,CAAM,GAG7C8jC,EAAU,KAAK,eAChB,KAAK,gBAAmBA,EAAU,KAAK,eAAkB,KAAK,cAC9D,KAAK,aAAa,OAAO9jC,CAAM,EAC/B,KAAK,kBACL,KAAK,iBAAiB,kBAAkBA,CAAM,GAG7C8jC,EAAU,KAAK,aAAeA,EAAU,KAAK,eAC9C,KAAK,aACL,KAAK,aAAa,OAAO9jC,CAAM,EAC/B,KAAK,kBACL,KAAK,iBAAiB,kBAAkBA,CAAM,GAG7C8jC,EAAU,KAAK,gBAChB,KAAK,sBACL,KAAK,aAAa,oBAAoB9jC,CAAM,EAC5C,KAAK,kBACL,KAAK,iBAAiB,kBAAkBA,CAAM,GAGlD8jC,EAAU,KAAK,gBACf,KAAK,aAAa,OAAO9jC,CAAM,EAC/B,KAAK,sBAAqB,GAE1B8jC,GAAW,KAAK,cAAgB,KAAK,sBACrC,KAAK,aAAa,OAAO9jC,CAAM,EAE/B8jC,GAAW,KAAK,cAAgB,KAAK,qBACrC,KAAK,YAAY,OAAO9jC,CAAM,EAElC,KAAK,QAAQ,cAAe8jC,CAAO,CAC3C,EACI,KAAK,UAAY,UAAY,CACzB,IAAIz1B,EAAS,KAAK,QAAQ,gBAAiB,EAAG,KAAK,WAC/C+4B,EAAY,KAAK,UAAY,KAAK,WAClCC,EAAgB,KAAK,IAAID,EAAW,KAAK,KAAK,KAAK,WAAa,GAAK,KAAK,WAAY/4B,CAAM,CAAC,EAAI,KAAK,aAAa,GAAK,KAAK,cAAgB,GAC7I,KAAK,eACLg5B,GAAiB,KAAK,WAAW,aACjC,KAAK,iBAAmBA,EAAgB,KAAK,kBAC7CA,EAAgB,KAAK,iBACzB,IAAIC,EAAiBD,GAAiB,EAAI,KAAK,WAC3Cx2B,EAAU,CAACy2B,GAAkBj5B,EAAS+4B,EAC1C,GAAIC,GAAiB,KAAK,eACtB,KAAK,MAAM,QAAU,KAAK,eAAiBx2B,GAAW,KAAK,SAAU,CACjEA,GAAW,KAAK,WAChB,KAAK,SAAWA,EAChB,KAAK,WAAW,WAAWA,CAAO,GAEtC,IAAIwC,EAAI,KAAK,UAAU,YACvB,KAAK,UAAU,MAAM,OAASg0B,EAAgB,KAC9C,KAAK,kBAAkB,GAAM,KAAK,aAAch0B,EAAGg0B,CAAa,EAChE,KAAK,cAAgBA,EACrB,KAAK,QAAQ,UAAU,EAEnC,EACI,KAAK,oBAAsB,UAAY,CACnC,IAAIniC,EAAU,KAAK,QACfiV,EAAO,KAAK,MACZmtB,EAAiBntB,EAAK,QAAU,EAAI,KAAK,WACzCotB,EAAc,KAAK,QAAQ,gBAAe,EAC1CH,EAAYG,EAAc,KAAK,WAC/BC,EAAc,KAAK,kBACnBC,EAAc,CAACH,IAAmB,KAAK,0BACvCntB,EAAK,cAAgBqtB,EAAc,EAAI,KAAK,SAAW,GACvDE,EAAiB,KAAK,eAAiBD,EACvCC,IACA,KAAK,aAAeD,EACpB,KAAK,WAAW,WAAWA,CAAW,GAE1C,IAAIE,EAAgB,KAAK,SACrB,KAAK,WAAa,KAAK,WAAa,GACpC,KAAK,UAAS,EAClB,IAAIC,EAAYztB,EAAK,eAAiB,KAAK,WACvC0tB,EAAgB,CAAC,KAAK,WAAa,KAAK,gBACrC1tB,EAAK,eAAiB,KAAK,YAAc,KAAK,eAC/C,EACNitB,GAAaS,EACb,IAAId,EAAK,KAAK,aACd,KAAK,QAAQ,aAAa,KAAK,IAAI,CAACA,EAAG,IAAK,KAAK,IAAI,KAAK,UAAWK,EAAYjtB,EAAK,eAAiB4sB,EAAG,MAAM,CAAC,CAAC,EAClH,KAAK,QAAQ,cAAc,KAAK,IAAI,CAACA,EAAG,KAAM,KAAK,IAAI,KAAK,WAAYS,EAAc,EAAI,KAAK,SAAWrtB,EAAK,cAAgB4sB,EAAG,KAAK,CAAC,CAAC,EACzI,IAAIl2B,EAAU,CAACy2B,IAAmB,KAAK,0BACnCntB,EAAK,eAAiBitB,EAAYS,EAAgB,GAAK,KAAK,UAAYd,EAAG,KAC3Ee,EAAiBH,IAAkB92B,EACnCi3B,IACA,KAAK,SAAWj3B,EAChB,KAAK,WAAW,WAAWA,CAAO,GAEtC,IAAIoK,EAAS,KAAK,UAAY,KAAK,WAC/B8sB,EAAY,KAAK,KAAKH,EAAY,KAAK,UAAU,EAAI,EACrD5iC,EAAW,KAAK,IAAI,EAAG,KAAK,OAAO,KAAK,UAAYiW,GAAU,KAAK,UAAU,CAAC,EAC9EhW,EAAUD,EAAW+iC,EACrBC,EAAgBC,EAChB33B,EAAa,KAAK,WACtBtL,EAAWE,EAAQ,oBAAoBF,EAAU,CAAC,EAClD,IAAIsX,EAAWpX,EAAQ,YAAYF,CAAQ,EACvCsX,IACAtX,EAAWsX,EAAS,MAAM,KAE9B0rB,EAAiB9iC,EAAQ,oBAAoBF,EAAU,CAAC,EACxDijC,EAAiB/iC,EAAQ,aAAaF,CAAQ,EAAIsL,EAClDrL,EAAU,KAAK,IAAIC,EAAQ,oBAAoBD,EAAS,CAAC,EAAGC,EAAQ,UAAW,EAAG,CAAC,EACnF0iC,EAAYztB,EAAK,eAAiBjV,EAAQ,aAAaD,CAAO,EAAIqL,EAC9D23B,EACJhtB,EAAS,KAAK,UAAY+sB,EAAiB13B,EAC3C,IAAIwzB,EAAU,EACd,OAAI,KAAK,YAAY,OAAS0D,GAAeE,KACzC5D,EAAU,KAAK,kBACf4D,GAAkBI,KAClBhE,GAAW,KAAK,kBAAkB,GAAM,KAAK,YAAa3pB,EAAK,MAAOA,EAAK,MAAM,EACjF,KAAK,QAAQ,4BAA4B,EACrC2tB,IACAN,EAAc,KAAK,oBAE3B,KAAK,YAAc,CACf,MAAOA,EACP,QAAS,KAAK,SACd,SAAUxiC,EACV,eAAgBgjC,EAChB,QAAS/iC,EACT,WAAYqL,EACZ,eAAgB,KAAK,eACrB,UAAWs3B,EACX,UAAWR,EACX,OAAQnsB,EACR,aAAc3K,EAAa,KAAK,IAAI,EAAG,KAAK,MAAM2K,EAASd,EAAK,OAASA,EAAK,gBAAkB7J,CAAU,CAAC,EAAI,EAC/G,OAAQ,KAAK,MAAM,cAC/B,EACY,KAAK,QAAQ,cACb,KAAK,QAAQ,aAAa,gBAAgBk3B,EAAc,KAAK,QAAQ,EAClE1D,CACf,EACI,KAAK,aAAe,UAAY,CAC5B,GAAK,KAAK,cAEV,KAAI9+B,EAAW,KAAK,cAAc,SAC9BC,EAAU,KAAK,cAAc,QACjC,KAAK,cAAgB,KACrB,IAAIo6B,EAAc,KAAK,YACvB,GAAI,EAAAr6B,EAAWq6B,EAAY,QAAU,IAGjC,EAAAp6B,EAAUo6B,EAAY,UAG1B,IAAIp6B,IAAY,IAAU,CAClB,KAAK,aACL,KAAK,aAAa,OAAOo6B,CAAW,EACxC,KAAK,WAAW,OAAOA,CAAW,EAClC,OAEJ,YAAK,WAAW,YAAYA,EAAar6B,EAAUC,CAAO,EACnD,IACf,EACI,KAAK,gBAAkB,UAAY,CAC/B,IAAIijC,EAAY,KAAK,QAAQ,eAAc,EAC3C,OAAI,KAAK,gBAAkB,CAAC,KAAK,QAAQ,eACrCA,GAAa,GACb,KAAK,YAAcA,EAAY,KAAK,WAAW,kBAC/CA,EAAY,KAAK,WAAW,gBAAkB,IAC3C,KAAK,IAAI,KAAK,MAAM,cAAgB,EAAI,KAAK,SAAU,KAAK,MAAMA,EAAY,KAAK,cAAc,CAAC,CACjH,EACI,KAAK,mBAAqB,UAAY,CAClC,KAAK,aAAa,WAAW,KAAK,QAAQ,WAAW,EAAI,CAAC,EAC1D,KAAK,MAAM,SAAS,KAAK,mBAAmB,CACpD,EACI,KAAK,kBAAoB,UAAY,CACjC,KAAK,YAAY,WAAW,KAAK,QAAQ,WAAU,CAAE,EACrD,KAAK,MAAM,SAAS,KAAK,kBAAkB,CACnD,EACI,KAAK,oBAAsB,SAAUtjC,EAAKpJ,EAAW,CACjD,KAAK,aAAa,oBAAoBoJ,EAAKpJ,CAAS,CAC5D,EACI,KAAK,uBAAyB,SAAUoJ,EAAKpJ,EAAW,CACpD,KAAK,aAAa,uBAAuBoJ,EAAKpJ,CAAS,CAC/D,EACI,KAAK,kBAAoB,SAAUyhB,EAAM,CACrC,KAAK,MAAM,SAAS,KAAK,aAAa,CAC9C,EACI,KAAK,eAAiB,SAAUqR,EAAa,CACzC,KAAK,aAAa,eAAeA,CAAW,EAC5C,KAAK,MAAM,SAAS,KAAK,aAAa,CAC9C,EACI,KAAK,aAAe,UAAY,CAC5B,KAAK,MAAM,SAAS,KAAK,aAAa,CAC9C,EACI,KAAK,WAAa,UAAY,CAC1B,KAAK,aAAa,YAC1B,EACI,KAAK,WAAa,UAAY,CAC1B,KAAK,aAAa,YAC1B,EACI,KAAK,wBAA0B,SAAU5iB,EAAQgQ,EAAMT,EAAQ,CAC3D,KAAK,qBAAqBvP,EAAQuP,CAAM,EACxC,KAAK,qBAAqBS,EAAMT,CAAM,CAC9C,EACI,KAAK,qBAAuB,SAAUtP,EAAQsP,EAAQktB,EAAa,CAC/D,GAAI,KAAK,MAAM,iBAAmB,EAElC,KAAI98B,EAAM,KAAK,aAAa,iBAAiBM,CAAM,EAC/Cy8B,EAAU/8B,EAAI,KACdg9B,EAASh9B,EAAI,IACbi9B,EAAYH,GAAeA,EAAY,KAAO,EAC9CI,EAAeJ,GAAeA,EAAY,QAAU,EACpD,KAAK,mBACL,KAAK,eAAiB,IAE1B,IAAIK,EAAa,KAAK,iBAAmB,KAAK,QAAQ,aAAY,EAAK,KAAK,UACxEA,EAAaF,EAAYD,GACrBptB,GAAUutB,EAAaF,EAAYD,EAAS,KAAK,aACjDA,GAAUptB,EAAS,KAAK,MAAM,gBAC9BotB,IAAW,IACXA,EAAS,CAAC,KAAK,aAAa,KAChC,KAAK,QAAQ,aAAaA,CAAM,GAE3BG,EAAa,KAAK,MAAM,eAAiBD,EAAeF,EAAS,KAAK,aACvEptB,GAAUutB,EAAa,KAAK,MAAM,eAAiBD,EAAeF,EAAS,KAAK,aAChFA,GAAUptB,EAAS,KAAK,MAAM,gBAClC,KAAK,QAAQ,aAAaotB,EAAS,KAAK,WAAaE,EAAe,KAAK,MAAM,cAAc,GAEjG,IAAIE,EAAc,KAAK,WACnBC,EAAgB,EAAI,KAAK,YAAY,eACrCN,EAAUM,EAAgBD,GAC1BL,GAAWM,EACPN,EAAU,KAAK,SAAWM,IAC1BN,EAAU,CAAC,KAAK,aAAa,MAEjC,KAAK,QAAQ,cAAcA,CAAO,IAGlCA,GAAWM,EACPD,EAAc,KAAK,MAAM,cAAgBL,EAAU,KAAK,eACxD,KAAK,QAAQ,cAAc,KAAK,MAAMA,EAAU,KAAK,eAAiB,KAAK,MAAM,aAAa,CAAC,EAE1FK,GAAe,KAAK,UAAYL,EAAUK,EAAc,KAAK,gBAClE,KAAK,QAAQ,cAAc,CAAC,GAG5C,EACI,KAAK,aAAe,UAAY,CAC5B,OAAO,KAAK,QAAQ,cAC5B,EACI,KAAK,cAAgB,UAAY,CAC7B,OAAO,KAAK,QAAQ,eAC5B,EACI,KAAK,gBAAkB,UAAY,CAC/B,OAAO,KAAK,UAAY,KAAK,UACrC,EACI,KAAK,mBAAqB,UAAY,CAClC,OAAO,KAAK,IAAI,EAAG,KAAK,OAAO,KAAK,UAAY,KAAK,MAAM,gBAAkB,KAAK,UAAU,EAAI,CAAC,CACzG,EACI,KAAK,YAAc,SAAU7jC,EAAK,CAC9B,KAAK,QAAQ,aAAaA,EAAM,KAAK,UAAU,CACvD,EACI,KAAK,YAAc,SAAU+G,EAAQg9B,EAAW,CACxC,OAAOh9B,GAAU,WACjBA,EAAS,CAAE,IAAKA,EAAQ,OAAQ,CAAC,GACrC,IAAIN,EAAM,KAAK,aAAa,iBAAiBM,CAAM,EAC/CyH,EAAI,KAAK,MAAM,eAAiB,KAAK,WACrC6H,EAAS5P,EAAI,IAAM+H,GAAKu1B,GAAa,GACzC,YAAK,QAAQ,aAAa1tB,CAAM,EACzBA,CACf,EACI,KAAK,MAAQ,EACb,KAAK,WAAa,SAAU2tB,EAAWC,EAAS,CAC5C,IAAIjzC,EAAI,EACJC,EAAI,KAAK,MACTizC,EAAQ,CAAA,EACRtrB,EAAO,SAAUnW,EAAG0hC,EAAOC,EAAI,CAC/B,OAAOA,GAAM,KAAK,IAAI3hC,EAAI,EAAG,CAAC,EAAI,GAAK0hC,CACnD,EACQ,IAAKnzC,EAAI,EAAGA,EAAIC,EAAG,EAAED,EACjBkzC,EAAM,KAAKtrB,EAAK5nB,EAAI,KAAK,MAAOgzC,EAAWC,EAAUD,CAAS,CAAC,EACnE,OAAOE,CACf,EACI,KAAK,aAAe,SAAUhhC,EAAMqyB,EAAQrmB,EAASre,EAAU,CAC3D,IAAI4V,EAAM,KAAK,aAAa,iBAAiB,CAAE,IAAKvD,EAAM,OAAQ,CAAC,CAAE,EACjEmT,EAAS5P,EAAI,IACb8uB,IACAlf,GAAU,KAAK,MAAM,eAAiB,GAC1C,IAAIguB,EAAgB,KAAK,UACzB,KAAK,QAAQ,aAAahuB,CAAM,EAC5BnH,IAAY,IACZ,KAAK,iBAAiBm1B,EAAexzC,CAAQ,CACzD,EACI,KAAK,iBAAmB,SAAUmzC,EAAWnzC,EAAU,CACnD,IAAIozC,EAAU,KAAK,UACnB,GAAI,CAAC,KAAK,gBACN,OACJ,IAAIjvC,EAAQ,KACZ,GAAIgvC,GAAaC,EACb,OACJ,GAAI,KAAK,iBAAkB,CACvB,IAAIK,EAAW,KAAK,iBAAiB,MACrC,GAAIA,EAAS,SACTN,EAAYM,EAAS,CAAC,EAClBN,GAAaC,GACb,OAGZ,IAAIC,EAAQlvC,EAAM,WAAWgvC,EAAWC,CAAO,EAC/C,KAAK,iBAAmB,CAAE,KAAMD,EAAW,GAAIC,EAAS,MAAOC,GAC/D,cAAc,KAAK,MAAM,EACzBlvC,EAAM,QAAQ,aAAakvC,EAAM,MAAO,CAAA,EACxClvC,EAAM,QAAQ,WAAaivC,EAC3B,SAASM,GAAe,CACpBvvC,EAAM,OAAS,cAAcA,EAAM,MAAM,EACzCA,EAAM,iBAAmB,KACzBA,EAAM,eAAiB,GACvBnE,GAAYA,EAAQ,CACvB,CACD,KAAK,OAAS,YAAY,UAAY,CAClC,GAAImE,EAAM,eAAgB,CACtBuvC,IACA,OAEJ,GAAI,CAACvvC,EAAM,QACP,OAAO,cAAcA,EAAM,MAAM,EACjCkvC,EAAM,QACNlvC,EAAM,QAAQ,aAAakvC,EAAM,MAAO,CAAA,EACxClvC,EAAM,QAAQ,WAAaivC,GAEtBA,GAAW,MAChBjvC,EAAM,QAAQ,WAAa,GAC3BA,EAAM,QAAQ,aAAaivC,CAAO,EAClCA,EAAU,MAGVM,GAEP,EAAE,EAAE,CACb,EACI,KAAK,UAAY,SAAUta,EAAW,CAC9B,KAAK,YAAcA,IACnB,KAAK,MAAM,SAAS,KAAK,aAAa,EACtC,KAAK,UAAYA,EAE7B,EACI,KAAK,UAAY,SAAU/b,EAAY,CAC/B,KAAK,aAAeA,IACpB,KAAK,WAAaA,GACtB,KAAK,MAAM,SAAS,KAAK,eAAe,CAChD,EACI,KAAK,SAAW,SAAU1R,EAAG6L,EAAG,CAC5B,KAAK,QAAQ,aAAaA,CAAC,EAC3B,KAAK,QAAQ,cAAc7L,CAAC,CACpC,EACI,KAAK,SAAW,SAAUoB,EAAQC,EAAQ,CACtCA,GAAU,KAAK,QAAQ,aAAa,KAAK,QAAQ,eAAiBA,CAAM,EACxED,GAAU,KAAK,QAAQ,cAAc,KAAK,QAAQ,gBAAkBA,CAAM,CAClF,EACI,KAAK,eAAiB,SAAUA,EAAQC,EAAQ,CAQ5C,GAPIA,EAAS,GAAK,KAAK,QAAQ,aAAY,GAAM,EAAI,KAAK,aAAa,KAEnEA,EAAS,GAAK,KAAK,QAAQ,eAAiB,KAAK,MAAM,eACrD,KAAK,YAAY,UAAY,GAAK,KAAK,aAAa,QAEtDD,EAAS,GAAK,KAAK,QAAQ,cAAa,GAAM,EAAI,KAAK,aAAa,MAEpEA,EAAS,GAAK,KAAK,QAAQ,gBAAkB,KAAK,MAAM,cACtD,KAAK,YAAY,MAAQ,GAAK,KAAK,aAAa,MAClD,MAAO,EACnB,EACI,KAAK,yBAA2B,SAAUpB,EAAG6L,EAAG,CAC5C,IAAIm8B,EACJ,GAAI,KAAK,kBAAmB,CACxBA,EAAY,CAAE,IAAK,EAAG,KAAM,CAAC,EAC7B,IAAIrkC,EAAI,KAAK,aAAa,qBAAqB,CAAC3D,EAAG6L,CAAC,CAAC,EACrD7L,EAAI2D,EAAE,CAAC,EAAI,KAAK,YAAc,KAAK,OAAO,KAC1CkI,EAAIlI,EAAE,CAAC,OAGPqkC,EAAY,KAAK,SAAS,wBAE9B,IAAIjsB,EAAU/b,EAAI,KAAK,WAAagoC,EAAU,KAAO,KAAK,SACtDnuB,EAASkC,EAAU,KAAK,eACxBvY,EAAM,KAAK,OAAOqI,EAAI,KAAK,UAAYm8B,EAAU,KAAO,KAAK,UAAU,EACvE3uB,EAAM,KAAK,aAAe,KAAK,MAAMQ,CAAM,EAAI,KAAK,MAAMA,CAAM,EACpE,MAAO,CAAE,IAAKrW,EAAK,OAAQ6V,EAAK,KAAMQ,EAASR,EAAM,EAAI,EAAI,GAAI,QAAS0C,CAAO,CACzF,EACI,KAAK,wBAA0B,SAAU/b,EAAG6L,EAAG,CAC3C,IAAIm8B,EACJ,GAAI,KAAK,kBAAmB,CACxBA,EAAY,CAAE,IAAK,EAAG,KAAM,CAAC,EAC7B,IAAIrkC,EAAI,KAAK,aAAa,qBAAqB,CAAC3D,EAAG6L,CAAC,CAAC,EACrD7L,EAAI2D,EAAE,CAAC,EAAI,KAAK,YAAc,KAAK,OAAO,KAC1CkI,EAAIlI,EAAE,CAAC,OAGPqkC,EAAY,KAAK,SAAS,wBAE9B,IAAIjsB,EAAU/b,EAAI,KAAK,WAAagoC,EAAU,KAAO,KAAK,SACtDnuB,EAASkC,EAAU,KAAK,eACxB1C,EAAM,KAAK,aAAe,KAAK,MAAMQ,CAAM,EAAI,KAAK,MAAMA,CAAM,EAChErW,EAAM,KAAK,OAAOqI,EAAI,KAAK,UAAYm8B,EAAU,KAAO,KAAK,UAAU,EAC3E,OAAO,KAAK,QAAQ,yBAAyBxkC,EAAK,KAAK,IAAI6V,EAAK,CAAC,EAAG0C,CAAO,CACnF,EACI,KAAK,wBAA0B,SAAUvY,EAAKC,EAAQ,CAClD,IAAIukC,EAAY,KAAK,SAAS,sBAAqB,EAC/C/9B,EAAM,KAAK,QAAQ,yBAAyBzG,EAAKC,CAAM,EACvDzD,EAAI,KAAK,UAAY,KAAK,QAAQ,aAAa,UAAUiK,EAAI,IAAKzG,CAAG,EACnE,KAAK,QAAQ,aAAa,WAAWyG,EAAI,MAAM,EAC/C,KAAK,MAAMA,EAAI,OAAS,KAAK,cAAc,GAC7C4B,EAAI5B,EAAI,IAAM,KAAK,WACvB,MAAO,CACH,MAAO+9B,EAAU,KAAOhoC,EAAI,KAAK,WACjC,MAAOgoC,EAAU,IAAMn8B,EAAI,KAAK,SAC5C,CACA,EACI,KAAK,eAAiB,UAAY,CAC9BlQ,EAAI,YAAY,KAAK,UAAW,WAAW,CACnD,EACI,KAAK,cAAgB,UAAY,CAC7BA,EAAI,eAAe,KAAK,UAAW,WAAW,CACtD,EACI,KAAK,gBAAkB,SAAUm6B,EAAa,CAC1C,KAAK,aAAeA,EACfA,EAAY,UACbA,EAAY,QAAU,KAAK,SAAS,MAAM,SAE1CA,EAAY,mBAAqB,OACjCA,EAAY,kBAAoB,KAAK,oBACrC,KAAK,oBACLn6B,EAAI,YAAY,KAAK,SAAU,iBAAiB,EAChD,KAAK,SAAS,MAAM,QAAU,GAC9B,KAAK,sBAAqB,EAC1B,KAAK,aAAa,QAAQ,MAAM,QAAU,QAG1Cm6B,EAAY,SAAW,KAAK,QAAQ,UAAUA,EAAY,YAAa,yBAA0B,MAAM,CAEnH,EACI,KAAK,mBAAqB,SAAU9wB,EAAM,CACtC,IAAIuF,EAAS,KAAK,QAAQ,UAAU,OACpC,KAAK,SAASvF,EAAM,0BAA2BuF,EAAO,IAAKA,EAAO,MAAM,EACxE,KAAK,sBAAqB,CAClC,EACI,KAAK,gBAAkB,UAAY,CAC/B,GAAK,KAAK,aAEV,CAAI,KAAK,aAAa,UAClB,KAAK,QAAQ,aAAa,KAAK,aAAa,QAAQ,EACxD5O,EAAI,eAAe,KAAK,SAAU,iBAAiB,EACnD,KAAK,SAAS,MAAM,QAAU,KAAK,aAAa,QAChD,IAAI4O,EAAS,KAAK,QAAQ,UAAU,OACpC,KAAK,iBAAiBA,EAAO,IAAKA,EAAO,MAAM,EAC/C,KAAK,aAAe,KACpB,KAAK,aAAa,QAAQ,MAAM,QAAU,GAClD,EACI,KAAK,aAAe,SAAUvF,EAAMlP,EAAU,CAC1C,IAAIyU,EAAS,KAAK,QAAQ,UAAU,OAChC09B,EAAiBnyC,GAAY,CAAE,IAAKyU,EAAO,IAAK,OAAQA,EAAO,QACnE,KAAK,gBAAe,EACpB,IAAI29B,EAAYljC,EAAK,MAAM;AAAA,CAAI,EAC/B,KAAK,SAASkjC,EAAU,CAAC,EAAG,aAAcD,EAAe,IAAKA,EAAe,MAAM,EACnF,KAAK,WAAa,CACd,KAAMjjC,EACN,SAAU,CACN,IAAKijC,EAAe,IACpB,OAAQA,EAAe,MAC1B,CACb,EACYC,EAAU,OAAS,IACnB,KAAK,iBAAmB,CACpB,KAAMA,EAAU,MAAM,CAAC,EAAE,KAAK;AAAA,CAAI,EAClC,IAAKD,EAAe,IACpB,OAAQA,EAAe,OACvB,UAAW,gBAC3B,EACY,KAAK,QAAQ,cAAc,cAAc,KAAK,gBAAgB,EAE1E,EACI,KAAK,gBAAkB,UAAY,CAC/B,GAAK,KAAK,WAEV,KAAInyC,EAAW,KAAK,WAAW,SAC/B,KAAK,iBAAiBA,EAAS,IAAKA,EAAS,MAAM,EAC/C,KAAK,mBACL,KAAK,QAAQ,cAAc,iBAAiB,KAAK,gBAAgB,EACjE,KAAK,iBAAmB,MAE5B,KAAK,WAAa,KAC1B,EACI,KAAK,SAAW,SAAUkP,EAAMrE,EAAM6C,EAAKC,EAAQ,CAC/C,IAAIK,EAAU,KAAK,QACnBA,EAAQ,YAAY,MAAMN,CAAG,EAAI,KACjC,IAAI2kC,EAAW,CAAE,KAAMxnC,EAAM,MAAOqE,CAAI,EACpCoY,EAAStZ,EAAQ,UAAUN,CAAG,EAClC,GAAIC,GAAU,KACV2Z,EAAO,KAAK+qB,CAAQ,MAIpB,SADI1zC,EAAI,EACCD,EAAI,EAAGA,EAAI4oB,EAAO,OAAQ5oB,IAAK,CACpC,IAAIupB,EAAQX,EAAO5oB,CAAC,EAEpB,GADAC,GAAKspB,EAAM,MAAM,OACbta,GAAUhP,EAAG,CACb,IAAIi6B,EAAO3Q,EAAM,MAAM,QAAUtpB,EAAIgP,GACjCof,EAAS9E,EAAM,MAAM,MAAM,EAAG2Q,CAAI,EAClC5L,EAAQ/E,EAAM,MAAM,MAAM2Q,CAAI,EAClCtR,EAAO,OAAO5oB,EAAG,EAAG,CAAE,KAAMupB,EAAM,KAAM,MAAO8E,CAAM,EAAIslB,EAAU,CAAE,KAAMpqB,EAAM,KAAM,MAAO+E,CAAK,CAAE,EACrG,OAIZ,KAAK,YAAYtf,EAAKA,CAAG,CACjC,EACI,KAAK,iBAAmB,SAAUA,EAAKC,EAAQ,CAC3C,KAAK,YAAYD,EAAKA,CAAG,CACjC,EACI,KAAK,SAAW,SAAUqxB,EAAOx2B,EAAI,CACjC,IAAI7F,EAAQ,KAGZ,GAFA,KAAK,SAAWq8B,EAChBr8B,EAAM,eAAe,cAAe,CAAE,MAAOq8B,CAAO,CAAA,EAChD,CAACA,GAAS,OAAOA,GAAS,SAAU,CACpC,IAAI//B,EAAa+/B,GAAS,KAAK,SAAS,MAAM,aAC9Cj2B,EAAO,WAAW,CAAC,QAAS9J,CAAU,EAAG2J,CAAS,OAGlDA,EAAUo2B,CAAK,EAEnB,SAASp2B,EAAUzK,EAAQ,CACvB,GAAIwE,EAAM,UAAYq8B,EAClB,OAAOx2B,GAAMA,IACjB,GAAI,CAACrK,GAAU,CAACA,EAAO,SACnB,MAAM,IAAI,MAAM,wBAA0B6gC,EAAQ,2BAA2B,EAC7E7gC,EAAO,MACPwE,EAAM,SAAWxE,EAAO,KAC5B2H,EAAI,gBAAgB3H,EAAO,QAASA,EAAO,SAAUwE,EAAM,SAAS,EAChEA,EAAM,OACNmD,EAAI,eAAenD,EAAM,UAAWA,EAAM,MAAM,QAAQ,EAC5D,IAAI8kC,EAAU,YAAatpC,EAASA,EAAO,QACrC,YAAcwE,EAAM,OAAS,CAAA,GAAM,EAAIA,EAAM,SAC/CA,EAAM,UAAY8kC,GAAW9kC,EAAM,UACnCA,EAAM,WAAW8kC,CAAO,EAC5B9kC,EAAM,OAASxE,EAAO,SACtBwE,EAAM,MAAQxE,EACd2H,EAAI,YAAYnD,EAAM,UAAWxE,EAAO,QAAQ,EAChD2H,EAAI,YAAYnD,EAAM,UAAW,WAAYxE,EAAO,MAAM,EACtDwE,EAAM,QACNA,EAAM,MAAM,MAAQ,EACpBA,EAAM,iBAAgB,GAE1BA,EAAM,eAAe,cAAe,CAAE,MAAOxE,CAAQ,CAAA,EACrDqK,GAAMA,EAAE,CACX,CACT,EACI,KAAK,SAAW,UAAY,CACxB,OAAO,KAAK,QACpB,EACI,KAAK,SAAW,SAAUtD,EAAOV,EAAS,CACtCsB,EAAI,YAAY,KAAK,UAAWZ,EAAOV,IAAY,EAAK,CAChE,EACI,KAAK,WAAa,SAAUU,EAAO,CAC/BY,EAAI,eAAe,KAAK,UAAWZ,CAAK,CAChD,EACI,KAAK,eAAiB,SAAUA,EAAO,CACnCY,EAAI,SAAS,KAAK,SAAS,MAAO,SAAUZ,CAAK,CACzD,EACI,KAAK,eAAiB,SAAUoV,EAAa,CACzCxU,EAAI,SAAS,KAAK,SAAS,MAAO,SAAUwU,CAAW,CAC/D,EACI,KAAK,mBAAqB,UAAY,CAClCxU,EAAI,gBAAgBqpC,EAAW,iBAAkB,KAAK,SAAS,CACvE,EACI,KAAK,QAAU,UAAY,CACvB,KAAK,OAAM,EACX,KAAK,aAAa,UAClB,KAAK,aAAa,UAClB,KAAK,mBAAkB,EACvB,KAAK,UAAU,YAAc,EACrC,EACI,KAAK,uBAAyB,SAAUpvC,EAAK,CACzC,IAAI4C,EAAQ,KACZ,KAAK,aAAe,KAAK,SAAW,KACpC,KAAK,WAAW,QAAQ,SACxB,KAAK,WAAW,QAAQ,SACpB,KAAK,kBACL,OAAO,KAAK,iBAEZ5C,IAAQ,IACR,KAAK,WAAa,IAAImvC,EAAiB,KAAK,UAAW,IAAI,EAC3D,KAAK,WAAa,IAAID,EAAiB,KAAK,UAAW,IAAI,EAC3D,KAAK,WAAW,UAAU,KAAK,MAAM,cAAc,EACnD,KAAK,WAAW,SAAS,KAAK,MAAM,aAAa,EACjD,KAAK,WAAW,iBAAiB,SAAU,SAAUvoC,EAAG,CAC/C/D,EAAM,kBACPA,EAAM,QAAQ,aAAa+D,EAAE,KAAO/D,EAAM,aAAa,GAAG,CAC9E,CAAa,EACD,KAAK,WAAW,iBAAiB,SAAU,SAAU+D,EAAG,CAC/C/D,EAAM,kBACPA,EAAM,QAAQ,cAAc+D,EAAE,KAAO/D,EAAM,aAAa,IAAI,CAChF,CAAa,EACD,KAAK,iBAAmB,IAAIurC,EAAU,KAAK,WAAY,IAAI,EAC3D,KAAK,iBAAiB,sBAGtB,KAAK,WAAa,IAAIjC,EAAW,KAAK,UAAW,IAAI,EACrD,KAAK,WAAa,IAAIC,EAAW,KAAK,UAAW,IAAI,EACrD,KAAK,WAAW,iBAAiB,SAAU,SAAUxlC,EAAG,CAC/C/D,EAAM,kBACPA,EAAM,QAAQ,aAAa+D,EAAE,KAAO/D,EAAM,aAAa,GAAG,CAC9E,CAAa,EACD,KAAK,WAAW,iBAAiB,SAAU,SAAU+D,EAAG,CAC/C/D,EAAM,kBACPA,EAAM,QAAQ,cAAc+D,EAAE,KAAO/D,EAAM,aAAa,IAAI,CAChF,CAAa,EAEb,CACA,GAAG,KAAK0sC,EAAgB,SAAS,EACjCtmC,EAAO,cAAcsmC,EAAgB,UAAW,WAAY,CACxD,eAAgB,CAAE,aAAc,EAAO,EACvC,eAAgB,CACZ,IAAK,SAAUjuC,EAAO,CACd,KAAK,WAAW,kBAAkBA,CAAK,GACvC,KAAK,MAAM,SAAS,KAAK,WAAW,CAC3C,EACD,aAAc,EACjB,EACD,gBAAiB,CACb,IAAK,UAAY,CAAE,KAAK,mBAAoB,CAAG,EAC/C,aAAc,EACjB,EACD,kBAAmB,CACf,IAAK,UAAY,CAAE,KAAK,mBAAoB,CAAG,EAC/C,aAAc,EACjB,EACD,YAAa,CACT,IAAK,SAAUrB,EAAK,CACZ,OAAOA,GAAO,WACd,KAAK,mBAAqBA,GAC9B,KAAK,iBAAmB,CAAC,CAACA,EAC1B,KAAK,mBAAkB,CAC1B,EACD,IAAK,UAAY,CACb,OAAO,KAAK,kBAAoB,KAAK,kBACxC,CACJ,EACD,WAAY,CACR,IAAK,SAAU2gC,EAAM,CACjB,KAAK,QAAQ,MAAM,QAAUA,EAAO,QAAU,OAC9C,KAAK,MAAM,SAAS,KAAK,WAAW,EACpC,KAAK,eAAc,CACtB,EACD,aAAc,EACjB,EACD,gBAAiB,CACb,IAAK,SAAUA,EAAM,CACjB56B,EAAI,YAAY,KAAK,QAAS,wBAAyB46B,CAAI,CAC9D,EACD,aAAc,EACjB,EACD,gBAAiB,CACb,IAAK,SAAUA,EAAM,CACjB,KAAK,aAAa,mBAAmBA,CAAI,EACzC,KAAK,MAAM,SAAS,KAAK,aAAa,CACzC,EACD,aAAc,EACjB,EACD,oBAAqB,CACjB,IAAK,SAAUA,EAAM,CACb,KAAK,WAAW,uBAAuBA,CAAI,GAC3C,KAAK,MAAM,SAAS,KAAK,WAAW,CAC3C,EACD,aAAc,EACjB,EACD,sBAAuB,CACnB,IAAK,SAAUA,EAAM,CACb,KAAK,WAAW,yBAAyBA,CAAI,GAAK,GAClD,KAAK,WAAW,wBAGhB,KAAK,WAAW,wBAAwB,KAAK,WAAW,OAAO,KAAK,CAE3E,EACD,aAAc,EACjB,EACD,oBAAqB,CACjB,IAAK,SAAUL,EAAiB,CAC5B,KAAK,aAAa,uBAAuBA,CAAe,EACxD,KAAK,MAAM,SAAS,KAAK,aAAa,CACzC,EACD,aAAc,EACjB,EACD,wBAAyB,CACrB,IAAK,SAAUtgC,EAAK,EACZ,CAAC,KAAK,0BAA4B,CAAC,KAAK,eACxC,KAAK,MAAM,SAAS,KAAK,aAAa,CAC7C,EACD,aAAc,EACjB,EACD,wBAAyB,CACrB,IAAK,SAAUA,EAAK,EACZ,CAAC,KAAK,0BAA4B,CAAC,KAAK,WACxC,KAAK,MAAM,SAAS,KAAK,aAAa,CAC7C,EACD,aAAc,EACjB,EACD,SAAU,CACN,IAAK,SAAUmjB,EAAM,CACb,OAAOA,GAAQ,WACfA,EAAOA,EAAO,MAClB,KAAK,UAAU,MAAM,SAAWA,EAChC,KAAK,eAAc,CACtB,EACD,aAAc,EACjB,EACD,WAAY,CACR,IAAK,SAAUpjB,EAAM,CACjB,KAAK,UAAU,MAAM,WAAaA,EAClC,KAAK,eAAc,CACtB,CACJ,EACD,SAAU,CACN,IAAK,SAAUC,EAAK,CAChB,KAAK,WAAU,CAClB,CACJ,EACD,SAAU,CACN,IAAK,SAAUA,EAAK,CACV,KAAK,UAAY,kBACnB,KAAK,UAAY,GACrB,KAAK,WAAU,CAClB,CACJ,EACD,eAAgB,CACZ,IAAK,SAAUA,EAAK,CAChB,KAAK,WAAU,CAClB,EACD,aAAc,CACjB,EACD,cAAe,CACX,IAAK,SAAUA,EAAK,CAChBA,EAAM,CAACA,GAAO,EACV,KAAK,gBAAkBA,IAE3B,KAAK,eAAiBA,EACtB,KAAK,MAAM,SAAS,KAAK,aAAa,EACzC,EACD,aAAc,EACd,WAAY,EACf,EACD,iBAAkB,CACd,IAAK,SAAUA,EAAK,CAChB,KAAK,aAAa,YAAc,CAAC,CAACA,EAClC,KAAK,MAAM,SAAS,KAAK,aAAa,CACzC,CACJ,EACD,gBAAiB,CACb,IAAK,SAAUA,EAAK,CAChB,KAAK,uBAAuBA,CAAG,CAClC,EACD,aAAc,EACjB,EACD,MAAO,CACH,IAAK,SAAUA,EAAK,CAAE,KAAK,SAASA,CAAG,CAAI,EAC3C,IAAK,UAAY,CAAE,OAAO,KAAK,UAAY,KAAK,KAAQ,EACxD,aAAc,mBACd,WAAY,EACf,EACD,iBAAkB,CAAE,EACpB,kBAAmB,CACf,aAAc,CAACqD,EAAU,UAAY,CAACA,EAAU,IACnD,CACL,CAAC,EACD/D,EAAQ,gBAAkBgwC,CAE1B,CAAC,EAED,IAAI,OAAO,2BAA2B,CAAC,UAAU,UAAU,SAAS,cAAc,cAAc,wBAAwB,YAAY,EAAG,SAASvwC,EAASO,EAASlB,EAAQ,CAG1K,IAAIgJ,EAAMrI,EAAQ,YAAY,EAC1BmJ,EAAMnJ,EAAQ,YAAY,EAC1BwH,EAAexH,EAAQ,sBAAsB,EAAE,aAC/CiK,EAASjK,EAAQ,WAAW,EAEhC,SAASyzC,EAAYC,EAAW,CAC5B,IAAIhpC,EAAS,kBAAoBvB,EAAI,WAAWuqC,CAAS,EAAI,MAC7D,GAAI,CACA,OAAO,IAAI,KAAK,CAAChpC,CAAM,EAAG,CAAC,KAAQ,wBAAwB,CAAC,CAC/D,MAAC,CACE,IAAIipC,EAAc,OAAO,aAAe,OAAO,mBAAqB,OAAO,eACvEC,EAAc,IAAID,EACtB,OAAAC,EAAY,OAAOlpC,CAAM,EAClBkpC,EAAY,QAAQ,wBAAwB,CACtD,CACJ,CAED,SAASC,EAAaH,EAAW,CAC7B,GAAI,OAAO,OAAU,IACjB,MAAO,CAAE,YAAa,UAAW,CAAA,EAAI,UAAW,UAAW,CAAE,CAAA,EACjE,GAAIzpC,EAAO,IAAI,oBAAoB,EAAG,CAClC,IAAI6pC,EAAOL,EAAYC,CAAS,EAC5BK,EAAM,OAAO,KAAO,OAAO,UAC3BC,EAAUD,EAAI,gBAAgBD,CAAI,EACtC,OAAO,IAAI,OAAOE,CAAO,EAE7B,OAAO,IAAI,OAAON,CAAS,CAC9B,CAED,IAAIO,EAAe,SAASC,EAAQ,CAC3BA,EAAO,cACRA,EAAS,KAAK,2BAA2B,MAAM,KAAM,SAAS,GAElE,KAAK,QAAUA,EACf,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,UAAY,KAAK,UAAU,KAAK,IAAI,EAEzC,KAAK,WAAa,EAClB,KAAK,UAAY,GAEjB,KAAK,QAAQ,UAAY,KAAK,SAClC,GAEC,UAAU,CAEP7rC,EAAI,UAAU,KAAMb,CAAY,EAEhC,KAAK,2BAA6B,SAAS2sC,EAAoB3zC,EAAK4zC,EAAWV,EAAWW,EAAe,CAIrG,GAHIr0C,EAAQ,WAAa,CAACA,EAAQ,QAC9BA,EAAQ,MAAQA,EAAQ,WAExBiK,EAAO,IAAI,UAAU,GAAK,CAACjK,EAAQ,MACnC0zC,EAAYA,GAAazpC,EAAO,UAAUzJ,EAAK,QAAQ,MACpD,CACH,IAAI8zC,EAAgB,KAAK,eACzBZ,EAAYA,GAAaY,EAAct0C,EAAQ,MAAM,uBAAwB,KAAM,GAAG,CAAC,EAEvF,IAAIu0C,EAAO,CAAA,EACXJ,EAAmB,QAAQ,SAASvzC,EAAI,CACpC2zC,EAAK3zC,CAAE,EAAI0zC,EAAct0C,EAAQ,MAAMY,EAAI,KAAM,GAAG,EAAE,QAAQ,kBAAmB,EAAE,CAAC,CACpG,CAAa,EAGL,YAAK,QAAUizC,EAAaH,CAAS,EACjCW,GACA,KAAK,KAAK,gBAAiBA,CAAa,EAE5C,KAAK,QAAQ,YAAY,CACrB,KAAO,GACP,KAAOE,EACP,OAAS/zC,EACT,UAAY4zC,CACxB,CAAS,EACM,KAAK,OACpB,EAEI,KAAK,UAAY,SAASxsC,EAAG,CACzB,IAAIiB,EAAMjB,EAAE,KACZ,OAAQiB,EAAI,KAAI,CACZ,IAAK,QACD,KAAK,QAAQA,EAAI,KAAM,CAAC,KAAMA,EAAI,IAAI,CAAC,EACvC,MACJ,IAAK,OACD,IAAInJ,EAAW,KAAK,UAAUmJ,EAAI,EAAE,EAChCnJ,IACAA,EAASmJ,EAAI,IAAI,EACjB,OAAO,KAAK,UAAUA,EAAI,EAAE,GAEhC,MACJ,IAAK,QACD,KAAK,YAAYA,EAAI,IAAI,EACzB,MACJ,IAAK,MACD,OAAO,SAAW,QAAQ,KAAO,QAAQ,IAAI,MAAM,QAASA,EAAI,IAAI,EACpE,KACP,CACT,EAEI,KAAK,YAAc,SAASkB,EAAK,CAC7B,OAAO,SAAW,QAAQ,OAAS,QAAQ,MAAMA,CAAG,CAC5D,EAEI,KAAK,eAAiB,SAAS5C,EAAM,CACjC,OAAOgC,EAAI,WAAWhC,CAAI,CAClC,EAEI,KAAK,UAAY,UAAW,CACxB,KAAK,QAAQ,YAAa,CAAA,CAAE,EAC5B,KAAK,WAAa,KAClB,KAAK,QAAQ,YACb,KAAK,QAAU,KACX,KAAK,MACL,KAAK,KAAK,IAAI,SAAU,KAAK,cAAc,EAC/C,KAAK,KAAO,IACpB,EAEI,KAAK,KAAO,SAASqtC,EAAKnqB,EAAM,CAC5B,KAAK,QAAQ,YAAY,CAAC,QAASmqB,EAAK,KAAMnqB,CAAI,CAAC,CAC3D,EAEI,KAAK,KAAO,SAASmqB,EAAKnqB,EAAM3qB,EAAU,CACtC,GAAIA,EAAU,CACV,IAAIiG,EAAK,KAAK,aACd,KAAK,UAAUA,CAAE,EAAIjG,EACrB2qB,EAAK,KAAK1kB,CAAE,EAEhB,KAAK,KAAK6uC,EAAKnqB,CAAI,CAC3B,EAEI,KAAK,KAAO,SAAS9a,EAAOzG,EAAM,CAC9B,GAAI,CACIA,EAAK,MAAQA,EAAK,KAAK,MACvBA,EAAK,KAAK,IAAM,CAAC,QAASA,EAAK,KAAK,IAAI,QAAS,MAAOA,EAAK,KAAK,IAAI,MAAO,KAAMA,EAAK,KAAK,IAAI,IAAI,GACrG,KAAK,SAAW,KAAK,QAAQ,YAAY,CAAC,MAAOyG,EAAO,KAAM,CAAC,KAAMzG,EAAK,IAAI,CAAC,CAAC,CACvF,OACK2rC,EAAN,CACI,QAAQ,MAAMA,EAAG,KAAK,CACzB,CACT,EAEI,KAAK,iBAAmB,SAASvvC,EAAK,CAC9B,KAAK,MACL,KAAK,UAAS,EAElB,KAAK,KAAOA,EACZ,KAAK,KAAK,WAAY,CAACA,EAAI,SAAU,CAAA,CAAC,EACtCA,EAAI,GAAG,SAAU,KAAK,eAAgB,EAAI,CAClD,EAEI,KAAK,eAAiB,SAAS0e,EAAO,CAC7B,KAAK,aACN,KAAK,WAAa,GAClB,WAAW,KAAK,gBAAiB,CAAC,GAElCA,EAAM,QAAU,SAChB,KAAK,WAAW,KAAKA,EAAM,MAAOA,EAAM,KAAK,EAE7C,KAAK,WAAW,KAAKA,EAAM,MAAOA,EAAM,GAAG,CACvD,EAEI,KAAK,gBAAkB,UAAW,CAC9B,IAAI8wB,EAAI,KAAK,WACRA,IACL,KAAK,WAAa,KACdA,EAAE,OAAS,IAAMA,EAAE,OAAS,KAAK,KAAK,UAAW,GAAI,EACrD,KAAK,KAAK,WAAY,CAAC,KAAK,KAAK,SAAU,CAAA,CAAC,EAE5C,KAAK,KAAK,SAAU,CAAC,KAAMA,CAAC,CAAC,EACzC,CAEA,GAAG,KAAKT,EAAa,SAAS,EAG9B,IAAIU,EAAiB,SAASR,EAAoB3zC,EAAK4zC,EAAW,CAC9D,IAAIQ,EAAO,KACPC,EAAW,GACXC,EAAS,OAAO,OAAOttC,CAAY,EAEnCutC,EAAgB,CAAA,EAChBC,EAAe,IAAIf,EAAa,CAChC,cAAec,EACf,UAAW,UAAW,CAAE,EACxB,YAAa,SAASntC,EAAG,CACrBmtC,EAAc,KAAKntC,CAAC,EACfgtC,IACDC,EACA,WAAWI,CAAW,EAEtBA,IACP,CACT,CAAK,EAEDD,EAAa,YAAc,SAAS/zC,EAAK,CAAE4zC,EAAW5zC,GAEtD,IAAIg0C,EAAc,UAAW,CACzB,IAAIpsC,EAAMksC,EAAc,QACpBlsC,EAAI,QACJ+rC,EAAK/rC,EAAI,OAAO,EAAE,MAAM+rC,EAAM/rC,EAAI,IAAI,EACjCA,EAAI,OACTisC,EAAO,QAAQjsC,EAAI,MAAOA,EAAI,IAAI,CAC9C,EAEI,OAAAisC,EAAO,YAAc,SAASjsC,EAAK,CAC/BmsC,EAAa,UAAU,CAAC,KAAMnsC,CAAG,CAAC,CAC1C,EACIisC,EAAO,SAAW,SAAShsC,EAAMosC,EAAY,CACzC,KAAK,YAAY,CAAC,KAAM,OAAQ,GAAIA,EAAY,KAAMpsC,CAAI,CAAC,CACnE,EACIgsC,EAAO,KAAO,SAAS9zC,EAAM8H,EAAM,CAC/B,KAAK,YAAY,CAAC,KAAM,QAAS,KAAM9H,EAAM,KAAM8H,CAAI,CAAC,CAChE,EAEImB,EAAO,WAAW,CAAC,SAAUzJ,CAAG,EAAG,SAAS20C,EAAM,CAE9C,IADAP,EAAO,IAAIO,EAAKf,CAAS,EAAEU,CAAM,EAC1BC,EAAc,QACjBE,GACZ,CAAK,EAEMD,CACX,EAEAz0C,EAAQ,eAAiBo0C,EACzBp0C,EAAQ,aAAe0zC,EACvB1zC,EAAQ,aAAeszC,CAGvB,CAAC,EAED,IAAI,OAAO,kBAAkB,CAAC,UAAU,UAAU,SAAS,YAAY,wBAAwB,aAAa,EAAG,SAAS7zC,EAASO,EAASlB,EAAO,CACjJ,IAAIkP,EAAQvO,EAAQ,SAAS,EAAE,MAC3BwH,EAAexH,EAAQ,qBAAqB,EAAE,aAC9CqI,EAAMrI,EAAQ,WAAW,EACzBo1C,EAAc,SAAUjmC,EAAS6hB,EAAQ1b,EAAK+/B,EAAQC,EAAWC,EAAa,CAC9E,IAAI1xC,EAAQ,KACZ,KAAK,OAASmtB,EACd,KAAK,QAAU7hB,EACf,KAAK,IAAMA,EAAQ,cACnB,KAAK,UAAYmmC,EACjB,KAAK,YAAcC,EACnB,KAAK,UAAY,KAAK,SAAS,KAAK,IAAI,EACxC,KAAK,IAAI,GAAG,SAAU,KAAK,UAAW,EAAI,EAC1C,KAAK,QAAUF,EACf,KAAK,gBAAkB,UAAY,CAC/B,WAAW,UAAY,CACnBxxC,EAAM,eAAc,CAChC,CAAS,CACT,EACI,KAAK,KAAOyR,EACZ,IAAIkgC,EAAYrmC,EAAQ,eAAc,EAAG,YAAcA,EAAQ,eAAc,EAAG,YAAc,CAAE,OAAQ,EAAE,EAC1G,KAAK,gBAAkBqmC,EAAU,OACjC,KAAK,MAAK,EACVrmC,EAAQ,UAAU,GAAG,eAAgB,KAAK,eAAe,CAC7D,GACC,UAAY,CACT9G,EAAI,UAAU,KAAMb,CAAY,EAChC,KAAK,MAAQ,UAAY,CACrB,IAAI3D,EAAQ,KACRqB,EAAM,KAAK,IACXiK,EAAU,KAAK,QACnB,KAAK,gBAAkBA,EAAQ,UAAU,OAAM,EAC3CA,EAAQ,UAAU,mBAClBA,EAAQ,UAAU,gBACtB,KAAK,IAAMjK,EAAI,aAAa,KAAK,KAAK,IAAK,KAAK,KAAK,MAAM,EAC3D,IAAIoQ,EAAM,KAAK,IACfA,EAAI,aAAe,GACnBA,EAAI,OAAM,EACVA,EAAI,SAAWnG,EAAQ,UAAU,IAAIZ,EAAM+G,EAAI,IAAKA,EAAI,OAAQA,EAAI,IAAKA,EAAI,OAAS,KAAK,MAAM,EAAG,KAAK,UAAW,KAAM,EAAK,EAC/H,KAAK,OAAS,GACd,KAAK,QAAQ,QAAQ,SAAU8oB,EAAO,CAClC,IAAIzoB,EAASzQ,EAAI,aAAak5B,EAAM,IAAKA,EAAM,MAAM,EACrDzoB,EAAO,aAAe,GACtBA,EAAO,OAAM,EACb9R,EAAM,OAAO,KAAK8R,CAAM,CACpC,CAAS,EACDxG,EAAQ,cAAc,EAAK,CACnC,EACI,KAAK,iBAAmB,UAAY,CAChC,GAAI,MAAK,aAET,KAAIA,EAAU,KAAK,QACftL,EAAQ,KACZ,KAAK,aAAe,GACpB,KAAK,OAAO,QAAQ,SAAU8R,EAAQ,CAClCA,EAAO,SAAWxG,EAAQ,UAAU,IAAIZ,EAAMoH,EAAO,IAAKA,EAAO,OAAQA,EAAO,IAAKA,EAAO,OAAS9R,EAAM,MAAM,EAAGA,EAAM,YAAa,KAAM,EAAK,CAC9J,CAAS,EACT,EACI,KAAK,iBAAmB,UAAY,CAChC,GAAK,KAAK,aAEV,MAAK,aAAe,GACpB,QAAShE,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACpC,KAAK,QAAQ,aAAa,KAAK,OAAOA,CAAC,EAAE,QAAQ,EAE7D,EACI,KAAK,SAAW,SAAU+jB,EAAO,CAC7B,GAAI,KAAK,UACL,OAAO,KAAK,cAAcA,CAAK,EACnC,IAAIhV,EAAQgV,EACZ,GAAIhV,EAAM,MAAM,MAAQA,EAAM,IAAI,KAE9BA,EAAM,MAAM,MAAQ,KAAK,IAAI,IAEjC,MAAK,UAAY,GACjB,IAAI6mC,EAAa7xB,EAAM,SAAW,SAAWhV,EAAM,IAAI,OAASA,EAAM,MAAM,OAASA,EAAM,MAAM,OAASA,EAAM,IAAI,OAChH8mC,EAAc9mC,EAAM,MAAM,QAAU,KAAK,IAAI,QAAUA,EAAM,MAAM,QAAU,KAAK,IAAI,OAAS,KAAK,OAAS,EAC7G+mC,EAAoB/mC,EAAM,MAAM,OAAS,KAAK,IAAI,OAItD,GAHA,KAAK,cAAcgV,CAAK,EACpB8xB,IACA,KAAK,QAAUD,GACfC,GAAe,CAAC,KAAK,QAAQ,WAC7B,GAAI9xB,EAAM,SAAW,SACjB,QAAS/jB,EAAI,KAAK,OAAO,OAAS,EAAGA,GAAK,EAAGA,IAAK,CAC9C,IAAIw+B,EAAW,KAAK,OAAOx+B,CAAC,EACxB+1C,EAAS,CAAE,IAAKvX,EAAS,IAAK,OAAQA,EAAS,OAASsX,GAC5D,KAAK,IAAI,kBAAkBC,EAAQhyB,EAAM,KAAK,UAG7CA,EAAM,SAAW,SACtB,QAAS/jB,EAAI,KAAK,OAAO,OAAS,EAAGA,GAAK,EAAGA,IAAK,CAC9C,IAAIw+B,EAAW,KAAK,OAAOx+B,CAAC,EACxB+1C,EAAS,CAAE,IAAKvX,EAAS,IAAK,OAAQA,EAAS,OAASsX,GAC5D,KAAK,IAAI,OAAO,IAAIpnC,EAAMqnC,EAAO,IAAKA,EAAO,OAAQA,EAAO,IAAKA,EAAO,OAASH,CAAU,CAAC,GAIxG,KAAK,UAAY,GACjB,KAAK,cAAa,EAC1B,EACI,KAAK,cAAgB,SAAU7xB,EAAO,CAClC,KAAK,IAAI,SAASA,CAAK,EACvB,QAAS/jB,EAAI,KAAK,OAAO,OAAQA,KAC7B,KAAK,OAAOA,CAAC,EAAE,SAAS+jB,CAAK,EACjC,KAAK,cAAa,CAC1B,EACI,KAAK,cAAgB,UAAY,CAC7B,GAAI,MAAK,UAET,KAAI/f,EAAQ,KACRsL,EAAU,KAAK,QACf0mC,EAAe,SAAUvgC,EAAK7P,EAAW,CACzC0J,EAAQ,aAAamG,EAAI,QAAQ,EACjCA,EAAI,SAAWnG,EAAQ,UAAU,IAAIZ,EAAM+G,EAAI,IAAKA,EAAI,OAAQA,EAAI,IAAKA,EAAI,OAASzR,EAAM,MAAM,EAAG4B,EAAW,KAAM,EAAK,CACvI,EACQowC,EAAa,KAAK,IAAK,KAAK,SAAS,EACrC,QAAS,EAAI,KAAK,OAAO,OAAQ,KAC7BA,EAAa,KAAK,OAAO,CAAC,EAAG,KAAK,WAAW,EACzD,EACI,KAAK,eAAiB,SAAUtmC,EAAO,CACnC,GAAI,OAAK,WAAa,CAAC,KAAK,SAE5B,KAAI+F,EAAM,KAAK,QAAQ,UAAU,UAAS,EACtCA,EAAI,MAAQ,KAAK,IAAI,KAAOA,EAAI,QAAU,KAAK,IAAI,QAAUA,EAAI,QAAU,KAAK,IAAI,OAAS,KAAK,QAClG,KAAK,iBAAgB,EACrB,KAAK,MAAM,cAAe/F,CAAK,IAG/B,KAAK,iBAAgB,EACrB,KAAK,MAAM,cAAeA,CAAK,GAE3C,EACI,KAAK,OAAS,UAAY,CACtB,KAAK,QAAQ,aAAa,KAAK,KAAO,KAAK,IAAI,QAAQ,EACvD,KAAK,iBAAgB,EACrB,KAAK,IAAI,IAAI,SAAU,KAAK,SAAS,EACrC,KAAK,QAAQ,UAAU,IAAI,eAAgB,KAAK,eAAe,EAC/D,KAAK,QAAQ,cAAc,EAAI,EAC/B,KAAK,QAAU,IACvB,EACI,KAAK,OAAS,UAAY,CACtB,GAAI,KAAK,kBAAoB,GAI7B,SAFIwoB,EAAc,KAAK,QAAQ,eAAc,EACzC+d,GAAiB/d,EAAY,YAAcA,EAAY,YAAY,OAAS,KAAK,gBAC5El4B,EAAI,EAAGA,EAAIi2C,EAAej2C,IAC/Bk4B,EAAY,KAAK,KAAK,QAAS,EAAI,EAEnC,KAAK,iBACL,KAAK,QAAQ,UAAU,SAAS,KAAK,eAAe,EAChE,CACA,GAAG,KAAKqd,EAAY,SAAS,EAC7B70C,EAAQ,YAAc60C,CAEtB,CAAC,EAED,IAAI,OAAO,iCAAiC,CAAC,UAAU,UAAU,SAAS,gBAAgB,mBAAmB,EAAG,SAASp1C,EAASO,EAASlB,EAAO,CAAC,IAAIkQ,EAAQvP,EAAQ,cAAc,EACjLsE,EAAYtE,EAAQ,kBAAkB,EAC1C,SAAS+1C,EAAY1nC,EAAIC,EAAI,CACzB,OAAOD,EAAG,KAAOC,EAAG,KAAOD,EAAG,QAAUC,EAAG,MAC9C,CACD,SAAS0nC,EAAYpuC,EAAG,CACpB,IAAIwN,EAAKxN,EAAE,SACPquC,EAAM7gC,EAAG,OACT+O,EAAQ/O,EAAG,SACX8gC,EAAO9gC,EAAG,QACV+gC,EAAQvuC,EAAE,cACV2N,EAAS3N,EAAE,YAGf,GAFIsuC,GAAQ5xC,EAAU,QAClBiR,EAASH,EAAG,QACZxN,EAAE,OAAO,mBAAqB2N,GAAU,EAAG,CAC3C3N,EAAE,OAAO,UAAU,cAAcA,EAAE,QAAQ,EAC3C,OAEJ,GAAI,CAACsuC,GAAQ,CAACD,GAAO,CAACE,EAAO,CACrB5gC,IAAW,GAAK3N,EAAE,OAAO,mBACzBA,EAAE,OAAO,sBACb,OAEJ,GAAI2N,IAAW,EAEf,KAAIJ,EAASvN,EAAE,OACXoK,EAAYmD,EAAO,UACnBihC,EAAgBjhC,EAAO,kBACvBG,EAAM1N,EAAE,sBACRgO,EAAS5D,EAAU,YACnBqD,EAAczN,EAAE,YAAW,GAAOoK,EAAU,QAAS,GAAI+jC,EAAYzgC,EAAKM,CAAM,EAChFygC,EAASzuC,EAAE,EAAG0uC,EAAS1uC,EAAE,EACzB2uC,EAAmB,SAAU3uC,EAAG,CAChCyuC,EAASzuC,EAAE,QACX0uC,EAAS1uC,EAAE,OACnB,EACQuH,EAAUgG,EAAO,QACjBqhC,EAAerhC,EAAO,SAAS,yBAAyBkhC,EAAQC,CAAM,EACtEG,EAAeD,EACfE,EACJ,GAAIvhC,EAAO,cAAc,iBACjB+gC,GAAQD,GAAOE,GAASF,EACxBS,EAAgBvyB,EAAQ,QAAU,MAC7B8xB,GAAO9gC,EAAO,sBACnBuhC,EAAgB,iBAGhBP,GAAS,CAACF,GAEV,GADAS,EAAgB,MACZ,CAACN,GAAiBjyB,EAClB,YAEC8xB,GAAO9gC,EAAO,sBACnBuhC,EAAgB,SAMxB,GAHIA,GAAiBpyC,EAAU,OAAS8Q,EAAG,SACvCD,EAAO,cAAc,oBAErBuhC,GAAiB,MAAO,CACxB,GAAI,CAACN,GAAiB/gC,EAClB,OACJ,GAAI,CAAC+gC,EAAe,CAChB,IAAIxnC,EAAQoD,EAAU,kBACtBmD,EAAO,mBAAmBvG,CAAK,EAEnC,IAAI+nC,EAAW3kC,EAAU,UAAU,aAAasD,CAAG,EACnDH,EAAO,uBAAyB,GAC5BgP,IACAwyB,EAAW,KACX/nC,EAAQoD,EAAU,OAAO,CAAC,GAAKpD,EAC/BuG,EAAO,sBAAsBvG,CAAK,GAEtCuG,EAAO,KAAK,UAAW,UAAY,CAC/B,IAAIyhC,EAAS5kC,EAAU,kBACnB2kC,GAAYC,EAAO,QAAS,GAAIb,EAAYY,EAAS,OAAQC,EAAO,MAAM,EAC1E5kC,EAAU,eAAe4kC,EAAO,MAAM,GAElCzyB,EACAnS,EAAU,eAAepD,EAAM,MAAM,EAEhCA,IACLuG,EAAO,sBAAsBvG,CAAK,EAClCoD,EAAU,SAASpD,CAAK,GAE5BoD,EAAU,SAAS4kC,CAAM,GAE7BzhC,EAAO,uBAAyB,EAC5C,CAAS,UAEIuhC,GAAiB,QAAS,CAC/B9uC,EAAE,KAAI,EACNuN,EAAO,uBAAyB,GAChC,IAAIuZ,EACAmoB,EAAU,CAAA,EACVC,EAAc,UAAY,CAC1B,IAAIC,EAAY5hC,EAAO,SAAS,yBAAyBkhC,EAAQC,CAAM,EACnE1gC,EAASzG,EAAQ,yBAAyB4nC,EAAU,IAAKA,EAAU,OAAQA,EAAU,OAAO,EAC5FhB,EAAYU,EAAcM,CAAS,GAAKhB,EAAYngC,EAAQ5D,EAAU,IAAI,IAE9EykC,EAAeM,EACf5hC,EAAO,UAAU,eAAeS,CAAM,EACtCT,EAAO,SAAS,uBAChBA,EAAO,uBAAuB0hC,CAAO,EACrCA,EAAU7kC,EAAU,sBAAsBykC,EAAcD,CAAY,EAChErhC,EAAO,cAAc,iBAAmB0hC,EAAQ,QAAU,GAAKA,EAAQ,CAAC,EAAE,QAAS,IACnFA,EAAQ,CAAC,EAAI1hC,EAAO,cAAc,gBAAgB,SACtD0hC,EAAQ,QAAQ1hC,EAAO,mBAAoBA,CAAM,EACjDA,EAAO,uBAAsB,EACzC,EACYihC,GAAiB,CAACD,EAClBnkC,EAAU,cAAa,EAElB,CAACokC,GAAiBD,IACvBznB,EAAe1c,EAAU,kBACzBmD,EAAO,mBAAmBuZ,CAAY,GAEtCvK,EACAqyB,EAAernC,EAAQ,yBAAyB6C,EAAU,IAAI,EAE9DA,EAAU,eAAesD,CAAG,EAChCmhC,EAAe,CAAE,IAAK,GAAI,OAAQ,IAClC,IAAIO,EAAsB,SAAUpvC,EAAG,CACnCkvC,IACA,cAAc99B,CAAO,EACrB7D,EAAO,uBAAuB0hC,CAAO,EAChCA,EAAQ,SACTA,EAAU,CAAC7kC,EAAU,gBAAe,CAAE,GACtC0c,IACAvZ,EAAO,sBAAsBuZ,CAAY,EACzC1c,EAAU,cAAc0c,CAAY,GAExC,QAAS7uB,EAAI,EAAGA,EAAIg3C,EAAQ,OAAQh3C,IAChCmS,EAAU,SAAS6kC,EAAQh3C,CAAC,CAAC,EACjCsV,EAAO,uBAAyB,GAChCA,EAAO,cAAc,gBAAkB,IACnD,EACY8hC,EAAsBH,EAC1BvnC,EAAM,QAAQ4F,EAAO,UAAWohC,EAAkBS,CAAmB,EACrE,IAAIh+B,EAAU,YAAY,UAAY,CAAEi+B,EAAmB,CAAG,EAAI,EAAE,EACpE,OAAOrvC,EAAE,kBAEhB,CACDrH,EAAQ,YAAcy1C,CAEtB,CAAC,EAED,IAAI,OAAO,qCAAqC,CAAC,UAAU,UAAU,SAAS,2BAA2B,EAAG,SAASh2C,EAASO,EAASlB,EAAO,CAC9IkB,EAAQ,gBAAkB,CAAC,CACnB,KAAM,iBACN,YAAa,mBACb,KAAM,SAAU4U,EAAQ,CAAEA,EAAO,gBAAgB,EAAE,CAAI,EACvD,QAAS,CAAE,IAAK,cAAe,IAAK,aAAe,EACnD,eAAgB,SAChB,SAAU,EAClB,EAAO,CACC,KAAM,iBACN,YAAa,mBACb,KAAM,SAAUA,EAAQ,CAAEA,EAAO,gBAAgB,CAAC,CAAI,EACtD,QAAS,CAAE,IAAK,gBAAiB,IAAK,eAAiB,EACvD,eAAgB,SAChB,SAAU,EAClB,EAAO,CACC,KAAM,4BACN,YAAa,kCACb,KAAM,SAAUA,EAAQ,CAAEA,EAAO,gBAAgB,GAAI,EAAI,CAAI,EAC7D,QAAS,CAAE,IAAK,oBAAqB,IAAK,mBAAqB,EAC/D,eAAgB,SAChB,SAAU,EAClB,EAAO,CACC,KAAM,4BACN,YAAa,kCACb,KAAM,SAAUA,EAAQ,CAAEA,EAAO,gBAAgB,EAAG,EAAI,CAAI,EAC5D,QAAS,CAAE,IAAK,sBAAuB,IAAK,qBAAuB,EACnE,eAAgB,SAChB,SAAU,EAClB,EAAO,CACC,KAAM,mBACN,YAAa,qBACb,KAAM,SAAUA,EAAQ,CAAEA,EAAO,WAAW,EAAE,CAAI,EAClD,QAAS,CAAE,IAAK,gBAAiB,IAAK,eAAiB,EACvD,eAAgB,SAChB,SAAU,EAClB,EAAO,CACC,KAAM,kBACN,YAAa,oBACb,KAAM,SAAUA,EAAQ,CAAEA,EAAO,WAAW,CAAC,CAAI,EACjD,QAAS,CAAE,IAAK,iBAAkB,IAAK,gBAAkB,EACzD,eAAgB,SAChB,SAAU,EAClB,EAAO,CACC,KAAM,mBACN,YAAa,qBACb,KAAM,SAAUA,EAAQ,CAAEA,EAAO,WAAW,GAAI,EAAI,CAAI,EACxD,QAAS,CAAE,IAAK,sBAAuB,IAAK,qBAAuB,EACnE,eAAgB,SAChB,SAAU,EAClB,EAAO,CACC,KAAM,kBACN,YAAa,oBACb,KAAM,SAAUA,EAAQ,CAAEA,EAAO,WAAW,EAAG,EAAI,CAAI,EACvD,QAAS,CAAE,IAAK,uBAAwB,IAAK,sBAAwB,EACrE,eAAgB,SAChB,SAAU,EAClB,EAAO,CACC,KAAM,gCACN,YAAa,6BACb,KAAM,SAAUA,EAAQ,CAChBA,EAAO,YAAY,WAAa,EAChCA,EAAO,YAAY,iBAEnBA,EAAO,YAAY,gBAC1B,EACD,QAAS,CAAE,IAAK,aAAc,IAAK,YAAc,EACjD,SAAU,EAClB,EAAO,CACC,KAAM,0BACN,YAAa,mBACb,KAAM,SAAUA,EAAQ,CAAEA,EAAO,YAAY,eAAc,CAAK,EAChE,SAAU,EAClB,EAAO,CACC,KAAM,eACN,YAAa,gBACb,KAAM,SAAUA,EAAQ,CAAEA,EAAO,aAAc,CAAG,EAClD,QAAS,CAAE,IAAK,aAAc,IAAK,YAAc,EACjD,eAAgB,QACxB,EAAO,CACC,KAAM,UACN,YAAa,WACb,KAAM,SAAUA,EAAQ,CAAEA,EAAO,QAAS,CAAG,EAC7C,QAAS,CAAE,IAAK,aAAc,IAAK,YAAc,EACjD,eAAgB,SAChB,SAAU,EAClB,CAAK,EACL5U,EAAQ,oBAAsB,CAAC,CACvB,KAAM,kBACN,YAAa,mBACb,QAAS,MACT,KAAM,SAAU4U,EAAQ,CAAEA,EAAO,oBAAqB,CAAG,EACzD,eAAgB,SAChB,SAAU,GACV,YAAa,SAAUA,EAAQ,CAAE,OAAOA,GAAUA,EAAO,iBAAoB,CACrF,CAAK,EACL,IAAIsoB,EAAcz9B,EAAQ,0BAA0B,EAAE,YACtDO,EAAQ,gBAAkB,IAAIk9B,EAAYl9B,EAAQ,mBAAmB,CAErE,CAAC,EAED,IAAI,OAAO,mBAAmB,CAAC,UAAU,UAAU,SAAS,iBAAiB,YAAY,gBAAgB,iCAAiC,gBAAgB,eAAe,qCAAqC,aAAa,mBAAmB,aAAa,YAAY,EAAG,SAASP,EAASO,EAASlB,EAAO,CAAC,IAAIi0B,EAAYtzB,EAAQ,cAAc,EAAE,UACjVuO,EAAQvO,EAAQ,SAAS,EAAE,MAC3B0lB,EAAY1lB,EAAQ,aAAa,EAAE,UACnCg2C,EAAch2C,EAAQ,8BAA8B,EAAE,YACtDuP,EAAQvP,EAAQ,aAAa,EAC7BkJ,EAAOlJ,EAAQ,YAAY,EAC3Bwf,EAAWxf,EAAQ,kCAAkC,EACzDO,EAAQ,SAAWif,EAAS,gBAAgB,OAAOA,EAAS,mBAAmB,EAC/E,IAAIid,EAASz8B,EAAQ,UAAU,EAAE,OAC7Bk3C,EAAS,IAAIza,EACjB,SAAS0a,EAAKhoC,EAAS8tB,EAAQxd,EAAK,CAChC,OAAAy3B,EAAO,SAAS,KAAO,GACvBA,EAAO,SAAS,OAASja,EACzBia,EAAO,SAAS,UAAYz3B,GAAO,GAC5By3B,EAAO,KAAK/nC,CAAO,CAC7B,CACD,IAAIuoB,EAAc13B,EAAQ,gBAAgB,EAAE,aAC3C,UAAY,CACT,KAAK,oBAAsB,UAAY,CACnC,OAAO,KAAK,iBACpB,CACA,GAAG,KAAK03B,EAAY,SAAS,EAC5B,UAAY,CACT,KAAK,OAAS,KACd,KAAK,UAAY,KACjB,KAAK,SAAW,SAAU9oB,EAAOwoC,EAAoB,CACjD,GAAKxoC,EAEL,IAAI,CAAC,KAAK,mBAAqB,KAAK,aAAe,EAAG,CAClD,IAAI+nC,EAAW,KAAK,kBAGpB,GAFA,KAAK,UAAU,IAAIA,CAAQ,EAC3B,KAAK,UAAU,IAAI/nC,CAAK,EACpB,KAAK,UAAU,OAAO,QAAU,EAChC,YAAK,UAAU,YACRwoC,GAAsB,KAAK,kBAAkBxoC,CAAK,EAE7D,KAAK,UAAU,YACf,KAAK,UAAU,IAAI+nC,CAAQ,EAC3B,KAAK,YAAYA,CAAQ,EAExB/nC,EAAM,SACPA,EAAM,OAASA,EAAM,KACzB,IAAI6kB,EAAU,KAAK,UAAU,IAAI7kB,CAAK,EACtC,YAAK,YAAYA,CAAK,EAClB6kB,EAAQ,QACR,KAAK,eAAeA,CAAO,EAC3B,KAAK,WAAa,GAAK,CAAC,KAAK,oBAC7B,KAAK,QAAQ,aAAa,EAC1B,KAAK,kBAAoB,GACzB,KAAK,QAAQ,YAAc,GAC3B,KAAK,UAAU,OAAO,KAAK,OAAO,GAE/B2jB,GAAsB,KAAK,kBAAkBxoC,CAAK,EACjE,EACI,KAAK,cAAgB,SAAUA,EAAO,CAClCA,EAAQA,GAAS,KAAK,OAAO,CAAC,EAC9B,IAAI6kB,EAAU,KAAK,UAAU,UAAS,EAClCA,EAAQ,QACR,KAAK,eAAeA,CAAO,EAC/B7kB,GAAS,KAAK,kBAAkBA,CAAK,CAC7C,EACI,KAAK,eAAiB,SAAU0G,EAAK,CACjC,IAAIme,EAAU,KAAK,UAAU,eAAene,CAAG,EAC/C,GAAIme,EACA,YAAK,eAAeA,CAAO,EACpBA,EAAQ,CAAC,CAE5B,EACI,KAAK,uBAAyB,UAAY,CACtC,IAAIA,EAAU,KAAK,UAAU,MAAK,EAC9BA,EAAQ,QACR,KAAK,eAAeA,CAAO,CACvC,EACI,KAAK,YAAc,SAAU7kB,EAAO,CAChC,KAAK,WAAa,KAAK,UAAU,OAAO,OACxC,KAAK,OAAO,QAAQA,CAAK,EACzB,KAAK,QAAQ,WAAY,CAAE,MAAOA,CAAO,CAAA,CACjD,EACI,KAAK,eAAiB,SAAU6kB,EAAS,CAErC,GADA,KAAK,WAAa,KAAK,UAAU,OAAO,OACpC,KAAK,YAAc,GAAK,KAAK,kBAAmB,CAChD,IAAI4jB,EAAY,KAAK,UAAU,OAAO,IAAG,EACzC5jB,EAAQ,KAAK4jB,CAAS,EACtB,KAAK,WAAa,EAEtB,QAASx3C,EAAI4zB,EAAQ,OAAQ5zB,KAAM,CAC/B,IAAI+B,EAAQ,KAAK,OAAO,QAAQ6xB,EAAQ5zB,CAAC,CAAC,EAC1C,KAAK,OAAO,OAAO+B,EAAO,CAAC,EAE/B,KAAK,QAAQ,cAAe,CAAE,OAAQ6xB,CAAS,CAAA,EAC3C,KAAK,aAAe,GAAK,KAAK,oBAC9B,KAAK,kBAAoB,GACzB,KAAK,QAAQ,cAAc,EAC3B,KAAK,QAAQ,YAAc,GAC3B,KAAK,UAAU,OAAO,KAAK,OAAO,GAEtC4jB,EAAYA,GAAa,KAAK,OAAO,CAAC,EAClCA,GAAa,CAACA,EAAU,QAAQ,KAAK,SAAQ,CAAE,GAC/C,KAAK,kBAAkBA,CAAS,CAC5C,EACI,KAAK,eAAiB,UAAY,CAC1B,KAAK,YAET,KAAK,UAAY,IAAI/jB,EACrB,KAAK,OAAS,GACd,KAAK,WAAa,EAC1B,EACI,KAAK,aAAe,UAAY,CAC5B,OAAO,KAAK,WAAa,KAAK,UAAU,OAAO,OAAM,EAAK,CAAC,KAAK,SAAQ,CAAE,CAClF,EACI,KAAK,eAAiB,UAAY,CAG9B,QAFIf,EAAS,KAAK,OAAO,OAAS,KAAK,OAAS,CAAC,KAAK,SAAQ,CAAE,EAC5DyM,EAAY,CAAA,EACPn/B,EAAI,EAAGA,EAAI0yB,EAAO,OAAQ1yB,IAAK,CACpC,IAAI+O,EAAQ2jB,EAAO1yB,CAAC,EAChBgP,EAAMD,EAAM,MAAM,IAClBF,EAASE,EAAM,IAAI,IACvB,GAAIC,IAAQH,EACRswB,EAAU,KAAKpwB,EAAM,MAAO,CAAA,MAE3B,CAED,IADAowB,EAAU,KAAK,IAAIzwB,EAAMM,EAAKD,EAAM,MAAM,OAAQC,EAAK,KAAK,QAAQ,QAAQA,CAAG,EAAE,MAAM,CAAC,EACjF,EAAEA,EAAMH,GACXswB,EAAU,KAAK,KAAK,aAAanwB,EAAK,EAAI,CAAC,EAC/CmwB,EAAU,KAAK,IAAIzwB,EAAMG,EAAQ,EAAGA,EAAQE,EAAM,IAAI,MAAM,CAAC,EAE7D/O,GAAK,GAAK,CAAC,KAAK,YAAa,IAC7Bm/B,EAAYA,EAAU,WAE9B,KAAK,cAAa,EAClB,QAASn/B,EAAIm/B,EAAU,OAAQn/B,KAC3B,KAAK,SAASm/B,EAAUn/B,CAAC,CAAC,CACtC,EACI,KAAK,eAAiB,UAAY,CAC9B,IAAI0yB,EAAS,KAAK,UAAU,OACxB8kB,EAAY9kB,EAAOA,EAAO,OAAS,CAAC,EACpC3jB,EAAQL,EAAM,WAAWgkB,EAAO,CAAC,EAAE,MAAO8kB,EAAU,GAAG,EAC3D,KAAK,cAAa,EAClB,KAAK,kBAAkBzoC,EAAOyoC,EAAU,QAAUA,EAAU,KAAK,CACzE,EACI,KAAK,qBAAuB,UAAY,CACpC,GAAI,KAAK,WAAa,EAAG,CACrB,IAAI9kB,EAAS,KAAK,UAAU,OACxB8kB,EAAY9kB,EAAOA,EAAO,OAAS,CAAC,EACpC3jB,EAAQL,EAAM,WAAWgkB,EAAO,CAAC,EAAE,MAAO8kB,EAAU,GAAG,EAC3D,KAAK,cAAa,EAClB,KAAK,kBAAkBzoC,EAAOyoC,EAAU,QAAUA,EAAU,KAAK,MAEhE,CACD,IAAIzhC,EAAS,KAAK,QAAQ,yBAAyB,KAAK,MAAM,EAC1DD,EAAS,KAAK,QAAQ,yBAAyB,KAAK,MAAM,EAC1DkhC,EAAU,KAAK,sBAAsBjhC,EAAQD,CAAM,EACvDkhC,EAAQ,QAAQ,KAAK,SAAU,IAAI,EAE/C,EACI,KAAK,sBAAwB,SAAUJ,EAAcD,EAAcc,EAAmB,CAClF,IAAIT,EAAU,CAAA,EACVU,EAAad,EAAa,OAASD,EAAa,OACpD,GAAIe,EACA,IAAI9oC,EAAcgoC,EAAa,OAC3B9nC,EAAY6nC,EAAa,OACzBgB,EAAef,EAAa,QAC5BgB,EAAajB,EAAa,YAG9B,KAAI/nC,EAAc+nC,EAAa,OAC3B7nC,EAAY8nC,EAAa,OACzBe,EAAehB,EAAa,QAC5BiB,EAAahB,EAAa,QAElC,IAAIiB,EAAajB,EAAa,IAAMD,EAAa,IACjD,GAAIkB,EACA,IAAIlpC,EAAWioC,EAAa,IACxB/nC,EAAS8nC,EAAa,QAG1B,KAAIhoC,EAAWgoC,EAAa,IACxB9nC,EAAS+nC,EAAa,IAE1BhoC,EAAc,IACdA,EAAc,GACdD,EAAW,IACXA,EAAW,GACXA,GAAYE,IACZ4oC,EAAoB,IAExB,QADIK,EACK9oC,EAAML,EAAUK,GAAOH,EAAQG,IAAO,CAC3C,IAAID,EAAQL,EAAM,WAAW,KAAK,QAAQ,yBAAyBM,EAAKJ,EAAa+oC,CAAY,EAAG,KAAK,QAAQ,yBAAyB3oC,EAAKF,EAAW8oC,CAAU,CAAC,EACrK,GAAI7oC,EAAM,UAAW,CACjB,GAAI+oC,GAAU5B,EAAYnnC,EAAM,IAAK+oC,CAAM,EACvC,MACJA,EAAS/oC,EAAM,IAEnBA,EAAM,OAAS2oC,EAAa3oC,EAAM,MAAQA,EAAM,IAChDioC,EAAQ,KAAKjoC,CAAK,EAItB,GAFI8oC,GACAb,EAAQ,QAAO,EACf,CAACS,EAAmB,CAEpB,QADI50C,EAAMm0C,EAAQ,OAAS,EACpBA,EAAQn0C,CAAG,EAAE,QAAS,GAAIA,EAAM,GACnCA,IACJ,GAAIA,EAAM,EAEN,QADIF,EAAQ,EACLq0C,EAAQr0C,CAAK,EAAE,QAAS,GAC3BA,IAER,QAAS3C,EAAI6C,EAAK7C,GAAK2C,EAAO3C,IACtBg3C,EAAQh3C,CAAC,EAAE,QAAS,GACpBg3C,EAAQ,OAAOh3C,EAAG,CAAC,EAG/B,OAAOg3C,CACf,CACA,EAAG,KAAKnxB,EAAU,SAAS,EAC3B,IAAI+Z,EAASz/B,EAAQ,UAAU,EAAE,QAChC,UAAY,CACT,KAAK,uBAAyB,UAAY,CACtC,KAAK,SAAS,eACd,KAAK,SAAS,mBACtB,EACI,KAAK,mBAAqB,SAAU6V,EAAe,CAC1CA,EAAc,SACfA,EAAc,OAASA,EAAc,KACzC,IAAIzP,EAAQ,KAAK,oBACjB,OAAAyP,EAAc,OAAS,KAAK,QAAQ,UAAUA,EAAe,gBAAiBzP,CAAK,EACnF,KAAK,QAAQ,kBAAkB,KAAKyP,CAAa,EACjD,KAAK,QAAQ,qBAAuB,KAAK,QAAQ,kBAAkB,OAC5DA,CACf,EACI,KAAK,sBAAwB,SAAUjH,EAAO,CAC1C,GAAKA,EAAM,OAEX,MAAK,QAAQ,aAAaA,EAAM,MAAM,EACtC,IAAIhN,EAAQ,KAAK,QAAQ,kBAAkB,QAAQgN,CAAK,EACpDhN,GAAS,IACT,KAAK,QAAQ,kBAAkB,OAAOA,EAAO,CAAC,EAClD,KAAK,QAAQ,qBAAuB,KAAK,QAAQ,kBAAkB,OAC3E,EACI,KAAK,uBAAyB,SAAU2wB,EAAQ,CAE5C,QADIqlB,EAAa,KAAK,QAAQ,kBACrB/3C,EAAI0yB,EAAO,OAAQ1yB,KAAM,CAC9B,IAAI+O,EAAQ2jB,EAAO1yB,CAAC,EACpB,GAAK+O,EAAM,OAEX,MAAK,QAAQ,aAAaA,EAAM,MAAM,EACtC,IAAIhN,EAAQg2C,EAAW,QAAQhpC,CAAK,EAChChN,GAAS,IACTg2C,EAAW,OAAOh2C,EAAO,CAAC,GAElC,KAAK,QAAQ,qBAAuBg2C,EAAW,MACvD,EACI,KAAK,YAAc,SAAUhwC,EAAG,CAC5B,KAAK,mBAAmBA,EAAE,KAAK,EAC/B,KAAK,SAAS,eACd,KAAK,SAAS,mBACtB,EACI,KAAK,eAAiB,SAAUA,EAAG,CAC/B,KAAK,uBAAuBA,EAAE,MAAM,EACpC,KAAK,SAAS,eACd,KAAK,SAAS,mBACtB,EACI,KAAK,eAAiB,SAAUA,EAAG,CAC3B,KAAK,oBAET,KAAK,kBAAoB,GACzB,KAAK,SAAS,iBAAiB,EAC/B,KAAK,WAAW,mBAAmB4X,EAAS,eAAe,EAC3D,KAAK,SAAS,kBAAkB,OAAQ,KAAK,kBAAkB,EAC/D,KAAK,SAAS,eACd,KAAK,SAAS,oBACtB,EACI,KAAK,gBAAkB,SAAU5X,EAAG,CAC5B,KAAK,QAAQ,YAAY,gBAE7B,KAAK,kBAAoB,GACzB,KAAK,WAAW,iBAAiB,EACjC,KAAK,WAAW,sBAAsB4X,EAAS,eAAe,EAC9D,KAAK,SAAS,qBAAqB,OAAQ,KAAK,kBAAkB,EAClE,KAAK,SAAS,eACd,KAAK,SAAS,oBACd,KAAK,MAAM,iBAAiB,EACpC,EACI,KAAK,mBAAqB,SAAU5X,EAAG,CACnC,IAAIgN,EAAUhN,EAAE,QACZuN,EAASvN,EAAE,OACf,GAAKuN,EAAO,YAEZ,IAAKP,EAAQ,kBAKJA,EAAQ,mBAAqB,UAClCrT,EAAS4T,EAAO,iBAAiBP,EAAShN,EAAE,IAAI,EAE3CgN,EAAQ,mBAAqB,cAClCrT,EAAS4T,EAAO,iBAAiBP,EAAShN,EAAE,KAAM,EAAI,EAEjDgN,EAAQ,mBAAqB,UAClCO,EAAO,oBAAmB,EAC1B5T,EAASqT,EAAQ,KAAKO,EAAQvN,EAAE,MAAQ,CAAA,CAAE,GAG1CrG,EAASqT,EAAQ,kBAAkBO,EAAQvN,EAAE,MAAQ,CAAA,CAAE,MAhB3B,CAC5B,IAAIrG,EAASqT,EAAQ,KAAKO,EAAQvN,EAAE,MAAQ,CAAA,CAAE,EAC9CuN,EAAO,YAAY,SAASA,EAAO,YAAY,gBAAe,CAAE,EAChEA,EAAO,YAAY,yBAevB,OAAO5T,EACf,EACI,KAAK,iBAAmB,SAAUizC,EAAKnqB,EAAMtlB,EAAS,CAClD,GAAI,MAAK,uBAET,KAAI8yC,EAAY9yC,GAAWA,EAAQ,UAC/B+yC,EAAW/yC,GAAW,IAAQA,GAAWA,EAAQ,SACjDoK,EAAU,KAAK,QACf6C,EAAY,KAAK,UACjB+lC,EAAY/lC,EAAU,UACtBugB,GAAUslB,EAAY7lC,EAAY+lC,GAAW,OAC7Cx2C,EACJ,GAAI,CAACgxB,EAAO,OACR,OAAOiiB,EAAI,KAAOA,EAAI,KAAK,KAAMnqB,GAAQ,CAAE,CAAA,EAAImqB,EAAI,KAAMnqB,GAAQ,CAAE,CAAA,EACvE,IAAI2Y,EAAMhxB,EAAU,eACpBA,EAAU,eAAiB,GAC3B,IAAI4kC,EAAS,IAAIlxB,EAAUvW,CAAO,EAClC,KAAK,uBAAyB,GAC9B,QAAStP,EAAI0yB,EAAO,OAAQ1yB,KAAM,CAC9B,GAAIi4C,EACA,KAAOj4C,EAAI,GAAK0yB,EAAO1yB,CAAC,EAAE,MAAM,KAAO0yB,EAAO1yB,EAAI,CAAC,EAAE,IAAI,KACrDA,IAER+2C,EAAO,kBAAkBrkB,EAAO1yB,CAAC,CAAC,EAClC+2C,EAAO,MAAQ/2C,EACf,KAAK,UAAYsP,EAAQ,UAAYynC,EACrC,IAAIoB,EAAYxD,EAAI,KAAOA,EAAI,KAAK,KAAMnqB,GAAQ,CAAA,CAAE,EAAImqB,EAAI,KAAMnqB,GAAQ,CAAE,CAAA,EACxE,CAAC9oB,GAAUy2C,IAAc,SACzBz2C,EAASy2C,GACbpB,EAAO,gBAAgBrkB,EAAO1yB,CAAC,CAAC,EAEpC+2C,EAAO,OAAM,EACb,KAAK,UAAYznC,EAAQ,UAAY6C,EACrC,KAAK,uBAAyB,GAC9BA,EAAU,eAAiBgxB,EAC3BhxB,EAAU,uBAAsB,EAC5BA,EAAU,OAAO,CAAC,GAClBA,EAAU,kBAAkBA,EAAU,OAAO,CAAC,CAAC,EACnD,IAAIimC,EAAO,KAAK,SAAS,iBACzB,YAAK,eAAc,EACnB,KAAK,kBAAiB,EAClBA,GAAQA,EAAK,MAAQA,EAAK,IAC1B,KAAK,SAAS,iBAAiBA,EAAK,IAAI,EACrC12C,EACf,EACI,KAAK,oBAAsB,UAAY,CAC/B,CAAC,KAAK,mBAAqB,KAAK,wBAEpC,KAAK,YAAY,eACzB,EACI,KAAK,gBAAkB,UAAY,CAC/B,IAAI8O,EAAO,GACX,GAAI,KAAK,mBAAqB,CAAC,KAAK,uBAAwB,CAGxD,QAFIkiB,EAAS,KAAK,YAAY,UAAU,OACpC2lB,EAAM,CAAA,EACDr4C,EAAI,EAAGA,EAAI0yB,EAAO,OAAQ1yB,IAC/Bq4C,EAAI,KAAK,KAAK,QAAQ,aAAa3lB,EAAO1yB,CAAC,CAAC,CAAC,EAEjD,IAAI0gC,EAAK,KAAK,QAAQ,YAAa,EAAC,oBAAmB,EACvDlwB,EAAO6nC,EAAI,KAAK3X,CAAE,EACdlwB,EAAK,SAAW6nC,EAAI,OAAS,GAAK3X,EAAG,SACrClwB,EAAO,SAEL,KAAK,UAAU,YACrBA,EAAO,KAAK,QAAQ,aAAa,KAAK,kBAAiB,CAAE,GAE7D,OAAOA,CACf,EACI,KAAK,wBAA0B,SAAUzI,EAAG+N,EAAQ,CAChD,GAAI,KAAK,mBAAqB,CAAC,KAAK,uBAAwB,CACxD,IAAI/G,EAAQ,KAAK,YAAY,OAAO,CAAC,EACrC,GAAI,KAAK,YAAY,QAAO,GAAM+G,GAAU,KAAK,YAAY,OACzD,OACJ,IAAIL,EAAMK,GAAU,KAAK,YAAY,OAC/B/G,EAAM,QAAUA,EAAM,MAAQA,EAAM,IAAMA,EAAM,MAChDA,EAAM,OACR0G,EAAI,KAAOK,EAAO,KACf,KAAK,QAAQ,wBAAwBL,EAAI,IAAKA,EAAI,MAAM,EAAE,QAAUK,EAAO,OAC9E,KAAK,YAAY,cAAc,KAAK,YAAY,gBAAe,CAAE,EAEjE,KAAK,YAAY,yBAEjC,EACI,KAAK,QAAU,SAAUsnB,EAAQl4B,EAASozC,EAAU,CAGhD,GAFApzC,EAAUA,GAAW,GACrBA,EAAQ,OAASk4B,GAAUl4B,EAAQ,OAC/BA,EAAQ,QAAU,KAAW,CAC7B,IAAI6J,EAAQ,KAAK,UAAU,QAAS,EAC9B,KAAK,UAAU,aAAc,EAC7B,KAAK,UAAU,WACrB7J,EAAQ,OAAS,KAAK,QAAQ,aAAa6J,CAAK,EAEpD,KAAK,QAAQ,IAAI7J,CAAO,EACxB,IAAIwtB,EAAS,KAAK,QAAQ,QAAQ,KAAK,OAAO,EAC9C,GAAI,CAACA,EAAO,OACR,MAAO,GACX,IAAIvgB,EAAY,KAAK,YAChBmmC,GACDnmC,EAAU,cAAcugB,EAAO,CAAC,CAAC,EACrC,QAAS1yB,EAAI0yB,EAAO,OAAQ1yB,KACxBmS,EAAU,SAASugB,EAAO1yB,CAAC,EAAG,EAAI,EACtC,OAAI+O,GAASoD,EAAU,UAAU,aAAapD,EAAM,KAAK,GACrDoD,EAAU,SAASpD,EAAO,EAAI,EAC3B2jB,EAAO,MACtB,EACI,KAAK,gBAAkB,SAAU9S,EAAK24B,EAAM,CACxC,IAAIxpC,EAAQ,KAAK,UAAU,gBAAe,EACtCynB,EAAcznB,EAAM,QAAUA,EAAM,IACpCypC,EAAa,KAAK,QAAQ,yBAAyBzpC,EAAM,MAAM,EAC/D,KAAK,UAAU,iBACfypC,EAAW,OAAS,KAAK,UAAU,gBACvC,IAAI1yB,EAAO,KAAK,QAAQ,yBAAyB0yB,EAAW,IAAM54B,EAAK44B,EAAW,MAAM,EACxF,GAAKzpC,EAAM,UAKP,IAAI+G,EAASgQ,MAJb,KAAI6wB,EAAe,KAAK,QAAQ,yBAAyBngB,EAAcznB,EAAM,IAAMA,EAAM,KAAK,EAC1F+G,EAAS,KAAK,QAAQ,yBAAyB6gC,EAAa,IAAM/2B,EAAK+2B,EAAa,MAAM,EAKlG,GAAIngB,EAAa,CACb,IAAIyO,EAAWv2B,EAAM,WAAWoX,EAAMhQ,CAAM,EAC5CmvB,EAAS,OAASA,EAAS,UAE1B,CACD,IAAIA,EAAWv2B,EAAM,WAAWoH,EAAQgQ,CAAI,EAC5Cmf,EAAS,OAASA,EAAS,IAG/B,GADAA,EAAS,cAAgBuT,EAAW,OAChC,CAAC,KAAK,UAAU,kBAChB,KAAK,UAAU,SAASzpC,CAAK,UAGzBwpC,EACA,IAAIE,EAAW1pC,EAAM,OAE7B,KAAK,UAAU,SAASk2B,CAAQ,EAC5BwT,GACA,KAAK,UAAU,eAAeA,CAAQ,CAClD,EACI,KAAK,oBAAsB,SAAU74B,EAAK,CAItC,QAHItQ,EAAU,KAAK,QACfywB,EAAMzwB,EAAQ,YACdopC,EAAM3Y,EAAI,OACL//B,EAAI04C,EAAI,OAAQ14C,KAAM,CAC3B,IAAI+O,EAAQ2pC,EAAI14C,CAAC,EACjB,GAAI+O,EAAM,UAAW,CACjB,IAAI8T,EAAMvT,EAAQ,aAAaP,EAAM,MAAM,IAAKA,EAAM,MAAM,MAAM,EAClEA,EAAM,MAAM,IAAM8T,EAAI,MAAM,IAC5B9T,EAAM,MAAM,OAAS8T,EAAI,MAAM,OAC/B9T,EAAM,IAAI,IAAM8T,EAAI,IAAI,IACxB9T,EAAM,IAAI,OAAS8T,EAAI,IAAI,QAGnCkd,EAAI,uBAAsB,EAE1B,QADI4Y,EAAQ,CAAA,EACH34C,EAAI04C,EAAI,OAAQ14C,KAAM,CAC3B,IAAI+O,EAAQ2pC,EAAI14C,CAAC,EACjB24C,EAAM,QAAQrpC,EAAQ,aAAaP,CAAK,CAAC,EAEzC6Q,EAAM,EACN+4B,EAAM,QAAQA,EAAM,IAAK,CAAA,EAEzBA,EAAM,KAAKA,EAAM,MAAO,CAAA,EAC5B,QAAS34C,EAAI04C,EAAI,OAAQ14C,KAAM,CAC3B,IAAI+O,EAAQ2pC,EAAI14C,CAAC,EACb6iB,EAAM9T,EAAM,QAChBO,EAAQ,QAAQP,EAAO4pC,EAAM34C,CAAC,CAAC,EAC/B+O,EAAM,MAAM,IAAM8T,EAAI,MAAM,IAC5B9T,EAAM,MAAM,OAAS8T,EAAI,MAAM,OAEnCkd,EAAI,kBAAkBA,EAAI,OAAO,CAAC,CAAC,CAC3C,EACI,KAAK,WAAa,SAAUngB,EAAK24B,EAAMK,EAAa,CAChD,IAAItpC,EAAU,KAAK,QACfywB,EAAMzwB,EAAQ,YACdP,EAAQgxB,EAAI,kBAChB,GAAI,EAAAhxB,EAAM,YACNA,EAAQO,EAAQ,aAAaP,EAAM,MAAM,IAAKA,EAAM,MAAM,MAAM,EAChEA,EAAM,OAAS6Q,GAAO,GAAK7Q,EAAM,MAAQA,EAAM,IAC/C,KAAK,YAAY,SAASA,CAAK,EAC3B6pC,IAGR,KAAIxb,EAAS9tB,EAAQ,aAAaP,CAAK,EACnCk2B,EAAWqS,EAAKhoC,EAAS8tB,EAAQxd,CAAG,EACpCqlB,IACAA,EAAS,OAASrlB,GAAO,GAAKqlB,EAAS,MAAQA,EAAS,IACxD,KAAK,QAAQ,OAAOA,CAAQ,EAC5B,KAAK,YAAY,SAASA,CAAQ,EAClC,KAAK,SAAS,qBAAqB,KAAM,EAAG,GAE5CsT,GACA,KAAK,YAAY,eAAexpC,EAAM,MAAM,EACxD,EACI,KAAK,aAAe,UAAY,CAC5B,IAAIO,EAAU,KAAK,QACfywB,EAAMzwB,EAAQ,YACdojB,EAASqN,EAAI,OACb/wB,EAAM,GACN6pC,EAAgBnmB,EAAO,OAAO,SAAU/K,EAAG,CAC3C,GAAIA,EAAE,OAAO,KAAO3Y,EAChB,MAAO,GACXA,EAAM2Y,EAAE,OAAO,GAC3B,CAAS,EACD,GAAI,CAAC+K,EAAO,QAAUmmB,EAAc,QAAUnmB,EAAO,OAAS,EAAG,CAC7D,IAAI3jB,EAAQ,KAAK,UAAU,SAAQ,EAC/B+pC,EAAK/pC,EAAM,MAAM,IAAKgqC,EAAKhqC,EAAM,IAAI,IACrCiqC,EAAaF,GAAMC,EACvB,GAAIC,EAAY,CACZ,IAAI3e,EAAM,KAAK,QAAQ,UAAS,EAC5BnoB,EACJ,GACIA,EAAO,KAAK,QAAQ,QAAQ6mC,CAAE,QACzB,OAAO,KAAK7mC,CAAI,GAAK,EAAE6mC,EAAK1e,GACrC,GACInoB,EAAO,KAAK,QAAQ,QAAQ4mC,CAAE,QACzB,OAAO,KAAK5mC,CAAI,GAAK,EAAE4mC,EAAK,GACjCA,EAAK,IACLA,EAAK,GACLC,GAAM1e,IACN0e,EAAK1e,EAAM,GAEnB,IAAItK,EAAQ,KAAK,QAAQ,gBAAgB+oB,EAAIC,CAAE,EAC/ChpB,EAAQ,KAAK,aAAaA,EAAOipB,CAAU,EAC3C,KAAK,QAAQ,OAAO,CAAE,IAAKF,EAAI,OAAQ,CAAC,EAAI/oB,EAAM,KAAK;AAAA,CAAI,EAAI;AAAA,CAAI,EAC9DipB,IACDjqC,EAAM,MAAM,OAAS,EACrBA,EAAM,IAAI,OAASghB,EAAMA,EAAM,OAAS,CAAC,EAAE,QAE/C,KAAK,UAAU,SAAShhB,CAAK,MAE5B,CACD8pC,EAAc,QAAQ,SAAUlxB,EAAG,CAC/BoY,EAAI,eAAepY,EAAE,MAAM,CAC3C,CAAa,EACD,IAAIsxB,EAAS,EACTC,EAAW,IACXC,EAAezmB,EAAO,IAAI,SAAU/K,EAAG,CACvC,IAAIxY,EAAIwY,EAAE,OACNzV,EAAO5C,EAAQ,QAAQH,EAAE,GAAG,EAC5BiqC,EAAclnC,EAAK,OAAO/C,EAAE,MAAM,EAAE,OAAO,KAAK,EACpD,OAAIiqC,GAAe,KACfA,EAAc,GACdjqC,EAAE,OAAS8pC,IACXA,EAAS9pC,EAAE,QACXiqC,EAAcF,IACdA,EAAWE,GACRA,CACvB,CAAa,EACD1mB,EAAO,QAAQ,SAAU/K,EAAG3nB,EAAG,CAC3B,IAAImP,EAAIwY,EAAE,OACN1nB,EAAIg5C,EAAS9pC,EAAE,OACf4xB,EAAIoY,EAAan5C,CAAC,EAAIk5C,EACtBj5C,EAAI8gC,EACJzxB,EAAQ,OAAOH,EAAG9F,EAAK,aAAa,IAAKpJ,EAAI8gC,CAAC,CAAC,EAE/CzxB,EAAQ,OAAO,IAAIZ,EAAMS,EAAE,IAAKA,EAAE,OAAQA,EAAE,IAAKA,EAAE,OAASlP,EAAI8gC,CAAC,CAAC,EACtEpZ,EAAE,MAAM,OAASA,EAAE,IAAI,OAASsxB,EAChCtxB,EAAE,MAAM,IAAMA,EAAE,IAAI,IAAMxY,EAAE,IAC5BwY,EAAE,OAASA,EAAE,GAC7B,CAAa,EACDoY,EAAI,kBAAkBrN,EAAO,CAAC,CAAC,EAC/B,KAAK,SAAS,eACd,KAAK,SAAS,oBAE1B,EACI,KAAK,aAAe,SAAU3C,EAAOspB,EAAW,CAC5C,IAAIC,EAAgB,GAAMC,EAAiB,GACvCC,EAAQC,EAAOC,EACnB,OAAO3pB,EAAM,IAAI,SAAU7d,EAAM,CAC7B,IAAI/G,EAAI+G,EAAK,MAAM,yBAAyB,EAC5C,OAAK/G,EAEDquC,GAAU,MACVA,EAASruC,EAAE,CAAC,EAAE,OACdsuC,EAAQtuC,EAAE,CAAC,EAAE,OACbuuC,EAAOvuC,EAAE,CAAC,EAAE,OACLA,IAEPquC,EAASC,EAAQC,GAAQvuC,EAAE,CAAC,EAAE,OAASA,EAAE,CAAC,EAAE,OAASA,EAAE,CAAC,EAAE,SAC1DouC,EAAiB,IACjBC,GAAUruC,EAAE,CAAC,EAAE,SACfmuC,EAAgB,IAChBE,EAASruC,EAAE,CAAC,EAAE,SACdquC,EAASruC,EAAE,CAAC,EAAE,QACdsuC,EAAQtuC,EAAE,CAAC,EAAE,SACbsuC,EAAQtuC,EAAE,CAAC,EAAE,QACbuuC,EAAOvuC,EAAE,CAAC,EAAE,SACZuuC,EAAOvuC,EAAE,CAAC,EAAE,QACTA,GAjBI,CAAC+G,CAAI,CAkB5B,CAAS,EAAE,IAAImnC,EAAYM,EACfL,EAAgBC,EAAiBK,EAAaD,EAAYE,CAAO,EACrE,SAAStrB,EAAOnpB,EAAG,CACf,OAAOiE,EAAK,aAAa,IAAKjE,CAAC,CAClC,CACD,SAASu0C,EAAUxuC,EAAG,CAClB,OAAQA,EAAE,CAAC,EAAWojB,EAAOirB,CAAM,EAAIruC,EAAE,CAAC,EACpCojB,EAAOkrB,EAAQtuC,EAAE,CAAC,EAAE,OAASuuC,CAAI,EACjCvuC,EAAE,CAAC,EAAE,QAAQ,aAAc,KAAK,EAFvBA,EAAE,CAAC,CAGrB,CACD,SAASyuC,EAAWzuC,EAAG,CACnB,OAAQA,EAAE,CAAC,EAAWojB,EAAOirB,EAASC,EAAQtuC,EAAE,CAAC,EAAE,MAAM,EAAIA,EAAE,CAAC,EAC1DojB,EAAOmrB,CAAI,EACXvuC,EAAE,CAAC,EAAE,QAAQ,aAAc,KAAK,EAFvBA,EAAE,CAAC,CAGrB,CACD,SAAS0uC,EAAQ1uC,EAAG,CAChB,OAAQA,EAAE,CAAC,EAAWojB,EAAOirB,CAAM,EAAIruC,EAAE,CAAC,EACpCojB,EAAOmrB,CAAI,EACXvuC,EAAE,CAAC,EAAE,QAAQ,aAAc,KAAK,EAFvBA,EAAE,CAAC,CAGrB,CACT,CACA,GAAG,KAAKy0B,EAAO,SAAS,EACxB,SAASsW,EAAY1nC,EAAIC,EAAI,CACzB,OAAOD,EAAG,KAAOC,EAAG,KAAOD,EAAG,QAAUC,EAAG,MAC9C,CACD/N,EAAQ,gBAAkB,SAAUqH,EAAG,CACnC,IAAIuH,EAAUvH,EAAE,QACZuH,GAAW,CAACA,EAAQ,cACpBA,EAAQ,kBAAoB,GAC5BA,EAAQ,UAAU,iBAClBA,EAAQ,YAAcA,EAAQ,WAElC,KAAK,YAAcA,GAAWA,EAAQ,YACtC,IAAI8wB,EAAar4B,EAAE,WACfq4B,IACAA,EAAW,YAAY,IAAI,WAAY,KAAK,WAAW,EACvDA,EAAW,YAAY,IAAI,cAAe,KAAK,cAAc,EAC7DA,EAAW,YAAY,IAAI,cAAe,KAAK,cAAc,EAC7DA,EAAW,YAAY,IAAI,eAAgB,KAAK,eAAe,EAC/DA,EAAW,YAAY,KAAK,IAAI,SAAU,KAAK,uBAAuB,EACtEA,EAAW,YAAY,OAAO,IAAI,SAAU,KAAK,uBAAuB,GAExE9wB,IACAA,EAAQ,YAAY,GAAG,WAAY,KAAK,WAAW,EACnDA,EAAQ,YAAY,GAAG,cAAe,KAAK,cAAc,EACzDA,EAAQ,YAAY,GAAG,cAAe,KAAK,cAAc,EACzDA,EAAQ,YAAY,GAAG,eAAgB,KAAK,eAAe,EAC3DA,EAAQ,YAAY,KAAK,GAAG,SAAU,KAAK,uBAAuB,EAClEA,EAAQ,YAAY,OAAO,GAAG,SAAU,KAAK,uBAAuB,GAEpEA,GAAW,KAAK,mBAAqBA,EAAQ,UAAU,oBACnDA,EAAQ,UAAU,kBAClB,KAAK,eAAc,EAEnB,KAAK,gBAAe,EAEhC,EACA,SAASwqC,EAAYxkC,EAAQ,CACrBA,EAAO,8BAEXA,EAAO,YAAcA,EAAO,YAAY,KAAKA,CAAM,EACnDA,EAAO,eAAiBA,EAAO,eAAe,KAAKA,CAAM,EACzDA,EAAO,eAAiBA,EAAO,eAAe,KAAKA,CAAM,EACzDA,EAAO,gBAAkBA,EAAO,gBAAgB,KAAKA,CAAM,EAC3DA,EAAO,4BAA8B5U,EAAQ,gBAAgB,KAAK4U,CAAM,EACxEA,EAAO,wBAA0BA,EAAO,wBAAwB,KAAKA,CAAM,EAC3EA,EAAO,4BAA4BA,CAAM,EACzCA,EAAO,GAAG,gBAAiBA,EAAO,2BAA2B,EAC7DA,EAAO,GAAG,YAAa6gC,CAAW,EAClC7gC,EAAO,SAAS,YAAYqK,EAAS,eAAe,EACpDo6B,EAAsBzkC,CAAM,EAC/B,CACD,SAASykC,EAAsBzkC,EAAQ,CACnC,GAAI,CAACA,EAAO,UACR,OACJ,IAAIrQ,EAAKqQ,EAAO,UAAU,WAAU,EAChC0kC,EAAY,GAChBtqC,EAAM,YAAYzK,EAAI,UAAW,SAAU8C,EAAG,CAC1C,IAAIkyC,EAAUlyC,EAAE,SAAW,IAAM,EAAEA,EAAE,SAAWA,EAAE,UAAYA,EAAE,SAC5DuN,EAAO,qBAAuB2kC,EACzBD,IACD1kC,EAAO,SAAS,eAAe,WAAW,EAC1C0kC,EAAY,IAGXA,GACLE,GAEP,EAAE5kC,CAAM,EACT5F,EAAM,YAAYzK,EAAI,QAASi1C,EAAO5kC,CAAM,EAC5C5F,EAAM,YAAYzK,EAAI,OAAQi1C,EAAO5kC,CAAM,EAC3C,SAAS4kC,EAAMnyC,EAAG,CACViyC,IACA1kC,EAAO,SAAS,eAAe,EAAE,EACjC0kC,EAAY,GAEnB,CACJ,CACDt5C,EAAQ,YAAco5C,EACtB35C,EAAQ,UAAU,EAAE,cAAcy/B,EAAO,UAAW,SAAU,CAC1D,kBAAmB,CACf,IAAK,SAAUx+B,EAAK,CAChB04C,EAAY,IAAI,EACZ14C,GACA,KAAK,GAAG,gBAAiB,KAAK,2BAA2B,EACzD,KAAK,GAAG,YAAa+0C,CAAW,IAGhC,KAAK,IAAI,gBAAiB,KAAK,2BAA2B,EAC1D,KAAK,IAAI,YAAaA,CAAW,EAExC,EACD,MAAO,EACV,EACD,kBAAmB,CACf,IAAK,SAAU/0C,EAAK,CAChB,KAAK,oBAAsBA,CAC9B,EACD,MAAO,EACV,CACL,CAAC,CAED,CAAC,EAED,IAAI,OAAO,6BAA6B,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAASjB,EAASO,EAASlB,EAAO,CACtH,IAAIkP,EAAQvO,EAAQ,aAAa,EAAE,MAC/Bg6C,EAAWz5C,EAAQ,SAAW,UAAY,CAAA,GAC7C,UAAY,CACT,KAAK,mBAAqB,KAC1B,KAAK,kBAAoB,KACzB,KAAK,cAAgB,SAAU4O,EAAS8qC,EAAWprC,EAAK,CACpD,IAAIkD,EAAO5C,EAAQ,QAAQN,CAAG,EAC9B,OAAI,KAAK,mBAAmB,KAAKkD,CAAI,EAC1B,QACPkoC,GAAa,gBACV,KAAK,mBACL,KAAK,kBAAkB,KAAKloC,CAAI,EAC5B,MACJ,EACf,EACI,KAAK,mBAAqB,SAAU5C,EAAS8qC,EAAWprC,EAAK,CACzD,OAAO,IACf,EACI,KAAK,iBAAmB,SAAUM,EAASN,EAAKC,EAAQ,CACpD,IAAIvF,EAAK,KACLwI,EAAO5C,EAAQ,QAAQN,CAAG,EAC1BqrC,EAAanoC,EAAK,OAAOxI,CAAE,EAC/B,GAAI2wC,GAAc,GAMlB,SAJIzrC,EAAcK,GAAUiD,EAAK,OAC7B+F,EAAS3I,EAAQ,YACjBX,EAAWK,EACXH,EAASG,EACN,EAAEA,EAAMiJ,GAAQ,CACnB,IAAIkN,EAAQ7V,EAAQ,QAAQN,CAAG,EAAE,OAAOtF,CAAE,EAC1C,GAAIyb,GAAS,GAEb,IAAIA,GAASk1B,EAAY,CACrB,IAAI9wB,EAAQja,EAAQ,WAAWN,EAAK,CAAC,EACrC,GAAI,CAACua,GAASA,EAAM,OAAS,SACzB,MAER1a,EAASG,GAEb,GAAIH,EAASF,EAAU,CACnB,IAAIG,EAAYQ,EAAQ,QAAQT,CAAM,EAAE,OACxC,OAAO,IAAIH,EAAMC,EAAUC,EAAaC,EAAQC,CAAS,GAErE,EACI,KAAK,oBAAsB,SAAUQ,EAAS+d,EAASre,EAAKC,EAAQynB,EAAQ,CACxE,IAAI/zB,EAAQ,CAAE,IAAKqM,EAAK,OAAQC,EAAS,GACrCpM,EAAMyM,EAAQ,oBAAoB+d,EAAS1qB,EAAO+zB,CAAM,EAC5D,GAAK7zB,EAEL,KAAIqzB,EAAK5mB,EAAQ,YAAYzM,EAAI,GAAG,EACpC,OAAIqzB,GAAM,OACNA,EAAK5mB,EAAQ,cAAczM,EAAI,GAAG,GAClCqzB,GAAM,SAAWrzB,EAAI,IAAMF,EAAM,MACjCE,EAAI,MACJA,EAAI,OAASyM,EAAQ,QAAQzM,EAAI,GAAG,EAAE,QAEnC6L,EAAM,WAAW/L,EAAOE,CAAG,EAC1C,EACI,KAAK,oBAAsB,SAAUyM,EAAS+d,EAASre,EAAKC,EAAQynB,EAAQ,CACxE,IAAI7zB,EAAM,CAAE,IAAKmM,EAAK,OAAQC,CAAM,EAChCtM,EAAQ2M,EAAQ,oBAAoB+d,EAASxqB,CAAG,EACpD,GAAKF,EAEL,OAAAA,EAAM,SACNE,EAAI,SACG6L,EAAM,WAAW/L,EAAOE,CAAG,CAC1C,CACA,GAAG,KAAKs3C,EAAS,SAAS,CAE1B,CAAC,EAED,IAAI,OAAO,uBAAuB,CAAC,UAAU,UAAU,SAAS,mBAAmB,cAAc,WAAW,EAAG,SAASh6C,EAASO,EAASlB,EAAO,CACjJ,IAAI4/B,EAAcj/B,EAAQ,iBAAiB,EAAE,YACzCgH,EAAMhH,EAAQ,YAAY,EAC1BuO,EAAQvO,EAAQ,UAAU,EAAE,MAChC,SAASm6C,EAAal3C,EAAOg6B,EAAQmd,EAAY,CAG7C,QAFIvlB,EAAQ,EACRhC,EAAO5vB,EAAM,OAAS,EACnB4xB,GAAShC,GAAM,CAClB,IAAIgF,EAAOhD,EAAQhC,GAAS,EACxB/P,EAAIs3B,EAAWnd,EAAQh6B,EAAM40B,CAAG,CAAC,EACrC,GAAI/U,EAAI,EACJ+R,EAAQgD,EAAM,UACT/U,EAAI,EACT+P,EAAOgF,EAAM,MAEb,QAAOA,EAEf,MAAO,EAAEhD,EAAQ,EACpB,CACD,SAASwlB,EAAgBlrC,EAASN,EAAK4Q,EAAK,CACxC,IAAI8Y,EAAcppB,EAAQ,eAAc,EAAG,KAAKZ,EAAM,aAAa,EACnE,GAAKgqB,EAAY,OAEjB,KAAI14B,EAAIs6C,EAAa5hB,EAAa,CAAE,IAAK1pB,EAAK,OAAQ,EAAE,EAAIN,EAAM,aAAa,EAC3E1O,EAAI,IACJA,EAAI,CAACA,EAAI,GACTA,GAAK04B,EAAY,OACjB14B,EAAI4f,EAAM,EAAI,EAAI8Y,EAAY,OAAS,EAClC14B,IAAM,GAAK4f,EAAM,IACtB5f,EAAI04B,EAAY,OAAS,GAC7B,IAAI3gB,EAAa2gB,EAAY14B,CAAC,EAC9B,GAAI,GAAC+X,GAAc,CAAC6H,GAEpB,IAAI7H,EAAW,MAAQ/I,EAAK,CACxB,GACI+I,EAAa2gB,EAAY14B,GAAK4f,CAAG,QAC5B7H,GAAcA,EAAW,MAAQ/I,GAC1C,GAAI,CAAC+I,EACD,OAAO2gB,EAAY,QAE3B,IAAI+hB,EAAU,CAAA,EACdzrC,EAAM+I,EAAW,IACjB,GACI0iC,EAAQ76B,EAAM,EAAI,UAAY,MAAM,EAAE7H,CAAU,EAChDA,EAAa2gB,EAAY14B,GAAK4f,CAAG,QAC5B7H,GAAcA,EAAW,KAAO/I,GACzC,OAAOyrC,EAAQ,QAAUA,GAC5B,CACD/5C,EAAQ,gBAAkB,SAAU4U,EAAQsK,EAAK,CAC7C,IAAItQ,EAAUgG,EAAO,QAChBhG,EAAQ,gBACTA,EAAQ,cAAgB,IAAI8vB,EAAY9vB,CAAO,EAC/CA,EAAQ,cAAc,OAAOgG,CAAM,GAEvC,IAAIG,EAAMH,EAAO,oBACbtG,EAAMyG,EAAI,IACVilC,EAAYprC,EAAQ,cAAc,gBAAgBN,CAAG,EAAE,OAAO,SAAUyO,EAAG,CAC3E,OAAOA,EAAE,MAAQ,aACzB,CAAK,EAAE,CAAC,EACAi9B,EACAA,EAAU,QAAO,EAGjB1rC,GAAO4Q,EAEX,IAAI8Y,EAAc8hB,EAAgBlrC,EAASN,EAAK4Q,CAAG,EAC/C+6B,EACJ,GAAIjiB,EAAa,CACb,IAAI3gB,EAAa2gB,EAAY,CAAC,EAC9BjjB,EAAI,QAAUsC,EAAW,KAAO,OAAOA,EAAW,QAAU,SACtDA,EAAW,IAAI,GACfA,EAAW,SAAW,EAC5BtC,EAAI,IAAMsC,EAAW,IACrB4iC,EAAarlC,EAAO,SAAS,aAAa,aAAaG,EAAI,GAAG,MAE7D,IAAIilC,EACL,OAGAC,EAAa,CACT,KAAM,CAAC,aAAa,EACpB,UAAW,QACvB,EAEIrlC,EAAO,QAAQ,OAAOG,EAAI,GAAG,EAC7BH,EAAO,UAAU,eAAeG,CAAG,EACnC,IAAIgI,EAAI,CACJ,IAAKhI,EAAI,IACT,WAAY,GACZ,YAAa,GACb,GAAItO,EAAI,cAAc,KAAK,EAC3B,KAAM,aACd,EACQlC,EAAKwY,EAAE,GAAG,YAAYtW,EAAI,cAAc,KAAK,CAAC,EAC9CyzC,EAAQn9B,EAAE,GAAG,YAAYtW,EAAI,cAAc,KAAK,CAAC,EACrDyzC,EAAM,UAAY,sBAAwBD,EAAW,UACrD,IAAIvmC,EAAOkB,EAAO,SAAS,aACtB,iBAAiBG,CAAG,EAAE,KAC3BmlC,EAAM,MAAM,KAAOxmC,EAAOkB,EAAO,SAAS,YAAc,EAAI,KAC5DmI,EAAE,GAAG,UAAY,uBACjBxY,EAAG,UAAY,gBAAkB01C,EAAW,UAC5C11C,EAAG,UAAY01C,EAAW,KAAK,KAAK,MAAM,EAC1C11C,EAAG,YAAYkC,EAAI,cAAc,KAAK,CAAC,EACvC,IAAIqY,EAAK,SAAU/X,EAAGkG,EAAQjC,EAAW,CACrC,GAAIiC,IAAW,IAAMjC,IAAc,OAASA,IAAc,UACtD,OAAA+R,EAAE,QAAO,EACF,CAAE,QAAS,OAE9B,EACIA,EAAE,QAAU,UAAY,CAChBnI,EAAO,cAAc,iBAEzBA,EAAO,WAAW,sBAAsBkK,CAAE,EAC1ClQ,EAAQ,cAAc,iBAAiBmO,CAAC,EACxCnI,EAAO,IAAI,kBAAmBmI,EAAE,OAAO,EACvCnI,EAAO,IAAI,gBAAiBmI,EAAE,OAAO,EACrCnI,EAAO,IAAI,UAAWmI,EAAE,OAAO,EAC/BnI,EAAO,IAAI,SAAUmI,EAAE,OAAO,EACtC,EACInI,EAAO,WAAW,mBAAmBkK,CAAE,EACvClK,EAAO,GAAG,kBAAmBmI,EAAE,OAAO,EACtCnI,EAAO,GAAG,gBAAiBmI,EAAE,OAAO,EACpCnI,EAAO,GAAG,UAAWmI,EAAE,OAAO,EAC9BnI,EAAO,GAAG,SAAUmI,EAAE,OAAO,EAC7BnI,EAAO,QAAQ,cAAc,cAAcmI,CAAC,EAC5CA,EAAE,GAAG,YAAcnI,EAAO,MAAM,KAAKA,CAAM,EAC3CA,EAAO,SAAS,qBAAqB,KAAM,GAAK,CAAE,OAAQmI,EAAE,GAAG,YAAY,CAAE,CACjF,EACAtW,EAAI,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAA07B,mBAAoB,EAAK,CAEv+B,CAAC,EAED,IAAI,OAAO,UAAU,CAAC,UAAU,UAAU,SAAS,cAAc,gBAAgB,YAAY,aAAa,mBAAmB,kBAAkB,uBAAuB,2BAA2B,4BAA4B,kBAAkB,mBAAmB,6BAA6B,qBAAqB,uBAAuB,aAAa,kBAAkB,EAAG,SAAShH,EAASO,EAASlB,EAAO,CAM/YW,EAAQ,gBAAgB,EAAEO,CAAO,EACjC,IAAIyG,EAAMhH,EAAQ,WAAW,EACzBuP,EAAQvP,EAAQ,aAAa,EAC7BuO,EAAQvO,EAAQ,SAAS,EAAE,MAC3By/B,EAASz/B,EAAQ,UAAU,EAAE,OAC7B03B,EAAc13B,EAAQ,gBAAgB,EAAE,YACxCulC,EAAcvlC,EAAQ,eAAe,EAAE,YACvC06C,EAAW16C,EAAQ,oBAAoB,EAAE,gBAC7CA,EAAQ,wBAAwB,EAChCA,EAAQ,yBAAyB,EACjCA,EAAQ,eAAe,EACvBA,EAAQ,gBAAgB,EACxBA,EAAQ,0BAA0B,EAClCA,EAAQ,kBAAkB,EAC1BA,EAAQ,oBAAoB,EAC5BO,EAAQ,OAASP,EAAQ,UAAU,EACnCO,EAAQ,KAAO,SAAUuE,EAAIC,EAAS,CAClC,GAAI,OAAOD,GAAM,SAAU,CACvB,IAAI61C,EAAM71C,EAEV,GADAA,EAAK,SAAS,eAAe61C,CAAG,EAC5B,CAAC71C,EACD,MAAM,IAAI,MAAM,4BAA8B61C,CAAG,EAEzD,GAAI71C,GAAMA,EAAG,KAAOA,EAAG,IAAI,kBAAkB26B,EACzC,OAAO36B,EAAG,IAAI,OAClB,IAAIxC,EAAQ,GACZ,GAAIwC,GAAM,kBAAkB,KAAKA,EAAG,OAAO,EAAG,CAC1C,IAAI81C,EAAU91C,EACdxC,EAAQs4C,EAAQ,MAChB91C,EAAKkC,EAAI,cAAc,KAAK,EAC5B4zC,EAAQ,WAAW,aAAa91C,EAAI81C,CAAO,OAEtC91C,IACLxC,EAAQwC,EAAG,YACXA,EAAG,UAAY,IAEnB,IAAII,EAAM3E,EAAQ,kBAAkB+B,CAAK,EACrC6S,EAAS,IAAIsqB,EAAO,IAAIib,EAAS51C,CAAE,EAAGI,EAAKH,CAAO,EAClD81C,EAAM,CACN,SAAU31C,EACV,OAAQiQ,EACR,SAAUA,EAAO,OAAO,KAAKA,EAAQ,IAAI,CACjD,EACI,OAAIylC,IACAC,EAAI,SAAWD,GACnBrrC,EAAM,YAAY,OAAQ,SAAUsrC,EAAI,QAAQ,EAChD1lC,EAAO,GAAG,UAAW,UAAY,CAC7B5F,EAAM,eAAe,OAAQ,SAAUsrC,EAAI,QAAQ,EACnDA,EAAI,OAAO,UAAU,IAAM,IACnC,CAAK,EACD1lC,EAAO,UAAU,IAAMA,EAAO,IAAM0lC,EAC7B1lC,CACX,EACA5U,EAAQ,kBAAoB,SAAU8P,EAAMsL,EAAM,CAC9C,IAAIzW,EAAM,IAAIwyB,EAAYrnB,EAAMsL,CAAI,EACpC,OAAAzW,EAAI,eAAe,IAAIqgC,CAAa,EAC7BrgC,CACX,EACA3E,EAAQ,MAAQgO,EAChBhO,EAAQ,OAASk/B,EACjBl/B,EAAQ,YAAcm3B,EACtBn3B,EAAQ,YAAcglC,EACtBhlC,EAAQ,gBAAkBm6C,EAC1Bn6C,EAAQ,QAAUA,EAAQ,OAAO,OAEjC,CAAC,EAAe,UAAW,CACX,IAAI,QAAQ,CAAC,SAAS,EAAG,SAASsC,EAAG,CAC7BA,IACAA,EAAE,OAAO,KAAK,EAAI,EAClBA,EAAE,OAAS,IAAI,QAEd,OAAO,MACR,OAAO,IAAMA,GACjB,QAASf,KAAOe,EAAOA,EAAE,eAAef,CAAG,IACvC,OAAO,IAAIA,CAAG,EAAIe,EAAEf,CAAG,GAC3B,OAAO,IAAI,QAAa,OAAO,IACgCzC,IAC3DA,EAAiB,QAAA,OAAO,IAEhD,CAAiB,CACjB,sBC7umBey7C,GAAA,GAAA,IAAA,IAAA,yBAAA,YAAA,GAAA,EAAA,KCAAC,GAAA,GAAA,IAAA,IAAA,0BAAA,YAAA,GAAA,EAAA,KCAAC,GAAA,GAAA,IAAA,IAAA,gCAAA,YAAA,GAAA,EAAA,6FCUf,IAAIC,EAAmB,IAGnBC,EAAiB,4BAGjBC,EAAuB,EACvBC,EAAyB,EAGzBC,EAAmB,iBAGnBC,EAAU,qBACVC,EAAW,iBACXC,EAAW,yBACXC,EAAU,mBACVC,EAAU,gBACVC,EAAW,iBACXC,EAAU,oBACVC,EAAS,6BACTC,EAAS,eACTC,EAAY,kBACZC,EAAU,gBACVC,EAAY,kBACZC,EAAa,mBACbC,EAAW,iBACXC,EAAY,kBACZC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBACZC,EAAe,qBACfC,EAAa,mBAEbC,EAAiB,uBACjBC,EAAc,oBACdC,EAAa,wBACbC,EAAa,wBACbC,EAAU,qBACVC,EAAW,sBACXC,EAAW,sBACXC,EAAW,sBACXC,EAAkB,6BAClBC,EAAY,uBACZC,EAAY,uBAMZC,EAAe,sBAGfC,EAAe,8BAGfC,EAAW,mBAGXC,EAAiB,CAAA,EACrBA,EAAeZ,CAAU,EAAIY,EAAeX,CAAU,EACtDW,EAAeV,CAAO,EAAIU,EAAeT,CAAQ,EACjDS,EAAeR,CAAQ,EAAIQ,EAAeP,CAAQ,EAClDO,EAAeN,CAAe,EAAIM,EAAeL,CAAS,EAC1DK,EAAeJ,CAAS,EAAI,GAC5BI,EAAelC,CAAO,EAAIkC,EAAejC,CAAQ,EACjDiC,EAAed,CAAc,EAAIc,EAAe/B,CAAO,EACvD+B,EAAeb,CAAW,EAAIa,EAAe9B,CAAO,EACpD8B,EAAe7B,CAAQ,EAAI6B,EAAe5B,CAAO,EACjD4B,EAAe1B,CAAM,EAAI0B,EAAezB,CAAS,EACjDyB,EAAevB,CAAS,EAAIuB,EAAepB,CAAS,EACpDoB,EAAenB,CAAM,EAAImB,EAAelB,CAAS,EACjDkB,EAAef,CAAU,EAAI,GAG7B,IAAIgB,EAAa,OAAOt+C,IAAU,UAAYA,IAAUA,GAAO,SAAW,QAAUA,GAGhFu+C,EAAW,OAAO,MAAQ,UAAY,MAAQ,KAAK,SAAW,QAAU,KAGxE78C,EAAO48C,GAAcC,GAAY,SAAS,aAAa,EAAC,EAGxDC,EAA4Cp9C,GAAW,CAACA,EAAQ,UAAYA,EAG5Eq9C,EAAaD,GAAe,IAA6Bt+C,GAAU,CAACA,EAAO,UAAYA,EAGvFw+C,EAAgBD,GAAcA,EAAW,UAAYD,EAGrDG,GAAcD,GAAiBJ,EAAW,QAG1CM,GAAY,UAAW,CACzB,GAAI,CACF,OAAOD,IAAeA,GAAY,SAAWA,GAAY,QAAQ,MAAM,CAC3E,MAAI,CAAY,CACf,EAAA,EAGGE,GAAmBD,IAAYA,GAAS,aAW5C,SAASE,GAAYh7C,EAAOhB,EAAW,CAMrC,QALIL,EAAQ,GACRovB,EAAS/tB,GAAS,KAAO,EAAIA,EAAM,OACnCi7C,GAAW,EACX38C,GAAS,CAAA,EAEN,EAAEK,EAAQovB,GAAQ,CACvB,IAAI1uB,GAAQW,EAAMrB,CAAK,EACnBK,EAAUK,GAAOV,EAAOqB,CAAK,IAC/B1B,GAAO28C,IAAU,EAAI57C,IAGzB,OAAOf,EACR,CAUD,SAAS48C,GAAUl7C,EAAOulB,EAAQ,CAKhC,QAJI5mB,EAAQ,GACRovB,EAASxI,EAAO,OAChBtD,GAASjiB,EAAM,OAEZ,EAAErB,EAAQovB,GACf/tB,EAAMiiB,GAAStjB,CAAK,EAAI4mB,EAAO5mB,CAAK,EAEtC,OAAOqB,CACR,CAYD,SAASm7C,GAAUn7C,EAAOhB,EAAW,CAInC,QAHIL,EAAQ,GACRovB,EAAS/tB,GAAS,KAAO,EAAIA,EAAM,OAEhC,EAAErB,EAAQovB,GACf,GAAI/uB,EAAUgB,EAAMrB,CAAK,EAAGA,EAAOqB,CAAK,EACtC,MAAO,GAGX,MAAO,EACR,CAWD,SAASo7C,GAAUp5C,EAAGq5C,EAAU,CAI9B,QAHI18C,EAAQ,GACRL,EAAS,MAAM0D,CAAC,EAEb,EAAErD,EAAQqD,GACf1D,EAAOK,CAAK,EAAI08C,EAAS18C,CAAK,EAEhC,OAAOL,CACR,CASD,SAASg9C,GAAU92B,EAAM,CACvB,OAAO,SAASnlB,EAAO,CACrB,OAAOmlB,EAAKnlB,CAAK,CACrB,CACC,CAUD,SAASk8C,GAASx4C,EAAOlE,EAAK,CAC5B,OAAOkE,EAAM,IAAIlE,CAAG,CACrB,CAUD,SAAS28C,EAASC,EAAQ58C,EAAK,CAC7B,OAAO48C,GAAU,KAAO,OAAYA,EAAO58C,CAAG,CAC/C,CASD,SAAS68C,EAAWv7C,EAAK,CACvB,IAAIxB,EAAQ,GACRL,EAAS,MAAM6B,EAAI,IAAI,EAE3B,OAAAA,EAAI,QAAQ,SAASd,EAAOR,GAAK,CAC/BP,EAAO,EAAEK,CAAK,EAAI,CAACE,GAAKQ,CAAK,CACjC,CAAG,EACMf,CACR,CAUD,SAASq9C,GAAQn3B,EAAMkZ,EAAW,CAChC,OAAO,SAASke,EAAK,CACnB,OAAOp3B,EAAKkZ,EAAUke,CAAG,CAAC,CAC9B,CACC,CASD,SAASC,GAAWC,EAAK,CACvB,IAAIn9C,EAAQ,GACRL,EAAS,MAAMw9C,EAAI,IAAI,EAE3B,OAAAA,EAAI,QAAQ,SAASz8C,EAAO,CAC1Bf,EAAO,EAAEK,CAAK,EAAIU,CACtB,CAAG,EACMf,CACR,CAGD,IAAIy9C,GAAa,MAAM,UACnBC,GAAY,SAAS,UACrBC,GAAc,OAAO,UAGrBC,GAAat+C,EAAK,oBAAoB,EAGtCu+C,GAAeH,GAAU,SAGzBI,GAAiBH,GAAY,eAG7BI,GAAc,UAAW,CAC3B,IAAIC,EAAM,SAAS,KAAKJ,IAAcA,GAAW,MAAQA,GAAW,KAAK,UAAY,EAAE,EACvF,OAAOI,EAAO,iBAAmBA,EAAO,EACzC,EAAA,EAOGC,GAAuBN,GAAY,SAGnCO,GAAa,OAAO,IACtBL,GAAa,KAAKC,EAAc,EAAE,QAAQhC,EAAc,MAAM,EAC7D,QAAQ,yDAA0D,OAAO,EAAI,GAChF,EAGIqC,GAAS7B,EAAgBh9C,EAAK,OAAS,OACvC8+C,GAAS9+C,EAAK,OACd++C,GAAa/+C,EAAK,WAClBg/C,GAAuBX,GAAY,qBACnCY,GAASd,GAAW,OACpBe,GAAiBJ,GAASA,GAAO,YAAc,OAG/CK,GAAmB,OAAO,sBAC1BC,GAAiBP,GAASA,GAAO,SAAW,OAC5CQ,GAAatB,GAAQ,OAAO,KAAM,MAAM,EAGxCuB,GAAWC,GAAUv/C,EAAM,UAAU,EACrCw/C,GAAMD,GAAUv/C,EAAM,KAAK,EAC3By/C,GAAUF,GAAUv/C,EAAM,SAAS,EACnC0/C,GAAMH,GAAUv/C,EAAM,KAAK,EAC3B2/C,GAAUJ,GAAUv/C,EAAM,SAAS,EACnC4/C,GAAeL,GAAU,OAAQ,QAAQ,EAGzCM,GAAqBC,GAASR,EAAQ,EACtCS,GAAgBD,GAASN,EAAG,EAC5BQ,GAAoBF,GAASL,EAAO,EACpCQ,GAAgBH,GAASJ,EAAG,EAC5BQ,GAAoBJ,GAASH,EAAO,EAGpCQ,GAAcrB,GAASA,GAAO,UAAY,OAC1CsB,GAAgBD,GAAcA,GAAY,QAAU,OASxD,SAASE,GAAKC,EAAS,CACrB,IAAIv/C,EAAQ,GACRovB,EAASmwB,GAAW,KAAO,EAAIA,EAAQ,OAG3C,IADA,KAAK,MAAK,EACH,EAAEv/C,EAAQovB,GAAQ,CACvB,IAAIowB,EAAQD,EAAQv/C,CAAK,EACzB,KAAK,IAAIw/C,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAE9B,CASD,SAASC,IAAY,CACnB,KAAK,SAAWZ,GAAeA,GAAa,IAAI,EAAI,CAAA,EACpD,KAAK,KAAO,CACb,CAYD,SAASa,GAAWx/C,EAAK,CACvB,IAAIP,EAAS,KAAK,IAAIO,CAAG,GAAK,OAAO,KAAK,SAASA,CAAG,EACtD,YAAK,MAAQP,EAAS,EAAI,EACnBA,CACR,CAWD,SAASggD,GAAQz/C,EAAK,CACpB,IAAIgH,EAAO,KAAK,SAChB,GAAI23C,GAAc,CAChB,IAAIl/C,EAASuH,EAAKhH,CAAG,EACrB,OAAOP,IAAW25C,EAAiB,OAAY35C,EAEjD,OAAO89C,GAAe,KAAKv2C,EAAMhH,CAAG,EAAIgH,EAAKhH,CAAG,EAAI,MACrD,CAWD,SAAS0/C,GAAQ1/C,EAAK,CACpB,IAAIgH,EAAO,KAAK,SAChB,OAAO23C,GAAgB33C,EAAKhH,CAAG,IAAM,OAAau9C,GAAe,KAAKv2C,EAAMhH,CAAG,CAChF,CAYD,SAAS2/C,GAAQ3/C,EAAKQ,EAAO,CAC3B,IAAIwG,EAAO,KAAK,SAChB,YAAK,MAAQ,KAAK,IAAIhH,CAAG,EAAI,EAAI,EACjCgH,EAAKhH,CAAG,EAAK2+C,IAAgBn+C,IAAU,OAAa44C,EAAiB54C,EAC9D,IACR,CAGD4+C,GAAK,UAAU,MAAQG,GACvBH,GAAK,UAAU,OAAYI,GAC3BJ,GAAK,UAAU,IAAMK,GACrBL,GAAK,UAAU,IAAMM,GACrBN,GAAK,UAAU,IAAMO,GASrB,SAASC,GAAUP,EAAS,CAC1B,IAAIv/C,EAAQ,GACRovB,EAASmwB,GAAW,KAAO,EAAIA,EAAQ,OAG3C,IADA,KAAK,MAAK,EACH,EAAEv/C,EAAQovB,GAAQ,CACvB,IAAIowB,EAAQD,EAAQv/C,CAAK,EACzB,KAAK,IAAIw/C,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAE9B,CASD,SAASO,IAAiB,CACxB,KAAK,SAAW,GAChB,KAAK,KAAO,CACb,CAWD,SAASC,GAAgB9/C,EAAK,CAC5B,IAAIgH,EAAO,KAAK,SACZlH,EAAQigD,GAAa/4C,EAAMhH,CAAG,EAElC,GAAIF,EAAQ,EACV,MAAO,GAET,IAAIP,EAAYyH,EAAK,OAAS,EAC9B,OAAIlH,GAASP,EACXyH,EAAK,IAAG,EAERg3C,GAAO,KAAKh3C,EAAMlH,EAAO,CAAC,EAE5B,EAAE,KAAK,KACA,EACR,CAWD,SAASkgD,GAAahgD,EAAK,CACzB,IAAIgH,EAAO,KAAK,SACZlH,EAAQigD,GAAa/4C,EAAMhH,CAAG,EAElC,OAAOF,EAAQ,EAAI,OAAYkH,EAAKlH,CAAK,EAAE,CAAC,CAC7C,CAWD,SAASmgD,GAAajgD,EAAK,CACzB,OAAO+/C,GAAa,KAAK,SAAU//C,CAAG,EAAI,EAC3C,CAYD,SAASkgD,GAAalgD,EAAKQ,EAAO,CAChC,IAAIwG,EAAO,KAAK,SACZlH,EAAQigD,GAAa/4C,EAAMhH,CAAG,EAElC,OAAIF,EAAQ,GACV,EAAE,KAAK,KACPkH,EAAK,KAAK,CAAChH,EAAKQ,CAAK,CAAC,GAEtBwG,EAAKlH,CAAK,EAAE,CAAC,EAAIU,EAEZ,IACR,CAGDo/C,GAAU,UAAU,MAAQC,GAC5BD,GAAU,UAAU,OAAYE,GAChCF,GAAU,UAAU,IAAMI,GAC1BJ,GAAU,UAAU,IAAMK,GAC1BL,GAAU,UAAU,IAAMM,GAS1B,SAASC,GAASd,EAAS,CACzB,IAAIv/C,EAAQ,GACRovB,EAASmwB,GAAW,KAAO,EAAIA,EAAQ,OAG3C,IADA,KAAK,MAAK,EACH,EAAEv/C,EAAQovB,GAAQ,CACvB,IAAIowB,EAAQD,EAAQv/C,CAAK,EACzB,KAAK,IAAIw/C,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAE9B,CASD,SAASc,IAAgB,CACvB,KAAK,KAAO,EACZ,KAAK,SAAW,CACd,KAAQ,IAAIhB,GACZ,IAAO,IAAKb,IAAOqB,IACnB,OAAU,IAAIR,EAClB,CACC,CAWD,SAASiB,GAAergD,EAAK,CAC3B,IAAIP,EAAS6gD,GAAW,KAAMtgD,CAAG,EAAE,OAAUA,CAAG,EAChD,YAAK,MAAQP,EAAS,EAAI,EACnBA,CACR,CAWD,SAAS8gD,GAAYvgD,EAAK,CACxB,OAAOsgD,GAAW,KAAMtgD,CAAG,EAAE,IAAIA,CAAG,CACrC,CAWD,SAASwgD,GAAYxgD,EAAK,CACxB,OAAOsgD,GAAW,KAAMtgD,CAAG,EAAE,IAAIA,CAAG,CACrC,CAYD,SAASygD,GAAYzgD,EAAKQ,EAAO,CAC/B,IAAIwG,EAAOs5C,GAAW,KAAMtgD,CAAG,EAC3BsiB,EAAOtb,EAAK,KAEhB,OAAAA,EAAK,IAAIhH,EAAKQ,CAAK,EACnB,KAAK,MAAQwG,EAAK,MAAQsb,EAAO,EAAI,EAC9B,IACR,CAGD69B,GAAS,UAAU,MAAQC,GAC3BD,GAAS,UAAU,OAAYE,GAC/BF,GAAS,UAAU,IAAMI,GACzBJ,GAAS,UAAU,IAAMK,GACzBL,GAAS,UAAU,IAAMM,GAUzB,SAASC,GAASh6B,EAAQ,CACxB,IAAI5mB,EAAQ,GACRovB,EAASxI,GAAU,KAAO,EAAIA,EAAO,OAGzC,IADA,KAAK,SAAW,IAAIy5B,GACb,EAAErgD,EAAQovB,GACf,KAAK,IAAIxI,EAAO5mB,CAAK,CAAC,CAEzB,CAYD,SAAS6gD,GAAYngD,EAAO,CAC1B,YAAK,SAAS,IAAIA,EAAO44C,CAAc,EAChC,IACR,CAWD,SAASwH,GAAYpgD,EAAO,CAC1B,OAAO,KAAK,SAAS,IAAIA,CAAK,CAC/B,CAGDkgD,GAAS,UAAU,IAAMA,GAAS,UAAU,KAAOC,GACnDD,GAAS,UAAU,IAAME,GASzB,SAASC,GAAMxB,EAAS,CACtB,IAAIr4C,EAAO,KAAK,SAAW,IAAI44C,GAAUP,CAAO,EAChD,KAAK,KAAOr4C,EAAK,IAClB,CASD,SAAS85C,IAAa,CACpB,KAAK,SAAW,IAAIlB,GACpB,KAAK,KAAO,CACb,CAWD,SAASmB,GAAY/gD,EAAK,CACxB,IAAIgH,EAAO,KAAK,SACZvH,EAASuH,EAAK,OAAUhH,CAAG,EAE/B,YAAK,KAAOgH,EAAK,KACVvH,CACR,CAWD,SAASuhD,GAAShhD,EAAK,CACrB,OAAO,KAAK,SAAS,IAAIA,CAAG,CAC7B,CAWD,SAASihD,GAASjhD,EAAK,CACrB,OAAO,KAAK,SAAS,IAAIA,CAAG,CAC7B,CAYD,SAASkhD,GAASlhD,EAAKQ,EAAO,CAC5B,IAAIwG,EAAO,KAAK,SAChB,GAAIA,aAAgB44C,GAAW,CAC7B,IAAIuB,EAAQn6C,EAAK,SACjB,GAAI,CAACu3C,IAAQ4C,EAAM,OAAShI,EAAmB,EAC7C,OAAAgI,EAAM,KAAK,CAACnhD,EAAKQ,CAAK,CAAC,EACvB,KAAK,KAAO,EAAEwG,EAAK,KACZ,KAETA,EAAO,KAAK,SAAW,IAAIm5C,GAASgB,CAAK,EAE3C,OAAAn6C,EAAK,IAAIhH,EAAKQ,CAAK,EACnB,KAAK,KAAOwG,EAAK,KACV,IACR,CAGD65C,GAAM,UAAU,MAAQC,GACxBD,GAAM,UAAU,OAAYE,GAC5BF,GAAM,UAAU,IAAMG,GACtBH,GAAM,UAAU,IAAMI,GACtBJ,GAAM,UAAU,IAAMK,GAUtB,SAASE,GAAc5gD,EAAO6gD,EAAW,CACvC,IAAIC,EAAQC,GAAQ/gD,CAAK,EACrBghD,EAAQ,CAACF,GAASG,GAAYjhD,CAAK,EACnCkhD,GAAS,CAACJ,GAAS,CAACE,GAASG,GAASnhD,CAAK,EAC3CohD,GAAS,CAACN,GAAS,CAACE,GAAS,CAACE,IAAUG,GAAarhD,CAAK,EAC1DshD,GAAcR,GAASE,GAASE,IAAUE,GAC1CniD,GAASqiD,GAAcvF,GAAU/7C,EAAM,OAAQ,MAAM,EAAI,CAAE,EAC3D0uB,GAASzvB,GAAO,OAEpB,QAASO,MAAOQ,GACT6gD,GAAa9D,GAAe,KAAK/8C,EAAOR,EAAG,IAC5C,EAAE8hD,KAEC9hD,IAAO,UAEN0hD,KAAW1hD,IAAO,UAAYA,IAAO,WAErC4hD,KAAW5hD,IAAO,UAAYA,IAAO,cAAgBA,IAAO,eAE7D+hD,GAAQ/hD,GAAKkvB,EAAM,KAExBzvB,GAAO,KAAKO,EAAG,EAGnB,OAAOP,EACR,CAUD,SAASsgD,GAAa5+C,EAAOnB,EAAK,CAEhC,QADIkvB,EAAS/tB,EAAM,OACZ+tB,KACL,GAAI8yB,GAAG7gD,EAAM+tB,CAAM,EAAE,CAAC,EAAGlvB,CAAG,EAC1B,OAAOkvB,EAGX,MAAO,EACR,CAaD,SAAS+yB,GAAerF,EAAQsF,EAAUC,EAAa,CACrD,IAAI1iD,EAASyiD,EAAStF,CAAM,EAC5B,OAAO2E,GAAQ3E,CAAM,EAAIn9C,EAAS48C,GAAU58C,EAAQ0iD,EAAYvF,CAAM,CAAC,CACxE,CASD,SAASwF,GAAW5hD,EAAO,CACzB,OAAIA,GAAS,KACJA,IAAU,OAAYk6C,EAAeR,EAEtC+D,IAAkBA,MAAkB,OAAOz9C,CAAK,EACpD6hD,GAAU7hD,CAAK,EACf8hD,GAAe9hD,CAAK,CACzB,CASD,SAAS+hD,GAAgB/hD,EAAO,CAC9B,OAAOgiD,GAAahiD,CAAK,GAAK4hD,GAAW5hD,CAAK,GAAKg5C,CACpD,CAgBD,SAASiJ,GAAYjiD,EAAO87B,EAAOomB,EAASC,EAAY/7B,GAAO,CAC7D,OAAIpmB,IAAU87B,EACL,GAEL97B,GAAS,MAAQ87B,GAAS,MAAS,CAACkmB,GAAahiD,CAAK,GAAK,CAACgiD,GAAalmB,CAAK,EACzE97B,IAAUA,GAAS87B,IAAUA,EAE/BsmB,GAAgBpiD,EAAO87B,EAAOomB,EAASC,EAAYF,GAAa77B,EAAK,CAC7E,CAgBD,SAASg8B,GAAgBhG,EAAQtgB,EAAOomB,EAASC,EAAYE,GAAWj8B,GAAO,CAC7E,IAAIk8B,GAAWvB,GAAQ3E,CAAM,EACzBmG,GAAWxB,GAAQjlB,CAAK,EACxB0mB,GAASF,GAAWrJ,EAAWwJ,GAAOrG,CAAM,EAC5CsG,GAASH,GAAWtJ,EAAWwJ,GAAO3mB,CAAK,EAE/C0mB,GAASA,IAAUxJ,EAAUW,EAAY6I,GACzCE,GAASA,IAAU1J,EAAUW,EAAY+I,GAEzC,IAAIC,GAAWH,IAAU7I,EACrBiJ,GAAWF,IAAU/I,EACrBkJ,GAAYL,IAAUE,GAE1B,GAAIG,IAAa1B,GAAS/E,CAAM,EAAG,CACjC,GAAI,CAAC+E,GAASrlB,CAAK,EACjB,MAAO,GAETwmB,GAAW,GACXK,GAAW,GAEb,GAAIE,IAAa,CAACF,GAChB,OAAAv8B,KAAUA,GAAQ,IAAIi6B,IACdiC,IAAYjB,GAAajF,CAAM,EACnC0G,GAAY1G,EAAQtgB,EAAOomB,EAASC,EAAYE,GAAWj8B,EAAK,EAChE28B,GAAW3G,EAAQtgB,EAAO0mB,GAAQN,EAASC,EAAYE,GAAWj8B,EAAK,EAE7E,GAAI,EAAE87B,EAAUrJ,GAAuB,CACrC,IAAImK,GAAeL,IAAY5F,GAAe,KAAKX,EAAQ,aAAa,EACpE6G,GAAeL,IAAY7F,GAAe,KAAKjhB,EAAO,aAAa,EAEvE,GAAIknB,IAAgBC,GAAc,CAChC,IAAIC,GAAeF,GAAe5G,EAAO,MAAO,EAAGA,EAC/C+G,GAAeF,GAAennB,EAAM,MAAK,EAAKA,EAElD,OAAA1V,KAAUA,GAAQ,IAAIi6B,IACfgC,GAAUa,GAAcC,GAAcjB,EAASC,EAAY/7B,EAAK,GAG3E,OAAKy8B,IAGLz8B,KAAUA,GAAQ,IAAIi6B,IACf+C,GAAahH,EAAQtgB,EAAOomB,EAASC,EAAYE,GAAWj8B,EAAK,GAH/D,EAIV,CAUD,SAASi9B,GAAarjD,EAAO,CAC3B,GAAI,CAACsjD,GAAStjD,CAAK,GAAKujD,GAASvjD,CAAK,EACpC,MAAO,GAET,IAAIwjD,EAAUC,GAAWzjD,CAAK,EAAIm9C,GAAanC,EAC/C,OAAOwI,EAAQ,KAAKnF,GAASr+C,CAAK,CAAC,CACpC,CASD,SAAS0jD,GAAiB1jD,EAAO,CAC/B,OAAOgiD,GAAahiD,CAAK,GACvB2jD,GAAS3jD,EAAM,MAAM,GAAK,CAAC,CAACk7C,EAAe0G,GAAW5hD,CAAK,CAAC,CAC/D,CASD,SAAS4jD,GAASxH,EAAQ,CACxB,GAAI,CAACyH,GAAYzH,CAAM,EACrB,OAAOwB,GAAWxB,CAAM,EAE1B,IAAIn9C,EAAS,CAAA,EACb,QAASO,KAAO,OAAO48C,CAAM,EACvBW,GAAe,KAAKX,EAAQ58C,CAAG,GAAKA,GAAO,eAC7CP,EAAO,KAAKO,CAAG,EAGnB,OAAOP,CACR,CAeD,SAAS6jD,GAAYniD,EAAOm7B,EAAOomB,EAASC,EAAYE,GAAWj8B,GAAO,CACxE,IAAI09B,GAAY5B,EAAUrJ,EACtBkL,GAAYpjD,EAAM,OAClBqjD,GAAYloB,EAAM,OAEtB,GAAIioB,IAAaC,IAAa,EAAEF,IAAaE,GAAYD,IACvD,MAAO,GAGT,IAAIE,GAAU79B,GAAM,IAAIzlB,CAAK,EAC7B,GAAIsjD,IAAW79B,GAAM,IAAI0V,CAAK,EAC5B,OAAOmoB,IAAWnoB,EAEpB,IAAIx8B,GAAQ,GACRL,GAAS,GACTilD,GAAQhC,EAAUpJ,EAA0B,IAAIoH,GAAW,OAM/D,IAJA95B,GAAM,IAAIzlB,EAAOm7B,CAAK,EACtB1V,GAAM,IAAI0V,EAAOn7B,CAAK,EAGf,EAAErB,GAAQykD,IAAW,CAC1B,IAAII,GAAWxjD,EAAMrB,EAAK,EACtB8kD,GAAWtoB,EAAMx8B,EAAK,EAE1B,GAAI6iD,EACF,IAAIkC,GAAWP,GACX3B,EAAWiC,GAAUD,GAAU7kD,GAAOw8B,EAAOn7B,EAAOylB,EAAK,EACzD+7B,EAAWgC,GAAUC,GAAU9kD,GAAOqB,EAAOm7B,EAAO1V,EAAK,EAE/D,GAAIi+B,KAAa,OAAW,CAC1B,GAAIA,GACF,SAEFplD,GAAS,GACT,MAGF,GAAIilD,IACF,GAAI,CAACpI,GAAUhgB,EAAO,SAASsoB,GAAUE,GAAU,CAC7C,GAAI,CAACpI,GAASgI,GAAMI,EAAQ,IACvBH,KAAaC,IAAY/B,GAAU8B,GAAUC,GAAUlC,EAASC,EAAY/7B,EAAK,GACpF,OAAO89B,GAAK,KAAKI,EAAQ,CAEvC,CAAW,EAAG,CACNrlD,GAAS,GACT,eAEO,EACLklD,KAAaC,IACX/B,GAAU8B,GAAUC,GAAUlC,EAASC,EAAY/7B,EAAK,GACzD,CACLnnB,GAAS,GACT,OAGJ,OAAAmnB,GAAM,OAAUzlB,CAAK,EACrBylB,GAAM,OAAU0V,CAAK,EACd78B,EACR,CAmBD,SAAS8jD,GAAW3G,EAAQtgB,EAAOj5B,EAAKq/C,EAASC,GAAYE,GAAWj8B,GAAO,CAC7E,OAAQvjB,EAAG,CACT,KAAKw3C,EACH,GAAK+B,EAAO,YAActgB,EAAM,YAC3BsgB,EAAO,YAActgB,EAAM,WAC9B,MAAO,GAETsgB,EAASA,EAAO,OAChBtgB,EAAQA,EAAM,OAEhB,KAAKse,EACH,MAAK,EAAAgC,EAAO,YAActgB,EAAM,YAC5B,CAACumB,GAAU,IAAI/E,GAAWlB,CAAM,EAAG,IAAIkB,GAAWxhB,CAAK,CAAC,GAK9D,KAAKqd,EACL,KAAKC,EACL,KAAKK,EAGH,OAAO+H,GAAG,CAACpF,EAAQ,CAACtgB,CAAK,EAE3B,KAAKud,EACH,OAAO+C,EAAO,MAAQtgB,EAAM,MAAQsgB,EAAO,SAAWtgB,EAAM,QAE9D,KAAKge,EACL,KAAKE,EAIH,OAAOoC,GAAWtgB,EAAQ,GAE5B,KAAK0d,EACH,IAAI+K,GAAUlI,EAEhB,KAAKtC,EACH,IAAI+J,GAAY5B,EAAUrJ,EAG1B,GAFA0L,KAAYA,GAAU/H,IAElBJ,EAAO,MAAQtgB,EAAM,MAAQ,CAACgoB,GAChC,MAAO,GAGT,IAAIG,GAAU79B,GAAM,IAAIg2B,CAAM,EAC9B,GAAI6H,GACF,OAAOA,IAAWnoB,EAEpBomB,GAAWpJ,EAGX1yB,GAAM,IAAIg2B,EAAQtgB,CAAK,EACvB,IAAI78B,GAAS6jD,GAAYyB,GAAQnI,CAAM,EAAGmI,GAAQzoB,CAAK,EAAGomB,EAASC,GAAYE,GAAWj8B,EAAK,EAC/F,OAAAA,GAAM,OAAUg2B,CAAM,EACfn9C,GAET,KAAKg7C,EACH,GAAI0E,GACF,OAAOA,GAAc,KAAKvC,CAAM,GAAKuC,GAAc,KAAK7iB,CAAK,CAElE,CACD,MAAO,EACR,CAeD,SAASsnB,GAAahH,EAAQtgB,EAAOomB,EAASC,EAAYE,GAAWj8B,GAAO,CAC1E,IAAI09B,GAAY5B,EAAUrJ,EACtB2L,GAAWC,GAAWrI,CAAM,EAC5BsI,GAAYF,GAAS,OACrBG,GAAWF,GAAW3oB,CAAK,EAC3BkoB,GAAYW,GAAS,OAEzB,GAAID,IAAaV,IAAa,CAACF,GAC7B,MAAO,GAGT,QADIxkD,GAAQolD,GACLplD,MAAS,CACd,IAAIE,GAAMglD,GAASllD,EAAK,EACxB,GAAI,EAAEwkD,GAAYtkD,MAAOs8B,EAAQihB,GAAe,KAAKjhB,EAAOt8B,EAAG,GAC7D,MAAO,GAIX,IAAIykD,GAAU79B,GAAM,IAAIg2B,CAAM,EAC9B,GAAI6H,IAAW79B,GAAM,IAAI0V,CAAK,EAC5B,OAAOmoB,IAAWnoB,EAEpB,IAAI78B,GAAS,GACbmnB,GAAM,IAAIg2B,EAAQtgB,CAAK,EACvB1V,GAAM,IAAI0V,EAAOsgB,CAAM,EAGvB,QADIwI,GAAWd,GACR,EAAExkD,GAAQolD,IAAW,CAC1BllD,GAAMglD,GAASllD,EAAK,EACpB,IAAIulD,GAAWzI,EAAO58C,EAAG,EACrB4kD,GAAWtoB,EAAMt8B,EAAG,EAExB,GAAI2iD,EACF,IAAIkC,GAAWP,GACX3B,EAAWiC,GAAUS,GAAUrlD,GAAKs8B,EAAOsgB,EAAQh2B,EAAK,EACxD+7B,EAAW0C,GAAUT,GAAU5kD,GAAK48C,EAAQtgB,EAAO1V,EAAK,EAG9D,GAAI,EAAEi+B,KAAa,OACVQ,KAAaT,IAAY/B,GAAUwC,GAAUT,GAAUlC,EAASC,EAAY/7B,EAAK,EAClFi+B,IACD,CACLplD,GAAS,GACT,MAEF2lD,KAAaA,GAAWplD,IAAO,eAEjC,GAAIP,IAAU,CAAC2lD,GAAU,CACvB,IAAIE,GAAU1I,EAAO,YACjB2I,GAAUjpB,EAAM,YAGhBgpB,IAAWC,IACV,gBAAiB3I,GAAU,gBAAiBtgB,GAC7C,EAAE,OAAOgpB,IAAW,YAAcA,cAAmBA,IACnD,OAAOC,IAAW,YAAcA,cAAmBA,MACvD9lD,GAAS,IAGb,OAAAmnB,GAAM,OAAUg2B,CAAM,EACtBh2B,GAAM,OAAU0V,CAAK,EACd78B,EACR,CASD,SAASwlD,GAAWrI,EAAQ,CAC1B,OAAOqF,GAAerF,EAAQlzC,GAAM87C,EAAU,CAC/C,CAUD,SAASlF,GAAWh/C,EAAKtB,EAAK,CAC5B,IAAIgH,EAAO1F,EAAI,SACf,OAAOmkD,GAAUzlD,CAAG,EAChBgH,EAAK,OAAOhH,GAAO,SAAW,SAAW,MAAM,EAC/CgH,EAAK,GACV,CAUD,SAASs3C,GAAU1B,EAAQ58C,EAAK,CAC9B,IAAIQ,EAAQm8C,EAASC,EAAQ58C,CAAG,EAChC,OAAO6jD,GAAarjD,CAAK,EAAIA,EAAQ,MACtC,CASD,SAAS6hD,GAAU7hD,EAAO,CACxB,IAAIklD,EAAQnI,GAAe,KAAK/8C,EAAOy9C,EAAc,EACjD56C,EAAM7C,EAAMy9C,EAAc,EAE9B,GAAI,CACFz9C,EAAMy9C,EAAc,EAAI,OACxB,IAAI0H,EAAW,EACnB,MAAI,CAAY,CAEd,IAAIlmD,GAASi+C,GAAqB,KAAKl9C,CAAK,EAC5C,OAAImlD,IACED,EACFllD,EAAMy9C,EAAc,EAAI56C,EAExB,OAAO7C,EAAMy9C,EAAc,GAGxBx+C,EACR,CASD,IAAI+lD,GAActH,GAA+B,SAAStB,EAAQ,CAChE,OAAIA,GAAU,KACL,IAETA,EAAS,OAAOA,CAAM,EACfT,GAAY+B,GAAiBtB,CAAM,EAAG,SAASgJ,EAAQ,CAC5D,OAAO7H,GAAqB,KAAKnB,EAAQgJ,CAAM,CACnD,CAAG,EACH,EARqCC,GAiBjC5C,GAASb,IAGR/D,IAAY4E,GAAO,IAAI5E,GAAS,IAAI,YAAY,CAAC,CAAC,CAAC,GAAKxD,GACxD0D,IAAO0E,GAAO,IAAI1E,EAAG,GAAKvE,GAC1BwE,IAAWyE,GAAOzE,GAAQ,QAAS,CAAA,GAAKpE,GACxCqE,IAAOwE,GAAO,IAAIxE,EAAG,GAAKlE,GAC1BmE,IAAWuE,GAAO,IAAIvE,EAAO,GAAK/D,KACrCsI,GAAS,SAASziD,EAAO,CACvB,IAAIf,EAAS2iD,GAAW5hD,CAAK,EACzBslD,EAAOrmD,GAAU06C,EAAY35C,EAAM,YAAc,OACjDulD,EAAaD,EAAOjH,GAASiH,CAAI,EAAI,GAEzC,GAAIC,EACF,OAAQA,EAAU,CAChB,KAAKnH,GAAoB,OAAO/D,EAChC,KAAKiE,GAAe,OAAO9E,EAC3B,KAAK+E,GAAmB,OAAO3E,EAC/B,KAAK4E,GAAe,OAAOzE,EAC3B,KAAK0E,GAAmB,OAAOtE,CAChC,CAEH,OAAOl7C,CACX,GAWA,SAASsiD,GAAQvhD,EAAO0uB,EAAQ,CAC9B,OAAAA,EAASA,GAAiBqqB,EACnB,CAAC,CAACrqB,IACN,OAAO1uB,GAAS,UAAYi7C,EAAS,KAAKj7C,CAAK,IAC/CA,EAAQ,IAAMA,EAAQ,GAAK,GAAKA,EAAQ0uB,CAC5C,CASD,SAASu2B,GAAUjlD,EAAO,CACxB,IAAI0J,EAAO,OAAO1J,EAClB,OAAQ0J,GAAQ,UAAYA,GAAQ,UAAYA,GAAQ,UAAYA,GAAQ,UACvE1J,IAAU,YACVA,IAAU,IAChB,CASD,SAASujD,GAASp+B,EAAM,CACtB,MAAO,CAAC,CAAC63B,IAAeA,MAAc73B,CACvC,CASD,SAAS0+B,GAAY7jD,EAAO,CAC1B,IAAIslD,EAAOtlD,GAASA,EAAM,YACtB2B,EAAS,OAAO2jD,GAAQ,YAAcA,EAAK,WAAc1I,GAE7D,OAAO58C,IAAU2B,CAClB,CASD,SAASmgD,GAAe9hD,EAAO,CAC7B,OAAOk9C,GAAqB,KAAKl9C,CAAK,CACvC,CASD,SAASq+C,GAASl5B,EAAM,CACtB,GAAIA,GAAQ,KAAM,CAChB,GAAI,CACF,OAAO23B,GAAa,KAAK33B,CAAI,CACnC,MAAM,CAAY,CACd,GAAI,CACF,OAAQA,EAAO,EACrB,MAAM,CAAY,EAEhB,MAAO,EACR,CAkCD,SAASq8B,GAAGxhD,EAAO87B,EAAO,CACxB,OAAO97B,IAAU87B,GAAU97B,IAAUA,GAAS87B,IAAUA,CACzD,CAoBD,IAAImlB,GAAcc,GAAgB,UAAW,CAAE,OAAO,SAAU,GAAI,EAAIA,GAAkB,SAAS/hD,EAAO,CACxG,OAAOgiD,GAAahiD,CAAK,GAAK+8C,GAAe,KAAK/8C,EAAO,QAAQ,GAC/D,CAACu9C,GAAqB,KAAKv9C,EAAO,QAAQ,CAC9C,EAyBI+gD,GAAU,MAAM,QA2BpB,SAASyE,GAAYxlD,EAAO,CAC1B,OAAOA,GAAS,MAAQ2jD,GAAS3jD,EAAM,MAAM,GAAK,CAACyjD,GAAWzjD,CAAK,CACpE,CAmBD,IAAImhD,GAAWxD,IAAkB8H,GA8BjC,SAASC,GAAQ1lD,EAAO87B,EAAO,CAC7B,OAAOmmB,GAAYjiD,EAAO87B,CAAK,CAChC,CAmBD,SAAS2nB,GAAWzjD,EAAO,CACzB,GAAI,CAACsjD,GAAStjD,CAAK,EACjB,MAAO,GAIT,IAAI6C,EAAM++C,GAAW5hD,CAAK,EAC1B,OAAO6C,GAAOy2C,GAAWz2C,GAAO02C,GAAU12C,GAAOq2C,GAAYr2C,GAAOg3C,CACrE,CA4BD,SAAS8J,GAAS3jD,EAAO,CACvB,OAAO,OAAOA,GAAS,UACrBA,EAAQ,IAAMA,EAAQ,GAAK,GAAKA,GAAS+4C,CAC5C,CA2BD,SAASuK,GAAStjD,EAAO,CACvB,IAAI0J,EAAO,OAAO1J,EAClB,OAAOA,GAAS,OAAS0J,GAAQ,UAAYA,GAAQ,WACtD,CA0BD,SAASs4C,GAAahiD,EAAO,CAC3B,OAAOA,GAAS,MAAQ,OAAOA,GAAS,QACzC,CAmBD,IAAIqhD,GAAe3F,GAAmBO,GAAUP,EAAgB,EAAIgI,GA8BpE,SAASx6C,GAAKkzC,EAAQ,CACpB,OAAOoJ,GAAYpJ,CAAM,EAAIwE,GAAcxE,CAAM,EAAIwH,GAASxH,CAAM,CACrE,CAoBD,SAASiJ,IAAY,CACnB,MAAO,EACR,CAeD,SAASI,IAAY,CACnB,MAAO,EACR,CAED1oD,EAAA,QAAiB2oD,sBCtzDjB,OAAO,eAAeC,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EACtCA,GAAA,2BAAsBA,GAAA,aAA4CA,GAAA,cAAG,OAC3F,IAAIC,GAAgB,CAChB,WACA,WACA,WACA,sBACA,UACA,4BACA,2BACA,gBACJ,EACqBD,GAAA,cAAGC,GACxB,IAAIC,GAAe,CACf,WACA,UACA,UACA,SACA,SACA,UACA,oBACA,iBACA,WACA,gBACA,WACJ,EACoBF,GAAA,aAAGE,GACvB,IAAIC,GAAiB,UAAY,CAC7B,IAAIl+C,EACJ,OAAI,OAAO,OAAW,KAGlB/K,GAAO,OAAS,GAChB+K,EAAMm+C,GAGN,OAAOlpD,GAAO,QAET,OAAO,KAEZ+K,EAAM,OAAO,IACbA,EAAI,SAAW,OAAO,IAAI,SAAW,OAAO,IAAI,UAGhDA,EAAMm+C,GAEHn+C,CACX,EACsB+9C,GAAA,eAAGG,GACzB,IAAIE,GAAW,SAAUC,EAAIp6C,EAAO,CAChC,IAAI1K,EAAQ,KAEZ,OAAO,UAAY,CACf,IAAI8nB,EAAU,KACVlB,EAAO,UACX,aAAa5mB,CAAK,EAClBA,EAAQ,WAAW,UAAY,CAC3B8kD,EAAG,MAAMh9B,EAASlB,CAAI,CACzB,EAAElc,CAAK,CAChB,CACA,EACgB85C,GAAA,SAAGK,GC7DnB,IAAIE,GAAaC,IAAQA,GAAK,WAAe,UAAY,CACrD,IAAIC,EAAgB,SAAU9nB,EAAG9N,EAAG,CAChC,OAAA41B,EAAgB,OAAO,gBAClB,CAAE,UAAW,CAAA,aAAgB,OAAS,SAAU9nB,EAAG9N,EAAG,CAAE8N,EAAE,UAAY9N,CAAE,GACzE,SAAU8N,EAAG9N,EAAG,CAAE,QAAS9jB,KAAK8jB,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAG9jB,CAAC,IAAG4xB,EAAE5xB,CAAC,EAAI8jB,EAAE9jB,CAAC,IAC1F05C,EAAc9nB,EAAG9N,CAAC,CACjC,EACI,OAAO,SAAU8N,EAAG9N,EAAG,CACnB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5F41B,EAAc9nB,EAAG9N,CAAC,EAClB,SAAS61B,GAAK,CAAE,KAAK,YAAc/nB,CAAI,CACvCA,EAAE,UAAY9N,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAK61B,EAAG,UAAY71B,EAAE,UAAW,IAAI61B,EACvF,CACA,IACIC,GAAYH,IAAQA,GAAK,UAAa,UAAY,CAClDG,OAAAA,GAAW,OAAO,QAAU,SAASt3C,EAAG,CACpC,QAASjK,EAAGxH,EAAI,EAAGoF,EAAI,UAAU,OAAQpF,EAAIoF,EAAGpF,IAAK,CACjDwH,EAAI,UAAUxH,CAAC,EACf,QAASmP,KAAK3H,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAG2H,CAAC,IAC1DsC,EAAEtC,CAAC,EAAI3H,EAAE2H,CAAC,GAElB,OAAOsC,CACf,EACWs3C,GAAS,MAAM,KAAM,SAAS,CACzC,EACA,OAAO,eAAeC,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5D,IAAIC,GAAeT,GACfU,GAAYC,GACZC,GAAQC,GACRlB,GAAUmB,GACVlB,GAAkBmB,GAClBl/C,MAAU+9C,GAAgB,kBAC1BoB,GAA0B,SAAUC,EAAQ,CAC5Cd,GAAUa,EAAUC,CAAM,EAC1B,SAASD,EAAShmD,EAAO,CACrB,IAAIkmD,EAAQD,EAAO,KAAK,KAAMjmD,CAAK,GAAK,KACxC4kD,OAAAA,GAAgB,aAAa,QAAQ,SAAU94B,EAAQ,CACnDo6B,EAAMp6B,CAAM,EAAIo6B,EAAMp6B,CAAM,EAAE,KAAKo6B,CAAK,CACpD,CAAS,EACDA,EAAM,SAAWtB,GAAgB,SAC1BsB,CACV,CACD,OAAAF,EAAS,UAAU,WAAa,SAAU7jD,EAAM,CAE5C,QADIf,EAASe,GAAQA,EAAK,WACnBf,GAAQ,CACX,GAAIA,EAAO,SAAU,IAAK,sBACtB,MAAO,GAEXA,EAASA,EAAO,WAEpB,MAAO,EACf,EACI4kD,EAAS,UAAU,kBAAoB,UAAY,CAC/C,IAAIE,EAAQ,KACRjmB,EAAK,KAAK,MAAO79B,EAAY69B,EAAG,UAAWkmB,EAAelmB,EAAG,aAAcmmB,EAAanmB,EAAG,WAAY3nB,EAAO2nB,EAAG,KAAMomB,EAAQpmB,EAAG,MAAOpD,EAAQoD,EAAG,MAAOqmB,EAAWrmB,EAAG,SAAUhhC,EAAQghC,EAAG,MAAOsmB,EAAetmB,EAAG,aAAcumB,EAAavmB,EAAG,WAAYwmB,EAAcxmB,EAAG,YAAa5B,EAAkB4B,EAAG,gBAAiBymB,EAAKzmB,EAAG,aAAc0mB,EAAeD,IAAO,OAAS,CAAC,EAAG,EAAG,EAAG,CAAC,EAAIA,EAAI/pB,EAAkBsD,EAAG,gBAAiB35B,EAAS25B,EAAG,OAAQ9jB,EAAW8jB,EAAG,SAAU/K,EAAc+K,EAAG,YAAajL,EAAUiL,EAAG,QAASzP,EAAcyP,EAAG,YACxiB,KAAK,OAASp5B,GAAI,KAAK,KAAK,SAAS,EACjCs/C,GACAA,EAAat/C,EAAG,EAGpB,QADI+/C,EAAc,OAAO,KAAK,KAAK,MAAM,WAAW,EAC3CpqD,EAAI,EAAGA,EAAIoqD,EAAY,OAAQpqD,IACpC,KAAK,OAAOoqD,EAAYpqD,CAAC,CAAC,EAAI,KAAK,MAAM,YAAYoqD,EAAYpqD,CAAC,CAAC,EAEnE,KAAK,MAAM,uBACX,KAAK,SAAW,KAAK,SAAS,KAAK,SAAU,KAAK,MAAM,oBAAoB,GAEhF,KAAK,OAAO,SAAS,gBAAgBmqD,EAAa,CAAC,EAAGA,EAAa,CAAC,EAAGA,EAAa,CAAC,EAAGA,EAAa,CAAC,CAAC,EACnG,KAAK,WAAW,KAAK,SAAS,GAC9B,KAAK,OAAO,SAAS,qBAEzB,KAAK,OACA,WAAY,EACZ,QAAQ,OAAOruC,GAAS,SAAW,YAAY,OAAOA,CAAI,EAAIA,CAAI,EACnEukB,GAASA,IAAU,IACnB,KAAK,OAAO,SAAS,aAAa,OAAOA,CAAK,CAAC,EACnD,KAAK,OAAO,YAAY,OAAOypB,GAAa,SAAW,GAAG,OAAOA,EAAU,IAAI,EAAIA,CAAQ,EAC3F,KAAK,OACA,WAAY,EACZ,SAAUC,GAAetnD,GAAS,EAAiB,EACpD,KAAK,MAAM,mBACX,KAAK,OAAO,kBAEhB,KAAK,OAAO,SAAS,cAAcunD,CAAU,EAC7C,KAAK,OAAO,WAAY,EAAC,eAAeC,CAAW,EACnD,KAAK,OAAO,mBAAmBpoB,CAAe,EAC9C,KAAK,OAAO,GAAG,QAAS,KAAK,OAAO,EACpC,KAAK,OAAO,GAAG,OAAQ,KAAK,MAAM,EAClC,KAAK,OAAO,GAAG,OAAQ,KAAK,MAAM,EAClC,KAAK,OAAO,GAAG,QAAS,KAAK,OAAO,EACpC,KAAK,OAAO,GAAG,SAAU,KAAK,QAAQ,EACtC,KAAK,OAAO,GAAG,QAAS,KAAK,OAAO,EAChC7N,GACA,KAAK,kBAAiB,EAE1B,KAAK,OACA,WAAY,EACZ,UAAU,GAAG,kBAAmB,KAAK,iBAAiB,EAC3D,KAAK,OAAO,aAAa,UAAU,GAAG,eAAgB,KAAK,cAAc,EACrE41B,GAEA,KAAK,OAAO,WAAY,EAAC,GAAG,mBAAoB,UAAY,CAExD,IAAIlxB,EAAcgxB,EAAM,OAAO,WAAY,EAAC,eAAc,EAC1DA,EAAM,MAAM,WAAWhxB,CAAW,CAClD,CAAa,EAEL,KAAK,OAAO,QAAQ,GAAG,kBAAmB,KAAK,QAAQ,EACvD,KAAK,OAAO,WAAU,EAAG,eAAeA,GAAe,CAAA,CAAE,EACrDF,GAAWA,EAAQ,OAAS,GAC5B,KAAK,cAAcA,CAAO,EAG9B,IAAI6xB,EAAmB,KAAK,OAAO,SACnCjC,GAAgB,cAAc,QAAQ,SAAUkC,EAAQ,CAChDD,EAAiB,eAAeC,CAAM,EAEtCZ,EAAM,OAAO,UAAUY,EAAQZ,EAAM,MAAMY,CAAM,CAAC,EAE7CZ,EAAM,MAAMY,CAAM,GACvB,QAAQ,KAAK,2BAA2B,OAAOA,EAAQ,6GAA6G,CAAC,CAErL,CAAS,EACD,KAAK,cAAc,KAAK,KAAK,EACzB,MAAM,QAAQ3qC,CAAQ,GACtBA,EAAS,QAAQ,SAAU5K,EAAS,CAC5B,OAAOA,EAAQ,MAAS,SACxB20C,EAAM,OAAO,SAAS,QAAQ30C,EAAQ,QAASA,EAAQ,IAAI,EAG3D20C,EAAM,OAAO,SAAS,WAAW30C,CAAO,CAE5D,CAAa,EAEDorB,GACA,KAAK,OAAO,mBAAmB,gBAAkBA,CAAe,EAEhEv6B,IACA,KAAK,UAAU,WAAa,IAAMA,GAElCkE,GACAA,EAAO,KAAK,MAAM,EAEtB,KAAK,OAAO,SACR+/C,GACA,KAAK,OAAO,OAExB,EACIL,EAAS,UAAU,mBAAqB,SAAUe,EAAW,CAGzD,QAFIC,EAAWD,EACXE,EAAY,KAAK,MACZzqD,EAAI,EAAGA,EAAIooD,GAAgB,cAAc,OAAQpoD,IAAK,CAC3D,IAAIsqD,EAASlC,GAAgB,cAAcpoD,CAAC,EACxCyqD,EAAUH,CAAM,IAAME,EAASF,CAAM,GAErC,KAAK,OAAO,UAAUA,EAAQG,EAAUH,CAAM,CAAC,EAGvD,GAAIG,EAAU,YAAcD,EAAS,UAAW,CAC5C,IAAIE,EAAiB,KAAK,UAAU,UAChCC,EAAwBD,EAAe,KAAM,EAAC,MAAM,GAAG,EACvDE,EAAkBJ,EAAS,UAAU,KAAI,EAAG,MAAM,GAAG,EACzDI,EAAgB,QAAQ,SAAUC,EAAU,CACxC,IAAI9oD,EAAQ4oD,EAAsB,QAAQE,CAAQ,EAClDF,EAAsB,OAAO5oD,EAAO,CAAC,CACrD,CAAa,EACD,KAAK,UAAU,UACX,IAAM0oD,EAAU,UAAY,IAAME,EAAsB,KAAK,GAAG,EAGxE,IAAIG,EAAe,KAAK,QACpBL,EAAU,OAAS,MACnB,KAAK,OAAO,aAAeA,EAAU,MACzC,GAAIK,EAAc,CAEd,KAAK,OAAS,GACd,IAAIr1C,EAAM,KAAK,OAAO,QAAQ,UAAU,SACxC,KAAK,OAAO,SAASg1C,EAAU,MAAOA,EAAU,WAAW,EAC3D,KAAK,OAAO,QAAQ,UAAU,SAASh1C,CAAG,EAC1C,KAAK,OAAS,GAEdg1C,EAAU,cAAgBD,EAAS,aACnC,KAAK,kBAAiB,EAEtBC,EAAU,OAASD,EAAS,MAC5B,KAAK,OACA,WAAY,EACZ,QAAQ,OAAOC,EAAU,MAAS,SACjC,YAAY,OAAOA,EAAU,IAAI,EACjCA,EAAU,IAAI,EAEpBA,EAAU,QAAUD,EAAS,OAC7B,KAAK,OAAO,SAAS,aAAeC,EAAU,KAAK,EAEnDA,EAAU,kBAAoBD,EAAS,kBACnCC,EAAU,gBACV,KAAK,OAAO,mBAAmB,gBAAkBA,EAAU,eAAe,EAG1E,KAAK,OAAO,mBAAmB,IAAI,GAGvCA,EAAU,WAAaD,EAAS,UAChC,KAAK,OAAO,YAAY,OAAOC,EAAU,UAAa,SAChD,GAAG,OAAOA,EAAU,SAAU,IAAI,EAClCA,EAAU,QAAQ,EAExBA,EAAU,cAAgBD,EAAS,aACnC,KAAK,OAAO,WAAU,EAAG,eAAeC,EAAU,WAAW,EAE7DA,EAAU,kBAAoBD,EAAS,iBACvC,KAAK,OAAO,mBAAmBC,EAAU,eAAe,EAExDA,EAAU,aAAeD,EAAS,YAClC,KAAK,OAAO,SAAS,cAAcC,EAAU,UAAU,EAEtDtC,GAAQsC,EAAU,WAAYD,EAAS,UAAU,GAClD,KAAK,cAAcC,CAAS,GAI5BK,GAAgB,CAAC3C,GAAQsC,EAAU,YAAaD,EAAS,WAAW,IACpE,KAAK,OAAO,WAAY,EAAC,eAAeC,EAAU,aAAe,CAAA,CAAE,EAEnE,CAACtC,GAAQsC,EAAU,QAASD,EAAS,OAAO,GAC5C,MAAM,QAAQC,EAAU,OAAO,GAC/B,KAAK,cAAcA,EAAU,OAAO,EAGnCtC,GAAQsC,EAAU,aAAcD,EAAS,YAAY,GACtD,KAAK,oBAAoBC,EAAU,YAAY,GAE/CF,EAAU,SAAW,KAAK,MAAM,QAChCA,EAAU,QAAU,KAAK,MAAM,QAC/B,KAAK,OAAO,SAEZ,KAAK,MAAM,OAAS,CAACA,EAAU,OAC/B,KAAK,OAAO,OAExB,EACIf,EAAS,UAAU,oBAAsB,SAAUuB,EAAS,CACpDA,IAAY,SAAUA,EAAU,CAAC,EAAG,EAAG,EAAG,CAAC,GAC/C,KAAK,OAAO,SAAS,gBAAgBA,EAAQ,CAAC,EAAGA,EAAQ,CAAC,EAAGA,EAAQ,CAAC,EAAGA,EAAQ,CAAC,CAAC,CAC3F,EACIvB,EAAS,UAAU,qBAAuB,UAAY,CAC9C,KAAK,SACL,KAAK,OAAO,UACZ,KAAK,OAAS,KAE1B,EACIA,EAAS,UAAU,SAAW,SAAU95C,EAAO,CAC3C,GAAI,KAAK,MAAM,UAAY,CAAC,KAAK,OAAQ,CACrC,IAAIjN,EAAQ,KAAK,OAAO,SAAQ,EAChC,KAAK,MAAM,SAASA,EAAOiN,CAAK,EAE5C,EACI85C,EAAS,UAAU,kBAAoB,SAAU95C,EAAO,CACpD,GAAI,KAAK,MAAM,kBAAmB,CAC9B,IAAIjN,EAAQ,KAAK,OAAO,aAAY,EACpC,KAAK,MAAM,kBAAkBA,EAAOiN,CAAK,EAErD,EACI85C,EAAS,UAAU,eAAiB,SAAU95C,EAAO,CACjD,GAAI,KAAK,MAAM,eAAgB,CAC3B,IAAIjN,EAAQ,KAAK,OAAO,aAAY,EACpC,KAAK,MAAM,eAAeA,EAAOiN,CAAK,EAElD,EACI85C,EAAS,UAAU,QAAU,SAAU95C,EAAO,CACtC,KAAK,MAAM,SACX,KAAK,MAAM,QAAQA,CAAK,EAExB,KAAK,MAAM,aACX,KAAK,kBAAiB,CAElC,EACI85C,EAAS,UAAU,QAAU,SAAU95C,EAAO,CACtC,KAAK,MAAM,SACX,KAAK,MAAM,QAAQA,EAAO,KAAK,MAAM,CAEjD,EACI85C,EAAS,UAAU,OAAS,SAAU95C,EAAO,CACrC,KAAK,MAAM,QACX,KAAK,MAAM,OAAOA,EAAO,KAAK,MAAM,CAEhD,EACI85C,EAAS,UAAU,OAAS,SAAU/lB,EAAI,CACtC,IAAIjzB,EAAOizB,EAAG,KACV,KAAK,MAAM,QACX,KAAK,MAAM,OAAOjzB,CAAI,CAElC,EACIg5C,EAAS,UAAU,QAAU,SAAU/lB,EAAI,CACvC,IAAIjzB,EAAOizB,EAAG,KACV,KAAK,MAAM,SACX,KAAK,MAAM,QAAQjzB,CAAI,CAEnC,EACIg5C,EAAS,UAAU,SAAW,UAAY,CAClC,KAAK,MAAM,UACX,KAAK,MAAM,SAAS,KAAK,MAAM,CAE3C,EACIA,EAAS,UAAU,cAAgB,SAAUhmD,EAAO,CAEhD,QADIwnD,EAAa,OAAO,KAAKxnD,EAAM,UAAU,EACpC6T,EAAI,EAAGA,EAAI2zC,EAAW,OAAQ3zC,IAEnC,KAAK,OAAO,UAAU2zC,EAAW3zC,CAAC,EAAG7T,EAAM,WAAWwnD,EAAW3zC,CAAC,CAAC,CAAC,CAEhF,EACImyC,EAAS,UAAU,cAAgB,SAAUhxB,EAAS,CAClD,IAAIkxB,EAAQ,KAERuB,EAAiB,KAAK,OAAO,WAAU,EAAG,WAAW,EAAI,EAC7D,QAASjrD,KAAKirD,EACNA,EAAe,eAAejrD,CAAC,GAC/B,KAAK,OAAO,aAAa,aAAairD,EAAejrD,CAAC,EAAE,EAAE,EAIlEirD,EAAiB,KAAK,OAAO,WAAU,EAAG,WAAW,EAAK,EAC1D,QAASjrD,KAAKirD,EACNA,EAAe,eAAejrD,CAAC,GAC/BirD,EAAejrD,CAAC,EAAE,QAAU,mBAC5BirD,EAAejrD,CAAC,EAAE,QAAU,qBAC5B,KAAK,OAAO,aAAa,aAAairD,EAAejrD,CAAC,EAAE,EAAE,EAIlEw4B,EAAQ,QAAQ,SAAUiL,EAAI,CAC1B,IAAI90B,EAAW80B,EAAG,SAAUxe,EAAWwe,EAAG,SAAU50B,EAAS40B,EAAG,OAAQve,EAASue,EAAG,OAAQ79B,EAAY69B,EAAG,UAAWt3B,EAAOs3B,EAAG,KAAMymB,EAAKzmB,EAAG,QAASpL,EAAU6xB,IAAO,OAAS,GAAQA,EACrLn7C,EAAQ,IAAIk6C,GAAa,MAAMt6C,EAAUsW,EAAUpW,EAAQqW,CAAM,EACrEwkC,EAAM,OAAO,aAAa,UAAU36C,EAAOnJ,EAAWuG,EAAMksB,CAAO,CAC/E,CAAS,CACT,EACImxB,EAAS,UAAU,kBAAoB,UAAY,CAE/C,IAAIl0C,EAAS,KAAK,OACd0e,EAAc,KAAK,MAAM,YACzBk3B,EAAkB,CAAC51C,EAAO,QAAQ,SAAQ,EAAG,OAC7C3P,EAAO2P,EAAO,SAAS,gBACvB,CAAC41C,GAAmBvlD,GACpB2P,EAAO,SAAS,SAAS,YAAYA,EAAO,SAAS,eAAe,EACpEA,EAAO,SAAS,gBAAkB,MAE7B41C,GAAmB,CAACvlD,GACzBA,EAAO2P,EAAO,SAAS,gBAAkB,SAAS,cAAc,KAAK,EACrE3P,EAAK,YAAcquB,GAAe,GAClCruB,EAAK,UAAY,8BACjBA,EAAK,MAAM,QAAU,QACrBA,EAAK,MAAM,SAAW,WACtBA,EAAK,MAAM,OAAS,IACpB2P,EAAO,SAAS,SAAS,YAAY3P,CAAI,GAEpCulD,GAAmBvlD,IACxBA,EAAK,YAAcquB,EAE/B,EACIw1B,EAAS,UAAU,UAAY,SAAUhnD,EAAM,CAC3C,KAAK,UAAYA,CACzB,EACIgnD,EAAS,UAAU,OAAS,UAAY,CACpC,IAAI/lB,EAAK,KAAK,MAAOtiC,EAAOsiC,EAAG,KAAMjrB,EAAQirB,EAAG,MAAOhrB,EAASgrB,EAAG,OAAQl9B,EAAQk9B,EAAG,MAClF0nB,EAAWpC,GAAS,CAAE,MAAOvwC,EAAO,OAAQC,GAAUlS,CAAK,EAC/D,OAAO6iD,GAAM,cAAc,MAAO,CAAE,IAAK,KAAK,UAAW,GAAIjoD,EAAM,MAAOgqD,CAAU,CAAA,CAC5F,EACI3B,EAAS,UAAY,CACjB,KAAMN,GAAU,UAAU,CAACA,GAAU,OAAQA,GAAU,MAAM,CAAC,EAC9D,MAAOA,GAAU,KACjB,MAAOA,GAAU,OACjB,KAAMA,GAAU,OAChB,UAAWA,GAAU,OACrB,OAAQA,GAAU,OAClB,MAAOA,GAAU,OACjB,SAAUA,GAAU,UAAU,CAACA,GAAU,OAAQA,GAAU,MAAM,CAAC,EAClE,WAAYA,GAAU,KACtB,SAAUA,GAAU,KACpB,OAAQA,GAAU,KAClB,QAASA,GAAU,KACnB,QAASA,GAAU,KACnB,QAASA,GAAU,KACnB,OAAQA,GAAU,KAClB,SAAUA,GAAU,KACpB,MAAOA,GAAU,OACjB,aAAcA,GAAU,OACxB,OAAQA,GAAU,KAClB,kBAAmBA,GAAU,KAC7B,eAAgBA,GAAU,KAC1B,aAAcA,GAAU,KACxB,WAAYA,GAAU,KACtB,SAAUA,GAAU,OACpB,SAAUA,GAAU,OACpB,SAAUA,GAAU,KACpB,oBAAqBA,GAAU,KAC/B,QAASA,GAAU,OACnB,gBAAiBA,GAAU,KAC3B,YAAaA,GAAU,OACvB,qBAAsBA,GAAU,OAChC,YAAaA,GAAU,OACvB,WAAYA,GAAU,OACtB,MAAOA,GAAU,OACjB,aAAcA,GAAU,MACxB,YAAaA,GAAU,MACvB,QAASA,GAAU,MACnB,gBAAiBA,GAAU,OAC3B,YAAaA,GAAU,KACvB,eAAgBA,GAAU,KAC1B,0BAA2BA,GAAU,UAAU,CAC3CA,GAAU,KACVA,GAAU,KACtB,CAAS,EACD,yBAA0BA,GAAU,UAAU,CAC1CA,GAAU,KACVA,GAAU,KACtB,CAAS,EACD,kBAAmBA,GAAU,KAC7B,SAAUA,GAAU,MACpB,YAAaA,GAAU,MAC/B,EACIM,EAAS,aAAe,CACpB,KAAM,aACN,MAAO,GACP,KAAM,GACN,MAAO,GACP,OAAQ,QACR,MAAO,QACP,SAAU,GACV,eAAgB,GAChB,WAAY,GACZ,SAAU,KACV,QAAS,KACT,OAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,GACV,oBAAqB,GACrB,gBAAiB,GACjB,QAAS,EACT,YAAa,EACb,YAAa,CAAE,EACf,MAAO,CAAE,EACT,aAAc,CAAC,EAAG,EAAG,EAAG,CAAC,EACzB,WAAY,CAAE,EACd,YAAa,GACb,0BAA2B,GAC3B,yBAA0B,GAC1B,YAAa,KACb,kBAAmB,EAC3B,EACWA,CACX,EAAEJ,GAAM,SAAS,EACFJ,GAAA,QAAGQ,2FCrclB,IAAI,OAAO,YAAY,CAAC,UAAU,UAAU,SAAS,cAAc,eAAe,wBAAwB,aAAa,uBAAuB,kBAAkB,EAAG,SAASrpD,EAASO,EAASlB,EAAO,CACrM,IAAIgJ,EAAMrI,EAAQ,WAAW,EAClBA,EAAQ,YAAY,EAC/B,IAAIwH,EAAexH,EAAQ,qBAAqB,EAAE,aAC9Cy/B,EAASz/B,EAAQ,UAAU,EAAE,OAC7B06C,EAAW16C,EAAQ,oBAAoB,EAAE,gBACzC03B,EAAc13B,EAAQ,gBAAgB,EAAE,YACxCirD,EAAQ,SAAU9kD,EAAW+5B,EAAOhc,EAAQ,CAC5C,KAAK,MAAQ,EACb,KAAK,OAAS,EACd,KAAK,WAAa/d,EAClB,KAAK,OAAS+5B,EACd,KAAK,QAAU,EACf,KAAK,WAAa,GAClB,KAAK,SAAW,GAChB,KAAK,aAAe,KAAK,OACzB,KAAK,UAAUhc,GAAU,CAAC,EAC1B,KAAK,SAAW,KAAK,SAAS,CAAC,EAC/B,KAAK,GAAG,QAAS,SAAU/O,EAAQ,CAC/B,KAAK,SAAWA,CACxB,EAAM,KAAK,IAAI,CAAC,CAChB,GACC,UAAY,CACT9M,EAAI,UAAU,KAAMb,CAAY,EAChC,KAAK,cAAgB,UAAY,CAC7B,IAAI1C,EAAK,SAAS,cAAc,KAAK,EACrCA,EAAG,UAAY,KAAK,WACpBA,EAAG,MAAM,QAAU,0CACnB,KAAK,WAAW,YAAYA,CAAE,EAC9B,IAAIqQ,EAAS,IAAIsqB,EAAO,IAAIib,EAAS51C,EAAI,KAAK,MAAM,CAAC,EACrD,OAAAqQ,EAAO,GAAG,QAAS,UAAY,CAC3B,KAAK,MAAM,QAASA,CAAM,CACtC,EAAU,KAAK,IAAI,CAAC,EACZ,KAAK,SAAS,KAAKA,CAAM,EACzBA,EAAO,YAAY,KAAK,SAAS,EAC1BA,CACf,EACI,KAAK,UAAY,SAAU+O,EAAQ,CAC/B,IAAI/O,EACJ,GAAI+O,EAAS,EACT,KAAM,uCAEV,GAAIA,GAAU,KAAK,QAGd,IAAIA,EAAS,KAAK,QAAS,CAC5B,KAAO,KAAK,QAAU,KAAK,SAAS,QAAU,KAAK,QAAUA,GACzD/O,EAAS,KAAK,SAAS,KAAK,OAAO,EACnC,KAAK,WAAW,YAAYA,EAAO,SAAS,EAC5CA,EAAO,YAAY,KAAK,SAAS,EACjC,KAAK,UAET,KAAO,KAAK,QAAU+O,GAClB,KAAK,cAAa,EAClB,KAAK,cAIT,MAAO,KAAK,QAAUA,GAClB/O,EAAS,KAAK,SAAS,KAAK,QAAU,CAAC,EACvC,KAAK,WAAW,YAAYA,EAAO,SAAS,EAC5C,KAAK,UAGb,KAAK,OAAM,EACnB,EACI,KAAK,UAAY,UAAY,CACzB,OAAO,KAAK,OACpB,EACI,KAAK,UAAY,SAAUie,EAAK,CAC5B,OAAO,KAAK,SAASA,CAAG,CAChC,EACI,KAAK,iBAAmB,UAAY,CAChC,OAAO,KAAK,QACpB,EACI,KAAK,MAAQ,UAAY,CACrB,KAAK,SAAS,OACtB,EACI,KAAK,KAAO,UAAY,CACpB,KAAK,SAAS,MACtB,EACI,KAAK,SAAW,SAAU8M,EAAO,CAC7B,KAAK,SAAS,QAAQ,SAAU/qB,EAAQ,CACpCA,EAAO,SAAS+qB,CAAK,CACjC,CAAS,CACT,EACI,KAAK,mBAAqB,SAAUgrB,EAAY,CAC5C,KAAK,SAAS,QAAQ,SAAU/1C,EAAQ,CACpCA,EAAO,mBAAmB+1C,CAAU,CAChD,CAAS,CACT,EACI,KAAK,QAAU,SAAUxrD,EAAUuvB,EAAO,CACtC,KAAK,SAAS,QAAQvvB,EAAUuvB,CAAK,CAC7C,EACI,KAAK,UAAY,GACjB,KAAK,YAAc,SAAU7K,EAAM,CAC/B,KAAK,UAAYA,EACjB,KAAK,QAAQ,SAAUjP,EAAQ,CAC3BA,EAAO,YAAYiP,CAAI,CACnC,CAAS,CACT,EACI,KAAK,cAAgB,SAAUjV,EAAS,CACpC,IAAI9H,EAAI,IAAIqwB,EAAYvoB,EAAQ,YAAW,EAAIA,EAAQ,QAAO,CAAE,EAC5D4oB,EAAc5oB,EAAQ,iBAC1B,OAAA9H,EAAE,eAAe0wB,CAAW,EAC5B1wB,EAAE,WAAW8H,EAAQ,WAAY,CAAA,EACjC9H,EAAE,eAAe8H,EAAQ,eAAgB,CAAA,EACzC9H,EAAE,aAAa8H,EAAQ,aAAc,CAAA,EACrC9H,EAAE,eAAe8H,EAAQ,eAAgB,CAAA,EACzC9H,EAAE,eAAe8H,EAAQ,eAAgB,CAAA,EACzC9H,EAAE,aAAa8H,EAAQ,aAAc,CAAA,EACrC9H,EAAE,kBAAkB8H,EAAQ,gBAAgB,IAAKA,EAAQ,gBAAgB,GAAG,EAC5E9H,EAAE,UAAY8H,EAAQ,iBACf9H,CACf,EACI,KAAK,WAAa,SAAU8H,EAASikB,EAAK,CACtC,IAAIje,EACAie,GAAO,KACPje,EAAS,KAAK,SAGdA,EAAS,KAAK,SAASie,CAAG,EAE9B,IAAI+3B,EAAS,KAAK,SAAS,KAAK,SAAUh2C,EAAQ,CAC9C,OAAOA,EAAO,UAAYhG,CACtC,CAAS,EACD,OAAIg8C,IACAh8C,EAAU,KAAK,cAAcA,CAAO,GAExCgG,EAAO,WAAWhG,CAAO,EAClBA,CACf,EACI,KAAK,eAAiB,UAAY,CAC9B,OAAO,KAAK,YACpB,EACI,KAAK,eAAiB,SAAUi8C,EAAa,CACrC,KAAK,cAAgBA,IAGzB,KAAK,aAAeA,EACpB,KAAK,OAAM,EACnB,EACI,KAAK,OAAS,UAAY,CACtB,IAAI/yC,EAAQ,KAAK,WAAW,YACxBC,EAAS,KAAK,WAAW,aACzBnD,EACJ,GAAI,KAAK,cAAgB,KAAK,OAE1B,QADIk2C,EAAchzC,EAAQ,KAAK,QACtBxY,EAAI,EAAGA,EAAI,KAAK,QAASA,IAC9BsV,EAAS,KAAK,SAAStV,CAAC,EACxBsV,EAAO,UAAU,MAAM,MAAQk2C,EAAc,KAC7Cl2C,EAAO,UAAU,MAAM,IAAM,MAC7BA,EAAO,UAAU,MAAM,KAAOtV,EAAIwrD,EAAc,KAChDl2C,EAAO,UAAU,MAAM,OAASmD,EAAS,KACzCnD,EAAO,OAAM,MAKjB,SADIm2C,EAAehzC,EAAS,KAAK,QACxBzY,EAAI,EAAGA,EAAI,KAAK,QAASA,IAC9BsV,EAAS,KAAK,SAAStV,CAAC,EACxBsV,EAAO,UAAU,MAAM,MAAQkD,EAAQ,KACvClD,EAAO,UAAU,MAAM,IAAMtV,EAAIyrD,EAAe,KAChDn2C,EAAO,UAAU,MAAM,KAAO,MAC9BA,EAAO,UAAU,MAAM,OAASm2C,EAAe,KAC/Cn2C,EAAO,OAAM,CAG7B,CACA,GAAG,KAAK81C,EAAM,SAAS,EACvB1qD,EAAQ,MAAQ0qD,CAEhB,CAAC,EAED,IAAI,OAAO,gBAAgB,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAASjrD,EAASO,EAASlB,EAAO,CACzGA,EAAO,QAAUW,EAAQ,UAAU,CAEnC,CAAC,EAAmB,UAAW,CACX,IAAI,QAAQ,CAAC,eAAe,EAAG,SAASgL,EAAG,CACwB3L,IAC3DA,EAAA,QAAiB2L,EAE7C,CAAqB,CACrB,UC7KA,IAAIugD,GAAkB,sBAGlBrQ,GAAiB,4BAGjBsQ,GAAW,EAAI,EAGf5P,GAAU,oBACVC,GAAS,6BACTU,GAAY,kBAGZkP,GAAe,mDACfC,GAAgB,QAChBC,GAAe,MACfC,GAAa,mGAMbvO,GAAe,sBAGfwO,GAAe,WAGfvO,GAAe,8BAGfG,GAAa,OAAOt+C,IAAU,UAAYA,IAAUA,GAAO,SAAW,QAAUA,GAGhFu+C,GAAW,OAAO,MAAQ,UAAY,MAAQ,KAAK,SAAW,QAAU,KAGxE78C,GAAO48C,IAAcC,IAAY,SAAS,aAAa,EAAC,EAU5D,SAASe,GAASC,EAAQ58C,EAAK,CAC7B,OAAO48C,GAAU,KAAO,OAAYA,EAAO58C,CAAG,CAChD,CASA,SAASgqD,GAAaxpD,EAAO,CAG3B,IAAIf,EAAS,GACb,GAAIe,GAAS,MAAQ,OAAOA,EAAM,UAAY,WAC5C,GAAI,CACFf,EAAS,CAAC,EAAEe,EAAQ,GAC1B,MAAM,CAAY,CAEhB,OAAOf,CACT,CAGA,IAAIy9C,GAAa,MAAM,UACnBC,GAAY,SAAS,UACrBC,GAAc,OAAO,UAGrBC,GAAat+C,GAAK,oBAAoB,EAGtCy+C,GAAc,UAAW,CAC3B,IAAIC,EAAM,SAAS,KAAKJ,IAAcA,GAAW,MAAQA,GAAW,KAAK,UAAY,EAAE,EACvF,OAAOI,EAAO,iBAAmBA,EAAO,EAC1C,EAAC,EAGGH,GAAeH,GAAU,SAGzBI,GAAiBH,GAAY,eAO7BkF,GAAiBlF,GAAY,SAG7BO,GAAa,OAAO,IACtBL,GAAa,KAAKC,EAAc,EAAE,QAAQhC,GAAc,MAAM,EAC7D,QAAQ,yDAA0D,OAAO,EAAI,GAChF,EAGIsC,GAAS9+C,GAAK,OACdi/C,GAASd,GAAW,OAGpBqB,GAAMD,GAAUv/C,GAAM,KAAK,EAC3B4/C,GAAeL,GAAU,OAAQ,QAAQ,EAGzCY,GAAcrB,GAASA,GAAO,UAAY,OAC1CoM,GAAiB/K,GAAcA,GAAY,SAAW,OAS1D,SAASE,GAAKC,EAAS,CACrB,IAAIv/C,EAAQ,GACRovB,EAASmwB,EAAUA,EAAQ,OAAS,EAGxC,IADA,KAAK,MAAK,EACH,EAAEv/C,EAAQovB,GAAQ,CACvB,IAAIowB,EAAQD,EAAQv/C,CAAK,EACzB,KAAK,IAAIw/C,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAE/B,CASA,SAASC,IAAY,CACnB,KAAK,SAAWZ,GAAeA,GAAa,IAAI,EAAI,CAAA,CACtD,CAYA,SAASa,GAAWx/C,EAAK,CACvB,OAAO,KAAK,IAAIA,CAAG,GAAK,OAAO,KAAK,SAASA,CAAG,CAClD,CAWA,SAASy/C,GAAQz/C,EAAK,CACpB,IAAIgH,EAAO,KAAK,SAChB,GAAI23C,GAAc,CAChB,IAAIl/C,EAASuH,EAAKhH,CAAG,EACrB,OAAOP,IAAW25C,GAAiB,OAAY35C,EAEjD,OAAO89C,GAAe,KAAKv2C,EAAMhH,CAAG,EAAIgH,EAAKhH,CAAG,EAAI,MACtD,CAWA,SAAS0/C,GAAQ1/C,EAAK,CACpB,IAAIgH,EAAO,KAAK,SAChB,OAAO23C,GAAe33C,EAAKhH,CAAG,IAAM,OAAYu9C,GAAe,KAAKv2C,EAAMhH,CAAG,CAC/E,CAYA,SAAS2/C,GAAQ3/C,EAAKQ,EAAO,CAC3B,IAAIwG,EAAO,KAAK,SAChB,OAAAA,EAAKhH,CAAG,EAAK2+C,IAAgBn+C,IAAU,OAAa44C,GAAiB54C,EAC9D,IACT,CAGA4+C,GAAK,UAAU,MAAQG,GACvBH,GAAK,UAAU,OAAYI,GAC3BJ,GAAK,UAAU,IAAMK,GACrBL,GAAK,UAAU,IAAMM,GACrBN,GAAK,UAAU,IAAMO,GASrB,SAASC,GAAUP,EAAS,CAC1B,IAAIv/C,EAAQ,GACRovB,EAASmwB,EAAUA,EAAQ,OAAS,EAGxC,IADA,KAAK,MAAK,EACH,EAAEv/C,EAAQovB,GAAQ,CACvB,IAAIowB,EAAQD,EAAQv/C,CAAK,EACzB,KAAK,IAAIw/C,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAE/B,CASA,SAASO,IAAiB,CACxB,KAAK,SAAW,EAClB,CAWA,SAASC,GAAgB9/C,EAAK,CAC5B,IAAIgH,EAAO,KAAK,SACZlH,EAAQigD,GAAa/4C,EAAMhH,CAAG,EAElC,GAAIF,EAAQ,EACV,MAAO,GAET,IAAIP,EAAYyH,EAAK,OAAS,EAC9B,OAAIlH,GAASP,EACXyH,EAAK,IAAG,EAERg3C,GAAO,KAAKh3C,EAAMlH,EAAO,CAAC,EAErB,EACT,CAWA,SAASkgD,GAAahgD,EAAK,CACzB,IAAIgH,EAAO,KAAK,SACZlH,EAAQigD,GAAa/4C,EAAMhH,CAAG,EAElC,OAAOF,EAAQ,EAAI,OAAYkH,EAAKlH,CAAK,EAAE,CAAC,CAC9C,CAWA,SAASmgD,GAAajgD,EAAK,CACzB,OAAO+/C,GAAa,KAAK,SAAU//C,CAAG,EAAI,EAC5C,CAYA,SAASkgD,GAAalgD,EAAKQ,EAAO,CAChC,IAAIwG,EAAO,KAAK,SACZlH,EAAQigD,GAAa/4C,EAAMhH,CAAG,EAElC,OAAIF,EAAQ,EACVkH,EAAK,KAAK,CAAChH,EAAKQ,CAAK,CAAC,EAEtBwG,EAAKlH,CAAK,EAAE,CAAC,EAAIU,EAEZ,IACT,CAGAo/C,GAAU,UAAU,MAAQC,GAC5BD,GAAU,UAAU,OAAYE,GAChCF,GAAU,UAAU,IAAMI,GAC1BJ,GAAU,UAAU,IAAMK,GAC1BL,GAAU,UAAU,IAAMM,GAS1B,SAASC,GAASd,EAAS,CACzB,IAAIv/C,EAAQ,GACRovB,EAASmwB,EAAUA,EAAQ,OAAS,EAGxC,IADA,KAAK,MAAK,EACH,EAAEv/C,EAAQovB,GAAQ,CACvB,IAAIowB,EAAQD,EAAQv/C,CAAK,EACzB,KAAK,IAAIw/C,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAE/B,CASA,SAASc,IAAgB,CACvB,KAAK,SAAW,CACd,KAAQ,IAAIhB,GACZ,IAAO,IAAKb,IAAOqB,IACnB,OAAU,IAAIR,EAClB,CACA,CAWA,SAASiB,GAAergD,EAAK,CAC3B,OAAOsgD,GAAW,KAAMtgD,CAAG,EAAE,OAAUA,CAAG,CAC5C,CAWA,SAASugD,GAAYvgD,EAAK,CACxB,OAAOsgD,GAAW,KAAMtgD,CAAG,EAAE,IAAIA,CAAG,CACtC,CAWA,SAASwgD,GAAYxgD,EAAK,CACxB,OAAOsgD,GAAW,KAAMtgD,CAAG,EAAE,IAAIA,CAAG,CACtC,CAYA,SAASygD,GAAYzgD,EAAKQ,EAAO,CAC/B,OAAA8/C,GAAW,KAAMtgD,CAAG,EAAE,IAAIA,EAAKQ,CAAK,EAC7B,IACT,CAGA2/C,GAAS,UAAU,MAAQC,GAC3BD,GAAS,UAAU,OAAYE,GAC/BF,GAAS,UAAU,IAAMI,GACzBJ,GAAS,UAAU,IAAMK,GACzBL,GAAS,UAAU,IAAMM,GAUzB,SAASV,GAAa5+C,EAAOnB,EAAK,CAEhC,QADIkvB,EAAS/tB,EAAM,OACZ+tB,KACL,GAAI8yB,GAAG7gD,EAAM+tB,CAAM,EAAE,CAAC,EAAGlvB,CAAG,EAC1B,OAAOkvB,EAGX,MAAO,EACT,CAUA,SAASg7B,GAAQtN,EAAQv3C,EAAM,CAC7BA,EAAO8kD,GAAM9kD,EAAMu3C,CAAM,EAAI,CAACv3C,CAAI,EAAI+kD,GAAS/kD,CAAI,EAKnD,QAHIvF,EAAQ,EACRovB,EAAS7pB,EAAK,OAEXu3C,GAAU,MAAQ98C,EAAQovB,GAC/B0tB,EAASA,EAAOyN,GAAMhlD,EAAKvF,GAAO,CAAC,CAAC,EAEtC,OAAQA,GAASA,GAASovB,EAAU0tB,EAAS,MAC/C,CAUA,SAASiH,GAAarjD,EAAO,CAC3B,GAAI,CAACsjD,GAAStjD,CAAK,GAAKujD,GAASvjD,CAAK,EACpC,MAAO,GAET,IAAIwjD,EAAWC,GAAWzjD,CAAK,GAAKwpD,GAAaxpD,CAAK,EAAKm9C,GAAanC,GACxE,OAAOwI,EAAQ,KAAKnF,GAASr+C,CAAK,CAAC,CACrC,CAUA,SAAS8pD,GAAa9pD,EAAO,CAE3B,GAAI,OAAOA,GAAS,SAClB,OAAOA,EAET,GAAI+pD,GAAS/pD,CAAK,EAChB,OAAOypD,GAAiBA,GAAe,KAAKzpD,CAAK,EAAI,GAEvD,IAAIf,EAAUe,EAAQ,GACtB,OAAQf,GAAU,KAAQ,EAAIe,GAAU,CAACkpD,GAAY,KAAOjqD,CAC9D,CASA,SAAS2qD,GAAS5pD,EAAO,CACvB,OAAO+gD,GAAQ/gD,CAAK,EAAIA,EAAQgqD,GAAahqD,CAAK,CACpD,CAUA,SAAS8/C,GAAWh/C,EAAKtB,EAAK,CAC5B,IAAIgH,EAAO1F,EAAI,SACf,OAAOmkD,GAAUzlD,CAAG,EAChBgH,EAAK,OAAOhH,GAAO,SAAW,SAAW,MAAM,EAC/CgH,EAAK,GACX,CAUA,SAASs3C,GAAU1B,EAAQ58C,EAAK,CAC9B,IAAIQ,EAAQm8C,GAASC,EAAQ58C,CAAG,EAChC,OAAO6jD,GAAarjD,CAAK,EAAIA,EAAQ,MACvC,CAUA,SAAS2pD,GAAM3pD,EAAOo8C,EAAQ,CAC5B,GAAI2E,GAAQ/gD,CAAK,EACf,MAAO,GAET,IAAI0J,EAAO,OAAO1J,EAClB,OAAI0J,GAAQ,UAAYA,GAAQ,UAAYA,GAAQ,WAChD1J,GAAS,MAAQ+pD,GAAS/pD,CAAK,EAC1B,GAEFopD,GAAc,KAAKppD,CAAK,GAAK,CAACmpD,GAAa,KAAKnpD,CAAK,GACzDo8C,GAAU,MAAQp8C,KAAS,OAAOo8C,CAAM,CAC7C,CASA,SAAS6I,GAAUjlD,EAAO,CACxB,IAAI0J,EAAO,OAAO1J,EAClB,OAAQ0J,GAAQ,UAAYA,GAAQ,UAAYA,GAAQ,UAAYA,GAAQ,UACvE1J,IAAU,YACVA,IAAU,IACjB,CASA,SAASujD,GAASp+B,EAAM,CACtB,MAAO,CAAC,CAAC63B,IAAeA,MAAc73B,CACxC,CASA,IAAI6kC,GAAeC,GAAQ,SAAS/qD,EAAQ,CAC1CA,EAASgrD,GAAShrD,CAAM,EAExB,IAAID,EAAS,CAAA,EACb,OAAIoqD,GAAa,KAAKnqD,CAAM,GAC1BD,EAAO,KAAK,EAAE,EAEhBC,EAAO,QAAQoqD,GAAY,SAAStjC,EAAO4Z,EAAQ5V,EAAO9qB,EAAQ,CAChED,EAAO,KAAK+qB,EAAQ9qB,EAAO,QAAQqqD,GAAc,IAAI,EAAK3pB,GAAU5Z,CAAM,CAC9E,CAAG,EACM/mB,CACT,CAAC,EASD,SAAS4qD,GAAM7pD,EAAO,CACpB,GAAI,OAAOA,GAAS,UAAY+pD,GAAS/pD,CAAK,EAC5C,OAAOA,EAET,IAAIf,EAAUe,EAAQ,GACtB,OAAQf,GAAU,KAAQ,EAAIe,GAAU,CAACkpD,GAAY,KAAOjqD,CAC9D,CASA,SAASo/C,GAASl5B,EAAM,CACtB,GAAIA,GAAQ,KAAM,CAChB,GAAI,CACF,OAAO23B,GAAa,KAAK33B,CAAI,CACnC,MAAM,CAAY,CACd,GAAI,CACF,OAAQA,EAAO,EACrB,MAAM,CAAY,EAEhB,MAAO,EACT,CA8CA,SAAS8kC,GAAQ9kC,EAAMglC,EAAU,CAC/B,GAAI,OAAOhlC,GAAQ,YAAeglC,GAAY,OAAOA,GAAY,WAC/D,MAAM,IAAI,UAAUlB,EAAe,EAErC,IAAImB,EAAW,UAAW,CACxB,IAAIriC,EAAO,UACPvoB,EAAM2qD,EAAWA,EAAS,MAAM,KAAMpiC,CAAI,EAAIA,EAAK,CAAC,EACpDrkB,EAAQ0mD,EAAS,MAErB,GAAI1mD,EAAM,IAAIlE,CAAG,EACf,OAAOkE,EAAM,IAAIlE,CAAG,EAEtB,IAAIP,EAASkmB,EAAK,MAAM,KAAM4C,CAAI,EAClC,OAAAqiC,EAAS,MAAQ1mD,EAAM,IAAIlE,EAAKP,CAAM,EAC/BA,CACX,EACE,OAAAmrD,EAAS,MAAQ,IAAKH,GAAQ,OAAStK,IAChCyK,CACT,CAGAH,GAAQ,MAAQtK,GAkChB,SAAS6B,GAAGxhD,EAAO87B,EAAO,CACxB,OAAO97B,IAAU87B,GAAU97B,IAAUA,GAAS87B,IAAUA,CAC1D,CAyBA,IAAIilB,GAAU,MAAM,QAmBpB,SAAS0C,GAAWzjD,EAAO,CAGzB,IAAI6C,EAAMygD,GAAStjD,CAAK,EAAI8hD,GAAe,KAAK9hD,CAAK,EAAI,GACzD,OAAO6C,GAAOy2C,IAAWz2C,GAAO02C,EAClC,CA2BA,SAAS+J,GAAStjD,EAAO,CACvB,IAAI0J,EAAO,OAAO1J,EAClB,MAAO,CAAC,CAACA,IAAU0J,GAAQ,UAAYA,GAAQ,WACjD,CA0BA,SAASs4C,GAAahiD,EAAO,CAC3B,MAAO,CAAC,CAACA,GAAS,OAAOA,GAAS,QACpC,CAmBA,SAAS+pD,GAAS/pD,EAAO,CACvB,OAAO,OAAOA,GAAS,UACpBgiD,GAAahiD,CAAK,GAAK8hD,GAAe,KAAK9hD,CAAK,GAAKi6C,EAC1D,CAuBA,SAASiQ,GAASlqD,EAAO,CACvB,OAAOA,GAAS,KAAO,GAAK8pD,GAAa9pD,CAAK,CAChD,CA2BA,SAASqqD,GAAIjO,EAAQv3C,EAAMyiD,EAAc,CACvC,IAAIroD,EAASm9C,GAAU,KAAO,OAAYsN,GAAQtN,EAAQv3C,CAAI,EAC9D,OAAO5F,IAAW,OAAYqoD,EAAeroD,CAC/C,CAEA,IAAAqrD,GAAiBD,GCj6BbnE,GAAaC,IAAQA,GAAK,WAAe,UAAY,CACrD,IAAIC,EAAgB,SAAU9nB,EAAG9N,EAAG,CAChC,OAAA41B,EAAgB,OAAO,gBAClB,CAAE,UAAW,CAAA,aAAgB,OAAS,SAAU9nB,EAAG9N,EAAG,CAAE8N,EAAE,UAAY9N,CAAE,GACzE,SAAU8N,EAAG9N,EAAG,CAAE,QAAS9jB,KAAK8jB,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAG9jB,CAAC,IAAG4xB,EAAE5xB,CAAC,EAAI8jB,EAAE9jB,CAAC,IAC1F05C,EAAc9nB,EAAG9N,CAAC,CACjC,EACI,OAAO,SAAU8N,EAAG9N,EAAG,CACnB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5F41B,EAAc9nB,EAAG9N,CAAC,EAClB,SAAS61B,GAAK,CAAE,KAAK,YAAc/nB,CAAI,CACvCA,EAAE,UAAY9N,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAK61B,EAAG,UAAY71B,EAAE,UAAW,IAAI61B,EACvF,CACA,IACIC,GAAYH,IAAQA,GAAK,UAAa,UAAY,CAClD,OAAAG,GAAW,OAAO,QAAU,SAASt3C,EAAG,CACpC,QAASjK,EAAGxH,EAAI,EAAGoF,EAAI,UAAU,OAAQpF,EAAIoF,EAAGpF,IAAK,CACjDwH,EAAI,UAAUxH,CAAC,EACf,QAASmP,KAAK3H,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAG2H,CAAC,IAC1DsC,EAAEtC,CAAC,EAAI3H,EAAE2H,CAAC,GAElB,OAAOsC,CACf,EACWs3C,GAAS,MAAM,KAAM,SAAS,CACzC,EACA,OAAO,eAAev5B,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5D,IAAI44B,GAAkBI,GAClBn+C,MAAU+9C,GAAgB,kBAC1Ba,GAAeE,GACf6D,GAAc3D,GACdH,GAAYI,GACZF,GAAQG,GACRpB,GAAU8E,GACVH,GAAMI,GACNC,GAAgC,SAAU1D,EAAQ,CAClDd,GAAUwE,EAAgB1D,CAAM,EAChC,SAAS0D,EAAe3pD,EAAO,CAC3B,IAAIkmD,EAAQD,EAAO,KAAK,KAAMjmD,CAAK,GAAK,KACxC,OAAA4kD,GAAgB,aAAa,QAAQ,SAAU94B,EAAQ,CACnDo6B,EAAMp6B,CAAM,EAAIo6B,EAAMp6B,CAAM,EAAE,KAAKo6B,CAAK,CACpD,CAAS,EACDA,EAAM,SAAWtB,GAAgB,SAC1BsB,CACV,CACD,OAAAyD,EAAe,UAAU,WAAa,SAAUxnD,EAAM,CAElD,QADIf,EAASe,GAAQA,EAAK,WACnBf,GAAQ,CACX,GAAIA,EAAO,SAAU,IAAK,sBACtB,MAAO,GAEXA,EAASA,EAAO,WAEpB,MAAO,EACf,EACIuoD,EAAe,UAAU,kBAAoB,UAAY,CACrD,IAAIzD,EAAQ,KACRjmB,EAAK,KAAK,MAAO79B,EAAY69B,EAAG,UAAWkmB,EAAelmB,EAAG,aAAc3nB,EAAO2nB,EAAG,KAAMomB,EAAQpmB,EAAG,MAAOpD,EAAQoD,EAAG,MAAOqmB,EAAWrmB,EAAG,SAAUhhC,EAAQghC,EAAG,MAAOsmB,EAAetmB,EAAG,aAAc2pB,EAAc3pB,EAAG,YAAaumB,EAAavmB,EAAG,WAAYwmB,EAAcxmB,EAAG,YAAa5B,EAAkB4B,EAAG,gBAAiBymB,EAAKzmB,EAAG,aAAc0mB,EAAeD,IAAO,OAAS,CAAC,EAAG,EAAG,EAAG,CAAC,EAAIA,EAAI/pB,EAAkBsD,EAAG,gBAAiB35B,EAAS25B,EAAG,OAAQ9jB,EAAW8jB,EAAG,SAAU/K,EAAc+K,EAAG,YAAajL,EAAUiL,EAAG,QAASpf,EAASof,EAAG,OACriB,KAAK,OAASp5B,GAAI,KAAK,KAAK,SAAS,EACjC,KAAK,WAAW,KAAK,SAAS,GAC9B,KAAK,OAAO,SAAS,qBAEzB,KAAK,OAAO,SAAS,aAAa,OAAOg2B,CAAK,CAAC,EAC3CspB,GACAA,EAAat/C,EAAG,EAEpB,IAAI+/C,EAAc,OAAO,KAAK,KAAK,MAAM,WAAW,EAChD56B,EAAQ,IAAIw9B,GAAY,MAAM,KAAK,OAAO,UAAW,aAAa,OAAO3sB,CAAK,EAAGhc,CAAM,EAC3F,KAAK,OAAO,IAAI,MAAQmL,EACxB,KAAK,YAAcA,EAAM,UAAU,CAAC,EACpC,KAAK,MAAQA,EAEb,KAAK,OAAO,mBAAmB,EAAK,EACpC,KAAK,OAAO,SAAS,cAAc,EAAK,EAExC,IAAI66B,EAAmB,KAAK,YAAY,SACpC,KAAK,MAAM,uBACX,KAAK,SAAW,KAAK,SAAS,KAAK,SAAU,KAAK,MAAM,oBAAoB,GAEhF76B,EAAM,QAAQ,SAAUla,EAAQvT,EAAO,CACnC,QAAS/B,EAAI,EAAGA,EAAIoqD,EAAY,OAAQpqD,IACpCsV,EAAO80C,EAAYpqD,CAAC,CAAC,EAAI0pD,EAAM,MAAM,YAAYU,EAAYpqD,CAAC,CAAC,EAEnE,IAAIqtD,EAAwBP,GAAI/C,EAAchoD,CAAK,EAC/CurD,EAAiBR,GAAIrqD,EAAOV,EAAO,EAAE,EACzCuT,EAAO,QAAQ,eAAe,IAAIjL,GAAI,WAAa,EACnDiL,EAAO,SAAS,aAAa,OAAO+qB,CAAK,CAAC,EAC1C/qB,EAAO,SAAS,gBAAgB60C,EAAa,CAAC,EAAGA,EAAa,CAAC,EAAGA,EAAa,CAAC,EAAGA,EAAa,CAAC,CAAC,EAClG70C,EAAO,WAAU,EAAG,QAAQ,YAAY,OAAOwG,CAAI,CAAC,EACpDxG,EAAO,YAAYw0C,CAAQ,EAC3Bx0C,EAAO,SAAS,cAAc00C,CAAU,EACxC10C,EAAO,WAAU,EAAG,eAAe20C,CAAW,EAC9C30C,EAAO,mBAAmBusB,CAAe,EACzCvsB,EAAO,GAAG,QAASo0C,EAAM,OAAO,EAChCp0C,EAAO,GAAG,OAAQo0C,EAAM,MAAM,EAC9Bp0C,EAAO,GAAG,QAASo0C,EAAM,OAAO,EAChCp0C,EAAO,GAAG,OAAQo0C,EAAM,MAAM,EAC9Bp0C,EAAO,GAAG,QAASo0C,EAAM,OAAO,EAChCp0C,EAAO,GAAG,SAAUo0C,EAAM,QAAQ,EAClCp0C,EACK,WAAY,EACZ,UAAU,GAAG,kBAAmBo0C,EAAM,iBAAiB,EAC5Dp0C,EAAO,WAAU,EAAG,UAAU,GAAG,eAAgBo0C,EAAM,cAAc,EACrEp0C,EAAO,QAAQ,GAAG,kBAAmBo0C,EAAM,QAAQ,EACnDp0C,EAAO,SAAS+3C,IAA0B,OACpCC,EACAD,EAAuBD,CAAW,EACxC,IAAIG,EAAiBT,GAAIp0B,EAAa32B,EAAO,CAAE,CAAA,EAC3CyrD,EAAaV,GAAIt0B,EAASz2B,EAAO,CAAE,CAAA,EACvCuT,EAAO,WAAU,EAAG,eAAei4C,CAAc,EAC7CC,GAAcA,EAAW,OAAS,GAClC9D,EAAM,cAAc8D,EAAYl4C,CAAM,EAE1C,QAAStV,EAAI,EAAGA,EAAIooD,GAAgB,cAAc,OAAQpoD,IAAK,CAC3D,IAAIsqD,EAASlC,GAAgB,cAAcpoD,CAAC,EACxCqqD,EAAiB,eAAeC,CAAM,EACtCh1C,EAAO,UAAUg1C,EAAQZ,EAAM,MAAMY,CAAM,CAAC,EAEvCZ,EAAM,MAAMY,CAAM,GACvB,QAAQ,KAAK,2BAA2B,OAAOA,EAAQ,6GAA6G,CAAC,EAG7KZ,EAAM,cAAcA,EAAM,MAAOp0C,CAAM,EACnC,MAAM,QAAQqK,CAAQ,GACtBA,EAAS,QAAQ,SAAU5K,EAAS,CAC5B,OAAOA,EAAQ,MAAS,SACxBO,EAAO,SAAS,QAAQP,EAAQ,QAASA,EAAQ,IAAI,EAGrDO,EAAO,SAAS,WAAWP,CAAO,CAE1D,CAAiB,EAEDorB,GACA7qB,EAAO,mBAAmB,gBAAkB6qB,CAAe,CAE3E,CAAS,EACGv6B,IACA,KAAK,UAAU,WAAa,IAAMA,GAElCikD,GACA,KAAK,YAAY,QAErB,IAAI4D,EAAK,KAAK,OAAO,IAAI,MACzBA,EAAG,eAAe,KAAK,MAAM,cAAgB,QAAUA,EAAG,MAAQA,EAAG,MAAM,EAC3EA,EAAG,OAAO,EAAI,EACV3jD,GACAA,EAAO2jD,CAAE,CAErB,EACIN,EAAe,UAAU,mBAAqB,SAAU5C,EAAW,CAC/D,IAAIb,EAAQ,KACRc,EAAWD,EACXE,EAAY,KAAK,MACjBj7B,EAAQ,KAAK,OAAO,IAAI,MA4D5B,GA3DIi7B,EAAU,SAAWD,EAAS,QAC9Bh7B,EAAM,UAAUi7B,EAAU,MAAM,EAEhCA,EAAU,cAAgBD,EAAS,aACnCh7B,EAAM,eAAei7B,EAAU,cAAgB,QAAUj7B,EAAM,MAAQA,EAAM,MAAM,EAEvFA,EAAM,QAAQ,SAAUla,EAAQvT,EAAO,CAC/B0oD,EAAU,OAASD,EAAS,MAC5Bl1C,EAAO,WAAU,EAAG,QAAQ,YAAcm1C,EAAU,IAAI,EAExDA,EAAU,kBAAoBD,EAAS,kBACnCC,EAAU,gBACVn1C,EAAO,mBAAmB,gBAAkBm1C,EAAU,eAAe,EAGrEn1C,EAAO,mBAAmB,IAAI,GAGlCm1C,EAAU,WAAaD,EAAS,UAChCl1C,EAAO,YAAYm1C,EAAU,QAAQ,EAErCA,EAAU,cAAgBD,EAAS,aACnCl1C,EAAO,WAAY,EAAC,eAAem1C,EAAU,WAAW,EAExDA,EAAU,kBAAoBD,EAAS,iBACvCl1C,EAAO,mBAAmBm1C,EAAU,eAAe,EAEnDA,EAAU,aAAeD,EAAS,YAClCl1C,EAAO,SAAS,cAAcm1C,EAAU,UAAU,EAEtD,QAAS,EAAI,EAAG,EAAIrC,GAAgB,cAAc,OAAQ,IAAK,CAC3D,IAAIkC,EAASlC,GAAgB,cAAc,CAAC,EACxCqC,EAAUH,CAAM,IAAME,EAASF,CAAM,GACrCh1C,EAAO,UAAUg1C,EAAQG,EAAUH,CAAM,CAAC,EAG7CnC,GAAQsC,EAAU,WAAYD,EAAS,UAAU,GAClDd,EAAM,cAAce,EAAWn1C,CAAM,EAEzC,IAAIo4C,EAAYZ,GAAIrC,EAAU,MAAO1oD,EAAO,EAAE,EAC9C,GAAIuT,EAAO,SAAU,IAAKo4C,EAAW,CAEjChE,EAAM,OAAS,GACf,IAAIj0C,EAAMH,EAAO,QAAQ,UAAU,OAAM,EACzCA,EAAO,SAASo4C,EAAWjD,EAAU,WAAW,EAChDn1C,EAAO,QAAQ,UAAU,SAASG,CAAG,EACrCi0C,EAAM,OAAS,GAEnB,IAAI6D,EAAiBT,GAAIrC,EAAU,YAAa1oD,EAAO,CAAA,CAAE,EACrD4rD,EAAiBb,GAAItC,EAAS,YAAazoD,EAAO,CAAA,CAAE,EACnDomD,GAAQoF,EAAgBI,CAAc,GACvCr4C,EAAO,WAAU,EAAG,eAAei4C,CAAc,EAErD,IAAIC,EAAaV,GAAIrC,EAAU,QAAS1oD,EAAO,CAAA,CAAE,EAC7C6rD,EAAad,GAAItC,EAAS,QAASzoD,EAAO,CAAA,CAAE,EAC5C,CAAComD,GAAQqF,EAAYI,CAAU,GAAK,MAAM,QAAQJ,CAAU,GAC5D9D,EAAM,cAAc8D,EAAYl4C,CAAM,CAEtD,CAAS,EACGm1C,EAAU,YAAcD,EAAS,UAAW,CAC5C,IAAIE,EAAiB,KAAK,UAAU,UAChCC,EAAwBD,EAAe,KAAM,EAAC,MAAM,GAAG,EACvDE,EAAkBJ,EAAS,UAAU,KAAI,EAAG,MAAM,GAAG,EACzDI,EAAgB,QAAQ,SAAUC,EAAU,CACxC,IAAI9oD,EAAQ4oD,EAAsB,QAAQE,CAAQ,EAClDF,EAAsB,OAAO5oD,EAAO,CAAC,CACrD,CAAa,EACD,KAAK,UAAU,UACX,IAAM0oD,EAAU,UAAY,IAAME,EAAsB,KAAK,GAAG,EAEpEF,EAAU,QAAUD,EAAS,OAC7Bh7B,EAAM,SAAS,aAAei7B,EAAU,KAAK,EAE7CA,EAAU,OAAS,CAACD,EAAS,OAC7B,KAAK,YAAY,SAEjBC,EAAU,SAAW,KAAK,MAAM,QAChCA,EAAU,QAAU,KAAK,MAAM,QAC/B,KAAK,OAAO,QAExB,EACI0C,EAAe,UAAU,qBAAuB,UAAY,CACxD,KAAK,OAAO,UACZ,KAAK,OAAS,IACtB,EACIA,EAAe,UAAU,SAAW,SAAUz9C,EAAO,CACjD,GAAI,KAAK,MAAM,UAAY,CAAC,KAAK,OAAQ,CACrC,IAAIm+C,EAAU,CAAA,EACd,KAAK,OAAO,IAAI,MAAM,QAAQ,SAAUv4C,EAAQ,CAC5Cu4C,EAAQ,KAAKv4C,EAAO,SAAU,CAAA,CAC9C,CAAa,EACD,KAAK,MAAM,SAASu4C,EAASn+C,CAAK,EAE9C,EACIy9C,EAAe,UAAU,kBAAoB,SAAUz9C,EAAO,CAC1D,GAAI,KAAK,MAAM,kBAAmB,CAC9B,IAAIo+C,EAAU,CAAA,EACd,KAAK,OAAO,IAAI,MAAM,QAAQ,SAAUx4C,EAAQ,CAC5Cw4C,EAAQ,KAAKx4C,EAAO,aAAc,CAAA,CAClD,CAAa,EACD,KAAK,MAAM,kBAAkBw4C,EAASp+C,CAAK,EAEvD,EACIy9C,EAAe,UAAU,eAAiB,SAAUz9C,EAAO,CACvD,GAAI,KAAK,MAAM,eAAgB,CAC3B,IAAIq+C,EAAU,CAAA,EACd,KAAK,OAAO,IAAI,MAAM,QAAQ,SAAUz4C,EAAQ,CAC5Cy4C,EAAQ,KAAKz4C,EAAO,aAAc,CAAA,CAClD,CAAa,EACD,KAAK,MAAM,eAAey4C,EAASr+C,CAAK,EAEpD,EACIy9C,EAAe,UAAU,QAAU,SAAUz9C,EAAO,CAC5C,KAAK,MAAM,SACX,KAAK,MAAM,QAAQA,CAAK,CAEpC,EACIy9C,EAAe,UAAU,QAAU,SAAUz9C,EAAO,CAC5C,KAAK,MAAM,SACX,KAAK,MAAM,QAAQA,CAAK,CAEpC,EACIy9C,EAAe,UAAU,OAAS,SAAUz9C,EAAO,CAC3C,KAAK,MAAM,QACX,KAAK,MAAM,OAAOA,CAAK,CAEnC,EACIy9C,EAAe,UAAU,OAAS,SAAU38C,EAAM,CAC1C,KAAK,MAAM,QACX,KAAK,MAAM,OAAOA,CAAI,CAElC,EACI28C,EAAe,UAAU,QAAU,SAAU38C,EAAM,CAC3C,KAAK,MAAM,SACX,KAAK,MAAM,QAAQA,CAAI,CAEnC,EACI28C,EAAe,UAAU,SAAW,UAAY,CACxC,KAAK,MAAM,UACX,KAAK,MAAM,SAAS,KAAK,MAAM,CAE3C,EACIA,EAAe,UAAU,cAAgB,SAAU3pD,EAAO8R,EAAQ,CAE9D,QADI01C,EAAa,OAAO,KAAKxnD,EAAM,UAAU,EACpC6T,EAAI,EAAGA,EAAI2zC,EAAW,OAAQ3zC,IACnC/B,EAAO,UAAU01C,EAAW3zC,CAAC,EAAG7T,EAAM,WAAWwnD,EAAW3zC,CAAC,CAAC,CAAC,CAE3E,EACI81C,EAAe,UAAU,cAAgB,SAAU30B,EAASljB,EAAQ,CAEhE,IAAI21C,EAAiB31C,EAAO,WAAY,EAAC,WAAW,EAAI,EACxD,QAAStV,KAAKirD,EACNA,EAAe,eAAejrD,CAAC,GAC/BsV,EAAO,WAAU,EAAG,aAAa21C,EAAejrD,CAAC,EAAE,EAAE,EAI7DirD,EAAiB31C,EAAO,WAAY,EAAC,WAAW,EAAK,EACrD,QAAStV,KAAKirD,EACNA,EAAe,eAAejrD,CAAC,GAC/BsV,EAAO,WAAU,EAAG,aAAa21C,EAAejrD,CAAC,EAAE,EAAE,EAI7Dw4B,EAAQ,QAAQ,SAAUiL,EAAI,CAC1B,IAAI90B,EAAW80B,EAAG,SAAUxe,EAAWwe,EAAG,SAAU50B,EAAS40B,EAAG,OAAQve,EAASue,EAAG,OAAQ79B,EAAY69B,EAAG,UAAWt3B,EAAOs3B,EAAG,KAAMymB,EAAKzmB,EAAG,QAASpL,EAAU6xB,IAAO,OAAS,GAAQA,EACrLn7C,EAAQ,IAAIk6C,GAAa,MAAMt6C,EAAUsW,EAAUpW,EAAQqW,CAAM,EACrE5P,EACK,WAAY,EACZ,UAAUvG,EAAOnJ,EAAWuG,EAAMksB,CAAO,CAC1D,CAAS,CACT,EACI80B,EAAe,UAAU,UAAY,SAAU3qD,EAAM,CACjD,KAAK,UAAYA,CACzB,EACI2qD,EAAe,UAAU,OAAS,UAAY,CAC1C,IAAI1pB,EAAK,KAAK,MAAOtiC,EAAOsiC,EAAG,KAAMjrB,EAAQirB,EAAG,MAAOhrB,EAASgrB,EAAG,OAAQl9B,EAAQk9B,EAAG,MAClF0nB,EAAWpC,GAAS,CAAE,MAAOvwC,EAAO,OAAQC,GAAUlS,CAAK,EAC/D,OAAO6iD,GAAM,cAAc,MAAO,CAAE,IAAK,KAAK,UAAW,GAAIjoD,EAAM,MAAOgqD,CAAU,CAAA,CAC5F,EACIgC,EAAe,UAAY,CACvB,UAAWjE,GAAU,OACrB,qBAAsBA,GAAU,OAChC,aAAcA,GAAU,QAAQA,GAAU,MAAM,EAChD,MAAOA,GAAU,KACjB,SAAUA,GAAU,UAAU,CAACA,GAAU,OAAQA,GAAU,MAAM,CAAC,EAClE,OAAQA,GAAU,OAClB,KAAMA,GAAU,OAChB,KAAMA,GAAU,OAChB,OAAQA,GAAU,KAClB,SAAUA,GAAU,KACpB,OAAQA,GAAU,KAClB,QAASA,GAAU,KACnB,QAASA,GAAU,KACnB,OAAQA,GAAU,KAClB,QAASA,GAAU,KACnB,SAAUA,GAAU,KACpB,YAAaA,GAAU,OACvB,WAAYA,GAAU,KACtB,OAAQA,GAAU,OAClB,MAAOA,GAAU,OACjB,MAAOA,GAAU,QAAQA,GAAU,MAAM,EACzC,MAAOA,GAAU,OACjB,kBAAmBA,GAAU,KAC7B,eAAgBA,GAAU,KAC1B,aAAcA,GAAU,KACxB,SAAUA,GAAU,OACpB,SAAUA,GAAU,OACpB,SAAUA,GAAU,KACpB,oBAAqBA,GAAU,KAC/B,QAASA,GAAU,OACnB,gBAAiBA,GAAU,KAC3B,YAAaA,GAAU,OACvB,YAAaA,GAAU,OACvB,WAAYA,GAAU,OACtB,MAAOA,GAAU,OACjB,aAAcA,GAAU,MACxB,YAAaA,GAAU,MACvB,QAASA,GAAU,MACnB,gBAAiBA,GAAU,OAC3B,YAAaA,GAAU,KACvB,0BAA2BA,GAAU,UAAU,CAC3CA,GAAU,KACVA,GAAU,KACtB,CAAS,EACD,yBAA0BA,GAAU,UAAU,CAC1CA,GAAU,KACVA,GAAU,KACtB,CAAS,EACD,SAAUA,GAAU,KAC5B,EACIiE,EAAe,aAAe,CAC1B,KAAM,aACN,MAAO,GACP,YAAa,SACb,OAAQ,EACR,KAAM,GACN,MAAO,GACP,OAAQ,QACR,MAAO,QACP,MAAO,CAAE,EACT,SAAU,GACV,WAAY,GACZ,SAAU,KACV,QAAS,KACT,OAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,GACV,oBAAqB,GACrB,gBAAiB,GACjB,QAAS,EACT,YAAa,EACb,YAAa,CAAE,EACf,MAAO,CAAE,EACT,aAAc,CAAC,EAAG,EAAG,EAAG,CAAC,EACzB,WAAY,CAAE,EACd,YAAa,GACb,0BAA2B,GAC3B,yBAA0B,EAClC,EACWA,CACX,EAAE/D,GAAM,SAAS,EACF55B,GAAA,QAAG29B,6ECxYlB,IAAIa,EAAmB,UAAW,CAMhC,KAAK,aAAe,EAEpB,KAAK,cAAgB,EAErB,KAAK,gBAAkB,GAIvB,KAAK,eAAiB,IAKtB,KAAK,sBAAwB,GAE7B,KAAK,aAAe,EAGpB,KAAK,cAAgB,EACvB,EAWIC,EAAc,GACdC,EAAc,EACdC,EAAa,EAWjBH,EAAiB,KAAO,SAASI,EAAI59C,EAAM,CACzC,MAAO,CAAC49C,EAAI59C,CAAI,CAClB,EAeAw9C,EAAiB,UAAU,UAAY,SAASK,EAAOC,EAAOC,EAC1DC,EAAc,CAEZ,OAAOA,EAAgB,MACrB,KAAK,cAAgB,EACvBA,EAAe,OAAO,UAEtBA,EAAgB,IAAI,OAAM,QAAS,EAAG,KAAK,aAAe,KAG9D,IAAIC,EAAWD,EAGf,GAAIH,GAAS,MAAQC,GAAS,KAC5B,MAAM,IAAI,MAAM,yBAAyB,EAI3C,GAAID,GAASC,EACX,OAAID,EACK,CAAC,IAAIL,EAAiB,KAAKG,EAAYE,CAAK,CAAC,EAE/C,GAGL,OAAOE,EAAkB,MAC3BA,EAAiB,IAEnB,IAAIG,EAAaH,EAGbI,EAAe,KAAK,kBAAkBN,EAAOC,CAAK,EAClDM,EAAeP,EAAM,UAAU,EAAGM,CAAY,EAClDN,EAAQA,EAAM,UAAUM,CAAY,EACpCL,EAAQA,EAAM,UAAUK,CAAY,EAGpCA,EAAe,KAAK,kBAAkBN,EAAOC,CAAK,EAClD,IAAIO,EAAeR,EAAM,UAAUA,EAAM,OAASM,CAAY,EAC9DN,EAAQA,EAAM,UAAU,EAAGA,EAAM,OAASM,CAAY,EACtDL,EAAQA,EAAM,UAAU,EAAGA,EAAM,OAASK,CAAY,EAGtD,IAAIG,EAAQ,KAAK,cAAcT,EAAOC,EAAOI,EAAYD,CAAQ,EAGjE,OAAIG,GACFE,EAAM,QAAQ,IAAId,EAAiB,KAAKG,EAAYS,CAAY,CAAC,EAE/DC,GACFC,EAAM,KAAK,IAAId,EAAiB,KAAKG,EAAYU,CAAY,CAAC,EAEhE,KAAK,kBAAkBC,CAAK,EACrBA,CACT,EAeAd,EAAiB,UAAU,cAAgB,SAASK,EAAOC,EAAOI,EAC9DD,EAAU,CACZ,IAAIK,EAEJ,GAAI,CAACT,EAEH,MAAO,CAAC,IAAIL,EAAiB,KAAKE,EAAaI,CAAK,CAAC,EAGvD,GAAI,CAACA,EAEH,MAAO,CAAC,IAAIN,EAAiB,KAAKC,EAAaI,CAAK,CAAC,EAGvD,IAAIU,EAAWV,EAAM,OAASC,EAAM,OAASD,EAAQC,EACjDU,EAAYX,EAAM,OAASC,EAAM,OAASA,EAAQD,EAClD,EAAIU,EAAS,QAAQC,CAAS,EAClC,GAAI,GAAK,GAEP,OAAAF,EAAQ,CAAC,IAAId,EAAiB,KAAKE,EAAaa,EAAS,UAAU,EAAG,CAAC,CAAC,EAC/D,IAAIf,EAAiB,KAAKG,EAAYa,CAAS,EAC/C,IAAIhB,EAAiB,KAAKE,EACtBa,EAAS,UAAU,EAAIC,EAAU,MAAM,CAAC,CAAC,EAElDX,EAAM,OAASC,EAAM,SACvBQ,EAAM,CAAC,EAAE,CAAC,EAAIA,EAAM,CAAC,EAAE,CAAC,EAAIb,GAEvBa,EAGT,GAAIE,EAAU,QAAU,EAGtB,MAAO,CAAC,IAAIhB,EAAiB,KAAKC,EAAaI,CAAK,EAC5C,IAAIL,EAAiB,KAAKE,EAAaI,CAAK,CAAC,EAIvD,IAAIW,EAAK,KAAK,gBAAgBZ,EAAOC,CAAK,EAC1C,GAAIW,EAAI,CAEN,IAAIC,EAAUD,EAAG,CAAC,EACdE,EAAUF,EAAG,CAAC,EACdG,EAAUH,EAAG,CAAC,EACdI,EAAUJ,EAAG,CAAC,EACdK,EAAaL,EAAG,CAAC,EAEjBM,EAAU,KAAK,UAAUL,EAASE,EAASV,EAAYD,CAAQ,EAC/De,EAAU,KAAK,UAAUL,EAASE,EAASX,EAAYD,CAAQ,EAEnE,OAAOc,EAAQ,OAAO,CAAC,IAAIvB,EAAiB,KAAKG,EAAYmB,CAAU,CAAC,EAClDE,CAAO,EAG/B,OAAId,GAAcL,EAAM,OAAS,KAAOC,EAAM,OAAS,IAC9C,KAAK,eAAeD,EAAOC,EAAOG,CAAQ,EAG5C,KAAK,aAAaJ,EAAOC,EAAOG,CAAQ,CACjD,EAaAT,EAAiB,UAAU,eAAiB,SAASK,EAAOC,EAAOG,EAAU,CAE3E,IAAIzrD,EAAI,KAAK,mBAAmBqrD,EAAOC,CAAK,EAC5CD,EAAQrrD,EAAE,OACVsrD,EAAQtrD,EAAE,OACV,IAAIysD,EAAYzsD,EAAE,UAEd8rD,EAAQ,KAAK,UAAUT,EAAOC,EAAO,GAAOG,CAAQ,EAGxD,KAAK,mBAAmBK,EAAOW,CAAS,EAExC,KAAK,qBAAqBX,CAAK,EAI/BA,EAAM,KAAK,IAAId,EAAiB,KAAKG,EAAY,EAAE,CAAC,EAMpD,QALIuB,EAAU,EACVC,EAAe,EACfC,EAAe,EACfC,EAAc,GACdC,EAAc,GACXJ,EAAUZ,EAAM,QAAQ,CAC7B,OAAQA,EAAMY,CAAO,EAAE,CAAC,EAAC,CACvB,KAAKxB,EACH0B,IACAE,GAAehB,EAAMY,CAAO,EAAE,CAAC,EAC/B,MACF,KAAKzB,EACH0B,IACAE,GAAef,EAAMY,CAAO,EAAE,CAAC,EAC/B,MACF,KAAKvB,EAEH,GAAIwB,GAAgB,GAAKC,GAAgB,EAAG,CAE1Cd,EAAM,OAAOY,EAAUC,EAAeC,EACzBD,EAAeC,CAAY,EACxCF,EAAUA,EAAUC,EAAeC,EAGnC,QAFIG,EACA,KAAK,UAAUF,EAAaC,EAAa,GAAOrB,CAAQ,EACnDzjD,EAAI+kD,EAAQ,OAAS,EAAG/kD,GAAK,EAAGA,IACvC8jD,EAAM,OAAOY,EAAS,EAAGK,EAAQ/kD,CAAC,CAAC,EAErC0kD,EAAUA,EAAUK,EAAQ,OAE9BH,EAAe,EACfD,EAAe,EACfE,EAAc,GACdC,EAAc,GACd,KACH,CACDJ,IAEF,OAAAZ,EAAM,IAAG,EAEFA,CACT,EAaAd,EAAiB,UAAU,aAAe,SAASK,EAAOC,EAAOG,EAAU,CAWzE,QATIuB,EAAe3B,EAAM,OACrB4B,EAAe3B,EAAM,OACrB4B,EAAQ,KAAK,MAAMF,EAAeC,GAAgB,CAAC,EACnDE,EAAWD,EACXE,EAAW,EAAIF,EACfG,EAAK,IAAI,MAAMD,CAAQ,EACvBE,EAAK,IAAI,MAAMF,CAAQ,EAGlB5kD,EAAI,EAAGA,EAAI4kD,EAAU5kD,IAC5B6kD,EAAG7kD,CAAC,EAAI,GACR8kD,EAAG9kD,CAAC,EAAI,GAEV6kD,EAAGF,EAAW,CAAC,EAAI,EACnBG,EAAGH,EAAW,CAAC,EAAI,EAWnB,QAVIpsC,EAAQisC,EAAeC,EAGvBM,EAASxsC,EAAQ,GAAK,EAGtBysC,EAAU,EACVC,EAAQ,EACRC,EAAU,EACVC,EAAQ,EACH5vB,EAAI,EAAGA,EAAImvB,GAEb,MAAI,KAAI,EAAI,QAAO,EAAKzB,GAFJ1tB,IAAK,CAO9B,QAAS6vB,EAAK,CAAC7vB,EAAIyvB,EAASI,GAAM7vB,EAAI0vB,EAAOG,GAAM,EAAG,CACpD,IAAIC,EAAYV,EAAWS,EACvBE,EACAF,GAAM,CAAC7vB,GAAM6vB,GAAM7vB,GAAKsvB,EAAGQ,EAAY,CAAC,EAAIR,EAAGQ,EAAY,CAAC,EAC9DC,EAAKT,EAAGQ,EAAY,CAAC,EAErBC,EAAKT,EAAGQ,EAAY,CAAC,EAAI,EAG3B,QADI9gB,EAAK+gB,EAAKF,EACPE,EAAKd,GAAgBjgB,EAAKkgB,GAC1B5B,EAAM,OAAOyC,CAAE,GAAKxC,EAAM,OAAOve,CAAE,GACxC+gB,IACA/gB,IAGF,GADAsgB,EAAGQ,CAAS,EAAIC,EACZA,EAAKd,EAEPS,GAAS,UACA1gB,EAAKkgB,EAEdO,GAAW,UACFD,EAAO,CAChB,IAAIQ,EAAYZ,EAAWpsC,EAAQ6sC,EACnC,GAAIG,GAAa,GAAKA,EAAYX,GAAYE,EAAGS,CAAS,GAAK,GAAI,CAEjE,IAAIC,EAAKhB,EAAeM,EAAGS,CAAS,EACpC,GAAID,GAAME,EAER,OAAO,KAAK,kBAAkB3C,EAAOC,EAAOwC,EAAI/gB,EAAI0e,CAAQ,IAOpE,QAASwC,EAAK,CAAClwB,EAAI2vB,EAASO,GAAMlwB,EAAI4vB,EAAOM,GAAM,EAAG,CACpD,IAAIF,EAAYZ,EAAWc,EACvBD,EACAC,GAAM,CAAClwB,GAAMkwB,GAAMlwB,GAAKuvB,EAAGS,EAAY,CAAC,EAAIT,EAAGS,EAAY,CAAC,EAC9DC,EAAKV,EAAGS,EAAY,CAAC,EAErBC,EAAKV,EAAGS,EAAY,CAAC,EAAI,EAG3B,QADI/gB,EAAKghB,EAAKC,EACPD,EAAKhB,GAAgBhgB,EAAKigB,GAC1B5B,EAAM,OAAO2B,EAAegB,EAAK,CAAC,GAClC1C,EAAM,OAAO2B,EAAejgB,EAAK,CAAC,GACvCghB,IACAhhB,IAGF,GADAsgB,EAAGS,CAAS,EAAIC,EACZA,EAAKhB,EAEPW,GAAS,UACA3gB,EAAKigB,EAEdS,GAAW,UACF,CAACH,EAAO,CACjB,IAAIM,EAAYV,EAAWpsC,EAAQktC,EACnC,GAAIJ,GAAa,GAAKA,EAAYT,GAAYC,EAAGQ,CAAS,GAAK,GAAI,CACjE,IAAIC,EAAKT,EAAGQ,CAAS,EACjB9gB,EAAKogB,EAAWW,EAAKD,EAGzB,GADAG,EAAKhB,EAAegB,EAChBF,GAAME,EAER,OAAO,KAAK,kBAAkB3C,EAAOC,EAAOwC,EAAI/gB,EAAI0e,CAAQ,KAQtE,MAAO,CAAC,IAAIT,EAAiB,KAAKC,EAAaI,CAAK,EAC5C,IAAIL,EAAiB,KAAKE,EAAaI,CAAK,CAAC,CACvD,EAcAN,EAAiB,UAAU,kBAAoB,SAASK,EAAOC,EAAO9iD,EAAG6L,EACrEo3C,EAAU,CACZ,IAAIyC,EAAS7C,EAAM,UAAU,EAAG7iD,CAAC,EAC7B2lD,EAAS7C,EAAM,UAAU,EAAGj3C,CAAC,EAC7B+5C,EAAS/C,EAAM,UAAU7iD,CAAC,EAC1B6lD,EAAS/C,EAAM,UAAUj3C,CAAC,EAG1By3C,EAAQ,KAAK,UAAUoC,EAAQC,EAAQ,GAAO1C,CAAQ,EACtD6C,EAAS,KAAK,UAAUF,EAAQC,EAAQ,GAAO5C,CAAQ,EAE3D,OAAOK,EAAM,OAAOwC,CAAM,CAC5B,EAcAtD,EAAiB,UAAU,mBAAqB,SAASK,EAAOC,EAAO,CACrE,IAAIiD,EAAY,CAAA,EACZC,EAAW,CAAA,EAIfD,EAAU,CAAC,EAAI,GAUf,SAASE,EAAwBjhD,EAAM,CASrC,QARImR,EAAQ,GAIR+vC,EAAY,EACZ3qC,EAAU,GAEV4qC,EAAkBJ,EAAU,OACzBxqC,EAAUvW,EAAK,OAAS,GAAG,CAChCuW,EAAUvW,EAAK,QAAQ;AAAA,EAAMkhD,CAAS,EAClC3qC,GAAW,KACbA,EAAUvW,EAAK,OAAS,GAE1B,IAAI0B,EAAO1B,EAAK,UAAUkhD,EAAW3qC,EAAU,CAAC,GAE5CyqC,EAAS,eAAiBA,EAAS,eAAet/C,CAAI,EACrDs/C,EAASt/C,CAAI,IAAM,QACtByP,GAAS,OAAO,aAAa6vC,EAASt/C,CAAI,CAAC,GAEvCy/C,GAAmBC,IAGrB1/C,EAAO1B,EAAK,UAAUkhD,CAAS,EAC/B3qC,EAAUvW,EAAK,QAEjBmR,GAAS,OAAO,aAAagwC,CAAe,EAC5CH,EAASt/C,CAAI,EAAIy/C,EACjBJ,EAAUI,GAAiB,EAAIz/C,GAEjCw/C,EAAY3qC,EAAU,EAExB,OAAOpF,CACR,CAED,IAAIiwC,EAAW,IACXC,EAASJ,EAAwBpD,CAAK,EAC1CuD,EAAW,MACX,IAAIE,EAASL,EAAwBnD,CAAK,EAC1C,MAAO,CAAC,OAAQuD,EAAQ,OAAQC,EAAQ,UAAWP,CAAS,CAC9D,EAUAvD,EAAiB,UAAU,mBAAqB,SAASc,EAAOyC,EAAW,CACzE,QAASvxD,EAAI,EAAGA,EAAI8uD,EAAM,OAAQ9uD,IAAK,CAGrC,QAFI2hB,EAAQmtC,EAAM9uD,CAAC,EAAE,CAAC,EAClBwQ,EAAO,CAAA,EACFxF,EAAI,EAAGA,EAAI2W,EAAM,OAAQ3W,IAChCwF,EAAKxF,CAAC,EAAIumD,EAAU5vC,EAAM,WAAW3W,CAAC,CAAC,EAEzC8jD,EAAM9uD,CAAC,EAAE,CAAC,EAAIwQ,EAAK,KAAK,EAAE,EAE9B,EAUAw9C,EAAiB,UAAU,kBAAoB,SAASK,EAAOC,EAAO,CAEpE,GAAI,CAACD,GAAS,CAACC,GAASD,EAAM,OAAO,CAAC,GAAKC,EAAM,OAAO,CAAC,EACvD,MAAO,GAQT,QAJIyD,EAAa,EACbC,EAAa,KAAK,IAAI3D,EAAM,OAAQC,EAAM,MAAM,EAChD2D,EAAaD,EACbE,EAAe,EACZH,EAAaE,GACd5D,EAAM,UAAU6D,EAAcD,CAAU,GACxC3D,EAAM,UAAU4D,EAAcD,CAAU,GAC1CF,EAAaE,EACbC,EAAeH,GAEfC,EAAaC,EAEfA,EAAa,KAAK,OAAOD,EAAaD,GAAc,EAAIA,CAAU,EAEpE,OAAOE,CACT,EASAjE,EAAiB,UAAU,kBAAoB,SAASK,EAAOC,EAAO,CAEpE,GAAI,CAACD,GAAS,CAACC,GACXD,EAAM,OAAOA,EAAM,OAAS,CAAC,GAAKC,EAAM,OAAOA,EAAM,OAAS,CAAC,EACjE,MAAO,GAQT,QAJIyD,EAAa,EACbC,EAAa,KAAK,IAAI3D,EAAM,OAAQC,EAAM,MAAM,EAChD2D,EAAaD,EACbG,EAAa,EACVJ,EAAaE,GACd5D,EAAM,UAAUA,EAAM,OAAS4D,EAAY5D,EAAM,OAAS8D,CAAU,GACpE7D,EAAM,UAAUA,EAAM,OAAS2D,EAAY3D,EAAM,OAAS6D,CAAU,GACtEJ,EAAaE,EACbE,EAAaJ,GAEbC,EAAaC,EAEfA,EAAa,KAAK,OAAOD,EAAaD,GAAc,EAAIA,CAAU,EAEpE,OAAOE,CACT,EAWAjE,EAAiB,UAAU,oBAAsB,SAASK,EAAOC,EAAO,CAEtE,IAAI0B,EAAe3B,EAAM,OACrB4B,EAAe3B,EAAM,OAEzB,GAAI0B,GAAgB,GAAKC,GAAgB,EACvC,MAAO,GAGLD,EAAeC,EACjB5B,EAAQA,EAAM,UAAU2B,EAAeC,CAAY,EAC1CD,EAAeC,IACxB3B,EAAQA,EAAM,UAAU,EAAG0B,CAAY,GAEzC,IAAIoC,EAAc,KAAK,IAAIpC,EAAcC,CAAY,EAErD,GAAI5B,GAASC,EACX,OAAO8D,EAQT,QAFIC,EAAO,EACPlhC,EAAS,IACA,CACX,IAAI80B,EAAUoI,EAAM,UAAU+D,EAAcjhC,CAAM,EAC9C6F,EAAQs3B,EAAM,QAAQrI,CAAO,EACjC,GAAIjvB,GAAS,GACX,OAAOq7B,EAETlhC,GAAU6F,GACNA,GAAS,GAAKq3B,EAAM,UAAU+D,EAAcjhC,CAAM,GAClDm9B,EAAM,UAAU,EAAGn9B,CAAM,KAC3BkhC,EAAOlhC,EACPA,KAGN,EAcA68B,EAAiB,UAAU,gBAAkB,SAASK,EAAOC,EAAO,CAClE,GAAI,KAAK,cAAgB,EAEvB,OAAO,KAET,IAAIS,EAAWV,EAAM,OAASC,EAAM,OAASD,EAAQC,EACjDU,EAAYX,EAAM,OAASC,EAAM,OAASA,EAAQD,EACtD,GAAIU,EAAS,OAAS,GAAKC,EAAU,OAAS,EAAID,EAAS,OACzD,OAAO,KAET,IAAIuD,EAAM,KAcV,SAASC,EAAiBxD,EAAUC,EAAWhvD,EAAG,CAMhD,QAJIwyD,EAAOzD,EAAS,UAAU/uD,EAAGA,EAAI,KAAK,MAAM+uD,EAAS,OAAS,CAAC,CAAC,EAChE/jD,EAAI,GACJynD,EAAc,GACdC,EAAiBC,EAAiBC,EAAkBC,GAChD7nD,EAAIgkD,EAAU,QAAQwD,EAAMxnD,EAAI,CAAC,IAAM,IAAI,CACjD,IAAI8nD,EAAeR,EAAI,kBAAkBvD,EAAS,UAAU/uD,CAAC,EACpBgvD,EAAU,UAAUhkD,CAAC,CAAC,EAC3D+nD,EAAeT,EAAI,kBAAkBvD,EAAS,UAAU,EAAG/uD,CAAC,EACvBgvD,EAAU,UAAU,EAAGhkD,CAAC,CAAC,EAC9DynD,EAAY,OAASM,EAAeD,IACtCL,EAAczD,EAAU,UAAUhkD,EAAI+nD,EAAc/nD,CAAC,EACjDgkD,EAAU,UAAUhkD,EAAGA,EAAI8nD,CAAY,EAC3CJ,EAAkB3D,EAAS,UAAU,EAAG/uD,EAAI+yD,CAAY,EACxDJ,EAAkB5D,EAAS,UAAU/uD,EAAI8yD,CAAY,EACrDF,EAAmB5D,EAAU,UAAU,EAAGhkD,EAAI+nD,CAAY,EAC1DF,EAAmB7D,EAAU,UAAUhkD,EAAI8nD,CAAY,GAG3D,OAAIL,EAAY,OAAS,GAAK1D,EAAS,OAC9B,CAAC2D,EAAiBC,EACjBC,EAAkBC,EAAkBJ,CAAW,EAEhD,IAEV,CAGD,IAAIO,EAAMT,EAAiBxD,EAAUC,EACV,KAAK,KAAKD,EAAS,OAAS,CAAC,CAAC,EAErDkE,EAAMV,EAAiBxD,EAAUC,EACV,KAAK,KAAKD,EAAS,OAAS,CAAC,CAAC,EACrDE,EACJ,GAAI,CAAC+D,GAAO,CAACC,EACX,OAAO,KACGA,EAEAD,EAIV/D,EAAK+D,EAAI,CAAC,EAAE,OAASC,EAAI,CAAC,EAAE,OAASD,EAAMC,EAH3ChE,EAAKgE,EAFLhE,EAAK+D,EASP,IAAI9D,EAASC,EAASC,EAASC,EAC3BhB,EAAM,OAASC,EAAM,QACvBY,EAAUD,EAAG,CAAC,EACdE,EAAUF,EAAG,CAAC,EACdG,EAAUH,EAAG,CAAC,EACdI,EAAUJ,EAAG,CAAC,IAEdG,EAAUH,EAAG,CAAC,EACdI,EAAUJ,EAAG,CAAC,EACdC,EAAUD,EAAG,CAAC,EACdE,EAAUF,EAAG,CAAC,GAEhB,IAAIK,EAAaL,EAAG,CAAC,EACrB,MAAO,CAACC,EAASC,EAASC,EAASC,EAASC,CAAU,CACxD,EAOAtB,EAAiB,UAAU,qBAAuB,SAASc,EAAO,CAchE,QAbI5gB,EAAU,GACVglB,EAAa,CAAA,EACbC,EAAmB,EAEnBC,EAAe,KAEf1D,EAAU,EAEV2D,EAAqB,EACrBC,EAAoB,EAEpBC,EAAqB,EACrBC,EAAoB,EACjB9D,EAAUZ,EAAM,QACjBA,EAAMY,CAAO,EAAE,CAAC,GAAKvB,GACvB+E,EAAWC,GAAkB,EAAIzD,EACjC2D,EAAqBE,EACrBD,EAAoBE,EACpBD,EAAqB,EACrBC,EAAoB,EACpBJ,EAAetE,EAAMY,CAAO,EAAE,CAAC,IAE3BZ,EAAMY,CAAO,EAAE,CAAC,GAAKxB,EACvBqF,GAAsBzE,EAAMY,CAAO,EAAE,CAAC,EAAE,OAExC8D,GAAqB1E,EAAMY,CAAO,EAAE,CAAC,EAAE,OAIrC0D,GAAiBA,EAAa,QAC9B,KAAK,IAAIC,EAAoBC,CAAiB,GAC7CF,EAAa,QAAU,KAAK,IAAIG,EACAC,CAAiB,IAEpD1E,EAAM,OAAOoE,EAAWC,EAAmB,CAAC,EAAG,EAClC,IAAInF,EAAiB,KAAKC,EAAamF,CAAY,CAAC,EAEjEtE,EAAMoE,EAAWC,EAAmB,CAAC,EAAI,CAAC,EAAE,CAAC,EAAIjF,EAEjDiF,IAEAA,IACAzD,EAAUyD,EAAmB,EAAID,EAAWC,EAAmB,CAAC,EAAI,GACpEE,EAAqB,EACrBC,EAAoB,EACpBC,EAAqB,EACrBC,EAAoB,EACpBJ,EAAe,KACfllB,EAAU,KAGdwhB,IAgBF,IAZIxhB,GACF,KAAK,kBAAkB4gB,CAAK,EAE9B,KAAK,6BAA6BA,CAAK,EAQvCY,EAAU,EACHA,EAAUZ,EAAM,QAAQ,CAC7B,GAAIA,EAAMY,EAAU,CAAC,EAAE,CAAC,GAAKzB,GACzBa,EAAMY,CAAO,EAAE,CAAC,GAAKxB,EAAa,CACpC,IAAIuF,EAAW3E,EAAMY,EAAU,CAAC,EAAE,CAAC,EAC/BgE,EAAY5E,EAAMY,CAAO,EAAE,CAAC,EAC5BiE,EAAkB,KAAK,oBAAoBF,EAAUC,CAAS,EAC9DE,EAAkB,KAAK,oBAAoBF,EAAWD,CAAQ,EAC9DE,GAAmBC,GACjBD,GAAmBF,EAAS,OAAS,GACrCE,GAAmBD,EAAU,OAAS,KAExC5E,EAAM,OAAOY,EAAS,EAAG,IAAI1B,EAAiB,KAAKG,EAC/CuF,EAAU,UAAU,EAAGC,CAAe,CAAC,CAAC,EAC5C7E,EAAMY,EAAU,CAAC,EAAE,CAAC,EAChB+D,EAAS,UAAU,EAAGA,EAAS,OAASE,CAAe,EAC3D7E,EAAMY,EAAU,CAAC,EAAE,CAAC,EAAIgE,EAAU,UAAUC,CAAe,EAC3DjE,MAGEkE,GAAmBH,EAAS,OAAS,GACrCG,GAAmBF,EAAU,OAAS,KAGxC5E,EAAM,OAAOY,EAAS,EAAG,IAAI1B,EAAiB,KAAKG,EAC/CsF,EAAS,UAAU,EAAGG,CAAe,CAAC,CAAC,EAC3C9E,EAAMY,EAAU,CAAC,EAAE,CAAC,EAAIxB,EACxBY,EAAMY,EAAU,CAAC,EAAE,CAAC,EAChBgE,EAAU,UAAU,EAAGA,EAAU,OAASE,CAAe,EAC7D9E,EAAMY,EAAU,CAAC,EAAE,CAAC,EAAIzB,EACxBa,EAAMY,EAAU,CAAC,EAAE,CAAC,EAChB+D,EAAS,UAAUG,CAAe,EACtClE,KAGJA,IAEFA,IAEJ,EASA1B,EAAiB,UAAU,6BAA+B,SAASc,EAAO,CAWxE,SAAS+E,EAA2BC,EAAKC,EAAK,CAC5C,GAAI,CAACD,GAAO,CAACC,EAEX,MAAO,GAQT,IAAIC,EAAQF,EAAI,OAAOA,EAAI,OAAS,CAAC,EACjCG,EAAQF,EAAI,OAAO,CAAC,EACpBG,EAAmBF,EAAM,MAAMhG,EAAiB,qBAAqB,EACrEmG,EAAmBF,EAAM,MAAMjG,EAAiB,qBAAqB,EACrEoG,EAAcF,GACdF,EAAM,MAAMhG,EAAiB,gBAAgB,EAC7CqG,EAAcF,GACdF,EAAM,MAAMjG,EAAiB,gBAAgB,EAC7CsG,EAAaF,GACbJ,EAAM,MAAMhG,EAAiB,eAAe,EAC5CuG,EAAaF,GACbJ,EAAM,MAAMjG,EAAiB,eAAe,EAC5CwG,EAAaF,GACbR,EAAI,MAAM9F,EAAiB,kBAAkB,EAC7CyG,EAAaF,GACbR,EAAI,MAAM/F,EAAiB,oBAAoB,EAEnD,OAAIwG,GAAcC,EAET,EACEH,GAAcC,EAEhB,EACEL,GAAoB,CAACE,GAAeC,EAEtC,EACED,GAAeC,EAEjB,EACEH,GAAoBC,EAEtB,EAEF,CACR,CAID,QAFIzE,EAAU,EAEPA,EAAUZ,EAAM,OAAS,GAAG,CACjC,GAAIA,EAAMY,EAAU,CAAC,EAAE,CAAC,GAAKvB,GACzBW,EAAMY,EAAU,CAAC,EAAE,CAAC,GAAKvB,EAAY,CAEvC,IAAIuG,EAAY5F,EAAMY,EAAU,CAAC,EAAE,CAAC,EAChCiF,EAAO7F,EAAMY,CAAO,EAAE,CAAC,EACvBkF,EAAY9F,EAAMY,EAAU,CAAC,EAAE,CAAC,EAGhCmF,EAAe,KAAK,kBAAkBH,EAAWC,CAAI,EACzD,GAAIE,EAAc,CAChB,IAAIC,EAAeH,EAAK,UAAUA,EAAK,OAASE,CAAY,EAC5DH,EAAYA,EAAU,UAAU,EAAGA,EAAU,OAASG,CAAY,EAClEF,EAAOG,EAAeH,EAAK,UAAU,EAAGA,EAAK,OAASE,CAAY,EAClED,EAAYE,EAAeF,EAS7B,QALIG,EAAgBL,EAChBM,EAAWL,EACXM,EAAgBL,EAChBM,EAAYrB,EAA2Ba,EAAWC,CAAI,EACtDd,EAA2Bc,EAAMC,CAAS,EACvCD,EAAK,OAAO,CAAC,IAAMC,EAAU,OAAO,CAAC,GAAG,CAC7CF,GAAaC,EAAK,OAAO,CAAC,EAC1BA,EAAOA,EAAK,UAAU,CAAC,EAAIC,EAAU,OAAO,CAAC,EAC7CA,EAAYA,EAAU,UAAU,CAAC,EACjC,IAAIO,EAAQtB,EAA2Ba,EAAWC,CAAI,EAClDd,EAA2Bc,EAAMC,CAAS,EAE1CO,GAASD,IACXA,EAAYC,EACZJ,EAAgBL,EAChBM,EAAWL,EACXM,EAAgBL,GAIhB9F,EAAMY,EAAU,CAAC,EAAE,CAAC,GAAKqF,IAEvBA,EACFjG,EAAMY,EAAU,CAAC,EAAE,CAAC,EAAIqF,GAExBjG,EAAM,OAAOY,EAAU,EAAG,CAAC,EAC3BA,KAEFZ,EAAMY,CAAO,EAAE,CAAC,EAAIsF,EAChBC,EACFnG,EAAMY,EAAU,CAAC,EAAE,CAAC,EAAIuF,GAExBnG,EAAM,OAAOY,EAAU,EAAG,CAAC,EAC3BA,MAINA,IAEJ,EAGA1B,EAAiB,sBAAwB,eACzCA,EAAiB,iBAAmB,KACpCA,EAAiB,gBAAkB,SACnCA,EAAiB,mBAAqB,WACtCA,EAAiB,qBAAuB,cAMxCA,EAAiB,UAAU,uBAAyB,SAASc,EAAO,CAgBlE,QAfI5gB,EAAU,GACVglB,EAAa,CAAA,EACbC,EAAmB,EAEnBC,EAAe,KAEf1D,EAAU,EAEV0F,EAAU,GAEVC,EAAU,GAEVC,EAAW,GAEXC,EAAW,GACR7F,EAAUZ,EAAM,QACjBA,EAAMY,CAAO,EAAE,CAAC,GAAKvB,GACnBW,EAAMY,CAAO,EAAE,CAAC,EAAE,OAAS,KAAK,gBAC/B4F,GAAYC,IAEfrC,EAAWC,GAAkB,EAAIzD,EACjC0F,EAAUE,EACVD,EAAUE,EACVnC,EAAetE,EAAMY,CAAO,EAAE,CAAC,IAG/ByD,EAAmB,EACnBC,EAAe,MAEjBkC,EAAWC,EAAW,KAElBzG,EAAMY,CAAO,EAAE,CAAC,GAAKzB,EACvBsH,EAAW,GAEXD,EAAW,GAUTlC,IAAkBgC,GAAWC,GAAWC,GAAYC,GACjCnC,EAAa,OAAS,KAAK,cAAgB,GAC3CgC,EAAUC,EAAUC,EAAWC,GAAa,KAEjEzG,EAAM,OAAOoE,EAAWC,EAAmB,CAAC,EAAG,EAClC,IAAInF,EAAiB,KAAKC,EAAamF,CAAY,CAAC,EAEjEtE,EAAMoE,EAAWC,EAAmB,CAAC,EAAI,CAAC,EAAE,CAAC,EAAIjF,EACjDiF,IACAC,EAAe,KACXgC,GAAWC,GAEbC,EAAWC,EAAW,GACtBpC,EAAmB,IAEnBA,IACAzD,EAAUyD,EAAmB,EACzBD,EAAWC,EAAmB,CAAC,EAAI,GACvCmC,EAAWC,EAAW,IAExBrnB,EAAU,KAGdwhB,IAGExhB,GACF,KAAK,kBAAkB4gB,CAAK,CAEhC,EAQAd,EAAiB,UAAU,kBAAoB,SAASc,EAAO,CAE7DA,EAAM,KAAK,IAAId,EAAiB,KAAKG,EAAY,EAAE,CAAC,EAOpD,QANIuB,EAAU,EACVC,EAAe,EACfC,EAAe,EACfC,EAAc,GACdC,EAAc,GACdnB,EACGe,EAAUZ,EAAM,QACrB,OAAQA,EAAMY,CAAO,EAAE,CAAC,EAAC,CACvB,KAAKxB,EACH0B,IACAE,GAAehB,EAAMY,CAAO,EAAE,CAAC,EAC/BA,IACA,MACF,KAAKzB,EACH0B,IACAE,GAAef,EAAMY,CAAO,EAAE,CAAC,EAC/BA,IACA,MACF,KAAKvB,EAECwB,EAAeC,EAAe,GAC5BD,IAAiB,GAAKC,IAAiB,IAEzCjB,EAAe,KAAK,kBAAkBmB,EAAaD,CAAW,EAC1DlB,IAAiB,IACde,EAAUC,EAAeC,EAAgB,GAC1Cd,EAAMY,EAAUC,EAAeC,EAAe,CAAC,EAAE,CAAC,GAClDzB,EACFW,EAAMY,EAAUC,EAAeC,EAAe,CAAC,EAAE,CAAC,GAC9CE,EAAY,UAAU,EAAGnB,CAAY,GAEzCG,EAAM,OAAO,EAAG,EAAG,IAAId,EAAiB,KAAKG,EACzC2B,EAAY,UAAU,EAAGnB,CAAY,CAAC,CAAC,EAC3Ce,KAEFI,EAAcA,EAAY,UAAUnB,CAAY,EAChDkB,EAAcA,EAAY,UAAUlB,CAAY,GAGlDA,EAAe,KAAK,kBAAkBmB,EAAaD,CAAW,EAC1DlB,IAAiB,IACnBG,EAAMY,CAAO,EAAE,CAAC,EAAII,EAAY,UAAUA,EAAY,OAClDnB,CAAY,EAAIG,EAAMY,CAAO,EAAE,CAAC,EACpCI,EAAcA,EAAY,UAAU,EAAGA,EAAY,OAC/CnB,CAAY,EAChBkB,EAAcA,EAAY,UAAU,EAAGA,EAAY,OAC/ClB,CAAY,IAIpBe,GAAWC,EAAeC,EAC1Bd,EAAM,OAAOY,EAASC,EAAeC,CAAY,EAC7CC,EAAY,SACdf,EAAM,OAAOY,EAAS,EAClB,IAAI1B,EAAiB,KAAKC,EAAa4B,CAAW,CAAC,EACvDH,KAEEI,EAAY,SACdhB,EAAM,OAAOY,EAAS,EAClB,IAAI1B,EAAiB,KAAKE,EAAa4B,CAAW,CAAC,EACvDJ,KAEFA,KACSA,IAAY,GAAKZ,EAAMY,EAAU,CAAC,EAAE,CAAC,GAAKvB,GAEnDW,EAAMY,EAAU,CAAC,EAAE,CAAC,GAAKZ,EAAMY,CAAO,EAAE,CAAC,EACzCZ,EAAM,OAAOY,EAAS,CAAC,GAEvBA,IAEFE,EAAe,EACfD,EAAe,EACfE,EAAc,GACdC,EAAc,GACd,KACH,CAEChB,EAAMA,EAAM,OAAS,CAAC,EAAE,CAAC,IAAM,IACjCA,EAAM,IAAG,EAMX,IAAI5gB,EAAU,GAGd,IAFAwhB,EAAU,EAEHA,EAAUZ,EAAM,OAAS,GAC1BA,EAAMY,EAAU,CAAC,EAAE,CAAC,GAAKvB,GACzBW,EAAMY,EAAU,CAAC,EAAE,CAAC,GAAKvB,IAEvBW,EAAMY,CAAO,EAAE,CAAC,EAAE,UAAUZ,EAAMY,CAAO,EAAE,CAAC,EAAE,OAC9CZ,EAAMY,EAAU,CAAC,EAAE,CAAC,EAAE,MAAM,GAAKZ,EAAMY,EAAU,CAAC,EAAE,CAAC,GAEvDZ,EAAMY,CAAO,EAAE,CAAC,EAAIZ,EAAMY,EAAU,CAAC,EAAE,CAAC,EACpCZ,EAAMY,CAAO,EAAE,CAAC,EAAE,UAAU,EAAGZ,EAAMY,CAAO,EAAE,CAAC,EAAE,OACrBZ,EAAMY,EAAU,CAAC,EAAE,CAAC,EAAE,MAAM,EAC5DZ,EAAMY,EAAU,CAAC,EAAE,CAAC,EAAIZ,EAAMY,EAAU,CAAC,EAAE,CAAC,EAAIZ,EAAMY,EAAU,CAAC,EAAE,CAAC,EACpEZ,EAAM,OAAOY,EAAU,EAAG,CAAC,EAC3BxhB,EAAU,IACD4gB,EAAMY,CAAO,EAAE,CAAC,EAAE,UAAU,EAAGZ,EAAMY,EAAU,CAAC,EAAE,CAAC,EAAE,MAAM,GAClEZ,EAAMY,EAAU,CAAC,EAAE,CAAC,IAEtBZ,EAAMY,EAAU,CAAC,EAAE,CAAC,GAAKZ,EAAMY,EAAU,CAAC,EAAE,CAAC,EAC7CZ,EAAMY,CAAO,EAAE,CAAC,EACZZ,EAAMY,CAAO,EAAE,CAAC,EAAE,UAAUZ,EAAMY,EAAU,CAAC,EAAE,CAAC,EAAE,MAAM,EACxDZ,EAAMY,EAAU,CAAC,EAAE,CAAC,EACxBZ,EAAM,OAAOY,EAAU,EAAG,CAAC,EAC3BxhB,EAAU,KAGdwhB,IAGExhB,GACF,KAAK,kBAAkB4gB,CAAK,CAEhC,EAWAd,EAAiB,UAAU,YAAc,SAASc,EAAO0G,EAAK,CAC5D,IAAI3D,EAAS,EACTC,EAAS,EACT2D,EAAc,EACdC,EAAc,EACdlqD,EACJ,IAAKA,EAAI,EAAGA,EAAIsjD,EAAM,SAChBA,EAAMtjD,CAAC,EAAE,CAAC,IAAM0iD,IAClB2D,GAAU/C,EAAMtjD,CAAC,EAAE,CAAC,EAAE,QAEpBsjD,EAAMtjD,CAAC,EAAE,CAAC,IAAMyiD,IAClB6D,GAAUhD,EAAMtjD,CAAC,EAAE,CAAC,EAAE,QAEpB,EAAAqmD,EAAS2D,IAPehqD,IAU5BiqD,EAAc5D,EACd6D,EAAc5D,EAGhB,OAAIhD,EAAM,QAAUtjD,GAAKsjD,EAAMtjD,CAAC,EAAE,CAAC,IAAMyiD,EAChCyH,EAGFA,GAAeF,EAAMC,EAC9B,EAQAzH,EAAiB,UAAU,gBAAkB,SAASc,EAAO,CAM3D,QALI13C,EAAO,CAAA,EACPu+C,EAAc,KACdC,EAAa,KACbC,EAAa,KACbC,EAAe,MACVtqD,EAAI,EAAGA,EAAIsjD,EAAM,OAAQtjD,IAAK,CACrC,IAAI4iD,EAAKU,EAAMtjD,CAAC,EAAE,CAAC,EACfvC,EAAO6lD,EAAMtjD,CAAC,EAAE,CAAC,EACjBgF,EAAOvH,EAAK,QAAQ0sD,EAAa,OAAO,EAAE,QAAQC,EAAY,MAAM,EACnE,QAAQC,EAAY,MAAM,EAAE,QAAQC,EAAc,YAAY,EACnE,OAAQ1H,EAAE,CACR,KAAKF,EACH92C,EAAK5L,CAAC,EAAI,oCAAsCgF,EAAO,SACvD,MACF,KAAKy9C,EACH72C,EAAK5L,CAAC,EAAI,oCAAsCgF,EAAO,SACvD,MACF,KAAK29C,EACH/2C,EAAK5L,CAAC,EAAI,SAAWgF,EAAO,UAC5B,KACH,EAEH,OAAO4G,EAAK,KAAK,EAAE,CACrB,EAQA42C,EAAiB,UAAU,WAAa,SAASc,EAAO,CAEtD,QADIt+C,EAAO,CAAA,EACFhF,EAAI,EAAGA,EAAIsjD,EAAM,OAAQtjD,IAC5BsjD,EAAMtjD,CAAC,EAAE,CAAC,IAAM0iD,IAClB19C,EAAKhF,CAAC,EAAIsjD,EAAMtjD,CAAC,EAAE,CAAC,GAGxB,OAAOgF,EAAK,KAAK,EAAE,CACrB,EAQAw9C,EAAiB,UAAU,WAAa,SAASc,EAAO,CAEtD,QADIt+C,EAAO,CAAA,EACFhF,EAAI,EAAGA,EAAIsjD,EAAM,OAAQtjD,IAC5BsjD,EAAMtjD,CAAC,EAAE,CAAC,IAAMyiD,IAClBz9C,EAAKhF,CAAC,EAAIsjD,EAAMtjD,CAAC,EAAE,CAAC,GAGxB,OAAOgF,EAAK,KAAK,EAAE,CACrB,EASAw9C,EAAiB,UAAU,iBAAmB,SAASc,EAAO,CAI5D,QAHIiH,EAAc,EACdC,EAAa,EACbC,EAAY,EACPzqD,EAAI,EAAGA,EAAIsjD,EAAM,OAAQtjD,IAAK,CACrC,IAAI4iD,EAAKU,EAAMtjD,CAAC,EAAE,CAAC,EACfvC,EAAO6lD,EAAMtjD,CAAC,EAAE,CAAC,EACrB,OAAQ4iD,EAAE,CACR,KAAKF,EACH8H,GAAc/sD,EAAK,OACnB,MACF,KAAKglD,EACHgI,GAAahtD,EAAK,OAClB,MACF,KAAKklD,EAEH4H,GAAe,KAAK,IAAIC,EAAYC,CAAS,EAC7CD,EAAa,EACbC,EAAY,EACZ,KACH,EAEH,OAAAF,GAAe,KAAK,IAAIC,EAAYC,CAAS,EACtCF,CACT,EAWA/H,EAAiB,UAAU,aAAe,SAASc,EAAO,CAExD,QADIt+C,EAAO,CAAA,EACFhF,EAAI,EAAGA,EAAIsjD,EAAM,OAAQtjD,IAChC,OAAQsjD,EAAMtjD,CAAC,EAAE,CAAC,EAAC,CACjB,KAAK0iD,EACH19C,EAAKhF,CAAC,EAAI,IAAM,UAAUsjD,EAAMtjD,CAAC,EAAE,CAAC,CAAC,EACrC,MACF,KAAKyiD,EACHz9C,EAAKhF,CAAC,EAAI,IAAMsjD,EAAMtjD,CAAC,EAAE,CAAC,EAAE,OAC5B,MACF,KAAK2iD,EACH39C,EAAKhF,CAAC,EAAI,IAAMsjD,EAAMtjD,CAAC,EAAE,CAAC,EAAE,OAC5B,KACH,CAEH,OAAOgF,EAAK,KAAK,GAAI,EAAE,QAAQ,OAAQ,GAAG,CAC5C,EAWAw9C,EAAiB,UAAU,eAAiB,SAASK,EAAOtqC,EAAO,CAKjE,QAJI+qC,EAAQ,CAAA,EACRoH,EAAc,EACdxG,EAAU,EACV9mC,EAAS7E,EAAM,MAAM,KAAK,EACrBvY,EAAI,EAAGA,EAAIod,EAAO,OAAQpd,IAAK,CAGtC,IAAIikB,EAAQ7G,EAAOpd,CAAC,EAAE,UAAU,CAAC,EACjC,OAAQod,EAAOpd,CAAC,EAAE,OAAO,CAAC,EAAC,CACzB,IAAK,IACH,GAAI,CACFsjD,EAAMoH,GAAa,EACf,IAAIlI,EAAiB,KAAKE,EAAa,UAAUz+B,CAAK,CAAC,CAC5D,MAAC,CAEA,MAAM,IAAI,MAAM,qCAAuCA,CAAK,CAC7D,CACD,MACF,IAAK,IAEL,IAAK,IACH,IAAI,EAAI,SAASA,EAAO,EAAE,EAC1B,GAAI,MAAM,CAAC,GAAK,EAAI,EAClB,MAAM,IAAI,MAAM,qCAAuCA,CAAK,EAE9D,IAAIjf,EAAO69C,EAAM,UAAUqB,EAASA,GAAW,CAAC,EAC5C9mC,EAAOpd,CAAC,EAAE,OAAO,CAAC,GAAK,IACzBsjD,EAAMoH,GAAa,EAAI,IAAIlI,EAAiB,KAAKG,EAAY39C,CAAI,EAEjEs+C,EAAMoH,GAAa,EAAI,IAAIlI,EAAiB,KAAKC,EAAaz9C,CAAI,EAEpE,MACF,QAGE,GAAIoY,EAAOpd,CAAC,EACV,MAAM,IAAI,MAAM,6CACAod,EAAOpd,CAAC,CAAC,CAE9B,EAEH,GAAIkkD,GAAWrB,EAAM,OACnB,MAAM,IAAI,MAAM,iBAAmBqB,EAC/B,wCAA0CrB,EAAM,OAAS,IAAI,EAEnE,OAAOS,CACT,EAaAd,EAAiB,UAAU,WAAa,SAASx9C,EAAMy1C,EAASuP,EAAK,CAEnE,GAAIhlD,GAAQ,MAAQy1C,GAAW,MAAQuP,GAAO,KAC5C,MAAM,IAAI,MAAM,0BAA0B,EAI5C,OADAA,EAAM,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAKhlD,EAAK,MAAM,CAAC,EACxCA,GAAQy1C,EAEH,EACGz1C,EAAK,OAGNA,EAAK,UAAUglD,EAAKA,EAAMvP,EAAQ,MAAM,GAAKA,EAE/CuP,EAGA,KAAK,aAAahlD,EAAMy1C,EAASuP,CAAG,EANpC,EAQX,EAYAxH,EAAiB,UAAU,aAAe,SAASx9C,EAAMy1C,EAASuP,EAAK,CACrE,GAAIvP,EAAQ,OAAS,KAAK,cACxB,MAAM,IAAI,MAAM,oCAAoC,EAItD,IAAI,EAAI,KAAK,gBAAgBA,CAAO,EAEhCqM,EAAM,KAUV,SAAS6D,EAAkBpuD,EAAGyD,EAAG,CAC/B,IAAI4qD,EAAWruD,EAAIk+C,EAAQ,OACvBoQ,EAAY,KAAK,IAAIb,EAAMhqD,CAAC,EAChC,OAAK8mD,EAAI,eAIF8D,EAAYC,EAAY/D,EAAI,eAF1B+D,EAAY,EAAMD,CAG5B,CAGD,IAAIE,EAAkB,KAAK,gBAEvBC,EAAW/lD,EAAK,QAAQy1C,EAASuP,CAAG,EACpCe,GAAY,KACdD,EAAkB,KAAK,IAAIH,EAAkB,EAAGI,CAAQ,EAAGD,CAAe,EAE1EC,EAAW/lD,EAAK,YAAYy1C,EAASuP,EAAMvP,EAAQ,MAAM,EACrDsQ,GAAY,KACdD,EACI,KAAK,IAAIH,EAAkB,EAAGI,CAAQ,EAAGD,CAAe,IAKhE,IAAIE,EAAY,GAAMvQ,EAAQ,OAAS,EACvCsQ,EAAW,GAKX,QAHIE,EAASC,EACTC,EAAU1Q,EAAQ,OAASz1C,EAAK,OAChComD,EACK71B,EAAI,EAAGA,EAAIklB,EAAQ,OAAQllB,IAAK,CAMvC,IAFA01B,EAAU,EACVC,EAAUC,EACHF,EAAUC,GACXP,EAAkBp1B,EAAGy0B,EAAMkB,CAAO,GAAKJ,EACzCG,EAAUC,EAEVC,EAAUD,EAEZA,EAAU,KAAK,OAAOC,EAAUF,GAAW,EAAIA,CAAO,EAGxDE,EAAUD,EACV,IAAI/zD,EAAQ,KAAK,IAAI,EAAG6yD,EAAMkB,EAAU,CAAC,EACrCG,EAAS,KAAK,IAAIrB,EAAMkB,EAASlmD,EAAK,MAAM,EAAIy1C,EAAQ,OAExD6Q,EAAK,MAAMD,EAAS,CAAC,EACzBC,EAAGD,EAAS,CAAC,GAAK,GAAK91B,GAAK,EAC5B,QAAS/1B,EAAI6rD,EAAQ7rD,GAAKrI,EAAOqI,IAAK,CAGpC,IAAI+rD,EAAY,EAAEvmD,EAAK,OAAOxF,EAAI,CAAC,CAAC,EAQpC,GAPI+1B,IAAM,EACR+1B,EAAG9rD,CAAC,GAAM8rD,EAAG9rD,EAAI,CAAC,GAAK,EAAK,GAAK+rD,EAEjCD,EAAG9rD,CAAC,GAAO8rD,EAAG9rD,EAAI,CAAC,GAAK,EAAK,GAAK+rD,IACvBH,EAAQ5rD,EAAI,CAAC,EAAI4rD,EAAQ5rD,CAAC,IAAM,EAAK,GACxC4rD,EAAQ5rD,EAAI,CAAC,EAEnB8rD,EAAG9rD,CAAC,EAAIwrD,EAAW,CACrB,IAAIrB,EAAQgB,EAAkBp1B,EAAG/1B,EAAI,CAAC,EAGtC,GAAImqD,GAASmB,EAIX,GAFAA,EAAkBnB,EAClBoB,EAAWvrD,EAAI,EACXurD,EAAWf,EAEb7yD,EAAQ,KAAK,IAAI,EAAG,EAAI6yD,EAAMe,CAAQ,MAGtC,QAMR,GAAIJ,EAAkBp1B,EAAI,EAAGy0B,CAAG,EAAIc,EAClC,MAEFM,EAAUE,EAEZ,OAAOP,CACT,EASAvI,EAAiB,UAAU,gBAAkB,SAAS/H,EAAS,CAE7D,QADIz+C,EAAI,CAAA,EACCxH,EAAI,EAAGA,EAAIimD,EAAQ,OAAQjmD,IAClCwH,EAAEy+C,EAAQ,OAAOjmD,CAAC,CAAC,EAAI,EAEzB,QAASA,EAAI,EAAGA,EAAIimD,EAAQ,OAAQjmD,IAClCwH,EAAEy+C,EAAQ,OAAOjmD,CAAC,CAAC,GAAK,GAAMimD,EAAQ,OAASjmD,EAAI,EAErD,OAAOwH,CACT,EAaAwmD,EAAiB,UAAU,kBAAoB,SAASgJ,EAAOxmD,EAAM,CACnE,GAAIA,EAAK,QAAU,EAGnB,IAAIwmD,EAAM,SAAW,KACnB,MAAM,MAAM,uBAAuB,EAOrC,QALI/Q,EAAUz1C,EAAK,UAAUwmD,EAAM,OAAQA,EAAM,OAASA,EAAM,OAAO,EACnEluB,EAAU,EAIPt4B,EAAK,QAAQy1C,CAAO,GAAKz1C,EAAK,YAAYy1C,CAAO,GACjDA,EAAQ,OAAS,KAAK,cAAgB,KAAK,aAC3C,KAAK,cACVnd,GAAW,KAAK,aAChBmd,EAAUz1C,EAAK,UAAUwmD,EAAM,OAASluB,EACfkuB,EAAM,OAASA,EAAM,QAAUluB,CAAO,EAGjEA,GAAW,KAAK,aAGhB,IAAIpf,EAASlZ,EAAK,UAAUwmD,EAAM,OAASluB,EAASkuB,EAAM,MAAM,EAC5DttC,GACFstC,EAAM,MAAM,QAAQ,IAAIhJ,EAAiB,KAAKG,EAAYzkC,CAAM,CAAC,EAGnE,IAAIutC,EAASzmD,EAAK,UAAUwmD,EAAM,OAASA,EAAM,QACrBA,EAAM,OAASA,EAAM,QAAUluB,CAAO,EAC9DmuB,GACFD,EAAM,MAAM,KAAK,IAAIhJ,EAAiB,KAAKG,EAAY8I,CAAM,CAAC,EAIhED,EAAM,QAAUttC,EAAO,OACvBstC,EAAM,QAAUttC,EAAO,OAEvBstC,EAAM,SAAWttC,EAAO,OAASutC,EAAO,OACxCD,EAAM,SAAWttC,EAAO,OAASutC,EAAO,OAC1C,EAyBAjJ,EAAiB,UAAU,WAAa,SAAShrD,EAAGk0D,EAAOC,EAAO,CAChE,IAAI9I,EAAOS,EACX,GAAI,OAAO9rD,GAAK,UAAY,OAAOk0D,GAAS,UACxC,OAAOC,EAAS,IAGlB9I,EAA8BrrD,EAC9B8rD,EAAQ,KAAK,UAAUT,EAA6B6I,EAAQ,EAAI,EAC5DpI,EAAM,OAAS,IACjB,KAAK,qBAAqBA,CAAK,EAC/B,KAAK,uBAAuBA,CAAK,WAE1B9rD,GAAK,OAAOA,GAAK,UAAY,OAAOk0D,EAAS,KACpD,OAAOC,EAAS,IAGlBrI,EAAuD9rD,EACvDqrD,EAAQ,KAAK,WAAWS,CAAK,UACpB,OAAO9rD,GAAK,UAAYk0D,GAAS,OAAOA,GAAS,UACxD,OAAOC,EAAS,IAElB9I,EAA8BrrD,EAC9B8rD,EAAuDoI,UAC9C,OAAOl0D,GAAK,UAAY,OAAOk0D,GAAS,UAC/CC,GAAS,OAAOA,GAAS,SAG3B9I,EAA8BrrD,EAC9B8rD,EAAuDqI,MAEvD,OAAM,IAAI,MAAM,oCAAoC,EAGtD,GAAIrI,EAAM,SAAW,EACnB,MAAO,GAYT,QAVIsI,EAAU,CAAA,EACVJ,EAAQ,IAAIhJ,EAAiB,UAC7BqJ,EAAkB,EAClBC,EAAc,EACdC,EAAc,EAIdC,EAAgBnJ,EAChBoJ,EAAiBpJ,EACZ7iD,EAAI,EAAGA,EAAIsjD,EAAM,OAAQtjD,IAAK,CACrC,IAAIksD,EAAY5I,EAAMtjD,CAAC,EAAE,CAAC,EACtBmsD,EAAY7I,EAAMtjD,CAAC,EAAE,CAAC,EAQ1B,OANI,CAAC6rD,GAAmBK,IAAcvJ,IAEpC6I,EAAM,OAASM,EACfN,EAAM,OAASO,GAGTG,EAAS,CACf,KAAKxJ,EACH8I,EAAM,MAAMK,GAAiB,EAAIvI,EAAMtjD,CAAC,EACxCwrD,EAAM,SAAWW,EAAU,OAC3BF,EAAiBA,EAAe,UAAU,EAAGF,CAAW,EAAII,EAC3CF,EAAe,UAAUF,CAAW,EACrD,MACF,KAAKtJ,EACH+I,EAAM,SAAWW,EAAU,OAC3BX,EAAM,MAAMK,GAAiB,EAAIvI,EAAMtjD,CAAC,EACxCisD,EAAiBA,EAAe,UAAU,EAAGF,CAAW,EACvCE,EAAe,UAAUF,EACrBI,EAAU,MAAM,EACrC,MACF,KAAKxJ,EACCwJ,EAAU,QAAU,EAAI,KAAK,cAC7BN,GAAmBvI,EAAM,QAAUtjD,EAAI,GAEzCwrD,EAAM,MAAMK,GAAiB,EAAIvI,EAAMtjD,CAAC,EACxCwrD,EAAM,SAAWW,EAAU,OAC3BX,EAAM,SAAWW,EAAU,QAClBA,EAAU,QAAU,EAAI,KAAK,cAElCN,IACF,KAAK,kBAAkBL,EAAOQ,CAAa,EAC3CJ,EAAQ,KAAKJ,CAAK,EAClBA,EAAQ,IAAIhJ,EAAiB,UAC7BqJ,EAAkB,EAKlBG,EAAgBC,EAChBH,EAAcC,GAGlB,KACH,CAGGG,IAAcxJ,IAChBoJ,GAAeK,EAAU,QAEvBD,IAAczJ,IAChBsJ,GAAeI,EAAU,QAI7B,OAAIN,IACF,KAAK,kBAAkBL,EAAOQ,CAAa,EAC3CJ,EAAQ,KAAKJ,CAAK,GAGbI,CACT,EAQApJ,EAAiB,UAAU,eAAiB,SAASoJ,EAAS,CAG5D,QADIQ,EAAc,CAAA,EACTpsD,EAAI,EAAGA,EAAI4rD,EAAQ,OAAQ5rD,IAAK,CACvC,IAAIwrD,EAAQI,EAAQ5rD,CAAC,EACjBqsD,EAAY,IAAI7J,EAAiB,UACrC6J,EAAU,MAAQ,GAClB,QAASxgD,EAAI,EAAGA,EAAI2/C,EAAM,MAAM,OAAQ3/C,IACtCwgD,EAAU,MAAMxgD,CAAC,EACb,IAAI22C,EAAiB,KAAKgJ,EAAM,MAAM3/C,CAAC,EAAE,CAAC,EAAG2/C,EAAM,MAAM3/C,CAAC,EAAE,CAAC,CAAC,EAEpEwgD,EAAU,OAASb,EAAM,OACzBa,EAAU,OAASb,EAAM,OACzBa,EAAU,QAAUb,EAAM,QAC1Ba,EAAU,QAAUb,EAAM,QAC1BY,EAAYpsD,CAAC,EAAIqsD,EAEnB,OAAOD,CACT,EAWA5J,EAAiB,UAAU,YAAc,SAASoJ,EAAS5mD,EAAM,CAC/D,GAAI4mD,EAAQ,QAAU,EACpB,MAAO,CAAC5mD,EAAM,CAAA,CAAE,EAIlB4mD,EAAU,KAAK,eAAeA,CAAO,EAErC,IAAIU,EAAc,KAAK,iBAAiBV,CAAO,EAC/C5mD,EAAOsnD,EAActnD,EAAOsnD,EAE5B,KAAK,eAAeV,CAAO,EAO3B,QAFIrzC,EAAQ,EACRg0C,EAAU,CAAA,EACLvsD,EAAI,EAAGA,EAAI4rD,EAAQ,OAAQ5rD,IAAK,CACvC,IAAIwsD,EAAeZ,EAAQ5rD,CAAC,EAAE,OAASuY,EACnCsqC,EAAQ,KAAK,WAAW+I,EAAQ5rD,CAAC,EAAE,KAAK,EACxCysD,EACAC,EAAU,GAkBd,GAjBI7J,EAAM,OAAS,KAAK,eAGtB4J,EAAY,KAAK,WAAWznD,EAAM69C,EAAM,UAAU,EAAG,KAAK,aAAa,EAC3C2J,CAAY,EACpCC,GAAa,KACfC,EAAU,KAAK,WAAW1nD,EACtB69C,EAAM,UAAUA,EAAM,OAAS,KAAK,aAAa,EACjD2J,EAAe3J,EAAM,OAAS,KAAK,aAAa,GAChD6J,GAAW,IAAMD,GAAaC,KAEhCD,EAAY,MAIhBA,EAAY,KAAK,WAAWznD,EAAM69C,EAAO2J,CAAY,EAEnDC,GAAa,GAEfF,EAAQvsD,CAAC,EAAI,GAEbuY,GAASqzC,EAAQ5rD,CAAC,EAAE,QAAU4rD,EAAQ5rD,CAAC,EAAE,YACpC,CAELusD,EAAQvsD,CAAC,EAAI,GACbuY,EAAQk0C,EAAYD,EACpB,IAAI1J,EAMJ,GALI4J,GAAW,GACb5J,EAAQ99C,EAAK,UAAUynD,EAAWA,EAAY5J,EAAM,MAAM,EAE1DC,EAAQ99C,EAAK,UAAUynD,EAAWC,EAAU,KAAK,aAAa,EAE5D7J,GAASC,EAEX99C,EAAOA,EAAK,UAAU,EAAGynD,CAAS,EAC3B,KAAK,WAAWb,EAAQ5rD,CAAC,EAAE,KAAK,EAChCgF,EAAK,UAAUynD,EAAY5J,EAAM,MAAM,MACzC,CAGL,IAAIS,EAAQ,KAAK,UAAUT,EAAOC,EAAO,EAAK,EAC9C,GAAID,EAAM,OAAS,KAAK,eACpB,KAAK,iBAAiBS,CAAK,EAAIT,EAAM,OACrC,KAAK,sBAEP0J,EAAQvsD,CAAC,EAAI,OACR,CACL,KAAK,6BAA6BsjD,CAAK,EAGvC,QAFIqJ,EAAS,EACTC,EACK/gD,EAAI,EAAGA,EAAI+/C,EAAQ5rD,CAAC,EAAE,MAAM,OAAQ6L,IAAK,CAChD,IAAI1W,EAAMy2D,EAAQ5rD,CAAC,EAAE,MAAM6L,CAAC,EACxB1W,EAAI,CAAC,IAAMwtD,IACbiK,EAAS,KAAK,YAAYtJ,EAAOqJ,CAAM,GAErCx3D,EAAI,CAAC,IAAMutD,EACb19C,EAAOA,EAAK,UAAU,EAAGynD,EAAYG,CAAM,EAAIz3D,EAAI,CAAC,EAC7C6P,EAAK,UAAUynD,EAAYG,CAAM,EAC/Bz3D,EAAI,CAAC,IAAMstD,IACpBz9C,EAAOA,EAAK,UAAU,EAAGynD,EAAYG,CAAM,EACpC5nD,EAAK,UAAUynD,EAAY,KAAK,YAAYnJ,EACxCqJ,EAASx3D,EAAI,CAAC,EAAE,MAAM,CAAC,GAEhCA,EAAI,CAAC,IAAMstD,IACbkK,GAAUx3D,EAAI,CAAC,EAAE,YAQ7B,OAAA6P,EAAOA,EAAK,UAAUsnD,EAAY,OAAQtnD,EAAK,OAASsnD,EAAY,MAAM,EACnE,CAACtnD,EAAMunD,CAAO,CACvB,EASA/J,EAAiB,UAAU,iBAAmB,SAASoJ,EAAS,CAG9D,QAFIiB,EAAgB,KAAK,aACrBP,EAAc,GACTtsD,EAAI,EAAGA,GAAK6sD,EAAe7sD,IAClCssD,GAAe,OAAO,aAAatsD,CAAC,EAItC,QAASA,EAAI,EAAGA,EAAI4rD,EAAQ,OAAQ5rD,IAClC4rD,EAAQ5rD,CAAC,EAAE,QAAU6sD,EACrBjB,EAAQ5rD,CAAC,EAAE,QAAU6sD,EAIvB,IAAIrB,EAAQI,EAAQ,CAAC,EACjBtI,EAAQkI,EAAM,MAClB,GAAIlI,EAAM,QAAU,GAAKA,EAAM,CAAC,EAAE,CAAC,GAAKX,EAEtCW,EAAM,QAAQ,IAAId,EAAiB,KAAKG,EAAY2J,CAAW,CAAC,EAChEd,EAAM,QAAUqB,EAChBrB,EAAM,QAAUqB,EAChBrB,EAAM,SAAWqB,EACjBrB,EAAM,SAAWqB,UACRA,EAAgBvJ,EAAM,CAAC,EAAE,CAAC,EAAE,OAAQ,CAE7C,IAAIzkB,EAAcguB,EAAgBvJ,EAAM,CAAC,EAAE,CAAC,EAAE,OAC9CA,EAAM,CAAC,EAAE,CAAC,EAAIgJ,EAAY,UAAUhJ,EAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAIA,EAAM,CAAC,EAAE,CAAC,EACpEkI,EAAM,QAAU3sB,EAChB2sB,EAAM,QAAU3sB,EAChB2sB,EAAM,SAAW3sB,EACjB2sB,EAAM,SAAW3sB,EAMnB,GAFA2sB,EAAQI,EAAQA,EAAQ,OAAS,CAAC,EAClCtI,EAAQkI,EAAM,MACVlI,EAAM,QAAU,GAAKA,EAAMA,EAAM,OAAS,CAAC,EAAE,CAAC,GAAKX,EAErDW,EAAM,KAAK,IAAId,EAAiB,KAAKG,EAAY2J,CAAW,CAAC,EAC7Dd,EAAM,SAAWqB,EACjBrB,EAAM,SAAWqB,UACRA,EAAgBvJ,EAAMA,EAAM,OAAS,CAAC,EAAE,CAAC,EAAE,OAAQ,CAE5D,IAAIzkB,EAAcguB,EAAgBvJ,EAAMA,EAAM,OAAS,CAAC,EAAE,CAAC,EAAE,OAC7DA,EAAMA,EAAM,OAAS,CAAC,EAAE,CAAC,GAAKgJ,EAAY,UAAU,EAAGztB,CAAW,EAClE2sB,EAAM,SAAW3sB,EACjB2sB,EAAM,SAAW3sB,EAGnB,OAAOytB,CACT,EASA9J,EAAiB,UAAU,eAAiB,SAASoJ,EAAS,CAE5D,QADIkB,EAAa,KAAK,cACb9sD,EAAI,EAAGA,EAAI4rD,EAAQ,OAAQ5rD,IAClC,GAAI,EAAA4rD,EAAQ5rD,CAAC,EAAE,SAAW8sD,GAG1B,KAAIC,EAAWnB,EAAQ5rD,CAAC,EAExB4rD,EAAQ,OAAO5rD,IAAK,CAAC,EAIrB,QAHIgtD,EAASD,EAAS,OAClBE,EAASF,EAAS,OAClBG,EAAa,GACVH,EAAS,MAAM,SAAW,GAAG,CAElC,IAAIvB,EAAQ,IAAIhJ,EAAiB,UAC7B2K,EAAQ,GAOZ,IANA3B,EAAM,OAASwB,EAASE,EAAW,OACnC1B,EAAM,OAASyB,EAASC,EAAW,OAC/BA,IAAe,KACjB1B,EAAM,QAAUA,EAAM,QAAU0B,EAAW,OAC3C1B,EAAM,MAAM,KAAK,IAAIhJ,EAAiB,KAAKG,EAAYuK,CAAU,CAAC,GAE7DH,EAAS,MAAM,SAAW,GAC1BvB,EAAM,QAAUsB,EAAa,KAAK,cAAc,CACrD,IAAIZ,EAAYa,EAAS,MAAM,CAAC,EAAE,CAAC,EAC/BZ,EAAYY,EAAS,MAAM,CAAC,EAAE,CAAC,EAC/Bb,IAAcxJ,GAEhB8I,EAAM,SAAWW,EAAU,OAC3Bc,GAAUd,EAAU,OACpBX,EAAM,MAAM,KAAKuB,EAAS,MAAM,MAAK,CAAE,EACvCI,EAAQ,IACCjB,IAAczJ,GAAe+I,EAAM,MAAM,QAAU,GACnDA,EAAM,MAAM,CAAC,EAAE,CAAC,GAAK7I,GACrBwJ,EAAU,OAAS,EAAIW,GAEhCtB,EAAM,SAAWW,EAAU,OAC3Ba,GAAUb,EAAU,OACpBgB,EAAQ,GACR3B,EAAM,MAAM,KAAK,IAAIhJ,EAAiB,KAAK0J,EAAWC,CAAS,CAAC,EAChEY,EAAS,MAAM,UAGfZ,EAAYA,EAAU,UAAU,EAC5BW,EAAatB,EAAM,QAAU,KAAK,YAAY,EAClDA,EAAM,SAAWW,EAAU,OAC3Ba,GAAUb,EAAU,OAChBD,IAAcvJ,GAChB6I,EAAM,SAAWW,EAAU,OAC3Bc,GAAUd,EAAU,QAEpBgB,EAAQ,GAEV3B,EAAM,MAAM,KAAK,IAAIhJ,EAAiB,KAAK0J,EAAWC,CAAS,CAAC,EAC5DA,GAAaY,EAAS,MAAM,CAAC,EAAE,CAAC,EAClCA,EAAS,MAAM,QAEfA,EAAS,MAAM,CAAC,EAAE,CAAC,EACfA,EAAS,MAAM,CAAC,EAAE,CAAC,EAAE,UAAUZ,EAAU,MAAM,GAKzDe,EAAa,KAAK,WAAW1B,EAAM,KAAK,EACxC0B,EACIA,EAAW,UAAUA,EAAW,OAAS,KAAK,YAAY,EAE9D,IAAIE,EAAc,KAAK,WAAWL,EAAS,KAAK,EACzB,UAAU,EAAG,KAAK,YAAY,EACjDK,IAAgB,KAClB5B,EAAM,SAAW4B,EAAY,OAC7B5B,EAAM,SAAW4B,EAAY,OACzB5B,EAAM,MAAM,SAAW,GACvBA,EAAM,MAAMA,EAAM,MAAM,OAAS,CAAC,EAAE,CAAC,IAAM7I,EAC7C6I,EAAM,MAAMA,EAAM,MAAM,OAAS,CAAC,EAAE,CAAC,GAAK4B,EAE1C5B,EAAM,MAAM,KAAK,IAAIhJ,EAAiB,KAAKG,EAAYyK,CAAW,CAAC,GAGlED,GACHvB,EAAQ,OAAO,EAAE5rD,EAAG,EAAGwrD,CAAK,GAIpC,EAQAhJ,EAAiB,UAAU,aAAe,SAASoJ,EAAS,CAE1D,QADI5mD,EAAO,CAAA,EACFhF,EAAI,EAAGA,EAAI4rD,EAAQ,OAAQ5rD,IAClCgF,EAAKhF,CAAC,EAAI4rD,EAAQ5rD,CAAC,EAErB,OAAOgF,EAAK,KAAK,EAAE,CACrB,EASAw9C,EAAiB,UAAU,eAAiB,SAAS6K,EAAU,CAC7D,IAAIzB,EAAU,CAAA,EACd,GAAI,CAACyB,EACH,OAAOzB,EAKT,QAHI5mD,EAAOqoD,EAAS,MAAM;AAAA,CAAI,EAC1BC,EAAc,EACdC,EAAc,uCACXD,EAActoD,EAAK,QAAQ,CAChC,IAAIrF,EAAIqF,EAAKsoD,CAAW,EAAE,MAAMC,CAAW,EAC3C,GAAI,CAAC5tD,EACH,MAAM,IAAI,MAAM,yBAA2BqF,EAAKsoD,CAAW,CAAC,EAE9D,IAAI9B,EAAQ,IAAIhJ,EAAiB,UAyBjC,IAxBAoJ,EAAQ,KAAKJ,CAAK,EAClBA,EAAM,OAAS,SAAS7rD,EAAE,CAAC,EAAG,EAAE,EAC5BA,EAAE,CAAC,IAAM,IACX6rD,EAAM,SACNA,EAAM,QAAU,GACP7rD,EAAE,CAAC,GAAK,IACjB6rD,EAAM,QAAU,GAEhBA,EAAM,SACNA,EAAM,QAAU,SAAS7rD,EAAE,CAAC,EAAG,EAAE,GAGnC6rD,EAAM,OAAS,SAAS7rD,EAAE,CAAC,EAAG,EAAE,EAC5BA,EAAE,CAAC,IAAM,IACX6rD,EAAM,SACNA,EAAM,QAAU,GACP7rD,EAAE,CAAC,GAAK,IACjB6rD,EAAM,QAAU,GAEhBA,EAAM,SACNA,EAAM,QAAU,SAAS7rD,EAAE,CAAC,EAAG,EAAE,GAEnC2tD,IAEOA,EAActoD,EAAK,QAAQ,CAChC,IAAIwoD,EAAOxoD,EAAKsoD,CAAW,EAAE,OAAO,CAAC,EACrC,GAAI,CACF,IAAI5mD,EAAO,UAAU1B,EAAKsoD,CAAW,EAAE,UAAU,CAAC,CAAC,CACpD,MAAC,CAEA,MAAM,IAAI,MAAM,qCAAuC5mD,CAAI,CAC5D,CACD,GAAI8mD,GAAQ,IAEVhC,EAAM,MAAM,KAAK,IAAIhJ,EAAiB,KAAKC,EAAa/7C,CAAI,CAAC,UACpD8mD,GAAQ,IAEjBhC,EAAM,MAAM,KAAK,IAAIhJ,EAAiB,KAAKE,EAAah8C,CAAI,CAAC,UACpD8mD,GAAQ,IAEjBhC,EAAM,MAAM,KAAK,IAAIhJ,EAAiB,KAAKG,EAAYj8C,CAAI,CAAC,MACvD,IAAI8mD,GAAQ,IAEjB,MACK,GAAIA,IAAS,GAIlB,MAAM,IAAI,MAAM,uBAAyBA,EAAO,SAAW9mD,CAAI,EAEjE4mD,KAGJ,OAAO1B,CACT,EAOApJ,EAAiB,UAAY,UAAW,CAEtC,KAAK,MAAQ,GAEb,KAAK,OAAS,KAEd,KAAK,OAAS,KAEd,KAAK,QAAU,EAEf,KAAK,QAAU,CACjB,EASAA,EAAiB,UAAU,UAAU,SAAW,UAAW,CACzD,IAAIiL,EAASC,EACT,KAAK,UAAY,EACnBD,EAAU,KAAK,OAAS,KACf,KAAK,SAAW,EACzBA,EAAU,KAAK,OAAS,EAExBA,EAAW,KAAK,OAAS,EAAK,IAAM,KAAK,QAEvC,KAAK,UAAY,EACnBC,EAAU,KAAK,OAAS,KACf,KAAK,SAAW,EACzBA,EAAU,KAAK,OAAS,EAExBA,EAAW,KAAK,OAAS,EAAK,IAAM,KAAK,QAK3C,QAHI1oD,EAAO,CAAC,OAASyoD,EAAU,KAAOC,EAAU;AAAA,CAAO,EACnD9K,EAEK5iD,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,IAAK,CAC1C,OAAQ,KAAK,MAAMA,CAAC,EAAE,CAAC,EAAC,CACtB,KAAK0iD,EACHE,EAAK,IACL,MACF,KAAKH,EACHG,EAAK,IACL,MACF,KAAKD,EACHC,EAAK,IACL,KACH,CACD59C,EAAKhF,EAAI,CAAC,EAAI4iD,EAAK,UAAU,KAAK,MAAM5iD,CAAC,EAAE,CAAC,CAAC,EAAI;AAAA,EAEnD,OAAOgF,EAAK,KAAK,EAAE,EAAE,QAAQ,OAAQ,GAAG,CAC1C,EAIAhR,EAAA,QAAiBwuD,EACjBxuD,EAAO,QAAQ,iBAAsBwuD,EACrCxuD,EAAO,QAAQ,YAAiByuD,EAChCzuD,EAAO,QAAQ,YAAiB0uD,EAChC1uD,EAAO,QAAQ,WAAgB2uD,QCxqE/B,IAAIxF,GAAaC,IAAQA,GAAK,WAAe,UAAY,CACrD,IAAIC,EAAgB,SAAU9nB,EAAG9N,EAAG,CAChC,OAAA41B,EAAgB,OAAO,gBAClB,CAAE,UAAW,CAAA,aAAgB,OAAS,SAAU9nB,EAAG9N,EAAG,CAAE8N,EAAE,UAAY9N,CAAE,GACzE,SAAU8N,EAAG9N,EAAG,CAAE,QAAS9jB,KAAK8jB,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAG9jB,CAAC,IAAG4xB,EAAE5xB,CAAC,EAAI8jB,EAAE9jB,CAAC,IAC1F05C,EAAc9nB,EAAG9N,CAAC,CACjC,EACI,OAAO,SAAU8N,EAAG9N,EAAG,CACnB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5F41B,EAAc9nB,EAAG9N,CAAC,EAClB,SAAS61B,GAAK,CAAE,KAAK,YAAc/nB,CAAI,CACvCA,EAAE,UAAY9N,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAK61B,EAAG,UAAY71B,EAAE,UAAW,IAAI61B,EACvF,CACA,IACA,OAAO,eAAe5uB,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5D,IAAIgvB,GAAYV,GACZY,GAAQD,GACRgQ,GAAU9P,GACV+P,GAAiB9P,GACjB+P,GAA+B,SAAU5P,EAAQ,CACjDd,GAAU0Q,EAAe5P,CAAM,EAC/B,SAAS4P,EAAc71D,EAAO,CAC1B,IAAIkmD,EAAQD,EAAO,KAAK,KAAMjmD,CAAK,GAAK,KACxC,OAAAkmD,EAAM,MAAQ,CACV,MAAOA,EAAM,MAAM,KAC/B,EACQA,EAAM,SAAWA,EAAM,SAAS,KAAKA,CAAK,EAC1CA,EAAM,KAAOA,EAAM,KAAK,KAAKA,CAAK,EAC3BA,CACV,CACD,OAAA2P,EAAc,UAAU,mBAAqB,UAAY,CACrD,IAAI52D,EAAQ,KAAK,MAAM,MACnBA,IAAU,KAAK,MAAM,OACrB,KAAK,SAAS,CAAE,MAAOA,CAAO,CAAA,CAE1C,EACI42D,EAAc,UAAU,SAAW,SAAU52D,EAAO,CAChD,KAAK,SAAS,CACV,MAAOA,CACnB,CAAS,EACG,KAAK,MAAM,UACX,KAAK,MAAM,SAASA,CAAK,CAErC,EACI42D,EAAc,UAAU,KAAO,UAAY,CACvC,IAAI/G,EAAM,IAAI8G,GACVE,EAAW,KAAK,MAAM,MAAM,CAAC,EAC7BC,EAAW,KAAK,MAAM,MAAM,CAAC,EACjC,GAAID,EAAS,SAAW,GAAKC,EAAS,SAAW,EAC7C,MAAO,GAEX,IAAIr/B,EAAOo4B,EAAI,UAAUgH,EAAUC,CAAQ,EAC3CjH,EAAI,qBAAqBp4B,CAAI,EAC7B,IAAIs/B,EAAc,KAAK,oBAAoBt/B,CAAI,EAC3Cu/B,EAAqB,KAAK,eAAeD,CAAW,EACxD,OAAOC,CACf,EACIJ,EAAc,UAAU,oBAAsB,SAAUn/B,EAAM,CAC1D,IAAIw/B,EAAI,CACJ,WAAY,EACZ,YAAa,GACb,YAAa,CACzB,EACYF,EAAc,CACd,KAAM,CAAE,EACR,MAAO,CAAE,CACrB,EACYzjD,EAAS,CACT,KAAM,EACN,MAAO,CACnB,EACQ,OAAAmkB,EAAK,QAAQ,SAAUrI,EAAO,CAC1B,IAAI8nC,EAAY9nC,EAAM,CAAC,EACnBrhB,EAAOqhB,EAAM,CAAC,EACd9B,EAAQvf,EAAK,MAAM;AAAA,CAAI,EAAE,OAAS,EAEtC,GAAIA,EAAK,SAAW,EAGpB,KAAIopD,EAAYppD,EAAK,CAAC,EAClBqpD,EAAWrpD,EAAKA,EAAK,OAAS,CAAC,EAC/BspD,EAAmB,EACvB,OAAQH,EAAS,CACb,KAAKD,EAAE,WACH3jD,EAAO,MAAQga,EACfha,EAAO,OAASga,EAChB,MACJ,KAAK2pC,EAAE,YAECE,IAAc;AAAA,IACd7jD,EAAO,OACPga,KAEJ+pC,EAAmB/pC,EAEf+pC,IAAqB,GACrBN,EAAY,MAAM,KAAK,CACnB,UAAWzjD,EAAO,MAClB,QAASA,EAAO,KAC5C,CAAyB,EAGD8jD,IAAa;AAAA,IACbC,GAAoB,GAExBN,EAAY,KAAK,KAAK,CAClB,UAAWzjD,EAAO,KAClB,QAASA,EAAO,KAAO+jD,CAC/C,CAAqB,EACD/jD,EAAO,MAAQga,EACf,MACJ,KAAK2pC,EAAE,YAECE,IAAc;AAAA,IACd7jD,EAAO,QACPga,KAEJ+pC,EAAmB/pC,EAEf+pC,IAAqB,GACrBN,EAAY,KAAK,KAAK,CAClB,UAAWzjD,EAAO,KAClB,QAASA,EAAO,IAC5C,CAAyB,EAGD8jD,IAAa;AAAA,IACbC,GAAoB,GAExBN,EAAY,MAAM,KAAK,CACnB,UAAWzjD,EAAO,MAClB,QAASA,EAAO,MAAQ+jD,CAChD,CAAqB,EACD/jD,EAAO,OAASga,EAChB,MACJ,QACI,MAAM,IAAI,MAAM,4BAA4B,CACnD,EACb,CAAS,EACMypC,CACf,EAGIH,EAAc,UAAU,eAAiB,SAAUG,EAAa,CACxDA,IAAgB,SAAUA,EAAc,CAAE,KAAM,GAAI,MAAO,CAAE,CAAA,GAMjE,QALIC,EAAqB,CAAA,EACrBM,EAAe,CACf,KAAM,CAAE,EACR,MAAO,CAAE,CACrB,EACiB/5D,EAAI,EAAGA,EAAIw5D,EAAY,KAAK,OAAQx5D,IAAK,CAC9C,IAAIg6D,EAAY,CACZ,SAAUR,EAAY,KAAKx5D,CAAC,EAAE,UAAY,EAC1C,OAAQw5D,EAAY,KAAKx5D,CAAC,EAAE,QAC5B,KAAM,OACN,UAAW,YAC3B,EACY+5D,EAAa,KAAK,KAAKC,CAAS,EAEpC,QAASh6D,EAAI,EAAGA,EAAIw5D,EAAY,MAAM,OAAQx5D,IAAK,CAC/C,IAAIg6D,EAAY,CACZ,SAAUR,EAAY,MAAMx5D,CAAC,EAAE,UAAY,EAC3C,OAAQw5D,EAAY,MAAMx5D,CAAC,EAAE,QAC7B,KAAM,OACN,UAAW,YAC3B,EACY+5D,EAAa,MAAM,KAAKC,CAAS,EAErC,OAAAP,EAAmB,CAAC,EAAIM,EAAa,KACrCN,EAAmB,CAAC,EAAIM,EAAa,MAC9BN,CACf,EACIJ,EAAc,UAAU,OAAS,UAAY,CACzC,IAAI7gC,EAAU,KAAK,OACnB,OAAQ4wB,GAAM,cAAc+P,GAAQ,QAAS,CAAE,KAAM,KAAK,MAAM,KAAM,UAAW,KAAK,MAAM,UAAW,MAAO,KAAK,MAAM,MAAO,YAAa,KAAK,MAAM,YAAa,OAAQ,KAAK,MAAM,OAAQ,KAAM,KAAK,MAAM,KAAM,MAAO,KAAK,MAAM,MAAO,OAAQ,KAAK,MAAM,OAAQ,MAAO,KAAK,MAAM,MAAO,SAAU,KAAK,MAAM,SAAU,WAAY,KAAK,MAAM,WAAY,SAAU,KAAK,SAAU,QAAS,KAAK,MAAM,QAAS,OAAQ,KAAK,MAAM,OAAQ,SAAU,KAAK,MAAM,SAAU,SAAU,KAAK,MAAM,SAAU,SAAU,KAAK,MAAM,SAAU,SAAU,KAAK,MAAM,SAAU,oBAAqB,KAAK,MAAM,oBAAqB,gBAAiB,KAAK,MAAM,gBAAiB,QAAS,KAAK,MAAM,QAAS,YAAa,KAAK,MAAM,YAAa,YAAa,KAAK,MAAM,YAAa,MAAO,KAAK,MAAM,MAAO,aAAc,KAAK,MAAM,aAAc,WAAY,KAAK,MAAM,WAAY,YAAa,KAAK,MAAM,YAAa,0BAA2B,KAAK,MAAM,0BAA2B,yBAA0B,KAAK,MAAM,yBAA0B,MAAO,KAAK,MAAM,MAAO,QAAS3gC,CAAO,CAAE,CACvjC,EACI6gC,EAAc,UAAY,CACtB,YAAanQ,GAAU,OACvB,YAAaA,GAAU,OACvB,0BAA2BA,GAAU,KACrC,yBAA0BA,GAAU,KACpC,MAAOA,GAAU,KACjB,SAAUA,GAAU,OACpB,OAAQA,GAAU,OAClB,oBAAqBA,GAAU,KAC/B,SAAUA,GAAU,OACpB,SAAUA,GAAU,OACpB,KAAMA,GAAU,OAChB,KAAMA,GAAU,OAChB,UAAWA,GAAU,OACrB,OAAQA,GAAU,KAClB,QAASA,GAAU,KACnB,SAAUA,GAAU,KACpB,SAAUA,GAAU,KACpB,YAAaA,GAAU,OACvB,SAAUA,GAAU,KACpB,aAAcA,GAAU,MACxB,WAAYA,GAAU,OACtB,WAAYA,GAAU,KACtB,gBAAiBA,GAAU,KAC3B,OAAQA,GAAU,OAClB,MAAOA,GAAU,OACjB,QAASA,GAAU,OACnB,MAAOA,GAAU,OACjB,MAAOA,GAAU,MACjB,MAAOA,GAAU,OACjB,YAAaA,GAAU,IAC/B,EACImQ,EAAc,aAAe,CACzB,YAAa,EACb,YAAa,CAAE,EACf,0BAA2B,GAC3B,yBAA0B,GAC1B,MAAO,GACP,SAAU,GACV,OAAQ,QACR,oBAAqB,GACrB,SAAU,KACV,SAAU,KACV,KAAM,GACN,KAAM,aACN,OAAQ,KACR,SAAU,KACV,QAAS,KACT,SAAU,KACV,YAAa,SACb,SAAU,GACV,aAAc,CAAC,EAAG,EAAG,EAAG,CAAC,EACzB,WAAY,CAAE,EACd,WAAY,GACZ,gBAAiB,GACjB,OAAQ,EACR,MAAO,CAAE,EACT,QAAS,EACT,MAAO,SACP,MAAO,CAAC,GAAI,EAAE,EACd,MAAO,QACP,YAAa,EACrB,EACWA,CACX,EAAEjQ,GAAM,SAAS,EACFlvB,GAAA,QAAGm/B,GClPlB,OAAO,eAAeY,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,KAAeA,GAAA,MAAgB,OAC/B,IAAIjR,GAAQR,GACR0R,GAAS/Q,GACb8Q,GAAA,KAAeC,GAAO,QACtB,IAAIf,GAAU9P,GACd4Q,GAAA,MAAgBd,GAAQ,QACxB,IAAAgB,GAAAF,GAAA,QAAkBjR,GAAM,gFCRxB,IAAI,OAAO,+BAA+B,CAAC,UAAU,UAAU,SAAS,cAAc,eAAe,+BAA+B,EAAG,SAAS7oD,EAASO,EAASlB,EAAO,CACzK,IAAIgJ,EAAMrI,EAAQ,YAAY,EACnBA,EAAQ,aAAa,EAChC,IAAIspB,EAAqBtpB,EAAQ,wBAAwB,EAAE,mBACvDi6D,EAAc15D,EAAQ,YAAc,k7EACpC25D,EAAkB35D,EAAQ,gBAAkB,qCAC5C45D,EAAkB55D,EAAQ,gBAAkB,ynEAC5C65D,EAAuB75D,EAAQ,qBAAuB,g8CACtD85D,EAAuB95D,EAAQ,qBAAuB,+KACtD+5D,EAAQ/5D,EAAQ,MAAQ,iDACxBg6D,EAAiBh6D,EAAQ,eAAiB,6EAC1Ci6D,EAAgBj6D,EAAQ,cAAgB,iQACxCk6D,EAAoB,UAAY,CAChC,IAAIC,EAAgB,KAAK,oBAAoB,CACzC,mBAAoBR,EACpB,mBAAoBC,EACpB,eAAgBF,EAChB,yBAA0BG,EAC1B,yBAA0BC,CAClC,EAAO,OAAQ,EAAI,EACf,KAAK,OAAS,CACV,MAAS,CAAC,CACF,QAAS,CAAC,UAAW,MAAO,UAAU,CACtD,EAAe,CACC,MAAO,eACP,MAAO,MACP,KAAM,SACtB,EAAe,CACC,MAAO,eACP,MAAO,KACvB,EAAe,CACC,MAAO,SACP,MAAO,gBACP,KAAM,OACtB,EAAe,CACC,MAAO,UACP,MAAO,cACvB,EAAe,CACC,MAAO,UACP,MAAO,GACvB,EAAe,CACC,MAAO,WACP,MAAO,gBACvB,EAAe,CACC,MAAO,SACP,MAAO,cACvB,EAAe,CACC,MAAO,mBACP,MAAOC,CACvB,EAAe,CACC,MAAO,WACP,MAAO,aACvB,EAAe,CACC,gBAAiB,EACjC,CAAa,EACL,MAAS,CAAC,CACF,QAAS,CAAC,UAAW,MAAO,UAAU,CACtD,EAAe,CACC,MAAO,eACP,MAAO,MACP,KAAM,OACtB,EAAe,CACC,MAAO,eACP,MAAO,MACP,KAAM,OACtB,EAAe,CACC,MAAO,SACP,MAAO,IACP,KAAM,OACtB,EAAe,CACC,MAAO,UACP,MAAO,6MAGvB,CAAa,EACL,SAAY,CAAC,CACL,MAAO,UACP,MAAO,SACP,KAAM,CAAC,CACC,MAAO,UACP,MAAO,SACP,KAAM,KAC9B,EAAuB,CACC,aAAc,SACtC,CAAqB,CACrB,CAAa,EACL,QAAW,CAAC,CACJ,MAAO,sBACP,MAAO,MACvB,EAAe,CACC,MAAO,uBACP,MAAO,MACvB,EAAe,CACC,MAAO,eACP,MAAO,MACP,KAAM,OACtB,EAAe,CACC,QAAS,CAAC,UAAW,MAAO,UAAU,CACtD,EAAe,CACC,MAAO,CAAC,mBAAoB,SAAS,EACrC,MAAO,IAAMA,EAAQ,4FACrC,EAAe,CACC,MAAO,mBACP,MAAOA,CACvB,EAAe,CACC,MAAO,mBACP,MAAO,cACvB,EAAe,CACC,MAAO,mBACP,MAAO,cACvB,EAAe,CACC,MAAO,CAAC,cAAe,gDAAgD,EACvE,MAAOC,CACvB,EAAe,CACC,MAAO,CAAC,cAAe,8CAA8C,EACrE,MAAOC,CACvB,EAAe,CACC,QAAS,KACzB,EAAe,CACC,MAAOE,EACP,MAAO,+BACvB,EAAe,CACC,gBAAiB,EACjC,CAAa,EACL,IAAK,CAAC,CACE,MAAO,mBACP,MAAO,uCACP,KAAM,CAAC,CACC,MAAO,mBACP,MAAO,MACP,KAAM,KAC9B,EAAuB,CACC,aAAc,QACtC,CAAqB,CACrB,CAAa,EACL,QAAS,CAAC,CACF,MAAO,eACP,MAAO,IACP,KAAM,CAAC,CACC,MAAO,aACP,MAAO,MACP,KAAM,KAC9B,EAAuB,CACC,QAAS,SACjC,EAAuB,CACC,MAAO,2BACP,MAAO,MACP,eAAgB,EACxC,EAAuB,CACC,aAAc,QACtC,CAAqB,CACrB,EAAe,CACC,MAAO,eACP,MAAO,IACP,KAAM,CAAC,CACC,MAAO,aACP,MAAO,MACP,KAAM,KAC9B,EAAuB,CACC,QAAS,SACjC,EAAuB,CACC,MAAO,2BACP,MAAO,MACP,eAAgB,EACxC,EAAuB,CACC,aAAc,QACtC,CAAqB,CACrB,CAAa,EACL,QAAS,CAAC,CACF,MAAO,2BACP,MAAO,iCACvB,CAAa,CACb,EACI,KAAK,eAAc,CACvB,EACAryD,EAAI,SAASoyD,EAAmBnxC,CAAkB,EAClD/oB,EAAQ,kBAAoBk6D,CAE5B,CAAC,EAED,IAAI,OAAO,kCAAkC,CAAC,UAAU,UAAU,SAAS,WAAW,EAAG,SAASz6D,EAASO,EAASlB,EAAO,CAC3H,IAAIkP,EAAQvO,EAAQ,UAAU,EAAE,MAC5B26D,EAAuB,UAAY,IACtC,UAAY,CACT,KAAK,aAAe,SAAU5oD,EAAMgd,EAAO,CACvC,MAAK,QAAQ,KAAKhd,CAAI,EAEf,SAAS,KAAKgd,CAAK,EADf,EAEnB,EACI,KAAK,YAAc,SAAU7pB,EAAK2J,EAAK,CACnC,IAAIkD,EAAO7M,EAAI,QAAQ2J,CAAG,EACtByZ,EAAQvW,EAAK,MAAM,UAAU,EACjC,GAAI,CAACuW,EACD,MAAO,GACX,IAAIxZ,EAASwZ,EAAM,CAAC,EAAE,OAClB4D,EAAehnB,EAAI,oBAAoB,CAAE,IAAK2J,EAAK,OAAQC,CAAM,CAAE,EACvE,GAAI,CAACod,GAAgBA,EAAa,KAAOrd,EACrC,MAAO,GACX,IAAIud,EAAS,KAAK,WAAWlnB,EAAI,QAAQgnB,EAAa,GAAG,CAAC,EAC1DhnB,EAAI,QAAQ,IAAIqJ,EAAMM,EAAK,EAAGA,EAAKC,EAAS,CAAC,EAAGsd,CAAM,CAC9D,EACI,KAAK,WAAa,SAAUra,EAAM,CAC9B,OAAOA,EAAK,MAAM,MAAM,EAAE,CAAC,CACnC,CACA,GAAG,KAAK4oD,EAAqB,SAAS,EACtCp6D,EAAQ,qBAAuBo6D,CAE/B,CAAC,EAED,IAAI,OAAO,2BAA2B,CAAC,UAAU,UAAU,QAAQ,EAAG,SAAS36D,EAASO,EAASlB,EAAO,CACxG,IAAIu7D,EAAc,CACd,WAAc,CAAE,MAAO,CAAG,EAC1B,mBAAoB,CAAE,MAAO,EAAG,YAAe,EAAG,MAAS,CAAG,EAC9D,mBAAoB,CAAE,aAAc,CAAG,EACvC,oBAAqB,CAAE,OAAU,EAAG,WAAY,EAAG,WAAY,EAAG,YAAa,EAAG,QAAW,CAAG,EAChG,sBAAuB,CAAE,OAAU,EAAG,OAAU,EAAG,KAAQ,EAAG,MAAS,EAAG,IAAO,EAAG,QAAW,CAAG,EAClG,wBAAyB,CAAE,OAAU,EAAG,MAAS,CAAG,EACpD,kBAAmB,CAAE,MAAS,EAAG,QAAW,CAAG,EAC/C,kBAAmB,CAAE,aAAc,EAAG,cAAe,EAAG,cAAe,CAAG,EAC1E,oBAAqB,CAAE,aAAc,EAAG,cAAe,EAAG,cAAe,CAAG,EAC5E,OAAU,CAAE,WAAY,EAAG,YAAa,EAAG,YAAa,EAAG,MAAO,CAAG,EACrE,eAAgB,CAAE,MAAO,CAAG,EAC5B,eAAgB,CAAE,MAAS,EAAG,OAAU,EAAG,OAAU,EAAG,OAAU,EAAG,OAAU,EAAG,OAAU,EAAG,QAAW,EAAG,MAAS,EAAG,KAAQ,EAAG,OAAU,EAAG,OAAU,CAAG,EAC9J,kBAAmB,CAAE,SAAY,EAAG,SAAY,CAAG,EACnD,OAAU,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EACtC,MAAS,CAAE,KAAQ,EAAG,MAAS,EAAG,KAAQ,EAAG,KAAQ,CAAG,EACxD,MAAS,CAAE,MAAO,EAAG,gBAAiB,CAAG,EACzC,OAAU,CAAE,QAAW,EAAG,QAAW,EAAG,KAAQ,EAAG,KAAQ,EAAG,KAAQ,EAAG,KAAQ,EAAG,SAAY,EAAG,WAAY,EAAG,YAAa,EAAG,WAAY,EAAG,YAAa,EAAG,WAAY,EAAG,YAAa,EAAG,WAAY,EAAG,YAAa,CAAG,EAC/N,QAAW,CAAE,KAAQ,EAAG,MAAS,EAAG,OAAU,EAAG,eAAgB,EAAG,aAAc,CAAG,EACrF,cAAe,CAAE,KAAQ,EAAG,KAAQ,CAAG,EACvC,MAAS,CAAE,KAAQ,EAAG,MAAS,EAAG,KAAQ,CAAG,EAC7C,cAAe,CAAE,MAAS,EAAG,gBAAiB,EAAG,SAAY,EAAG,cAAe,EAAG,QAAW,EAAG,QAAW,EAAG,UAAa,EAAG,aAAc,EAAG,WAAY,EAAG,OAAU,EAAG,kBAAmB,EAAG,eAAgB,EAAG,QAAW,CAAG,EAClO,YAAa,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EACzC,cAAe,CAAE,KAAQ,EAAG,OAAU,CAAG,EACzC,aAAc,CAAE,OAAU,EAAG,OAAU,CAAG,EAC1C,eAAgB,CAAE,OAAU,EAAG,aAAc,CAAG,EAChD,OAAU,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EACtC,KAAQ,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EACpC,iBAAkB,CAAE,OAAU,CAAG,EACjC,cAAe,CAAE,OAAU,CAAG,EAC9B,kBAAmB,CAAE,KAAQ,EAAG,KAAQ,EAAG,OAAU,EAAG,OAAU,EAAG,QAAW,EAAG,uBAAwB,EAAG,cAAe,EAAG,cAAe,EAAG,cAAe,EAAG,cAAe,EAAG,cAAe,EAAG,SAAY,EAAG,cAAe,EAAG,cAAe,CAAG,EAC3P,OAAU,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EACtC,eAAgB,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EAC5C,cAAe,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EAC3C,aAAc,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EAC1C,gBAAiB,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EAC7C,aAAc,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EAC1C,YAAa,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EACzC,aAAc,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EAC1C,YAAa,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EACzC,SAAY,CAAE,OAAU,EAAG,QAAW,EAAG,KAAQ,EAAG,OAAU,CAAG,EACjE,aAAc,CAAE,OAAU,EAAG,QAAW,EAAG,KAAQ,EAAG,OAAU,CAAG,EACnE,aAAc,CAAE,OAAU,EAAG,QAAW,EAAG,KAAQ,EAAG,OAAU,CAAG,EACnE,QAAW,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EACvC,cAAe,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EAC3C,gBAAiB,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EAC7C,iBAAkB,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EAC9C,eAAgB,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EAC5C,mBAAoB,CAAE,KAAQ,EAAG,OAAU,EAAG,MAAS,EAAG,KAAQ,EAAG,MAAS,CAAG,EACjF,oBAAqB,CAAE,KAAQ,EAAG,OAAU,EAAG,MAAS,EAAG,KAAQ,EAAG,MAAS,CAAG,EAClF,SAAY,CAAE,SAAY,EAAG,SAAY,EAAG,MAAS,EAAG,OAAU,CAAG,EACrE,MAAS,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EACrC,eAAgB,CAAE,MAAS,EAAG,KAAQ,CAAG,EACzC,kBAAmB,CAAE,KAAQ,EAAG,UAAa,EAAG,eAAgB,EAAG,MAAS,CAAG,EAC/E,aAAc,CAAE,KAAQ,EAAG,MAAS,EAAG,OAAU,EAAG,QAAW,CAAG,EAClE,iBAAkB,CAAE,WAAc,EAAG,UAAa,EAAG,UAAa,EAAG,KAAQ,CAAG,EAChF,IAAO,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EACnC,iBAAkB,CAAE,IAAO,EAAG,OAAU,CAAG,EAC3C,WAAc,CAAE,OAAU,EAAG,QAAW,CAAG,EAC3C,cAAe,CAAE,OAAU,EAAG,OAAU,EAAG,IAAO,EAAG,WAAY,EAAG,WAAY,CAAG,EACnF,MAAS,CAAE,GAAM,EAAG,GAAM,EAAG,IAAK,CAAG,EACrC,eAAgB,CAAE,OAAU,CAAG,EAC/B,OAAU,CAAE,uBAAwB,CAAG,EACvC,cAAe,CAAE,qBAAsB,CAAG,EAC1C,gBAAiB,CAAE,gBAAiB,EAAG,KAAQ,EAAG,SAAY,CAAG,EACjE,qBAAsB,EACtB,8BAA+B,EAC/B,iCAAkC,EAClC,6BAA8B,EAC9B,gCAAiC,EACjC,wBAAyB,EACzB,kCAAmC,EACnC,iCAAkC,EAClC,qCAAsC,EACtC,oCAAqC,EACrC,kBAAmB,EACnB,qBAAsB,EACtB,UAAa,CAAE,iBAAkB,EAAG,eAAgB,CAAG,EACvD,iBAAkB,CAAE,iBAAkB,EAAG,eAAgB,CAAG,EAC5D,oBAAqB,CAAE,iBAAkB,EAAG,eAAgB,CAAG,CACnE,EACIC,EAAiB,UAAY,CACjC,GACC,UAAY,CACT,KAAK,mBAAqB,GAC1B,KAAK,kBAAoB,UAAY,CACjC,GAAI,SAAU,CACV,IAAIz0D,EAAQ,SAAS,cAAc,GAAG,EAAE,MACxC,QAASvG,KAAKuG,EACV,GAAI,OAAOA,EAAMvG,CAAC,GAAM,SAExB,KAAImB,EAAOnB,EAAE,QAAQ,SAAU,SAAUwL,EAAG,CACxC,MAAO,IAAMA,EAAE,aACnC,CAAiB,EACIuvD,EAAY,eAAe55D,CAAI,IAChC45D,EAAY55D,CAAI,EAAI,IAGhC,KAAK,mBAAqB,EAClC,EACI,KAAK,eAAiB,SAAU2d,EAAOxP,EAASmG,EAAKiU,EAAQ,CAIzD,GAHK,KAAK,oBACN,KAAK,kBAAiB,EAEtB5K,IAAU,WAAaxP,EAAQ,MAAM,KAAO,gBAAiB,CAC7D,IAAI4C,EAAO5C,EAAQ,QAAQmG,EAAI,GAAG,EAAE,OAAO,EAAGA,EAAI,MAAM,EACpDwlD,EAAW,WAAW,KAAK/oD,CAAI,EAInC,OAHI+oD,IACA/oD,EAAOA,EAAK,OAAOA,EAAK,YAAY,GAAG,EAAI,CAAC,GAE5C,UAAU,KAAKA,CAAI,EAEZ,KAAK,4BAA4B4M,EAAOxP,EAASmG,EAAKiU,CAAM,EAG5D,KAAK,uBAAuB5K,EAAOxP,EAASmG,EAAKiU,EAAQuxC,CAAQ,EAGhF,MAAO,EACf,EACI,KAAK,uBAAyB,SAAUn8C,EAAOxP,EAASmG,EAAKiU,EAAQwxC,EAAe,CAChFA,EAAgBA,GAAiB,GACjC,IAAIC,EAAa,OAAO,KAAKJ,CAAW,EACxC,OAAOI,EAAW,IAAI,SAAUp0D,EAAU,CACtC,MAAO,CACH,QAASA,EACT,QAASA,EAAW,QAAUm0D,EAAgB,GAAK,KACnD,KAAM,WACN,MAAO,GACvB,CACA,CAAS,CACT,EACI,KAAK,4BAA8B,SAAUp8C,EAAOxP,EAASmG,EAAKiU,EAAQ,CACtE,IAAIxX,EAAO5C,EAAQ,QAAQmG,EAAI,GAAG,EAAE,OAAO,EAAGA,EAAI,MAAM,EACpD1O,GAAY,mBAAmB,KAAKmL,CAAI,GAAK,CAAA,GAAI,CAAC,EACtD,GAAI,CAACnL,EACD,MAAO,GACX,IAAI4hB,EAAS,CAAA,EACb,OAAI5hB,KAAYg0D,GAAe,OAAOA,EAAYh0D,CAAQ,GAAM,WAC5D4hB,EAAS,OAAO,KAAKoyC,EAAYh0D,CAAQ,CAAC,GAEvC4hB,EAAO,IAAI,SAAUlmB,EAAO,CAC/B,MAAO,CACH,QAASA,EACT,QAASA,EACT,KAAM,iBACN,MAAO,GACvB,CACA,CAAS,CACT,CACA,GAAG,KAAKu4D,EAAe,SAAS,EAChCt6D,EAAQ,eAAiBs6D,CAEzB,CAAC,EAED,IAAI,OAAO,yBAAyB,CAAC,UAAU,UAAU,SAAS,cAAc,qBAAqB,4BAA4B,oBAAoB,EAAG,SAAS76D,EAASO,EAASlB,EAAO,CAC1L,IAAIgJ,EAAMrI,EAAQ,eAAe,EACjBA,EAAQ,cAAc,EAAE,UACxC,IAAI+rB,EAAkB/rB,EAAQ,UAAU,EAAE,gBACtC+qB,EAAgB/qB,EAAQ,sBAAsB,EAAE,cAChDi7D,EAAe,UAAY,CAC3B,KAAK,QAAQlvC,CAAe,EAC5B,KAAK,IAAI,QAAS,YAAa,SAAUpN,EAAOhC,EAAQxH,EAAQhG,EAASkB,EAAM,CAC3E,GAAIA,IAAS,KAAO8E,EAAO,UAAU,QAAO,EAAI,CAC5C,IAAIS,EAAST,EAAO,oBAChB6X,EAAW,IAAIjC,EAAc5b,EAASyG,EAAO,IAAKA,EAAO,MAAM,EAC/DwT,EAAQ4D,EAAS,kBAIrB,GAHI5D,GAASA,EAAM,MAAM,MAAM,KAAK,IAChCA,EAAQ4D,EAAS,gBAEjB5D,GAASA,EAAM,OAAS,eAAgB,CACxC,IAAIrX,EAAO5C,EAAQ,IAAI,QAAQyG,EAAO,GAAG,EACrCoW,EAAYja,EAAK,UAAU6D,EAAO,OAAQA,EAAO,OAAS,CAAC,EAC/D,GAAIoW,IAAc,IACd,MAAO,CACH,KAAM,GACN,UAAW,CAAC,EAAG,CAAC,CACxC,EAEgB,GAAI,kBAAkB,KAAKja,EAAK,UAAU6D,EAAO,MAAM,CAAC,EACpD,MAAO,CACH,KAAM,KACN,UAAW,CAAC,EAAG,CAAC,CACxC,GAIA,CAAK,EACD,KAAK,IAAI,QAAS,WAAY,SAAU+I,EAAOhC,EAAQxH,EAAQhG,EAASP,EAAO,CAC3E,IAAI4N,EAAWrN,EAAQ,IAAI,aAAaP,CAAK,EAC7C,GAAI,CAACA,EAAM,eAAiB4N,IAAa,IAAK,CAC1C,IAAI5G,EAAST,EAAO,oBAChB6X,EAAW,IAAIjC,EAAc5b,EAASyG,EAAO,IAAKA,EAAO,MAAM,EAC/DwT,EAAQ4D,EAAS,kBAIrB,GAHI5D,GAASA,EAAM,MAAM,MAAM,KAAK,IAChCA,EAAQ4D,EAAS,gBAEjB5D,GAASA,EAAM,OAAS,eAAgB,CACxC,IAAIrX,EAAO5C,EAAQ,IAAI,QAAQP,EAAM,MAAM,GAAG,EAC1Cod,EAAYja,EAAK,UAAUnD,EAAM,IAAI,OAAQA,EAAM,IAAI,OAAS,CAAC,EACrE,GAAIod,IAAc,IACd,OAAApd,EAAM,IAAI,SACHA,GAI3B,CAAK,EACD,KAAK,IAAI,YAAa,YAAa,SAAU+P,EAAOhC,EAAQxH,EAAQhG,EAASkB,EAAM,CAC/E,GAAIA,IAAS,KAAO8E,EAAO,UAAU,QAAO,EAAI,CAC5C,IAAIS,EAAST,EAAO,oBAChBpD,EAAO5C,EAAQ,IAAI,QAAQyG,EAAO,GAAG,EACrCoW,EAAYja,EAAK,UAAU6D,EAAO,OAAQA,EAAO,OAAS,CAAC,EAC/D,GAAIoW,IAAc,IACd,MAAO,CACH,KAAM,GACN,UAAW,CAAC,EAAG,CAAC,CACpC,EAGA,CAAK,EACD,KAAK,IAAI,aAAc,YAAa,SAAUrN,EAAOhC,EAAQxH,EAAQhG,EAASkB,EAAM,CAChF,GAAIA,IAAS,KAAO8E,EAAO,UAAU,QAAO,EAAI,CAC5C,IAAIS,EAAST,EAAO,oBAChBpD,EAAO5C,EAAQ,IAAI,QAAQyG,EAAO,GAAG,EACzC,GAAI,cAAc,KAAK7D,EAAK,UAAU6D,EAAO,MAAM,CAAC,EAChD,MAAO,CACH,KAAM,aACN,UAAW,CAAC,GAAI,EAAE,CACtC,EAGA,CAAK,CACL,EACAvN,EAAI,SAAS4yD,EAAclvC,CAAe,EAC1CxrB,EAAQ,aAAe06D,CAEvB,CAAC,EAED,IAAI,OAAO,0BAA0B,CAAC,UAAU,UAAU,SAAS,cAAc,YAAY,4BAA4B,EAAG,SAASj7D,EAASO,EAASlB,EAAO,CAC9J,IAAIgJ,EAAMrI,EAAQ,eAAe,EAC7BuO,EAAQvO,EAAQ,aAAa,EAAE,MAC/Bk7D,EAAel7D,EAAQ,aAAa,EAAE,SACtCg6C,EAAWz5C,EAAQ,SAAW,SAAU46D,EAAc,CAClDA,IACA,KAAK,mBAAqB,IAAI,OAAO,KAAK,mBAAmB,OAAO,QAAQ,YAAa,IAAMA,EAAa,KAAK,CAAC,EAClH,KAAK,kBAAoB,IAAI,OAAO,KAAK,kBAAkB,OAAO,QAAQ,YAAa,IAAMA,EAAa,GAAG,CAAC,EAEtH,EACA9yD,EAAI,SAAS2xC,EAAUkhB,CAAY,EAClC,UAAY,CACT,KAAK,mBAAqB,mCAC1B,KAAK,kBAAoB,uCACzB,KAAK,yBAA2B,uBAChC,KAAK,yBAA2B,2BAChC,KAAK,cAAgB,4BACrB,KAAK,mBAAqB,KAAK,cAC/B,KAAK,cAAgB,SAAU/rD,EAAS8qC,EAAWprC,EAAK,CACpD,IAAIkD,EAAO5C,EAAQ,QAAQN,CAAG,EAC9B,GAAI,KAAK,yBAAyB,KAAKkD,CAAI,GACnC,CAAC,KAAK,cAAc,KAAKA,CAAI,GAAK,CAAC,KAAK,yBAAyB,KAAKA,CAAI,EAC1E,MAAO,GAEf,IAAIgkB,EAAK,KAAK,mBAAmB5mB,EAAS8qC,EAAWprC,CAAG,EACxD,MAAI,CAACknB,GAAM,KAAK,cAAc,KAAKhkB,CAAI,EAC5B,QACJgkB,CACf,EACI,KAAK,mBAAqB,SAAU5mB,EAAS8qC,EAAWprC,EAAKusD,EAAgB,CACzE,IAAIrpD,EAAO5C,EAAQ,QAAQN,CAAG,EAC9B,GAAI,KAAK,cAAc,KAAKkD,CAAI,EAC5B,OAAO,KAAK,sBAAsB5C,EAAS4C,EAAMlD,CAAG,EACxD,IAAIyZ,EAAQvW,EAAK,MAAM,KAAK,kBAAkB,EAC9C,GAAIuW,EAAO,CACP,IAAIzoB,EAAIyoB,EAAM,MACd,GAAIA,EAAM,CAAC,EACP,OAAO,KAAK,oBAAoBnZ,EAASmZ,EAAM,CAAC,EAAGzZ,EAAKhP,CAAC,EAC7D,IAAI+O,EAAQO,EAAQ,oBAAoBN,EAAKhP,EAAIyoB,EAAM,CAAC,EAAE,OAAQ,CAAC,EACnE,OAAI1Z,GAAS,CAACA,EAAM,gBACZwsD,EACAxsD,EAAQ,KAAK,gBAAgBO,EAASN,CAAG,EAEpCorC,GAAa,QAClBrrC,EAAQ,OAETA,EAEX,GAAIqrC,IAAc,YAElB,KAAI3xB,EAAQvW,EAAK,MAAM,KAAK,iBAAiB,EAC7C,GAAIuW,EAAO,CACP,IAAIzoB,EAAIyoB,EAAM,MAAQA,EAAM,CAAC,EAAE,OAC/B,OAAIA,EAAM,CAAC,EACA,KAAK,oBAAoBnZ,EAASmZ,EAAM,CAAC,EAAGzZ,EAAKhP,CAAC,EACtDsP,EAAQ,oBAAoBN,EAAKhP,EAAG,EAAE,GAEzD,EACI,KAAK,gBAAkB,SAAUsP,EAASN,EAAK,CAC3C,IAAIkD,EAAO5C,EAAQ,QAAQN,CAAG,EAC1BwsD,EAActpD,EAAK,OAAO,IAAI,EAC9BvD,EAAWK,EACXJ,EAAcsD,EAAK,OACvBlD,EAAMA,EAAM,EAGZ,QAFIH,EAASG,EACTiJ,EAAS3I,EAAQ,YACd,EAAEN,EAAMiJ,GAAQ,CACnB/F,EAAO5C,EAAQ,QAAQN,CAAG,EAC1B,IAAIud,EAASra,EAAK,OAAO,IAAI,EAC7B,GAAIqa,IAAW,GAEf,IAAIivC,EAAcjvC,EACd,MACJ,IAAIkvC,EAAW,KAAK,mBAAmBnsD,EAAS,MAAON,CAAG,EAC1D,GAAIysD,EAAU,CACV,GAAIA,EAAS,MAAM,KAAO9sD,EACtB,MAEC,GAAI8sD,EAAS,cACdzsD,EAAMysD,EAAS,IAAI,YAEdD,GAAejvC,EACpB,MAGR1d,EAASG,GAEb,OAAO,IAAIN,EAAMC,EAAUC,EAAaC,EAAQS,EAAQ,QAAQT,CAAM,EAAE,MAAM,CACtF,EACI,KAAK,sBAAwB,SAAUS,EAAS4C,EAAMlD,EAAK,CAMvD,QALIJ,EAAcsD,EAAK,OAAO,MAAM,EAChC+F,EAAS3I,EAAQ,YACjBX,EAAWK,EACXtF,EAAK,uCACLmsB,EAAQ,EACL,EAAE7mB,EAAMiJ,GAAQ,CACnB/F,EAAO5C,EAAQ,QAAQN,CAAG,EAC1B,IAAI,EAAItF,EAAG,KAAKwI,CAAI,EACpB,GAAK,IAED,EAAE,CAAC,EACH2jB,IAEAA,IACA,CAACA,GACD,MAER,IAAIhnB,EAASG,EACb,GAAIH,EAASF,EACT,OAAO,IAAID,EAAMC,EAAUC,EAAaC,EAAQqD,EAAK,MAAM,CAEvE,CACA,EAAG,KAAKioC,EAAS,SAAS,CAE1B,CAAC,EAED,IAAI,OAAO,eAAe,CAAC,UAAU,UAAU,SAAS,cAAc,gBAAgB,+BAA+B,kCAAkC,2BAA2B,2BAA2B,yBAAyB,yBAAyB,EAAG,SAASh6C,EAASO,EAASlB,EAAO,CACpS,IAAIgJ,EAAMrI,EAAQ,YAAY,EAC1By3B,EAAWz3B,EAAQ,QAAQ,EAAE,KAC7By6D,EAAoBz6D,EAAQ,uBAAuB,EAAE,kBACrD26D,EAAuB36D,EAAQ,0BAA0B,EAAE,qBAC3Di0C,EAAej0C,EAAQ,yBAAyB,EAAE,aAClD66D,EAAiB76D,EAAQ,mBAAmB,EAAE,eAC9Ci7D,EAAej7D,EAAQ,iBAAiB,EAAE,aAC1Cu7D,EAAiBv7D,EAAQ,kBAAkB,EAAE,SAC7CstB,EAAO,UAAY,CACnB,KAAK,eAAiBmtC,EACtB,KAAK,SAAW,IAAIE,EACpB,KAAK,WAAa,IAAIM,EACtB,KAAK,WAAa,IAAIJ,EACtB,KAAK,aAAe,IAAIU,CAC5B,EACAlzD,EAAI,SAASilB,EAAMmK,CAAQ,EAC1B,UAAY,CACT,KAAK,aAAe,SACpB,KAAK,aAAe,CAAE,MAAO,KAAM,IAAK,MACxC,KAAK,kBAAoB,SAAU9Y,EAAO5M,EAAM+c,EAAK,CACjD,IAAI1C,EAAS,KAAK,WAAWra,CAAI,EAC7B0W,EAAS,KAAK,aAAc,EAAC,cAAc1W,EAAM4M,CAAK,EAAE,OAC5D,GAAI8J,EAAO,QAAUA,EAAOA,EAAO,OAAS,CAAC,EAAE,MAAQ,UACnD,OAAO2D,EAEX,IAAI9D,EAAQvW,EAAK,MAAM,WAAW,EAClC,OAAIuW,IACA8D,GAAU0C,GAEP1C,CACf,EACI,KAAK,aAAe,SAAUzN,EAAO5M,EAAMgd,EAAO,CAC9C,OAAO,KAAK,SAAS,aAAahd,EAAMgd,CAAK,CACrD,EACI,KAAK,YAAc,SAAUpQ,EAAOzZ,EAAK2J,EAAK,CAC1C,KAAK,SAAS,YAAY3J,EAAK2J,CAAG,CAC1C,EACI,KAAK,eAAiB,SAAU8P,EAAOxP,EAASmG,EAAKiU,EAAQ,CACzD,OAAO,KAAK,WAAW,eAAe5K,EAAOxP,EAASmG,EAAKiU,CAAM,CACzE,EACI,KAAK,aAAe,SAAUpa,EAAS,CACnC,IAAI+kC,EAAS,IAAID,EAAa,CAAC,KAAK,EAAG,sBAAuB,QAAQ,EACtE,OAAAC,EAAO,iBAAiB/kC,EAAQ,YAAa,CAAA,EAC7C+kC,EAAO,GAAG,WAAY,SAAUtsC,EAAG,CAC/BuH,EAAQ,eAAevH,EAAE,IAAI,CACzC,CAAS,EACDssC,EAAO,GAAG,YAAa,UAAY,CAC/B/kC,EAAQ,iBAAgB,CACpC,CAAS,EACM+kC,CACf,EACI,KAAK,IAAM,eACX,KAAK,cAAgB,kBACzB,EAAG,KAAK5mB,EAAK,SAAS,EACtB/sB,EAAQ,KAAO+sB,CAEf,CAAC,EAAmB,UAAW,CACX,IAAI,QAAQ,CAAC,cAAc,EAAG,SAAStiB,EAAG,CACyB3L,IAC3DA,EAAA,QAAiB2L,EAE7C,CAAqB,CACrB,sFCnnBA,IAAI,OAAO,uCAAuC,CAAC,UAAU,UAAU,SAAS,cAAc,+BAA+B,EAAG,SAAShL,EAASO,EAASlB,EAAO,CAClK,IAAIgJ,EAAMrI,EAAQ,YAAY,EAC1BspB,EAAqBtpB,EAAQ,wBAAwB,EAAE,mBACvDw7D,EAA2B,UAAY,CACvC,KAAK,OAAS,CACV,MAAS,CAAC,CACF,MAAO,kBACP,MAAO,aACV,EACDA,EAAyB,WAAY,EACrC,CACI,aAAc,cACd,gBAAiB,EACjC,CAAa,CACb,CACA,EACAnzD,EAAI,SAASmzD,EAA0BlyC,CAAkB,EACzDkyC,EAAyB,WAAa,SAAUh5D,EAAO,CACnD,MAAO,CACH,MAAO,+BACP,MAAO,+BACf,CACA,EACAg5D,EAAyB,aAAe,SAAUh5D,EAAO,CACrD,MAAO,CACH,MAAO,cACP,MAAO,gBACP,KAAMA,CACd,CACA,EACAg5D,EAAyB,WAAa,SAAUh5D,EAAO,CACnD,MAAO,CACH,MAAO,cACP,MAAO,SACP,KAAMA,CACd,CACA,EACAjC,EAAQ,yBAA2Bi7D,CAEnC,CAAC,EAED,IAAI,OAAO,sCAAsC,CAAC,UAAU,UAAU,SAAS,cAAc,uCAAuC,+BAA+B,EAAG,SAASx7D,EAASO,EAASlB,EAAO,CACxM,IAAIgJ,EAAMrI,EAAQ,YAAY,EAC1Bw7D,EAA2Bx7D,EAAQ,+BAA+B,EAAE,yBACpEspB,EAAqBtpB,EAAQ,wBAAwB,EAAE,mBACvDy7D,EAAe,qCACfC,EAA2B,SAAU32D,EAAS,CAC9C,IAAI21D,EAAgB,KAAK,oBAAoB,CACzC,oBAAqB,ieAUrB,QAAW,+VAKX,eAAgB,yBAChB,oBAAqB,8BACrB,mBAAoB,QACpB,4BAA6B,YAChC,EAAE,YAAY,EACXiB,EAAa,wEACbC,EAAY,yGAOhB,KAAK,OAAS,CACV,SAAY,CACRJ,EAAyB,aAAa,WAAW,EACjDK,EAAS,UAAU,EACnB,CACI,MAAO,SACP,MAAO,SACP,KAAM,SACtB,EAAe,CACC,MAAO,SACP,MAAO,SACP,KAAM,UACtB,EAAe,CACC,MAAO,mBACP,MAAO,8CACvB,EAAe,CACC,MAAO,mBACP,MAAO,8CACvB,EAAe,CACC,MAAO,CACH,eAAgB,uBAAwB,mBACxC,uBAAwB,uBAAwB,OAAQ,kBAC3D,EACD,MAAO,IAAMJ,EAAe,0BAA4BA,EAAe,aACvE,KAAM,oBACtB,EAAe,CACC,MAAO,CACH,eAAgB,uBAAwB,uBAAwB,OAChE,mBAAoB,OAAQ,eAAgB,OAAQ,cACvD,EACD,MAAO,IAAMA,EAAe,UAAYA,EAAe,4CACvD,KAAM,oBACtB,EAAe,CACC,MAAO,CACH,uBAAwB,OAAQ,mBAAoB,OAAQ,eAC5D,OAAQ,cACX,EACD,MAAO,IAAMA,EAAe,4CAC5B,KAAM,oBACtB,EAAe,CACC,MAAO,CACH,eAAgB,uBAAwB,uBAAwB,OAChE,mBAAoB,OACpB,eAAgB,OAAQ,uBAAwB,OAAQ,cAC3D,EACD,MAAO,IAAMA,EAAe,UAAYA,EAAe,wDACvD,KAAM,oBACtB,EAAe,CACC,MAAO,CACH,eAAgB,OAAQ,uBAAwB,OAAQ,cAC3D,EACD,MAAO,wBAA0BA,EAAe,eAChD,KAAM,oBACtB,EAAe,CACC,MAAO,CACH,uBAAwB,OAAQ,uBAChC,OAAQ,eAAgB,OAAQ,cACnC,EACD,MAAO,IAAMA,EAAe,4CAC5B,KAAM,oBACtB,EAAe,CACC,MAAO,CACH,OAAQ,OAAQ,eAAgB,OAAQ,cAC3C,EACD,MAAO,qCACP,KAAM,oBACtB,EAAe,CACC,MAAO,UACP,MAAO,mBACvB,EAAe,CACC,MAAO,UACP,MAAO,MAAQE,EAAa,OAC5B,KAAM,OACtB,EAAe,CACC,MAAO,mBACP,MAAO,QACvB,EAAe,CACC,MAAO,CAAC,eAAgB,uBAAwB,0BAA0B,EAC1E,MAAO,gEACvB,EAAe,CACC,MAAOjB,EACP,MAAOe,CACvB,EAAe,CACC,MAAO,uBACP,MAAO,aACP,KAAM,UACtB,EAAe,CACC,MAAO,eACP,MAAO,KACP,KAAM,OACtB,EAAe,CACC,MAAO,mBACP,MAAO,yEACP,KAAM,OACtB,EAAe,CACC,MAAO,uBACP,MAAO,UACP,KAAM,OACtB,EAAe,CACC,MAAO,eACP,MAAO,SACP,KAAM,OACtB,EAAe,CACC,MAAO,eACP,MAAO,QACvB,EAAe,CACC,MAAO,UACP,MAAO,QACV,CACJ,EACD,SAAU,CAAC,CACH,MAAO,OACP,MAAO,MACvB,EAAe,CACC,MAAO,CACH,eAAgB,uBAAwB,uBAAwB,OAChE,mBAAoB,OACpB,eAAgB,OAAQ,uBAAwB,OAAQ,cAC3D,EACD,MAAO,IAAMA,EAAe,UAAYA,EAAe,6DACvD,KAAM,oBACtB,EAAe,CACC,MAAO,uBACP,MAAO,YACvB,EAAe,CACC,MAAO,mBACP,MAAO,8vDACvB,EAAe,CACC,MAAO,uBACP,MAAO,6lBACvB,EAAe,CACC,MAAO,mBACP,MAAO,u2DACvB,EAAe,CACC,MAAO,aACP,MAAOA,CACvB,EAAe,CACC,MAAO,GACP,MAAO,QACP,KAAM,UACT,CACJ,EACD,MAAS,CACLD,EAAyB,aAAa,WAAW,EACjDK,EAAS,OAAO,EAChB,CACI,MAAO,gBACP,MAAO,MACP,KAAM,OACtB,EAAe,CACC,MAAO,OACP,MAAO,UACP,KAAM,OACtB,EAAe,CACC,MAAO,QACP,MAAO,GACP,KAAM,UACT,CACJ,EACD,MAAS,CACL,CACI,MAAO,0BACP,MAAO,2CACvB,EAAe,CACC,MAAO,gBACP,MAAO,cACP,KAAM,UACtB,EAAe,CACC,MAAO,UACP,MAAO,+CACvB,EAAe,CACC,MAAO,2BACP,MAAO,+CACvB,EAAe,CACC,MAAO,8BACP,MAAO,IACvB,EAAe,CACC,MAAO,2BACP,MAAO,QACP,KAAM,uBACtB,EAAe,CACC,MAAO,QACP,MAAO,IACP,KAAM,UACtB,EAAe,CACC,aAAc,eACjB,CACJ,EACD,sBAAyB,CACrB,CACI,MAAO,oCACP,MAAO,2CACvB,EAAe,CACC,MAAO,2BACP,MAAO,IACP,KAAM,OACtB,EAAe,CACC,MAAO,2BACP,MAAO,GACvB,EAAe,CACC,MAAO,QACP,MAAO,IACP,KAAM,UACtB,EAAe,CACC,aAAc,+BACjB,CACJ,EACD,kBAAqB,CACjB,CACI,MAAO,SACP,MAAO,SACP,KAAM,CACF,CACI,MAAO,SACP,MAAO,MACP,KAAM,KAC9B,EAAuB,CACC,QAAS,SACZ,CACJ,CACjB,EAAe,CACC,MAAO,SACP,MAAO,SACP,KAAM,CACF,CACI,MAAO,SACP,MAAO,MACP,KAAM,KAC9B,EAAuB,CACC,QAAS,UACZ,CACJ,CACjB,EAAe,CACC,MAAO,oBACP,MAAO,6BACvB,EAAe,CACC,MAAO,mBACP,MAAO,8CACvB,EAAe,CACC,MAAO,mBACP,MAAO,8CACvB,EAAe,CACC,MAAO,uBACP,MAAO,IACP,KAAM,oBACtB,EAAe,CACC,MAAO,OACP,MAAO,MACvB,EAAe,CACC,MAAO,uBACP,MAAO,GACvB,EAAe,CACC,MAAO,QACP,MAAO,GACP,KAAM,UACT,CACJ,EA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]}
Save
Cancel