/ * *
* simplemde v1 . 9.0
* Copyright Next Step Webs , Inc .
* @ link https : //github.com/NextStepWebs/simplemde-markdown-editor
* @ license MIT
* /
! function ( e ) { if ( "object" == typeof exports && "undefined" != typeof module ) module . exports = e ( ) ; else if ( "function" == typeof define && define . amd ) define ( [ ] , e ) ; else { var t ; t = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this , t . SimpleMDE = e ( ) } } ( function ( ) { var e ; return function t ( e , n , r ) { function i ( l , a ) { if ( ! n [ l ] ) { if ( ! e [ l ] ) { var s = "function" == typeof require && require ; if ( ! a && s ) return s ( l , ! 0 ) ; if ( o ) return o ( l , ! 0 ) ; var c = new Error ( "Cannot find module '" + l + "'" ) ; throw c . code = "MODULE_NOT_FOUND" , c } var u = n [ l ] = { exports : { } } ; e [ l ] [ 0 ] . call ( u . exports , function ( t ) { var n = e [ l ] [ 1 ] [ t ] ; return i ( n ? n : t ) } , u , u . exports , t , e , n , r ) } return n [ l ] . exports } for ( var o = "function" == typeof require && require , l = 0 ; l < r . length ; l ++ ) i ( r [ l ] ) ; return i } ( { 1 : [ function ( e , t , n ) { ( function ( n ) { Typo = n . Typo = e ( "/Users/vladson/projects/simplemde-markdown-editor/node_modules/codemirror-spell-checker/src/js/typo.js" ) , CodeMirror = n . CodeMirror = e ( "codemirror" ) ; ( function ( e , t , n ) { var r , i = 0 , o = ! 1 , l = ! 1 , a = "" , s = "" ; CodeMirror . defineMode ( "spell-checker" , function ( e , t ) { if ( ! o ) { o = ! 0 ; var n = new XMLHttpRequest ; n . open ( "GET" , "https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff" , ! 0 ) , n . onload = function ( e ) { 4 === n . readyState && 200 === n . status && ( a = n . responseText , i ++ , 2 == i && ( r = new Typo ( "en_US" , a , s , { platform : "any" } ) ) ) } , n . send ( null ) } if ( ! l ) { l = ! 0 ; var c = new XMLHttpRequest ; c . open ( "GET" , "https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic" , ! 0 ) , c . onload = function ( e ) { 4 === c . readyState && 200 === c . status && ( s = c . responseText , i ++ , 2 == i && ( r = new Typo ( "en_US" , a , s , { platform : "any" } ) ) ) } , c . send ( null ) } var u = '!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~ ' , d = { token : function ( e , t ) { var n = e . peek ( ) , i = "" ; if ( u . includes ( n ) ) return e . next ( ) , null ; for ( ; null != ( n = e . peek ( ) ) && ! u . includes ( n ) ; ) i += n , e . next ( ) ; return r && ! r . check ( i ) ? "spell-error" : null } } , h = CodeMirror . getMode ( e , e . backdrop || "text/plain" ) ; return CodeMirror . overlayMode ( h , d , ! 0 ) } ) , String . prototype . includes || ( String . prototype . includes = function ( ) { "use strict" ; return - 1 !== String . prototype . indexOf . apply ( this , arguments ) } ) } ) . call ( n , t , void 0 , void 0 ) } ) . call ( this , "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : { } ) } , { "/Users/vladson/projects/simplemde-markdown-editor/node_modules/codemirror-spell-checker/src/js/typo.js" : 2 , codemirror : 6 } ] , 2 : [ function ( e , t , n ) { ( function ( e ) { ( function ( e , t , n , r , i ) { "use strict" ; var o = function ( e , t , n , r ) { if ( r = r || { } , this . platform = r . platform || "chrome" , this . dictionary = null , this . rules = { } , this . dictionaryTable = { } , this . compoundRules = [ ] , this . compoundRuleCodes = { } , this . replacementTable = [ ] , this . flags = r . flags || { } , e ) { if ( this . dictionary = e , "chrome" == this . platform ) t || ( t = this . _readFile ( chrome . extension . getURL ( "lib/typo/dictionaries/" + e + "/" + e + ".aff" ) ) ) , n || ( n = this . _readFile ( chrome . extension . getURL ( "lib/typo/dictionaries/" + e + "/" + e + ".dic" ) ) ) ; else { var i = r . dictionaryPath || "" ; t || ( t = this . _readFile ( i + "/" + e + "/" + e + ".aff" ) ) , n || ( n = this . _readFile ( i + "/" + e + "/" + e + ".dic" ) ) } this . rules = this . _parseAFF ( t ) , this . compoundRuleCodes = { } ; for ( var o = 0 , l = this . compoundRules . length ; l > o ; o ++ ) for ( var a = this . compoundRules [ o ] , s = 0 , c = a . length ; c > s ; s ++ ) this . compoundRuleCodes [ a [ s ] ] = [ ] ; "ONLYINCOMPOUND" in this . flags && ( this . compoundRuleCodes [ this . flags . ONLYINCOMPOUND ] = [ ] ) , this . dictionaryTable = this . _parseDIC ( n ) ; for ( var o in this . compoundRuleCodes ) 0 == this . compoundRuleCodes [ o ] . length && delete this . compoundRuleCodes [ o ] ; for ( var o = 0 , l = this . compoundRules . length ; l > o ; o ++ ) { for ( var u = this . compoundRules [ o ] , d = "" , s = 0 , c = u . length ; c > s ; s ++ ) { var h = u [ s ] ; d += h in this . compoundRuleCodes ? "(" + this . compoundRuleCodes [ h ] . join ( "|" ) + ")" : h } this . compoundRules [ o ] = new RegExp ( d , "i" ) } } return this } ; o . prototype = { load : function ( e ) { for ( var t in e ) this [ t ] = e [ t ] ; return this } , _readFile : function ( e , t ) { t || ( t = "ISO8859-1" ) ; var n = new XMLHttpRequest ; return n . open ( "GET" , e , ! 1 ) , n . overrideMimeType && n . overrideMimeType ( "text/plain; charset=" + t ) , n . send ( null ) , n . responseText } , _parseAFF : function ( e ) { var t = { } ; e = this . _removeAffixComments ( e ) ; for ( var n = e . split ( "\n" ) , r = 0 , i = n . length ; i > r ; r ++ ) { var o = n [ r ] , l = o . split ( /\s+/ ) , a = l [ 0 ] ; if ( "PFX" == a || "SFX" == a ) { for ( var s = l [ 1 ] , c = l [ 2 ] , u = parseInt ( l [ 3 ] , 10 ) , d = [ ] , h = r + 1 , f = r + 1 + u ; f > h ; h ++ ) { var o = n [ h ] , p = o . s
if ( o . node == r ) return se ( o , t , n ) } } function se ( e , t , n ) { function r ( t , n , r ) { for ( var i = - 1 ; i < ( u ? u . length : 0 ) ; i ++ ) for ( var o = 0 > i ? c . map : u [ i ] , l = 0 ; l < o . length ; l += 3 ) { var a = o [ l + 2 ] ; if ( a == t || a == n ) { var s = ti ( 0 > i ? e . line : e . rest [ i ] ) , d = o [ l ] + r ; return ( 0 > r || a != t ) && ( d = o [ l + ( r ? 1 : 0 ) ] ) , zo ( s , d ) } } } var i = e . text . firstChild , o = ! 1 ; if ( ! t || ! Vl ( i , t ) ) return le ( zo ( ti ( e . line ) , 0 ) , ! 0 ) ; if ( t == i && ( o = ! 0 , t = i . childNodes [ n ] , n = 0 , ! t ) ) { var l = e . rest ? Wi ( e . rest ) : e . line ; return le ( zo ( ti ( l ) , l . text . length ) , o ) } var a = 3 == t . nodeType ? t : null , s = t ; for ( a || 1 != t . childNodes . length || 3 != t . firstChild . nodeType || ( a = t . firstChild , n && ( n = a . nodeValue . length ) ) ; s . parentNode != i ; ) s = s . parentNode ; var c = e . measure , u = c . maps , d = r ( a , s , n ) ; if ( d ) return le ( d , o ) ; for ( var h = s . nextSibling , f = a ? a . nodeValue . length - n : 0 ; h ; h = h . nextSibling ) { if ( d = r ( h , h . firstChild , 0 ) ) return le ( zo ( d . line , d . ch - f ) , o ) ; f += h . textContent . length } for ( var p = s . previousSibling , f = n ; p ; p = p . previousSibling ) { if ( d = r ( p , p . firstChild , - 1 ) ) return le ( zo ( d . line , d . ch + f ) , o ) ; f += h . textContent . length } } function ce ( e , t , n , r , i ) { function o ( e ) { return function ( t ) { return t . id == e } } function l ( t ) { if ( 1 == t . nodeType ) { var n = t . getAttribute ( "cm-text" ) ; if ( null != n ) return "" == n && ( n = t . textContent . replace ( /\u200b/g , "" ) ) , void ( a += n ) ; var u , d = t . getAttribute ( "cm-marker" ) ; if ( d ) { var h = e . findMarks ( zo ( r , 0 ) , zo ( i + 1 , 0 ) , o ( + d ) ) ; return void ( h . length && ( u = h [ 0 ] . find ( ) ) && ( a += Qr ( e . doc , u . from , u . to ) . join ( c ) ) ) } if ( "false" == t . getAttribute ( "contenteditable" ) ) return ; for ( var f = 0 ; f < t . childNodes . length ; f ++ ) l ( t . childNodes [ f ] ) ; /^(pre|div|p)$/i . test ( t . nodeName ) && ( s = ! 0 ) } else if ( 3 == t . nodeType ) { var p = t . nodeValue ; if ( ! p ) return ; s && ( a += c , s = ! 1 ) , a += p } } for ( var a = "" , s = ! 1 , c = e . doc . lineSeparator ( ) ; l ( t ) , t != n ; ) t = t . nextSibling ; return a } function ue ( e , t ) { this . ranges = e , this . primIndex = t } function de ( e , t ) { this . anchor = e , this . head = t } function he ( e , t ) { var n = e [ t ] ; e . sort ( function ( e , t ) { return Fo ( e . from ( ) , t . from ( ) ) } ) , t = Di ( e , n ) ; for ( var r = 1 ; r < e . length ; r ++ ) { var i = e [ r ] , o = e [ r - 1 ] ; if ( Fo ( o . to ( ) , i . from ( ) ) >= 0 ) { var l = X ( o . from ( ) , i . from ( ) ) , a = K ( o . to ( ) , i . to ( ) ) , s = o . empty ( ) ? i . from ( ) == i . head : o . from ( ) == o . head ; t >= r && -- t , e . splice ( -- r , 2 , new de ( s ? a : l , s ? l : a ) ) } } return new ue ( e , t ) } function fe ( e , t ) { return new ue ( [ new de ( e , t || e ) ] , 0 ) } function pe ( e , t ) { return Math . max ( e . first , Math . min ( t , e . first + e . size - 1 ) ) } function me ( e , t ) { if ( t . line < e . first ) return zo ( e . first , 0 ) ; var n = e . first + e . size - 1 ; return t . line > n ? zo ( n , Zr ( e , n ) . text . length ) : ge ( t , Zr ( e , t . line ) . text . length ) } function ge ( e , t ) { var n = e . ch ; return null == n || n > t ? zo ( e . line , t ) : 0 > n ? zo ( e . line , 0 ) : e } function ve ( e , t ) { return t >= e . first && t < e . first + e . size } function ye ( e , t ) { for ( var n = [ ] , r = 0 ; r < t . length ; r ++ ) n [ r ] = me ( e , t [ r ] ) ; return n } function xe ( e , t , n , r ) { if ( e . cm && e . cm . display . shift || e . extend ) { var i = t . anchor ; if ( r ) { var o = Fo ( n , i ) < 0 ; o != Fo ( r , i ) < 0 ? ( i = n , n = r ) : o != Fo ( n , r ) < 0 && ( n = r ) } return new de ( i , n ) } return new de ( r || n , n ) } function be ( e , t , n , r ) { Te ( e , new ue ( [ xe ( e , e . sel . primary ( ) , t , n ) ] , 0 ) , r ) } function we ( e , t , n ) { for ( var r = [ ] , i = 0 ; i < e . sel . ranges . length ; i ++ ) r [ i ] = xe ( e , e . sel . ranges [ i ] , t [ i ] , null ) ; var o = he ( r , e . sel . primIndex ) ; Te ( e , o , n ) } function ke ( e , t , n , r ) { var i = e . sel . ranges . slice ( 0 ) ; i [ t ] = n , Te ( e , he ( i , e . sel . primIndex ) , r ) } function Ce ( e , t , n , r ) { Te ( e , fe ( t , n ) , r ) } function Se ( e , t ) { var n = { ranges : t . ranges , update : function ( t ) { this . ranges = [ ] ; for ( var n = 0 ; n < t . length ; n ++ ) this . ranges [ n ] = new de ( me ( e , t [ n ] . anchor ) , me ( e , t [ n ] . head ) ) } } ; return Wl ( e , "beforeSelectionChange" , e , n ) , e . cm && Wl ( e . cm , "beforeSelectionChange" , e . cm , n ) , n . ranges != t . ranges ? he ( n . ranges , n . ranges . length - 1 ) : t } function Le ( e , t , n ) { var r = e . history . done , i = Wi ( r ) ; i && i . ranges ? ( r [ r . length - 1 ] = t , Me ( e , t , n ) ) : Te ( e , t , n ) } function Te ( e , t , n ) { Me ( e , t , n ) , di ( e , e . sel , e . cm ? e . cm . curOp . id : NaN , n ) } function Me ( e , t , n ) { ( Ni ( e , "beforeSelectionChange" ) || e . cm && Ni ( e . cm , "beforeSelectionChange" ) ) && ( t = Se ( e , t ) ) ; var r = n && n . bias || ( Fo ( t . primary ( ) . head , e . sel . primary ( ) . head ) < 0 ? - 1 : 1 ) ; Ne ( e , Oe ( e , t , r , ! 0 ) ) , n && n . scroll === ! 1 || ! e . cm || Fn ( e . cm ) } function Ne ( e , t ) { t . equals ( e . sel ) || ( e . sel = t , e . cm && ( e . cm . curOp . updateInput = e . cm . curOp . selectionChanged = ! 0 , Mi ( e . cm ) ) , Si ( e , "cursorActivity" , e ) ) } function Ae ( e ) { Ne ( e , Oe ( e , e . sel , null , ! 1 ) , Pl ) } function Oe ( e , t , n , r ) { for ( var i , o = 0 ; o < t . ranges . length ; o ++ ) { var l = t . ranges [ o ] , a = t . ranges . length == e . sel . ranges . length && e . sel . ranges [ o ] , s = We ( e , l . anchor , a && a . anchor , n , r ) , c = We ( e , l . head , a && a . head , n
if ( ! Ti ( e , t ) && ! Ut ( e . display , t ) && ( t . dataTransfer . setData ( "Text" , e . getSelection ( ) ) , t . dataTransfer . setDragImage && ! Lo ) ) { var n = ji ( "img" , null , null , "position: fixed; left: 0; top: 0;" ) ; n . src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" , So && ( n . width = n . height = 1 , e . display . wrapper . appendChild ( n ) , n . _top = n . offsetTop ) , t . dataTransfer . setDragImage ( n , 0 , 0 ) , So && n . parentNode . removeChild ( n ) } } function tn ( e , t ) { var n = $t ( e , t ) ; if ( n ) { var r = document . createDocumentFragment ( ) ; Pe ( e , n , r ) , e . display . dragCursor || ( e . display . dragCursor = ji ( "div" , null , "CodeMirror-cursors CodeMirror-dragcursors" ) , e . display . lineSpace . insertBefore ( e . display . dragCursor , e . display . cursorDiv ) ) , Gi ( e . display . dragCursor , r ) } } function nn ( e ) { e . display . dragCursor && ( e . display . lineSpace . removeChild ( e . display . dragCursor ) , e . display . dragCursor = null ) } function rn ( e , t ) { Math . abs ( e . doc . scrollTop - t ) < 2 || ( e . doc . scrollTop = t , go || A ( e , { top : t } ) , e . display . scroller . scrollTop != t && ( e . display . scroller . scrollTop = t ) , e . display . scrollbars . setScrollTop ( t ) , go && A ( e ) , Re ( e , 100 ) ) } function on ( e , t , n ) { ( n ? t == e . doc . scrollLeft : Math . abs ( e . doc . scrollLeft - t ) < 2 ) || ( t = Math . min ( t , e . display . scroller . scrollWidth - e . display . scroller . clientWidth ) , e . doc . scrollLeft = t , w ( e ) , e . display . scroller . scrollLeft != t && ( e . display . scroller . scrollLeft = t ) , e . display . scrollbars . setScrollLeft ( t ) ) } function ln ( e , t ) { var n = Xo ( t ) , r = n . x , i = n . y , o = e . display , l = o . scroller , a = l . scrollWidth > l . clientWidth , s = l . scrollHeight > l . clientHeight ; if ( r && a || i && s ) { if ( i && Oo && wo ) e : for ( var c = t . target , u = o . view ; c != l ; c = c . parentNode ) for ( var d = 0 ; d < u . length ; d ++ ) if ( u [ d ] . node == c ) { e . display . currentWheelTarget = c ; break e } if ( r && ! go && ! So && null != Ko ) return i && s && rn ( e , Math . max ( 0 , Math . min ( l . scrollTop + i * Ko , l . scrollHeight - l . clientHeight ) ) ) , on ( e , Math . max ( 0 , Math . min ( l . scrollLeft + r * Ko , l . scrollWidth - l . clientWidth ) ) ) , ( ! i || i && s ) && Tl ( t ) , void ( o . wheelStartX = null ) ; if ( i && null != Ko ) { var h = i * Ko , f = e . doc . scrollTop , p = f + o . wrapper . clientHeight ; 0 > h ? f = Math . max ( 0 , f + h - 50 ) : p = Math . min ( e . doc . height , p + h + 50 ) , A ( e , { top : f , bottom : p } ) } 20 > Vo && ( null == o . wheelStartX ? ( o . wheelStartX = l . scrollLeft , o . wheelStartY = l . scrollTop , o . wheelDX = r , o . wheelDY = i , setTimeout ( function ( ) { if ( null != o . wheelStartX ) { var e = l . scrollLeft - o . wheelStartX , t = l . scrollTop - o . wheelStartY , n = t && o . wheelDY && t / o . wheelDY || e && o . wheelDX && e / o . wheelDX ; o . wheelStartX = o . wheelStartY = null , n && ( Ko = ( Ko * Vo + n ) / ( Vo + 1 ) , ++ Vo ) } } , 200 ) ) : ( o . wheelDX += r , o . wheelDY += i ) ) } } function an ( e , t , n ) { if ( "string" == typeof t && ( t = cl [ t ] , ! t ) ) return ! 1 ; e . display . input . ensurePolled ( ) ; var r = e . display . shift , i = ! 1 ; try { e . isReadOnly ( ) && ( e . state . suppressEdits = ! 0 ) , n && ( e . display . shift = ! 1 ) , i = t ( e ) != Il } finally { e . display . shift = r , e . state . suppressEdits = ! 1 } return i } function sn ( e , t , n ) { for ( var r = 0 ; r < e . state . keyMaps . length ; r ++ ) { var i = dl ( t , e . state . keyMaps [ r ] , n , e ) ; if ( i ) return i } return e . options . extraKeys && dl ( t , e . options . extraKeys , n , e ) || dl ( t , e . options . keyMap , n , e ) } function cn ( e , t , n , r ) { var i = e . state . keySeq ; if ( i ) { if ( hl ( t ) ) return "handled" ; Yo . set ( 50 , function ( ) { e . state . keySeq == i && ( e . state . keySeq = null , e . display . input . reset ( ) ) } ) , t = i + " " + t } var o = sn ( e , t , r ) ; return "multi" == o && ( e . state . keySeq = t ) , "handled" == o && Si ( e , "keyHandled" , e , t , n ) , ( "handled" == o || "multi" == o ) && ( Tl ( n ) , Fe ( e ) ) , i && ! o && /\'$/ . test ( t ) ? ( Tl ( n ) , ! 0 ) : ! ! o } function un ( e , t ) { var n = fl ( t , ! 0 ) ; return n ? t . shiftKey && ! e . state . keySeq ? cn ( e , "Shift-" + n , t , function ( t ) { return an ( e , t , ! 0 ) } ) || cn ( e , n , t , function ( t ) { return ( "string" == typeof t ? /^go[A-Z]/ . test ( t ) : t . motion ) ? an ( e , t ) : void 0 } ) : cn ( e , n , t , function ( t ) { return an ( e , t ) } ) : ! 1 } function dn ( e , t , n ) { return cn ( e , "'" + n + "'" , t , function ( t ) { return an ( e , t , ! 0 ) } ) } function hn ( e ) { var t = this ; if ( t . curOp . focus = Ui ( ) , ! Ti ( t , e ) ) { xo && 11 > bo && 27 == e . keyCode && ( e . returnValue = ! 1 ) ; var n = e . keyCode ; t . display . shift = 16 == n || e . shiftKey ; var r = un ( t , e ) ; So && ( Zo = r ? n : null , ! r && 88 == n && ! na && ( Oo ? e . metaKey : e . ctrlKey ) && t . replaceSelection ( "" , null , "cut" ) ) , 18 != n || /\bCodeMirror-crosshair\b/ . test ( t . display . lineDiv . className ) || fn ( t ) } } function fn ( e ) { function t ( e ) { 18 != e . keyCode && e . altKey || ( Yl ( n , "CodeMirror-crosshair" ) , Hl ( document , "keyup" , t ) , Hl ( document , "mouseover" , t ) ) } var n = e . display . lineDiv ; Zl ( n , "CodeMirror-crosshair" ) , Al ( document , "keyup" , t ) , Al ( document , "mouseover" , t ) } function pn ( e ) { 16 == e . keyCode && ( this . doc . sel
var i = n . lines [ r ] ; if ( i == e ) break ; t += i . height } for ( var o = n . parent ; o ; n = o , o = n . parent ) for ( var r = 0 ; r < o . children . length ; ++ r ) { var l = o . children [ r ] ; if ( l == n ) break ; t += l . height } return t } function ii ( e ) { var t = e . order ; return null == t && ( t = e . order = la ( e . text ) ) , t } function oi ( e ) { this . done = [ ] , this . undone = [ ] , this . undoDepth = 1 / 0 , this . lastModTime = this . lastSelTime = 0 , this . lastOp = this . lastSelOp = null , this . lastOrigin = this . lastSelOrigin = null , this . generation = this . maxGeneration = e || 1 } function li ( e , t ) { var n = { from : V ( t . from ) , to : Qo ( t ) , text : Qr ( e , t . from , t . to ) } ; return fi ( e , n , t . from . line , t . to . line + 1 ) , Xr ( e , function ( e ) { fi ( e , n , t . from . line , t . to . line + 1 ) } , ! 0 ) , n } function ai ( e ) { for ( ; e . length ; ) { var t = Wi ( e ) ; if ( ! t . ranges ) break ; e . pop ( ) } } function si ( e , t ) { return t ? ( ai ( e . done ) , Wi ( e . done ) ) : e . done . length && ! Wi ( e . done ) . ranges ? Wi ( e . done ) : e . done . length > 1 && ! e . done [ e . done . length - 2 ] . ranges ? ( e . done . pop ( ) , Wi ( e . done ) ) : void 0 } function ci ( e , t , n , r ) { var i = e . history ; i . undone . length = 0 ; var o , l = + new Date ; if ( ( i . lastOp == r || i . lastOrigin == t . origin && t . origin && ( "+" == t . origin . charAt ( 0 ) && e . cm && i . lastModTime > l - e . cm . options . historyEventDelay || "*" == t . origin . charAt ( 0 ) ) ) && ( o = si ( i , i . lastOp == r ) ) ) { var a = Wi ( o . changes ) ; 0 == Fo ( t . from , t . to ) && 0 == Fo ( t . from , a . to ) ? a . to = Qo ( t ) : o . changes . push ( li ( e , t ) ) } else { var s = Wi ( i . done ) ; for ( s && s . ranges || hi ( e . sel , i . done ) , o = { changes : [ li ( e , t ) ] , generation : i . generation } , i . done . push ( o ) ; i . done . length > i . undoDepth ; ) i . done . shift ( ) , i . done [ 0 ] . ranges || i . done . shift ( ) } i . done . push ( n ) , i . generation = ++ i . maxGeneration , i . lastModTime = i . lastSelTime = l , i . lastOp = i . lastSelOp = r , i . lastOrigin = i . lastSelOrigin = t . origin , a || Wl ( e , "historyAdded" ) } function ui ( e , t , n , r ) { var i = t . charAt ( 0 ) ; return "*" == i || "+" == i && n . ranges . length == r . ranges . length && n . somethingSelected ( ) == r . somethingSelected ( ) && new Date - e . history . lastSelTime <= ( e . cm ? e . cm . options . historyEventDelay : 500 ) } function di ( e , t , n , r ) { var i = e . history , o = r && r . origin ; n == i . lastSelOp || o && i . lastSelOrigin == o && ( i . lastModTime == i . lastSelTime && i . lastOrigin == o || ui ( e , o , Wi ( i . done ) , t ) ) ? i . done [ i . done . length - 1 ] = t : hi ( t , i . done ) , i . lastSelTime = + new Date , i . lastSelOrigin = o , i . lastSelOp = n , r && r . clearRedo !== ! 1 && ai ( i . undone ) } function hi ( e , t ) { var n = Wi ( t ) ; n && n . ranges && n . equals ( e ) || t . push ( e ) } function fi ( e , t , n , r ) { var i = t [ "spans_" + e . id ] , o = 0 ; e . iter ( Math . max ( e . first , n ) , Math . min ( e . first + e . size , r ) , function ( n ) { n . markedSpans && ( ( i || ( i = t [ "spans_" + e . id ] = { } ) ) [ o ] = n . markedSpans ) , ++ o } ) } function pi ( e ) { if ( ! e ) return null ; for ( var t , n = 0 ; n < e . length ; ++ n ) e [ n ] . marker . explicitlyCleared ? t || ( t = e . slice ( 0 , n ) ) : t && t . push ( e [ n ] ) ; return t ? t . length ? t : null : e } function mi ( e , t ) { var n = t [ "spans_" + e . id ] ; if ( ! n ) return null ; for ( var r = 0 , i = [ ] ; r < t . text . length ; ++ r ) i . push ( pi ( n [ r ] ) ) ; return i } function gi ( e , t , n ) { for ( var r = 0 , i = [ ] ; r < e . length ; ++ r ) { var o = e [ r ] ; if ( o . ranges ) i . push ( n ? ue . prototype . deepCopy . call ( o ) : o ) ; else { var l = o . changes , a = [ ] ; i . push ( { changes : a } ) ; for ( var s = 0 ; s < l . length ; ++ s ) { var c , u = l [ s ] ; if ( a . push ( { from : u . from , to : u . to , text : u . text } ) , t ) for ( var d in u ) ( c = d . match ( /^spans_(\d+)$/ ) ) && Di ( t , Number ( c [ 1 ] ) ) > - 1 && ( Wi ( a ) [ d ] = u [ d ] , delete u [ d ] ) } } } return i } function vi ( e , t , n , r ) { n < e . line ? e . line += r : t < e . line && ( e . line = t , e . ch = 0 ) } function yi ( e , t , n , r ) { for ( var i = 0 ; i < e . length ; ++ i ) { var o = e [ i ] , l = ! 0 ; if ( o . ranges ) { o . copied || ( o = e [ i ] = o . deepCopy ( ) , o . copied = ! 0 ) ; for ( var a = 0 ; a < o . ranges . length ; a ++ ) vi ( o . ranges [ a ] . anchor , t , n , r ) , vi ( o . ranges [ a ] . head , t , n , r ) } else { for ( var a = 0 ; a < o . changes . length ; ++ a ) { var s = o . changes [ a ] ; if ( n < s . from . line ) s . from = zo ( s . from . line + r , s . from . ch ) , s . to = zo ( s . to . line + r , s . to . ch ) ; else if ( t <= s . to . line ) { l = ! 1 ; break } } l || ( e . splice ( 0 , i + 1 ) , i = 0 ) } } } function xi ( e , t ) { var n = t . from . line , r = t . to . line , i = t . text . length - ( r - n ) - 1 ; yi ( e . done , n , r , i ) , yi ( e . undone , n , r , i ) } function bi ( e ) { return null != e . defaultPrevented ? e . defaultPrevented : 0 == e . returnValue } function wi ( e ) { return e . target || e . srcElement } function ki ( e ) { var t = e . which ; return null == t && ( 1 & e . button ? t = 1 : 2 & e . button ? t = 3 : 4 & e . button && ( t = 2 ) ) , Oo && e . ctrlKey && 1 == t && ( t = 3 ) , t } function Ci ( e , t , n ) { var r = e . _handlers && e . _handlers [ t ] ; return n ? r && r . length > 0 ? r . slice ( ) : Ol : r || Ol } function Si ( e , t ) { function n ( e ) { return function ( ) { e . apply ( null , o ) } } var r = Ci ( e , t , ! 1 ) ; if ( r . length ) { var i , o = Array . prototype . slice . call ( arguments , 2 ) ; Go ? i = Go . delayedCallbacks : Dl ? i = Dl : ( i = Dl = [ ] , setTimeout ( Li , 0 ) ) ; fo
} , scrollTo : Ht ( function ( e , t ) { ( null != e || null != t ) && Rn ( this ) , null != e && ( this . curOp . scrollLeft = e ) , null != t && ( this . curOp . scrollTop = t ) } ) , getScrollInfo : function ( ) { var e = this . display . scroller ; return { left : e . scrollLeft , top : e . scrollTop , height : e . scrollHeight - $e ( this ) - this . display . barHeight , width : e . scrollWidth - $e ( this ) - this . display . barWidth , clientHeight : Ke ( this ) , clientWidth : Ve ( this ) } } , scrollIntoView : Ht ( function ( e , t ) { if ( null == e ? ( e = { from : this . doc . sel . primary ( ) . head , to : null } , null == t && ( t = this . options . cursorScrollMargin ) ) : "number" == typeof e ? e = { from : zo ( e , 0 ) , to : null } : null == e . from && ( e = { from : e , to : null } ) , e . to || ( e . to = e . from ) , e . margin = t || 0 , null != e . from . line ) Rn ( this ) , this . curOp . scrollToPos = e ; else { var n = Pn ( this , Math . min ( e . from . left , e . to . left ) , Math . min ( e . from . top , e . to . top ) - e . margin , Math . max ( e . from . right , e . to . right ) , Math . max ( e . from . bottom , e . to . bottom ) + e . margin ) ; this . scrollTo ( n . scrollLeft , n . scrollTop ) } } ) , setSize : Ht ( function ( e , t ) { function n ( e ) { return "number" == typeof e || /^\d+$/ . test ( String ( e ) ) ? e + "px" : e } var r = this ; null != e && ( r . display . wrapper . style . width = n ( e ) ) , null != t && ( r . display . wrapper . style . height = n ( t ) ) , r . options . lineWrapping && lt ( this ) ; var i = r . display . viewFrom ; r . doc . iter ( i , r . display . viewTo , function ( e ) { if ( e . widgets ) for ( var t = 0 ; t < e . widgets . length ; t ++ ) if ( e . widgets [ t ] . noHScroll ) { Pt ( r , i , "widget" ) ; break } ++ i } ) , r . curOp . forceUpdate = ! 0 , Wl ( r , "refresh" , this ) } ) , operation : function ( e ) { return At ( this , e ) } , refresh : Ht ( function ( ) { var e = this . display . cachedTextHeight ; It ( this ) , this . curOp . forceUpdate = ! 0 , at ( this ) , this . scrollTo ( this . doc . scrollLeft , this . doc . scrollTop ) , u ( this ) , ( null == e || Math . abs ( e - yt ( this . display ) ) > . 5 ) && l ( this ) , Wl ( this , "refresh" , this ) } ) , swapDoc : Ht ( function ( e ) { var t = this . doc ; return t . cm = null , Yr ( this , e ) , at ( this ) , this . display . input . reset ( ) , this . scrollTo ( e . scrollLeft , e . scrollTop ) , this . curOp . forceScroll = ! 0 , Si ( this , "swapDoc" , this , t ) , t } ) , getInputField : function ( ) { return this . display . input . getField ( ) } , getWrapperElement : function ( ) { return this . display . wrapper } , getScrollerElement : function ( ) { return this . display . scroller } , getGutterElement : function ( ) { return this . display . gutters } } , Ai ( e ) ; var Jo = e . defaults = { } , el = e . optionHandlers = { } , tl = e . Init = { toString : function ( ) { return "CodeMirror.Init" } } ; Un ( "value" , "" , function ( e , t ) { e . setValue ( t ) } , ! 0 ) , Un ( "mode" , null , function ( e , t ) { e . doc . modeOption = t , n ( e ) } , ! 0 ) , Un ( "indentUnit" , 2 , n , ! 0 ) , Un ( "indentWithTabs" , ! 1 ) , Un ( "smartIndent" , ! 0 ) , Un ( "tabSize" , 4 , function ( e ) { r ( e ) , at ( e ) , It ( e ) } , ! 0 ) , Un ( "lineSeparator" , null , function ( e , t ) { if ( e . doc . lineSep = t , t ) { var n = [ ] , r = e . doc . first ; e . doc . iter ( function ( e ) { for ( var i = 0 ; ; ) { var o = e . text . indexOf ( t , i ) ; if ( - 1 == o ) break ; i = o + t . length , n . push ( zo ( r , o ) ) } r ++ } ) ; for ( var i = n . length - 1 ; i >= 0 ; i -- ) Wn ( e . doc , t , n [ i ] , zo ( n [ i ] . line , n [ i ] . ch + t . length ) ) } } ) , Un ( "specialChars" , /[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g , function ( t , n , r ) { t . state . specialChars = new RegExp ( n . source + ( n . test ( " " ) ? "" : "| " ) , "g" ) , r != e . Init && t . refresh ( ) } ) , Un ( "specialCharPlaceholder" , Rr , function ( e ) { e . refresh ( ) } , ! 0 ) , Un ( "electricChars" , ! 0 ) , Un ( "inputStyle" , Ao ? "contenteditable" : "textarea" , function ( ) { throw new Error ( "inputStyle can not (yet) be changed in a running editor" ) } , ! 0 ) , Un ( "rtlMoveVisually" , ! Ho ) , Un ( "wholeLineUpdateBefore" , ! 0 ) , Un ( "theme" , "default" , function ( e ) { a ( e ) , s ( e ) } , ! 0 ) , Un ( "keyMap" , "default" , function ( t , n , r ) { var i = Vn ( n ) , o = r != e . Init && Vn ( r ) ; o && o . detach && o . detach ( t , i ) , i . attach && i . attach ( t , o || null ) } ) , Un ( "extraKeys" , null ) , Un ( "lineWrapping" , ! 1 , i , ! 0 ) , Un ( "gutters" , [ ] , function ( e ) { f ( e . options ) , s ( e ) } , ! 0 ) , Un ( "fixedGutter" , ! 0 , function ( e , t ) { e . display . gutters . style . left = t ? S ( e . display ) + "px" : "0" , e . refresh ( ) } , ! 0 ) , Un ( "coverGutterNextToScrollbar" , ! 1 , function ( e ) { y ( e ) } , ! 0 ) , Un ( "scrollbarStyle" , "native" , function ( e ) { v ( e ) , y ( e ) , e . display . scrollbars . setScrollTop ( e . doc . scrollTop ) , e . display . scrollbars . setScrollLeft ( e . doc . scrollLeft ) } , ! 0 ) , Un ( "lineNumbers" , ! 1 , function ( e ) { f ( e . options ) , s ( e ) } , ! 0 ) , Un ( "firstLineNumber" , 1 , s , ! 0 ) , Un ( "lineNumberFormatter" , function ( e ) { return e } , s , ! 0 ) , Un ( "showCursorWhenSelecting" , ! 1 , Ee , ! 0 ) , Un ( "resetSelectionOnContextMenu" , ! 0 ) , Un ( "lineWiseCopyCut" , ! 0 ) , Un ( "readOnly" , ! 1 , function ( e , t ) { "nocursor" == t ? ( yn ( e ) , e . display . input . blur ( ) , e . display . disabled = ! 0 ) : e . display . disabled = ! 1 , e . display . in
} , $l = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/ ; ql = document . createRange ? function ( e , t , n , r ) { var i = document . createRange ( ) ; return i . setEnd ( r || e , n ) , i . setStart ( e , t ) , i } : function ( e , t , n ) { var r = document . body . createTextRange ( ) ; try { r . moveToElementText ( e . parentNode ) } catch ( i ) { return r } return r . collapse ( ! 0 ) , r . moveEnd ( "character" , n ) , r . moveStart ( "character" , t ) , r } ; var Vl = e . contains = function ( e , t ) { if ( 3 == t . nodeType && ( t = t . parentNode ) , e . contains ) return e . contains ( t ) ; do if ( 11 == t . nodeType && ( t = t . host ) , t == e ) return ! 0 ; while ( t = t . parentNode ) } ; xo && 11 > bo && ( Ui = function ( ) { try { return document . activeElement } catch ( e ) { return document . body } } ) ; var Kl , Xl , Yl = e . rmClass = function ( e , t ) { var n = e . className , r = $i ( t ) . exec ( n ) ; if ( r ) { var i = n . slice ( r . index + r [ 0 ] . length ) ; e . className = n . slice ( 0 , r . index ) + ( i ? r [ 1 ] + i : "" ) } } , Zl = e . addClass = function ( e , t ) { var n = e . className ; $i ( t ) . test ( n ) || ( e . className += ( n ? " " : "" ) + t ) } , Ql = ! 1 , Jl = function ( ) { if ( xo && 9 > bo ) return ! 1 ; var e = ji ( "div" ) ; return "draggable" in e || "dragDrop" in e } ( ) , ea = e . splitLines = 3 != "\n\nb" . split ( /\n/ ) . length ? function ( e ) { for ( var t = 0 , n = [ ] , r = e . length ; r >= t ; ) { var i = e . indexOf ( "\n" , t ) ; - 1 == i && ( i = e . length ) ; var o = e . slice ( t , "\r" == e . charAt ( i - 1 ) ? i - 1 : i ) , l = o . indexOf ( "\r" ) ; - 1 != l ? ( n . push ( o . slice ( 0 , l ) ) , t += l + 1 ) : ( n . push ( o ) , t = i + 1 ) } return n } : function ( e ) { return e . split ( /\r\n?|\n/ ) } , ta = window . getSelection ? function ( e ) { try { return e . selectionStart != e . selectionEnd } catch ( t ) { return ! 1 } } : function ( e ) { try { var t = e . ownerDocument . selection . createRange ( ) } catch ( n ) { } return t && t . parentElement ( ) == e ? 0 != t . compareEndPoints ( "StartToEnd" , t ) : ! 1 } , na = function ( ) { var e = ji ( "div" ) ; return "oncopy" in e ? ! 0 : ( e . setAttribute ( "oncopy" , "return;" ) , "function" == typeof e . oncopy ) } ( ) , ra = null , ia = e . keyNames = { 3 : "Enter" , 8 : "Backspace" , 9 : "Tab" , 13 : "Enter" , 16 : "Shift" , 17 : "Ctrl" , 18 : "Alt" , 19 : "Pause" , 20 : "CapsLock" , 27 : "Esc" , 32 : "Space" , 33 : "PageUp" , 34 : "PageDown" , 35 : "End" , 36 : "Home" , 37 : "Left" , 38 : "Up" , 39 : "Right" , 40 : "Down" , 44 : "PrintScrn" , 45 : "Insert" , 46 : "Delete" , 59 : ";" , 61 : "=" , 91 : "Mod" , 92 : "Mod" , 93 : "Mod" , 106 : "*" , 107 : "=" , 109 : "-" , 110 : "." , 111 : "/" , 127 : "Delete" , 173 : "-" , 186 : ";" , 187 : "=" , 188 : "," , 189 : "-" , 190 : "." , 191 : "/" , 192 : "`" , 219 : "[" , 220 : "\\" , 221 : "]" , 222 : "'" , 63232 : "Up" , 63233 : "Down" , 63234 : "Left" , 63235 : "Right" , 63272 : "Delete" , 63273 : "Home" , 63275 : "End" , 63276 : "PageUp" , 63277 : "PageDown" , 633
o ? "atom" : "error" } return e . eatWhile ( /[^&<]/ ) , null } function i ( e , t ) { var n = e . next ( ) ; if ( ">" == n || "/" == n && e . eat ( ">" ) ) return t . tokenize = r , C = ">" == n ? "endTag" : "selfcloseTag" , "tag bracket" ; if ( "=" == n ) return C = "equals" , null ; if ( "<" == n ) { t . tokenize = r , t . state = d , t . tagName = t . tagStart = null ; var i = t . tokenize ( e , t ) ; return i ? i + " tag error" : "tag error" } return /[\'\"]/ . test ( n ) ? ( t . tokenize = o ( n ) , t . stringStartCol = e . column ( ) , t . tokenize ( e , t ) ) : ( e . match ( /^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/ ) , "word" ) } function o ( e ) { var t = function ( t , n ) { for ( ; ! t . eol ( ) ; ) if ( t . next ( ) == e ) { n . tokenize = i ; break } return "string" } ; return t . isInAttribute = ! 0 , t } function l ( e , t ) { return function ( n , i ) { for ( ; ! n . eol ( ) ; ) { if ( n . match ( t ) ) { i . tokenize = r ; break } n . next ( ) } return e } } function a ( e ) { return function ( t , n ) { for ( var i ; null != ( i = t . next ( ) ) ; ) { if ( "<" == i ) return n . tokenize = a ( e + 1 ) , n . tokenize ( t , n ) ; if ( ">" == i ) { if ( 1 == e ) { n . tokenize = r ; break } return n . tokenize = a ( e - 1 ) , n . tokenize ( t , n ) } } return "meta" } } function s ( e , t , n ) { this . prev = e . context , this . tagName = t , this . indent = e . indented , this . startOfLine = n , ( L . doNotIndent . hasOwnProperty ( t ) || e . context && e . context . noIndent ) && ( this . noIndent = ! 0 ) } function c ( e ) { e . context && ( e . context = e . context . prev ) } function u ( e , t ) { for ( var n ; ; ) { if ( ! e . context ) return ; if ( n = e . context . tagName , ! L . contextGrabbers . hasOwnProperty ( n ) || ! L . contextGrabbers [ n ] . hasOwnProperty ( t ) ) return ; c ( e ) } } function d ( e , t , n ) { return "openTag" == e ? ( n . tagStart = t . column ( ) , h ) : "closeTag" == e ? f : d } function h ( e , t , n ) { return "word" == e ? ( n . tagName = t . current ( ) , S = "tag" , g ) : ( S = "error" , h ) } function f ( e , t , n ) { if ( "word" == e ) { var r = t . current ( ) ; return n . context && n . context . tagName != r && L . implicitlyClosed . hasOwnProperty ( n . context . tagName ) && c ( n ) , n . context && n . context . tagName == r ? ( S = "tag" , p ) : ( S = "tag error" , m ) } return S = "error" , m } function p ( e , t , n ) { return "endTag" != e ? ( S = "error" , p ) : ( c ( n ) , d ) } function m ( e , t , n ) { return S = "error" , p ( e , t , n ) } function g ( e , t , n ) { if ( "word" == e ) return S = "attribute" , v ; if ( "endTag" == e || "selfcloseTag" == e ) { var r = n . tagName , i = n . tagStart ; return n . tagName = n . tagStart = null , "selfcloseTag" == e || L . autoSelfClosers . hasOwnProperty ( r ) ? u ( n , r ) : ( u ( n , r ) , n . context = new s ( n , r , i == n . indented ) ) , d } return S = "error" , g } function v ( e , t , n ) { return "equals" == e ? y : ( L . allowMissing || ( S = "error" ) , g ( e , t , n ) ) } function y ( e , t , n ) { return "string" == e ? x : "word" == e && L . allowUnquoted ? ( S = "string" , g ) : ( S = "error" , g ( e , t , n ) ) } function x ( e , t , n ) { return "string" == e ? x : g ( e , t , n ) } var b = t . indentUnit , w = n . multilineTagIndentFactor || 1 , k = n . multilineTagIndentPastTag ; null == k && ( k = ! 0 ) ; var C , S , L = n . htmlMode ? { autoSelfClosers : { area : ! 0 , base : ! 0 , br : ! 0 , col : ! 0 , command : ! 0 , embed : ! 0 , frame : ! 0 , hr : ! 0 , img : ! 0 , input : ! 0 , keygen : ! 0 , link : ! 0 , meta : ! 0 , param : ! 0 , source : ! 0 , track : ! 0 , wbr : ! 0 , menuitem : ! 0 } , implicitlyClosed : { dd : ! 0 , li : ! 0 , optgroup : ! 0 , option : ! 0 , p : ! 0 , rp : ! 0 , rt : ! 0 , tbody : ! 0 , td : ! 0 , tfoot : ! 0 , th : ! 0 , tr : ! 0 } , contextGrabbers : { dd : { dd : ! 0 , dt : ! 0 } , dt : { dd : ! 0 , dt : ! 0 } , li : { li : ! 0 } , option : { option : ! 0 , optgroup : ! 0 } , optgroup : { optgroup : ! 0 } , p : { address : ! 0 , article : ! 0 , aside : ! 0 , blockquote : ! 0 , dir : ! 0 , div : ! 0 , dl : ! 0 , fieldset : ! 0 , footer : ! 0 , form : ! 0 , h1 : ! 0 , h2 : ! 0 , h3 : ! 0 , h4 : ! 0 , h5 : ! 0 , h6 : ! 0 , header : ! 0 , hgroup : ! 0 , hr : ! 0 , menu : ! 0 , nav : ! 0 , ol : ! 0 , p : ! 0 , pre : ! 0 , section : ! 0 , table : ! 0 , ul : ! 0 } , rp : { rp : ! 0 , rt : ! 0 } , rt : { rp : ! 0 , rt : ! 0 } , tbody : { tbody : ! 0 , tfoot : ! 0 } , td : { td : ! 0 , th : ! 0 } , tfoot : { tbody : ! 0 } , th : { td : ! 0 , th : ! 0 } , thead : { tbody : ! 0 , tfoot : ! 0 } , tr : { tr : ! 0 } } , doNotIndent : { pre : ! 0 } , allowUnquoted : ! 0 , allowMissing : ! 0 , caseFold : ! 0 } : { autoSelfClosers : { } , implicitlyClosed : { } , contextGrabbers : { } , doNotIndent : { } , allowUnquoted : ! 1 , allowMissing : ! 1 , caseFold : ! 1 } , T = n . alignCDATA ; return r . isInText = ! 0 , { startState : function ( ) { return { tokenize : r , state : d , indented : 0 , tagName : null , tagStart : null , context : null } } , token : function ( e , t ) { if ( ! t . tagName && e . sol ( ) && ( t . indented = e . indentation ( ) ) , e . eatSpace ( ) ) return null ; C = null ; var n = t . tokenize ( e , t ) ; return ( n || C ) && "comment" != n && ( S = null , t . state = t . state ( C || n , e , t ) , S && ( n = "error" == S ? n + " error" : S ) ) , n } , indent : function ( t , n , o ) { var l = t . context ; if ( t . tokenize . isInAttribute ) return t . tagStart == t . indented ? t . stringStartCol + 1 : t . indented + b ; if ( l && l . noIndent ) return e . Pass ; if ( t . tokenize != i && t . tokenize != r ) return o ? o . match ( /^(\s*)/ ) [ 0 ] . length : 0 ; if ( t . tagName ) return k ? t . tagStart + t . tagName . length + 2 : t . tagStart + b * w ; if ( T && /<!\[CDATA\[/ . test ( n ) ) return 0 ; var a = n && / ^ < ( \ /
} ( navigator . userAgent || navigator . vendor || window . opera ) , e } , _ = "" , j = { bold : { name : "bold" , action : s , className : "fa fa-bold" , title : "Bold (Ctrl+B)" , "default" : ! 0 } , italic : { name : "italic" , action : c , className : "fa fa-italic" , title : "Italic (Ctrl+I)" , "default" : ! 0 } , strikethrough : { name : "strikethrough" , action : u , className : "fa fa-strikethrough" , title : "Strikethrough" } , heading : { name : "heading" , action : f , className : "fa fa-header" , title : "Heading (Ctrl+H)" , "default" : ! 0 } , "heading-smaller" : { name : "heading-smaller" , action : f , className : "fa fa-header fa-header-x fa-header-smaller" , title : "Smaller Heading (Ctrl+H)" } , "heading-bigger" : { name : "heading-bigger" , action : p , className : "fa fa-header fa-header-x fa-header-bigger" , title : "Bigger Heading (Shift+Ctrl+H)" } , "heading-1" : { name : "heading-1" , action : m , className : "fa fa-header fa-header-x fa-header-1" , title : "Big Heading" } , "heading-2" : { name : "heading-2" , action : g , className : "fa fa-header fa-header-x fa-header-2" , title : "Medium Heading" } , "heading-3" : { name : "heading-3" , action : v , className : "fa fa-header fa-header-x fa-header-3" , title : "Small Heading" } , "separator-1" : { name : "separator-1" } , code : { name : "code" , action : d , className : "fa fa-code" , title : "Code (Ctrl+Alt+C)" } , quote : { name : "quote" , action : h , className : "fa fa-quote-left" , title : "Quote (Ctrl+')" , "default" : ! 0 } , "unordered-list" : { name : "unordered-list" , action : y , className : "fa fa-list-ul" , title : "Generic List (Ctrl+L)" , "default" : ! 0 } , "ordered-list" : { name : "ordered-list" , action : x , className : "fa fa-list-ol" , title : "Numbered List (Ctrl+Alt+L)" , "default" : ! 0 } , "separator-2" : { name : "separator-2" } , link : { name : "link" , action : b , className : "fa fa-link" , title : "Create Link (Ctrl+K)" , "default" : ! 0 } , image : { name : "image" , action : w , className : "fa fa-picture-o" , title : "Insert Image (Ctrl+Alt+I)" , "default" : ! 0 } , table : { name : "table" , action : k , className : "fa fa-table" , title : "Insert Table" } , "horizontal-rule" : { name : "horizontal-rule" , action : C , className : "fa fa-minus" , title : "Insert Horizontal Line" } , "separator-3" : { name : "separator-3" } , preview : { name : "preview" , action : M , className : "fa fa-eye no-disable" , title : "Toggle Preview (Ctrl+P)" , "default" : ! 0 } , "side-by-side" : { name : "side-by-side" , action : T , className : "fa fa-columns no-disable no-mobile" , title : "Toggle Side by Side (F9)" , "default" : ! 0 } , fullscreen : { name : "fullscreen" , action : a , className : "fa fa-arrows-alt no-disable no-mobile" , title : "Toggle Fullscreen (F11)" , "default" : ! 0 } , guide : { name : "guide" , action : "http://nextstepwebs.github.io/simplemde-markdown-editor/markdown-guide" , className : "fa fa-question-circle" , title : "Markdown Guide" , "default" : ! 0 } } , q = { link : [ "[" , "](http://)" ] , image : [ "![](http://" , ")" ] , table : [ "" , "\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n" ] , horizontalRule : [ "" , "\n\n-----\n\n" ] } , G = { bold : "**" , italic : "*" } ; I . prototype . markdown = function ( e ) { if ( z ) { var t = { } ; return this . options && this . options . renderingConfig && this . options . renderingConfig . singleLineBreaks !== ! 1 && ( t . breaks = ! 0 ) , this . options && this . options . renderingConfig && this . options . renderingConfig . codeSyntaxHighlighting === ! 0 && window . hljs && ( t . highlight = function ( e ) { return window . hljs . highlightAuto ( e ) . value } ) , z . setOptions ( t ) , z ( e ) } } , I . prototype . render = function ( e ) { if ( e || ( e = this . element || document . getElementsByTagName ( "textarea" ) [ 0 ] ) , ! this . _rendered || this . _rendered !== e ) { this . element = e ; var t = this . options , n = this , i = { } ; for ( var o in R ) ! function ( e ) { i [ r ( e ) ] = function ( ) { R [ e ] ( n ) } } ( o ) ; i . Enter = "newlineAndIndentContinueMarkdownList" , i . Tab = "tabAndIndentMarkdownList" , i [ "Shift-Tab" ] = "shiftTabAndUnindentMarkdownList" , i . F11 = function ( ) { a ( n ) } , i . F9 = function ( ) { T ( n ) } , i . Esc = function ( e ) { e . getOption ( "fullScreen" ) && a ( n ) } , document . addEventListener ( "keydown" , function ( e ) { e = e || window . event , 27 == e . keyCode && n . codemirror . getOption ( "fullScreen" ) && a ( n ) } , ! 1 ) ; var l , s ; t . spellChecker !== ! 1 ? ( l = "spell-checker" , s = t . parsingConfig , s . name = "gfm" , s . gitHubSpice = ! 1 ) : ( l = t . parsingConfig , l . name = "gfm" , l . gitHubSpice = ! 1 ) , this . codemirror = P . fromTextArea ( e , { mode : l , backdrop : s , theme : "paper" , tabSize : void 0 != t . tabSize ? t . tabSize : 2 , indentUnit : void 0 != t . tabSize ? t . tabSize : 2 , indentWithTabs : t . indentWithTabs === ! 1 ? ! 1 : ! 0 , lineNumbers : ! 1 , autofocus : t . autofocus =