{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///(webpack)/buildin/amd-define.js","webpack:///./node_modules/brace/index.js","webpack:///./node_modules/brace/mode/javascript.js","webpack:///./node_modules/brace/worker/javascript.js","webpack:///./node_modules/brace/theme/dracula.js","webpack:///./node_modules/dom-dom/dist/dom-dom.es.js","webpack:///./app/javascript/packs/application.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Error","_typeof","obj","iterator","constructor","global","this","window","define","deps","payload","arguments","length","payloads","original","apply","console","error","trace","root","_acequire","parentId","callback","lookup","undefined","toString","params","dep","acequire","push","packagedModule","moduleName","normalizeModule","indexOf","chunks","split","charAt","slice","join","previous","replace","mod","id","uri","packaged","ace","x","real","exec","RegExp","test","match","String","compliantExecNpcg","compliantLastIndexIncrement","lastIndex","getNativeFlags","regex","ignoreCase","multiline","extended","sticky","array","item","from","Array","str","r2","source","index","_xregexp","captureNames","Empty","Function","that","target","TypeError","args","bound","result","concat","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","prototypeOfArray","prototypeOfObject","_toString","owns","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","splice","makeArray","a","lengthBefore","array_splice","start","deleteCount","pos","removeCount","Math","max","removed","insert","add","remove","min","tailOldPos","tailNewPos","tailCount","lengthAfterRemove","isArray","createEmpty","freezeObject","boxedString","splitString","forEach","fun","toObject","self","thisp","map","filter","every","some","reduce","reduceRight","sought","toInteger","lastIndexOf","abs","getPrototypeOf","__proto__","getOwnPropertyDescriptor","descriptor","configurable","setter","set","getOwnPropertyNames","keys","empty","propertyIsEnumerable","isPrototypeOf","toLocaleString","valueOf","properties","Type","defineProperties","doesDefinePropertyWork","exception","definePropertyWorksOnObject","definePropertyWorksOnDom","document","createElement","definePropertyFallback","seal","freeze","preventExtensions","isSealed","isFrozen","isExtensible","returnValue","hasDontEnumBug","dontEnums","dontEnumsLength","ii","dontEnum","Date","now","getTime","ws","trim","trimBeginRegexp","trimEndRegexp","floor","getDocumentHead","doc","head","getElementsByTagName","documentElement","tag","createElementNS","hasCssClass","el","className","addCssClass","removeCssClass","classes","toggleCssClass","setCssClass","node","include","hasCssString","sheets","createStyleSheet","styleSheets","owningElement","importCssString","cssText","style","appendChild","createTextNode","importCssStylsheet","link","rel","href","getInnerWidth","element","parseInt","computedStyle","clientWidth","getInnerHeight","clientHeight","scrollbarWidth","inner","width","minWidth","height","display","outer","position","left","overflow","body","noScrollbar","offsetWidth","withScrollbar","removeChild","pageYOffset","getPageScrollTop","getPageScrollLeft","pageXOffset","scrollTop","scrollLeft","getComputedStyle","currentStyle","setInnerHtml","innerHtml","cloneNode","innerHTML","parentNode","replaceChild","setInnerText","innerText","textContent","getInnerText","getParentWindow","defaultView","parentWindow","inherits","ctor","superCtor","super_","writable","mixin","implement","proto","oop","Keys","ret","MODIFIER_KEYS","16","17","18","224","KEY_MODS","FUNCTION_KEYS","8","9","13","19","27","32","33","34","35","36","37","38","39","40","44","45","46","96","97","98","99","100","101","102","103","104","105","112","113","114","115","116","117","118","119","120","121","122","123","144","145","PRINTABLE_KEYS","48","49","50","51","52","53","54","55","56","57","59","61","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","107","109","110","186","187","188","189","190","191","192","219","220","221","222","111","106","toLowerCase","enter","escape","esc","del","mods","pow","keyCodeToString","keyCode","keyString","fromCharCode","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","navigator","os","platform","ua","userAgent","isWin","isIE","appName","parseFloat","isOldIE","isGecko","isMozilla","Controllers","controllers","product","isOldGecko","isOpera","opera","isWebKit","isChrome","isAIR","isIPad","isChromeOS","isIOS","MSStream","useragent","pressedKeys","ts","addListener","elem","type","addEventListener","attachEvent","wrapper","event","_wrapper","removeListener","removeEventListener","detachEvent","stopEvent","e","stopPropagation","preventDefault","cancelBubble","getButton","ctrlKey","altKey","shiftKey","button","1","2","4","capture","eventHandler","releaseCaptureHandler","onMouseUp","addTouchMoveListener","startx","starty","touchObj","touches","clientX","clientY","wheelX","wheelY","addMouseWheelListener","wheelDeltaX","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","axis","HORIZONTAL_AXIS","detail","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","timer","clicks","eventNames","3","onMousedown","isNewClick","clearTimeout","setTimeout","_clicks","onDblclick","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","defaultPrevented","resetPressedKeys","getModifierString","addCommandKeyListener","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","nextTick","win","listener","data","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","last","stringReverse","string","reverse","stringRepeat","count","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","deepCopy","arrayToMap","arr","createMap","props","arrayRemove","escapeRegExp","escapeHTML","getMatchOffsets","regExp","matches","offset","deferredCall","fcn","deferred","timeout","cancel","schedule","isPending","delayedCall","defaultTimeout","_self","delay","dom","lang","KEYS","MODS","BROKEN_SETDATA","USE_IE_MIME_TYPE","TextInput","host","text","isTouchPad","setAttribute","opacity","insertBefore","firstChild","copied","cut","pasted","inComposition","tempStyle","isSelectionEmpty","isFocused","activeElement","onBlur","onFocus","resetSelection","focus","blur","syncSelection","syncValue","isEmpty","inputHandler","selectionStart","selectionEnd","setSelectionRange","resetValue","selection","setInputHandler","cb","getInputHandler","afterContextMenu","sendText","onPaste","substr","execCommand","substring","onTextInput","onInput","handleClipboardData","forceIEMime","clipboardData","mime","setData","getData","doCopy","isCut","getCopyText","onCut","onCopy","select","onCommandKey","isAllSelected","selectAll","closeTimeout","onCompositionUpdate","$readOnly","val","lastValue","undo","canUndo","getRange","session","markUndoGroup","range","setRange","clearSelection","onCompositionEnd","syncComposition","onContextMenuClose","renderer","$keepTextAreaAtCursor","$moveTextAreaToCursor","onCompositionStart","$undoManager","on","getElement","setReadOnly","readOnly","onContextMenu","_emit","domEvent","moveToMouse","bringToFront","rect","container","getBoundingClientRect","top","borderTopWidth","borderLeftWidth","maxTop","bottom","move","textInput","scroller","typingResetTimeout","typing","detectArrowKeys","up","home","option","right","end","down","shift","TextInputIOS","DefaultHandlers","mouseHandler","$clickSelection","editor","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","onTouchMove","selectByLines","extendSelectionBy","selectByWords","calcRangeOrientation","cursor","row","cmp","column","anchor","ev","inSelection","getDocumentPosition","mousedownEvent","selectionEmpty","getSelectionRange","$blockScrolling","moveToPosition","time","$focusTimout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","y","getShiftKey","selectToPosition","setCapture","setStyle","comparePoint","orientedRange","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","ax","ay","bx","by","distance","sqrt","getBracketRange","getWordRange","isMultiLine","contains","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","dt","direction","canScroll","isScrollableBy","speed","scrollBy","stop","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","html","setPosition","setClassName","show","hide","getHeight","offsetHeight","getWidth","destroy","GutterTooltip","windowWidth","innerWidth","windowHeight","innerHeight","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","hideTooltip","_signal","moveTooltip","getRegion","selectTo","srcElement","$tooltipFollowsMouse","isMousePressed","annotation","$annotations","getLength","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","showTooltip","$gutter","MouseEvent","$inSelection","propagationStopped","selectionRange","DragdropHandler","blankImage","src","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","calcDistance","lineHeight","layerConfig","characterWidth","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","autoScroll","addDragMarker","toOrientedRange","addMarker","getSelectionStyle","$cursorLayer","setBlinking","clearInterval","setInterval","onMouseMove","clearDragMarker","removeMarker","fromOrientedRange","getReadOnly","onDragStart","cancelDrag","draggable","dataTransfer","effectAllowed","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","types","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","eventTarget","unselectable","url","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","path","onload","_","isAbort","qualifyURL","EventEmitter","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","once","newCallback","handlers","_disabled_","old","disabled","removeDefaultHandler","pop","capturing","off","removeAllListeners","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","getOption","opt","warn","forwardTo","handlesSet","message","reportError","msg","AppConfig","$defaultOptions","defineOptions","options","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","init","scriptOptions","scriptUrl","currentScript","_currentScript","scripts","ownerDocument","script","getAttribute","attributes","j","attr","m1","toUpperCase","base","all","moduleUrl","component","parts","sep","re","setModuleUrl","subst","$loading","loadModule","onLoad","moduleType","afterLoad","DefaultGutterHandler","config","MouseHandler","focusEditor","hasFocus","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","$dragDelay","character","insideStart","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onCaptureInterval","$onCaptureMouseMove","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","getLine","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","commands","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","h","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","command","passEvent","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","UnicodeTBL00","UnicodeTBL20","_invertLevel","lev","levels","_array","lo","hi","tmp","len","_getCharClass","chars","ix","wType","nType","cType","rtlCandidate","_getCharacterType","ch","uc","charCodeAt","L","R","EN","ON_R","AN","R_H","B","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","charTypes","impTab","prevState","newClass","newLevel","newState","action","condPos","_computeLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","line","wrapIndent","isLastRow","EOF","seenBidi","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","onChange","delta","lines","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","$useWrapMode","splits","$wrapData","indent","size","isFullWidth","getScreenTabSize","endOfLine","markAsDirty","updateCharacterWidths","fontMetrics","$characterSize","bidiCharWidth","$measureCharWidth","getShowInvisibles","setShowInvisibles","setEolChar","eolChar","setTextDir","getPosLeft","col","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","logicalIdx","charWidth","Range","startRow","startColumn","endRow","endColumn","isEqual","compare","compareRange","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideEnd","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","extend","clone","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","Selection","getDocument","lead","selectionLead","createAnchor","selectionAnchor","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","getCursor","getPosition","getSelectionAnchor","getSelectionLead","shiftSelection","columns","moveCursorTo","isBackwards","$moveSelection","mover","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectWord","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","foldLine","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","screenPos","$bidiHandler","round","docPos","lineWidgets","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","func","toJSON","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","rules","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","flag","splitterRurles","rule","caseInsensitive","adjustedregex","matchcount","token","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","values","tokens","stack","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","next","consumeLineEnd","merge","unshift","TextHighlightRules","$rules","addRules","prefix","nextState","getRules","embedRules","HighlightRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","processed","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","splitChar","keywords","list","$keywordList","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","rowCount","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","context","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","selected","opening","closing","rowDiff","CstyleBehaviour","getCursorPosition","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","quotes","$mode","$quotes","lineCommentStart","quote","leftChar","rightChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","$matchTokenType","iterator2","bracket","packages","pack","codePoint","addUnicodePackage","Ll","Lu","Lt","Lm","Lo","M","Mn","Mc","Me","N","Nd","Nl","No","P","Pd","Ps","Pe","Pi","Pf","Pc","Po","S","Sm","Sc","Sk","So","Z","Zs","Zl","Zp","C","Cc","Cf","Co","Cs","Cn","unicode","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","removeInLine","commentWithSpace","comment","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","minEmptyLength","toggleBlockComment","colDiff","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","input","autoOutdent","createWorker","createModeDelegates","$modes","delegations","scope","functionName","$delegator","method","transformAction","param","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","word","score","meta","$id","applyDelta","docLines","doNotValidate","Anchor","$onChange","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$clipPositionToDocument","$insertRight","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$getTransformedPoint","noClip","Document","textOrLines","$lines","insertMergedLines","setValue","getValue","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","MAX","to","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","$updateOnChange","getState","SearchHighlight","clazz","setRegexp","MAX_RANGES","cache","update","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","sort","b","containsRow","walk","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","RangeList","pointIndex","excludeEdges","startIndex","endIndex","addList","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","restorePoint","subFold","collapseChildren","addSubFold","afterStart","restoreRange","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","depth","getFoldWidget","getFoldWidgetRange","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","setMode","bgTokenizer","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","ignore","$deltasDoc","$deltasFold","$informUndoManager","$deltas","setUndoManager","getUndoManager","reset","getSelection","undoManager","$syncInformUndoManager","group","execute","mergeUndoDeltas","$defaultUndoManager","redo","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","setOverwrite","overwrite","getOverwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","marker","addDynamicMarker","markerId","markers","getMarkers","highlight","$searchHighlight","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","getMode","$scrollTop","setScrollTop","isNaN","getScrollTop","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","w","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","lastUndoRange","$getUndoSelection","foldDelta","redoChanges","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","diff","$clipRowToDocument","Number","MAX_VALUE","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","setUseWrapMode","useWrapMode","getUseWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","displayed","indentation","getWrapIndent","minSplit","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","maxRow","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","wrap","$wrap","firstLineNumber","useSoftTabs","Search","find","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","wholeWord","wordBoundary","addWordBoundary","modifier","caseSensitive","$assembleMultilineRegExp","backwards","forEachInLine","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","bindKey","isDefault","addCommand","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","removeCommands","bindKeys","keyList","findKeyCommand","$keyChain","CommandManager","byName","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","prompt","gotoLine","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","firstLineEndCol","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","Editor","getContainerElement","getTextAreaContainer","textarea","$mouseHandler","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","startOperation","endOperation","$opResetTimer","curOp","docChanged","selectionChanged","prevOp","commadEvent","previousCommand","scrollSelectionIntoView","animateScrolling","$mergeableCommands","$mergeUndoDeltas","prev","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","handler","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","updateFull","oldEditor","getSession","cursorPos","resize","onResize","setTheme","theme","getTheme","getFontSize","setFontSize","$highlightBrackets","$bracketHighlight","$highlightPending","getMatching","$highlightTags","$highlightTagPending","$tagHighlight","prevToken","sbm","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","updateLines","$updateHighlightActiveLine","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","startOuter","endOuter","lineCols","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","inVirtualSelectionMode","getBehavioursEnabled","transform","$mergeNextCommand","lineState","shouldOutdent","lineIndent","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","setDisplayIndentGuides","getDisplayIndentGuides","setShowPrintMargin","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","sel","endPoint","moved","totalDiff","rangeIndex","subRows","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","animate","alignCursor","getCursorPositionScreen","expand","matchType","bracketType","found","brackets","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","preventScroll","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$resetCursorStyle","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","behavioursEnabled","wrapBehavioursEnabled","autoScrollEditorIntoView","keybindingId","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","showLineNumbers","showGutter","displayIndentGuides","fontSize","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","foldStyle","UndoManager","$serializeDelta","$deserializeDelta","cloneDeltaSetsObj","deltaSets_old","fnGetModifiedDelta","deltaSets_new","deltaSet_old","deltaSet_new","delta_old","deltaSets","$doc","hasUndo","dirtyCounter","$undoStack","$redoStack","NaN","undoSelectionRange","redoSelectionRange","$deserializeDeltas","hasRedo","markClean","isClean","$serializeDeltas","Gutter","parentEl","$showFoldWidgets","gutterWidth","$updateAnnotations","$cells","rowInfo","annoText","gutterOffset","breakpoints","decorations","$firstLineNumber","lastLineNumber","gutterRenderer","$renderer","cell","textNode","foldWidget","getText","minHeight","$fixedWidth","padding","$padding","$computePadding","ceil","$showLineNumbers","setShowLineNumbers","getShowLineNumbers","paddingLeft","paddingRight","Marker","setPadding","setMarkers","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","drawBidiSingleLineMarker","firstRowScreen","stringBuilder","extraStyle","curr","clazzModified","lineRange","range1","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","$tabStrings","tabStr","$indentGuideRe","spaceClass","tabClass","spaceContent","tabContent","scrollLines","lineElements","childNodes","lineElementsIdx","lineElement","$renderLine","$useLineGroups","oldConfig","lastChild","fragment","$renderLinesFragment","createDocumentFragment","$textToken","$renderToken","output","tabIdx","idx4","classToUse","space","renderIndentGuide","cols","$renderWrappedLine","onlyContents","splitChars","$renderSimpleLine","$getFoldLineTokens","renderTokens","addTokens","$measureNode","isIE8","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateVisibility","$updateOpacity","visibility","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","blink","getPixelPosition","onScreen","$selectionMarkers","cursorIndex","pixelPos","drawCursor","$setOverwrite","ScrollBar","parent","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","scrollHeight","$scrollbarWidth","$minWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","pending","changes","change","CHAR_COUNT","FontMetrics","$setMeasureNodeStyles","$main","$testFractionalRect","isRoot","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","setPolling","GutterLayer","MarkerLayer","TextLayer","CursorLayer","VirtualRenderer","content","onGutterResize","$markerBack","textLayer","$textLayer","canvas","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","maxHeight","v","$loop","$renderChanges","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_GUTTER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","scrollWidth","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$updateGutterLineHighlight","$gutterLineHighlight","$printMarginEl","containerEl","posTop","posLeft","$composition","setScrollMargin","sm","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","unfreeze","st","marginTop","marginLeft","$highlightGutterLine","$updateLines","$autosize","desiredHeight","$maxPixelHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","x_min","steps","initialScroll","oldSteps","$timer","scrollTo","canvasPos","textToScreenCoordinates","pageX","pageY","keepTextAreaAtCursor","$themeId","cssClass","$theme","isDark","setMouseCursor","maxPixelHeight","workerUrl","blob","Blob","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","getBlob","$workerBlob","blobURL","URL","webkitURL","createObjectURL","Worker","WorkerClient","topLevelNamespaces","classname","importScripts","$sendDeltaQueue","changeListener","onMessage","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","callbackId","callbacks","onmessage","err","deltaQueue","cmd","emit","ex","attachToDocument","q","UIWorkerClient","messageBuffer","main","emitSync","sender","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","selectionBefore","other","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","onSelectionInterval","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","selectMoreLines","selectMore","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","yBackwards","docEnd","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","forEachSelection","keepOrder","$byLines","reg","cmdResult","anim","buf","nl","additive","skip","screenLead","toRemove","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","hidden","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","oldWidget","gutterAnno","comparator","binarySearch","matched","findAnnotations","arrow","onmousedown","Renderer","edit","_id","getElementById","env","tagName","oldNode","createEditSession","version","DocCommentHighlightRules","getTagRule","getStartRule","getEndRule","identifierRe","JavaScriptHighlightRules","keywordMapper","escapedRe","comments","noES6","no_regex","jsx","JSX","tagRegex","jsxTag","jsxJsRule","jsxAttributes","reference","MatchingBraceOutdent","BaseFoldMode","commentRegex","singleLineBlockCommentRe","tripleStarBlockCommentRe","startRegionRe","_getFoldWidgetBase","forceMultiline","getCommentRegionBlock","getSectionRange","startIndent","subRange","CStyleFoldMode","$outdent","tokenizedLine","endState","worker","results","IS_NON_DIMENSIONAL","recordLicecycleHooks","hooks","runHooks","hook","addHooks","deep","render","isSvgMode","ref","prevSvgMode","__html","toLocaleLowerCase","child","Element","EMPTY_CHILDREN","lastSimple","simple","arguments$1","fn","require","file_fields","renderRow","class","componentWillMount","componentDidMount","handleMove","target_row","previousElementSibling","nextElementSibling","haystack","nodeType","classList","findAncestorThatHasClass","handleRemove"],"mappings":"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","file":"js/application-4c165947ee2d0814ba0e.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* ***** 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 (acequire, exports, module) params\n */\n(function () {\n var ACE_NAMESPACE = \"ace\";\n\n var global = function () {\n return this;\n }();\n\n if (!global && typeof window != \"undefined\") global = window; // strict mode\n\n if (!ACE_NAMESPACE && typeof acequirejs !== \"undefined\") return;\n\n var define = function define(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original) define.original.apply(this, arguments);else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n\n if (arguments.length == 2) payload = deps;\n\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n };\n\n define.modules = {};\n define.payloads = {};\n /**\n * Get at functionality define()ed using the function above\n */\n\n var _acequire = function _acequire(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n\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\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && acequire.original) return;\n params.push(dep);\n }\n\n return callback && callback.apply(null, params) || true;\n }\n };\n\n var acequire = function acequire(module, callback) {\n var packagedModule = _acequire(\"\", module, callback);\n\n if (packagedModule == undefined && acequire.original) return acequire.original.apply(this, arguments);\n return packagedModule;\n };\n\n var normalizeModule = function normalizeModule(parentId, moduleName) {\n // normalize plugin acequires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n } // normalize relative acequires\n\n\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\n return moduleName;\n };\n /**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\n\n\n var lookup = function lookup(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n var module = define.modules[moduleName];\n\n if (!module) {\n module = define.payloads[moduleName];\n\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 req(module, callback) {\n return _acequire(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\n module = define.modules[moduleName] = exports || module;\n }\n\n return module;\n };\n\n function exportAce(ns) {\n var root = global;\n\n if (ns) {\n if (!global[ns]) 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.acequire || !root.acequire.packaged) {\n acequire.original = root.acequire;\n root.acequire = acequire;\n root.acequire.packaged = true;\n }\n }\n\n exportAce(ACE_NAMESPACE);\n})();\n\nace.define(\"ace/lib/regexp\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var real = {\n exec: RegExp.prototype.exec,\n test: RegExp.prototype.test,\n match: String.prototype.match,\n replace: String.prototype.replace,\n split: String.prototype.split\n },\n compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined,\n // check `exec` handling of nonparticipating capturing groups\n compliantLastIndexIncrement = function () {\n var x = /^/g;\n real.test.call(x, \"\");\n return !x.lastIndex;\n }();\n\n if (compliantLastIndexIncrement && compliantExecNpcg) return;\n\n RegExp.prototype.exec = function (str) {\n var match = real.exec.apply(this, arguments),\n name,\n r2;\n\n if (typeof str == 'string' && match) {\n if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n real.replace.call(str.slice(match.index), r2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (this._xregexp && this._xregexp.captureNames) {\n for (var i = 1; i < match.length; i++) {\n name = this._xregexp.captureNames[i - 1];\n if (name) match[name] = match[i];\n }\n }\n\n if (!compliantLastIndexIncrement && this.global && !match[0].length && this.lastIndex > match.index) this.lastIndex--;\n }\n\n return match;\n };\n\n if (!compliantLastIndexIncrement) {\n RegExp.prototype.test = function (str) {\n var match = real.exec.call(this, str);\n if (match && this.global && !match[0].length && this.lastIndex > match.index) this.lastIndex--;\n return !!match;\n };\n }\n\n function getNativeFlags(regex) {\n return (regex.global ? \"g\" : \"\") + (regex.ignoreCase ? \"i\" : \"\") + (regex.multiline ? \"m\" : \"\") + (regex.extended ? \"x\" : \"\") + ( // Proposed for ES4; included in AS3\n regex.sticky ? \"y\" : \"\");\n }\n\n function indexOf(array, item, from) {\n if (Array.prototype.indexOf) // Use the native array method if available\n return array.indexOf(item, from);\n\n for (var i = from || 0; i < array.length; i++) {\n if (array[i] === item) return i;\n }\n\n return -1;\n }\n});\nace.define(\"ace/lib/es5-shim\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n function Empty() {}\n\n if (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) {\n // .length is 1\n var target = this;\n\n if (typeof target != \"function\") {\n throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n }\n\n var args = slice.call(arguments, 1); // for normal call\n\n var bound = function bound() {\n if (this instanceof bound) {\n var result = target.apply(this, args.concat(slice.call(arguments)));\n\n if (Object(result) === result) {\n return result;\n }\n\n return this;\n } else {\n return target.apply(that, args.concat(slice.call(arguments)));\n }\n };\n\n if (target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n };\n }\n\n var call = Function.prototype.call;\n var prototypeOfArray = Array.prototype;\n var prototypeOfObject = Object.prototype;\n var slice = prototypeOfArray.slice;\n\n var _toString = call.bind(prototypeOfObject.toString);\n\n var owns = call.bind(prototypeOfObject.hasOwnProperty);\n var defineGetter;\n var defineSetter;\n var lookupGetter;\n var lookupSetter;\n var supportsAccessors;\n\n if (supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\")) {\n defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n }\n\n if ([1, 2].splice(0).length != 2) {\n if (function () {\n // test IE < 9 to splice bug - see issue #138\n function makeArray(l) {\n var a = new Array(l + 2);\n a[0] = a[1] = 0;\n return a;\n }\n\n var array = [],\n lengthBefore;\n array.splice.apply(array, makeArray(20));\n array.splice.apply(array, makeArray(26));\n lengthBefore = array.length; //46\n\n array.splice(5, 0, \"XXX\"); // add one element\n\n lengthBefore + 1 == array.length;\n\n if (lengthBefore + 1 == array.length) {\n return true; // has right splice implementation without bugs\n }\n }()) {\n //IE 6/7\n var array_splice = Array.prototype.splice;\n\n Array.prototype.splice = function (start, deleteCount) {\n if (!arguments.length) {\n return [];\n } else {\n return array_splice.apply(this, [start === void 0 ? 0 : start, deleteCount === void 0 ? this.length - start : deleteCount].concat(slice.call(arguments, 2)));\n }\n };\n } else {\n //IE8\n Array.prototype.splice = function (pos, removeCount) {\n var length = this.length;\n\n if (pos > 0) {\n if (pos > length) pos = length;\n } else if (pos == void 0) {\n pos = 0;\n } else if (pos < 0) {\n pos = Math.max(length + pos, 0);\n }\n\n if (!(pos + removeCount < length)) removeCount = length - pos;\n var removed = this.slice(pos, pos + removeCount);\n var insert = slice.call(arguments, 2);\n var add = insert.length;\n\n if (pos === length) {\n if (add) {\n this.push.apply(this, insert);\n }\n } else {\n var remove = Math.min(removeCount, length - pos);\n var tailOldPos = pos + remove;\n var tailNewPos = tailOldPos + add - remove;\n var tailCount = length - tailOldPos;\n var lengthAfterRemove = length - remove;\n\n if (tailNewPos < tailOldPos) {\n // case A\n for (var i = 0; i < tailCount; ++i) {\n this[tailNewPos + i] = this[tailOldPos + i];\n }\n } else if (tailNewPos > tailOldPos) {\n // case B\n for (i = tailCount; i--;) {\n this[tailNewPos + i] = this[tailOldPos + i];\n }\n } // else, add == remove (nothing to do)\n\n\n if (add && pos === lengthAfterRemove) {\n this.length = lengthAfterRemove; // truncate array\n\n this.push.apply(this, insert);\n } else {\n this.length = lengthAfterRemove + add; // reserves space\n\n for (i = 0; i < add; ++i) {\n this[pos + i] = insert[i];\n }\n }\n }\n\n return removed;\n };\n }\n }\n\n if (!Array.isArray) {\n Array.isArray = function isArray(obj) {\n return _toString(obj) == \"[object Array]\";\n };\n }\n\n var boxedString = Object(\"a\"),\n splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\n if (!Array.prototype.forEach) {\n Array.prototype.forEach = function forEach(fun\n /*, thisp*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n thisp = arguments[1],\n i = -1,\n length = self.length >>> 0;\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(); // TODO message\n }\n\n while (++i < length) {\n if (i in self) {\n fun.call(thisp, self[i], i, object);\n }\n }\n };\n }\n\n if (!Array.prototype.map) {\n Array.prototype.map = function map(fun\n /*, thisp*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n result = Array(length),\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) result[i] = fun.call(thisp, self[i], i, object);\n }\n\n return result;\n };\n }\n\n if (!Array.prototype.filter) {\n Array.prototype.filter = function filter(fun\n /*, thisp */\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n result = [],\n value,\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n\n if (fun.call(thisp, value, i, object)) {\n result.push(value);\n }\n }\n }\n\n return result;\n };\n }\n\n if (!Array.prototype.every) {\n Array.prototype.every = function every(fun\n /*, thisp */\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && !fun.call(thisp, self[i], i, object)) {\n return false;\n }\n }\n\n return true;\n };\n }\n\n if (!Array.prototype.some) {\n Array.prototype.some = function some(fun\n /*, thisp */\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n thisp = arguments[1];\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && fun.call(thisp, self[i], i, object)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n if (!Array.prototype.reduce) {\n Array.prototype.reduce = function reduce(fun\n /*, initial*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0;\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n\n var i = 0;\n var result;\n\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n\n if (++i >= length) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n } while (true);\n }\n\n for (; i < length; i++) {\n if (i in self) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n }\n\n return result;\n };\n }\n\n if (!Array.prototype.reduceRight) {\n Array.prototype.reduceRight = function reduceRight(fun\n /*, initial*/\n ) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0;\n\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n\n var result,\n i = length - 1;\n\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n\n if (--i < 0) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n } while (true);\n }\n\n do {\n if (i in this) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n };\n }\n\n if (!Array.prototype.indexOf || [0, 1].indexOf(1, 2) != -1) {\n Array.prototype.indexOf = function indexOf(sought\n /*, fromIndex */\n ) {\n var self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = 0;\n\n if (arguments.length > 1) {\n i = toInteger(arguments[1]);\n }\n\n i = i >= 0 ? i : Math.max(0, length + i);\n\n for (; i < length; i++) {\n if (i in self && self[i] === sought) {\n return i;\n }\n }\n\n return -1;\n };\n }\n\n if (!Array.prototype.lastIndexOf || [0, 1].lastIndexOf(0, -3) != -1) {\n Array.prototype.lastIndexOf = function lastIndexOf(sought\n /*, fromIndex */\n ) {\n var self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = length - 1;\n\n if (arguments.length > 1) {\n i = Math.min(i, toInteger(arguments[1]));\n }\n\n i = i >= 0 ? i : length - Math.abs(i);\n\n for (; i >= 0; i--) {\n if (i in self && sought === self[i]) {\n return i;\n }\n }\n\n return -1;\n };\n }\n\n if (!Object.getPrototypeOf) {\n Object.getPrototypeOf = function getPrototypeOf(object) {\n return object.__proto__ || (object.constructor ? object.constructor.prototype : prototypeOfObject);\n };\n }\n\n if (!Object.getOwnPropertyDescriptor) {\n var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" + \"non-object: \";\n\n Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n if (_typeof(object) != \"object\" && typeof object != \"function\" || object === null) throw new TypeError(ERR_NON_OBJECT + object);\n if (!owns(object, property)) return;\n var descriptor, getter, setter;\n descriptor = {\n enumerable: true,\n configurable: true\n };\n\n if (supportsAccessors) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n var getter = lookupGetter(object, property);\n var setter = lookupSetter(object, property);\n object.__proto__ = prototype;\n\n if (getter || setter) {\n if (getter) descriptor.get = getter;\n if (setter) descriptor.set = setter;\n return descriptor;\n }\n }\n\n descriptor.value = object[property];\n return descriptor;\n };\n }\n\n if (!Object.getOwnPropertyNames) {\n Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n return Object.keys(object);\n };\n }\n\n if (!Object.create) {\n var createEmpty;\n\n if (Object.prototype.__proto__ === null) {\n createEmpty = function createEmpty() {\n return {\n \"__proto__\": null\n };\n };\n } else {\n createEmpty = function createEmpty() {\n var empty = {};\n\n for (var i in empty) {\n empty[i] = null;\n }\n\n empty.constructor = empty.hasOwnProperty = empty.propertyIsEnumerable = empty.isPrototypeOf = empty.toLocaleString = empty.toString = empty.valueOf = empty.__proto__ = null;\n return empty;\n };\n }\n\n Object.create = function create(prototype, properties) {\n var object;\n\n if (prototype === null) {\n object = createEmpty();\n } else {\n if (_typeof(prototype) != \"object\") throw new TypeError(\"typeof prototype[\" + _typeof(prototype) + \"] != 'object'\");\n\n var Type = function Type() {};\n\n Type.prototype = prototype;\n object = new Type();\n object.__proto__ = prototype;\n }\n\n if (properties !== void 0) Object.defineProperties(object, properties);\n return object;\n };\n }\n\n function doesDefinePropertyWork(object) {\n try {\n Object.defineProperty(object, \"sentinel\", {});\n return \"sentinel\" in object;\n } catch (exception) {}\n }\n\n if (Object.defineProperty) {\n var definePropertyWorksOnObject = doesDefinePropertyWork({});\n var definePropertyWorksOnDom = typeof document == \"undefined\" || doesDefinePropertyWork(document.createElement(\"div\"));\n\n if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n var definePropertyFallback = Object.defineProperty;\n }\n }\n\n if (!Object.defineProperty || definePropertyFallback) {\n var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \";\n var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" + \"on this javascript engine\";\n\n Object.defineProperty = function defineProperty(object, property, descriptor) {\n if (_typeof(object) != \"object\" && typeof object != \"function\" || object === null) throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n if (_typeof(descriptor) != \"object\" && typeof descriptor != \"function\" || descriptor === null) throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n\n if (definePropertyFallback) {\n try {\n return definePropertyFallback.call(Object, object, property, descriptor);\n } catch (exception) {}\n }\n\n if (owns(descriptor, \"value\")) {\n if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n delete object[property];\n object[property] = descriptor.value;\n object.__proto__ = prototype;\n } else {\n object[property] = descriptor.value;\n }\n } else {\n if (!supportsAccessors) throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n if (owns(descriptor, \"get\")) defineGetter(object, property, descriptor.get);\n if (owns(descriptor, \"set\")) defineSetter(object, property, descriptor.set);\n }\n\n return object;\n };\n }\n\n if (!Object.defineProperties) {\n Object.defineProperties = function defineProperties(object, properties) {\n for (var property in properties) {\n if (owns(properties, property)) Object.defineProperty(object, property, properties[property]);\n }\n\n return object;\n };\n }\n\n if (!Object.seal) {\n Object.seal = function seal(object) {\n return object;\n };\n }\n\n if (!Object.freeze) {\n Object.freeze = function freeze(object) {\n return object;\n };\n }\n\n try {\n Object.freeze(function () {});\n } catch (exception) {\n Object.freeze = function freeze(freezeObject) {\n return function freeze(object) {\n if (typeof object == \"function\") {\n return object;\n } else {\n return freezeObject(object);\n }\n };\n }(Object.freeze);\n }\n\n if (!Object.preventExtensions) {\n Object.preventExtensions = function preventExtensions(object) {\n return object;\n };\n }\n\n if (!Object.isSealed) {\n Object.isSealed = function isSealed(object) {\n return false;\n };\n }\n\n if (!Object.isFrozen) {\n Object.isFrozen = function isFrozen(object) {\n return false;\n };\n }\n\n if (!Object.isExtensible) {\n Object.isExtensible = function isExtensible(object) {\n if (Object(object) === object) {\n throw new TypeError(); // TODO message\n }\n\n var name = '';\n\n while (owns(object, name)) {\n name += '?';\n }\n\n object[name] = true;\n var returnValue = owns(object, name);\n delete object[name];\n return returnValue;\n };\n }\n\n if (!Object.keys) {\n var hasDontEnumBug = true,\n dontEnums = [\"toString\", \"toLocaleString\", \"valueOf\", \"hasOwnProperty\", \"isPrototypeOf\", \"propertyIsEnumerable\", \"constructor\"],\n dontEnumsLength = dontEnums.length;\n\n for (var key in {\n \"toString\": null\n }) {\n hasDontEnumBug = false;\n }\n\n Object.keys = function keys(object) {\n if (_typeof(object) != \"object\" && typeof object != \"function\" || object === null) {\n throw new TypeError(\"Object.keys called on a non-object\");\n }\n\n var keys = [];\n\n for (var name in object) {\n if (owns(object, name)) {\n keys.push(name);\n }\n }\n\n if (hasDontEnumBug) {\n for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n var dontEnum = dontEnums[i];\n\n if (owns(object, dontEnum)) {\n keys.push(dontEnum);\n }\n }\n }\n\n return keys;\n };\n }\n\n if (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n }\n\n var ws = \"\\t\\n\\x0B\\f\\r \\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" + \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" + \"\\u2029\\uFEFF\";\n\n if (!String.prototype.trim || ws.trim()) {\n ws = \"[\" + ws + \"]\";\n var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n trimEndRegexp = new RegExp(ws + ws + \"*$\");\n\n String.prototype.trim = function trim() {\n return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n };\n }\n\n function toInteger(n) {\n n = +n;\n\n if (n !== n) {\n // isNaN\n n = 0;\n } else if (n !== 0 && n !== 1 / 0 && n !== -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n\n return n;\n }\n\n function isPrimitive(input) {\n var type = _typeof(input);\n\n return input === null || type === \"undefined\" || type === \"boolean\" || type === \"number\" || type === \"string\";\n }\n\n function toPrimitive(input) {\n var val, valueOf, toString;\n\n if (isPrimitive(input)) {\n return input;\n }\n\n valueOf = input.valueOf;\n\n if (typeof valueOf === \"function\") {\n val = valueOf.call(input);\n\n if (isPrimitive(val)) {\n return val;\n }\n }\n\n toString = input.toString;\n\n if (typeof toString === \"function\") {\n val = toString.call(input);\n\n if (isPrimitive(val)) {\n return val;\n }\n }\n\n throw new TypeError();\n }\n\n var toObject = function toObject(o) {\n if (o == null) {\n // this matches both null and undefined\n throw new TypeError(\"can't convert \" + o + \" to object\");\n }\n\n return Object(o);\n };\n});\nace.define(\"ace/lib/fixoldbrowsers\", [\"require\", \"exports\", \"module\", \"ace/lib/regexp\", \"ace/lib/es5-shim\"], function (acequire, exports, module) {\n \"use strict\";\n\n acequire(\"./regexp\");\n acequire(\"./es5-shim\");\n});\nace.define(\"ace/lib/dom\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\n exports.getDocumentHead = function (doc) {\n if (!doc) doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n };\n\n exports.createElement = function (tag, ns) {\n return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag);\n };\n\n exports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n };\n\n exports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n };\n\n exports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n\n while (true) {\n var index = classes.indexOf(name);\n\n if (index == -1) {\n break;\n }\n\n classes.splice(index, 1);\n }\n\n el.className = classes.join(\" \");\n };\n\n exports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g),\n add = true;\n\n while (true) {\n var index = classes.indexOf(name);\n\n if (index == -1) {\n break;\n }\n\n add = false;\n classes.splice(index, 1);\n }\n\n if (add) classes.push(name);\n el.className = classes.join(\" \");\n return add;\n };\n\n exports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n };\n\n exports.hasCssString = function (id, doc) {\n var index = 0,\n sheets;\n doc = doc || document;\n\n if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\n while (index < sheets.length) {\n if (sheets[index++].owningElement.id === id) return true;\n }\n } else if (sheets = doc.getElementsByTagName(\"style\")) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) return true;\n }\n }\n\n return false;\n };\n\n exports.importCssString = function importCssString(cssText, id, doc) {\n doc = doc || document;\n if (id && exports.hasCssString(id, doc)) return null;\n var style;\n if (id) cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n\n if (doc.createStyleSheet) {\n style = doc.createStyleSheet();\n style.cssText = cssText;\n if (id) style.owningElement.id = id;\n } else {\n style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id) style.id = id;\n exports.getDocumentHead(doc).appendChild(style);\n }\n };\n\n exports.importCssStylsheet = function (uri, doc) {\n if (doc.createStyleSheet) {\n doc.createStyleSheet(uri);\n } else {\n var link = exports.createElement('link');\n link.rel = 'stylesheet';\n link.href = uri;\n exports.getDocumentHead(doc).appendChild(link);\n }\n };\n\n exports.getInnerWidth = function (element) {\n return parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) + parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + element.clientWidth;\n };\n\n exports.getInnerHeight = function (element) {\n return parseInt(exports.computedStyle(element, \"paddingTop\"), 10) + parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) + element.clientHeight;\n };\n\n exports.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 var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = document.documentElement;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\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 return noScrollbar - withScrollbar;\n };\n\n if (typeof document == \"undefined\") {\n exports.importCssString = function () {};\n\n return;\n }\n\n if (window.pageYOffset !== undefined) {\n exports.getPageScrollTop = function () {\n return window.pageYOffset;\n };\n\n exports.getPageScrollLeft = function () {\n return window.pageXOffset;\n };\n } else {\n exports.getPageScrollTop = function () {\n return document.body.scrollTop;\n };\n\n exports.getPageScrollLeft = function () {\n return document.body.scrollLeft;\n };\n }\n\n if (window.getComputedStyle) exports.computedStyle = function (element, style) {\n if (style) return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\n return window.getComputedStyle(element, \"\") || {};\n };else exports.computedStyle = function (element, style) {\n if (style) return element.currentStyle[style];\n return element.currentStyle;\n };\n\n exports.setInnerHtml = function (el, innerHtml) {\n var element = el.cloneNode(false); //document.createElement(\"div\");\n\n element.innerHTML = innerHtml;\n el.parentNode.replaceChild(element, el);\n return element;\n };\n\n if (\"textContent\" in document.documentElement) {\n exports.setInnerText = function (el, innerText) {\n el.textContent = innerText;\n };\n\n exports.getInnerText = function (el) {\n return el.textContent;\n };\n } else {\n exports.setInnerText = function (el, innerText) {\n el.innerText = innerText;\n };\n\n exports.getInnerText = function (el) {\n return el.innerText;\n };\n }\n\n exports.getParentWindow = function (document) {\n return document.defaultView || document.parentWindow;\n };\n});\nace.define(\"ace/lib/oop\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n exports.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\n exports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n\n return obj;\n };\n\n exports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n };\n});\nace.define(\"ace/lib/keys\", [\"require\", \"exports\", \"module\", \"ace/lib/fixoldbrowsers\", \"ace/lib/oop\"], function (acequire, exports, module) {\n \"use strict\";\n\n acequire(\"./fixoldbrowsers\");\n var oop = acequire(\"./oop\");\n\n var Keys = function () {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift',\n 17: 'Ctrl',\n 18: 'Alt',\n 224: 'Meta'\n },\n KEY_MODS: {\n \"ctrl\": 1,\n \"alt\": 2,\n \"option\": 2,\n \"shift\": 4,\n \"super\": 8,\n \"meta\": 8,\n \"command\": 8,\n \"cmd\": 8\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n 96: \"Numpad0\",\n 97: \"Numpad1\",\n 98: \"Numpad2\",\n 99: \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 61: '=',\n 65: 'a',\n 66: 'b',\n 67: 'c',\n 68: 'd',\n 69: 'e',\n 70: 'f',\n 71: 'g',\n 72: 'h',\n 73: 'i',\n 74: 'j',\n 75: 'k',\n 76: 'l',\n 77: 'm',\n 78: 'n',\n 79: 'o',\n 80: 'p',\n 81: 'q',\n 82: 'r',\n 83: 's',\n 84: 't',\n 85: 'u',\n 86: 'v',\n 87: 'w',\n 88: 'x',\n 89: 'y',\n 90: 'z',\n 107: '+',\n 109: '-',\n 110: '.',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n 111: '/',\n 106: '*'\n }\n };\n var name, i;\n\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\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\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 return ret;\n }();\n\n oop.mixin(exports, Keys);\n\n exports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\") keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n };\n});\nace.define(\"ace/lib/useragent\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n exports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n };\n\n exports.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 };\n\n if ((typeof navigator === \"undefined\" ? \"undefined\" : _typeof(navigator)) != \"object\") return;\n var os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\n var ua = navigator.userAgent;\n exports.isWin = os == \"win\";\n exports.isMac = os == \"mac\";\n exports.isLinux = os == \"linux\";\n exports.isIE = navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0 ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]) : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\n\n exports.isOldIE = exports.isIE && exports.isIE < 9;\n exports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\n exports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv:(\\d+)/) || [])[1], 10) < 4;\n exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\n exports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n exports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n exports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n exports.isIPad = ua.indexOf(\"iPad\") >= 0;\n exports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n exports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n if (exports.isIOS) exports.isMac = true;\n});\nace.define(\"ace/lib/event\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var keys = acequire(\"./keys\");\n var useragent = acequire(\"./useragent\");\n var pressedKeys = null;\n var ts = 0;\n\n exports.addListener = function (elem, type, callback) {\n if (elem.addEventListener) {\n return elem.addEventListener(type, callback, false);\n }\n\n if (elem.attachEvent) {\n var wrapper = function wrapper() {\n callback.call(elem, window.event);\n };\n\n callback._wrapper = wrapper;\n elem.attachEvent(\"on\" + type, wrapper);\n }\n };\n\n exports.removeListener = function (elem, type, callback) {\n if (elem.removeEventListener) {\n return elem.removeEventListener(type, callback, false);\n }\n\n if (elem.detachEvent) {\n elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n }\n };\n\n exports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n };\n\n exports.stopPropagation = function (e) {\n if (e.stopPropagation) e.stopPropagation();else e.cancelBubble = true;\n };\n\n exports.preventDefault = function (e) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n };\n\n exports.getButton = function (e) {\n if (e.type == \"dblclick\") return 0;\n if (e.type == \"contextmenu\" || useragent.isMac && e.ctrlKey && !e.altKey && !e.shiftKey) return 2;\n\n if (e.preventDefault) {\n return e.button;\n } else {\n return {\n 1: 0,\n 2: 2,\n 4: 1\n }[e.button];\n }\n };\n\n exports.capture = function (el, eventHandler, releaseCaptureHandler) {\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n exports.removeListener(document, \"mousemove\", eventHandler, true);\n exports.removeListener(document, \"mouseup\", onMouseUp, true);\n exports.removeListener(document, \"dragstart\", onMouseUp, true);\n }\n\n exports.addListener(document, \"mousemove\", eventHandler, true);\n exports.addListener(document, \"mouseup\", onMouseUp, true);\n exports.addListener(document, \"dragstart\", onMouseUp, true);\n return onMouseUp;\n };\n\n exports.addTouchMoveListener = function (el, callback) {\n var startx, starty;\n exports.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n var touchObj = touches[0];\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n });\n exports.addListener(el, \"touchmove\", function (e) {\n var touches = e.touches;\n if (touches.length > 1) return;\n var touchObj = touches[0];\n e.wheelX = startx - touchObj.clientX;\n e.wheelY = starty - touchObj.clientY;\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n callback(e);\n });\n };\n\n exports.addMouseWheelListener = function (el, callback) {\n if (\"onmousewheel\" in el) {\n exports.addListener(el, \"mousewheel\", function (e) {\n var factor = 8;\n\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\n callback(e);\n });\n } else if (\"onwheel\" in el) {\n exports.addListener(el, \"wheel\", function (e) {\n var factor = 0.35;\n\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\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 });\n } else {\n exports.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\n callback(e);\n });\n }\n };\n\n exports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName) {\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) clicks = 1;\n } else {\n clicks = 1;\n }\n\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick) clicks = 1;\n if (timer) clearTimeout(timer);\n timer = setTimeout(function () {\n timer = null;\n }, 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 eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4) clicks = 0;else if (clicks > 1) return eventHandler[callbackName](eventNames[clicks], e);\n }\n\n function onDblclick(e) {\n clicks = 2;\n if (timer) clearTimeout(timer);\n timer = setTimeout(function () {\n timer = null;\n }, timeouts[clicks - 1] || 600);\n eventHandler[callbackName](\"mousedown\", e);\n eventHandler[callbackName](eventNames[clicks], e);\n }\n\n if (!Array.isArray(elements)) elements = [elements];\n elements.forEach(function (el) {\n exports.addListener(el, \"mousedown\", onMousedown);\n if (useragent.isOldIE) exports.addListener(el, \"dblclick\", onDblclick);\n });\n };\n\n var getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window) ? function (e) {\n return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n } : function (e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n };\n\n exports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n };\n\n function 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\"))) hashId |= 8;\n\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3) pressedKeys.altGr = 0;else return;\n }\n\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1) ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50) pressedKeys.altGr = true;\n }\n }\n }\n\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n\n if (hashId & 8 && keyCode >= 91 && keyCode <= 93) {\n keyCode = -1;\n }\n\n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented) return;\n }\n }\n\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented) return;else hashId &= ~8;\n }\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 exports.addCommandKeyListener = function (el, callback) {\n var addListener = exports.addListener;\n\n if (useragent.isOldGecko || useragent.isOpera && !(\"KeyboardEvent\" in window)) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function (e) {\n lastKeyDownKeyCode = e.keyCode;\n });\n addListener(el, \"keypress\", function (e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n });\n } else {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n });\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 });\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n });\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n };\n\n function resetPressedKeys() {\n pressedKeys = Object.create(null);\n }\n\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + postMessageId;\n exports.addListener(win, \"message\", function listener(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n exports.removeListener(win, \"message\", listener);\n callback();\n }\n });\n win.postMessage(messageName, \"*\");\n };\n }\n\n exports.nextFrame = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) == \"object\" && (window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame);\n if (exports.nextFrame) exports.nextFrame = exports.nextFrame.bind(window);else exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n});\nace.define(\"ace/lib/lang\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n exports.last = function (a) {\n return a[a.length - 1];\n };\n\n exports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n };\n\n exports.stringRepeat = function (string, count) {\n var result = '';\n\n while (count > 0) {\n if (count & 1) result += string;\n if (count >>= 1) string += string;\n }\n\n return result;\n };\n\n var trimBeginRegexp = /^\\s\\s*/;\n var trimEndRegexp = /\\s\\s*$/;\n\n exports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n };\n\n exports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n };\n\n exports.copyObject = function (obj) {\n var copy = {};\n\n for (var key in obj) {\n copy[key] = obj[key];\n }\n\n return copy;\n };\n\n exports.copyArray = function (array) {\n var copy = [];\n\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && _typeof(array[i]) == \"object\") copy[i] = this.copyObject(array[i]);else copy[i] = array[i];\n }\n\n return copy;\n };\n\n exports.deepCopy = function deepCopy(obj) {\n if (_typeof(obj) !== \"object\" || !obj) return obj;\n var copy;\n\n if (Array.isArray(obj)) {\n copy = [];\n\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n\n return copy;\n }\n\n if (Object.prototype.toString.call(obj) !== \"[object Object]\") return obj;\n copy = {};\n\n for (var key in obj) {\n copy[key] = deepCopy(obj[key]);\n }\n\n return copy;\n };\n\n exports.arrayToMap = function (arr) {\n var map = {};\n\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n\n return map;\n };\n\n exports.createMap = function (props) {\n var map = Object.create(null);\n\n for (var i in props) {\n map[i] = props[i];\n }\n\n return map;\n };\n\n exports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n };\n\n exports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n };\n\n exports.escapeHTML = function (str) {\n return str.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/ PLACEHOLDER.length) data = data.substr(9);else if (data.substr(0, 4) == PLACEHOLDER.substr(0, 4)) data = data.substr(4, data.length - PLACEHOLDER.length + 1);else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n\n if (data == PLACEHOLDER.charAt(0)) {} else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n\n if (data) host.onTextInput(data);\n }\n\n if (copied) {\n copied = false;\n }\n\n if (afterContextMenu) afterContextMenu = false;\n };\n\n var onInput = function onInput(e) {\n if (inComposition) return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n\n var handleClipboardData = function handleClipboardData(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA) return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n\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) return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function doCopy(e, isCut) {\n var data = host.getCopyText();\n if (!data) return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n if (useragent.isIOS) {\n cut = isCut;\n text.value = \"\\n aa\" + data + \"a a\\n\";\n text.setSelectionRange(4, 4 + data.length);\n copied = {\n value: data\n };\n }\n\n isCut ? host.onCut() : host.onCopy();\n if (!useragent.isIOS) event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function () {\n copied = false;\n resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n\n var onCut = function onCut(e) {\n doCopy(e, true);\n };\n\n var onCopy = function onCopy(e) {\n doCopy(e, false);\n };\n\n var onPaste = function onPaste(e) {\n var data = handleClipboardData(e);\n\n if (typeof data == \"string\") {\n if (data) host.onPaste(data, e);\n if (useragent.isIE) setTimeout(resetSelection);\n event.preventDefault(e);\n } else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n event.addListener(text, \"select\", onSelect);\n event.addListener(text, \"input\", onInput);\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n\n var onCompositionStart = function onCompositionStart(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n\n host.session.markUndoGroup();\n };\n\n var onCompositionUpdate = function onCompositionUpdate() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly) return;\n var val = text.value.replace(/\\x01/g, \"\");\n if (inComposition.lastValue === val) return;\n host.onCompositionUpdate(val);\n if (inComposition.lastValue) host.undo();\n if (inComposition.canUndo) inComposition.lastValue = val;\n\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n\n var onCompositionEnd = function onCompositionEnd(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function () {\n timer = null;\n var str = text.value.replace(/\\x01/g, \"\");\n if (inComposition) return;else if (str == c.lastValue) resetValue();else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n\n inputHandler = function compositionInputHandler(str) {\n if (timer) clearTimeout(timer);\n str = str.replace(/\\x01/g, \"\");\n if (str == c.lastValue) return \"\";\n if (c.lastValue && timer) host.undo();\n return str;\n };\n\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n\n var needsOnInput = !!useragent.isChrome && useragent.isChrome >= 53 || !!useragent.isWebKit && useragent.isWebKit >= 603;\n\n if (needsOnInput) {\n onInput();\n }\n };\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n event.addListener(text, \"compositionstart\", onCompositionStart);\n\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function () {\n syncComposition.schedule();\n });\n } else {\n event.addListener(text, \"keyup\", function () {\n syncComposition.schedule();\n });\n event.addListener(text, \"keydown\", function () {\n syncComposition.schedule();\n });\n }\n\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function () {\n return text;\n };\n\n this.setReadOnly = function (readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n\n host._emit(\"nativecontextmenu\", {\n target: host,\n domEvent: e\n });\n\n this.moveToMouse(e, true);\n };\n\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle) tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + \"height:\" + text.style.height + \";\" + (useragent.isIE ? \"opacity:0.1;\" : \"\");\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\n var move = function move(e) {\n text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n };\n\n move(e);\n if (e.type != \"mousedown\") return;\n if (host.renderer.$keepTextAreaAtCursor) host.renderer.$keepTextAreaAtCursor = null;\n clearTimeout(closeTimeout);\n if (useragent.isWin) event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n\n var onContextMenu = function onContextMenu(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n\n if (useragent.isIOS) {\n var typingResetTimeout = null;\n var typing = false;\n parentNode.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n });\n parentNode.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n });\n\n var detectArrowKeys = function detectArrowKeys(e) {\n if (document.activeElement !== text) return;\n if (typing) return;\n\n if (cut) {\n return setTimeout(function () {\n cut = false;\n }, 100);\n }\n\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n text.setSelectionRange(4, 5);\n\n if (selectionStart == selectionEnd) {\n switch (selectionStart) {\n case 0:\n host.onCommandKey(null, 0, KEYS.up);\n break;\n\n case 1:\n host.onCommandKey(null, 0, KEYS.home);\n break;\n\n case 2:\n host.onCommandKey(null, MODS.option, KEYS.left);\n break;\n\n case 4:\n host.onCommandKey(null, 0, KEYS.left);\n break;\n\n case 5:\n host.onCommandKey(null, 0, KEYS.right);\n break;\n\n case 7:\n host.onCommandKey(null, MODS.option, KEYS.right);\n break;\n\n case 8:\n host.onCommandKey(null, 0, KEYS.end);\n break;\n\n case 9:\n host.onCommandKey(null, 0, KEYS.down);\n break;\n }\n } else {\n switch (selectionEnd) {\n case 6:\n host.onCommandKey(null, MODS.shift, KEYS.right);\n break;\n\n case 7:\n host.onCommandKey(null, MODS.shift | MODS.option, KEYS.right);\n break;\n\n case 8:\n host.onCommandKey(null, MODS.shift, KEYS.end);\n break;\n\n case 9:\n host.onCommandKey(null, MODS.shift, KEYS.down);\n break;\n }\n\n switch (selectionStart) {\n case 0:\n host.onCommandKey(null, MODS.shift, KEYS.up);\n break;\n\n case 1:\n host.onCommandKey(null, MODS.shift, KEYS.home);\n break;\n\n case 2:\n host.onCommandKey(null, MODS.shift | MODS.option, KEYS.left);\n break;\n\n case 3:\n host.onCommandKey(null, MODS.shift, KEYS.left);\n break;\n }\n }\n };\n\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n };\n\n exports.TextInput = TextInput;\n});\nace.define(\"ace/keyboard/textinput\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/keyboard/textinput_ios\"], function (acequire, exports, module) {\n \"use strict\";\n\n var event = acequire(\"../lib/event\");\n var useragent = acequire(\"../lib/useragent\");\n var dom = acequire(\"../lib/dom\");\n var lang = acequire(\"../lib/lang\");\n var BROKEN_SETDATA = useragent.isChrome < 18;\n var USE_IE_MIME_TYPE = useragent.isIE;\n var TextInputIOS = acequire(\"./textinput_ios\").TextInput;\n\n var TextInput = function TextInput(parentNode, host) {\n if (useragent.isIOS) return TextInputIOS.call(this, parentNode, host);\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n var PLACEHOLDER = \"\\u2028\\u2028\";\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var tempStyle = '';\n var isSelectionEmpty = true;\n\n try {\n var isFocused = document.activeElement === text;\n } catch (e) {}\n\n event.addListener(text, \"blur\", function (e) {\n host.onBlur(e);\n isFocused = false;\n });\n event.addListener(text, \"focus\", function (e) {\n isFocused = true;\n host.onFocus(e);\n resetSelection();\n });\n\n this.focus = function () {\n if (tempStyle) return text.focus();\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n text.focus();\n setTimeout(function () {\n text.style.position = \"\";\n if (text.style.top == \"0px\") text.style.top = top;\n }, 0);\n };\n\n this.blur = function () {\n text.blur();\n };\n\n this.isFocused = function () {\n return isFocused;\n };\n\n var syncSelection = lang.delayedCall(function () {\n isFocused && resetSelection(isSelectionEmpty);\n });\n var syncValue = lang.delayedCall(function () {\n if (!inComposition) {\n text.value = PLACEHOLDER;\n isFocused && resetSelection();\n }\n });\n\n function resetSelection(isEmpty) {\n if (inComposition) return;\n inComposition = true;\n\n if (inputHandler) {\n var selectionStart = 0;\n var selectionEnd = isEmpty ? 0 : text.value.length - 1;\n } else {\n var selectionStart = isEmpty ? 2 : 1;\n var selectionEnd = 2;\n }\n\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n } catch (e) {}\n\n inComposition = false;\n }\n\n function resetValue() {\n if (inComposition) return;\n text.value = PLACEHOLDER;\n if (useragent.isWebKit) syncValue.schedule();\n }\n\n useragent.isWebKit || host.addEventListener('changeSelection', function () {\n if (host.selection.isEmpty() != isSelectionEmpty) {\n isSelectionEmpty = !isSelectionEmpty;\n syncSelection.schedule();\n }\n });\n resetValue();\n if (isFocused) host.onFocus();\n\n var isAllSelected = function isAllSelected(text) {\n return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n };\n\n var onSelect = function onSelect(e) {\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (inputHandler) {\n resetSelection(host.selection.isEmpty());\n }\n };\n\n var inputHandler = null;\n\n this.setInputHandler = function (cb) {\n inputHandler = cb;\n };\n\n this.getInputHandler = function () {\n return inputHandler;\n };\n\n var afterContextMenu = false;\n\n var sendText = function sendText(data) {\n if (inputHandler) {\n data = inputHandler(data);\n inputHandler = null;\n }\n\n if (pasted) {\n resetSelection();\n if (data) host.onPaste(data);\n pasted = false;\n } else if (data == PLACEHOLDER.charAt(0)) {\n if (afterContextMenu) host.execCommand(\"del\", {\n source: \"ace\"\n });else // some versions of android do not fire keydown when pressing backspace\n host.execCommand(\"backspace\", {\n source: \"ace\"\n });\n } else {\n if (data.substring(0, 2) == PLACEHOLDER) data = data.substr(2);else if (data.charAt(0) == PLACEHOLDER.charAt(0)) data = data.substr(1);else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n if (data) host.onTextInput(data);\n }\n\n if (afterContextMenu) afterContextMenu = false;\n };\n\n var onInput = function onInput(e) {\n if (inComposition) return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n\n var handleClipboardData = function handleClipboardData(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA) return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n\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) return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function doCopy(e, isCut) {\n var data = host.getCopyText();\n if (!data) return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\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 resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n\n var onCut = function onCut(e) {\n doCopy(e, true);\n };\n\n var onCopy = function onCopy(e) {\n doCopy(e, false);\n };\n\n var onPaste = function onPaste(e) {\n var data = handleClipboardData(e);\n\n if (typeof data == \"string\") {\n if (data) host.onPaste(data, e);\n if (useragent.isIE) setTimeout(resetSelection);\n event.preventDefault(e);\n } else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n event.addListener(text, \"select\", onSelect);\n event.addListener(text, \"input\", onInput);\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n\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) return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n\n case 86:\n onPaste(e);\n break;\n\n case 88:\n onCut(e);\n break;\n }\n });\n }\n\n var onCompositionStart = function onCompositionStart(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n\n host.session.markUndoGroup();\n };\n\n var onCompositionUpdate = function onCompositionUpdate() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly) return;\n var val = text.value.replace(/\\u2028/g, \"\");\n if (inComposition.lastValue === val) return;\n host.onCompositionUpdate(val);\n if (inComposition.lastValue) host.undo();\n if (inComposition.canUndo) inComposition.lastValue = val;\n\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n\n var onCompositionEnd = function onCompositionEnd(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function () {\n timer = null;\n var str = text.value.replace(/\\u2028/g, \"\");\n if (inComposition) return;else if (str == c.lastValue) resetValue();else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n\n inputHandler = function compositionInputHandler(str) {\n if (timer) clearTimeout(timer);\n str = str.replace(/\\u2028/g, \"\");\n if (str == c.lastValue) return \"\";\n if (c.lastValue && timer) host.undo();\n return str;\n };\n\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n\n var needsOnInput = !!useragent.isChrome && useragent.isChrome >= 53 || !!useragent.isWebKit && useragent.isWebKit >= 603;\n\n if (needsOnInput) {\n onInput();\n }\n };\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n event.addListener(text, \"compositionstart\", onCompositionStart);\n\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function () {\n syncComposition.schedule();\n });\n } else {\n event.addListener(text, \"keyup\", function () {\n syncComposition.schedule();\n });\n event.addListener(text, \"keydown\", function () {\n syncComposition.schedule();\n });\n }\n\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function () {\n return text;\n };\n\n this.setReadOnly = function (readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n\n host._emit(\"nativecontextmenu\", {\n target: host,\n domEvent: e\n });\n\n this.moveToMouse(e, true);\n };\n\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle) tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + \"height:\" + text.style.height + \";\" + (useragent.isIE ? \"opacity:0.1;\" : \"\");\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\n var move = function move(e) {\n text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n };\n\n move(e);\n if (e.type != \"mousedown\") return;\n if (host.renderer.$keepTextAreaAtCursor) host.renderer.$keepTextAreaAtCursor = null;\n clearTimeout(closeTimeout);\n if (useragent.isWin) event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n\n var onContextMenu = function onContextMenu(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n };\n\n exports.TextInput = TextInput;\n});\nace.define(\"ace/mouse/default_handlers\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var dom = acequire(\"../lib/dom\");\n var event = acequire(\"../lib/event\");\n var useragent = acequire(\"../lib/useragent\");\n var DRAG_OFFSET = 0; // pixels\n\n var SCROLL_COOLDOWN_T = 250; // milliseconds\n\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\", \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n\n (function () {\n this.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n editor.$blockScrolling++;\n if (selectionEmpty || button == 1) editor.selection.moveToPosition(pos);\n editor.$blockScrolling--;\n\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla) ev.preventDefault();\n }\n\n return;\n }\n\n this.mousedownEvent.time = Date.now();\n\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n\n if (this.$focusTimout && !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 editor.$blockScrolling++;\n if (this.mousedownEvent.getShiftKey()) editor.selection.selectToPosition(pos);else if (!waitForClickSelection) editor.selection.moveToPosition(pos);\n if (!waitForClickSelection) this.select();\n\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n editor.$blockScrolling--;\n };\n\n this.select = function () {\n var anchor,\n editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n editor.$blockScrolling++;\n\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\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.extendSelectionBy = function (unitName) {\n var anchor,\n editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n editor.$blockScrolling++;\n\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) 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) 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\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd = this.selectAllEnd = this.selectByWordsEnd = this.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n\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 if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout) 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 var range = session.getBracketRange(pos);\n\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\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 this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n\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\n this.select();\n };\n\n this.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function (ev) {\n if (ev.getAccelKey()) return;\n\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 if (!this.$lastScroll) this.$lastScroll = {\n t: 0,\n vx: 0,\n vy: 0,\n allowed: 0\n };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = ev.wheelX / dt;\n var vy = ev.wheelY / dt;\n\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 var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0)) canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed)) 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.1 * Math.abs(prevScroll.vx) && Math.abs(vy) <= 1.1 * Math.abs(prevScroll.vy);\n\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\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 this.onTouchMove = function (ev) {\n this.editor._emit(\"mousewheel\", ev);\n };\n }).call(DefaultHandlers.prototype);\n exports.DefaultHandlers = DefaultHandlers;\n\n function calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n }\n\n function calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row) var cmp = 2 * cursor.column - range.start.column - range.end.column;else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) var cmp = cursor.column - 4;else var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0) return {\n cursor: range.start,\n anchor: range.end\n };else return {\n cursor: range.end,\n anchor: range.start\n };\n }\n});\nace.define(\"ace/tooltip\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var dom = acequire(\"./lib/dom\");\n\n function 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\n this.getElement = function () {\n return this.$element || this.$init();\n };\n\n this.setText = function (text) {\n dom.setInnerText(this.getElement(), text);\n };\n\n this.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n\n this.setPosition = function (x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n\n this.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n\n this.show = function (text, x, y) {\n if (text != null) this.setText(text);\n if (x != null && y != null) this.setPosition(x, y);\n\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\n this.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n\n this.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n\n this.destroy = function () {\n this.isOpen = false;\n\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n }).call(Tooltip.prototype);\n exports.Tooltip = Tooltip;\n});\nace.define(\"ace/mouse/default_gutter_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/event\", \"ace/tooltip\"], function (acequire, exports, module) {\n \"use strict\";\n\n var dom = acequire(\"../lib/dom\");\n var oop = acequire(\"../lib/oop\");\n var event = acequire(\"../lib/event\");\n var Tooltip = acequire(\"../tooltip\").Tooltip;\n\n function GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0) return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\") return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey()) selection.selectTo(row, 0);else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation) return hideTooltip();\n var maxRow = editor.session.getLength();\n\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)) return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation) return;\n tooltipAnnotation = annotation.text.join(\"
\");\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n\n editor._signal(\"showGutterTooltip\", tooltip);\n\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) tooltipTimeout = clearTimeout(tooltipTimeout);\n\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n\n editor._signal(\"hideGutterTooltip\", tooltip);\n\n editor.removeEventListener(\"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\")) return hideTooltip();\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse) moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout) return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed) showTooltip();else hideTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout) return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n });\n editor.on(\"changeSession\", hideTooltip);\n }\n\n function GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n }\n\n oop.inherits(GutterTooltip, Tooltip);\n (function () {\n this.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n\n if (x + width > windowWidth) {\n x -= x + width - windowWidth;\n }\n\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n }).call(GutterTooltip.prototype);\n exports.GutterHandler = GutterHandler;\n});\nace.define(\"ace/mouse/mouse_event\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var event = acequire(\"../lib/event\");\n var useragent = acequire(\"../lib/useragent\");\n\n var MouseEvent = exports.MouseEvent = function (domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n };\n\n (function () {\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\n this.getDocumentPosition = function () {\n if (this.$pos) return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n\n this.inSelection = function () {\n if (this.$inSelection !== null) return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty()) this.$inSelection = false;else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n\n this.getButton = function () {\n return event.getButton(this.domEvent);\n };\n\n this.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n\n this.getAccelKey = useragent.isMac ? function () {\n return this.domEvent.metaKey;\n } : function () {\n return this.domEvent.ctrlKey;\n };\n }).call(MouseEvent.prototype);\n});\nace.define(\"ace/mouse/dragdrop_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var dom = acequire(\"../lib/dom\");\n var event = acequire(\"../lib/event\");\n var useragent = acequire(\"../lib/useragent\");\n var AUTOSCROLL_DELAY = 200;\n var SCROLL_CURSOR_DELAY = 200;\n var SCROLL_CURSOR_HYSTERESIS = 5;\n\n function DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var blankImage = dom.createElement(\"img\");\n blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (useragent.isOpera) blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor,\n 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\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n\n if (useragent.isOpera) {\n editor.container.appendChild(blankImage);\n blankImage.scrollTop = 0;\n }\n\n dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n\n if (useragent.isOpera) {\n editor.container.removeChild(blankImage);\n }\n\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\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\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\") editor.session.remove(editor.getSelectionRange());\n editor.renderer.$cursorLayer.setBlinking(true);\n }\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)) return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) 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)) return;\n x = e.clientX;\n y = e.clientY;\n\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n\n if (onMouseMoveTimer !== null) onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function (e) {\n counter--;\n\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) return;\n var dataTransfer = e.dataTransfer;\n\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\n break;\n\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\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\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\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.$blockScrolling += 1;\n editor.moveCursorToPosition(cursor);\n editor.$blockScrolling -= 1;\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {\n x: x,\n y: y\n };\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n\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 = {\n row: cursor.row,\n column: cursor.column\n };\n\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += offsets.x.left < offsets.x.right ? -3 : +2;\n }\n\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += offsets.y.top < offsets.y.bottom ? -1 : +1;\n }\n\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n\n if (vScroll || hScroll && !vMovement) {\n if (!autoScrollStartTime) autoScrollStartTime = now;else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) 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()) 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.$blockScrolling += 1;\n editor.selection.fromOrientedRange(range);\n editor.$blockScrolling -= 1;\n if (editor.isFocused() && !isInternal) editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n\n var onMouseMoveTimer = null;\n\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker) 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 var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"copy\";else if (moveAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"move\";else if (copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"copy\";\n return dropEffect;\n }\n }\n\n (function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay()) 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.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\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\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) target.dragDrop();\n }\n\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n\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) return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget) eventTarget.unselectable = \"on\";\n\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n }).call(DragdropHandler.prototype);\n\n function calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n }\n\n exports.DragdropHandler = DragdropHandler;\n});\nace.define(\"ace/lib/net\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (acequire, exports, module) {\n \"use strict\";\n\n var dom = acequire(\"./dom\");\n\n exports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n\n xhr.send(null);\n };\n\n exports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\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) callback();\n }\n };\n };\n\n exports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n };\n});\nace.define(\"ace/lib/event_emitter\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var EventEmitter = {};\n\n var stopPropagation = function stopPropagation() {\n this.propagationStopped = true;\n };\n\n var preventDefault = function preventDefault() {\n this.defaultPrevented = true;\n };\n\n EventEmitter._emit = EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler) return;\n if (_typeof(e) != \"object\" || !e) e = {};\n if (!e.type) e.type = eventName;\n if (!e.stopPropagation) e.stopPropagation = stopPropagation;\n if (!e.preventDefault) e.preventDefault = preventDefault;\n listeners = listeners.slice();\n\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped) break;\n }\n\n if (defaultHandler && !e.defaultPrevented) return defaultHandler(e, this);\n };\n\n EventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners) return;\n listeners = listeners.slice();\n\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n }\n };\n\n EventEmitter.once = function (eventName, callback) {\n var _self = this;\n\n callback && this.addEventListener(eventName, function newCallback() {\n _self.removeEventListener(eventName, newCallback);\n\n callback.apply(null, arguments);\n });\n };\n\n EventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers) handlers = this._defaultHandlers = {\n _disabled_: {}\n };\n\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled) handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1) disabled.splice(i, 1);\n }\n\n handlers[eventName] = callback;\n };\n\n EventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers) return;\n var disabled = handlers._disabled_[eventName];\n\n if (handlers[eventName] == callback) {\n var old = handlers[eventName];\n if (disabled) this.setDefaultHandler(eventName, disabled.pop());\n } else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1) disabled.splice(i, 1);\n }\n };\n\n EventEmitter.on = EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners) listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1) listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\n\n EventEmitter.off = EventEmitter.removeListener = EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners) return;\n var index = listeners.indexOf(callback);\n if (index !== -1) listeners.splice(index, 1);\n };\n\n EventEmitter.removeAllListeners = function (eventName) {\n if (this._eventRegistry) this._eventRegistry[eventName] = [];\n };\n\n exports.EventEmitter = EventEmitter;\n});\nace.define(\"ace/lib/app_config\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (acequire, exports, module) {\n \"no use strict\";\n\n var oop = acequire(\"./oop\");\n var EventEmitter = acequire(\"./event_emitter\").EventEmitter;\n var optionsProvider = {\n setOptions: function setOptions(optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function getOptions(optionNames) {\n var result = {};\n\n if (!optionNames) {\n optionNames = Object.keys(this.$options);\n } else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function setOption(name, value) {\n if (this[\"$\" + name] === value) return;\n var opt = this.$options[name];\n\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n\n if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet) this[\"$\" + name] = value;\n if (opt && opt.set) opt.set.call(this, value);\n },\n getOption: function getOption(name) {\n var opt = this.$options[name];\n\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n\n if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n };\n\n function warn(message) {\n if (typeof console != \"undefined\" && console.warn) console.warn.apply(console, arguments);\n }\n\n function reportError(msg, data) {\n var e = new Error(msg);\n e.data = data;\n if ((typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) == \"object\" && console.error) console.error(e);\n setTimeout(function () {\n throw e;\n });\n }\n\n var AppConfig = function AppConfig() {\n this.$defaultOptions = {};\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.defineOptions = function (obj, path, options) {\n if (!obj.$options) this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\") opt = {\n forwardTo: opt\n };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt) obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n\n this.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt) obj.setOption(key, opt.value);\n });\n };\n\n this.setDefaultValue = function (path, name, value) {\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n\n if (opts[name]) {\n if (opts.forwardTo) this.setDefaultValue(opts.forwardTo, name, value);else opts[name].value = value;\n }\n };\n\n this.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n\n this.warn = warn;\n this.reportError = reportError;\n }).call(AppConfig.prototype);\n exports.AppConfig = AppConfig;\n});\nace.define(\"ace/config\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/lib/net\", \"ace/lib/app_config\"], function (acequire, exports, module) {\n \"no use strict\";\n\n var lang = acequire(\"./lib/lang\");\n var oop = acequire(\"./lib/oop\");\n var net = acequire(\"./lib/net\");\n var AppConfig = acequire(\"./lib/app_config\").AppConfig;\n module.exports = exports = new AppConfig();\n\n var global = function () {\n return this || typeof window != \"undefined\" && window;\n }();\n\n var options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {}\n };\n\n exports.get = function (key) {\n if (!options.hasOwnProperty(key)) throw new Error(\"Unknown config key: \" + key);\n return options[key];\n };\n\n exports.set = function (key, value) {\n if (!options.hasOwnProperty(key)) throw new Error(\"Unknown config key: \" + key);\n options[key] = value;\n };\n\n exports.all = function () {\n return lang.copyObject(options);\n };\n\n exports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name]) return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n\n if ((!base || base == component) && parts.length > 1) base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n\n if (path && path.slice(-1) != \"/\") path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n };\n\n exports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n };\n\n exports.$loading = {};\n\n exports.loadModule = function (moduleName, onLoad) {\n var module, moduleType;\n\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = acequire(moduleName);\n } catch (e) {}\n\n if (module && !exports.$loading[moduleName]) return onLoad && onLoad(module);\n if (!exports.$loading[moduleName]) exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1) return;\n\n var afterLoad = function afterLoad() {\n acequire([moduleName], function (module) {\n exports._emit(\"load.module\", {\n name: moduleName,\n module: module\n });\n\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\")) return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n };\n\n init(true);\n\n function init(packaged) {\n if (!global || !global.document) return;\n options.packaged = packaged || acequire.packaged || module.packaged || global.define && define.packaged;\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = document.currentScript || document._currentScript; // native or polyfill\n\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n var scripts = currentDocument.getElementsByTagName(\"script\");\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n var src = script.src || script.getAttribute(\"src\");\n if (!src) continue;\n var attributes = script.attributes;\n\n for (var j = 0, l = attributes.length; j < l; j++) {\n var attr = attributes[j];\n\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n if (m) scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions) {\n if (typeof scriptOptions[key] !== \"undefined\") exports.set(key, scriptOptions[key]);\n }\n }\n\n exports.init = init;\n\n function deHyphenate(str) {\n return str.replace(/-(.)/g, function (m, m1) {\n return m1.toUpperCase();\n });\n }\n});\nace.define(\"ace/mouse/mouse_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/mouse/default_handlers\", \"ace/mouse/default_gutter_handler\", \"ace/mouse/mouse_event\", \"ace/mouse/dragdrop_handler\", \"ace/config\"], function (acequire, exports, module) {\n \"use strict\";\n\n var event = acequire(\"../lib/event\");\n var useragent = acequire(\"../lib/useragent\");\n var DefaultHandlers = acequire(\"./default_handlers\").DefaultHandlers;\n var DefaultGutterHandler = acequire(\"./default_gutter_handler\").GutterHandler;\n var MouseEvent = acequire(\"./mouse_event\").MouseEvent;\n var DragdropHandler = acequire(\"./dragdrop_handler\").DragdropHandler;\n var config = acequire(\"../config\");\n\n var MouseHandler = function MouseHandler(editor) {\n var _self = this;\n\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n\n var focusEditor = function focusEditor(e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus() || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred) window.focus();\n editor.focus();\n };\n\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\n event.addMultiMouseDownListener([mouseTarget, editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner, editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner, editor.textInput && editor.textInput.getElement()].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\n event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, \"touchmove\"));\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\n event.addListener(mouseTarget, \"mousedown\", focusEditor);\n event.addListener(gutterEl, \"mousedown\", focusEditor);\n\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\n }\n\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled) return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n } else {\n renderer.setCursorStyle(\"\");\n }\n });\n };\n\n (function () {\n this.onMouseEvent = function (name, e) {\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length) return;\n\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n\n this.editor._emit(name, mouseEvent);\n };\n\n this.onTouchMove = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = 1; //this.$scrollSpeed * 2;\n\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n\n this.editor._emit(name, mouseEvent);\n };\n\n this.setState = function (state) {\n this.state = state;\n };\n\n this.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var renderer = this.editor.renderer;\n if (renderer.$keepTextAreaAtCursor) renderer.$keepTextAreaAtCursor = null;\n var self = this;\n\n var onMouseMove = function onMouseMove(e) {\n if (!e) return;\n if (useragent.isWebKit && !e.which && self.releaseMouse) return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n\n var onCaptureEnd = function onCaptureEnd(e) {\n clearInterval(timerId);\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n\n if (renderer.$keepTextAreaAtCursor == null) {\n renderer.$keepTextAreaAtCursor = true;\n renderer.$moveTextAreaToCursor();\n }\n\n self.isMousePressed = false;\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n };\n\n var onCaptureInterval = function onCaptureInterval() {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () {\n onCaptureEnd(ev);\n });\n }\n\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n\n this.releaseMouse = null;\n\n this.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\") return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent) event.stopEvent(e.domEvent);\n }.bind(this);\n\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n }).call(MouseHandler.prototype);\n config.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: {\n initialValue: 2\n },\n dragDelay: {\n initialValue: useragent.isMac ? 150 : 0\n },\n dragEnabled: {\n initialValue: true\n },\n focusTimout: {\n initialValue: 0\n },\n tooltipFollowsMouse: {\n initialValue: true\n }\n });\n exports.MouseHandler = MouseHandler;\n});\nace.define(\"ace/mouse/fold_handler\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n\n if (fold) {\n if (e.getAccelKey()) session.removeFold(fold);else session.expandFold(fold);\n e.stop();\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row]) editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused()) editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n if (fold) {\n session.removeFold(fold);\n } else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({\n row: range.start.row,\n column: 0\n });\n }\n }\n\n e.stop();\n }\n });\n }\n\n exports.FoldHandler = FoldHandler;\n});\nace.define(\"ace/keyboard/keybinding\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/event\"], function (acequire, exports, module) {\n \"use strict\";\n\n var keyUtil = acequire(\"../lib/keys\");\n var event = acequire(\"../lib/event\");\n\n var KeyBinding = function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = {\n editor: editor\n };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n };\n\n (function () {\n this.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n\n this.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb) return;\n\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler) {\n this.removeKeyboardHandler(h[h.length - 1]);\n }\n\n this.addKeyboardHandler(kb, 1);\n };\n\n this.addKeyboardHandler = function (kb, pos) {\n if (!kb) return;\n if (typeof kb == \"function\" && !kb.handleKeyboard) kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1) this.$handlers.splice(i, 1);\n if (pos == undefined) this.$handlers.push(kb);else this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach) kb.attach(this.$editor);\n };\n\n this.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1) return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n\n this.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n\n this.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n\n this.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command) continue;\n\n if (toExecute.command == \"null\") {\n success = true;\n } else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n\n if (success && e && hashId != -1 && toExecute.passEvent != true && toExecute.command.passEvent != true) {\n event.stopEvent(e);\n }\n\n if (success) break;\n }\n\n if (!success && hashId == -1) {\n toExecute = {\n command: \"insertstring\"\n };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n\n if (success && this.$editor._signal) this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n\n this.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n\n this.onTextInput = function (text) {\n this.$callKeyboardHandlers(-1, text);\n };\n }).call(KeyBinding.prototype);\n exports.KeyBinding = KeyBinding;\n});\nace.define(\"ace/lib/bidiutil\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var ArabicAlefBetIntervalsBegine = [\"\\u0621\", \"\\u0641\"];\n var ArabicAlefBetIntervalsEnd = [\"\\u063A\", \"\\u064A\"];\n var dir = 0,\n hiLevel = 0;\n var lastArabic = false,\n hasUBAT_AL = false,\n hasUBAT_B = false,\n hasUBAT_S = false,\n hasBlockSep = false,\n hasSegSep = false;\n var impTab_LTR = [[0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]];\n var impTab_RTL = [[2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]];\n var LTR = 0,\n RTL = 1;\n var L = 0;\n var R = 1;\n var EN = 2;\n var AN = 3;\n var ON = 4;\n var B = 5;\n var S = 6;\n var AL = 7;\n var WS = 8;\n var CS = 9;\n var ES = 10;\n var ET = 11;\n var NSM = 12;\n var LRE = 13;\n var RLE = 14;\n var PDF = 15;\n var LRO = 16;\n var RLO = 17;\n var BN = 18;\n var UnicodeTBL00 = [BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S, WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN, BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON, ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON];\n var UnicodeTBL20 = [WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS, ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS];\n\n function _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR,\n prevState = null,\n newClass = null,\n newLevel = null,\n newState = 0,\n action = null,\n cond = null,\n condPos = -1,\n i = null,\n ix = null,\n classes = [];\n\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n\n condPos = -1;\n } else {\n condPos = -1;\n }\n }\n\n cond = impTab[newState][6];\n\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n } else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n\n condPos = -1;\n }\n }\n\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n\n hiLevel |= newLevel;\n }\n\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n } else {\n break;\n }\n }\n }\n }\n }\n }\n\n function _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n\n return;\n }\n\n var len = _array.length,\n start = 0,\n end,\n lo,\n hi,\n tmp;\n\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n\n while (end < len && levels[end] >= lev) {\n end++;\n }\n\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n\n start = end;\n }\n\n start++;\n }\n }\n\n function _getCharClass(chars, types, classes, ix) {\n var cType = types[ix],\n wType,\n nType,\n len,\n i;\n\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n\n case ON:\n case AN:\n return cType;\n\n case EN:\n return lastArabic ? AN : EN;\n\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n\n case WS:\n return ON;\n\n case CS:\n if (ix < 1 || ix + 1 >= types.length || (wType = classes[ix - 1]) != EN && wType != AN || (nType = types[ix + 1]) != EN && nType != AN) {\n return ON;\n }\n\n if (lastArabic) {\n nType = AN;\n }\n\n return nType == wType ? nType : ON;\n\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n\n if (wType == EN && ix + 1 < types.length && types[ix + 1] == EN) {\n return EN;\n }\n\n return ON;\n\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n\n if (lastArabic) {\n return ON;\n }\n\n i = ix + 1;\n len = types.length;\n\n while (i < len && types[i] == ET) {\n i++;\n }\n\n if (i < len && types[i] == EN) {\n return EN;\n }\n\n return ON;\n\n case NSM:\n len = types.length;\n i = ix + 1;\n\n while (i < len && types[i] == NSM) {\n i++;\n }\n\n if (i < len) {\n var c = chars[ix],\n rtlCandidate = c >= 0x0591 && c <= 0x08FF || c == 0xFB1E;\n wType = types[i];\n\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n\n return classes[ix - 1];\n\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n\n case S:\n hasUBAT_S = true;\n return ON;\n\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n\n case BN:\n return ON;\n }\n }\n\n function _getCharacterType(ch) {\n var uc = ch.charCodeAt(0),\n hi = uc >> 8;\n\n if (hi == 0) {\n return uc > 0x00BF ? L : UnicodeTBL00[uc];\n } else if (hi == 5) {\n return /[\\u0591-\\u05f4]/.test(ch) ? R : L;\n } else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch)) return NSM;else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch)) return AN;else if (uc == 0x066A) return ET;else if (/[\\u06f0-\\u06f9]/.test(ch)) return EN;else return AL;\n } else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n } else if (hi == 0xFE) {\n return uc >= 0xFE70 ? AL : ON;\n }\n\n return ON;\n }\n\n function _isArabicDiacritics(ch) {\n return ch >= \"\\u064B\" && ch <= \"\\u0655\";\n }\n\n exports.L = L;\n exports.R = R;\n exports.EN = EN;\n exports.ON_R = 3;\n exports.AN = 4;\n exports.R_H = 5;\n exports.B = 6;\n exports.DOT = \"\\xB7\";\n\n exports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2) return {};\n var chars = text.split(\"\"),\n logicalFromVisual = new Array(chars.length),\n bidiLevels = new Array(chars.length),\n levels = [];\n dir = isRtl ? RTL : LTR;\n\n _computeLevels(chars, levels, chars.length, textCharTypes);\n\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++) {\n ;\n }\n\n _invertLevel(2, levels, logicalFromVisual);\n\n _invertLevel(1, levels, logicalFromVisual);\n\n for (var i = 0; i < logicalFromVisual.length - 1; i++) {\n //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n } else if (levels[i] === R && (textCharTypes[i] > AL && textCharTypes[i] < LRE || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n } else if (i > 0 && chars[i - 1] === \"\\u0644\" && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n\n if (chars[chars.length - 1] === exports.DOT) levels[chars.length - 1] = exports.B;\n\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n\n return {\n 'logicalFromVisual': logicalFromVisual,\n 'bidiLevels': bidiLevels\n };\n };\n\n exports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL)) ret = true;\n }\n\n return ret;\n };\n\n exports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx) return i;\n }\n\n return 0;\n };\n});\nace.define(\"ace/bidihandler\", [\"require\", \"exports\", \"module\", \"ace/lib/bidiutil\", \"ace/lib/lang\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var bidiUtil = acequire(\"./lib/bidiutil\");\n var lang = acequire(\"./lib/lang\");\n var useragent = acequire(\"./lib/useragent\");\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n\n var BidiHandler = function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.isLastRow = false;\n this.EOF = \"\\xB6\";\n this.seenBidi = false;\n };\n\n (function () {\n this.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi) return false;\n\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n\n return this.bidiMap.bidiLevels;\n };\n\n this.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n } else {\n this.currentRow = null;\n }\n };\n\n this.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0) docRow = this.session.$docRowCache[index];\n }\n\n return docRow;\n };\n\n this.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n\n if (rowCache.length) {\n var currentIndex,\n prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex) break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined) docRow = this.getDocumentRow();\n this.wrapIndent = 0;\n this.isLastRow = docRow === this.session.getLength() - 1;\n this.line = this.session.getLine(docRow);\n\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n\n if (splits) {\n if (splitIndex === undefined) splitIndex = this.getSplitIndex();\n\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.line = splitIndex < splits.length ? this.line.substring(splits[splitIndex - 1], splits[splits.length - 1]) : this.line.substring(splits[splits.length - 1]);\n } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n }\n\n var session = this.session,\n shift = 0,\n size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = ch === '\\t' ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n\n return ch;\n });\n };\n\n this.updateBidiMap = function () {\n var textCharTypes = [],\n endOfLine = this.isLastRow ? this.EOF : this.EOL;\n var line = this.line + (this.showInvisibles ? endOfLine : bidiUtil.DOT);\n\n if (bidiUtil.hasBidiCharacters(line, textCharTypes)) {\n this.bidiMap = bidiUtil.doBidiReorder(line, textCharTypes, this.isRtlDir);\n } else {\n this.bidiMap = {};\n }\n };\n\n this.markAsDirty = function () {\n this.currentRow = null;\n };\n\n this.updateCharacterWidths = function (fontMetrics) {\n if (!this.seenBidi) return;\n if (this.characterWidth === fontMetrics.$characterSize.width) return;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05D4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = useragent.isChrome ? bidiCharWidth : bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = 0;\n this.currentRow = null;\n };\n\n this.getShowInvisibles = function () {\n return this.showInvisibles;\n };\n\n this.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n\n this.setTextDir = function (isRtlDir) {\n this.isRtlDir = isRtlDir;\n };\n\n this.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(col > 0 ? col - 1 : 0, this.bidiMap),\n levels = this.bidiMap.bidiLevels,\n left = 0;\n if (col === 0 && levels[visualIdx] % 2 !== 0) visualIdx++;\n\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (col !== 0 && levels[visualIdx] % 2 === 0) left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent) left += this.wrapIndent * this.charWidths[bidiUtil.L];\n return left;\n };\n\n this.getSelections = function (startCol, endCol) {\n var map = this.bidiMap,\n levels = map.bidiLevels,\n level,\n offset = this.wrapIndent * this.charWidths[bidiUtil.L],\n selections = [],\n selColMin = Math.min(startCol, endCol) - this.wrapIndent,\n selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false,\n isSelectedPrev = false,\n selectionStart = 0;\n\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = logIdx >= selColMin && logIdx < selColMax;\n\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n } else if (!isSelected && isSelectedPrev) {\n selections.push({\n left: selectionStart,\n width: offset - selectionStart\n });\n }\n\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && visIdx === levels.length) {\n selections.push({\n left: selectionStart,\n width: offset - selectionStart\n });\n }\n\n return selections;\n };\n\n this.offsetToCol = function (posX) {\n var logicalIdx = 0,\n posX = Math.max(posX, 0),\n offset = 0,\n visualIdx = 0,\n levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent) {\n posX -= this.wrapIndent * this.charWidths[bidiUtil.L];\n }\n\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n\n if (visualIdx > 0 && levels[visualIdx - 1] % 2 !== 0 && levels[visualIdx] % 2 === 0) {\n if (posX < offset) visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n } else if (visualIdx > 0 && levels[visualIdx - 1] % 2 === 0 && levels[visualIdx] % 2 !== 0) {\n logicalIdx = 1 + (posX > offset ? this.bidiMap.logicalFromVisual[visualIdx] : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n } else if (this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && levels[visualIdx - 1] % 2 === 0 || !this.isRtlDir && visualIdx === 0 && levels[visualIdx] % 2 !== 0) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n } else {\n if (visualIdx > 0 && levels[visualIdx - 1] % 2 !== 0 && charWidth !== 0) visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n return logicalIdx + this.wrapIndent;\n };\n }).call(BidiHandler.prototype);\n exports.BidiHandler = BidiHandler;\n});\nace.define(\"ace/range\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var comparePoints = function comparePoints(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n };\n\n var Range = function Range(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n this.end = {\n row: endRow,\n column: endColumn\n };\n };\n\n (function () {\n this.isEqual = function (range) {\n return this.start.row === range.start.row && this.end.row === range.end.row && this.start.column === range.start.column && this.end.column === range.end.column;\n };\n\n this.toString = function () {\n return \"Range: [\" + this.start.row + \"/\" + this.start.column + \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\";\n };\n\n this.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n\n this.compareRange = function (range) {\n var cmp,\n end = range.end,\n start = range.start;\n cmp = this.compare(end.row, end.column);\n\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n\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\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n\n this.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n\n this.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n\n this.intersects = function (range) {\n var cmp = this.compareRange(range);\n return cmp == -1 || cmp == 0 || cmp == 1;\n };\n\n this.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n\n this.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\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\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\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\n return false;\n };\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\n return false;\n };\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\n return false;\n };\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) return -1;\n if (row > this.end.row) return 1;\n if (this.start.row === row) return column >= this.start.column ? 0 : -1;\n if (this.end.row === row) return column <= this.end.column ? 0 : 1;\n return 0;\n };\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\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\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\n this.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow) var end = {\n row: lastRow + 1,\n column: 0\n };else if (this.end.row < firstRow) var end = {\n row: firstRow,\n column: 0\n };\n if (this.start.row > lastRow) var start = {\n row: lastRow + 1,\n column: 0\n };else if (this.start.row < firstRow) var start = {\n row: firstRow,\n column: 0\n };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0) return this;else if (cmp == -1) var start = {\n row: row,\n column: column\n };else var end = {\n row: row,\n 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\n this.isMultiLine = function () {\n return this.start.row !== this.end.row;\n };\n\n this.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n\n this.collapseRows = function () {\n if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);else return new Range(this.start.row, 0, this.end.row, 0);\n };\n\n this.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n\n this.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n }).call(Range.prototype);\n\n Range.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n };\n\n Range.comparePoints = comparePoints;\n\n Range.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n };\n\n exports.Range = Range;\n});\nace.define(\"ace/selection\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var lang = acequire(\"./lib/lang\");\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n var Range = acequire(\"./range\").Range;\n\n var Selection = function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\n this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\n var self = this;\n this.lead.on(\"change\", function (e) {\n self._emit(\"changeCursor\");\n\n if (!self.$isEmpty) self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) self.$desiredColumn = null;\n });\n this.selectionAnchor.on(\"change\", function () {\n if (!self.$isEmpty) self._emit(\"changeSelection\");\n });\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.isEmpty = function () {\n return this.$isEmpty || this.anchor.row == this.lead.row && this.anchor.column == this.lead.column;\n };\n\n this.isMultiLine = function () {\n if (this.isEmpty()) {\n return false;\n }\n\n return this.getRange().isMultiLine();\n };\n\n this.getCursor = function () {\n return this.lead.getPosition();\n };\n\n this.setSelectionAnchor = function (row, column) {\n this.anchor.setPosition(row, column);\n\n if (this.$isEmpty) {\n this.$isEmpty = false;\n\n this._emit(\"changeSelection\");\n }\n };\n\n this.getSelectionAnchor = function () {\n if (this.$isEmpty) return this.getSelectionLead();else return this.anchor.getPosition();\n };\n\n this.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n\n this.shiftSelection = function (columns) {\n if (this.$isEmpty) {\n this.moveCursorTo(this.lead.row, this.lead.column + columns);\n return;\n }\n\n var anchor = this.getSelectionAnchor();\n var lead = this.getSelectionLead();\n var isBackwards = this.isBackwards();\n if (!isBackwards || anchor.column !== 0) this.setSelectionAnchor(anchor.row, anchor.column + columns);\n\n if (isBackwards || lead.column !== 0) {\n this.$moveSelection(function () {\n this.moveCursorTo(lead.row, lead.column + columns);\n });\n }\n };\n\n this.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return anchor.row > lead.row || anchor.row == lead.row && anchor.column > lead.column;\n };\n\n this.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.isEmpty()) return Range.fromPoints(lead, lead);\n\n if (this.isBackwards()) {\n return Range.fromPoints(lead, anchor);\n } else {\n return Range.fromPoints(anchor, lead);\n }\n };\n\n this.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n\n this._emit(\"changeSelection\");\n }\n };\n\n this.selectAll = function () {\n var lastRow = this.doc.getLength() - 1;\n this.setSelectionAnchor(0, 0);\n this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\n };\n\n this.setRange = this.setSelectionRange = function (range, reverse) {\n if (reverse) {\n this.setSelectionAnchor(range.end.row, range.end.column);\n this.selectTo(range.start.row, range.start.column);\n } else {\n this.setSelectionAnchor(range.start.row, range.start.column);\n this.selectTo(range.end.row, range.end.column);\n }\n\n if (this.getRange().isEmpty()) this.$isEmpty = true;\n this.$desiredColumn = null;\n };\n\n this.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty) this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n\n this.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n\n this.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n\n this.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n\n this.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n\n this.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n\n this.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n\n this.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n\n this.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n\n this.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n\n this.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n\n this.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n\n this.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n\n this.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n\n this.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n\n this.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n\n return this.session.getWordRange(row, column);\n };\n\n this.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n\n this.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n\n if (excludeLastChar === true) return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);else return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n\n this.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n\n this.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n\n this.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n\n this.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n\n this.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n } else {\n var tabSize = this.session.getTabSize();\n\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n\n this.moveCursorRight = function () {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n } else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n } else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n } else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n\n this.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n\n this.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0) lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n\n this.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n\n this.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n\n this.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n\n if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1) this.moveCursorWordRight();\n return;\n }\n\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n\n if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0) this.moveCursorWordLeft();\n return;\n }\n\n if (match = this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function (rightOfCursor) {\n var match,\n index = 0,\n ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) {\n index++;\n }\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) {\n index++;\n }\n\n if (index > 2) break;\n }\n }\n }\n }\n }\n\n tokenRe.lastIndex = 0;\n return index;\n };\n\n this.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor)) rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line)) line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function () {\n if (this.session.$selectLongWords) this.moveCursorLongWordRight();else this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords) this.moveCursorLongWordLeft();else this.moveCursorShortWordLeft();\n };\n\n this.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn) screenPos.column = this.$desiredColumn;else this.$desiredColumn = screenPos.column;\n }\n\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n if (docPos.row > 0 || rows > 0) docPos.row++;\n }\n }\n\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n\n this.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n\n this.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1) column = column - 1;else column = column + 1;\n }\n\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn) this.$desiredColumn = null;\n };\n\n this.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n\n this.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n this.session = this.doc = null;\n };\n\n this.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function (range) {\n var r = this.getRange();\n\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n\n this.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n } catch (e) {\n return Range.fromPoints(start, start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function () {\n if (this.rangeCount) {\n var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n\n return data;\n };\n\n this.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList) {\n this.toSingleRange(data[0]);\n\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards) r.cursor = r.start;\n this.addRange(r, true);\n }\n\n return;\n } else data = data[0];\n }\n\n if (this.rangeList) this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount) return false;\n if (!data.length || !this.ranges) return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i])) return false;\n }\n\n return true;\n };\n }).call(Selection.prototype);\n exports.Selection = Selection;\n});\nace.define(\"ace/tokenizer\", [\"require\", \"exports\", \"module\", \"ace/config\"], function (acequire, exports, module) {\n \"use strict\";\n\n var config = acequire(\"./config\");\n var MAX_TOKEN_COUNT = 2000;\n\n var Tokenizer = function Tokenizer(rules) {\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {\n defaultToken: \"text\"\n };\n var flag = \"g\";\n var splitterRurles = [];\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken) mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive) flag = \"gi\";\n if (rule.regex == null) continue;\n if (rule.regex instanceof RegExp) rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1) rule.onMatch = this.$applyToken;else rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n\n if (!rule.splitRegex && typeof rule.token != \"string\") splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch) rule.onMatch = null;\n }\n\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n };\n\n (function () {\n this.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n\n this.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\") return [{\n type: types,\n value: str\n }];\n var tokens = [];\n\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i]) tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n\n return tokens;\n };\n\n this.$arrayTokens = function (str) {\n if (!str) return [];\n var values = this.splitRegex.exec(str);\n if (!values) return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1]) tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n\n return tokens;\n };\n\n this.removeCapturingGroups = function (src) {\n var r = src.replace(/\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g, function (x, y) {\n return y ? \"(?:\" : x;\n });\n return r;\n };\n\n this.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n\n stack--;\n } else if (parenOpen) {\n stack++;\n\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end))) src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n\n this.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n } else var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match,\n tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = {\n type: null,\n value: \"\"\n };\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type) tokens.push(token);\n token = {\n type: type,\n value: skipped\n };\n }\n }\n\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined) continue;\n rule = state[mapping[i]];\n if (rule.onMatch) type = rule.onMatch(value, currentState, stack, line);else type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n\n state = this.states[currentState];\n\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n\n if (rule.consumeLineEnd) lastIndex = index;\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type) tokens.push(token);\n token = {\n type: type,\n value: value\n };\n }\n } else if (type) {\n if (token.type) tokens.push(token);\n token = {\n type: null,\n value: \"\"\n };\n\n for (var i = 0; i < type.length; i++) {\n tokens.push(type[i]);\n }\n }\n }\n\n if (lastIndex == line.length) break;\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n\n while (lastIndex < line.length) {\n if (token.type) tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 2000),\n type: \"overflow\"\n };\n }\n\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type) tokens.push(token);\n\n if (stack.length > 1) {\n if (stack[0] !== currentState) stack.unshift(\"#tmp\", currentState);\n }\n\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n\n this.reportError = config.reportError;\n }).call(Tokenizer.prototype);\n exports.Tokenizer = Tokenizer;\n});\nace.define(\"ace/mode/text_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\"], function (acequire, exports, module) {\n \"use strict\";\n\n var lang = acequire(\"../lib/lang\");\n\n var TextHighlightRules = function TextHighlightRules() {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n };\n\n (function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules) {\n this.$rules[key] = rules[key];\n }\n\n return;\n }\n\n for (var key in rules) {\n var state = rules[key];\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0) rule.next = prefix + rule.next;\n }\n\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) rule.nextState = prefix + rule.nextState;\n }\n }\n\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function () {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\" ? new HighlightRules().getRules() : HighlightRules;\n\n if (states) {\n for (var i = 0; i < states.length; i++) {\n states[i] = prefix + states[i];\n }\n } else {\n states = [];\n\n for (var key in embedRules) {\n states.push(prefix + key);\n }\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n\n for (var i = 0; i < states.length; i++) {\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n }\n\n if (!this.$embeds) this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function () {\n return this.$embeds;\n };\n\n var pushState = function pushState(currentState, stack) {\n if (currentState != \"start\" || stack.length) stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n\n var popState = function popState(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next) rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n\n var next = rule.next || rule.push;\n\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\") stateName = stateName[0] || \"\";\n if (rules[stateName]) stateName += id++;\n }\n\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push) rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n\n if (includeName) {\n if (Array.isArray(includeName)) toInsert = includeName.map(function (x) {\n return rules[x];\n });else toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape) args = args.filter(function (x) {\n return !x.next;\n });\n state.splice.apply(state, args);\n i--;\n }\n\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n if (ignoreCase) a = a.toLowerCase();\n var list = a.split(splitChar || \"|\");\n\n for (var i = list.length; i--;) {\n keywords[list[i]] = className;\n }\n });\n\n if (Object.getPrototypeOf(keywords)) {\n keywords.__proto__ = null;\n }\n\n this.$keywordList = Object.keys(keywords);\n map = null;\n return ignoreCase ? function (value) {\n return keywords[value.toLowerCase()] || defaultToken;\n } : function (value) {\n return keywords[value] || defaultToken;\n };\n };\n\n this.getKeywords = function () {\n return this.$keywords;\n };\n }).call(TextHighlightRules.prototype);\n exports.TextHighlightRules = TextHighlightRules;\n});\nace.define(\"ace/mode/behaviour\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Behaviour = function Behaviour() {\n this.$behaviours = {};\n };\n\n (function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n\n this.$behaviours[name][action] = callback;\n };\n\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n\n this.addBehaviours(behaviours);\n };\n\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {};\n\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n\n return ret;\n }\n };\n }).call(Behaviour.prototype);\n exports.Behaviour = Behaviour;\n});\nace.define(\"ace/token_iterator\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"./range\").Range;\n\n var TokenIterator = function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n };\n\n (function () {\n this.stepBackward = function () {\n this.$tokenIndex -= 1;\n\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount) rowCount = this.$session.getLength();\n\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.getCurrentTokenRow = function () {\n return this.$row;\n };\n\n this.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined) return column;\n column = 0;\n\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n\n return column;\n };\n\n this.getCurrentTokenPosition = function () {\n return {\n row: this.$row,\n column: this.getCurrentTokenColumn()\n };\n };\n\n this.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n }).call(TokenIterator.prototype);\n exports.TokenIterator = TokenIterator;\n});\nace.define(\"ace/mode/behaviour/cstyle\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/behaviour\", \"ace/token_iterator\", \"ace/lib/lang\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"../../lib/oop\");\n var Behaviour = acequire(\"../behaviour\").Behaviour;\n var TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\n var lang = acequire(\"../../lib/lang\");\n var SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"punctuation.operator\"];\n var SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n var context;\n var contextCache = {};\n var defaultQuotes = {\n '\"': '\"',\n \"'\": \"'\"\n };\n\n var initContext = function initContext(editor) {\n var id = -1;\n\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {\n rangeCount: editor.multiSelect.rangeCount\n };\n }\n\n if (contextCache[id]) return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n };\n\n var getWrapped = function getWrapped(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1)]\n };\n };\n\n var CstyleBehaviour = function CstyleBehaviour(options) {\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({\n row: cursor.row,\n column: cursor.column + 1\n }, '}');\n if (!openBracePos) return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type)) return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type)) pair = false;\n } else {\n if (stringBefore && !stringAfter) return null; // wrap string with different quote\n\n if (stringBefore && stringAfter) return null; // do not pair quotes inside strings\n\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter) return null; // before or after alphanumeric\n\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing\n\n pair = true;\n }\n\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n };\n\n CstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) return false;\n }\n\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n };\n\n CstyleBehaviour.$matchTokenType = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n };\n\n CstyleBehaviour.recordAutoInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n };\n\n CstyleBehaviour.recordMaybeInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n };\n\n CstyleBehaviour.isAutoInsertedClosing = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd;\n };\n\n CstyleBehaviour.isMaybeInsertedClosing = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n };\n\n CstyleBehaviour.popAutoInsertedClosing = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n };\n\n CstyleBehaviour.clearMaybeInsertedClosing = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n };\n\n oop.inherits(CstyleBehaviour, Behaviour);\n exports.CstyleBehaviour = CstyleBehaviour;\n});\nace.define(\"ace/unicode\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n exports.packages = {};\n addUnicodePackage({\n L: \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\n Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\n Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\n Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\n Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n M: \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\n Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\n Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\n Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\n N: \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\n No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\n P: \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\n Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\n Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\n Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\n Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\n Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\n Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\n Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\n S: \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\n Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\n Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\n Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\n So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\n Z: \"002000A01680180E2000-200A20282029202F205F3000\",\n Zs: \"002000A01680180E2000-200A202F205F3000\",\n Zl: \"2028\",\n Zp: \"2029\",\n C: \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\n Cc: \"0000-001F007F-009F\",\n Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\n Co: \"E000-F8FF\",\n Cs: \"D800-DFFF\",\n Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\n });\n\n function addUnicodePackage(pack) {\n var codePoint = /\\w{4}/g;\n\n for (var name in pack) {\n exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\n }\n }\n});\nace.define(\"ace/mode/text\", [\"require\", \"exports\", \"module\", \"ace/tokenizer\", \"ace/mode/text_highlight_rules\", \"ace/mode/behaviour/cstyle\", \"ace/unicode\", \"ace/lib/lang\", \"ace/token_iterator\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Tokenizer = acequire(\"../tokenizer\").Tokenizer;\n var TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\n var CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\n var unicode = acequire(\"../unicode\");\n var lang = acequire(\"../lib/lang\");\n var TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n var Range = acequire(\"../range\").Range;\n\n var Mode = function Mode() {\n this.HighlightRules = TextHighlightRules;\n };\n\n (function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\");\n\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment) return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function comment(line, i) {\n if (testRemove(line, i)) return;\n\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({\n row: i,\n column: line.length\n }, lineCommentEnd);\n doc.insertInLine({\n row: i,\n column: minIndent\n }, lineCommentStart);\n }\n };\n\n var uncomment = function uncomment(line, i) {\n var m;\n if (m = line.match(regexpEnd)) doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart)) doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function testRemove(line, row) {\n if (regexpStart.test(line)) return true;\n var tokens = session.getTokens(row);\n\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\") return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function uncomment(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length,\n end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \") end--;\n doc.removeInLine(i, start, end);\n };\n\n var commentWithSpace = lineCommentStart + \" \";\n\n var comment = function comment(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent)) doc.insertInLine({\n row: i,\n column: minIndent\n }, commentWithSpace);else doc.insertInLine({\n row: i,\n column: minIndent\n }, lineCommentStart);\n }\n };\n\n var testRemove = function testRemove(line, i) {\n return regexpStart.test(line);\n };\n\n var shouldInsertSpace = function shouldInsertSpace(line, before, after) {\n var spaces = 0;\n\n while (before-- && line.charAt(before) == \" \") {\n spaces++;\n }\n\n if (spaces % tabSize != 0) return false;\n var spaces = 0;\n\n while (line.charAt(after++) == \" \") {\n spaces++;\n }\n\n if (tabSize > 2) return spaces % tabSize != tabSize - 1;else return spaces % tabSize == 0;\n return true;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++) {\n fun(doc.getLine(i), i);\n }\n }\n\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n\n if (indent !== -1) {\n if (indent < minIndent) minIndent = indent;\n if (shouldRemove && !testRemove(line, i)) shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0) minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment) return;\n if (!comment.start && comment[0]) comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n\n token = iterator.stepForward();\n }\n\n if (endRange) session.remove(endRange);\n\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n\n if (initialRange.start.row == startRow) initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow) initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n\n this.autoOutdent = function (state, doc, row) {};\n\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function (session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n\n for (var i in mapping) {\n if (mapping[i]) {\n this.$embeds.push(i);\n this.$modes[i] = new mapping[i]();\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n\n scope[delegations[i]] = function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n })(this);\n }\n };\n\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0];\n if (typeof state != \"string\") state = state[0];\n\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n var split = state.split(this.$embeds[i]);\n\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n\n for (var rule in rules) {\n var ruleItr = rules[rule];\n\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token)) completionKeywords.push(ruleItr[r].regex);\n } else if (_typeof(ruleItr[r].token) === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n\n this.completionKeywords = completionKeywords;\n }\n\n if (!append) return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n\n this.$createKeywordList = function () {\n if (!this.$highlightRules) this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\nace.define(\"ace/apply_delta\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n function throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n }\n\n function positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length && position.column >= 0 && position.column <= docLines[position.row].length;\n }\n\n function validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\") throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array)) throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end) throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start)) throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end)) throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = end.column - (numRangeRows == 0 ? start.column : 0);\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) throwDeltaError(delta, \"delta.range must match delta lines\");\n }\n\n exports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n\n break;\n\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n\n break;\n }\n };\n});\nace.define(\"ace/anchor\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\n var Anchor = exports.Anchor = function (doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof column == \"undefined\") this.setPosition(row.row, row.column);else this.setPosition(row, column);\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n\n this.getDocument = function () {\n return this.document;\n };\n\n this.$insertRight = false;\n\n this.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row) return;\n if (delta.start.row > this.row) return;\n var point = $getTransformedPoint(delta, {\n row: this.row,\n column: this.column\n }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n\n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return point1.row < point2.row || point1.row == point2.row && bColIsAfter;\n }\n\n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n\n this.setPosition = function (row, column, noClip) {\n var pos;\n\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column) return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n\n this.detach = function () {\n this.document.removeEventListener(\"change\", this.$onChange);\n };\n\n this.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n\n this.$clipPositionToDocument = function (row, column) {\n var pos = {};\n\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n } else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n } else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0) pos.column = 0;\n return pos;\n };\n }).call(Anchor.prototype);\n});\nace.define(\"ace/document\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/apply_delta\", \"ace/lib/event_emitter\", \"ace/range\", \"ace/anchor\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var applyDelta = acequire(\"./apply_delta\").applyDelta;\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n var Range = acequire(\"./range\").Range;\n var Anchor = acequire(\"./anchor\").Anchor;\n\n var Document = function Document(textOrLines) {\n this.$lines = [\"\"];\n\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({\n row: 0,\n column: 0\n }, textOrLines);\n } else {\n this.insert({\n row: 0,\n column: 0\n }, textOrLines);\n }\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({\n row: 0,\n column: 0\n }, text);\n };\n\n this.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n\n this.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function (text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n this.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n\n this._signal(\"changeNewLineMode\");\n };\n\n this.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n\n case \"unix\":\n return \"\\n\";\n\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n\n this.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode) return;\n this.$newLineMode = newLineMode;\n\n this._signal(\"changeNewLineMode\");\n };\n\n this.getNewLineMode = function () {\n return this.$newLineMode;\n };\n\n this.isNewLine = function (text) {\n return text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\";\n };\n\n this.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n\n this.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n\n this.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n\n this.getLength = function () {\n return this.$lines.length;\n };\n\n this.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n\n this.getLinesForRange = function (range) {\n var lines;\n\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column);\n }\n\n return lines;\n };\n\n this.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n\n this.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n\n this.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n\n this.insert = function (position, text) {\n if (this.getLength() <= 1) this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n\n this.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n\n this.clippedPos = function (row, column) {\n var length = this.getLength();\n\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n\n var line = this.getLine(row);\n if (column == undefined) column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {\n row: row,\n column: column\n };\n };\n\n this.clonePos = function (pos) {\n return {\n row: pos.row,\n column: pos.column\n };\n };\n\n this.pos = function (row, column) {\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipPosition = function (position) {\n var length = this.getLength();\n\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n\n return position;\n };\n\n this.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n\n this.insertMergedLines({\n row: row,\n column: column\n }, lines);\n };\n\n this.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n\n this.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({\n start: start,\n end: end\n })\n });\n return this.clonePos(start);\n };\n\n this.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({\n start: start,\n end: end\n })\n }, true);\n return this.clonePos(start);\n };\n\n this.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = deleteFirstNewLine ? firstRow - 1 : firstRow;\n var startCol = deleteFirstNewLine ? this.getLine(startRow).length : 0;\n var endRow = deleteLastNewLine ? lastRow + 1 : lastRow;\n var endCol = deleteLastNewLine ? 0 : this.getLine(endRow).length;\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n\n this.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n\n this.replace = function (range, text) {\n if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty()) return range.start;\n if (text == this.getTextRange(range)) return range.end;\n this.remove(range);\n var end;\n\n if (text) {\n end = this.insert(range.start, text);\n } else {\n end = range.start;\n }\n\n return end;\n };\n\n this.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n\n this.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n\n this.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n\n if (isInsert && delta.lines.length > 20000) this.$splitAndapplyLargeDelta(delta, 20000);\n applyDelta(this.$lines, delta, doNotValidate);\n\n this._signal(\"change\", delta);\n };\n\n this.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length;\n var row = delta.start.row;\n var column = delta.start.column;\n var from = 0,\n to = 0;\n\n do {\n from = to;\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n\n if (to > l) {\n delta.lines = chunk;\n delta.start.row = row + from;\n delta.start.column = column;\n break;\n }\n\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n } while (true);\n };\n\n this.revertDelta = function (delta) {\n this.applyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: delta.action == \"insert\" ? \"remove\" : \"insert\",\n lines: delta.lines.slice()\n });\n };\n\n this.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0) return {\n row: i,\n column: index + lines[i].length + newlineLength\n };\n }\n\n return {\n row: l - 1,\n column: lines[l - 1].length\n };\n };\n\n this.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n\n for (var i = startRow || 0; i < row; ++i) {\n index += lines[i].length + newlineLength;\n }\n\n return index + pos.column;\n };\n }).call(Document.prototype);\n exports.Document = Document;\n});\nace.define(\"ace/background_tokenizer\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\n var BackgroundTokenizer = function BackgroundTokenizer(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n\n while (self.lines[currentLine]) {\n currentLine++;\n }\n\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n\n processedLines++;\n\n if (processedLines % 5 === 0 && new Date() - workerStart > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n\n self.currentLine = currentLine;\n if (endLine == -1) endLine = currentLine;\n if (startLine <= endLine) self.fireUpdateEvent(startLine, endLine);\n };\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n\n this.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n\n this.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n\n this._signal(\"update\", {\n data: data\n });\n };\n\n this.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.scheduleStart = function () {\n if (!this.running) this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n\n this.stop = function () {\n if (this.running) clearTimeout(this.running);\n this.running = false;\n };\n\n this.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n\n this.getState = function (row) {\n if (this.currentLine == row) this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1) this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n }).call(BackgroundTokenizer.prototype);\n exports.BackgroundTokenizer = BackgroundTokenizer;\n});\nace.define(\"ace/search_highlight\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var lang = acequire(\"./lib/lang\");\n var oop = acequire(\"./lib/oop\");\n var Range = acequire(\"./range\").Range;\n\n var SearchHighlight = function SearchHighlight(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n };\n\n (function () {\n this.MAX_RANGES = 500;\n\n this.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\") return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function (html, markerLayer, session, config) {\n if (!this.regExp) return;\n var start = config.firstRow,\n end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES) ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j--;) {\n markerLayer.drawSingleLineMarker(html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n }).call(SearchHighlight.prototype);\n exports.SearchHighlight = SearchHighlight;\n});\nace.define(\"ace/edit_session/fold_line\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"../range\").Range;\n\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [folds];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n\n (function () {\n this.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n\n fold.foldLine = this;\n };\n\n this.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp,\n stop,\n isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n\n if (stop || cmp === 0) {\n return;\n }\n\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function (row, column) {\n var fold, cmp;\n\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n\n return null;\n };\n\n this.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold,\n folds;\n\n if (ret) {\n fold = ret.fold;\n\n if (ret.kind == \"inside\" && fold.start.column != column && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n\n if (i === 0) {\n this.start.column += len;\n }\n\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n\n if (!fold.sameRow) {\n return;\n }\n\n fold.end.column += len;\n }\n\n this.end.column += len;\n }\n }\n };\n\n this.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\") return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n }).call(FoldLine.prototype);\n exports.FoldLine = FoldLine;\n});\nace.define(\"ace/range_list\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"./range\").Range;\n var comparePoints = Range.comparePoints;\n\n var RangeList = function RangeList() {\n this.ranges = [];\n };\n\n (function () {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0) continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0) return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || cmpStart === 0 && !excludeEdges) return i;\n return -i - 1;\n }\n\n return -i - 1;\n };\n\n this.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0) startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0) endIndex = -endIndex - 1;else endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function (list) {\n var removed = [];\n\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n\n return removed;\n };\n\n this.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0) return this.ranges.splice(i, 1);\n };\n\n this.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0],\n range;\n\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0) continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n\n this.ranges = list;\n return removed;\n };\n\n this.contains = function (row, column) {\n return this.pointIndex({\n row: row,\n column: column\n }) >= 0;\n };\n\n this.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0) return this.ranges[i];\n };\n\n this.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) return [];\n var startIndex = this.pointIndex({\n row: startRow,\n column: 0\n });\n if (startIndex < 0) startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({\n row: endRow,\n column: 0\n }, startIndex);\n if (endIndex < 0) endIndex = -endIndex - 1;\n var clipped = [];\n\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n\n return clipped;\n };\n\n this.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function (session) {\n if (this.session) this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n\n this.detach = function () {\n if (!this.session) return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function (delta) {\n if (delta.action == \"insert\") {\n var start = delta.start;\n var end = delta.end;\n } else {\n var end = delta.start;\n var start = delta.end;\n }\n\n var startRow = start.row;\n var endRow = end.row;\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n var ranges = this.ranges;\n\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row < startRow) continue;\n if (r.start.row > startRow) break;\n\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$insertRight) {} else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$insertRight) {\n continue;\n }\n\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column) r.end.column -= colDiff;\n }\n\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n }).call(RangeList.prototype);\n exports.RangeList = RangeList;\n});\nace.define(\"ace/edit_session/fold\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/range_list\", \"ace/lib/oop\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"../range\").Range;\n var RangeList = acequire(\"../range_list\").RangeList;\n var oop = acequire(\"../lib/oop\");\n\n var Fold = exports.Fold = function (range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n };\n\n oop.inherits(Fold, RangeList);\n (function () {\n this.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function (fold) {\n if (this.range.isEqual(fold)) return;\n if (!this.range.containsRange(fold)) throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n consumeRange(fold, this.start);\n var row = fold.start.row,\n column = fold.start.column;\n\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1) break;\n }\n\n var afterStart = this.subFolds[i];\n if (cmp == 0) return afterStart.addSubFold(fold);\n var row = fold.range.end.row,\n column = fold.range.end.column;\n\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1) break;\n }\n\n var afterEnd = this.subFolds[j];\n if (cmp == 0) throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n\n this.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n }).call(Fold.prototype);\n\n function consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0) point.column -= anchor.column;\n }\n\n function consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n }\n\n function restorePoint(point, anchor) {\n if (point.row == 0) point.column += anchor.column;\n point.row += anchor.row;\n }\n\n function restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n }\n});\nace.define(\"ace/edit_session/folding\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/edit_session/fold_line\", \"ace/edit_session/fold\", \"ace/token_iterator\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"../range\").Range;\n var FoldLine = acequire(\"./fold_line\").FoldLine;\n var Fold = acequire(\"./fold\").Fold;\n var TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n\n function Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) return null;\n var folds = foldLine.folds;\n\n for (var i = 0; i < folds.length; i++) {\n var fold = folds[i];\n\n if (fold.range.contains(row, column)) {\n if (side == 1 && fold.range.isEnd(row, column)) {\n continue;\n } else if (side == -1 && fold.range.isStart(row, column)) {\n continue;\n }\n\n return fold;\n }\n }\n };\n\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n\n if (cmp == 2) {\n continue;\n } else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else if (cmp == 42) {\n break;\n }\n\n foundFolds.push(fold);\n }\n }\n\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n\n return folds;\n };\n\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n\n for (var i = 0; i < foldLines.length; i++) {\n for (var j = 0; j < foldLines[i].folds.length; j++) {\n folds.push(foldLines[i].folds[j]);\n }\n }\n\n return folds;\n };\n\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine) return null;\n var lastFold = {\n end: {\n column: 0\n }\n };\n var str, fold;\n\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n\n if (cmp == -1) {\n str = this.getLine(fold.start.row).substring(lastFold.end.column, fold.start.column);\n break;\n } else if (cmp === 0) {\n return null;\n }\n\n lastFold = fold;\n }\n\n if (!str) str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1) return str.substring(0, column - lastFold.end.column);else if (trim == 1) return str.substring(column - lastFold.end.column);else return str;\n };\n\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine) i = foldData.indexOf(startFoldLine);\n if (i == -1) i = 0;\n\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n\n return null;\n };\n\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine) i = foldData.indexOf(startFoldLine);\n if (i == -1) i = 0;\n\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n\n return null;\n };\n\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData,\n rowCount = last - first + 1;\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n\n if (end >= last) {\n if (start < last) {\n if (start >= first) rowCount -= last - start;else rowCount = 0; // in one fold\n }\n\n break;\n } else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;else rowCount -= end - first + 1;\n }\n }\n\n return rowCount;\n };\n\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold) fold = placeholder;else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n if (!(startRow < endRow || startRow == endRow && startColumn <= endColumn - 2)) throw new Error(\"The range has to be at least 2 characters width\");\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold) return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn)) this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn)) this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n\n if (folds.length > 0) {\n this.removeFolds(folds);\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added) foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode) this.$updateWrapData(foldLine.start.row, foldLine.start.row);else this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n\n this._signal(\"changeFold\", {\n data: fold,\n action: \"add\"\n });\n\n return fold;\n };\n\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode) this.$updateWrapData(startRow, endRow);else this.$updateRowLengthCache(startRow, endRow);\n }\n\n this.$modified = true;\n\n this._signal(\"changeFold\", {\n data: fold,\n action: \"remove\"\n });\n };\n\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n\n fold.subFolds = [];\n };\n\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function (location, expandInner) {\n var range, folds;\n\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n expandInner = true;\n } else if (typeof location == \"number\") range = new Range(location, 0, location, this.getLine(location).length);else if (\"row\" in location) range = Range.fromPoints(location, location);else range = location;\n\n folds = this.getFoldsInRangeList(range);\n\n if (expandInner) {\n this.removeFolds(folds);\n } else {\n var subFolds = folds;\n\n while (subFolds.length) {\n this.expandFolds(subFolds);\n subFolds = this.getFoldsInRangeList(range);\n }\n }\n\n if (folds.length) return folds;\n };\n\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null) startRow = foldLine.start.row;\n if (startColumn == null) startColumn = 0;\n if (endRow == null) endRow = foldLine.end.row;\n if (endColumn == null) endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow) return;\n\n if (row == startRow) {\n if (column < startColumn) return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({\n row: cursor.row,\n column: cursor.column + 1\n })) {\n if (range.comparePoint(bracketPos) == 1) range.end = bracketPos;else range.start = bracketPos;\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n\n if (!fold) fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4) return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token.type;\n\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\") type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n\n iterator.stepForward();\n }\n\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n iterator = new TokenIterator(this, row, column);\n\n if (dir != -1) {\n var lastRow = -1;\n\n do {\n token = iterator.stepForward();\n\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state)) lastRow = iterator.$row;\n } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n\n token = iterator.stepBackward();\n } else token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function (startRow, endRow, depth) {\n if (depth == undefined) depth = 100000; // JSON.stringify doesn't hanle Infinity\n\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets) return; // mode doesn't support folding\n\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null) foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\") continue;\n var range = this.getFoldWidgetRange(row);\n\n if (range && range.isMultiLine() && range.end.row <= endRow && range.start.row >= startRow) {\n row = range.end.row;\n\n try {\n var fold = this.addFold(\"...\", range);\n if (fold) fold.collapseChildren = depth;\n } catch (e) {}\n }\n }\n };\n\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style]) throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style) return;\n this.$foldStyle = style;\n if (style == \"manual\") this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode) return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n\n this._signal(\"changeAnnotation\");\n\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || ignoreCurrent && fw[row]) return {};\n var i = row - 1,\n firstRange;\n\n while (i >= 0) {\n var c = fw[i];\n if (c == null) c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange) firstRange = range;\n if (range && range.end.row >= row) break;\n }\n\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function (row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n\n if (!range) {\n var el = e.target || e.srcElement;\n if (el && /ace_fold-widget/.test(el.className)) el.className += \" ace_invalid\";\n }\n };\n\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget) return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all) this.removeFold(fold);else this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n\n return range;\n };\n\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range) return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first) this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n }\n\n exports.Folding = Folding;\n});\nace.define(\"ace/edit_session/bracket_match\", [\"require\", \"exports\", \"module\", \"ace/token_iterator\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n var Range = acequire(\"../range\").Range;\n\n function BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0) return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\") return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) return null;\n if (match[1]) return this.$findClosingBracket(match[1], position);else return this.$findOpeningBracket(match[2], position);\n };\n\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true,\n range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n\n if (!match) return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos) return null;\n range = Range.fromPoints(pos, bracketPos);\n\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos) return null;\n range = Range.fromPoints(bracketPos, pos);\n\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n\n range.cursor = range.start;\n }\n\n return range;\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\"\n };\n\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token) token = iterator.stepForward();\n if (!token) return;\n\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" + token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\").replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\") + \")+\");\n }\n\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n\n if (chr == openBracket) {\n depth -= 1;\n\n if (depth == 0) {\n return {\n row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()\n };\n }\n } else if (chr == bracket) {\n depth += 1;\n }\n\n valueIndex -= 1;\n }\n\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null) break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n\n return null;\n };\n\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token) token = iterator.stepForward();\n if (!token) return;\n\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" + token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\").replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\") + \")+\");\n }\n\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n\n if (chr == closingBracket) {\n depth -= 1;\n\n if (depth == 0) {\n return {\n row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()\n };\n }\n } else if (chr == bracket) {\n depth += 1;\n }\n\n valueIndex += 1;\n }\n\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null) break;\n valueIndex = 0;\n }\n\n return null;\n };\n }\n\n exports.BracketMatch = BracketMatch;\n});\nace.define(\"ace/edit_session\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/bidihandler\", \"ace/config\", \"ace/lib/event_emitter\", \"ace/selection\", \"ace/mode/text\", \"ace/range\", \"ace/document\", \"ace/background_tokenizer\", \"ace/search_highlight\", \"ace/edit_session/folding\", \"ace/edit_session/bracket_match\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"./lib/oop\");\n var lang = acequire(\"./lib/lang\");\n var BidiHandler = acequire(\"./bidihandler\").BidiHandler;\n var config = acequire(\"./config\");\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n var Selection = acequire(\"./selection\").Selection;\n var TextMode = acequire(\"./mode/text\").Mode;\n var Range = acequire(\"./range\").Range;\n var Document = acequire(\"./document\").Document;\n var BackgroundTokenizer = acequire(\"./background_tokenizer\").BackgroundTokenizer;\n var SearchHighlight = acequire(\"./search_highlight\").SearchHighlight;\n\n var EditSession = function EditSession(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$foldData = [];\n this.id = \"session\" + ++EditSession.$uid;\n\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (_typeof(text) != \"object\" || !text.getLine) text = new Document(text);\n this.$bidiHandler = new BidiHandler(this);\n this.setDocument(text);\n this.selection = new Selection(this);\n config.resetOptions(this);\n this.setMode(mode);\n\n config._signal(\"session\", this);\n };\n\n EditSession.$uid = 0;\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setDocument = function (doc) {\n if (this.doc) this.doc.removeListener(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n if (this.bgTokenizer) this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n\n this.getDocument = function () {\n return this.doc;\n };\n\n this.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = low + hi >> 1;\n var c = cacheArray[mid];\n if (val > c) low = mid + 1;else if (val < c) hi = mid - 1;else return mid;\n }\n\n return low - 1;\n };\n\n this.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer) this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n\n if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\n this.$deltasDoc.push(delta);\n\n if (removedFolds && removedFolds.length != 0) {\n this.$deltasFold.push({\n action: \"removeFolds\",\n folds: removedFolds\n });\n }\n\n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n\n this._signal(\"change\", delta);\n };\n\n this.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n\n this.getValue = this.toString = function () {\n return this.doc.getValue();\n };\n\n this.getSelection = function () {\n return this.selection;\n };\n\n this.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n\n this.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n\n this.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token,\n c = 0;\n\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column) break;\n }\n }\n\n token = tokens[i];\n if (!token) return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n\n this.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n if (this.$informUndoManager) this.$informUndoManager.cancel();\n\n if (undoManager) {\n var self = this;\n\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n\n if (self.$deltasFold.length) {\n self.$deltas.push({\n group: \"fold\",\n deltas: self.$deltasFold\n });\n self.$deltasFold = [];\n }\n\n if (self.$deltasDoc.length) {\n self.$deltas.push({\n group: \"doc\",\n deltas: self.$deltasDoc\n });\n self.$deltasDoc = [];\n }\n\n if (self.$deltas.length > 0) {\n undoManager.execute({\n action: \"aceupdate\",\n args: [self.$deltas, self],\n merge: self.mergeUndoDeltas\n });\n }\n\n self.mergeUndoDeltas = false;\n self.$deltas = [];\n };\n\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n };\n\n this.markUndoGroup = function () {\n if (this.$syncInformUndoManager) this.$syncInformUndoManager();\n };\n\n this.$defaultUndoManager = {\n undo: function undo() {},\n redo: function redo() {},\n reset: function reset() {}\n };\n\n this.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n\n this.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n\n this.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n\n this.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n\n this.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n\n this.getTabSize = function () {\n return this.$tabSize;\n };\n\n this.isTabStop = function (position) {\n return this.$useSoftTabs && position.column % this.$tabSize === 0;\n };\n\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n\n this.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n\n this.$overwrite = false;\n\n this.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n\n this.getOverwrite = function () {\n return this.$overwrite;\n };\n\n this.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n\n this.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row]) this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.getBreakpoints = function () {\n return this.$breakpoints;\n };\n\n this.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.clearBreakpoints = function () {\n this.$breakpoints = [];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.setBreakpoint = function (row, className) {\n if (className === undefined) className = \"ace_breakpoint\";\n if (className) this.$breakpoints[row] = className;else delete this.$breakpoints[row];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n\n this._signal(\"changeBackMarker\");\n }\n\n return id;\n };\n\n this.addDynamicMarker = function (marker, inFront) {\n if (!marker.update) return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n\n this._signal(\"changeBackMarker\");\n }\n\n return marker;\n };\n\n this.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker) return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n\n if (marker) {\n delete markers[markerId];\n\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n }\n };\n\n this.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n\n this.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n\n this.$searchHighlight.setRegexp(re);\n };\n\n this.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n\n if (!clazz) clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n\n this.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n\n this._signal(\"changeAnnotation\", {});\n };\n\n this.getAnnotations = function () {\n return this.$annotations || [];\n };\n\n this.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n\n this.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n\n if (match) {\n this.$autoNewLine = match[1];\n } else {\n this.$autoNewLine = \"\\n\";\n }\n };\n\n this.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0) inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken) inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken) var re = this.tokenRe;else if (/^\\s+$/.test(line.slice(column - 1, column + 1))) var re = /\\s/;else var re = this.nonTokenRe;\n var start = column;\n\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n\n start++;\n }\n\n var end = column;\n\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n\n this.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n\n return wordRange;\n };\n\n this.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n\n this.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n\n this.setUseWorker = function (useWorker) {\n this.setOption(\"useWorker\", useWorker);\n };\n\n this.getUseWorker = function () {\n return this.$useWorker;\n };\n\n this.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = {};\n this.$mode = null;\n this.$modeId = null;\n\n this.setMode = function (mode, cb) {\n if (mode && _typeof(mode) === \"object\") {\n if (mode.getTokenizer) return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n\n if (!this.$modes[\"ace/mode/text\"]) this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.$modeId !== path) return cb && cb();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n\n this.$onChangeMode(m);\n }\n\n cb && cb();\n }.bind(this));\n if (!this.$mode) this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder) this.$modeId = mode.$id;\n if (this.$mode === mode) return;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker) this.$startWorker();\n var tokenizer = mode.getTokenizer();\n\n if (tokenizer.addEventListener !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.addEventListener(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n\n var _self = this;\n\n this.bgTokenizer.addEventListener(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n if (!$isPlaceholder) {\n if (mode.attachToSession) mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n\n this._emit(\"changeMode\");\n }\n };\n\n this.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n\n this.getMode = function () {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n\n this.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop)) return;\n this.$scrollTop = scrollTop;\n\n this._signal(\"changeScrollTop\", scrollTop);\n };\n\n this.getScrollTop = function () {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n\n this.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) return;\n this.$scrollLeft = scrollLeft;\n\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n\n this.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n\n this.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets) return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n\n this.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width) width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode) return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len) break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null) cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine) longestScreenLine = cache[i];\n }\n\n this.screenWidth = longestScreenLine;\n }\n };\n\n this.getLine = function (row) {\n return this.doc.getLine(row);\n };\n\n this.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n\n this.getLength = function () {\n return this.doc.getLength();\n };\n\n this.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n\n this.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n\n this.remove = function (range) {\n return this.doc.remove(range);\n };\n\n this.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n\n this.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length) return;\n this.$fromUndo = true;\n var lastUndoRange = null;\n\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n\n if (delta.group == \"doc\") {\n this.doc.revertDeltas(delta.deltas);\n lastUndoRange = this.$getUndoSelection(delta.deltas, true, lastUndoRange);\n } else {\n delta.deltas.forEach(function (foldDelta) {\n this.addFolds(foldDelta.folds);\n }, this);\n }\n }\n\n this.$fromUndo = false;\n lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n\n this.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length) return;\n this.$fromUndo = true;\n var lastUndoRange = null;\n\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n\n if (delta.group == \"doc\") {\n this.doc.applyDeltas(delta.deltas);\n lastUndoRange = this.$getUndoSelection(delta.deltas, false, lastUndoRange);\n }\n }\n\n this.$fromUndo = false;\n lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n\n this.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function (deltas, isUndo, lastUndoRange) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var delta = deltas[0];\n var range, point;\n var lastDeltaIsInsert = false;\n\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n lastDeltaIsInsert = true;\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n lastDeltaIsInsert = false;\n }\n\n for (var i = 1; i < deltas.length; i++) {\n delta = deltas[i];\n\n if (isInsert(delta)) {\n point = delta.start;\n\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n\n point = delta.end;\n\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n\n lastDeltaIsInsert = true;\n } else {\n point = delta.start;\n\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n\n lastDeltaIsInsert = false;\n }\n }\n\n if (lastUndoRange != null) {\n if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\n lastUndoRange.start.column += range.end.column - range.start.column;\n lastUndoRange.end.column += range.end.column - range.start.column;\n }\n\n var cmp = lastUndoRange.compareRange(range);\n\n if (cmp == 1) {\n range.setStart(lastUndoRange.start);\n } else if (cmp == -1) {\n range.setEnd(lastUndoRange.end);\n }\n }\n\n return range;\n };\n\n this.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n\n this.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) toRange.end.column += collDiff;\n }\n\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row) x.start.column += collDiff;\n if (x.end.row == oldStart.row) x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n\n this.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n\n for (var row = startRow; row <= endRow; row++) {\n this.doc.insertInLine({\n row: row,\n column: 0\n }, indentString);\n }\n };\n\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n\n for (var j = 0; j < size; ++j) {\n if (line.charAt(j) != ' ') break;\n }\n\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row - firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1) return 0;\n var diff = row - lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0 ? this.doc.getLines(firstRow, lastRow) : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n\n this.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n\n this.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n\n this.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n this.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n\n this.$clipColumnToRow = function (row, column) {\n if (column < 0) return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n this.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n\n var len = this.doc.getLength() - 1;\n\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n\n return range;\n };\n\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min: null,\n max: null\n };\n\n this.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n\n this.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n\n this.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = {\n min: min,\n max: max\n };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode) this._signal(\"changeWrapMode\");\n }\n };\n\n this.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0) limits = {\n min: $printMargin,\n max: $printMargin\n };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n\n this._signal(\"changeWrapLimit\");\n }\n\n return true;\n }\n\n return false;\n };\n\n this.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min) wrapLimit = Math.max(min, wrapLimit);\n if (max) wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n\n this.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n\n this.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n\n var foldLine = this.getFoldLine(firstRow);\n\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n\n this.$updating = false;\n if (useWrapMode) this.$updateWrapData(firstRow, lastRow);else this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function (firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n } else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n this.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0,\n lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0) return indentation;\n\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE) indentation += 1;else if (token == TAB) indentation += tabSize;else if (token == TAB_SPACE) continue;else break;\n }\n }\n\n if (isCode && indentedSoftWrap !== false) indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n\n function addSplit(screenPos) {\n var displayed = tokens.slice(lastSplit, screenPos);\n var len = displayed.length;\n displayed.join(\"\").replace(/12/g, function () {\n len -= 1;\n }).replace(/2/g, function () {\n len -= 1;\n });\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n\n var indent = 0;\n\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n\n split = lastSplit + wrapLimit;\n\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n\n addSplit(split);\n continue;\n }\n\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT) split--;\n addSplit(split - indent);\n }\n\n return splits;\n };\n\n this.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n } else if (c == 32) {\n arr.push(SPACE);\n } else if (c > 39 && c < 48 || c > 57 && c < 64) {\n arr.push(PUNCTUATION);\n } else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n\n return arr;\n };\n\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0) return [0, 0];\n if (maxScreenColumn == null) maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n\n this.getRowLength = function (row) {\n if (this.lineWidgets) var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;else h = 0;\n\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n };\n\n this.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n\n this.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n\n this.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n\n this.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n\n this.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - screenColumn % this.$tabSize;\n };\n\n this.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n this.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n\n this.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0) return {\n row: 0,\n column: 0\n };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n\n var wrapIndent = 0,\n splitIndex = Math.floor(screenRow - row);\n\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n\n if (splits) {\n column = splits[splitIndex];\n\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex)) screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column) docColumn = column - 1;\n if (foldLine) return foldLine.idxToPosition(docColumn);\n return {\n row: docRow,\n column: docColumn\n };\n };\n\n this.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\") var pos = this.$clipPositionToDocument(docRow.row, docRow.column);else pos = this.$clipPositionToDocument(docRow, docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd,\n row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow) break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n } else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n\n var textLine = \"\";\n\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n\n var wrapIndent = 0;\n\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n\n if (wrapRow) {\n var screenRowOffset = 0;\n\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n\n this.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n\n this.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n\n this.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0,\n i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n\n if (this.lineWidgets) screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n\n this.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar) return;\n\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0) return [0, 0];\n if (!maxScreenColumn) maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n };\n\n this.destroy = function () {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n\n this.$stopWorker();\n };\n\n this.isFullWidth = isFullWidth;\n\n function isFullWidth(c) {\n if (c < 0x1100) return false;\n return c >= 0x1100 && c <= 0x115F || c >= 0x11A3 && c <= 0x11A7 || c >= 0x11FA && c <= 0x11FF || c >= 0x2329 && c <= 0x232A || c >= 0x2E80 && c <= 0x2E99 || c >= 0x2E9B && c <= 0x2EF3 || c >= 0x2F00 && c <= 0x2FD5 || c >= 0x2FF0 && c <= 0x2FFB || c >= 0x3000 && c <= 0x303E || c >= 0x3041 && c <= 0x3096 || c >= 0x3099 && c <= 0x30FF || c >= 0x3105 && c <= 0x312D || c >= 0x3131 && c <= 0x318E || c >= 0x3190 && c <= 0x31BA || c >= 0x31C0 && c <= 0x31E3 || c >= 0x31F0 && c <= 0x321E || c >= 0x3220 && c <= 0x3247 || c >= 0x3250 && c <= 0x32FE || c >= 0x3300 && c <= 0x4DBF || c >= 0x4E00 && c <= 0xA48C || c >= 0xA490 && c <= 0xA4C6 || c >= 0xA960 && c <= 0xA97C || c >= 0xAC00 && c <= 0xD7A3 || c >= 0xD7B0 && c <= 0xD7C6 || c >= 0xD7CB && c <= 0xD7FB || c >= 0xF900 && c <= 0xFAFF || c >= 0xFE10 && c <= 0xFE19 || c >= 0xFE30 && c <= 0xFE52 || c >= 0xFE54 && c <= 0xFE66 || c >= 0xFE68 && c <= 0xFE6B || c >= 0xFF01 && c <= 0xFF60 || c >= 0xFFE0 && c <= 0xFFE6;\n }\n }).call(EditSession.prototype);\n acequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\n acequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n config.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function set(value) {\n if (!value || value == \"off\") value = false;else if (value == \"free\") value = true;else if (value == \"printMargin\") value = -1;else if (typeof value == \"string\") value = parseInt(value, 10) || false;\n if (this.$wrap == value) return;\n this.$wrap = value;\n\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function get() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1) return \"printMargin\";\n if (!this.getWrapLimitRange().min) return \"free\";\n return this.$wrap;\n }\n\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function set(val) {\n val = val == \"auto\" ? this.$mode.type != \"text\" : val != \"text\";\n\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n\n if (this.$useWrapMode) {\n this.$modified = true;\n this.$resetRowCache(0);\n this.$updateWrapData(0, this.getLength() - 1);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n initialValue: true\n },\n firstLineNumber: {\n set: function set() {\n this._signal(\"changeBreakpoint\");\n },\n initialValue: 1\n },\n useWorker: {\n set: function set(useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker) this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {\n initialValue: true\n },\n tabSize: {\n set: function set(tabSize) {\n if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n\n this._signal(\"changeTabSize\");\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: {\n initialValue: false\n },\n overwrite: {\n set: function set(val) {\n this._signal(\"changeOverwrite\");\n },\n initialValue: false\n },\n newLineMode: {\n set: function set(val) {\n this.doc.setNewLineMode(val);\n },\n get: function get() {\n return this.doc.getNewLineMode();\n },\n handlesSet: true\n },\n mode: {\n set: function set(val) {\n this.setMode(val);\n },\n get: function get() {\n return this.$modeId;\n }\n }\n });\n exports.EditSession = EditSession;\n});\nace.define(\"ace/search\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var lang = acequire(\"./lib/lang\");\n var oop = acequire(\"./lib/oop\");\n var Range = acequire(\"./range\").Range;\n\n var Search = function Search() {\n this.$options = {};\n };\n\n (function () {\n this.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n\n this.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n\n this.setOptions = function (options) {\n this.$options = options;\n };\n\n this.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator) return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n\n if (sc == ec && options.start && options.start.start && options.skipCurrent != false && firstRange.isEqual(options.start)) {\n firstRange = null;\n return false;\n }\n\n return true;\n });\n return firstRange;\n };\n\n this.findAll = function (session) {\n var options = this.$options;\n if (!options.needle) return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range ? session.getLines(range.start.row, range.end.row) : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++) {\n if (lines[row + j].search(re[j]) == -1) continue outer;\n }\n\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n\n if (prevRange && prevRange.end.row === row && prevRange.end.column > startIndex) {\n continue;\n }\n\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2) row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0,\n j = ranges.length - 1;\n\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row) {\n i++;\n }\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row) {\n j--;\n }\n\n ranges = ranges.slice(i, j + 1);\n\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n\n this.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine) return replacement;\n if (!re) return;\n var match = re.exec(input);\n if (!match || match[0].length != input.length) return null;\n replacement = input.replace(re, replacement);\n\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch) replacement[i] = replacement[i].toUpperCase();else replacement[i] = replacement[i].toLowerCase();\n }\n\n replacement = replacement.join(\"\");\n }\n\n return replacement;\n };\n\n this.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp) return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle) return options.re = false;\n if (!options.regExp) needle = lang.escapeRegExp(needle);\n if (options.wholeWord) needle = addWordBoundary(needle, options);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine) return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch (e) {\n re = false;\n }\n\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n\n for (var i = 0; i < parts.length; i++) {\n try {\n re.push(new RegExp(parts[i], modifier));\n } catch (e) {\n return false;\n }\n }\n\n return re;\n };\n\n this.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re) return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var range = options.range;\n var start = options.start;\n if (!start) start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start) start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n\n if (backwards) {\n var forEach = function forEach(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback)) return;\n\n for (row--; row >= firstRow; row--) {\n if (forEachInLine(row, Number.MAX_VALUE, callback)) return;\n }\n\n if (options.wrap == false) return;\n\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--) {\n if (forEachInLine(row, Number.MAX_VALUE, callback)) return;\n }\n };\n } else {\n var forEach = function forEach(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback)) return;\n\n for (row = row + 1; row <= lastRow; row++) {\n if (forEachInLine(row, 0, callback)) return;\n }\n\n if (options.wrap == false) return;\n\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++) {\n if (forEachInLine(row, 0, callback)) return;\n }\n };\n }\n\n if (options.$isMultiLine) {\n var len = re.length;\n\n var forEachInLine = function forEachInLine(row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) return;\n\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1) return;\n }\n\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset) return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex)) return true;\n };\n } else if (backwards) {\n var forEachInLine = function forEachInLine(row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m,\n last = 0;\n re.lastIndex = 0;\n\n while (m = re.exec(line)) {\n var length = m[0].length;\n last = m.index;\n\n if (!length) {\n if (last >= line.length) break;\n re.lastIndex = last += 1;\n }\n\n if (m.index + length > endIndex) break;\n matches.push(m.index, length);\n }\n\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length)) return true;\n }\n };\n } else {\n var forEachInLine = function forEachInLine(row, startIndex, callback) {\n var line = session.getLine(row);\n var m;\n var last = startIndex;\n re.lastIndex = startIndex;\n\n while (m = re.exec(line)) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length)) return true;\n\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n\n return {\n forEach: forEach\n };\n };\n }).call(Search.prototype);\n\n function addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n\n return wordBoundary(needle[0]) + needle + wordBoundary(needle[needle.length - 1]);\n }\n\n exports.Search = Search;\n});\nace.define(\"ace/keyboard/hash_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (acequire, exports, module) {\n \"use strict\";\n\n var keyUtil = acequire(\"../lib/keys\");\n var useragent = acequire(\"../lib/useragent\");\n var KEY_MODS = keyUtil.KEY_MODS;\n\n function HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n }\n\n function MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n }\n\n MultiHashHandler.prototype = HashHandler.prototype;\n (function () {\n this.addCommand = function (command) {\n if (this.commands[command.name]) this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey) this._buildKeyHash(command);\n };\n\n this.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand) delete this.commands[name];\n var ckb = this.commandKeyBinding;\n\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1) ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function (key, command, position) {\n if (_typeof(key) == \"object\" && key) {\n if (position == undefined) position = key.position;\n key = key[this.platform];\n }\n\n if (!key) return;\n if (typeof command == \"function\") return this.addCommand({\n exec: command,\n bindKey: key,\n name: command.name || key\n });\n key.split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n\n function getPosition(command) {\n return _typeof(command) == \"object\" && command.bindKey && command.bindKey.position || (command.isDefault ? -100 : 0);\n }\n\n this._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding,\n i;\n\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n\n var commands = ckb[keyId];\n\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position) break;\n }\n\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command) return;\n if (typeof command === \"string\") return this.bindKey(command, name);\n if (typeof command === \"function\") command = {\n exec: command\n };\n if (_typeof(command) !== \"object\") return;\n if (!command.name) command.name = name;\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n\n this.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) {\n return x;\n });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode]) key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();else if (!parts.length) return {\n key: key,\n hashId: -1\n };else if (parts.length == 1 && parts[0] == \"shift\") return {\n key: key.toUpperCase(),\n hashId: -1\n };\n var hashId = 0;\n\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n\n if (modifier == null) {\n if (typeof console != \"undefined\") console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n\n hashId |= modifier;\n }\n\n return {\n key: key,\n hashId: hashId\n };\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {\n command: \"null\"\n };\n }\n }\n\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1) data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0) data.$keyChain = \"\"; // reset keyChain\n }\n\n return {\n command: command\n };\n };\n\n this.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n }).call(HashHandler.prototype);\n exports.HashHandler = HashHandler;\n exports.MultiHashHandler = MultiHashHandler;\n});\nace.define(\"ace/commands/command_manager\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/keyboard/hash_handler\", \"ace/lib/event_emitter\"], function (acequire, exports, module) {\n \"use strict\";\n\n var oop = acequire(\"../lib/oop\");\n var MultiHashHandler = acequire(\"../keyboard/hash_handler\").MultiHashHandler;\n var EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\n var CommandManager = function CommandManager(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function (e) {\n return e.command.exec(e.editor, e.args || {});\n });\n };\n\n oop.inherits(CommandManager, MultiHashHandler);\n (function () {\n oop.implement(this, EventEmitter);\n\n this.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args)) return true;\n }\n\n return false;\n }\n\n if (typeof command === \"string\") command = this.commands[command];\n if (!command) return false;\n if (editor && editor.$readOnly && !command.readOnly) return false;\n if (command.isAvailable && !command.isAvailable(editor)) return false;\n var e = {\n editor: editor,\n command: command,\n args: args\n };\n e.returnValue = this._emit(\"exec\", e);\n\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function (editor) {\n if (this.$inReplay) return;\n editor && editor._emit(\"changeStatus\");\n\n if (this.recording) {\n this.macro.pop();\n this.removeEventListener(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length) this.macro = this.oldMacro;\n return this.recording = false;\n }\n\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function (editor) {\n if (this.$inReplay || !this.macro) return;\n if (this.recording) return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\") this.exec(x, editor);else this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\") x[0] = x[0].name;\n if (!x[1]) x = x[0];\n return x;\n });\n };\n }).call(CommandManager.prototype);\n exports.CommandManager = CommandManager;\n});\nace.define(\"ace/commands/default_commands\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/config\", \"ace/range\"], function (acequire, exports, module) {\n \"use strict\";\n\n var lang = acequire(\"../lib/lang\");\n var config = acequire(\"../config\");\n var Range = acequire(\"../range\").Range;\n\n function bindKey(win, mac) {\n return {\n win: win,\n mac: mac\n };\n }\n\n exports.commands = [{\n name: \"showSettingsMenu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function exec(editor) {\n editor.selectAll();\n },\n readOnly: true\n }, {\n name: \"centerselection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function exec(editor) {\n editor.centerSelection();\n },\n readOnly: true\n }, {\n name: \"gotoline\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function exec(editor) {\n var line = parseInt(prompt(\"Enter line number:\"), 10);\n\n if (!isNaN(line)) {\n editor.gotoLine(line);\n }\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function exec(editor) {\n editor.session.toggleFold(false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function exec(editor) {\n editor.session.toggleFold(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function exec(editor) {\n editor.session.toggleFoldWidget();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function exec(editor) {\n editor.session.toggleFoldWidget(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function exec(editor) {\n editor.session.foldAll();\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function exec(editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function exec(editor) {\n editor.session.unfold();\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function exec(editor) {\n editor.findNext();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function exec(editor) {\n editor.findPrevious();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) editor.selection.selectWord();else editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) editor.selection.selectWord();else editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(editor);\n });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n bindKey: \"Insert\",\n exec: function exec(editor) {\n editor.toggleOverwrite();\n },\n readOnly: true\n }, {\n name: \"selecttostart\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function exec(editor) {\n editor.getSelection().selectFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function exec(editor) {\n editor.navigateFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function exec(editor) {\n editor.getSelection().selectUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function exec(editor, args) {\n editor.navigateUp(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function exec(editor) {\n editor.getSelection().selectFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function exec(editor) {\n editor.navigateFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function exec(editor) {\n editor.getSelection().selectDown();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function exec(editor, args) {\n editor.navigateDown(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function exec(editor) {\n editor.getSelection().selectWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function exec(editor) {\n editor.navigateWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function exec(editor) {\n editor.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function exec(editor) {\n editor.navigateLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function exec(editor) {\n editor.getSelection().selectLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function exec(editor, args) {\n editor.navigateLeft(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function exec(editor) {\n editor.getSelection().selectWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function exec(editor) {\n editor.navigateWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function exec(editor) {\n editor.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function exec(editor) {\n editor.navigateLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function exec(editor) {\n editor.getSelection().selectRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function exec(editor, args) {\n editor.navigateRight(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n bindKey: \"Shift-PageDown\",\n exec: function exec(editor) {\n editor.selectPageDown();\n },\n readOnly: true\n }, {\n name: \"pagedown\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function exec(editor) {\n editor.scrollPageDown();\n },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function exec(editor) {\n editor.gotoPageDown();\n },\n readOnly: true\n }, {\n name: \"selectpageup\",\n bindKey: \"Shift-PageUp\",\n exec: function exec(editor) {\n editor.selectPageUp();\n },\n readOnly: true\n }, {\n name: \"pageup\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function exec(editor) {\n editor.scrollPageUp();\n },\n readOnly: true\n }, {\n name: \"gotopageup\",\n bindKey: \"PageUp\",\n exec: function exec(editor) {\n editor.gotoPageUp();\n },\n readOnly: true\n }, {\n name: \"scrollup\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function exec(e) {\n e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: true\n }, {\n name: \"scrolldown\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function exec(e) {\n e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n bindKey: \"Shift-Home\",\n exec: function exec(editor) {\n editor.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n bindKey: \"Shift-End\",\n exec: function exec(editor) {\n editor.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function exec(editor) {\n editor.commands.toggleRecording(editor);\n },\n readOnly: true\n }, {\n name: \"replaymacro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function exec(editor) {\n editor.commands.replay(editor);\n },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n exec: function exec(editor) {\n editor.jumpToMatching();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\n exec: function exec(editor) {\n editor.jumpToMatching(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function exec(editor) {\n editor.jumpToMatching(true, true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n bindKey: bindKey(null, null),\n exec: function exec() {},\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n exec: function exec(editor) {},\n readOnly: true\n }, {\n name: \"cut\",\n exec: function exec(editor) {\n var range = editor.getSelectionRange();\n\n editor._emit(\"cut\", range);\n\n if (!editor.selection.isEmpty()) {\n editor.session.remove(range);\n editor.clearSelection();\n }\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n exec: function exec(editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function exec(editor) {\n editor.removeLines();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function exec(editor) {\n editor.duplicateSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function exec(editor) {\n editor.sortLines();\n },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function exec(editor) {\n editor.toggleCommentLines();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function exec(editor) {\n editor.toggleBlockComment();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function exec(editor) {\n editor.modifyNumber(1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function exec(editor) {\n editor.modifyNumber(-1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(editor, true);\n });\n }\n }, {\n name: \"undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function exec(editor) {\n editor.undo();\n }\n }, {\n name: \"redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function exec(editor) {\n editor.redo();\n }\n }, {\n name: \"copylinesup\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function exec(editor) {\n editor.copyLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function exec(editor) {\n editor.moveLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function exec(editor) {\n editor.copyLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function exec(editor) {\n editor.moveLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function exec(editor) {\n editor.remove(\"right\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function exec(editor) {\n editor.remove(\"left\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n } else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function exec(editor) {\n editor.removeToLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function exec(editor) {\n editor.removeToLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function exec(editor) {\n editor.removeWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function exec(editor) {\n editor.removeWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function exec(editor) {\n editor.blockOutdent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function exec(editor) {\n editor.indent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function exec(editor) {\n editor.blockOutdent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function exec(editor) {\n editor.blockIndent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n exec: function exec(editor, str) {\n editor.insert(str);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n exec: function exec(editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function exec(editor) {\n editor.splitLine();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function exec(editor) {\n editor.transposeLetters();\n },\n multiSelectAction: function multiSelectAction(editor) {\n editor.transposeSelections(1);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function exec(editor) {\n editor.toUpperCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function exec(editor) {\n editor.toLowerCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"expandtoline\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"joinlines\",\n bindKey: bindKey(null, null),\n exec: function exec(editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < editor.session.doc.getLength() - 1) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? firstLineEndCol + 1 : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n bindKey: bindKey(null, null),\n exec: function exec(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == ranges.length - 1) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }];\n});\nace.define(\"ace/editor\", [\"require\", \"exports\", \"module\", \"ace/lib/fixoldbrowsers\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/lib/useragent\", \"ace/keyboard/textinput\", \"ace/mouse/mouse_handler\", \"ace/mouse/fold_handler\", \"ace/keyboard/keybinding\", \"ace/edit_session\", \"ace/search\", \"ace/range\", \"ace/lib/event_emitter\", \"ace/commands/command_manager\", \"ace/commands/default_commands\", \"ace/config\", \"ace/token_iterator\"], function (acequire, exports, module) {\n \"use strict\";\n\n acequire(\"./lib/fixoldbrowsers\");\n var oop = acequire(\"./lib/oop\");\n var dom = acequire(\"./lib/dom\");\n var lang = acequire(\"./lib/lang\");\n var useragent = acequire(\"./lib/useragent\");\n var TextInput = acequire(\"./keyboard/textinput\").TextInput;\n var MouseHandler = acequire(\"./mouse/mouse_handler\").MouseHandler;\n var FoldHandler = acequire(\"./mouse/fold_handler\").FoldHandler;\n var KeyBinding = acequire(\"./keyboard/keybinding\").KeyBinding;\n var EditSession = acequire(\"./edit_session\").EditSession;\n var Search = acequire(\"./search\").Search;\n var Range = acequire(\"./range\").Range;\n var EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n var CommandManager = acequire(\"./commands/command_manager\").CommandManager;\n var defaultCommands = acequire(\"./commands/default_commands\").commands;\n var config = acequire(\"./config\");\n var TokenIterator = acequire(\"./token_iterator\").TokenIterator;\n\n var Editor = function Editor(renderer, session) {\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + ++Editor.$uid;\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n\n if ((typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n\n this.keyBinding = new KeyBinding(this);\n this.$blockScrolling = 0;\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n\n if (this.session && this.session.bgTokenizer) this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || new EditSession(\"\"));\n config.resetOptions(this);\n\n config._signal(\"editor\", this);\n };\n\n Editor.$uid = 0;\n (function () {\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function () {\n function last(a) {\n return a[a.length - 1];\n }\n\n this.selections = [];\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\n this.on(\"change\", function () {\n this.curOp || this.startOperation();\n this.curOp.docChanged = true;\n }.bind(this), true);\n this.on(\"changeSelection\", function () {\n this.curOp || this.startOperation();\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n\n this.startOperation = function (commadEvent) {\n if (this.curOp) {\n if (!commadEvent || this.curOp.command) return;\n this.prevOp = this.curOp;\n }\n\n if (!commadEvent) {\n this.previousCommand = null;\n commadEvent = {};\n }\n\n this.$opResetTimer.schedule();\n this.curOp = {\n command: commadEvent.command || {},\n args: commadEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined) this.$blockScrolling++;\n };\n\n this.endOperation = function (e) {\n if (this.curOp) {\n if (e && e.returnValue === false) return this.curOp = null;\n\n this._signal(\"beforeEndOperation\");\n\n var command = this.curOp.command;\n if (command.name && this.$blockScrolling > 0) this.$blockScrolling--;\n var scrollIntoView = command && command.scrollIntoView;\n\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n\n break;\n\n default:\n break;\n }\n\n if (scrollIntoView == \"animate\") this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n\n this.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas) return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && e.command.name == prev.command.name;\n\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined) this.mergeNextCommand = true;\n shouldMerge = shouldMerge && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (this.$mergeUndoDeltas != \"always\" && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge) this.session.mergeUndoDeltas = true;else if (mergeableCommands.indexOf(e.command.name) !== -1) this.sequenceStartTime = Date.now();\n };\n\n this.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\") {\n this.$keybindingId = keyboardHandler;\n\n var _self = this;\n\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler) _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n\n this.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n\n this.setSession = function (session) {\n if (this.session == session) return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.onChangeMode();\n this.$blockScrolling += 1;\n this.onCursorChange();\n this.$blockScrolling -= 1;\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", {\n oldEditor: this\n });\n session && session._signal(\"changeEditor\", {\n editor: this\n });\n if (session && session.bgTokenizer) session.bgTokenizer.scheduleStart();\n };\n\n this.getSession = function () {\n return this.session;\n };\n\n this.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos) this.selectAll();else if (cursorPos == 1) this.navigateFileEnd();else if (cursorPos == -1) this.navigateFileStart();\n return val;\n };\n\n this.getValue = function () {\n return this.session.getValue();\n };\n\n this.getSelection = function () {\n return this.selection;\n };\n\n this.resize = function (force) {\n this.renderer.onResize(force);\n };\n\n this.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n\n this.getTheme = function () {\n return this.renderer.getTheme();\n };\n\n this.setStyle = function (style) {\n this.renderer.setStyle(style);\n };\n\n this.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") || dom.computedStyle(this.container, \"fontSize\");\n };\n\n this.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function () {\n if (this.session.$bracketHighlight) {\n this.session.removeMarker(this.session.$bracketHighlight);\n this.session.$bracketHighlight = null;\n }\n\n if (this.$highlightPending) {\n return;\n }\n\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = session.findMatchingBracket(self.getCursorPosition());\n\n if (pos) {\n var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n } else if (session.$mode.getMatching) {\n var range = session.$mode.getMatching(self.session);\n }\n\n if (range) session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n\n this.$highlightTags = function () {\n if (this.$highlightTagPending) return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function () {\n self.$highlightTagPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n\n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n\n if (token.type.indexOf(\"tag-open\") != -1) {\n token = iterator.stepForward();\n if (!token) return;\n }\n\n var tag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n\n if (prevToken.value == '<') {\n do {\n prevToken = token;\n token = iterator.stepForward();\n\n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '') {\n depth--;\n }\n }\n } while (token && depth >= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n\n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '') {\n depth--;\n }\n }\n } while (prevToken && depth <= 0);\n\n iterator.stepForward();\n }\n\n if (!token) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn();\n var range = new Range(row, column, row, column + token.value.length);\n var sbm = session.$backMarkers[session.$tagHighlight];\n\n if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n }\n\n if (range && !session.$tagHighlight) session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n\n this.focus = function () {\n var _self = this;\n\n setTimeout(function () {\n _self.textInput.focus();\n });\n this.textInput.focus();\n };\n\n this.isFocused = function () {\n return this.textInput.isFocused();\n };\n\n this.blur = function () {\n this.textInput.blur();\n };\n\n this.onFocus = function (e) {\n if (this.$isFocused) return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n\n this._emit(\"focus\", e);\n };\n\n this.onBlur = function (e) {\n if (!this.$isFocused) return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n\n this._emit(\"blur\", e);\n };\n\n this.$cursorChange = function () {\n this.renderer.updateCursor();\n };\n\n this.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = delta.start.row == delta.end.row ? delta.end.row : Infinity;\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n this._signal(\"change\", delta);\n\n this.$cursorChange();\n this.$updateHighlightActiveLine();\n };\n\n this.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n\n this.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n\n this.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n\n this.onCursorChange = function () {\n this.$cursorChange();\n\n if (!this.$blockScrolling) {\n config.warn(\"Automatically scrolling cursor into view after selection change\", \"this will be disabled in the next version\", \"set editor.$blockScrolling = Infinity to disable this message\");\n this.renderer.scrollCursorIntoView();\n }\n\n this.$highlightBrackets();\n this.$highlightTags();\n this.$updateHighlightActiveLine();\n\n this._signal(\"changeSelection\");\n };\n\n this.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine()) highlight = this.getCursorPosition();\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1)) highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function (e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine()) return;\n var startOuter = selection.start.column - 1;\n var endOuter = selection.end.column + 1;\n var line = session.getLine(selection.start.row);\n var lineCols = line.length;\n var needle = line.substring(Math.max(startOuter, 0), Math.min(endOuter, lineCols));\n if (startOuter >= 0 && /^[\\w\\d]/.test(needle) || endOuter <= lineCols && /[\\w\\d]$/.test(needle)) return;\n needle = line.substring(selection.start.column, selection.end.column);\n if (!/^[\\w\\d]+$/.test(needle)) return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n return re;\n };\n\n this.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n\n this.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n this.onChangeMode = function (e) {\n this.renderer.updateText();\n\n this._emit(\"changeMode\", e);\n };\n\n this.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n\n this.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n\n this.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n\n this.getCopyText = function () {\n var text = this.getSelectedText();\n\n this._signal(\"copy\", text);\n\n return text;\n };\n\n this.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n\n this.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n\n this.onPaste = function (text, event) {\n var e = {\n text: text,\n event: event\n };\n this.commands.exec(\"paste\", this, e);\n };\n\n this.$handlePaste = function (e) {\n if (typeof e == \"string\") e = {\n text: e\n };\n\n this._signal(\"paste\", e);\n\n var text = e.text;\n\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n this.insert(text);\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n if (lines.length > ranges.length || lines.length < 2 || !lines[1]) return this.commands.exec(\"insertstring\", this, text);\n\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty()) this.session.remove(range);\n this.session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n\n this.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n\n if (transform) {\n if (text !== transform.text) {\n this.session.mergeUndoDeltas = false;\n this.$mergeNextCommand = false;\n }\n\n text = transform.text;\n }\n }\n\n if (text == \"\\t\") text = this.session.getTabString();\n\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n } else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n var end = session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) {\n // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n } else {\n // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({\n row: cursor.row + 1,\n column: 0\n }, lineIndent);\n }\n\n if (shouldOutdent) mode.autoOutdent(lineState, session, cursor.row);\n };\n\n this.onTextInput = function (text) {\n this.keyBinding.onTextInput(text);\n };\n\n this.onCommandKey = function (e, hashId, keyCode) {\n this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n\n this.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n\n this.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n\n this.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n\n this.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n\n this.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n\n this.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n\n this.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n\n this.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n\n this.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n\n this.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n\n this.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n\n this.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n\n this.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n\n this.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n\n this.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n\n this.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n\n this.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n\n this.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n\n this.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n\n this.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n\n this.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n\n this.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n\n this.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\") this.selection.selectLeft();else this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n\n if (new_range) range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n\n this.removeWordRight = function () {\n if (this.selection.isEmpty()) this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeWordLeft = function () {\n if (this.selection.isEmpty()) this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeToLineStart = function () {\n if (this.selection.isEmpty()) this.selection.selectLineStart();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeToLineEnd = function () {\n if (this.selection.isEmpty()) this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n\n this.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n\n this.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0) return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n } else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n\n this.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n\n this.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n\n this.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = size - column % size;\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n\n return this.insert(indentString);\n };\n\n this.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n\n this.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n\n this.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n\n for (var i = rows.first; i <= rows.last; i++) {\n lines.push(session.getLine(i));\n }\n\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n\n this.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n\n this.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n\n return null;\n };\n\n this.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n };\n\n this.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n\n this.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n\n this.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n\n this.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n\n this.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n\n this.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n\n this.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last) break;else if (!copy && subRows.first > last + 1) break;\n last = subRows.last;\n }\n\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n\n this.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function (text) {\n this.renderer.showComposition(this.getCursorPosition());\n };\n\n this.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n\n this.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n\n this.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n\n this.isRowVisible = function (row) {\n return row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow();\n };\n\n this.isRowFullyVisible = function (row) {\n return row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow();\n };\n\n this.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n this.$blockScrolling++;\n\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n\n this.$blockScrolling--;\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null) renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n\n this.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n\n this.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n\n this.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n\n this.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n\n this.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n\n this.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n\n this.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n\n this.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n\n this.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n\n this.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n\n this.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n\n this.getSelectionRange = function () {\n return this.selection.getRange();\n };\n\n this.selectAll = function () {\n this.$blockScrolling += 1;\n this.selection.selectAll();\n this.$blockScrolling -= 1;\n };\n\n this.clearSelection = function () {\n this.selection.clearSelection();\n };\n\n this.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n\n this.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n\n this.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var token = prevToken || iterator.stepForward();\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n\n break;\n }\n }\n } else if (token && token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n\n if (prevToken.value === '<') {\n depth[token.value]++;\n } else if (prevToken.value === '') {\n depth[token.value]--;\n }\n\n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n\n if (!found) {\n prevToken = token;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n\n if (!matchType) return;\n var range, pos;\n\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n\n if (!range) {\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2) range = this.session.getBracketRange(pos);\n }\n } else if (matchType === 'tag') {\n if (token && token.type.indexOf('tag-name') !== -1) var tag = token.value;else return;\n range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n\n if (range.compare(cursor.row, cursor.column) === 0) {\n found = false;\n\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n\n if (prevToken) {\n if (prevToken.type.indexOf('tag-close') !== -1) {\n range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n }\n\n if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth[tag]++;\n } else if (prevToken.value === '') {\n depth[tag]--;\n }\n\n if (depth[tag] === 0) found = true;\n }\n }\n } while (prevToken && !found);\n }\n\n if (token && token.type.indexOf('tag-name')) {\n pos = range.start;\n if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2) pos = range.end;\n }\n }\n\n pos = range && range.cursor || pos;\n\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n } else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n } else {\n this.selection.selectTo(pos.row, pos.column);\n }\n } else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n\n this.gotoLine = function (lineNumber, column, animate) {\n this.selection.clearSelection();\n this.session.unfold({\n row: lineNumber - 1,\n column: column || 0\n });\n this.$blockScrolling += 1;\n this.exitMultiSelectMode && this.exitMultiSelectMode();\n this.moveCursorTo(lineNumber - 1, column || 0);\n this.$blockScrolling -= 1;\n if (!this.isRowFullyVisible(lineNumber - 1)) this.scrollToLine(lineNumber - 1, true, animate);\n };\n\n this.navigateTo = function (row, column) {\n this.selection.moveTo(row, column);\n };\n\n this.navigateUp = function (times) {\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n var selectionStart = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionStart);\n }\n\n this.selection.clearSelection();\n this.selection.moveCursorBy(-times || -1, 0);\n };\n\n this.navigateDown = function (times) {\n if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n var selectionEnd = this.selection.anchor.getPosition();\n return this.moveCursorToPosition(selectionEnd);\n }\n\n this.selection.clearSelection();\n this.selection.moveCursorBy(times || 1, 0);\n };\n\n this.navigateLeft = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionStart = this.getSelectionRange().start;\n this.moveCursorToPosition(selectionStart);\n } else {\n times = times || 1;\n\n while (times--) {\n this.selection.moveCursorLeft();\n }\n }\n\n this.clearSelection();\n };\n\n this.navigateRight = function (times) {\n if (!this.selection.isEmpty()) {\n var selectionEnd = this.getSelectionRange().end;\n this.moveCursorToPosition(selectionEnd);\n } else {\n times = times || 1;\n\n while (times--) {\n this.selection.moveCursorRight();\n }\n }\n\n this.clearSelection();\n };\n\n this.navigateLineStart = function () {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n\n this.navigateLineEnd = function () {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n\n this.navigateFileEnd = function () {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n\n this.navigateFileStart = function () {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n\n this.navigateWordRight = function () {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n\n this.navigateWordLeft = function () {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n\n this.replace = function (replacement, options) {\n if (options) this.$search.set(options);\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range) return replaced;\n\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n\n if (range !== null) {\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n }\n\n return replaced;\n };\n\n this.replaceAll = function (replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length) return replaced;\n this.$blockScrolling += 1;\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n\n for (var i = ranges.length - 1; i >= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n this.$blockScrolling -= 1;\n return replaced;\n };\n\n this.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n\n this.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n\n this.find = function (needle, options, animate) {\n if (!options) options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp) options.needle = needle;else if (_typeof(needle) == \"object\") oop.mixin(options, needle);\n var range = this.selection.getRange();\n\n if (options.needle == null) {\n needle = this.session.getTextRange(range) || this.$search.$options.needle;\n\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n\n this.$search.set({\n needle: needle\n });\n }\n\n this.$search.set(options);\n if (!options.start) this.$search.set({\n start: range\n });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll) return newRange;\n\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n\n if (options.backwards) range.start = range.end;else range.end = range.start;\n this.selection.setRange(range);\n };\n\n this.findNext = function (options, animate) {\n this.find({\n skipCurrent: true,\n backwards: false\n }, options, animate);\n };\n\n this.findPrevious = function (options, animate) {\n this.find(options, {\n skipCurrent: true,\n backwards: true\n }, animate);\n };\n\n this.revealRange = function (range, animate) {\n this.$blockScrolling += 1;\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n this.$blockScrolling -= 1;\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false) this.renderer.animateScrolling(scrollTop);\n };\n\n this.undo = function () {\n this.$blockScrolling++;\n this.session.getUndoManager().undo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n\n this.redo = function () {\n this.$blockScrolling++;\n this.session.getUndoManager().redo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n\n this.destroy = function () {\n this.renderer.destroy();\n\n this._signal(\"destroy\", this);\n\n if (this.session) {\n this.session.destroy();\n }\n };\n\n this.setAutoScrollEditorIntoView = function (enable) {\n if (!enable) return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor) this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll) rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused() || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height && pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n\n shouldScroll = rect = null;\n }\n });\n\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable) return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n this.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer) return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n }).call(Editor.prototype);\n config.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function set(style) {\n this.onSelectionChange();\n\n this._signal(\"changeSelectionStyle\", {\n data: style\n });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function set() {\n this.$updateHighlightActiveLine();\n },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function set(shouldHighlight) {\n this.$onSelectionChange();\n },\n initialValue: true\n },\n readOnly: {\n set: function set(readOnly) {\n this.$resetCursorStyle();\n },\n initialValue: false\n },\n cursorStyle: {\n set: function set(val) {\n this.$resetCursorStyle();\n },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {\n initialValue: true\n },\n wrapBehavioursEnabled: {\n initialValue: true\n },\n autoScrollEditorIntoView: {\n set: function set(val) {\n this.setAutoScrollEditorIntoView(val);\n }\n },\n keyboardHandler: {\n set: function set(val) {\n this.setKeyboardHandler(val);\n },\n get: function get() {\n return this.keybindingId;\n },\n handlesSet: true\n },\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n showLineNumbers: \"renderer\",\n showGutter: \"renderer\",\n displayIndentGuides: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n });\n exports.Editor = Editor;\n});\nace.define(\"ace/undomanager\", [\"require\", \"exports\", \"module\"], function (acequire, exports, module) {\n \"use strict\";\n\n var UndoManager = function UndoManager() {\n this.reset();\n };\n\n (function () {\n this.execute = function (options) {\n var deltaSets = options.args[0];\n this.$doc = options.args[1];\n\n if (options.merge && this.hasUndo()) {\n this.dirtyCounter--;\n deltaSets = this.$undoStack.pop().concat(deltaSets);\n }\n\n this.$undoStack.push(deltaSets);\n this.$redoStack = [];\n\n if (this.dirtyCounter < 0) {\n this.dirtyCounter = NaN;\n }\n\n this.dirtyCounter++;\n };\n\n this.undo = function (dontSelect) {\n var deltaSets = this.$undoStack.pop();\n var undoSelectionRange = null;\n\n if (deltaSets) {\n undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\n this.$redoStack.push(deltaSets);\n this.dirtyCounter--;\n }\n\n return undoSelectionRange;\n };\n\n this.redo = function (dontSelect) {\n var deltaSets = this.$redoStack.pop();\n var redoSelectionRange = null;\n\n if (deltaSets) {\n redoSelectionRange = this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\n this.$undoStack.push(deltaSets);\n this.dirtyCounter++;\n }\n\n return redoSelectionRange;\n };\n\n this.reset = function () {\n this.$undoStack = [];\n this.$redoStack = [];\n this.dirtyCounter = 0;\n };\n\n this.hasUndo = function () {\n return this.$undoStack.length > 0;\n };\n\n this.hasRedo = function () {\n return this.$redoStack.length > 0;\n };\n\n this.markClean = function () {\n this.dirtyCounter = 0;\n };\n\n this.isClean = function () {\n return this.dirtyCounter === 0;\n };\n\n this.$serializeDeltas = function (deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $serializeDelta);\n };\n\n this.$deserializeDeltas = function (deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\n };\n\n function $serializeDelta(delta) {\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines.length == 1 ? null : delta.lines,\n text: delta.lines.length == 1 ? delta.lines[0] : null\n };\n }\n\n function $deserializeDelta(delta) {\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines || [delta.text]\n };\n }\n\n function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\n var deltaSets_new = new Array(deltaSets_old.length);\n\n for (var i = 0; i < deltaSets_old.length; i++) {\n var deltaSet_old = deltaSets_old[i];\n var deltaSet_new = {\n group: deltaSet_old.group,\n deltas: new Array(deltaSet_old.length)\n };\n\n for (var j = 0; j < deltaSet_old.deltas.length; j++) {\n var delta_old = deltaSet_old.deltas[j];\n deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\n }\n\n deltaSets_new[i] = deltaSet_new;\n }\n\n return deltaSets_new;\n }\n }).call(UndoManager.prototype);\n exports.UndoManager = UndoManager;\n});\nace.define(\"ace/layer/gutter\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\"], function (acequire, exports, module) {\n \"use strict\";\n\n var dom = acequire(\"../lib/dom\");\n var oop = acequire(\"../lib/oop\");\n var lang = acequire(\"../lib/lang\");\n var EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\n var Gutter = function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$cells = [];\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setSession = function (session) {\n if (this.session) this.session.removeEventListener(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session) session.on(\"change\", this.$updateAnnotations);\n };\n\n this.addGutterDecoration = function (row, className) {\n if (window.console) console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n\n this.removeGutterDecoration = function (row, className) {\n if (window.console) console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n\n this.setAnnotations = function (annotations) {\n this.$annotations = [];\n\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo) rowInfo = this.$annotations[row] = {\n text: []\n };\n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) rowInfo.text.push(annoText);\n var type = annotation.type;\n if (type == \"error\") rowInfo.className = \" ace_error\";else if (type == \"warning\" && rowInfo.className != \" ace_error\") rowInfo.className = \" ace_warning\";else if (type == \"info\" && !rowInfo.className) rowInfo.className = \" ace_info\";\n }\n };\n\n this.$updateAnnotations = function (delta) {\n if (!this.$annotations.length) return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {} else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n } else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n\n this.update = function (config) {\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineNumber = 0;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var cell = null;\n var index = -1;\n var row = firstRow;\n\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n\n if (row > lastRow) {\n while (this.$cells.length > index + 1) {\n cell = this.$cells.pop();\n this.element.removeChild(cell.element);\n }\n\n break;\n }\n\n cell = this.$cells[++index];\n\n if (!cell) {\n cell = {\n element: null,\n textNode: null,\n foldWidget: null\n };\n cell.element = dom.createElement(\"div\");\n cell.textNode = document.createTextNode('');\n cell.element.appendChild(cell.textNode);\n this.element.appendChild(cell.element);\n this.$cells[index] = cell;\n }\n\n var className = \"ace_gutter-cell \";\n if (breakpoints[row]) className += breakpoints[row];\n if (decorations[row]) className += decorations[row];\n if (this.$annotations[row]) className += this.$annotations[row].className;\n if (cell.element.className != className) cell.element.className = className;\n var height = session.getRowLength(row) * config.lineHeight + \"px\";\n if (height != cell.element.style.height) cell.element.style.height = height;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null) c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n if (!cell.foldWidget) {\n cell.foldWidget = dom.createElement(\"span\");\n cell.element.appendChild(cell.foldWidget);\n }\n\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row) className += \" ace_closed\";else className += \" ace_open\";\n if (cell.foldWidget.className != className) cell.foldWidget.className = className;\n var height = config.lineHeight + \"px\";\n if (cell.foldWidget.style.height != height) cell.foldWidget.style.height = height;\n } else {\n if (cell.foldWidget) {\n cell.element.removeChild(cell.foldWidget);\n cell.foldWidget = null;\n }\n }\n\n var text = lastLineNumber = gutterRenderer ? gutterRenderer.getText(session, row) : row + firstLineNumber;\n if (text !== cell.textNode.data) cell.textNode.data = text;\n row++;\n }\n\n this.element.style.height = config.minHeight + \"px\";\n if (this.$fixedWidth || session.$useWrapMode) lastLineNumber = session.getLength() + firstLineNumber;\n var gutterWidth = gutterRenderer ? gutterRenderer.getWidth(session, lastLineNumber, config) : lastLineNumber.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n\n this._emit(\"changeGutterWidth\", gutterWidth);\n }\n };\n\n this.$fixedWidth = false;\n this.$showLineNumbers = true;\n this.$renderer = \"\";\n\n this.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function getWidth() {\n return \"\";\n },\n getText: function getText() {\n return \"\";\n }\n };\n };\n\n this.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n\n this.$showFoldWidgets = true;\n\n this.setShowFoldWidgets = function (show) {\n if (show) dom.addCssClass(this.element, \"ace_folding-enabled\");else dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n\n this.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function () {\n if (!this.element.firstChild) return {\n left: 0,\n right: 0\n };\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\n this.$padding.right = parseInt(style.paddingRight) || 0;\n return this.$padding;\n };\n\n this.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left) return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right) return \"foldWidgets\";\n };\n }).call(Gutter.prototype);\n exports.Gutter = Gutter;\n});\nace.define(\"ace/layer/marker\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/lib/dom\"], function (acequire, exports, module) {\n \"use strict\";\n\n var Range = acequire(\"../range\").Range;\n var dom = acequire(\"../lib/dom\");\n\n var Marker = function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n };\n\n (function () {\n this.$padding = 0;\n\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n\n this.setSession = function (session) {\n this.session = session;\n };\n\n this.setMarkers = function (markers) {\n this.markers = markers;\n };\n\n this.update = function (config) {\n if (!config) return;\n this.config = config;\n var html = [];\n\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n range = range.toScreenRange(this.session);\n\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + (this.session.$bidiHandler.isBidiRow(range.start.row) ? this.session.$bidiHandler.getPosLeft(range.start.column) : range.start.column * config.characterWidth);\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\") this.drawTextMarker(html, range, marker.clazz, config);else this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n this.drawBidiSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n }\n\n this.element.innerHTML = html.join(\"\");\n };\n\n this.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n\n this.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var clazzModified = null;\n var lineRange = new Range(row, range.start.column, row, curr);\n\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n clazzModified = clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\" + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end);\n\n if (this.session.$bidiHandler.isBidiRow(row)) {\n this.drawBidiSingleLineMarker(stringBuilder, lineRange, clazzModified, layerConfig, row == end ? 0 : 1, extraStyle);\n } else {\n this.drawSingleLineMarker(stringBuilder, lineRange, clazzModified, layerConfig, row == end ? 0 : 1, extraStyle);\n }\n }\n };\n\n this.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height, top, left;\n extraStyle = extraStyle || \"\";\n\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n } else {\n height = config.lineHeight;\n top = this.$getTop(range.start.row, config);\n left = padding + range.start.column * config.characterWidth;\n stringBuilder.push(\"