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","file":"static/js/12.c10fd126.chunk.js","sourcesContent":["import React from 'react';\n/*\n * Dropdown & DropdownMenu\n *\n * Usage:\n * \n * \n * \n * Option 1
\n * Option 2
\n * \n * \n */\n\nexport const Dropdown = ({\n children,\n className\n}) => React.createElement(\"div\", {\n className: `inline-block align-top ${className}`\n}, children); // Invisible click grabber, to detect when the user clicks away.\n\nconst Overlay = ({\n onClick,\n zIndex\n}) => {\n return React.createElement(\"div\", {\n onClick: onClick,\n style: {\n position: 'fixed',\n zIndex,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n \"data-id\": \"dropdown-overlay\"\n });\n}; // `open` is used to show and hide the menu\n// `top` is used to move the menu and arrow down.\n\n\nconst Container = ({\n open,\n top = 0,\n children\n}) => React.createElement(\"div\", {\n style: {\n display: open ? null : 'none',\n position: 'relative',\n top\n },\n \"data-id\": \"dropdown-menu\"\n}, children); // An arrow tip that appears at the top middle of the dropdown menu\n\n\nconst MenuArrowUp = ({\n height,\n boxShadow = '0px 1px 10px 0px rgba(0,0,0,0.20)',\n background = 'white',\n align = 'center',\n marginLeft = 'auto',\n marginRight = 'auto'\n}) => {\n const side = Math.round(Math.sqrt(2) * height);\n return React.createElement(\"div\", {\n style: {\n position: 'absolute',\n width: '100%',\n height: `${height}px`,\n top: `-${height}px`,\n textAlign: align,\n overflow: 'hidden',\n zIndex: 1\n }\n }, React.createElement(\"div\", {\n style: {\n display: 'inline-block',\n position: 'relative',\n width: `${side}px`,\n height: `${side}px`,\n transform: `translate(0, ${height / 2}px) rotate(45deg)`,\n borderRadius: '2px 0 0 0',\n background: background,\n left: marginLeft,\n right: marginRight,\n boxShadow: boxShadow\n }\n }));\n}; // An arrow tip that appears at the bottom middle of the dropdown menu\n\n\nconst MenuArrowDown = ({\n height,\n boxShadow = '0px 1px 10px 0px rgba(0,0,0,0.20)',\n background = 'white',\n align = 'center',\n marginLeft = 'auto',\n marginRight = 'auto'\n}) => {\n const side = Math.round(Math.sqrt(2) * height);\n return React.createElement(\"div\", {\n style: {\n width: '100%',\n height: `${height + 5}px`,\n textAlign: align,\n overflow: 'hidden',\n zIndex: 1\n }\n }, React.createElement(\"div\", {\n style: {\n display: 'inline-block',\n position: 'relative',\n width: `${side}px`,\n height: `${side}px`,\n transform: `translate(0, ${height / 2}px) rotate(45deg)`,\n borderRadius: '2px 0 0 0',\n background: background,\n boxShadow: boxShadow,\n top: `-${height + 2}px`,\n left: marginLeft,\n right: marginRight\n }\n }));\n}; // `width` forces the width of the Menu.\n// width is required to make other calculaitons possible.\n// `left` is the pixels from the left edge of the trigger element...\n// centered by default.\n// `left={0}` would make the left of the menu inline with the left of the\n// trigger element.\n\n\nconst MenuPosition = ({\n width,\n left = `calc(50% - ${width / 2}px)`,\n translateX,\n translateY,\n children,\n zIndex\n}) => React.createElement(\"div\", {\n style: {\n position: 'absolute',\n width: `${width}px`,\n left,\n transform: `translateX(${translateX}px) translateY(${translateY}px)`,\n zIndex\n }\n}, children); // Styling for the dropdown box and shadow, and reset positon to relative.\n\n\nconst Menu = ({\n boxShadow = '0px 1px 10px 0px rgba(0,0,0,0.20)',\n background = 'white',\n className,\n children\n}) => React.createElement(\"div\", {\n style: {\n position: 'relative',\n textAlign: 'left',\n background: background,\n boxShadow: boxShadow\n },\n className: className\n}, children);\n\nexport const DropdownMenu = ({\n open,\n boxShadow,\n className,\n background,\n translateX = 0,\n translateY = 0,\n width,\n left,\n top = 0,\n arrowHeight = 12,\n arrowPosition = 'top',\n arrowAlign,\n arrowMarginLeft,\n arrowMarginRight,\n onDismiss,\n alignRight,\n children,\n baseZIndex = 100\n}) => {\n if (alignRight) {\n left = `calc(100% - ${width}px)`;\n arrowAlign = 'right';\n arrowMarginRight = arrowMarginRight || '13px';\n }\n\n return React.createElement(Container, {\n open: open,\n top: top + arrowHeight\n }, React.createElement(Overlay, {\n onClick: onDismiss,\n zIndex: baseZIndex\n }), React.createElement(MenuPosition, {\n zIndex: baseZIndex + 1,\n width: width,\n left: left,\n translateX: translateX,\n translateY: translateY\n }, arrowPosition === 'top' && React.createElement(MenuArrowUp, {\n boxShadow: boxShadow,\n background: background,\n height: arrowHeight,\n align: arrowAlign,\n marginLeft: arrowMarginLeft,\n marginRight: arrowMarginRight\n }), React.createElement(Menu, {\n className: className,\n boxShadow: boxShadow,\n background: background\n }, open ? children : null), arrowPosition === 'bottom' && React.createElement(MenuArrowDown, {\n boxShadow: boxShadow,\n background: background,\n height: arrowHeight,\n align: arrowAlign,\n marginLeft: arrowMarginLeft,\n marginRight: arrowMarginRight\n })));\n};","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \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 });\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 // Fallback for ace.require when vanilla ACE is hosted over a CDN\n if (window.ace) {\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 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","/* ***** 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/fixoldbrowsers\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nif (typeof Element != \"undefined\" && !Element.prototype.remove) {\n Object.defineProperty(Element.prototype, \"remove\", {\n enumerable: false,\n writable: true,\n configurable: true,\n value: function() { this.parentNode && this.parentNode.removeChild(this); }\n });\n}\n\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"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 } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\n\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\n \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;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"./useragent\"); \nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\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 \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 \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 } else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n } else if (n === \"ref\") {\n if (refs) refs[val] = el;\n } else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\n\nexports.getDocumentHead = function(doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\n\nexports.removeChildren = function(element) {\n element.innerHTML = \"\";\n};\n\nexports.createTextNode = function(textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\n\nexports.createFragment = function(element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\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};\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\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function(node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\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\nexports.importCssString = function importCssString(cssText, id, target) {\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n } else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n \n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n \n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n \n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n};\n\nexports.importCssStylsheet = function(uri, doc) {\n exports.buildDom([\"link\", {rel: \"stylesheet\", href: uri}], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function(document) {\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\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n\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\n outer.appendChild(inner);\n\n var body = document.documentElement;\n body.appendChild(outer);\n\n var noScrollbar = inner.offsetWidth;\n\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n\n return noScrollbar-withScrollbar;\n};\n\nif (typeof document == \"undefined\") {\n exports.importCssString = function() {};\n}\n\nexports.computedStyle = function(element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\n\nexports.setStyle = function(styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\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;\n\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}\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} else {\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/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\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};\n\nexports.mixin = function(obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\n\nexports.implement = function(proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\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\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\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\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 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 ret[173] = '-';\n \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\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n\n return ret;\n})();\noop.mixin(exports, Keys);\n\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) {\n\"use strict\";\n\nvar keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\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 } catch(e) {}\n}\n\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\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};\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};\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};\n\nexports.stopPropagation = function(e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\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};\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\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n \n return onMouseUp;\n};\n\nexports.addMouseWheelListener = function(el, callback, destroyer) {\n if (\"onmousewheel\" in el) {\n addListener(el, \"mousewheel\", function(e) {\n var factor = 8;\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n callback(e);\n }, destroyer);\n } else if (\"onwheel\" in el) {\n addListener(el, \"wheel\", function(e) {\n var factor = 0.35;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n \n callback(e);\n }, destroyer);\n } else {\n addListener(el, \"DOMMouseScroll\", function(e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n callback(e);\n }, destroyer);\n }\n};\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\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\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\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n \n e._clicks = clicks;\n\n eventHandler[callbackName](\"mousedown\", e);\n\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};\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};\n\nexports.getModifierString = function(e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\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 \n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\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 \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 \n return callback(e, hashId, keyCode);\n}\n\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 } else {\n var lastDefaultPrevented = null;\n\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\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\n addListener(el, \"keyup\", function(e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\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 \n var listener = function(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n \n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\n\nexports.$idleBlocked = false;\nexports.onIdle = function(cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n } else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\n\nexports.$idleBlockId = null;\nexports.blockIdle = function(delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n \n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function() {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || window.msRequestAnimationFrame\n || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function(callback) {\n setTimeout(callback, 17);\n };\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"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\n this.end = {\n row: endRow,\n column: endColumn\n };\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\n this.contains = function(row, column) {\n return this.compare(row, column) == 0;\n };\n this.compareRange = function(range) {\n var cmp,\n end = range.end,\n start = range.start;\n\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 } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\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 } 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 } 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 } 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 } 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 } 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\n if (row < this.start.row)\n return -1;\n\n if (row > this.end.row)\n return 1;\n\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n\n return 0;\n };\n this.compareStart = function(row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\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 } 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 } else if (this.start.row == row && this.start.column == column) {\n return -1;\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\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\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\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\n return Range.fromPoints(start || this.start, end || this.end);\n };\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\n return new Range(\n screenPosStart.row, screenPosStart.column,\n screenPosEnd.row, screenPosEnd.column\n );\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\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;\n\nRange.comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n\n if (count >>= 1)\n string += string;\n }\n return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\n\nexports.copyArray = function(array){\n var copy = [];\n for (var i=0, l=array.length; i 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) {\n\"use strict\";\n\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;\n\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\n\nvar TextInput = function(parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n \n if (!isMobile)\n text.style.fontSize = \"1px\";\n\n var commandMode = false;\n var ignoreFocusEvents = false;\n \n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n \n event.addListener(text, \"blur\", function(e) {\n if (ignoreFocusEvents) return;\n host.onBlur(e);\n isFocused = false;\n }, host);\n event.addListener(text, \"focus\", function(e) {\n if (ignoreFocusEvents) return;\n isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\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\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 } 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 \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 \n var resetSelection = isIOS\n ? function(value) {\n if (!isFocused || (copied && !value) || sendingText) 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 \n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n\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 \n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n\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\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\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 } 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\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 (\n 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 } catch(e){}\n }\n inComposition = false;\n };\n this.resetSelection = resetSelection;\n\n if (isFocused)\n host.onFocus();\n\n\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\n var onSelect = function(e) {\n if (inComposition)\n return;\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (isMobile && text.selectionStart != lastSelectionStart) {\n resetSelection();\n }\n };\n\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb;};\n this.getInputHandler = function() {return inputHandler;};\n var afterContextMenu = false;\n \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 } else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n \n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - lastSelectionEnd;\n \n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n \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 \n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n } else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n sendingText = false;\n \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\") return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\") return host.execCommand(\"redo\");\n }\n var data = text.value;\n var inserted = sendText(data, true);\n if (\n data.length > MAX_LINE_LENGTH + 100 \n || valueResetRegex.test(inserted)\n || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd\n ) {\n resetSelection();\n }\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 } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\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 } 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 \n var onCut = function(e) {\n doCopy(e, true);\n };\n \n var onCopy = function(e) {\n doCopy(e, false);\n };\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\n event.addCommandKeyListener(text, host.onCommandKey.bind(host), host);\n\n event.addListener(text, \"select\", onSelect, host);\n event.addListener(text, \"input\", onInput, host);\n\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\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 \n inComposition = {};\n\n if (commandMode)\n return;\n \n if (e.data)\n inComposition.useTextareaForIME = false;\n \n setTimeout(onCompositionUpdate, 0);\n host._signal(\"compositionStart\");\n host.on(\"mousedown\", cancelComposition);\n \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 \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\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n if (commandMode)\n return cancelComposition();\n \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\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e) onInput();\n };\n \n\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n \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\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\n this.getElement = function() {\n return text;\n };\n this.setCommandMode = function(value) {\n commandMode = value;\n text.readOnly = false;\n };\n \n this.setReadOnly = function(readOnly) {\n if (!commandMode)\n text.readOnly = readOnly;\n };\n\n this.setCopyWithEmptySelection = function(value) {\n };\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 \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\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\n if (e.type != \"mousedown\")\n return;\n\n host.renderer.$isMousePressed = true;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\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\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 \n if (isIOS)\n addIosSelectionHandler(parentNode, host, text);\n\n function addIosSelectionHandler(parentNode, host, text) {\n var typingResetTimeout = null;\n var typing = false;\n \n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n\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) return;\n if (typing || inComposition || host.$mouseHandler.isMousePressed) return;\n\n if (copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n \n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n } else if (selectionStart == 1) {\n key = KEYS.home;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n } else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n } else if (\n selectionStart < lastSelectionStart\n || (\n selectionStart == lastSelectionStart \n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd\n )\n ) {\n key = KEYS.left;\n } else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n } else if (\n selectionEnd > lastSelectionEnd\n || (\n selectionEnd == lastSelectionEnd \n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd\n )\n ) {\n key = KEYS.right;\n }\n \n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n\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};\n\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function(_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n\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\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\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\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\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\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\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) 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 if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\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\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\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\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\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 } 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 } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\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\n this.selectEnd =\n this.selectAllEnd =\n this.selectByWordsEnd =\n this.selectByLinesEnd = function() {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\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\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n\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 } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n\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 } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n\n this.onQuadClick = function(ev) {\n var editor = this.editor;\n\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\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 \n var editor = this.editor;\n \n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n \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 \n var direction = Math.abs(vx / vy);\n \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 \n if (canScroll) {\n prevScroll.allowed = t;\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 \n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\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\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) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n}\n\n(function() {\n this.$init = function() {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\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\n this.hide = function() {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\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 \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\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\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) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\")\n return;\n\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n\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\n\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\n\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\n if (tooltipAnnotation == annotation)\n return;\n tooltipAnnotation = annotation.text.join(\"
\");\n\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\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\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\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\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\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n\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\n event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout)\n return;\n\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n \n editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\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\n}).call(GutterTooltip.prototype);\n\n\n\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) {\n\"use strict\";\n\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 \n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n\n this.$pos = null;\n this.$inSelection = null;\n \n this.propagationStopped = false;\n this.defaultPrevented = false;\n};\n\n(function() { \n \n this.stopPropagation = function() {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n \n this.preventDefault = function() {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\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 \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 \n var editor = this.editor;\n \n\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\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 \n this.getAccelKey = useragent.isMac\n ? function() { return this.domEvent.metaKey; }\n : function() { return this.domEvent.ctrlKey; };\n \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) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n var editor = mouseHandler.editor;\n\n var blankImage = dom.createElement(\"img\");\n blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (useragent.isOpera)\n blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n\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\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\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n if (useragent.isOpera) {\n editor.container.appendChild(blankImage);\n blankImage.scrollTop = 0;\n }\n dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n if (useragent.isOpera) {\n editor.container.removeChild(blankImage);\n }\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n isInternal = true;\n this.setState(\"drag\");\n };\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\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\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\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\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\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 } else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\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\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\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 } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\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 } else {\n autoScrollStartTime = null;\n }\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\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\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\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\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n var dropEffect = \"none\";\n\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\n return dropEffect;\n }\n}\n\n(function() {\n\n this.dragWait = function() {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\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\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\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\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\n this.onMouseDown = function(e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n\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 } else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\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) {\n\"use strict\";\n\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\n\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 \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(\n 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\" }, \"Pallete\"]\n ] : [\"span\"]),\n contextMenu.firstChild\n );\n };\n var handleClick = function(e) {\n var action = e.target.getAttribute(\"action\");\n\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) 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 } 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\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 } else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function(e) {\n if (!pressed) 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 \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 \n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n \n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n } else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n \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 \n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n \n var diff1 = weightedDistance(\n e.clientX - rect.left - cursorPos.left + offsetLeft,\n e.clientY - rect.top - cursorPos.top + offsetTop\n );\n var diff2 = weightedDistance(\n e.clientX - rect.left - anchorPos.left + offsetLeft,\n e.clientY - rect.top - anchorPos.top + offsetTop\n );\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n \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\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer) clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n } else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n } else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\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\") return;\n\n var touchObj = touches[0];\n\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n\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)) wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX)) 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\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) vX = 0;\n if (Math.abs(vY) < 0.01) vY = 0;\n if (animationSteps < 20) vX = 0.9 * vX;\n if (animationSteps < 20) 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/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"./dom\");\n\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};\n\nexports.loadScript = function(path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n\n s.src = path;\n head.appendChild(s);\n\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) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n\n if (typeof e != \"object\" || !e)\n e = {};\n\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\n listeners = listeners.slice();\n for (var i=0; i 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\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};\n\nexports.setModuleUrl = function(name, subst) {\n return options.$moduleUrls[name] = subst;\n};\n\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\n try {\n module = require(moduleName);\n } catch (e) {}\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n\n exports.$loading[moduleName].push(onLoad);\n\n if (exports.$loading[moduleName].length > 1)\n return;\n\n var afterLoad = function() {\n require([moduleName], function(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\n if (!exports.get(\"packaged\"))\n return afterLoad();\n \n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n};\n\nvar reportErrorIfPathIsNotConfigured = function() {\n if (\n !options.basePath && !options.workerPath \n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length\n ) {\n console.error(\n \"Unable to infer path to ace from script src,\",\n \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\n \"or with webpack use ace/webpack-resolver\"\n );\n reportErrorIfPathIsNotConfigured = function() {};\n }\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n options.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 var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[